From 3449e8ff03fc76ab5f6eaf05a27588e109e8c1c3 Mon Sep 17 00:00:00 2001 From: TrystanLea Date: Mon, 19 Jul 2021 09:23:02 +0100 Subject: [PATCH] emonPiFrontEndCM https://community.openenergymonitor.org/t/the-emonpicm --- .gitignore | 1 + emonPiFrontEndCM.ino | 578 +++++++++++ emonPiFrontEndCM.pdf | Bin 0 -> 49588 bytes emonPiFrontEndCM_config.ino | 586 +++++++++++ firmware.hex | 1928 +++++++++++++++++++++++++++++++++++ platformio.ini | 11 + 6 files changed, 3104 insertions(+) create mode 100644 .gitignore create mode 100644 emonPiFrontEndCM.ino create mode 100644 emonPiFrontEndCM.pdf create mode 100644 emonPiFrontEndCM_config.ino create mode 100644 firmware.hex create mode 100644 platformio.ini diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..03f4a3c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.pio diff --git a/emonPiFrontEndCM.ino b/emonPiFrontEndCM.ino new file mode 100644 index 0000000..b68a167 --- /dev/null +++ b/emonPiFrontEndCM.ino @@ -0,0 +1,578 @@ +/* + + + emonPi Continuous Monitoring - radio using JeeLib RFM69 "Native" format + + + ------------------------------------------ + Part of the openenergymonitor.org project + + Authors: Glyn Hudson, Trystan Lea & Robert Wall + Builds upon JCW JeeLabs RF69 Driver and Arduino + + Licence: GNU GPL V3 + +//----------------------------emonPi Firmware Version---------------------------------------------------------------------------------------- +*/ + +const byte firmware_version[3] = {1,0,0}; +/* +V1.0.0 10/7/2021 Derived from emonLibCM examples and original emonPi sketch, that being derived from + https://github.com/openenergymonitor/emonpi/blob/master/Atmega328/emonPi_RFM69CW_RF12Demo_DiscreteSampling + and emonLibCM example sketches, with config input based on emonTx V3 sketches. + + +emonhub.conf node decoder (assuming Node 5): + +[[5]] + nodename = emonpiCM + [[[rx]]] + names = power1,power2,power1pluspower2,vrms,t1,t2,t3,t4,t5,t6,pulse1count,pulse2count,E1,E2 + datacodes = h, h, h, h, h, h, h, h, h, h, L, L, l, l + scales = 1,1,1, 0.01, 0.01,0.01,0.01,0.01,0.01,0.01, 1, 1, 1,1 + units = W,W,W, V, C,C,C,C,C,C, p, p, Wh,Wh + +*/ +// #define EEWL_DEBUG + + +// #define SAMPPIN 19 + +#include // OEM CM library + +#include +// OEM EPROM library + +// RFM interface +#include "spi.h" // Requires "RFM69 Native" JeeLib Driver +#include "rf69.h" +RF69 rf; + +bool rfDataAvailable = false; + +byte nativeMsg[66]; // 'Native' format message buffer + +#define MAXMSG 66 // Max length of o/g message +char outmsg[MAXMSG]; // outgoing message (to emonGLCD etc) +byte outmsgLength; // length of message: non-zero length triggers transmission + +struct { // Ancilliary information + byte srcNode = 0; + byte msgLength = 0; + signed char rssi = -127; + bool crc = false; +} rfInfo; + +enum rfband {RFM_433MHZ = 1, RFM_868MHZ, RFM_915MHZ }; // frequency band. +bool rfChanged = false; // marker to re-initialise radio +#define RFRX 0x01 // Control of RFM - receive enabled +#define RFTX 0x02 // Control of RFM - transmit enabled + +#include // https://github.com/openenergymonitor/LiquidCrystal_I2C + +int i2c_lcd_address[2] = {0x27, 0x3f}; // I2C addresses to test for I2C LCD device +int current_lcd_i2c_addr; // Used to store current I2C address as found by i2_lcd_detect() +// LiquidCrystal_I2C lcd(0x27,16,2); // Placeholder +LiquidCrystal_I2C lcd(0,0,0); + +bool backlight = false; // Controls for backlight timeout +bool backlightTimer = false; +unsigned long backlightOn; +#define BACKLIGHT_TIMEOUT 60000UL // Timeout in ms (only for data from here) + + +//----------------------------emonPi Settings------------------------------------------------------------------------------------------------ +bool debug = true; +bool verbose = false; +const unsigned long BAUD_RATE = 38400; + + +int i2c_LCD_Detect(int i2c_lcd_address[]); +void emonPi_LCD_Startup(int current_i2c_addr); +void Startup_to_LCD(int current_lcd_i2c_addr); +void lcd_print_currents(int current_lcd_i2c_addr, float I1, float I2, float pf1, float pf2); +void single_LED_flash(void); +void double_LED_flash(void); +void getCalibration(void); +void send_emonpi_serial(); +void emonPi_startup(void); +static void showString (PGM_P s); + + +//--------------------------- temperature data ---------------------------------------------------------------------------------------------- + +const byte MaxOnewire = 6; // maximum number of DS18B20 one wire sensors +int allTemps[MaxOnewire]; // Array to receive temperature measurements +const byte TEMPERATURE_PRECISION = 11; // 9 (93.8ms), 10 (187.5ms), 11 (375ms) or 12 (750ms) bits equal to resolution of 0.5C, 0.25C, 0.125C and 0.0625C + +//---------------------------- emonPi Settings - Stored in EEPROM and shared with config.ino ------------------------------------------------ +struct { + byte RF_freq = RFM_433MHZ; // Frequency of radio module can be RFM_433MHZ, RFM_868MHZ or RFM_915MHZ. + byte rfPower = 25; // Power when transmitting + byte networkGroup = 210; // wireless network group, must be the same as emonBase / emonPi and emonGLCD. OEM default is 210 + byte nodeID = 5; // node ID for this emonPi. + float vCal = 268.97; // (240V x 13) / 11.6V = 268.97 Calibration for UK AC-AC adapter 77DB-06-09 + float assumedVrms = 240.0; // Assumed Vrms when no a.c. is detected + float lineFreq = 50; // Line Frequency = 50 Hz + float i1Cal = 90.9; // (100 A / 50 mA / 22 Ohm burden) = 90.9 + float i1Lead = 1.2; // 1.2° phase lead + float i2Cal = 90.9; + float i2Lead = 1.2; + float period = 4.85; // datalogging period - should be fractionally less than the PHPFINA database period in emonCMS + bool pulse_enable = true; // pulse 1 counting 1 + int pulse_period = 0; // pulse 1 min period - 0 = no de-bounce + bool pulse2_enable = false; // pulse 2 counting 2 + int pulse2_period = 0; // pulse 2 min period - 0 = no de-bounce + bool temp_enable = true; // enable temperature measurement + DeviceAddress allAddresses[MaxOnewire]; // sensor address data + bool showCurrents = false; // Print to serial voltage, current & p.f. values + byte rfOn = 0x03; // Turn transmitter AND receiver on +} EEProm; + +uint16_t eepromSig = 0x0010; // EEPROM signature - see oemEProm Library documentation for details. + +//------------------------------------------------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------------------------------------------------- + +bool shutdown_switch_last_state = false; + +//--------------------------- hard-wired connections ---------------------------------------------------------------------------------------- + +const byte LEDpin = 9; // emonPi LED - on when HIGH +const byte shutdown_switch_pin = 8; // Push-to-make - Low when pressed +const byte emonpi_GPIO_pin = 5; // Connected to Pi GPIO 17, used to activate Pi Shutdown when HIGH +//const byte emonPi_RJ45_8_IO = A6; // RJ45 pin 8 - Analog 6 - Aux I/O - D20? +const byte emonPi_int0 = 0; // RJ45 pin 6 - INT0 - Dig 2 - default pulse count interrupt +const byte emonPi_int0_pin = 2; // RJ45 pin 6 - INT0 - Dig 2 - default pulse count input pin +const byte emonPi_int1 = 1; // RJ45 pin 6 - INT1 - Dig 3 - default pulse count interrupt +const byte emonPi_int1_pin = 3; // RJ45 pin 6 - INT1 - Dig 3 - default pulse count input pin + +// Use D5 for ISR timimg checks - only if Pi is not connected! + +//------------------------------------------------------------------------------------------------------------------------------------------- + +struct +{ + int power1; // Powers in watts + int power2; + int power1_plus_2; // added here to assure sum is from the same sampling period + int Vrms; + int temp[MaxOnewire]; + unsigned long pulseCount; // in whatever units the meter records + unsigned long pulse2Count; // in whatever units the meter records + long E1; // Accumulated energy from powers in Wh + long E2; +} emonPi; // Data format for byte-wise serial transfer to Raspberry Pi +//------------------------------------------------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------------------------------------------------- + +#ifdef EEWL_DEBUG + extern EEWL EVmem; +#endif + + +/************************************************************************************************************************************************** +* +* SETUP Set up & start the display, the radio & emonLibCM +* +***************************************************************************************************************************************************/ +void setup() +{ + + emonPi_startup(); + + delay(2000); + + EmonLibCM_SetADC_VChannel(0, EEProm.vCal); // ADC Input channel, voltage calibration - for Ideal UK Adapter = 268.97 + EmonLibCM_SetADC_IChannel(1, EEProm.i1Cal, EEProm.i1Lead); // ADC Input channel, current calibration, phase calibration + EmonLibCM_SetADC_IChannel(2, EEProm.i2Cal, EEProm.i2Lead); // The current channels will be read in this order + + EmonLibCM_ADCCal(3.3); // ADC Reference voltage, (3.3 V) + EmonLibCM_cycles_per_second(EEProm.lineFreq); // mains frequency 50/60Hz + + EmonLibCM_setAssumedVrms(EEProm.assumedVrms); + + EmonLibCM_setPulseEnable(0, EEProm.pulse_enable); // Enable pulse counting + EmonLibCM_setPulsePin(0, emonPi_int1_pin, emonPi_int1); // Pulse input Pin, Interrupt + EmonLibCM_setPulseMinPeriod(0, EEProm.pulse_period); // Minimum pulse period + EmonLibCM_setPulseEnable(1, EEProm.pulse2_enable); // Enable pulse counting + EmonLibCM_setPulsePin(1, emonPi_int1_pin, emonPi_int1); // Pulse input Pin, Interrupt + EmonLibCM_setPulseMinPeriod(1, EEProm.pulse_period); // Minimum pulse period + + EmonLibCM_setTemperatureDataPin(4); // OneWire data pin + EmonLibCM_setTemperaturePowerPin(-1); // Temperature sensor Power Pin - Not used. + EmonLibCM_setTemperatureResolution(TEMPERATURE_PRECISION); // Resolution in bits, allowed values 9 - 12. 11-bit resolution, reads to 0.125 degC + EmonLibCM_setTemperatureAddresses(EEProm.allAddresses, true); // Name of array of temperature sensors + EmonLibCM_setTemperatureArray(allTemps); // Name of array to receive temperature measurements + EmonLibCM_setTemperatureMaxCount(MaxOnewire); // Max number of sensors, limited by wiring and array size. + + +#ifdef EEWL_DEBUG + Serial.print(F("End of mem="));Serial.print(E2END); + Serial.print(F(" Avail mem="));Serial.print((E2END>>2) * 3); + Serial.print(F(" Start addr="));Serial.print(E2END - (((E2END>>2) * 3) / (sizeof(mem)+1))*(sizeof(mem)+1)); + Serial.print(F(" Num blocks="));Serial.println(((E2END>>2) * 3) / 21); + EVmem.dump_buffer(); +#endif + // Recover saved energy & pulse count from EEPROM + { + long E1 = 0, E2 = 0; + unsigned long p1 = 0, p2 = 0; + + recoverEValues(&E1, &E2, &p1, &p2); + EmonLibCM_setWattHour(0, E1); + EmonLibCM_setWattHour(1, E2); + EmonLibCM_setPulseCount(0, p1); + EmonLibCM_setPulseCount(1, p2); + } + + EmonLibCM_TemperatureEnable(EEProm.temp_enable); // Temperature monitoring enable + EmonLibCM_min_startup_cycles(10); // number of cycles to let ADC run before starting first actual measurement + + EmonLibCM_datalog_period(0.5); // Get a quick reading for display of voltage, temp sensor count. + + + // Detect and startup I2C LCD + current_lcd_i2c_addr = i2c_LCD_Detect(i2c_lcd_address); + + LiquidCrystal_I2C lcd(current_lcd_i2c_addr,16,2); // LCD I2C address to 0x27, 16x2 line display + emonPi_LCD_Startup(current_lcd_i2c_addr); + backlightTimer = true; + + EmonLibCM_Init(); // Start continuous monitoring. + + while (!EmonLibCM_Ready()) // Quick check for presence of a voltage + ; + + EmonLibCM_datalog_period(EEProm.period); // Reset to NORMAL period of readings in seconds for emonCMS + Startup_to_LCD(current_lcd_i2c_addr); + + rf.init(EEProm.nodeID, EEProm.networkGroup, + EEProm.RF_freq == RFM_915MHZ ? 915 // Fall through to 433 MHz Band @ 434 MHz + : (EEProm.RF_freq == RFM_868MHZ ? 868 : 434)); + +} + +/************************************************************************************************************************************************** +* +* LOOP Read the pushbutton, poll the radio for incoming data, the serial input for calibration & emonLibCM for energy readings +* +***************************************************************************************************************************************************/ + +void loop() +{ + if (digitalRead(shutdown_switch_pin) == 0 ) + { + digitalWrite(emonpi_GPIO_pin, HIGH); // if emonPi shutdown button pressed then send signal to the Pi on GPIO 11 + shutdown_switch_last_state = true; + } + else + { + digitalWrite(emonpi_GPIO_pin, LOW); + if (shutdown_switch_last_state) + asm volatile (" jmp 0"); + + } + +//------------------------------------------------------------------------------------------------------------------------------------------- +// RF Data handler - inbound **************************************************************************************************************** +//------------------------------------------------------------------------------------------------------------------------------------------- + + int len = rf.receive(&nativeMsg, sizeof(nativeMsg)); // Poll the RFM buffer and extract the data + if ((EEProm.rfOn & RFRX) && len > 1) + { + rfInfo.crc = true; + rfInfo.msgLength = len; + rfInfo.srcNode = nativeMsg[1]; + rfInfo.rssi = -rf.rssi/2; + + // send serial data + Serial.print(F("OK")); // Bad packets (crc failure) are discarded by RFM69CW + print_frame(rfInfo.msgLength); // Print received data + double_LED_flash(); + } + +//------------------------------------------------------------------------------------------------------------------------------------------- +// RF Data handler - outbound *************************************************************************************************************** +//------------------------------------------------------------------------------------------------------------------------------------------- + + + if ((EEProm.rfOn & RFTX) && outmsgLength) { //if command 'outmsg' is waiting to be sent then let's send it + digitalWrite(LEDpin, HIGH); delay(200); digitalWrite(LEDpin, LOW); + showString(PSTR(" -> ")); + Serial.print((word) outmsgLength); + showString(PSTR(" b\n")); + rf.send(0, (void *)outmsg, outmsgLength); // void RF69::send (uint8_t header, const void* ptr, int len) { + outmsgLength = 0; + } + + +//------------------------------------------------------------------------------------------------------------------------------------------- +// Calibration Data handler ***************************************************************************************************************** +//------------------------------------------------------------------------------------------------------------------------------------------- + + if (Serial.available()) // Serial input from RPi for configuration/calibration + { + getCalibration(); // If serial input is received from RPi + double_LED_flash(); + if (rfChanged) + { + rf.init(EEProm.nodeID, EEProm.networkGroup, // Reset the RFM69CW if NodeID, Group or frequency has changed. + EEProm.RF_freq == RFM_915MHZ ? 915 : (EEProm.RF_freq == RFM_868MHZ ? 868 : 434)); + rfChanged = false; + } + } + +//------------------------------------------------------------------------------------------------------------------------------------------- +// Energy Monitor *************************************************************************************************************************** +//------------------------------------------------------------------------------------------------------------------------------------------- + + if (EmonLibCM_Ready()) + { + single_LED_flash(); // single flash of LED on local CT sample + + emonPi.power1 = EmonLibCM_getRealPower(0); // Copy the desired variables ready for transmission + emonPi.power2 = EmonLibCM_getRealPower(1); + emonPi.power1_plus_2 = emonPi.power1 + emonPi.power2; + emonPi.E1 = EmonLibCM_getWattHour(0); + emonPi.E2 = EmonLibCM_getWattHour(1); + + emonPi.Vrms = EmonLibCM_getVrms() * 100; // Always send the ACTUAL measured voltage. + + if (EmonLibCM_getTemperatureSensorCount()) + { + for (byte i=0; i< MaxOnewire; i++) + emonPi.temp[i] = allTemps[i]; + } + + emonPi.pulseCount = EmonLibCM_getPulseCount(0); + emonPi.pulse2Count = EmonLibCM_getPulseCount(1); + + send_emonpi_serial(); // Send emonPi data to Pi serial using packet structure + + if (EEProm.showCurrents) + { + // to show voltage, current & power factor for calibration: + Serial.print(F("|Vrms:")); Serial.print(EmonLibCM_getVrms()); + + Serial.print(F(", I1:")); Serial.print(EmonLibCM_getIrms(0)); + Serial.print(F(", pf1:")); Serial.print(EmonLibCM_getPF(0),4); + + Serial.print(F(", I2:")); Serial.print(EmonLibCM_getIrms(1)); + Serial.print(F(", pf2:")); Serial.print(EmonLibCM_getPF(1),4); + + Serial.print(F(", f:")); Serial.print(EmonLibCM_getLineFrequency()); + Serial.println(); + + lcd_print_currents(current_lcd_i2c_addr, EmonLibCM_getIrms(0), EmonLibCM_getIrms(1), EmonLibCM_getPF(0), EmonLibCM_getPF(1)); + } + delay(50); + + // Save energy & pulse count values to EEPROM + storeEValues(emonPi.E1, emonPi.E2, emonPi.pulseCount, emonPi.pulse2Count); + } + +//------------------------------------------------------------------------------------------------------------------------------------------- +// Backlight (also controlled from Pi) ****************************************************************************************************** +//------------------------------------------------------------------------------------------------------------------------------------------- + + if (backlightTimer) + { + backlightOn = millis(); + backlight = true; + backlightTimer = false; + } + if (backlight && (millis() - backlightOn) > BACKLIGHT_TIMEOUT) + { + LiquidCrystal_I2C lcd(current_lcd_i2c_addr,16,2); + lcd.noBacklight(); // It can get left on if this is restarted without the Pi rebooting + backlight = false; + } +} + + +/************************************************************************************************************************************************** +* +* SEND RECEIVED RF DATA TO RPi (/dev/ttyAMA0) +* +***************************************************************************************************************************************************/ + +void print_frame(int len) +{ + Serial.print(F(" ")); + Serial.print(rfInfo.srcNode); // Extract and print node ID + Serial.print(F(" ")); + for (byte i = 2; i < len; ++i) + { + Serial.print((word)nativeMsg[i]); + Serial.print(F(" ")); + } + Serial.print(F("(")); + Serial.print(rfInfo.rssi); + Serial.print(F(")")); + Serial.println(); +} + + +/************************************************************************************************************************************************** +* +* LED flash +* +***************************************************************************************************************************************************/ + +void single_LED_flash(void) +{ + digitalWrite(LEDpin, HIGH); delay(30); digitalWrite(LEDpin, LOW); +} + +void double_LED_flash(void) +{ + digitalWrite(LEDpin, HIGH); delay(20); digitalWrite(LEDpin, LOW); delay(60); + digitalWrite(LEDpin, HIGH); delay(20); digitalWrite(LEDpin, LOW); +} + + +/************************************************************************************************************************************************** +* +* Startup Set I/O pins, print initial message, read configuration from EEPROM +* +***************************************************************************************************************************************************/ + +void emonPi_startup() +{ + pinMode(LEDpin, OUTPUT); + digitalWrite(LEDpin,HIGH); + + pinMode(shutdown_switch_pin,INPUT_PULLUP); // enable ATmega328 internal pull-up resistors + + pinMode(emonpi_GPIO_pin, OUTPUT); // Connected to RasPi GPIO pin 17 + digitalWrite(emonpi_GPIO_pin, LOW); + + Serial.begin(BAUD_RATE); + Serial.print(F("|emonPiCM V")); printVersion(); + Serial.println(F("|OpenEnergyMonitor.org")); + load_config(); // Load RF config from EEPROM (if any exists) + +#ifdef SAMPPIN + pinMode(SAMPPIN, OUTPUT); + digitalWrite(SAMPPIN, LOW); +#endif + +} + + +/*************************************************************************************************************************************************** +* +* lcd - I²C Set up 16 x 2 I²C LCD display, get startup data & print startup message, print currents as required +* +***************************************************************************************************************************************************/ + +int i2c_LCD_Detect(int i2c_lcd_address[]) +{ + Wire.begin(); + byte error=1; + for (int i=0; i<2; i++) + { + Wire.beginTransmission(i2c_lcd_address[i]); + error = Wire.endTransmission(); + if (error == 0) + { + Serial.print(F("LCD found i2c 0x")); Serial.println(i2c_lcd_address[i], HEX); + return (i2c_lcd_address[i]); + break; + } + } + Serial.println(F("LCD not found")); + return(0); +} + + +void emonPi_LCD_Startup(int current_i2c_addr) +{ + LiquidCrystal_I2C lcd(current_i2c_addr,16,2); // LCD I2C address to 0x27, 16x2 line display + lcd.init(); // initialize the lcd + lcd.backlight(); // Or lcd.noBacklight() + lcd.print(F("emonPi V")); + lcd.print(firmware_version[0]); + lcd.print("."); + lcd.print(firmware_version[1]); + lcd.print("."); + lcd.print(firmware_version[2]); + lcd.setCursor(0, 1); lcd.print(F("OpenEnergyMon")); + delay(2000); + backlightTimer = true; +} + +void Startup_to_LCD(int current_lcd_i2c_addr) // Print to LCD +{ + //----------------------------------------------------------------------------------------------------------------------------------------------- + LiquidCrystal_I2C lcd(current_lcd_i2c_addr,16,2); // LCD I2C address to 0x27, 16x2 line display + lcd.clear(); + lcd.backlight(); + + if (EmonLibCM_acPresent()) + lcd.print(F("AC Wave Detected")); + else + lcd.print(F("AC NOT Detected")); + delay(4000); + + + lcd.clear(); + lcd.print(F("Detected: ")); lcd.print(EmonLibCM_getTemperatureSensorCount()); + lcd.setCursor(0, 1); lcd.print(F("DS18B20 Temp")); + delay(2000); + + lcd.clear(); + lcd.print(F("Pi is booting...")); + lcd.setCursor(0, 1); lcd.print(F("Please wait")); + backlightTimer = true; + delay(20); +} + + +void lcd_print_currents(int current_lcd_i2c_addr, float I1, float I2, float pf1, float pf2) +{ + //----------------------------------------------------------------------------------------------------------------------------------------------- + LiquidCrystal_I2C lcd(current_lcd_i2c_addr,16,2); // LCD I2C address to 0x27, 16x2 line display + lcd.clear(); + lcd.backlight(); + lcd.setCursor(0, 0); + lcd.print(F("1 "));lcd.print(I1);lcd.print(F(" "));lcd.print(pf1,4); + lcd.setCursor(0, 1); + lcd.print(F("2 "));lcd.print(I2);lcd.print(F(" "));lcd.print(pf2,4); + backlightTimer = true; +} + + +/************************************************************************************************************************************************** +* +* SEND OWN SERIAL DATA TO RPi (/dev/ttyAMA0) using packet structure +* +***************************************************************************************************************************************************/ + +void send_emonpi_serial() +{ + byte *b = (byte *)&emonPi; + + Serial.print(F("OK ")); + Serial.print(EEProm.nodeID); + + for (byte i = 0; i < sizeof(emonPi); i++) + { + Serial.print(F(" ")); + Serial.print(*b++); + } + Serial.print(F(" (-0)")); + Serial.println(); + + delay(10); +} + +void printVersion(void) +{ + Serial.print(firmware_version[0]); + Serial.print("."); + Serial.print(firmware_version[1]); + Serial.print("."); + Serial.println(firmware_version[2]); +} diff --git a/emonPiFrontEndCM.pdf b/emonPiFrontEndCM.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bc44b6ca2db1b17f878b5934fe41e17e35cfd6fa GIT binary patch literal 49588 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 fCJHRq;Id +#include +#include + + // Available Serial Commands +const PROGMEM char helpText1[] = +"|\n" +"|Available commands:\n" +"| l\t\t- list config (terse)\n" +"| L\t\t- list config (verbose)\n" +"| r\t\t- restore defaults & restart\n" +"| s\t\t- save to EEPROM\n" +"| v\t\t- show version\n" +"| V\t\t- verbose mode, 1 > ON, 0 > OFF\n" +"| b\t\t- set r.f. band n = 4 > 433MHz, 8 > 868MHz, 9 > 915MHz (may require hardware change)\n" +"| p\t\t- set r.f. power. nn (0 - 31) = -18 dBm to +13 dBm. Default: 25 (+7 dBm)\n" +"| g\t- set Group (OEM default = 210)\n" +"| n\t\t- set node ID (1..60)\n" +"| c\t\t- enable output for calibration. n = 0|1 \n" +"| d\t- datalogging period (s)\n" +"| k \n" +"|\t\t- Calibrate input:\n" +"|\t\t\tx = 0 > voltage, 1 > ct1, 2 > ct2, etc\n" +"|\t\t\tyy.y = voltage/current calibration\n" +"|\t\t\tzz.z = phase calibration. (ct only)\n" +"|\t\t\te.g. k0 256.8\n" +"|\t\t\tk1 90.9 2.00\n" +"| f\t\t- frequency (50 or 60)\n" +"| a\t- assumed voltage if no a.c. present\n" +"| m \t- meter pulse counting:\n" +"|\t\t\tx = 0 > all OFF, x = 1 > count 1 ON, x = 2 > count 2 ON, = pulse minimum period (ms) (y is not needed when x = 0)\n" +"| t0 \t- temperature:\n" +"|\t\t\ty = 0 > OFF, y = 1 > ON, Y = 2 > Search\n" +"| t \n" +"|\t\t\tchange sensor's address or position:\n" +"|\t\t\tx = the sensor position in the list (1-based)\n" +"|\t\t\tyy = 8 hex bytes - the sensor's address\n" +"|\t\t\te.g. 28 81 43 31 07 00 00 D9\n" +"|\t\t\tN.B. Sensors CANNOT be added beyond the array size.\n" +"| T\\n\t- transmit a string.\n" +"| w\t\t- n = 0 > radio OFF, n = 1 for Receive ON, n = 2 for Transmit ON, n = 3 for both ON\n" +"| z\t\t- set the energy values and pulse count(s) to zero\n" +"| ?\t\t- show this again\n|" +; + + +extern DeviceAddress *temperatureSensors; + +#define SERIAL_LOCK 2000 // Lockout period (ms) after 'old-style' config command + +static void load_config(void) +{ + eepromRead(eepromSig, (byte *)&EEProm); +} + +static void list_calibration(void) +{ + + Serial.println(F("|Settings")); + Serial.print(F("|Radio: ")); Serial.println(EEProm.rfOn); + Serial.print(F("|RF Band: ")); + if (EEProm.RF_freq == RFM_433MHZ) Serial.println(F("433MHz")); + if (EEProm.RF_freq == RFM_868MHZ) Serial.println(F("868MHz")); + if (EEProm.RF_freq == RFM_915MHZ) Serial.println(F("915MHz")); + Serial.print(F("|Power: "));Serial.print(EEProm.rfPower - 18);Serial.println(F(" dBm")); + Serial.print(F("|Group: ")); Serial.println(EEProm.networkGroup); + Serial.print(F("|Node ID: ")); Serial.println(EEProm.nodeID); + Serial.println(F("|Calibration")); + Serial.print(F("|assumedV: ")); Serial.println(EEProm.assumedVrms); + Serial.print(F("|AC Detected: ")); Serial.println(EmonLibCM_acPresent()?"Yes":"No"); + Serial.print(F("|freq: ")); Serial.println(EEProm.lineFreq); + Serial.print(F("|vCal: ")); Serial.println(EEProm.vCal); + Serial.print(F("|i1Cal: ")); Serial.print(EEProm.i1Cal); + Serial.print(F(", Lead: ")); Serial.println(EEProm.i1Lead); + Serial.print(F("|i2Cal: ")); Serial.print(EEProm.i2Cal); + Serial.print(F(", Lead: ")); Serial.println(EEProm.i2Lead); + Serial.print(F("|datalog: ")); Serial.println(EEProm.period); + Serial.print(F("|pulses1: ")); Serial.print(EEProm.pulse_enable); + Serial.print(F(", period: ")); Serial.println(EEProm.pulse_period); + Serial.print(F("|pulses2: ")); Serial.print(EEProm.pulse2_enable); + Serial.print(F(", period: ")); Serial.println(EEProm.pulse2_period); + Serial.print(F("|temp_enable: ")); Serial.print(EEProm.temp_enable); + Serial.print(F(", sensors found: ")); Serial.println(EmonLibCM_getTemperatureSensorCount()); + if (verbose) + printTemperatureSensorAddresses(true); +} + +static void report_calibration(void) +{ + Serial.print(F("Settings:")); + Serial.print(F(" r")); Serial.print(EEProm.rfOn); + Serial.print(F(" b")); + if (EEProm.RF_freq == RFM_433MHZ) Serial.print(F("4")); + if (EEProm.RF_freq == RFM_868MHZ) Serial.print(F("8")); + if (EEProm.RF_freq == RFM_915MHZ) Serial.print(F("9")); + Serial.print(F(" p")); Serial.print(EEProm.rfPower); + Serial.print(F(" g")); Serial.print(EEProm.networkGroup); + Serial.print(F(" i")); Serial.print(EEProm.nodeID); + Serial.print(F(" a")); Serial.print(EEProm.assumedVrms); + Serial.print(F(" ac")); Serial.print(EmonLibCM_acPresent()); + Serial.print(F(" f")); Serial.print(EEProm.lineFreq); + Serial.print(F(" k0 ")); Serial.print(EEProm.vCal); Serial.print(F(" 0.00")); + Serial.print(F(" k1 ")); Serial.print(EEProm.i1Cal); Serial.print(F(" ")); Serial.print(EEProm.i1Lead); + Serial.print(F(" k2 ")); Serial.print(EEProm.i2Cal); Serial.print(F(" ")); Serial.print(EEProm.i2Lead); + Serial.print(F(" d")); Serial.print(EEProm.period); + Serial.print(F(" m")); Serial.print(EEProm.pulse_enable); Serial.print(F(" ")); Serial.print(EEProm.pulse_period); + Serial.print(F(" ")); Serial.print(EEProm.pulse2_enable); Serial.print(F(" ")); Serial.print(EEProm.pulse2_period); + Serial.print(F(" t")); Serial.print(EEProm.temp_enable); Serial.print(F(" ")); Serial.println(EmonLibCM_getTemperatureSensorCount()); +} + +static void save_config() +{ + eepromWrite(eepromSig, (byte *)&EEProm, sizeof(EEProm)); + if (verbose) + { + eepromPrint(true); + Serial.println(F("\r\n|Config saved\r\n|")); + } +} + +static void wipe_eeprom(void) +{ + if (verbose) + { + Serial.print(F("|Resetting...")); + } + eepromHide(eepromSig); + if (verbose) + { + Serial.println(F("|Sketch restarting with default config.")); + } +} + +void softReset(void) +{ + asm volatile (" jmp 0"); +} + +void getCalibration(void) +{ +/* + * Reads calibration information (if available) from the serial port at runtime. + * Data is expected generally in the format + * + * [l] [x] [y] [z] + * + * where: + * [l] = a single letter denoting the variable to adjust + * [x] [y] [z] are values to be set. + * see the user instruction above, the comments below or the separate documentation for details + * + */ + + if (Serial.available()) + { + int k1; + double k2, k3; + char c = Serial.peek(); + char* msg; + + if (!lockout(c)) + switch (c) { + + case 'a': + EEProm.assumedVrms = Serial.parseFloat(); + EmonLibCM_setAssumedVrms(EEProm.assumedVrms); + if (verbose) + { + Serial.print(F("|Assumed V: "));Serial.println(EEProm.assumedVrms); + } + break; + + case 'b': // set band: 4 = 433, 8 = 868, 9 = 915 + EEProm.RF_freq = bandToFreq(Serial.parseInt()); + if (verbose) + { + Serial.print(F("|RF Band = ")); + if (EEProm.RF_freq == RFM_433MHZ) Serial.println(F("433MHz")); + if (EEProm.RF_freq == RFM_868MHZ) Serial.println(F("868MHz")); + if (EEProm.RF_freq == RFM_915MHZ) Serial.println(F("915MHz")); + } + rfChanged = true; + break; + + case 'c': + /* + * Format expected: c0 | c1 + */ + k1 = Serial.parseInt(); + switch (k1) { + case 1 : EEProm.showCurrents = true; + break; + default: EEProm.showCurrents = false; + } + break; + + case 'd': + /* Format expected: p[x] + * + * where: + * [x] = a floating point number for the datalogging period in s + */ + k2 = Serial.parseFloat(); + if (k2 < 0.1) + k2 = 0.1; + EmonLibCM_datalog_period(k2); + EEProm.period = k2; + if (verbose) + { + Serial.print(F("|datalog period ")); Serial.print(k2);Serial.println(F(" s")); + } + break; + + case 'f': + /* + * Format expected: f50 | f60 + */ + k1 = Serial.parseFloat(); + EEProm.lineFreq = k1; + if (verbose) + { + Serial.print(F("|freq ")); Serial.println(EEProm.lineFreq); + } + break; + + case 'g': // set network group + EEProm.networkGroup = Serial.parseInt(); + if (verbose) + { + Serial.print(F("|Group ")); Serial.println(EEProm.networkGroup); + } + rfChanged = true; + break; + + case 'k': + /* Format expected: k[x] [y] [z] + * + * where: + * [x] = a single numeral: 0 = voltage calibration, 1 = ct1 calibration, 2 = ct2 calibration, etc + * [y] = a floating point number for the voltage/current calibration constant + * [z] = a floating point number for the phase calibration for this c.t. (z is not needed, or ignored if supplied, when x = 0) + * + * e.g. k0 256.8 + * k1 90.9 1.7 + * + * If power factor is not displayed, it is impossible to calibrate for phase errors, + * and the standard value of phase calibration MUST BE SENT when a current calibration is changed. + */ + k1 = Serial.parseInt(); + k2 = Serial.parseFloat(); + k3 = Serial.parseFloat(); + while (Serial.available()) + Serial.read(); + + // Write the values back as Globals, re-calculate intermediate values. + switch (k1) { + case 0 : EmonLibCM_ReCalibrate_VChannel(k2); + EEProm.vCal = k2; + break; + + case 1 : EmonLibCM_ReCalibrate_IChannel(1, k2, k3); + EEProm.i1Cal = k2; + EEProm.i1Lead = k3; + break; + + case 2 : EmonLibCM_ReCalibrate_IChannel(2, k2, k3); + EEProm.i2Cal = k2; + EEProm.i2Lead = k3; + break; + + default : ; + } + if (verbose) + { + Serial.print(F("|k"));Serial.print(k1);Serial.print(F(" "));Serial.print(k2);Serial.print(F(" "));Serial.println(k3); + } + break; + + case 'L': + list_calibration(); // print the calibration values (verbose) + break; + + case 'l': + report_calibration(); // report calibration values to emonHub (terse) + break; + + case 'm' : + /* Format expected: m[x] [y] + * + * where: + * [x] = a single numeral: 0 = pulses OFF, 1 = pulses 1 ON, 2 = pulses 2 ON + * [y] = an integer for the pulse min period in ms - ignored when x=0 + */ + k1 = Serial.parseInt(); + k2 = Serial.parseInt(); + while (Serial.available()) + Serial.read(); + + switch (k1) { + case 0 : EmonLibCM_setPulseEnable(0, false); + EEProm.pulse_enable = false; + EmonLibCM_setPulseEnable(1, false); + EEProm.pulse2_enable = false; + break; + + case 1 : EmonLibCM_setPulseMinPeriod(0, k2); + EmonLibCM_setPulseEnable(true); + EEProm.pulse_enable = true; + EEProm.pulse_period = k2; + break; + + case 2 : EmonLibCM_setPulseMinPeriod(1, k2); + EmonLibCM_setPulseEnable(2,true); + EEProm.pulse2_enable = true; + EEProm.pulse2_period = k2; + break; + } + if (verbose) + { + Serial.print(F("|Pulses: ")); + switch (k1) { + case 0 : Serial.println(F("off")); + break; + + case 1 : Serial.print(F("Ch 1: ")); + Serial.print(k2); + Serial.println(F(" ms")); + break; + + case 2 : Serial.print(F("Ch 2: ")); + Serial.print(k2); + Serial.println(F(" ms")); + break; + } + } + break; + + case 'n': + case 'i': // Set NodeID - range expected: 1 - 60 + EEProm.nodeID = Serial.parseInt(); + EEProm.nodeID = constrain(EEProm.nodeID, 1, 63); + if (verbose) + { + Serial.print(F("|Node ")); Serial.println(EEProm.nodeID); + } + rfChanged = true; + break; + + case 'p': // set RF power level + EEProm.rfPower = (Serial.parseInt() & 0x1F); + if (verbose) + { + Serial.print(F("|p: "));Serial.print((EEProm.rfPower & 0x1F) - 18);Serial.println(F(" dBm")); + } + rfChanged = true; + break; + + case 'r': + wipe_eeprom(); // restore sketch defaults + softReset(); + break; + + case 's' : + save_config(); // Save to EEPROM. ATMega328p has 1kB EEPROM + break; + + case 't' : + /* Format expected: t[x] [y] [y] ... + */ + set_temperatures(); + break; + + case 'T': // write alpha-numeric string to be transmitted. + msg = outmsg; + { + char c = 0; + Serial.read(); // discard 'w' + while (c != '\n' && outmsgLength < MAXMSG) + { + c = Serial.read(); + if (c > 31 && c < 127) + { + *msg++ = c; + outmsgLength++; + } + } + } + break; + + case 'v': // print firmware version + Serial.print(F("|emonPi CM V")); printVersion(); + break; + + case 'V': // Verbose mode + /* + * Format expected: V0 | V1 + */ + verbose = (bool)Serial.parseInt(); + Serial.print(F("|Verbose mode "));Serial.println(verbose?F("on"):F("off")); + break; + + case 'w': + /* + * Wireless off = 0, tx = 1, rx = 2, tx+rx = 3 + * Format expected: w0 - w3 + */ + EEProm.rfOn = Serial.parseInt(); + if (verbose) + { + Serial.print(F("|Radio "));;Serial.println(EEProm.rfOn); + } + break; + + case 'z': + /* + * Zero all energy values + */ + zeroEValues(); + EmonLibCM_setWattHour(0, 0); + EmonLibCM_setWattHour(1, 0); + EmonLibCM_setPulseCount(0, 0); + EmonLibCM_setPulseCount(1, 0); + break; + + + case '?': // show Help text + showString(helpText1); + Serial.println(); + break; + + default: + ; + } + // flush the input buffer + while (Serial.available()) + Serial.read(); + } +} + +bool lockout(char c) +{ + static bool locked = false; + static unsigned long locktime; + + if (c > 47 && c < 58) // lock out old 'Reverse Polish' format: numbers first. + { + locked = true; + locktime = millis(); + while (Serial.available()) + Serial.read(); + } + else if ((millis() - locktime) > SERIAL_LOCK) + { + locked = false; + } + return locked; +} + +static byte bandToFreq (byte band) { + return band == 4 ? RFM_433MHZ : band == 8 ? RFM_868MHZ : band == 9 ? RFM_915MHZ : 0; +} + +static void showString (PGM_P s) +{ + for (;;) + { + char c = pgm_read_byte(s++); + if (c == 0) + break; + if (c == '\n') + Serial.print('\r'); + Serial.print(c); + } +} + +void set_temperatures(void) +{ + /* Format expected: t[x] [y] [y] ... + * + * where: + * [x] = 0 [y] = single numeral: 0 = temperature measurement OFF, 1 = temperature measurement ON, 2 = search + * [x] = a single numeral > 0: the position of the sensor in the list (1-based) + * [y] = 8 hexadecimal bytes representing the sensor's address + * e.g. t2 28 81 43 31 07 00 00 D9 + */ + + DeviceAddress sensorAddress; + + int k1 = Serial.parseInt(); + + if (k1 == 0) + { + byte k2 = Serial.parseInt(); + // write to EEPROM + switch (k2) { + case 0: + case 1: + EEProm.temp_enable = k2; + EmonLibCM_TemperatureEnable(EEProm.temp_enable); + break; + case 2: // search & enable + temperatureSensors[0][0] = 0x00; + EEProm.temp_enable = true; + EmonLibCM_TemperatureEnable(true); + break; + } + } + else if ((unsigned int)k1 > sizeof(EEProm.allAddresses) / sizeof(DeviceAddress)) + return; + else + { + byte i = 0, a = 0, b; + Serial.readBytes(&b,1); // expect a leading space + while (Serial.readBytes(&b,1) && i < 8) + { + if (b == ' ' || b == '\r' || b == '\n') + { + sensorAddress[i++] = a; + a = 0; + } + else + { + a *= 16; + a += c2h(b); + } + } + // set address + for (byte i=0; i<8; i++) + EEProm.allAddresses[k1-1][i] = sensorAddress[i]; + } + while (Serial.available()) + Serial.read(); +} + +byte c2h(byte b) +{ + if (b > 47 && b < 58) + return b - 48; + else if (b > 64 && b < 71) + return b - 55; + else if (b > 96 && b < 103) + return b - 87; + return 0; +} diff --git a/firmware.hex b/firmware.hex new file mode 100644 index 0000000..d01ce8e --- /dev/null +++ b/firmware.hex @@ -0,0 +1,1928 @@ +:100000000C94C2050C94D11B0C94AA1B0C94EA0509 +:100010000C94EA050C94EA050C94EA050C94EA05A4 +:100020000C94EA050C94EA050C94EA050C94EA0594 +:100030000C94EA050C94EA050C94EA050C94EA0584 +:100040000C94601B0C94EA050C941E1C0C94F81B79 +:100050000C94EA050C94501C0C94EA050C94EA05E7 +:100060000C942A220C94EA0505A84CCDB2D44EB9C2 +:100070003836A9020C50B9918688083CA6AAAA2A4B +:10008000BE000000803F005EBCE2613FDD83C29C99 +:100090007E20A3FD1F41009D23BE46DB65F88C1129 +:1000A000AF32CA57E9747C4F70656E456E657267F2 +:1000B000794D6F6E69746F722E6F7267007C656D1B +:1000C0006F6E5069434D2056004C4344206E6F7450 +:1000D00020666F756E64004C434420666F756E64D5 +:1000E00020693263203078004F70656E456E65720E +:1000F00067794D6F6E00656D6F6E506920560050C8 +:100100006C6561736520776169740050692069735B +:1001100020626F6F74696E672E2E2E004453313843 +:100120004232302054656D700044657465637465B7 +:10013000643A20004143204E4F5420446574656367 +:100140007465640041432057617665204465746599 +:100150006374656400290028002000200020007CD2 +:10016000000A00202868696464656E292E002062F8 +:1001700079746573002C20446174612073697A6519 +:100180003A2000205369676E61747572653A2000E9 +:100190007C004E6F206461746120626C6F636B2021 +:1001A000666F756E64202D20454550524F4D20617D +:1001B00070706561727320746F20626520666F7263 +:1001C0006D617474656420746F204F454D205374C5 +:1001D000616E646172642062757420756E757365FA +:1001E000642E007C007C000A002062797465732C08 +:1001F000206E6F7420666F726D6174746564207414 +:100200006F204F454D205374616E646172640053DA +:10021000697A653A20007C000D0A7C436F6E66693E +:10022000672073617665640D0A7C007C536B65748E +:1002300063682072657374617274696E6720776990 +:1002400074682064656661756C7420636F6E66699E +:10025000672E007C526573657474696E672E2E2E4E +:10026000002000207400200020002000206D0020CD +:1002700064002000206B3220002000206B31200021 +:1002800020302E303000206B3020002066002061AE +:1002900063002061002069002067002070003900A1 +:1002A0003800340020620020720053657474696E57 +:1002B00067733A007C0020656E61626C65642E0095 +:1002C00054656D7065726174757265206D656173DA +:1002D0007572656D656E74206973007C007C0053D7 +:1002E000656E736F72206D6179206E6F7420626528 +:1002F0002072656C6961626C6500200030007C00D2 +:100300002C20776974682061646472657373657307 +:100310002E2E2E0054656D706572617475726520A5 +:1003200053656E736F727320666F756E64203D2027 +:10033000007C002C2073656E736F727320666F757E +:100340006E643A20007C74656D705F656E61626CEE +:10035000653A20002C20706572696F643A20007C39 +:1003600070756C736573323A20002C207065726969 +:100370006F643A20007C70756C736573313A2000AD +:100380007C646174616C6F673A20002C204C65615D +:10039000643A20007C693243616C3A20002C204C86 +:1003A0006561643A20007C693143616C3A20007CCD +:1003B0007643616C3A20007C667265713A20007C5D +:1003C00041432044657465637465643A20007C6130 +:1003D0007373756D6564563A20007C43616C696285 +:1003E000726174696F6E007C4E6F64652049443A97 +:1003F00020007C47726F75703A20002064426D00C7 +:100400007C506F7765723A20003931354D487A005B +:100410003836384D487A003433334D487A007C52B0 +:10042000462042616E643A20007C526164696F3AF2 +:1004300020007C53657474696E6773007C0A7C418C +:100440007661696C61626C6520636F6D6D616E646D +:10045000733A0A7C206C09092D206C69737420633F +:100460006F6E66696720287465727365290A7C203F +:100470004C09092D206C69737420636F6E6669677F +:100480002028766572626F7365290A7C20720909DB +:100490002D20726573746F72652064656661756C7A +:1004A0007473202620726573746172740A7C2073E1 +:1004B00009092D207361766520746F2045455052DF +:1004C0004F4D0A7C207609092D2073686F772076BE +:1004D000657273696F6E0A7C20563C6E3E09092D69 +:1004E00020766572626F7365206D6F64652C2031B4 +:1004F000203E204F4E2C2030203E204F46460A7C86 +:1005000020623C6E3E09092D2073657420722E66B0 +:100510002E2062616E64206E203D2034203E203407 +:1005200033334D487A2C2038203E203836384D4819 +:100530007A2C2039203E203931354D487A20286DDB +:10054000617920726571756972652068617264777E +:10055000617265206368616E6765290A7C20703C62 +:100560006E6E3E09092D2073657420722E662E2052 +:10057000706F7765722E206E6E202830202D20330C +:100580003129203D202D31382064426D20746F20A8 +:100590002B31332064426D2E2044656661756C7486 +:1005A0003A20323520282B372064426D290A7C20DE +:1005B000673C6E6E6E3E092D207365742047726F26 +:1005C000757020284F454D2064656661756C7420F8 +:1005D0003D20323130290A7C206E3C6E6E3E090986 +:1005E0002D20736574206E6F646520494420283186 +:1005F0002E2E3630290A7C20633C6E3E09092D20C0 +:10060000656E61626C65206F757470757420666FBD +:10061000722063616C6962726174696F6E2E206E04 +:10062000203D20307C31200A7C20643C78782E7874 +:100630003E092D20646174616C6F6767696E672085 +:10064000706572696F64202873290A7C206B3C787E +:100650003E203C79792E793E203C7A7A2E7A3E0AE9 +:100660007C09092D2043616C69627261746520699F +:100670006E7075743A0A7C09090978203D20302093 +:100680003E20766F6C746167652C2031203E2063BC +:1006900074312C2032203E206374322C2065746328 +:1006A0000A7C09090979792E79203D20766F6C74CE +:1006B0006167652F63757272656E742063616C6922 +:1006C00062726174696F6E0A7C0909097A7A2E7AFE +:1006D000203D2070686173652063616C696272619E +:1006E00074696F6E2E20286374206F6E6C79290AEE +:1006F0007C090909652E672E206B30203235362E95 +:10070000380A7C0909096B312039302E3920322E04 +:1007100030300A7C20663C78783E09092D206672CC +:10072000657175656E637920283530206F722036CB +:1007300030290A7C20613C78782E783E092D206192 +:100740007373756D656420766F6C7461676520697D +:1007500066206E6F20612E632E2070726573656E49 +:10076000740A7C206D3C783E203C79793E092D202E +:100770006D657465722070756C736520636F756E3E +:1007800074696E673A0A7C09090978203D20302097 +:100790003E20616C6C204F46462C2078203D203155 +:1007A000203E20636F756E742031204F4E2C2078D0 +:1007B000203D2032203E20636F756E742032204F22 +:1007C0004E2C203C79793E203D2070756C7365205D +:1007D0006D696E696D756D20706572696F64202832 +:1007E0006D7329202879206973206E6F74206E65DF +:1007F00065646564207768656E2078203D20302927 +:100800000A7C207430203C793E092D2074656D707F +:10081000657261747572653A0A7C09090979203D2F +:100820002030203E204F46462C2079203D2031208C +:100830003E204F4E2C2059203D2032203E20536533 +:10084000617263680A7C20743C783E203C79793E72 +:10085000203C79793E203C79793E203C79793E20D4 +:100860003C79793E203C79793E203C79793E203CA8 +:1008700079793E0A7C0909096368616E67652073AE +:10088000656E736F72277320616464726573732081 +:100890006F7220706F736974696F6E3A0A7C090910 +:1008A0000978203D207468652073656E736F72202F +:1008B000706F736974696F6E20696E20746865204B +:1008C0006C6973742028312D6261736564290A7C18 +:1008D0000909097979203D203820686578206279F6 +:1008E000746573202D207468652073656E736F7254 +:1008F000277320616464726573730A7C0909096552 +:100900002E672E20203238203831203433203331E6 +:100910002030372030302030302044390A7C09091B +:10092000094E2E422E2053656E736F727320434121 +:100930004E4E4F5420626520616464656420626598 +:10094000796F6E64207468652061727261792073BA +:10095000697A652E0A7C20543C6363633E5C6E09B1 +:100960002D207472616E736D6974206120737472CE +:10097000696E672E0A7C20773C6E3E09092D206E39 +:10098000203D2030203E20726164696F204F464632 +:100990002C206E203D203120666F722052656365E9 +:1009A000697665204F4E2C206E203D203220666FE8 +:1009B00072205472616E736D6974204F4E2C206EDC +:1009C000203D203320666F7220626F7468204F4E86 +:1009D0000A7C207A09092D207365742074686520CB +:1009E000656E657267792076616C75657320616EDE +:1009F000642070756C736520636F756E742873293D +:100A000020746F207A65726F0A7C203F09092D20BF +:100A100073686F77207468697320616761696E0A13 +:100A20007C007C526164696F20006F6666006F6EA7 +:100A3000007C566572626F7365206D6F646520007F +:100A40007C656D6F6E506920434D205600206442D6 +:100A50006D007C703A20007C4E6F64652000206D34 +:100A60007300436820323A2000206D7300436820F1 +:100A7000313A20006F6666007C50756C7365733A7E +:100A80002000200020007C6B007C47726F75702076 +:100A9000007C6672657120002073007C6461746163 +:100AA0006C6F6720706572696F6420003931354D55 +:100AB000487A003836384D487A003433334D487A16 +:100AC000007C52462042616E64203D20007C4173D0 +:100AD00073756D656420563A200020282D3029005A +:100AE00020004F4B20002000322000200031200049 +:100AF0002C20663A002C207066323A002C204932B5 +:100B00003A002C207066313A002C2049313A007CA2 +:100B100056726D733A0020620A00202D3E20004F6D +:100B20004B0000000000240027002A000000000005 +:100B3000250028002B00000000080002010000032F +:100B40000407000000000000000000000000230077 +:100B5000260029000404040404040404020202021E +:100B60000202030303030303010204081020408070 +:100B70000102040810200102040810207C000A0071 +:100B80007C00492311241FBECFEFD8E0DEBFCDBFCC +:100B900026E0AAEDB1E001C01D92A93FB207E1F73E +:100BA00011E0A0E0B1E0E6E8F7E702C005900D92A1 +:100BB000AA3DB107D9F715E0C2ECD5E004C02197F2 +:100BC000FE010E944639C13CD107C9F70E94F924B1 +:100BD0000C94C13B0C94000080912606E0912706FE +:100BE000F0912806F8949181282F209592239183E3 +:100BF00078943DE743E050E0315029F1DA01119754 +:100C0000F1F790819823C1F3F89492819223928313 +:100C10009181982B91837894ABE7B7E01197F1F726 +:100C2000F894918192239183A3E1B1E01197F1F7B8 +:100C30009081982381E009F080E07894E3E6F6E083 +:100C40003197F1F7089580E0089590912606E0919C +:100C50002706F0912806292F209580FF14C0F894CC +:100C60008281822382838181892B8183A3E2B0E008 +:100C70001197F1F78281982B9283789487ED90E019 +:100C80000197F1F70895F89482818223828381810C +:100C9000892B8183AFEFB0E01197F1F78281982B18 +:100CA000928378948FE090E0EBCFFF920F931F93A5 +:100CB000CF93DF93F82E062FC8E0D0E011E081E05B +:100CC0009F2D912309F480E00E942506110F2197A2 +:100CD000B1F7011113C0F894E0912706F0912806AE +:100CE000918180912606809598239183E091270633 +:100CF000F09128069281892382837894DF91CF91A5 +:100D00001F910F91FF90089580912606E09127068C +:100D1000F0912806F8949181982B91832281382FA5 +:100D2000309523232283A7E0B0E01197F1F791815A +:100D300093239183A3E2B0E01197F1F79081789427 +:100D4000EFECF0E03197F1F7982381E009F480E0CF +:100D500008958230B8F4E82FF0E0EE0FFF1FE05B5B +:100D6000FE4F71836083813039F080916900836028 +:100D700080936900E89A0895809169008C6080935F +:100D80006900E99A0895833081F028F4813099F060 +:100D90008230A9F008958730A9F08830C9F08430F6 +:100DA000B1F4809180008F7D03C0809180008F77A7 +:100DB00080938000089584B58F7784BD089584B5AD +:100DC0008F7DFBCF8091B0008F778093B000089526 +:100DD0008091B0008F7DF9CF1F93CF93DF93282FA1 +:100DE00030E0F901EA5CF44F8491F901E859F44FDD +:100DF000D491F901EC5AF44FC491CC23A9F0162FE9 +:100E000081110E94C306EC2FF0E0EE0FFF1FE45D9E +:100E1000F44FA591B4918FB7F894EC91111108C0DB +:100E2000D095DE23DC938FBFDF91CF911F91089582 +:100E3000DE2BF8CFCF93DF9390E0FC01E859F44F1D +:100E400024918C5A944FFC0184918823C9F090E03E +:100E5000880F991FFC01EE5DF44FA591B491FC0140 +:100E6000E45DF44FC591D49161110DC09FB7F89422 +:100E70008C91209582238C938881282328839FBF7F +:100E8000DF91CF910895623051F49FB7F8943C916F +:100E9000822F809583238C93E8812E2BEFCF8FB701 +:100EA000F894EC912E2B2C938FBFEACFCF93DF9346 +:100EB000C82F60E00E941A07D0E0FE01E859F44F05 +:100EC000E491A6E2B6E0EC93FE01EC5AF44FE49113 +:100ED000F0E0EE0FFF1FE65BF44F859194911296C0 +:100EE0009C938E9311971B961C921B971D961C9298 +:100EF0001D971C961C921C971A961C921A9719966D +:100F00001C92199718961C92189717961C9217976F +:100F100016961C92169715961C92159714961C926D +:100F2000149713961C92DF91CF9108953FB7F894D0 +:100F300080912D0590912E05A0912F05B09130053F +:100F400026B5A89B05C02F3F19F00196A11DB11D24 +:100F50003FBFBA2FA92F982F8827BC01CD01620F60 +:100F6000711D811D911D42E0660F771F881F991F1B +:100F70004A95D1F708958F929F92AF92BF92CF92E8 +:100F8000DF92EF92FF924B015C010E9496076B018A +:100F90007C010E9496076C197D098E099F09683EA5 +:100FA000734081059105A8F321E0821A9108A108F8 +:100FB000B10888EEC80E83E0D81EE11CF11C811434 +:100FC0009104A104B10429F7FF90EF90DF90CF9036 +:100FD000BF90AF909F908F9008952FB7F894609135 +:100FE000290570912A0580912B0590912C052FBF22 +:100FF0000895089508950895DC01ED91FC91019004 +:10100000F081E02D0994EF92FF920F931F93CF93FD +:10101000DF938C017B01D0E0C0E0F701EC0FFD1FF6 +:101020006491662361F0D801ED91FC910190F0810B +:10103000E02DC8010995892B11F02196EECFCE0144 +:10104000DF91CF911F910F91FF90EF900895AF9294 +:10105000BF92CF92DF92EF92FF920F931F93CF93A5 +:10106000DF936C017B018B01040F151FEB015E0107 +:10107000AE18BF08C017D10759F06991D601ED919C +:10108000FC910190F081E02DC6010995892B79F73B +:10109000C501DF91CF911F910F91FF90EF90DF90ED +:1010A000CF90BF90AF900895FC01538D448D252FB4 +:1010B00030E0842F90E0821B930B541710F0CF96F2 +:1010C000089501970895FC01918D828D981761F024 +:1010D000A28DAE0FBF2FB11D5D968C91928D9F5F3B +:1010E0009F73928F90E008958FEF9FEF08950F9375 +:1010F0001F93CF93DF93EC010E94ED07609391055E +:1011000070939205809393059093940589E895E0F8 +:101110000E94630897FF22C00E94ED07009191058D +:10112000109192052091930530919405601B710BED +:10113000820B930B00918D0510918E0520918F05E8 +:10114000309190056017710782079307F8F290E0DD +:1011500080E0DF91CF911F910F910895888381E006 +:1011600090E0F7CFFC01918D828D981731F0828D40 +:10117000E80FF11D858D90E008958FEF9FEF0895A2 +:101180000F931F930E94ED07609391057093920552 +:10119000809393059093940589E895E00E94B208A6 +:1011A00097FF1DC00E94ED070091910510919205D7 +:1011B0002091930530919405601B710B820B930B6A +:1011C00000918D0510918E0520918F05309190052D +:1011D0006017710782079307F8F28FEF9FEF1F9157 +:1011E0000F910895CF92DF92EF92FF92CF930E94DA +:1011F000C008FC0197FD4EC08D32910521F0C097CB +:101200000A9708F040C0C12CD12C7601C0E0E13033 +:10121000F105D1F0ED32F105D9F1CF01C0970A9770 +:1012200098F4AAE0B0E0A70196010E94EB386F01A4 +:10123000FF0FEE08FF08C60ED71EE81EF91E80E35A +:10124000C81AD108E108F10889E895E00E9463080E +:101250000E94C008FC01C0970A97C8F2E130F1056E +:10126000B1F2CC2341F0F094E094D094C094C11C2E +:10127000D11CE11CF11CC701B601CF91FF90EF908A +:10128000DF90CF90089589E895E00E946308AFCF82 +:10129000C1E0DACFC12CD12C7601EDCF8F929F9295 +:1012A000AF92BF92CF92DF92EF92FF92CF93DF93F4 +:1012B0000E94C008FC0197FD88C08D32910509F09D +:1012C0004CC0812C912C80E8A82E8FE3B82EC12C25 +:1012D000D12C7601C0E0D0E0E130F10559F1ED32DA +:1012E000F10509F447C0EE32F10509F445C0CF011C +:1012F000C0970A97F8F4AAE0B0E0A70196010E940F +:10130000EB386F01FF0FEE08FF08C60ED71EE81E70 +:10131000F91E80E3C81AD108E108F108CC2351F086 +:101320002DEC3CEC4CEC5DE3C501B4010E94173898 +:101330004B015C0189E895E00E9463080E94C008A7 +:10134000FC01C0970A9740F2EE32F105B9F4CC23C4 +:1013500019F2CD2FD11118C025C0C0970A9708F4F3 +:10136000B0CFEE32F10509F4ACCF89E895E00E94E8 +:1013700063089ECFD1E0DECFC1E0DCCFE130F105E4 +:1013800009F4AACFDD2341F0F094E094D094C09406 +:10139000C11CD11CE11CF11CC701B6010E94B83769 +:1013A000CC2341F0C701B6010E94B837A5019401D2 +:1013B0000E941738DF91CF91FF90EF90DF90CF9090 +:1013C000BF90AF909F908F90089560E070E0CB0148 +:1013D000F1CFFC01918D228D892F90E0805C9F4F91 +:1013E000821B91098F739927089589E895E00E94DF +:1013F000E90921E0892B09F420E0822F089580E09B +:1014000090E0892B29F00E94F50981110C940000CD +:101410000895FC01A48DA80FB92FB11DA35ABF4F89 +:101420002C91848D90E001968F739927848FA689E3 +:10143000B7892C93A089B1898C91837080648C9337 +:10144000938D848D981306C00288F389E02D8081E6 +:101450008F7D80830895EF92FF920F931F93CF9318 +:10146000DF93EC0181E0888F9B8D8C8D98131AC0DF +:10147000E889F989808185FF15C09FB7F894EE89C6 +:10148000FF896083E889F989808183708064808323 +:101490009FBF81E090E0DF91CF911F910F91FF906E +:1014A000EF900895F62E0B8D10E00F5F1F4F0F7316 +:1014B0001127E02E8C8D8E110CC00FB607FCFACFD1 +:1014C000E889F989808185FFF5CFCE010E94090A5C +:1014D000F1CFEB8DEC0FFD2FF11DE35AFF4FF082A2 +:1014E0009FB7F8940B8FEA89FB8980818062CFCF08 +:1014F000CF93DF93EC01888D8823B9F0AA89BB894B +:10150000E889F9898C9185FD03C0808186FD0DC035 +:101510000FB607FCF7CF8C9185FFF2CF808185FF56 +:10152000EDCFCE010E94090AE9CFDF91CF91089556 +:10153000CF92DF92EF92FF920F931F93CF93DF939F +:10154000082F10E096E1899FE0011124C85CD94F73 +:101550008E819F81A885B985892B8A2B8B2BA9F138 +:101560000E94ED07CA88DB88EC88FD886C197D092C +:101570008E099F09CE80DF80E884F984C616D706DD +:10158000E806F90658F48E859F85A889B9890196E1 +:10159000A11DB11D8E879F87A88BB98B0E94ED0777 +:1015A00026E1209FF001219FF00D1124E85CF94F06 +:1015B000628B738B848B958BDF91CF911F910F91F1 +:1015C000FF90EF90DF90CF9008958E859F85A8893A +:1015D000B9890196A11DB11D8E879F87A88BB98BF4 +:1015E000EBCF80E00C94980A81E00C94980A8091EB +:1015F0000A04882321F080910D0490E0089590E082 +:1016000080E00895CF92DF92EF92FF920F931F93A5 +:10161000CF93DF938091070190E025E09595879522 +:101620002A95E1F78095909583709927C0EFD2E0D5 +:1016300002C0D595C7958A95E2F720910F013091A8 +:101640001001DE010E94543928E13CEF4FEF5FEFBB +:101650000E9427398091ED039091EE030197280FA6 +:10166000391F309322032093210320E030E04AE722 +:1016700054E460910B0170910C0180910D019091E7 +:101680000E010E9417380E94573A8E01DD0F220B7F +:10169000330B6B017C01C01AD10AE20AF30AA701DD +:1016A0009601A8EEB3E00E94EB38685873418109B7 +:1016B000910928E630E040E050E00E94053920938F +:1016C00068023093690240936A0250936B02DF9183 +:1016D000CF911F910F91FF90EF90DF90CF900895E1 +:1016E000CF92DF92EF92FF926B017C01C0920B01CF +:1016F000D0920C01E0920D01F0920E0160910F0169 +:101700007091100190E080E00E94B637A701960129 +:101710000E9417380E94573A7093EE036093ED03CE +:1017200020E034E244E759E4C701B6010E941738CB +:1017300020E030E040ED52E40E94DE390E94573A4A +:101740006093E8037093E9038093EA039093EB03BB +:10175000FF90EF90DF90CF900C94020B08952091B2 +:101760001B02260F3327331F21323105ECF4209161 +:101770005F05FC0190E080E0243069F082E008958C +:10178000A0911B022191AC0145505E4FA40FB52FD3 +:10179000B11D2C930196861798F380911B02680F58 +:1017A00060931B0280E0089581E0089510925F0528 +:1017B00081E080935E051092390561E082E10E942C +:1017C000EC0661E083E10E94EC06E9EBF0E0808149 +:1017D0008E7F808380818D7F808388E48093B800B2 +:1017E00085E48093BC000895CF93DF9391E09093BC +:1017F000FA018823B9F0C091B800D091BA00809165 +:10180000BC008A7B8093BC0060E082E10E94EC0611 +:1018100060E083E10E94EC060E94D60BD093BA00F0 +:10182000C093B800DF91CF910895CF92DF92EF92ED +:10183000FF920F931F93CF93DF93D091880581E0A0 +:10184000D13208F09CC0C09187050E9496076B01B9 +:101850007C0180915F0581116CC082E080935F05FF +:1018600081E080935E058FEF80935D0510925C05AB +:10187000D0935B05A7E6B5E0EBE3F5E080E0D81395 +:101880008DC010923A0580913A05CC0FC82BC093B9 +:101890003A0580913905813009F084C010923905EC +:1018A0000E9496076B017C0180913A058093BB00F2 +:1018B0008091610590916205A0916305B0916405E6 +:1018C000892B8A2B8B2BA1F00E9496070091610532 +:1018D0001091620520916305309164056C197D09B2 +:1018E0008E099F09061717072807390708F442C011 +:1018F0008091BC0083FDD8CF85EC8093BC000E9412 +:1019000096076B017C0180915F05823009F44CC021 +:1019100080915D058F3F09F469C080915D0580323B +:1019200009F466C080915D05803309F463C084E0EA +:1019300026C08091610590916205A0916305B091E8 +:101940006405892B8A2B8B2B09F483CF0E94960781 +:101950000091610510916205209163053091640545 +:101960006C197D098E099F09061717072807390783 +:1019700008F06FCF809160050E94F40B85E0109213 +:1019800066051092880510926505DF91CF911F9131 +:101990000F91FF90EF90DF90CF9008959D919193DC +:1019A0008F5F6DCF85EEA9CF809161059091620523 +:1019B000A0916305B0916405892B8A2B8B2B09F4C8 +:1019C000A2CF0E94960700916105109162052091B7 +:1019D0006305309164056C197D098E099F0906170E +:1019E00017072807390708F08ECFC4CF80E0C7CF8C +:1019F00082E0C5CF83E0C3CF0895E091E3038091F7 +:101A0000E203E81730F4F0E0E652FE4F808190E008 +:101A100008958FEF9FEF08959091E3038091E20383 +:101A20002FEF3FEF981748F4E92FF0E0E652FE4F12 +:101A3000208130E09F5F9093E303C9010895809176 +:101A4000E2039091E303891B990B0895CF92DF92F3 +:101A5000EF92FF920F931F93CF93DF937C01CB0103 +:101A60008A0120916505222389F0EB016B01C40EE8 +:101A7000D51ECC15DD0569F06991D701ED91FC917A +:101A80000190F081E02DC7010995F3CF642F0E94EA +:101A9000AF0BC801DF91CF911F910F91FF90EF9095 +:101AA000DF90CF900895CF93DF931F92CDB7DEB72D +:101AB0006983209165052223F9F020918805203261 +:101AC00058F021E030E0FC013383228390E080E095 +:101AD0000F90DF91CF91089580916605E82FF0E097 +:101AE000E959FA4F998190838F5F809366058093BF +:101AF000880581E090E0ECCF61E0CE0101960E9484 +:101B0000AF0BF7CFFC01248131E0309365052093C2 +:101B1000870510926605109288058385682B84E8F6 +:101B200096E00E94530D0C94150C90E080E008950F +:101B3000CF93DF93D82FC62F60E08AE00E94EC0697 +:101B4000DEBD0DB407FEFDCF8EB5CEBD0DB407FED4 +:101B5000FDCFCEB561E08AE00E94EC068C2FDF91CC +:101B6000CF910895CF93DF93CDE5D1E0888188238D +:101B700031F0698180680E94980D2296F7CFDF913D +:101B8000CF91089560E00C94980DCF92DF92EF9280 +:101B9000FF921F93CF93DF93162FEA0180933505B1 +:101BA00020E1629FC0011124862794E0899F900163 +:101BB00011248227807C8093360561E08AE00E94B0 +:101BC000EC0661E08AE00E941A0761E08AE00E9468 +:101BD0001A0761E08BE00E941A0760E08CE00E9427 +:101BE0001A0761E08DE00E941A0780E58CBD8DB573 +:101BF00081608DBD6AEA8FEA0E94980D8FE20E9493 +:101C0000C20D8A3AB9F765E58FEA0E94980D8FE216 +:101C10000E94C20D8535B9F70E94B20D0E94B20D27 +:101C2000BE01DD0F880B990BAAE0B0E09B01AC016F +:101C30000E94EB38611521EE720725EF820725E03F +:101C4000920790F322E0660F771F881F991F2A954D +:101C5000D1F729E03DE340E050E00E9405396901F9 +:101C60007A01CA01B9013AE096958795779567950B +:101C70003A95D1F787E80E94980DC701B60142E076 +:101C800096958795779567954A95D1F788E80E944C +:101C9000980D6C2D6295660F660F607C89E80E9436 +:101CA000980D612F80EBDF91CF911F91FF90EF9006 +:101CB000DF90CF900C94980DCF93C82F8093380568 +:101CC00081E00E94C20D837E682F6C2B81E80E9408 +:101CD000980D87E20E94C20D87FFFBCFCF91089538 +:101CE0001F93CF93DF93EC01FE011491112371F048 +:101CF0001A3029F46DE089E895E00E94FC07612F15 +:101D000089E895E00E94FC072196EECFDF91CF9104 +:101D10001F91089561E089E00E94EC0664E170E0A3 +:101D200080E090E00E94BB0760E089E00E94EC0642 +:101D30006CE370E080E090E00E94BB0761E089E026 +:101D40000E94EC0664E170E080E090E00E94BB0736 +:101D500060E089E00C94EC06DF92EF92FF920F9323 +:101D60001F93CF93DF9320913306211106C0E92EF4 +:101D7000D82E0E94EC0581110FC0109231061092EE +:101D800033061092320680E0DF91CF911F910F91C0 +:101D9000FF90EF90DF90089560E080EF0E9455067D +:101DA000D1E000E0F12CC1E00E948406182F0E94CF +:101DB00084061130E1F48130C9F5C134F0F2F092BB +:101DC0003106F11003C081E080933306809129062B +:101DD000882399F2A9E2B6E0ED2DFE2DCF010896F9 +:101DE0002D912193E817F907D9F781E0CDCFE02FA6 +:101DF000F0E0181311C080913106C817A8F4DF0174 +:101E0000AA5DB94F13968C918D2381F410E0C930EF +:101E100010F4C0933206FC2EEA5DF94F83819D2FAA +:101E20009095892383830AC08C13F0CFE02FF0E0D4 +:101E3000EA5DF94F83818D2B838311E0812F0E940E +:101E40002506CF5FDD0F11F40F5FD1E0083008F4F5 +:101E5000ABCFB3CFDF92EF92FF920F931F93CF934D +:101E6000DF93CDB7DEB728970FB6F894DEBF0FBE6D +:101E7000CDBFE0900B04F0900C04E114F10439F0B4 +:101E80000091DC031091DD030115110591F410920E +:101E90000A0410920D0428960FB6F894DEBF0FBE08 +:101EA000CDBFDF91CF911F910F91FF90EF90DF9009 +:101EB0000895D82E809154010E945607D0920A04AA +:101EC000DD2009F4ABC020E030E040E85FE3609142 +:101ED0000B0170910C0180910D0190910E010E94F7 +:101EE000B13787FF03C08FE180930701D0900701CE +:101EF00020911701F80110E080E395E7211721F008 +:101F0000819391931F5FFACF10923106109233069E +:101F1000109232061092300610922F0610922E0662 +:101F200010922D0610922C0610922B0610922A0663 +:101F30001092290610920D04CE0101960E94AC0E5B +:101F4000882349F089818832B9F780910D048F5F29 +:101F500080930D04F1CFF70180819091DB039923E9 +:101F600079F1882369F110930D04E12FF0E0E1503D +:101F7000F04E93E0EE0FFF1F9A95E1F7EE0DFF1D77 +:101F8000111115C010920D048832F9F010E0809103 +:101F90000D041817D0F4F8E01F9FC00111248E0D16 +:101FA0009F1D0E94AC0E882381F01F5FF0CF3897F1 +:101FB0009085983219F410930D04E6CF1150E0CFBC +:101FC00090910D04191700F7F6CF0E94EC0560E020 +:101FD0008CEC0E94550660E08EE40E94550660E09D +:101FE00080E00E94550660E080E00E94550660E0B7 +:101FF0008D2D0E9455060E94EC0560E08CEC0E943D +:10200000550661E088E40E94550664E170E080E0D6 +:1020100090E00E94BB070E94020B3DCF1091060189 +:1020200017FDF9CF61E0812F0E941A0760E0812F30 +:102030000E94EC0660E0812F0E941A07ECCF0F93FC +:102040001F93CF938C01C62F0E94820D6C2F64606A +:10205000C8010E94820D6C2F6B7FC8010E94820D07 +:1020600083EC90E00197F1F7CF911F910F910895C4 +:102070000F931F93CF93DF938C01D62FC42F607FD4 +:10208000642B0E941F1080E1D89FB00111246C2B9B +:10209000C801DF91CF911F910F910C941F10CF9326 +:1020A000DF93CDB7DEB728970FB6F894DEBF0FBE2B +:1020B000CDBF28E0E5E5F1E0DE01119601900D923B +:1020C0002A95E1F7FC012085261708F46FEF70E0F0 +:1020D000660F771F21E030E02C0F3D1F620F731F4A +:1020E000FB016081606840E028960FB6F894DEBF7F +:1020F0000FBECDBFDF91CF910C94381040E061E06E +:102100000E9438108BE39FE10197F1F7089541E0B9 +:102110000E94381081E090E00895FB0101900020BA +:10212000E9F73197AF01461B570BDC01ED91FC91AC +:102130000280F381E02D099468EB71E089E895E075 +:102140000C948D10CF93DF93BC0189E895E00E9439 +:102150000308EC010E949C108C0F9D1FDF91CF9112 +:1021600008958F929F92AF92BF92EF92FF920F933A +:102170001F93CF93DF93CDB7DEB7A1970FB6F89437 +:10218000DEBF0FBECDBF7C01FA01CB0119A2223008 +:1021900008F42AE08E010F5D1F4F822E912CB12C86 +:1021A000A12CBF01A50194010E940539F901CA01C2 +:1021B0006A300CF5605DD8016E938D01232B242BC2 +:1021C000252B79F790E080E0109721F0BD01C70141 +:1021D0000E948D10A1960FB6F894DEBF0FBECDBF42 +:1021E000DF91CF911F910F91FF90EF90BF90AF9033 +:1021F0009F908F900895695CDECF242F462F50E08A +:1022000070E060E00C94B110CF93DF934AE050E0AF +:10221000682F89E895E00E94FD10EC010E949C1057 +:102220008C0F9D1FDF91CF910895CF92DF92EF9297 +:10223000FF920F931F93CF93DF936B01770FEE08FD +:10224000FF084A305105F1F42AE0F7FE1CC0EC010A +:102250006DE20E94FC078C0144275527BA014C19F6 +:102260005D096E097F092AE0CE010E94B110800F3E +:10227000911FDF91CF911F910F91FF90EF90DF9011 +:10228000CF900895242FB701A601DF91CF911F9120 +:102290000F91FF90EF90DF90CF900C94B110CF93FF +:1022A000DF93AB01BC0189E895E00E941511EC01B8 +:1022B0000E949C108C0F9D1FDF91CF9108952F924B +:1022C0003F924F925F926F927F928F929F92AF92C6 +:1022D000BF92CF92DF92EF92FF921F93CF93DF9343 +:1022E000EC016A017B01722EAB019601CB01B601B4 +:1022F0000E946C3B6BEB71E0811126C046015701D7 +:10230000E894B7F82FEF3FEF4FE75FE7C501B4015F +:102310000E946C3B81110CC02FEF3FEF4FE75FE74E +:10232000C501B4010E94B1376FEB71E0181664F07B +:102330002FEF3FEF4FE75FE4C701B6010E94193B63 +:102340001816B4F463EC71E0CE01DF91CF911F91C8 +:10235000FF90EF90DF90CF90BF90AF909F908F90C5 +:102360007F906F905F904F903F902F900C948D10C6 +:102370002FEF3FEF4FE75FECC701B6010E94B13787 +:1023800087FDE0CF20E030E0A901C701B6010E943F +:10239000B137312C212C87FF09C06DE2CE010E949C +:1023A000FC071C01F7FAF094F7F8F09410E060E0F5 +:1023B00070E080E09FE3711641F020E030E040E201 +:1023C00051E40E94DE391F5FF6CFA70196010E94FB +:1023D0006D392B013C010E94573A4B015C012AE008 +:1023E000BC01A401CE010E94B1107C01E20CF31CDF +:1023F0001123C1F1C501B4010E94B6379B01AC01A4 +:10240000C301B2010E946C394B015C016EE2CE0146 +:102410000E94FC07E80EF91E115020F120E030E088 +:1024200040E251E4C501B4010E9417382B013C0180 +:102430000E94573A4B01B12CA12C2AE0B501A4010E +:10244000CE010E94B110E80EF91EC501B4010E9430 +:10245000B6379B01AC01C301B2010E946C394B013C +:102460005C01DACFC701DF91CF911F91FF90EF9010 +:10247000DF90CF90BF90AF909F908F907F906F90A4 +:102480005F904F903F902F900895CF93DF93AB01D3 +:10249000BC0122E089E895E00E945F11EC010E94F6 +:1024A0009C108C0F9D1FDF91CF9108950C945F11AC +:1024B0000C948D104AE050E061E089E895E00E94BC +:1024C000FD1067EC71E089E895E00E9458124AE03F +:1024D00050E060E089E895E00E94FD1067EC71E053 +:1024E00089E895E00E94581280E00C9404114F9204 +:1024F0005F926F927F928F929F92AF92BF92CF9294 +:10250000DF92EF92FF921F93CF93DF93C82F6091DA +:102510000F017091100190E080E00E94B6376B01CE +:102520007C018091110190911201019618E6189F8B +:10253000B001199F700D1124072E000C880B990B08 +:102540000E94B8372BED3FE049EC50E40E94173869 +:10255000A70196010E94173820E034E244E759E4CD +:102560000E94DE394B015C01D0E0CE010196189F3C +:10257000B001199F700D1124072E000C880B990BC8 +:102580000E94B837A70196010E94173820E034E274 +:1025900044E759E40E94DE396B017C01CC0FDD1F5A +:1025A000CC0FDD1FFE01E85EFE4F20E030E044EB83 +:1025B00053E460817181828193810E94DE399B01A5 +:1025C000AC01C701B6010E946D392BED3FE049EC2B +:1025D00050E40E9417382B013C010E941E3B6B0106 +:1025E0007C01C501B4010E941E3B9B01AC01C701E7 +:1025F000B6010E94DE396B017C01FE01EE5AFD4FEF +:10260000C082D182E282F382C301B2010E94D93931 +:102610002B013C01C501B4010E94D9399B01AC01D9 +:10262000C25CDD4FC701B6010E9417389B01AC01A7 +:10263000C301B2010E946C39688379838A839B83CA +:10264000DF91CF911F91FF90EF90DF90CF90BF90DF +:10265000AF909F908F907F906F905F904F90089574 +:102660002F923F924F925F926F927F928F929F92A2 +:10267000AF92BF92CF92DF92EF92FF920F931F9390 +:10268000CF93DF93CDB7DEB7CD57D1090FB6F8940E +:10269000DEBF0FBECDBF809120038823E1F01092F2 +:1026A000200380910A048823B1F01091060117FDE0 +:1026B00008C061E0812F0E941A0761E0812F0E940B +:1026C000EC060E94EC0560E08CEC0E94550661E08F +:1026D00084E40E945506C090EC03CAAACC2009F4F9 +:1026E0008BC61092EC03F8942091110130911201E5 +:1026F00090E080E0821793070CF060C0FC01ED5F72 +:10270000FB4F4081411158C0FC0143E0EE0FFF1F19 +:102710004A95E1F7DF01A850BD4F1C9211961C921B +:10272000119712961C92129713961C921397149657 +:102730001C92149715961C92159716961C92169734 +:1027400017961C92DF01A053BD4F1C9211961C924C +:10275000119712961C92129713961C921397149627 +:102760001C92149715961C92159716961C92169704 +:1027700017961C92DF01A855BD4F1C9211961C9212 +:10278000119712961C92129713961C9213971496F7 +:102790001C92149715961C92159716961C921697D4 +:1027A00017961C92E058FD4F1082118212821382FC +:1027B000148215821682178201969CCF08E316E0D8 +:1027C000F12CE12C9BEFC92E97E0D92E26E1B22EF9 +:1027D000D80111968C911197882369F18C918823E7 +:1027E000B9F062E014968C910E941A0761EF7AE0CA +:1027F00080913D06E114F10421F064EF7AE08091CC +:1028000053060E94A90617C0EE24E394F12CE0CFF2 +:10281000F8018581823060F4E82FF0E0813009F41E +:10282000D4C4E898EE0FFF1FE05BFE4FD182C08258 +:10283000D80111961C92BE9CF001BF9CF00D112492 +:10284000E85CF94F86859785A089B189892B8A2B09 +:102850008B2BC9F04685578560897189D8011A96F6 +:102860004D905D906D907C901D97440D551D661D9B +:10287000771D1A964D935D936D937C931D971686E5 +:102880001786108A118A0A5E1F4FEA94EF2809F012 +:10289000BBCF789420917002309171024091720206 +:1028A000509173026091740270917502809176026A +:1028B0009091770240906C0250906D0260906E0291 +:1028C00070906F02109178020091790230907A0234 +:1028D00020907B02C0907C02CE86D0907D02DC8A64 +:1028E000E0907E02E88EF0907F02FA8EC09078022F +:1028F000CC8ED0907902D8A2E0907A02ECA2F0902F +:102900007B02FEA2C0907C02CAA6D0907D02D88A2B +:10291000E0907E02EEA6F0907F02F8AAC0906C02D2 +:10292000D0906D02E0906E02F0906F02CA86DB8656 +:10293000EC86FD8680906C0290906D02A0906E02F5 +:10294000B0906F020E948C3A6B017C01C301B2010E +:102950000E94B8379B01AC01C701B6010E94DE3965 +:102960006B017C01212F302F432D522D6E857C89E8 +:10297000888D9A8D0E94863A2B013C012C8D38A1BE +:102980004CA15EA16AA578898EA598A90E94863A75 +:102990009B01AC01C301B2010E9417382B013C011D +:1029A0006A857B858C859D850E94B8379B01AC012B +:1029B000C301B2010E94DE392B013C01C501B40103 +:1029C0000E94B8379B01AC01C301B2010E94DE39FD +:1029D0009B01AC01C701B6010E946C390E942C3BDF +:1029E000C0904001D0904101E0904201F09043013D +:1029F000CC8EDD8EEE8EFF8EA70196010E941738D9 +:102A000068A379A38AA39BA36093380470933904C5 +:102A100080933A0490933B04E0901101F0901201EE +:102A2000FDA2ECA280906C0290906D02A0906E02CC +:102A3000B0906F026091E8037091E9038091EA031E +:102A40009091EB030E94B6376B017C01ACA1BDA154 +:102A50001196A50194010E945B390E94B8379B0131 +:102A6000AC01C701B6010E94DE396C8B7D8B8E8B69 +:102A70009F8B60910F017091100190E080E00E94A7 +:102A8000B6372C893D894E895F890E94173860933B +:102A90003C0470933D0480933E0490933F04F09077 +:102AA00040042C96FFAE2C97C0904801D09049016D +:102AB000E0904A01F0904B016096CCAEDDAEEEAEF8 +:102AC000FFAE6097C0900B01D0900C01E0900D011B +:102AD000F0900E01CAA6DBA6ECA6FDA624E234E027 +:102AE000398F288F4FEE53E05B8F4A8F8AE194E055 +:102AF0009F878E87A1E4B4E0BB87AA87EEE3F2E06C +:102B0000FEABEDAB22E532E03CAB2BAB4CE251E04F +:102B100059AB48AB85E594E09FA78EA7312C212CBB +:102B2000CCA0DDA02C143D040CF07DC3B101A3E0CA +:102B3000660F771FAA95E1F7FB01E850FD4FD080A3 +:102B40006196DFAE6197E1806296EFAE6297F280A8 +:102B50006396FFAE6397C3806496CFAE6497D480CC +:102B60006596DFAE6597E5806696EFAE6697F68070 +:102B70006796FFAE6797C7806896CFAE6897ADA996 +:102B8000BEA9CD90DD90ED90FD90BEABADABCFAAD0 +:102B9000D8AEE9AEFAAEFB01E053FD4FC0806996B6 +:102BA000CFAE6997D1806A96DFAE6A97E2806B9666 +:102BB000EFAE6B97F3806C96FFAE6C97C4806D960A +:102BC000CFAE6D97D5806E96DFAE6E97E6806F962E +:102BD000EFAE6F97F780A096FFAEA097ABA9BCA908 +:102BE000CD90DD90ED90FD90BCABABABCBAEDCAE51 +:102BF000EDAEFEAEC0906C02D0906D02E0906E0221 +:102C0000F0906F022396CCAEDDAEEEAEFFAE239712 +:102C1000D0907802A196DFAEA197E0907902A296BB +:102C2000EFAEA297F0907A02A396FFAEA397C09062 +:102C30007B02A496CFAEA497D0907C02A596DFAE7F +:102C4000A597E0907D02A696EFAEA697F0907E0243 +:102C5000A796FFAEA797C0907F02A896CFAEA89781 +:102C60009B0120583D4F7901D901BC91A996BFAF76 +:102C7000A997F901F181AA96FFAFAA97D9011296F7 +:102C8000BC91AB96BFAFAB97F901F381AC96FFAFA8 +:102C9000AC97D9011496BC91AD96BFAFAD97F90131 +:102CA000F581AE96FFAFAE97D9011696BC91AF965F +:102CB000BFAFAF97F901F781E096FFAFE0972091A2 +:102CC0006C0230916D0240916E0250916F02279616 +:102CD0002CAF3DAF4EAF5FAF279780916C029091C4 +:102CE0006D02A0916E02B0916F022B968CAF9DAFDA +:102CF000AEAFBFAF2B97A8A9B9A92D913D914D912A +:102D00005D91B9ABA8AB2EA33FA348A759A7DB01A0 +:102D1000A855BD4F2C9111963C91119712964C914C +:102D2000129713965C91139714966C9114971596BD +:102D30007C91159716968C91169717969C9180907A +:102D40006C0290906D02A0906E02B0906F02F7013D +:102D500010810181C280E196CFAEE197D380E296E7 +:102D6000DFAEE297C480E396CFAEE397D580E496DA +:102D7000DFAEE497C680E596CFAEE597D780E696BE +:102D8000DFAEE697C080E796CFAEE797D180E896B2 +:102D9000DFAEE897C280E996CFAEE997D380EA9696 +:102DA000DFAEEA97C480EB96CFAEEB97D580EC967A +:102DB000DFAEEC97C680ED96CFAEED97D780EE965E +:102DC000DFAEEE9740906C0250906D0260906E0204 +:102DD00070906F02C0906C02D0906D02E0906E0215 +:102DE000F0906F02C88AD98AEA8AFB8A0E948C3ADC +:102DF0006B017C01C501B4010E94B8379B01AC0195 +:102E0000C701B6010E94DE396B017C01212F302FF2 +:102E1000E1964FADE197E2965FADE297E3966FAD35 +:102E2000E397E4967FADE497E5968FADE597E69658 +:102E30009FADE6970E94863A4B015C01E7962FAD65 +:102E4000E797E8963FADE897E9964FADE997EA96A0 +:102E50005FADEA97EB966FADEB97EC967FADEC9795 +:102E6000ED968FADED97EE969FADEE970E94863A68 +:102E70009B01AC01C501B4010E9417384B015C01F4 +:102E8000C301B2010E94B8379B01AC01C501B40176 +:102E90000E94DE394B015C01688979898A899B89A6 +:102EA0000E94B8379B01AC01C501B4010E94DE3914 +:102EB0009B01AC01C701B6010E946C390E942C3BFA +:102EC0009B01AC016EA17FA188A599A50E9417382E +:102ED0006B017C01AEA5BFA5CD92DD92ED92FD9276 +:102EE000BFA7AEA7AA8DBB8D2D913D914D915C9151 +:102EF000288B398B4A8B5B8B2C96BFAD2C97BB23D1 +:102F000009F46DC161962FAD619762963FAD6297EE +:102F100063964FAD639764965FAD649765966FADAA +:102F2000659766967FAD669767968FAD679768964B +:102F30009FAD68970E94863A2FA938AD49AD5AAD2A +:102F40000E9417384B015C0169962FAD69976A960C +:102F50003FAD6A976B964FAD6B976C965FAD6C9774 +:102F60006D966FAD6D976E967FAD6E976F968FADC8 +:102F70006F97A0969FADA0970E94863A2BAD3CAD6F +:102F80004DAD5EAD0E9417389B01AC01C501B40187 +:102F90000E946D394B015C0123966CAD7DAD8EAD09 +:102FA0009FAD23970E94B8379B01AC01C501B401C6 +:102FB0000E94DE394B015C01A1962FADA197A2962C +:102FC0003FADA297A3964FADA397A4965FADA497EC +:102FD000A5966FADA597A6967FADA697A7968FAD40 +:102FE000A797A8969FADA8970E94863A2B013C010F +:102FF000A9962FADA997AA963FADAA97AB964FADCC +:10300000AB97AC965FADAC97AD966FADAD97AE9606 +:103010007FADAE97AF968FADAF97E0969FADE0973F +:103020000E94863A9B01AC01C301B2010E9417388D +:103030002B013C0127966CAD7DAD8EAD9FAD2797E2 +:103040000E94B8379B01AC01C301B2010E94DE3976 +:103050002B013C012B966CAD7DAD8EAD9FAD2B97BA +:103060000E94B8379B01AC01C301B2010E94DE3956 +:103070009B01AC01C501B4010E946C392C8D3D8DC2 +:103080004E8D5F8D0E9417382EA13FA148A559A5EE +:103090000E9417384B015C01A701960168A179A134 +:1030A0008AA19BA10E9417389B01AC01C501B40104 +:1030B0000E94DE396B017C0126E636E646E85FE3D6 +:1030C0000E94193B18160CF482C026E636E646E844 +:1030D0005FEBC701B6010E94B13787FD78C0A70139 +:1030E0009601C701B6010E946C3B811170C0EA8550 +:1030F000FB85C082D182E282F38220E030E040E0B2 +:103100005FE3C501B4010E946D390E94503AEE851B +:10311000FF85718360832AA53BA54CA55DA5C501EC +:10312000B4010E9417382C893D894E895F890E941D +:10313000DE39288939894A895B890E946D396B019A +:103140007C0120E030E041E655E40E94DE390E9437 +:10315000503AA88DB98D0D911D912D913D91B98F4A +:10316000A88FFD013497072E000C880B990B060FD2 +:10317000171F281F391F00831183228333830E9466 +:10318000B83720E030E041E655E40E9417389B0153 +:10319000AC01C701B6010E946C39EA8DFB8D6193C9 +:1031A000719381939193FB8FEA8FFFEF2F1A3F0A60 +:1031B0002E853F852E5F3F4F3F872E874A855B8553 +:1031C0004C5F5F4F5B874A87ABCCE9982BCBAA85D6 +:1031D000BB851D921D921D921C9213978ECF6096F7 +:1031E0002CAD3DAD4EAD5FAD60970E9417386B01C1 +:1031F0007C01AA85BB851D921D921D921C9213977E +:1032000020E030E040E05FE30E946D390E94503AD8 +:10321000EE85FF85718360832AA53BA54CA55DA53E +:10322000C701B6017ECF40900A04442009F4E4C0EF +:10323000512C3E015AE0650E711CF0EC8F2EF6E722 +:103240009F2E80910D045816A8F090911701282FF9 +:1032500030E0220F331FE091DC03F091DD03E20F39 +:10326000F31F20E335E7891708F0BEC0219331939F +:103270008F5FF9CF2DEC3CEC4CE45EE360910B01E9 +:1032800070910C0180910D0190910E010E94B13757 +:10329000052D10E087FF0CC0000F111FE091DC032B +:1032A000F091DD03E00FF11F918280825394C9CF2A +:1032B0000E94EC05882381F3C0900B04D0900C048D +:1032C000C80163E0880F991F6A95E1F7C80ED91EFF +:1032D000D6018C91882301F360E085E50E945506B4 +:1032E0007601B8E0EB0EF11C60E0F60181916F0110 +:1032F0000E945506CE14DF04B9F760E08EEB0E9401 +:1033000055069E012F5F3F4F7901690158E0A52EB8 +:10331000B12C312C222423940E948406811132285E +:10332000220C31E0A31AB108B9F7D6013D926D0124 +:10333000A615B70559F729E0E0E0215099F0D7012B +:103340008D917D018E27E82FEF70F0E0EA57FF4F57 +:103350009491E82FE295EF70F0E0EA56FF4FE49188 +:10336000E927EBCF89858E1336C089819A81B6E033 +:10337000B89F9001B99F300D11249595879595952B +:103380008795820F931F2D81211102C080EC96E753 +:103390002F812C3021F48433E1E29E07F9F0803C48 +:1033A000F6E79F0731F09C0124583A4E2135364408 +:1033B000C0F4000F111F2091DC033091DD03020FD8 +:1033C000131FD8018D939C9361E070E080E090E042 +:1033D0000E94BB076BCF80EC96E7D5CF80EC96E7D9 +:1033E000E8CF88EF95E7E5CF60E0809106010E9485 +:1033F000EC06109267024AAA8AA9C358DF4F0FB69B +:10340000F894DEBF0FBECDBFDF91CF911F910F911A +:10341000FF90EF90DF90CF90BF90AF909F908F90F4 +:103420007F906F905F904F903F902F900895FC0198 +:10343000808191810C94D538CF92DF92EF92FF92E8 +:103440000F931F93CF93DF9300D0CDB7DEB76C01FE +:103450007C0103E010E01A830983CE0101960E94EB +:10346000171AF70181937F010F5F1F4F0730110576 +:1034700091F7C6010F900F90DF91CF911F910F919F +:10348000FF90EF90DF90CF900895AF92BF92CF92D0 +:10349000DF92EF92FF920F931F93CF93DF9300D0B1 +:1034A000CDB7DEB76C015B0160E87BE089E895E0B1 +:1034B0000E94030810E000E00A151B050CF042C052 +:1034C0007801EC0CFD1CFA82E982CE0101960E9483 +:1034D000171A803128F460E389E895E00E94FC0720 +:1034E0000F5F1F4FFA82E982CE0101960E94171AE0 +:1034F00040E150E0682F89E895E00E94FD1068EDFA +:1035000071E089E895E00E945812C80187709927F8 +:10351000892B31F468ED71E089E895E00E9458123A +:10352000C8018F709927892B39F66EE77BE089E80F +:1035300095E00E9403086CE77BE089E895E00E9433 +:103540000308BACF0F900F90DF91CF911F910F9189 +:10355000FF90EF90DF90CF90BF90AF9008950F93C2 +:103560001F93CF93DF9300D000D0CDB7DEB78C018F +:103570001A821982CE0101960E94171A8F3411F512 +:1035800081E090E09A838983CE0101960E94171A08 +:103590008534C1F482E090E09A838983CE0101965C +:1035A0000E94171A8D3471F481E00115110559F04C +:1035B000CE0101960E941C1A81E02B813C812017CC +:1035C000310709F080E00F900F900F900F90DF917E +:1035D000CF911F910F9108951F93CF93DF93EC012B +:1035E000162F0E94171A811729F0612F888199815F +:1035F0000E94DD38CE01DF91CF911F910895CF92C7 +:10360000DF92EF92FF920F931F93CF93DF9300D03F +:10361000CDB7DEB76C017C0103E010E01A830983AB +:10362000F70161917F01CE0101960E94EC1A0F5FB4 +:103630001F4F0730110591F7C6010F900F90DF91D2 +:10364000CF911F910F91FF90EF90DF90CF90089551 +:1036500085ED8093BC008091610590916205A091F9 +:103660006305B09164050796A11DB11D23E0B695D1 +:10367000A795979587952A95D1F72091BC0024FDB1 +:1036800003C010925F050895409161055091620555 +:103690006091630570916405452B462B472B69F3B8 +:1036A0000097A105B10541F025E32A95F1F7000047 +:1036B0000197A109B109E1CF809160050C94F40B49 +:1036C0001F920F920FB60F9211242F933F938F9357 +:1036D0009F93AF93BF938091290590912A05A09164 +:1036E0002B05B0912C053091280523E0230F2D37B1 +:1036F00058F50196A11DB11D209328058093290539 +:1037000090932A05A0932B05B0932C0580912D054D +:1037100090912E05A0912F05B09130050196A11D25 +:10372000B11D80932D0590932E05A0932F05B09386 +:103730003005BF91AF919F918F913F912F910F9045 +:103740000FBE0F901F90189526E8230F0296A11D1B +:10375000B11DD2CF1F920F920FB60F9211242F934B +:103760003F934F935F936F937F938F939F93AF9309 +:10377000BF93EF93FF93E0915201F09153010995AC +:10378000FF91EF91BF91AF919F918F917F916F9139 +:103790005F914F913F912F910F900FBE0F901F900F +:1037A00018951F920F920FB60F9211242F933F93EB +:1037B0004F935F936F937F938F939F93AF93BF9339 +:1037C000EF93FF93E0915001F09151010995FF9122 +:1037D000EF91BF91AF919F918F917F916F915F9189 +:1037E0004F913F912F910F900FBE0F901F90189502 +:1037F0001F920F920FB60F9211242F933F934F9366 +:103800005F936F937F938F939F93AF93BF93EF9348 +:10381000FF9389E895E00E94090AFF91EF91BF911B +:10382000AF919F918F917F916F915F914F913F9158 +:103830002F910F900FBE0F901F9018951F920F920F +:103840000FB60F9211242F938F939F93EF93FF93B3 +:10385000E0919905F0919A058081E0919F05F091A2 +:10386000A00582FD1BC090818091A2058F5F8F73A0 +:103870002091A305821741F0E091A205F0E0E757FF +:10388000FA4F958F8093A205FF91EF919F918F91B1 +:103890002F910F900FBE0F901F9018958081F4CF3D +:1038A0001F920F920FB60F9211242F923F924F92B8 +:1038B0005F926F927F928F929F92AF92BF92CF92C0 +:1038C000DF92EF92FF920F931F932F933F934F93AB +:1038D0005F936F937F938F939F93AF93BF93EF9378 +:1038E000FF93CF93DF9300D01F92CDB7DEB7409008 +:1038F0007800509079008091DA03E2E0E80F20919F +:10390000110130911201E217130621F01CF0E1E0E1 +:10391000E80FE21BF0E0E050FF4F8081805C809375 +:103920007C008091E4039091E503A091E603B091BF +:10393000E7030196A11DB11D8093E4039093E50375 +:10394000A093E603B093E7038091DA038111D3C219 +:103950008091D8039091D9039093D7038093D60395 +:103960008091360690913706969587959201281B8F +:10397000390B3093D9032093D8038091D4039091CD +:10398000D503AC015695479556954795841B950BE5 +:10399000A90137FF04C044275527421B530B840F4E +:1039A000951F9093D5038093D40341E06091340632 +:1039B000709135066817790708F040E0409340049D +:1039C000121613060CF0B5C081E090E09093D3037B +:1039D0008093D2032091D2033091D3038091BC0312 +:1039E0009091BD032817390709F4A8C08091660299 +:1039F0008F5F8093660280916602833030F0109270 +:103A000066023093BF032093BE0380912503882371 +:103A1000B1F087E080937A0080917A00806880938B +:103A20007A0080917A0080937A0080917A00809366 +:103A30007A0080917A0080937A001092250360903A +:103A4000BE037090BF03209111013091120180914B +:103A50004004882309F481C38091BC039091BD0385 +:103A600041E06416710409F0D2C1019709F4D5C18F +:103A700080912303909124030196909324038093D3 +:103A8000230340910A01442309F47BC040910801BB +:103A9000509109018417950708F473C010920A0128 +:103AA00010922403109223030AE8E02E03E0F02E84 +:103AB000A2E6B3E00AE313E046E253E090E080E0E0 +:103AC00082179307F4F5F701108211821282138294 +:103AD0001482158216821782F8E0EF0EF11C1C92F8 +:103AE00011961C92119712961C92129713961C9283 +:103AF000139714961C92149715961C921597169668 +:103B00001C92169717961C9217971896F801108218 +:103B10001182128213821482158216821782085F24 +:103B20001F4FFA011192119211921192AF01019659 +:103B3000C7CF1092D3031092D2034CCF10926602DB +:103B40005ACF1092C4031092C5031092C60310926C +:103B5000C7031092C8031092C9031092CA031092AF +:103B6000CB031092C0031092C1031092C2031092B3 +:103B7000C3031092CE031092CF031092D003109281 +:103B8000D10380912303909124034091210350910C +:103B900022038417950739F440910A01411103C0AB +:103BA00041E0409320034091ED035091EE038417D0 +:103BB000950708F432C180910A0181112EC110923B +:103BC0002403109223036AE873E07B836A83A2E6EE +:103BD000B3E01AE3212E13E0312E66E273E050E0E9 +:103BE00040E0421753070CF0A0C0EA81FB818080BF +:103BF0009180A280B380C480D580E680F78038961B +:103C0000FB83EA83CA01E3E0880F991FEA95E1F795 +:103C10008C0108501D4FF80180829182A282B382EC +:103C2000C482D582E682F7828C9011969C9011977F +:103C30001296AC9012971396BC9013971496CC9052 +:103C400014971596DC9015971696EC901697179684 +:103C5000FC90179718968C0100531D4FF801808235 +:103C60009182A282B382C482D582E682F7820A81DF +:103C70001B8108501109F8011082118212821382EF +:103C800014821582168217828D0108501109F801DD +:103C90001082118212821382148215821682178278 +:103CA000F10180809180A280B380C480D580E680BD +:103CB000F780F8E02F0E311C8C0108551D4FF801DC +:103CC00080829182A282B382C482D582E682F78208 +:103CD000810108501109F8011082118212821382A9 +:103CE0001482158216821782FB0181909190A19017 +:103CF000B190BF0175016401FF0CCC08DC2C76018A +:103D000080589D4FFC0180829182A282B382C4823E +:103D1000C582C682C782CB010497FC011082118242 +:103D2000128213824F5F5F4F5CCF8091C0039091EE +:103D3000C103A091C203B091C303AC01BD01770FD1 +:103D4000440B542FBA018093780290937902A09388 +:103D50007A02B0937B0240937C0240937D024093B1 +:103D60007E0240937F027091C4036091C50350911D +:103D7000C6034091C7033091C8032091C9039091B5 +:103D8000CA038091CB0370937002609371025093C9 +:103D900072024093730230937402209375029093E1 +:103DA0007602809377021092C4031092C50310929A +:103DB000C6031092C7031092C8031092C903109251 +:103DC000CA031092CB031092C0031092C103109249 +:103DD000C2031092C3038091CE039091CF03A091B0 +:103DE000D003B091D10380936C0290936D02A093A5 +:103DF0006E02B0936F021092CE031092CF03109216 +:103E0000D0031092D10381E08093EC0306C0892B8C +:103E100021F01092CD031092CC038091CE039091AB +:103E2000CF03A091D003B091D1030196A11DB11D84 +:103E30008093CE039093CF03A093D003B093D1038C +:103E40008091CC039091CD0301969093CD03809304 +:103E5000CC03E091D803F091D9039F01DF010E94C8 +:103E60004C396B017C01FF0CCC08DC2C76019B01EA +:103E7000AC016C2D7C2D8C2D9C2DA090C403B0909A +:103E8000C503C090C603D090C703E090C803F0906C +:103E9000C9030091CA031091CB030E946339209398 +:103EA000C4033093C5034093C6035093C703609384 +:103EB000C8037093C9038093CA039093CB03CF01C7 +:103EC000FF0FAA0BBB0B4091C0035091C10360913F +:103ED000C2037091C303840F951FA61FB71F809361 +:103EE000C0039093C103A093C203B093C303709225 +:103EF000BD036092BC03E091DA03E98320901101D5 +:103F000030901201EE2309F4F8C08E2E912C281463 +:103F100039040CF4F2C0F1E08F1A9108F401ED5F5E +:103F2000FB4F46E0441651040CF492C281E08083BA +:103F3000F401EE0FFF1FEE54FC4F80913606909176 +:103F400037069695879560807180681A790AF40122 +:103F500033E0EE0FFF1F3A95E1F7BF0166577C4F44 +:103F60007B836A83A091D603B091D70393010E940B +:103F70004C396B017C01FF0CCC08DC2C76019B01D9 +:103F8000AC016C2D7C2D8C2D9C2DAA81BB81AC901D +:103F90001196BC9011971296CC9012971396DC90C4 +:103FA00013971496EC9014971596FC901597169607 +:103FB0000C91169717961C9117970E9463392C93B2 +:103FC00011963C93119712964C93129713965C930B +:103FD000139714966C93149715967C9315971696D1 +:103FE0008C93169717969C93BF016E597C4F7B83D9 +:103FF0006A83A091D803B091D90393010E944C39F0 +:104000006B017C01FF0CCC08DC2C76019B01AC0120 +:104010006C2D7C2D8C2D9C2DAA81BB81AC90119692 +:10402000BC9011971296CC9012971396DC90139730 +:104030001496EC9014971596FC90159716960C9183 +:10404000169717961C9117970E9463392C93119617 +:104050003C93119712964C93129713965C93139777 +:1040600014966C93149715967C93159716968C93CB +:10407000169717969C93E65CFC4F9301D3010E9420 +:104080004C396B017C01FF0CCC08DC2C76019B01C8 +:10409000AC016C2D7C2D8C2D9C2DA080B180C2801C +:1040A000D380E480F580068117810E9463392083E4 +:1040B0003183428353836483758386839783F401BA +:1040C000EE0FFF1FEE0FFF1FEA5DFC4FC301770CE1 +:1040D000AA0BBB0B4081518162817381840F951FB4 +:1040E000A61FB71F80839183A283B383F401EE0FD1 +:1040F000FF1FEE54FC4F5182408289818F5F809375 +:10410000DA038215130419F014F01092DA030F90F9 +:104110000F900F90DF91CF91FF91EF91BF91AF91F1 +:104120009F918F917F916F915F914F913F912F91CF +:104130001F910F91FF90EF90DF90CF90BF90AF90C5 +:104140009F908F907F906F905F904F903F902F90B7 +:104150000F900FBE0F901F9018954091E40350915F +:10416000E5036091E6037091E70380916802909106 +:104170006902A0916A02B0916B0284179507A607A5 +:10418000B70748F480916702811105C081E08093F0 +:104190002003809367024091E4035091E50360910E +:1041A000E6037091E7038091E8039091E903A09101 +:1041B000EA03B091EB0384179507A607B70708F049 +:1041C0002CCE1092E4031092E5031092E6031092B5 +:1041D000E70381E080930A011092240310922303E5 +:1041E0006AE873E07B836A8312E6212E13E0312EA6 +:1041F000EAE3F3E066E273E050E040E04217530781 +:104200000CF0D7C0CA01A3E0880F991FAA95E1F767 +:104210008C0108501D4FD8011C9211961C921197C9 +:1042200012961C92129713961C92139714961C9236 +:10423000149715961C92159716961C92169717961A +:104240001C928C0100531D4FD8011C9211961C9298 +:10425000119712961C92129713961C92139714960C +:104260001C92149715961C92159716961C921697E9 +:1042700017961C92AA81BB811C9211961C921197D1 +:1042800012961C92129713961C92139714961C92D6 +:10429000149715961C92159716961C9216971796BA +:1042A0001C9217971896BB83AA83D1011C92119672 +:1042B0001C92119712961C92129713961C921397A8 +:1042C00014961C92149715961C92159716961C928C +:1042D000169717961C92B8E02B0E311C80809180A7 +:1042E000A280B380C480D580E680F78038968C01A8 +:1042F00008551D4FD8018C9211969C9211971296D9 +:10430000AC9212971396BC9213971496CC92149772 +:104310001596DC9215971696EC9216971796FC92C6 +:104320007F01B8E0EB1AF108D7011C9211961C929C +:10433000119712961C92129713961C92139714962B +:104340001C92149715961C92159716961C92169708 +:1043500017961C92DB018D909D90AD90BD90BD0194 +:1043600075016401FF0CCC08DC2C760180589D4F50 +:10437000DC018C9211969C9211971296AC92129736 +:104380001396BC9213971496CC9214971596CC92D0 +:1043900015971696CC9216971796CC92CB01049748 +:1043A000DC011D921D921D921C9213974F5F5F4F6F +:1043B00025CF7091C4036091C5035091C60340910D +:1043C000C7033091C8032091C9039091CA0380911B +:1043D000CB0370937002609371025093720240930A +:1043E0007302309374022093750290937602809347 +:1043F00077021092C4031092C5031092C603109264 +:10440000C7031092C8031092C9031092CA031092F6 +:10441000CB038091C0039091C103A091C203B091DE +:10442000C303AC01BD01770F440B542FBA01809335 +:10443000780290937902A0937A02B0937B02409322 +:104440007C0240937D0240937E0240937F02BBCC6E +:1044500010824CCE1F920F920FB60F9211242F9301 +:104460003F934F935F936F937F938F939F93AF93FC +:10447000BF93EF93FF938091B900887F803609F452 +:104480004AC0F0F5883209F4A7C018F5803109F464 +:104490009BC0B8F4882309F4F9C0883009F494C0AB +:1044A000FF91EF91BF91AF919F918F917F916F910C +:1044B0005F914F913F912F910F900FBE0F901F90E2 +:1044C0001895883109F488C0803251F780935D05D2 +:1044D00014C0803409F49DC040F48033B9F38833AC +:1044E000F9F680935D0585ECB0C0803509F485C090 +:1044F000883509F496C0883499F60E94281BD0CFDD +:10450000883909F48CC038F5883729F050F488369A +:1045100011F0803729F683E080935F0510923D0209 +:1045200057C0883809F47BC0803919F0803809F009 +:10453000B7CF80913D02803208F071C0E0913D021A +:1045400081E08E0F80933D028091BB00F0E0E35E3E +:10455000FD4F80833DC0803B39F0E0F4803A09F4A0 +:1045600079C0883A09F09CCF84E080935F0510926F +:104570001C0210921B02E091DE03F091DF0309950B +:1045800080911B0281110FC081E080931B02109269 +:10459000FB0109C0803C09F4A6CF883C09F4A3CFF5 +:1045A000883B09F07DCFE0911C0281E08E0F809363 +:1045B0001C02F0E0E550FE4F80818093BB0090919B +:1045C0001C0280911B0229C080913A058093BB0098 +:1045D00085EC8093BC0064CF90915C0580915B0575 +:1045E000981758F5E0915C0581E08E0F80935C058B +:1045F000F0E0E55CFA4F8081E9CFE0915C0581E075 +:104600008E0F80935C058091BB00F0E0E55CFA4F73 +:10461000808390915C0580915B059817C8F285E8CE +:10462000D8CFE0915C0581E08E0F80935C0580918E +:10463000BB00F0E0E55CFA4F808380915E0581115C +:104640005CCF81E08093390584EA8093BC001092AE +:104650005F0526CF85EC8093BC0010925F058091AA +:104660003D02803230F4E0913D02F0E0E35EFD4F28 +:10467000108260913D0270E0E091E003F091E1036F +:104680008DE192E0099510923D020ACF10925D05EE +:1046900034CFEF92FF920F931F93CF93DF9300D00D +:1046A000CDB7DEB710928C0510928B0588EE93E0A3 +:1046B000A0E0B0E080938D0590938E05A0938F05C8 +:1046C000B09390058CE891E090938A0580938905DA +:1046D00085EC90E0909396058093950584EC90E0AE +:1046E000909398058093970580EC90E090939A05BD +:1046F0008093990581EC90E090939C0580939B05B5 +:1047000082EC90E090939E0580939D0586EC90E06E +:104710009093A00580939F051092A2051092A30587 +:104720001092A4051092A505109238061092390631 +:1047300033E030933C0621E020933D068EE690E086 +:10474000A0E0B0E080933E0690933F06A093400621 +:10475000B09341061092420610924306109244060E +:10476000109245061092460610924706109248068F +:104770001092490610924E0610924F063093520640 +:10478000209353068093540690935506A0935606A3 +:10479000B0935706109258061092590610925A0676 +:1047A00010925B0610925C0610925D0610925E06F7 +:1047B00010925F0680E094E090933706809336066F +:1047C00080E290E090933506809334068091540106 +:1047D0000E9456078EEF90E090937F0680937E06AE +:1047E00085E190E090937B0680937A0684E290E0E6 +:1047F00090937906809378068BE091E09093810600 +:10480000809380068FEF93E09093830680938206D7 +:1048100010927D0610927C060BE011E01A8309834A +:10482000CE0101960E94171A780195E1E90EF11C5C +:104830008F3F81F110937D0600937C068FEFE81681 +:1048400083E0F80674F5FA82E982CE0101960E94AF +:10485000171A8F3FD9F00BE011E0809182069091FA +:10486000830608171907ECF41A8309836FEFCE014A +:1048700001960E94EC1A10927D0610927C0680919F +:104880007A0690917B06080F191FE7CF95E1E90E94 +:10489000F11CD4CF87018FEFE81683E0F80609F00A +:1048A000BDCF109287061092860688EE93E0A0E0B6 +:1048B000B0E08093880690938906A0938A06B0930F +:1048C0008B068EE991E09093850680938406109282 +:1048D000F0061092EF0680EB91E09093EE06809345 +:1048E000ED061092F1061092F6061092F70610925D +:1048F000F80681E08093900699E19093910692EDFD +:104900009093920695E09093930649E25CE766E8FF +:1049100073E44093940650939506609396067093C3 +:10492000970640E050E060E773E4409398065093A8 +:10493000990660939A0670939B0640E050E068E405 +:1049400072E440939C0650939D0660939E0670937C +:104950009F060DEC1CEC25EB32E40093A0061093AF +:10496000A1062093A2063093A3064AE959E969E912 +:104970007FE34093A4065093A5066093A606709328 +:10498000A7060093A8061093A9062093AA063093C1 +:10499000AB064093AC065093AD066093AE067093A1 +:1049A000AF0643E353E36BE970E44093B0065093E2 +:1049B000B1066093B2067093B3068093B40610926A +:1049C000B6061092B5061092B7061092B90610926C +:1049D000B8068093BA061092EB0683E08093EC064B +:1049E0000F900F90DF91CF911F910F91FF90EF905B +:1049F0000895CF93DF93CDB7DEB76E970FB6F894D7 +:104A0000DEBF0FBECDBF789484B5826084BD84B50F +:104A1000816084BD85B5826085BD85B5816085BDB9 +:104A200080916E00816080936E0010928100809171 +:104A300081008260809381008091810081608093F9 +:104A40008100809180008160809380008091B1001E +:104A500084608093B1008091B00081608093B00049 +:104A600080917A00846080937A0080917A008260DD +:104A700080937A0080917A00816080937A0080919F +:104A80007A00806880937A001092C10061E089E02A +:104A90000E941A0761E089E00E94EC0662E088E06B +:104AA0000E941A0761E085E00E941A0760E085E035 +:104AB0000E94EC06E0919905F0919A0582E08083CE +:104AC000E0919505F09196051082E0919705F0919F +:104AD000980583E380831092A105E0919D05F091F4 +:104AE0009E0586E08083E0919B05F0919C05808186 +:104AF00080618083E0919B05F0919C0580818860B6 +:104B00008083E0919B05F0919C0580818068808383 +:104B1000E0919B05F0919C0580818F7D80836DEBFA +:104B200070E089E895E00E9403080E945A1286EA24 +:104B300090E00E94A21080E190E00E94AF1A8823CA +:104B4000F9F0CE0101960E941C1AE980FA80F7FC68 +:104B500017C023E0E20EF11CB0E9CB2EB6E0DB2E4D +:104B600007E010E01E870D87CE010D960E94171AF0 +:104B7000D6018D936D010F5F1F4F0E151F0590F32A +:104B800060ED77E080E090E00E94BB0780919406A2 +:104B900090919506A0919606B0919706109200010B +:104BA0008093400190934101A0934201B09343014F +:104BB0004091A4065091A5066091A6067091A706A3 +:104BC000E09108048E2F90E09C01220F331F220FEA +:104BD000331FD901A45DBE4FC090A006D090A1069E +:104BE000E090A206F090A306CD92DD92ED92FC92A9 +:104BF0001397285E3E4FD9014D935D936D937C933F +:104C000013978D5F9B4F41E0DC014C93E0930F04C1 +:104C100051E05E0F852F90E0DC01A050BF4F4C9318 +:104C2000C090AC06D090AD06E090AE06F090AF0616 +:104C30009C01220F331F220F331FD901A45DBE4FE9 +:104C40008090A8069090A906A090AA06B090AB0606 +:104C50008D929D92AD92BC921397285E3E4FD901E2 +:104C6000CD92DD92ED92FC9213978D5F9B4FDC010C +:104C70004C9350931004EE5FE0930804F0E0E05092 +:104C8000FF4F82E0808383E393E3A3E5B0E4809366 +:104C9000440190934501A0934601B0934701609170 +:104CA0009C0670919D0680919E0690919F060E94A1 +:104CB000573A7093100160930F0190E080E00E94DA +:104CC000B63720910B0130910C0140910D015091AC +:104CD0000E010E9417380E94573A7093EE036093BA +:104CE000ED030E94020B10E08091110190911201DE +:104CF000181719062CF4812F0E9477121F5FF4CF2A +:104D00008091980690919906A0919A06B0919B0681 +:104D10008093480190934901A0934A01B0934B01BD +:104D20008091B4068093380681E08093390693E041 +:104D300090933C0680933D064091B5065091B6068F +:104D4000052E000C660B770B40933E0650933F06F2 +:104D500060934006709341062091B70620934E065B +:104D600080934F06909352068093530640935406C7 +:104D700050935506609356067093570694E09093AF +:104D800054019FEF909306019FE5909307012BEB51 +:104D900036E030930C0420930B048093DB0381E70F +:104DA00094E09093DD038093DC0386E08093170109 +:104DB000E0907C06F0907D06E114F10409F484C1D2 +:104DC00004E616E0F701E356F6406F019601200F66 +:104DD000311F80917A0690917B068E0D9F1D2817BA +:104DE000390754F43A832983CE0101960E94171A99 +:104DF000D8018D938D01EACFC0906406D0906506EE +:104E0000E0906606F09067060091680610916906CA +:104E100020916A0630916B0640916C0650916D06A8 +:104E200060916E0670916F06809170069091710688 +:104E3000A0917206B0917306C0922404D09225040A +:104E4000E0922604F092270400932804109329048A +:104E500020932A0430932B04409342065093430638 +:104E600060934406709345068093580690935906C4 +:104E7000A0935A06B0935B068091BA060E942A0F4F +:104E80008AE090E0909309018093080160E070E06F +:104E900080E09FE30E94700B1092E3031092E20304 +:104EA00010926605109288050E94D60B89EF97E054 +:104EB0009093DF038093DE038AEF97E09093E10302 +:104EC0008093E0038091130111E0109365058093B6 +:104ED00087050E94150C882309F403C180911501F0 +:104EE00010936505809387051092660510928805DA +:104EF0000E94150C882309F408C189EC90E00E94F7 +:104F0000A21080E090E080936F0490937004188A60 +:104F10001F8640EB51E05E874D87898B20E12E8B09 +:104F200092E09F8B188E1C821B825A8349838D834B +:104F30002A879B871C861092E3031092E20310924B +:104F40006605109288050E94D60B89EF97E0909332 +:104F5000DF038093DE038AEF97E09093E103809371 +:104F6000E0031E828B85823010F098E09E83898753 +:104F700062E370E080E090E00E94BB076C85CE01A8 +:104F800001960E94820D68EE73E080E090E00E943E +:104F9000BB0760E3CE0101960E941F100BE416E4EC +:104FA000C8010197F1F760E3CE0101960E941F103E +:104FB000C8010197F1F760E3CE0101960E941F102E +:104FC00083E592E00197F1F760E2CE0101960E943D +:104FD0001F106E81606240E0CE0101960E94381081 +:104FE00084E08F8340E06CE0CE0101960E9438108F +:104FF000CE0101960E947E1082E0888740E066E044 +:10500000CE0101960E94381040E062E0CE01019688 +:105010000E9438108BE39FE10197F1F788E08C87BD +:1050200060E0CE0101960E94820D66EF70E0CE0135 +:1050300001960E9403084AE050E061E0CE0101962B +:105040000E94FD1067EC71E0CE0101960E9458129B +:105050004AE050E060E0CE0101960E94FD1067EC4E +:1050600071E0CE0101960E9458124AE050E060E0E3 +:10507000CE0101960E94FD1061E0CE0101960E94D2 +:105080004F1068EE70E0CE0101960E94030860EDBB +:1050900077E080E090E00E94BB0781E080936E049F +:1050A000809108048823A1F1282F30E03093120169 +:1050B000209311018F5F90E0853050F5FC01ED5F8A +:1050C000FB4F10820196F8CF80E090E0DC0140E0D9 +:1050D00050E0BA0100E010E09801C12CD12C76011B +:1050E000ABCE03E111E067ED70E089E895E00E9446 +:1050F000030860E170E0F801808191810E944F1106 +:10510000D8018C9111969C91FECE05E111E0EBCF78 +:105110008090440190904501A0904601B0904701D5 +:10512000609136067091370690E080E00E94B637B5 +:105130002B013C01209140013091410140914201FD +:1051400050914301C501B4010E941738A301920197 +:105150000E94DE39609340017093410180934201C7 +:10516000909343010CE2E02E01E0F02E8FEEC82E6A +:1051700083E0D82E10E000E080911101909112019F +:1051800008171907FCF4F70120813181428153810E +:10519000C501B4010E941738A30192010E94DE39B3 +:1051A000D7016D937D938D939D937D01802F0E94F8 +:1051B0007712F60111921192119211926F010F5F05 +:1051C0001F4FDACF81EF9AE090933B0680933A0627 +:1051D00084EF9AE0909351068093500681E080938B +:1051E0000A011092E4031092E5031092E603109274 +:1051F000E70387E080937A0080917A00806880934B +:105200007A0080917A00806280937A0080917A009F +:10521000886080937A0080917A00806480937A001D +:105220007894C0900B01D0900C01E0900D01F090AB +:105230000E0160910F017091100190E080E00E94DA +:10524000B637A70196010E9417380E94573A70930B +:10525000EE036093ED031092EC0320E034E244E7A8 +:1052600059E4C701B6010E94173820E030E040ED54 +:1052700052E40E94DE390E94573A6093E80370932B +:10528000E9038093EA039093EB0380913806882327 +:1052900059F062E080913C060E941A0761EF7AE0C3 +:1052A00080913D060E94A90680914E06882359F000 +:1052B00062E0809152060E941A0764EF7AE08091C2 +:1052C00053060E94A9060E9430138823E1F36091DF +:1052D000B0067091B1068091B2069091B3060E941B +:1052E000700B80916F041C821B8220EB31E03A83AB +:1052F00029838D8380E18A8782E08B871C86CE019B +:1053000001960E947E1088E08C8760E0CE010196B5 +:105310000E94820D8091400464E471E0811102C01A +:1053200064E371E0CE0101960E94030860EA7FE029 +:1053300080E090E00E94BB07CE0101960E947E10A3 +:1053400069E271E0CE0101960E9403080E94F70A0B +:105350004AE050E0BC01CE0101960E94151161E0C7 +:10536000CE0101960E944F106CE171E0CE010196D2 +:105370000E94030860ED77E080E090E00E94BB07A8 +:10538000CE0101960E947E106BE071E0CE01019685 +:105390000E94030861E0CE0101960E944F106FEF5A +:1053A00070E0CE0101960E94030881E080936E04B4 +:1053B00064E170E080E090E00E94BB07809190067D +:1053C00043E953E0833031F044E653E0823011F09A +:1053D00042EB51E060919206809193060E94C50DC8 +:1053E000EEE3FBE08491E0E7FBE00491ECE5FBE019 +:1053F0001491112301F181110E94C306E12FF0E005 +:10540000EE0FFF1FE65BF44FA591B4918C9108233A +:1054100091F060E085E00E94EC0680912705811103 +:1054200012C080913805803189F080E10E945C0EC5 +:105430000FEF1FEF72C061E085E00E94EC0681E093 +:1054400080932705EECF0C940000EBCF87E20E94FB +:10545000C20D909109048074891751F180E4892765 +:1054600080930904903421F188E10E94C20D90E0FC +:10547000B3E095958795BA95E1F7877080933405E9 +:1054800084E20E94C20D809333058FE10E94C20D19 +:10549000109231058093320580E20E94C20D209166 +:1054A000310530913205282B309332052093310598 +:1054B00088E20E94C20D82FFBBCF80E00E94C20D35 +:1054C000082F10E0F12CE12CE016F1067CF480E0CE +:1054D0000E94C20DF2E4EF16F10424F4F701EB513F +:1054E000FB4F80832FEFE21AF20AEECF84E20E9494 +:1054F000C20D809333058091E504282F207C909184 +:105500003605291395CF8F7390913505891729F0AA +:10551000882319F09F3309F08BCF8091EC0680FF30 +:1055200068C0023011050CF464C081E080934F0123 +:1055300000934D018091E60480934C0180913305E6 +:1055400090E09595879591958195910980934E016D +:105550006FE17BE089E895E00E94030800914D012E +:105560006DE571E089E895E00E9403084AE050E0AB +:1055700060914C0189E895E00E94FD106BE571E0B7 +:1055800089E895E00E940308A7EEEA2EA4E0FA2E2F +:1055900012E0101798F4D7014D917D0150E070E0B2 +:1055A00060E02AE089E895E00E94B11069E571E0C9 +:1055B00089E895E00E9403081F5FEBCF67E571E083 +:1055C00089E895E00E94030860914E01062E000CC8 +:1055D000770B4AE050E089E895E00E94151165E5F7 +:1055E00071E089E895E00E9403080E949C100E94E7 +:1055F0008A0E8091EC0681FF57C08091E4048823D5 +:1056000009F452C061E089E00E94EC0668EC70E0A9 +:1056100080E090E00E94BB0760E089E00E94EC0619 +:105620008AE19BE00E94700E4091E40450E070E03B +:1056300060E02AE089E895E00E94B11086E19BE0F5 +:105640000E94700E1091E404E12EF12C80E00E9483 +:105650005C0E62E0610F80E80E94980D6091360553 +:1056600080E80E94980D6091350580E80E94980DB1 +:1056700002EA14E0C801825A94408E159F053CF45A +:10568000F80161918F0180E80E94980DF3CF8CE0C2 +:105690000E945C0E88E20E94C20D83FFFBCF84E073 +:1056A0000E945C0E1092E40489E895E00E94E909EA +:1056B000892B11F40C94683489E895E00E94E9097B +:1056C000892B11F40C944E3489E895E00E94B208BD +:1056D000182F80ED810F8A30C8F481E08093180480 +:1056E0000E94ED07609314047093150480931604D0 +:1056F0009093170489E895E00E94E909892B09F441 +:10570000C1C089E895E00E946308F4CF0E94ED07CC +:10571000C0901404D0901504E0901604F090170483 +:105720006C197D098E099F09613D774081059105BE +:1057300010F010921804809118048111A3C0E1ECBC +:10574000E10FEC3308F09EC00E2E000CFF0BE55568 +:10575000F44D0C9446394634422C422C422C422CB7 +:10576000422C422C422C422C422C422C422C422CC9 +:10577000D92D422C422C422C422C422C422C422C21 +:10578000AF33422CD933422C422C422C422C422C97 +:10579000422C422C422C422C422CE72B0F2C4F2C1B +:1057A0005B2C422C912CB72C422CF331422CCB2C6D +:1057B000E22F5331F331422C0C32422C2A32563232 +:1057C0003B33422CD033F333422C422C07340E941B +:1057D0004E09609398067093990680939A06909369 +:1057E0009B06609348017093490180934A0190930E +:1057F0004B0180911904882309F444C06DEC7AE0D0 +:1058000089E895E00E9403086091980670919906D6 +:1058100080919A0690919B060E94451233C00E9487 +:10582000F20881E0643039F082E0683021F083E0F2 +:10583000693009F080E080939006809119048823F4 +:10584000F1F061EC7AE089E895E00E94030880912C +:105850009006813021F48AEB9AE00E94A210809198 +:105860009006823021F483EB9AE00E94A21080918E +:105870009006833021F48CEA9AE00E94A21081E025 +:105880008093A10489E895E00E94E909892B11F42D +:105890000C944E3489E895E00E946308F3CF0E948F +:1058A000F2086130710521F481E08093EB06EACFC4 +:1058B0001092EB06E7CF0E944E096B017C012DECA4 +:1058C0003CEC4CEC5DE30E94B13787FF07C0EDEC88 +:1058D000CE2EECECDE2EED2CEDE3FE2EC701B60154 +:1058E0000E94700BC092B006D092B106E092B20650 +:1058F000F092B30680911904882321F26BE97AE0D3 +:1059000089E895E00E94030822E030E0B701A60193 +:1059100089E895E00E94561288E99AE00E94A21058 +:10592000B1CF0E944E090E94503A072E000C880BFE +:10593000990B0E94B83760939C0670939D068093E4 +:105940009E0690939F0680911904882309F49ACFAC +:1059500061E97AE089E895E00E94030860919C067D +:1059600070919D0680919E0690919F0655CF0E9452 +:10597000F2086093920680911904882309F47FCF7E +:1059800069E87AE089E895E00E9403088091920630 +:105990000E94041174CF0E94F208698F7A8F8B8F56 +:1059A0009C8FA98CBA8C0E944E096B017C010E94CD +:1059B0004E092B013C0189E895E00E94E909892BF9 +:1059C00029F089E895E00E946308F5CF21E0A2164E +:1059D000B10409F45DC032E0A316B10409F4A0C01B +:1059E000AB2861F520914401309145014091460179 +:1059F00050914701C701B6010E9417384B015C0165 +:105A0000609136067091370690E080E00E94B637CC +:105A10009B01AC01C501B4010E94DE3960934001D5 +:105A2000709341018093420190934301C092940688 +:105A3000D0929506E0929606F0929706809119040E +:105A4000882309F41FCF66E87AE089E895E00E9490 +:105A500003084AE050E0698D7A8D89E895E00E945C +:105A6000151164E87AE089E895E00E94030822E0D5 +:105A700030E0B701A60189E895E00E94561262E87D +:105A80007AE089E895E00E940308C301B201C4CE20 +:105A900010910F0484E0189F10011124D101A45D1E +:105AA000BE4FBE8FAD8F2091440130914501409192 +:105AB000460150914701C701B6010E9417384B01BA +:105AC0005C01609136067091370690E080E00E949C +:105AD000B6379B01AC01C501B4010E94DE39ED8DE2 +:105AE000FE8D6083718382839383F101E85EFE4FB4 +:105AF0004082518262827382812F0E947712C0920B +:105B0000A006D092A106E092A206F092A3064092CF +:105B1000A4065092A5066092A6067092A7068ECFA4 +:105B200010911004F4E01F9F100111249101245DD5 +:105B30003E4F3E8F2D8F2091440130914501409181 +:105B4000460150914701C701B6010E9417384B0129 +:105B50005C01609136067091370690E080E00E940B +:105B6000B6379B01AC01C501B4010E94DE39AD8D91 +:105B7000BE8D6D937D938D939C931397F101E85E99 +:105B8000FE4F4082518262827382812F0E9477127F +:105B9000C092A806D092A906E092AA06F092AB069F +:105BA0004092AC065092AD066092AE067092AF067F +:105BB00045CF82E394E00E94A21069E274E089E894 +:105BC00095E00E9403088091EC060E9404116EE1AA +:105BD00074E089E895E00E94030880919006813086 +:105BE00021F487E194E00E94A21080919006823017 +:105BF00021F480E194E00E94A2108091900683300D +:105C000021F489E094E00E94A21060E074E089E849 +:105C100095E00E940308609191066251770B4AE07B +:105C200050E089E895E00E9415118BEF93E00E9407 +:105C3000A21062EF73E089E895E00E94030880916A +:105C400092060E94041167EE73E089E895E00E94D5 +:105C50000308809193060E9404118AED93E00E944C +:105C6000A2106EEC73E089E895E00E940308609151 +:105C700098067091990680919A0690919B060E94D1 +:105C800045126FEB73E089E895E00E94030880916C +:105C900040046EEC71E0882311F061ED71E089E859 +:105CA00095E00E948D100E949C1067EB73E089E8DC +:105CB00095E00E94030860919C0670919D0680917A +:105CC0009E0690919F060E9445126FEA73E089E854 +:105CD00095E00E940308609194067091950680916A +:105CE0009606909197060E94451266EA73E089E84D +:105CF00095E00E9403084091A0065091A106609192 +:105D0000A2067091A30622E030E089E895E00E94A7 +:105D100056126DE973E089E895E00E9403086091EE +:105D2000A4067091A5068091A6069091A7060E94F0 +:105D3000451264E973E089E895E00E940308409108 +:105D4000A8065091A9066091AA067091AB0622E0C0 +:105D500030E089E895E00E9456126BE873E089E82C +:105D600095E00E9403086091AC067091AD068091A9 +:105D7000AE069091AF060E94451260E873E089E894 +:105D800095E00E9403086091B0067091B106809181 +:105D9000B2069091B3060E94451265E773E089E868 +:105DA00095E00E9403086091B40670E04AE050E07C +:105DB00089E895E00E9415116AE673E089E895E0AC +:105DC0000E9403086AE070E08091B5069091B606E3 +:105DD0000E944F116FE573E089E895E00E94030887 +:105DE0006091B70670E04AE050E089E895E00E94D3 +:105DF000151164E573E089E895E00E9403086AE004 +:105E000070E08091B8069091B9060E944F1165E448 +:105E100073E089E895E00E9403086091BA0670E09B +:105E20004AE050E089E895E00E94151163E373E0D1 +:105E300089E895E00E9403080E94F70A6AE070E092 +:105E40000E944F1180911904882309F41BCD61E34E +:105E500073E089E895E00E94030864E173E089E853 +:105E600095E00E9403084AE050E060910D0489E843 +:105E700095E00E94FD1065ED71E089E895E00E94D3 +:105E800058124AE050E06091170189E895E00E94BD +:105E9000FD1080910D04882309F467C080E093E031 +:105EA0000E94A210F12CE12C10E000E080910D0482 +:105EB0008017110609F00CF452C06EEF72E089E809 +:105EC00095E00E940308D12CC12CE0910B04F091C5 +:105ED0000C04EE0DFF1DEC0DFD1D8081803130F4B2 +:105EE0006CEF72E089E895E00E940308E0910B04F2 +:105EF000F0910C04EE0DFF1DEC0DFD1D40E150E096 +:105F0000608189E895E00E94FD106AEF72E089E8FF +:105F100095E00E940308BFEFCB1ADB0AE8E0CE163B +:105F2000D10499F6E0910B04F0910C04EE0DFF1DE5 +:105F30008681833031F46FED72E089E895E00E944C +:105F400003080E949C1065E070E080E090E00E94F1 +:105F5000BB070F5F1F4FF8E0EF0EF11CA7CF6DEDF1 +:105F600072E089E895E00E9403080E949C106BEDA6 +:105F700072E089E895E00E94030860EC72E089E82D +:105F800095E00E94030880910A046AEB71E0811198 +:105F900002C069EC71E089E895E00E94581286EB36 +:105FA00092E00E94A21064EB72E089E895E00E9402 +:105FB00003080E949C1065E070E080E090E00E9481 +:105FC000BB0760CC6AEA72E089E895E00E940308AA +:105FD00067EA72E089E895E00E9403084AE050E031 +:105FE0006091EC0689E895E00E94FD1064EA72E099 +:105FF00089E895E00E94030880919006813031F491 +:1060000062EA72E089E895E00E94030880919006B8 +:10601000823031F460EA72E089E895E00E9403087A +:1060200080919006833031F46EE972E089E895E062 +:106030000E9403086BE972E089E895E00E9403087A +:106040004AE050E06091910689E895E00E94FD10D9 +:1060500068E972E089E895E00E9403084AE050E0B0 +:106060006091920689E895E00E94FD1065E972E072 +:1060700089E895E00E9403084AE050E060919306A9 +:1060800089E895E00E94FD1062E972E089E895E0F8 +:106090000E940308409198065091990660919A06D3 +:1060A00070919B0622E030E089E895E00E9456124C +:1060B0006EE872E089E895E00E9403086091400470 +:1060C00070E04AE050E089E895E00E9415116BE825 +:1060D00072E089E895E00E94030840919C06509187 +:1060E0009D0660919E0670919F0622E030E089E84F +:1060F00095E00E94561266E872E089E895E00E94F9 +:10610000030840919406509195066091960670910F +:10611000970622E030E089E895E00E94561260E898 +:1061200072E089E895E00E9403086BE772E089E875 +:1061300095E00E9403084091A0065091A10660914D +:10614000A2067091A30622E030E089E895E00E9463 +:10615000561269E772E089E895E00E9403084091D1 +:10616000A4065091A5066091A6067091A70622E0AC +:1061700030E089E895E00E94561264E772E089E811 +:1061800095E00E9403084091A8065091A9066091ED +:10619000AA067091AB0622E030E089E895E00E9403 +:1061A000561262E772E089E895E00E940308409188 +:1061B000AC065091AD066091AE067091AF0622E03C +:1061C00030E089E895E00E9456126FE672E089E8B7 +:1061D00095E00E9403084091B0065091B10660918D +:1061E000B2067091B30622E030E089E895E00E94A3 +:1061F00056126CE672E089E895E00E94030860910F +:10620000B40670E04AE050E089E895E00E9415117C +:106210006AE672E089E895E00E9403086091B5069D +:106220007091B6064AE050E089E895E00E941511A9 +:1062300068E672E089E895E00E9403086091B7067D +:1062400070E04AE050E089E895E00E94151166E6AA +:1062500072E089E895E00E9403086091B8067091A9 +:10626000B9064AE050E089E895E00E94151163E61E +:1062700072E089E895E00E9403086091BA0670E038 +:106280004AE050E089E895E00E94151161E672E06D +:1062900089E895E00E9403080E94F70A6AE070E02E +:1062A0000E944F11EFCA0E94F2088B010E94F2086F +:1062B0000E94B8376B017C0189E895E00E94E909EA +:1062C000892B29F089E895E00E946308F5CF013019 +:1062D000110569F10230110509F446C001151105D7 +:1062E00069F41092380681E0809339061092B40662 +:1062F00010924E0680934F061092B70680911904B3 +:10630000882309F4BFCA68E77AE089E895E00E942B +:1063100003080130110509F444C00230110509F4E5 +:1063200051C0012B09F0AECA84E79AE0F7CAC70151 +:10633000B6010E94503A4B01072E000CAA08BB0878 +:1063400080923E0690923F06A0924006B09241068F +:1063500021E020933806209339062093B4067093E9 +:10636000B6066093B506CACFC701B6010E94503A7F +:106370004B01072E000CAA08BB088092540690928D +:106380005506A0925606B092570621E02093640667 +:10639000209365062093B7067093B9066093B806FC +:1063A000ADCF6DE67AE089E895E00E94030822E02F +:1063B00030E0B701A60189E895E00E94561289E60F +:1063C0009AE0ACCA62E67AE089E895E00E940308A8 +:1063D00022E030E0B701A60189E895E00E9456125C +:1063E0008EE59AE09BCA0E94F208662399F0603419 +:1063F00008F06FE36093930680911904882309F4F1 +:106400003ECA67E57AE089E895E00E94030880913A +:106410009306BECA61E0EECF0E94F2086F716093EE +:10642000910680911904882309F429CA62E57AE06B +:1064300089E895E00E940308609191066F716251AE +:10644000770B4AE050E089E895E00E9415118DE451 +:106450009AE013CA80911904882331F063E572E051 +:1064600089E895E00E94030880E190E00E94AF1A5D +:10647000882389F0CE0101960E941C1A89819A8195 +:1064800097FD09C09195819591099A838983CE01E1 +:1064900001960E94FF1A80911904882321F08BE253 +:1064A00092E00E94A2100C940000ECC980E190E000 +:1064B0000E94AF1A811128C01A8219826FE4CE019E +:1064C00001960E94EC1A81E090E09A83898365E44A +:1064D000CE0101960E94EC1A82E090E09A838983B3 +:1064E0006DE4CE0101960E94EC1A03E010E01A83DD +:1064F00009836FEFCE0101960E94EC1A0F5F1F4FC8 +:10650000011524E0120799F781E690E09A838983C8 +:1065100080E190E09C838B83CE0101960E94FF1A5C +:1065200070E9E72E76E0F72E07E010E0D7016D91D5 +:106530007D011E870D87CE010D960E94EC1A0F5F1C +:106540001F4F0436110591F780911904882309F42F +:1065500099C990E080E00E94AF1A81112CC066E1D9 +:1065600072E089E895E00E9403086FE072E089E834 +:1065700095E00E9403082AE040E054E060E070E00B +:1065800089E895E00E94B11089EE91E00E94A21086 +:1065900060E074E090E080E00E94451A67EE71E0F0 +:1065A00089E895E00E94030865EE71E089E895E0CE +:1065B0000E94030812C0CE0101960E941C1A8B8112 +:1065C0009C81019669F463EE71E089E895E00E9490 +:1065D000030882E991E00E94A21088E192E09EC93E +:1065E00060E971E089E895E00E94030863E871E0E2 +:1065F00089E895E00E9403084B815C8170E060E0CF +:106600002AE089E895E00E94B11009811A8117FFFC +:1066100003C01195019511090450110965E771E056 +:1066200089E895E00E9403084AE050E0B80189E853 +:1066300095E00E9415116EE671E089E895E00E94F0 +:10664000030889819A8197FF06C063E671E089E8B3 +:1066500095E00E9403080E949C10B80187E090E03A +:106660000E94451A61E671E089E895E00E940308FE +:106670006FE571E09BCF0E94F2086B01CB01892B83 +:1066800001F50E94F208623070F0623099F089E8FA +:1066900095E00E94E909892B09F4F4C889E895E09E +:1066A0000E946308F4CF862F81708093BA060E94FF +:1066B0002A0FEDCFE0910B04F0910C04108281E0E1 +:1066C000F4CF6730710508F0DDC8CE010D960E9449 +:1066D000770810E000E0CE010D960E947708892B24 +:1066E00049F1083038F58D85803221F08D3011F078 +:1066F0008A3051F4E1E0F0E0EC0FFD1FE00FF11DF6 +:1067000010830F5F10E0E7CF1295107F90ED980F88 +:106710009A3030F09FEB980F963020F499EC980F58 +:10672000190FD9CF9FE9980F963010F499EAF7CF57 +:1067300090E0F6CFDE01119663E0CC0CDD1C6A958B +:10674000E1F790E080E02D91FC01EC0DFD1DE0579C +:10675000F94F23A3019688309105A9F798CF89E8CE +:1067600095E00E94630852EAE52E54E0F52E109160 +:10677000E404123408F086C889E895E00E946308B2 +:1067800090EE980F9F3548F4F70180831F5F1093B8 +:10679000E40497012F5F3F4F79018A3041F772C8B7 +:1067A00060E47AE089E895E00E9403080E945A12AA +:1067B00069C80E94F20821E0672B682B692B09F455 +:1067C00020E02093190461E37AE089E895E00E94D3 +:1067D000030880911904882319F08EE29AE09EC87C +:1067E0008AE29AE09BC80E94F2086093EC068091CE +:1067F0001904882309F446C862E27AE089E895E042 +:106800000E9403088091EC060E9404113BC800918D +:106810008006109181068091820690918306081768 +:10682000190794F41A8309836FEFCE0101960E9431 +:10683000EC1A10927D0610927C0680917A06909157 +:106840007B06080F191FE7CF10922404109225042D +:106850001092260410922704109228041092290402 +:1068600010922A0410922B041092420610924306B2 +:10687000109244061092450610925806109259063E +:1068800010925A0610925B060C94422C8CE394E012 +:106890000E94700E0E949C100C94422C0E948A0E42 +:1068A0008091A1048823A1F08091900643E953E0F0 +:1068B000833031F044E653E0823011F042EB51E096 +:1068C00060919206809193060E94C50D1092A104DA +:1068D0000E943013882309F4F2C261E089E00E942B +:1068E000EC066EE170E080E090E00E94BB0760E0A3 +:1068F00089E00E94EC0620911A0430911B04309329 +:106900007E0420937D0480911C0490911D0490933B +:10691000800480937F04820F931F9093820480935E +:1069200081048091240490912504A0912604B091C3 +:1069300027048093990490939A04A0939B04B093A6 +:106940009C048091280490912904A0912A04B0917C +:106950002B0480939D0490939E04A0939F04B09376 +:10696000A00420E030E048EC52E4609138047091DB +:10697000390480913A0490913B040E9417380E9498 +:10698000503A70938404609383040E94F70A892B21 +:1069900061F0E1E7F4E0A5E8B4E0819191918D9395 +:1069A0009D9334E0ED37F307C1F780914206909153 +:1069B0004306A0914406B0914506809391049093BC +:1069C0009204A0939304B0939404809158069091FC +:1069D0005906A0915A06B0915B0680939504909356 +:1069E0009604A0939704B093980462EE7AE089E845 +:1069F00095E00E9403084AE050E06091930689E820 +:106A000095E00E94FD100DE714E041EAE42E44E019 +:106A1000F42E60EE7AE089E895E00E940308D80140 +:106A20006D918D014AE050E089E895E00E94FD10EB +:106A3000E016F10671F76AED7AE089E895E00E94C8 +:106A400003080E949C106AE070E080E090E00E94E1 +:106A5000BB078091EB06882309F405C16FE07BE05A +:106A600089E895E00E940308409138045091390468 +:106A700060913A0470913B0422E030E089E895E0AF +:106A80000E94561269E07BE089E895E00E940308C5 +:106A900040915504509156046091570470915804E8 +:106AA00022E030E089E895E00E94561262E07BE047 +:106AB00089E895E00E940308409141045091420406 +:106AC000609143047091440424E030E089E895E04B +:106AD0000E9456126CEF7AE089E895E00E94030864 +:106AE0004091590450915A0460915B0470915C0488 +:106AF00022E030E089E895E00E94561265EF7AE0E6 +:106B000089E895E00E9403084091450450914604AD +:106B1000609147047091480424E030E089E895E0F2 +:106B20000E94561260EF7AE089E895E00E9403081F +:106B30008091400440E050E0BA01882341F0409148 +:106B40003C0450913D0460913E0470913F0422E06A +:106B500030E089E895E00E9456120E949C10409017 +:106B60004504509046046090470470904804498E54 +:106B70005A8E6B8E7C8E8090410490904204A0903F +:106B80004304B0904404C0905904D0905A04E0905B +:106B90005B04F0905C044090550450905604609063 +:106BA00057047090580480916F041C821B8220EB64 +:106BB00031E03A8329838D8380E18A8782E08B8765 +:106BC0001C86CE0101960E947E1088E08C8760E0D2 +:106BD000CE0101960E94820D60E0CE0101960E94D6 +:106BE0004F106DEE7AE0CE0101960E94030822E07C +:106BF00030E0B301A201CE0101960E9456126BEE65 +:106C00007AE0CE0101960E94030824E030E0B5014D +:106C1000A401CE0101960E94561261E0CE010196B8 +:106C20000E944F1068EE7AE0CE0101960E940308A0 +:106C300022E030E0B701A601CE0101960E94561273 +:106C400066EE7AE0CE0101960E94030824E030E06F +:106C5000498D5A8D6B8D7C8DCE0101960E94561206 +:106C600081E080936E0462E370E080E090E00E9437 +:106C7000BB074091950450919604609197047091E0 +:106C80009804009191041091920420919304309102 +:106C90009404C0909D04D0909E04E0909F04F090D6 +:106CA000A0048090990490909A04A0909B04B090C6 +:106CB0009C048091640690916506A0916606B0914F +:106CC000670624013501481A590A6A0A7B0AD3016A +:106CD000C201B7FF07C0B095A095909581959F4FD1 +:106CE000AF4FBF4F883C9105A105B1050CF05BC0CB +:106CF0008091680690916906A0916A06B0916B0632 +:106D000026013701481A590A6A0A7B0AD301C201CF +:106D1000B7FF07C0B095A095909581959F4FAF4F55 +:106D2000BF4F883C9105A105B105ECF580916C063B +:106D300090916D06A0916E06B0916F062801390101 +:106D4000481A590A6A0A7B0AD301C201B7FF07C071 +:106D5000B095A095909581959F4FAF4FBF4F883CC0 +:106D60009105A105B105FCF4809170069091710622 +:106D7000A0917206B09173062A013B01481A590A84 +:106D80006A0A7B0AD301C201B7FF07C0B095A0957C +:106D9000909581959F4FAF4FBF4F883C9105A105BE +:106DA000B1050CF48CC08092640690926506A092A6 +:106DB0006606B0926706C0926806D0926906E092B5 +:106DC0006A06F0926B0600936C0610936D06209392 +:106DD0006E0630936F064093700650937106609371 +:106DE00072067093730680917C0690917D060097E1 +:106DF00029F19A838983CE0101960E94171A90E0A7 +:106E000090937F0680937E066FEFCE0101960E94DD +:106E1000EC1A80917C0690917D0620917A06309143 +:106E20007B06820F931F90937D0680937C062091B2 +:106E30008206309183068217930744F08091800682 +:106E40009091810690937D0680937C0680917E06CA +:106E500090917F06880F991F992781608F3F910538 +:106E600009F47CC090937F0680937E0660917E0635 +:106E700080917C0690917D069A838983CE0101964C +:106E80000E94EC1A80917C0690917D0628E7C22E24 +:106E900026E0D22E04E616E09C0123563640790106 +:106EA000C701800F911F9A838983D8016D918D014D +:106EB000CE0101960E94EC1AC016D10689F7809186 +:106EC0006E04882379F00E94ED0760936A04709342 +:106ED0006B0480936C0490936D0481E0809369044B +:106EE00010926E0480916904882341F10E94ED079D +:106EF00000916A0410916B0420916C0430916D0430 +:106F0000601B710B820B930B61367A4E81059105E4 +:106F1000A8F080916F041C821B8220EB31E03A8341 +:106F200029838D8380E18A8782E08B871C8660E0DD +:106F3000CE0101960E94820D1092690480E090E0DB +:106F4000892B11F40C94F0290E94F509882311F47F +:106F50000C94F0290E9400000C94F0298EEF90E030 +:106F600081CF0E94F33708F481E00895E89409C0C6 +:106F700097FB3EF490958095709561957F4F8F4F6C +:106F80009F4F9923A9F0F92F96E9BB279395F69582 +:106F9000879577956795B795F111F8CFFAF4BB0F00 +:106FA00011F460FF1BC06F5F7F4F8F4F9F4F16C064 +:106FB000882311F096E911C0772321F09EE8872FEE +:106FC000762F05C0662371F096E8862F70E060E0AA +:106FD0002AF09A95660F771F881FDAF7880F969523 +:106FE000879597F90895990F0008550FAA0BE0E8C7 +:106FF000FEEF16161706E807F907C0F0121613067B +:10700000E407F50798F0621B730B840B950B39F4BA +:107010000A2661F0232B242B252B21F408950A2620 +:1070200009F4A140A6958FEF811D811D08950E944E +:107030002A380C949B380E948D3838F00E9494387E +:1070400020F0952311F00C9484380C948A38112484 +:107050000C94CF380E94AC3870F3959FC1F3950F14 +:1070600050E0551F629FF001729FBB27F00DB11DCC +:10707000639FAA27F00DB11DAA1F649F6627B00D5C +:10708000A11D661F829F2227B00DA11D621F739F45 +:10709000B00DA11D621F839FA00D611D221F749F53 +:1070A0003327A00D611D231F849F600D211D822F9A +:1070B000762F6A2F11249F5750409AF0F1F08823C1 +:1070C0004AF0EE0FFF1FBB1F661F771F881F9150EE +:1070D0005040A9F79E3F510580F00C9484380C94E1 +:1070E000CF385F3FE4F3983ED4F386957795679564 +:1070F000B795F795E7959F5FC1F7FE2B880F911D18 +:107100009695879597F9089597F99F6780E870E0BD +:1071100060E008959FEF80EC089500240A9416160D +:10712000170618060906089500240A941216130675 +:10713000140605060895092E0394000C11F4882303 +:1071400052F0BB0F40F4BF2B11F460FF04C06F5F1F +:107150007F4F8F4F9F4F089557FD9058440F551FF5 +:1071600059F05F3F71F04795880F97FB991F61F0C9 +:107170009F3F79F087950895121613061406551F40 +:10718000F2CF4695F1DF08C0161617061806991FAC +:10719000F1CF86957105610508940895E894BB27A1 +:1071A00066277727CB0197F90895F999FECF92BD0D +:1071B00081BDF89A992780B50895262FF999FECFB9 +:1071C0001FBA92BD81BD20BD0FB6F894FA9AF99A04 +:1071D0000FBE019608950E94F638A59F900DB49FAA +:1071E000900DA49F800D911D11240895A29FB001C0 +:1071F000B39FC001A39F700D811D1124911DB29FEB +:10720000700D811D1124911D0895A1E21A2EAA1B53 +:10721000BB1BFD010DC0AA1FBB1FEE1FFF1FA21746 +:10722000B307E407F50720F0A21BB30BE40BF50B43 +:10723000661F771F881F991F1A9469F760957095CC +:10724000809590959B01AC01BD01CF010895052E5D +:1072500097FB1EF400940E943E3957FD07D00E9410 +:10726000053907FC03D04EF40C943E3950954095F7 +:10727000309521953F4F4F4F5F4F089590958095E2 +:10728000709561957F4F8F4F9F4F0895EE0FFF1FB1 +:107290000590F491E02D09940E94F638332312F4FE +:1072A0008A1B9B0B0C9456390E94F638B7FF089541 +:1072B000821B930B0895B7FF0C94EB380E94EB38B8 +:1072C000821B930B08952A0D3B1D4C1D5D1D6E1DE9 +:1072D0007F1D801F911F08955058BB27AA270E9429 +:1072E00084390C949B380E948D3838F00E94943871 +:1072F00020F039F49F3F19F426F40C948A380EF4E8 +:10730000E095E7FB0C948438E92F0E94AC3858F3E1 +:10731000BA17620773078407950720F079F4A6F57A +:107320000C94CE380EF4E0950B2EBA2FA02D0B0145 +:10733000B90190010C01CA01A0011124FF27591BBA +:1073400099F0593F50F4503E68F11A16F040A22FC0 +:10735000232F342F4427585FF3CF46953795279531 +:10736000A795F0405395C9F77EF41F16BA0B620B30 +:10737000730B840BBAF09150A1F0FF0FBB1F661F77 +:10738000771F881FC2F70EC0BA0F621F731F841FBA +:1073900048F4879577956795B795F7959E3F08F0E0 +:1073A000B0CF9395880F08F09927EE0F97958795A2 +:1073B00008950E94DC3AE3950C94053B0E94F23953 +:1073C0000C949B380E94943858F00E948D3840F0FD +:1073D00029F45F3F29F00C94843851110C94CF3874 +:1073E0000C948A380E94AC3868F39923B1F3552382 +:1073F00091F3951B550BBB27AA27621773078407C8 +:1074000038F09F5F5F4F220F331F441FAA1FA9F35D +:1074100035D00E2E3AF0E0E832D091505040E6954B +:10742000001CCAF72BD0FE2F29D0660F771F881FAC +:10743000BB1F261737074807AB07B0E809F0BB0B9F +:10744000802DBF01FF2793585F4F3AF09E3F5105B3 +:1074500078F00C9484380C94CF385F3FE4F3983E76 +:10746000D4F3869577956795B795F7959F5FC9F79C +:10747000880F911D9695879597F90895E1E0660F1D +:10748000771F881FBB1F621773078407BA0720F096 +:10749000621B730B840BBA0BEE1F88F7E0950895FF +:1074A0000E94573A6894B1110C94CF3808950E9405 +:1074B000B43888F09F5798F0B92F9927B751B0F09A +:1074C000E1F0660F771F881F991F1AF0BA95C9F768 +:1074D00014C0B13091F00E94CE38B1E008950C9400 +:1074E000CE38672F782F8827B85F39F0B93FCCF3B3 +:1074F000869577956795B395D9F73EF490958095E5 +:10750000709561957F4F8F4F9F4F089597FB16F4AD +:107510000E94CA3A0C948D3AE894F92F96EBFF2317 +:1075200081F0121613061406440B9395F695879571 +:107530007795679557954040FF23B9F71BC099276A +:107540000895882351F49850D2F7872B762F652F12 +:10755000542F432F322F20E0B1F3121613061406D6 +:10756000440B88233AF09A95440F551F661F771FE6 +:10757000881FCAF755234AF4440F551F11F460FFC2 +:1075800004C06F5F7F4F8F4F9F4F880F96958795F1 +:1075900097F90895909580957095609550954095D0 +:1075A000309521953F4F4F4F5F4F6F4F7F4F8F4F1C +:1075B0009F4F08950C948A380E94B438D8F3E89409 +:1075C000E0E0BB279F57F0F02AED3FE049EC06C012 +:1075D000EE0FBB0F661F771F881F28F0B23A6207B5 +:1075E0007307840728F0B25A620B730B840BE39580 +:1075F0009A9572F7803830F49A95BB0F661F771F03 +:10760000881FD2F790480C94733BEF93E0FF07C0BC +:10761000A2EA2AED3FE049EC5FEB0E9484390E9428 +:107620009B380F90039401FC9058E8E6F0E00C942E +:10763000863B0E94F33708F48FEF08959F930E94D2 +:10764000DC3A0F9007FCEE5F0C94053B19F416F43E +:107650000C948A380C94713B0E94B438B8F3992387 +:10766000C9F3B6F39F57550B87FF0E947F3B002459 +:10767000A0E640EA900180585695979528F4805CE2 +:10768000660F771F881F20F026173707480730F44A +:10769000621B730B840B202931294A2BA695179462 +:1076A0000794202531254A2758F7660F771F881F32 +:1076B00020F026173707480730F4620B730B840B52 +:1076C000200D311D411DA09581F7B901842F9158DE +:1076D000880F9695879508950E94F337880B990B2C +:1076E00008959F3F31F0915020F4879577956795E5 +:1076F000B795880F911D9695879597F908959150A4 +:107700005040660F771F881FD2F708959F938F937D +:107710007F936F93FF93EF939B01AC010E94173807 +:10772000EF91FF910E949A3B2F913F914F915F9172 +:107730000C941738DF93CF931F930F93FF92EF9220 +:10774000DF927B018C01689406C0DA2EEF010E9463 +:107750002A38FE01E894A5912591359145915591DE +:10776000A6F3EF010E948439FE019701A801DA9483 +:1077700069F7DF90EF90FF900F911F91CF91DF910C +:067780000895F894FFCF0C +:10778600000102030405FF5F0A00010000204132E8 +:1077960000040027003F0001666686406666864054 +:1077A600666686400000803F66668640ECD1B5423C +:1077B600ECD1B542ECD1B542295C8541ECD1B5425C +:1077C600297C864333335340000070430000810018 +:1077D600FB07FB07050000400014005400020003ED +:1077E60002048A050206E10B201199194A1A421E63 +:1077F6000C260729A02D052E882F2D37D038423C80 +:107806008F3D126F20710200000000002B0A27082E +:107816005408780AE9096308B20800000000530D0D +:10782600260D950DFC0C1F0D0C0DFD0C0000000027 +:1078360087102708950DAE0B0D0A006E616E006964 +:107846006E66006F7666002E00204E4F54004E6F17 +:0A7856000059657300206F662000E2 +:00000001FF diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..e9de96b --- /dev/null +++ b/platformio.ini @@ -0,0 +1,11 @@ +[platformio] +default_envs = default +src_dir = . +lib_dir = ../libraries + +[env:default] +platform = atmelavr +framework = arduino +board = uno +monitor_speed = 115200 +