浏览代码

Merge pull request #1 from PaulStoffregen/master

Pulling from PaulStoffregen-Audio
dds
Chip Audette 6 年前
父节点
当前提交
977401a4b2
没有帐户链接到提交者的电子邮件
共有 100 个文件被更改,包括 8846 次插入278 次删除
  1. +6
    -0
      Audio.h
  2. +1
    -1
      README.md
  3. +1
    -0
      analyze_fft1024.cpp
  4. +1
    -0
      analyze_fft256.cpp
  5. +1
    -1
      analyze_fft256.h
  6. +1
    -0
      analyze_notefreq.cpp
  7. +1
    -0
      analyze_peak.cpp
  8. +1
    -0
      analyze_print.cpp
  9. +5
    -1
      analyze_rms.cpp
  10. +1
    -0
      analyze_tonedetect.cpp
  11. +2
    -1
      control_ak4558.cpp
  12. +149
    -0
      control_cs42448.cpp
  13. +84
    -0
      control_cs42448.h
  14. +1
    -0
      control_cs4272.cpp
  15. +1
    -0
      control_sgtl5000.cpp
  16. +1
    -0
      control_wm8731.cpp
  17. +1
    -0
      effect_bitcrusher.cpp
  18. +1
    -0
      effect_chorus.cpp
  19. +6
    -3
      effect_delay.cpp
  20. +20
    -4
      effect_delay.h
  21. +50
    -23
      effect_delay_ext.cpp
  22. +4
    -3
      effect_delay_ext.h
  23. +49
    -23
      effect_envelope.cpp
  24. +23
    -13
      effect_envelope.h
  25. +1
    -0
      effect_fade.cpp
  26. +1
    -0
      effect_flange.cpp
  27. +1
    -0
      effect_midside.cpp
  28. +1
    -0
      effect_multiply.cpp
  29. +1
    -0
      effect_reverb.cpp
  30. +78
    -0
      effect_waveshaper.cpp
  31. +44
    -0
      effect_waveshaper.h
  32. +20
    -3
      examples/Effects/Bitcrusher/Bitcrusher.ino
  33. +76
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/ADAT_DrumSamplePlayer.ino
  34. +734
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleCashregister.cpp
  35. +3
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleCashregister.h
  36. +3462
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleGong.cpp
  37. +3
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleGong.h
  38. +752
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleHihat.cpp
  39. +3
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleHihat.h
  40. +327
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleKick.cpp
  41. +3
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleKick.h
  42. +360
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleSnare.cpp
  43. +3
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleSnare.h
  44. +443
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleTomtom.cpp
  45. +3
    -0
      examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleTomtom.h
  46. +18
    -6
      examples/HardwareTesting/PassThroughUSB/PassThroughUSB.ino
  47. +11
    -1
      examples/HardwareTesting/SGTL5000/QuadChannelOutput/QuadChannelOutput.ino
  48. +20
    -5
      examples/HardwareTesting/SdCardTest/SdCardTest.ino
  49. +11
    -1
      examples/HardwareTesting/WavFilePlayerUSB/WavFilePlayerUSB.ino
  50. +23
    -3
      examples/Recorder/Recorder.ino
  51. +3
    -0
      examples/Synthesis/Guitar/chords.h
  52. +19
    -3
      examples/Tutorial/Part_1_03_Playing_Music/Part_1_03_Playing_Music.ino
  53. +18
    -3
      examples/Tutorial/Part_1_04_Blink_While_Playing/Part_1_04_Blink_While_Playing.ino
  54. +18
    -3
      examples/Tutorial/Part_1_05_Do_More_While_Playing/Part_1_05_Do_More_While_Playing.ino
  55. +18
    -3
      examples/Tutorial/Part_2_01_First_Design_Tool_Use/Part_2_01_First_Design_Tool_Use.ino
  56. +18
    -3
      examples/Tutorial/Part_2_02_Mixers/Part_2_02_Mixers.ino
  57. +18
    -3
      examples/Tutorial/Part_2_07_Filters/Part_2_07_Filters.ino
  58. +18
    -3
      examples/Tutorial/Part_3_01_Peak_Detection/Part_3_01_Peak_Detection.ino
  59. +17
    -3
      examples/Tutorial/Part_3_02_Fourier_Transform/Part_3_02_Fourier_Transform.ino
  60. +18
    -3
      examples/Tutorial/Part_3_03_TFT_Display/Part_3_03_TFT_Display.ino
  61. +18
    -3
      examples/Tutorial/TestTutorialKit/TestTutorialKit.ino
  62. +6
    -1
      examples/WavFilePlayer/WavFilePlayer.ino
  63. +9
    -2
      extras/wav2sketch/wav2sketch.c
  64. +1
    -0
      filter_biquad.cpp
  65. +1
    -0
      filter_fir.cpp
  66. +1
    -0
      filter_variable.cpp
  67. 二进制
      gui/img/adat.jpg
  68. 二进制
      gui/img/cs42448.jpg
  69. 二进制
      gui/img/pwm.png
  70. 二进制
      gui/img/tdm.jpg
  71. 二进制
      gui/img/waveshaper.png
  72. +377
    -26
      gui/index.html
  73. +1
    -1
      gui/red/main.js
  74. +30
    -29
      input_adc.cpp
  75. +7
    -5
      input_adc.h
  76. +56
    -48
      input_adcs.cpp
  77. +12
    -12
      input_adcs.h
  78. +3
    -2
      input_i2s.cpp
  79. +1
    -0
      input_i2s_quad.cpp
  80. +146
    -0
      input_tdm.cpp
  81. +48
    -0
      input_tdm.h
  82. +9
    -0
      keywords.txt
  83. +1
    -0
      mixer.cpp
  84. +737
    -0
      output_adat.cpp
  85. +75
    -0
      output_adat.h
  86. +4
    -3
      output_dac.cpp
  87. +8
    -7
      output_dacs.cpp
  88. +15
    -13
      output_i2s.cpp
  89. +1
    -0
      output_i2s_quad.cpp
  90. +2
    -1
      output_pt8211.cpp
  91. +1
    -0
      output_pwm.cpp
  92. +1
    -0
      output_spdif.cpp
  93. +226
    -0
      output_tdm.cpp
  94. +52
    -0
      output_tdm.h
  95. +1
    -0
      play_memory.cpp
  96. +1
    -0
      play_queue.cpp
  97. +1
    -0
      play_sd_raw.cpp
  98. +15
    -6
      play_sd_wav.cpp
  99. +1
    -0
      play_serialflash_raw.cpp
  100. +0
    -0
      record_queue.cpp

+ 6
- 0
Audio.h 查看文件

@@ -69,6 +69,7 @@
#include "control_wm8731.h"
#include "control_ak4558.h"
#include "control_cs4272.h"
#include "control_cs42448.h"
#include "effect_bitcrusher.h"
#include "effect_chorus.h"
#include "effect_fade.h"
@@ -79,6 +80,7 @@
#include "effect_delay_ext.h"
#include "effect_midside.h"
#include "effect_reverb.h"
#include "effect_waveshaper.h"
#include "filter_biquad.h"
#include "filter_fir.h"
#include "filter_variable.h"
@@ -86,6 +88,7 @@
#include "input_adcs.h"
#include "input_i2s.h"
#include "input_i2s_quad.h"
#include "input_tdm.h"
#include "mixer.h"
#include "output_dac.h"
#include "output_dacs.h"
@@ -94,6 +97,8 @@
#include "output_pwm.h"
#include "output_spdif.h"
#include "output_pt8211.h"
#include "output_tdm.h"
#include "output_adat.h"
#include "play_memory.h"
#include "play_queue.h"
#include "play_sd_raw.h"
@@ -108,5 +113,6 @@
#include "synth_pinknoise.h"
#include "synth_karplusstrong.h"
#include "synth_simple_drum.h"
#include "synth_pwm.h"

#endif

+ 1
- 1
README.md 查看文件

@@ -25,7 +25,7 @@ Audio System Design Tool

Use this graphical tool to design your audio project. Easily browse the library's many features, connect objects, export to Arduino code, and quickly access details for the functions each object provides for you to control it from your Arduino sketch!

http://www.pjrc.com/teensy/gui/
http://www.pjrc.com/teensy/gui/index.html


Supported Hardware

+ 1
- 0
analyze_fft1024.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "analyze_fft1024.h"
#include "sqrt_integer.h"
#include "utility/dspinst.h"

+ 1
- 0
analyze_fft256.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "analyze_fft256.h"
#include "sqrt_integer.h"
#include "utility/dspinst.h"

+ 1
- 1
analyze_fft256.h 查看文件

@@ -110,7 +110,7 @@ private:
uint8_t naverage;
#endif
uint8_t count;
bool outputflag;
volatile bool outputflag;
audio_block_t *inputQueueArray[1];
arm_cfft_radix4_instance_q15 fft_inst;
};

+ 1
- 0
analyze_notefreq.cpp 查看文件

@@ -20,6 +20,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "analyze_notefreq.h"
#include "utility/dspinst.h"
#include "arm_math.h"

+ 1
- 0
analyze_peak.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "analyze_peak.h"

void AudioAnalyzePeak::update(void)

+ 1
- 0
analyze_print.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "analyze_print.h"

#define STATE_IDLE 0 // doing nothing

+ 5
- 1
analyze_rms.cpp 查看文件

@@ -25,13 +25,17 @@
*/


#include <Arduino.h>
#include "analyze_rms.h"
#include "utility/dspinst.h"

void AudioAnalyzeRMS::update(void)
{
audio_block_t *block = receiveReadOnly();
if (!block) return;
if (!block) {
count++;
return;
}
#if defined(KINETISK)
uint32_t *p = (uint32_t *)(block->data);
uint32_t *end = p + AUDIO_BLOCK_SAMPLES/2;

+ 1
- 0
analyze_tonedetect.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "analyze_tonedetect.h"
#include "utility/dspinst.h"


+ 2
- 1
control_ak4558.cpp 查看文件

@@ -5,6 +5,7 @@
*
*/
#include <Arduino.h>
#include "control_ak4558.h"
#include "Wire.h"

@@ -298,4 +299,4 @@ bool AudioControlAK4558::volumeRight(float n)
Serial.println(registers[AK4558_ROUT_VOL], BIN);
#endif
return ret;
}
}

+ 149
- 0
control_cs42448.cpp 查看文件

@@ -0,0 +1,149 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
* open source software by purchasing Teensy or other PJRC products.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "control_cs42448.h"
#include "Wire.h"


#define CS42448_Chip_ID 0x01
#define CS42448_Power_Control 0x02
#define CS42448_Functional_Mode 0x03
#define CS42448_Interface_Formats 0x04
#define CS42448_ADC_Control_DAC_DeEmphasis 0x05
#define CS42448_Transition_Control 0x06
#define CS42448_DAC_Channel_Mute 0x07
#define CS42448_AOUT1_Volume_Control 0x08
#define CS42448_AOUT2_Volume_Control 0x09
#define CS42448_AOUT3_Volume_Control 0x0A
#define CS42448_AOUT4_Volume_Control 0x0B
#define CS42448_AOUT5_Volume_Control 0x0C
#define CS42448_AOUT6_Volume_Control 0x0D
#define CS42448_AOUT7_Volume_Control 0x0E
#define CS42448_AOUT8_Volume_Control 0x0F
#define CS42448_DAC_Channel_Invert 0x10
#define CS42448_AIN1_Volume_Control 0x11
#define CS42448_AIN2_Volume_Control 0x12
#define CS42448_AIN3_Volume_Control 0x13
#define CS42448_AIN4_Volume_Control 0x14
#define CS42448_AIN5_Volume_Control 0x15
#define CS42448_AIN6_Volume_Control 0x16
#define CS42448_ADC_Channel_Invert 0x17
#define CS42448_Status_Control 0x18
#define CS42448_Status 0x19
#define CS42448_Status_Mask 0x1A
#define CS42448_MUTEC_Pin_Control 0x1B

// 4.9 Recommended Power-Up Sequence
// 1. Hold RST low until the power supply and clocks are stable. In this state,
// the control port is reset to its default settings and VQ will remain low.
// 2. Bring RST high. The device will initially be in a low power state with VQ
// low. All features will default as described in the "Register Quick Reference"
// on page 40.
// 3. Perform a write operation to the Power Control register ("Power Control
// (Address 02h)" on page 43) to set bit 0 to a '1'b. This will place the
// device in a power down state.
// 4. Load the desired register settings while keeping the PDN bit set to '1'b.
// 5. Mute all DACs. Muting the DACs suppresses any noise associated with the
// CODEC's first initialization after power is applied.
// 6. Set the PDN bit in the power control register to '0'b. VQ will ramp to
// approximately VA/2 according to the Popguard specification in section
// "Popguard" on page 29.
// 7. Following approximately 2000 LRCK cycles, the device is initialized and
// ready for normal operation.
// 8. After the CODEC is initialized, wait ~90 LRCK cycles (~1.9 ms @48 kHz) and
// then un-mute the DACs.
// 9. Normal operation begins.

static const uint8_t default_config[] = {
0xF4, // CS42448_Functional_Mode = slave mode, MCLK 25.6 MHz max
0x76, // CS42448_Interface_Formats = TDM mode
0x1C, // CS42448_ADC_Control_DAC_DeEmphasis = single ended ADC
0x63, // CS42448_Transition_Control = soft vol control
0xFF // CS42448_DAC_Channel_Mute = all outputs mute
};

bool AudioControlCS42448::enable(void)
{
Wire.begin();
// TODO: wait for reset signal high??
if (!write(CS42448_Power_Control, 0xFF)) return false; // power down
if (!write(CS42448_Functional_Mode, default_config, sizeof(default_config))) return false;
if (!write(CS42448_Power_Control, 0)) return false; // power up
return true;
}

bool AudioControlCS42448::volumeInteger(uint32_t n)
{
uint8_t data[9];
data[0] = 0;
for (int i=1; i < 9; i++) {
data[i] = n;
}
return write(CS42448_DAC_Channel_Mute, data, 9);
}

bool AudioControlCS42448::volumeInteger(int channel, uint32_t n)
{

return true;
}

bool AudioControlCS42448::inputLevelInteger(int32_t n)
{

return true;
}

bool AudioControlCS42448::inputLevelInteger(int chnnel, int32_t n)
{

return true;
}

bool AudioControlCS42448::write(uint32_t address, uint32_t data)
{
Wire.beginTransmission(i2c_addr);
Wire.write(address);
Wire.write(data);
if (Wire.endTransmission() == 0) return true;
return false;
}

bool AudioControlCS42448::write(uint32_t address, const void *data, uint32_t len)
{
Wire.beginTransmission(i2c_addr);
Wire.write(address | 0x80);
const uint8_t *p = (const uint8_t *)data;
const uint8_t *end = p + len;
while (p < end) {
Wire.write(*p++);
}
if (Wire.endTransmission() == 0) return true;
return false;
}



+ 84
- 0
control_cs42448.h 查看文件

@@ -0,0 +1,84 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
* open source software by purchasing Teensy or other PJRC products.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#ifndef control_cs42448_h_
#define control_cs42448_h_

#include "AudioControl.h"
#include <math.h>

class AudioControlCS42448 : public AudioControl
{
public:
AudioControlCS42448(void) : i2c_addr(0x48), muted(true) { }
void setAddress(uint8_t addr) {
i2c_addr = 0x48 | (addr & 3);
}
bool enable(void);
bool disable(void) {
return false;
}
bool volume(float level) {
return volumeInteger(volumebyte(level));
}
bool inputLevel(float level) {
return inputLevelInteger(inputlevelbyte(level));
}
bool inputSelect(int n) {
return (n == 0) ? true : false;
}
bool volume(int channel, float level) {
if (channel < 1 || channel > 8) return false;
return volumeInteger(channel, volumebyte(level));
}
bool inputLevel(int channel, float level) {
if (channel < 1 || channel > 6) return false;
return inputLevelInteger(channel, inputlevelbyte(level));
}
private:
bool volumeInteger(uint32_t n);
bool volumeInteger(int channel, uint32_t n);
bool inputLevelInteger(int32_t n);
bool inputLevelInteger(int chnnel, int32_t n);
// convert level to volume byte, section 6.9.1, page 50
uint32_t volumebyte(float level) {
if (level >= 1.0) return 0;
if (level <= 0.0000003981) return 128;
return roundf(log10f(level) * -20.0);
}
// convert level to input gain, section 6.11.1, page 51
int32_t inputlevelbyte(float level) {
if (level > 15.8489) return 48;
if (level < 0.00063095734) return -128;
return roundf(log10f(level) * 40.0);
}
bool write(uint32_t address, uint32_t data);
bool write(uint32_t address, const void *data, uint32_t len);
uint8_t i2c_addr;
bool muted;
};

#endif

+ 1
- 0
control_cs4272.cpp 查看文件

@@ -27,6 +27,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "control_cs4272.h"
#include "Wire.h"


+ 1
- 0
control_sgtl5000.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "control_sgtl5000.h"
#include "Wire.h"


+ 1
- 0
control_wm8731.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "control_wm8731.h"
#include "Wire.h"


+ 1
- 0
effect_bitcrusher.cpp 查看文件

@@ -27,6 +27,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_bitcrusher.h"

void AudioEffectBitcrusher::update(void)

+ 1
- 0
effect_chorus.cpp 查看文件

@@ -20,6 +20,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_chorus.h"

/******************************************************************/

+ 6
- 3
effect_delay.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_delay.h"

void AudioEffectDelay::update(void)
@@ -38,7 +39,7 @@ void AudioEffectDelay::update(void)
tail = tailindex;
if (++head >= DELAY_QUEUE_SIZE) head = 0;
if (head == tail) {
release(queue[tail]);
if (queue[tail] != NULL) release(queue[tail]);
if (++tail >= DELAY_QUEUE_SIZE) tail = 0;
}
queue[head] = receiveReadOnly();
@@ -70,8 +71,10 @@ void AudioEffectDelay::update(void)
if (count > maxblocks) {
count -= maxblocks;
do {
release(queue[tail]);
queue[tail] = NULL;
if (queue[tail] != NULL) {
release(queue[tail]);
queue[tail] = NULL;
}
if (++tail >= DELAY_QUEUE_SIZE) tail = 0;
} while (--count > 0);
}

+ 20
- 4
effect_delay.h 查看文件

@@ -30,7 +30,19 @@
#include "AudioStream.h"
#include "utility/dspinst.h"

#define DELAY_QUEUE_SIZE 117
#if defined(__MK66FX1M0__)
// 2.41 second maximum on Teensy 3.6
#define DELAY_QUEUE_SIZE (106496 / AUDIO_BLOCK_SAMPLES)
#elif defined(__MK64FX512__)
// 1.67 second maximum on Teensy 3.5
#define DELAY_QUEUE_SIZE (73728 / AUDIO_BLOCK_SAMPLES)
#elif defined(__MK20DX256__)
// 0.45 second maximum on Teensy 3.1 & 3.2
#define DELAY_QUEUE_SIZE (19826 / AUDIO_BLOCK_SAMPLES)
#else
// 0.14 second maximum on Teensy 3.0
#define DELAY_QUEUE_SIZE (6144 / AUDIO_BLOCK_SAMPLES)
#endif

class AudioEffectDelay : public AudioStream
{
@@ -88,10 +100,14 @@ private:
maxblocks = max;
}
uint8_t activemask; // which output channels are active
uint8_t headindex; // head index (incoming) data in quueu
uint8_t tailindex; // tail index (outgoing) data from queue
uint8_t maxblocks; // number of blocks needed in queue
uint16_t headindex; // head index (incoming) data in quueu
uint16_t tailindex; // tail index (outgoing) data from queue
uint16_t maxblocks; // number of blocks needed in queue
#if DELAY_QUEUE_SIZE * AUDIO_BLOCK_SAMPLES < 65535
uint16_t position[8]; // # of sample delay for each channel
#else
uint32_t position[8]; // # of sample delay for each channel
#endif
audio_block_t *queue[DELAY_QUEUE_SIZE];
audio_block_t *inputQueueArray[1];
};

+ 50
- 23
effect_delay_ext.cpp 查看文件

@@ -24,10 +24,21 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_delay_ext.h"

//#define INTERNAL_TEST

// While 20 MHz (Teensy actually uses 16 MHz in most cases) and even 24 MHz
// have worked well in testing at room temperature with 3.3V power, to fully
// meet all the worst case timing specs, the SPI clock low time would need
// to be 40ns (12.5 MHz clock) for the single chip case and 51ns (9.8 MHz
// clock) for the 6-chip memoryboard with 74LCX126 buffers.
//
// Timing analysis and info is here:
// https://forum.pjrc.com/threads/29276-Limits-of-delay-effect-in-audio-library?p=97506&viewfull=1#post97506
#define SPISETTING SPISettings(20000000, MSBFIRST, SPI_MODE0)

// Use these with the audio adaptor board (should be adjustable by the user...)
#define SPIRAM_MOSI_PIN 7
#define SPIRAM_MISO_PIN 12
@@ -112,6 +123,13 @@ void AudioEffectDelayExternal::initialize(AudioEffectDelayMemoryType_t type, uin
activemask = 0;
head_offset = 0;
memory_type = type;

SPI.setMOSI(SPIRAM_MOSI_PIN);
SPI.setMISO(SPIRAM_MISO_PIN);
SPI.setSCK(SPIRAM_SCK_PIN);

SPI.begin();
if (type == AUDIO_MEMORY_23LC1024) {
#ifdef INTERNAL_TEST
memsize = 8000;
@@ -127,7 +145,16 @@ void AudioEffectDelayExternal::initialize(AudioEffectDelayMemoryType_t type, uin
pinMode(MEMBOARD_CS2_PIN, OUTPUT);
digitalWriteFast(MEMBOARD_CS0_PIN, LOW);
digitalWriteFast(MEMBOARD_CS1_PIN, LOW);
digitalWriteFast(MEMBOARD_CS2_PIN, LOW);
digitalWriteFast(MEMBOARD_CS2_PIN, LOW);
} else if (type == AUDIO_MEMORY_CY15B104) {
#ifdef INTERNAL_TEST
memsize = 8000;
#else
memsize = 262144;
#endif
pinMode(SPIRAM_CS_PIN, OUTPUT);
digitalWriteFast(SPIRAM_CS_PIN, HIGH);
} else {
return;
}
@@ -141,11 +168,6 @@ void AudioEffectDelayExternal::initialize(AudioEffectDelayMemoryType_t type, uin
allocated[type] += samples;
memory_length = samples;

SPI.setMOSI(SPIRAM_MOSI_PIN);
SPI.setMISO(SPIRAM_MISO_PIN);
SPI.setSCK(SPIRAM_SCK_PIN);

SPI.begin();
zero(0, memory_length);
}

@@ -154,18 +176,6 @@ void AudioEffectDelayExternal::initialize(AudioEffectDelayMemoryType_t type, uin
static int16_t testmem[8000]; // testing only
#endif


#define SPISETTING SPISettings(20000000, MSBFIRST, SPI_MODE0)

// While 20 MHz (Teensy actually uses 16 MHz in most cases) and even 24 MHz
// have worked well in testing at room temperature with 3.3V power, to fully
// meet all the worst case timing specs, the SPI clock low time would need
// to be 40ns (12.5 MHz clock) for the single chip case and 51ns (9.8 MHz
// clock) for the 6-chip memoryboard with 74LCX126 buffers.
//
// Timing analysis and info is here:
// https://forum.pjrc.com/threads/29276-Limits-of-delay-effect-in-audio-library?p=97506&viewfull=1#post97506

void AudioEffectDelayExternal::read(uint32_t offset, uint32_t count, int16_t *data)
{
uint32_t addr = memory_begin + offset;
@@ -173,7 +183,8 @@ void AudioEffectDelayExternal::read(uint32_t offset, uint32_t count, int16_t *da
#ifdef INTERNAL_TEST
while (count) { *data++ = testmem[addr++]; count--; } // testing only
#else
if (memory_type == AUDIO_MEMORY_23LC1024) {
if (memory_type == AUDIO_MEMORY_23LC1024 ||
memory_type == AUDIO_MEMORY_CY15B104) {
addr *= 2;
SPI.beginTransaction(SPISETTING);
digitalWriteFast(SPIRAM_CS_PIN, LOW);
@@ -232,7 +243,26 @@ void AudioEffectDelayExternal::write(uint32_t offset, uint32_t count, const int1
}
digitalWriteFast(SPIRAM_CS_PIN, HIGH);
SPI.endTransaction();
} else if (memory_type == AUDIO_MEMORY_MEMORYBOARD) {
} else if (memory_type == AUDIO_MEMORY_CY15B104) {
addr *= 2;

SPI.beginTransaction(SPISETTING);
digitalWriteFast(SPIRAM_CS_PIN, LOW);
SPI.transfer(0x06); //write-enable before every write
digitalWriteFast(SPIRAM_CS_PIN, HIGH);
asm volatile ("NOP\n NOP\n NOP\n NOP\n NOP\n NOP\n");
digitalWriteFast(SPIRAM_CS_PIN, LOW);
SPI.transfer16((0x02 << 8) | (addr >> 16));
SPI.transfer16(addr & 0xFFFF);
while (count) {
int16_t w = 0;
if (data) w = *data++;
SPI.transfer16(w);
count--;
}
digitalWriteFast(SPIRAM_CS_PIN, HIGH);
SPI.endTransaction();
} else if (memory_type == AUDIO_MEMORY_MEMORYBOARD) {
SPI.beginTransaction(SPISETTING);
while (count) {
uint32_t chip = (addr >> 16) + 1;
@@ -259,6 +289,3 @@ void AudioEffectDelayExternal::write(uint32_t offset, uint32_t count, const int1
}
#endif
}




+ 4
- 3
effect_delay_ext.h 查看文件

@@ -31,9 +31,10 @@
#include "spi_interrupt.h"

enum AudioEffectDelayMemoryType_t {
AUDIO_MEMORY_23LC1024 = 0,
AUDIO_MEMORY_MEMORYBOARD = 1,
AUDIO_MEMORY_UNDEFINED = 2
AUDIO_MEMORY_23LC1024 = 0, // 128k x 8 S-RAM
AUDIO_MEMORY_MEMORYBOARD = 1,
AUDIO_MEMORY_CY15B104 = 2, // 512k x 8 F-RAM
AUDIO_MEMORY_UNDEFINED = 3
};

class AudioEffectDelayExternal : public AudioStream

+ 49
- 23
effect_envelope.cpp 查看文件

@@ -1,5 +1,5 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com
* Copyright (c) 2017, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_envelope.h"

#define STATE_IDLE 0
@@ -33,19 +34,26 @@
#define STATE_DECAY 4
#define STATE_SUSTAIN 5
#define STATE_RELEASE 6
#define STATE_FORCED 7

void AudioEffectEnvelope::noteOn(void)
{
__disable_irq();
mult = 0;
count = delay_count;
if (count > 0) {
state = STATE_DELAY;
inc = 0;
} else {
state = STATE_ATTACK;
count = attack_count;
inc = (0x10000 / count) >> 3;
if (state == STATE_IDLE || state == STATE_DELAY || release_forced_count == 0) {
mult_hires = 0;
count = delay_count;
if (count > 0) {
state = STATE_DELAY;
inc_hires = 0;
} else {
state = STATE_ATTACK;
count = attack_count;
inc_hires = 0x40000000 / (int32_t)count;
}
} else if (state != STATE_FORCED) {
state = STATE_FORCED;
count = release_forced_count;
inc_hires = (-mult_hires) / (int32_t)count;
}
__enable_irq();
}
@@ -53,10 +61,11 @@ void AudioEffectEnvelope::noteOn(void)
void AudioEffectEnvelope::noteOff(void)
{
__disable_irq();
state = STATE_RELEASE;
count = release_count;
mult = sustain_mult;
inc = (-mult / ((int32_t)count << 3));
if (state != STATE_IDLE && state != STATE_FORCED) {
state = STATE_RELEASE;
count = release_count;
inc_hires = (-mult_hires) / (int32_t)count;
}
__enable_irq();
}

@@ -82,24 +91,24 @@ void AudioEffectEnvelope::update(void)
count = hold_count;
if (count > 0) {
state = STATE_HOLD;
mult = 0x10000;
inc = 0;
mult_hires = 0x40000000;
inc_hires = 0;
} else {
count = decay_count;
state = STATE_DECAY;
inc = ((sustain_mult - 0x10000) / ((int32_t)count << 3));
count = decay_count;
inc_hires = (sustain_mult - 0x40000000) / (int32_t)count;
}
continue;
} else if (state == STATE_HOLD) {
state = STATE_DECAY;
count = decay_count;
inc = ((sustain_mult - 0x10000) / (int32_t)count) >> 3;
inc_hires = (sustain_mult - 0x40000000) / (int32_t)count;
continue;
} else if (state == STATE_DECAY) {
state = STATE_SUSTAIN;
count = 0xFFFF;
mult = sustain_mult;
inc = 0;
mult_hires = sustain_mult;
inc_hires = 0;
} else if (state == STATE_SUSTAIN) {
count = 0xFFFF;
} else if (state == STATE_RELEASE) {
@@ -111,14 +120,28 @@ void AudioEffectEnvelope::update(void)
*p++ = 0;
}
break;
} else if (state == STATE_FORCED) {
mult_hires = 0;
count = delay_count;
if (count > 0) {
state = STATE_DELAY;
inc_hires = 0;
} else {
state = STATE_ATTACK;
count = attack_count;
inc_hires = 0x40000000 / (int32_t)count;
}
} else if (state == STATE_DELAY) {
state = STATE_ATTACK;
count = attack_count;
inc = (0x10000 / count) >> 3;
inc_hires = 0x40000000 / count;
continue;
}
}
// process 8 samples, using only mult and inc

int32_t mult = mult_hires >> 14;
int32_t inc = inc_hires >> 17;
// process 8 samples, using only mult and inc (16 bit resolution)
sample12 = *p++;
sample34 = *p++;
sample56 = *p++;
@@ -148,6 +171,9 @@ void AudioEffectEnvelope::update(void)
*p++ = sample34;
*p++ = sample56;
*p++ = sample78;
// adjust the long-term gain using 30 bit resolution (fix #102)
// https://github.com/PaulStoffregen/Audio/issues/102
mult_hires += inc_hires;
count--;
}
transmit(block);

+ 23
- 13
effect_envelope.h 查看文件

@@ -1,5 +1,5 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2014, Paul Stoffregen, paul@pjrc.com
* Copyright (c) 2017, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
@@ -37,12 +37,13 @@ class AudioEffectEnvelope : public AudioStream
public:
AudioEffectEnvelope() : AudioStream(1, inputQueueArray) {
state = 0;
delay(0.0); // default values...
attack(1.5);
hold(0.5);
decay(15.0);
sustain(0.667);
release(30.0);
delay(0.0f); // default values...
attack(10.5f);
hold(2.5f);
decay(35.0f);
sustain(0.5f);
release(300.0f);
releaseNoteOn(5.0f);
}
void noteOn();
void noteOff();
@@ -51,20 +52,27 @@ public:
}
void attack(float milliseconds) {
attack_count = milliseconds2count(milliseconds);
if (attack_count == 0) attack_count = 1;
}
void hold(float milliseconds) {
hold_count = milliseconds2count(milliseconds);
}
void decay(float milliseconds) {
decay_count = milliseconds2count(milliseconds);
if (decay_count == 0) decay_count = 1;
}
void sustain(float level) {
if (level < 0.0) level = 0;
else if (level > 1.0) level = 1.0;
sustain_mult = level * 65536.0;
sustain_mult = level * 1073741824.0;
}
void release(float milliseconds) {
release_count = milliseconds2count(milliseconds);
if (release_count == 0) release_count = 1;
}
void releaseNoteOn(float milliseconds) {
release_forced_count = milliseconds2count(milliseconds);
if (release_count == 0) release_count = 1;
}
using AudioStream::release;
virtual void update(void);
@@ -72,15 +80,16 @@ private:
uint16_t milliseconds2count(float milliseconds) {
if (milliseconds < 0.0) milliseconds = 0.0;
uint32_t c = ((uint32_t)(milliseconds*SAMPLES_PER_MSEC)+7)>>3;
if (c > 1103) return 1103; // allow up to 200 ms
if (c > 65535) c = 65535; // allow up to 11.88 seconds
return c;
}
audio_block_t *inputQueueArray[1];
// state
uint8_t state; // idle, delay, attack, hold, decay, sustain, release
uint16_t count; // how much time remains in this state, in 8 sample units
int32_t mult; // attenuation, 0=off, 0x10000=unity gain
int32_t inc; // amount to change mult on each sample
uint8_t state; // idle, delay, attack, hold, decay, sustain, release, forced
uint16_t count; // how much time remains in this state, in 8 sample units
int32_t mult_hires; // attenuation, 0=off, 0x40000000=unity gain
int32_t inc_hires; // amount to change mult_hires every 8 samples

// settings
uint16_t delay_count;
uint16_t attack_count;
@@ -88,6 +97,7 @@ private:
uint16_t decay_count;
int32_t sustain_mult;
uint16_t release_count;
uint16_t release_forced_count;

};


+ 1
- 0
effect_fade.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_fade.h"
#include "utility/dspinst.h"


+ 1
- 0
effect_flange.cpp 查看文件

@@ -20,6 +20,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_flange.h"
#include "arm_math.h"


+ 1
- 0
effect_midside.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_midside.h"

void AudioEffectMidSide::update(void)

+ 1
- 0
effect_multiply.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "effect_multiply.h"

void AudioEffectMultiply::update(void)

+ 1
- 0
effect_reverb.cpp 查看文件

@@ -22,6 +22,7 @@

// https://github.com/joaoRossiFilho/teensy_reverb

#include <Arduino.h>
#include "effect_reverb.h"
#include "utility/dspinst.h"
#include "math_helper.h"

+ 78
- 0
effect_waveshaper.cpp 查看文件

@@ -0,0 +1,78 @@
/*
* Waveshaper for Teensy 3.X audio
*
* Copyright (c) 2017 Damien Clarke, http://damienclarke.me
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

#include <Arduino.h>
#include "effect_waveshaper.h"

AudioEffectWaveshaper::~AudioEffectWaveshaper()
{
if(this->waveshape) {
delete [] this->waveshape;
}
}

void AudioEffectWaveshaper::shape(float* waveshape, int length)
{
// length must be bigger than 1 and equal to a power of two + 1
// anything else means we don't continue
if(!waveshape || length < 2 || length > 32769 || ((length - 1) & (length - 2))) return;

if(this->waveshape) {
delete [] this->waveshape;
}
this->waveshape = new int16_t[length];
for(int i = 0; i < length; i++) {
this->waveshape[i] = 32767 * waveshape[i];
}

// set lerpshift to the number of bits to shift while interpolating
// to cover the entire waveshape over a uint16_t input range
int index = length - 1;
lerpshift = 16;
while (index >>= 1) --lerpshift;
}

void AudioEffectWaveshaper::update(void)
{
if(!waveshape) return;

audio_block_t *block;
block = receiveWritable();
if (!block) return;

uint16_t x, xa;
int16_t i, ya, yb;
for (i = 0; i < AUDIO_BLOCK_SAMPLES; i++) {
// bring int16_t data into uint16_t range
x = block->data[i] + 32768;
// lerp waveshape (from http://coranac.com/tonc/text/fixed.htm)
xa = x >> lerpshift;
ya = waveshape[xa];
yb = waveshape[xa + 1];
block->data[i] = ya + ((yb - ya) * (x - (xa << lerpshift)) >> lerpshift);
}

transmit(block);
release(block);
}

+ 44
- 0
effect_waveshaper.h 查看文件

@@ -0,0 +1,44 @@
/*
* Waveshaper for Teensy 3.X audio
*
* Copyright (c) 2017 Damien Clarke, http://damienclarke.me
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

#ifndef effect_waveshaper_h_
#define effect_waveshaper_h_

#include "Arduino.h"
#include "AudioStream.h"

class AudioEffectWaveshaper : public AudioStream
{
public:
AudioEffectWaveshaper(void): AudioStream(1, inputQueueArray) {}
~AudioEffectWaveshaper();
virtual void update(void);
void shape(float* waveshape, int length);
private:
audio_block_t *inputQueueArray[1];
int16_t* waveshape;
int16_t lerpshift;
};

#endif

+ 20
- 3
examples/Effects/Bitcrusher/Bitcrusher.ino 查看文件

@@ -26,6 +26,23 @@ AudioConnection patchCord4(right_BitCrusher, 0, headphones, 1);
//
AudioControlSGTL5000 audioShield;


// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13


// Bounce objects to read six pushbuttons (pins 0-5)
//
Bounce button0 = Bounce(0, 5); // cycles the bitcrusher through all bitdepths
@@ -66,9 +83,9 @@ void setup() {
// sound can play simultaneously without clipping

//SDCard Initialise
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
// stop here, but print a message repetitively
while (1) {
Serial.println("Unable to access the SD card");

+ 76
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/ADAT_DrumSamplePlayer.ino 查看文件

@@ -0,0 +1,76 @@
// ADAT 8 channel Toslink output test, by Ernstjan Freriks
// https://www.youtube.com/watch?v=e5ov3q02zxo
// https://forum.pjrc.com/threads/28639-S-pdif?p=159530&viewfull=1#post159530

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// WAV files converted to code by wav2sketch
#include "AudioSampleSnare.h" // http://www.freesound.org/people/KEVOY/sounds/82583/
#include "AudioSampleTomtom.h" // http://www.freesound.org/people/zgump/sounds/86334/
#include "AudioSampleHihat.h" // http://www.freesound.org/people/mhc/sounds/102790/
#include "AudioSampleKick.h" // http://www.freesound.org/people/DWSD/sounds/171104/
#include "AudioSampleGong.h" // http://www.freesound.org/people/juskiddink/sounds/86773/
#include "AudioSampleCashregister.h" // http://www.freesound.org/people/kiddpark/sounds/201159/

// Create the Audio components. These should be created in the
// order data flows, inputs/sources -> processing -> outputs
//
AudioPlayMemory sound0;
AudioPlayMemory sound1; // five memory players, so we can play
AudioPlayMemory sound2; // all five sounds simultaneously
AudioPlayMemory sound3;
AudioPlayMemory sound4;
AudioPlayMemory sound5;

// GUItool: begin automatically generated code
AudioSynthWaveform sine1;
AudioOutputADAT adat1;
AudioConnection patchCord1(sine1, 0, adat1, 0);
AudioConnection patchCord2(sine1, 0, adat1, 1);
AudioConnection patchCord3(sound0, 0, adat1, 2);
AudioConnection patchCord4(sound1, 0, adat1, 3);
AudioConnection patchCord5(sound2, 0, adat1, 4);
AudioConnection patchCord6(sound4, 0, adat1, 5);
AudioConnection patchCord7(sound5, 0, adat1, 6);
// GUItool: end automatically generated code

void setup() {
AudioMemory(10);
sine1.begin(WAVEFORM_SINE);
sine1.frequency(2000);

}

// the loop() methor runs over and over again,
// as long as the board has power

void loop() {
sine1.amplitude(1.0);

sound0.play(AudioSampleKick);

delay(250);

sound1.play(AudioSampleHihat);

delay(250);
sound1.play(AudioSampleHihat);
sound2.play(AudioSampleSnare);

delay(250);

sound1.play(AudioSampleHihat);

delay(250);

sound0.play(AudioSampleKick);
sound3.play(AudioSampleGong);

delay(1000);
}

+ 734
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleCashregister.cpp 查看文件

@@ -0,0 +1,734 @@
// Audio data converted from WAV file by wav2sketch

#include "AudioSampleCashregister.h"

// Converted from cashregister.wav, using 22050 Hz, u-law encoding
const unsigned int AudioSampleCashregister[5809] = {
0x02005AB4,0x82060707,0x03010301,0x08038287,0x81820200,0x09120407,0x15091108,0x02080611,
0x0D050D11,0x8008150C,0x93810480,0x000D8890,0x0A060406,0x06000681,0x80828702,0x89928405,
0x04820983,0x8C860D05,0x880D0004,0x84000B0B,0x8C8D8C8F,0x84829181,0x14860600,0x0A0C080C,
0x84878006,0x908B8B8D,0x0000858D,0x82800710,0x84820286,0x8E838103,0x85088680,0x0C820681,
0x06020B00,0x8189060B,0x93900105,0x9B99900F,0x9AA41F9D,0xB107A785,0x8AB10189,0xAE98A9B1,
0x92AEA192,0xA608A4A3,0x09A8A006,0x87A51AA3,0xAC1A830D,0x131FA831,0x30A23892,0x8B20261B,
0x8C109A2A,0x1D071116,0x20962589,0x05858012,0xAA92980E,0x948BA290,0x8FA58CA0,0xA10C9704,
0x88878807,0x8F988586,0x868E9082,0x288F0F04,0x00062305,0x8F0C930A,0x9CA6A2A0,0x96929A9E,
0xA0899401,0x95830B80,0x8E03A59F,0x1F810F03,0x9E17201B,0x1E1E1396,0xA6A3878B,0xA79E968D,
0x8C9C8886,0x239A959D,0x9CA69391,0xA1841610,0x0418A5A7,0x86039582,0xAD871C25,0xA19A9288,
0x15A1A38F,0xA2A01A82,0x15AC039C,0x84AD9BA4,0x078F952A,0xAC229C9E,0x18088884,0xB0A69F16,
0x24263180,0xA59E1E9A,0xB3A5931D,0x51350415,0x26444C4F,0xBFC0C01A,0xB3AA998C,0xC6C7CBD5,
0xC14F46C5,0xD7C347BA,0x473E3743,0x5550535E,0x51C44DA7,0xD84614C4,0xE4C4D2B9,0x96D2C2D3,
0x964850BC,0xD8A0D647,0x4D4644C2,0xC3D355D3,0x20B3A0C8,0xD4C1D24E,0x4540CCD5,0x37583021,
0x4050A91E,0x29CDD0BD,0x91B70733,0x8FD5CECC,0xC1D339D4,0x4421A5B1,0x525D505F,0x43474257,
0x44445256,0x4AC43056,0x45423453,0x45373B42,0x49945257,0x58AEAB30,0xAC47464D,0x33493627,
0xC4803034,0xA793A1C3,0xB9A2C0BC,0xC5B7B0C2,0xC7B8C2CC,0x231887D0,0xBEBEB5BC,0xB9BCC3CA,
0xD1B3213F,0x3C81CDD0,0xCFC0BC00,0x373F25C3,0xA3932C38,0x423830A4,0x36993141,0x82465146,
0x8D220C9F,0x52A2D2C6,0x3E3A2228,0x3F07C133,0x4A433645,0x46338E42,0x3627A509,0x9D35352A,
0x30C6C097,0x32182041,0x4C1BB630,0xB9B8483D,0x37442A3A,0xCBB9A240,0xC2D6D7D0,0xCBBA39AE,
0xC0C2ACC7,0xC3B2BD31,0x311A30B4,0x933B4F05,0x4847B6C0,0x98BA1940,0x36433834,0x2703A742,
0xBEA5A83D,0xDCB449AC,0xCDCB4AB6,0xD5D9CED0,0xD10240CF,0x404F52C1,0xC25948B7,0x63664C52,
0x59606560,0x5060624F,0x14556750,0x6252E033,0x58D6CC43,0xB343CF2C,0xB942D6A9,0xBED7D5EB,
0x4704CFD4,0xECECE9D1,0xC5CFE1E8,0x4A2D6162,0x402E5E64,0xDC153748,0x45A2D6E0,0x0DC74CB0,
0xBDCBAD51,0xD2C7D78E,0xC2D3E2E4,0xC55D60BE,0x635C47A2,0x5566A11E,0x4317DABB,0x4F2CD6C8,
0xE3D85C50,0xCACEB3D7,0x605554C0,0x5655505A,0x074C565F,0x4C584D3A,0x5752B03B,0x46BCB438,
0xDDC434B2,0xEDE6E3DF,0xC9D4E2E6,0xCADBDED7,0x37B1B253,0xDEE3D0C0,0x16CCC2D5,0x4C5731C9,
0x4A3B3937,0xD9D4C547,0xD2CECBC7,0xD1CBB5C5,0x3EAEB3D4,0x26464236,0xB3C5C546,0x584B400D,
0x56615E5F,0x50494C4F,0x5B333A55,0x47474643,0x18253358,0x32CE92AB,0x5030AC2B,0x59474E5C,
0x4E585D62,0x4A464652,0xC1D2C0A4,0xB132C0C7,0xBC932447,0xC8D5C0BA,0x17A84DA3,0xBD4D533E,
0xB8ABAB1E,0xBBADB8C6,0xA0C1D0CE,0x4C43B08A,0x4D554F4E,0x5135AC35,0xC6CE4B4C,0xD2C34034,
0x994424C2,0xC8C2C2BC,0xBACFD9D0,0x4497111B,0x24344335,0xC039BA35,0x38C4B7BA,0x0ECB3B87,
0x11B8BC35,0xC9C3BE3D,0xBE1CB2B7,0x4016D2D3,0x4D374D2D,0x334B4454,0x4120A6AD,0x4E534A3A,
0x9B1D4350,0xDBDBC0A3,0xCEB0C4CF,0xC7C6BDC4,0xC9CDBDC3,0xCEC395B8,0xD0AC99D0,0xC12FABD1,
0xB6C0B8C5,0xBCAACDC1,0xCAD4C3AD,0xC8D0D2C2,0x55504E3D,0x4B4C4B41,0x25484044,0x25224243,
0x48404A42,0x464E5447,0xB0BF1536,0x26443537,0x292B3330,0x303B3C22,0x42524343,0x86B40835,
0x301136BA,0x2C44A92A,0x95C4B223,0xB23D4221,0xC5B9AEB9,0x454D3CC5,0x55504343,0x48473F4A,
0x40404543,0x3A4B4249,0x42343835,0x423C4344,0x47504440,0x3508333C,0x48453D28,0x3D3C3743,
0x2921313A,0xACA3A113,0xB2C8C7B5,0xCEC6C1B7,0xD6D4D2CF,0xBDAFC1CD,0xC0C1CACC,0xB8C0C7C1,
0xC8D1C9BC,0xD2D1CCCC,0xC2CFCBCE,0xC0BDBEBB,0xC7BFBDC6,0x2D9EC7CA,0x48463F34,0x2A859042,
0xB2B00B2B,0xA6B0B1B5,0x45443A2D,0x1C093641,0x2FB2AA12,0x313F4040,0x35232326,0x40443B31,
0x26352043,0x39213295,0x49453F40,0x32374246,0x8C972131,0x30302006,0x3B3C362A,0x1B0C2631,
0x12082F34,0x132D320B,0x40493639,0x3A3B3032,0x20073B38,0xA12D3E32,0x342E2409,0x34333F3D,
0x2914231B,0x8E8CA907,0xB8BAA90E,0x8F2E169B,0xACAD8491,0xC5BDC1C1,0x1FA1B0B8,0xB4BDB09B,
0xABB3BAB7,0xB6BCB09A,0x832E29AB,0xAEADA2A9,0x2917B5B3,0xB0951136,0xA2BCB6B4,0x1E9E9E8B,
0xC4BE171D,0x32382795,0x272E391E,0xAD823427,0xC6AEC0A1,0xBDA9B4C3,0x9D233097,0x1B0521A2,
0x24414625,0x9B12352F,0x4B24A4BC,0x3D263437,0x2BCB2D32,0xDBC85646,0xDC431B35,0x486233D3,
0x5357D331,0x52582CB7,0x4BD0CAD2,0x8F843D92,0xCF13B132,0x51B551B6,0xAEC03228,0x4844C6BE,
0xA8C9C951,0x1CC8CB9B,0xA7354F49,0x95469AB0,0xC9535754,0x4B2041C0,0x432D2A3E,0xB1CA9240,
0x3E2E4E49,0xB6C12A38,0xB44404C2,0x30ACB9CE,0x52492E41,0x3843CFA5,0x88999744,0xD7CBC0C3,
0xA42511CD,0xC3D12731,0x47282E97,0x28334F53,0xB4C0100E,0xC808CD26,0xD2C216C5,0x554BA8DA,
0x34A5C527,0xBCC7374F,0xB627BD0F,0xAFC9B8CB,0xC4C8C098,0xC333A1B9,0xB6B7C8CD,0x4615B1C3,
0xBFBBC598,0x46190212,0xAE28464E,0xBBC2C8C1,0x32BBB6BF,0xA4A5A13B,0x43494037,0x3FA8AF33,
0x504423B1,0x50462F52,0x3C344349,0x8A391930,0x3D21BFC2,0x4E460B1E,0xA9A03545,0xC7A2BCBD,
0x8F9CB6CA,0xA5B4C9C6,0x383B3334,0xA2B2BBB1,0xB9253E35,0xB9B5B3C4,0x3C39341C,0xC1B61F0E,
0xAC97BFBF,0x46403987,0x49404049,0x392B2944,0x3394033C,0x04A29726,0x42404131,0x40404648,
0xA914AF1A,0xBEBDB693,0xA4B3A0B4,0x3F46411A,0xC3BCB126,0xC2C6C2C9,0xA82196BA,0x24A8B7B8,
0x29343E3C,0xA622049A,0x26323396,0xA704A985,0x98A0B0AD,0x372F2006,0x332AADA0,0x28323123,
0xA7A4AB0E,0xB3B4A195,0x0AA5B4B8,0x3031199C,0xC19B2233,0xB6B7B8C0,0xC6C5C1C2,0xC4CBC5C2,
0xA9A9B0BF,0xC7C5C8C0,0x303320B9,0xBCB02F35,0xBCB5C3C6,0x962710AB,0x82ADABB1,0x3A3B3037,
0x15220E82,0x42483F38,0x2C36393F,0x35093322,0x8691392A,0x12169423,0x8D8E111B,0xADA69320,
0xAEC0ACA1,0xA425AB93,0x37232091,0x91258B17,0x3A2E94B5,0x91172B2D,0x02ABA4B3,0x27444341,
0x030B0725,0x3B312926,0x1B1DAC13,0x48414237,0x28353844,0x2B2C3626,0x229F1F30,0x4099A034,
0x2C202C37,0x103A2F22,0xA1201C9B,0xB0BBB3AD,0xB1B3ADAE,0x052AAFAF,0x2221161C,0x93AB9C87,
0x9A03ADAD,0xBCC00319,0xABB0C3C4,0xA8A8A6AB,0x1EB7CAB7,0x37432820,0x992216A6,0x32A48C22,
0xBBB0A511,0xA3852B1C,0x3B243C12,0x383F8225,0xBBB1A225,0xC1C8BFB8,0xB9C4C1C2,0xB7C4C8BE,
0x1818B5B2,0xA433433C,0x2FB4A017,0xA6279BA0,0xBEA8B8BF,0xB9B3B6B8,0xA0940AA1,0x269FA699,
0x3D32432F,0x2A283440,0x0F212726,0x1A2B2829,0x3A28939F,0x2E3B3532,0x9C342E89,0x0E291811,
0x9825B197,0xAEB095AF,0x23BAA6B4,0xAEA5B50D,0x2890989C,0x9D9DA49D,0xB4B0ADA5,0x0E14A8A2,
0x29232628,0x32212126,0x821D1C31,0x2CA12A88,0x1F260A19,0x2B1A3235,0xB2322F2A,0x2D813836,
0x433C3A23,0x23A19042,0x3B403117,0x22380892,0x250EA891,0xA71CA4A5,0xB9B3B6A2,0x17B10DB7,
0xC0B7B2B2,0xB4BFB9B4,0xC0BFB1B1,0xB7A5C1BF,0xB2B2C2BE,0xAA923218,0x30313508,0x8F2A2D38,
0x88A6AEB8,0x1BC4BF1C,0x312823C0,0x032604B5,0xBF92A736,0x2CCAB952,0xA0D7C932,0x44D5303E,
0xC032D348,0x3DD7244E,0x3AA6C9B1,0x1DC0B41F,0x4E47C7DA,0x4899CB4B,0x4249C5C3,0x341E4515,
0x4A24D1B2,0x49B34E41,0xC446D349,0xCCAB6361,0x50379930,0xDDC45AC7,0x4884CA38,0xD6A5C5B0,
0x53492A53,0x3BD73BD4,0x4ED24056,0xC017BDC1,0xA7CC963C,0xA5CF2553,0xC3144643,0xA9AD2E36,
0xC641CBBC,0x9ACFCA52,0x4B46D5A0,0xCAC241D5,0xBC80A1B3,0x33D5B3C4,0xB422A73A,0x40C784BB,
0x3331323B,0xC6C13A40,0xCF3E2A47,0xC7CE36BE,0xB8BAB22E,0x8BD1CECB,0x91310540,0x364CB0C5,
0xA33635AE,0x28894291,0x30C5C09C,0x82202C42,0xBE33123A,0x5129282D,0xA498123C,0xC64084C7,
0x93B2A3C5,0x96ADB4B0,0x25ADC0A5,0x3117A4BB,0xC612C592,0x20C8C8C5,0xBBB6A4B6,0x82C6B746,
0x39B4AA39,0x2D12B1A0,0x2D4337CD,0x2133BAAF,0x214B1492,0x8F34C501,0x41A22D15,0x34133B9D,
0x40403418,0xB7B59140,0x352A4018,0xCBC02A32,0x42494021,0x411A412E,0x955EC91D,0x45341E43,
0xAFD847CC,0x47E19066,0x4FD758B7,0xDB4C3F4B,0xD5A2D161,0x4F92DD61,0x58ED56D6,0x3EDF2158,
0x5A63F05C,0x5CD6D5D1,0x20E5D0DA,0x325DE0D1,0xE3464A98,0x62E1D131,0x2062534B,0x6146E1E2,
0xD1C9DF60,0x444A668C,0x32415AD4,0xCF56E9B2,0x21E6D266,0x68EA6041,0xE04251E9,0xCB70C6B0,
0x5617E753,0xB9E04BB8,0xD911470C,0x5050AB5F,0x515BC7E4,0x5DD4D6D7,0xD9B8BFCC,0xCF60425A,
0x68CFCDD4,0x32DE50DC,0xC654E25A,0xCF4CE84E,0x4ACF5DE1,0xA9BB5BD5,0xE163D64C,0x2AE4D150,
0x68D7518D,0xCBE0E0CD,0xDE5D536D,0x565360D1,0x36CF4AE0,0xE3434261,0x39CC8065,0x42D55650,
0x455233DF,0xD73DE3C5,0xA6C6B940,0x9A47713B,0xB44E5BC9,0x94BAE260,0x08E3D32E,0x38DE2FD1,
0xE83DAD31,0xBD61D0B5,0x55E55414,0x3ADE58B4,0xD84ED648,0x5A3AE74B,0x4FD64390,0xC41C48CE,
0xDF4BD8A0,0x40C1515A,0x60C75DBF,0x28AAD342,0xD751A65B,0x653DD1D0,0x3BDD60C6,0xE2804254,
0xB81BD656,0x5CE0C052,0x52CA28BA,0xC15ACA57,0xD5C0CA43,0x50C06239,0xCCD253E0,0xC4A1C058,
0x41B1AF5E,0x51A5A8E2,0xC13CDCD4,0xC164B753,0x18BF4C3C,0xC5D06401,0xC04342D2,0x1525DF44,
0x56B70C2F,0x0BC52AE3,0xD94AD9C5,0xD64B1157,0x38E9C0D7,0x99DC9BB9,0xB252C653,0x4207E243,
0x5ACD4FCB,0xC24142D6,0xB943105D,0xC2DC3264,0x44E053B9,0x4142D1A8,0xD65BCB4A,0x584D3AAE,
0xCED15AD2,0xDFB45038,0x263F9D61,0x61D32DA5,0x5F2C31D1,0xC961DA44,0xA545A751,0x2EAD63C4,
0x3B3150CA,0xD8C5E35B,0x2ED2BC53,0x63AF22E0,0xB95DB8D8,0x39642B50,0x2DDCC08B,0xCFDE5C37,
0xCA45A43C,0x438AE14B,0x4DB7358E,0x133A53E1,0xE155C2B2,0x2F083051,0x62D75890,0x49CFC085,
0xDB4BD765,0x5250CDC5,0x12D427E0,0xD95656CB,0x84562057,0x47DAB041,0x48DA42D8,0xD156D6BE,
0x3454DC52,0x35CD6311,0xD5D359D3,0xE919BD45,0x5824CDA0,0x57D9D7CE,0xCB4328D1,0xD164D8B4,
0x4ED5ACB4,0xB2CA63C1,0xCF4925CB,0x5449D652,0x52824458,0x473B4BDD,0xCF5DC6C1,0xD64EB248,
0x48C5612C,0x44D746D0,0xD357C150,0x5641DD84,0x4ED8B5D4,0xC4580CDF,0xD547CB4E,0x25CA4055,
0x55B761B3,0x2AB0CDD1,0xD542E556,0x5AD556B0,0x46AFC0DF,0xE1BD3158,0xD143435A,0x65BC53C0,
0xA45B3DD4,0xD452CC54,0x4660B6A0,0xAF4262B1,0xBC464CE4,0xDDE8CF5D,0xB2CE6560,0x64C7BDE2,
0xC23BD163,0xC53DCF50,0xD2D5D3D8,0x51F15518,0xE935B749,0x5846D062,0x5CD0DCD8,0xE2E656CF,
0xDA6CDCB5,0x502ADAB1,0x51E132CB,0xC09A5E4A,0xB450E6CA,0x54319740,0x4F3157E2,0x23425959,
0xAA62CF40,0x61E1D34B,0xC0236130,0x6163CF33,0x9A17CA61,0x5C5643CD,0x2A324AE1,0x40553860,
0x5539D55B,0x65D55737,0xBAACBE90,0x3C67E039,0xAFDE3734,0xA3DCC5AC,0xE4465E29,0x40D2CA50,
0x48D856BB,0xC0D84A4A,0xE451CB3A,0xE4CDD139,0xA9DA50D8,0x49D9D6E2,0xD642DB49,0x2BA5D23F,
0x5FA9C0D5,0x32593EE4,0xD94FDB87,0xBBE4C4B1,0x4DA84FB0,0x363DCDA5,0x4F43CB63,0x51AC44C0,
0x3ECFA6DE,0xD1614150,0x555A485B,0x24CA6051,0xB7CE3E37,0xAC56D8B2,0x37C4CB4C,0x56A359C7,
0xCF1E48CC,0xC291D850,0x4CBB4C4A,0x46D83433,0xC043CB44,0xC053AD50,0xB8D8A9D5,0xCDD444D4,
0xC9501937,0x562FD141,0x51BD5149,0x3233B2CA,0xC54CDA87,0xA3B5BA08,0x47C55BCA,0xC4C3AD1B,
0xBE8EC562,0x5F3A4030,0x3DC22CC6,0xD1544942,0x4656D036,0x41DB551A,0xA9C64E42,0xBE3DDDB2,
0x399DDC31,0x503F54C4,0x433943CF,0xE451C948,0x4390499A,0x5AD040B4,0xC6413440,0xB34FD09F,
0xA1D3D1CE,0xD1D450C0,0xC34BC7BF,0x31BCBB41,0x49D65451,0x9B2E0EC0,0xD7C0DA1E,0xC755B2AD,
0x049657D4,0xD9B65FB9,0xC64AB852,0x5AB28621,0x42DF40DC,0xD162365A,0xD936BFC1,0xBBB41918,
0xC3CA66DA,0xD654955E,0xCBC84953,0x59D6319D,0xB0305DE7,0xDD60295F,0xCB2EC65D,0x5BD45D21,
0x95C943D9,0x5831E063,0x5AD7D242,0xA746C8CA,0xA55540D5,0xDD4D1E3B,0x5D564F3E,0x43493DD9,
0x21C0DD9C,0xB857A54A,0x56C494DA,0xC38F55DE,0xCF58D43B,0xA2D4E0C3,0xAFDF60B3,0x4C47CE4F,
0x16C8E9CD,0x90C4C9A5,0x41B7A1D6,0xD136B743,0x3B47424C,0x651D4453,0xB9D64035,0xD853484A,
0x2D49B4A5,0x39D24FC7,0xD9AB57C7,0x474AD654,0x37C53465,0x50B65388,0x41C8D8D5,0xC621D941,
0x3AA1A1CF,0xA9D1CFC9,0xD7D1C138,0x4A482D52,0x4BD1D1A3,0xC4A038BE,0xC156C5D4,0xC0CFA9B7,
0x3F3E5821,0x44B84637,0x1E2DD055,0x3B8F4048,0x4F4F2DC5,0xC936AC3B,0x2A5C4148,0x4EC843C6,
0xC0D930A3,0x324E263B,0x4630D23F,0x10C132A5,0xBA4031C5,0x9A37CAAF,0xB2B74851,0x4FB03302,
0x22B3DAA4,0x9E49B71E,0x51362FCA,0x93BE42AD,0xC8493A98,0x3D233233,0x53B2984E,0x50443146,
0xAC51BD35,0xC1C0B1AC,0xBFC04DCE,0x8CB2CED1,0xC382BE3E,0x46C7B331,0x4628D6C8,0xC2AAB737,
0x304DB6C9,0xB6D083BA,0xBDC8403C,0x4329B722,0x3FA7C145,0x412F4640,0x4C5E4CB6,0xC3B1AF34,
0xBD2741BB,0x4A2736C5,0x4C30A252,0x3A4A2155,0x9EA1C8C3,0xC1C3B2C8,0xC64B31B7,0x2FBA412F,
0x2CCF4D45,0x44402236,0x3911B948,0xC3C1A642,0x3543B9D4,0x9A42BFC6,0x29322AAB,0x4B23AE2D,
0xB5C7C8C2,0xB350B143,0x44562CA8,0x4DC9CDDA,0xC7C4553F,0x06B218B1,0xE0B1B7C4,0xC8493441,
0x4CBBD241,0xA7A955C5,0xC0C85337,0x0F43AB41,0xB0D63D40,0x614CC640,0xD610D138,0x4EBEACC2,
0x5234DAD0,0xD74507C8,0x1FC3C851,0x53434BC4,0x52D6D4D7,0x4F57CF35,0x5131C8A2,0xBF94CBCD,
0x88284BBB,0x2A52C1C6,0xA4BCDC31,0x2EAC4060,0x56A9B330,0xCBA09DAB,0x4DB225C6,0xB6B9CBCA,
0xAA1D5443,0x2A544A49,0x4E475144,0xD4419842,0xAA9E4AD0,0xB0C0B1BF,0x1B8850AD,0x1A37D0D1,
0x574B4D46,0xC2BCD049,0x250FD0C6,0xD9DCDA44,0x97AE4BC1,0x9CA31D54,0x4A968E3B,0xA9BB5240,
0x4D41B3D1,0xB5319839,0x3C31B4D1,0x2FB2CEB2,0xD2CD4455,0x402D502D,0xB7C1C499,0xC32EAE84,
0x3F3739C2,0x2C19B5C5,0xDCB53142,0x11ABC5CD,0x3FC1C637,0xCCB9452E,0xB3C6D9CD,0xCDC62BBE,
0x213030B7,0x34A2491C,0xB402BE45,0x8B484242,0x5E4C2CC7,0xCFB032AA,0xB04A41B2,0xC322B41D,
0xC3B73A8D,0x220F4CC7,0x474EC744,0x454B2A23,0x4E5A56C4,0x3039E1BE,0xD0B82348,0x62A240AA,
0x4BCABA91,0xB6C3B543,0x342CE021,0x31C1CEAD,0xB3C043D8,0xC252C9CA,0xD6D34757,0x57435433,
0x40565043,0xC984434F,0x46595146,0xDDEBD2D9,0xEADFD3D2,0xD941CDD0,0x44CA4A95,0x5F4C5A54,
0x5A6A5947,0x514E8C50,0x47CA3C4B,0x5F09BCD1,0xD8DDE12E,0x263EC21C,0x5A45444E,0x524DA23B,
0xDD323B50,0xD1D7D7D6,0x3BDA40CE,0x30574F26,0x9619E3B1,0xE1E2ACD2,0xBC92BBBC,0xD3BDD4DB,
0xD7A1D3C7,0xB6E44890,0x3CC0A3C8,0xD4C4C534,0xBDC9BA9B,0xB4C7AE85,0x50625E49,0x3E584758,
0x9FCD2E48,0xB6CA45E0,0x4E439437,0x0764CA53,0x6B4AD643,0x6028464E,0x5A468B24,0x5F2E59B3,
0xCAD7D1D3,0xE2BBC6A6,0xE646E15F,0x50CBBD50,0x62CC55D2,0x20B85BCF,0xC4B8B48E,0xDE34535D,
0x9CB09953,0xD06029C1,0xBBC1DECB,0x46D1C9BB,0x49E7D5DA,0x1D59CE53,0x2FD5A5CD,0x54B9A7D4,
0x3D5A56C4,0xA93DE234,0xC2C64554,0xC1E28324,0xC651D211,0x55B0DEA7,0x5D604A53,0x4CD35F45,
0xD03BB0C4,0x56C0E330,0x57494D58,0x4C4E6224,0xA8564A50,0x41BAC83F,0x4EA731A3,0xCF4A38D4,
0xCFA7DD4C,0xD943458B,0xC0EEBFE1,0xB5BBC4DD,0xC648C249,0x4115C542,0x39983941,0xCEC1D0C8,
0xC0BDD1C5,0xA1DD9EB8,0x4A4B50D8,0xD03ECBA1,0x264AB441,0x45403095,0xD8DB27CA,0xB551B8B6,
0x024B1841,0x50D5ADD0,0xC145B384,0x4151A897,0x60444449,0xC3B35542,0x3345B5C7,0xA843A74B,
0x4AC45530,0xC25337D0,0xC944B335,0xA2573E50,0x97B755C1,0x4AD64CAB,0x3B5E9150,0x4F40B253,
0xBBD043CB,0xC3C6C8CA,0xD12CD8C5,0x3ABA4647,0x233F30D0,0xDBC5D4CD,0xD4D6DA23,0x48C2A1D8,
0x444B3EB4,0xB14D5954,0x2EA0404B,0x4EC02F2F,0x4C4939A4,0x49623756,0x402C5451,0xBD3C5BBB,
0xC510DDD0,0xA7472153,0x51C15126,0x3BBE47C5,0xD620C439,0xC253BEA6,0xA3D432D0,0xD1B851C9,
0xBD45D0AE,0xBCD0D940,0x9BC636D4,0xB64436C7,0xB125C52B,0xC8B54F47,0x42D02ED7,0xC136B528,
0x40472559,0x49B99898,0xB70330D1,0xCC56A7BB,0xCBCED3A4,0xB5DFBFC2,0xB8B932C6,0x4C56C948,
0x3DAF4853,0x82C73DD8,0xCF8ABBCF,0xC142B750,0x5831424F,0x4EC24995,0xCB41BC0B,0x984DCC33,
0x44B92EC3,0x513A5004,0x415A4D58,0x3CA53457,0x12BA4291,0x4410D3D6,0xA14CBC40,0x85053B39,
0x26D435CF,0xD4A7BB27,0x272ED142,0x55353C3A,0x88CE4B81,0xD927B1BD,0xC9C4CD18,0x50AD4F94,
0x3730539B,0x8934B653,0xB741BB4D,0x42C6B3D2,0x374F34D0,0xD2431542,0xB6C3BD97,0xBCDFB8D7,
0xC138369C,0x4956C345,0x50BB4251,0x9EBE53C1,0xD215C1AA,0xC9B1D3AE,0x39B4321B,0x4E2332B4,
0xD022C536,0x3A41A525,0x50CB46C2,0x9A4E4D37,0x9B35B94A,0x33BC9718,0xBBC932D7,0xD44AD1CA,
0xC62CCA12,0x10AB4127,0xC6D5ACDE,0xD2C3D2AB,0xCAC1D83D,0x5CA748B7,0xAF352D1D,0xC0C7B343,
0x5EA21426,0x59365119,0x52653E30,0x8960A44F,0xD23A493D,0x34DA5831,0xB4C247A8,0x9D4BE152,
0x5ACEB160,0x54BA4FD7,0xD1599431,0x4056BCD5,0xD449C1C9,0xCBD761DE,0xD1C15049,0xD1D6D84E,
0x5DE5516B,0x275ADF3A,0xB2BC403C,0x564BC0D2,0xC34121D1,0x450EC092,0x58B1D993,0x544652AD,
0xD8C49FD3,0xE66101B5,0xD44245C9,0x31DC5ACC,0xD6C259C2,0xCFB6CB62,0x92C1D441,0x4CDB3737,
0xC1BDD7DA,0xC9A8AC4E,0x5304C4D6,0x45D1B2D2,0x434ADA51,0xBD4B094F,0x4C4982CF,0x205B55D5,
0x4915C1BD,0xAF47464F,0x45C75226,0x9A479433,0xB240D141,0xACD0C8B7,0xABD3B8E0,0xC8402C01,
0xC13A1554,0x4FCFAD4E,0x4ED448B7,0xCF512FA0,0x5046D447,0x48C84B4C,0xC4A86044,0xBC309937,
0xA8A0B755,0x53C2B8BE,0x3740B4B7,0x984EBA40,0x3AB0463E,0x98BB51D1,0xD4A390C1,0xA652B04B,
0x2BC14040,0x453541C1,0xA94A2282,0x47554E53,0x47374B0A,0x82BEB5CE,0xD236CB3C,0x95249643,
0x49C83ED5,0x9A3A4E38,0x4054B642,0x2FB82751,0x2ECC4A98,0xB734C9C2,0xA34DC23C,0xB4CCB7A8,
0x1BD036D7,0xD8B1D0C7,0xC72FC423,0x4CCB3813,0x32A13BB0,0xB84EB841,0x8D10C437,0x9ED527CB,
0xC10243C8,0x044BC648,0x46324552,0x47113ECB,0xBD430FBA,0xCD9BCC38,0x4C324CAD,0x37C349BC,
0xBA48B433,0xB2B4CC52,0x2ECFB7B3,0xCBC6B6D2,0xD021AFBC,0x9CBDCDAE,0x28B047BB,0xAF2C51AE,
0x3E47C750,0x4D474A51,0x47AD518B,0xC729AC9E,0xBA42BE34,0x40C22EB0,0xC0E03F25,0xD443B796,
0xAD09DBB0,0x42C24831,0xA6444ECB,0xC237A333,0xA6B62142,0x5D2040BA,0x35342F43,0xAE44C954,
0x53943539,0x26CA48C6,0xD14EB0AB,0xBA48B645,0x54C1A5AB,0x4B40552F,0x3C50199D,0xCA31D04B,
0x40BF40CF,0xC6B244BE,0xC339B944,0x3033B730,0x54C438CB,0xC4A23203,0xBE51C2B2,0xBECBC0B3,
0xC1D132CD,0xD515D2C5,0xC232D744,0x4FB7493C,0x5A2D58D3,0x9B489F40,0x484CCB55,0x593AB8E0,
0xCABF8AD9,0xE65EB727,0xD7D83F54,0x4FDC4CC0,0x515013C1,0xAA45C748,0x52A3DD50,0x5A4447D2,
0xCB63B5E3,0xD1543C4D,0x55B354D5,0xE2D855E2,0xE6E1394A,0x2695DC66,0x9DCCCF51,0x4FB71DC8,
0x525EDCE0,0x353EAEA6,0x4A4046DB,0x314BB5E2,0xDB52C956,0xB4BF6603,0x443B4A34,0xD937432A,
0xD6474250,0x48BD4CD1,0x3096B3A3,0xA09FA304,0x29BFD65C,0x51DB4BBA,0x455F50BA,0x9F53D9B8,
0x33394055,0x42DA43A9,0x998CC3BB,0xC432C83A,0x4C515243,0x4DBAA1B9,0xAB54362C,0xA04FC21E,
0x33D44045,0x47B431D6,0xC232C737,0xB0CCC256,0x4F3B3424,0xC3B31FDA,0xD1452636,0x4C4A2347,
0x38C028CE,0xB2B4BED1,0xBA48CE18,0x15C1BA3A,0xAABE4E21,0xC81091C1,0xAB1AD310,0x4CC54607,
0x3A2B45C0,0xD1B4D0A9,0xC53CA349,0x47D324C0,0xB1C54589,0xB682B258,0x4AB2BB4C,0x46C22305,
0xAE43A0A8,0x3A46C918,0xB0C52040,0x160658CB,0xC3A4C8C1,0xD3A1B540,0x4C3C47A5,0x2FBC2EBE,
0xD4418549,0x33428CB5,0x45BA0AC2,0x271B42B0,0xB043B63F,0x3001B13E,0xB29740A3,0x853C31C9,
0xC1B0B93A,0x23B42924,0x44BA31C7,0xAF25C99E,0x9641C13B,0x4634C0C6,0xB5B944A3,0xC1413807,
0x9113C822,0x2DB74E28,0x454943C1,0x9F4FA41E,0xC01C2549,0x431746CB,0x3216309C,0xB453394E,
0x523A2737,0x29C43C93,0xB64B3291,0xB54BB9B1,0xC2D03412,0xC0CA13CF,0x3240C29D,0x14B3BE53,
0x41A64191,0x3A3228C6,0xD42FBD25,0x25A7A5A2,0x2FCFA9C7,0xC0B63138,0x204EAE35,0xA7C2C315,
0xB2C435BB,0xCB8DACC8,0xB3B9C921,0xABCA2321,0x25C8A7C1,0xC2BAC03D,0x38439C43,0x4EAB25BE,
0xC0BFC1CC,0xBF45B92F,0x4A27C0AD,0x29CA1F2A,0x99423F9B,0x3F4BD03D,0x94B93344,0x278A4DD5,
0x2E44B5BA,0x14443B55,0x511E4230,0x43B839B2,0xC1511340,0x49572239,0x30C92735,0xB2353332,
0x3439CE21,0x45B2B12B,0x3DC647D3,0xB744CED8,0xD154A720,0xD4A95B30,0xA5A65B9D,0xD9BEB150,
0x53D3C856,0x60D3D9A0,0xC8D23CCF,0xD05FC534,0x3545D556,0x4FDC65D2,0xE1514EB1,0xB0C08249,
0x3AE15358,0x542C1AD3,0xDA4DD94B,0xBC38E447,0x551FB0CA,0x56E050CF,0xD7513A1F,0xB76141A0,
0xD0D75CB1,0xD6D35CCE,0xD13CE1C1,0xC8D6DB66,0x61DF4FC7,0x41C3C837,0xB1C2C44D,0x3637D547,
0x56C9CF33,0x34B5414A,0x4A45B1D1,0x574ACD41,0x5A473DCF,0xCB5EBED0,0xB92ECA1D,0xCA2650C8,
0xC34945C8,0x1220CF31,0x4C3E5445,0x82303BC0,0xC3B447CE,0xC8273052,0x4E85C0BD,0xBBD12748,
0x3FA43ECB,0x9650D04B,0x97C0BC3F,0x2F504AA1,0xCBB351C7,0xD7BD9651,0x25D333BF,0x4BD020A8,
0xD144B151,0x4749BAB0,0x11CA492A,0x121A3226,0x3546C894,0x41CCBE41,0x4AB12D90,0x4943C123,
0x1438D22B,0xB844522A,0x04CFC3CF,0xC9C2CD1A,0x8C342A05,0x42C5C3C2,0xC3973A05,0xC0454F29,
0x21B4A933,0xC6CA3D42,0x403629BA,0x871BCF9B,0xB5891139,0x4E3F34BE,0x972335B9,0xCC1A4B47,
0x4332A50F,0xC6D39A96,0xC0B29791,0xB241D111,0xBAC8B7B3,0xA2C841BB,0x3322B8C9,0xB9BD1047,
0x33A03A3F,0xBCA6B7CA,0xCA30BB30,0x24443A39,0x41CA42CD,0xAD343D44,0x4A37314B,0x3EBCC38D,
0xAF00B839,0x9A4A291B,0x9BB9CD41,0xBFC94D25,0x419539CB,0xB9B71341,0x3234A237,0x15CABEC8,
0xC1C1B3AB,0xB61F1CB9,0x38BF1EAF,0x32BE2F33,0x06311C39,0xCC3BC02C,0xDEAFE068,0xE96DE365,
0x72F25345,0x54DB73F1,0x76E972EE,0xFA51D5EE,0xD24EF16A,0xF06EE866,0x6EE94074,0xE35AB552,
0x76E64750,0xCBB44BDA,0xE0D39B45,0xF0CA39E9,0x4EC4192C,0xE4C36CF0,0x56445246,0xD45FD2C9,
0x4C53B74A,0xBEDDA8AE,0xB96EF64E,0x58CF57E2,0xB85CCBC1,0x60C95F57,0xD0D967D0,0x3056D840,
0xE6B810AE,0xB459A64F,0x58E10433,0x41E23FDF,0xCF2CD1D5,0xE16AC6BE,0x54B43456,0x65DE9D52,
0xC0DAC4B2,0xDC5A6BD9,0x615BECE1,0xCA56D1DA,0xC22AA23D,0xE553C3B9,0x81B3BBC3,0x86C6C5E7,
0x3454EA58,0xD4EB47E0,0xE3DA44DD,0x4DDCE2E5,0x2653504E,0x546744D0,0x9C606B55,0x43346855,
0x415ABD3D,0xD649D729,0x4B63C45C,0x61D552C4,0x5E35A55D,0x634450C0,0x4C54C743,0x425A5225,
0x90406253,0x4351CDE5,0xCA60E037,0x435D58E3,0x3412D035,0xD1265C4D,0x5127B8E3,0xC996E22A,
0x45DAD546,0x58345A38,0x3ED53E59,0x37B4213D,0xDACD2BAA,0xD3C7DF27,0x2AA64EB8,0x2157D2DC,
0xE4B84B40,0x2630D3B8,0x61A750D3,0x8E565253,0xD4494958,0x60D2CA36,0xD5C2C7C9,0x5ABDDAD0,
0x3223D6E2,0xD7A2A7E0,0xD0D9E5DE,0xC4CCE154,0x3EBE36AF,0x43235F4A,0x4221515C,0xA459414D,
0x323FA847,0xB3C75143,0x3BC839B7,0x1A47E1CF,0x42D8B94A,0x313193D7,0x402D1B14,0x24C34458,
0xC3475258,0x1CC0C4D2,0xCBCECD54,0x30A6B6CA,0x54C8C739,0xD8A74030,0x94B9C714,0x4FCC1353,
0x48C121A1,0x3F50A6B0,0x45D5C434,0xD1B50E56,0x51C287C9,0xD143D340,0xABBFA1BF,0x33AFC696,
0xCFD3C0B5,0xB741C0D2,0x1D8047C2,0x21905047,0xB22D5730,0x292ABA3F,0x243E485A,0x504F532F,
0x0E3D4545,0x0542A250,0x51BE4A9A,0x42364045,0x233B3942,0x565E5139,0x46329BAB,0xB64B4E51,
0x4B283C1B,0x973D9242,0x2EA34050,0x4500B9CB,0xADB7D050,0xC74047B1,0x44D02BCC,0xD6D5C615,
0xAD249DAE,0x42C0CDC2,0xCBD6D1C0,0xCB32CFBC,0x2CABC1A5,0xC9B2C0C7,0xB8A14AAB,0x3EC1D4CD,
0xDBD1CC32,0x3BC233C8,0xC2CFD6C7,0xDCC5B4BA,0x3FB6ADD0,0x3EC50EB3,0x3849164B,0x2D40C8A3,
0xC3B1C832,0x193642AC,0x2E49B2B5,0x4AB3344E,0x4BB65840,0x5D3C1A27,0x42334656,0x50592036,
0x404DC6B1,0xDF50D848,0xDF236253,0x63D546C2,0xB74657D2,0xC04B4DC4,0x64D22B58,0xD14C58D3,
0x52DEDBB9,0xE0BDC44F,0xD154DB53,0x46D9D04B,0x2CDC1C5C,0xD0ABD63E,0xB9D05351,0x66C630D7,
0xC1D7D5D7,0x8C563DCD,0xB209E3DA,0xC84FC53A,0x3B40BCE0,0xD3BE4456,0xD65E61B1,0x4CC13BBA,
0xD6C55340,0x8B279BC7,0xCFB928C1,0x97A53349,0xDBB018CB,0x81A54838,0x3FD1438E,0x522CA23F,
0x46489A50,0xA33BD254,0x3429BB08,0x45C1C547,0x434B5150,0x50D057B3,0xBA444843,0xC2D72A20,
0x33C9454F,0xD55156D1,0xB46003C2,0xD35DB018,0x5D532E4D,0x49D33DAF,0xD4A7B2C6,0xBDC5C9C8,
0x4B3147CB,0x523B20CE,0xC94ADA54,0x333D974D,0x21DE2344,0xB0B4450D,0x3444A3D0,0xBFD6D2CE,
0x3145593F,0xA38FCCC2,0xAAAACA48,0xB04520C7,0xC486C018,0xBB92A14C,0x344224C7,0x40C04CC7,
0xD1B94CD2,0xB853ACD1,0x2A94D6A8,0x16B5142A,0xCFC0CAC1,0xD0C5CCBF,0xAEC33143,0x4E385813,
0xB2AEB90C,0x0599C0C0,0x253C121B,0x87418292,0xBE4443AD,0x4B3FB3AC,0x23B5A02C,0x34BFB52D,
0x37D1CBBD,0x2726C133,0x4646400B,0x38B0C0BE,0xB0B2D141,0x9CB09832,0x43C19021,0x36474750,
0x3143BCB2,0x31CD99B1,0x2D974136,0x3A51BCAA,0xB5143548,0x3FA94634,0x32453F2B,0x3441C142,
0x43114234,0x3A9C25C8,0xA3213445,0xA428994C,0x45A3B1C7,0xC8C5A991,0x42513313,0x3E4AB2A8,
0x41C2283C,0x2B413C02,0x112BC5A7,0xD2C42244,0x313725D6,0xC0B9B0C2,0xC8AEAB52,0x4C2D24BD,
0x97CE2727,0x3A814D43,0x3E3EBD20,0xAAAEA240,0xAC1E34C7,0xC0A0C9C0,0xD7ACCB47,0x45413FC9,
0x543642B6,0xBC3DD242,0xA0B133C8,0x95DC30B1,0xAC55C2CD,0xD45AD3D7,0x59C145BA,0x37D13ECA,
0x105AD63B,0x36CBCF45,0xDDC14356,0x1CB35CA6,0x49D3D0B6,0xD6554D16,0x133741CF,0xC8D41EBB,
0xD271B6CB,0x608CE226,0x4DD761CA,0x6262C1CB,0xC8E24D54,0xD64BC435,0x46D02C51,0xACCD52BD,
0x4A63D255,0x504F2E28,0x52229459,0x43D6C4C9,0xC16590D7,0x20CBD4C7,0x22DA5929,0x5248E8CD,
0xBED1CDAC,0xBFC24224,0x37354141,0xCDC2B349,0xD556521C,0x57324F20,0x8A1F51C0,0xD1463A41,
0x40A3CEC5,0xCB3953C5,0xCF4921CC,0xD5D1D0B0,0x3EC6495A,0x48CD16CE,0xAAB0C490,0xB93B2E43,
0x535841C5,0xC9C5C9AE,0xCD5132B7,0x34C3B6C7,0x2AC14BB0,0x0F583E32,0x9148D222,0x0FC8ADAC,
0x5582BAC4,0xAB26BBD0,0x4D44AF44,0x38133CA0,0x2347A9C5,0xCC2BC24B,0xB4B54141,0x481C4BBD,
0xC9D23A43,0x251BD040,0x50CFD3D7,0x444B4338,0x8D3B264C,0xBAD0DC38,0xB2BC4235,0x26261AD2,
0xA6229CA9,0x82492443,0x4D3E41A8,0x99B51AC5,0xB5493142,0x33BAA623,0x8AB51136,0x2B2C0691,
0x9B33D1C5,0xA6A99233,0x3F444DBF,0x31BBB928,0xD5C59237,0xC0CBBBC4,0xB1D3CED5,0xBA48953F,
0x3F4A2024,0x3ECFC527,0x4526A31B,0x2D403AAF,0xACB99E4F,0xAAB24E32,0x26329EB8,0xC2AB143E,
0x07A9423E,0x3D8E90B2,0xAE1CB353,0x213F3F36,0x48A7A7CA,0xB9B829B5,0x2242B7B9,0x1697BA31,
0x22BE3F46,0xAE3631A7,0xAB36C1C2,0xB20D2842,0x44B039C4,0x8312C2AB,0xBCAC2842,0x372A18AA,
0x2EBF3425,0xBF423945,0x4642B794,0x9FC1A727,0xA7814519,0x4041BCBF,0x35A2234C,0x9AAB3D25,
0x25B1B6CC,0xCDB4C043,0x253C219E,0x34C5B4C1,0xC7AE4843,0x2B410923,0x328EB2B8,0xC5C504A1,
0x1E36B1C1,0xADB5C423,0xB2AE3113,0x38B5C4CC,0xC3C7D117,0xA72B373A,0x80B0B3C3,0xC6C119BF,
0xC0340F1C,0x3E12AFBA,0x23C04545,0xC2318FBB,0x3643BFB4,0x2BB31A35,0x51465234,0x48413B3F,
0xAC3B3157,0x4F3F4536,0xBAC1B386,0xC2323530,0x3E4035AB,0x32B53B35,0x001E473E,0x3740A02D,
0x45421041,0x2D365343,0x9446AAC1,0xA195A42F,0x2C324442,0x523537C3,0x9F8DB041,0xC518303F,
0x80CAC0C1,0xCAB53A2A,0xC05050B5,0x2020B71F,0xC1B7271A,0xB9B6B7D2,0xB1C3D1C0,0xCAB2C192,
0x25C518CE,0xB9950BB2,0xD2B2AE3C,0xA00EC6D3,0xB9D0C3B0,0xCFAFB4CE,0x411DB1B2,0x28AC233B,
0x3450593C,0x9C45C1C0,0xD2CCCF9B,0xC6D6C5D0,0x9B90C2D6,0xA141A23B,0x24524996,0x49AA3E17,
0xAC054340,0xBC429E39,0xA8C5C5BA,0x21C917C7,0x32514236,0x4337A84D,0xA0A14434,0x413309CB,
0xC0C6CF2C,0xC13E9F22,0x52AF38C1,0x42291B3D,0xA6495154,0x49429041,0x38BD3838,0x06443731,
0x4140C336,0xB0C9433D,0x183048C2,0xBE1B3AAE,0xD5A9B615,0x3C1B17B3,0x4129A419,0xB043C048,
0x4F5944A2,0x3CC8ACD2,0xD534A5D8,0x43D3D3B1,0xB1B5BE4B,0x3945BEB9,0xCEB84EC6,0xCB52C751,
0x20C961D7,0x43BAD1D5,0xDC56E825,0x57C34952,0x518B53E7,0xC221324A,0xA246B33E,0x38B2D3CA,
0x5137A94E,0x4A3FB6DD,0xD1DFC463,0x1D56C962,0x52CF5DD8,0xC454BFA3,0x5D401F46,0x67A05750,
0xCFA5441C,0xCF475648,0xD4ABD458,0x37A0CBD7,0xB4D53ACE,0x56C5D3B6,0xE2AC3260,0x63414151,
0xC02024D3,0xC23A533B,0x4D50AF47,0x4BC2BBD6,0xCBB5305C,0x23C047A1,0xCBC3CCA5,0xC93AC4CE,
0xBAACD2D0,0x46B8A54D,0xA02850B1,0xC9213ED6,0xC6B22F3C,0xC040D2A7,0x55C5CAD5,0xC1C2929C,
0xC9AFBD44,0x36BDCAC9,0x17C24535,0x10BAC5D1,0x402CC551,0xBF9E9513,0xA626ACA1,0x06D5C317,
0x0B233133,0x0030C4C5,0x53AAC330,0xCCB035AE,0x47503E16,0xD3C04722,0xC6B24B1E,0x2649D4A3,
0x29CCC8A2,0x44274B35,0x1ABFA0B5,0xCB38B23C,0xCFBA4698,0x3BD4D5D0,0xD5C440C0,0x2B3AB344,
0x50D3434A,0xB1494C37,0xA826AA3E,0x2FA8BE90,0xB0B6C649,0xB0A6C0B9,0x35C4D2C0,0xA640179F,
0x30B450D6,0x10B22F25,0xB730CB42,0x16B4C19F,0x17843E31,0x45C14136,0x3E40C9CB,0xC253CFBF,
0xC0A63EB9,0x33160BBA,0xD1BBB05A,0x5AB8553D,0x2D303322,0xD2B72149,0xAC94AB91,0x24C0AFDA,
0x98BE2B20,0xC2293952,0x3D972239,0xA850359C,0x23964028,0x31323F21,0xC194303B,0x4FB7B4A9,
0x2CAAB24A,0xC51A2845,0x44AD37C2,0xD0B7B3BF,0xCA4929BD,0x37ADAABB,0xB6C5B2D1,0x2A40AA38,
0x4233BB39,0xBCB7B446,0xB9CC9BBE,0xADC883C4,0xCE26383B,0x2ABC94A8,0x27C9D6CC,0xAA41AACC,
0x334FC146,0xD0CF3F12,0xCBC519CA,0xBBAEB0B3,0x35CEB02C,0x43153432,0xB654B111,0xA2009FA3,
0xC4C233BE,0xA1CE97C7,0xC898A834,0x4450453E,0x4936BC46,0xB8BBA6C5,0xB94189C2,0x13ACC324,
0x1FC44D32,0x4E2E4AA9,0x2F3BC244,0x2E3D4257,0x423B4505,0xAF20A8BE,0xB04C353F,0x43982DBE,
0x481FB138,0x1A34414F,0x2734B333,0x09BB20B7,0xBBAB48B5,0xB324BDB8,0x9EB81C44,0x323C413C,
0xBDB0ABB6,0xCBC1CAAB,0xBEBBB1CD,0xB0C709CF,0xCF2A94B8,0x2F3BC424,0x33BEB043,0x332348AB,
0x3635C1C7,0x8C43B534,0x27C04032,0x36C0B5C8,0xC9ACCE39,0x95B9BB9C,0x2CC0C3BE,0xA22B4003,
0xB1494033,0x381C14B7,0x2BC9484C,0xB322BEAF,0x018CC541,0x3914A737,0x401F40CC,0xBB153E3A,
0xCEC1B12B,0x3DA720C0,0x16BB2D85,0x1D473648,0x424E0C9B,0x4E3C112C,0x49565152,0x47464534,
0xBF3F0143,0x30C43B29,0x3DBDA8B4,0xC925BCC5,0x42439837,0x31A755C2,0xE0B9C580,0x4105CD41,
0xA1CEBFD0,0x2DBA4B3D,0xB14DC33E,0xC73450D4,0x1F2D4441,0xBD2948BD,0x2A9CB538,0xC4B5BDB2,
0x4FBDBD30,0xD1341148,0xB4C63C1C,0xA442AFB5,0x5AD04808,0xC0403447,0xAFBDAD19,0xC3C4D080,
0xCCC3AAD5,0xB824C6C0,0xBBCEC415,0x99BAB9CF,0xC231C794,0x4F5233A0,0x45D448CD,0xDC2C2041,
0xD1C75A84,0x294ED15A,0x4157B1D8,0xCFBCC04E,0x62CC54CC,0xCA65B248,0x292FD0C4,0x61BB43D5,
0xCC10C0A7,0x62BD305B,0xBF4056C9,0x4CB90E40,0x4E5FE439,0xE50166DC,0x50494156,0xBFB4BBB1,
0x48D7D038,0xB124B050,0x50A0DD5E,0xCAC1CEDB,0x4CD0BF4E,0x5BD34444,0xC1AF0D02,0x5B5B6149,
0x4DA5C8D5,0xC2A0E2CC,0xE33AD84A,0x28B554D4,0xDFC14F51,0x2DD0532A,0xA12496C0,0xB7409B40,
0xB2E1444F,0xCC2191C1,0x22C3D029,0x068E2B50,0xD3E0CBC7,0xCED6B01B,0x5946CECB,0x41506252,
0x4D5E4E50,0x40275D41,0x4313C64E,0x5517D445,0xBF4C330D,0xE056C6D9,0x26A854DE,0xB4B680D8,
0x9A47B9D8,0x42635160,0x41523935,0x5A3E3983,0x464D19DA,0xE59C554D,0xCBB7C3D3,0x0AD6C9CA,
0xD3D3DBDF,0xC49BB859,0x5CC79B52,0x563ABF25,0xB53F503A,0x39D1D924,0x6148344C,0x50256C4B,
0x65624FB9,0xD160B169,0x53600746,0x59B03765,0xBDD6D0DE,0x61354CA0,0x95C1D7D8,0x599DD121,
0xE11F3B25,0xD3B1E4A0,0xD1AC4F59,0x33D9C6E4,0x42D5D7D9,0x51C9E513,0xCECABE5D,0xD3C454DC,
0xDCCB30D5,0x3ACDCFCB,0xBC43E6C6,0x54AD3B40,0xCAB83224,0xC3D3E3B3,0xF0DF38EC,0xD754D353,
0x69935847,0x5552D437,0xA3CB535A,0x50126E5D,0x5A3E655D,0x6961C0D7,0xE7A9B1CA,0xE3E1DBCD,
0xD6AFE7DB,0xC7B6D868,0xBD3AA0D6,0x638A4491,0x42454CEC,0xE625DF29,0x5ADC5550,0x3A595ED0,
0x67594461,0x97594439,0xE1D2BA9C,0x1538D0E2,0xDA5242C6,0xBD724F4F,0x67E25F6C,0x58D54A17,
0x54674056,0xB64553D5,0x5BBB9E40,0x22D0BAE0,0x6030D745,0xC2465452,0x42633245,0xD555C856,
0xDA102854,0xA7093EDC,0xD1E0B8C7,0x36B21224,0xCED94ED1,0xC5DBD0E8,0xB73041DC,0xC53AE0B4,
0xCBBCD759,0x573640C7,0x4B52544C,0xDAB0CD35,0x5B5E913A,0x5BA235B6,0x28553B42,0xCD152B38,
0xBAD0D748,0x62E220D4,0x4139BC19,0x5B3F5B2B,0xC856875B,0xC2D3D524,0xDEE4E2D0,0xB545C03A,
0x585851C3,0x5A51A951,0x40C3CF48,0xB30544D4,0xB1A6A6D7,0xAD13BE3C,0x45D14246,0x313B2EA3,
0x12524051,0x5356D5CB,0x2E5A46C2,0xB8DB3B2D,0xA240549A,0xD9C6A1C1,0xC6694B4C,0xD4E159CC,
0x444B691C,0xE74F4FE6,0xF042EF62,0x83DB5669,0x37E562DB,0xCEE561CB,0xE950F250,0x65F6CE6A,
0x6C4071D5,0x48C2D1D6,0xC7E0D664,0x934FD975,0xF92360C0,0x384674B0,0x5A76F4E6,0x6954E6E5,
0x41F46203,0xD164CCD8,0x71E26372,0x604BA367,0xDBEC664D,0xEAE2F275,0xD5FDDCBD,0x5CE96573,
0xD95041E0,0xF638495C,0xAD4CB049,0x406F71F5,0x3AE71AC5,0xE35DEAE2,0xD020B7E0,0x5555EFEB,
0x85E4ECDA,0x61ED6562,0xE138F060,0x56474A59,0xA594CCD4,0x67D23F57,0x62CA55D3,0xE14A596F,
0xCB4DD5BF,0x3750A71B,0x5F47D8D1,0x41EE35D1,0x59E3DB5E,0xAC3EBC7D,0x3F6531A4,0x58E354F7,
0xA35CD3D8,0x5363E145,0xC95EC61E,0x3AC85061,0xCA5036EE,0x506BDCEC,0x694FC7DC,0xC5DCD6E4,
0xE2E15B46,0xD35DDDC8,0x5F69604A,0x32A1C654,0x583AD88B,0xA0D34058,0xD1DAC962,0xF2D158D3,
0xDFD3B3E6,0x3750D7E1,0x67EF4755,0x71615E54,0x6E47622E,0xCA5B506F,0xF1E0E15A,0xF3E9F0B3,
0xCBC7D6D9,0xE3CDD1C6,0x70456ABE,0x5A4641EF,0x88C34CDB,0xA766394F,0x3861E167,0x3D3D3326,
0x6055C547,0x5252A0D3,0x5B2061B4,0x4D42E4AD,0x62A3605C,0x4D607060,0xBCC64755,0x0262B399,
0xDC23D630,0xC9CAC852,0xE2EDDCE0,0xC4E9E7E8,0x4B525BD3,0x586430CB,0x61685F3E,0xBDD4E048,
0xDAE0E340,0x484A3A50,0x41594750,0x64DBB0D2,0x70654F52,0x484E5A61,0xC7454A98,0xCE41D581,
0x558B3BC0,0x4756D5B0,0xC6D1CC53,0x2105D5D5,0xD7E4E2D6,0xDBE5C6D6,0xD1D7C1E0,0xE04652CB,
0x02B2CDDC,0xAC9BE34A,0x54455233,0xAC3D2B45,0xC2D42845,0x33514E1A,0x41A94E4A,0x433FC2A0,
0x29CBB242,0xCEDBD9C9,0x43B4B9CC,0x951C9E3C,0x4C524197,0xBCCCB754,0xD514233D,0xBD39CBDE,
0xB1B2B1D9,0x51534439,0x54234341,0x5656605A,0x5156565C,0x5D51454D,0x424B545E,0x41470A35,
0xBA4C458D,0x142D3EBE,0x4A45C2BC,0x504CB6B1,0xC1433E4A,0xA9CDD4C1,0x9BBF31C7,0xCF9FBDCA,
0xA3CAA8C3,0xC0B7C92A,0xA830B4C5,0x4BCFC6BF,0x17213B48,0xCD1A3641,0xDCD7B7C5,0xD8B9CED6,
0x5B5429C5,0x4936504F,0xDACDBE47,0xDED7D8DB,0xDCDCDBDB,0xBCC6B4D1,0xBE09B0CF,0x32C2CCA5,
0x1F0299A8,0x3C304D48,0xC53E280C,0x98434C26,0x56434297,0x4E3F3C3D,0x50523E4D,0x5451565F,
0x40505954,0x33495345,0x0433424E,0xCFC8CCB4,0x2AD1CCCC,0xB8CAD3BD,0x1D4CA5C0,0xC1B8B8BD,
0x8C9A12CE,0xBB93A0B5,0x36294A31,0xBAAFB9A3,0xCAD0D4B8,0xB2A5C6CB,0x422F3444,0x2D3E4C44,
0x49204232,0x94C2AF48,0x3435404A,0x4801383C,0xC09E2682,0x301FB39A,0xC2C51747,0xCEC69E22,
0xC9D5C5C7,0xB2C4DBD2,0xC9A9BFC0,0x414622C0,0x35492AAE,0x443D3DCB,0x1F99484A,0x26BAC2AC,
0xCA38B139,0x0344450E,0x553C2E8F,0x49545559,0x4546483C,0xA0C50947,0xC4CDCEC8,0xD1D4D022,
0xA0CBC9BD,0xBC303ED1,0xB6C108A0,0x0C041230,0xD3C2BB25,0xD8D2D08B,0xCD934DBA,0xB5D7CECA,
0xCCD3D3D7,0x2A47522D,0x49525355,0x35505555,0x53455219,0x1BBAC1B5,0xA49AA8C0,0xBE2FC04E,
0x504B5050,0x50E0AD5A,0x2EAB2B4E,0x3A2E59A0,0x635DC3B7,0xC4D0B357,0x3F5DC140,0xD4DDC847,
0x6123B813,0x374951AA,0x5F5B4B34,0xC2144B5E,0x4A53A0CA,0xDD40AFB9,0x56404DDC,0xD3D0B833,
0xCC20AACF,0x41D7C6D4,0xD653504B,0xBE342343,0xD89B5D50,0x0FACC0D2,0xD2D2C793,0x52A2D8E0,
0xA7D6E3CC,0x425051A0,0xA2B8C3BC,0x0ECDC154,0xBFC740B9,0x3C54DADC,0xC4D1CB51,0x1351B1C1,
0xCFD6B8CC,0x24504611,0xA8C31B3B,0x35AA30CB,0xBBAED4D0,0x593A20C8,0xAF33B590,0x4C574720,
0x3640284F,0xA8545B5C,0x42411C29,0x20202921,0x422FB3CA,0x39515354,0x50513CC5,0xB4414943,
0x474444B7,0xC6C5D1CD,0x20A9D2CF,0xD4D1D5D9,0x3138B3C1,0xBACC1B42,0x47404C5B,0x34C3C22C,
0xB6494855,0x403CD2D7,0xC8D0CECB,0x494D50CD,0x44BC8453,0x54495345,0xB4353453,0x873B4843,
0x32BEBC2E,0x08505049,0x00B31DB1,0x479C272C,0xBAD4D1B8,0xC5323947,0xC1D9D8D4,0xC9B0CAB3,
0xD4D2D2DD,0xC1C4C6AF,0xC6BCD1B9,0x26CFBFA1,0x03B2C5D3,0xB6C4C8AF,0xBFC8C4C5,0x252A4D39,
0x432BAF9E,0x47314551,0x373AAA50,0x399341A4,0x30BCCA2C,0x28564E43,0x02274E3F,0xB2413A00,
0x2025352D,0x4D1EAC3F,0x1FA2394A,0x484649C1,0x4A3B2D46,0x9C515135,0x0C984F40,0x5348B7A4,
0xC6AD1051,0x493CA115,0xC4C29243,0x4341A3A3,0x9BC93742,0xA83135AA,0xA0D12532,0x38503B27,
0xC0B4A882,0x9F3CB03A,0x2AC5AAD9,0xC5ACBA33,0xB5BDA6B7,0x9239208F,0x373A2DA7,0xA1433E43,
0x074244AF,0xC5B4312E,0x33A20616,0x3E91A3BF,0x4035B089,0x4E4CB33B,0x1E40422E,0xB4434683,
0xB42B17C0,0x9EBBC6C3,0xB3C3B806,0xA618BBC6,0x948BBAAA,0xA337BBC6,0xA7B6ADC1,0xB2BCB984,
0x33041093,0x451AB212,0x31B7A050,0x39402EC3,0x2CC7C720,0xBC331D42,0xADB7C214,0x309537A2,
0x14B8D1C3,0x919A3AAB,0xB6C1CCBC,0xD2B33327,0x33ACC0CF,0xA6C7C19D,0x23A9C518,0x36374234,
0x4316A917,0xC13F4551,0x4238448F,0xB1BD4243,0x4529A039,0x429ABA41,0x22BD3C3B,0x8226862F,
0xC591A2C6,0x930F3001,0x90B0A0A7,0x17AC842B,0xC2B1B236,0xA9C5D1AC,0xA1223DB8,0xBC2F3CA3,
0xAA12A6BD,0x42A93D21,0xC3B6384D,0x32B8C0BA,0x33319042,0x35344130,0x454A4431,0x2342423D,
0x97022138,0x1AABB2AB,0x958A8628,0xBD2922A8,0x298FAEBC,0xCAC1A7BB,0xC79D99C3,0xC7C9C7B3,
0xC5CBC3C6,0x21B4C0C4,0xBEB4B9A2,0xBF9C2B30,0xAFB1B2CC,0xB5C11825,0x2E1FB122,0x45312638,
0x3BB01D3F,0x3340403B,0xB1372123,0x012D3919,0x3B022927,0x43253534,0x30433448,0x44464421,
0x4333233A,0x9446383D,0x08404433,0x40223722,0x27923F3D,0x3643A1A8,0x1BAE9038,0x1D3B4024,
0xAC1A23BA,0x9D97322A,0x3039AEA0,0x321F1124,0x87A3B630,0xAB1D2229,0x381795B2,0xB0ACA386,
0xACB02586,0x21BFBB8D,0x261D2716,0x2632318F,0x043AA102,0xC5B4B216,0x342835AC,0x9DB4AFAF,
0x3106B705,0x83AEB31F,0x2323A8B2,0xB38312A8,0xAE2AA6C2,0xB7BA8221,0xB4C1B0A5,0xB5230E2F,
0xBA9F9AB6,0xA8A43092,0x2D24A4C3,0x9EB53539,0x23353A07,0x36169B38,0xA5B6B993,0x39453A39,
0x1B1C1190,0x91219387,0x1C303D26,0x3F28142B,0xBBB63E43,0x403C31A7,0x91A0B586,0xAE374242,
0x311D9BB6,0xB1B01D30,0x90948598,0x280B9F1A,0x8ABBAF9A,0x30302590,0x3E453613,0x25301A31,
0xA31A4032,0xA293BBA7,0xA2B3B7A4,0xA119108D,0x2FA5A1A9,0xBC9F8C81,0xB12113B4,0xB2C1BEBC,
0xC0C8B7A1,0xBDB7C7C2,0xA5B2C0B6,0xB9B5B3B7,0x322A1AB7,0xB8AA2B3A,0x330881A7,0x22BCB825,
0x28811024,0xB32C9C1A,0x2A3517AC,0xABBAABAD,0x3243463F,0x30A61B33,0x2B353F45,0x301812A6,
0x1D250A23,0x032B2E25,0x3A3C3803,0x239D383C,0xAD04303D,0x2C96B69F,0x2FA8C0B1,0xB01184A3,
0x063394B2,0xBBBCA5A0,0xA4A897A5,0xA4AAB4A1,0x8A0CA498,0xA0A3A50F,0x3489A9BF,0xB79D1228,
0xADA63215,0x3D928D02,0x98B2233E,0x1D2AA786,0x2930AAAA,0xB5B18915,0xAF049EB5,0x97861592,
0xB0B32935,0x8AABA8A6,0x10ADB6B0,0xB1201420,0x372CA1B8,0xB1B62831,0xAA92210D,0x2E290692,
0xACB39D28,0x0C08ACB1,0x16311895,0x17202507,0x26354436,0x351C2720,0xADACA039,0x3A33A600,
0x2F2A2526,0x9D31351B,0xA2262991,0xA4B6040C,0xA0883931,0x3C321809,0x20259234,0x20302891,
0x393627B1,0xA62A3133,0x373A4238,0x3798A426,0x1E90213A,0x383C2E33,0x33358523,0x9A252C1A,
0x9F9F14B0,0x1809121B,0x9DA71D31,0x18A099A7,0x098EBEAD,0xAC99A394,0x292821AB,0x16A41714,
0xAE0E2837,0x3129958C,0xA9B5A91C,0x9E1C9FB9,0x323594A7,0xADA9222B,0xA3B02088,0x33839904,
0x1598A32C,0x2B26042B,0x9A03A2A9,0xAA1B8CAB,0xB007140E,0x05ACADB5,0xB3B209A4,0x0301A496,
0x8926B2A7,0x901721AC,0x121692A7,0xB6B5B9AD,0xB1BBA216,0x29A1ACAF,0x12B7BDA1,0xBDA10732,
0x0A918CB8,0xA69C2A02,0xB581302A,0x2412929A,0xB0B2A510,0x8B158FAD,0x2E3C10B0,0x24210C1D,
0x1A232A13,0x29001608,0x26293237,0x34373335,0x35231722,0xAB142426,0x3B3B2691,0x2F2A3332,
0x292D3E3B,0x2D1F1D35,0x27262124,0x1103A018,0xA8988EAC,0xAEA6B0A6,0xC0B6A3AD,0xA1B1A5A0,
0xB6C3C1B6,0xB009278B,0xA198B4B8,0xB1AC049A,0xA32926B0,0x96B1AE8B,0x1E812024,0x9D860F1D,
0x18A1BDBB,0xAC201625,0x008B98B5,0x97A4979C,0xB7BBA816,0x19A7B9AD,0x0BB3B8AB,0xC0B2AA8B,
0x0F2BAFC1,0xB8B8AB9C,0xBCBCA4B2,0xA9B5B6AB,0xB3C3C1B1,0x96861311,0x9FA1B0B8,0x96251608,
0x1A2A3017,0x3B292829,0x30A3223B,0x36302733,0x38363A3F,0x26353729,0xA52F3226,0x2694ABB0,
0x1B9E2F3E,0x373D2906,0x26B4B91E,0x1D413B2C,0x404118AA,0xA31C3736,0xB0033928,0x2823ACB1,
0x30A79232,0x2A38372C,0x272CA198,0x272B1C13,0x2030402F,0x21861404,0xB1B39A34,0x20212083,
0x301EB39B,0xB6A79B9A,0xAD09B1BA,0xABBBB2B1,0x251D3220,0x22122528,0x1B15AF13,0x18272501,
0x302B86A7,0xB20D1528,0xA4A62099,0x280C190F,0x0EA00729,0x8025152A,0x1D02B5AB,0xB4AC0CA2,
0x8E2B3494,0x9DA49C8B,0xA0B38A24,0x3C2B9484,0x1B8E961E,0xB6878127,0xB098A3BE,0xAFB9B3B2,
0xB10A2D1B,0x2B9A0C96,0x86A9AE2D,0x0402A5AD,0xA5198795,0xB5ADAEAE,0xBBB30CA1,0x86A0A6BA,
0xA1B1AB10,0xB7B9B2A2,0x9DA0B6BD,0xB69CA6A6,0xAA1A1DAC,0x331580B0,0x1DAF822E,0x3338333F,
0x30A4AA20,0xA2121D27,0x262F2A9C,0x2B241420,0xA1B2343D,0x2E929029,0x25AFA624,0x173F3836,
0x3D412AA2,0xA8902725,0x95183418,0xB1A99A16,0xA8B5B2AA,0x9C98AE99,0x92B0BDB7,0xAE9BA4A0,
0xBEB5A3BB,0xABB8B5BD,0xABB08827,0x17049DA8,0x20229F21,0xA99FA892,0x30322E9B,0xA012189B,
0xA49C2286,0x089C9413,0x00B4B60A,0xA59EA48F,0xA42391A7,0xB8A989AD,0xAC0416B2,0x0FA494AA,
0x95BABDA6,0x0E8DAC03,0x179BA9A5,0xAC232721,0xAB2E27A2,0x149B97B1,0x179C2232,0x20171D25,
0x85A3B290,0x801B0690,0x2E3721AA,0x04901C87,0xA40A3332,0x2714220C,0x35929D25,0x87122A3B,
0x2432AAB3,0x8D0F938D,0x97283525,0x83911211,0x0DB4971B,0x8714232C,0x2214A4A1,0xBB951803,
0xAD1F11BB,0x2A87A2B5,0x97A72A35,0x1B24252B,0x82A8B302,0xAC94A49D,0x1C341AB3,0xA5B0AFAB,
0xAEAB2125,0x21281B9B,0x1FA4A823,0x81121F2C,0x352F92B6,0x202E3031,0x0A3B3C30,0x1D8B2801,
0x279F0E2A,0x3C373536,0x39352030,0x921B1838,0x1435371C,0x1F231C9F,0xA5A32834,0x2AA193A2,
0x3213A488,0x26289B25,0x30423203,0x9AA7A296,0xA62A4032,0x31312C11,0x80B0A334,0x140C1697,
0x2D18A5A6,0x9F188900,0xB91C3713,0x109DAFB9,0xAAB5A331,0x1816240A,0x2604B6A7,0xB7B7B2A5,
0xB00F23A7,0x13A0A2AB,0xC1BE912B,0x06849AB4,0x3293B8AB,0x99028230,0x213117B3,0x058CB2A8,
0xADA9262C,0x20142817,0xADB9B212,0x9A97A29A,0x1D21B2B5,0xACA4A3A0,0xBBA393B3,0xB1AFB5BB,
0xABBAAA98,0x9FA88980,0x15A2BCB5,0xA395A208,0x25372BA5,0x9F881495,0xB0A51914,0x1A8D9389,
0x2F910427,0x9B041628,0x2022A0AF,0x8A200D0A,0x06273A26,0x1C101D14,0x92AA992C,0x9292998A,
0x2E2B9AA7,0xB7A8A995,0xB7998FAF,0x0AA9A8B6,0xB1B59313,0xA4A4A197,0x14A7BAB0,0xA5A4A193,
0x9B2F21A9,0xA5A2AEB2,0xB5B39A89,0x2B1D12A0,0x03AAAC1A,0xADA6AB90,0x0B1CAAB6,0x0D06A1B1,
0xB2132F23,0x918D8FA8,0x81B4AE8F,0x21051522,0x2B27A291,0xA4939818,0xA31A25A4,0x2C28289F,
0x959C2236,0x1D921D2B,0x340DA58F,0x171C112B,0x18372F17,0x97948494,0xA18F321F,0x2A282F26,
0x1F9FA028,0x849A9A1B,0x293092AB,0x10238A91,0xA7203428,0x0D931C9D,0x17A30521,0x17162034,
0x32299F93,0x8F9AA493,0x06343088,0x25312989,0x999F2A33,0x1E12271F,0x351C9E10,0x21291931,
0x12302581,0x1E1E89AE,0x9719312F,0x2728322A,0x20A69D1D,0x0592971E,0x32391D11,0x2329191B,
0xB0913121,0x0D131EA7,0x25A18C24,0x171A3238,0x2B23A1A1,0xA097AD97,0xA8252482,0x121711AD,
0xAAB1851C,0x058A181C,0x360DA690,0xA6A7A226,0xA71696AD,0x9587A9B6,0xB3A21E17,0xA09C2393,
0x94B4B6A8,0x96A3A51F,0x2F310F9B,0x9792A3A7,0xBAA01094,0x1F2416AD,0x13A50122,0x99A0202F,
0x2722ACA8,0x94A3B293,0xA226289B,0x861A01B3,0xAFB29E12,0x13122721,0x2F96A58F,0xAFB1B111,
0xA12395AB,0x24219BB1,0xA88D312A,0x97092810,0x24A8AE8E,0x13931A30,0x2F341B90,0x9690B1A7,
0xAB111A86,0x2C2C2DA0,0x15A41429,0x92862235,0x3216A9A0,0x0E9AA509,0xAD262912,0x9002A5B3,
0xABB48F12,0x80812B1B,0x1FA5B299,0xB6BBB983,0x9F0DA6B6,0x968CADB8,0xC0AD8780,0xAB9D94B2,
0x06B8B8B3,0xAFAD9C1C,0x9210B0B1,0xA5AFBDB8,0xB18321A2,0x0C2616AE,0xADB7AA01,0xA9B0930E,
0x2F83B0B0,0x8B97AC11,0xA02A2108,0x222386B2,0x94942923,0x1D2A3532,0x2D95A01D,0x0EA59A24,
0x2C372583,0x22289999,0xAE942527,0x1D1F2C9A,0x299A8F1D,0x898A233A,0x322C9197,0x2105A196,
0x8D333224,0x28312B0B,0x92B10025,0x8B972A30,0x362B9B8A,0x15859630,0x98272984,0x25280CB1,
0x9A842B30,0x1B293932,0x37899910,0x25101B37,0x303E312B,0x28239499,0xA6133226,0x1F31320B,
0x2C988B26,0x82A31B34,0x31278D96,0x2422A78C,0x9E303128,0x0C2825AA,0xA0AFA29B,0x0887212D,
0x310E9811,0x94AEB10B,0xA424129A,0x243182B0,0xA29F2421,0x9B043020,0x25A4AC96,0x169E9930,
0x28332C1D,0x1F209DAB,0xAD13211D,0x2B33350D,0x289E1728,0x8D952534,0x312C9283,0x2C1E9F15,
0xA0273223,0x02291EA8,0x929F0019,0x1E1A3432,0x32168A0D,0x88A2AF1E,0x02240C00,0x1E2502AD,
0xAFA88591,0xA7132C1E,0x2D9AA89D,0x90A60E2F,0x172A0A93,0x810AB1AC,0x9C062106,0x9226350B,
0x96A7A19A,0xAFB2A026,0x3426879E,0x1492A786,0xAD192213,0x8D2880AE,0x12A40C8D,0x93023631,
0x26228810,0x89A8B118,0x16272384,0x1F2797AF,0xB2A1861E,0x9F04278E,0x2B989BA1,0xA7B09C2B,
0x9016A1A2,0x0497B4B5,0xAE9D82A0,0xA71F20A6,0xA3B4B5AD,0xABB0851A,0x30229AA4,0x94A7B58F,
0xB29A9A92,0x102090B7,0xA5B1A19C,0xA4062829,0x30859D9F,0x19A09526,0x852C1A18,0x1E25A1AD,
0xAEAC9387,0x8624330A,0x2E8E9B88,0xA5AF8537,0x24210892,0x2514A5A7,0xAF182222,0xA01E21A2,
0x9CB5ACAB,0xACA91726,0x2B23979A,0x02A8B28D,0xA991058C,0x202C03B2,0xA6A48F19,0xA4982B24,
0x2197A0A6,0x8DA2A814,0x0827191A,0x2620A1AE,0xA99F1613,0x9C263219,0x2894A091,0xA0B28C2D,
0x24250991,0x2E23A59B,0xA4102229,0x0A2628A2,0x82A3A19B,0x95082E33,0x31210D0B,0x19A0A80F,
0xA2201714,0x1D2F09A8,0xA0A89291,0xA3972919,0x2906998A,0x04A4A12C,0x12272006,0x2320A5B1,
0xA382101C,0x152B331D,0x2A851201,0x0E951731,0x33342629,0x33280219,0x95202E2A,0x16332F83,
0x28141418,0x05833338,0x2F251E15,0x2095AB13,0x80262226,0x1F2B1EA4,0xA5A79291,0xAE932421,
0x21000893,0x94AB981C,0xA00F8283,0x2215B1B3,0xA8A78716,0xA023340D,0x0EA5A6A3,0xA0AD952C,
0x2B1D1010,0x178EA89B,0xB2041012,0x912111AF,0x86A38B9B,0xA4A42127,0x1D0C9605,0x2398AA8C,
0x881D1E1A,0x1C2F0AA7,0xA0A09705,0x920A2F24,0x31181681,0x12A09C2C,0x1B271C24,0x312A8EA1,
0x85182422,0x972B3324,0x2586898C,0x90AB082B,0x2527201A,0x2209AE99,0xAC9A8814,0x8B2420AC,
0x96A3A1A2,0xAEA51A28,0x2186929A,0x1CA5AE98,0xA3120B1D,0x192B8BAA,0x9DA2979E,0xAD952915,
0x15869CA2,0xA0B4AD17,0x93010C05,0x221DA9B2,0xB0A1A000,0xAC081DA0,0x80A8A6B1,0xABB29820,
0x9288988A,0x12A8B7B0,0xAEA39C94,0x972913AE,0x98A5A8A7,0xAFAE181F,0x1E04889E,0x89ABB28A,
0xAB959113,0x1219A1B6,0xA6A4A0A2,0xAE042B1D,0x19949BA5,0x9AB4A812,0x8F0D8607,0x241CADAB,
0xAAA6A086,0xA71423A1,0x1394A0AB,0xA5AC052C,0x211C1A0F,0x2990ADA0,0xA1048020,0x15312499,
0x15938398,0xA1952C2C,0x2E282018,0x2A94A124,0x8C122027,0x293212A4,0x948D9402,0xA5163226,
0x2A1082A3,0x82A79A29,0x16231E24,0x301FA5A5,0x9E96881A,0x842E310E,0x2515018C,0x89A02531,
0x24221F1E,0x3120A202,0x930F1229,0x1E2F23A2,0x058D9095,0x9F822A2D,0x220F1710,0x25A3A607,
0xA5978625,0x223005A6,0x8C999E97,0xA81A3424,0x240B97A1,0x88AB982A,0x11132021,0x271AA4A6,
0xA7A0A007,0x95262E06,0x109D98A5,0x9AA2172A,0x1C232120,0x2C10A291,0x95070E1D,0x1931249E,
0x108A9C94,0xA6992B2B,0x201E1C91,0x1EA1AA03,0x8D17232B,0x282E11A4,0x828F9100,0xA2203228,
0x2D241C8E,0x15A48627,0x05222729,0x2F26A3A0,0x97910C20,0x8F2A2F03,0x190891A1,0x9FA40928,
0x1C192118,0x249BAB9E,0xAB968B21,0x802710A6,0x009EA3A9,0xAEA12322,0x13158097,0x16ACAE8B,
0xA2931122,0x17229FB0,0xA2A7AB9F,0xAE8A2713,0x139196AC,0xA3B1A516,0xA2881119,0x2083AFB1,
0xACABA797,0xA91515A1,0x83A0A9B0,0xACB39615,0x92800C8D,0x0FA8B5A9,0xAAA39A10,0x0C2712A9,
0x919BA5A9,0xB2A5131E,0x130985A4,0x02B0AD95,0xA487081D,0x1E22A2AC,0x99A2A29B,0xA515280C,
0x170692A5,0xA3B1A220,0x9889150D,0x2302ABAD,0xA8A2A404,0x9F202199,0x1294A1AC,0xABA90F22,
0x141E1F10,0x2797AA9A,0xA0961427,0x112E1C9F,0x029AA4A1,0xA6972723,0x23222191,0x0CA4A511,
0x9B821224,0x282592A6,0x9499A091,0xAB0A241A,0x138194A7,0x94AE9E0A,0x93091E21,0x2115A5A4,
0xA2A4A388,0x9C212396,0x160F96A9,0xA6A41127,0x191B210A,0x2A91A798,0x8E07132B,0x2531228D,
0x21069094,0x9C17312E,0x282A2614,0x1C9E9522,0x8116242A,0x3130069E,0x0D0A871B,0x9C203025,
0x2622199D,0x81A48B25,0x10232B2D,0x301F9D9E,0x888C8920,0x08313014,0x2720819B,0xA0A3202B,
0x151F2415,0x2E84A48B,0x978A1830,0x22302394,0x1D129798,0xA10A2B2B,0x1B1D2280,0x12A8A68E,
0x96001827,0x2D2F0897,0x8F9EA18C,0xAB0C2519,0x272407A8,0x0BA10626,0x8B162A2A,0x2B1E9DA0,
0x85939920,0x802C311C,0x241591A5,0xA8A81327,0x19242A19,0x2A80A08D,0xA6A59223,0x892604A2,
0x829CAEAE,0xB5A5191B,0x950D02AC,0x8DB1B1A4,0xA896131C,0x271F9EAA,0xAFAFB09F,0xAC91139D,
0x141997AD,0xA4B29E09,0xA38F1118,0x2889B0AD,0x97A18B23,0x8D2D2788,0x818494A8,0xA6A49004,
0x0F202610,0x269EAB96,0xB3AEA024,0x162295AD,0x0790A5A6,0xB0A01C14,0x99868FA5,0x10ACACA2,
0xA59C1D27,0x1C20A6AB,0xACB1B1A3,0xAC938FA2,0x070D8BAD,0xA8B1A115,0xAFA00381,0x2393ACAF,
0xA5A9A888,0xAC8F88A0,0x92A9B4B6,0xB0B29D8E,0x96848496,0x0EA9B4AA,0xA3A59E15,0x213017A1,
0x8594A39F,0xB6A9810A,0x090388AD,0x09AAAA95,0x9B8F1322,0x0A03A6A7,0x99A3A9A2,0xA9162713,
0x0E148FA9,0xB0B8AA80,0xA0910797,0x2703AEAB,0xAAAAA414,0xA78005A4,0x220BA4B1,0xA3A0212B,
0x89131F10,0x20A6AD9E,0x9E911323,0x2731179B,0x200B9388,0xA38F2626,0x2E2D2880,0x27050A2B,
0x05182A34,0x2D290493,0x0D8B930B,0x91293023,0x2623119D,0x99AA941F,0x18232A26,0x342A800D,
0x959E8E2A,0x1B312782,0x3933249C,0xAE932830,0x8EA3A4AB,0x31262124,0xB09F2238,0x263025A0,
0x021D909E,0xAF871B14,0x121193AB,0x34161211,0x050E303A,0x35352411,0x98A29B29,0xA6832107,
0x191410A7,0xA2AC9A12,0x272B3022,0x3E37251C,0x09101335,0x2F393221,0x29281A15,0xA9A12129,
0x21232188,0x32198221,0x9C032B35,0x1A2301A4,0x8FA0ADAA,0x89162420,0x11272E1B,0x81A7A48F,
0x95001F24,0x312F039E,0x21090020,0xA11B2822,0x2D2B17A0,0x20801D2D,0x10243535,0x250D9689,
0xAFB0A414,0x292E19A4,0x34352E20,0xB5AD0B2C,0xA29996A7,0x2E98ADA9,0x17162533,0x871D0802,
0x1092A9AA,0xB4A60B15,0x9F8C92AE,0xADB6B4A7,0x12928089,0x38393022,0xA4A39923,0xB6A49DA2,
0x118AA5B6,0x9FA79206,0xA7842222,0x93ABB3AF,0x97A5A89E,0xAB020B92,0xA2A7B6B8,0xB2B2A198,
0x22232299,0x2C21191F,0xACADA124,0x8B0B9AA9,0x90A1AEAE,0xB0971710,0x880E86A9,0x1BA4A395,
0x0B1B2E31,0x2E2F150F,0x99A5A409,0xB0968195,0x19149EB3,0xA9A89419,0xABA30890,0x2391ACB0,
0x9CA39C1B,0x9E221F06,0x0D8DA8B2,0xADA89100,0x88202481,0x17A0A093,0xAFAE981D,0x212490A8,
0x2E229485,0x951C3031,0x20252485,0x89A7A003,0x80082129,0x29250F03,0x099AA189,0x8727261B,
0x2B2E2193,0xA1A50D23,0x94041F17,0x32229499,0x14820E2F,0x832A2B1A,0x1A11A5AC,0xA49D141E,
0x182C3015,0x20A1A08F,0xA4A68B28,0x2D301E92,0x261C8D07,0xA8102A27,0x15251FA0,0x2091910E,
0xA1873034,0x1D14A1A9,0x2B83ADA1,0x8823292F,0x2C312795,0xACA98721,0x9B07230C,0x33258D9B,
0x1199802A,0x97282620,0x2819A4AF,0x9C9B1928,0x1D253220,0x139DA014,0x8CA10123,0x262C1E17,
0x1C06A198,0xAB991321,0x2B2F24A2,0x2A112026,0x9D902432,0x231E949C,0x2581A206,0x1530332A,
0x22281098,0xA1A7841E,0x2121291E,0x352D2224,0x8298892C,0x132C2416,0x282195A5,0x061A2D2B,
0x911D2C25,0x229EA196,0x11931129,0x2A322620,0x1A03A182,0xAC891817,0x262826A3,0x05950B18,
0xADA20A24,0x220BA4AB,0x069AA209,0xA9142218,0x998FA3B1,0xABB3A9A2,0x9E882612,0x1699A596,
0xABB3AF87,0x9A859CA9,0x170CA6AC,0xB2A78806,0xAB938CA4,0x2397AEAD,0x01A70122,0x171DA392,
0x94A5B4AC,0xB1A59C9A,0x062A23A2,0xA2AAA09A,0xA6A0048D,0x230CA1A6,0x159AAA05,0xAB050B18,
0x9599A7B6,0xA5AA9C95,0xA1192B1F,0x20939999,0xA0B0A70B,0x1625198B,0x20219CA3,0xB4A99113,
0x971211A9,0x1F9DA29E,0xA5AA0029,0x8E1095A1,0x0FA0B5B0,0xA100070D,0x07231F9F,0xA8B2A8A1,
0xAAAA8A10,0x2722909D,0x83A0A113,0xAB0E1A0D,0x1316A0B3,0x939B820A,0x9C113227,0x1C97A6A4,
0x90AAA61A,0x17261717,0x222193A0,0xAEA89801,0x861D2195,0x30139190,0xA9A91832,0x191D8EA0,
0x2911ADA5,0x9E1A2825,0x012A2B8F,0x98A8A5A0,0x96102829,0x362F2080,0x248E9A23,0xA5010D24,
0x333212A8,0x878C292E,0x9B1D3127,0x2792A49B,0x2606042A,0x242A282A,0x25149D97,0xAE9E0120,
0x112A3187,0x26858A93,0xADB0862F,0x201A919A,0x280EA38A,0xA2011112,0x1027179F,0x0EA4A499,
0x10052D30,0x36322B24,0xA3AEB117,0xB7B29483,0x31484602,0x99A0A69C,0x14240C97,0x22A2910F,
0xAEAF2532,0xB2052523,0x3A2CADBD,0xB2B9A134,0x133F452E,0x802084A5,0x92B0B0A0,0x2511A195,
0x3387B5A9,0xAB182833,0x343E2DAA,0x13A6A982,0x99922F32,0x8E16211E,0x0BACB3A4,0x90232E23,
0x2C26A5B1,0xAAAD9921,0xA5002607,0x31129CA3,0x15958031,0xA20E141D,0x13AAB8B6,0xA082181A,
0x9B232C0B,0x1093919A,0xA5B39420,0x32302717,0x848B9922,0xACA19C86,0x95070CA8,0x23969DA1,
0xB5A0393E,0x242213A2,0x90A4AC97,0x0D099899,0x931F1509,0xB0B2AEAC,0xA2182690,0x2F14989F,
0xADB49131,0xA9968FA1,0x1C23A1B3,0xA0A2A69C,0x92222305,0x99B0AEA9,0x91920514,0x25261F1B,
0x0BA7B3A0,0xB4B0A689,0x811C90B1,0x00A09F98,0xABA21921,0x069BA3A7,0x15A1A786,0x8C1D2025,
0x0B0E9DAC,0xB1ABA49B,0x9215228F,0x27018B8F,0x98B1A320,0x13252320,0x3020A3A0,0xA482232D,
0x9C1920A0,0x109FA1A1,0x96A20E27,0x2726241D,0x17A4AD91,0x921D2123,0x2C33288F,0x04870315,
0xA79C2325,0x30240994,0x2A898E28,0x1C26292D,0x2127068A,0x10028A80,0x19333B2F,0x271C1C0F,
0x8EA1012B,0x272B2422,0x342B8086,0xA0851A27,0x802C2690,0x22809198,0x87912931,0x21262520,
0x2698B097,0x81152029,0x25332C87,0x8D928D80,0x9D062A24,0x352F2509,0x268A812D,0x8E21232C,
0x2E2C8EA4,0x10040B16,0x882B372B,0x26168092,0x04A20B2E,0x2B302D25,0x33299103,0xA6890E26,
0x102B249A,0x260E0297,0x9C952E34,0x24252217,0x2F82A791,0x1724232E,0x24332907,0x8C989686,
0xA28C2922,0x3029240A,0x2492912A,0x031C232D,0x3332139E,0x0D0F1420,0xA3223228,0x23098CA0,
0x90A98B26,0x14212425,0x281CA5A0,0xA6A29412,0x15312B96,0x1E078796,0xABA71C2D,0x11181A8C,
0x2D8BAC9D,0x9515212D,0x202D149D,0x90A1A0A0,0xA68C2722,0x21211692,0x91AFAC0D,0x97880714,
0x2623A0AA,0xA1A09B0B,0xAE8E2300,0x05969DAE,0xA0AD9E13,0x95020A12,0x1599B1AE,0xAAA6A997,
0x9B2419A0,0x94A1A3A9,0xB5B59807,0x939589A5,0x12A5B2A4,0xB0A29317,0x94179EB3,0x9BA4ACAC,
0xAC8C271C,0x160385A1,0xA1B4B295,0x93868708,0x2B25A0A6,0xA4A3970C,0xAB052287,0x210994AA,
0x98A60A2C,0x830F1D18,0x2484ADA7,0xA0999916,0x802D288F,0x089AA0A5,0xACA61422,0x1B191A83,
0x20A3AD91,0xABA28A21,0x182595AD,0x8698A29F,0xA8812B23,0x150A029E,0x8AAEA908,0x86162326,
0x272597A4,0xA5A1A38D,0xA11B2190,0x251B0A9F,0xA0AB1028,0x82141E1A,0x2E0EA8A1,0x88830725,
0x032A2981,0x07899EA3,0xA3A11C25,0x25262813,0x2595A310,0x98841028,0x272F119D,0x18089192,
0xA6092B25,0x22201698,0x17A49D1B,0x0E18242A,0x29259299,0x9395A081,0x8D272E19,0x23221898,
0x9FA60125,0x08121C1A,0x3114A39C,0x82021127,0x0B2D260B,0x21118A9D,0xA293292C,0x22242816,
0x2494A113,0x92910A29,0x282E1E98,0x060B9003,0xA7822A23,0x20201B96,0x1DA1921E,0x9701212B,
0x2119A3A2,0x94A1A597,0x9F202810,0x1A1608A3,0xA3AC911C,0x05132118,0x2A14A39D,0xA29E9921,
0x9A20189B,0x0E8AA3AF,0xA89C1F21,0x131C1F84,0x20A1A792,0x97931225,0x202F1599,0x8694A39D,
0xAB902217,0x1B150FA2,0x86A9A012,0x9E8D1926,0x271CA0A8,0x9098A48A,0xA4222815,0x09079CAC,
0xA6B09807,0x91102111,0x258BA8A1,0xA5A79E19,0x9023169F,0x1604A2A9,0xABA11B23,0x0A182091,
0x1EA0A695,0x98901129,0x1B24059B,0x92A0ABA3,0xA9931909,0x212318A2,0x0DA49917,0x978C1E25,
0x26229A9E,0x979CA302,0xA5162005,0x110A93AF,0xA7AC970D,0x95052116,0x2397AAA4,0xA5A9A511,
0x902085A2,0x0A8FA9AB,0xB0A90A11,0x8A1416A0,0x17A6AC9B,0xA09D0B23,0x171E9BA5,0x91A0ACA7,
0xAF8A1911,0x0D1300A9,0xA1B1AA94,0x9C96111E,0x291EA1A6,0x009DA011,0xA31C250A,0x1B129AAB,
0xA0A80421,0x0216241D,0x2987A397,0x94938E25,0x162D2504,0x160495A2,0xA7971D22,0x1A1F2480,
0x2599A00C,0x9E9A172A,0x1E258FA0,0x899EAA9F,0xAC901F13,0x16190BA3,0x96AEA10E,0x96892226,
0x2A1C9AA2,0xA1A6A60D,0xA1202183,0x171596AA,0xA6A8051C,0x88172412,0x298FA6A0,0x989D8A25,
0x0A281D94,0x0F01A5A7,0xAB9C181C,0x16212391,0x1DA1A287,0x9C99122A,0x282A0999,0x178EA394,
0xA7132722,0x1D2216A2,0x87A79612,0x9307292B,0x2E21959A,0x029B9D1E,0x8B292A19,0x242303A4,
0xA4A11123,0x041A2713,0x2C07A092,0x8B980229,0x1A2C1C0B,0x20149AA0,0xA3842323,0x13222786,
0x1E999D82,0x8291202E,0x2D2E1B08,0x1E089B07,0xA0182723,0x262C229A,0x16971022,0x001A2D30,
0x32250081,0x198A9024,0x072D2C24,0x212282A1,0xA1A10E1C,0x0E202A19,0x2702988C,0x9BA18E27,
0x09210F95,0x1805A2A5,0xA896191A,0x091E1B96,0x15A3A292,0x93951827,0x27260593,0x0399A78F,
0xA3152015,0x212518A1,0x95A49116,0x9B8E2224,0x2A159A9F,0x0A999720,0x96222418,0x1B1599AA,
0xA3A48516,0x8E1C2A1A,0x2391A196,0xA0A79623,0x12251591,0x1A03A6A5,0xAC9B161F,0x81201F9E,
0x10A2A39D,0xA79D1629,0x111093A2,0x90A4B0A4,0xA6851A02,0x0F2282AA,0xA1ACA491,0xA89B1211,
0x25139EA5,0x90A1A680,0xA016118A,0x1D1CA1B0,0xA4A49204,0x99142512,0x2294A3A3,0x97A59D22,
0x13261B06,0x1807A5A4,0xAEA21112,0x01201EA0,0x149E9D91,0xA5A31029,0x161295A2,0x06A0ACA0,
0xA6001610,0x021804A5,0xA1ABA195,0xA39A171A,0x24119AA0,0x90A4A60C,0x9F101085,0x202097AB,
0xA1A08212,0x98132617,0x22909E9F,0x91A19124,0x202A210E,0x2214A1A1,0xA38B191E,0x192B298A,
0x1E939005,0xA29B1D2B,0x24208E9B,0x1D8CA388,0x991B2724,0x1D2514A3,0x90A2950C,0x8A192C28,
0x31230381,0x0E978D25,0x142A2721,0x2F2C0B9F,0x9788212B,0x07262F1B,0x2D10938F,0x02911F31,
0x1E2B2418,0x148BA7A1,0xA4911114,0x19292596,0x119E9A81,0xA09B1928,0x29210591,0x1E909E0B,
0xA0152424,0x1B2614A2,0x0197860B,0x0222312A,0x2A200000,0x81A29F1F,0x15252419,0x2E2B0B9A,
0x9E901825,0x05242A12,0x2B14868D,0x008D1B30,0x16231C15,0x2087A7A2,0x990A1D1C,0x192D2A03,
0x10969483,0x97971F27,0x2C291C06,0x22069A14,0x99152123,0x252A18A0,0x18000D17,0x85203131,
0x291E0701,0x189C991D,0x0D272926,0x2120909F,0xA7A5930B,0x9A102186,0x2200999F,0xA1A68E25,
0x87110691,0x1D8AABA8,0xA590101B,0x9D11139C,0x97ABABAA,0xA7A78315,0x19188599,0x91A6AF9A,
0xAE9F9491,0x041799B0,0xA1A6A099,0xB0A31411,0x1097A6AF,0x97ACAA8C,0xA1081003,0x9498ACB0,
0xB2B2AAA2,0xA381169C,0x0D9CA3A6,0xB0B2A411,0x968A9AA5,0x1F8CABA9,0xAC9F8116,0xA28286A7,
0x8EA6ACAC,0xA5A30D1F,0x14150595,0x8FA8B09F,0xA7988E88,0x1F270FA6,0x9CA19D8B,0xAFA01611,
0x1D819FA7,0x06A09E13,0x9D111E1C,0x120BA4AC,0xA0A29E90,0x89222B14,0x19919997,0xA5AEA011,
0x0C181187,0x291AA09E,0xA6971223,0x8A1B14A0,0x1698A09C,0xA2952129,0x18131092,0x0AA2AFA4,
0x98111613,0x1B2D109D,0xA6A2A084,0xA9981D04,0x280681A1,0x0CA39320,0x98931120,0x2514AAA9,
0x008B8C17,0x05272A1D,0x1D019691,0x9AA68A21,0x26282B1F,0x28178B84,0xA9991522,0x11282094,
0x1E10060B,0x9D8A2D32,0x22202007,0x1F98A007,0x83202C2C,0x242A1A84,0x91A19704,0x01182A24,
0x332C2210,0x14950C2E,0x851C2324,0x2D25929F,0x8A041C27,0x95212D20,0x22859CA3,0x859C1027,
0x262D2A25,0x230CA08B,0xA497081F,0x202F2597,0x22118302,0xA6A0222D,0x221B009A,0x278EA003,
0x81232B30,0x1F261396,0x829F9D8A,0x82213028,0x2D271D09,0x8DA39424,0x031C2018,0x312D0698,
0x90021D29,0x94202714,0x250A969F,0x03901C2C,0x16242620,0x1A94A9A2,0x9B910619,0x202E2781,
0x108F8A03,0xAAA41321,0x201F1099,0x1D93A001,0xA7951221,0x891198AC,0x92A2A6A2,0xA3002420,
0x1103879A,0xA1B1AD95,0x95000E07,0x242294A3,0xAAA8A281,0xAB8F059D,0x1B84A0AC,0x99A38321,
0x9106160E,0x159BAEA9,0x9F989011,0x0426248A,0x939FA1A1,0xABA88E0D,0x1E1D0E96,0x1B98A103,
0xA79B801B,0x131C94A7,0x82979B95,0xA58A2420,0x868F99A5,0x9EAFAD99,0x9409120D,0x15149EA5,
0xAAAAA698,0x9F0D149B,0x1F0696A3,0xA6AB9021,0xA0979196,0x2093ADAB,0x988A0B1D,0x93201A93,
0x94A4A9A7,0xA19E1217,0x2425210A,0x01A1A482,0xAAA29808,0x20228FA9,0x00908200,0xA6882722,
0x181389A4,0x16A0A016,0x03212728,0x221799A0,0xA7A7A68A,0x871E2387,0x1981989C,0xABB5A611,
0x27281E06,0x33258112,0xAFA2122E,0xA286A1B1,0x30159EA7,0xA0053034,0x2B2B2088,0x91A6A911,
0xADA99D83,0x2B2E06AA,0x1C90950A,0x9A23322F,0x2921029C,0x15A09320,0x08252E2D,0x322D8397,
0x8E998724,0x0129301E,0x2207989F,0x9CA40C27,0x091D2419,0x311B9E9E,0x8C102532,0x21302808,
0x23128786,0xA194222A,0x252B260D,0x10A1A502,0x9B8F1321,0x2F322097,0x1C07041D,0x9F142C2A,
0x322B1D94,0x220C1B2E,0x9817292E,0x2615A4AB,0x1100021B,0x14303228,0x241A0D8C,0xA0A68023,
0x22272516,0x2D218211,0xA5A00726,0x1B281C9F,0x271F0986,0xA491242D,0x00110998,0x1EA0ABA0,
0x1220282C,0x202A2108,0xA3ABAA9D,0xA9951386,0x27230EA2,0x94A5981D,0xA6970C13,0x2414A4AD,
0x91948D1B,0x9C202915,0x889AA5AB,0xA5ADA38B,0x20292815,0x1392A290,0xAFADA482,0x0E220EA4,
0x220A9297,0xAC9E2229,0x8F828AA2,0x1B9EA89F,0x940C2228,0x0E1F839D,0xA4AFB0A6,0xA6911480,
0x201C08A1,0x98AAA012,0x94101B19,0x2B2293A0,0x9499911C,0xA60A1D04,0x1394A8AF,0x88981120,
0x821F2721,0x80A1ACA4,0xA5A7A28D,0x1A281D98,0x16819694,0xB0A6081E,0x918A94A5,0x16A3A89E,
0x99821C24,0x1823039C,0x90A1A79F,0x9C102217,0x1B201598,0x9AACA580,0xA1940C13,0x271C99A4,
0x9FA39F12,0xA40F148A,0x281C91A8,0x959A1527,0x9B11231B,0x13A1B1AC,0x969C9211,0x1D2E2480,
0x0491A29A,0xAFA88713,0x1E1F14A1,0x1899990C,0xA89D0B22,0x151795A7,0x12949D95,0x991C2A25,
0x070E059A,0x95ABA78C,0x0014201B,0x2E26088F,0x9E9C9520,0x9C111990,0x261A92A5,0x99981828,
0x9B122216,0x2391A8A6,0x89831526,0x15282613,0x1495A09A,0xA094181F,0x2429250C,0x1E929D10,
0x9B8A1926,0x2B2A179C,0x26160318,0x9D21312F,0x1B17049C,0x169E9A0E,0x04203030,0x26208A93,
0x99A39619,0x06282710,0x2D281889,0xA197172A,0x8409210E,0x2B0C9F99,0x80091D2C,0x1725250B,
0x1288A096,0x94081E19,0x262C2B1C,0x0E979014,0xA3971721,0x232290A1,0x909A9D00,0xAA901810,
0x1A1D99AD,0x149F9B10,0x97112425,0x2006A0A6,0xA0A59D08,0x02232004,0x20200F95,0xA9AE9217,
0x14170F8D,0x2905A395,0xA39C1228,0x1E28159B,0x83A7B0A4,0x8A1F2F2E,0x1C120F05,0xA5A5A217,
0x2E2410A8,0x2C869C2B,0x94A38D87,0xB2A62F34,0x08A4918F,0xB0A1A694,0x9AB2128D,0x920CB7AC,
0xB4B8ADB5,0xBBADA9A2,0x9D98A8B6,0xB0B29817,0x1B90312A,0x2F322311,0x21900328,0x31302120,
0x30189322,0x251B3838,0x2D373D39,0x0A8C2224,0x9A952128,0x93201487,0xA8AAB0AC,0xADB2ADAC,
0x229FB2A5,0xB7B8AA8A,0xAEB3A292,0x869CAEB1,0xA19D899A,0xA41B2208,0xA4ABB5B7,0xB1B5AFA0,
0x868A0592,0x0DA49F85,0xB1AD911E,0x142724A0,0x171E0784,0xA401211F,0x1C2621A2,0x3206990F,
0x0B882333,0x82201605,0xB3C0B8A5,0xB005058F,0x1B313918,0x1EA29E92,0x22333834,0x2683A008,
0x308AA90B,0x9F062A30,0x2480A2A2,0xB0A01D21,0x1617169A,0x3023988F,0x8B83202C,0x2B322812,
0x85159400,0xBAB4A397,0xB4B1AEB3,0xA0B1B4B6,0xAAA5A092,0x9297ACB0,0x94ABB2A8,0x022B3016,
0x3231260B,0x2C172331,0x2C313939,0x3A362B2B,0x2D212234,0x14252F2E,0x26220393,0x0E91232E,
0x202D342E,0x18939B05,0x80801B26,0x182B158F,0x8D9CAFA8,0xB7B4AA9C,0x95919BB0,0xA1AFAFA6,
0xB1B09811,0x9195A7AE,0x87A1A4A1,0xA911231A,0x1E1F8AAD,0x13999D06,0x292F332F,0x3D342524,
0x22141E35,0x222F322C,0x34312217,0x9E932631,0xA306261A,0x8BA6B0AE,0xA4A49414,0x93191198,
0x91A3B1AF,0xB4B0A092,0x9A8B91AA,0xA0AFAFA5,0xB2B09D85,0x9E97A8B1,0xA5AFB4B0,0xB2A5959B,
0x978DA2B3,0x8AA5A49C,0x89192927,0x20129094,0x909F9A0D,0x83222113,0x2321019F,0xA09F0D20,
0x041F230A,0x30199695,0x1E192532,0x1F2D2A24,0x2C22858D,0x1B263031,0x30333529,0x27110B24,
0x82102931,0x32302111,0x24150421,0x9E162B2A,0x2627159B,0x14900C1F,0x94122C2D,0x21169399,
0xA0A9A508,0xA2000392,0x0E8FA6AE,0xABAA9D05,0x9F051A92,0x13A1A9A7,0xA7A89C15,0x9610809D,
0x029CAFAD,0xAA9E0D12,0x9314139F,0x90A9ABA4,0x9CA0061D,0x2627148F,0x0899A180,0xAD951015,
0x9382A1B1,0xA4B0AAA1,0xA99F0504,0x1E82A0A8,0x90A3A407,0x01232315,0x171693A0,0xABA99A00,
0xA28E1195,0x82A2A9A7,0xB2B3A788,0x9085A0AA,0x2615A2A6,0x8F132327,0x13252613,0x80A2A192,
0xA2A10C1F,0x231E8398,0x21859B03,0x8E212B29,0x252C2290,0x99A18F18,0xAEA11313,0x1395A8AF,
0x8AA3A481,0x8D222316,0x241F92A3,0x9C990E1E,0x83212A17,0x1A92A09A,0xA7AD9C1C,0x081C049B,
0x220DA1A2,0xA1831D23,0x1B272491,0x19949480,0xA0951E29,0x1C1C0296,0x85A3AA96,0xA00A1812,
0x242915A0,0x90A09111,0xA28B201D,0x210C9DA3,0x96A5A112,0x9A131607,0x21199EAB,0x9D99091D,
0x8A212712,0x1C96A19E,0xA2A58E21,0x20261B84,0x1E04A096,0xA594131D,0x1C272199,0x17979604,
0xA194222B,0x211D819A,0x109EA68F,0xA110201E,0x1C2180A6,0x99A69D81,0x9E062420,0x2819929D,
0x8BA19421,0x8C1F2014,0x241F97A4,0x98931220,0x89202715,0x22889A9A,0x86970C26,0x252B261C,
0x261C8C05,0xA0841D23,0x18262292,0x23018C85,0x87042730,0x2C2B2214,0x260D8B1E,0x8A212B2C,
0x23291A96,0x0C938813,0x871D2E2A,0x2C221385,0x09988D24,0x8320221E,0x221D95A1,0xA39F8814,
0xA2811690,0x0D9DA6A6,0xA3A89518,0x8C0E0193,0x879FADA8,0xAAA2978C,0x8C190FA4,0x8DA2A4A1,
0xABA68217,0x171094A3,0x09A1A894,0xA3871317,0x1B2288A7,0x8C9F9984,0x9A102822,0x24168998,
0x87A39B19,0x8A1C2018,0x242193A2,0xA29A8516,0x9D101E86,0x17919EA2,0xA2A6901E,0x92038A93,
0x1097ACA9,0xA3988509,0x0D241B9C,0x0E989B95,0xA39F1623,0x18170694,0x05A2A892,0xA3861218,
0x192182A6,0x909D988C,0xA008251F,0x210F939F,0x8CA39B17,0x90171B16,0x180CA1A5,0xA4A29801,
0x921B218A,0x19899A9E,0xA3A68C20,0x07150B90,0x1A90A6A1,0xA4960819,0x0A22179C,0x15959B99,
0x9A8C2227,0x27251885,0x1D919C14,0x960D1F23,0x2327129C,0x8996900E,0xA0042420,0x2316849B,
0x10988C1E,0x0B222523,0x231D929B,0x928F0819,0x00242815,0x21079195,0x969A1226,0x2024200F,
0x240D9D90,0x9C841723,0x16261E94,0x16919691,0x98872328,0x21201486,0x17979F07,0x87192122,
0x23281395,0x9499910C,0x9D022013,0x24188298,0x849D8B21,0x87161C19,0x241B97A0,0x908B091B,
0x07252816,0x22108892,0x89951626,0x2026251C,0x240F9785,0x96021723,0x212B228D,0x2212040A,
0x9502262C,0x211F1601,0x1D929911,0x84192225,0x21251194,0x86929006,0x9117261E,0x231C108B,
0x8FA1921E,0x900A1413,0x231999A1,0x95928117,0x921C2209,0x1900969F,0x969E0721,0x121C1E13,
0x198BA196,0x9B910217,0x13241B92,0x058F9493,0xA39A161C,0x110B8698,0x0E9CA189,0x9A80141B,
0x101593A2,0x949B9B93,0x9C0B2115,0x11028F9D,0x9DA8A006,0x92080D02,0x1D109EA2,0x9E9B920D,
0x9614198D,0x128B9BA1,0xA0A1811B,0x8B05058A,0x019FA9A2,0xA09A9280,0x0A201497,0x909B9E99,
0xA8A3830C,0x10088A9E,0x089EA18A,0xA1900A16,0x111496A4,0x8F9B9C93,0x9F082118,0x098494A0,
0x9DA8A183,0x8B0D1208,0x1C109A9F,0xA19E940B,0x95121493,0x178295A0,0x97981021,0x800E1104,
0x1892A299,0x91830D19,0x0E21178C,0x8A979C97,0xA0980E11,0x1B19128D,0x1196970C,0x9681131C,
0x1B1C889D,0x88929382,0x9E071F15,0x1404919E,0x879E9211,0x0D1A1F1B,0x1D119493,0x9997900E,
0x021D1B87,0x180D828F,0x9998101F,0x10121180,0x2003968C,0x830E1621,0x10201683,0x0B899393,
0x90001B1B,0x1E1F1A0A,0x0D969510,0x948A0916,0x20210397,0x8085850E,0xA0821A14,0x13078C9F,
0x83988C13,0x83121C1B,0x12829B99,0x999C9782,0x801D1B84,0x17110091,0x9B9A071A,0x070F1183,
0x1F00978F,0x928A0A1E,0x01180D90,0x10879798,0x93011D1E,0x13171705,0x07999B82,0x87021118,
0x2323118C,0x02848510,0x98041812,0x1B150595,0x0591051A,0x8B0A181A,0x1706999A,0x828D8F09,
0x07202113,0x0E068590,0x999C8411,0x0E141607,0x20089085,0x938E071D,0x101C1190,0x180C8B8F,
0x94021F20,0x08111186,0x089A9D8D,0x82071319,0x1D200E88,0x90959683,0x95051407,0x1E1B1191,
0x8294031B,0x90011215,0x1D0F9597,0x05810014,0x841D2013,0x09809197,0x93978010,0x161C1E12,
0x1A048D05,0x95938416,0x141E1190,0x170E8487,0x9B89181E,0x05080392,0x10959686,0x870A191F,
0x0F148390,0x939A9E93,0x96051301,0x12130495,0x99A19508,0x98938786,0x1A05999E,0x8D918911,
0x970B1100,0x058D9BA1,0x9396000E,0x07151B10,0x09939B91,0x96968C0C,0x1620138E,0x130A8885,
0x9B8D1418,0x12130A93,0x17878B0A,0x860B1A21,0x11118790,0x0291968C,0x82161E15,0x16191382,
0x8A978A11,0x000A1311,0x21180086,0x8B8D8217,0x920C0E82,0x160C8F9A,0x8383131A,0x06151C15,
0x12909890,0x878A0314,0x17211805,0x06818E84,0x9C93070D,0x13140E91,0x1484840D,0x9387111C,
0x0C0A9097,0x068C958D,0x91101913,0x81038594,0x95A0998C,0x89010F07,0x160B8D90,0x9A9C9604,
0x96838493,0x0D00949D,0x99950311,0x9588028B,0x0099A19E,0x9192890A,0x0213088A,0x90979D99,
0x9C948586,0x10130A92,0x81939102,0x9A94830B,0x120B919A,0x0E838F80,0x910F1916,0x07068795,
0x81928B02,0x0D161D18,0x19120202,0x8B928D0F,0x0A171505,0x1E1A0D82,0x8D86131C,0x010C1207,
0x1A078A86,0x0909141E,0x0917140E,0x09849392,0x87021011,0x161C1B0B,0x0988860A,0x8D8A0712,
0x1A190A86,0x1308810D,0x94031315,0x0C0D8395,0x09898406,0x00111B1A,0x0F058A8A,0x88949380,
0x05151408,0x1110808B,0x9A988809,0x8A00038E,0x16018E8F,0x8B890918,0x830B0288,0x078B9796,
0x8D800F0F,0x04121280,0x8A98978C,0x918E0209,0x1716058B,0x01888B07,0x95830A09,0x11108395,
0x0289000C,0x8F021313,0x0A869494,0x818F8F01,0x0515150C,0x0708858C,0x94948A01,0x070F1181,
0x170C0000,0x8F8E0316,0x000A008A,0x13058E90,0x88071416,0x04111101,0x06909289,0x00031114,
0x16170F05,0x85909102,0x91810703,0x12110292,0x848A010D,0x91830D0D,0x11809194,0x0487850B,
0x8212130F,0x81859193,0x92938D85,0x040F1101,0x0D828983,0x95978C0B,0x00078290,0x0C009190,
0x968C050D,0x8B808393,0x80939692,0x8B830E11,0x070A8088,0x8E969990,0x8F800482,0x10110390,
0x90928707,0x948C0281,0x10009194,0x8289840C,0x8C050905,0x80879397,0x8D8E8400,0x02101205,
0x028A8D88,0x93958E02,0x060C028A,0x08818D89,0x97918107,0x85008694,0x068C908D,0x8B820F13,
0x0203858B,0x8592968E,0x85080C07,0x0F110688,0x8C918804,0x88000A04,0x150E8088,0x00850211,
0x89060906,0x0B038D92,0x8484040A,0x820C1208,0x028A908D,0x888D8506,0x0D120E02,0x07008882,
0x928B0006,0x050A028E,0x07838580,0x8E860A10,0x0402888E,0x06878E86,0x810A100E,0x090C0485,
0x888F8A80,0x80070E08,0x130F0500,0x8388820F,0x81080904,0x130E8189,0x00030D12,0x000D110A,
0x0B828987,0x02800810,0x0F13110A,0x06818880,0x89830407,0x0C100C83,0x04838104,0x8E88050B,
0x0503858C,0x04868A82,0x8A010808,0x8281888F,0x89908F89,0x85020A04,0x07038386,0x8B908D00,
0x83020183,0x0D08838A,0x8A86020A,0x87020582,0x0A818A8C,0x8080070F,0x040B0904,0x01868D88,
0x86820204,0x0A100B80,0x01858302,0x8B870207,0x0A078087,0x06808303,0x88010809,0x0303848C,
0x00858581,0x82060D0A,0x04018384,0x878E8B81,0x80050500,0x09068286,0x8C8A8204,0x85000285,
0x08808789,0x8584030B,0x82020182,0x02868D8B,0x84800305,0x040A0781,0x82888782,0x88860103,
0x07058085,0x80868601,0x8A830102,0x0302848C,0x81848201,0x85010806,0x01838788,0x84898781,
0x00060602,0x03018384,0x8A8A8580,0x81020284,0x05008283,0x86860005,0x82008083,0x03828887,
0x84810205,0x81030282,0x83888987,0x85840001,0x04050182,0x82878781,0x88848180,0x03038288,
0x82848200,0x87810302,0x01828689,0x81858400,0x80030402,0x01808585,0x85858380,0x01040481,
0x04008080,0x84840004,0x01010082,0x04008282,0x83000304,0x80020182,0x00838483,0x81000304,
0x03030200,0x80838480,0x82000101,0x04040082,0x81818002,0x82000201,0x03018183,0x01800003,
0x00030403,0x01008282,0x81818001,0x01030301,0x01808180,0x82828002,0x01020180,0x02008000,
0x81800102,0x00010081,0x01808080,0x80000202,0x01010080,0x00818180,0x00000101,0x01010080,
0x80818000,0x81800000,0x01008081,0x80800001,0x80000000,0x00008081,0x80800000,0x00000000,
0x00808080,0x80800000,0x00000000,0x00008000,0x80000000,0x00000000,0x00000000,0x00000000,
0x00000000,
};

+ 3
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleCashregister.h 查看文件

@@ -0,0 +1,3 @@
// Audio data converted from WAV file by wav2sketch

extern const unsigned int AudioSampleCashregister[5809];

+ 3462
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleGong.cpp
文件差异内容过多而无法显示
查看文件


+ 3
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleGong.h 查看文件

@@ -0,0 +1,3 @@
// Audio data converted from WAV file by wav2sketch

extern const unsigned int AudioSampleGong[27633];

+ 752
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleHihat.cpp 查看文件

@@ -0,0 +1,752 @@
// Audio data converted from WAV file by wav2sketch

#include "AudioSampleHihat.h"

// Converted from hihat.wav, using 44100 Hz, u-law encoding
const unsigned int AudioSampleHihat[5953] = {
0x01005CB1,0x77766877,0xEAEC2195,0xE0737099,0x82807B70,0x88909012,0x8B822303,0x8C04180B,
0x090B9207,0x878EA413,0x1EB09F15,0x0B9B2122,0xA09E0094,0x51B2B980,0xD1485CCA,0xDACCBF48,
0xE8DFBB47,0xD7B254E2,0xA3E0DED2,0x56D9CDBB,0xBDBAE652,0x33ECEDE7,0xE9F8E450,0xE7C7605C,
0xC7C3C8E3,0x6264BED6,0x2B3ED7C3,0x736C5226,0x51535760,0x29C2DED8,0xD2E3E10D,0xE3E5BAA3,
0x0FC3D2D1,0xE2DFECC3,0x6744E3EE,0xF1E9B453,0x5CE53B58,0x3341465B,0xC03B5A56,0xB60A5293,
0xA4D1DACC,0xCEF0C15F,0xF0E59E5C,0x41C3D5ED,0xE7B56464,0xD2D25CC6,0xB54A5760,0x424C09E1,
0xB7C0D8DA,0xF5F46870,0x53BFCFC6,0x54C9E2CF,0x58BFD95A,0x65656556,0x50ECEA5E,0xD4E8F3D7,
0xD1535FBB,0xE4C937D0,0x626A5F4D,0x57716736,0x4C6B62D6,0x656949E5,0x615AD16B,0x673FF0D6,
0x056054D7,0x91E0E3EA,0xE5B8D4DD,0xD5E6456F,0xD52DCBDA,0x6425EDEE,0x628AC855,0xE487DEDA,
0x54DDD5C3,0xD6DECA48,0x4E23614B,0x5651D7C1,0x9DEBEB41,0xCEE8E4B7,0xE05262C0,0xA4A9D760,
0x34AE5FD0,0xE8BD44DF,0xF559C0F0,0xE5F43FE4,0xDF616357,0x29D1564D,0xC26D66D5,0xD7D6DCDE,
0xD9905433,0xD75E4FD8,0xC5C6D8E4,0x5E68AF42,0x546C18F2,0xE0E1D4D9,0xDBE3C22D,0x719ED751,
0x5561CE45,0x6E4E3C58,0x71755D65,0x66789DDC,0x6E61D5E5,0x68DA616C,0x685CC074,0x70E1CE51,
0x73535E73,0xE6E8E370,0x6FD46463,0x1E62F2C5,0xF4557BC9,0x78E28170,0xD851B867,0x6E656BA1,
0xE27107D4,0x79A85A20,0x70D5F46E,0xBFE4E060,0x645AC550,0xF1E7DC37,0xDC5177AF,0xD0E75465,
0xE05BA422,0x6F6864E2,0xF6F0E1A2,0x416966D7,0xC273D8F5,0x426366E1,0x63CDCF4C,0x54E33B74,
0x65706A54,0x66E0D363,0xF3D55361,0xDDF25920,0xF5266B69,0x44E243C5,0xD96A6362,0x7555E6F6,
0x57EFF7C4,0x54727377,0x661E5A40,0x2EB7C45C,0xE55B5A5D,0xD0CCB2E7,0xD953CAB0,0xE8E0735A,
0xD0637156,0x4829603F,0xC25F5148,0xE67055D7,0x5F5852EC,0xC7AC6D57,0x5859615C,0x4C626340,
0x7D65E342,0x7268446A,0xE01C7377,0x424B620E,0x6D5A3856,0x60E1FBE9,0xEDB5CFB2,0xD83063E2,
0x713CE954,0xDD7A764E,0x71E95E5C,0xF067777F,0x5E7252EC,0x707964E8,0x0D354230,0x68666269,
0x77D0D463,0x604DDF55,0x5ED8E657,0xB5EB5C77,0xF0E8BF3B,0x67685509,0x5E7754E0,0x46F2F2DC,
0x5A6E5C60,0xE35E6C0E,0xC4E16251,0xF7D8625F,0x72DFC0D3,0x67E4F45A,0xC2E0E9D6,0xDFA0616E,
0xCCF5E8C8,0x39665864,0xD3E562B4,0x6A5C4B51,0x5D57F045,0x3B7046E0,0xA22F53D2,0x6D6AEBE5,
0x507754E2,0x6A2B6C56,0x7537C470,0xA4D6707C,0x48E0EB53,0x597B6C25,0xD2936034,0x63B7B7C6,
0x493EA465,0x4F4EE0E0,0xE35851D4,0x5772F1FB,0x61D9F3F1,0xBAF2E462,0xECE3A25D,0xBB40DBE7,
0xCFE53FD2,0xE4D5D589,0xD0E941B7,0xBEECDA61,0xDA606F63,0x43206949,0xF8DD666B,0xD0DB5ADF,
0x6141DE47,0xE8F3E43B,0xE66767E5,0xD36D58C5,0x63A1E3F4,0x57E4E329,0xECD45259,0x3ED7B8C2,
0xB0D9D267,0xF1607463,0xD96169EF,0xC9DDC7B3,0xCB716385,0x5E6EE0F5,0xCE54D5ED,0xD5A15BC1,
0xF3D15755,0xB5DCB0F0,0x67572960,0xC0D6F8E7,0xE0482CD2,0x683548C3,0x6CCBD85C,0xE9EE5B70,
0xE39E665F,0xF1EC5C4C,0xD7DB41C4,0xE9694BE1,0xD9E4CBE7,0x706FD1E7,0xEBF8647A,0x69275766,
0xB531375C,0x7107DEA1,0xB133DB5B,0xF1FAECE7,0x45583842,0xF9F8E1C0,0x52E3625F,0x6662F0D1,
0xF1E3D3E0,0x771CE3D3,0xF4DBB073,0xD64C72E6,0xBC5FE5E3,0xCC48E4F6,0xDAE062B4,0x65E7E756,
0x64E6CC67,0x31F2E475,0x31B1E437,0x92319BE6,0x6B3DDFA1,0x52CB5465,0x449D7279,0x325F6160,
0xCFD96351,0x4A54DCC5,0x6D69D3DB,0xE4EFEDD5,0x6B56E6D1,0x454BEFEB,0xC4D5F2EE,0xD75631BB,
0xF2B75ADC,0xE8587595,0xE35356D7,0xF60561E8,0x26E0EBEB,0xB34FC5AD,0xD6DEEAEB,0xCE695ABD,
0xE0E0C0E2,0xC058735D,0xB9416149,0x5A5448C1,0xF0E26B70,0x195847D0,0x625BDAE8,0xE36963D3,
0x506962D9,0x64666459,0xC2C5DB27,0xE5BE53DA,0xD21EC03A,0x716AECF4,0x66E8E74D,0x6660D263,
0xEBEEFAEA,0xD5CC40D8,0xF4C740D0,0xD6E7B9E8,0xB5C1DF2D,0xD7AEE4EC,0xF1F3DED8,0xCBD0D316,
0x7463DBE5,0x764CEC4D,0xB05E5F68,0x5A65795F,0x6AECEF63,0xCDD2556E,0xDC246F66,0x276FC1EE,
0x646248D8,0xE0D0B647,0xED6B4FEE,0xEFDA30F6,0x695C6120,0xEBEBE423,0x50EEC248,0xD4F8C577,
0xE7E6E851,0xF09361C3,0xB36B6CAB,0xD1B8E4EF,0xE70263D2,0xF2E86342,0x6166E2E4,0xF2ABCCE6,
0x376F62F2,0xBCDB359B,0xEAEFEEB0,0xF7E87460,0xC04D64A0,0x565CC025,0x70CBDFD3,0x71E6F889,
0x73B2FABB,0xB7DCD263,0xF7E1756D,0xE4617659,0x697663EE,0x9939505C,0xFBF0DBE1,0xCB5B70DC,
0x5BE8E156,0xF2C54F44,0xE15F56E4,0x51D3E8E9,0xDD506235,0xE9E26469,0x454DE8EA,0x60D2DDD1,
0xE8F2E851,0xEBE0DDE5,0xCEF5E4D3,0x71698252,0xD6566268,0x0331B3E1,0xD04D7165,0xDD5567BC,
0x4E77764C,0x6CBADFE9,0x71D6B477,0x506C3F5A,0xE17263BD,0xF846B6FB,0xF3687CD3,0xEB6F78E2,
0xECD31AE6,0xD3EDFAF9,0x53DED03F,0x554DE150,0xC1736FE2,0x6BF1E7C1,0x62F2CE77,0x58E4FD56,
0x5CC8EFD5,0x61B2F4E8,0x6AD9DC56,0xDE635362,0xC9F1EAE8,0xBA7034CE,0x6C42D9E7,0xE5ED6274,
0x7079E0F1,0xF2C4D9EE,0x646852EA,0xEEFBF4D1,0x6966715E,0x7A66E95C,0x41CFE34C,0xE26365C2,
0x47EABB25,0x6D68B458,0x7A73C1BB,0x50AC2C71,0x2053A5D9,0x50737A65,0xECE6E1DC,0x70C0BE2F,
0xC9F4E172,0x635A6661,0xE7FCF350,0x6F636768,0x4CD7E551,0xF33A6D30,0xE9C26794,0xE4C65A84,
0xEE2FC0E5,0x36BF5AEA,0x5ACBF33F,0x75D5EDE7,0xEEC86878,0xE5DB51D7,0xDFD7C8AC,0x5C54BAE1,
0x30C00C5C,0x5C63EAED,0xBAC7CAB3,0x6CE8F093,0x34625E6D,0xC6396F62,0x7C796350,0xE2606761,
0x525AB6E6,0x60B4C24D,0x5652DBBF,0x2D627162,0x6124C750,0x5DE1E248,0x646DE1E2,0xF8E09842,
0x7467B5E8,0xD6E0BC4F,0x5A6E7054,0x4F46F1E8,0x29F1EEE0,0x07E1F5D1,0xE424E0E6,0xE9BB6BCE,
0xECD262C1,0xD2E2502C,0x2050B750,0xE13D5D91,0xF6F8D832,0xD4E9615B,0x54D63F65,0xE23F604B,
0xD04ADBE1,0x35775DE3,0x6DC8EDF8,0x53716374,0x7074B3F0,0x67D8446B,0xA1E5D563,0xF2E94A6C,
0x6C6FB7E8,0x517253D7,0xDD6669DD,0xEDE8E1E7,0x65D85F4A,0xD0F4EF6B,0x2537A43A,0xC638D4DB,
0xC752573A,0x317070D5,0xE3D13451,0x68C1D3E1,0x4EC4C561,0x4EB26066,0x2DE5CE6D,0xE7E2334C,
0xE4CD6753,0x38707157,0xD46167D6,0x7126D53D,0x795ACF6C,0xE5F1EF40,0xDF565DC0,0xD7E2E7E3,
0x41DF565A,0x94E5D845,0xE8F0E944,0x9BE230C5,0xD13DD1BB,0x0E3B1FE0,0x67E0EECA,0x23E2B66B,
0xC2E75E76,0xCD32BAB0,0x656D37EA,0x603ED954,0x5870D5E5,0xD3C0E8ED,0x58D3E1C9,0x66D6D448,
0xE0BC5361,0xEFAF7166,0x495C5FCA,0xE24C655A,0xC6706ADD,0x65735DE2,0x5C613E17,0xC0CADBDB,
0xD4E7C558,0x41B3F0E2,0xF1E16357,0x315C45E5,0xE2E6DFD5,0x6B57E1E0,0xB7ECF2D8,0x50CA5054,
0xE0CD4D5D,0xB2BCB0C9,0xB2DAE1A6,0x4767716F,0xBC60C5EE,0x7A65E0DD,0x63515876,0x65672137,
0x6C5B4D51,0x9DA0D753,0x4364BBD3,0xC46D58E8,0xE3D9C9E7,0xE6D350A7,0x607169C1,0xEDEDEFCD,
0xE79A52DB,0xA84097E7,0xE5637256,0x616CA3E3,0xD04452C2,0x37DFB2C2,0x51542C53,0xBDEBCB45,
0x39C26C6E,0xC1366870,0x57DAD342,0xE8F1EDC0,0xE6EEF1E3,0x94595FBC,0x33DEF0E1,0x2BE7F9E1,
0x3B35E1E3,0x5B6220D2,0x32E3F2E6,0x5BBADB17,0x5548C641,0x54655E52,0x5C61493D,0xD8346D63,
0x6959715C,0xDA456877,0x556B59E1,0xCDCA4A97,0x5D379E42,0xD12ECA54,0xD0E5C2D1,0x2FE1D13D,
0xDFDB2A57,0xC8354391,0x55BAD7D5,0x82686861,0xD40ECAE2,0xC1ECD5C9,0x48626157,0xDBC55143,
0x54617062,0xC4C4C140,0xB9F0E346,0x3C93BB50,0xE7A21ECA,0x54630CE9,0x5B5F573E,0xD9D83B5E,
0xF3EDDBD0,0x615744D9,0x57D2F1E3,0xC14E158D,0x4B5853AC,0x69C35059,0x41D83C73,0x5B65CE23,
0x93666330,0x335760D8,0x5E5D334C,0xE2CECF2A,0xB396D5EC,0xC55950D2,0x6365602A,0xD0E4DF42,
0x2EC39A28,0xE2EBDB4E,0xE3C24CB2,0xF0E9C9DE,0x625A59CF,0x21C2C960,0x6A52E6E0,0xC9E0D460,
0x6254D2CC,0x5B3CD3D0,0x5E686666,0x653FC022,0x6C56656E,0xDAA06372,0xDB5553B6,0x6351E3F8,
0xB7E7D360,0xCDBA3759,0xD334EAF0,0xE5E8E3E7,0x5757BDA6,0x5265E0E5,0x55DAD6D3,0x54A8C556,
0xE4314F44,0xB9596745,0xBEE2F2ED,0x66E2F5E6,0x63CAD165,0xE4D0BD54,0x5FC9E8EE,0xC0D0D745,
0x303D4B4D,0x7054E2DB,0x27394A6E,0x5A4BC3D1,0x38BF676C,0xEF54776E,0x2E6731EE,0x69662DDC,
0x47C9CC39,0xDECDCF20,0x62AEE1EE,0x5741DE5B,0xB9E9D343,0x3AE6E352,0xE4D5D24E,0x50A3B1CE,
0xE3CCC4A0,0x563ED9E6,0xEAE4D134,0x5D5AD0EC,0xEFF2D941,0x47C3CBCD,0x66444D58,0x6A696B6D,
0x465A706F,0x6CBEC838,0x5FD16376,0x6E69CA67,0xC4DC5255,0x615B5C63,0xF3375460,0xBF6953F3,
0xB6D8EBF1,0xE5E7E144,0xA4CDEEF7,0xB6EDF3E0,0xF1E4E3D5,0xE4DFE3E8,0xDD537353,0x245D32E0,
0xC25F5DCB,0x24665AC7,0x6B6790E0,0x33CFDC54,0x366560C7,0xD9347167,0x304149D4,0x9ACA5860,
0xD04DA03A,0x5D7560DF,0xD2B19BD9,0x6F51EBE3,0xCAE3906A,0x5D45D035,0x6261D1C4,0x66B1D8B3,
0x58D0E933,0xE7D34463,0x3C47E9F4,0xC1E5CCDB,0xD2F2DC66,0x3013D020,0xE62211E0,0xD46156DD,
0xDC6D3DEB,0x33DDC5E9,0xC6F0F058,0x72674310,0x56D6D062,0xAAAD5260,0x6E50DFC6,0x505B6A6C,
0x60676260,0x5358D5E7,0x6FC2E8C8,0x3C57E654,0xF2E8F1F0,0xE34B68D2,0xD2F3E7D5,0xEAF4E057,
0xEAE3D1D6,0xEAF7E8D1,0x61D1E8E4,0x60385260,0xCDE04F67,0x7253C422,0xD3A96776,0xD3DB5B51,
0x7070584C,0x4847D0C5,0x5E6AC7B0,0x4A48E0E4,0xBBE3D13A,0xDA49585C,0x735A07C0,0xE6E84774,
0xD5DFB2CC,0xBDDFAABB,0xC7D75662,0x1C3D4357,0x622FE7E2,0xE1D66567,0x5C656F62,0xE6E1CB27,
0x6197C6D5,0x39543960,0xAA6052A2,0xDD5063AA,0x203A5AC5,0xE2DC3441,0x537163BE,0xE2C315DB,
0xD8F3D602,0xC9DE2163,0xD137554D,0xD0DAE5E4,0x6B6091BA,0x3166726E,0x64C7D2B0,0x72A3C964,
0x84DFCC72,0x6056B5D0,0xC64CC343,0xD9E6E5E3,0xD7DCC30B,0xE028B2D8,0xD9EAE5E4,0x573BE4E4,
0x27E6D856,0xD4E0E7C7,0xE2ECD2D0,0xA4C0DAB9,0x33505225,0x61CC1760,0x68616763,0x7132DC60,
0x60606774,0x625F6564,0x62617573,0x645A6B70,0x68BED167,0xC4CF586E,0xFAF53F67,0xC3C52FEC,
0xECE4E2D4,0xF4E4EBF6,0xE7E84BDF,0xF1FCF7D9,0xF0AD5FD4,0x5830E8F4,0xC0445E60,0x37484B39,
0x657461C7,0x5CDBE4CA,0x2CD0C361,0xB4375C56,0x766F3D87,0x5ACFC86B,0x6337D816,0x574AC056,
0x61CFEAD5,0x68B6D459,0xE15F706A,0x69641DE1,0x695C3044,0xE888606A,0xBCC2C3E6,0x5D466247,
0xE8EEC461,0xE69F5653,0xE2B7BFD8,0xD6594FE6,0xE9E7D9DA,0xD7616BC0,0xD8E7ECEF,0xCD57504E,
0xE5EEE5E1,0x3BC3654F,0xEBF1E055,0x636035D8,0xDCD1DEBD,0x1A5163A5,0x60636054,0x443A6D64,
0xE052676F,0x77664AE0,0xBDD7CD73,0x6B655617,0xE0EC406B,0xC1616E63,0xD4B6BDDC,0x45CAEEE5,
0xD4C1E3EB,0xD7D5DCE5,0x63B9E6C8,0x5851DCB2,0xECE02942,0x66C5D5DE,0xDFEDDD69,0xBED9A940,
0x55547370,0x6A64515F,0x630DC922,0x3DE9E063,0xBFCFB354,0xDF3A45BA,0x2B6B68AC,0xD9246707,
0x5A62C8E1,0x51B5E1D7,0xE2ECC65A,0xF0976A5B,0x60CD37C6,0xCE314666,0x515249D2,0xE8C4B13B,
0x6E666DA2,0xE0D05C71,0x586C64D1,0xD3364740,0x6A54F1F0,0xD5C9D328,0xB9E4C3CC,0xE2316460,
0x53B4F3F1,0xE4C5464C,0x1FB0EFF2,0xDB52D8E9,0x54572EE7,0xED5A6635,0xC5646BE2,0x74724BC4,
0x41C23F5E,0x45657172,0x12616042,0x597C764A,0xA96D64D7,0x4EC531C1,0x96F4EA51,0x545BCA12,
0xAAC4E1CF,0xE1E4CDCE,0xF1C8C2D4,0x63A3E9F4,0xDAEEDE56,0x87CCDDD1,0xC7BAD9DA,0xC6532AC1,
0xD0C2CBDF,0x52CAE6E0,0x4A604447,0x6E4BB8B6,0x43575B6E,0xCC5152D1,0x2B58593B,0x45331DD2,
0x4DCE435B,0x59A4B65C,0x766E565A,0xD4D7C06F,0x697750E4,0x9DD6E0D9,0xBC656345,0xD2CDD8DF,
0xC6CA5D49,0xD2F3E8BE,0x37C06E71,0x9B536166,0x5259EAEC,0xEBEDD9D7,0xE1DFDBDA,0xF2EFF0F0,
0xD5DFCDE1,0xE7EBA656,0xC04552BB,0x94E1D8B7,0x5D415262,0x555C4D4E,0x4C49BE31,0xB35342B1,
0x5B4341DA,0x7066626F,0x6244D955,0x69727870,0x564F4F5E,0xD756695F,0x4B50C2DB,0x4FC2D4D5,
0xB1DDD751,0x4961CBCD,0xE9D1D2CD,0x5B7169E3,0xD12F91D0,0xD3E1EBE0,0xE3DCD8DC,0xF0E545D7,
0xDFF1E6D6,0x6243575F,0xCEAC4463,0x715B490A,0xD7F1DC70,0xBFC2D8D7,0xF2DF4CB2,0x616757DB,
0xD1DAE8D1,0x6E51C7E1,0xC0D65673,0x63D4D64B,0xC50F6D74,0x54C36063,0xE5E46570,0x566359A6,
0xD6635411,0x636843E4,0xD7CC4B5F,0x47D6C5B3,0x2B695442,0x51D4F1F0,0xDAF0E131,0xD3E7D54F,
0xE342634F,0xE1DB38DB,0x50E3E9C8,0xE8EDC560,0xB4C1DBDB,0xB8D3DEDB,0x53E4F0DC,0x5044696C,
0x491E435A,0x5668675A,0x7261433C,0x4D13396E,0xE0456460,0xD24861D2,0x77746642,0x3CAEE250,
0x6654D4D7,0xEAE43066,0xDAC5D2E0,0x89BB5C46,0xF4F4CF4D,0x593425D8,0x61D7E155,0x5DD1DD3B,
0xD2E4E056,0x63614AB0,0xE9EEDC4A,0xE15B6A34,0xD2E9DAD9,0x47B8D04E,0xD1C35348,0xD463659C,
0x3F6343DA,0x3CE2C5CE,0x14C7476E,0x37554223,0x3D4808D9,0x5764635E,0xA96250C0,0x697969DA,
0x59C2CDC7,0xD5B84165,0x615A5225,0xDBEDE63B,0xA8136661,0xD8E5DAB7,0xDDE63957,0xCC484B48,
0xC13DD6E7,0x36E6E7E3,0xD748904D,0xF3E5BCE2,0x625CCBE6,0xC3DCE69A,0x596258D1,0xDBD76266,
0xD6943215,0xDA2621D3,0x41565EC1,0xDCDDDE95,0x6D46D1E2,0x58D9D768,0xDF315A5B,0x3C10A9D1,
0x3A6131D7,0x676B6543,0x5ABFC856,0xE3C16D6E,0xCE446960,0x2D65642B,0x5A6345D8,0x1EC4B848,
0xEE4A32CF,0x486668D9,0x30DAF8F5,0xDB40BFCC,0xCED3E7EC,0xE9E4D3B8,0xDEECE8E7,0xF0F2B23E,
0x155B50CE,0x45D5DFD6,0x9F44B14C,0x526558B7,0xE0A25344,0x6B7763DE,0x4E67602A,0x624B3CB0,
0x7140416C,0x61E6C171,0x5F636973,0x71655756,0xBE5C6870,0x675ADAD9,0xF5E13658,0xEBF0E4F0,
0xF6EAD4DF,0xD2644EF0,0x47C4D0DA,0xE1F6F0D1,0x4FEBD557,0x5FD7D863,0xE4C95968,0xB45163C8,
0x61646353,0x38B4A442,0x4D536263,0x656A513D,0x5D455360,0x72726461,0xCCD3BA44,0xE8E7E8D1,
0xDDC5C0DE,0xF6F2DEE1,0x346367DD,0x4D57E6E3,0xC4473DCB,0xE6D9C5D1,0xD6A7C4E1,0xE442A9D5,
0xE191CBEC,0xC3244DE1,0x70C3ECDF,0x5D41C165,0x49685C57,0x6F64C0D1,0x90D8DBAA,0x60DCE400,
0xE6C95C6B,0xCB272EDB,0xEEA87060,0x59696DA6,0xBC4E3C14,0x6366B4DC,0x57C3B348,0xC8C1606F,
0x6660532E,0xA9524551,0xE038623F,0x76660AD1,0xF1E25169,0xC66F72A0,0xDCD2A5D4,0x3E9BD5CD,
0x51EEF8EE,0x9CDEDC57,0x3C47373E,0x5FC6E2B0,0x52AEC34C,0x435D5443,0xD2C84048,0xD3D8E9E7,
0xDE677049,0xD462C6F1,0x5A61CBEA,0x54452F45,0x3ACEE4D7,0x71D5DA38,0x0DC9AD72,0x280B8232,
0x6E656259,0xD4E9C869,0x9A1D5743,0xD0605C21,0x204047D8,0x4DC3C24A,0xC8EFDE5D,0x565544B8,
0x59C9E049,0xE0C1B8B6,0x125019E1,0xE2535431,0x5064C2EC,0x32535B1C,0xD9D4D4B9,0x315665AE,
0x245C6257,0xD141DBE0,0xC5B3E6F1,0xBFA3CED2,0x4545E0E0,0x496352B4,0x65D9D4CE,0x595C5D6F,
0x3FAEC753,0x566B7063,0x4AB4B333,0x3D536661,0x69725DB3,0xD0D0D5C2,0x5EC6E3C1,0x4D4B6165,
0x17CCDBB8,0xC0E2EBDF,0xCD566961,0xEDE2D0D9,0xE2CDBCE4,0xE6A73CB3,0x6235E8F0,0xDFBAD1C6,
0x60C5E0E5,0xE1E6D95F,0x5153ACE6,0x5C426064,0xDDC3405C,0x737463D2,0x55605E65,0x5B656B6B,
0x2AD4CFC2,0x5F61665B,0xDB30CB56,0xBA6D69E0,0x5C5109D4,0xB3E2E5C2,0x6236DED1,0xB2E0D049,
0xD0E25565,0xCE9BCC0F,0xD2664FDD,0x48CFB2D2,0x45D6B35F,0xD1595E3B,0x35BCCAD5,0xB8E5EED7,
0x5D40DB3E,0xDEC5B1CA,0xB4D1C2D2,0xBD1EB8D1,0xDC505149,0xE4E2D1E2,0x62737150,0x51B6D9A2,
0x68632D2E,0xB6DFD452,0x31C95D69,0xB42B3B54,0x3F6E62C3,0xE99034C0,0x6158BFEF,0x5B55B79D,
0xE3D7E6D1,0x41E6EDF0,0xE0D6516E,0xD99E48B1,0xC1CA53C4,0xE5D34454,0x47C3C4D5,0x613FDAC3,
0x5C3BE2D1,0xC8DCEDE4,0xC42B5556,0xB04445B4,0xE9D84AB4,0x4A6353B2,0x6C8BDCD1,0xF33F7674,
0x27A2CEEF,0x51595C4E,0x4B5A625A,0xB7549608,0x5B706EA3,0x58DACD4B,0xE6CA5F65,0x4232AADE,
0xF1D346A3,0x5B68C6F0,0x5F3FD8DB,0x35E0E63A,0xBCF0EAD1,0xC4D1CA63,0xE5D4543A,0xD7D7C4DE,
0xF5E25936,0x58BFC0E2,0xF5F28568,0x5932C4E9,0xCC4B4E62,0x2A43C3D6,0x5D645B5D,0x5F59563C,
0x5F504C5D,0x75685C5B,0x6068646A,0x3A4A365D,0x5D687362,0x4C4A2753,0xDFDBC150,0x4FCBCEE0,
0xE3E8D650,0x8ADDEDE2,0xE2E9E0CD,0xE7EBE1C1,0xA2E2F0F0,0xE1D6C155,0xDDB2D6E7,0xE5D2DCE9,
0x456359DA,0x606B43D8,0x4CD59C51,0x63B4B069,0xC9546456,0x33486F64,0x6B3B6066,0x656C777F,
0x7068514B,0xD8CBA651,0x3FC05941,0x13EDFAEA,0xE5E6E8D2,0x686407DE,0xD0E6F6E1,0x5426A8B3,
0xF1DF6060,0xE88D4BDF,0x5FA2C5E7,0xE19F6C71,0xDA13579C,0x686442C5,0xE1DE114D,0x9E5D5D44,
0x40B1DEE0,0x5BC5D043,0xC3D6E2C4,0xC2E22160,0x43B0E035,0xC4ACD0DC,0x7063E2EA,0xD85D4B5F,
0xA2CD51DC,0xDB8E5257,0xD9706AD4,0xB9DAE8F0,0x2CFCF34F,0x703BC761,0x50E1F333,0x5AB4E2B2,
0xB553646D,0x044C6859,0x0B595B41,0xE3496551,0xEFA663DA,0xC77262D9,0x706BC4E6,0xE2E4E1D1,
0xD4D6BAB7,0xDC5D6522,0xE5E9E9ED,0xE7E45D60,0x4855C8DF,0xE81F7367,0xD7DBD4E2,0xABD550C6,
0x5E675055,0xB53EC2D2,0xD46A755F,0xD137C9F0,0xE2EC355A,0xF1D17169,0x48532BE4,0x6862C3C8,
0x7766D736,0xE13C6670,0x7361E8EF,0x1F514765,0xAB4F45D4,0xC534B0BB,0x53A6CEC9,0xADBEB443,
0xCFD7E3DB,0x4B4730C8,0x60BFF0E0,0x3BDFDB52,0x684BCE97,0xEAD6D63D,0x63552BDE,0x7253E9D2,
0x53DEE854,0x5DE9F3BB,0x53574160,0x1B2BC1AA,0x53656860,0x5E664589,0xC864B9D7,0x2A5157C7,
0x8FB14B4D,0xE4BB6C69,0x5B6253D6,0x62B3D740,0x5CCCD45A,0xD2EBE045,0x5066561A,0x513F4751,
0x5143C0B1,0x625C3C50,0x6062432F,0xBBE1D8B8,0x905C6255,0xE1D0BDB3,0x413941DB,0xD697D8C8,
0xCBC5E0EC,0xC4DEE6E0,0x3118CA1C,0x9A414337,0x45CFD2A8,0x4C5D6558,0x5C685D51,0xC8C1BE2B,
0x516041D6,0xE6B5674A,0x10A75549,0x695AC8C1,0xD1E7D65C,0x5C365F54,0x55566162,0x5A614555,
0x6384EBE1,0xE0E43155,0xE7D65558,0xEAE2E7E4,0xE7E7D3DF,0xE048B5E6,0xE9E4E3EE,0x1E51CBEB,
0xDC371048,0x5056D2E2,0xD0C9E9E0,0x5866CBEB,0x5BC2E9E0,0x6656A54F,0xA4B64866,0x5428A184,
0xCB514945,0x5354B1E2,0xDA365C56,0x626841D5,0x50515146,0x5AC1DFBC,0x65646663,0x545A4153,
0xC7375A49,0x5BB0E1D8,0xD7E2B466,0xECE2D1D2,0xD6B15ECD,0x52305049,0x60CECA62,0x6155CDC0,
0xE3320A52,0xBF423EEB,0xDD235854,0xE3D15E47,0xDDC96253,0xC48C39BC,0x5434CDE0,0xD6D6B43F,
0x57460BD4,0xD0C1D835,0xECE02CD0,0xAD562AE0,0x6048DDE0,0x184A6C6D,0x664E43BF,0x4C613462,
0xE1BC12CF,0xB25D4BD4,0xC747A6DC,0x4ED1E2E2,0xD8DB9053,0xD4B84B4D,0x46CBECE4,0x3ACC273F,
0x5AAADB57,0x696E5917,0xD4EDDA47,0xB9A4514F,0xE6D60428,0xB6424AC7,0xCEC55D5E,0x5245675C,
0xCDE1CE97,0x4E34B851,0x523A973E,0x4BAA091D,0x46541C5C,0xCFE8E1BC,0x5C19C52F,0xD5494A85,
0x32C35030,0x54BBD336,0xE52B475B,0x5AA047D7,0xBEBED652,0x505E683C,0x455641AF,0x564DC2A3,
0x46BBB952,0x451595B1,0x5CC7E121,0xDDE9E54D,0x3E2DDAE2,0xE5E3E0DB,0xB757C0E0,0xE5D6D0E2,
0x535ABDE7,0xC92BC8B3,0x6A54D3E5,0xB6D9DF58,0x5949DFDA,0xE0446E69,0xB9AE5117,0x18CEC7B9,
0x525B5C3C,0x509CBD46,0x6071685D,0x5A60CEDB,0x4B54DAD6,0x216B6B55,0xCECE39D0,0xD498CAC3,
0xC652A7E1,0xC8CBC8DA,0xA896E0E4,0xC02CC2CC,0xABDDBF46,0xD0515254,0xDEE6E7EA,0xEBC56636,
0xD2A45AC1,0x6145333F,0x5A64C813,0xD1E0CC2D,0x535B5B49,0xD1E0BF59,0xE0A1BAE4,0x566636DA,
0xC9AF45B0,0x5D43C7B1,0x50615461,0x6667A4E4,0x48525661,0xD1E8E02B,0xD33A5032,0xCBE3B1BB,
0x456445D1,0xBACDE6D4,0x2C686E54,0x53D7C4B4,0x4855C14F,0xB9CAD4D3,0x584EE0DA,0x59D5E4D1,
0x40DDE20F,0xDD94414F,0x9DC4D0E2,0xC6DC285B,0xB641AD4E,0xD3D6D7E1,0xCF40665A,0x4CDEF2E8,
0xBC666417,0x3BC6BCD3,0x665AB33C,0xAC4C5967,0x6334E8E1,0x27C15461,0xE2DB1D87,0x41B71E35,
0x5B628DBA,0x6143B9C1,0xC148805B,0x516751D9,0xC509524F,0x696D59D1,0x9B463155,0xC53EBCD6,
0xD2DB28B1,0xE4EADA39,0x57C3C9C6,0x98DAEFD2,0xD3CCCCB8,0xE1CBB3CD,0xC3CCDEEA,0xB340CFE1,
0xD1C74558,0x676655B6,0xC2C6C853,0x605D5CC9,0xD3CDC85E,0x5B5F5693,0x584B5A51,0x51BE4560,
0xB8C75165,0x5A17C518,0xE9E1CB57,0xC85222E5,0xB53360AC,0xA9CBD61B,0x459816C0,0x42B3C435,
0xC3EFE715,0xE92DB8C1,0x443CC5E5,0x50E2E2CE,0x4B60425F,0x3EC1D0D7,0x68645850,0x53854E65,
0x6659525D,0x544B1662,0xBFC9D6DD,0xBCDC0A55,0xD188DAD2,0xD2D6D3DD,0x643CDFC6,0xD425BC38,
0xAFE9E1D9,0xCEB04257,0xE1B423CE,0x60604AD7,0x50D4ECDB,0x18C35060,0x6F5C4E59,0x50CEE156,
0x604DDEC3,0x34C7B557,0xA390D2CD,0x50605E20,0x80D3E5DC,0x4B5F5733,0xC2661CC6,0x075CC5EC,
0xAEE73951,0xE0E24967,0xD2DEC7B8,0x3192B815,0xDBE2D2C5,0x5A5C47BF,0x6036DCBC,0x4392D049,
0x51655B47,0x214E5335,0xA6476030,0x235B5540,0x4F3FCBC5,0xCB0B5353,0x5D41D4CF,0xBDDBD5BA,
0x22D5DD32,0x4FCED7C3,0xD5DE2B54,0xD7E3C950,0x2DCEC3BC,0xB0B84957,0xDD39A1C9,0x0B3DCCE4,
0xCDE0C6C1,0xD3386665,0x434B30C9,0xDCDBD7CF,0x5A5E56C9,0xE5305452,0xB94B5DAC,0x4A534EB2,
0x56C42955,0xBB546668,0xA3CE47D4,0x5008A060,0x2F6754B1,0xE7E6B746,0x4255AEE8,0xD7122841,
0x4164BBEB,0x1DB6C325,0x0F4045C5,0x5A504E4B,0x529FC043,0xDCDECD2D,0xDFC0BEBA,0x205538DB,
0x2DBAD5D6,0xC0B1C12F,0xD4B2B0D5,0x4E309ED9,0xC0E0E3A2,0x48D9E4D1,0x081F4B60,0x5647D3D0,
0x4893D3BC,0xBAC21134,0x60645A4D,0x3A492F3A,0xD26556BB,0x5F48CBE6,0xD3C09453,0xCAC05E3C,
0x2B5E5024,0xCE6266CE,0x4059593A,0xC735D4D5,0xA74F5FB0,0x64A4E6DB,0xD8535154,0xBA26D6E6,
0xD15C61A0,0xB6E1CEC8,0x5964493D,0xD8A9D2D7,0x38C6BDD4,0xDAE15060,0x4745C4B4,0x1AD9D1C3,
0x58444D64,0xCB4F8FCB,0x95B3AECF,0xD5BEC2CB,0x415A50B9,0x5CCBD8CA,0xC3DADF4F,0x279FD0CE,
0xCFB5CDA7,0xD0B82BD0,0x97D5C4C1,0xD0E0E0BF,0x24122336,0xE3D82C2C,0xCCBA5BBD,0x504B6357,
0xBED53062,0x5F5C5550,0xD3B65E61,0x6C5BC1C8,0x51C0BC5E,0xB44F5A57,0x52435337,0x5B445362,
0x025D4450,0x574A43AE,0xD3B8C840,0x45E5D4D9,0x02D5356B,0x3ED3DAC6,0xDDD1CB3A,0xBEBA44C3,
0xE8EBE1C0,0xC2621BDC,0xD9CBEDF5,0xE5C5B9DE,0xDAA552D8,0xEBE2C2C5,0xE8DF49C0,0x37605CBC,
0xBE505621,0x5A113A86,0x4E635650,0x4A5F56B6,0xC8E1BA51,0x6A53234E,0x2E36245F,0x41D03D38,
0xC74F6063,0xC44F5CB2,0xD05E44D7,0xE4425FBF,0x4D4E5FC1,0xCAD34962,0xBD5D5D80,0xC9CFDED7,
0xCEB71DD2,0xDAC7C1AF,0x6245E3EB,0xD6D6E5C1,0xACC7D4DD,0x57C55051,0x30D9D757,0x4B40303F,
0xB3CA3256,0xD9D9D930,0x6149D3E2,0x38353C54,0x6555C701,0xD2C94D5B,0x20BC5552,0xB0544241,
0x3534D1D9,0x595142B9,0xB4BC344D,0x624DD2C3,0x36CED538,0x46E7E059,0x50D5EDDA,0xEDD85559,
0xE2E8D6DD,0xE3DFD6C7,0x5427B6D0,0xC3CBD59E,0x626A5C82,0x585D459A,0x55576560,0x643E3860,
0xC5B04662,0x65625C33,0x5AA1CA54,0xD7AF3F44,0x8D6042D4,0xB9D5A4D0,0xDBD65A67,0xDAE6E3C6,
0x444D4ACF,0x05D9D04E,0xD8E4C946,0xC4BFC8C4,0x61B6E0CF,0xC2D1DE31,0xE4C85436,0x4740D3E4,
0x36C3C4BE,0xECDC495A,0xC55655E1,0xC7D63C33,0xDC326159,0x5553600C,0xC4C19548,0x42C3E1C8,
0xC24C6962,0xBEC33F35,0x51C6CEBD,0xA055595F,0x1DA0D2DC,0xD2553C2C,0x587268E2,0x9DD8CE3E,
0x56626250,0x935B48C0,0xDBCAB0CA,0x5D5B4EB7,0xC2C02A58,0x472ED5CE,0x9BD8D7C4,0xD5044112,
0x5C50430A,0xD1A9D319,0xB6DED6DA,0xCEC63A54,0x42593AC5,0x4EC2C3BD,0xD851604E,0x6554CCDD,
0x3C58C042,0xD94C44CF,0xD8D331C7,0x50563FD0,0xD2E2D346,0xB0C291BE,0x4C95C7A3,0x465D5157,
0xCECED7D3,0x5262A6D7,0xE4E1D9D6,0xC99B41DC,0xCAC94022,0x59CCCB33,0xE4D35568,0x556163B4,
0xB0303834,0xB7C7474A,0x5E44B199,0x3848425C,0xCCAD30AA,0x4403E0DA,0x83203F43,0x2ED7DCD1,
0xB9A04650,0xB5C54045,0xAFDDD3A1,0x4735BB42,0x30BF4D4B,0x58C2D22C,0x94456066,0x6862C6CD,
0x3EC4E1B1,0x38404138,0xB3DFDC12,0x52625A43,0xB1973E34,0x405A4B14,0x2441D2D1,0xC8D1C6D0,
0xC6BB5856,0x3521B4CD,0x5125E2D8,0x38433F52,0xE4E1E0D9,0x3A4852CC,0xC0DB2052,0x51346865,
0x5D444464,0x0F37BF4C,0x2B5B5F40,0x56A7D3C2,0x593C4143,0x23C8D057,0xC2BFD6D0,0x141E52B0,
0xC1E4DF4D,0xCDBC4138,0xA0C1C2C5,0xE4EDDAC7,0x48B1D096,0xD2C1C1A8,0x25B1E0E4,0xAC99AA43,
0x5142CFD8,0x332DB840,0x4F54C2C8,0x4F6017C7,0xC996B6D2,0xD1B56251,0xB4472FB4,0xD65460AE,
0x54D4A1C2,0xD4445160,0x3BDED4D3,0xAFBF205B,0x46540FD3,0xD2214736,0x36CD3C44,0x62614A51,
0xBD25D092,0x49606235,0x544F233E,0xD5616B55,0x57383ED5,0xD1C1A058,0xC6B0DCE0,0xC43DB4D7,
0x5354D4E0,0xECD250AC,0xD3D5D7E7,0xC0243F39,0xD7D2E3E2,0xDEA252CE,0x04415447,0x243BD0D7,
0x43404D50,0x6654E5E4,0x21544057,0x473545CA,0x5F5B254F,0x2EA64954,0xD4C0B539,0x501C5EBD,
0xDEDC4366,0xBD24E2E7,0x4A525133,0x42B7D6CF,0xE2C94043,0x94C9C0CE,0xE3D3A8B2,0x4B24B8D3,
0xDEE3B64D,0xCBA0514B,0x5E563A18,0xD0A5514F,0x525646A8,0xC9CCC890,0x4E6662A8,0xCDD84D57,
0x4ABA5259,0x504FD4B6,0xB84D50A9,0xCEA5DECB,0xB22210E3,0xD2C8B534,0xBA333DD2,0xB435CFD2,
0xBBDDBD20,0xD9E7E031,0xBF43583A,0x48C2AF88,0xC1436060,0x4ED9D4BB,0x26586568,0x59C4D8BF,
0x5840D1AF,0x0055474F,0xC4D3D0D1,0x30D8A646,0xC9D4B15C,0xCEA9D5E0,0x56325D50,0xD2E3D458,
0xEBCB5E40,0x5C2DB1D9,0xD4E0D552,0xC545B1AA,0xBBC3CBE0,0xCCC45B5D,0x57C2C698,0xBBBB2F57,
0xD75C6649,0xC3A739D0,0x42696347,0x4B573DD6,0xB0D1454B,0x510D555F,0xB2425862,0x4A553FD2,
0x2A555A47,0xC4D6D6BE,0xAEC9D1C6,0xCDE0E6D4,0x36BFB334,0xDFDCD4A6,0xD84E4CDA,0xB3C0C9DA,
0xDED1574F,0xC5C0C7C1,0x60645C1D,0xC1C3D5B5,0x6054CBC6,0xA5431936,0xABAC3EC3,0xCB6260B5,
0x59535836,0xD199C6B6,0x3D4B38D0,0x5A5CB799,0xBFE4E6B8,0x42475936,0x4043B23D,0xDFC82E26,
0x40CBD1DA,0xE2C23F5A,0xD53D39E0,0xB14D93DB,0xC9DCD6D0,0xB44AB6BD,0x5AC6E1E3,0x56625F60,
0xC4DECFAB,0x515D5850,0x50C4C4B5,0xD45A6B6D,0x5F5D36E0,0x51D34B64,0x3AC2325F,0x23A5D5C2,
0x3E363D44,0x593ECEC3,0xD9E3BC5E,0x4344635B,0x55ACD138,0x5A1AD1A9,0x41C0365E,0x31BAD031,
0xCFC2ADB9,0x9C5241C5,0xDE514CC6,0x515DC6E9,0xE1D3DEDC,0x9F14C6E2,0xE3D3BABB,0x4650C2DE,
0xB3E0DFD0,0xB4325857,0x54BE535B,0xB62A2E5F,0x5054D0D4,0x4F449FCB,0x2ECD3B5D,0xC6DAE0D4,
0x3D321544,0x49D5E6CE,0xC0D0BD02,0xBEB1CECB,0x41294C13,0x56D0D945,0x3749565E,0xCCD9D3BC,
0x626234C9,0xE0C4A041,0xC3515A95,0x2DD12203,0xCF316663,0xDF405C1F,0xB445BFC8,0x605DB7E2,
0x53533141,0x2036B739,0x55666E53,0xE0C85247,0x40506148,0xE1DECD26,0xCCD64624,0xCDE1E0C5,
0x4423BA96,0xB4C0CECE,0xC2C8E8DF,0x3FCEC3AD,0xD5B2CFB0,0xC15241D5,0x5E66C2E1,0x4C564AC2,
0x525C5352,0x695C193D,0xC6D14F66,0x454C37C0,0x586030C7,0xD3C74353,0x51374643,0x46CBDBAB,
0x54A9D7B0,0x4BD0E2CB,0xD0AB414F,0xBEE1D3BC,0xDDD4C22D,0xD1BCCBD2,0x37DAD8CB,0xC9E1DA3D,
0x4F3BCAC6,0x32BA4454,0xDA344B40,0x472310CF,0x43585141,0x54D3CAB1,0x4E596069,0x5661419E,
0xC8425C38,0x5A49CAC5,0x20D6DCAA,0x569CB893,0x6251C448,0xD6AD525F,0xCFB6383E,0x4ABA34B5,
0x3CBD3056,0x28C0414E,0x57585E61,0x45B9D8CA,0xC7446060,0x91463DC9,0xD2B0B6C8,0xA335B4D1,
0x20DCE4D5,0xCADDCC2E,0xD5D12BC4,0xBBDFCA21,0x0B545459,0xD7E5D6BF,0xD0C34141,0xB1D2D6C6,
0xCB974C34,0x47DAE4DC,0xC0DCD450,0x31A6474F,0x63A4CB30,0xC92A4E63,0x5B5C09D5,0xCA4E6258,
0x3155675B,0x14465498,0xC4445C50,0x626861B0,0xDABD4359,0xCE3831CB,0xE4E9E0DF,0xD9C8CCCB,
0xA8D1E1E3,0xC2C83DA5,0x8D5782C6,0xCA543BC0,0xCBC340C8,0x5518C7CC,0xD0C24457,0xB849584C,
0x286261BC,0x54A3C1C6,0x3ECDDA3D,0xA0626154,0x40DBD7DF,0xBA525E5B,0xCBAE3CBE,0xABB1CD25,
0x4B3315CD,0x48CEDC18,0x403FD5CC,0x5E61C1D3,0xD6E1E2B5,0xDC4941C6,0xE5DC18D9,0x9F5F5BCA,
0xC628461F,0x59B7C0C7,0x4187C250,0x4D33A7A7,0x40596055,0x59605247,0x4FC8922F,0x3A37DB26,
0xDB6055C2,0xD4B64FD6,0x47D0BACA,0x9E51535E,0xD3CEE5DF,0xE0C2A3D7,0xE0BA31D6,0x41D3C1C6,
0xAF446263,0x51D1E8E7,0x5A5C5462,0xC535343A,0x51BCB2D0,0xE1E2C15A,0x5136C0D0,0xBBC13A55,
0x8F2B4633,0xA1B4A5A7,0x5A564A44,0x44274552,0x3ED4E128,0x46933547,0x5BD7295D,0xBEDCBB63,
0xC91A2B08,0xCF2122C3,0x28A5C4D0,0xD5E9D93C,0xD0D3CCA4,0xD0CBD1D3,0xD24243CC,0xD1D118C5,
0x3A375320,0x565D6260,0x3BC0626A,0x57696B61,0x6637D5BC,0x521A1756,0x60C6E139,0xD9E8D25B,
0xB411A32A,0x5C5D4FB1,0x304E4557,0x5350CAD2,0xCF30C2CB,0x435CC1DF,0x4A942AC9,0xDAD75664,
0xAFA29ECA,0xE3DACC24,0xD4DFC5D0,0xE3BA0FD5,0xD0E0E6E9,0x41D8D2B0,0xD3C4B250,0x4730D1D9,
0xC153CBB8,0x995154D3,0x4C535740,0xD130503F,0x4746634D,0xC10A5F68,0x573A26C1,0x47513E55,
0xBEC7CBCC,0x56381218,0x903B445B,0x546049CE,0x4C4F5145,0x61645352,0xC607B940,0xC79C47C7,
0xA5464D31,0xBBD111A8,0xD6CCC139,0xE7B9C1DF,0xDCB42EE1,0x33B8A5D5,0xA5DDC342,0xB7D2A157,
0x43DADA19,0x68B1D052,0xD2D5DA53,0xCE4D40D3,0xB0B05649,0x4446414C,0xDDAAACD4,0x99474BD6,
0x98D72956,0x5A35C884,0xC84F5358,0x6156BAD8,0x38B53050,0x6827A859,0x1A364863,0x8E304036,
0x494A4B45,0xBDDADCC0,0x26D4D42B,0x44ACC329,0xD8E0CF38,0xB6CCD4D3,0xCEC1D8DB,0xA7D6A115,
0x594AC6A4,0x41BAC83D,0x5A2C3657,0x37A7D310,0x60612BC5,0x51422F54,0x56635148,0x9946B4C7,
0xD1595BB4,0xC41B26D1,0x59599AD3,0xD9372820,0x47C2CAE0,0xDAD8C34A,0x414C37C6,0xE0E13448,
0x46314E46,0x5BC9C24C,0x04E5EE3C,0xD1D6B53E,0xD6D3D0CE,0x384B4D10,0x47B6C7C5,0xD6D74661,
0x525EB0DF,0xC6BE4643,0x422FC7C0,0xE0555C25,0x4A5049DA,0x384F5D4D,0xDCDEB155,0x46944D3B,
0x43533444,0x41D15955,0xC1C44164,0x8202423D,0x5059CBCD,0xBC5D56D2,0x4357D3E0,0x0D30A8C9,
0x39D4BBA6,0xBE364E5C,0xCDE4C61A,0x59473442,0xD9D6D152,0xB5C143C7,0xD7D0D7B9,0x599DD2D7,
0xB7D4D740,0x64B1D183,0x1433B658,0x40CDD4D7,0x33604343,0x50D5E3DB,0x5131D31C,0xC6475331,
0x354D5242,0x413FACBB,0x9FC5C930,0x4F5D46BF,0xC0175152,0x52D5E0D2,0xA9A7D04A,0xD1DEE1D7,
0xA24E5B28,0x385934D5,0xD44343B0,0x3DCF2EAC,0x0349525A,0xD8E1E3DC,0x4667683A,0x05089890,
0x6A65A7B4,0xB9C4D79E,0x25834527,0xD2D29E50,0xB5873ABD,0x9C4D95C5,0x53CCD5CF,0xCFE0DA33,
0x4B5495C0,0xC6C4CFC0,0x45525A46,0x55DDCA3C,0x8BCA536D,0xDEC3414C,0x484744CF,0xDDA4443D,
0xAB2828D1,0xC02E6158,0xADDD1C30,0x27BE3762,0x4651559C,0xDCE19556,0x3EB92B33,0x9A52C9D1,
0xDB4544CA,0xA132C5DB,0x2E354E13,0xC7D34556,0xD6D62A27,0xD14F5D45,0x47D2F0E7,0xC1C4C8C9,
0xD494BCCF,0x5842D1D8,0x4C44242B,0x5B5AD2CE,0xB23E4530,0x6156B5BD,0xDDE1B153,0x46585043,
0xCBD3B491,0x4E5208C0,0x544AB5C7,0x4B47364D,0x6B5DBEB5,0x41CFC263,0xAFA24849,0x533AA282,
0xE0C25452,0x656436CF,0x504B8C3D,0x5B4DB341,0x20C9D23B,0xCFC53036,0xD8B3B8D0,0xB3D6D1BA,
0xC4D2C1BF,0xE4DFD1BE,0xE0CB3DD3,0x5D31DDE0,0xDBBD5459,0x2B8D51A5,0x48C0C444,0x3D283C50,
0x41C8D8C7,0x4C4C5560,0x474EC1CE,0x3D4C4F51,0x1A534535,0xB2A231C3,0x52525134,0x3034959D,
0xDBB94C51,0xAECEC2D0,0xD0C6B4B6,0xAAC4C0A0,0x3D1EBAC0,0x47605C36,0x184BD1D2,0xB3E3D5B1,
0xDFDF2358,0x42E2DBBD,0xCEA69454,0x615F57BE,0xB43A8037,0x4953B9D4,0xC2D21850,0x2433605D,
0x3BA0C3B1,0x249D3D47,0x56574D2C,0xA3D5C04F,0x032D4253,0x3FB22F2A,0xC2C2D340,0x5E4C44C4,
0x4E463757,0xB3D7C44C,0x57594E09,0xE0D24353,0x5040CDD5,0x353ABCB6,0x273D999F,0xA1A1E1E0,
0xD83447BC,0xCE442FD9,0xDF2C570E,0xD52050D7,0xC3C1D9DD,0x3197C1B0,0x50BCD5CD,0xD53C5E5F,
0x914944D3,0xB7586451,0x4D53BCDE,0xC2D2A333,0xC8B7455D,0x8DA2B0C8,0xD4D38D48,0xA4C89CD3,
0x60BED50A,0xD2C84A63,0xBBB04245,0xB94D4817,0xB2BFD4DB,0xE3DCC1BF,0x50AFBAD6,0xAAC1C646,
0x3F584EB8,0x5C5E91A5,0xDEE1DCBA,0x56404BA6,0xDBDCBE53,0xD8885D9A,0x5527C084,0xC1415354,
0x521ACBD1,0x29C4A94F,0x528F0A4A,0x4142B6B5,0xD7BAB74C,0x4937CBE0,0xDDA3431A,0x51A4DAE5,
0x2FD9B35B,0x5242B141,0x62542750,0xE711565C,0x1A4F52E0,0x55C79235,0x32C2C74A,0x5140D394,
0x453C4B52,0x5954E3E2,0x182D3644,0x535525CF,0x464A4551,0xDA253E39,0xB627CCE9,0xE6C54033,
0xD9D130CE,0xE2CA5E35,0x305553D0,0xD8E0C921,0x41AEA337,0xC5D2DBCA,0xD4CA309F,0xE23F54C2,
0x494599DB,0xB74EC5C9,0x6053B0D5,0x3C535962,0xBD5444C9,0xCA5355C0,0xAB1A37CD,0x9CBAD6CB,
0x8DCD3540,0x583C9141,0xD4C8495E,0x4DA54B42,0x51C4B24C,0xC1D8B359,0x15CF9526,0xCFC04862,
0xA4DCDFDA,0xC0DBC350,0x458E383B,0x4C46BD35,0x534EC3CC,0x424E5454,0xCBCCC024,0xB3D4C5AF,
0x43DACD38,0x813FC550,0x17C2D9E2,0x47B4D3AD,0xDED14541,0xB85940C5,0x4DB8ACCF,0xABD4D521,
0xDE52B3C2,0xBC4220E6,0x592AC0AB,0x53C05160,0x60385765,0x5038B15C,0xB2144957,0x4733BDC8,
0x4C574842,0x574DD0B8,0x533699C1,0x5D9BC056,0xB792435A,0xC446B8D5,0x05525542,0xD1CFD6D2,
0x805243D1,0xDDDDDFE1,0xB1A7AFC5,0xB1273042,0x9CBECFD5,0xC40A4731,0xBA88BFCA,0x29BED1BB,
0x314728A3,0xC7C022C1,0x2B5E5937,0xD34D34D1,0x4A5151C2,0xB7B29412,0xB3BA4622,0xDC315D60,
0xD8AF53C7,0x525740CF,0x464AC0C6,0x4F0FC7C3,0x4D552C4C,0xC7D6D6C3,0x544A4C46,0x1824CCC1,
0x47414431,0x33542935,0x6161B1D6,0x32D4D90E,0xD8DAD426,0xCBCA46A0,0x344B3E31,0xC3C8B9AC,
0x2C9DB8C3,0x29C5BB23,0xDFD21B3E,0x99D73121,0x4B413A52,0x51B7C638,0x481BB242,0x214D5E61,
0xBDC6BBD2,0x4F5B6157,0x3F904955,0x3CD7DD92,0xC6BD4352,0xC112219A,0x9D575C32,0x4544B4D5,
0x4E483128,0xC9CBAF57,0xD9D5E1E4,0x284E3BC9,0xD3ACD6DB,0xC14351C3,0x0CC0C6CB,0xD7E2D9B6,
0xD3355F4B,0x4425A1CC,0xC63A3144,0x872DA4D7,0x41A9A142,0x5C533B49,0x33D3D135,0x5A60645D,
0x2FA45458,0x24555B5B,0x494945A5,0x41BFD142,0xA3C7C5C8,0x4A3A273B,0xBDB8BD4B,0x5B2E31B9,
0xDE935559,0x2A4432CF,0xD5C33344,0x5B3ECEDE,0xB0E5E9B3,0xD8DD365C,0xB7E3DCD0,0xB285BC44,
0xE34753B8,0x48D1D5E5,0xCDC1AF53,0x2ABADEDD,0xCCC53294,0x595A4C2C,0x46D8CF38,0x60585961,
0x5329CE49,0x9AA25158,0x324A534C,0xBBCDCCA6,0x435B4ACA,0x518CE2D6,0xD0A5504C,0x4E5F07CF,
0x298732C6,0xD3DA1D53,0x44491DB2,0xB4465D52,0x2936B9BF,0x474E30C0,0x8E23AE93,0xC4C3D9DA,
0xC4413A2A,0xABAAB4CC,0x25234F36,0x5E4ED4CE,0x2AC84055,0x1D555E62,0x4B53BBDB,0xC0544633,
0xC638D0E3,0xD8D5C2B1,0x9801D3E0,0xD3D7BBB9,0x4BB2D8C6,0xC14C1BB8,0xE3D41EC8,0xC50146CC,
0x321A2C27,0x41B23B4A,0x35DED551,0xB14D5553,0x474643BA,0xD7CDC131,0x2F4A39D3,0xD0D0B543,
0xC64F5891,0x38B44229,0xCEC13648,0x595C572C,0x442C5257,0x5356334D,0x589CE0CE,0xAB455D5C,
0xCAB032B5,0xCBD9E4D2,0x3447D3DE,0x444435B2,0x3C9BCCAE,0x6333E5D6,0xC1D5AF55,0xD4C8CCC3,
0x4C4ACBD5,0xD15232B7,0x3921C8E0,0xCD465E4C,0x4D2BC2CA,0x36D4D939,0xB8415145,0x3BA55244,
0xC0A13D54,0x3CBAA420,0x0346584F,0x35B5C4B4,0x4B3BAA31,0xA741433F,0x5435CDB8,0xB4299C11,
0xA7C7DFDA,0xC4D4CCB6,0x4E9AC7CB,0xADDCD143,0xD8CA9654,0xBD47B8D8,0x235764C6,0x2ECECD43,
0x565D29B6,0x9848533C,0x0EBEB8A4,0xB9536050,0x1F5332C9,0xCA9F4F22,0x3D442EBE,0xBDDED7B8,
0x26DAD5B1,0x59503D53,0x24C6A249,0xC14E5C53,0x3584BAC6,0x42204349,0x3AC6C9B0,0x98D3CA55,
0xC13EB1CC,0xC53837CC,0xD3CEADC7,0x34D2C7A7,0xC116A136,0xB93CBBD9,0xD2C9A804,0xB594ADB9,
0x5D4BC7DA,0xCB323E49,0x4CBFCAC9,0x5C41CE40,0xB2494242,0xB6AED0D1,0x36C2C0B2,0x4D4F4D46,
0xCB06454D,0x615E40C5,0x1D39273A,0x4F2D3248,0x31455654,0xBA405450,0xB63A533B,0x36565839,
0x92D4D9B8,0x44A8E1D9,0x4CD1D528,0xA8BB0948,0xE3E3B150,0xCAD5D0D7,0x374C4A44,0xCAD7E4D5,
0xC5C4CFD1,0xADB43A04,0x28CFD7B0,0xD6CA323F,0xC1CD4831,0x48A29735,0x364D354C,0x053EA6C2,
0x124FC3C4,0x4F3FA8D2,0x6057504D,0xCCD3D543,0x56350F96,0x48313B58,0x2939444B,0xCC2A4E37,
0x49595732,0x2D55533D,0x49B2CFB3,0x5B49B222,0x44A3CA3F,0xD7335449,0x91145593,0xDDD28E36,
0xBDAFC4D3,0x1E384532,0xC1D7C220,0x442EBAA0,0xC8D3BD3D,0x95BE9C34,0x9ED9D8D0,0xC5D22552,
0x47BA2B4E,0xC9B0344E,0x0B28C1D2,0xD5D03142,0x20333DC2,0x5C53BECC,0xA3C2DB18,0xDFC143B4,
0xA21852A4,0xBC435133,0xB9D5198E,0x583DBA49,0x42B1934D,0x32C5D030,0x50C0C9B5,0xC1C4AD4C,
0x87516152,0x29443AB7,0x4F44BBC1,0x3336D3B6,0x805555B6,0x2F2D4734,0x5C5ABDCB,0x3E944753,
0xD1C1B81E,0xB2C9DBDF,0x564CCAC5,0xC0B5D2B3,0x4B3C28C6,0xCE41243E,0xB723CEE5,0x574CD2D1,
0x12BBC9B9,0x615C493F,0x3E3A324C,0x993C4A45,0xCDAB5750,0xB3C0594F,0x4A47B010,0xC2C5BF36,
0xD0B0C3D2,0x3D17ADC1,0x24B4DDD9,0xC1CCD7CF,0xC6C74033,0xC64E4B4F,0xC9B7DDE7,0xC0A329C9,
0xD4D72F19,0x1204052A,0x9B1D5650,0x2C474630,0xD1C14B44,0x46555755,0x3ACACECE,0x4C3A344E,
0x40323148,0xB9CA4353,0xD0CD4451,0x5F50A9C7,0xA031B44F,0x1FD5D2BB,0xA0C34559,0x2DB7133A,
0xD6D11A39,0x35515543,0x3531B9A3,0x5234ADBC,0x3023AC49,0xAAD0D5C3,0xD4CAB43B,0x37B8D9DD,
0xB805444C,0xA1CDDDD0,0x274813C1,0x4921D3DB,0xDCE1DB22,0xAB5148B3,0x434247B9,0xB1CCA447,
0xD13B5451,0x9E9CCAD5,0x40461AC2,0x52B0D1B1,0x55594B4C,0xBB442124,0x555F3BD0,0x5233C004,
0xC8994D52,0x524829A0,0x5065563D,0xE7AE559A,0xB8525DCA,0xD2A65623,0xC0373BB0,0x4132D3DE,
0xADCCA451,0xC9CAD3C1,0x4253B7D7,0xD5CA8FB6,0x57C5C0A8,0x32504452,0x9BA0BECD,0xDFD33450,
0x4D3BC5D8,0xD4D2C4AA,0xD6C05445,0xB4CFA6C4,0xC0AAC8BC,0x09123608,0xB2C8C4B0,0x2B955343,
0x6159B084,0xCAC5455B,0x45B2BEC3,0x35463D42,0x4923D1B9,0x5C44BEA5,0xD1C19A46,0x5F3F29C6,
0x33363F59,0xBAB8054E,0x32B8CBD2,0x4F4C4B46,0xCCDBA354,0x8F3D4133,0x4030B3C3,0x1FD6BE31,
0xAEA3C43E,0xB3223812,0x1135CAD1,0x21C7A619,0xD4D08540,0x31CEDDD6,0x593CCFC8,0x0B57575B,
0xC12038C2,0x55B3D0BF,0x1327D3C3,0xB0C6D3BF,0xB335C2CF,0x4D94CECB,0xBD264D53,0x400A86C4,
0x9B444D53,0x3B4C41C2,0x33314040,0xCA26575B,0x48A838C0,0xCF1D5B5C,0xC352522B,0x314745C0,
0xD0334AA1,0xCBBA21BF,0xB6C12CA7,0x9CD5CF23,0x423E4048,0xABA24047,0x4145CCCB,0x973E212A,
0xC0C1D6D8,0xD5C8C2D2,0x5A46A9BF,0xC1D5D040,0xD2CCCBB4,0x1638B8D2,0xC6C5C7BC,0xD2BC3A1F,
0x33489FD3,0x924B5030,0x42C8B3B1,0xA7424455,0x304A4D32,0xC52C5549,0x564229BF,0x45414B55,
0x17392545,0x39513F13,0xD4C0543B,0x3C4085CD,0x514F4045,0x503B833D,0x19B6314E,0x50C4BE43,
0xCDD1C351,0xCCC0C6D0,0x4738CFD8,0x242B122E,0x3BA04252,0x5547CEC6,0xC8B9313A,0x215341B2,
0xC4A0C3C5,0xD68B2BD4,0xCFC336C9,0x2640402C,0x4CA7D2C6,0xD2D2CA30,0x4741B8D1,0xC2BB3C43,
0xCBB64F38,0xC4D02144,0xC2525E53,0x48A4CDD8,0x4BB8C934,0xD4A91D2A,0x505856B6,0x1DC8C046,
0xCD1C3E40,0x15C742AF,0x3B3F8A47,0xBCBBCBC5,0xD34459B5,0x44595F47,0x8A4E5648,0x49BCD8D0,
0x14C0CE13,0x31A7D2D0,0x3D2E9929,0xBDC1BD24,0xC5C49BB5,0x26445036,0xCBD7D6B6,0xB3475029,
0x96B8A9C3,0x3B9E2536,0x47515255,0x45CED8CF,0x52BBC851,0xCDCBB94F,0xDED5B2C9,0x499B3DA1,
0xB8B8C13A,0x3F3C308B,0xB5C3B52B,0xCDC4B6A9,0xD1C4B1C8,0x372AC9D1,0xBAC52833,0x9ED7BD44,
0x534D3F47,0x51544143,0xA8111A2B,0x4132A4B4,0x54471149,0x41DCD338,0x45AB2E54,0x46313050,
0x4C353346,0x41445052,0xB24A3934,0xBA3D21C8,0xB9C63BA3,0xA4CAC81F,0xD6C5A511,0x3E3FC9D9,
0xBE475131,0xAC2AA7C7,0x3FCDD7C0,0x4E4EC0A9,0xB4C9D7D3,0xC9A9C9B7,0x4C2BD1DC,0xB9C0BE34,
0x244A4A94,0x30422E2C,0x215149AB,0x8A4C2AC6,0x42B62B2F,0xB9B08C3C,0x4BB6DCD5,0x211D2851,
0xB7D6D1AC,0x25333F25,0x43223B3E,0xBC9AD096,0x3E3AB5D4,0xA4D4D394,0x4E49AA02,0x35352C40,
0xBCC4BAB6,0x4F605E4D,0xABC19D25,0x434B4639,0xBBBE353D,0x25B1B682,0xA3BFD1B0,0xAEB5493A,
0xB014CAC1,0x425A5820,0xB93F48B4,0xC29C3636,0xB30F4B40,0xC1C4D1CB,0xCC87A2C9,0xBF22B2D6,
0xB6CEC328,0x402D3502,0xB4C00D46,0xCD19A0BA,0x232CBED4,0x3D36B997,0x394B98C6,0x3FAEB0A2,
0x5334B837,0xBDC52D52,0xBB4C419F,0xBD4F55B1,0x233CCBD3,0xBDBACDC7,0xCFC782C9,0xC5BC3327,
0x5545B7C4,0xD2B63951,0x2E4E4DB3,0x4DB9BAB7,0x262B475A,0x994C4689,0x39363733,0x1C2F2CBE,
0x414A423D,0xB4B9CEAA,0x9D44471A,0x259BA4C3,0xB3AA9E1E,0xC8A24637,0xC43E4FB7,0xB4A6C2B4,
0x984550AF,0xD4D02943,0x81C994B7,0xC7B30D3D,0xB7C5BFC5,0xDDC8B6B5,0x4E4D4AB3,0x5653C3CB,
0x47C5CF37,0x39C1D5AF,0x59531521,0xC5B9AA4B,0x404456A3,0x8F4A5A59,0x36B78D40,0x4B502B26,
0xB7D9C502,0x55C9CA49,0x4B4C4452,0xB5C5C544,0xB5B7B4C0,0xC3B7ADC0,0xC5D31D3C,0xC3BDBC24,
0x4AA2C8C9,0x4C301438,0xB5B8C244,0xD3CDB4C7,0x4E3EBCC5,0xAACBC035,0xCFC94751,0x3CC2D3C7,
0x28B09635,0x4B32BBA6,0x1048A735,0x0A3DB4D3,0x3833C3C0,0x41554C14,0xC2B21281,0x5045C1CC,
0xB1385952,0x3741423A,0xB5A4B5A2,0x4495292E,0xC0C63355,0xB7B8BAC8,0xC3C52D38,0xC05127C3,
0x3624D0DE,0xC1B22E36,0xBFC1C7C3,0xB7463BBF,0x414B5318,0x27A6BF9D,0xB71B4446,0xAAB315B1,
0x9850453B,0x2234B2C8,0xA749549C,0xB939503A,0x30B1182F,0x1F80A81F,0xC7245146,0x4750B4CF,
0x435239AB,0x4F47C4C2,0xB6C3C9AE,0x455093B9,0xD4C91199,0xC7332CC7,0xA4ADC5D3,0xB83A3EA1,
0xB9A1BDC6,0xBCC13785,0x43D0C43B,0x35C2D044,0x19A53934,0x2987A915,0x04D0CFA3,0x334C2744,
0x1739C1D2,0xA0B9BEB7,0x473D3BB7,0xBCB24753,0x4ABBBC13,0x2322A351,0xC0A13799,0xB6B32D25,
0xA3373E9A,0x51574F31,0xB283483A,0x554AB687,0x90C0C43D,0xD0B6B0B8,0x4D4BC1D3,0xD8CD3E3A,
0xBE860DCC,0x3A399386,0xBA293D27,0xA3C6C4BA,0x07304544,0xBFC3D0CA,0xC8CDB5B4,0xC7D3AF04,
0x4546323B,0xAD47318A,0x2145ABD3,0xB84E41C0,0x4125B0C8,0x4CA8B148,0xBEC32B51,0x46534D29,
0xB02FAEBA,0xC62541BA,0xBFCDC2C2,0x4D544736,0x4B8B0A2D,0xD2D3B552,0x3F17D5D8,0x0900333A,
0xC0B7C0BF,0xB3C69596,0x51534242,0x4C40D5C8,0xB7C7CEC5,0xC3BBD1D0,0x882C29BE,0xC1C6AA28,
0xD08516B0,0x30B5C5CD,0x4B2E992D,0x2A99444A,0x25B1A643,0x59319729,0xB6B1475E,0x473090A5,
0x32C2C331,0x41273B50,0x2E37363B,0xB337A1C4,0x82232726,0x2309A0BD,0x08B30A40,0xB3B3A833,
0xCAC599BC,0x4887B101,0xBC9A3D44,0x303E25B6,0xBEC1AF0A,0xC4933C9D,0xCECC1F19,0x40BDC5B6,
0xD6C1A537,0x344094CD,0xBB4A18C0,0xBBB4C3D5,0xB54227C2,0x5331D5DB,0x8FB21750,0x3F43A8AE,
0xCCCB2233,0xBA0D4E43,0xB40E463E,0xCED42720,0x535E6255,0x14364746,0x45444330,0x4A472C46,
0x43BBCDBB,0x3122434D,0x0C405350,0xA237B0B0,0xB5C51226,0xBE9A3A2F,0xCFD29529,0xBBD1C9C2,
0xBCB43A3F,0xC5BDC0C1,0xD1D1C9C3,0x953A40AA,0x2489CDC4,0x503EC7CB,0x85C8C230,0x442DA624,
0x3DB7C98E,0x8C414344,0x48469E1E,0xC03D4C34,0x4C4023C3,0xCDB64249,0x23B01A07,0x50534433,
0x34C5C317,0x00251742,0xB5ACC5C6,0xBB173938,0x2CB7C5C2,0x18B0AFA5,0x3A300533,0x1A9FC3B1,
0x333D45AF,0x949D5153,0xBBCEA744,0x424E5043,0x39C6D416,0xC5A195AD,0x0E9A949B,0x2F4742B6,
0xD5C29320,0x334E48BF,0xB7D2C4B3,0x41B7CBA6,0x4135C5B0,0xC33E289F,0xB741A0D0,0x36432EC2,
0xBBC8BBA9,0x45479105,0x35982223,0xA0344A42,0x44243144,0x2C05B989,0xC1B83D39,0x6120C895,
0x44BEC558,0xA9434645,0x9237AFD2,0xC6CDB624,0xC1C21436,0xB0D0CBBD,0xC0B8A82B,0xB1C4272F,
0xB0BEB31B,0xA3B82616,0x3F534B9F,0x91434035,0x464B4B1E,0x99BA4B56,0x172F9641,0x0E37BDC4,
0x329929B3,0x90C3C117,0x474A3916,0x14A8384B,0xC2834C45,0xBCC309A1,0xB4092736,0xABC0D5D1,
0x8AB6CAC6,0xCC323618,0xC0C4C2D1,0xB25550B2,0xC4C4C7D7,0xC0C12C3D,0xCBB7C9CC,0x383332B8,
0xB6CDD4BE,0x40AF843D,0x42444C46,0x373B3138,0x2247493B,0xC030554A,0x443D402C,0x46C8B631,
0x4500345B,0xB4CEB13B,0xB7924648,0x46414742,0x38393C43,0x9809A026,0x305245C1,0xB9CAD0BE,
0x1FA4C1AC,0xC3C2C6AC,0xD2C14229,0x9C2D30C4,0xBD4041BC,0xC5C72FBA,0xCCB29632,0x342AABC8,
0xAAC22345,0xA8ACC607,0x4B4934B6,0xC0C5B4AB,0x3A0A4949,0x13B4AB49,0xC5454F12,0x1FC1BAC5,
0xCC954B50,0x4587C6D3,0x1DC9B14B,0x37A99B38,0x9616A340,0xCEC5242D,0x36455A28,0xACAFB133,
0x4544A7B6,0x4620C18D,0x47403241,0x20B01245,0x4141B9BB,0x20C1C4B0,0xBCC5C3A9,0xCA8A453A,
0x3E0397C0,0xB6BFCA12,0x5027BDBA,0xC4C9124F,0x442ACAD2,0xD2CD4551,0xA1AEBBB2,0xB4C2B1A3,
0xA3A7AAB7,0x3C4632A3,0xB4B29899,0x5741B436,0xC7D4D236,0x114533B8,0xAEB296BB,0xB0435036,
0x3E3B39B2,0x42160C41,0x372F5156,0x33C0144D,0xB4964250,0x4A3EBEC3,0x3E8BC487,0xAA15B0BE,
0xC3A43B22,0xCB113FA9,0xC48E26C5,0x8A2921A5,0x36A7D5D6,0xB196B036,0xCCA93B09,0xC1C409C2,
0xD3024D34,0x1C4E11CE,0xC6BFB0C4,0xA021439D,0x3B30C2BB,0xA0304133,0x52438B93,0x99A0BF35,
0x3DB9BEAE,0x50463545,0x30BB1C47,0xC6C83A48,0x4850544F,0x03B73048,0xC2B54F4E,0x37298FAA,
0xBBC1AC25,0xA0C1BDB4,0x393FAFA5,0xC0C2CBC3,0x8BB5CDC3,0xC8C5C9CA,0xC6C9B8AF,0xB1A31306,
0xBBC6AFB0,0xA3C4C9B0,0xB8251CAA,0x4B4D35B2,0x5338B080,0xCB9B4551,0x5350B5D0,0xA2812D47,
0x45BCC3B0,0x46444651,0x47464446,0x31AE0835,0x34400823,0xAE454940,0x4316C5C8,0xB7392D2F,
0x0BBB0EB6,0xC1AA2D36,0xB33198C6,0xC1CBB701,0x9C002987,0x1EAEC6C2,0xCBD5C41D,0xB8B0A193,
0xCFC21B94,0x41408CCA,0xC2B6BA23,0x403B38A0,0x90B43240,0xC6C2B5A8,0x52514C24,0xADC33556,
0x11441EC1,0xCEA397A9,0xCFB243C3,0x45332FA2,0xB4C5B340,0x472B4537,0x22BC3857,0x4139BB25,
0x242FC7C3,0x463328B4,0xA04A4C49,0xC0324890,0xC1C194A7,0x15C9CAC1,0x253E4448,0xC3C7CBC6,
0xD0D2BFB0,0x2123351F,0xB3D6D4B5,0xCBB9C3AB,0x4C3AB1C9,0xA1B1424D,0x4B413334,0xA31F3E46,
0x34B3C1A6,0x4127921E,0x0E353444,0xA4C9B8B6,0x524A313E,0x341F4451,0xA4323945,0x1A430EC1,
0xBD234413,0xAFA222AD,0x1AC2BE99,0x3CC3D7BA,0x96B72C42,0x4A4B3322,0xC20ACAC4,0x208323C5,
0xA8D4C732,0x3D484248,0xC4D1933D,0xB62C4B3F,0x292E86B7,0xB83888A3,0xAF1486C0,0xB125329C,
0x263489BB,0xCFC73B34,0xCBC3A7BD,0xD1CEC4C9,0xC6B89D86,0x4F07CCD2,0xC0C8B14B,0x343AB8CD,
0x4D514641,0x25B6B132,0xC8274F48,0x40354D33,0x3748524D,0x3635333A,0x444728A0,0x8A392493,
0x15204C44,0xA7A43342,0xCDCFB3A3,0x4C37B9B4,0xB982C5B5,0xB403AAC6,0xA02C1EAF,0x95A89CA5,
0xBDBCB302,0xC8D4C8BD,0x4022AABE,0x99CACA2B,0x1B40302D,0x23B19A94,0x462BCCBC,0x279AC4B4,
0x41B30A33,0x3FB4B848,0x31434B48,0x46515147,0xB0CBCBA4,0x40413929,0xC2D0CDB8,0x9C45350C,
0xA34202CC,0x494734AE,0x2F354245,0x11A8292C,0x52450739,0x8E89A641,0x4839C1C9,0x36AFA444,
0x22B6C509,0x444C28A0,0xA1009E91,0x342DAFB8,0xC4BDC1BF,0xAEA02AA3,0xC1C4AA2D,0x801EC9CF,
0xD4C235AD,0x4B443F9C,0xA2B5B33E,0x38351BA9,0xD0BC2038,0x98C2D0D2,0xD6C71712,0x154A42C1,
0x363EC0CE,0x2D4841AC,0xCAC49928,0x36913013,0x23515139,0x22394236,0x35483EA5,0x32453123,
0x45502FB1,0xC3B89091,0x2644533F,0xA100BAB8,0x381214A7,0x2639223B,0x365046AB,0xC2D0C022,
0x4B404131,0xABB2C21D,0x3A30B3B9,0x13BBC496,0xBAB7B21F,0xAD3098C2,0xC3CAB7B1,0x19ADAE94,
0x3DBDD2C3,0x3128CAB2,0x8635C2CD,0x86C39AB3,0x4444494F,0xBEC10D44,0xB6B79C8A,0xB1C8353B,
0x0D1B1430,0xC8CACEBA,0xB6B2BEC8,0x9E2F2CAA,0xB4C5C0B0,0x2B8687A5,0x2FAE1C43,0xB1444524,
0x2850499E,0x30A3BCB5,0x832A3580,0x21424333,0x3F4296A0,0x45349FAB,0x3E23A645,0x0D2A4040,
0xCBD2C6B6,0x36384733,0x442AA01B,0x0C352543,0xA8433ABC,0x40C5C5AA,0x29324048,0x15474319,
0x301488A3,0xB386A82A,0xDAB74791,0xA12296D1,0xC7B9C5B7,0x512AC4D1,0x212A4353,0x9CA0C8CA,
0x079193A2,0xBBB3AD84,0x23ACB8B4,0x93B8D0BF,0xD0CE919E,0x9CB1969A,0xB4B6B789,0x0CC0B4B3,
0x8EA0B680,0xBC964841,0xB8BEB8B2,0xC3C2ADB1,0x30AFBCC0,0x37334342,0x5041223B,0xA9C7B049,
0x36514A3D,0x42B8C3B0,0x46BDC72B,0x42283F50,0x3B02BB32,0x48423727,0x3E91034A,0x37133341,
0x5251504D,0xA3151E3F,0x21C3B40A,0x93B1B133,0xC9B6B4C0,0x2120A4C4,0xD1CBC9B1,0x9C3322CA,
0xC8C4B695,0x232610B7,0x801CABB8,0xBC9CA3B4,0x90A1BCBB,0x008FB8B5,0x9710B2B3,0xBA2E472C,
0xB8C13130,0x413C2D1E,0xC6BA3A32,0x222A4229,0xC2A92D3B,0x3C363896,0x23222043,0x42302BA1,
0xA796373A,0xAF3F544B,0x2E3F3C89,0x483CB399,0xA51FBAB3,0x19A3B8B6,0xC6AEC7C1,0x4A3BA6C5,
0xB8D0C634,0x08AE8B2B,0xB72E8D8B,0xCCC7BCCA,0xB33D448C,0xCCBDC4C4,0x993402C8,0xC1CDC3BB,
0x273584BD,0xB2973523,0xA5A12B31,0x12A0A0A3,0xB1959198,0xBC324031,0x442BA8BC,0xAB0F494C,
0x52483602,0x25A22A4A,0x33404949,0x4A3B4241,0x43844151,0x262A3949,0x3526B799,0xAABF3437,
0x93BCB334,0xCFC4B49B,0x4A34B8C6,0xAC0CB812,0x3D38B7BD,0xC3B0A9B6,0x90AAB6C5,0x2E1AAC20,
0x9F389FB0,0x98B8BEC5,0xC2BAAF25,0x403BA5B0,0xB0B4B298,0xC7AC32A6,0xC1173AB1,0xBCA40CB7,
0x443DB4C3,0xB50EC1A4,0x9E4141C3,0xA5464626,0x304125B0,0x03A428B6,0x17B72645,0x3532A81F,
0xA4C1A428,0xC0B6B124,0xB6BD30A2,0x3699A18C,0x2E253941,0xBCB23142,0x31023830,0x38A2A230,
0xAD28123E,0xA33336B1,0xB4BDB2B5,0x8B0F3A28,0x30270227,0x2EA6C0BB,0x373B832C,0xC03A3C91,
0x424D522C,0xA1C1AD2C,0x081F8F2B,0xBFA14338,0x452B20A4,0x21BAC13F,0x8432BAC0,0xA1A03113,
0xA7BBC1A7,0xBEBAC6C5,0xC6B33725,0x422D31B2,0xC4D00E50,0x2E082713,0x3021112D,0x40462CA2,
0x989A233C,0xB2C0B7B3,0xB9C1B92C,0x34389DBB,0xC0BFB2A8,0x532DC7C1,0x403AB931,0x33404A42,
0xA6303B41,0x2E3B13A8,0x992D91B6,0x14334734,0xD4BF4036,0x2E1599C2,0x16391218,0xA3AAC6CE,
0x3148B3BF,0xB5C0C4C7,0xB13F421F,0x98A1B9C1,0x97162CA1,0x513D8211,0x443A9F47,0x2F322724,
0xAFB5C6B9,0x24384033,0xA98B170C,0x372FAFC0,0xC29FA988,0xA4C3BAC0,0x373D4740,0x27B9B630,
0x2345504A,0x3D94A785,0x33978A38,0x2DB4C0A9,0x32B1B22B,0xB1221D38,0x12382DB3,0xBE2036A6,
0xBDB52EA9,0x192B2927,0xBE8B3E3A,0x291E18B4,0x3E92BA10,0x08ABCAB8,0x31AEBEB6,0xC1990323,
0xC4C1B3BA,0xC98D40B0,0x24C1C5C0,0xAEB9B439,0xB6CCBDB8,0x25A42337,0x4638C1B4,0x1826972E,
0x212025AC,0xBABD3A45,0x413A423C,0x323A2C37,0xC8B5BFBA,0x969425B6,0x86252E30,0xA73598BE,
0x334231A6,0xB02A2EA0,0x3C3A3101,0x10301520,0xA621A8BA,0x49493E92,0xC0B3BA12,0xBCB2BAC7,
0x2D0EB2AB,0xAC223A99,0x3AB2062B,0x3C3A384E,0x2F97B2A9,0xAB074037,0x2E362D26,0xBAB9A321,
0x424532B3,0xBEB91C3E,0x1A979797,0x932E3334,0xC1C3CCCE,0xBB05452E,0xB4B5B6B4,0xCCC7B9B9,
0xBF1D8CC1,0xADC1C4CB,0x29932940,0x28A12A36,0x10B12436,0x84B7AB2C,0x293C3130,0xBAB594AE,
0x4113931D,0x2E0E354A,0xB082443E,0x2A3B3D31,0x3A350894,0x4744342D,0xBB133543,0x20BAB4C3,
0x0D313240,0xB3BCC4B7,0xAE9C3F2D,0xAA8815A1,0x4833B0B0,0x3831093A,0xAABCBC16,0x2AACC3C1,
0x0FBCCEB7,0xAC93C2C0,0xB9BCB7BB,0x252997A9,0xB3A497A6,0x404110AB,0x88B8B802,0x394B493F,
0xA5BAB1A1,0xC3BE8522,0xBAC80A24,0x8B21A6A8,0x393384B0,0x1CAFAF35,0xB03D412B,0x3B209FBE,
0x9AB4AC37,0x4A22AB9B,0x32221C47,0x274602A8,0x814A5014,0x3620392D,0x1044433F,0x39B2BAB7,
0xC4284749,0xB9B9BBC1,0xBDB8100E,0x10C3C9C2,0xB8B7A12C,0x902B2FB8,0x1B29312D,0xAD33423B,
0x369DC0C5,0xA5211030,0xC9C3C1C4,0xB61329B4,0xBE9131A5,0x8EC7BCB0,0x4786C127,0xB0B81541,
0x3A292E30,0x20392B2E,0x374032AE,0x3227A029,0x1EC0BB8E,0xB23E4745,0x9FA028B1,0x379A9332,
0x8C28A28B,0x9999A9B4,0xB3B8B5AA,0xAEB4A8B0,0x39933234,0x41312641,0x272F8D29,0x24294641,
0x40B1B72F,0x28012544,0xA7B5C3B7,0xBB312D18,0x20BBC8CD,0xCEBA4043,0x331B05C1,0x3F313642,
0xC0AC3637,0x1CAEB6B2,0xB6B28E2C,0x1D0E3012,0xB1C5A52E,0x92354543,0xB4BBC1B8,0x1E203812,
0xBDCAB029,0xB9064845,0xB62F32AE,0xB40C04BB,0x251914AB,0x9D1C141E,0x0086A3AB,0x3E2A3935,
0xBEA89F2C,0x403DAABA,0x298CB68F,0x07C1C8B9,0x303E3121,0xA0B4A615,0x513BAD0B,0xA0A88B44,
0x45434231,0xA7C3C525,0x34514C10,0x171D0EA0,0x2198B7A0,0x28A62A31,0x9BACAD2C,0x942C4C43,
0x26289B0E,0x402AB3B3,0x4241102A,0x9AB2B812,0xA5A8BDBB,0xC2B12A18,0xA6B286AC,0xC4B23437,
0xA6AFB1BE,0x9EB49F97,0xBEC29930,0xB49B2492,0x4330B2B8,0xBB383B2C,0x282A369F,0x3BA8CCBD,
0x3431B494,0x2A1CAEA5,0x00992B31,0xBE90082E,0x3034A4C4,0x83A3AAA3,0x3031A0A6,0x97C3B91C,
0x3B314243,0x41359A20,0xBC054145,0x3229ADC0,0xA0B59620,0x34221F34,0x29ABBB97,0x39391B1B,
0xB2AAAE8D,0xC38A3193,0x9E2729B5,0xABA5B9B9,0x90414D21,0x1DB2A118,0xD0C5A72B,0xA5A311C0,
0xC6B13134,0x452EC3CE,0xC3C4B932,0xB18B2B84,0xA0A605B0,0x97989F00,0x3144ACBE,0x223B30B1,
0x2F3B443A,0x22B6A222,0x901E4041,0x2CB4C2A4,0xAC263D40,0x1F3632AC,0x23AE902B,0x1C96313A,
0x3715BAA4,0x87A6BB9E,0x3D29A8A6,0xB79E2135,0x913736A2,0x9CC2BC9C,0x832C06A7,0x2C13A5AD,
0xB92A4243,0xB1A3B1C3,0xC6C4B2BC,0xB8AC4035,0xB0C1C5BE,0x2507232E,0x3C19B5A2,0x388E2236,
0xB3B23045,0x07A8BCBA,0xA3404428,0x251DA6B2,0x372BAC11,0x2A40ABB1,0x133F429C,0x2A404635,
0x3D352021,0x47453F3C,0x4282243C,0x99202645,0xBBB0C1C6,0x312116B2,0xAB22A211,0x25BDBEB8,
0xA6A7B82E,0xBA8CB0C0,0xB8B3B0C0,0xC0C2C5C1,0xA9A8A6BA,0x30409EB5,0x188DA4A3,0x3B403B2C,
0x3F219130,0x412A193A,0xB2A33140,0x95B18208,0xABA5091E,0xBBB6A5A4,0x3B97BEC1,0x92BC2544,
0xA3993C43,0x2B002030,0x2A129324,0xB2B8BCA7,0xB697A1B2,0x2EA99D0F,0x172C2B23,0x13A78410,
0x0B151231,0x2483211F,0x35191434,0x39404034,0x2A110C31,0x988C2D2B,0xB01A3232,0x8A2CA1BA,
0x1E8BC1C4,0x2632AAB1,0xC4ABB5B7,0xBEB710B5,0x1CB2BEB0,0xB2A4A6A5,0xAF999BAC,0xA9B02688,
0x293C35A3,0xB7B41D3C,0x283690B0,0x413F15B0,0x35443B33,0x263F368E,0x832F4340,0xABAEB4AB,
0x293323AA,0xB8A63E36,0x2B901612,0x09234447,0x91199E93,0x870D98B1,0xAA08A3B7,0xB3A6312C,
0xBEB89F95,0x92A9A7B4,0xB6ABAB94,0xB4A39BB9,0x93232A14,0x102AA3B3,0x1D873320,0xCAC6A42C,
0xB7BBBBBE,0xB3A1B1BF,0xA9BCBAB8,0x35188207,0x12313040,0x901792B9,0xAA334436,0x3AADAF93,
0x35941741,0x40353033,0x2A8F3341,0x8F003536,0x3C40393B,0x45362532,0x41373243,0xA191243A,
0xA32F0DA7,0xB0A6ADB9,0x36BEC3AD,0x33B1C28C,0x23A72E40,0x91322126,0x852F298A,0x022EAEBC,
0x9EBEC0B4,0x1807A68D,0xB6963A30,0x1FA70112,0xB0263836,0x473014AC,0xBBC4B644,0x2A8AA4B0,
0xB3AEA913,0xC12532A5,0x1D89B4C1,0x24B2C6BA,0xB4B99717,0x16863633,0x1F949A14,0xA0BEC6B5,
0xB4B29329,0x3097B9B8,0x35231032,0x33C2C4AA,0x1034454A,0x9431302F,0x922A14B6,0x25AC8F91,
0x3E433E36,0x023A2929,0xAE33400E,0x8694B1B6,0xBCA02387,0x301E31A5,0x112C1A2F,0x3843411B,
0x2F3D3B34,0xB4C4B310,0x8FA89F85,0x3C2CA507,0x28234140,0xBA1F2835,0xAC28BCCD,0x1137ABC3,
0xC0A18AB4,0xBFA922BB,0xB68C4032,0xAC91B4BB,0xAEA7C0C3,0xCBBB17B0,0x0610B6C4,0x9F353383,
0xB78323A0,0x942BA4C5,0x1DBCBCA6,0xB9B2A130,0x261D11B5,0x32B1B71B,0x343A2F3B,0x03163325,
0x19BCB902,0x203B3E35,0x443E2382,0x8E353F42,0xA4141AA6,0x212E3612,0xAEB0812F,0x243C3385,
0x9818281A,0x36332494,0xA21E3231,0x3215C1BB,0xABC1A61D,0x3B433A33,0x10A8B0A2,0xA530382D,
0xA79791AA,0x382A3729,0xA7C1AE35,0xB38F9613,0x9D2B2AA5,0x289EB5B6,0x10B0BCA0,0x30B2C9B8,
0x9AB3C1AC,0xC1A22E27,0xB5ACACBE,0xA0B6AEA4,0x05B9C6B9,0xBDA38E8D,0xB01036A8,0x80851B1D,
0x2B403908,0x91A43233,0x84820820,0x41382A17,0x30242436,0x223B3433,0xB620ABC0,0x2614A6B5,
0xB3B79920,0xBAA23723,0x3732ADB3,0xADBDB69A,0xB218352E,0x1093A3AF,0xAA8E0AAD,0x14A33338,
0xB0C1AA32,0x2D321C91,0x3EA9B280,0x1F313644,0x3327A8AD,0xB4B49531,0x2A43419F,0x4031201D,
0xA128373D,0x330C99A3,0x9F39423B,0x05A199A0,0xA221230F,0xBBAF99A3,0x3225B0BB,0xBBC4B020,
0xAAC1BAA4,0xC1B6A097,0x3E2BB8C3,0xA1B5B129,0x27983536,0x2F22B70B,0xAB4237A7,0x298793B3,
0x33129328,0x14354239,0x03213D35,0x2532A29F,0x342601A5,0x23B6C083,0x3238302D,0xC0C8B014,
0x9B991634,0x3133B0BE,0x253618A7,0x34318CA2,0xA5B5BA8E,0xB9869FA8,0xA81321BD,0xB7BAA604,
0x3685BEBA,0xB4AA9A26,0xAAC0B9B5,0x2099A017,0xA50E3A37,0x1A158B91,0x3C2A1F16,0x453BB68E,
0x0F212334,0x8C3A3E24,0x83B1AAA3,0x86952530,0x28322422,0x3B0CBAB3,0x95802F37,0x29B4BA99,
0xB1283637,0x26B3BAB5,0xA1A63A42,0x4240392C,0x9FAB9F39,0x27352693,0x30370F97,0x9015AEAC,
0xBCA3321A,0x8FAD0F90,0x10223134,0xA19AB0B1,0xBDB42123,0x1F2230A2,0x289C8F2E,0x1E09862B,
0xBBB0800A,0x8009A0B1,0x3733A0AB,0xBBB8112A,0x84921607,0xB2848896,0xA1A7B6BF,0x96B4C0B5,
0x259DA089,0x9192343A,0x27A91426,0x95173740,0x322C0490,0x172B352D,0x143A4138,0x0A9C3424,
0x1EB2B78C,0x0E200808,0x9434169E,0x2C3B31A4,0x1081B4B2,0x843A4029,0xB8AD99A4,0xA09119A8,
0x9218199E,0xB5B3A205,0xAB284017,0xA2AD1B81,0x23AFAC15,0x0FA1BD92,0xB4B4BFC0,0x222AA4B4,
0xB7C0B292,0x393C3520,0x2680B6A5,0x1E312A1A,0x25301896,0x23323725,0xB4BDA22C,0x81808496,
0x09302C85,0x30B2C1A9,0x8D2E3E3F,0x3522AAB2,0x338A902E,0x2931A11C,0x80239AAD,0x21251487,
0x38403623,0x249D212D,0x1E352B23,0xA3B2A315,0xBA922B26,0xB1821EB4,0x0AB2BDBC,0x9AAFAB22,
0x8C151515,0xA5ABB2AC,0x3214A6B3,0x9882A42A,0x374106BA,0xC6BC850F,0x200899AC,0xB5C0AB01,
0x82ACA89E,0xB4951A26,0x1B92A9B7,0x841B2212,0x26322808,0x23121824,0x3003AF96,0x16323326,
0x36302A1D,0x319E1B3A,0x2B242139,0xA6A4B5A1,0x83B2B6B0,0x1F97A6A1,0x0D00A38F,0x12092828,
0x309EB49F,0xB61F3C39,0x3A2B299B,0x3A20B018,0x9F373835,0xB52113B0,0xB69311B7,0x9B23A2BB,
0xAC1521AA,0x98A0A7A5,0x97BCC8C0,0xB6BA9D22,0xA8A9B9B5,0xA5B5A7AF,0x15208C12,0x40302104,
0x8A343C3F,0x9F9E1D82,0xB0B71924,0x3219A313,0xBEB58829,0x1E3A00BA,0xB4019FB3,0x211689B7,
0xA8832D33,0x312C1FA1,0x1A414234,0xA7B8B4AB,0x2A283733,0x8C98A908,0x302F2D1B,0x1A0F3031,
0xA8A18B1E,0xB9BDAE81,0xAFADAEB6,0x2694ADB1,0x31A9BA8D,0x959E0634,0x952499AD,0x322C91A8,
0xC2A62317,0x30281BB2,0x13861B2E,0x2AA3B49E,0x8199862B,0xA499A998,0x1812A4B3,0x16393016,
0x1A0F1D8C,0xAAB41425,0xC2B82E34,0x2410AABF,0x14B11135,0x19A80432,0xB7A40828,0x990E95B2,
0xBFC1B9A9,0xB0978BB3,0x3404A1A3,0x21A7AA28,0xB1041E26,0x22A8B9BA,0x3738251F,0x41372331,
0x0F383931,0x34283025,0x17172C3A,0x97374337,0x2C21AAB3,0x2093232A,0x2486901C,0x28342A2C,
0x98A6A998,0x1B219595,0xB48A2815,0x96BCB6B0,0xB1B1A71B,0xBEC00D18,0xB6B6A6AF,0xA3A58E83,
0xACBABDB3,0x2BA1A495,0x90AC0937,0x21899518,0x2224AAA6,0x34249506,0x29413D2B,0x37208097,
0x22344142,0x1F31078B,0x2B383807,0x2300182E,0x1B2D1C1F,0x86218DA9,0x2D241A85,0xA6182E32,
0x8F8693AA,0x28188397,0x8CA5AF13,0xB027392B,0x1691B1BA,0xA1931222,0x97A8B7B8,0x029CAC9B,
0xB5C3C9BC,0xA606A5B7,0x1D2714A1,0x93ADC0B2,0x0EADC0BB,0x27ABA721,0x0BADA42B,0xC0B23038,
0x3681AFBD,0x2E41383B,0x2E1C9DAE,0xB11D3337,0x140F23A7,0x1F162421,0x002A3028,0x31241004,
0x95968B2A,0x2FA09900,0x37282E3B,0x11A5AD17,0x27850F2A,0xBDB72738,0x2511A5B4,0x2B81AD87,
0xA801061D,0x972F398A,0x06262701,0xAC082185,0x9E1717AD,0x9FB2AA91,0x95393202,0x379EB5B2,
0x1FA10737,0x9F862029,0x2B22220D,0xC1C0AB20,0x24332EAE,0x12302822,0x21919BAE,0xB29E2136,
0xA4B2BABD,0x28252318,0x28403B33,0x10A4B1B0,0x15251A00,0xB3B2A601,0x0F09298B,0x9CA2A600,
0x180D139B,0x1E010B26,0x28392C19,0x1CB2BAA7,0x242F2B22,0xB21B3A32,0x930A1DA0,0xA2103026,
0x1F96130E,0x1F1C3234,0xB59E1620,0x383027A0,0xA7A01735,0x92A02809,0xB5B6B419,0x9F01B2C1,
0xBDB8A9A6,0x292F20A8,0x2616041B,0x99B5A11B,0xA9A1A417,0x95A7B0B5,0xA5B2AC10,0x918B929E,
0xBBBAA20D,0x2C22A7BA,0xB7A31622,0x2E392FA4,0x14A12430,0x19170816,0x1B353832,0xB0B8B2AE,
0x29119891,0x8637382F,0x0D2305A6,0x2F10BEC0,0x29962535,0x25A2AB2B,0x8B0A9E86,0x3099B0A3,
0x86292F30,0x18312A93,0x12333021,0x132410AD,0x3A444738,0x23252633,0xAA203124,0x9EB1B3B5,
0xA3B5A02D,0x218C8C8C,0xBAB7A50E,0x900C02AC,0xA3868296,0x93801096,0x2C2B0291,0x2032A2AC,
0x9EB3A7A2,0xB1BABD99,0xC3B6A8AE,0x9A928AB9,0x82890605,0xAAACAB91,0x9190A4B1,0xB9963A30,
0x30A2B0B3,0x9F1B1230,0x149FB0B7,0x22919413,0x90A72132,0xA8101F2C,0x273327AC,0xA3A62828,
0x1E291F24,0x14372B97,0xBAB9B0AB,0x23242D8B,0x9C901922,0x248B0500,0x001E1E2B,0x8B1190A5,
0x0DB2A688,0xAAA4882B,0xB0A5A1A9,0x2E3127A6,0xA5BAB21C,0x15A8A705,0x3A2D0C17,0x222E1A2C,
0x16221400,0xA39E0F80,0x20202412,0x9E273027,0x1E9BBCBB,0x1CA1A112,0xA1A3A915,0x2F12AFB3,
0x1A91AB18,0x9D243019,0x2F9BAFA3,0xAFACB018,0x2C80B4B9,0x0A9A162A,0x8B303A33,0x9CA6B1B2,
0x970C2B22,0x343D3000,0x9BA00F25,0x04212E1F,0x2F271A17,0x15202F34,0x92AAA398,0xAB8A201F,
0x29139DA9,0xB4B3B202,0x2D2D3282,0xA5B6AB13,0xB01A3026,0xADAEACB3,0xAE8B80A0,0x0F96ABB8,
0x34303230,0x9616112B,0x238DA0A7,0x29132131,0x3D32222B,0xB39BA51D,0x323084B7,0xAAABA512,
0xA196B2B5,0xA205AAB0,0x921A0CAB,0x2B31301C,0x85A0A999,0x8730382C,0x120DAEB2,0x13821415,
0x1E362C92,0x97123328,0x3E352B1F,0x3220233D,0x1E95A219,0x109B9A16,0xAA12403B,0x1E819295,
0xAB9E1017,0x948B2291,0xA11F2213,0x009384A0,0x13242A22,0xB1AEA496,0xAAAA8795,0x81C0C1B1,
0xB1A9962C,0xA28BA2B0,0xA2A294A5,0x18363515,0x211F1099,0x36332721,0x162C2B2D,0x2F1F2520,
0x252C3036,0x37889B17,0x9E0E253C,0x272290A9,0x1D811925,0xA4A0131D,0x20212D24,0x9FB0B292,
0xC2BFB8A4,0x99211EB7,0xA0A8A6A4,0x270BA8A8,0xA8902730,0x24228DAC,0x2430322A,0x0FAFAB10,
0xA4121F21,0x8BA7AAAA,0xB1B6B095,0x2388ABA8,0x33212325,0x169D2332,0x11A41938,0x31331781,
0x1A2D2828,0x031D2F14,0x2C34271A,0x3539341D,0x2F272E37,0x821F2B31,0x9891969D,0x9204A1A9,
0x82B7B4A2,0xA6B19A2E,0xB1BAB9B2,0x951E238D,0xB0B5AA9C,0xA1111B98,0x2A300CA4,0x223D361B,
0xB5B5A39C,0x2108188D,0x22240A0C,0x9E012524,0xAAA22D2B,0x378CA99E,0x142C2F37,0x37A4B3A9,
0x2A2D3440,0xA5A71F2D,0xA9AF9806,0x2532129C,0xB19EA2A3,0xA51817AA,0x171A14A8,0xBEB79A25,
0x2BA4B1B7,0x1D018F28,0x98199995,0x0494A0A7,0x1829898E,0x878895A0,0x2F382B90,0x2234362D,
0x2C33301F,0xA0128A07,0x323087A9,0x04AA9924,0xACADB39A,0x25271BA5,0x8A0B2426,0xADA3958C,
0x1309899E,0x9F001D10,0xA3A81E12,0x21192E2E,0x98A2A405,0xABADB4AB,0x979594A6,0x87212399,
0x2A0DA295,0x21200F21,0xAAB3B89C,0xAC0795A3,0x0291A2B9,0x9E842B2D,0xA69BA4AA,0xABB09AA6,
0xA0A49C07,0xAEB39E96,0x272A3227,0x302A030F,0x06021324,0x12152323,0x81B0AB0D,0x21039514,
0x2691A790,0x1B344038,0x32342E21,0xAB042D2D,0xAE9E1C83,0xA7B2BBB9,0xA7ABA19D,0x17A1A797,
0xB49F920D,0x04B1BEBD,0x8F0F171D,0x9D9C8C8F,0x27251389,0xBDB5A013,0xA399A8B7,0xB2ABB0B2,
0x3028A5B4,0x20879A20,0x36353126,0x39338716,0xB09E232F,0x292495AA,0x2115202F,0xA0A9AD06,
0x9A0399AA,0xB2ACA29F,0xA39294B0,0x019BAAB1,0x85A8AC8A,0x252C271C,0x2527170F,0x9C1E1210,
0xA2B0B0B0,0x238BA281,0x2F271012,0x3A341D21,0x3B342630,0xA51C2D32,0x10A5050B,0x9E9BA892,
0x97821880,0xB0ABADA9,0xABA4A7B4,0x9D24299A,0x0CA8B1A3,0x20250F06,0x9520128B,0xB0B7AEA3,
0x1C919C90,0x1197AB95,0xAAB4B09D,0x2B9498A3,0x99A9A927,0x403B2392,0xB0102C34,0x29301AA8,
0x979B1923,0x1E1C1F1C,0x30363428,0x81872B32,0x3A2BA89D,0x2C25142E,0x96112328,0x1823258B,
0xA5232195,0xA1A81310,0x8B9CB4B0,0x90261492,0x9F2C20A7,0xAE961AA1,0x2330330E,0x152E221D,
0x26312A06,0x94AFB1A2,0x900B1A23,0x8AA5B8B7,0x1923241B,0xA8A69114,0xB2B3A7A1,0x8536348F,
0xA2A69CA6,0x88A12123,0x130A1724,0xAF08848C,0xA4A5AAB5,0x18B0B3A3,0xA5213B38,0x1F2321A1,
0x0A102E32,0x89ADA784,0x1D828519,0x11939B87,0x10AD812A,0x27979A22,0x333A2C2A,0x21211221,
0xA8A38888,0x04341CA2,0x918F05A4,0xB7A61D11,0x849C97AA,0x3204A884,0x0A8B8423,0xA9B3A016,
0x19212009,0x8089958D,0x1F899F03,0xB7B7AB8C,0x2B2A09A9,0x92201B1B,0x1C221598,0x111E8B91,
0x22ACAA82,0x35292631,0x22A9A32B,0x3934242D,0xAB8B1229,0xA8A9A8B2,0x8F233621,0x87ADAA81,
0x041E130E,0x12251E92,0xA6A41B23,0xA499A2A8,0x83B5B2A6,0xA7832732,0x89B2A9AA,0x92192E31,
0x232E82A0,0x9795A69E,0x2E2619A0,0xB1932D36,0x97982796,0x93253023,0xB4B0A39D,0xA1B2B6B3,
0x058AA1A1,0xAD253A2D,0xA8881F96,0x9F90AAB3,0x1A15A3AC,0x989A9690,0x81010889,0x251D201D,
0x98ABAD8B,0x1C13808D,0x02A69220,0x938F2426,0x12081121,0x9A273327,0x1805A5AE,0x1B12A399,
0x91263021,0x1385A29E,0x2A2C1690,0x152C8594,0x9D9899A1,0x01AAB0A6,0x15871D26,0x93A79122,
0x0F242D23,0xA306171B,0x9B9DB2B3,0x133012AA,0x1B202199,0x222A3330,0x91971B2D,0x9BA5B1A7,
0xA1ADA090,0x1695938C,0x28232A29,0xA9A68B2E,0x3319A3AD,0x1E312C2E,0x2B159D9D,0x81150122,
0x17242807,0xB1872829,0x86A1ABB4,0x86029594,0x00303421,0xA28C96A2,0xB0ACA4A3,0xA393A8B2,
0xA597A8B0,0x990102A7,0xAAAEA99B,0x17949CA0,0x08303224,0xADB1ABA4,0x19899B9D,0x33301514,
0x1701971A,0xB2AE212A,0x9BAAA4A3,0x30298898,0x09ABA121,0x1A173336,0x242B312B,0x0113292A,
0x24242D24,0xB0B9B107,0x17132515,0xB5B88129,0xA8AFA49B,0xB1B9B7AC,0x8B89A0A6,0x05251F87,
0x88A2A4A4,0x9E981724,0xA2B3B2A5,0x02182311,0x9B978D85,0x919D859A,0x14262E2A,0x25822122,
0x2A2A2930,0xA1AFAD06,0xA0981B16,0x8893908F,0x2606920D,0x15241C1B,0x0A281C8F,0x222E2194,
0x2A282C22,0xA5920920,0x848796A4,0x10201091,0xABB3AE92,0x2590ADAC,0x22283030,0x1D121D22,
0x03059909,0x840C9FA6,0x190D028F,0x1F213131,0x1CA8AE8B,0x96A19822,0xA0A9A193,0x1681ABA6,
0x1C9C9A05,0x96940923,0x151C2381,0xA69E1225,0x029089A0,0x130A8A00,0x98162220,0x3325A6B0,
0x21323B3A,0x2D1E8D83,0x20829024,0x80A8B29D,0x051F2520,0xB1990E04,0x869CA7B2,0xB3A0110A,
0xA8A098B0,0x2F231395,0x93A0172F,0x0899990A,0x11201A11,0x1BA7B4A5,0x1F119983,0x0611161D,
0x051A1284,0x8196ABA3,0x29221E04,0x2E353632,0x27018F17,0x2819202D,0x0993941C,0x27312820,
0x9D908206,0x10232399,0x0C153132,0x251B9391,0xA0951D24,0x9B1C2919,0x2618A6AC,0xA615231E,
0x9698A1AD,0x2627240B,0x27258412,0x120B8011,0x2A190615,0x362F1E24,0xA1883137,0xA9A48D0E,
0xB2ADAFAF,0x030F00AC,0xAFA79D81,0x9F9298AB,0xBCB0ABAE,0x921393B9,0xB1B0A591,0x0EA1ADB1,
0xA6AD9519,0x1A900914,0xA19B1223,0x2B3313A1,0x1E1E1A16,0x8109181B,0x28168593,0x80188621,
0x22238799,0x222F2C18,0x1711058D,0x2A20021B,0x2321292D,0x25241F27,0x1E1C1414,0x90A0930B,
0x132F2F20,0x8A228BA3,0x0801A0A3,0xB0ADA7A5,0x02A1A6A4,0x01AEB3A1,0xA2910114,0xA29FA0A6,
0x90A5ACA4,0x91939B9B,0x9FB1A790,0x161D191C,0x14800E03,0x20169015,0x230F0116,0x2D252C2B,
0x82191F29,0x94A12B27,0x2780172C,0x96811627,0x2A242610,0x9A990226,0x9AA6A49A,0xA0AEB0A3,
0x9A9F940E,0xB9B8B1A8,0xA9A6B0B7,0xACB0A0A2,0x9A21208B,0x129CAEB0,0xA3AA9614,0x810A2112,
0x8EA21525,0x24171E24,0x292C2320,0x0F232624,0x30302000,0x192A312B,0x26223028,0x24262A31,
0x9508A496,0xAAA28CA3,0x0F2B2D04,0xA0A7A29A,0xA89A1212,0xA39CA7AD,0xAE9491A3,0x94AEB5B8,
0xA392080D,0x87ACB4B0,0xA6A5AB95,0x0C1D96A8,0x1503A0A5,0x1C242722,0x0B202E24,0x26312E22,
0xA4171A0E,0x0E171BA1,0xA8A49383,0xAAA90893,0x93AEA796,0x9F981925,0x138D9091,0x9FA79E0A,
0x1822088E,0xA19CA29C,0x1191919C,0xA99B2428,0x161B91A3,0x2A23018E,0x28302320,0x272A2717,
0x9D223430,0x95171791,0x940194A4,0x231E1294,0xA6143030,0x2B2B14A5,0x8C918122,0x1327240B,
0x81928C82,0xAA9F9003,0xAAA2AFB3,0x988E07A3,0xA3B5B3A5,0xA3142818,0xAAB0A19E,0x820B1F00,
0x258BA592,0x8FACAE09,0x20039006,0x94909D82,0x8A87A2A3,0x9C99A2A9,0x1E232D26,0xA2AC9917,
0x1624198E,0x94A0860E,0x909EA098,0x161D2120,0xA1AAA286,0x21272289,0x1D969911,0x2E2F2F2E,
0x1C272022,0x00120989,0x9D93201D,0x93841501,0x22819185,0x20228114,0x29200412,0x99968717,
0x28311C94,0xA8AA9813,0x1293A1A3,0x931C1105,0x95A1ADB0,0xA1AB9884,0xA1941013,0xA1A3A7A7,
0x1194969A,0x1819011A,0x0014838A,0xAAA1A8A5,0xAFABA1A9,0x011612A4,0x211E0189,0x95881513,
0x25292617,0x12110C1D,0x301A9495,0x981B3037,0x372F87A8,0x1F313334,0x2097A8A0,0x1E2C312B,
0x37321803,0x900C162C,0x91202918,0x07128A99,0x0B261F85,0x9590949A,0x98831907,0x8F949198,
0xA59B0706,0x252089A1,0xA9A51926,0x19039FA1,0x06809488,0x008BA09E,0x0E0A0B13,0x990E2015,
0x949D9A9C,0x33321C8A,0x1A058B1C,0x8A182423,0x101A2214,0xA3ACAE9C,0x219BA4A2,0x9CA11A2F,
0x02001710,0x82071E16,0x9AA2960A,0x1982A39F,0x1F221416,0x24168080,0x80011A25,0x9923332A,
0x291B91A0,0x1011101F,0x9622210C,0x90929CA1,0x9D011982,0x8291979E,0x1619878C,0x818DA39A,
0x1E158794,0x19171F20,0x95872223,0xA2A00013,0x22849A9F,0x2420111E,0x1B161011,0x228E1227,
0x0D2A3232,0x0990A4A4,0x28272015,0x2B159411,0x94821A29,0x1D121089,0x24190412,0x061E2424,
0x1794A59D,0xB1A99A14,0xA0A8B2B4,0xB6B3A599,0x89A4ABB0,0x9C960A18,0xA6A69697,0x97942116,
0xA2ADA691,0xA9941B0E,0x98A7A5A6,0xB5A90314,0x0FA1B0B5,0xA4901320,0x04281EA1,0x01909D9F,
0x1C2B2B16,0x120B190D,0x160B2128,0x2B261512,0x10182126,0x302B2822,0x2008192F,0x2532352E,
0x89070C15,0x1B240A95,0x93919A99,0x1B1A95A0,0x921B1002,0xA1A8B1B1,0x9FA79F8A,0x070C9698,
0x9C8D94A1,0xA49F868A,0xA0A2A7A5,0xAC8E89A0,0x0A85A2B0,0x86141006,0x2A26839A,0x9195A386,
0x20200395,0x1A1A0D0D,0x12251E12,0xA1A11713,0x8B918004,0x91170F93,0x251097A0,0xACA6991C,
0x1080A0A7,0x9194890A,0x04171187,0x938F9BA2,0xA4AEA695,0x0AA1A8A2,0x97A49215,0xA398030B,
0x1C201598,0xACB2A903,0x8D8C92A1,0x97048798,0x07929599,0x160F1C20,0xA38B1A18,0x9097959C,
0x1D0E1614,0x1B10031E,0x2606A598,0x8C232224,0x172193A7,0x28271802,0x0D8C9602,0x8E172723,
0x23210095,0x2B212320,0xA2082E33,0x1F221E92,0x93242F26,0x8D0A2181,0xA09E121C,0xA8ACACA2,
0xA2ABAFAB,0xB2B7B4A9,0x938D99A3,0x80A0ACA8,0x949DA398,0x9A97A09E,0xA0890E8C,0x1684A6AA,
0x9A981A1B,0x2C272820,0xA3022027,0x26230FA2,0x20242B31,0x2E290B94,0x139DA018,0x01A2A215,
0x25272213,0x201B0618,0x9E121F1B,0x13121E00,0x91111A17,0xA0A8A19D,0xA5A79406,0x8907809A,
0x160A9399,0xA2A28D1B,0x93A0A6A5,0x9B0D2015,0xA5AAA7A4,0x100A1680,0x9F182722,0x241E05A1,
0x18202F2E,0x82A0A00A,0x26282720,0x10939212,0x9C8A1318,0x911D1C8C,0xA29291A0,0x8307809B,
0x05141603,0x868A1511,0x8315100B,0xA1ADACA0,0x1B2B1D93,0x1020088A,0xA6948393,0x171389A3,
0x21178902,0xA49F950F,0x040A9EA7,0x9E091905,0x1D95B1AE,0x25261911,0x93A0801F,0x1E111210,
0x21262A2B,0x93979581,0x9A0F2109,0x231C0691,0x9183061B,0xA8A88184,0xA1A6A19D,0x08171680,
0x18819998,0xA1801F20,0x1B098CA2,0x0D822029,0x22212019,0x12152125,0x201F1312,0x282D2316,
0x84051B23,0x8F900309,0x849C9F90,0x28281E11,0x87919711,0x23231683,0x93111414,0x9F820596,
0x90910F90,0x9FA69F8D,0x0D10848E,0x91A29985,0x989D8D0B,0x96929292,0x1D138998,0x0211171E,
0x99A4A498,0x91118394,0x1115039A,0x1180918C,0x01161816,0x25271490,0x25201C20,0x28161020,
0x111A272E,0xA1928406,0x11969BA0,0x1819171B,0x94909183,0x01948F8A,0x900A1B1A,0x9585048B,
0x89038395,0x9D980609,0x93868F98,0x9B909094,0x8F9BA2A4,0x9E968104,0x048E969C,0x84900810,
0x87919D89,0x9EA0A7A5,0xA6A49998,0x9D989FA0,0x9291A5AA,0x24119EA3,0x1A181823,0x25119680,
0x1B20292A,0x800E2224,0x220F0103,0x941B282A,0x00161592,0x909A8E8A,0x10831617,0x171A1A1B,
0x8E92960B,0x1E14919A,0x0F89A28A,0x12089A93,0x17199293,0x9E958586,0x0C148599,0x17221D00,
0x88928C07,0x11979684,0x182B3129,0xA09C948C,0x92091488,0x2094A7A2,0x979C8822,0x130F8092,
0x8C9A910C,0x0F8F8507,0x81881620,0x0F07800B,0x9E9B948B,0xA7A59996,0x9F979DA1,0xACAAA2A0,
0xAEA299A4,0x168FA3AC,0x87959512,0x948C9596,0x81078B97,0x92871204,0x17141281,0x1204101B,
0x1A201313,0x81031208,0x25272721,0x14192022,0x831D1A12,0x1B0D0194,0x02172526,0x13909D93,
0x1313810D,0x9A8B0F0E,0x1404078E,0x1621201E,0x81808803,0x0A869795,0x00048800,0x959B9E96,
0xA2A6A8A0,0x929BA3A6,0x8E888203,0x96A3A39A,0x8A959F93,0x0283888D,0x87949381,0x09091310,
0x88131C17,0x17059398,0x1E202524,0x8006121B,0x02840B02,0x24201E1C,0xA5971121,0x1C1887A2,
0x86938B0E,0x83111009,0x9D900289,0x92811190,0x81818B91,0x04080880,0x94840507,0x168C9999,
0x97051115,0x1619188E,0x1D202120,0x87030C14,0x24119091,0x141F1D23,0x0B111108,0x0F131812,
0x07131415,0x09839C9A,0x00838206,0x95A0A393,0x9C8E8691,0x989AA1A2,0xA2948C94,0xA4A199A1,
0x068C98A0,0x9C05140A,0x99A0A6A6,0x19150093,0x0E018810,0x94929288,0x12840F04,0x06101920,
0x868B0108,0x0A1E2111,0x06818489,0x828E9103,0x0A111006,0x9C881112,0x8795A6A7,0x90810284,
0x01151386,0x170B8689,0x18141216,0x150E0911,0x018A0714,0x210C948C,0x0D8D9116,0x10201A12,
0x93958C89,0x14108788,0x03080310,0x0B12058D,0x0A050602,0x8A870711,0x83058B8F,0x04859496,
0xA19F9388,0x978B8594,0x0303919A,0xA5A0988F,0x91959FA4,0x8B88868A,0xA0A3A094,0x0E859299,
0x818B0013,0x8393988F,0x00101109,0x1C0A0083,0x14171A21,0x0D161714,0x161A1105,0x9594030E,
0x18070781,0x100D0D1A,0x890F0E06,0x0510088E,0x0C100382,0x93909088,0x11100690,0x16161312,
0x8205030B,0x92880581,0x04810483,0x8F010909,0x0C858B90,0x81800713,0x07859089,0x8B8D8E85,
0x0C818D8B,0x8A808204,0x01130E8A,0x0783898F,0x8A80070F,0x979B9994,0x0F048693,0x03111817,
0x828C918E,0x131B1D12,0x958B0B10,0x15170F88,0x07121610,0x8302060A,0x038C928B,0x848D8D00,
0x80868C85,0x1A069894,0x8F091217,0x86808692,0x93949995,0x0402008A,0x8C850302,0x84858185,
0x0E15190D,0x8F8B8507,0x09131284,0x8605110E,0x07000180,0x808A8109,0x0112110D,0x810D048C,
0x82888B8E,0x190D8202,0x07070817,0x0E060080,0x8C949402,0x98930000,0x8C02038F,0x929C9C95,
0x85840080,0x8C959283,0x81840604,0x87020E0D,0x01848389,0x18191610,0x040D1014,0x8281908F,
0x140F008B,0x0A121313,0x82050001,0x8301848D,0x0B080581,0x818A830C,0x070A0705,0x04090704,
0x02828002,0x12141410,0x888C8409,0x01038284,0x120F8085,0x8A84070F,0x8A95938B,0x81101107,
0x8C8D9091,0x968F8C8D,0x908B9197,0x05068592,0x8F919084,0x01038790,0x85848581,0x05028888,
0x07848680,0x83868A04,0x8A840082,0x81040385,0x84008281,0x05050683,0x0F04060B,0x11130D0E,
0x810C1614,0x120F0B02,0x0C141513,0x8F898681,0x0E0D048A,0x04050509,0x89848004,0x87888589,
0x09068082,0x93918A02,0x1104858E,0x94900412,0x88878E93,0x02000087,0x86888008,0x0A0D0385,
0x080C1009,0x81838106,0x85828181,0x86878989,0x0E0E0187,0x85830106,0x05878D88,0x84020909,
0x07028288,0x85878306,0x0E068182,0x8E898208,0x09018B90,0x8D810608,0x8787888F,0x82020580,
0x080A0180,0x03828680,0x05020103,0x88850406,0x82828383,0x80868A84,0x04060A05,0x89020603,
0x8085888A,0x81000306,0x84818082,0x00810082,0x83810406,0x85858000,0x04868B89,0x00060B09,
0x87850303,0x05050084,0x01010000,0x82858783,0x05058183,0x86848200,0x84008084,0x8B8A8B8A,
0x8481838B,0x85858889,0x83868686,0x05040501,0x82010304,0x01828787,0x80030304,0x82888A87,
0x02030300,0x82868481,0x00030703,0x81828382,0x03030400,0x83840004,0x04010081,0x82800303,
0x83858584,0x82000180,0x07080283,0x80030505,0x82818282,0x05018081,0x85848004,0x00828587,
0x02030180,0x83848381,0x84828182,0x81828282,0x01010180,0x02030000,0x82858381,0x82818282,
0x84848383,0x03008082,0x82818100,0x02018284,0x80818001,0x81808181,0x83838483,0x02020181,
0x80818000,0x01000000,0x00808101,0x01000002,0x01030201,0x81818100,0x00010100,0x81828180,
0x81818181,0x80808081,0x81818280,0x00000081,0x81808000,0x81818181,0x80808081,0x80808000,
0x80808080,0x00808080,0x80808080,0x80808080,0x80808080,0x00000080,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,
};

+ 3
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleHihat.h 查看文件

@@ -0,0 +1,3 @@
// Audio data converted from WAV file by wav2sketch

extern const unsigned int AudioSampleHihat[5953];

+ 327
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleKick.cpp 查看文件

@@ -0,0 +1,327 @@
// Audio data converted from WAV file by wav2sketch

#include "AudioSampleKick.h"

// Converted from kick.wav, using 22050 Hz, 16 bit PCM encoding
const unsigned int AudioSampleKick[2561] = {
0x820013EC,0xFFDC0027,0xFF710095,0x038DFF4C,0xFBA10105,0x0037FB6E,0x09D2011A,0x007504CA,
0x024BF6BF,0xF77B0AFF,0xFB72F723,0xEF3DEBAD,0x0F7009D6,0x09DD1736,0xF26EFA3E,0x0D7002FB,
0xFF4401F1,0x06B20406,0xF83306AF,0xFC9DF1A9,0xFCC601C7,0x0423F387,0x11F011ED,0xF727066F,
0xF0C6FF94,0xFB8CF2E3,0x105D07AC,0xF56D02F9,0xFE1CF445,0xFA14F903,0x0027FE3F,0xEEA1EA4B,
0xFE40F2FC,0xFD02FCC2,0x0A230EE6,0xEE5AF060,0x08C8F64F,0xF0A9FEFD,0x0768EECB,0xFAF211B5,
0xFA39F885,0x224325CA,0x04D31BC8,0x045AFAAF,0x2E6F17C3,0x175424A4,0x174A0F13,0x196C1BA1,
0x1DE521BD,0x1CCF1D7A,0x129614BC,0x0D7907C6,0x0E120948,0x098F1251,0x012B06A2,0xE8B601B6,
0xE4EAEDB9,0xDC64DCBE,0xDDC7DAB3,0xD546CB2A,0xCF55C8BD,0xCC38C9D5,0xC40EC6AF,0xBCBCC587,
0xC7A1CE49,0xC6A2C706,0xD13BCF7F,0xCF29C9A2,0xD4A6D65C,0xDE53D0A1,0xEB95E584,0xEBD4E3D2,
0xF3B3F3BE,0x05EBFBA2,0x10DD1169,0x12B20FEF,0x1BD6181B,0x3036277F,0x41163F5B,0x3D2C4746,
0x468741F2,0x51434E0D,0x564E5524,0x5C6C571A,0x5D8B550C,0x5FC16321,0x5CCD5B83,0x57A2532D,
0x57595078,0x527C538B,0x42C54932,0x358E3DED,0x31873618,0x28CB2B68,0x15372060,0x072B1054,
0xFB05057D,0xEE36F62C,0xE66DEB26,0xD789DDD6,0xC6EDD3FD,0xB896C27F,0xB272B6A1,0xAC2DAF17,
0xA531A148,0xA2A3A22F,0x982898F2,0x92DC93D9,0x93DF94D1,0x986397BD,0x96BE99D4,0x9B859A62,
0x99C098E2,0xA1F7991A,0xA81FA326,0xADC8AECF,0xB783B7E0,0xBDC4BDA7,0xC8A0C5F6,0xD3B8D233,
0xE22DD9E8,0xEEF0E351,0xF780ED42,0x0114F8E1,0x0EC20826,0x1B611444,0x22AC1B34,0x2C0724DF,
0x3278335C,0x3F663B15,0x45A04521,0x50194F20,0x56F952C7,0x5DFA5686,0x61065AFA,0x638E6495,
0x66EE6735,0x661E6B05,0x68426CE6,0x673B6835,0x65F76407,0x657F63D9,0x616E64A3,0x5C035D70,
0x53DB5388,0x4E45515D,0x47244C8E,0x46AB4439,0x37183D2B,0x298F33A1,0x23E024E3,0x1EE62440,
0x119D14AB,0x0AE2109F,0x014B0560,0xF675FC9A,0xED17F3C9,0xE686EC17,0xDFDAE318,0xD612DBC0,
0xCB6ACF47,0xC588C91F,0xBC20C090,0xB6A4BBA6,0xB30AB329,0xACC4AB60,0xA40EA744,0xA140A0BF,
0x9D589F92,0x98B89A3A,0x99689A8F,0x971399E7,0x97DB982B,0x99199808,0x9A8398EF,0x9BB99DC4,
0xA1409F4D,0xA497A2D2,0xAA05A779,0xB0BCACEF,0xB589B070,0xBCA0B93C,0xC042BEEF,0xCB3FC7EB,
0xD252CCE5,0xDA9AD73F,0xE4F2DE9E,0xEE51E76E,0xF74EF15F,0xFF4CF9B0,0x07E7006A,0x0F150C10,
0x18651497,0x1D8C1C39,0x25032397,0x2B2A2DC4,0x36B632A3,0x3E163B15,0x452E4104,0x4B0946A1,
0x5158507A,0x58C55817,0x5EBF5BAC,0x65F65E02,0x6A47619D,0x6B706A44,0x6EDC6CE7,0x72747011,
0x732571AD,0x73E37447,0x73E57587,0x73A877A5,0x72A975D5,0x6FEE735B,0x6D0F6E44,0x68D86B14,
0x65D3671B,0x60176182,0x575B5822,0x4F63546F,0x47484CAA,0x3FA44284,0x35EA3ABA,0x2C5D30D7,
0x21BC25EE,0x175A1B22,0x09EA0FDC,0xFE680521,0xF305F9BF,0xE7E9EE2F,0xDE72E3B9,0xD4E1D992,
0xCA95CFBD,0xC1D8C625,0xB91FBDE2,0xB248B79E,0xAC51B112,0xA67CAAA1,0xA14FA261,0x9C789DD2,
0x982C98AA,0x92709487,0x8E508F2F,0x8A9D8C24,0x88228995,0x86B6878F,0x841F83B9,0x81CF83CF,
0x80CD8278,0x829980C8,0x83528258,0x83CF8344,0x85E7852A,0x885487F7,0x8B418C24,0x90EE8F6D,
0x97B69365,0x9D379825,0xA2DB9F05,0xAB50A682,0xB45BAEA0,0xBB7BB8B9,0xC777BFF2,0xD1DACB86,
0xD8BBD5BB,0xE607E214,0xF1D3EC17,0xFD34F5C7,0x06EB0237,0x115E0E10,0x1DA818C1,0x264C2573,
0x30C02ED0,0x3BCC377B,0x44B83E3A,0x4B3D46D0,0x56884D80,0x5DD659CC,0x64065B7C,0x68B563BA,
0x6B846C65,0x6EE36DA6,0x72F8728A,0x7343751D,0x77877334,0x7A0577A3,0x773C77D8,0x7805792D,
0x77967AA9,0x77E279EE,0x78B37A43,0x771078CC,0x7780777C,0x76CB7564,0x75A37620,0x71787198,
0x700F702B,0x6C256D69,0x697E69E8,0x643D66B8,0x5C9861E3,0x590B5BF4,0x526D55D5,0x4B7C4F3F,
0x45924786,0x3C9C3FEE,0x35143866,0x2ABE2F21,0x208B260B,0x17711E8C,0x0EBC143E,0x05060AC4,
0xFC1EFFD1,0xF39CF5A3,0xE841EDA8,0xDEA0E55A,0xD7FEDB6D,0xCCDDD37C,0xC6C1C941,0xBDCFC2A9,
0xB6CABA65,0xB0D7B32F,0xA9F1AC75,0xA4EDA5F6,0x9D36A072,0x99329CA7,0x96CC9771,0x902C92F4,
0x8EAC90AF,0x8D348D2C,0x8C218B9A,0x8A3C8872,0x894D89EA,0x892E89A4,0x873A8B68,0x88338A63,
0x8B358BEB,0x8C858B71,0x8F798BAC,0x8FFB8C64,0x90B19035,0x91F79114,0x94B993D3,0x953697A9,
0x9AAB982A,0x9E4F9A2A,0x9FA09D4F,0xA2E5A077,0xA789A4D2,0xA9ECA818,0xAEF8AC6D,0xB393B27D,
0xB8EBB67F,0xBE4EBDB8,0xC464C202,0xCB72C952,0xD453D00C,0xD9ECD7A4,0xE378DDD5,0xEBEDE73C,
0xF3ECEE8B,0xFC42F76F,0x04CF0092,0x0E190A5F,0x180C133E,0x20901ACA,0x29B0247C,0x317D2CC2,
0x3A243551,0x41F03DBD,0x482F46B0,0x4DA0496D,0x54F05455,0x5A5F5927,0x5D515B30,0x61B65CBE,
0x63B36333,0x6576658C,0x6B936A2B,0x6E7B6D97,0x712F6F7A,0x721470D6,0x726471CC,0x72DE72EC,
0x7362748F,0x71DA7315,0x6F0471D8,0x70956EA4,0x6DD46CAD,0x6CEC6B86,0x69816C0A,0x696A6A2F,
0x6787699A,0x64516784,0x636B649B,0x636261B2,0x60A26027,0x5CEC5CD9,0x5A7B5B84,0x56FD5944,
0x52E6556D,0x4FAB512B,0x490D4C8D,0x43F848F7,0x3DDB425E,0x38683B3B,0x32B835ED,0x2ADB2EFF,
0x243C27CC,0x1D1A20AE,0x15911889,0x0D6E1122,0x052809C0,0xFD63020B,0xF5F6F963,0xEDF4F0D5,
0xE5A7E880,0xDD2CE0C8,0xD58ED8B6,0xCD07D13F,0xC639C91D,0xBE72C2B7,0xB7B3BC5B,0xB260B681,
0xAD70AFE7,0xA84EA96F,0xA480A60B,0x9FBFA0C4,0x9CF89F3A,0x99889AD3,0x95FC9870,0x938895D1,
0x91D19477,0x91509189,0x8FF78EA6,0x8F938EE4,0x8D6E8E7D,0x8CB38DED,0x8E5E8F12,0x8E468E18,
0x8FF78EE3,0x926B9052,0x92D991B3,0x9529936A,0x96579746,0x9AEC9880,0x9CE59BB0,0x9E3D9CFC,
0xA2D69F26,0xA514A1D1,0xA693A634,0xA8E2A70B,0xAC7DACE8,0xAE9DAEE7,0xB407B1D9,0xB761B66D,
0xBC67B783,0xBFE7BCF1,0xC3BEC2D3,0xC76CC7E5,0xCE76CA99,0xD45CD2E1,0xD946D61A,0xDF11DBEF,
0xE50EE245,0xEBCFE8CB,0xF1FAED42,0xF7DAF5CD,0xFE99FB80,0x05D60255,0x0D65088C,0x14EE0F5F,
0x1ADA169A,0x22311E80,0x293E25C5,0x2EC72C97,0x35D2333B,0x3D1A3B10,0x42E03FE4,0x48C846B2,
0x4DDE4AF7,0x5320503E,0x56D75568,0x5A625920,0x5F085C53,0x621B603B,0x64666193,0x677564A7,
0x69A06759,0x69F76AB4,0x6BA96C3E,0x6D086DBF,0x6E406EBA,0x6F6D6F37,0x70606FC9,0x6FB46F7F,
0x6E996EDB,0x6E0F6DFC,0x6BB06DAE,0x6B0C6DC2,0x69656A0B,0x686968A7,0x65A766BE,0x635663E4,
0x61EA61C5,0x5F055EF3,0x5BDC5C99,0x58BB5A04,0x554757DB,0x51885384,0x4EAB507C,0x4B334CC6,
0x46B247F6,0x419043E9,0x3E313EC9,0x37133BB1,0x318D3639,0x2CA0307D,0x28082B1C,0x21B5250C,
0x1CCF1F9F,0x17FE1A56,0x11201354,0x0C220E4F,0x0613096E,0xFFD7022B,0xF9B1FC30,0xF403F7C8,
0xEDAEF0C9,0xE7EDE9A3,0xE1AAE4B0,0xDB4FDE23,0xD564D816,0xCF5ED23A,0xC992CCFD,0xC3CFC749,
0xBF17C1C8,0xB9A1BC46,0xB47BB71F,0xB041B282,0xAC11AE9A,0xA8C4A9D6,0xA3FDA674,0xA108A420,
0x9F8EA0B1,0x9D479E07,0x9AF59A98,0x992D991D,0x967E9918,0x962C969A,0x9512940C,0x948294A8,
0x92E19368,0x937692FC,0x93AB934D,0x93CB929C,0x94F493C4,0x947794F1,0x957A96F4,0x970C97EB,
0x9A4B98B5,0x9B8B9AE8,0x9D689C25,0x9E499E94,0xA2A2A0E5,0xA442A27B,0xA744A4E6,0xAADDA818,
0xAC3AAB16,0xB0BAAEC9,0xB3D7B118,0xB6F2B614,0xBB67BAAC,0xC027BD62,0xC51AC1F8,0xC954C65C,
0xCDE8CC33,0xD2BDD165,0xD853D64B,0xDCF3DA00,0xE28AE033,0xE733E49C,0xECC6E9D8,0xF1FBEEBF,
0xF672F45C,0xFBE9F965,0x00E0FE7D,0x0663036E,0x0BA208AA,0x11070E33,0x162F136F,0x1B8518AC,
0x20901E1F,0x25D2234B,0x2ACD2869,0x30072D8A,0x34D7325F,0x397A376B,0x3E8F3CA9,0x43514067,
0x473B45B5,0x4B574992,0x4FDE4D47,0x534751A6,0x560B555B,0x59C658EE,0x5D435B89,0x60365E61,
0x62416049,0x646D62B0,0x66AA6529,0x67AE663E,0x68F8682D,0x69CC696E,0x6A356ACA,0x6B656B79,
0x6BDD6B86,0x6B2B6B95,0x6B486B98,0x6B3B6B0B,0x6A246A10,0x68C56904,0x678868B3,0x64F1673A,
0x63E36609,0x627063CA,0x607F610A,0x5EC65E98,0x5B6B5C8D,0x589B59AD,0x553F5781,0x532B53BB,
0x4ED3511C,0x4BE44D2C,0x47AA4A67,0x43B04615,0x407841D8,0x3C973DEC,0x37703945,0x33023602,
0x2F2C31CB,0x2AD92C14,0x263427BF,0x216923B2,0x1CCA1FC2,0x180A1AE8,0x139C1636,0x0F46113E,
0x0A3D0D37,0x06540887,0x015203A2,0xFCF3FF28,0xF875FB28,0xF3A9F612,0xEF9AF14F,0xEB58ECDD,
0xE697E882,0xE223E42E,0xDD69DF7C,0xD9D8DBD4,0xD4C3D754,0xD149D318,0xCD2FCECF,0xC966CB0A,
0xC538C6FC,0xC127C389,0xBDC2BFBC,0xBA1EBC6C,0xB669B8DA,0xB3D1B59B,0xB057B257,0xADD6AF78,
0xAB6CAC5B,0xA89DA9D7,0xA632A6F9,0xA452A4F1,0xA22DA32E,0xA081A0ED,0x9EA79F30,0x9E229E4D,
0x9C609CA8,0x9B529C36,0x9AA69B28,0x9A8E9ACA,0x9A089A71,0x9A0E9A8E,0x9AAF9A39,0x9AFF9ABA,
0x9B5B9B49,0x9D149C58,0x9D849D06,0x9F1C9E6B,0xA12D9FFF,0xA286A181,0xA4DFA37A,0xA6D6A578,
0xA97CA807,0xAB70AA2A,0xAE45ACB1,0xB105B03A,0xB42FB2A2,0xB77AB599,0xBA5FB8E6,0xBE1FBC72,
0xC12CBFBE,0xC50FC35B,0xC88DC728,0xCC82CAC5,0xD062CE35,0xD460D2EA,0xD834D691,0xDCE3DAB5,
0xE10EDDFE,0xE4D1E2BA,0xE906E6BC,0xED39EB0F,0xF13DEF26,0xF5C4F35D,0xF997F785,0xFE12FBBA,
0x01EEFFA0,0x05FD041D,0x0A250856,0x0E630C8B,0x123410C7,0x16EE1466,0x1A7218FB,0x1EA51CEE,
0x22C920AE,0x26B62494,0x2A53286B,0x2E8C2C67,0x32082FC5,0x359333A0,0x39103782,0x3C893B1A,
0x40453E2A,0x43474180,0x468444F7,0x49A7481D,0x4C6E4AC6,0x4F374E1D,0x521C50C6,0x545C5313,
0x569555F7,0x58F5580B,0x5B105A21,0x5CE35BD1,0x5EA25DD0,0x5FE45F26,0x611360AE,0x62476210,
0x634762D0,0x640C636D,0x648063FD,0x64B8648D,0x64BC6483,0x6499647B,0x64106473,0x638463FD,
0x62E462FB,0x61B2624E,0x6072611B,0x5F056008,0x5D885E2E,0x5B865CAB,0x59755AC2,0x576158B6,
0x551D5650,0x529653F2,0x4FCF513B,0x4D184E98,0x4A2C4B66,0x47024873,0x43BC4517,0x40434206,
0x3CCF3E7C,0x39693B05,0x35A03777,0x31A5339D,0x2E0E3007,0x29FC2C05,0x25FD27F4,0x21C62400,
0x1DC51FFD,0x19631BE5,0x157317A5,0x11571353,0x0D380F02,0x08E20AD4,0x049006D3,0x00600287,
0xFC41FE1A,0xF7D2F9EE,0xF39FF5B4,0xEF24F188,0xEB00ECEF,0xE6C2E8B6,0xE26FE480,0xDE22E058,
0xD9F5DC40,0xD5FBD828,0xD1F0D3EE,0xCDE6CFFE,0xCA18CBFA,0xC637C825,0xC283C459,0xBEDAC0B7,
0xBB52BD2A,0xB7E0B987,0xB4B3B63B,0xB179B307,0xAE79AFE5,0xAB91ACEF,0xA8E2AA2D,0xA651A791,
0xA40AA50F,0xA1D5A2DC,0x9FDFA0E4,0x9E1A9EFD,0x9C8F9D4A,0x9B3B9BE7,0x9A0A9A9B,0x992699AB,
0x986598D8,0x98019831,0x97BA97C3,0x97B097A0,0x97CE97B9,0x981D97F9,0x98D79888,0x9995991D,
0x9A919A25,0x9BE29B2A,0x9D429C71,0x9EE59DF9,0xA0AB9FB8,0xA2AAA18F,0xA4C4A3B8,0xA71FA5EF,
0xA999A871,0xAC42AAED,0xAF11ADB2,0xB1F4B08F,0xB518B38C,0xB845B6B0,0xBB91B9E8,0xBF03BD4C,
0xC297C0C0,0xC634C44E,0xC9EBC80F,0xCDB4CBBA,0xD17DCF8F,0xD574D375,0xD95DD75C,0xDD5DDB5A,
0xE16ADF5B,0xE587E381,0xE9A6E7A7,0xEDE1EBCC,0xF213EFF4,0xF645F424,0xFA6FF859,0xFEA2FC8E,
0x02ED00C4,0x071C0503,0x0B670945,0x0F9B0D7D,0x13DA11D1,0x18111603,0x1C471A29,0x20541E48,
0x2467225E,0x28682663,0x2C592A68,0x30412E51,0x34053229,0x37D035E4,0x3B6E398D,0x3EE53D2A,
0x425D40AB,0x45AD43F3,0x48C94748,0x4BE44A66,0x4ED14D54,0x518B5033,0x542152E9,0x56A15567,
0x58DB57BD,0x5AE759F5,0x5CE55BF4,0x5E875DB5,0x600D5F67,0x616860CD,0x628A6203,0x638262FD,
0x642E63DE,0x64B86470,0x650664E0,0x6520651B,0x6517651C,0x64D164EB,0x644D648C,0x63AA6405,
0x62CB633C,0x61CA625C,0x609D6130,0x5F315FF0,0x5D9C5E73,0x5BED5CD4,0x5A0E5B07,0x58075911,
0x55DB56F4,0x538D54BA,0x511E5248,0x4E834FCD,0x4BCB4D32,0x49034A6C,0x4606478F,0x43084499,
0x3FF04174,0x3CB03E53,0x396F3B09,0x360837BC,0x3293344C,0x2F1F30E7,0x2B822D4C,0x27D929C3,
0x243E261E,0x20822264,0x1CDF1EB4,0x191C1AF2,0x1566172A,0x1192136C,0x0DC30FA3,0x09FE0BDC,
0x06330807,0x024F0442,0xFE7C0078,0xFA97FCA8,0xF6C9F8C1,0xF2F5F4D7,0xEF18F0F9,0xEB30ED2C,
0xE771E958,0xE3C0E59E,0xE017E1E7,0xDC8DDE45,0xD909DAB0,0xD58CD73E,0xD224D3D3,0xCEE2D082,
0xCB9ACD3D,0xC87BCA0A,0xC556C6F7,0xC273C3F9,0xBF8EC103,0xBCE3BE35,0xBA33BB74,0xB7ADB8DF,
0xB52FB673,0xB2F1B412,0xB0C9B1D2,0xAEC2AFC1,0xACDCADD0,0xAB20ABFA,0xA98AAA4F,0xA829A8C6,
0xA6D5A76E,0xA5B2A634,0xA4B4A52C,0xA3EDA450,0xA341A39C,0xA2CAA312,0xA274A2A5,0xA255A25F,
0xA254A260,0xA288A260,0xA2DCA2A9,0xA358A30C,0xA3FCA3A1,0xA4B6A45F,0xA5B8A53A,0xA6CDA62F,
0xA80FA75C,0xA961A8A3,0xAAE0AA17,0xAC6FABAC,0xAE35AD5D,0xB025AF30,0xB218B115,0xB43BB334,
0xB674B556,0xB8CFB79A,0xBB39B9F7,0xBDC1BC7B,0xC05EBF0A,0xC316C1BA,0xC5DCC46E,0xC8BCC747,
0xCBA5CA25,0xCE97CD27,0xD19FD02B,0xD4C8D342,0xD7F2D65C,0xDB20D980,0xDE6ADCB5,0xE1AEDFFF,
0xE4F0E357,0xE847E6AA,0xEBAAE9FD,0xEEF8ED4D,0xF26CF0B3,0xF5BFF404,0xF90CF76B,0xFC7AFAD1,
0xFFF9FE2F,0x0369019B,0x06D20510,0x0A4F0897,0x0DD00C0D,0x11320F82,0x14AD1308,0x18201678,
0x1B8419D7,0x1ED41D23,0x221A2076,0x255223B3,0x287326E8,0x2B9329FB,0x2E8F2D1B,0x31963012,
0x34793309,0x374D35EB,0x3A1E38B5,0x3CC73B76,0x3F703E23,0x420540AD,0x4476432A,0x46C445A0,
0x490A4801,0x4B384A2A,0x4D434C48,0x4F314E47,0x51115030,0x52C151EF,0x54595386,0x55D3550C,
0x570A566D,0x583857B3,0x594558BC,0x5A2359AC,0x5AD65A80,0x5B6D5B27,0x5BD55BA3,0x5C105C00,
0x5C375C28,0x5C2C5C2F,0x5BED5C10,0x5B925BD1,0x5B115B50,0x5A695ABF,0x598D5A0B,0x589A5924,
0x577E581F,0x565056EE,0x54E35586,0x5363541F,0x51B4527F,0x4FE150D6,0x4DFF4F04,0x4BF94CFA,
0x49D54AE9,0x478E48B0,0x45264664,0x42A943FA,0x40154172,0x3D763ECF,0x3AB03C07,0x37D93946,
0x34F03663,0x31ED3367,0x2EE8306D,0x2BCE2D4D,0x28A92A34,0x25682704,0x222A23BE,0x1ED22090,
0x1B8D1D36,0x183519D4,0x14C61677,0x11571313,0x0DEB0FAE,0x0A8E0C49,0x072608E8,0x03B3057E,
0x00380212,0xFCDBFE87,0xF955FB01,0xF5CBF786,0xF244F404,0xEEBDF073,0xEB34ECF9,0xE7BEE974,
0xE457E5FB,0xE0E0E292,0xDD81DF3F,0xDA36DBE9,0xD70AD8A3,0xD3D0D55E,0xD0B4D250,0xCDB8CF2A,
0xCABCCC2F,0xC7D7C946,0xC505C665,0xC24AC3A7,0xBF9DC0EB,0xBD0BBE5C,0xBA8DBBCB,0xB82BB972,
0xB5F1B70A,0xB3CDB4CA,0xB1B0B2AD,0xAFC0B0BD,0xADEEAED3,0xAC4BAD1D,0xAAB7AB82,0xA954AA01,
0xA80DA8A7,0xA6E2A77C,0xA5F4A662,0xA517A580,0xA470A4BD,0xA3E2A419,0xA380A3AF,0xA34BA361,
0xA341A337,0xA358A33E,0xA390A377,0xA406A3C0,0xA48EA449,0xA54AA4E1,0xA61FA5B2,0xA71FA6B1,
0xA848A7BC,0xA997A8F1,0xAB08AA4C,0xAC98ABC6,0xAE49AD6D,0xB022AF31,0xB208B10A,0xB41FB310,
0xB63DB528,0xB880B761,0xBAEDB9B0,0xBD5EBC16,0xBFF4BE90,0xC28AC13B,0xC54BC3EF,0xC819C6B8,
0xCB05C985,0xCDF0CC74,0xD0F3CF6F,0xD404D277,0xD717D584,0xDA2FD8B0,0xDD60DBDF,0xE0A2DF0C,
0xE3D2E241,0xE719E576,0xEA61E8C2,0xEDB3EBFC,0xF0F4EF49,0xF445F29E,0xF782F5D6,0xFACDF91D,
0xFE06FC76,0x0154FFB2,0x049302FE,0x07FD064A,0x0B370989,0x0E890CE0,0x11CA1031,0x1523137F,
0x185216B9,0x1B8F19E5,0x1EB11D14,0x21BB2027,0x24C62341,0x27B02646,0x2AA0293C,0x2D812C0E,
0x303E2EDF,0x32EC319C,0x3591344D,0x382436D1,0x3A8D3957,0x3CF23BD0,0x3F343E14,0x4168405B,
0x43884271,0x457C4488,0x476C468B,0x494B4851,0x4AFF4A26,0x4C9C4BD3,0x4E214D58,0x4F774ED3,
0x50D3502B,0x51F6516B,0x530A5285,0x53F75387,0x54D95457,0x55765512,0x560655CF,0x56785646,
0x56C556A3,0x56E956F8,0x570B570D,0x56F656FF,0x56CB56CE,0x5667569F,0x55F5562F,0x555755A2,
0x54AC550E,0x53D15437,0x52DA5355,0x51BE5251,0x508F512F,0x4F354FEE,0x4DD24E93,0x4C454D17,
0x4AA64B77,0x48DE49C5,0x470D47F5,0x4527460C,0x430D4410,0x40E4420C,0x3EBD3FDD,0x3C6F3D8E,
0x3A063B3D,0x379538D2,0x351A3658,0x328033CE,0x2FE2311F,0x2D202E75,0x2A522BCE,0x2785290A,
0x24B8262C,0x21D2234C,0x1EF1205D,0x1C0A1D77,0x190E1A77,0x160A177D,0x1308148E,0x0FFE1189,
0x0D060E7C,0x0A0E0B85,0x07000888,0x0408058D,0x00F60287,0xFDF8FF87,0xFAF4FC70,0xF7EDF96D,
0xF4E2F669,0xF1D6F357,0xEECBF057,0xEBCCED47,0xE8CFEA44,0xE5E4E755,0xE2EFE466,0xE01BE189,
0xDD4BDEAE,0xDA8EDBE7,0xD7C1D931,0xD52BD67D,0xD290D3CF,0xD003D141,0xCD88CEB6,0xCB19CC53,
0xC8BAC9F2,0xC688C7A4,0xC44EC56B,0xC231C334,0xC027C128,0xBE2BBF31,0xBC58BD46,0xBA99BB6B,
0xB8D8B9A7,0xB72DB810,0xB5B1B67A,0xB444B4FF,0xB2E9B398,0xB1BFB24E,0xB094B120,0xAF83B002,
0xAEA3AF05,0xADC2AE31,0xAD16AD71,0xAC7DACC1,0xAC0CAC2E,0xABA7ABCF,0xAB5AAB86,0xAB43AB58,
0xAB46AB43,0xAB68AB52,0xABA2AB85,0xAC06ABCB,0xAC7CAC36,0xAD1CACC0,0xADC9AD6A,0xAEA3AE4D,
0xAFA9AF23,0xB0B8B030,0xB1EAB14F,0xB343B28F,0xB4B0B3F1,0xB63DB563,0xB7D6B6EC,0xB986B8B3,
0xBB5BBA81,0xBD54BC58,0xBF54BE51,0xC171C068,0xC3B0C28F,0xC5F4C4C7,0xC855C71F,0xCAB6C982,
0xCD3ACC06,0xCFD2CE8A,0xD275D11C,0xD518D3D4,0xD7E4D682,0xDAAFD946,0xDD8CDC19,0xE065DEEA,
0xE35BE1C8,0xE63CE4C2,0xE929E7B3,0xEC27EAB1,0xEF24EDA5,0xF222F0A7,0xF522F3AD,0xF81BF685,
0xFB0BF994,0xFE0EFC95,0x0111FF8A,0x041802A5,0x07190597,0x0A2308B5,0x0D2B0BAA,0x10290EB6,
0x132D11BD,0x163A14AB,0x1920179A,0x1C041A87,0x1EDD1D67,0x21AC2039,0x24662301,0x272225C6,
0x29CC286B,0x2C4A2B20,0x2EEE2DAA,0x316A3021,0x33C432A0,0x36243509,0x3872374A,0x3A9E398A,
0x3CB93BBD,0x3EC63DCF,0x40CC3FC3,0x42A441A5,0x4469437E,0x461B453A,0x47A146E8,0x49244879,
0x4A9949E6,0x4BE34B49,0x4D224C8A,0x4E344DAF,0x4F454EC3,0x50234FB8,0x50FF5088,0x51AD514A,
0x523E51F3,0x52B1527E,0x530552F3,0x53565333,0x536D5360,0x53795373,0x5353535F,0x5320533D,
0x52BF52F5,0x524E5289,0x51BE51FE,0x510F5164,0x503650A3,0x4F434FCB,0x4E384ED2,0x4D1D4DC4,
0x4BDE4C8A,0x4A804B36,0x491449C9,0x478A483F,0x45D646AC,0x441944FA,0x423E4328,0x4052414A,
0x3E4E3F48,0x3C2D3D49,0x3A0A3B1E,0x37C738E3,0x356D36A6,0x330E3443,0x309B31D7,0x2E1B2F5B,
0x2B8B2CD2,0x28E62A42,0x26402797,0x238B24EB,0x20DC2233,0x1E111F6F,0x1B4E1CA4,0x186E19D2,
0x158C170C,0x12C01429,0x0FE11143,0x0CF30E71,0x0A1D0B9C,0x075808CE,0x047105E8,0x01AE030C,
0xFECA002F,0xFBE5FD53,0xF905FA79,0xF631F798,0xF353F4B6,0xF07BF1DE,0xED9AEF0A,0xEADEEC3E,
0xE81CE973,0xE56DE6B6,0xE2B9E41C,0xE01CE174,0xDDA2DED9,0xDB0CDC4F,0xD898D9DE,0xD62FD754,
0xD3D3D514,0xD18CD2AB,0xCF4ED06B,0xCD1DCE35,0xCB05CC16,0xC8FBC9FE,0xC704C7F2,0xC524C60F,
0xC34FC42F,0xC190C265,0xBFD8C0BC,0xBE49BF15,0xBCCABD96,0xBB59BC24,0xBA19BABD,0xB8DFB960,
0xB7ABB83A,0xB69FB721,0xB5ABB617,0xB4C0B526,0xB3FAB45A,0xB34CB38D,0xB2A3B2E8,0xB226B262,
0xB1A7B1ED,0xB151B197,0xB130B151,0xB101B117,0xB110B10B,0xB119B105,0xB148B12F,0xB18EB165,
0xB1F1B1B4,0xB26EB21E,0xB2FFB2B1,0xB3A8B353,0xB473B410,0xB549B4E0,0xB647B5E1,0xB76DB6D3,
0xB88EB7F7,0xB9D5B925,0xBB2EBA80,0xBC9FBBD8,0xBE25BD59,0xBFC4BEF4,0xC175C0A0,0xC335C24F,
0xC512C42C,0xC708C607,0xC8FDC801,0xCB1BCA06,0xCD37CC1F,0xCF61CE58,0xD1A9D085,0xD3F4D2D3,
0xD65AD526,0xD8CED77A,0xDB33D9EA,0xDDA9DC6E,0xE038DEF6,0xE2C1E17F,0xE563E41A,0xE7F8E69E,
0xEAA2E950,0xED48EBF6,0xEFEBEEAB,0xF29AF154,0xF550F3F8,0xF7FAF6A5,0xFAA4F94A,0xFD54FBF9,
0x0003FEAB,0x02B60163,0x05660413,0x081B06C6,0x0AC90976,0x0D8B0C22,0x102E0ED7,0x12E21181,
0x157B1423,0x181916D2,0x1AAC1950,0x1D1A1BDC,0x1FA01E5F,0x220220D1,0x24622339,0x26C22592,
0x290127E6,0x2B422A2B,0x2D6A2C63,0x2F9A2E89,0x31A830A9,0x33B532AE,0x359834AF,0x379036A6,
0x39613876,0x3B273A3A,0x3CDC3BF3,0x3E6D3DA2,0x3FF93F3F,0x417040B4,0x42D74225,0x441F4379,
0x455F44B8,0x467745ED,0x47874700,0x48784815,0x495D48F0,0x4A2F49CF,0x4AD94A82,0x4B7D4B2F,
0x4C014BC3,0x4C744C44,0x4CCD4C90,0x4D0A4CE7,0x4D214D1A,0x4D344D32,0x4D234D2A,0x4CF94D15,
0x4CB54CE5,0x4C644C99,0x4BE74C2D,0x4B664BAB,0x4AB14B17,0x49F94A62,0x49254980,0x483048AE,
0x472947A8,0x45FF468C,0x44CF456A,0x43804417,0x420942C3,0x4097414B,0x3EFF3FCA,0x3D4A3E30,
0x3B963C77,0x39BC3AAE,0x37DB38DC,0x35EA36F3,0x33E034ED,0x31C332DB,0x2FA430B9,0x2D6D2E8B,
0x2B272C48,0x28D92A03,0x268227A7,0x2418253C,0x219E22D9,0x1F242061,0x1C9C1DE0,0x1A1A1B54,
0x177718BD,0x14E3162F,0x12431396,0x0FA010FC,0x0CFC0E5B,0x0A5C0BBA,0x07C4091A,0x052C0664,
0x027D03D2,0xFFCE0131,0xFD2FFE8C,0xFA87FBE2,0xF7F1F921,0xF53BF693,0xF2A6F3F1,0xF003F142,
0xED6AEEA7,0xEACBEC1C,0xE845E98B,0xE5CFE70F,0xE361E4A1,0xE0F8E239,0xDEA8DFD2,0xDC51DD83,
0xDA27DB3A,0xD7F5D8FF,0xD5CDD6C7,0xD3A8D4B8,0xD1AAD2B7,0xCFABD0A3,0xCDC1CEC6,0xCBFACCC6,
0xCA1FCB04,0xC867C94F,0xC6C8C78A,0xC526C5F5,0xC39FC46F,0xC232C2F4,0xC0DCC187,0xBF9BC02E,
0xBE5BBEF3,0xBD45BDD2,0xBC36BCB0,0xBB39BBB2,0xBA60BAD6,0xB990B9FE,0xB8E2B937,0xB841B890,
0xB7BEB7FF,0xB754B773,0xB6DDB719,0xB6A5B6CB,0xB67EB688,0xB661B65B,0xB650B657,0xB66CB665,
0xB69BB680,0xB6D8B6B2,0xB73BB70C,0xB79CB76A,0xB82BB7E7,0xB8C9B878,0xB981B922,0xBA53B9D0,
0xBB21BAAC,0xBC12BB98,0xBD1DBC9A,0xBE37BDBA,0xBF6BBED8,0xC0B3C01E,0xC214C158,0xC37BC2C8,
0xC50CC43D,0xC68CC5BA,0xC83AC765,0xC9E1C914,0xCBB1CAC6,0xCD8BCC8E,0xCF5FCE75,0xD152D061,
0xD353D259,0xD56CD45A,0xD784D65B,0xD996D87F,0xDBCADABA,0xDDFBDCE6,0xE047DF20,0xE289E166,
0xE4DAE3B0,0xE736E5FD,0xE97AE856,0xEBEBEAC3,0xEE3CED26,0xF0B5EF89,0xF32AF1EF,0xF5A1F44D,
0xF7F9F6BC,0xFA57F91D,0xFCB3FBA2,0xFF39FDFE,0x01AC0065,0x041002DE,0x06820545,0x08EF07C2,
0x0B5F0A2C,0x0DC70C93,0x10150F08,0x1299115A,0x14FB13B2,0x173C15FD,0x19791857,0x1BB41AA0,
0x1DEE1CC5,0x1FFA1EF5,0x221B211E,0x242A2334,0x262E2537,0x28332726,0x2A172908,0x2BE62AFA,
0x2DB52CDF,0x2F7D2E97,0x312B3050,0x32C83210,0x3461339C,0x35EC3532,0x376036B9,0x38D2380B,
0x3A263977,0x3B5E3ABE,0x3C953C0C,0x3DC23D22,0x3ED33E39,0x3FB43F5B,0x40B74047,0x41924115,
0x425F41EB,0x42FF42AA,0x43974362,0x442443EE,0x44A3446F,0x44F944CE,0x455A4523,0x4592455D,
0x45A945A2,0x45C345BA,0x45BF45C8,0x45A945A5,0x455B459F,0x45324566,0x44DF450B,0x447544A5,
0x43F04431,0x436E43A5,0x42B64304,0x41F94249,0x41274194,0x403F40A7,0x3F463FBC,0x3E293EBC,
0x3D0B3DA9,0x3BD13C8B,0x3A8E3B45,0x394139F8,0x37D43895,0x365A3722,0x34DA358F,0x333D3401,
0x317F325E,0x2FD830B1,0x2E082EE6,0x2C352D1A,0x2A542B37,0x285C2958,0x2670275F,0x245A2558,
0x2243235F,0x20302138,0x1E081F1C,0x1BD31CF4,0x19B41ACA,0x17781889,0x15241654,0x12EC141B,
0x109911CC,0x0E4D0F81,0x0C050D38,0x09B80ADC,0x076F0883,0x0510063E,0x02CA03EE,0x006C0195,
0xFE17FF40,0xFBC7FCCF,0xF95AFA88,0xF6F7F833,0xF4A2F5DE,0xF25BF392,0xF00CF12B,0xEDBEEEDF,
0xEB83EC94,0xE937EA51,0xE711E826,0xE4E9E604,0xE2C9E3E7,0xE0CDE1D0,0xDEAEDFB9,0xDCC1DDCB,
0xDACFDBB9,0xD8F3D9E3,0xD719D7F0,0xD545D62C,0xD394D47D,0xD1F5D2CC,0xD057D112,0xCED3CF84,
0xCD44CDF4,0xCBCDCC96,0xCA74CB30,0xC92DC9C9,0xC7E5C87F,0xC6B7C74D,0xC5A6C62F,0xC486C50F,
0xC389C41A,0xC2B0C313,0xC1DDC237,0xC104C172,0xC05BC0BF,0xBFC6C016,0xBF41BF84,0xBECDBEFB,
0xBE74BE9E,0xBE20BE38,0xBDE2BE03,0xBDBCBDCC,0xBDABBDAD,0xBDA7BDAB,0xBDC5BDAC,0xBDDFBDC8,
0xBE20BDFB,0xBE61BE42,0xBECABE96,0xBF44BF00,0xBFC8BF8A,0xC05EC017,0xC10AC0B1,0xC1CCC171,
0xC2A1C23B,0xC381C313,0xC479C3F6,0xC583C4FC,0xC691C604,0xC7A6C738,0xC902C851,0xCA4DC98A,
0xCB9ACAD3,0xCD01CC4A,0xCE64CDAE,0xCFF1CF39,0xD186D0C3,0xD32BD258,0xD4CCD406,0xD695D5BE,
0xD859D75D,0xDA21D938,0xDC01DB0A,0xDDD5DCE4,0xDFC9DECC,0xE1BAE0BC,0xE3B6E2B8,0xE5A5E4AE,
0xE7B8E6C7,0xE9CEE8C1,0xEBEAEAD5,0xEDF2ECEA,0xF015EF0A,0xF228F11D,0xF45FF345,0xF678F55C,
0xF88CF77F,0xFAA9F99A,0xFCD6FBC4,0xFEFCFDE4,0x0119001C,0x03470236,0x05720454,0x07800684,
0x09B608AE,0x0BDB0AC5,0x0DFD0CEC,0x101D0EFB,0x122E1120,0x1447134E,0x164B1538,0x184B174B,
0x1A2F193A,0x1C151B20,0x1DF01D0A,0x1FC51ED7,0x219720B0,0x234B2268,0x2500242B,0x26A925CF,
0x2835277D,0x29B22900,0x2B472A84,0x2CAD2BFE,0x2E112D67,0x2F672EC2,0x30BE3018,0x31E53148,
0x3329327B,0x34313398,0x353D34C0,0x363035C2,0x373B36BB,0x380437A1,0x38EA3872,0x39AB3949,
0x3A4D39ED,0x3AD93AA6,0x3B6C3B3B,0x3BEF3BBA,0x3C5B3C22,0x3CB63C85,0x3CFF3CE1,0x3D393D1D,
0x3D503D46,0x3D673D6E,0x3D6F3D75,0x3D5F3D64,0x3D4B3D59,0x3D193D1D,0x3CD63CF2,0x3C833CA9,
0x3C153C4C,0x3BAF3BE2,0x3B1C3B6C,0x3A8A3AD3,0x39E73A38,0x39253993,0x386538CA,0x37A037FC,
0x36AD3713,0x35B8362B,0x34A6353C,0x338D3432,0x32713317,0x314531E2,0x300730B0,0x2EBF2F61,
0x2D612E0E,0x2C052CB1,0x2A8E2B2F,0x290529D4,0x27812841,0x25E026AF,0x244A2519,0x229D2378,
0x20E721CD,0x1F282016,0x1D6C1E52,0x1BAC1C79,0x19CC1AB3,0x17F018D8,0x160F1705,0x14291529,
0x1241133D,0x1057114F,0x0E680F4E,0x0C730D68,0x0A780B79,0x088B097F,0x069D0787,0x04970591,
0x029F0399,0x009601A2,0xFEA0FFA3,0xFC96FD9F,0xFA98FBA6,0xF8A2F9A2,0xF699F7A5,0xF4B2F5A1,
0xF2B2F3AA,0xF0AEF1AC,0xEEBBEFCC,0xECC5EDCB,0xEAFBEBDE,0xE91DE9F7,0xE748E823,0xE579E65E,
0xE3CEE49F,0xE20DE2E6,0xE065E12F,0xDEB9DF9B,0xDD2DDDF1,0xDBA8DC54,0xDA14DAD3,0xD89FD967,
0xD735D7ED,0xD5EFD691,0xD492D532,0xD346D3F7,0xD227D2C5,0xD0F2D190,0xCFE2D070,0xCEDDCF5A,
0xCDD5CE65,0xCCFDCD72,0xCC22CC85,0xCB4FCBA1,0xCA8BCAE8,0xC9D2CA28,0xC926C98C,0xC8B7C8ED,
0xC820C84D,0xC7B2C7EC,0xC743C77E,0xC703C728,0xC6C0C6DA,0xC69AC6AB,0xC681C684,0xC666C66C,
0xC67EC679,0xC680C67C,0xC6B9C6A0,0xC6E5C6D0,0xC731C70F,0xC785C75B,0xC7F4C7C4,0xC871C82E,
0xC8F7C8A8,0xC98DC942,0xCA36C9DF,0xCAEDCA91,0xCBBECB4C,0xCC88CC1A,0xCD6ACCF7,0xCE55CDDF,
0xCF59CEEB,0xD075CFDD,0xD180D0FC,0xD2B3D218,0xD3E8D348,0xD52ED487,0xD67AD5D1,0xD7D0D726,
0xD931D880,0xDAA8D9F0,0xDC2BDB63,0xDDA0DCE0,0xDF34DE68,0xE0CDDFFA,0xE260E199,0xE408E334,
0xE5BBE4DD,0xE768E688,0xE91DE844,0xEAD9EA00,0xEC97EBBD,0xEE69ED7E,0xF029EF3D,0xF1F3F117,
0xF3BEF2DD,0xF59DF4B7,0xF75EF67D,0xF925F854,0xFB04FA1A,0xFCD6FBE9,0xFEB8FDB2,0x0079FF8C,
0x02490164,0x0421033C,0x05F8050C,0x07D306D9,0x099008B3,0x0B5E0A7F,0x0D2E0C50,0x0EEB0E0D,
0x10AD0FD7,0x126A1192,0x1421133C,0x15C514E3,0x175B1686,0x18EC1825,0x1A7119B5,0x1BED1B39,
0x1D6A1CAD,0x1ED61E18,0x202F1F7F,0x218420D8,0x22CA2233,0x240D236F,0x253424AC,0x266225D1,
0x277826EC,0x287F27FA,0x297928FB,0x2A6D29F4,0x2B422AD6,0x2C142BBC,0x2CE52C7E,0x2D8C2D39,
0x2E4B2DEE,0x2EDA2E89,0x2F6B2F27,0x2FEE2FAC,0x305B301F,0x30BC3089,0x310630EC,0x315C3133,
0x318D3170,0x31B631A3,0x31CE31C7,0x31E231D6,0x31D531DE,0x31BF31D0,0x319D31B8,0x316F318D,
0x31393152,0x30E5310F,0x309130BC,0x302D305C,0x2FB62FF0,0x2F332F72,0x2EA22EF6,0x2E172E5E,
0x2D6B2DB5,0x2CB42D13,0x2BF82C59,0x2B2C2B98,0x2A5D2AC5,0x297B29EA,0x288B2909,0x27982815,
0x26992722,0x258E2616,0x24822509,0x236923F1,0x223D22D2,0x211521AD,0x1FE0207D,0x1EA41F43,
0x1D641E06,0x1C1B1CC1,0x1ACF1B78,0x19841A1D,0x182618CC,0x16C51777,0x15671618,0x140514B6,
0x1293134C,0x112D11EB,0x0FBF1076,0x0E4E0F0C,0x0CE30D9D,0x0B700C24,0x09FC0AB7,0x0890094B,
0x072807DA,0x05BD0670,0x045004FF,0x02DB038E,0x016B0228,0xFFFE00BB,0xFE9AFF4E,0xFD2BFDE3,
0xFBBEFC71,0xFA5AFB0C,0xF8F4F9A7,0xF798F844,0xF63EF6E2,0xF4E3F58A,0xF390F43F,0xF245F2EB,
0xF104F1AA,0xEFC0F060,0xEE87EF24,0xED5AEDF2,0xEC32ECCB,0xEB1AEBA3,0xEA07EA8D,0xE8FBE97C,
0xE7FDE879,0xE708E77D,0xE615E68B,0xE532E5A6,0xE457E4C7,0xE38BE3EF,0xE2C1E324,0xE205E266,
0xE158E1B3,0xE0B6E100,0xE014E065,0xDF8DDFCD,0xDF04DF40,0xDE83DEC2,0xDE17DE4A,0xDDAEDDE2,
0xDD55DD87,0xDD0BDD2F,0xDCC6DCE5,0xDC8DDCA5,0xDC5ADC73,0xDC37DC4D,0xDC1EDC2B,0xDC11DC18,
0xDC0CDC0B,0xDC0EDC07,0xDC1DDC14,0xDC36DC26,0xDC5BDC44,0xDC84DC6F,0xDCC0DCA0,0xDCFEDCDA,
0xDD44DD20,0xDD97DD71,0xDDF4DDC8,0xDE57DE26,0xDEC4DE8A,0xDF35DEFD,0xDFB6DF74,0xE037DFF0,
0xE0C4E07D,0xE155E10C,0xE1EFE1A0,0xE28FE23D,0xE338E2E3,0xE3E1E390,0xE498E43E,0xE552E4F0,
0xE60EE5AC,0xE6D0E66E,0xE798E730,0xE861E7FD,0xE92EE8CD,0xEA03E99F,0xEADFEA6F,0xEBBAEB48,
0xEC94EC24,0xED74ED02,0xEE56EDE2,0xEF3AEECA,0xF01FEFAD,0xF108F093,0xF1EEF17D,0xF2DAF265,
0xF3C4F34E,0xF4AFF438,0xF598F524,0xF67DF60A,0xF760F6EF,0xF845F7D2,0xF929F8B7,0xFA0FF99C,
0xFAF2FA80,0xFBD4FB64,0xFCB6FC47,0xFD99FD26,0xFE76FE07,0xFF51FEE2,0x002CFFC2,0x0102009B,
0x01D7016F,0x02AD0242,0x037A0310,0x044803E1,0x051304AC,0x05D50572,0x06970636,0x075506F7,
0x080C07B1,0x08BF0868,0x096E091A,0x0A1909C5,0x0ABF0A6D,0x0B5E0B10,0x0BFA0BAE,0x0C920C44,
0x0D220CDA,0x0DAC0D65,0x0E310DEF,0x0EAE0E71,0x0F250EE9,0x0F960F5E,0x0FFD0FCC,0x10631033,
0x10C01093,0x111610EB,0x11671140,0x11B2118D,0x11F711D6,0x12361214,0x126C1250,0x129E1288,
0x12CC12B5,0x12F212E2,0x13141303,0x132F1324,0x1347133C,0x1358134F,0x1361135F,0x13691367,
0x136A1369,0x13661366,0x1359135F,0x134A1354,0x13371341,0x131F132B,0x13011310,0x12E012F1,
0x12B912CD,0x128F12A4,0x125F1278,0x122E1247,0x11F71213,0x11BB11DA,0x117F119F,0x113E115F,
0x10F7111A,0x10B210D3,0x1065108A,0x10171040,0x0FC60FEF,0x0F730F9D,0x0F1D0F48,0x0EC60EF2,
0x0E6A0E97,0x0E0D0E3D,0x0DAF0DDE,0x0D4E0D7F,0x0CEC0D1D,0x0C890CBC,0x0C250C58,0x0BBF0BF2,
0x0B580B8C,0x0AF00B24,0x0A880ABB,0x0A230A54,0x09BD09EF,0x0955098A,0x08EF0922,0x088808BC,
0x08200854,0x07B807EC,0x07500784,0x06E8071B,0x068106B5,0x0619064C,0x05B105E6,0x054B057E,
0x04E60519,0x048004B4,0x041C044D,0x03B803EA,0x03570387,0x02F60326,0x029402C4,0x02360266,
0x01D80207,0x017C01AB,0x0122014E,0x00C900F6,0x0072009C,0x001D0046,0xFFCAFFF2,0xFF77FFA0,
0xFF28FF4F,0xFED9FF00,0xFE8DFEB3,0xFE44FE69,0xFDFBFE20,0xFDB7FDD9,0xFD73FD93,0xFD31FD52,
0xFCF2FD11,0xFCB6FCD4,0xFC79FC97,0xFC42FC5D,0xFC0CFC26,0xFBD8FBF2,0xFBA5FBBF,0xFB77FB8E,
0xFB4BFB61,0xFB1FFB35,0xFAF6FB0A,0xFAD1FAE4,0xFAACFABE,0xFA8AFA9B,0xFA6BFA7B,0xFA4DFA5D,
0xFA33FA40,0xFA19FA25,0xFA03FA0E,0xF9EDF9F8,0xF9DBF9E4,0xF9CCF9D3,0xF9BBF9C3,0xF9AFF9B5,
0xF9A3F9A9,0xF99CF99E,0xF993F997,0xF98FF98F,0xF98BF98D,0xF989F989,0xF989F988,0xF98AF989,
0xF98DF98B,0xF991F98F,0xF997F995,0xF9A0F99B,0xF9A8F9A3,0xF9B2F9AD,0xF9BEF9B7,0xF9CBF9C5,
0xF9D9F9D2,0xF9E8F9E0,0xF9F7F9F0,0xFA0AFA01,0xFA1CFA13,0xFA30FA26,0xFA44FA39,0xFA59FA4F,
0xFA6FFA64,0xFA86FA7A,0xFA9EFA92,0xFAB5FAA9,0xFACFFAC2,0xFAE7FADB,0xFB01FAF4,0xFB1CFB0E,
0xFB37FB29,0xFB51FB45,0xFB6DFB5F,0xFB8AFB7C,0xFBA5FB97,0xFBC2FBB4,0xFBDFFBD1,0xFBFBFBED,
0xFC19FC0A,0xFC34FC26,0xFC52FC44,0xFC6FFC60,0xFC8DFC7E,0xFCA9FC9B,0xFCC6FCB7,0xFCE2FCD4,
0xFCFFFCF1,0xFD1CFD0E,0xFD38FD2A,0xFD54FD46,0xFD70FD61,0xFD8CFD7E,0xFDA7FD9A,0xFDC1FDB4,
0xFDDDFDCE,0xFDF6FDEA,0xFE11FE04,0xFE2AFE1D,0xFE44FE37,0xFE5CFE51,0xFE74FE67,0xFE8CFE81,
0xFEA4FE98,0xFEBBFEAF,0xFED1FEC7,0xFEE7FEDD,0xFEFDFEF2,0xFF12FF08,0xFF26FF1C,0xFF3BFF31,
0xFF4EFF45,0xFF62FF58,0xFF74FF6B,0xFF87FF7D,0xFF98FF90,0xFFA9FFA0,0xFFB9FFB1,0xFFCAFFC2,
0xFFDAFFD1,0xFFE9FFE1,0xFFF7FFF0,0x0005FFFF,0x0012000B,0x001F0019,0x002D0026,0x00380032,
0x0044003E,0x004F0049,0x005A0055,0x0064005F,0x006D0069,0x00780073,0x0080007C,0x00890084,
0x0091008D,0x00990094,0x00A0009D,0x00A600A4,0x00AE00AA,0x00B400B1,0x00BA00B7,0x00C000BC,
0x00C400C2,0x00CA00C7,0x00CD00CB,0x00D300D0,0x00D600D4,0x00D900D8,0x00DC00DA,0x00DF00DD,
0x00E300E1,0x00E500E4,0x00E700E6,0x00E900E8,0x00EA00E9,0x00EC00EC,0x00EE00ED,0x00EE00EE,
0x00F000EF,0x00EE00F0,0x00F100F0,0x00F000F1,0x00F100F1,0x00F100F0,0x00F100F1,0x00F000F2,
0x00EF00F0,0x00EF00F0,0x00EF00EF,0x00EE00EE,0x00ED00EE,0x00EC00ED,0x00EB00EB,0x00EA00EB,
0x00E900E9,0x00E700E7,0x00E600E6,0x00E600E4,0x00E300E3,0x00E100E0,0x00E000DF,0x00DF00DE,
0x00DD00DC,0x00DB00DA,0x00D900D8,0x00D600D7,0x00D400D5,0x00D000D4,0x00CB00D5,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,
};

+ 3
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleKick.h 查看文件

@@ -0,0 +1,3 @@
// Audio data converted from WAV file by wav2sketch

extern const unsigned int AudioSampleKick[2561];

+ 360
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleSnare.cpp 查看文件

@@ -0,0 +1,360 @@
// Audio data converted from WAV file by wav2sketch

#include "AudioSampleSnare.h"

// Converted from snare.wav, using 22050 Hz, u-law encoding
const unsigned int AudioSampleSnare[2817] = {
0x02002BD3,0x65636656,0x6B6A6B67,0x7071706F,0x43637171,0x29ABBA23,0x3137474C,0x3A4A544D,
0x30C1542C,0xE14F6360,0xEDDCE2E6,0xEEF1F4F4,0xEEEDEAEA,0x3745A2E2,0xE7E6DAC8,0xC7C3C3DA,
0x2931A5C6,0xDCD6C813,0xEEEFE6DD,0x5750C0E5,0x24424E52,0xC4BEB2A5,0x0F4744A4,0x329AA698,
0x4C5E503E,0xC7D5D1D4,0x50737566,0x632BBED9,0x7A7C7A78,0x646B777A,0x5C595E62,0x60605C5B,
0x5F636462,0x14475057,0x271EC6C8,0xC9D8D2C3,0x68666252,0x53676666,0x4848D2D1,0xD2E3D7BB,
0xD7D2D6D6,0xDDD7D1CB,0xC4CCE3E7,0xD1BEBDB7,0xC6E3EBE5,0x493E2402,0xE6E9ECD4,0xCDECF1EA,
0x5320BFA5,0x70706C64,0x6F70716F,0x73717071,0x72717577,0x6F6F7171,0x6F747272,0x42584E53,
0x40402722,0x4E362416,0xD3A29A12,0xC2BCC0CD,0xEFE8E0CD,0xF4F4F3F2,0xF7F6F4F3,0xF8F7F7F6,
0xF9FBF9F7,0xDADFE8F5,0x973541AB,0xF3F2EEDD,0xCFEDF2F1,0x13925540,0x6260635B,0x6D696464,
0x6C6E696E,0x72716E6B,0x73767673,0x61747171,0x33913E34,0x726D6452,0x756E5161,0x73727274,
0x73747675,0x6B6F7676,0xB05E6B6F,0xE7E5D3D4,0xEDEFEEE6,0x8359ACE4,0xE3DDE7E5,0xF3F2F2EF,
0xF4F2F2F4,0xF7F5F3F4,0xFAFAF8F8,0xFFFEF8F7,0xFDFBFFFF,0xFBFCFAFC,0xE9FAFBFB,0x3823C0BC,
0x48282621,0x605D4246,0x69656560,0x71707070,0x76757574,0x74767575,0x696F7170,0xA1627170,
0x605E5F43,0x67545559,0x5E69696E,0xC084D9D1,0xBDC0DADC,0x37B291C4,0x545C5B5C,0x483C3D4F,
0xDFCAC1B7,0xF7F7F4EB,0xF5F3F2F4,0xFAFCF9F7,0xF4F6F9F9,0xEDF3F4F2,0xEBEEF5F4,0xE6E4EBED,
0xE6E9EDED,0xE7EAE7DF,0x696560C9,0x645E6164,0x6D6D656A,0xE6406263,0x50B223E0,0xAE3B4D5A,
0x594E534E,0x4F585958,0x53515152,0x565D3B3E,0x56504F44,0x4C4D5C5A,0x22535B56,0xE0D5303C,
0xD3BED6DE,0xCEA419C1,0xDBE8E5E1,0xABCDE1D9,0xD2CBDEDE,0xDEE2C0BE,0xBAC0E0DA,0xD7CDD0D1,
0xDCE4E3E0,0xE1E0D4D3,0xD5E2E8E0,0xE7E2DED6,0xE5E3EAEF,0xE4E8E7E7,0xE1D3D2E1,0xDEE0492F,
0xC9D5E6E1,0xCC45B2D5,0x614D129A,0x53534E5C,0x61666451,0x5F625956,0x5458533B,0x5C635A54,
0x68626A68,0x69706E67,0x5B66666A,0x5441383E,0x5AB5D82B,0x5E606660,0x4FAAC655,0xD34CD1C0,
0xE8E9E8E6,0xEEF1F0EB,0xE9E8E7F0,0xEAE6E9E2,0xEEE7E0ED,0xEEEEEFEC,0xE9E6ECF0,0xEEECE4E7,
0xEAECECE9,0xDEDCD0E5,0xE7EFF0DB,0xD9E5E3DF,0xB911D3DD,0x22B7C9C4,0x42AC5756,0x4E494151,
0x4653B8CE,0x4C4B4438,0x70685E48,0x6F6A6E74,0x646D6F71,0x65624D4F,0x706E635D,0x726E696B,
0x54636F70,0x33415660,0xCCD4B441,0xC2B7C9D1,0xD6D9DFD3,0xEBDFE0DF,0xE9EFECEC,0xF5F0E6E5,
0xF4F3F1F2,0xF8F9F9F8,0xF0F0ECF3,0xE1DDDFE7,0xF2E0E1E3,0xEEDFEFF8,0xF7F5F3F4,0xEFF0F3F3,
0xDBE0CEE4,0xD9CBD3D7,0x0242E5EA,0x553DD4E0,0xBAD6CA43,0xC0ADC1B0,0x4B4A30CD,0x62685E54,
0x4D505661,0x6457544F,0x655C6262,0x676F6768,0x42636B67,0xCEDBE3D5,0xE3DFD3C6,0xC2CACBE4,
0x11DFE6D3,0xD6CF994E,0xECF1F0E4,0xEDF1EEE8,0xF0F4F1E7,0xF4EBF0F1,0xDBD9E3F1,0xE9E5E7E6,
0xCADDE8EE,0xF5EEEBE2,0xE3E6E3F0,0x99D6E9E8,0xDBC92B40,0xD5D5CDDE,0xEEE3D3B8,0xC7D4E4EF,
0x623BDDD3,0x49563851,0x5E58AAC1,0xE1E2E3D5,0x4C4946AB,0x63614E34,0x5D616565,0x53335F61,
0x56686263,0x5B5744BE,0x959E5D67,0xDBDAD5C4,0xDEDCE4E7,0xE1E8EAE4,0xE4E7E2D8,0xE3E5DEDB,
0xDAD7D6CF,0xBFBFB3CB,0xCFD9A6BE,0x1F5309C9,0xD4CBDFD7,0x309339CE,0x524507B2,0xE1E4D34A,
0xC5E4E5D4,0xD62EC4C7,0x43C0CFDE,0x28325052,0xA5B3C130,0xD9D32826,0x4AB1D6D3,0xAB3BA3B8,
0x5B5E37B4,0x54419A99,0xC1515150,0x29D1D5D1,0xE0E1DF3B,0xD9DDCCDB,0xE2D3B7CC,0xE1D8E2E4,
0xE5E5E3E2,0xE2E5E6E6,0xE1E2E3E1,0xDCE6E7E5,0xD537B3D0,0xDDE3D8DB,0x9531D3D7,0x60624ACB,
0x80575C54,0x482226BC,0xD9D1DFB4,0xE5E9E3E3,0xCACCC9D8,0x525032B4,0x89D5D834,0xD6CCC04A,
0xD5D1B6DB,0xD5DBCCC7,0xCAE0D5B7,0x3F5C1DCC,0xE2E9DDCF,0xDFE4E1D1,0xDCE2E5E2,0xB0B7CBDA,
0xD047524D,0xE2E1D9D9,0xE0D0CEDE,0xD6E2E2E2,0xE2D4D0D2,0xC84123E0,0xE2E2E3DE,0xE8E5E1DE,
0xC8DCE7E6,0xE4E8EFE9,0xC6D9DEE2,0x2752A6B7,0xBAE2DECF,0xE0D0D2C1,0xDCDEE2E6,0xCAC6D8E1,
0x132C37B8,0x373EC1B0,0xD3DACFC0,0x34CEC9BA,0x533B555A,0x59404059,0x56D2DE49,0xC1B74663,
0xDCDAB8CF,0x36D8E0DA,0x260C4452,0xD4B4B2AB,0xE6DADAD9,0xE3E5E5E7,0xE4E0E1E4,0xE6E0DCE1,
0xE4E3D9E0,0xE4E4E2E0,0xEAE8E5E4,0xBED3DEEA,0xD1D3C815,0x35B0B5DC,0xD4924756,0xA5C5CBC4,
0xCB40503A,0xCED9D2D0,0x492FA8C6,0x4054514C,0xB20DB0C1,0xE3E1CEAE,0x3A80CEE3,0x49464C59,
0x50505441,0x59605C5C,0xC1D4C54C,0xE3DC313D,0xCAD3C1D7,0xC3D1D3BE,0xD61B4602,0xCD10B7DB,
0xDFE1D9D1,0xE0D6E2E4,0xE0DAD3E0,0xD0CFDDE2,0xE0E0DCD6,0xEAE7E8E2,0xE4E2E5E6,0xD7E3E2E7,
0x20B03422,0xD1CEC6A5,0xC1B1BFC1,0x4237BFE0,0x58573A49,0x1B99313F,0x232BD024,0xE0E1D5C1,
0x92A9BFD0,0xAEBBC7CB,0xB4D6DBD7,0x54535B5A,0xD2B35257,0xD6B94FA7,0xD1CEACBB,0x903742A3,
0xB2B99093,0xD7D4D4B8,0xE3DED7DC,0xDED7D5E0,0xE4E4E6E2,0xDFE2E0E1,0xE2E0DCD8,0xD7DFD9E0,
0xE2E7E7DD,0xC8CDD8E1,0xC8ADC5CB,0xD8D6D0D1,0xD4D7D0C7,0xCFA3BFD2,0x4427CAD2,0x90A9C4B5,
0x38B2D2D2,0x37C9D593,0x373A2D3D,0xC1CCC7B5,0xACD8DDC7,0x38B9D4A1,0xC6C3CCC3,0xD1DDCBC5,
0xE0DED5CE,0xD8DDD1D5,0xD5B72AC3,0x3B464833,0xE1DEC7AC,0xE3E4E5E3,0xDCE0E2E4,0xDED2D3D4,
0xD5D8DBE0,0xC0C7CAD1,0x4832340B,0xD2D1CE95,0xDAD2D5D6,0xD4D5D3DA,0x90495228,0xE0D9A604,
0xCCD1CCD6,0xAFCEDBC9,0xC7CAD2D0,0xCEBDC1C6,0xD8D5D1D2,0xD7D2DADC,0x474315D1,0xBEC3CCAF,
0xA6A61F08,0x30D5E0D0,0xD6D0184B,0xB8D0D8DB,0xDBD8CCC6,0x114229C2,0x08B5D4D5,0x84194133,
0xD5DCD78F,0xD5D4C8D1,0xCD20B5CC,0xCAD7D4D2,0xE5DBBDBE,0xD5DEE2E3,0xE1E2E1DC,0xE3E6E5E1,
0xB9AEC3D6,0xDBD7CAB9,0xD3D9DCD9,0xCAD1C9CE,0xAEC8C6C5,0x8C4D47AE,0x479FC8C6,0xC3275055,
0x2F26A5C4,0xC89F3F41,0x3D445825,0xC49B3747,0x93871396,0x351F3230,0x58534B46,0xC79C3248,
0x01372DC7,0x14B1BCBC,0xD0D2C040,0xBFD4E1D9,0xD8D9D4CD,0xCFD3DCDA,0xE1D9D6D7,0xD6D5D1D7,
0xD7DCD9D1,0xD5D4D4D7,0xDFD4D2D7,0xCAD1D1DA,0xB4C1B3C1,0x10A2BC97,0x27C1C6B4,0xC8C4B637,
0x2517CBD5,0xCEC2BAB5,0xC0C8C9C5,0xB3BAB5BF,0x82474523,0x35221E09,0xCBC4C1B6,0xE0D9D1CF,
0xD3D7DEDE,0xCAD6D8D6,0x2BB1C9C6,0xC7C03A37,0xBC362CB6,0xB0C2C2C7,0xA394BF28,0xC2B220B6,
0xC9D1D3D1,0xDCD1C2BE,0xE0DCD5D9,0xDDDBDCE0,0xDAD9D4D5,0xD4D4D7D8,0xD6CFC8D2,0xD6D1CFD6,
0xDBDBDAD8,0xC0C8D1CF,0xD7C6C5C4,0xD2DADEE2,0xCEC9D0D1,0xD1D7D4D3,0xD1CFD4D0,0x92C4D2D2,
0x208AC6BA,0xC10032AA,0xC7C7C0C1,0xCAD3D9D2,0xC9C6D2CF,0xD2D2CACD,0xC7D2C6BB,0xDBDBD5CA,
0xD2CDD4DC,0xC7D1D0D0,0x17402AB1,0xC9C6C0AB,0xCBD5CCC6,0xAEA4A6B7,0xDFD6D3CA,0xD8D4DBE1,
0xDBDCDBD9,0xC6CBD3DB,0xE0DBD4CC,0xCFD8D8D9,0xD4D3D3CF,0xCCC8C9D1,0xD1D0C4C5,0xB9C8D1D0,
0xAEA9B0BD,0x33423BA0,0x4094B8A4,0x2699B838,0xB1B10722,0xBDCBC6B3,0x9AA2B1B6,0x42313335,
0x2F383E3A,0xC8219C21,0xD1CECED5,0xE0DFDAD6,0xD2D3D8DE,0xC7D2D5D2,0x2617B0C1,0xC0C39B34,
0xC0B51EA1,0x94C0D1CA,0xB303A3B3,0xCDB90820,0xC4D1D8D7,0xCEC8C9C5,0xD2D4C9C9,0xB8C4C4C5,
0xD0CBC2B4,0xB7BCC6CE,0xB4AD2500,0x402D3C29,0x44A9903C,0x474B3A43,0xCC345047,0xA889B3C4,
0x173718BA,0xAFB9BAA9,0xB7C2B2A4,0x304210B5,0xBE11A1B6,0xC3BAACBC,0xD3D0C8C5,0xBDB8C9D5,
0xBDBBBEC0,0xD1D0C3BE,0xD0D1D2D0,0xD1CDD4D3,0xC0C6CBD2,0xBEC8C8BE,0xB3B4A5AA,0xC2C1C5C1,
0xCAD0C6C0,0xC12680C4,0xDBD7CBCD,0xD3D4D8D6,0xCFD4D7D6,0xC0B5C4C8,0xD8D0C3CA,0xC8C9C6CE,
0xCFD7D4C8,0xBAC0C2C5,0xC4B8BFC6,0xB4CAD1CB,0x16B0B7A2,0xBCB82832,0xBFBEC6BE,0xC8C9CDCA,
0xC3C8D0C8,0xC9B6B8CA,0xB2BCCAD1,0xC8B8BBC1,0xB6ACACB6,0xCAD1CBC4,0xD3D0D7D4,0xD7D9DAD9,
0xC4CACED1,0xC6D0D4CF,0xD6DBDBD1,0xC7C4D0D5,0xC3C5D0D3,0xC0AFA8C0,0xC9D2D3C7,0xC3B7B6BD,
0xBAC1BAC7,0xC6C3C2B7,0xD3CDC3BC,0xB1B3CAD4,0xD0D1C9C0,0x9FC1D0CD,0xB8C3B7B9,0xC1A3B1A2,
0x2616B4C4,0xCCC70B09,0xAC1785B6,0x98B5BCB2,0xBAA5AEA9,0xCEC5C6C7,0xD3D1CED2,0xD3D3CDCB,
0xD3D2D1D3,0xCDD0CACC,0xC296ADC9,0xC0C3BCC2,0xBFA1268B,0xD2C7B5B8,0xCDCCCCD0,0xBFC5D0D5,
0x2B2DA4B6,0xAAA08906,0x1FB2B194,0x411CA122,0x1A41504D,0x2112C1BF,0x90C0B017,0xBBA8262E,
0xBFB30694,0xB5AAACBD,0xC1CECBC3,0xD0C51E16,0xBBC7CAC8,0xC9CCC2B7,0xC1BEBAB8,0xC2C6CCC7,
0x25AEC2CA,0xA90C0E2F,0xC5CBCDC1,0xD1D1C9C5,0xB0CBCFD0,0xC9C4C4B0,0x3221B9C3,0xADB1A8A6,
0x3910BDAE,0x9BA40927,0xB10B3439,0xA888A4BF,0xB6B0A0AE,0xC1B2B2B4,0xB5ACBCC3,0x193E32B3,
0x2F2395A2,0xAE2D3F26,0x3A31ADAF,0x2FA5B084,0xB297223B,0xA4A2A2B8,0xCFD3D3C3,0xCCC2C2CC,
0xCDC7D2D1,0xD3D3C8CE,0xD0C9D3D5,0xD5DAD9D5,0xCBCFCED0,0xBDC6C8CB,0xA6BFC6BA,0xAD1B2905,
0x89122613,0xB4C3B7A8,0xA70CA7AA,0x200EBCBE,0xC8B8A2A5,0xB0B5C0C5,0xB2BDB0B0,0xB8B2BFBA,
0xB9C0CAC3,0xB9AE8BA6,0xC5C7C3C3,0xC3BEC0C2,0xC8C4C4C1,0xC9D0CDCB,0xCDCAC7C3,0x83B2C1CE,
0xC9C6AF21,0xC8C8C6C4,0xCFD1D0CA,0xCBCECBCA,0xB1BCC8CC,0xCBBBB2AF,0xC5C5C8CD,0xCCCACCCB,
0xD2D2CCC8,0xCCCECFD1,0xB7C6C8C7,0xB4BCB1AC,0xB3B7B29D,0xB7C2C1B1,0xCCCAC7C2,0xB6C2C0C2,
0xCBCCC9C1,0xC8C8C8C7,0xBDBAB9C0,0xC7CFC9BF,0xC2C4CECD,0xB7C4C2C3,0xCAC0B5B6,0xBBC4BEC0,
0xC5C5C2B8,0xC0C8C5C2,0xB4A8ABB9,0xB1B1ABB1,0xC8C1B9AF,0xC7D0D2CC,0xB3B6B9C0,0xB5BBBDB6,
0xC5C1B5B8,0xC3C6C9C7,0xD0D1D0C8,0xC8CAC8C7,0xD0D3D2CB,0xCDC7C3C9,0xCCD0D4D3,0xC7C7C8C9,
0xC7C7CBCC,0xBDBFC4C7,0x4133299E,0x3E34323B,0x3E413D3E,0x4140423D,0x1B2A3843,0x2C3D3E31,
0x24B0A403,0x042B393C,0xB6BCB6A5,0xC1BBB2AD,0xC8CCCEC8,0xC9C8C5C7,0xC0B4C0C7,0xADADB9B8,
0xC1B9B5C0,0xC6CDCBC8,0xA3959EA9,0xBFC0C0BB,0xC2B4B3B5,0xB7C0C6C9,0xADACB4BA,0x8D9CA7B1,
0x9628352C,0x8109A6AA,0xBBB6AD9A,0xB5C0C5C1,0x930E9CB5,0x30990314,0x232A353D,0x2D31322F,
0x3F434033,0x2E203235,0x24353235,0x9615261D,0x1189AAA9,0x1104A39D,0xC9C1B2A1,0xB39FBFCC,
0xC7C8CDC8,0xC2B8B5C0,0xBFBFC7CA,0xC4C4C1C2,0xB0BDB9B6,0x96082296,0xBFB5A812,0xC7C5C3C2,
0xC9C2C4CA,0xC4C0B1C4,0xB9C4C8C5,0xBEBFB493,0xC2C2C1C5,0xC2BFB8B6,0xB7ACC1C7,0xB5C7C9C4,
0xB1B0B3AA,0xBBB2B0B7,0xC1C3C2BC,0x2F97B3B7,0xBEC0AD24,0xA6B4B4AD,0xBFC8C4BE,0xBDBAA50F,
0xAC0291B7,0xB4BEC2BA,0xD4CEBDB3,0xC3C8CBD1,0xCED1CDC7,0xC5C7CEC6,0xCDCFD0D1,0xD7D2CEC9,
0xCFD1D4D7,0xCED0CFD0,0xCBC5C2C9,0xADB6BFC5,0xB9BCC3BB,0xC3C0C0BB,0xB2BFC2C7,0xC3C8BDA7,
0xC6C6BBAC,0xC6CDD1CD,0xB8B7BEC1,0xB3BCB1BD,0xB4B3B2A8,0x9111ABB0,0xC6C3BAB0,0xB8C0C0C7,
0xBFB4B6B6,0xC5C1B7B3,0xC3BEC1C6,0xA1C1C8C7,0xB407809A,0xB9BEC5C4,0xC2C4C4BC,0xB9BAC3C4,
0xA5BDB9BB,0x151E150B,0xB6C4C4AF,0xBBBAB9B0,0xC4BCBCBD,0xC1C0C4C8,0xBDBDC4C6,0x121982B7,
0x8A302D80,0xB30D2288,0xB1AE94A9,0x9806B2B5,0xB8B30492,0xBDB5AFB7,0x95A3B1BB,0xB011050E,
0xC0C3BABB,0xA6A2A9A5,0x230009AE,0x242A9D88,0x14313728,0x32392D14,0x433B3B35,0x41424243,
0x383D3D3F,0xBAAE162E,0x322B13AD,0x911D2D32,0x8791821D,0xBEBAB5B4,0xC4B9AEB3,0xB3B0BEC6,
0xC3BEB2B2,0xB5B5C0C2,0xC7CBC6C1,0xBABDBFC0,0xC0C3B9B4,0xBEC0BEBB,0x1893B0B5,0x222B2F28,
0x2623281D,0x34322C30,0x21373530,0x31209BA3,0xAC90142C,0x383D33A4,0xB092202D,0x152283AE,
0xC0B8A70A,0x87A0B6C0,0x1EA9B0A8,0x041F9D11,0xA3B09021,0xC2BDB2AD,0xA294B9C4,0xC0BDA593,
0xBBBBC1C2,0xC6C9C7C0,0xC2C3C1C2,0xBFC2C1C0,0xB2AFBDC1,0xBCC3C4BE,0xB8B1B3B4,0xCDCCC5C1,
0xB5C0C4C7,0xC0C2C1B8,0xAD9EADBD,0xAFA8AEB1,0x0BADABAB,0x8E90821D,0x1591909C,0xAC011D2D,
0xB0BBBEBA,0x27292B19,0xB7B11F26,0xB3BCC2BF,0xBFBAB2A9,0xB6B1BABC,0xC8CAC0B8,0xC0C0C1C3,
0xC2C1C0C3,0xADB1B3BA,0xB7B3B7B5,0xC0C2BBB3,0xB0BCC3C2,0xB5B7BDBD,0xA3B6BEB5,0xC0BBB3A5,
0xC8C6C4C1,0xB6C0C4C7,0xC4C5BFB8,0xC6C5BCBD,0xBEB3B9C3,0xB7B4B3BB,0xB4B99CA2,0xB4B8B1A7,
0xB3A9ABB1,0x14A1A8AF,0x2A222324,0x31323432,0x3236281C,0xAD173437,0x969AA9B5,0xA7B3AC99,
0x2C220BA0,0x131C2E30,0x9A9AA00C,0xBCBFB6A1,0xC7C3C3BF,0xCFD0D0CF,0xC3C6C8C9,0xB4C3C7C5,
0xBBB7B1B0,0xB1A3B2B9,0xB4BEBFB7,0xBAB7B4B3,0xC3BDB9BA,0xB8BDBEC2,0xAFAFABB0,0xA30396AB,
0xAEA9A7A6,0xB0B2BDBC,0xA8ABA3AE,0xA8929299,0x8C181CA0,0xA7ACB8AF,0x899FA3A3,0x88102310,
0x38322C1B,0x2723162C,0xA4808B82,0xB4A88B87,0x98AFAFB0,0xA59D8B84,0xA7AEB0B0,0xB4ADB0AD,
0xC3C0BBB8,0xC2C2C3C3,0xC2C2C4C4,0xC5C4C2C1,0xC3C2C2C5,0xC5C4C0C1,0xB3B1B6BF,0xBABAB9B7,
0xA3A9B0B7,0x990AA3A1,0xA38C9FB1,0xB6B2A1A1,0xA0A3A6B1,0x149AA79B,0x1FA00E20,0x2020242E,
0xA2A4A706,0x980D2384,0x1097959C,0xBCB7A51C,0xB3B1A7B2,0x95909EB0,0x1F2F3210,0x9E072223,
0xC0B3A9A6,0xB7B4BAC0,0xBBB8BABB,0xC4C5C1C0,0xBBC1C1BD,0xB0B6B2B5,0xBFB4A09C,0xBABBBDC0,
0xC7C3C1BB,0xC2C5C9C9,0xB1B5BDC1,0xA2B0A6A9,0x949C9C8D,0x209BAAA9,0xA88B0923,0xB0AEB1B3,
0x8DA8AEAF,0x1C1A2C26,0x2F2E2A2A,0x2E2B3333,0xA60C282E,0xB4A8A1A6,0xBAB5B5B7,0xBCBBBCBF,
0xB0ADB2B7,0xBFB8BABA,0xB7B9B9BD,0xB4B6B6B5,0xB5AEACB1,0xB1B1B0B2,0xA7A9A6AA,0xB2AB8AA0,
0xB3B3AEAA,0xC0C0BCB2,0xBBC0C1C0,0xB4B4B5BB,0xABB0B8B6,0xB3ACAEAD,0xB6BBBBBA,0xB8BCBEB6,
0xACB4B9B7,0xBAC1BDB3,0xB0B4B4B5,0x85A6A9A8,0x0E821822,0x9F910019,0xB9B9A89F,0xADA59FAD,
0xB2B0AEB0,0xA7B2B6B2,0x8295A6A9,0x261B0B11,0xABAE9226,0xABA8A8A4,0xC4C3BFB6,0xBABDBFC3,
0x9EA8B1B6,0x98A1A79B,0xA899959D,0x29229CA7,0xB7B0980B,0xBCBCB7B3,0x94B1B8BC,0x22869812,
0x17900E1B,0xA2929619,0xBFC0B8AF,0xC4C4C0BB,0xC4C2C0C1,0xB9C0C0C2,0xB2AFAEB3,0xAEB4ACAE,
0x958B999F,0x99939B9E,0x8C9D0311,0x160D0801,0x25179792,0x17080325,0x11959209,0x9D9AA297,
0x179BB3B0,0x20161623,0x23212725,0xA3931523,0xB5B1B1AC,0xBFBEBAB9,0xB7B5B9C0,0xC1C1C0BA,
0xB7B8BCC0,0xB6B9C0BE,0x91ABB2B3,0x1396A092,0x9CA9A88E,0xA8A6AA9F,0xAFB1B1B0,0x21969A9E,
0x9D9B1C28,0x97928E09,0xA6AFAEA5,0xA7A5A5A4,0xB2B0B5B5,0xB1AAB2B6,0x31290FA4,0x2217212C,
0x87283028,0x1587938F,0xB3B0A798,0xAEB2B1AD,0xB0B7B5B1,0xA5A4ADA8,0xA6B0B4B2,0xB0B3A59E,
0xB0A8AAA1,0xBDBEB5B3,0xB4B3B6BD,0xB2B3B3B1,0x9CA3A1AE,0xBAB4B3AB,0x888BA7B3,0x85949B9C,
0xB1A7978F,0xB0A7B7BB,0xAEB5B7B7,0x29262289,0x24202728,0x84860828,0xA5A4A498,0xB7B8B1A6,
0xB4B7B8B9,0xC2BFB9B7,0xB2B6B9BE,0xA3A5A8B1,0xB0AB9B95,0xA3ACB2AF,0xA49F0000,0x27171195,
0x8D9D911D,0x8D929982,0xB3B1AB9E,0xBCBEB7B4,0xABB1B9BB,0x0B9A9CA1,0xA49C8B16,0xADB1B2AC,
0xB0A890A7,0xB2B3AEA7,0xB9BBB6AF,0xACAFB6B9,0xA9B2B0AA,0x9EA0A09B,0xA0998C94,0xACAFB3AD,
0xA9B1B1B0,0xA4A7AEAB,0x172518A0,0x14909995,0x918F0A25,0x86959494,0xAEA49790,0xB4B5B5AE,
0xB9BAB9B8,0xB7BDBCBD,0x95A1AEAD,0x27140D07,0xAC9A0F25,0xAEADAEB2,0xA9ACAEB0,0xA4A3ACAB,
0x929387A3,0x94909A8B,0x87008090,0xB5ABA29B,0xB7B6AFB3,0xB9B8BBB8,0xB0AEB0B5,0xADABACB1,
0xA2A1A5AB,0xA096A0A7,0xA39C9CA0,0xA6A6A0A2,0xA39A97A0,0xA5ADB1AC,0xB2A79D9B,0x9A9EA3B1,
0x989B9E93,0x161C1796,0x9999A088,0x8E151481,0xA1A1A0A6,0xB3B3AC9F,0xA1AAB1B3,0xB0A7A196,
0xA69EA4B4,0xBBB9BCB1,0xA6ADACB6,0x118AA4A3,0x979B0B0E,0xA0959394,0xAEACA59E,0xB0A9A9B0,
0xB1B4B6B1,0xA0A6ACB1,0xB5B0A59D,0xB2AFB3B4,0xA7A9AEB5,0xA4A09DA0,0x82A1A8A6,0x8785191A,
0x2A190F02,0x27292F33,0xA3A49F0F,0xBAB6AAA3,0xA6B2B4B8,0x9398830E,0x0A95A4A6,0x9F959112,
0x1380959E,0xA9AA9D00,0xB6B1ABA8,0xB3B3B7B8,0xB4B4B2B3,0xB0B4B4B4,0xADAAA0A5,0xA9A5ABA8,
0xAFAFB3B3,0xA69B96A9,0xA0A4A4A8,0x0891A297,0x1E170090,0x1D212421,0x81202120,0x069B9B97,
0xB8B5AD8C,0xACB4B6B9,0xAAB0B0A5,0x0B91A2A6,0xB0A3A395,0x9DA3B0B4,0xADB1B0A7,0xAEACA6A1,
0xABADA3AB,0x1D141387,0x01202820,0x9D8B9292,0xA8A09DA1,0x9BA8AFAD,0x94919193,0x28220296,
0x0E131920,0xA59C998B,0xABA8A7A9,0xA4ABABAA,0xB0A9A59E,0x9FA2ABB3,0xB3B5AB9A,0xA9A6A9AE,
0xB3B5B5B0,0xB0ABA4AD,0x97A8ACA9,0xA1A3A192,0x8388929F,0xB3A19794,0xA6ACA8B1,0xADAAA3A2,
0x999298A5,0xAB9D939E,0x949398A4,0x12140C97,0x2A292721,0x272E302B,0xA39D821D,0xACAEAFA6,
0x90A4A9AC,0x95959C88,0x9DA29F9E,0xA1A2A099,0xA5A39CA0,0xB3B4B2A9,0xB5B6B7B4,0xB0B4B4B3,
0x03058EA8,0x16131713,0x9F0A2324,0xB3B4B3AE,0xACAFB1B1,0x96A0A1A7,0x8D81938F,0x00030A90,
0x1C201808,0x040F171A,0xA49DA39C,0xABACAAAA,0x8A93A0A9,0x8A05958D,0x93959599,0x97A2A59D,
0xA2A2A29D,0xA8A2A4A3,0xA8AAADAE,0xB0B2B0AA,0xA29CA1A9,0xA0A8ADAA,0xA5A09298,0x1600A2A2,
0xA09F8403,0x13110099,0x99999714,0xAAA19099,0xA3ADB0AF,0xA5978790,0x09A2B0AB,0xB0B0A393,
0x8690AAAF,0x231C1D07,0x1E282829,0x15101515,0x9A900109,0x989DA29D,0xB0AEA6A4,0x8F99A2A6,
0xA291808A,0xACB1B1AC,0xB0B4B4AD,0xA9A9A8AE,0xA9AEAEAA,0x94160B9D,0x869CA0A1,0x252C2A19,
0xA89B1122,0xB4ABA7A7,0xB4B7BBBB,0x8D0894AF,0x0A92820C,0x1723291F,0x13068B05,0xA490131A,
0xA8A5A1A3,0xB1B4B2B0,0xA8A4A9AD,0xA5A4A6A8,0x820F98A6,0x8F97949C,0xA0A7A288,0x1E129898,
0x0190920A,0x110F160A,0x22161B21,0x23231D21,0x04071417,0xA3A1A193,0xB5AD9D9C,0xB6B8BAB8,
0xAFAEA7B0,0x91A0A5A9,0x91821210,0x92A7ACA0,0xA8A69B82,0xA4A0A2A9,0xA6A3ABA7,0x08069DAD,
0x1920120D,0x98958E87,0xA4A7AAA3,0xA3AAAAA7,0x1C150492,0x29211518,0x22262D30,0x100F1B20,
0x8E99940A,0xA19D9990,0xA29B939D,0xA1ACADA3,0xB09D9099,0xA2A4ACB2,0xB0B0A6A3,0x9697A7AC,
0x9E9B9BA3,0x9B8E088D,0x0D8A9295,0x91918611,0xA8A8B2AC,0xA4A0A3A7,0x9AA3ACAD,0xA3A4A6A2,
0xA0A5AFAE,0x0399A49F,0x2522190C,0x302E2D2C,0x9014232B,0xABA8A1A0,0xA4A9ADA9,0x858F849B,
0x94959008,0x010B0F01,0x10120B02,0xA0911611,0xA4A4A39C,0xAFABA7A6,0x0D9099A7,0x040C0702,
0x091E1B11,0xB6B4AC98,0xB3B5B5B6,0xA0A5AEB1,0x8690949A,0x190A8E8D,0x241E8113,0x16181A1C,
0x09131D20,0xA6A9A79A,0xA8AAB0AA,0xA0A9A8AA,0xA0A1A4A1,0xA19F928A,0x029196A0,0x0383010D,
0x9D930912,0x8C97999A,0x21809997,0x22212226,0x851F2826,0x07080290,0x96909401,0xA6A5A8A3,
0xA5A0A1A9,0x141293A5,0x00120907,0x96958B83,0xA4A2A4A2,0xA7A6A2A1,0x98A1ABAA,0x01969B9A,
0x999F9483,0x9D9A9B90,0xB0B0B0AC,0xB1B1B2B1,0x889DAAB1,0x2C2C2212,0x2A2B2C2B,0x19222729,
0x928D0C17,0x85949597,0x97A1A691,0x92989695,0x9299A39F,0x82878B90,0x22241E0D,0x8C08181F,
0x9EA0A5A2,0x9A95A3A1,0x0894A5A8,0x9F911516,0x90929FA3,0x0E808B8F,0x8A0A2021,0xAEAFABA0,
0xAAAFB1AD,0x91A4AAAB,0x11079695,0x22251E14,0x101A100F,0xA7980384,0xB2AFB0AD,0xACB2B0B2,
0x919EAAAA,0x800B908F,0x1F1C0693,0x18181415,0x161B1C16,0x1C000112,0x22221D21,0x1C1C1114,
0x171A1517,0xA1A18714,0x918F9199,0x91988302,0x9C929392,0x81869A9D,0x96918F92,0x2119108B,
0xA49F001D,0xA2A29D9E,0xAAB0AFA6,0xAAAAA8A6,0xABAAACAD,0x838C93A4,0x05879491,0xA495010D,
0x9087A1A9,0x9B989391,0x0E09889A,0x20201004,0x18232319,0x13160D03,0xA6A39A05,0x99A2AAAB,
0x1A0D8F98,0x2B1F2224,0x1A1C222A,0x17222320,0x8E01800E,0xA09F9A9A,0xA4ABA8A3,0x96968E92,
0x211E1780,0x8985071D,0xA2958F8D,0xB3B2B0AA,0xB0AFB1B5,0x94A2AAB0,0x22201805,0x1E171520,
0x8B021822,0x9B9C9894,0x90939096,0x999A958A,0xA6988F96,0x148EA2A8,0x0E15161C,0x181D1505,
0x8184000A,0x14088081,0x92928A09,0x8511818D,0x92979691,0x8702028E,0x8A9A9A92,0x880A0F10,
0x1089979A,0x9A908D0D,0x090C8299,0x14849386,0x1321251F,0x9996958B,0xACA7A49F,0xA4A7A8AC,
0xA8A3A2A4,0x95A1A4A8,0x87008D91,0x07121200,0xA09D9581,0x90888695,0x00889296,0x8C830806,
0x17121186,0x93880E19,0x8B84858A,0xA5A5A199,0x078593A1,0x26231E15,0x25292621,0x1615121C,
0x80111619,0x98968E8B,0xAAA5A19C,0x8E9CA6AB,0x0F8D9994,0x0A1C1914,0x90908E8E,0xAAA39B91,
0xB2B2B0B0,0xABAEB0B0,0x1F0F90A2,0x22272625,0x1F201D1D,0x9B988D09,0x8B95999B,0x8B018C8B,
0x8E969495,0xA5A7A18C,0x1719039C,0x0D011416,0x8607191C,0x9492928C,0x81100E8C,0x87878B82,
0x9995020B,0x93989EA1,0x98999289,0x0B079297,0x9A9A810A,0x80140392,0x92988A86,0x0F161B0F,
0x2B262215,0x1A21272C,0x97880C17,0xA6AAAAA4,0x99A1A8A8,0xA0A39E96,0xA09C9193,0x949D9696,
0x9C989082,0x959F9C9D,0x9B9D938B,0x10100A8D,0x8F989486,0x8C0D1011,0x9FA4A39A,0x9E989196,
0x999B9B9F,0x1F12028E,0x25211C1B,0x18282525,0x11080405,0x938E1317,0x96050E00,0x9FA1A7A6,
0x91939699,0x1D168095,0x14101821,0x0D151617,0x010C100A,0xA2988885,0xA0A3A1A2,0xA0A8A8A2,
0x090C8A94,0x13161405,0x8A860108,0xADA7A395,0xB0B0B2B2,0xA5ADAFB1,0x0D08929A,0x211B0C81,
0x23252021,0x1A211B1B,0x9A90810A,0xA19A989E,0x8494989E,0x1F151309,0x13131D21,0x1721221E,
0x9D989302,0x8592858F,0x1B1A160A,0x14182020,0x0518201A,0x939B9B94,0xA2999A93,0xA19FA7A8,
0xA3A096A1,0x95918E94,0x919AA09E,0x99969590,0x04068A95,0x94930602,0x020A9093,0x06038385,
0x91870008,0x9297989B,0x86849891,0x9F999C9C,0xA19E989E,0x86878092,0x16110D03,0x25262521,
0x22212123,0x0E15181E,0x95868282,0xA2A2A19F,0xA0988E96,0x1602919D,0x24211B1D,0x21242121,
0x948A8510,0xA7A2A3A1,0xA6AAABAC,0xA7A6A7A5,0x820294A4,0x8A8B8E86,0xA09F9991,0x929AA0A1,
0x02908B83,0x91860309,0x929A9B94,0x17060B00,0x19171E22,0x231F1D21,0x1214151C,0x8D828205,
0x93948A89,0x81919293,0x100B1013,0x010C1113,0x0F0E0785,0x8C82070F,0x99929493,0x9C9A9B9D,
0x04909699,0x040D100D,0x10088487,0xA1969207,0xA6A7A5A3,0x9CA2A9AA,0x8B8C9299,0x028B9190,
0x8600110E,0x830B838A,0x959E9F91,0x98A09F9A,0x130A818B,0x14131919,0x1C171B1A,0x08121217,
0x96908702,0x97929496,0x8F949297,0x1C150487,0x21232420,0x1212111E,0x9B8F0810,0xA0A19D9F,
0x91979C9B,0x94969C98,0x95919191,0x110C0397,0x1F1D1719,0x100E191E,0x820A1018,0x969B9B97,
0x959AA19A,0x0B878586,0x0514120F,0x9FA19786,0xA099969A,0xA5A6A4A1,0xA3A4A5A4,0x029397A0,
0x1B1A1615,0x1621211D,0x8A878983,0x93909391,0x0005869A,0x13141006,0x1A1C1B15,0x2527231D,
0x1C212222,0x03101315,0x96969085,0x0E0D8494,0x11140F09,0xA095870B,0xA3A6A8A5,0xA5A9A7A2,
0xA4A6A7A7,0x979FA1A1,0x888E9798,0x8B880501,0x0E060282,0x1B141115,0x19181C1F,0x0B0E1113,
0x948D800B,0x90939C9B,0x8A8A8F92,0x13121004,0x0E101717,0x130A8005,0x9180040F,0x00899494,
0x8D86898A,0x1D181080,0x1C161C1F,0x8507171F,0xA39F948D,0x9CA0A2A1,0x94999C9D,0x1C140984,
0x140E171E,0x00161C18,0x92918D89,0x9A9A9A95,0x84848A94,0x88860282,0x8B8F8081,0x9796948C,
0x8B8C8D91,0x9D9A9694,0x86858A91,0x08858A90,0x0A161917,0x130E0885,0x82070D15,0x9392928D,
0x989A9594,0x8A929091,0x0D020100,0x12121112,0x1F181614,0x191A1F22,0x0F121215,0x95958D04,
0x96999492,0x1B14038B,0x20201A19,0x0912161B,0x8F008382,0xA5A19D98,0xA1A4A7A8,0x989BA0A1,
0x01100E8F,0x85858B84,0x9A989691,0x9194989C,0x90969590,0x9D9A9390,0x90969A9A,0x16050581,
0x1914141A,0x24211D20,0x1419191E,0x0B111512,0x07051013,0x12070404,0x17121317,0x07080C16,
0x12100903,0x81040D11,0x948D8C8B,0x9A9A9898,0x0D899194,0x08111413,0x0E070181,0xA0999201,
0xA4A3A3A0,0x98A0A5A8,0x92909094,0x81909696,0x92918303,0x90818590,0x949BA198,0x939B9E9A,
0x19110982,0x1914181C,0x201B1E21,0x1215171A,0x928B000D,0x93918F8E,0x8789888C,0x211E1283,
0x22232623,0x1216151D,0x94880F13,0x979B9595,0x90929794,0x91929A9A,0x95918E8B,0x09070393,
0x1415130F,0x80850C15,0x978C8903,0x939AA0A1,0x8D919D9E,0x13050407,0x0712100F,0x9DA09781,
0x9F9C9698,0xA0A2A2A0,0xA0A0A09E,0x11828F99,0x201D1C1B,0x17222221,0x8400050B,0x968C8B8A,
0x07100D95,0x181B140A,0x1C1E1E19,0x2224221E,0x141B2121,0x8A02060C,0x9C979697,0x0F0E0196,
0x1216140C,0x9A90800D,0x9CA0A2A0,0xA3A6A7A1,0xA1A4A4A5,0x9BA0A19E,0x878A979D,0x8B8D8385,
0x0B838788,0x1813070E,0x1814181C,0x14121316,0x89830911,0x0203898D,0x0C070483,0x1C171714,
0x0610171E,0x05818987,0x9D979186,0x87919B9E,0x8587898E,0x1E1B1105,0x1A161F21,0x810A151A,
0xA09E948D,0x9C9EA19F,0x9195989C,0x16140682,0x12060F15,0x8F061616,0x98989592,0x9E9EA09E,
0x84848D98,0x06800706,0x110A0B10,0x00010208,0x8082050A,0x95979490,0x88838789,0x14800089,
0x131E201F,0x1D151310,0x0609131C,0x92939181,0x98969693,0x96969899,0x8B8F9194,0x8B8B8485,
0x1A110B02,0x13131B1F,0x0A0B0509,0x98968E03,0x8D999B9A,0x1B1D1304,0x151A1B16,0x10121817,
0x000F0E10,0xA29E958E,0xA1A0A3A5,0x01909AA0,0x15161A16,0x07131714,0x8F878481,0x96949493,
0x9C9C9E9A,0x92989999,0x10010383,0x201A1214,0x1111141E,0x18202219,0x9294880D,0x81838085,
0x0F010108,0x090F1414,0x8687010B,0x928A9393,0x86808790,0x96979691,0x8C899397,0x8687818A,
0x83030A05,0x09828987,0x16181110,0x161C1B14,0x08070A11,0x100C0082,0x0C101211,0x06101813,
0x0412120C,0x90939087,0x9B9C9F98,0x9C989498,0x86939CA0,0x05008486,0x0C0D0609,0x92870605,
0x9B969697,0x9DA09E9B,0x94949297,0x1F170E86,0x25252421,0x191B2124,0x0A111516,0x0C07050B,
0x14111110,0x81800D16,0x0B080680,0x05100F0A,0x918D8D87,0x9B9C9A94,0x8E949A9E,0x03898E8A,
0x88000708,0x07050382,0x0B0E100B,0x04060B0D,0xA0988201,0x979A9C9A,0x95979D9E,0x07008991,
0x0A0F1110,0x1617130A,0x13131916,0x8D8D8311,0x9997908D,0x8A929193,0x12120B06,0x1F202118,
0x14171A1B,0x110A1015,0x85020711,0x10090487,0x1E161212,0x18191B1E,0x83111315,0x9293938F,
0x9F9D9A98,0x9BA1A3A1,0x97949195,0x898C9495,0x8791918A,0x91000085,0x93909395,0x8280838E,
0x110D0485,0x131A1E17,0x18181613,0x8E021118,0x8B8A9192,0x03869391,0x10100600,0x02141512,
0x9087898D,0x1612038D,0x1D1D1B16,0x06141C20,0x908C8582,0x8590908E,0x00000002,0x16110F07,
0x100F1219,0x83820910,0x8C830080,0x8F8D9090,0x94949192,0x050B0D82,0x06070201,0x84810709,
0x9E9C948C,0xA19D9D9D,0x969FA1A3,0x0E889090,0x1D1A1B19,0x2121201F,0x181A1A1D,0x14181A1A,
0x10101214,0x10171611,0x86838200,0x07050282,0x80030609,0x8E828283,0x96939192,0x85838D94,
0x07058588,0x00878983,0x09808203,0x07020106,0x0B070507,0x98979882,0x9A95939A,0x8A909294,
0x0F0A0680,0x1005080E,0x1A191917,0x0D171518,0x89868783,0x90949792,0x00808C90,0x1C121007,
0x1D1E2020,0x13141419,0x0C111010,0x018A8701,0x0E11100A,0x191E1D14,0x13151517,0x938D0511,
0x95908D93,0x9F9A9898,0x8F949CA1,0x9391908F,0x908E8D90,0x00048793,0x92908500,0x8087888C,
0x11060203,0x1B131014,0x1213171E,0x12161614,0x91928A07,0x9289878C,0x03010390,0x1817130E,
0x88831116,0x808B8502,0x1614140F,0x1A1B191A,0x8E840914,0x90919393,0x0200898F,0x0C068084,
0x18180E0B,0x12121212,0x0908050D,0x8D8C0007,0x878B8987,0x1284928A,0x0D101013,0x0404070B,
0x95918C81,0xA1A1A19E,0xA4A3A1A1,0x8A939CA1,0x1B180C84,0x1B171516,0x1B1F201F,0x1611161A,
0x1916161A,0x14131214,0x080D1417,0x0604050B,0x0F0B0904,0x0288820D,0x120C0908,0x8683000E,
0x86020482,0x8E8D8689,0x8002878D,0x06018585,0x8D000182,0x918C888D,0x95949794,0x908E9296,
0x868E9293,0x100F0E04,0x16130F0F,0x03111818,0x81010482,0x9796938D,0x09058390,0x11130F08,
0x0F111612,0x0304060D,0x8D8C8903,0x8C919694,0x140E0B02,0x2423221B,0x20222325,0x1115151A,
0x9D9D9887,0x9093989C,0x8B8F9392,0x05048389,0x09028381,0x0680050B,0x91908309,0x93959692,
0x92929193,0x120B0484,0x16161410,0x17191718,0x01101414,0x838D8C86,0x02818203,0x8C8E8C88,
0x8C888A89,0x0B06838D,0x1B15100B,0x171E2120,0x0E0A0B12,0x98918806,0x9798999B,0x90969A98,
0x0601828B,0x0C070104,0x0806020A,0x090A0D07,0x14150D0B,0x17141714,0x211F1E1C,0x161C2022,
0x8A82050E,0x9F9D9891,0xA09C9C9E,0x979C9EA0,0x848F9091,0x1C1A150E,0x86010E14,0x00038483,
0x078E938D,0x05090F10,0x848B8B82,0x16181408,0x16191716,0x12151411,0x8D8E830C,0x060B0886,
0x12140F03,0x18161210,0x0B091215,0x8681030C,0x03878E8E,0x938C8602,0x999B9C98,0x9C9D9B99,
0x17108191,0x1D1A1818,0x1B20211E,0x0B0E1216,0x88030A0B,0x92909091,0x80018791,0x0A030200,
0x1113100D,0x070F1311,0x918A8301,0xA1A09B94,0x93989B9D,0x1D158290,0x21201C1C,0x1316181E,
0x0D0C0F12,0x8C010A0D,0x89878B92,0x858A8A85,0x0F0C0C03,0x0B101110,0x04838401,0x0F048007,
0x908E8C02,0x110E008A,0x07080B0D,0x1717160F,0x89020C13,0x8583008A,0x928C8003,0x8783808E,
0x08018385,0x100C0B0A,0x1E1B1913,0x181D2121,0x10151817,0x948E8602,0xA09F9C99,0x9B989CA0,
0x8E93979B,0x02048088,0x090B0E07,0x83050304,0x84080585,0x16098288,0x201C1C1D,0x201F1E20,
0x181D1F20,0x85040D12,0x918F8F8F,0x8A8C8D90,0x0E0B0487,0x100F0D10,0x03111411,0x01868780,
0x86008003,0x93908B8C,0x91929191,0x0602828B,0x0402090A,0x8202100E,0x868A8880,0x01838686,
0x07050909,0x16171610,0x1B181818,0x17181517,0x16161919,0x86820712,0x9A97938E,0xA0A0A1A0,
0x8B959CA0,0x15120B82,0x21211C16,0x1213181D,0x0F0E0D0F,0x8181070D,0x00838781,0x80810082,
0x13130F07,0x13141513,0x85020C11,0x9391918E,0x9B9C9794,0x150A8892,0x140D0C12,0x15151718,
0x11101315,0x82050C0F,0x84878C8A,0x878A8985,0x05060582,0x070C100C,0x0B080506,0x0901040B,
0x88858305,0x09030183,0x01050709,0x14141108,0x83000911,0x80020183,0x86868000,0x83030285,
0x01020082,0x0F0D0602,0x18171711,0x1A1C1C1C,0x10131719,0x90878307,0x9B989895,0x9895979A,
0x8991969B,0x02008383,0x10111008,0x0A0F0E10,0x03070406,0x10008584,0x1A171B1B,0x1B1C1C1C,
0x151A1C1C,0x81090F10,0x86858888,0x82818385,0x100D0680,0x0F0D0B0D,0x06121110,0x83868482,
0x82818002,0x918E8986,0x8E919292,0x0600828A,0x01090C0B,0x020B1007,0x85878303,0x02040284,
0x08040804,0x1414120F,0x15141514,0x17151317,0x15181815,0x00050E13,0x96928883,0x9C9D9C98,
0x92969A9B,0x14100489,0x201D1614,0x1113171D,0x0C0E0E0E,0x84060A0A,0x08050481,0x00038200,
0x15100A02,0x18191617,0x050E1316,0x84828986,0x96938E87,0x130C8090,0x07060A11,0x13141410,
0x0D0B0A10,0x8A830309,0x0502878B,0x8B8A8401,0x0A0E0289,0x05060602,0x15131007,0x09060812,
0x06090302,0x03000407,0x0B0E0B05,0x07101310,0x06080503,0x04080D09,0x06818883,0x86010205,
0x04020380,0x15120D06,0x19161616,0x1F1D1B1A,0x090C131B,0x82030403,0x91908F8A,0x8E8E8F90,
0x06859190,0x800E1310,0x02818586,0x8C8B8681,0x90909191,0x8F8B8E91,0x0501868E,0x19191811,
0x1B1B1A1B,0x1014191B,0x87818206,0x01898D8D,0x1413120E,0x1A181516,0x1617181A,0x15161414,
0x090F1415,0x918D8400,0x95939191,0x90949595,0x888C9090,0x88878A89,0x0289908E,0x04090707,
0x100B0303,0x0F141210,0x0C0A0F10,0x1311100D,0x15111215,0x14151719,0x030B0E11,0x80828482,
0x84838A87,0x8A8E8B8A,0x80060486,0x03020301,0x8D8F8780,0x83868785,0x06058287,0x0F070303,
0x0F111110,0x1012110E,0x090F1010,0x80010306,0x03818283,0x100C0403,0x14121110,0x11121516,
0x81040E12,0x83808485,0x9493918E,0x898A8D92,0x83828186,0x07018100,0x0A0D0D0A,0x06040105,
0x040A0A08,0x07050282,0x0E080407,0x11101110,0x13151715,0x0B050811,0x84000E10,0x09048183,
0x88828005,0x0A030185,0x0F08030B,0x16191712,0x10111111,0x8482030A,0x8B858687,0x90919291,
0x868B8D8C,0x0F0B0581,0x0E0F1110,0x080D0E0E,0x86810609,0x8F918E89,0x0182888B,0x110D0B06,
0x15161512,0x0D111313,0x81828203,0x88878585,0x0D0B0385,0x10111111,0x13151511,0x14131212,
0x070D0E11,0x01020403,0x8E888782,0x8382888E,0x04030400,0x05008202,0x84888205,0x84838787,
0x07828886,0x0B0B0C0B,0x08080A0C,0x130E0708,0x16151514,0x15151518,0x080D1112,0x84020B0E,
0x0C050382,0x0202070D,0x09080D0A,0x02070906,0x06070602,0x90870104,0x898D9194,0x87878787,
0x0D080084,0x060C0809,0x0B0A0601,0x8784050A,0x82828687,0x0B060201,0x14141310,0x16161717,
0x12171A18,0x0B09090E,0x85040A0B,0x80818387,0x80838686,0x03030100,0x0C0B0705,0x0A090B0C,
0x82030708,0x84830202,0x888A8584,0x01800081,0x0E0A0603,0x0F0D0F10,0x11151412,0x0B09090F,
0x8B880007,0x8B8D8E8D,0x05028188,0x1612120D,0x16151416,0x040E1416,0x02040401,0x87898400,
0x87858383,0x07060284,0x0E0C0B0B,0x0E101211,0x0506060D,0x82810102,0x00838282,0x0C0A0302,
0x1111100E,0x0B0C0D10,0x87898404,0x8A898686,0x08818B8B,0x0B0C0A08,0x1111100D,0x110C1011,
0x0C0D1012,0x0707060A,0x83800104,0x80838686,0x04090805,0x80830001,0x82060905,0x00848481,
0x87888583,0x0C090582,0x080C0D0C,0x100B0A08,0x14141213,0x14131514,0x10101014,0x020B0B07,
0x82828000,0x02070B06,0x06090600,0x090A0808,0x04040304,0x01060706,0x8D929086,0x86868486,
0x07048285,0x0B09090D,0x09050105,0x810B0F0D,0x06808386,0x090A0805,0x1413110C,0x17191815,
0x15181615,0x04070E13,0x02050705,0x80838784,0x83888780,0x03018082,0x07050201,0x06060809,
0x04060708,0x81070601,0x83868787,0x81838383,0x07040300,0x080A0C09,0x11110B08,0x01070C0B,
0x81040908,0x898A8886,0x09028486,0x1615110D,0x17171918,0x10151817,0x08070408,0x88810405,
0x81000084,0x04028586,0x07060706,0x0B0C0C0A,0x0604080B,0x06060606,0x0502080A,0x0D038006,
0x0D0C0C10,0x060C100F,0x908A8001,0x898A8C8E,0x838C8D8E,0x0B0B0A06,0x11100D0A,0x07101213,
0x0D0C0C09,0x03070B0D,0x80820205,0x03020402,0x13110E09,0x0C0A090F,0x0A100E0C,0x81020002,
0x8E8C8300,0x80858B8E,0x09070281,0x11100F0C,0x14151311,0x0E0F1315,0x090C0B0D,0x83858304,
0x84878786,0x04818483,0x110C0908,0x13131313,0x0E111214,0x00828206,0x8F850003,0x8482878E,
0x03028287,0x06010203,0x050B0D0A,0x01010203,0x84820003,0x82838886,0x07010200,0x1413100D,
0x18181615,0x12141516,0x11101011,0x06081112,0x83010507,0x81818083,0x80808180,0x08070603,
0x06040607,0x05070807,0x81808201,0x82868683,0x03040180,0x00800080,0x07040300,0x01040606,
0x84828080,0x84858482,0x0A080281,0x0C0D0D0B,0x1211100F,0x0F111213,0x07080609,0x84848401,
0x02828383,0x05030302,0x0C070505,0x0608090B,0x08080504,0x81810104,0x01050400,0x0B040081,
0x0A0F0F0E,0x0F0E0D0C,0x0202060B,0x86858281,0x88888B8A,0x83858688,0x06030380,0x10100C07,
0x0807080B,0x04080C0C,0x02020102,0x82800101,0x01008184,0x06070704,0x05060507,0x08050206,
0x00010308,0x84810102,0x80808285,0x02818182,0x01010204,0x090B0602,0x0507090A,0x82000305,
0x83858786,0x82838685,0x03000182,0x0C080A08,0x11100F0E,0x0A0C0E11,0x06030206,0x02030306,
0x03040000,0x02020101,0x02020302,0x81800204,0x84858581,0x85838182,0x80818486,0x02020300,
0x04040404,0x03030304,0x02040603,0x03010100,0x01010204,0x04030101,0x04030202,0x03040403,
0x05030304,0x04040504,0x02000303,0x02040504,0x05030202,0x04050707,0x02040203,0x00000103,
0x80828101,0x83828181,0x00828382,0x04030201,0x08070705,0x06080808,0x02030505,0x84838100,
0x83838485,0x81818383,0x04010100,0x04040403,0x04050403,0x01010103,0x82828000,0x01818181,
0x02020100,0x06060403,0x03030506,0x02020303,0x81800081,0x81828282,0x81818181,0x03020180,
0x05050404,0x06050506,0x03030505,0x02020203,0x80000001,0x80000000,0x01010100,0x01020202,
0x01010102,0x80800000,0x80000080,0x01008080,0x00000001,0x01010101,0x00020101,0x80000001,
0x81818281,0x81828282,0x00008080,0x01010000,0x02020201,0x01010101,0x01010101,0x00000000,
0x00000000,0x01010100,0x00010001,0x01000101,0x00000000,0x80808000,0x00808080,0x80000080,
0x00000000,0x00000000,0x00000000,0x00800000,0x80008080,0x00008000,0x00000000,0x00000000,
0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
0x00000000,
};

+ 3
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleSnare.h 查看文件

@@ -0,0 +1,3 @@
// Audio data converted from WAV file by wav2sketch

extern const unsigned int AudioSampleSnare[2817];

+ 443
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleTomtom.cpp 查看文件

@@ -0,0 +1,443 @@
// Audio data converted from WAV file by wav2sketch

#include "AudioSampleTomtom.h"

// Converted from tomtom.wav, using 11025 Hz, 16 bit PCM encoding
const unsigned int AudioSampleTomtom[3489] = {
0x83001B3C,0xFC0EFF8B,0xFB40FD97,0x045BFB30,0xEABCEAD6,0x04C2F8B3,0x002B0733,0xFB1C0879,
0xE9CCED7A,0xEC2AEC4D,0xF7D8EF09,0xF6EC0EE6,0x15A4F3A6,0xFAD81B95,0xF591F001,0x0A3FFF14,
0xF381FB40,0x332009C7,0xCF10FB37,0xED11E51C,0xE59BF1AC,0xB42FCB21,0xBE20B6E5,0xD9D2D05A,
0xD648D2A3,0xD976C623,0xD3A7F5A6,0xF473C999,0xFE3F0527,0xD0C4E8CF,0xD7BDD5B6,0xD84CD6ED,
0xCA18CF00,0xE1DBD58F,0xEC6FE4FF,0xE3CEE5F2,0xEF13F3C3,0xED90EC25,0x091AF6A5,0xF3D2F890,
0xE66FEFE6,0xEE07EA0D,0xEDF3F7F0,0x04EBF85B,0x045103B6,0xFFA2FE0E,0x0148027F,0xF48A0227,
0xFA86EE2B,0xE9EDF020,0xDAA9E07B,0xEA35E48A,0xE98BEC06,0xE9EDE723,0xEB4AED81,0xE8CDE891,
0xE8FFEB3C,0xDF4CEA81,0xE16CDDD9,0xDFACE95C,0xE32DDA71,0xE61EE2A9,0xE6ABE1A8,0xEF7AEAF3,
0xFCD1F4CC,0x056700EC,0x0BAC085F,0x163C1029,0x22601EFF,0x29FE240D,0x3ED83772,0x35C73493,
0x39414159,0x37FB3442,0x36D03FD6,0x238C22DD,0x1FB4219B,0x0E9E1DB0,0x143E1252,0x084F0965,
0xFDF3FE41,0xFE8F0214,0xFA24FB39,0xF300F877,0xF30CF3B9,0xF1BAEEA3,0xF448F204,0xF613FACF,
0x0A76FD0A,0x1059120B,0x223F1707,0x364A2C9C,0x43D235D8,0x4F4E46DE,0x5B5D5A3B,0x5CAD5965,
0x677E6B66,0x631F5FA8,0x70B37087,0x77DF7199,0x772079FD,0x69CA703C,0x677D6988,0x52235C94,
0x41264878,0x3AF93FC8,0x24572EC1,0x18141BB6,0x117210FF,0xF6280C2D,0xF803F2CD,0xEF14F439,
0xECD4EC13,0xE4D1E4B7,0xF56EF0AA,0xEA3DEEB4,0xF8B4EF84,0xFA47FD61,0x0592FA10,0x13C311DB,
0x191D126B,0x225B1DC6,0x27262AEA,0x31182826,0x3906364E,0x3B76383F,0x32C23A07,0x38873A23,
0x316134D4,0x30DE326F,0x2FCA2F8E,0x27DF2854,0x296622EA,0x1A692331,0x0E3616C6,0xFF65089B,
0xF421FBB6,0xE7A2ED7F,0xE52FE489,0xD492DD6A,0xCA9ACA8D,0xCA95CB84,0xC010C54C,0xB778BFDB,
0xB6C2B763,0xAE45B4BC,0xA75CABDF,0xA084A20A,0x9BC99B36,0x948E9668,0x97BB9832,0xA9239F6D,
0xB620AA3A,0xB552B637,0xC988C485,0xC7A4C8EA,0xCB82CA3A,0xD1D5CC39,0xD8F5DCF1,0xD72DD323,
0xD66BD52D,0xE03DDD96,0xE0C9DE61,0xE83EE540,0xEFDFE612,0xEEFFF728,0xE8E7EB27,0xEF0DE905,
0xF11FECDF,0xEEECF768,0xF468EBB6,0xF51FF53F,0xF57EF839,0xFAC2F67A,0x00C9FF9F,0x0320016A,
0x004802F7,0x03520195,0x010802C5,0xFA92FD66,0xF7D1FD4D,0xF565F67A,0xF794F870,0xEDFFEAC2,
0xF63FF093,0xF2B0F69B,0xE8E2ECCE,0xF08EEAED,0xE739ED23,0xF14DEEFD,0xF472F59E,0xFDA1F8EB,
0xFC03F9C7,0xFD98FD9D,0x077CFFC2,0x184B1435,0x14F717BF,0x138E0DEC,0x1FAC1906,0x19A11EB0,
0x235A1FC8,0x291D2798,0x309D287A,0x362C32DA,0x3B1E37F2,0x37E33A9F,0x32523684,0x2F12322D,
0x38EC37B9,0x27DE32F2,0x245F22AD,0x1CB620DB,0x18D9176C,0x10C116CE,0x08E30ED3,0xFF0F0182,
0xF20CF754,0xEB11EE81,0xE529EAEE,0xDDD7E0B6,0xD922DB3E,0xD7BCD686,0xD4B8D6D5,0xCFF1D2C5,
0xD04AD111,0xCD1BCE4E,0xD44FCFFB,0xD4C7D40D,0xDFE8D83F,0xE23EDFFE,0xE859E8BB,0xF2ECECA3,
0xEA72EE74,0xEFC5EE8F,0xED1EECF8,0xF56CF192,0xEFBFF43E,0xEBD7EEAA,0xE7C8E788,0xE566E87A,
0xEE8DE70F,0xF0E9EF25,0xF228F48F,0xF3DFF2C5,0xF446F8FC,0xF94CF2C9,0xF16EF51B,0xFAA8F247,
0xF06DF927,0xF8E3F259,0xF1AFF56A,0xECEAED82,0xF83DF262,0xEFFFF512,0xEE17F373,0xE5E4E9CF,
0xE972E88E,0xE28AE451,0xEC94E566,0xEDD7ECDE,0xED42EBF8,0xEFC8F3D4,0xF796F0C8,0xF582F848,
0xF715F3D4,0xFA6DF8A2,0xFC2CFAD5,0x021B0020,0x05E8034F,0x08DA0807,0x0B410AB0,0x0D210D41,
0x09A10D3C,0x140109C1,0x18B315BF,0x14C117D3,0x1FA31CF5,0x1D531EF2,0x18F01976,0x240F1EA5,
0x271F28F1,0x2E2E28EA,0x2F932E39,0x311F2EE8,0x33F831BA,0x3C2337CF,0x3E6F3D11,0x3F644163,
0x3E913C25,0x3F70402A,0x3C003F4D,0x3AAD39EC,0x36DB3976,0x29032FFF,0x1E102471,0x13521B0B,
0x10710FE5,0x095A0D66,0x033C05E3,0xF987FEC4,0xF59BF5DD,0xF225F593,0xEBBCEDC6,0xE7D3EAAF,
0xE51CE814,0xD9C7DE89,0xD70FD698,0xD50CD61F,0xCF9AD19F,0xCF56D196,0xC974CC87,0xBF23C122,
0xBFFEC104,0xC13DBD7B,0xBBAFC20F,0xBCBEB97E,0xB7A7BA18,0xB7D3B888,0xBA4EBA40,0xBE68BBE3,
0xC8A0C33E,0xCBBDCCF8,0xCF89CCC8,0xD657D1D1,0xD7A7D63E,0xDD6CDAF7,0xE6DAE14B,0xECE8EC63,
0xF0E4ED1B,0xFC04F5B0,0x0220FFC8,0x069006F7,0x0B830618,0x07FE0C59,0x0BA40866,0x11DB0EAC,
0x1B9915BD,0x20E91F8A,0x260E230A,0x2C3626AA,0x319A2F88,0x354F3510,0x31EE2EC3,0x349836F8,
0x354235E7,0x3B1E3947,0x40233C09,0x430241EF,0x44C24303,0x49E548C7,0x409A460C,0x457643A5,
0x45FC42CD,0x4810478A,0x4618492E,0x40E4449D,0x3A893D1D,0x3A0737C2,0x31DD39C3,0x2D313002,
0x27762A0A,0x1BBE20F2,0x1D891CCE,0x15CB1875,0x0B320F56,0x08A109B9,0x07AB067F,0x01890796,
0xF78DF90F,0xF610F611,0xF12DF44A,0xEBAAEF98,0xF145EE64,0xED17F06E,0xE926E98B,0xEB33EAA7,
0xE7E0EA97,0xE2CEE5BB,0xDF0DE2F4,0xDF37DF14,0xDDEADCEE,0xDD3CDDC6,0xDB04DE40,0xCDBED36C,
0xCC6ECDD6,0xC518C749,0xC642C461,0xC1D3C415,0xC297C145,0xC208C255,0xC33DC29D,0xC777C51D,
0xCC78C91F,0xCDDDCCC9,0xCE59CED6,0xD280D08C,0xD6D5D41D,0xDC5EDB80,0xE3B4DF8E,0xEBB6E73D,
0xF448F0F8,0xFACFF5D9,0x0369FF9C,0x0D130966,0x141A1099,0x1243124A,0x1B301947,0x1A1817F1,
0x1FFB1F76,0x229E20B4,0x21E82159,0x205F2064,0x256F22DF,0x271926A6,0x278A2788,0x20E723B2,
0x22F520A6,0x1EB22265,0x1E9F1EFA,0x1FF32063,0x1BC81CA5,0x205D1DD8,0x1FCC1F59,0x228B2254,
0x20182287,0x19831BB6,0x19F71B7F,0x15C3190C,0x0E1E1046,0x0B3A0C78,0x0D820CF5,0x055B070B,
0x048F035E,0xFEF90399,0xFA6DFEE9,0xF8BEF70C,0xF607F8A1,0xF32FF6F2,0xF438F253,0xF033F193,
0xEF09F0A1,0xE8BAEC4E,0xE6F0E4A3,0xE42AE548,0xDFA2E235,0xDB2ADE12,0xDE9FDA6E,0xDA40DEF9,
0xD8B6D92B,0xDA1CDA7D,0xD97BD8BE,0xD5CBD775,0xDAB7D8A3,0xE130DFA9,0xE15CE1C4,0xE91AE430,
0xEE3DEAED,0xED3CECE2,0xEF58EFCB,0xF4D8EFB8,0xF5B7F611,0xF7B5F4E9,0xFCB4FB9A,0x025BFFF2,
0x068A04E0,0x09E208AA,0x08DF0826,0x07F909EA,0x0874080B,0x0A68095E,0x10AE0E43,0x0F6D0F42,
0x10A71031,0x15D9134C,0x157A154C,0x166B1578,0x19371839,0x1713170D,0x16D616B9,0x1983192C,
0x1B0D1B5F,0x1B1D1AE1,0x1D151C7C,0x1CE91CBE,0x1CFB1CFE,0x1D1A1D02,0x1CB21D18,0x1C441CA4,
0x1D081C93,0x1FF81C80,0x217B211E,0x25D92338,0x257D2504,0x282828AA,0x22482571,0x23DD222E,
0x21472272,0x22C223FF,0x1E6E207D,0x1A691C80,0x171D18C1,0x10DC143A,0x0A660C3B,0x081A0895,
0x02610698,0x058001FE,0xFF6305CB,0xFD3FFE19,0xF8FCFB15,0xF484F5E9,0xF35AF3ED,0xF0D7F171,
0xEA80EE54,0xE6FAE763,0xE48BE716,0xE324E281,0xE4F6E3EA,0xDF10E2FA,0xDE13DDEC,0xDE1BDDAA,
0xD7EEDA7B,0xD8C8D8C2,0xD2D7D6F2,0xD647D42A,0xD752D7B5,0xDAD1D899,0xDC80DC5B,0xDBE5DC59,
0xDD32DCC1,0xDF8DDCEC,0xE087DEB9,0xE2AFE236,0xE212E1AD,0xE293E38B,0xE3BBE42B,0xE43BE238,
0xE6A6E4D0,0xE5BCE8F3,0xE59CE559,0xE74BE59D,0xE57BE587,0xEA10E7D6,0xF24BEEB6,0xF61EF431,
0xFAB1F8A7,0xFDE1FD61,0x015CFE09,0x03B80179,0x090F0700,0x0E550B44,0x130D11C1,0x16D0157A,
0x1A2216F0,0x1E3F1CCB,0x1D941E9F,0x1DCB1DED,0x1EF91D60,0x1F472079,0x1ED71E71,0x230C224B,
0x2137218E,0x20422075,0x1DF21E6F,0x1D581DBF,0x1A5F1B74,0x19A51B95,0x1462166D,0x128E12BA,
0x0F39118D,0x10930FB1,0x10F71152,0x0F8C109F,0x0C3C0D87,0x098609A4,0x0809097B,0x04E80696,
0x041F0442,0x02850379,0x012E015C,0xFDCCFFC8,0x0091FD5B,0x011C02D9,0x00D20039,0x02B8038E,
0xFF040005,0xFD37FDF6,0xF9CAFB38,0xF94AFA79,0xF3DCF5E1,0xF148F3AB,0xF05DEFD6,0xF070F0A2,
0xF06FEFFF,0xF052F0E6,0xEE32EEF7,0xEC8EED59,0xECA1EBFD,0xECD7EC6B,0xEE49EDF4,0xF03FEEEF,
0xEE5AEF0A,0xF1FDF09F,0xF1CBF32B,0xF218F162,0xF1DAF213,0xEF9DF0C4,0xF097EFFB,0xF1D4F052,
0xF49CF447,0xF727F575,0xFA43F808,0xFAB3FAB6,0xFC99FAC4,0xFF45FF63,0xFFCDFDDE,0x00580044,
0x0082019A,0xFFC70013,0x05A601ED,0x0417055F,0x05CE0550,0x08E40832,0x08470831,0x09EF09FA,
0x0CA80AE6,0x0C360BD6,0x0D060C57,0x10530E7C,0x11DA0FFC,0x156D142C,0x1A6617DC,0x1BBD1BBD,
0x1DA61C9D,0x1D0B1D27,0x1DC91CD9,0x1EC51ECB,0x2036206B,0x201E2053,0x1F401FBD,0x1CD61F8D,
0x1A491A33,0x193F18B2,0x147C1869,0x0F6D10F1,0x0C0F0D1F,0x0B010B9B,0x08010A45,0x03B9061B,
0x00CF01B8,0xFCA4FDD4,0xF9FEFBE0,0xF729F904,0xF232F4D9,0xEF01EFAC,0xEC6CEF04,0xE917EA5A,
0xE643E79D,0xE58BE5A0,0xE513E61B,0xE3C9E445,0xE464E42B,0xE1D4E2EB,0xE1D7E1BF,0xE4C8E308,
0xE165E2AC,0xDFDEE0EB,0xE047DF52,0xE13EE11C,0xE1B7E110,0xE2DDE271,0xE1D6E37A,0xE17FE0EE,
0xE248E1C5,0xE32BE316,0xE422E3FB,0xE436E4A8,0xE30AE2D6,0xE5FAE417,0xE754E743,0xE674E648,
0xEB75E894,0xED85ECEE,0xF002EE33,0xF33FF270,0xF4D2F4B1,0xF4E0F39D,0xFA73F7C3,0xFB67FB49,
0xFE21FC15,0x02F800A4,0x057D048A,0x06630608,0x0939079C,0x0A2C09C3,0x0C320AE5,0x105A0E98,
0x107310FC,0x12501083,0x16D41556,0x16EE170B,0x17921676,0x1976193D,0x1B651A6F,0x1C2F1B38,
0x1F541E19,0x20821FE3,0x215B216F,0x22D62220,0x246022F1,0x253824E3,0x23C8255C,0x242723D9,
0x22AC22A9,0x23402378,0x24A72332,0x244724F5,0x260524A8,0x26EB2681,0x2A502899,0x2C7E2BE5,
0x2CFA2C62,0x2A122B71,0x28DB29AE,0x285728FA,0x25C6271D,0x2244246D,0x1EA62046,0x1CC61DBE,
0x17E91A23,0x121C143F,0x0E811120,0x0AEE0CF7,0x07560910,0x01ED04DF,0xFDF8FF80,0xF7FDFC44,
0xF1B9F427,0xEB09EE32,0xE434E7A6,0xE01CE202,0xDC30DE17,0xD9F3DAE7,0xD77AD8B0,0xD705D686,
0xD6DAD750,0xD5ABD64B,0xD559D5B8,0xD4A4D4EC,0xD16FD26F,0xD1A2D1AD,0xD206D236,0xCFB7D0BF,
0xD01BCFCA,0xCE24CF8D,0xCD38CD3A,0xCC87CC93,0xCDF3CDC9,0xCDAACDA3,0xCF13CE61,0xD172D01E,
0xD3E2D360,0xD29BD279,0xD499D3AF,0xD52AD582,0xD624D57D,0xDA00D7E7,0xDB1EDA28,0xDC08DB8E,
0xDDA2DCCF,0xE08DDED9,0xE2E9E146,0xE750E5BF,0xEB56E8DE,0xEF3FED14,0xF37FF19C,0xF91AF605,
0xFE31FBC2,0x04E201E6,0x07CE06F5,0x0A950900,0x0D860BCD,0x10260F2E,0x1480121A,0x190E170A,
0x1CA81AEB,0x1FFE1D6B,0x25F623F6,0x2758264F,0x27FF277C,0x2AA529BA,0x2C072AD2,0x2D5C2C92,
0x2EE92EE9,0x31832FB3,0x32C532AF,0x34B83363,0x34A434DF,0x35123480,0x33F63552,0x343B33D5,
0x355C349F,0x35AD3552,0x3601360E,0x384936E3,0x381038D1,0x3637371B,0x33DE3596,0x31D6329E,
0x2F562FAF,0x2E102EF2,0x2C082D2F,0x28B22AD6,0x26AB26D9,0x227924F6,0x1D852067,0x19271B57,
0x151E16F7,0x10FB1334,0x0D5E0F40,0x09660B96,0x041A0649,0xFE57016E,0xFAA8FCB4,0xF41CF78F,
0xED6AF0D3,0xE8B9EAF3,0xE58BE693,0xE358E50A,0xE054E10C,0xDD70DF47,0xDA5ADB79,0xD792D8C9,
0xD66BD753,0xD2CDD467,0xD38BD2FA,0xD216D2F7,0xD0A3D104,0xCF6FD084,0xCE18CF29,0xCC6BCCD1,
0xCC20CC8D,0xCA22CADB,0xCBC9CA8D,0xCD29CC73,0xD01BCEE7,0xD111D111,0xD152D06D,0xD2C6D20C,
0xD48BD3A1,0xD4FCD4BF,0xD689D5E0,0xD7D9D75C,0xD7D9D7EA,0xD894D7E4,0xDB6FD9E3,0xDEADDCFA,
0xE211E0CF,0xE41FE32C,0xE860E5B7,0xEC05EA7F,0xF04FEDF8,0xF396F25A,0xF571F438,0xF817F6DE,
0xFB87F9B2,0xFE02FCD9,0x00C9FF28,0x024E01D3,0x054903FC,0x06DB061A,0x09450799,0x0D5A0B71,
0x10520EF6,0x1256117A,0x160813FB,0x170B16E8,0x18B11783,0x1AFC1A0A,0x1D7D1BE7,0x1F511EE4,
0x20E01F7A,0x228A21DC,0x25312369,0x277B26D8,0x27992796,0x29AB293F,0x2986293C,0x2B0F29FF,
0x2B972BCD,0x2B662B98,0x296D2A82,0x29F92978,0x284D2949,0x25C1274A,0x252024E2,0x24D32556,
0x23102442,0x208B21A5,0x1E701EF5,0x1C041D7D,0x1BA61BA8,0x1B011B83,0x17BC19E6,0x14261595,
0x11A012D1,0x0E580FFC,0x0BFF0D86,0x080809A0,0x0450066E,0x02630342,0x0061010A,0xFE31FF48,
0xFB46FD03,0xF78BF983,0xF563F613,0xF490F4D0,0xF18DF3A3,0xEF2BEFEB,0xEF5CEF6A,0xECF8EE8A,
0xEA49EB2D,0xE9B6E9DE,0xE87DE91E,0xE7D9E8CD,0xE66CE6CE,0xE5C5E60B,0xE38DE4A1,0xE3DDE34B,
0xE532E4C2,0xE4D7E4F8,0xE4D7E4A4,0xE61BE58D,0xE5B0E5C6,0xE7B5E6DF,0xE934E858,0xEA1DE9CD,
0xE92FE9DA,0xE9B0E945,0xEB49EA14,0xEDFFEC94,0xEF40EF3F,0xF00CEF34,0xF156F0E1,0xF261F1F0,
0xF4ABF31F,0xF69DF644,0xF76FF6EA,0xF919F7CD,0xFB69FA5F,0xFC19FBE0,0xFE01FD00,0xFF81FF02,
0xFF10FFA5,0xFD91FDD9,0xFF0FFDD0,0x01CC009F,0x0344028F,0x04590406,0x059C04CC,0x06EC06CD,
0x07750673,0x0A2808F1,0x0B8E0B09,0x0B010BD0,0x0BB80AEF,0x0C6E0C23,0x0C390C52,0x0E6C0D34,
0x0FC80F50,0x0FBB0FBE,0x0FB90FDA,0x11011035,0x12561171,0x137C131A,0x13CD1363,0x138C1401,
0x123812DB,0x1075112F,0x108E10A4,0x0FBF107C,0x0D510E3F,0x0BEA0CDC,0x09830A77,0x08E10938,
0x062407D2,0x040D0508,0x018202CA,0xFF9B008E,0xFF34FF2E,0xFD52FEB2,0xFC27FC70,0xFAD5FB83,
0xF782F942,0xF5EAF680,0xF35AF4E2,0xF16CF244,0xEF5DF05B,0xEDFDEE8D,0xEC95ED81,0xED03EC20,
0xEDD7EDD3,0xED01EDA8,0xEB8FEC03,0xEA95EB69,0xEA11E9C5,0xEAF2EA63,0xED5AEC7A,0xEC6BECE7,
0xEC3AEC29,0xECA9EC78,0xED1CED0D,0xEE55ED7D,0xEF58EEA1,0xF212F0FA,0xF2C2F289,0xF364F2CC,
0xF43FF3F9,0xF4C3F478,0xF4B6F4D9,0xF5E9F546,0xF734F683,0xF87EF801,0xFA99F929,0xFD5CFC4C,
0xFF9FFE27,0x01050082,0x021A01D2,0x036C029C,0x053E040D,0x07CF06A9,0x0A4508D9,0x0C5A0B6F,
0x0F260D9F,0x1142108E,0x1220116F,0x12C412D3,0x131912D9,0x13A61398,0x13851361,0x13AB136C,
0x147C1410,0x15701535,0x159F157E,0x168315E8,0x16A016C2,0x174E16E7,0x18F017FB,0x19431933,
0x19921954,0x19FD19C3,0x19C01A20,0x19A319AF,0x19981995,0x19F219C6,0x198319D3,0x19B8191B,
0x198C1A33,0x189E194A,0x173217EC,0x15B21632,0x14D91533,0x13931460,0x1119122D,0x10A610E4,
0x0EE60FBF,0x0CA70DD7,0x0AA00BDA,0x072408CA,0x04EC0601,0x028803BC,0x00140152,0xFDC0FEFB,
0xFC45FCE2,0xFAC9FB8A,0xF8C7F9EB,0xF6ACF801,0xF345F4EE,0xEFD7F133,0xED04EEB7,0xEA2EEB7D,
0xE77EE89E,0xE511E650,0xE2DAE3E4,0xE15AE222,0xDFDCE077,0xDE56DF58,0xDD2CDDB3,0xDC14DC7A,
0xDB33DB7A,0xDA96DAFF,0xDAA9DA7A,0xDA4EDA99,0xDA54DA36,0xDAB1DA81,0xDA84DABE,0xDA07DA23,
0xDB21DA93,0xDC1ADBB1,0xDBFEDC0F,0xDC84DC27,0xDD2DDCF8,0xDEE8DDEA,0xE166E026,0xE3D0E25F,
0xE69DE559,0xE800E756,0xEA79E914,0xEC94EB99,0xEEBFED99,0xF173EFFF,0xF4A7F300,0xF760F626,
0xFA4EF8D8,0xFCFBFBAF,0x0027FE85,0x03A90206,0x063304DA,0x097D07C3,0x0C220AE3,0x0E910D5F,
0x11AA0FEC,0x137512E1,0x14DC144A,0x15981525,0x16E5164B,0x178C1721,0x18F31827,0x1AF61A02,
0x1D041BD5,0x1F521E2D,0x20E82058,0x21AC2166,0x21C6218E,0x22C02256,0x228222B7,0x22AE2287,
0x23CD2342,0x23A02400,0x23372355,0x235F2325,0x241A23B5,0x24362441,0x2451243D,0x2395240B,
0x22AE2319,0x2229227F,0x21232197,0x1FD820A7,0x1DE91EF3,0x1BCE1CE3,0x19341A98,0x157A1752,
0x123113D3,0x0EF01058,0x0C5E0DCC,0x09E80B24,0x077708A2,0x04960611,0x01F90359,0xFEF80069,
0xFC39FD8E,0xF901FAC1,0xF5FEF77B,0xF3C6F4A9,0xF104F282,0xEF8CF013,0xEE51EF16,0xEC60ED5A,
0xEB6EEB93,0xEA6AEB3D,0xE8F4E984,0xE7F3E863,0xE73BE7AD,0xE71FE718,0xE5D3E6C7,0xE4FEE534,
0xE413E465,0xE323E39C,0xE2A9E2F7,0xE1E4E22A,0xE1C3E1DD,0xE18CE1A6,0xE1ABE18C,0xE1DCE1C7,
0xE172E1CA,0xE1BFE16D,0xE333E27E,0xE4A1E3DB,0xE5ADE523,0xE6F6E659,0xE843E7A5,0xE92EE8A8,
0xEA98E9DC,0xEB4CEADD,0xEC0AEBC9,0xEDD3ECCE,0xEFCCEED4,0xF241F0FE,0xF4ADF37E,0xF7CCF609,
0xFA9AF950,0xFCA1FBB5,0xFF82FDF8,0x01BC00B6,0x03D302BB,0x06520502,0x08C807B1,0x0A30099A,
0x0C080AE0,0x0D060CC2,0x0D420D2C,0x0DD00D7E,0x0E320E08,0x0E710E58,0x0F3F0EDA,0x0F5C0F37,
0x10250FC6,0x10F510A0,0x109110E0,0x112110B5,0x11BA117E,0x11B511D0,0x121D11CC,0x12CB1264,
0x137A1320,0x143C13DD,0x14FB1483,0x15961585,0x15AC157B,0x15FD15E6,0x154215C2,0x144B14BB,
0x13C91411,0x12E61347,0x126112CA,0x10A71182,0x0F3E0FF2,0x0D870E6D,0x0BE60C91,0x0B150B98,
0x094D0A44,0x07E4087F,0x074507A3,0x05E5069A,0x037404CC,0x01190240,0xFEBAFFE7,0xFC7DFD8A,
0xFA77FB82,0xF8BAF98A,0xF7DBF82C,0xF686F76F,0xF4F8F58B,0xF419F499,0xF2F4F36C,0xF237F277,
0xF222F22B,0xF223F224,0xF207F219,0xF24AF215,0xF289F280,0xF246F266,0xF20DF239,0xF18AF1BD,
0xF1FCF1AB,0xF24CF21D,0xF2BBF2A2,0xF303F2C7,0xF2FDF330,0xF308F2EA,0xF292F2D1,0xF25AF27A,
0xF1FAF22B,0xF241F213,0xF2E1F291,0xF351F309,0xF3C9F380,0xF43BF414,0xF52AF494,0xF60AF5B2,
0xF67DF63B,0xF78AF6E8,0xF9BBF8A1,0xFACEFA48,0xFC0DFB5B,0xFD62FCCF,0xFE7DFDF4,0x0002FF27,
0x01EA00F0,0x03AD02DF,0x05840484,0x067A0644,0x072506A0,0x082807B4,0x08FC089F,0x0A0B0979,
0x0B110A97,0x0B640B55,0x0C4C0BBA,0x0C990C7E,0x0CD00CB0,0x0D2A0D05,0x0DB10D7E,0x0D6A0DA7,
0x0D470D31,0x0CF50D3E,0x0C360C92,0x0BDC0BFD,0x0B620BA0,0x0B1A0B3D,0x0B8E0B2B,0x0C010BE4,
0x0BE60C01,0x0BFD0BF4,0x0B600BC9,0x0AC30B07,0x0A5B0A7E,0x0A0C0A45,0x097809BA,0x09250948,
0x08BD08E5,0x085A0882,0x07A30805,0x06B2074C,0x052805EC,0x03AC047A,0x023302D0,0x016201DE,
0x005E00E2,0xFF1AFFC6,0xFD58FE42,0xFB6EFC63,0xF9E8FABD,0xF885F918,0xF790F7FB,0xF6A2F70A,
0xF579F61A,0xF4ACF519,0xF416F44A,0xF3BEF3EA,0xF374F390,0xF375F368,0xF32FF369,0xF314F30D,
0xF3B2F352,0xF389F3CC,0xF360F35F,0xF30BF34F,0xF2E0F2DD,0xF30BF2F3,0xF371F32A,0xF3D8F3B6,
0xF455F3F5,0xF4D6F4B5,0xF50CF4EE,0xF5B4F54D,0xF606F5FB,0xF604F600,0xF61AF60F,0xF646F612,
0xF6CBF68B,0xF7E1F74A,0xF8ACF852,0xFA1CF94E,0xFAEFFA98,0xFB7EFB43,0xFC24FBCF,0xFCD7FC76,
0xFD9FFD46,0xFEB8FE18,0xFFF9FF61,0x00E50062,0x02110172,0x02ED02AA,0x03EB034B,0x04F10484,
0x05F4055B,0x076106B1,0x085707EC,0x0915089A,0x09E509AC,0x09ED09F2,0x0A1B09F5,0x0A760A38,
0x0ABD0AB8,0x0ADF0ACF,0x0AC60ACD,0x0ADE0ACE,0x0ABF0ADD,0x0A060A76,0x09B409C5,0x099C09A4,
0x092C097A,0x08F708F2,0x094C0914,0x09F20990,0x0AE70A76,0x0B850B5B,0x0AF40B49,0x0AC60AC4,
0x0B070AE6,0x0B290B1A,0x0B090B19,0x0ADE0AF9,0x0A070A8E,0x0942098E,0x088908ED,0x07770800,
0x060B06DE,0x04B80559,0x0381041F,0x02700309,0x00D501B4,0xFF67FFFA,0xFE05FEDD,0xFC52FD18,
0xFB42FBB6,0xFA86FAE2,0xF966FA04,0xF88AF8E3,0xF75AF7F4,0xF632F6C6,0xF576F5B9,0xF580F57E,
0xF510F553,0xF486F4C2,0xF442F460,0xF422F420,0xF463F440,0xF4BBF497,0xF4DBF4D2,0xF4A4F4C2,
0xF48CF495,0xF52FF4C5,0xF616F5B3,0xF6A9F661,0xF71BF6DF,0xF775F752,0xF7BDF795,0xF7DFF7CA,
0xF7B1F7C2,0xF76EF7A6,0xF727F741,0xF769F743,0xF724F753,0xF747F72C,0xF7E9F78E,0xF897F830,
0xF987F91E,0xFA67F9F2,0xFBA7FAF9,0xFCC9FC32,0xFE1BFD62,0xFEEAFEAC,0xFF4EFF12,0x003CFFA8,
0x018600E9,0x02A30221,0x035F0309,0x046D03D3,0x055A04E6,0x06AC0603,0x07970739,0x084607EC,
0x08AE0888,0x08E008BE,0x08DF08F2,0x092108EC,0x096E0948,0x09CF09A3,0x09E609E1,0x096E09CD,
0x08DC091F,0x086D088F,0x08340852,0x07D30816,0x07550780,0x07000734,0x06F306E7,0x07020701,
0x06F406F6,0x06F206FA,0x06B206D0,0x06DE06B2,0x0727071C,0x074B0734,0x0774075A,0x07EF07AF,
0x080707F9,0x084B082B,0x07E1082E,0x076D079D,0x06D8073A,0x063C067F,0x05A805F6,0x04B60539,
0x03D90447,0x02900349,0x00D901BA,0xFEC2FFD1,0xFCD0FDB3,0xFBBCFC3E,0xFAC6FB40,0xF9B9FA43,
0xF8BAF92F,0xF7EFF863,0xF707F768,0xF6AAF6CF,0xF5E9F666,0xF4FCF567,0xF4D9F4CB,0xF4A7F4CD,
0xF4A3F497,0xF4D8F4CE,0xF4F2F4D0,0xF553F527,0xF585F55C,0xF603F5DC,0xF679F633,0xF6FCF6AC,
0xF78BF74D,0xF7D2F7B6,0xF7FDF7EC,0xF82CF809,0xF8A4F86B,0xF8E2F8C9,0xF94BF90E,0xF9CFF985,
0xFA5DFA21,0xFAB7FA90,0xFAFEFAE3,0xFAD5FAEB,0xFAE5FADF,0xFB22FAEB,0xFBB8FB74,0xFC75FC09,
0xFD3DFCD2,0xFE28FDBE,0xFE6DFE57,0xFECCFE9E,0xFF47FEF7,0x006DFFCC,0x019A0107,0x02CC022F,
0x03E70376,0x04AA0440,0x05D60534,0x06D1065A,0x07F9075C,0x08FF0894,0x09310919,0x0967094F,
0x09750978,0x09510970,0x0925093B,0x08E20901,0x08A008C9,0x0899087F,0x08670899,0x08250842,
0x07EB0811,0x078007B1,0x06DE0735,0x0689069E,0x06890691,0x0693068A,0x0672068D,0x066D065E,
0x0678066E,0x06650679,0x067C0669,0x06890692,0x06640677,0x06570652,0x0647065C,0x06370638,
0x05FF0622,0x057E05CC,0x04D10528,0x0438047B,0x03EC0410,0x032C03AC,0x01D4027F,0x00A20140,
0xFFAB0013,0xFEAEFF2D,0xFDB0FE2A,0xFD01FD5D,0xFC01FC7E,0xFB2EFBA5,0xF9FDFA92,0xF917F97E,
0xF84CF8BA,0xF775F7D4,0xF6EFF72F,0xF699F6B9,0xF68DF68B,0xF68EF694,0xF68FF689,0xF69EF69E,
0xF6C8F6A8,0xF740F6FC,0xF7C0F787,0xF817F7E6,0xF889F85F,0xF89AF88E,0xF88BF898,0xF897F890,
0xF88EF891,0xF89CF88E,0xF8DBF8AD,0xF95CF922,0xF9A6F988,0xF999F9A1,0xF9B2F99F,0xF9EDF9D4,
0xFA27FA04,0xFA8AFA5D,0xFAC1FAA9,0xFB1DFAE3,0xFBC8FB6C,0xFC92FC25,0xFD65FD06,0xFDEBFDA6,
0xFEEBFE64,0xFFB1FF50,0x00A90023,0x01BA0134,0x02D20249,0x039F0340,0x0474040A,0x050304C5,
0x057A0539,0x061E05D4,0x06680645,0x06910682,0x06B5069B,0x073A06F2,0x07730769,0x0791077B,
0x07930797,0x0790078A,0x07AC07A1,0x079407AB,0x073C076A,0x06E40713,0x065D06AA,0x05EB061E,
0x05C705D3,0x05AB05B8,0x052F0579,0x05020502,0x05180513,0x052A051F,0x0555053A,0x0580056F,
0x05BA058F,0x05F705E4,0x05EE05F3,0x05C805E4,0x05A905B3,0x05B105AA,0x059105AF,0x051C0554,
0x04BF04EA,0x049504AA,0x03EA0457,0x02A20356,0x016401F6,0x005300D3,0xFF82FFF3,0xFE6EFEFC,
0xFD49FDDD,0xFC01FCA9,0xFAE9FB6B,0xFA31FA83,0xF9B3F9F0,0xF90DF966,0xF88DF8BA,0xF864F876,
0xF80FF834,0xF83BF81E,0xF86AF855,0xF8BAF88A,0xF8F0F8DA,0xF935F916,0xF924F936,0xF941F920,
0xF9A5F975,0xF9D3F9BE,0xF9EEF9EE,0xF9E7F9E5,0xFA06F9F6,0xFA2FFA15,0xFA4AFA4E,0xFA0AFA26,
0xFA09FA03,0xF9F1F9FD,0xFA08F9F4,0xF9F2FA0F,0xF9C4F9CD,0xF9C3F9C5,0xF9E1F9D2,0xF9FDF9EC,
0xFA54FA24,0xFAC0FA87,0xFB46FB02,0xFBF1FB8F,0xFCE5FC6C,0xFDAEFD50,0xFE5FFE00,0xFF3BFECE,
0x001CFFAA,0x0100008D,0x02010179,0x02D8026D,0x03A40341,0x044803F9,0x04FF04A5,0x05B9055D,
0x064B0609,0x06DF0699,0x07320710,0x07730752,0x07B0079B,0x07B307AF,0x07A307B1,0x0750078A,
0x069106F4,0x061D0648,0x057F05DA,0x04F3052B,0x04CB04DA,0x049704B4,0x0470047C,0x047A0478,
0x0471047A,0x046F0466,0x04A10489,0x04A704AC,0x04A9049E,0x04F604CD,0x052B0510,0x05390539,
0x05340536,0x0540053D,0x053B0540,0x04FC0525,0x049704C6,0x046F0481,0x040F0449,0x03A803D8,
0x0329036A,0x029402E2,0x01C7023B,0x00E50150,0x00200081,0xFF6DFFBF,0xFEC8FF1B,0xFE02FE6C,
0xFD3AFDA4,0xFC6EFCCF,0xFBA2FC0E,0xFABCFB27,0xFA24FA69,0xF9DCF9F8,0xF9A6F9C2,0xF960F986,
0xF904F931,0xF8D0F8E5,0xF8B6F8C2,0xF8B3F8AC,0xF8F9F8CE,0xF947F923,0xF9AAF979,0xF9E7F9CD,
0xFA2FFA02,0xFAB3FA70,0xFB2AFAEC,0xFB76FB5F,0xFB77FB78,0xFB62FB71,0xFB34FB53,0xFAF6FB0A,
0xFAD5FAE7,0xFAC4FAC9,0xFAA1FAB6,0xFA82FA8C,0xFA94FA84,0xFACBFAB6,0xFAF1FADC,0xFB36FB0C,
0xFBB3FB71,0xFC38FBF5,0xFCCDFC80,0xFD76FD20,0xFE10FDC3,0xFED3FE6F,0xFF87FF2C,0x0023FFDA,
0x00B7006E,0x012F00EF,0x01CD0183,0x02680216,0x032502C1,0x03DA0386,0x04670424,0x04D004A3,
0x050804EB,0x055B0534,0x059C057A,0x05F605CC,0x061E0611,0x0612061E,0x059E05E2,0x0552056E,
0x05440545,0x056D0551,0x059A0586,0x058E059F,0x0573057C,0x05570568,0x051E053B,0x04D804FB,
0x04AB04BA,0x04B504AE,0x04CA04BE,0x04CD04D1,0x04ED04D3,0x04F604FC,0x04E204ED,0x04D604D7,
0x04CA04D6,0x047804A9,0x0434044F,0x04150422,0x03C203F7,0x036D0395,0x02FF033D,0x028402C0,
0x01E10238,0x0113017C,0x005600B3,0xFFB6FFFD,0xFF39FF78,0xFEADFEF0,0xFE29FE74,0xFD6FFDCD,
0xFCE3FD20,0xFC82FCB1,0xFC2EFC5A,0xFBC5FBFC,0xFB46FB8A,0xFAC6FB03,0xFA72FA96,0xFA53FA5A,
0xFA59FA52,0xFA6BFA64,0xFA72FA71,0xFA7DFA76,0xFA7FFA7F,0xFA7EFA7B,0xFA91FA89,0xFA87FA90,
0xFA5CFA71,0xFA4FFA50,0xFA6AFA58,0xFA7CFA76,0xFA92FA85,0xFAAAFA9D,0xFACEFABE,0xFAECFADD,
0xFAEEFAF1,0xFAFEFAF6,0xFB00FAFF,0xFB1DFB0B,0xFB51FB32,0xFBB5FB7E,0xFC3BFBF9,0xFCB5FC76,
0xFD4BFD00,0xFDC1FD90,0xFE2CFDEC,0xFEBFFE7C,0xFF1DFEEC,0xFF84FF53,0xFFE6FFB0,0x006E0025,
0x00FA00B6,0x01870141,0x01F701C0,0x02770237,0x02BA02A1,0x02F802D8,0x0348031B,0x03760368,
0x038E037E,0x03E303B3,0x04180403,0x043D042A,0x04610453,0x045F0464,0x0464045F,0x048E0477,
0x04AD049F,0x04C104B3,0x04DE04CF,0x04F404EF,0x04F904F6,0x04FA04F7,0x05150501,0x05540534,
0x0584056E,0x05B8059B,0x05EB05D5,0x05ED05F4,0x05D005E2,0x059705B7,0x05660578,0x052B0551,
0x04E10502,0x049004BE,0x04270460,0x039A03E4,0x02F70349,0x0244029B,0x01A401F5,0x00F1014E,
0x00310090,0xFF83FFD2,0xFF22FF4D,0xFEB4FEF4,0xFE13FE66,0xFD83FDC5,0xFD0EFD47,0xFCB6FCDE,
0xFC6EFC91,0xFC3CFC51,0xFC0DFC27,0xFBD0FBF1,0xFB99FBB2,0xFB83FB88,0xFB8EFB88,0xFB90FB8E,
0xFB9FFB95,0xFBB1FBAC,0xFBA2FBAA,0xFB9AFBA1,0xFB6EFB85,0xFB49FB58,0xFB3EFB40,0xFB41FB42,
0xFB3AFB3D,0xFB4DFB3F,0xFB68FB5B,0xFB48FB63,0xFB22FB2F,0xFB09FB18,0xFAF9FB01,0xFADAFAEA,
0xFACBFACE,0xFADBFAD0,0xFAFEFAEA,0xFB52FB21,0xFBBBFB85,0xFC1AFBEA,0xFC9DFC56,0xFD25FCE9,
0xFD96FD59,0xFE32FDE1,0xFECAFE7F,0xFF5AFF13,0xFFE3FF9B,0x007B0034,0x00FE00BE,0x01650135,
0x01B5018F,0x01E901D6,0x021701FB,0x02480232,0x02770259,0x02D502A4,0x030D02F8,0x03300320,
0x035B0341,0x03920378,0x03BE03AC,0x03D103C8,0x03E103DA,0x03DD03E2,0x03E203DB,0x03DE03E3,
0x03DF03DC,0x03EF03E5,0x041C0400,0x045A043E,0x04930475,0x04CC04B1,0x050804E8,0x05180517,
0x05280520,0x050E0521,0x05260510,0x0545053D,0x05450545,0x053A0541,0x0517052B,0x04E10503,
0x048B04B7,0x0430045E,0x03B903F7,0x0346037A,0x02DF0318,0x024D0297,0x01B30202,0x00FE015F,
0x0043009D,0xFF90FFEA,0xFEC7FF2C,0xFE3AFE77,0xFDC6FE01,0xFD52FD8C,0xFD00FD24,0xFCA4FCD5,
0xFC4CFC74,0xFC17FC2B,0xFC18FC13,0xFC18FC1D,0xFBFDFC08,0xFBE4FBF4,0xFBB7FBCB,0xFB9EFBAB,
0xFB79FB8B,0xFB6CFB6F,0xFB71FB6C,0xFB98FB82,0xFBB3FBA6,0xFBD8FBC6,0xFBE1FBE1,0xFBDCFBDE,
0xFBC6FBD4,0xFBAAFBB7,0xFBAAFBA6,0xFBACFBAD,0xFB9EFBA7,0xFB6DFB8B,0xFB51FB56,0xFB4DFB4F,
0xFB55FB4C,0xFB81FB68,0xFBB0FB9A,0xFBF7FBD0,0xFC3BFC1B,0xFC8AFC5F,0xFD00FCC1,0xFD7FFD41,
0xFDEBFDB6,0xFE69FE27,0xFEE8FEAA,0xFF76FF2C,0xFFFBFFBB,0x00720037,0x00DD00AC,0x012D0107,
0x017A0153,0x01D901A7,0x02490213,0x02A7027D,0x02D502C2,0x02EC02E3,0x030102F4,0x030E030A,
0x03190311,0x03230322,0x03320325,0x035F0347,0x038D0375,0x03BE03A7,0x03E403D1,0x041B03FF,
0x04360430,0x04400437,0x04680456,0x047E0475,0x04880485,0x048E048A,0x04AC049A,0x04D404BF,
0x04E804E4,0x04E604E5,0x04DA04E6,0x049C04BA,0x04670484,0x044A0455,0x0428043C,0x03F1040F,
0x03AB03D1,0x035B0382,0x03160339,0x02BE02EA,0x0254028F,0x01C4020F,0x0132017A,0x00A700EB,
0x00230066,0xFF8DFFDA,0xFF0FFF4B,0xFE94FED4,0xFE1DFE56,0xFDC7FDEA,0xFD91FDAA,0xFD48FD70,
0xFCF8FD1E,0xFCB8FCD7,0xFC62FC90,0xFC12FC36,0xFBFEFC00,0xFC0AFC08,0xFBFEFC02,0xFBF1FBF9,
0xFBDAFBE6,0xFBC4FBCE,0xFBA9FBB7,0xFB9CFBA5,0xFB82FB90,0xFB58FB6D,0xFB4AFB4C,0xFB58FB50,
0xFB66FB61,0xFB61FB64,0xFB5DFB5E,0xFB61FB5D,0xFB76FB6B,0xFB9BFB85,0xFBBEFBB1,0xFBC0FBBE,
0xFBE3FBCD,0xFC1BFBFE,0xFC5EFC3A,0xFCB3FC8A,0xFD15FCE0,0xFD87FD4E,0xFDF9FDBF,0xFE60FE32,
0xFECAFE92,0xFF34FF03,0xFF79FF56,0xFFD3FFA4,0x00390005,0x00B10070,0x013300F7,0x017B015C,
0x01B00199,0x01C801BF,0x01E801D5,0x021D0202,0x02370230,0x023E0239,0x025D024A,0x02860273,
0x02B7029A,0x02F102D6,0x03210309,0x03480337,0x03670357,0x0392037B,0x03BF03A7,0x040903E2,
0x043D0429,0x0461044D,0x04870474,0x04BD04A0,0x04EB04D6,0x050104FA,0x04FC0501,0x04EE04F5,
0x04E304E8,0x04CF04DA,0x04AE04C1,0x048F049D,0x046A0480,0x04290449,0x03DE0406,0x038603B4,
0x03250357,0x02B302EC,0x023B027A,0x01AB01F3,0x01210164,0x009C00DD,0x001C005D,0xFFA1FFDD,
0xFF31FF6A,0xFECDFEFA,0xFE86FEA9,0xFE46FE67,0xFE01FE23,0xFDBCFDDC,0xFD81FD9E,0xFD56FD69,
0xFD3EFD49,0xFD29FD34,0xFD0AFD1A,0xFCF2FCFF,0xFCD3FCE3,0xFC96FCB8,0xFC5EFC78,0xFC36FC4C,
0xFBF8FC18,0xFBCBFBDD,0xFBB3FBBF,0xFBA5FBA9,0xFBA6FBA3,0xFB94FBA2,0xFB6DFB7F,0xFB4DFB5F,
0xFB31FB3B,0xFB30FB2D,0xFB44FB37,0xFB5BFB51,0xFB71FB64,0xFB96FB84,0xFBB8FBA6,0xFBECFBCE,
0xFC36FC11,0xFC7EFC59,0xFCDEFCAB,0xFD4CFD15,0xFDBBFD85,0xFE1FFDED,0xFE86FE51,0xFEE7FEBA,
0xFF3CFF0F,0xFFB1FF74,0x001DFFEB,0x00820050,0x00DA00B0,0x011700FD,0x0143012C,0x017A0160,
0x01A90190,0x01D001BD,0x01FA01E2,0x02330215,0x0264024F,0x02870278,0x0290028D,0x028C0290,
0x028A0286,0x02A20295,0x02CF02B5,0x032102F4,0x0373034C,0x03C1039B,0x040003E1,0x0435041E,
0x04510444,0x04750462,0x04910487,0x04A30497,0x04B804AD,0x04CC04C4,0x04D704D1,0x04E204DB,
0x04D904E3,0x04BE04CB,0x049E04AF,0x046C0488,0x0428044C,0x03CE03FD,0x0364039C,0x02F4032D,
0x028102BD,0x01FC0240,0x017D01BA,0x00FB013E,0x007600B6,0xFFF40034,0xFF78FFB3,0xFF10FF41,
0xFEB0FEE0,0xFE52FE80,0xFE09FE2B,0xFDCAFDE7,0xFD98FDB1,0xFD75FD83,0xFD63FD6E,0xFD3CFD51,
0xFD0EFD26,0xFCDAFCF4,0xFCBAFCC6,0xFCA7FCB0,0xFC88FC9A,0xFC68FC75,0xFC63FC63,0xFC56FC5D,
0xFC4BFC51,0xFC3DFC45,0xFC1EFC30,0xFBFCFC0C,0xFBE3FBED,0xFBC6FBD7,0xFBADFBB6,0xFBA4FBA8,
0xFBA2FBA1,0xFBAEFBA5,0xFBB7FBB3,0xFBC4FBBC,0xFBDDFBCF,0xFBFDFBED,0xFC20FC0D,0xFC5CFC39,
0xFCB3FC86,0xFD0BFCDF,0xFD66FD3A,0xFDAEFD8A,0xFE05FDD7,0xFE73FE39,0xFEE1FEAC,0xFF4AFF16,
0xFFA9FF7C,0xFFF3FFD0,0x00350013,0x0086005C,0x00D600AE,0x011A00F8,0x016C0141,0x01C2019A,
0x01FF01E3,0x022C0215,0x02530241,0x02710263,0x0283027B,0x0296028A,0x02BE02A8,0x02F102D6,
0x033F0315,0x03890368,0x03C103A5,0x03FC03E0,0x04230411,0x0438042E,0x04460441,0x044A044A,
0x045B044F,0x04670464,0x04600464,0x045A045D,0x044C0456,0x0432043E,0x041A0426,0x04040411,
0x03E503F4,0x03C303D6,0x039303AE,0x03490370,0x03030322,0x02C002E4,0x0276029A,0x022B0253,
0x01C401FA,0x0152018B,0x00DF011A,0x006D00A4,0x00060038,0xFFA3FFD5,0xFF37FF6D,0xFEE8FF0B,
0xFEA6FEC8,0xFE5DFE80,0xFE26FE42,0xFDE5FE07,0xFDA4FDC4,0xFD64FD85,0xFD20FD43,0xFCE0FCFD,
0xFCB8FCCA,0xFC9AFCA9,0xFC86FC8D,0xFC6BFC7B,0xFC53FC5F,0xFC39FC44,0xFC1FFC2E,0xFC01FC0E,
0xFBE8FBF4,0xFBD5FBDE,0xFBC4FBCD,0xFBB3FBBC,0xFBABFBAF,0xFBB1FBAA,0xFBC7FBBD,0xFBE1FBD2,
0xFC06FBF4,0xFC2CFC19,0xFC57FC41,0xFC8FFC71,0xFCD3FCAF,0xFD1BFCF7,0xFD65FD3F,0xFDABFD89,
0xFDEFFDCD,0xFE2FFE10,0xFE61FE49,0xFEA2FE7E,0xFEDFFEC3,0xFF22FF00,0xFF63FF42,0xFFB0FF89,
0xFFFEFFD7,0x004A0021,0x009A0073,0x00E000BE,0x01200101,0x01660142,0x01A9018A,0x01DD01C4,
0x01F901EE,0x020F0202,0x02360221,0x02590249,0x028A026D,0x02D002AD,0x031902F5,0x0359033B,
0x03960378,0x03CB03B1,0x040403E9,0x0431041B,0x044C0442,0x045F0457,0x046B0465,0x0471046F,
0x046F0472,0x045F0469,0x043D044E,0x041F042D,0x04000411,0x03E403F1,0x03BC03D3,0x037E039F,
0x03310358,0x02D90308,0x027D02AA,0x02270252,0x01D701FE,0x018001AE,0x01210150,0x00CA00F5,
0x007A00A1,0x00310055,0xFFDF0008,0xFF98FFBB,0xFF59FF78,0xFF27FF3E,0xFEFBFF11,0xFEC5FEE6,
0xFE71FE9B,0xFE2BFE4A,0xFDF1FE0D,0xFDBBFDD5,0xFD8CFDA4,0xFD56FD71,0xFD24FD3C,0xFCF2FD0C,
0xFCCAFCDD,0xFCA3FCB8,0xFC79FC90,0xFC48FC61,0xFC25FC35,0xFC08FC17,0xFBEAFBF8,0xFBDFFBE3,
0xFBD4FBDB,0xFBC3FBCA,0xFBB9FBBB,0xFBBFFBBA,0xFBD2FBC8,0xFBF5FBE2,0xFC1FFC0C,0xFC4DFC34,
0xFC91FC6C,0xFCE0FCB8,0xFD2AFD06,0xFD6EFD4D,0xFDABFD8D,0xFDEAFDC8,0xFE35FE10,0xFE7EFE5A,
0xFEC8FEA1,0xFF0FFEEC,0xFF4FFF2E,0xFF8CFF6E,0xFFCAFFAA,0x000EFFEC,0x0050002F,0x00880070,
0x00B8009F,0x00E700D0,0x011700FD,0x01490131,0x01750161,0x01920186,0x01B001A0,0x01D501C3,
0x020201E8,0x0231021B,0x02530244,0x02760263,0x029E028A,0x02D202B7,0x030902EE,0x03410325,
0x0378035E,0x03A60390,0x03CB03B9,0x03E503DB,0x03F903EE,0x04060401,0x040A0408,0x04050408,
0x03FF0403,0x03F703FB,0x03F103F5,0x03D103E4,0x03A703BD,0x036A038B,0x03240348,0x02E00300,
0x028F02BB,0x022A025D,0x01CB01F9,0x017901A1,0x01250150,0x00CA00F7,0x0071009E,0x001C0045,
0xFFD5FFF9,0xFF8DFFB1,0xFF43FF68,0xFF02FF21,0xFECAFEE6,0xFE95FEAF,0xFE66FE7D,0xFE39FE50,
0xFE0FFE24,0xFDECFDFD,0xFDC0FDD8,0xFD8BFDA5,0xFD5CFD72,0xFD3EFD4C,0xFD26FD32,0xFD04FD17,
0xFCD6FCED,0xFCAEFCBF,0xFC94FC9E,0xFC8CFC8F,0xFC87FC8B,0xFC70FC7E,0xFC5BFC63,0xFC53FC57,
0xFC4CFC4F,0xFC4CFC4A,0xFC5EFC52,0xFC78FC6A,0xFC9DFC89,0xFCC4FCB0,0xFCEBFCD6,0xFD1FFD02,
0xFD58FD3C,0xFD8CFD72,0xFDC1FDA6,0xFDFBFDDE,0xFE42FE1C,0xFE92FE6B,0xFEDDFEB9,0xFF1CFEFE,
0xFF4EFF36,0xFF84FF68,0xFFBDFFA0,0xFFF3FFD9,0x001F0009,0x00530036,0x008C0070,0x00C400A8,
0x00FF00E3,0x012F0119,0x01560142,0x017E016A,0x01A70192,0x01D301BC,0x020101EB,0x021F0211,
0x0238022B,0x02510245,0x02770264,0x02A6028D,0x02D802C1,0x02F502E9,0x030E0302,0x0326031A,
0x03390330,0x03500344,0x035D0358,0x0359035C,0x035E035A,0x03620360,0x03650363,0x035C0361,
0x03480354,0x032C033B,0x0306031A,0x02D602EF,0x02A202BD,0x026A0286,0x022D024E,0x01EE020F,
0x01AE01CE,0x01740191,0x013B0159,0x00F6011A,0x00AD00D1,0x0069008B,0x002A0049,0xFFED000B,
0xFFAEFFCD,0xFF6DFF8E,0xFF2AFF4B,0xFEEEFF0C,0xFEBEFED5,0xFE8BFEA4,0xFE51FE6F,0xFE12FE30,
0xFDDDFDF6,0xFDAAFDC3,0xFD7DFD92,0xFD57FD69,0xFD39FD48,0xFD17FD28,0xFCF5FD06,0xFCDEFCE6,
0xFCDBFCDB,0xFCDCFCDC,0xFCD4FCD7,0xFCCBFCD0,0xFCBFFCC6,0xFCBAFCBA,0xFCC5FCBF,0xFCCBFCC9,
0xFCD6FCD0,0xFCF0FCE2,0xFD13FD00,0xFD3CFD27,0xFD63FD4F,0xFD8AFD76,0xFDB2FD9D,0xFDE5FDCB,
0xFE1BFE00,0xFE5AFE39,0xFE99FE7A,0xFED3FEB7,0xFF04FEEC,0xFF30FF1A,0xFF5BFF46,0xFF85FF70,
0xFFADFF9A,0xFFD4FFC1,0xFFFEFFE9,0x00280011,0x00650045,0x00950080,0x00B700A8,0x00D800C5,
0x010400ED,0x0135011C,0x016A0150,0x01970182,0x01BF01AB,0x01E701D3,0x020C01FA,0x0233021E,
0x025F0249,0x02870272,0x02B1029D,0x02D502C4,0x02ED02E2,0x030002F6,0x0310030A,0x03110312,
0x0309030E,0x03040307,0x03010302,0x02FE0301,0x02F202FA,0x02D602E6,0x02B402C4,0x029702A6,
0x02730286,0x024F0261,0x021E0238,0x01EF0206,0x01C101D8,0x018F01A8,0x015C0176,0x01270142,
0x00EB0108,0x00B200CE,0x007E0097,0x004B0064,0x00210035,0xFFF8000C,0xFFC8FFE1,0xFF97FFB0,
0xFF69FF7E,0xFF49FF58,0xFF24FF37,0xFEF3FF0C,0xFEC0FED9,0xFE8DFEA7,0xFE5BFE73,0xFE2FFE46,
0xFE02FE19,0xFDD1FDE9,0xFDA6FDBA,0xFD82FD93,0xFD61FD71,0xFD47FD53,0xFD2FFD3A,0xFD16FD21,
0xFD06FD0E,0xFCF7FCFF,0xFCEDFCF1,0xFCE8FCEA,0xFCEBFCE8,0xFCF7FCF0,0xFD0FFD02,0xFD2DFD1D,
0xFD50FD3E,0xFD7AFD65,0xFDA2FD8F,0xFDCAFDB4,0xFDF6FDDF,0xFE29FE0E,0xFE64FE47,0xFE93FE7D,
0xFEBFFEA9,0xFEECFED6,0xFF15FF02,0xFF39FF27,0xFF60FF4D,0xFF8CFF75,0xFFBCFFA4,0xFFECFFD3,
0x00230007,0x0052003B,0x007B0067,0x00A0008E,0x00C200B2,0x00E500D4,0x010A00F7,0x0131011D,
0x01560144,0x01720166,0x018B017F,0x01A70199,0x01CA01B6,0x01EC01DC,0x021201FF,0x02340224,
0x02510243,0x026E0260,0x028C027E,0x029A0295,0x02A0029E,0x02A402A3,0x02A702A6,0x02AA02A9,
0x02AD02AB,0x02A702AB,0x029B02A1,0x028A0293,0x0272027E,0x025A0264,0x02430250,0x021C0233,
0x01EF0206,0x01BA01D5,0x018701A0,0x0156016E,0x0121013D,0x00E80105,0x00B000CB,0x00840099,
0x00640073,0x00410053,0x0019002D,0xFFF10004,0xFFC8FFDD,0xFF9EFFB2,0xFF77FF8B,0xFF50FF63,
0xFF23FF39,0xFEF5FF0C,0xFECAFEDF,0xFEA0FEB5,0xFE7BFE8C,0xFE58FE6A,0xFE30FE44,0xFE07FE1B,
0xFDE4FDF5,0xFDCCFDD5,0xFDBAFDC3,0xFDA5FDB1,0xFD8FFD9B,0xFD7FFD85,0xFD74FD79,0xFD72FD72,
0xFD6BFD6F,0xFD67FD68,0xFD69FD66,0xFD77FD6F,0xFD8DFD82,0xFDA0FD96,0xFDB6FDAA,0xFDCDFDC2,
0xFDE9FDD9,0xFE06FDF8,0xFE27FE16,0xFE46FE36,0xFE66FE56,0xFE89FE77,0xFEACFE9A,0xFED9FEC1,
0xFF0BFEF0,0xFF3AFF23,0xFF66FF50,0xFF93FF7C,0xFFC6FFAC,0xFFF9FFE1,0x0021000D,0x00420032,
0x00620051,0x00840072,0x00AB0098,0x00CF00BC,0x00F400E1,0x011B0107,0x0143012F,0x01670155,
0x01890178,0x01AA0199,0x01CD01BB,0x01EF01DD,0x020B01FE,0x02240217,0x0239022F,0x024C0242,
0x02550251,0x02570256,0x02540254,0x02510252,0x024D0250,0x0246024B,0x023B0241,0x022F0236,
0x02210228,0x02100219,0x01FF0209,0x01EA01F5,0x01CE01DC,0x01B101C0,0x019201A3,0x0170017F,
0x01520163,0x01300142,0x0107011B,0x00E300F4,0x00C300D3,0x00A300B4,0x00810092,0x0057006D,
0x002A0040,0x00000014,0xFFD8FFEC,0xFFACFFC2,0xFF83FF98,0xFF59FF6E,0xFF2EFF43,0xFF09FF1B,
0xFEE1FEF5,0xFEB7FECC,0xFE8EFEA2,0xFE66FE79,0xFE43FE54,0xFE27FE34,0xFE0FFE1A,0xFDF9FE04,
0xFDE1FDEC,0xFDCDFDD6,0xFDBDFDC5,0xFDB5FDB8,0xFDB4FDB4,0xFDB7FDB5,0xFDBBFDB9,0xFDC1FDBD,
0xFDCEFDC7,0xFDE0FDD7,0xFDF1FDE8,0xFE03FDFB,0xFE17FE0C,0xFE34FE25,0xFE53FE43,0xFE70FE61,
0xFE89FE7C,0xFEA4FE97,0xFEBEFEB1,0xFEDAFECC,0xFEF5FEE7,0xFF14FF04,0xFF32FF23,0xFF52FF42,
0xFF72FF63,0xFF8FFF81,0xFFAAFF9C,0xFFC5FFB7,0xFFE2FFD4,0x0000FFF0,0x00230011,0x004C0038,
0x00750060,0x009E008A,0x00C500B1,0x00EB00D8,0x011500FF,0x013F012B,0x01640152,0x01820174,
0x01A20191,0x01C601B3,0x01E801D8,0x020301F7,0x0213020C,0x021E0219,0x02290225,0x0236022E,
0x023E023B,0x02410240,0x023A023E,0x022B0234,0x02160220,0x0202020C,0x01ED01F8,0x01D401E1,
0x01B901C6,0x019D01AC,0x0181018F,0x01640171,0x01460156,0x01280138,0x01020114,0x00E400F2,
0x00C900D6,0x00AC00BB,0x008B009B,0x00680079,0x00460057,0x00270037,0x000A0019,0xFFEBFFFA,
0xFFCCFFDB,0xFFB0FFBE,0xFF97FFA3,0xFF7CFF8A,0xFF5AFF6B,0xFF37FF49,0xFF10FF23,0xFEE9FEFC,
0xFEC5FED6,0xFEA6FEB6,0xFE86FE97,0xFE69FE78,0xFE4DFE5A,0xFE34FE41,0xFE22FE2B,0xFE11FE18,
0xFE02FE0A,0xFDF7FDFB,0xFDEDFDF2,0xFDECFDEC,0xFDF3FDEF,0xFDF9FDF5,0xFE00FDFC,0xFE09FE05,
0xFE19FE11,0xFE2EFE23,0xFE47FE3B,0xFE63FE54,0xFE80FE72,0xFE9EFE8F,0xFEBCFEAD,0xFEDAFECB,
0xFEF5FEE8,0xFF0FFF02,0xFF26FF1A,0xFF3FFF33,0xFF5BFF4D,0xFF78FF6A,0xFF92FF85,0xFFABFF9F,
0xFFC3FFB7,0xFFDCFFCF,0xFFFCFFEB,0x0020000D,0x00440033,0x00640054,0x007F0071,0x009A008D,
0x00B600A8,0x00D200C4,0x00ED00DF,0x010900FC,0x01210115,0x013A012E,0x01570147,0x01750166,
0x018D0181,0x01A5019A,0x01B901AF,0x01CE01C3,0x01E001D7,0x01F201E9,0x01FE01F9,0x01FF01FF,
0x01FB01FE,0x01F401F8,0x01E801F0,0x01D901E1,0x01C601D0,0x01B401BD,0x01A101AB,0x018B0197,
0x0170017D,0x01530161,0x01350145,0x01140124,0x00F50104,0x00D400E6,0x00B100C1,0x008F00A2,
0x0069007C,0x004A0058,0x002F003D,0x00150022,0xFFF60006,0xFFD7FFE6,0xFFB8FFC8,0xFFA0FFAC,
0xFF84FF93,0xFF66FF75,0xFF48FF56,0xFF28FF37,0xFF0CFF19,0xFEF3FEFE,0xFEDBFEE8,0xFEC3FED0,
0xFEADFEB8,0xFE98FEA3,0xFE87FE8F,0xFE78FE7E,0xFE69FE70,0xFE5DFE63,0xFE56FE59,0xFE50FE52,
0xFE4CFE4D,0xFE4CFE4C,0xFE4CFE4C,0xFE4CFE4B,0xFE4AFE4B,0xFE50FE4C,0xFE5BFE55,0xFE69FE62,
0xFE7BFE72,0xFE8FFE85,0xFEA5FE9A,0xFEBEFEB1,0xFED5FECA,0xFEEBFEDF,0xFEFFFEF4,0xFF16FF0B,
0xFF2DFF22,0xFF48FF3A,0xFF64FF56,0xFF81FF73,0xFF9DFF8F,0xFFB7FFAB,0xFFD2FFC4,0xFFF1FFE1,
0x00100000,0x00300021,0x004E003F,0x006A005D,0x00830076,0x009E0091,0x00B700AA,0x00CE00C2,
0x00E500DA,0x00FC00F1,0x01130108,0x0126011D,0x013A012F,0x014E0144,0x01600157,0x01730169,
0x0182017B,0x0192018B,0x019C0197,0x01A201A0,0x01A201A3,0x01A101A1,0x019D01A0,0x01960199,
0x018B0190,0x01800185,0x0178017A,0x01710174,0x0165016C,0x0156015F,0x0142014D,0x012B0137,
0x0113011E,0x00FD0109,0x00E600F2,0x00CA00D9,0x00AF00BD,0x009300A1,0x007A0086,0x005E006D,
0x00420050,0x00260034,0x00070017,0xFFE9FFF8,0xFFCBFFDA,0xFFADFFBB,0xFF90FF9F,0xFF72FF80,
0xFF51FF62,0xFF34FF42,0xFF18FF26,0xFEFEFF0B,0xFEE4FEF1,0xFECEFED8,0xFEBBFEC5,0xFEAEFEB6,
0xFEA2FEA7,0xFE97FE9C,0xFE8EFE92,0xFE85FE89,0xFE81FE83,0xFE7FFE7F,0xFE7DFE7D,0xFE7BFE7B,
0xFE7DFE7B,0xFE81FE7F,0xFE8AFE84,0xFE97FE90,0xFEA4FE9D,0xFEB5FEAD,0xFEC5FEBD,0xFED5FECD,
0xFEE6FEDE,0xFEF6FEEE,0xFF07FEFF,0xFF18FF0F,0xFF29FF21,0xFF3EFF33,0xFF54FF48,0xFF69FF5E,
0xFF7FFF74,0xFF92FF89,0xFFA7FF9D,0xFFBBFFB1,0xFFD0FFC5,0xFFE7FFDC,0xFFFFFFF3,0x001A000C,
0x00330028,0x004F0041,0x0069005C,0x00810075,0x009A008D,0x00B200A6,0x00CC00BF,0x00E400D9,
0x00FA00EF,0x010F0104,0x01220119,0x0133012A,0x0144013C,0x0152014C,0x015E0158,0x01670163,
0x016C016A,0x016D016C,0x016F0170,0x016C016E,0x0168016A,0x01640166,0x015E0161,0x01540159,
0x014B014F,0x013E0145,0x012E0137,0x011C0125,0x01080113,0x00F400FE,0x00E000EB,0x00CC00D7,
0x00B800C2,0x00A400AE,0x008E0099,0x00780082,0x0061006C,0x00490054,0x0032003E,0x001E0028,
0x00080013,0xFFF0FFFD,0xFFD9FFE4,0xFFC4FFCE,0xFFA9FFB6,0xFF92FF9D,0xFF77FF84,0xFF5DFF6A,
0xFF42FF4F,0xFF2CFF37,0xFF16FF21,0xFF00FF0B,0xFEEEFEF7,0xFEDEFEE6,0xFECFFED7,0xFEC3FEC8,
0xFEB8FEBD,0xFEAFFEB4,0xFEAAFEAD,0xFEA4FEA7,0xFEA1FEA2,0xFEA2FEA1,0xFEA4FEA2,0xFEAAFEA7,
0xFEB0FEAD,0xFEBDFEB5,0xFEC9FEC2,0xFED6FED0,0xFEE3FEDC,0xFEF0FEE9,0xFF00FEF8,0xFF13FF09,
0xFF24FF1C,0xFF39FF2F,0xFF4EFF44,0xFF63FF59,0xFF7BFF70,0xFF8FFF84,0xFF9FFF97,0xFFB0FFA7,
0xFFC2FFB8,0xFFD6FFCD,0xFFEAFFE0,0xFFFFFFF4,0x00100007,0x0023001A,0x0037002D,0x004A0040,
0x005D0054,0x00720067,0x0085007B,0x0096008D,0x00AB00A1,0x00BC00B3,0x00CF00C6,0x00DE00D7,
0x00EE00E6,0x00FD00F6,0x010C0105,0x01190112,0x0123011E,0x012B0127,0x0132012F,0x01370135,
0x013B013A,0x013D013D,0x013B013C,0x01380139,0x01330136,0x012B012F,0x011F0125,0x01140119,
0x0106010D,0x00F80100,0x00E900F0,0x00D900E2,0x00C600CF,0x00B200BD,0x009E00A8,0x00890094,
0x0073007E,0x005F0069,0x004B0055,0x00360041,0x0022002C,0x000D0017,0xFFFB0004,0xFFE9FFF1,
0xFFD3FFDE,0xFFBEFFC8,0xFFA9FFB4,0xFF95FF9F,0xFF81FF8B,0xFF6FFF78,0xFF5CFF65,0xFF4BFF53,
0xFF3AFF42,0xFF2AFF32,0xFF1CFF23,0xFF0FFF16,0xFF05FF0A,0xFEFAFEFF,0xFEF4FEF7,0xFEECFEEF,
0xFEE8FEEB,0xFEE4FEE6,0xFEE2FEE3,0xFEE1FEE1,0xFEE2FEE1,0xFEE4FEE2,0xFEE8FEE6,0xFEEEFEEB,
0xFEF3FEF1,0xFEFCFEF7,0xFF07FF01,0xFF12FF0B,0xFF1FFF18,0xFF2DFF26,0xFF3DFF36,0xFF4EFF46,
0xFF5EFF56,0xFF6EFF66,0xFF81FF77,0xFF91FF89,0xFFA3FF99,0xFFB6FFAC,0xFFC9FFC0,0xFFDEFFD3,
0xFFF1FFE8,0x0004FFFB,0x0016000D,0x0028001F,0x00390030,0x004A0042,0x005A0052,0x006A0062,
0x007C0072,0x008A0084,0x009A0093,0x00A700A1,0x00B500AD,0x00C200BC,0x00CE00C7,0x00DA00D5,
0x00E500DF,0x00EE00EA,0x00F800F3,0x00FE00FB,0x01020100,0x01030103,0x01050105,0x01040105,
0x01010103,0x00FC00FD,0x00F700FA,0x00EF00F2,0x00E700EA,0x00DE00E3,0x00D500DA,0x00CA00D0,
0x00BF00C5,0x00B300BA,0x00A500AC,0x0097009E,0x0085008E,0x0076007E,0x0066006D,0x0056005E,
0x0046004D,0x0035003F,0x0024002D,0x0012001B,0x0000000A,0xFFF0FFF9,0xFFDCFFE6,0xFFCAFFD3,
0xFFB9FFC2,0xFFA8FFB0,0xFF98FFA0,0xFF86FF8E,0xFF76FF7D,0xFF65FF6E,0xFF56FF5E,0xFF48FF4F,
0xFF3DFF42,0xFF32FF37,0xFF29FF2E,0xFF22FF25,0xFF1CFF1F,0xFF18FF1A,0xFF15FF16,0xFF12FF14,
0xFF11FF11,0xFF10FF10,0xFF13FF11,0xFF15FF14,0xFF1BFF18,0xFF21FF1D,0xFF29FF25,0xFF31FF2D,
0xFF3AFF36,0xFF45FF3E,0xFF50FF4B,0xFF5DFF56,0xFF68FF63,0xFF72FF6D,0xFF7EFF77,0xFF89FF84,
0xFF96FF90,0xFFA4FF9D,0xFFB1FFAB,0xFFC0FFB9,0xFFCEFFC7,0xFFDCFFD5,0xFFEAFFE3,0xFFF9FFF2,
0x00060000,0x0014000C,0x0022001C,0x00320029,0x0042003A,0x0051004A,0x00610059,0x006F0067,
0x007C0075,0x00880082,0x0097008F,0x00A5009E,0x00B200AB,0x00BE00B9,0x00CA00C4,0x00D100CD,
0x00D700D4,0x00DB00DA,0x00DC00DC,0x00DF00DE,0x00DC00DE,0x00DB00DC,0x00D700D9,0x00D200D5,
0x00CC00CF,0x00C600C8,0x00BE00C3,0x00B500B9,0x00AC00B1,0x00A100A6,0x0096009C,0x00880090,
0x007C0082,0x006E0075,0x00620069,0x0055005B,0x00490050,0x003B0043,0x002F0036,0x0023002A,
0x0015001C,0x0008000F,0xFFFC0003,0xFFF1FFF7,0xFFE6FFEB,0xFFDAFFE0,0xFFD0FFD2,0x00000000,
};

+ 3
- 0
examples/HardwareTesting/ADAT_DrumSamplePlayer/AudioSampleTomtom.h 查看文件

@@ -0,0 +1,3 @@
// Audio data converted from WAV file by wav2sketch

extern const unsigned int AudioSampleTomtom[3489];

+ 18
- 6
examples/HardwareTesting/PassThroughUSB/PassThroughUSB.ino 查看文件

@@ -17,13 +17,25 @@ void setup() {
}

void loop() {
// TODO: make PC's volume setting control the SGTL5000 volume...
// read the PC's volume setting
float vol = usb1.volume();

// scale to a nice range (not too loud)
// and adjust the audio shield output volume
if (vol > 0) {
// scale 0 = 1.0 range to:
// 0.3 = almost silent
// 0.8 = really loud
vol = 0.3 + vol * 0.5;
}

// use the scaled volume setting. Delete this for fixed volume.
sgtl5000_1.volume(vol);

delay(100);
}

// A known problem occurs on Macintosh computers, where the Mac's driver
// does not seem to be able to adapt and transmit horribly distorted
// audio to Teensy after a matter of minutes. An imperfect workaround
// can be enabled by editing usb_audio.cpp. Find and uncomment
// "#define MACOSX_ADAPTIVE_LIMIT". More detailed info is available here:
// Teensyduino 1.35 & earlier had a problem with USB audio on Macintosh
// computers. For more info and a workaround:
// https://forum.pjrc.com/threads/34855-Distorted-audio-when-using-USB-input-on-Teensy-3-1?p=110392&viewfull=1#post110392


+ 11
- 1
examples/HardwareTesting/SGTL5000/QuadChannelOutput/QuadChannelOutput.ino 查看文件

@@ -24,11 +24,21 @@ AudioConnection patchCord4(playSdWav2, 1, audioOutput, 3);
AudioControlSGTL5000 sgtl5000_1;
AudioControlSGTL5000 sgtl5000_2;

// Use these with the audio adaptor board
// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);
AudioMemory(10);

+ 20
- 5
examples/HardwareTesting/SdCardTest/SdCardTest.ino 查看文件

@@ -15,6 +15,21 @@
#include <SD.h>
#include <SPI.h>

// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Sd2Card card;
SdVolume volume;
@@ -30,16 +45,16 @@ void setup() {
while (!Serial) ;
delay(50);

// Configure SPI for the audio shield pins
SPI.setMOSI(7); // Audio shield has MOSI on pin 7
SPI.setSCK(14); // Audio shield has SCK on pin 14
// Configure SPI
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);

Serial.begin(9600);
Serial.println("SD Card Test");
Serial.println("------------");

// First, detect the card
status = card.init(SPI_FULL_SPEED, 10); // Audio shield has SD card SD on pin 10
status = card.init(SPI_FULL_SPEED, SDCARD_CS_PIN);
if (status) {
Serial.println("SD card is connected :-)");
} else {
@@ -70,7 +85,7 @@ void setup() {
Serial.println(" Mbytes.");

// Now open the SD card normally
status = SD.begin(10); // Audio shield has SD card CS on pin 10
status = SD.begin(SDCARD_CS_PIN);
if (status) {
Serial.println("SD library is able to access the filesystem");
} else {

+ 11
- 1
examples/HardwareTesting/WavFilePlayerUSB/WavFilePlayerUSB.ino 查看文件

@@ -11,11 +11,21 @@ AudioConnection patchCord1(playWav1, 0, audioOutput, 0);
AudioConnection patchCord2(playWav1, 1, audioOutput, 1);
AudioConnection patchCord3(playWav1, 0, dac, 0);

// Use these with the audio adaptor board
// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);


+ 23
- 3
examples/Recorder/Recorder.ino 查看文件

@@ -30,6 +30,9 @@ AudioConnection patchCord4(playRaw1, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; //xy=265,212
// GUItool: end automatically generated code

// For a stereo recording version, see this forum thread:
// https://forum.pjrc.com/threads/46150?p=158388&viewfull=1#post158388

// Bounce objects to easily and reliably read the buttons
Bounce buttonRecord = Bounce(0, 8);
Bounce buttonStop = Bounce(1, 8); // 8 = 8 ms debounce time
@@ -40,6 +43,23 @@ Bounce buttonPlay = Bounce(2, 8);
const int myInput = AUDIO_INPUT_LINEIN;
//const int myInput = AUDIO_INPUT_MIC;


// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13


// Remember which mode we're doing
int mode = 0; // 0=stopped, 1=recording, 2=playing

@@ -62,9 +82,9 @@ void setup() {
sgtl5000_1.volume(0.5);

// Initialize the SD card
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
// stop here if no SD card, but print a message
while (1) {
Serial.println("Unable to access the SD card");

+ 3
- 0
examples/Synthesis/Guitar/chords.h 查看文件

@@ -32,6 +32,9 @@
#define NOTE_As4 466.16
#define NOTE_B4 493.88

// The equation for note to frequency is:
// float freq = 440.0f * exp2f((float)(note - 69) * 0.0833333f);

// according to http://www.guitar-chords.org.uk/
// and http://www.8notes.com/guitar_chord_chart/c.asp
//

+ 19
- 3
examples/Tutorial/Part_1_03_Playing_Music/Part_1_03_Playing_Music.ino 查看文件

@@ -20,14 +20,30 @@ AudioConnection patchCord1(playSdWav1, 0, i2s1, 0);
AudioConnection patchCord2(playSdWav1, 1, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1;

// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13


void setup() {
Serial.begin(9600);
AudioMemory(8);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 18
- 3
examples/Tutorial/Part_1_04_Blink_While_Playing/Part_1_04_Blink_While_Playing.ino 查看文件

@@ -23,14 +23,29 @@ AudioConnection patchCord1(playSdWav1, 0, audioOutput, 0);
AudioConnection patchCord2(playSdWav1, 1, audioOutput, 1);
AudioControlSGTL5000 sgtl5000_1;

// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);
AudioMemory(8);
sgtl5000_1.enable();
sgtl5000_1.volume(0.45);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 18
- 3
examples/Tutorial/Part_1_05_Do_More_While_Playing/Part_1_05_Do_More_While_Playing.ino 查看文件

@@ -25,14 +25,29 @@ AudioControlSGTL5000 sgtl5000_1;
Bounce button0 = Bounce(0, 15);
Bounce button2 = Bounce(2, 15); // 15 = 15 ms debounce time

// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);
AudioMemory(8);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 18
- 3
examples/Tutorial/Part_2_01_First_Design_Tool_Use/Part_2_01_First_Design_Tool_Use.ino 查看文件

@@ -12,14 +12,29 @@



// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);
AudioMemory(8);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 18
- 3
examples/Tutorial/Part_2_02_Mixers/Part_2_02_Mixers.ino 查看文件

@@ -13,14 +13,29 @@



// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);
AudioMemory(8);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 18
- 3
examples/Tutorial/Part_2_07_Filters/Part_2_07_Filters.ino 查看文件

@@ -15,6 +15,21 @@



// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13


// Bounce objects to read pushbuttons
Bounce button0 = Bounce(0, 15);
@@ -29,9 +44,9 @@ void setup() {
AudioMemory(12);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 18
- 3
examples/Tutorial/Part_3_01_Peak_Detection/Part_3_01_Peak_Detection.ino 查看文件

@@ -13,14 +13,29 @@



// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);
AudioMemory(10);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 17
- 3
examples/Tutorial/Part_3_02_Fourier_Transform/Part_3_02_Fourier_Transform.ino 查看文件

@@ -20,15 +20,29 @@ Bounce button2 = Bounce(2, 15);



// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);
AudioMemory(10);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 18
- 3
examples/Tutorial/Part_3_03_TFT_Display/Part_3_03_TFT_Display.ino 查看文件

@@ -26,6 +26,21 @@
ILI9341_t3 tft = ILI9341_t3(TFT_CS, TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_MISO);


// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);
delay(500);
@@ -40,9 +55,9 @@ void setup() {
AudioMemory(10);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SPI.setMOSI(7);
SPI.setSCK(14);
if (!(SD.begin(10))) {
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
delay(500);

+ 18
- 3
examples/Tutorial/TestTutorialKit/TestTutorialKit.ino 查看文件

@@ -45,6 +45,21 @@ Bounce button0 = Bounce(0, 15);
Bounce button1 = Bounce(1, 15);
Bounce button2 = Bounce(2, 15);

// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

int mode;
int count=1;
int a1=0, a2=0, a3=0;
@@ -59,8 +74,8 @@ void setup() {
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
Serial.begin(115200);
SPI.setMOSI(7);
SPI.setSCK(14);
SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
sgtl5000_1.inputSelect(AUDIO_INPUT_MIC);
@@ -158,7 +173,7 @@ void loop() {
mixer1.gain(0, 0);
mixer2.gain(0, 0);
if (sdcardinit) {
if (!(SD.begin(10))) {
if (!(SD.begin(SDCARD_CS_PIN))) {
while (1) {
Serial.println("Unable to access the SD card");
if (playsamples) sample1.play(AudioSampleNosdcard);

+ 6
- 1
examples/WavFilePlayer/WavFilePlayer.ino 查看文件

@@ -40,11 +40,16 @@ AudioConnection patchCord1(playWav1, 0, audioOutput, 0);
AudioConnection patchCord2(playWav1, 1, audioOutput, 1);
AudioControlSGTL5000 sgtl5000_1;

// Use these with the audio adaptor board
// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11

+ 9
- 2
extras/wav2sketch/wav2sketch.c 查看文件

@@ -42,7 +42,7 @@ uint32_t read_uint32(FILE *in);
void die(const char *format, ...) __attribute__ ((format (printf, 1, 2)));

// WAV file format:
// https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
// http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

const char *filename="";
char samplename[64];
@@ -56,14 +56,16 @@ void wav2c(FILE *in, FILE *out, FILE *outh)
int16_t format, channels, bits;
uint32_t rate;
uint32_t i, length, padlength=0, arraylen;
uint32_t chunkSize;
int32_t audio=0;

// read the WAV file's header
for (i=0; i<5; i++) {
header[i] = read_uint32(in);
}
chunkSize = header[4];
if (header[0] != 0x46464952 || header[2] != 0x45564157
|| header[3] != 0x20746D66 || header[4] != 0x00000010) {
|| header[3] != 0x20746D66 || !(chunkSize == 16 || chunkSize == 18 || chunkSize == 40)) {
die("error in format of file %s", filename);
}

@@ -85,6 +87,11 @@ void wav2c(FILE *in, FILE *out, FILE *outh)
if (bits != 16)
die("file %s has %d bit format, but only 16 is supported", filename, bits);

// skip past any extra data on the WAVE header (hopefully it doesn't matter?)
for (chunkSize -= 16; chunkSize > 0; chunkSize--) {
read_uint8(in);
}

// read the data header, skip non-audio data
while (1) {
header[0] = read_uint32(in);

+ 1
- 0
filter_biquad.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "filter_biquad.h"
#include "utility/dspinst.h"


+ 1
- 0
filter_fir.cpp 查看文件

@@ -20,6 +20,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "filter_fir.h"



+ 1
- 0
filter_variable.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "filter_variable.h"
#include "utility/dspinst.h"


二进制
gui/img/adat.jpg 查看文件

之前 之后
宽度: 240  |  高度: 196  |  大小: 13KB

二进制
gui/img/cs42448.jpg 查看文件

之前 之后
宽度: 240  |  高度: 186  |  大小: 12KB

二进制
gui/img/pwm.png 查看文件

之前 之后
宽度: 240  |  高度: 146  |  大小: 15KB

二进制
gui/img/tdm.jpg 查看文件

之前 之后
宽度: 240  |  高度: 143  |  大小: 12KB

二进制
gui/img/waveshaper.png 查看文件

之前 之后
宽度: 240  |  高度: 135  |  大小: 9.7KB

+ 377
- 26
gui/index.html 查看文件

@@ -349,15 +349,18 @@ span.mainfunction {color: #993300; font-weight: bolder}
{"type":"AudioInputAnalog","data":{"defaults":{"name":{"value":"new"}},"shortName":"adc","inputs":0,"outputs":1,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioInputAnalogStereo","data":{"defaults":{"name":{"value":"new"}},"shortName":"adcs","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioInputI2Sslave","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2sslave","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioInputTDM","data":{"defaults":{"name":{"value":"new"}},"shortName":"tdm","inputs":0,"outputs":16,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioInputUSB","data":{"defaults":{"name":{"value":"new"}},"shortName":"usb","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputI2S","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2s","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputI2SQuad","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2s_quad","inputs":4,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputSPDIF","data":{"defaults":{"name":{"value":"new"}},"shortName":"spdif","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputPT8211","data":{"defaults":{"name":{"value":"new"}},"shortName":"pt2811","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputPT8211","data":{"defaults":{"name":{"value":"new"}},"shortName":"pt8211","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputAnalog","data":{"defaults":{"name":{"value":"new"}},"shortName":"dac","inputs":1,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputAnalogStereo","data":{"defaults":{"name":{"value":"new"}},"shortName":"dacs","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputPWM","data":{"defaults":{"name":{"value":"new"}},"shortName":"pwm","inputs":1,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputI2Sslave","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2sslave","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputTDM","data":{"defaults":{"name":{"value":"new"}},"shortName":"tdm","inputs":16,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputADAT","data":{"defaults":{"name":{"value":"new"}},"shortName":"adat","inputs":8,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioOutputUSB","data":{"defaults":{"name":{"value":"new"}},"shortName":"usb","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioMixer4","data":{"defaults":{"name":{"value":"new"}},"shortName":"mixer","inputs":4,"outputs":1,"category":"mixer-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioPlayMemory","data":{"defaults":{"name":{"value":"new"}},"shortName":"playMem","inputs":0,"outputs":1,"category":"play-function","color":"#E6E0F8","icon":"arrow-in.png"}},
@@ -372,6 +375,7 @@ span.mainfunction {color: #993300; font-weight: bolder}
{"type":"AudioSynthWaveformSineHires","data":{"defaults":{"name":{"value":"new"}},"shortName":"sine_hires","inputs":0,"outputs":2,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioSynthWaveformSineModulated","data":{"defaults":{"name":{"value":"new"}},"shortName":"sine_fm","inputs":1,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioSynthWaveform","data":{"defaults":{"name":{"value":"new"}},"shortName":"waveform","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioSynthWaveformPWM","data":{"defaults":{"name":{"value":"new"}},"shortName":"pwm","inputs":1,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioSynthToneSweep","data":{"defaults":{"name":{"value":"new"}},"shortName":"tonesweep","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioSynthWaveformDc","data":{"defaults":{"name":{"value":"new"}},"shortName":"dc","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioSynthNoiseWhite","data":{"defaults":{"name":{"value":"new"}},"shortName":"noise","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}},
@@ -386,6 +390,7 @@ span.mainfunction {color: #993300; font-weight: bolder}
{"type":"AudioEffectDelayExternal","data":{"defaults":{"name":{"value":"new"}},"shortName":"delayExt","inputs":1,"outputs":8,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectBitcrusher","data":{"shortName":"bitcrusher","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectMidSide","data":{"shortName":"midside","inputs":2,"outputs":2,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectWaveshaper","data":{"shortName":"waveshape","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioFilterBiquad","data":{"defaults":{"name":{"value":"new"}},"shortName":"biquad","inputs":1,"outputs":1,"category":"filter-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioFilterFIR","data":{"defaults":{"name":{"value":"new"}},"shortName":"fir","inputs":1,"outputs":1,"category":"filter-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioFilterStateVariable","data":{"defaults":{"name":{"value":"new"}},"shortName":"filter","inputs":2,"outputs":3,"category":"filter-function","color":"#E6E0F8","icon":"arrow-in.png"}},
@@ -400,7 +405,8 @@ span.mainfunction {color: #993300; font-weight: bolder}
{"type":"AudioControlAK4558","data":{"defaults":{"name":{"value":"new"}},"shortName":"ak4558","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioControlCS4272","data":{"defaults":{"name":{"value":"new"}},"shortName":"cs4272","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioControlWM8731","data":{"defaults":{"name":{"value":"new"}},"shortName":"wm8731","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioControlWM8731master","data":{"defaults":{"name":{"value":"new"}},"shortName":"wm8731m","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}}
{"type":"AudioControlWM8731master","data":{"defaults":{"name":{"value":"new"}},"shortName":"wm8731m","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioControlCS42448","data":{"defaults":{"name":{"value":"new"}},"shortName":"cs42448","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}}
]}
</script>

@@ -538,6 +544,10 @@ span.mainfunction {color: #993300; font-weight: bolder}
<p>Signal range is 0 to 1.2V</p>
<p>With a <a href="https://forum.pjrc.com/threads/40468-Help-with-Basic-Audio-Lib-results?p=126317&viewfull=1#post126317">small modification</a> Adafruit's <a href="https://www.adafruit.com/products/1063">MAX4466 microphone</a> can be used</p>
<p align=center><a href="https://forum.pjrc.com/threads/40468-Help-with-Basic-Audio-Lib-results?p=126317&viewfull=1#post126317"><img src="img/adccircuitmic.jpg" border=0></a></p>
<p>Control Voltage (CV) from +5V to -5V can be adapted with a
<a href="https://www.dorkbotpdx.org/blog/paul/control_voltage_cv_to_analog_input_pin">simple circuit</a>
or better <a href="https://forum.pjrc.com/threads/28423?p=71257&viewfull=1#post71257">opamp-based circuity</a>
to Teensy's 0-1.2V analog input range.</p>
<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; HardwareTesting &gt; PassThroughMono
</p>
@@ -593,6 +603,10 @@ span.mainfunction {color: #993300; font-weight: bolder}
<p>By default, pins A2 & A3 are used for audio input. This circuitry is recommended.</p>
<p align=center><img src="img/adccircuit2.png"></p>
<p>Signal range is 0 to 1.2V</p>
<p>Control Voltage (CV) from +5V to -5V can be adapted with a
<a href="https://www.dorkbotpdx.org/blog/paul/control_voltage_cv_to_analog_input_pin">simple circuit</a>
or better <a href="https://forum.pjrc.com/threads/28423?p=71257&viewfull=1#post71257">opamp-based circuity</a>
to Teensy's 0-1.2V analog input range.</p>
<h3>Examples</h3>
<!--
<p class=exam>File &gt; Examples &gt; Audio &gt; HardwareTesting &gt; PassThroughMono
@@ -679,6 +693,70 @@ span.mainfunction {color: #993300; font-weight: bolder}
</div>
</script>

<script type="text/x-red" data-help-name="AudioInputTDM">
<h3>Summary</h3>
<div class=tooltipinfo>
<p>Receive a 256 bit Time Division Multiplexed frame containing
many audio channels.</p>
<p align=center><img src="img/tdm.jpg"></p>
</div>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Purpose</th></tr>
<tr class=odd><td align=center>Out 0</td><td>Bits 0 to 15</td></tr>
<tr class=odd><td align=center>Out 1</td><td>Bits 16 to 31</td></tr>
<tr class=odd><td align=center>Out 2</td><td>Bits 32 to 47</td></tr>
<tr class=odd><td align=center>Out 3</td><td>Bits 48 to 63</td></tr>
<tr class=odd><td align=center>Out 4</td><td>Bits 64 to 79</td></tr>
<tr class=odd><td align=center>Out 5</td><td>Bits 80 to 95</td></tr>
<tr class=odd><td align=center>Out 6</td><td>Bits 96 to 111</td></tr>
<tr class=odd><td align=center>Out 7</td><td>Bits 112 to 127</td></tr>
<tr class=odd><td align=center>Out 8</td><td>Bits 128 to 143</td></tr>
<tr class=odd><td align=center>Out 9</td><td>Bits 144 to 159</td></tr>
<tr class=odd><td align=center>Out 10</td><td>Bits 160 to 175</td></tr>
<tr class=odd><td align=center>Out 11</td><td>Bits 176 to 191</td></tr>
<tr class=odd><td align=center>Out 12</td><td>Bits 192 to 207</td></tr>
<tr class=odd><td align=center>Out 13</td><td>Bits 208 to 223</td></tr>
<tr class=odd><td align=center>Out 14</td><td>Bits 224 to 239</td></tr>
<tr class=odd><td align=center>Out 15</td><td>Bits 240 to 255</td></tr>
</table>
<h3>Functions</h3>
<p>This object has no functions to call from the Arduino sketch. It
simply streams data from the TDM hardware to its 16 output ports.</p>
<h3>Hardware</h3>
<p>TDM has been tested with this <a href="https://oshpark.com/shared_projects/2Yj6rFaW">
CS42448 Circuit Board</a>. It may also work with
<a href="https://forum.pjrc.com/threads/42894">Invensense ICS-52000 microphones</a>.
</p>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
<tr class=odd><td align=center>9</td><td>BCLK</td><td>Output, 11.3 MHz</td></tr>
<tr class=odd><td align=center>11</td><td>MCLK</td><td>Output, 22.6 MHz</td></tr>
<tr class=odd><td align=center>13</td><td>RX</td><td>Input, 11.3 Mbit/sec</td></tr>
<tr class=odd><td align=center>23</td><td>FS</td><td>Output</td></tr>
</table>
<p>Audio from
master mode TDM may be used in the same project as ADC, DAC and
PWM signals, because all remain in sync to Teensy's timing</p>
<!--<h3>Examples</h3>-->
<h3>Notes</h3>
<p>Only one TDM input and one TDM output object may be used. The
I2S hardware is used by TDM, so TDM objects may not be used
together with I2S, SPDIF or PT8211.</p>
<p>When used with TDM devices which transmit 32 bit audio, the
even numbered channels will contain the useful upper 16
bits of audio data.</p>
<p>AudioMemory should be at least 16. Even if most channels are
unused, this TDM object will need to allocate 16 blocks of
memory.</p>
</script>
<script type="text/x-red" data-template-name="AudioInputTDM">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>

<script type="text/x-red" data-help-name="AudioInputUSB">
<h3>Summary</h3>
<div class=tooltipinfo>
@@ -693,8 +771,12 @@ span.mainfunction {color: #993300; font-weight: bolder}
<tr class=odd><td align=center>Out 1</td><td>Right Channel</td></tr>
</table>
<h3>Functions</h3>
<p>This object has no functions to call from the Arduino sketch. It
simply streams data from the USB to its 2 output ports.</p>
<p class=func><span class=keyword>volume</span>();</p>
<p class=desc>Returns the volume setting requested by the USB host.
Range is 0 to 1.0. To make the PC's volume control work, this
setting should be read periodically and used to control the
system processing the signal.
</p>
<!--
<h3>Hardware</h3>
-->
@@ -708,10 +790,6 @@ span.mainfunction {color: #993300; font-weight: bolder}
<p>USB input &amp; output does not cause the Teensy Audio Library to
update. At least one non-USB input or output object must be
present for the entire library to update properly.</p>
<p>A known problem exists with USB audio from Macintosh computers.
An imperfect <a href="https://forum.pjrc.com/threads/34855-Distorted-audio-when-using-USB-input-on-Teensy-3-1?p=110392&viewfull=1#post110392">workaround
can be enabled by editing usb_audio.cpp</a>.
Find and uncomment "#define MACOSX_ADAPTIVE_LIMIT".</p>
</script>
<script type="text/x-red" data-template-name="AudioInputUSB">
<div class="form-row">
@@ -904,7 +982,7 @@ span.mainfunction {color: #993300; font-weight: bolder}
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
<tr class=odd><td align=center>9</td><td>BCK</td><td>Output</td></tr>
<tr class=odd><td align=center>22</td><td>DIN</td><td>Output</td></tr>
<tr class=odd><td align=center>23</td><td>WS</td><td>Output</td></tr>
<tr class=odd><td align=center>23</td><td>FS</td><td>Output</td></tr>
</table>
<p>More information can be found in the PT8211 datasheet.
</p>
@@ -1121,6 +1199,111 @@ span.mainfunction {color: #993300; font-weight: bolder}
</div>
</script>

<script type="text/x-red" data-help-name="AudioOutputTDM">
<h3>Summary</h3>
<div class=tooltipinfo>
<p>Transmit a 256 bit Time Division Multiplexed frame containing
many audio channels.</p>
<p align=center><img src="img/tdm.jpg"></p>
</div>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Purpose</th></tr>
<tr class=odd><td align=center>In 0</td><td>Bits 0 to 15</td></tr>
<tr class=odd><td align=center>In 1</td><td>Bits 16 to 31</td></tr>
<tr class=odd><td align=center>In 2</td><td>Bits 32 to 47</td></tr>
<tr class=odd><td align=center>In 3</td><td>Bits 48 to 63</td></tr>
<tr class=odd><td align=center>In 4</td><td>Bits 64 to 79</td></tr>
<tr class=odd><td align=center>In 5</td><td>Bits 80 to 95</td></tr>
<tr class=odd><td align=center>In 6</td><td>Bits 96 to 111</td></tr>
<tr class=odd><td align=center>In 7</td><td>Bits 112 to 127</td></tr>
<tr class=odd><td align=center>In 8</td><td>Bits 128 to 143</td></tr>
<tr class=odd><td align=center>In 9</td><td>Bits 144 to 159</td></tr>
<tr class=odd><td align=center>In 10</td><td>Bits 160 to 175</td></tr>
<tr class=odd><td align=center>In 11</td><td>Bits 176 to 191</td></tr>
<tr class=odd><td align=center>In 12</td><td>Bits 192 to 207</td></tr>
<tr class=odd><td align=center>In 13</td><td>Bits 208 to 223</td></tr>
<tr class=odd><td align=center>In 14</td><td>Bits 224 to 239</td></tr>
<tr class=odd><td align=center>In 15</td><td>Bits 240 to 255</td></tr>
</table>
<h3>Functions</h3>
<p>This object has no functions to call from the Arduino sketch. It
simply streams data from its 16 input ports to the TDM hardware.</p>
<h3>Hardware</h3>
<p>TDM has been tested with this <a href="https://oshpark.com/shared_projects/2Yj6rFaW">
CS42448 Circuit Board</a>.
</p>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
<tr class=odd><td align=center>9</td><td>BCLK</td><td>Output, 11.3 MHz</td></tr>
<tr class=odd><td align=center>11</td><td>MCLK</td><td>Output, 22.6 MHz</td></tr>
<tr class=odd><td align=center>22</td><td>TX</td><td>Output, 11.3 Mbit/sec</td></tr>
<tr class=odd><td align=center>23</td><td>WS</td><td>Output</td></tr>
</table>
<p>Audio from
master mode TDM may be used in the same project as ADC, DAC and
PWM signals, because all remain in sync to Teensy's timing</p>
<!--<h3>Examples</h3>-->
<h3>Notes</h3>
<p>Only one TDM input and one TDM output object may be used. The
I2S hardware is used by TDM, so TDM objects may not be used
together with I2S, SPDIF or PT8211.</p>
<p>When used with TDM devices which receive 32 bit audio, the
even numbered channels are used for the top 16 bits.</p>
</script>
<script type="text/x-red" data-template-name="AudioOutputTDM">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>

<script type="text/x-red" data-help-name="AudioOutputADAT">
<h3>Summary</h3>
<div class=tooltipinfo>
<p>Transmit ADAT TOSLINK Optical Output</p>
<p align=center><img src="img/adat.jpg"></p>
</div>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Purpose</th></tr>
<tr class=odd><td align=center>In 0</td><td>Channel 1</td></tr>
<tr class=odd><td align=center>In 1</td><td>Channel 2</td></tr>
<tr class=odd><td align=center>In 2</td><td>Channel 3</td></tr>
<tr class=odd><td align=center>In 3</td><td>Channel 4</td></tr>
<tr class=odd><td align=center>In 4</td><td>Channel 5</td></tr>
<tr class=odd><td align=center>In 5</td><td>Channel 6</td></tr>
<tr class=odd><td align=center>In 6</td><td>Channel 7</td></tr>
<tr class=odd><td align=center>In 7</td><td>Channel 8</td></tr>
</table>
<h3>Functions</h3>
<p>This object has no functions to call from the Arduino sketch. It
simply streams data from its 8 input ports to the TOSLINK output.</p>
<h3>Hardware</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
<tr class=odd><td align=center>22</td><td>TX</td><td>TOSLINK Signal</td></tr>
</table>
<p>For optical TOSLINK output, this
<a href="https://www.oshpark.com/shared_projects/KcDBKHta" target="_blank">OSH Park board</a>
can be used with the inexpensive Everlight PLT133/T6A connector, available
at Digikey, 1080-1434-ND.
</p>
<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; HardwareTesting &gt; ADAT_DrumSamplePlayer
</p>
<h3>Notes</h3>
<p>ADAT output was contributed by Ernstjan Freriks. See <a href="https://forum.pjrc.com/threads/28639-S-pdif?p=159530&viewfull=1#post159530">this forum thread</a> for details.</p>
<p>A <a href="https://www.youtube.com/watch?v=e5ov3q02zxo">Youtube video</a>
also demonstrates how it works.</p>
</script>
<script type="text/x-red" data-template-name="AudioOutputADAT">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>

<script type="text/x-red" data-help-name="AudioOutputUSB">
<h3>Summary</h3>
<div class=tooltipinfo>
@@ -1180,10 +1363,11 @@ span.mainfunction {color: #993300; font-weight: bolder}
<h3>Functions</h3>
<p class=func><span class=keyword>gain</span>(channel, level);</p>
<p class=desc>Adjust the amplification or attenuation. "channel" must
be 0 to 3. "level" may be any floating point number from 0 to 32767.
be 0 to 3. "level" may be any floating point number from 0 to 32767.0.
1.0 passes the signal through directly. Level of 0 shuts the channel
off completely. Between 0 to 1.0 attenuates the signal, and above
1.0 amplifies it. All 4 channels have separate settings.
1.0 amplifies it. Negative numbers may also be used, to invert the
signal. All 4 channels have separate gain settings.
</p>
<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; SamplePlayer
@@ -1251,6 +1435,8 @@ span.mainfunction {color: #993300; font-weight: bolder}
<p class=exam>File &gt; Examples &gt; Audio &gt; SamplePlayer
</p>
<h3>Notes</h3>
<p><a href="https://forum.pjrc.com/threads/42401-Instructions-or-tutorials-for-using-wav2sketch?p=135069&viewfull=1#post135069">Step by step instructions for wav2sketch</a>
running in Terminal on Macintosh.</p>
<p>TODO: supported sample rates: 11.025, 22.05, 44.1</p>
<p>TODO: ulaw vs uncompressed encoding</p>
<p>Polyphonic playback can be built by creating multiple
@@ -1837,6 +2023,47 @@ The actual packets are taken
</div>
</script>

<script type="text/x-red" data-help-name="AudioSynthWaveformPWM">
<h3>Summary</h3>
<div class=tooltipinfo>
<p>Create a Pulse Width Modulated waveform, with an audio signal
controlling the pulse width duty cycle.</p>
<p align=center><img src="img/pwm.png"></p>
</div>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Purpose</th></tr>
<tr class=odd><td align=center>In 0</td><td>Control Signal Output</td></tr>
<tr class=odd><td align=center>Out 0</td><td>Waveform Output</td></tr>
</table>
<p>The duty cycle is 50% when the control waveform is zero.
As the control input causes a linear changes in PWM duty
cycle, from nearly 0 to 100% over -1.0 to +1.0 range.
See the notes below for minimum and maximum limitations.
</p>
<h3>Functions</h3>
<p class=func><span class=keyword>frequency</span>(freq);</p>
<p class=desc>Change the frequency.
</p>
<p class=func><span class=keyword>amplitude</span>(level);</p>
<p class=desc>Change the amplitude. Set to 0 to turn the signal off.
</p>
<h3>Examples</h3>
<p class=exam>TODO, examples needed
</p>
<h3>Notes</h3>
<p>The maximum duty cycle is 65536 samples high followed by
one sample low (99.9985%) and the minimum duty cycle is
1 sample high followed by 65536 samples low (0.00153%).
</p>
</script>
<script type="text/x-red" data-template-name="AudioSynthWaveformPWM">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>

<script type="text/x-red" data-help-name="AudioSynthToneSweep">
<h3>Summary</h3>
<div class=tooltipinfo>
@@ -1850,16 +2077,20 @@ The actual packets are taken
<h3>Functions</h3>
<p class=func><span class=keyword>play</span>(level, lowFreq, highFreq, time);</p>
<p class=desc>Start generating frequency sweep output. The time is specified
in milliseconds. Level is 0 to 1.0.
in seconds. Level is 0 to 1.0.
</p>
<p class=func><span class=keyword>isPlaying</span>();</p>
<p class=desc>Returns true (non-zero) while the output is active.
</p>
<p class=func><span class=keyword>read</span>();</p>
<p class=desc>Returns the current frequency, or zero if the output is not active.
</p>
<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; HardwareTesting &gt; ToneSweep
</p>
<h3>Notes</h3>
<p>Uses excessive CPU time</p>
<p>Uses excessive CPU time.</p>
<p>The frequency actually changes in discrete steps every 128 samples (2.9 ms).</p>
</script>
<script type="text/x-red" data-template-name="AudioSynthToneSweep">
<div class="form-row">
@@ -1891,6 +2122,10 @@ The actual packets are taken
be specified, but periods longer than 1 second may be automatically
shortened for small level changes, due to numerical precision limits.
</p>
<p class=func><span class=keyword>read</span>();</p>
<p class=desc>Read the current level. Returns -1.0 to 1.0. This can be
useful for monitoring the amplitude after configuring a slow change.
</p>
<!--
<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt;
@@ -2062,7 +2297,7 @@ The actual packets are taken
the original voice (so, 2 and up to get a chorus effect, although you can
specify 1 if you want).
</p>
<p class=func><span class=keyword>modify</span>(n_chorus);</p>
<p class=func><span class=keyword>voices</span>(n_chorus);</p>
<p class=desc>Alters the number of voices in a running chorus (previously started with begin).
</p>
<h3>Examples</h3>
@@ -2199,21 +2434,34 @@ double s_freq = .0625;</p>
default is zero, for no delay.
</p>
<p class=func><span class=keyword>attack</span>(milliseconds);</p>
<p class=desc>Set the attack time. The default is 1.5 milliseconds.
<p class=desc>Set the attack time. The default is 10.5 milliseconds.
The maximum is 11880 milliseconds.
</p>
<p class=func><span class=keyword>hold</span>(milliseconds);</p>
<p class=desc>Set the hold time. The default is 0.5 milliseconds.
<p class=desc>Set the hold time. The default is 2.5 milliseconds.
The maximum is 11880 milliseconds.
</p>
<p class=func><span class=keyword>decay</span>(milliseconds);</p>
<p class=desc>Set the decay time. The default is 15 milliseconds.
<p class=desc>Set the decay time. The default is 35 milliseconds.
The maximum is 11880 milliseconds.
</p>
<p class=func><span class=keyword>sustain</span>(level);</p>
<p class=desc>Set the sustain level. The range is 0 to 1.0. The
gain will be maintained at this level after the decay phase,
until noteOff() is called.
until noteOff() is called. The sustain phase may last any
length of time, controlled by when release() is called.
</p>
<p class=func><span class=keyword>release</span>(milliseconds);</p>
<p class=desc>Set the release time. The default is 30 millisecond.
<p class=desc>Set the release time. The default is 300 millisecond.
The maximum is 11880 milliseconds.
</p>
<p class=func><span class=keyword>releaseNoteOn</span>(milliseconds);</p>
<p class=desc>Set a quick release time to be used when a new note is
started while the envelop is in any state passing the signal.
This will add latency before your new attack phase begins, so
short times are recommended. Zero may be used to completely
disable this feature (never extra latency). Longer times help
reduce clicks or pops. The default is 5 millisecond.
</p>
<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; Synthesis &gt; PlaySynthMusic
@@ -2225,9 +2473,6 @@ double s_freq = .0625;</p>
<h3>Notes</h3>
<p>To achieve the more common ADSR shape, simply
set delay and hold to zero.</p>
<p>The recommended range for each of the 5 timing inputs is 0 to 50
milliseconds. Up to 200 ms can be used, with somewhat reduced
accuracy</p>
</script>
<script type="text/x-red" data-template-name="AudioEffectEnvelope">
<div class="form-row">
@@ -2294,7 +2539,7 @@ double s_freq = .0625;</p>
<h3>Functions</h3>
<p class=func><span class=keyword>delay</span>(channel, milliseconds);</p>
<p class=desc>Set output channel (0 to 7) to delay the signals by
milliseconds. The maximum delay is approx 425 ms. The actual delay
milliseconds. See the table below for the maximum delay. The actual delay
is rounded to the nearest sample. Each channel can be configured for
any delay. There is no requirement to configure the "taps" in increasing
delay order.
@@ -2310,9 +2555,19 @@ double s_freq = .0625;</p>
<h3>Notes</h3>
<p>Memory for the delayed signal is take from the memory pool allocated by
<a href="http://www.pjrc.com/teensy/td_libs_AudioConnection.html" target="_blank">AudioMemory()</a>.
Each block allows about 3 milliseconds of delay, so AudioMemory
Each block allows about 2.9 milliseconds of delay, so AudioMemory
should be increased to allow for the longest delay tap.
</p>
<p>Each board has a maximum possible delay.
</p>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Board</th><th>Maximum</th></tr>
<tr class=odd><td>Teensy 3.0</td><td align=center>139.26 ms</td></tr>
<tr class=odd><td>Teensy 3.1</td><td align=center>449.39 ms</td></tr>
<tr class=odd><td>Teensy 3.2</td><td align=center>449.39 ms</td></tr>
<tr class=odd><td>Teensy 3.5</td><td align=center>1671.19 ms</td></tr>
<tr class=odd><td>Teensy 3.6</td><td align=center>2413.94 ms</td></tr>
</table>
</script>
<script type="text/x-red" data-template-name="AudioEffectDelay">
<div class="form-row">
@@ -2363,6 +2618,16 @@ double s_freq = .0625;</p>
<tr class=odd><td align=center>7</td><td>MOSI</td></tr>
<tr class=odd><td align=center>12</td><td>MISO</td></tr>
<tr class=odd><td align=center>14</td><td>SCK</td></tr>
</table>
</p>
<p>When <span class=literal>AUDIO_MEMORY_CY15B104</span> is used, a single
CY15B104 FRAM chip is used, with these pins:
<table class=doc align=center cellpadding=3>
<tr class=top><th>Pin</th><th>Signal</th></tr>
<tr class=odd><td align=center>6</td><td>CS</td></tr>
<tr class=odd><td align=center>7</td><td>SI</td></tr>
<tr class=odd><td align=center>12</td><td>SO</td></tr>
<tr class=odd><td align=center>14</td><td>SCK</td></tr>
</table>
</p>
<p>When <span class=literal>AUDIO_MEMORY_MEMORYBOARD</span> is used, up to six
@@ -2416,6 +2681,10 @@ double s_freq = .0625;</p>

<p class=desc><span class=keyword>AudioEffectDelayExternal</span> delayExt1(<span class=literal>AUDIO_MEMORY_23LC1024</span>, 700);<br><span class=keyword>AudioEffectDelayExternal</span> delayExt2(<span class=literal>AUDIO_MEMORY_23LC1024</span>, 700);
</p>
<p>When using CY15B104, you
<a href="https://forum.pjrc.com/threads/45872-Memory-Chip-for-Audio-Adaptor-Board?p=151839&viewfull=1#post151839">may need to add a capacitor between 3.3V & GND</a>
to make the chip work.
</p>
</script>
<script type="text/x-red" data-template-name="AudioEffectDelayExternal">
<div class="form-row">
@@ -2513,6 +2782,44 @@ double s_freq = .0625;</p>
</div>
</script>

<script type="text/x-red" data-help-name="AudioEffectWaveshaper">
<h3>Summary</h3>
<div class=tooltipinfo>
<p>Modify the waveform shape of a signal.</p>
<p align=center><img src="img/waveshaper.png"></p>
<p>Useful for overdrive, distortion, fuzz,
clipping, expo converters, phase inversion, waveform modification &amp; adjustments.
</p>
</div>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Signal</th></tr>
<tr class=odd><td align=center>In 0</td><td>Original Input Signal</td></tr>
<tr class=odd><td align=center>Out 0</td><td>Shaped Output</td></tr>
</table>
<h3>Functions</h3>
<p class=func><span class=keyword>shape</span>(array, length);</p>
<p class=desc>Configure the waveform shape. Array is a list of float
numbers, given in order. The first number maps to input -1.0. The
last maps to input +1.0. The numbers represent the desired output
level at each of these input levels. Length must be 2, 3, 5, 9, 17,
33, 65, 129, 257, 513, 1025, 2049, 4097, 8193, 16385, or 32769.
</p>

<h3>Examples</h3>
<p class=exam>TODO: example needed</p>
<!--<p class=exam>File &gt; Examples &gt; Audio &gt; Effects &gt; Mid_Side</p>-->
<h3>Notes</h3>
<p><a href="https://github.com/dxinteractive/TeensyAudioWaveshaper">More information</a>
</p>
</script>
<script type="text/x-red" data-template-name="AudioEffectWaveshaper">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>

<script type="text/x-red" data-help-name="AudioFilterBiquad">
<h3>Summary</h3>
<div class=tooltipinfo>
@@ -2719,7 +3026,7 @@ double s_freq = .0625;</p>
object uses approximately 4% of the CPU time on Teensy 3.1.
</p>
</script>
<script type="text/x-red" data-template-name="AudioFilterFIR">
<script type="text/x-red" data-template-name="AudioFilterStateVariable">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
@@ -3214,7 +3521,9 @@ double s_freq = .0625;</p>
</p>
<p class=func><span class=keyword>adcHighPassFilterDisable</span>();</p>
<p class=desc>Completely disable the analog input filter. DC and sub-audible
low frequencies are allowed to enter the digital signal.
low frequencies are allowed to enter the digital signal. This
<a href="http://openaudio.blogspot.com/2017/03/teensy-audio-board-self-noise.html">may
reduce noise</a> in some cases.
</p>
<p class=func><span class=keyword>adcHighPassFilterEnable</span>();</p>
<p class=desc>Turn the DC-blocking filter back on, if disabled, or
@@ -3643,6 +3952,48 @@ value frequency
</div>
</script>

<script type="text/x-red" data-help-name="AudioControlCS42448">
<h3>Summary</h3>
<div class=tooltipinfo>
<p>Control the CS42448 chip in TDM mode, for 6 inputs and 8 outputs.
</p>
<p align=center><img src="img/cs42448.jpg"></p>
</div>
</div>
<h3>Audio Connections</h3>
<p>This object has no audio inputs or outputs. Separate TDM objects
are used to send and receive audio data.
</p>
<h3>Functions</h3>
<p class=func><span class=keyword>enable</span>();</p>
<p class=desc>Enables the CS42448 to work in TDM mode.
</p>
<p class=func><span class=keyword>volume</span>(level);</p>
<p class=desc>Set the volume level for all output channels. Range is 0 to 1.0.
</p>
<p class=func><span class=keyword>volume</span>(channel, level);</p>
<p class=desc>Set the volume level for a single output. Channel is 1 to 8. Range is 0 to 1.0.
</p>
<p class=func><span class=keyword>inputLevel</span>(level);</p>
<p class=desc>Set the input gain level for all input channels. Range is 0 to 15.85.
</p>
<p class=func><span class=keyword>inputLevel</span>(channel, level);</p>
<p class=desc>Set the input gain level for a single input. Channel is 1 to 6. Range is 0 to 15.85.
</p>
<h3>Hardware</h3>
<p>Tested with this <a href="https://oshpark.com/shared_projects/2Yj6rFaW">
CS42448 Circuit Board</a>.
</p>
<p align=center><img src="img/tdm.jpg"></p>
</div>
<h3>Notes</h3>
</script>
<script type="text/x-red" data-template-name="AudioControlCS42448">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>




+ 1
- 1
gui/red/main.js 查看文件

@@ -95,7 +95,7 @@ var RED = (function() {
var src_name = make_name(src);
var dst_name = make_name(dst);
if (j == 0 && parts[1] == 0 && src && src.outputs == 1 && dst && dst._def.inputs == 1) {
cpp += src_name + ", " + parts[0];
cpp += src_name + ", " + dst_name;
} else {
cpp += src_name + ", " + j + ", " + dst_name + ", " + parts[1];
}

+ 30
- 29
input_adc.cpp 查看文件

@@ -24,22 +24,25 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "input_adc.h"
#include "utility/pdb.h"
#include "utility/dspinst.h"

#define COEF_HPF_DCBLOCK (1048300<<10) // DC Removal filter coefficient in S1.30

DMAMEM static uint16_t analog_rx_buffer[AUDIO_BLOCK_SAMPLES];
audio_block_t * AudioInputAnalog::block_left = NULL;
uint16_t AudioInputAnalog::block_offset = 0;
int32_t AudioInputAnalog::dc_average_hist[16];
int32_t AudioInputAnalog::current_dc_average_index = 0;
int32_t AudioInputAnalog::hpf_y1 = 0;
int32_t AudioInputAnalog::hpf_x1 = 0;

bool AudioInputAnalog::update_responsibility = false;
DMAChannel AudioInputAnalog::dma(false);


void AudioInputAnalog::init(uint8_t pin)
{
uint32_t i, sum=0;
int32_t tmp;

// Configure the ADC and run at least one software-triggered
// conversion. This completes the self calibration stuff and
@@ -51,13 +54,13 @@ void AudioInputAnalog::init(uint8_t pin)
#else
analogReadAveraging(4);
#endif
// Actually, do many normal reads, to start with a nice DC level
for (i=0; i < 1024; i++) {
sum += analogRead(pin);
}
for (i = 0; i < 16; i++) {
dc_average_hist[i] = sum >> 10;
}
// Note for review:
// Probably not useful to spin cycles here stabilizing
// since DC blocking is similar to te external analog filters
tmp = (uint16_t) analogRead(pin);
tmp = ( ((int32_t) tmp) << 14);
hpf_x1 = tmp; // With constant DC level x1 would be x0
hpf_y1 = 0; // Output will settle here when stable

// set the programmable delay block to trigger the ADC at 44.1 kHz
#if defined(KINETISK)
@@ -135,12 +138,10 @@ void AudioInputAnalog::isr(void)
}
}



void AudioInputAnalog::update(void)
{
audio_block_t *new_left=NULL, *out_left=NULL;
uint32_t i, dc, offset;
uint32_t offset;
int32_t tmp;
int16_t s, *p, *end;

@@ -185,28 +186,28 @@ void AudioInputAnalog::update(void)
block_offset = 0;
__enable_irq();

// Find and subtract DC offset... We use an average of the
// last 16 * AUDIO_BLOCK_SAMPLES samples.
dc = 0;
for (i = 0; i < 16; i++) {
dc += dc_average_hist[i];
}
dc /= 16 * AUDIO_BLOCK_SAMPLES;
dc_average_hist[current_dc_average_index] = 0;
//
// DC Offset Removal Filter
// 1-pole digital high-pass filter implementation
// y = a*(x[n] - x[n-1] + y[n-1])
// The coefficient "a" is as follows:
// a = UNITY*e^(-2*pi*fc/fs)
// fc = 2 @ fs = 44100
//
p = out_left->data;
end = p + AUDIO_BLOCK_SAMPLES;
do {
dc_average_hist[current_dc_average_index] += (uint16_t)(*p);
tmp = (uint16_t)(*p) - (int32_t)dc;
s = signed_saturate_rshift(tmp, 16, 0);
tmp = (uint16_t)(*p);
tmp = ( ((int32_t) tmp) << 14);
int32_t acc = hpf_y1 - hpf_x1;
acc += tmp;
hpf_y1 = FRACMUL_SHL(acc, COEF_HPF_DCBLOCK, 1);
hpf_x1 = tmp;
s = signed_saturate_rshift(hpf_y1, 16, 14);
*p++ = s;
} while (p < end);
current_dc_average_index = (current_dc_average_index + 1) % 16;

// then transmit the AC data
transmit(out_left);
release(out_left);
}




+ 7
- 5
input_adc.h 查看文件

@@ -41,12 +41,14 @@ public:
private:
static audio_block_t *block_left;
static uint16_t block_offset;
static int32_t dc_average_hist[16];
static int32_t current_dc_average_index;
static int32_t hpf_y1;
static int32_t hpf_x1;

static bool update_responsibility;
static DMAChannel dma;
static void isr(void);
static void init(uint8_t pin);
static DMAChannel dma;
static void isr(void);
static void init(uint8_t pin);

};

#endif

+ 56
- 48
input_adcs.cpp 查看文件

@@ -24,21 +24,23 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "input_adcs.h"
#include "utility/pdb.h"
#include "utility/dspinst.h"

#if defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__)

#define COEF_HPF_DCBLOCK (1048300<<10) // DC Removal filter coefficient in S1.30

DMAMEM static uint16_t left_buffer[AUDIO_BLOCK_SAMPLES];
DMAMEM static uint16_t right_buffer[AUDIO_BLOCK_SAMPLES];
audio_block_t * AudioInputAnalogStereo::block_left = NULL;
audio_block_t * AudioInputAnalogStereo::block_right = NULL;
uint16_t AudioInputAnalogStereo::offset_left = 0;
uint16_t AudioInputAnalogStereo::offset_right = 0;
int32_t AudioInputAnalogStereo::left_dc_average_hist[16];
int32_t AudioInputAnalogStereo::right_dc_average_hist[16];
int32_t AudioInputAnalogStereo::current_dc_average_index = 0;
int32_t AudioInputAnalogStereo::hpf_y1[2] = { 0, 0 };
int32_t AudioInputAnalogStereo::hpf_x1[2] = { 0, 0 };
bool AudioInputAnalogStereo::update_responsibility = false;
DMAChannel AudioInputAnalogStereo::dma0(false);
DMAChannel AudioInputAnalogStereo::dma1(false);
@@ -47,7 +49,7 @@ static int analogReadADC1(uint8_t pin);

void AudioInputAnalogStereo::init(uint8_t pin0, uint8_t pin1)
{
uint32_t i, sum0=0, sum1=0;
uint32_t tmp;

//pinMode(32, OUTPUT);
//pinMode(33, OUTPUT);
@@ -64,15 +66,20 @@ void AudioInputAnalogStereo::init(uint8_t pin0, uint8_t pin1)
analogReadAveraging(4);
ADC1_SC3 = ADC_SC3_AVGE + ADC_SC3_AVGS(0);
#endif
// Actually, do many normal reads, to start with a nice DC level
for (i=0; i < 1024; i++) {
sum0 += analogRead(pin0);
sum1 += analogReadADC1(pin1);
}
for (i = 0; i < 16; i++) {
left_dc_average_hist[i] = sum0 >> 10;
right_dc_average_hist[i] = sum1 >> 10;
}

// Note for review:
// Probably not useful to spin cycles here stabilizing
// since DC blocking is similar to te external analog filters
tmp = (uint16_t) analogRead(pin0);
tmp = ( ((int32_t) tmp) << 14);
hpf_x1[0] = tmp; // With constant DC level x1 would be x0
hpf_y1[0] = 0; // Output will settle here when stable

tmp = (uint16_t) analogReadADC1(pin1);
tmp = ( ((int32_t) tmp) << 14);
hpf_x1[1] = tmp; // With constant DC level x1 would be x0
hpf_y1[1] = 0; // Output will settle here when stable


// set the programmable delay block to trigger the ADC at 44.1 kHz
//if (!(SIM_SCGC6 & SIM_SCGC6_PDB)
@@ -203,13 +210,10 @@ void AudioInputAnalogStereo::isr1(void)
}




void AudioInputAnalogStereo::update(void)
{
audio_block_t *new_left=NULL, *out_left=NULL;
audio_block_t *new_right=NULL, *out_right=NULL;
uint32_t i, dc;
int32_t tmp;
int16_t s, *p, *end;

@@ -254,38 +258,42 @@ void AudioInputAnalogStereo::update(void)
offset_right = 0;
__enable_irq();

// Find and subtract DC offset... We use an average of the
// last 16 * AUDIO_BLOCK_SAMPLES samples.
dc = 0;
for (i = 0; i < 16; i++) {
dc += left_dc_average_hist[i];
}
dc /= 16 * AUDIO_BLOCK_SAMPLES;
left_dc_average_hist[current_dc_average_index] = 0;
p = out_left->data;
end = p + AUDIO_BLOCK_SAMPLES;
do {
left_dc_average_hist[current_dc_average_index] += (uint16_t)(*p);
tmp = (uint16_t)(*p) - (int32_t)dc;
s = signed_saturate_rshift(tmp, 16, 0);
*p++ = s;
} while (p < end);

dc = 0;
for (i = 0; i < 16; i++) {
dc += right_dc_average_hist[i];
}
dc /= 16 * AUDIO_BLOCK_SAMPLES;
right_dc_average_hist[current_dc_average_index] = 0;
p = out_right->data;
end = p + AUDIO_BLOCK_SAMPLES;
do {
right_dc_average_hist[current_dc_average_index] += (uint16_t)(*p);
tmp = (uint16_t)(*p) - (int32_t)dc;
s = signed_saturate_rshift(tmp, 16, 0);
*p++ = s;
} while (p < end);
current_dc_average_index = (current_dc_average_index + 1) % 16;
//
// DC Offset Removal Filter
// 1-pole digital high-pass filter implementation
// y = a*(x[n] - x[n-1] + y[n-1])
// The coefficient "a" is as follows:
// a = UNITY*e^(-2*pi*fc/fs)
// fc = 2 @ fs = 44100
//

// DC removal, LEFT
p = out_left->data;
end = p + AUDIO_BLOCK_SAMPLES;
do {
tmp = (uint16_t)(*p);
tmp = ( ((int32_t) tmp) << 14);
int32_t acc = hpf_y1[0] - hpf_x1[0];
acc += tmp;
hpf_y1[0] = FRACMUL_SHL(acc, COEF_HPF_DCBLOCK, 1);
hpf_x1[0] = tmp;
s = signed_saturate_rshift(hpf_y1[0], 16, 14);
*p++ = s;
} while (p < end);

// DC removal, RIGHT
p = out_right->data;
end = p + AUDIO_BLOCK_SAMPLES;
do {
tmp = (uint16_t)(*p);
tmp = ( ((int32_t) tmp) << 14);
int32_t acc = hpf_y1[1] - hpf_x1[1];
acc += tmp;
hpf_y1[1]= FRACMUL_SHL(acc, COEF_HPF_DCBLOCK, 1);
hpf_x1[1] = tmp;
s = signed_saturate_rshift(hpf_y1[1], 16, 14);
*p++ = s;
} while (p < end);

// then transmit the AC data
transmit(out_left, 0);

+ 12
- 12
input_adcs.h 查看文件

@@ -35,26 +35,26 @@ class AudioInputAnalogStereo : public AudioStream
{
public:
AudioInputAnalogStereo() : AudioStream(0, NULL) {
init(A2, A3);
}
init(A2, A3);
}
AudioInputAnalogStereo(uint8_t pin0, uint8_t pin1) : AudioStream(0, NULL) {
init(pin0, pin1);
}
init(pin0, pin1);
}
virtual void update(void);
private:
static audio_block_t *block_left;
static audio_block_t *block_right;
static uint16_t offset_left;
static uint16_t offset_right;
static int32_t left_dc_average_hist[16];
static int32_t right_dc_average_hist[16];
static int32_t current_dc_average_index;
static int32_t hpf_y1[2];
static int32_t hpf_x1[2];
static bool update_responsibility;
static DMAChannel dma0;
static DMAChannel dma1;
static void isr0(void);
static void isr1(void);
static void init(uint8_t pin0, uint8_t pin1);
static DMAChannel dma0;
static DMAChannel dma1;
static void isr0(void);
static void isr1(void);
static void init(uint8_t pin0, uint8_t pin1);
};

#endif

+ 3
- 2
input_i2s.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "input_i2s.h"
#include "output_i2s.h"

@@ -47,7 +48,7 @@ void AudioInputI2S::begin(void)

CORE_PIN13_CONFIG = PORT_PCR_MUX(4); // pin 13, PTC5, I2S0_RXD0
#if defined(KINETISK)
dma.TCD->SADDR = &I2S0_RDR0;
dma.TCD->SADDR = (void *)((uint32_t)&I2S0_RDR0 + 2);
dma.TCD->SOFF = 0;
dma.TCD->ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1);
dma.TCD->NBYTES_MLNO = 2;
@@ -182,7 +183,7 @@ void AudioInputI2Sslave::begin(void)

CORE_PIN13_CONFIG = PORT_PCR_MUX(4); // pin 13, PTC5, I2S0_RXD0
#if defined(KINETISK)
dma.TCD->SADDR = &I2S0_RDR0;
dma.TCD->SADDR = (void *)((uint32_t)&I2S0_RDR0 + 2);
dma.TCD->SOFF = 0;
dma.TCD->ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1);
dma.TCD->NBYTES_MLNO = 2;

+ 1
- 0
input_i2s_quad.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "input_i2s_quad.h"
#include "output_i2s_quad.h"


+ 146
- 0
input_tdm.cpp 查看文件

@@ -0,0 +1,146 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2017, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
* open source software by purchasing Teensy or other PJRC products.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "input_tdm.h"
#include "output_tdm.h"
#if defined(KINETISK)

DMAMEM static uint32_t tdm_rx_buffer[AUDIO_BLOCK_SAMPLES*16];
audio_block_t * AudioInputTDM::block_incoming[16] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
bool AudioInputTDM::update_responsibility = false;
DMAChannel AudioInputTDM::dma(false);


void AudioInputTDM::begin(void)
{
dma.begin(true); // Allocate the DMA channel first

// TODO: should we set & clear the I2S_RCSR_SR bit here?
AudioOutputTDM::config_tdm();

CORE_PIN13_CONFIG = PORT_PCR_MUX(4); // pin 13, PTC5, I2S0_RXD0
dma.TCD->SADDR = &I2S0_RDR0;
dma.TCD->SOFF = 0;
dma.TCD->ATTR = DMA_TCD_ATTR_SSIZE(2) | DMA_TCD_ATTR_DSIZE(2);
dma.TCD->NBYTES_MLNO = 4;
dma.TCD->SLAST = 0;
dma.TCD->DADDR = tdm_rx_buffer;
dma.TCD->DOFF = 4;
dma.TCD->CITER_ELINKNO = sizeof(tdm_rx_buffer) / 4;
dma.TCD->DLASTSGA = -sizeof(tdm_rx_buffer);
dma.TCD->BITER_ELINKNO = sizeof(tdm_rx_buffer) / 4;
dma.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR;
dma.triggerAtHardwareEvent(DMAMUX_SOURCE_I2S0_RX);
update_responsibility = update_setup();
dma.enable();

I2S0_RCSR |= I2S_RCSR_RE | I2S_RCSR_BCE | I2S_RCSR_FRDE | I2S_RCSR_FR;
I2S0_TCSR |= I2S_TCSR_TE | I2S_TCSR_BCE; // TX clock enable, because sync'd to TX
dma.attachInterrupt(isr);
}

// TODO: needs optimization...
static void memcpy_tdm_rx(uint32_t *dest1, uint32_t *dest2, const uint32_t *src)
{
uint32_t i, in1, in2;

for (i=0; i < AUDIO_BLOCK_SAMPLES/2; i++) {
in1 = *src;
in2 = *(src+8);
src += 16;
*dest1++ = (in1 >> 16) | (in2 & 0xFFFF0000);
*dest2++ = (in1 << 16) | (in2 & 0x0000FFFF);
}
}

void AudioInputTDM::isr(void)
{
uint32_t daddr;
const uint32_t *src;
unsigned int i;

//digitalWriteFast(3, HIGH);
daddr = (uint32_t)(dma.TCD->DADDR);
dma.clearInterrupt();

if (daddr < (uint32_t)tdm_rx_buffer + sizeof(tdm_rx_buffer) / 2) {
// DMA is receiving to the first half of the buffer
// need to remove data from the second half
src = &tdm_rx_buffer[AUDIO_BLOCK_SAMPLES*8];
} else {
// DMA is receiving to the second half of the buffer
// need to remove data from the first half
src = &tdm_rx_buffer[0];
}
if (block_incoming[0] != NULL) {
for (i=0; i < 16; i += 2) {
uint32_t *dest1 = (uint32_t *)(block_incoming[i]->data);
uint32_t *dest2 = (uint32_t *)(block_incoming[i+1]->data);
memcpy_tdm_rx(dest1, dest2, src);
src++;
}
}
if (update_responsibility) update_all();
//digitalWriteFast(3, LOW);
}


void AudioInputTDM::update(void)
{
unsigned int i, j;
audio_block_t *new_block[16];
audio_block_t *out_block[16];

// allocate 16 new blocks. If any fails, allocate none
for (i=0; i < 16; i++) {
new_block[i] = allocate();
if (new_block[i] == NULL) {
for (j=0; j < i; j++) {
release(new_block[j]);
}
memset(new_block, 0, sizeof(new_block));
break;
}
}
__disable_irq();
memcpy(out_block, block_incoming, sizeof(out_block));
memcpy(block_incoming, new_block, sizeof(block_incoming));
__enable_irq();
if (out_block[0] != NULL) {
// if we got 1 block, all 16 are filled
for (i=0; i < 16; i++) {
transmit(out_block[i], i);
release(out_block[i]);
}
}
}


#endif // KINETISK

+ 48
- 0
input_tdm.h 查看文件

@@ -0,0 +1,48 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2017, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
* open source software by purchasing Teensy or other PJRC products.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#ifndef _input_tdm_h_
#define _input_tdm_h_

#include "Arduino.h"
#include "AudioStream.h"
#include "DMAChannel.h"

class AudioInputTDM : public AudioStream
{
public:
AudioInputTDM(void) : AudioStream(0, NULL) { begin(); }
virtual void update(void);
void begin(void);
protected:
static bool update_responsibility;
static DMAChannel dma;
static void isr(void);
private:
static audio_block_t *block_incoming[16];
};

#endif

+ 9
- 0
keywords.txt 查看文件

@@ -3,12 +3,15 @@ AudioConnection KEYWORD2
AudioInputI2S KEYWORD2
AudioInputI2SQuad KEYWORD2
AudioInputI2Sslave KEYWORD2
AudioInputTDM KEYWORD2
AudioInputUSB KEYWORD2
AudioOutputI2S KEYWORD2
AudioOutputI2SQuad KEYWORD2
AudioOutputI2Sslave KEYWORD2
AudioOutputSPDIF KEYWORD2
AudioOutputPT8211 KEYWORD2
AudioOutputTDM KEYWORD2
AudioOutputADAT KEYWORD2
AudioOutputPWM KEYWORD2
AudioOutputUSB KEYWORD2
AudioControlSGTL5000 KEYWORD2
@@ -16,6 +19,7 @@ AudioControlWM8731 KEYWORD2
AudioControlWM8731master KEYWORD2
AudioControlAK4558 KEYWORD2
AudioControlCS4272 KEYWORD2
AudioControlCS42448 KEYWORD2
AudioMemory KEYWORD2

AudioAnalyzeFFT256 KEYWORD2
@@ -35,6 +39,7 @@ AudioEffectDelayExternal KEYWORD2
AudioEffectBitcrusher KEYWORD2
AudioEffectReverb KEYWORD2
AudioEffectMidSide KEYWORD2
AudioEffectWaveshaper KEYWORD2
AudioFilterBiquad KEYWORD2
AudioFilterFIR KEYWORD2
AudioFilterStateVariable KEYWORD2
@@ -47,6 +52,7 @@ AudioPlayMemory KEYWORD2
AudioPlaySdRaw KEYWORD2
AudioPlaySdWav KEYWORD2
AudioPlayQueue KEYWORD2
AudioPlaySerialflashRaw KEYWORD2
AudioRecordQueue KEYWORD2
AudioSynthToneSweep KEYWORD2
AudioSynthWaveform KEYWORD2
@@ -54,6 +60,7 @@ AudioSynthWaveformSine KEYWORD2
AudioSynthWaveformSineHires KEYWORD2
AudioSynthWaveformSineModulated KEYWORD2
AudioSynthWaveformDc KEYWORD2
AudioSynthWaveformPWM KEYWORD2
AudioSynthNoiseWhite KEYWORD2
AudioSynthNoisePink KEYWORD2
AudioSynthKarplusStrong KEYWORD2
@@ -111,6 +118,7 @@ hold KEYWORD2
decay KEYWORD2
sustain KEYWORD2
release KEYWORD2
releaseNoteOn KEYWORD2
inputLevel KEYWORD2
inputSelect KEYWORD2
muteHeadphone KEYWORD2
@@ -153,6 +161,7 @@ encode KEYWORD2
decode KEYWORD2
secondMix KEYWORD2
pitchMod KEYWORD2
shape KEYWORD2

AudioMemoryUsage KEYWORD2
AudioMemoryUsageMax KEYWORD2

+ 1
- 0
mixer.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "mixer.h"
#include "utility/dspinst.h"


+ 737
- 0
output_adat.cpp 查看文件

@@ -0,0 +1,737 @@
/* ADAT for Teensy 3.X
* Copyright (c) 2017, Ernstjan Freriks,
* Thanks to Frank Bösing & KPC & Paul Stoffregen!
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "output_adat.h"

#if defined(KINETISK)

audio_block_t * AudioOutputADAT::block_ch1_1st = NULL;
audio_block_t * AudioOutputADAT::block_ch2_1st = NULL;
audio_block_t * AudioOutputADAT::block_ch3_1st = NULL;
audio_block_t * AudioOutputADAT::block_ch4_1st = NULL;
audio_block_t * AudioOutputADAT::block_ch5_1st = NULL;
audio_block_t * AudioOutputADAT::block_ch6_1st = NULL;
audio_block_t * AudioOutputADAT::block_ch7_1st = NULL;
audio_block_t * AudioOutputADAT::block_ch8_1st = NULL;

audio_block_t * AudioOutputADAT::block_ch1_2nd = NULL;
audio_block_t * AudioOutputADAT::block_ch2_2nd = NULL;
audio_block_t * AudioOutputADAT::block_ch3_2nd = NULL;
audio_block_t * AudioOutputADAT::block_ch4_2nd = NULL;
audio_block_t * AudioOutputADAT::block_ch5_2nd = NULL;
audio_block_t * AudioOutputADAT::block_ch6_2nd = NULL;
audio_block_t * AudioOutputADAT::block_ch7_2nd = NULL;
audio_block_t * AudioOutputADAT::block_ch8_2nd = NULL;

uint16_t AudioOutputADAT::ch1_offset = 0;
uint16_t AudioOutputADAT::ch2_offset = 0;
uint16_t AudioOutputADAT::ch3_offset = 0;
uint16_t AudioOutputADAT::ch4_offset = 0;
uint16_t AudioOutputADAT::ch5_offset = 0;
uint16_t AudioOutputADAT::ch6_offset = 0;
uint16_t AudioOutputADAT::ch7_offset = 0;
uint16_t AudioOutputADAT::ch8_offset = 0;

bool AudioOutputADAT::update_responsibility = false;
//uint32_t AudioOutputADAT::vucp = VUCP_VALID;

DMAMEM static uint32_t ADAT_tx_buffer[AUDIO_BLOCK_SAMPLES * 8]; //4 KB, AUDIO_BLOCK_SAMPLES is usually 128

DMAChannel AudioOutputADAT::dma(false);

static const uint32_t zerodata[AUDIO_BLOCK_SAMPLES/4] = {0};

// These are the lookup tables. There are four of them so that the remainder of the 32 bit result can easily be XORred with the next 8 bits.
static const uint32_t LookupTable_firstword[256] = { 0x0, 0x1ffffff, 0x3ffffff, 0x2000000, 0x7ffffff, 0x6000000, 0x4000000, 0x5ffffff, 0xfffffff, 0xe000000, 0xc000000, 0xdffffff, 0x8000000, 0x9ffffff, 0xbffffff, 0xa000000, 0x1fffffff, 0x1e000000, 0x1c000000, 0x1dffffff, 0x18000000, 0x19ffffff, 0x1bffffff, 0x1a000000, 0x10000000, 0x11ffffff, 0x13ffffff, 0x12000000, 0x17ffffff, 0x16000000, 0x14000000, 0x15ffffff, 0x3fffffff, 0x3e000000, 0x3c000000, 0x3dffffff, 0x38000000, 0x39ffffff, 0x3bffffff, 0x3a000000, 0x30000000, 0x31ffffff, 0x33ffffff, 0x32000000, 0x37ffffff, 0x36000000, 0x34000000, 0x35ffffff, 0x20000000, 0x21ffffff, 0x23ffffff, 0x22000000, 0x27ffffff, 0x26000000, 0x24000000, 0x25ffffff, 0x2fffffff, 0x2e000000, 0x2c000000, 0x2dffffff, 0x28000000, 0x29ffffff, 0x2bffffff, 0x2a000000, 0x7fffffff, 0x7e000000, 0x7c000000, 0x7dffffff, 0x78000000, 0x79ffffff, 0x7bffffff, 0x7a000000, 0x70000000, 0x71ffffff, 0x73ffffff, 0x72000000, 0x77ffffff, 0x76000000, 0x74000000, 0x75ffffff, 0x60000000, 0x61ffffff, 0x63ffffff, 0x62000000, 0x67ffffff, 0x66000000, 0x64000000, 0x65ffffff, 0x6fffffff, 0x6e000000, 0x6c000000, 0x6dffffff, 0x68000000, 0x69ffffff, 0x6bffffff, 0x6a000000, 0x40000000, 0x41ffffff, 0x43ffffff, 0x42000000, 0x47ffffff, 0x46000000, 0x44000000, 0x45ffffff, 0x4fffffff, 0x4e000000, 0x4c000000, 0x4dffffff, 0x48000000, 0x49ffffff, 0x4bffffff, 0x4a000000, 0x5fffffff, 0x5e000000, 0x5c000000, 0x5dffffff, 0x58000000, 0x59ffffff, 0x5bffffff, 0x5a000000, 0x50000000, 0x51ffffff, 0x53ffffff, 0x52000000, 0x57ffffff, 0x56000000, 0x54000000, 0x55ffffff, 0xffffffff, 0xfe000000, 0xfc000000, 0xfdffffff, 0xf8000000, 0xf9ffffff, 0xfbffffff, 0xfa000000, 0xf0000000, 0xf1ffffff, 0xf3ffffff, 0xf2000000, 0xf7ffffff, 0xf6000000, 0xf4000000, 0xf5ffffff, 0xe0000000, 0xe1ffffff, 0xe3ffffff, 0xe2000000, 0xe7ffffff, 0xe6000000, 0xe4000000, 0xe5ffffff, 0xefffffff, 0xee000000, 0xec000000, 0xedffffff, 0xe8000000, 0xe9ffffff, 0xebffffff, 0xea000000, 0xc0000000, 0xc1ffffff, 0xc3ffffff, 0xc2000000, 0xc7ffffff, 0xc6000000, 0xc4000000, 0xc5ffffff, 0xcfffffff, 0xce000000, 0xcc000000, 0xcdffffff, 0xc8000000, 0xc9ffffff, 0xcbffffff, 0xca000000, 0xdfffffff, 0xde000000, 0xdc000000, 0xddffffff, 0xd8000000, 0xd9ffffff, 0xdbffffff, 0xda000000, 0xd0000000, 0xd1ffffff, 0xd3ffffff, 0xd2000000, 0xd7ffffff, 0xd6000000, 0xd4000000, 0xd5ffffff, 0x80000000, 0x81ffffff, 0x83ffffff, 0x82000000, 0x87ffffff, 0x86000000, 0x84000000, 0x85ffffff, 0x8fffffff, 0x8e000000, 0x8c000000, 0x8dffffff, 0x88000000, 0x89ffffff, 0x8bffffff, 0x8a000000, 0x9fffffff, 0x9e000000, 0x9c000000, 0x9dffffff, 0x98000000, 0x99ffffff, 0x9bffffff, 0x9a000000, 0x90000000, 0x91ffffff, 0x93ffffff, 0x92000000, 0x97ffffff, 0x96000000, 0x94000000, 0x95ffffff, 0xbfffffff, 0xbe000000, 0xbc000000, 0xbdffffff, 0xb8000000, 0xb9ffffff, 0xbbffffff, 0xba000000, 0xb0000000, 0xb1ffffff, 0xb3ffffff, 0xb2000000, 0xb7ffffff, 0xb6000000, 0xb4000000, 0xb5ffffff, 0xa0000000, 0xa1ffffff, 0xa3ffffff, 0xa2000000, 0xa7ffffff, 0xa6000000, 0xa4000000, 0xa5ffffff, 0xafffffff, 0xae000000, 0xac000000, 0xadffffff, 0xa8000000, 0xa9ffffff, 0xabffffff, 0xaa000000};
static const uint32_t LookupTable_secondword[256] = { 0x0, 0x1ffff, 0x3ffff, 0x20000, 0x7ffff, 0x60000, 0x40000, 0x5ffff, 0xfffff, 0xe0000, 0xc0000, 0xdffff, 0x80000, 0x9ffff, 0xbffff, 0xa0000, 0x1fffff, 0x1e0000, 0x1c0000, 0x1dffff, 0x180000, 0x19ffff, 0x1bffff, 0x1a0000, 0x100000, 0x11ffff, 0x13ffff, 0x120000, 0x17ffff, 0x160000, 0x140000, 0x15ffff, 0x3fffff, 0x3e0000, 0x3c0000, 0x3dffff, 0x380000, 0x39ffff, 0x3bffff, 0x3a0000, 0x300000, 0x31ffff, 0x33ffff, 0x320000, 0x37ffff, 0x360000, 0x340000, 0x35ffff, 0x200000, 0x21ffff, 0x23ffff, 0x220000, 0x27ffff, 0x260000, 0x240000, 0x25ffff, 0x2fffff, 0x2e0000, 0x2c0000, 0x2dffff, 0x280000, 0x29ffff, 0x2bffff, 0x2a0000, 0x7fffff, 0x7e0000, 0x7c0000, 0x7dffff, 0x780000, 0x79ffff, 0x7bffff, 0x7a0000, 0x700000, 0x71ffff, 0x73ffff, 0x720000, 0x77ffff, 0x760000, 0x740000, 0x75ffff, 0x600000, 0x61ffff, 0x63ffff, 0x620000, 0x67ffff, 0x660000, 0x640000, 0x65ffff, 0x6fffff, 0x6e0000, 0x6c0000, 0x6dffff, 0x680000, 0x69ffff, 0x6bffff, 0x6a0000, 0x400000, 0x41ffff, 0x43ffff, 0x420000, 0x47ffff, 0x460000, 0x440000, 0x45ffff, 0x4fffff, 0x4e0000, 0x4c0000, 0x4dffff, 0x480000, 0x49ffff, 0x4bffff, 0x4a0000, 0x5fffff, 0x5e0000, 0x5c0000, 0x5dffff, 0x580000, 0x59ffff, 0x5bffff, 0x5a0000, 0x500000, 0x51ffff, 0x53ffff, 0x520000, 0x57ffff, 0x560000, 0x540000, 0x55ffff, 0xffffff, 0xfe0000, 0xfc0000, 0xfdffff, 0xf80000, 0xf9ffff, 0xfbffff, 0xfa0000, 0xf00000, 0xf1ffff, 0xf3ffff, 0xf20000, 0xf7ffff, 0xf60000, 0xf40000, 0xf5ffff, 0xe00000, 0xe1ffff, 0xe3ffff, 0xe20000, 0xe7ffff, 0xe60000, 0xe40000, 0xe5ffff, 0xefffff, 0xee0000, 0xec0000, 0xedffff, 0xe80000, 0xe9ffff, 0xebffff, 0xea0000, 0xc00000, 0xc1ffff, 0xc3ffff, 0xc20000, 0xc7ffff, 0xc60000, 0xc40000, 0xc5ffff, 0xcfffff, 0xce0000, 0xcc0000, 0xcdffff, 0xc80000, 0xc9ffff, 0xcbffff, 0xca0000, 0xdfffff, 0xde0000, 0xdc0000, 0xddffff, 0xd80000, 0xd9ffff, 0xdbffff, 0xda0000, 0xd00000, 0xd1ffff, 0xd3ffff, 0xd20000, 0xd7ffff, 0xd60000, 0xd40000, 0xd5ffff, 0x800000, 0x81ffff, 0x83ffff, 0x820000, 0x87ffff, 0x860000, 0x840000, 0x85ffff, 0x8fffff, 0x8e0000, 0x8c0000, 0x8dffff, 0x880000, 0x89ffff, 0x8bffff, 0x8a0000, 0x9fffff, 0x9e0000, 0x9c0000, 0x9dffff, 0x980000, 0x99ffff, 0x9bffff, 0x9a0000, 0x900000, 0x91ffff, 0x93ffff, 0x920000, 0x97ffff, 0x960000, 0x940000, 0x95ffff, 0xbfffff, 0xbe0000, 0xbc0000, 0xbdffff, 0xb80000, 0xb9ffff, 0xbbffff, 0xba0000, 0xb00000, 0xb1ffff, 0xb3ffff, 0xb20000, 0xb7ffff, 0xb60000, 0xb40000, 0xb5ffff, 0xa00000, 0xa1ffff, 0xa3ffff, 0xa20000, 0xa7ffff, 0xa60000, 0xa40000, 0xa5ffff, 0xafffff, 0xae0000, 0xac0000, 0xadffff, 0xa80000, 0xa9ffff, 0xabffff, 0xaa0000};
static const uint32_t LookupTable_thirdword[256] = { 0x0, 0x1ff, 0x3ff, 0x200, 0x7ff, 0x600, 0x400, 0x5ff, 0xfff, 0xe00, 0xc00, 0xdff, 0x800, 0x9ff, 0xbff, 0xa00, 0x1fff, 0x1e00, 0x1c00, 0x1dff, 0x1800, 0x19ff, 0x1bff, 0x1a00, 0x1000, 0x11ff, 0x13ff, 0x1200, 0x17ff, 0x1600, 0x1400, 0x15ff, 0x3fff, 0x3e00, 0x3c00, 0x3dff, 0x3800, 0x39ff, 0x3bff, 0x3a00, 0x3000, 0x31ff, 0x33ff, 0x3200, 0x37ff, 0x3600, 0x3400, 0x35ff, 0x2000, 0x21ff, 0x23ff, 0x2200, 0x27ff, 0x2600, 0x2400, 0x25ff, 0x2fff, 0x2e00, 0x2c00, 0x2dff, 0x2800, 0x29ff, 0x2bff, 0x2a00, 0x7fff, 0x7e00, 0x7c00, 0x7dff, 0x7800, 0x79ff, 0x7bff, 0x7a00, 0x7000, 0x71ff, 0x73ff, 0x7200, 0x77ff, 0x7600, 0x7400, 0x75ff, 0x6000, 0x61ff, 0x63ff, 0x6200, 0x67ff, 0x6600, 0x6400, 0x65ff, 0x6fff, 0x6e00, 0x6c00, 0x6dff, 0x6800, 0x69ff, 0x6bff, 0x6a00, 0x4000, 0x41ff, 0x43ff, 0x4200, 0x47ff, 0x4600, 0x4400, 0x45ff, 0x4fff, 0x4e00, 0x4c00, 0x4dff, 0x4800, 0x49ff, 0x4bff, 0x4a00, 0x5fff, 0x5e00, 0x5c00, 0x5dff, 0x5800, 0x59ff, 0x5bff, 0x5a00, 0x5000, 0x51ff, 0x53ff, 0x5200, 0x57ff, 0x5600, 0x5400, 0x55ff, 0xffff, 0xfe00, 0xfc00, 0xfdff, 0xf800, 0xf9ff, 0xfbff, 0xfa00, 0xf000, 0xf1ff, 0xf3ff, 0xf200, 0xf7ff, 0xf600, 0xf400, 0xf5ff, 0xe000, 0xe1ff, 0xe3ff, 0xe200, 0xe7ff, 0xe600, 0xe400, 0xe5ff, 0xefff, 0xee00, 0xec00, 0xedff, 0xe800, 0xe9ff, 0xebff, 0xea00, 0xc000, 0xc1ff, 0xc3ff, 0xc200, 0xc7ff, 0xc600, 0xc400, 0xc5ff, 0xcfff, 0xce00, 0xcc00, 0xcdff, 0xc800, 0xc9ff, 0xcbff, 0xca00, 0xdfff, 0xde00, 0xdc00, 0xddff, 0xd800, 0xd9ff, 0xdbff, 0xda00, 0xd000, 0xd1ff, 0xd3ff, 0xd200, 0xd7ff, 0xd600, 0xd400, 0xd5ff, 0x8000, 0x81ff, 0x83ff, 0x8200, 0x87ff, 0x8600, 0x8400, 0x85ff, 0x8fff, 0x8e00, 0x8c00, 0x8dff, 0x8800, 0x89ff, 0x8bff, 0x8a00, 0x9fff, 0x9e00, 0x9c00, 0x9dff, 0x9800, 0x99ff, 0x9bff, 0x9a00, 0x9000, 0x91ff, 0x93ff, 0x9200, 0x97ff, 0x9600, 0x9400, 0x95ff, 0xbfff, 0xbe00, 0xbc00, 0xbdff, 0xb800, 0xb9ff, 0xbbff, 0xba00, 0xb000, 0xb1ff, 0xb3ff, 0xb200, 0xb7ff, 0xb600, 0xb400, 0xb5ff, 0xa000, 0xa1ff, 0xa3ff, 0xa200, 0xa7ff, 0xa600, 0xa400, 0xa5ff, 0xafff, 0xae00, 0xac00, 0xadff, 0xa800, 0xa9ff, 0xabff, 0xaa00};
static const uint32_t LookupTable_fourthword[256] = { 0x0, 0x1, 0x3, 0x2, 0x7, 0x6, 0x4, 0x5, 0xf, 0xe, 0xc, 0xd, 0x8, 0x9, 0xb, 0xa, 0x1f, 0x1e, 0x1c, 0x1d, 0x18, 0x19, 0x1b, 0x1a, 0x10, 0x11, 0x13, 0x12, 0x17, 0x16, 0x14, 0x15, 0x3f, 0x3e, 0x3c, 0x3d, 0x38, 0x39, 0x3b, 0x3a, 0x30, 0x31, 0x33, 0x32, 0x37, 0x36, 0x34, 0x35, 0x20, 0x21, 0x23, 0x22, 0x27, 0x26, 0x24, 0x25, 0x2f, 0x2e, 0x2c, 0x2d, 0x28, 0x29, 0x2b, 0x2a, 0x7f, 0x7e, 0x7c, 0x7d, 0x78, 0x79, 0x7b, 0x7a, 0x70, 0x71, 0x73, 0x72, 0x77, 0x76, 0x74, 0x75, 0x60, 0x61, 0x63, 0x62, 0x67, 0x66, 0x64, 0x65, 0x6f, 0x6e, 0x6c, 0x6d, 0x68, 0x69, 0x6b, 0x6a, 0x40, 0x41, 0x43, 0x42, 0x47, 0x46, 0x44, 0x45, 0x4f, 0x4e, 0x4c, 0x4d, 0x48, 0x49, 0x4b, 0x4a, 0x5f, 0x5e, 0x5c, 0x5d, 0x58, 0x59, 0x5b, 0x5a, 0x50, 0x51, 0x53, 0x52, 0x57, 0x56, 0x54, 0x55, 0xff, 0xfe, 0xfc, 0xfd, 0xf8, 0xf9, 0xfb, 0xfa, 0xf0, 0xf1, 0xf3, 0xf2, 0xf7, 0xf6, 0xf4, 0xf5, 0xe0, 0xe1, 0xe3, 0xe2, 0xe7, 0xe6, 0xe4, 0xe5, 0xef, 0xee, 0xec, 0xed, 0xe8, 0xe9, 0xeb, 0xea, 0xc0, 0xc1, 0xc3, 0xc2, 0xc7, 0xc6, 0xc4, 0xc5, 0xcf, 0xce, 0xcc, 0xcd, 0xc8, 0xc9, 0xcb, 0xca, 0xdf, 0xde, 0xdc, 0xdd, 0xd8, 0xd9, 0xdb, 0xda, 0xd0, 0xd1, 0xd3, 0xd2, 0xd7, 0xd6, 0xd4, 0xd5, 0x80, 0x81, 0x83, 0x82, 0x87, 0x86, 0x84, 0x85, 0x8f, 0x8e, 0x8c, 0x8d, 0x88, 0x89, 0x8b, 0x8a, 0x9f, 0x9e, 0x9c, 0x9d, 0x98, 0x99, 0x9b, 0x9a, 0x90, 0x91, 0x93, 0x92, 0x97, 0x96, 0x94, 0x95, 0xbf, 0xbe, 0xbc, 0xbd, 0xb8, 0xb9, 0xbb, 0xba, 0xb0, 0xb1, 0xb3, 0xb2, 0xb7, 0xb6, 0xb4, 0xb5, 0xa0, 0xa1, 0xa3, 0xa2, 0xa7, 0xa6, 0xa4, 0xa5, 0xaf, 0xae, 0xac, 0xad, 0xa8, 0xa9, 0xab, 0xaa};

void AudioOutputADAT::begin(void)
{

dma.begin(true); // Allocate the DMA channel first

block_ch1_1st = NULL;
block_ch2_1st = NULL;
block_ch3_1st = NULL;
block_ch4_1st = NULL;
block_ch5_1st = NULL;
block_ch6_1st = NULL;
block_ch7_1st = NULL;
block_ch8_1st = NULL;
// TODO: should we set & clear the I2S_TCSR_SR bit here?
config_ADAT();
CORE_PIN22_CONFIG = PORT_PCR_MUX(6); // pin 22, PTC1, I2S0_TXD0

const int nbytes_mlno = 2 * 8; // 16 Bytes per minor loop

dma.TCD->SADDR = ADAT_tx_buffer;
dma.TCD->SOFF = 4;
dma.TCD->ATTR = DMA_TCD_ATTR_SSIZE(2) | DMA_TCD_ATTR_DSIZE(2); //transfersize 2 = 32 bit, 5 = 32 byte
dma.TCD->NBYTES_MLNO = nbytes_mlno;
dma.TCD->SLAST = -sizeof(ADAT_tx_buffer);
dma.TCD->DADDR = &I2S0_TDR0;
dma.TCD->DOFF = 0;
dma.TCD->CITER_ELINKNO = sizeof(ADAT_tx_buffer) / nbytes_mlno;
dma.TCD->DLASTSGA = 0;
dma.TCD->BITER_ELINKNO = sizeof(ADAT_tx_buffer) / nbytes_mlno;
dma.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR;
dma.triggerAtHardwareEvent(DMAMUX_SOURCE_I2S0_TX);
update_responsibility = update_setup();
dma.enable();

I2S0_TCSR |= I2S_TCSR_TE | I2S_TCSR_BCE | I2S_TCSR_FRDE | I2S_TCSR_FR;
dma.attachInterrupt(isr);

}

/*

https://ackspace.nl/wiki/ADAT_project
https://github.com/xcore/sc_adat/blob/master/module_adat_tx/src/adat_tx_port.xc

for information about the clock:

http://cache.freescale.com/files/32bit/doc/app_note/AN4800.pdf

We need a bitrate twice as high as the SPDIF example.
Because BITCLK can not be the same as MCLK, but only half of MCLK, we need a 2*MCLK (so for 44100 samplerate we need 88200 MCLK)
*/

void AudioOutputADAT::isr(void)
{
const int16_t *src1, *src2, *src3, *src4,*src5, *src6, *src7, *src8;
const int16_t *zeros = (const int16_t *)zerodata;

uint32_t *end, *dest;
uint32_t saddr;
uint32_t sample1, sample2, sample3, sample4, sample5, sample6, sample7, sample8;

static uint32_t previousnrzi_highlow = 0; //this is used for the NZRI encoding to remember the last state.
// if the result of the lookup table LSB is other than this lastbit, the result of the lookup table must be inverted.

//static bool previousframeinverted=false;

saddr = (uint32_t)(dma.TCD->SADDR);
dma.clearInterrupt();
if (saddr < (uint32_t)ADAT_tx_buffer + sizeof(ADAT_tx_buffer) / 2) {
// DMA is transmitting the first half of the buffer
// so we must fill the second half
dest = (uint32_t *)&ADAT_tx_buffer[AUDIO_BLOCK_SAMPLES * 8/2];
end = (uint32_t *)&ADAT_tx_buffer[AUDIO_BLOCK_SAMPLES * 8];
if (AudioOutputADAT::update_responsibility) AudioStream::update_all();
} else {
// DMA is transmitting the second half of the buffer
// so we must fill the first half
dest = (uint32_t *)ADAT_tx_buffer;
end = (uint32_t *)&ADAT_tx_buffer[AUDIO_BLOCK_SAMPLES * 8/2];
}

src1 = (block_ch1_1st) ? block_ch1_1st->data + ch1_offset : zeros;
src2 = (block_ch2_1st) ? block_ch2_1st->data + ch2_offset : zeros;
src3 = (block_ch3_1st) ? block_ch3_1st->data + ch3_offset : zeros;
src4 = (block_ch4_1st) ? block_ch4_1st->data + ch4_offset : zeros;
src5 = (block_ch5_1st) ? block_ch5_1st->data + ch5_offset : zeros;
src6 = (block_ch6_1st) ? block_ch6_1st->data + ch6_offset : zeros;
src7 = (block_ch7_1st) ? block_ch7_1st->data + ch7_offset : zeros;
src8 = (block_ch8_1st) ? block_ch8_1st->data + ch8_offset : zeros;


//Non-NZRI encoded 'empty' ADAT Frame
/*
*(dest+0) = 0b10000100001000010000100001000010; // bit 0-31
*(dest+1) = 0b00010000100001000010000100001000; // bit 32-63
*(dest+2) = 0b01000010000100001000010000100001; // bit 64-95
*(dest+3) = 0b00001000010000100001000010000100; // bit 96-127

*(dest+4) = 0b00100001000010000100001000010000; // bit 128-159
*(dest+5) = 0b10000100001000010000100001000010; // bit 160-191
*(dest+6) = 0b00010000100001000010000100001000; // bit 192-223
*(dest+7) = 0b01000010000100001000000000010000; // bit 224-255

dest+=8;

*/

/*
//NZRI encoded 'empty' ADAT Frame

*(dest+0) = 0b11111000001111100000111110000011; // bit 0-31
*(dest+1) = 0b11100000111110000011111000001111; // bit 32-63
*(dest+2) = 0b10000011111000001111100000111110; // bit 64-95
*(dest+3) = 0b00001111100000111110000011111000; // bit 96-127

*(dest+4) = 0b00111110000011111000001111100000; // bit 128-159
*(dest+5) = 0b11111000001111100000111110000011; // bit 160-191
*(dest+6) = 0b11100000111110000011111000001111; // bit 192-223
*(dest+7) = 0b10000011111000001111111111100000; // bit 224-255

dest+=8;

*/

do
{
sample1 = (*src1++);
sample2 = (*src2++);
sample3 = (*src3++);
sample4 = (*src4++);
sample5 = (*src5++);
sample6 = (*src6++);
sample7 = (*src7++);
sample8 = (*src8++);

uint32_t value;
uint32_t nzrivalue;

value= 0b10000100001000010000100001000010 /* bit 0-31 */
// b00000000000000001000000000000000 // start of 16 bit sample
| ((sample1<<15)&0b01111000000000000000000000000000)
| ((sample1<<14)&0b00000011110000000000000000000000)
| ((sample1<<13)&0b00000000000111100000000000000000)
| ((sample1<<12)&0b00000000000000001111000000000000)
| ((sample2>>15)&0b00000000000000000000000000000001)
;
nzrivalue = previousnrzi_highlow ^ (LookupTable_firstword[(byte)(value >> 24)] ^ LookupTable_secondword[(byte)(value >> 16)] ^ LookupTable_thirdword[(byte)(value >> 8)] ^ LookupTable_fourthword[(byte)value]);
*(dest+0) = nzrivalue;
previousnrzi_highlow = ((nzrivalue & 0b1) == 0b1) ? ~0U : 0U;
value = 0b00010000100001000010000100001000 /* bit 32-63 */
// b00000000000000001000100010001000 // start of 16 bit sample
| ((sample2<<17)&0b11100000000000000000000000000000)
| ((sample2<<16)&0b00001111000000000000000000000000)
| ((sample2<<15)&0b00000000011110000000000000000000)
| ((sample2<<14)&0b00000000000000111100000000000000)
| ((sample3>>13)&0b00000000000000000000000000000111)
;
nzrivalue = previousnrzi_highlow ^ (LookupTable_firstword[(byte)(value >> 24)] ^ LookupTable_secondword[(byte)(value >> 16)] ^ LookupTable_thirdword[(byte)(value >> 8)] ^ LookupTable_fourthword[(byte)value]);
*(dest+1) = nzrivalue;
previousnrzi_highlow = ((nzrivalue & 0b1) == 0b1) ? ~0U : 0U;


value = 0b01000010000100001000010000100001 /* bit 64-95 */
// b00000000000000001000000000000000 // start of 16 bit sample
| ((sample3<<19)&0b10000000000000000000000000000000)
| ((sample3<<18)&0b00111100000000000000000000000000)
| ((sample3<<17)&0b00000001111000000000000000000000)
| ((sample3<<16)&0b00000000000011110000000000000000)
| ((sample4>>11)&0b00000000000000000000000000011110)
;
nzrivalue = previousnrzi_highlow ^ (LookupTable_firstword[(byte)(value >> 24)] ^ LookupTable_secondword[(byte)(value >> 16)] ^ LookupTable_thirdword[(byte)(value >> 8)] ^ LookupTable_fourthword[(byte)value]);
*(dest+2) = nzrivalue;
previousnrzi_highlow = ((nzrivalue & 0b1) == 0b1) ? ~0U : 0U;

value = 0b00001000010000100001000010000100 /* bit 96-127 */
// b00000000000000001000100010001000 // start of 16 bit sample
| ((sample4<<20)&0b11110000000000000000000000000000)
| ((sample4<<19)&0b00000111100000000000000000000000)
| ((sample4<<18)&0b00000000001111000000000000000000)
| ((sample5>>9 )&0b00000000000000000000000001111000)
| ((sample5>>10)&0b00000000000000000000000000000011)
;
nzrivalue = previousnrzi_highlow ^ (LookupTable_firstword[(byte)(value >> 24)] ^ LookupTable_secondword[(byte)(value >> 16)] ^ LookupTable_thirdword[(byte)(value >> 8)] ^ LookupTable_fourthword[(byte)value]);
*(dest+3) = nzrivalue;
previousnrzi_highlow = ((nzrivalue & 0b1) == 0b1) ? ~0U : 0U;

value = 0b00100001000010000100001000010000 /* bit 128-159 */
// b00000000000000001000100010001000 // start of 16 bit sample
| ((sample5<<22)&0b11000000000000000000000000000000)
| ((sample5<<21)&0b00011110000000000000000000000000)
| ((sample5<<20)&0b00000000111100000000000000000000)
| ((sample6>>7 )&0b00000000000000000000000111100000)
| ((sample6>>8 )&0b00000000000000000000000000001111)
;
nzrivalue = previousnrzi_highlow ^ (LookupTable_firstword[(byte)(value >> 24)] ^ LookupTable_secondword[(byte)(value >> 16)] ^ LookupTable_thirdword[(byte)(value >> 8)] ^ LookupTable_fourthword[(byte)value]);
*(dest+4) = nzrivalue;
previousnrzi_highlow = ((nzrivalue & 0b1) == 0b1) ? ~0U : 0U;

value = 0b10000100001000010000100001000010 /* bit 160-191 */
// b00000000000000001000100010001000 // start of 16 bit sample
| ((sample6<<23)&0b01111000000000000000000000000000)
| ((sample6<<22)&0b00000011110000000000000000000000)
| ((sample7>>5 )&0b00000000000000000000011110000000)
| ((sample7>>6 )&0b00000000000000000000000000111100)
| ((sample7>>7 )&0b00000000000000000000000000000001)
;

nzrivalue = previousnrzi_highlow ^ (LookupTable_firstword[(byte)(value >> 24)] ^ LookupTable_secondword[(byte)(value >> 16)] ^ LookupTable_thirdword[(byte)(value >> 8)] ^ LookupTable_fourthword[(byte)value]);
*(dest+5) = nzrivalue;
previousnrzi_highlow = ((nzrivalue & 0b1) == 0b1) ? ~0U : 0U;

value = 0b00010000100001000010000100001000 /* bit 192-223 */
// b00000000000000001000100010001000 // start of 16 bit sample
| ((sample7<<25)&0b11100000000000000000000000000000)
| ((sample7<<24)&0b00001111000000000000000000000000)
| ((sample8>>3 )&0b00000000000000000001111000000000)
| ((sample8>>4 )&0b00000000000000000000000011110000)
| ((sample8>>5 )&0b00000000000000000000000000000111)
;

nzrivalue = previousnrzi_highlow ^ (LookupTable_firstword[(byte)(value >> 24)] ^ LookupTable_secondword[(byte)(value >> 16)] ^ LookupTable_thirdword[(byte)(value >> 8)] ^ LookupTable_fourthword[(byte)value]);
*(dest+6) = nzrivalue;
previousnrzi_highlow = ((nzrivalue & 0b1) == 0b1) ? ~0U : 0U;

value = 0b01000010000100001000000000010000 /* bit 224-255 */
// b00000000000000001000100010001000 // start of 16 bit sample
| ((sample8<<27)&0b10000000000000000000000000000000)
| ((sample8<<26)&0b00111100000000000000000000000000)
;

nzrivalue = previousnrzi_highlow ^ (LookupTable_firstword[(byte)(value >> 24)] ^ LookupTable_secondword[(byte)(value >> 16)] ^ LookupTable_thirdword[(byte)(value >> 8)] ^ LookupTable_fourthword[(byte)value]);
*(dest+7) = nzrivalue;
previousnrzi_highlow = ((nzrivalue & 0b1) == 0b1) ? ~0U : 0U;

dest+=8;
} while (dest < end);
/*
block = AudioOutputADAT::block_ch1_1st;
if (block) {
offset = AudioOutputADAT::ch1_offset;
src = &block->data[offset];
do {

sample = (uint32_t)*src++;

} while (dest < end);
offset += AUDIO_BLOCK_SAMPLES/2;
if (offset < AUDIO_BLOCK_SAMPLES) {
AudioOutputADAT::ch1_offset = offset;
} else {
AudioOutputADAT::ch1_offset = 0;
AudioStream::release(block);
AudioOutputADAT::block_ch1_1st = AudioOutputADAT::block_ch1_2nd;
AudioOutputADAT::block_ch1_2nd = NULL;
}
} else {
sample = 0;
do {
// *(dest+0) = 0b11111000001111100000111110000011; // bit 0-31
// *(dest+1) = 0b11100000111110000011111000001111; // bit 32-63
// *(dest+2) = 0b10000011111000001111100000111110; // bit 64-95
// *(dest+3) = 0b00001111100000111110000011111000; // bit 96-127

// *(dest+4) = 0b00111110000011111000001111100000; // bit 128-159
// *(dest+5) = 0b11111000001111100000111110000011; // bit 160-191
// *(dest+6) = 0b11100000111110000011111000001111; // bit 192-223
// *(dest+7) = 0b10000011111000001111111111100000; // bit 224-255
dest+=8;
} while (dest < end);
}

dest -= AUDIO_BLOCK_SAMPLES * 8/2 - 8/2;
block = AudioOutputADAT::block_ch2_1st;
if (block) {
offset = AudioOutputADAT::ch2_offset;
src = &block->data[offset];

do {
sample = *src++;
// *(dest+0) = 0b00111110000011111000001111100000; // bit 128-159
// *(dest+1) = 0b11111000001111100000111110000011; // bit 160-191
// *(dest+2) = 0b11100000111110000011111000001111; // bit 192-223
// *(dest+3) = 0b10000011111000001111111111100000; // bit 224-255
dest+=8;
} while (dest < end);

offset += AUDIO_BLOCK_SAMPLES/2;
if (offset < AUDIO_BLOCK_SAMPLES) {
AudioOutputADAT::ch2_offset = offset;
} else {
AudioOutputADAT::ch2_offset = 0;
AudioStream::release(block);
AudioOutputADAT::block_ch2_1st = AudioOutputADAT::block_ch2_2nd;
AudioOutputADAT::block_ch2_2nd = NULL;
}
} else {
// *(dest+0) = 0b00111110000011111000001111100000; // bit 128-159
// *(dest+1) = 0b11111000001111100000111110000011; // bit 160-191
// *(dest+2) = 0b11100000111110000011111000001111; // bit 192-223
// *(dest+3) = 0b10000011111000001111111111100000; // bit 224-255
dest+=8;
}*/

if (block_ch1_1st) {
if (ch1_offset == 0) {
ch1_offset = AUDIO_BLOCK_SAMPLES/2;
} else {
ch1_offset = 0;
release(block_ch1_1st);
block_ch1_1st = block_ch1_2nd;
block_ch1_2nd = NULL;
}
}
if (block_ch2_1st) {
if (ch2_offset == 0) {
ch2_offset = AUDIO_BLOCK_SAMPLES/2;
} else {
ch2_offset = 0;
release(block_ch2_1st);
block_ch2_1st = block_ch2_2nd;
block_ch2_2nd = NULL;
}
}
if (block_ch3_1st) {
if (ch3_offset == 0) {
ch3_offset = AUDIO_BLOCK_SAMPLES/2;
} else {
ch3_offset = 0;
release(block_ch3_1st);
block_ch3_1st = block_ch3_2nd;
block_ch3_2nd = NULL;
}
}
if (block_ch4_1st) {
if (ch4_offset == 0) {
ch4_offset = AUDIO_BLOCK_SAMPLES/2;
} else {
ch4_offset = 0;
release(block_ch4_1st);
block_ch4_1st = block_ch4_2nd;
block_ch4_2nd = NULL;
}
}
if (block_ch5_1st) {
if (ch5_offset == 0) {
ch5_offset = AUDIO_BLOCK_SAMPLES/2;
} else {
ch5_offset = 0;
release(block_ch5_1st);
block_ch5_1st = block_ch5_2nd;
block_ch5_2nd = NULL;
}
}
if (block_ch6_1st) {
if (ch6_offset == 0) {
ch6_offset = AUDIO_BLOCK_SAMPLES/2;
} else {
ch6_offset = 0;
release(block_ch6_1st);
block_ch6_1st = block_ch6_2nd;
block_ch6_2nd = NULL;
}
}
if (block_ch7_1st) {
if (ch7_offset == 0) {
ch7_offset = AUDIO_BLOCK_SAMPLES/2;
} else {
ch7_offset = 0;
release(block_ch7_1st);
block_ch7_1st = block_ch7_2nd;
block_ch7_2nd = NULL;
}
}
if (block_ch8_1st) {
if (ch8_offset == 0) {
ch8_offset = AUDIO_BLOCK_SAMPLES/2;
} else {
ch8_offset = 0;
release(block_ch8_1st);
block_ch8_1st = block_ch8_2nd;
block_ch8_2nd = NULL;
}
}
}

void AudioOutputADAT::mute_PCM(const bool mute)
{
//vucp = mute?VUCP_INVALID:VUCP_VALID;
//#TODO
}

void AudioOutputADAT::update(void)
{

audio_block_t *block, *tmp;

block = receiveReadOnly(0); // input 0 = channel 1
if (block) {
__disable_irq();
if (block_ch1_1st == NULL) {
block_ch1_1st = block;
ch1_offset = 0;
__enable_irq();
} else if (block_ch1_2nd == NULL) {
block_ch1_2nd = block;
__enable_irq();
} else {
tmp = block_ch1_1st;
block_ch1_1st = block_ch1_2nd;
block_ch1_2nd = block;
ch1_offset = 0;
__enable_irq();
release(tmp);
}
}
block = receiveReadOnly(1); // input 1 = channel 2
if (block) {
__disable_irq();
if (block_ch2_1st == NULL) {
block_ch2_1st = block;
ch2_offset = 0;
__enable_irq();
} else if (block_ch2_2nd == NULL) {
block_ch2_2nd = block;
__enable_irq();
} else {
tmp = block_ch2_1st;
block_ch2_1st = block_ch2_2nd;
block_ch2_2nd = block;
ch2_offset = 0;
__enable_irq();
release(tmp);
}
}
block = receiveReadOnly(2); // channel 3
if (block) {
__disable_irq();
if (block_ch3_1st == NULL) {
block_ch3_1st = block;
ch3_offset = 0;
__enable_irq();
} else if (block_ch3_2nd == NULL) {
block_ch3_2nd = block;
__enable_irq();
} else {
tmp = block_ch3_1st;
block_ch3_1st = block_ch3_2nd;
block_ch3_2nd = block;
ch3_offset = 0;
__enable_irq();
release(tmp);
}
}
block = receiveReadOnly(3); // channel 4
if (block) {
__disable_irq();
if (block_ch4_1st == NULL) {
block_ch4_1st = block;
ch4_offset = 0;
__enable_irq();
} else if (block_ch4_2nd == NULL) {
block_ch4_2nd = block;
__enable_irq();
} else {
tmp = block_ch4_1st;
block_ch4_1st = block_ch4_2nd;
block_ch4_2nd = block;
ch4_offset = 0;
__enable_irq();
release(tmp);
}
}
block = receiveReadOnly(4); // channel 5
if (block) {
__disable_irq();
if (block_ch5_1st == NULL) {
block_ch5_1st = block;
ch5_offset = 0;
__enable_irq();
} else if (block_ch5_2nd == NULL) {
block_ch5_2nd = block;
__enable_irq();
} else {
tmp = block_ch5_1st;
block_ch5_1st = block_ch5_2nd;
block_ch5_2nd = block;
ch5_offset = 0;
__enable_irq();
release(tmp);
}
}
block = receiveReadOnly(5); // channel 6
if (block) {
__disable_irq();
if (block_ch6_1st == NULL) {
block_ch6_1st = block;
ch6_offset = 0;
__enable_irq();
} else if (block_ch6_2nd == NULL) {
block_ch6_2nd = block;
__enable_irq();
} else {
tmp = block_ch6_1st;
block_ch6_1st = block_ch6_2nd;
block_ch6_2nd = block;
ch6_offset = 0;
__enable_irq();
release(tmp);
}
}
block = receiveReadOnly(6); // channel 7
if (block) {
__disable_irq();
if (block_ch7_1st == NULL) {
block_ch7_1st = block;
ch7_offset = 0;
__enable_irq();
} else if (block_ch7_2nd == NULL) {
block_ch7_2nd = block;
__enable_irq();
} else {
tmp = block_ch7_1st;
block_ch7_1st = block_ch7_2nd;
block_ch7_2nd = block;
ch7_offset = 0;
__enable_irq();
release(tmp);
}
}
block = receiveReadOnly(7); // channel 8
if (block) {
__disable_irq();
if (block_ch8_1st == NULL) {
block_ch8_1st = block;
ch8_offset = 0;
__enable_irq();
} else if (block_ch8_2nd == NULL) {
block_ch8_2nd = block;
__enable_irq();
} else {
tmp = block_ch8_1st;
block_ch8_1st = block_ch8_2nd;
block_ch8_2nd = block;
ch8_offset = 0;
__enable_irq();
release(tmp);
}
}
}


#ifndef MCLK_SRC
#if F_CPU >= 20000000
#define MCLK_SRC 3 // the PLL
#else
#define MCLK_SRC 0 // system clock
#endif
#endif


void AudioOutputADAT::config_ADAT(void)
{
SIM_SCGC6 |= SIM_SCGC6_I2S;
SIM_SCGC7 |= SIM_SCGC7_DMA;
SIM_SCGC6 |= SIM_SCGC6_DMAMUX;

// enable MCLK output
I2S0_MCR = I2S_MCR_MICS(MCLK_SRC) | I2S_MCR_MOE;
//while (I2S0_MCR & I2S_MCR_DUF) ;
//I2S0_MDR = I2S_MDR_FRACT((MCLK_MULT-1)) | I2S_MDR_DIVIDE((MCLK_DIV-1));

AudioOutputADAT::setI2SFreq(88200);

// configure transmitter
I2S0_TMR = 0;
I2S0_TCR1 = I2S_TCR1_TFW(1); // watermark
I2S0_TCR2 = I2S_TCR2_SYNC(0) | I2S_TCR2_MSEL(1) | I2S_TCR2_BCD | I2S_TCR2_DIV(0);
I2S0_TCR3 = I2S_TCR3_TCE;

//8 Words per Frame 32 Bit Word-Length -> 256 Bit Frame-Length, MSB First:
I2S0_TCR4 = I2S_TCR4_FRSZ(7) | I2S_TCR4_SYWD(0) | I2S_TCR4_MF | I2S_TCR4_FSP | I2S_TCR4_FSD;
I2S0_TCR5 = I2S_TCR5_WNW(31) | I2S_TCR5_W0W(31) | I2S_TCR5_FBT(31);

I2S0_RCSR = 0;

#if 0
// configure pin mux for 3 clock signals (debug only)
CORE_PIN23_CONFIG = PORT_PCR_MUX(6); // pin 23, PTC2, I2S0_TX_FS (LRCLK)
CORE_PIN9_CONFIG = PORT_PCR_MUX(6); // pin 9, PTC3, I2S0_TX_BCLK
// CORE_PIN11_CONFIG = PORT_PCR_MUX(6); // pin 11, PTC6, I2S0_MCLK
#endif
}


#elif defined(KINETISL)

void AudioOutputADAT::update(void)
{

audio_block_t *block;
block = receiveReadOnly(0); // input 0 = ch1 channel
if (block) release(block);
block = receiveReadOnly(1); // input 1 = ch2 channel
if (block) release(block);
block = receiveReadOnly(2); // input 2 = ch3 channel
if (block) release(block);
block = receiveReadOnly(3); // input 3 = ch4 channel
if (block) release(block);
block = receiveReadOnly(4); // input 4 = ch5 channel
if (block) release(block);
block = receiveReadOnly(5); // input 5 = ch6 channel
if (block) release(block);
block = receiveReadOnly(6); // input 6 = ch7 channel
if (block) release(block);
block = receiveReadOnly(7); // input 7 = ch8 channel
if (block) release(block);
}

#endif

/*

https://forum.pjrc.com/threads/38753-Discussion-about-a-simple-way-to-change-the-sample-rate

*/

void AudioOutputADAT::setI2SFreq(int freq) {
typedef struct {
uint8_t mult;
uint16_t div;
} tmclk;

const int numfreqs = 14;
const int samplefreqs[numfreqs] = { 8000, 11025, 16000, 22050, 32000, 44100, (int) 44117.64706 , 48000, 88200, (int) (44117.64706 * 2.0), 96000, 176400,(int) (44117.64706 * 4.0), 192000};

#if (F_PLL==16000000)
const tmclk clkArr[numfreqs] = {{16, 125}, {148, 839}, {32, 125}, {145, 411}, {64, 125}, {151, 214}, {12, 17}, {96, 125}, {151, 107}, {24, 17}, {192, 125}, {127, 45}, {48, 17}, {255, 83} };
#elif (F_PLL==72000000)
const tmclk clkArr[numfreqs] = {{32, 1125}, {49, 1250}, {64, 1125}, {49, 625}, {128, 1125}, {98, 625}, {8, 51}, {64, 375}, {196, 625}, {16, 51}, {128, 375}, {249, 397}, {32, 51}, {185, 271} };
#elif (F_PLL==96000000)
const tmclk clkArr[numfreqs] = {{8, 375}, {73, 2483}, {16, 375}, {147, 2500}, {32, 375}, {147, 1250}, {2, 17}, {16, 125}, {147, 625}, {4, 17}, {32, 125}, {151, 321}, {8, 17}, {64, 125} };
#elif (F_PLL==120000000)
const tmclk clkArr[numfreqs] = {{32, 1875}, {89, 3784}, {64, 1875}, {147, 3125}, {128, 1875}, {205, 2179}, {8, 85}, {64, 625}, {89, 473}, {16, 85}, {128, 625}, {178, 473}, {32, 85}, {145, 354} };
#elif (F_PLL==144000000)
const tmclk clkArr[numfreqs] = {{16, 1125}, {49, 2500}, {32, 1125}, {49, 1250}, {64, 1125}, {49, 625}, {4, 51}, {32, 375}, {98, 625}, {8, 51}, {64, 375}, {196, 625}, {16, 51}, {128, 375} };
#elif (F_PLL==180000000)
const tmclk clkArr[numfreqs] = {{46, 4043}, {49, 3125}, {73, 3208}, {98, 3125}, {183, 4021}, {196, 3125}, {16, 255}, {128, 1875}, {107, 853}, {32, 255}, {219, 1604}, {214, 853}, {64, 255}, {219, 802} };
#elif (F_PLL==192000000)
const tmclk clkArr[numfreqs] = {{4, 375}, {37, 2517}, {8, 375}, {73, 2483}, {16, 375}, {147, 2500}, {1, 17}, {8, 125}, {147, 1250}, {2, 17}, {16, 125}, {147, 625}, {4, 17}, {32, 125} };
#elif (F_PLL==216000000)
const tmclk clkArr[numfreqs] = {{32, 3375}, {49, 3750}, {64, 3375}, {49, 1875}, {128, 3375}, {98, 1875}, {8, 153}, {64, 1125}, {196, 1875}, {16, 153}, {128, 1125}, {226, 1081}, {32, 153}, {147, 646} };
#elif (F_PLL==240000000)
const tmclk clkArr[numfreqs] = {{16, 1875}, {29, 2466}, {32, 1875}, {89, 3784}, {64, 1875}, {147, 3125}, {4, 85}, {32, 625}, {205, 2179}, {8, 85}, {64, 625}, {89, 473}, {16, 85}, {128, 625} };
#endif

for (int f = 0; f < numfreqs; f++) {
if ( freq == samplefreqs[f] ) {
while (I2S0_MCR & I2S_MCR_DUF) ;
I2S0_MDR = I2S_MDR_FRACT((clkArr[f].mult - 1)) | I2S_MDR_DIVIDE((clkArr[f].div - 1));
return;
}
}
}

+ 75
- 0
output_adat.h 查看文件

@@ -0,0 +1,75 @@
/* ADAT for Teensy 3.X
* Copyright (c) 2017, Ernstjan Freriks,
* Thanks to Frank Bösing & KPC & Paul Stoffregen!
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#ifndef output_ADAT_h_
#define output_ADAT_h_

#include "Arduino.h"
#include "AudioStream.h"
#include "DMAChannel.h"

class AudioOutputADAT : public AudioStream
{
public:
AudioOutputADAT(void) : AudioStream(8, inputQueueArray) { begin(); }
virtual void update(void);
void begin(void);
static void mute_PCM(const bool mute);
protected:
AudioOutputADAT(int dummy): AudioStream(8, inputQueueArray) {}
static void config_ADAT(void);
static audio_block_t *block_ch1_1st;
static audio_block_t *block_ch2_1st;
static audio_block_t *block_ch3_1st;
static audio_block_t *block_ch4_1st;
static audio_block_t *block_ch5_1st;
static audio_block_t *block_ch6_1st;
static audio_block_t *block_ch7_1st;
static audio_block_t *block_ch8_1st;
static bool update_responsibility;
static DMAChannel dma;
static void isr(void);
static void setI2SFreq(int freq);
private:
//static uint32_t vucp;
static audio_block_t *block_ch1_2nd;
static audio_block_t *block_ch2_2nd;
static audio_block_t *block_ch3_2nd;
static audio_block_t *block_ch4_2nd;
static audio_block_t *block_ch5_2nd;
static audio_block_t *block_ch6_2nd;
static audio_block_t *block_ch7_2nd;
static audio_block_t *block_ch8_2nd;
static uint16_t ch1_offset;
static uint16_t ch2_offset;
static uint16_t ch3_offset;
static uint16_t ch4_offset;
static uint16_t ch5_offset;
static uint16_t ch6_offset;
static uint16_t ch7_offset;
static uint16_t ch8_offset;
audio_block_t *inputQueueArray[8];
};


#endif

+ 4
- 3
output_dac.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "output_dac.h"
#include "utility/pdb.h"

@@ -42,7 +43,7 @@ void AudioOutputAnalog::begin(void)
SIM_SCGC2 |= SIM_SCGC2_DAC0;
DAC0_C0 = DAC_C0_DACEN; // 1.2V VDDA is DACREF_2
// slowly ramp up to DC voltage, approx 1/4 second
for (int16_t i=0; i<2048; i+=8) {
for (int16_t i=0; i<=2048; i+=8) {
*(int16_t *)&(DAC0_DAT0L) = i;
delay(1);
}
@@ -139,14 +140,14 @@ void AudioOutputAnalog::isr(void)
src = block->data;
do {
// TODO: this should probably dither
*dest++ = ((*src++) + 32767) >> 4;
*dest++ = ((*src++) + 32768) >> 4;
} while (dest < end);
AudioStream::release(block);
AudioOutputAnalog::block_left_1st = AudioOutputAnalog::block_left_2nd;
AudioOutputAnalog::block_left_2nd = NULL;
} else {
do {
*dest++ = 2047;
*dest++ = 2048;
} while (dest < end);
}
if (AudioOutputAnalog::update_responsibility) AudioStream::update_all();

+ 8
- 7
output_dacs.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "output_dacs.h"
#include "utility/pdb.h"

@@ -48,7 +49,7 @@ void AudioOutputAnalogStereo::begin(void)
memset(&block_silent, 0, sizeof(block_silent));

// slowly ramp up to DC voltage, approx 1/4 second
for (int16_t i=0; i<2048; i+=8) {
for (int16_t i=0; i<=2048; i+=8) {
*(int16_t *)&(DAC0_DAT0L) = i;
*(int16_t *)&(DAC1_DAT0L) = i;
delay(1);
@@ -174,10 +175,10 @@ void AudioOutputAnalogStereo::isr(void)
// TODO: can this be optimized?
uint32_t left = *src_left++;
uint32_t right = *src_right++;
uint32_t out1 = ((left & 0xFFFF) + 32767) >> 4;
out1 |= (((right & 0xFFFF) + 32767) >> 4) << 16;
uint32_t out2 = ((left >> 16) + 32767) >> 4;
out2 |= (((right >> 16) + 32767) >> 4) << 16;
uint32_t out1 = ((left & 0xFFFF) + 32768) >> 4;
out1 |= (((right & 0xFFFF) + 32768) >> 4) << 16;
uint32_t out2 = ((left >> 16) + 32768) >> 4;
out2 |= (((right >> 16) + 32768) >> 4) << 16;
*dest++ = out1;
*dest++ = out2;
} while (dest < end);
@@ -189,8 +190,8 @@ void AudioOutputAnalogStereo::isr(void)
}
if (block_right != &block_silent) {
release(block_right);
block_left_1st = block_left_2nd;
block_left_2nd = NULL;
block_right_1st = block_right_2nd;
block_right_2nd = NULL;
}

if (update_responsibility) update_all();

+ 15
- 13
output_i2s.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "output_i2s.h"
#include "memcpy_audio.h"

@@ -54,7 +55,7 @@ void AudioOutputI2S::begin(void)
dma.TCD->ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1);
dma.TCD->NBYTES_MLNO = 2;
dma.TCD->SLAST = -sizeof(i2s_tx_buffer);
dma.TCD->DADDR = &I2S0_TDR0;
dma.TCD->DADDR = (void *)((uint32_t)&I2S0_TDR0 + 2);
dma.TCD->DOFF = 0;
dma.TCD->CITER_ELINKNO = sizeof(i2s_tx_buffer) / 2;
dma.TCD->DLASTSGA = 0;
@@ -316,21 +317,21 @@ void AudioOutputI2S::config_i2s(void)
I2S0_TMR = 0;
I2S0_TCR1 = I2S_TCR1_TFW(1); // watermark at half fifo size
I2S0_TCR2 = I2S_TCR2_SYNC(0) | I2S_TCR2_BCP | I2S_TCR2_MSEL(1)
| I2S_TCR2_BCD | I2S_TCR2_DIV(3);
| I2S_TCR2_BCD | I2S_TCR2_DIV(1);
I2S0_TCR3 = I2S_TCR3_TCE;
I2S0_TCR4 = I2S_TCR4_FRSZ(1) | I2S_TCR4_SYWD(15) | I2S_TCR4_MF
I2S0_TCR4 = I2S_TCR4_FRSZ(1) | I2S_TCR4_SYWD(31) | I2S_TCR4_MF
| I2S_TCR4_FSE | I2S_TCR4_FSP | I2S_TCR4_FSD;
I2S0_TCR5 = I2S_TCR5_WNW(15) | I2S_TCR5_W0W(15) | I2S_TCR5_FBT(15);
I2S0_TCR5 = I2S_TCR5_WNW(31) | I2S_TCR5_W0W(31) | I2S_TCR5_FBT(31);

// configure receiver (sync'd to transmitter clocks)
I2S0_RMR = 0;
I2S0_RCR1 = I2S_RCR1_RFW(1);
I2S0_RCR2 = I2S_RCR2_SYNC(1) | I2S_TCR2_BCP | I2S_RCR2_MSEL(1)
| I2S_RCR2_BCD | I2S_RCR2_DIV(3);
| I2S_RCR2_BCD | I2S_RCR2_DIV(1);
I2S0_RCR3 = I2S_RCR3_RCE;
I2S0_RCR4 = I2S_RCR4_FRSZ(1) | I2S_RCR4_SYWD(15) | I2S_RCR4_MF
I2S0_RCR4 = I2S_RCR4_FRSZ(1) | I2S_RCR4_SYWD(31) | I2S_RCR4_MF
| I2S_RCR4_FSE | I2S_RCR4_FSP | I2S_RCR4_FSD;
I2S0_RCR5 = I2S_RCR5_WNW(15) | I2S_RCR5_W0W(15) | I2S_RCR5_FBT(15);
I2S0_RCR5 = I2S_RCR5_WNW(31) | I2S_RCR5_W0W(31) | I2S_RCR5_FBT(31);

// configure pin mux for 3 clock signals
CORE_PIN23_CONFIG = PORT_PCR_MUX(6); // pin 23, PTC2, I2S0_TX_FS (LRCLK)
@@ -358,7 +359,7 @@ void AudioOutputI2Sslave::begin(void)
dma.TCD->ATTR = DMA_TCD_ATTR_SSIZE(1) | DMA_TCD_ATTR_DSIZE(1);
dma.TCD->NBYTES_MLNO = 2;
dma.TCD->SLAST = -sizeof(i2s_tx_buffer);
dma.TCD->DADDR = &I2S0_TDR0;
dma.TCD->DADDR = (void *)((uint32_t)&I2S0_TDR0 + 2);
dma.TCD->DOFF = 0;
dma.TCD->CITER_ELINKNO = sizeof(i2s_tx_buffer) / 2;
dma.TCD->DLASTSGA = 0;
@@ -369,7 +370,8 @@ void AudioOutputI2Sslave::begin(void)
update_responsibility = update_setup();
dma.enable();

I2S0_TCSR |= I2S_TCSR_TE | I2S_TCSR_BCE | I2S_TCSR_FRDE | I2S_TCSR_FR;
I2S0_TCSR = I2S_TCSR_SR;
I2S0_TCSR = I2S_TCSR_TE | I2S_TCSR_BCE | I2S_TCSR_FRDE;
dma.attachInterrupt(isr);
}

@@ -394,10 +396,10 @@ void AudioOutputI2Sslave::config_i2s(void)
I2S0_TCR2 = I2S_TCR2_SYNC(0) | I2S_TCR2_BCP;

I2S0_TCR3 = I2S_TCR3_TCE;
I2S0_TCR4 = I2S_TCR4_FRSZ(1) | I2S_TCR4_SYWD(15) | I2S_TCR4_MF
I2S0_TCR4 = I2S_TCR4_FRSZ(1) | I2S_TCR4_SYWD(31) | I2S_TCR4_MF
| I2S_TCR4_FSE | I2S_TCR4_FSP;

I2S0_TCR5 = I2S_TCR5_WNW(15) | I2S_TCR5_W0W(15) | I2S_TCR5_FBT(15);
I2S0_TCR5 = I2S_TCR5_WNW(31) | I2S_TCR5_W0W(31) | I2S_TCR5_FBT(31);

// configure receiver (sync'd to transmitter clocks)
I2S0_RMR = 0;
@@ -405,10 +407,10 @@ void AudioOutputI2Sslave::config_i2s(void)
I2S0_RCR2 = I2S_RCR2_SYNC(1) | I2S_TCR2_BCP;

I2S0_RCR3 = I2S_RCR3_RCE;
I2S0_RCR4 = I2S_RCR4_FRSZ(1) | I2S_RCR4_SYWD(15) | I2S_RCR4_MF
I2S0_RCR4 = I2S_RCR4_FRSZ(1) | I2S_RCR4_SYWD(31) | I2S_RCR4_MF
| I2S_RCR4_FSE | I2S_RCR4_FSP | I2S_RCR4_FSD;

I2S0_RCR5 = I2S_RCR5_WNW(15) | I2S_RCR5_W0W(15) | I2S_RCR5_FBT(15);
I2S0_RCR5 = I2S_RCR5_WNW(31) | I2S_RCR5_W0W(31) | I2S_RCR5_FBT(31);

// configure pin mux for 3 clock signals
CORE_PIN23_CONFIG = PORT_PCR_MUX(6); // pin 23, PTC2, I2S0_TX_FS (LRCLK)

+ 1
- 0
output_i2s_quad.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "output_i2s_quad.h"
#include "memcpy_audio.h"


+ 2
- 1
output_pt8211.cpp 查看文件

@@ -26,6 +26,7 @@

//Adapted to PT8211, Frank Bösing, Ben-Rheinland

#include <Arduino.h>
#include "output_pt8211.h"
#include "memcpy_audio.h"

@@ -447,7 +448,7 @@ void AudioOutputPT8211::config_i2s(void)
I2S0_TCR2 = I2S_TCR2_SYNC(0) | I2S_TCR2_BCP | I2S_TCR2_MSEL(1) | I2S_TCR2_BCD | I2S_TCR2_DIV(3);
#endif
I2S0_TCR3 = I2S_TCR3_TCE;
// I2S0_TCR4 = I2S_TCR4_FRSZ(1) | I2S_TCR4_SYWD(15) | I2S_TCR4_MF | I2S_TCR4_FSE | I2S_TCR4_FSP | I2S_TCR4_FSD;
// I2S0_TCR4 = I2S_TCR4_FRSZ(1) | I2S_TCR4_SYWD(15) | I2S_TCR4_MF | I2S_TCR4_FSE | I2S_TCR4_FSP | I2S_TCR4_FSD; //TDA1543
I2S0_TCR4 = I2S_TCR4_FRSZ(1) | I2S_TCR4_SYWD(15) | I2S_TCR4_MF /*| I2S_TCR4_FSE*/ | I2S_TCR4_FSP | I2S_TCR4_FSD; //PT8211
I2S0_TCR5 = I2S_TCR5_WNW(15) | I2S_TCR5_W0W(15) | I2S_TCR5_FBT(15);


+ 1
- 0
output_pwm.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "output_pwm.h"

audio_block_t * AudioOutputPWM::block_1st = NULL;

+ 1
- 0
output_spdif.cpp 查看文件

@@ -23,6 +23,7 @@

// 2015/08/23: (FB) added mute_PCM() - sets or unsets VALID in VUCP (and adjusts PARITY)

#include <Arduino.h>
#include "output_spdif.h"

#if defined(KINETISK)

+ 226
- 0
output_tdm.cpp 查看文件

@@ -0,0 +1,226 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2017, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
* open source software by purchasing Teensy or other PJRC products.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "output_tdm.h"
#include "memcpy_audio.h"
#if defined(KINETISK)

audio_block_t * AudioOutputTDM::block_input[16] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
bool AudioOutputTDM::update_responsibility = false;
static uint32_t zeros[AUDIO_BLOCK_SAMPLES/2];
DMAMEM static uint32_t tdm_tx_buffer[AUDIO_BLOCK_SAMPLES*16];
DMAChannel AudioOutputTDM::dma(false);

void AudioOutputTDM::begin(void)
{
dma.begin(true); // Allocate the DMA channel first

for (int i=0; i < 16; i++) {
block_input[i] = NULL;
}

// TODO: should we set & clear the I2S_TCSR_SR bit here?
config_tdm();
CORE_PIN22_CONFIG = PORT_PCR_MUX(6); // pin 22, PTC1, I2S0_TXD0

dma.TCD->SADDR = tdm_tx_buffer;
dma.TCD->SOFF = 4;
dma.TCD->ATTR = DMA_TCD_ATTR_SSIZE(2) | DMA_TCD_ATTR_DSIZE(2);
dma.TCD->NBYTES_MLNO = 4;
dma.TCD->SLAST = -sizeof(tdm_tx_buffer);
dma.TCD->DADDR = &I2S0_TDR0;
dma.TCD->DOFF = 0;
dma.TCD->CITER_ELINKNO = sizeof(tdm_tx_buffer) / 4;
dma.TCD->DLASTSGA = 0;
dma.TCD->BITER_ELINKNO = sizeof(tdm_tx_buffer) / 4;
dma.TCD->CSR = DMA_TCD_CSR_INTHALF | DMA_TCD_CSR_INTMAJOR;
dma.triggerAtHardwareEvent(DMAMUX_SOURCE_I2S0_TX);
update_responsibility = update_setup();
dma.enable();

I2S0_TCSR = I2S_TCSR_SR;
I2S0_TCSR = I2S_TCSR_TE | I2S_TCSR_BCE | I2S_TCSR_FRDE;
dma.attachInterrupt(isr);
}

// TODO: needs optimization...
static void memcpy_tdm_tx(uint32_t *dest, const uint32_t *src1, const uint32_t *src2)
{
uint32_t i, in1, in2, out1, out2;

for (i=0; i < AUDIO_BLOCK_SAMPLES/2; i++) {
in1 = *src1++;
in2 = *src2++;
out1 = (in1 << 16) | (in2 & 0xFFFF);
out2 = (in1 & 0xFFFF0000) | (in2 >> 16);
*dest = out1;
*(dest + 8) = out2;
dest += 16;
}
}

void AudioOutputTDM::isr(void)
{
uint32_t *dest;
const uint32_t *src1, *src2;
uint32_t i, saddr;

saddr = (uint32_t)(dma.TCD->SADDR);
dma.clearInterrupt();
if (saddr < (uint32_t)tdm_tx_buffer + sizeof(tdm_tx_buffer) / 2) {
// DMA is transmitting the first half of the buffer
// so we must fill the second half
dest = tdm_tx_buffer + AUDIO_BLOCK_SAMPLES*8;
} else {
// DMA is transmitting the second half of the buffer
// so we must fill the first half
dest = tdm_tx_buffer;
}
if (update_responsibility) AudioStream::update_all();
for (i=0; i < 16; i += 2) {
src1 = block_input[i] ? (uint32_t *)(block_input[i]->data) : zeros;
src2 = block_input[i+1] ? (uint32_t *)(block_input[i+1]->data) : zeros;
memcpy_tdm_tx(dest, src1, src2);
dest++;
}
for (i=0; i < 16; i++) {
if (block_input[i]) {
release(block_input[i]);
block_input[i] = NULL;
}
}
}


void AudioOutputTDM::update(void)
{
audio_block_t *prev[16];
unsigned int i;

__disable_irq();
for (i=0; i < 16; i++) {
prev[i] = block_input[i];
block_input[i] = receiveReadOnly(i);
}
__enable_irq();
for (i=0; i < 16; i++) {
if (prev[i]) release(prev[i]);
}
}


// MCLK needs to be 48e6 / 1088 * 512 = 22.588235 MHz -> 44.117647 kHz sample rate
//
#if F_CPU == 96000000 || F_CPU == 48000000 || F_CPU == 24000000
// PLL is at 96 MHz in these modes
#define MCLK_MULT 4
#define MCLK_DIV 17
#elif F_CPU == 72000000
#define MCLK_MULT 16
#define MCLK_DIV 51
#elif F_CPU == 120000000
#define MCLK_MULT 16
#define MCLK_DIV 85
#elif F_CPU == 144000000
#define MCLK_MULT 8
#define MCLK_DIV 51
#elif F_CPU == 168000000
#define MCLK_MULT 16
#define MCLK_DIV 119
#elif F_CPU == 180000000
#define MCLK_MULT 32
#define MCLK_DIV 255
#define MCLK_SRC 0
#elif F_CPU == 192000000
#define MCLK_MULT 2
#define MCLK_DIV 17
#elif F_CPU == 216000000
#define MCLK_MULT 16
#define MCLK_DIV 153
#define MCLK_SRC 0
#elif F_CPU == 240000000
#define MCLK_MULT 8
#define MCLK_DIV 85
#else
#error "This CPU Clock Speed is not supported by the Audio library";
#endif

#ifndef MCLK_SRC
#if F_CPU >= 20000000
#define MCLK_SRC 3 // the PLL
#else
#define MCLK_SRC 0 // system clock
#endif
#endif

void AudioOutputTDM::config_tdm(void)
{
SIM_SCGC6 |= SIM_SCGC6_I2S;
SIM_SCGC7 |= SIM_SCGC7_DMA;
SIM_SCGC6 |= SIM_SCGC6_DMAMUX;

// if either transmitter or receiver is enabled, do nothing
if (I2S0_TCSR & I2S_TCSR_TE) return;
if (I2S0_RCSR & I2S_RCSR_RE) return;

// enable MCLK output
I2S0_MCR = I2S_MCR_MICS(MCLK_SRC) | I2S_MCR_MOE;
while (I2S0_MCR & I2S_MCR_DUF) ;
I2S0_MDR = I2S_MDR_FRACT((MCLK_MULT-1)) | I2S_MDR_DIVIDE((MCLK_DIV-1));

// configure transmitter
I2S0_TMR = 0;
I2S0_TCR1 = I2S_TCR1_TFW(4);
I2S0_TCR2 = I2S_TCR2_SYNC(0) | I2S_TCR2_BCP | I2S_TCR2_MSEL(1)
| I2S_TCR2_BCD | I2S_TCR2_DIV(0);
I2S0_TCR3 = I2S_TCR3_TCE;
I2S0_TCR4 = I2S_TCR4_FRSZ(7) | I2S_TCR4_SYWD(0) | I2S_TCR4_MF
| I2S_TCR4_FSE | I2S_TCR4_FSD;
I2S0_TCR5 = I2S_TCR5_WNW(31) | I2S_TCR5_W0W(31) | I2S_TCR5_FBT(31);

// configure receiver (sync'd to transmitter clocks)
I2S0_RMR = 0;
I2S0_RCR1 = I2S_RCR1_RFW(4);
I2S0_RCR2 = I2S_RCR2_SYNC(1) | I2S_TCR2_BCP | I2S_RCR2_MSEL(1)
| I2S_RCR2_BCD | I2S_RCR2_DIV(0);
I2S0_RCR3 = I2S_RCR3_RCE;
I2S0_RCR4 = I2S_RCR4_FRSZ(7) | I2S_RCR4_SYWD(0) | I2S_RCR4_MF
| I2S_RCR4_FSE | I2S_RCR4_FSD;
I2S0_RCR5 = I2S_RCR5_WNW(31) | I2S_RCR5_W0W(31) | I2S_RCR5_FBT(31);

// configure pin mux for 3 clock signals
CORE_PIN23_CONFIG = PORT_PCR_MUX(6); // pin 23, PTC2, I2S0_TX_FS (LRCLK)
CORE_PIN9_CONFIG = PORT_PCR_MUX(6); // pin 9, PTC3, I2S0_TX_BCLK
CORE_PIN11_CONFIG = PORT_PCR_MUX(6); // pin 11, PTC6, I2S0_MCLK
}



#endif // KINETISK

+ 52
- 0
output_tdm.h 查看文件

@@ -0,0 +1,52 @@
/* Audio Library for Teensy 3.X
* Copyright (c) 2017, Paul Stoffregen, paul@pjrc.com
*
* Development of this audio library was funded by PJRC.COM, LLC by sales of
* Teensy and Audio Adaptor boards. Please support PJRC's efforts to develop
* open source software by purchasing Teensy or other PJRC products.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice, development funding notice, and this permission
* notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

#ifndef output_tdm_h_
#define output_tdm_h_

#include "Arduino.h"
#include "AudioStream.h"
#include "DMAChannel.h"

class AudioOutputTDM : public AudioStream
{
public:
AudioOutputTDM(void) : AudioStream(16, inputQueueArray) { begin(); }
virtual void update(void);
void begin(void);
friend class AudioInputTDM;
protected:
static void config_tdm(void);
static audio_block_t *block_input[16];
static bool update_responsibility;
static DMAChannel dma;
static void isr(void);
private:
audio_block_t *inputQueueArray[16];
};


#endif

+ 1
- 0
play_memory.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "play_memory.h"
#include "utility/dspinst.h"


+ 1
- 0
play_queue.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "play_queue.h"
#include "utility/dspinst.h"


+ 1
- 0
play_sd_raw.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "play_sd_raw.h"
#include "spi_interrupt.h"


+ 15
- 6
play_sd_wav.cpp 查看文件

@@ -24,6 +24,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "play_sd_wav.h"
#include "spi_interrupt.h"

@@ -538,21 +539,29 @@ bool AudioPlaySdWav::parse_format(void)

bool AudioPlaySdWav::isPlaying(void)
{
return (state < 8);
uint8_t s = *(volatile uint8_t *)&state;
return (s < 8);
}

uint32_t AudioPlaySdWav::positionMillis(void)
{
if (state >= 8) return 0;
uint32_t offset = total_length - data_length;
return ((uint64_t)offset * bytes2millis) >> 32;
uint8_t s = *(volatile uint8_t *)&state;
if (s >= 8) return 0;
uint32_t tlength = *(volatile uint32_t *)&total_length;
uint32_t dlength = *(volatile uint32_t *)&data_length;
uint32_t offset = tlength - dlength;
uint32_t b2m = *(volatile uint32_t *)&bytes2millis;
return ((uint64_t)offset * b2m) >> 32;
}


uint32_t AudioPlaySdWav::lengthMillis(void)
{
if (state >= 8) return 0;
return ((uint64_t)total_length * bytes2millis) >> 32;
uint8_t s = *(volatile uint8_t *)&state;
if (s >= 8) return 0;
uint32_t tlength = *(volatile uint32_t *)&total_length;
uint32_t b2m = *(volatile uint32_t *)&bytes2millis;
return ((uint64_t)tlength * b2m) >> 32;
}



+ 1
- 0
play_serialflash_raw.cpp 查看文件

@@ -25,6 +25,7 @@
* THE SOFTWARE.
*/

#include <Arduino.h>
#include "play_serialflash_raw.h"
#include "spi_interrupt.h"


+ 0
- 0
record_queue.cpp 查看文件


部分文件因为文件数量过多而无法显示

正在加载...
取消
保存