Update files

master
wagiminator 2021-03-27 19:12:22 +01:00
parent ede1adb598
commit 8986dfce3c
11 changed files with 677 additions and 867 deletions

View File

@ -0,0 +1,459 @@
// USB Power Tester - Basic
//
// This code implements the basic functionality for the USB Power Tester.
// It reads voltage, current and power from the INA219, calculates
// capacity and shows the values on the OLED. The SET button is used to
// switch between different screens.
//
// +-\/-+
// RESET --- A0 (D5) PB5 1| |8 Vcc
// SET ----- A3 (D3) PB3 2| |7 PB2 (D2) A1 ---- OLED/INA (SCK)
// A2 (D4) PB4 3| |6 PB1 (D1)
// GND 4| |5 PB0 (D0) ------- OLED/INA (SDA)
// +----+
//
// Core: ATtinyCore (https://github.com/SpenceKonde/ATTinyCore)
// Board: ATtiny25/45/85 (No bootloader)
// Chip: ATtiny45 or 85 (depending on your chip)
// Clock: 8 MHz (internal)
// Millis: disabled
// B.O.D.: 2.7V
// Leave the rest on default settings. Don't forget to "Burn bootloader" !
//
// The I²C OLED implementation is based on TinyOLEDdemo
// https://github.com/wagiminator/ATtiny13-TinyOLEDdemo
//
// 2020 by Stefan Wagner
// Project Files (EasyEDA): https://easyeda.com/wagiminator
// Project Files (Github): https://github.com/wagiminator
// License: http://creativecommons.org/licenses/by-sa/3.0/
// Libraries
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Pin definitions
#define I2C_SDA PB0 // I2C serial data pin
#define I2C_SCL PB2 // I2C serial clock pin
#define SETBUTTON PB3 // SET button
// -----------------------------------------------------------------------------
// I2C Implementation
// -----------------------------------------------------------------------------
// I2C macros
#define I2C_SDA_HIGH() DDRB &= ~(1<<I2C_SDA) // release SDA -> pulled HIGH by resistor
#define I2C_SDA_LOW() DDRB |= (1<<I2C_SDA) // SDA as output -> pulled LOW by MCU
#define I2C_SCL_HIGH() DDRB &= ~(1<<I2C_SCL) // release SCL -> pulled HIGH by resistor
#define I2C_SCL_LOW() DDRB |= (1<<I2C_SCL) // SCL as output -> pulled LOW by MCU
#define I2C_SDA_READ() (PINB & (1<<I2C_SDA)) // read SDA line
#define I2C_DELAY() asm("lpm") // delay 3 clock cycles
#define I2C_CLOCKOUT() I2C_SCL_HIGH();I2C_DELAY();I2C_SCL_LOW() // clock out
// I2C init function
void I2C_init(void) {
DDRB &= ~((1<<I2C_SDA)|(1<<I2C_SCL)); // pins as input (HIGH-Z) -> lines released
PORTB &= ~((1<<I2C_SDA)|(1<<I2C_SCL)); // should be LOW when as ouput
}
// I2C transmit one data byte to the slave, ignore ACK bit, no clock stretching allowed
void I2C_write(uint8_t data) {
for(uint8_t i=8; i; i--, data<<=1) { // transmit 8 bits, MSB first
(data & 0x80) ? (I2C_SDA_HIGH()) : (I2C_SDA_LOW()); // SDA HIGH if bit is 1
I2C_CLOCKOUT(); // clock out -> slave reads the bit
}
I2C_DELAY(); // delay 3 clock cycles
I2C_SDA_HIGH(); // release SDA for ACK bit of slave
I2C_CLOCKOUT(); // 9th clock pulse is for the ignored ACK bit
}
// I2C start transmission
void I2C_start(uint8_t addr) {
I2C_SDA_LOW(); // start condition: SDA goes LOW first
I2C_SCL_LOW(); // start condition: SCL goes LOW second
I2C_write(addr); // send slave address
}
// I2C restart transmission
void I2C_restart(uint8_t addr) {
I2C_SDA_HIGH(); // prepare SDA for HIGH to LOW transition
I2C_SCL_HIGH(); // restart condition: clock HIGH
I2C_start(addr); // start again
}
// I2C stop transmission
void I2C_stop(void) {
I2C_SDA_LOW(); // prepare SDA for LOW to HIGH transition
I2C_SCL_HIGH(); // stop condition: SCL goes HIGH first
I2C_SDA_HIGH(); // stop condition: SDA goes HIGH second
}
// I2C receive one data byte from the slave (ack=0 for last byte, ack>0 if more bytes to follow)
uint8_t I2C_read(uint8_t ack) {
uint8_t data = 0; // variable for the received byte
I2C_SDA_HIGH(); // release SDA -> will be toggled by slave
for(uint8_t i=8; i; i--) { // receive 8 bits
data<<=1; // bits shifted in right (MSB first)
I2C_DELAY(); // delay 3 clock cycles
I2C_SCL_HIGH(); // clock HIGH
if(I2C_SDA_READ()) data |=1; // read bit
I2C_SCL_LOW(); // clock LOW -> slave prepares next bit
}
if (ack) I2C_SDA_LOW(); // pull SDA LOW to acknowledge (ACK)
I2C_DELAY(); // delay 3 clock cycles
I2C_CLOCKOUT(); // clock out -> slave reads ACK bit
return(data); // return the received byte
}
// -----------------------------------------------------------------------------
// OLED Implementation
// -----------------------------------------------------------------------------
// OLED definitions
#define OLED_ADDR 0x78 // OLED write address
#define OLED_CMD_MODE 0x00 // set command mode
#define OLED_DAT_MODE 0x40 // set data mode
#define OLED_INIT_LEN 11 // 9: no screen flip, 11: screen flip
// OLED init settings
const uint8_t OLED_INIT_CMD[] PROGMEM = {
0xA8, 0x1F, // set multiplex for 128x32
0x20, 0x01, // set vertical memory addressing mode
0xDA, 0x02, // set COM pins hardware configuration to sequential
0x8D, 0x14, // enable charge pump
0xAF, // switch on OLED
0xA1, 0xC8 // flip the screen
};
// OLED 6x16 font
const uint8_t OLED_FONT[] PROGMEM = {
0x7C, 0x1F, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x7C, 0x1F, // 0 0
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x1F, // 1 1
0x00, 0x1F, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x7C, 0x00, // 2 2
0x00, 0x00, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x7C, 0x1F, // 3 3
0x7C, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x7C, 0x1F, // 4 4
0x7C, 0x00, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x00, 0x1F, // 5 5
0x7C, 0x1F, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x00, 0x1F, // 6 6
0x7C, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x7C, 0x1F, // 7 7
0x7C, 0x1F, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x7C, 0x1F, // 8 8
0x7C, 0x00, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x82, 0x20, 0x7C, 0x1F, // 9 9
0x00, 0x00, 0xF0, 0x3F, 0x8C, 0x00, 0x82, 0x00, 0x8C, 0x00, 0xF0, 0x3F, // 10 A
0x00, 0x00, 0xFE, 0x07, 0x00, 0x18, 0x00, 0x20, 0x00, 0x18, 0xFE, 0x07, // 11 V
0x00, 0x00, 0xFE, 0x1F, 0x00, 0x20, 0x00, 0x1F, 0x00, 0x20, 0xFE, 0x1F, // 12 W
0x00, 0x00, 0xFE, 0x3F, 0x00, 0x01, 0x80, 0x00, 0x80, 0x00, 0x00, 0x3F, // 13 h
0x00, 0x00, 0x80, 0x3F, 0x80, 0x00, 0x80, 0x3F, 0x80, 0x00, 0x00, 0x3F, // 14 m
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, // 15 .
0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x30, 0x06, 0x00, 0x00, 0x00, 0x00, // 16 :
0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, // 17 -
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 18 SPACE
};
// Character definitions
#define DECIMAL 15
#define COLON 16
#define SPACE 18
// For BCD conversion
const uint16_t divider[5] = {10000, 1000, 100, 10, 1};
// OLED init function
void OLED_init(void) {
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_CMD_MODE); // set command mode
for (uint8_t i=0; i<OLED_INIT_LEN; i++)
I2C_write(pgm_read_byte(&OLED_INIT_CMD[i])); // send the command bytes
I2C_stop(); // stop transmission
}
// OLED set the cursor
void OLED_setCursor(uint8_t xpos, uint8_t ypos) {
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_CMD_MODE); // set command mode
I2C_write(0x22); // command for min/max page
I2C_write(ypos); I2C_write(ypos+1); // min: ypos; max: ypos+1
I2C_write(xpos & 0x0F); // set low nibble of start column
I2C_write(0x10 | (xpos >> 4)); // set high nibble of start column
I2C_write(0xB0 | (ypos)); // set start page
I2C_stop(); // stop transmission
}
// OLED clear screen
void OLED_clearScreen(void) {
OLED_setCursor(0, 0); // set cursor at upper half
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_DAT_MODE); // set data mode
uint8_t i = 0; // count variable
do {I2C_write(0x00);} while (--i); // clear upper half
I2C_stop(); // stop transmission
OLED_setCursor(0, 2); // set cursor at lower half
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_DAT_MODE); // set data mode
do {I2C_write(0x00);} while (--i); // clear upper half
I2C_stop(); // stop transmission
}
// OLED plot a character
void OLED_plotChar(uint8_t ch) {
ch = (ch << 3) + (ch << 2); // calculate position of character in font array
I2C_write(0x00); I2C_write(0x00); // print spacing between characters
for(uint8_t i=12; i; i--) I2C_write(pgm_read_byte(&OLED_FONT[ch++])); // print character
I2C_write(0x00); I2C_write(0x00); // print spacing between characters
}
// OLED print a character
void OLED_printChar(uint8_t ch) {
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_DAT_MODE); // set data mode
OLED_plotChar(ch); // plot the character
I2C_stop(); // stop transmission
}
// OLED print a string from program memory; terminator: 255
void OLED_printPrg(const uint8_t* p) {
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_DAT_MODE); // set data mode
uint8_t ch = pgm_read_byte(p); // read first character from program memory
while (ch < 255) { // repeat until string terminator
OLED_plotChar(ch); // plot character on OLED
ch = pgm_read_byte(++p); // read next character
}
I2C_stop(); // stop transmission
}
// OLED print 16-bit value as 5-digit decimal (BCD conversion by substraction method)
void OLED_printDec16(uint16_t value) {
uint8_t leadflag = 0; // flag for leading spaces
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_DAT_MODE); // set data mode
for(uint8_t digit = 0; digit < 5; digit++) { // 5 digits
uint8_t digitval = 0; // start with digit value 0
while (value >= divider[digit]) { // if current divider fits into the value
leadflag = 1; // end of leading spaces
digitval++; // increase digit value
value -= divider[digit]; // decrease value by divider
}
if (leadflag || (digit == 4)) OLED_plotChar(digitval); // print the digit
else OLED_plotChar(SPACE); // or print leading space
}
I2C_stop(); // stop transmission
}
// OLED print 16-bit value as 3-digit decimal (BCD conversion by substraction method)
void OLED_printDec12(uint16_t value) {
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_DAT_MODE); // set data mode
for(uint8_t digit = 2; digit < 5; digit++) { // 3 digits
uint8_t digitval = 0; // start with digit value 0
while (value >= divider[digit]) { // if current divider fits into the value
digitval++; // increase digit value
value -= divider[digit]; // decrease value by divider
}
OLED_plotChar(digitval); // print the digit
}
I2C_stop(); // stop transmission
}
// OLED print 8-bit value as 2-digit decimal (BCD conversion by substraction method)
void OLED_printDec8(uint8_t value) {
I2C_start(OLED_ADDR); // start transmission to OLED
I2C_write(OLED_DAT_MODE); // set data mode
uint8_t digitval = 0; // start with digit value 0
while (value >= 10) { // if current divider fits into the value
digitval++; // increase digit value
value -= 10; // decrease value by divider
}
OLED_plotChar(digitval); // print first digit
OLED_plotChar(value); // print second digit
I2C_stop(); // stop transmission
}
// -----------------------------------------------------------------------------
// INA219 Implementation
// -----------------------------------------------------------------------------
// INA219 register values
#define INA_ADDR 0x80 // I2C write address of INA219
#define INA_CONFIG 0b0000011001100111 // INA config register according to datasheet
#define INA_CALIB 5120 // INA calibration register according to R_SHUNT
#define INA_REG_CONFIG 0x00 // INA configuration register address
#define INA_REG_CALIB 0x05 // INA calibration register address
#define INA_REG_SHUNT 0x01 // INA shunt voltage register address
#define INA_REG_VOLTAGE 0x02 // INA bus voltage register address
#define INA_REG_POWER 0x03 // INA power register address
#define INA_REG_CURRENT 0x04 // INA current register address
// INA219 write a register value
void INA_write(uint8_t reg, uint16_t value) {
I2C_start(INA_ADDR); // start transmission to INA219
I2C_write(reg); // write register address
I2C_write(value >> 8); // write register content high byte
I2C_write(value); // write register content low byte
I2C_stop(); // stop transmission
}
// INA219 read a register
uint16_t INA_read(uint8_t reg) {
uint16_t result; // result variable
I2C_start(INA_ADDR); // start transmission to INA219
I2C_write(reg); // write register address
I2C_restart(INA_ADDR | 0x01); // restart for reading
result = (uint16_t)(I2C_read(1) << 8) | I2C_read(0); // read register content
I2C_stop(); // stop transmission
return(result); // return result
}
// INA219 write inital configuration and calibration values
void INA_init(void) {
INA_write(INA_REG_CONFIG, INA_CONFIG); // write INA219 configuration
INA_write(INA_REG_CALIB, INA_CALIB); // write INA219 calibration
}
// INA219 read voltage
uint16_t INA_readVoltage(void) {
return((INA_read(INA_REG_VOLTAGE) >> 1) & 0xFFFC);
}
// INA219 read sensor values
uint16_t INA_readCurrent(void) {
uint16_t result = INA_read(INA_REG_CURRENT);
if (result > 32767) result = 0;
return(result);
}
// -----------------------------------------------------------------------------
// Millis Counter Implementation for Timer0
// -----------------------------------------------------------------------------
volatile uint32_t MIL_counter = 0; // millis counter variable
// Init millis counter
void MIL_init(void) {
OCR0A = 124; // TOP: 124 = 8000kHz / (64 * 1kHz) - 1
TCCR0A = (1<<WGM01); // timer0 CTC mode
TCCR0B = (1<<CS01)|(1<<CS00); // start timer0 with prescaler 64
TIMSK = (1<<OCIE0A); // enable output compare match interrupt
sei(); // enable global interrupts
}
// Read millis counter
uint32_t MIL_read(void) {
cli(); // disable interrupt for atomic read
uint32_t result = MIL_counter; // read millis counter
sei(); // enable interrupts
return(result); // return millis counter value
}
// Timer0 compare match A interrupt service routine (every millisecond)
ISR(TIM0_COMPA_vect) {
MIL_counter++; // increase millis counter
}
// -----------------------------------------------------------------------------
// Main Function
// -----------------------------------------------------------------------------
// Some "strings"
const uint8_t mA[] PROGMEM = { 14, 10, 18, 255 }; // "mA "
const uint8_t mV[] PROGMEM = { 14, 11, 18, 255 }; // "mV "
const uint8_t mW[] PROGMEM = { 14, 12, 18, 255 }; // "mW "
const uint8_t mAh[] PROGMEM = { 14, 10, 13, 255 }; // "mAh"
const uint8_t mWh[] PROGMEM = { 14, 12, 13, 255 }; // "mWh"
const uint8_t SEP[] PROGMEM = { 18, 17, 18, 255 }; // " - "
int main(void) {
// Local variables
uint16_t voltage, current, power; // voltage in mV, current in mA, power in mW
uint16_t minvoltage = 65535, maxvoltage = 0; // min/max voltages in mV
uint16_t mincurrent = 65535, maxcurrent = 0; // min/max current in mA
uint16_t minpower = 65535, maxpower = 0; // min/max power in mV
uint32_t lastmillis, nowmillis, interval; // for timing calculation in millis
uint32_t duration = 0; // total duration in millis
uint16_t seconds; // total duration in seconds
uint32_t capacity = 0, energy = 0; // counter for capacity in uAh and energy in uWh
uint8_t primescreen = 0; // screen selection flag
uint8_t lastbutton = 1; // button flag (0: button pressed)
// Setup
PORTB = (1<<SETBUTTON); // pullup for set button
MIL_init(); // init millis counter
I2C_init(); // init I2C
INA_init(); // init INA219
OLED_init(); // init OLED
OLED_clearScreen(); // clear screen
lastmillis = MIL_read(); // read millis counter
// Loop
while(1) {
// Read sensor values
voltage = INA_readVoltage(); // read voltage from INA219
current = INA_readCurrent(); // read current from INA219
power = (uint32_t)voltage * current / 1000; // calculate power in mW
// Calculate timings
nowmillis = MIL_read(); // read millis counter
interval = nowmillis - lastmillis; // calculate time interval
lastmillis = nowmillis; // reset lastmillis
duration += interval; // calculate total duration in millis
seconds = duration / 1000; // calculate total duration in seconds
// Calculate capacity in uAh and energy in uWh
capacity += interval * current / 3600; // calculate uAh
energy += interval * power / 3600; // calculate uWh
// Update min/max values
if (minvoltage > voltage) minvoltage = voltage;
if (maxvoltage < voltage) maxvoltage = voltage;
if (mincurrent > current) mincurrent = current;
if (maxcurrent < current) maxcurrent = current;
if (minpower > power ) minpower = power;
if (maxpower < power ) maxpower = power;
// Check SET button and set screen flag accordingly
if (PINB & (1<<SETBUTTON)) lastbutton = 0;
else if (!lastbutton) {
if (++primescreen > 4) primescreen = 0;
OLED_clearScreen();
lastbutton = 1;
}
// Display values on the OLED
switch (primescreen) {
case 0: OLED_setCursor(0,0);
OLED_printDec16(voltage); OLED_printPrg(mV);
OLED_printDec16(power); OLED_printPrg(mW);
OLED_setCursor(0,2);
OLED_printDec16(current); OLED_printPrg(mA);
OLED_printDec16(capacity / 1000); OLED_printPrg(mAh);
break;
case 1: OLED_setCursor(0,0);
OLED_printDec16(minvoltage); OLED_printPrg(SEP);
OLED_printDec16(maxvoltage); OLED_printPrg(mV);
OLED_setCursor(0,2);
OLED_printDec16(mincurrent); OLED_printPrg(SEP);
OLED_printDec16(maxcurrent); OLED_printPrg(mA);
break;
case 2: OLED_setCursor(0,1);
OLED_printDec16(minpower); OLED_printPrg(SEP);
OLED_printDec16(maxpower); OLED_printPrg(mW);
break;
case 3: OLED_setCursor(16,0);
OLED_printDec16(capacity / 1000); OLED_printChar(DECIMAL);
OLED_printDec12(capacity % 1000); OLED_printPrg(mAh);
OLED_setCursor(16,2);
OLED_printDec16(energy / 1000); OLED_printChar(DECIMAL);
OLED_printDec12(energy % 1000); OLED_printPrg(mWh);
break;
case 4: OLED_setCursor(32,1);
OLED_printDec8(seconds / 3600); OLED_printChar(COLON);
seconds %= 3600;
OLED_printDec8(seconds / 60 ); OLED_printChar(COLON);
OLED_printDec8(seconds % 60 );
break;
default: break;
}
_delay_ms(100);
}
}

View File

@ -1,192 +0,0 @@
:10000000ABC0CFC0CEC0CDC0CCC08AC3CAC0C9C0EF
:10001000C8C0C7C0C6C0C5C0C4C0C3C0C2C000003D
:1000200000000000000000010101010101010000C9
:1000300000000000000000000000000000000000C0
:10004000C038E0000000203C230202273820087856
:10005000880000C83808000007380E010000F808C2
:1000600000F80008F800033C0700073C030080800C
:10007000808080808000203F20003F20003F08F8E3
:10008000008080800000203F210000203F2000E011
:1000900010080810E000000F102020100F000010C2
:1000A00010F8000000000020203F20200000007019
:1000B0000808088870000030282422213000003011
:1000C0000888884830000018202020110E00000009
:1000D000C02010F8000000070424243F240000F88A
:1000E0000888880808000019212020110E0000E06F
:1000F000108888180000000F112020110E00003811
:100100000808C83808000000003F00000000007028
:10011000880808887000001C222121221C0000E0B1
:1001200010080810E0000000312222110F00C8A1C1
:10013000A81FDA028D142E2B2A002A292A002E2C21
:100140002A002A292A002E2B2F002E2B2A002E2DA2
:100150002A002E2C2A00670511241FBECFE5D1E00E
:10016000DEBFCDBF20E0A8E7B0E001C01D92A53AF8
:10017000B207E1F710E0A0E6B0E0EAECFBE002C075
:1001800005900D92A837B107D9F710E0CCEAD0E07E
:1001900003C02197FE0111D5CB3AD107D1F70AD37D
:1001A00012C52ECFC09AC29ABA9AB89A8FEF8FB959
:1001B0008AE28DB980EF8EB908953FB7F8948091A7
:1001C000990090919A00A0919B00B0919C0022B759
:1001D00008B601FE05C02F3F19F00196A11DB11D03
:1001E0003FBFBA2FA92F982F8827BC01CD01620FDE
:1001F000711D811D911D43E0660F771F881F991F98
:100200004A95D1F70895CF92DF92EF92FF92CF9364
:10021000DF936B017C01D1DFEB01CFDF6C1B7D0B2A
:10022000683E7340A0F0C114D104E104F10439F434
:10023000DF91CF91FF90EF90DF90CF90089581E014
:10024000C81AD108E108F108C851DC4FE6CFC11443
:10025000D104E104F10409F7EBCFCF92DF92EF92E2
:10026000FF920F931F93CF93DF936C01EB017B0100
:10027000E40EF51E10E000E0CE15DF0561F0699197
:10028000D601ED91FC910190F081E02DC601099518
:10029000080F191FF1CFC801DF91CF911F910F9166
:1002A000FF90EF90DF90CF900895E0917A00F09169
:1002B0007B000994E0917800F09179000994E09135
:1002C0007C00F0917D00099580E4F4CFE0917C0002
:1002D000F0917D00099580E0EDCF1F93CF93DF93E0
:1002E000C82F162FD62FD77080916700D82BEEDF3E
:1002F0008D2FE0DF8C2F82958F708061DBDF8C2F5C
:100300008F70D8DFD2DFC093A2001093A100DF91DD
:10031000CF911F9108950F931F93CF93DF93C0E068
:1003200010E86C2F80E0D9DF8091A200012F081B1C
:1003300081F01093A200C3DFD0E080E0BBDF811129
:1003400004C0B3DFBCDF80E0B5DFDF5F0D13F5CFA6
:10035000ACDFCF5FC43029F760E080E0DF91CF9160
:100360001F910F91BACF8091A100860F24E030E059
:10037000261B31098217130609F034F48093A1007B
:100380006091A10080E0A9CF84E0861BF7CFAF92F7
:10039000BF92CF92DF92EF92FF920F931F93CF9372
:1003A000DF93E0918000F0918100309741F06D3053
:1003B00031F0D62FC3816A3079F46C2FD4DF81E01D
:1003C00090E0DF91CF911F910F91FF90EF90DF9020
:1003D000CF90BF90AF900895A2804091A200EA2CE8
:1003E000F12C20E830E02E193F094217130619F0CE
:1003F00014F06C2FB8DFE0918000F091810024812F
:100400008C2F90E0B7018DD3BC014D2F421B550BB3
:10041000CA0187D38C01BC2E52DFC801282F201BB4
:100420002A15C0F46C015FEFC51AD50AE09180006F
:10043000F09181000190F081E02DE80FF91FD49137
:100440008D2F38DF811104C030DF39DF8D2F32DF8F
:10045000C601E4CF0E0D1F1D28DF8091A200C13020
:1004600039F48A0D8093A200BA94B110D5CFA7CFEA
:100470006091A1006F5F91E09B1510F42EDFF4CF27
:100480006C1B8A0DFBCF0F931F93CF93DF938C01CF
:10049000D0E0C0E0F801EC0FFD1F6491662339F055
:1004A0008DE990E074DF892B11F02196F3CFCE0116
:1004B000DF91CF911F910F9108958EB98BE295E056
:1004C0009A95F1F700008DB9B29BFECF92E09A9514
:1004D000F1F700C08DB9769BF2CF85E08A95F1F7F0
:1004E00000008FB19FEF9FB9B89A0895C2988FB955
:1004F00080EFE3DFB8988EEFE0DF8095817008959C
:10050000F5CFCF938091A3009091A4009C012F5F21
:100510003F4F2230310528F001979093A40080933B
:10052000A300B89880EFC9DFC82F8091A3009091F5
:10053000A400892B39F48FEF8FB98EEFBEDF8C2F9B
:10054000CF9108951FB8F9CF6115710531F07093FF
:10055000A4006093A30061E070E0C29AB29BFECF5A
:1005600092E09A95F1F700C0C09892E09A95F1F761
:1005700000C0C298C09A779B0CC0C298880F862B87
:100580008FB980EF9ADFB8988EEF97DF80958170F2
:10059000089580E0089570E060E08CE3D5CFC098C6
:1005A000C29AB29BFECF82E08A95F1F700C0C09A52
:1005B00085E08A95F1F700000895F1DF80E0089565
:1005C000F1DDE9DF811106C06AE070E080E090E0D3
:1005D0001ADEF7CFF2CFCF93DF93C82F70E060E041
:1005E00080E4B2DF8C2F82DF62E070E080E4ACDF79
:1005F00088DFC82F86DFDC2FC82FD1DFCE01DF9147
:10060000CF9108951F93CF93DF93182FEB0170E0E4
:1006100060E080E499DF812F69DF8D2F67DF8C2F09
:1006200065DFDF91CF911F91BACF8F929F92AF92EA
:10063000BF92CF92DF92EF92FF920F931F93CF93CF
:10064000DF93CDB7DEB7A1970FB6F894DEBF0FBE2C
:10065000CDBF6C01F12CE12C812C912C54018394A1
:10066000C114D104E104F10411F04601570180E105
:10067000881687E29806A104B10488F441E050E0AE
:1006800066E770E08DE990E0E8DD2AE030E040E0E8
:1006900050E0C501B40156D24B015C01E8CF19A26C
:1006A0008E010F5D1F4F8AE0882E912CA12CB12C5A
:1006B000C701B601A50194015ED2822F6AE028D25B
:1006C0009C2D981B892F9A304CF5805DF801829300
:1006D0008F0169017A01C114D104E104F10441F7E9
:1006E00001900020E9F73197AF01401B510BB80191
:1006F0008DE990E0B2DDA1960FB6F894DEBF0FBE93
:10070000CDBFDF91CF911F910F91FF90EF90DF90C0
:10071000CF90BF90AF909F908F900895895CD6CF77
:100720001F920F920FB60F9211242F933F938F9326
:100730009F93AF93BF938091950090919600A09165
:100740009700B09198003091940026E0230F2D3748
:1007500068F129E8230F0396A11DB11D2093940091
:100760008093950090939600A0939700B093980083
:100770008091990090919A00A0919B00B0919C006B
:100780000196A11DB11D8093990090939A00A093AA
:100790009B00B0939C00BF91AF919F918F913F912F
:1007A0002F910F900FBE0F901F9018950296A11DCC
:1007B000B11DD4CF81B781BF78948AB582608ABDDC
:1007C0008AB581608ABD83B7887F836083BF789450
:1007D00089B7826089BF80B7807F80BF80B780681B
:1007E00080BF80B7806480BF8CB580648CBD8FEF84
:1007F0008DBD80B7876080BF86B18877866886B9EF
:10080000379A17BA88E088BBCDDC67E676E080E0EF
:10081000F9DE60E074E185E0F5DEE0917E00F091C4
:100820007F00099553DDCEE2D1E056E3E52E51E09D
:10083000F52EFE011491812F3DDD811104C035DDBF
:1008400045DD812F37DD2196EC16FD0691F72DDD74
:1008500080E790E090938100809380005CDD36DD3E
:100860008FEA28DD22DD8091670094E0892780935C
:1008700067002FB7F8948091950090919600A09111
:100880009700B09198002FBF8093860090938700C7
:10089000A0938800B093890038EEC32E33E0D32EA6
:1008A000E12CF12C40E1842E4EE0942EA12CB12CB1
:1008B000C1E0D0E282E08FDE969587958C7F9093A1
:1008C00093008093920084E086DE97FDCFC09093E2
:1008D0008F0080938E0060919200709193008091C0
:1008E0006500909166006817790720F470936600A0
:1008F0006093650080919000909191008617970712
:1009000020F4709391006093900020918E003091BC
:100910008F0080916300909164002817390720F4BC
:10092000309364002093630080918C0090918D003F
:100930008217930720F430938D0020938C0090E071
:1009400080E050E040E0FED0A701960114D1309342
:100950008B0020938A002FB7F89480919500909196
:100960009600A0919700B09198002FBF409186000B
:100970005091870060918800709189002C013D01A1
:10098000441A550A660A770AA301920180938600E9
:1009900090938700A0938800B093890060918E00A7
:1009A00070918F0090E080E0CDD0A5019401E3D05C
:1009B0008091820090918300A0918400B091850085
:1009C000820F931FA41FB51F809382009093830012
:1009D000A0938400B0938500B39B4DC01092620039
:1009E0009ADC60E080E079DC80916100882309F482
:1009F0004EC0809192009091930017DE82E591E0C5
:100A000042DD80918A0090918B000FDE8EE491E0B0
:100A10003ADD80918E0090918F0007DE8AE491E0AC
:100A200032DD60918200709183008091840090910A
:100A30008500A70196019FD0C901F7DD86E491E00A
:100A400022DD109160001D27109360003FDC812F94
:100A500031DC2BDC8091670094E08927809367006C
:100A600064E670E080E090E0CEDB24CF10928F004F
:100A700010928E0030CF809162008111B1CF8091B1
:100A800061008C2780936100C0936200A9CF8091A0
:100A9000650090916600C9DD82E491E0F4DC80910C
:100AA000900090919100C1DD8EE391E0ECDC8091AB
:100AB000630090916400B9DD8AE391E0E4DC809109
:100AC0008C0090918D00B1DD86E391E0B9CFEDE926
:100AD000F0E0138212828CE690E09183808380EEB6
:100AE00092E090937F0080937E008BEC92E0909355
:100AF0007D0080937C0080E892E090937900809361
:100B000078008DED92E090937B0080937A000895B9
:100B1000002480FD060E660F11F08695D1F7802D1A
:100B200008950024552704C0080E591F880F991FE7
:100B3000009729F076956795B8F37105B9F7802D80
:100B4000952F0895EE27FF27AA27BB2708C0A20FDD
:100B5000B31FE41FF51F220F331F441F551F969527
:100B600087957795679598F37040A9F7009799F75F
:100B7000BD01CF010895A1E21A2EAA1BBB1BFD01E6
:100B80000DC0AA1FBB1FEE1FFF1FA217B307E4076C
:100B9000F50720F0A21BB30BE40BF50B661F771FC4
:100BA000881F991F1A9469F76095709580959095A4
:100BB0009B01AC01BD01CF010895EE0FFF1F059011
:0A0BC000F491E02D0994F894FFCFA2
:100BCA00400101FFFFFFFFB000000000C7012D0137
:080BDA001E00080229392A005F
:00000001FF

View File

@ -1,238 +0,0 @@
:10000000CFC0F3C0F2C0F1C0F0C0C8C3EEC0EDC0B5
:10001000ECC0EBC0EAC0E9C0E8C0E7C0E6C0000041
:100020000000000000000030300000000000000070
:1000300000000000000000010101010101010000B9
:1000400000000000000000000000000000000000B0
:10005000C038E0000000203C230202273820087846
:10006000880000C83808000007380E010000F808B2
:1000700000F80008F800033C0700073C03008080FC
:10008000808080808000203F20003F20003F08F8D3
:10009000008080800000203F210000203F2000E001
:1000A00010080810E000000F102020100F000010B2
:1000B00010F8000000000020203F20200000007009
:1000C0000808088870000030282422213000003001
:1000D0000888884830000018202020110E000000F9
:1000E000C02010F8000000070424243F240000F87A
:1000F0000888880808000019212020110E0000E05F
:10010000108888180000000F112020110E00003800
:100110000808C83808000000003F00000000007018
:10012000880808887000001C222121221C0000E0A1
:1001300010080810E0000000312222110F0000001A
:1001400000C0C00000000000003030000000C030DF
:10015000C828E810E0000718272423140B00C8A1C2
:10016000A81FDA028D143A003A002E2D2F00280025
:100170002E2B2F0028002E2D2A002A292A002E2B74
:100180002A002A292A002E2C2A002A292A002E2B6E
:100190002F002E2B2A002E2D2A002E2C2A00DA06C4
:1001A00011241FBECFE5D1E0DEBFCDBF20E0A8E720
:1001B000B0E001C01D92A43BB207E1F710E0A0E659
:1001C000B0E0E0EBFEE002C005900D92A837B10769
:1001D000D9F710E0C0EDD0E003C02197FE0160D652
:1001E000CF3CD107D1F724D361C60ACFC09AC29AB7
:1001F000BA9AB89A8FEF8FB98AE28DB980EF8EB92B
:1002000008953FB7F8948091A8009091A900A0911B
:10021000AA00B091AB0022B708B601FE05C02F3F7F
:1002200019F00196A11DB11D3FBFBA2FA92F982F1C
:100230008827BC01CD01620F711D811D911D43E016
:10024000660F771F881F991F4A95D1F70895CF929F
:10025000DF92EF92FF92CF93DF936B017C01D1DFAE
:10026000EB01CFDF6C1B7D0B683E7340A0F0C11427
:10027000D104E104F10439F4DF91CF91FF90EF90C4
:10028000DF90CF90089581E0C81AD108E108F10805
:10029000C851DC4FE6CFC114D104E104F10409F7E1
:1002A000EBCFCF92DF92EF92FF920F931F93CF93FA
:1002B000DF936C01EB017B01E40EF51E10E000E022
:1002C000CE15DF0561F06991D601ED91FC910190A9
:1002D000F081E02DC6010995080F191FF1CFC80163
:1002E000DF91CF911F910F91FF90EF90DF90CF9012
:1002F0000895E0917A00F0917B000994E0917800F4
:10030000F09179000994E0917C00F0917D000995CD
:1003100080E4F4CFE0917C00F0917D00099580E0CD
:10032000EDCF1F93CF93DF93C82F162FD62FD77003
:1003300080916800D82BEEDF8D2FE0DF8C2F829527
:100340008F708061DBDF8C2F8F70D8DFD2DFC0939E
:10035000B1001093B000DF91CF911F9108950F93DA
:100360001F93CF93DF93C0E010E86C2F80E0D9DFBC
:100370008091B100012F081B81F01093B100C3DF01
:10038000D0E080E0BBDF811104C0B3DFBCDF80E0E0
:10039000B5DFDF5F0D13F5CFACDFCF5FC43029F7DA
:1003A00060E080E0DF91CF911F910F91BACF8091F3
:1003B000B000860F24E030E0261B310982171306B7
:1003C00009F034F48093B0006091B00080E0A9CFD0
:1003D00084E0861BF7CFAF92BF92CF92DF92EF926D
:1003E000FF920F931F93CF93DF93E0918000F091E2
:1003F0008100309741F06D3031F0D62FC3816A30E3
:1004000079F46C2FD4DF81E090E0DF91CF911F91E0
:100410000F91FF90EF90DF90CF90BF90AF90089535
:10042000A2804091B100EA2CF12C20E830E02E1996
:100430003F094217130619F014F06C2FB8DFE09152
:100440008000F091810024818C2F90E0B701DCD4F2
:10045000BC014D2F421B550BCA01D6D48C01BC2EBA
:1004600052DFC801282F201B2A15C0F46C015FEF52
:10047000C51AD50AE0918000F09181000190F081C9
:10048000E02DE80FF91FD4918D2F38DF811104C0C2
:1004900030DF39DF8D2F32DFC601E4CF0E0D1F1D97
:1004A00028DF8091B100C13039F48A0D8093B1000A
:1004B000BA94B110D5CFA7CF6091B0006F5F91E033
:1004C0009B1510F42EDFF4CF6C1B8A0DFBCF0F931E
:1004D0001F93CF93DF938C01D0E0C0E0F801EC0FC5
:1004E000FD1F6491662339F08CEA90E074DF892B5C
:1004F00011F02196F3CFCE01DF91CF911F910F9193
:1005000008958EB98BE295E09A95F1F700008DB9C8
:10051000B29BFECF92E09A95F1F700C08DB9769B21
:10052000F2CF85E08A95F1F700008FB19FEF9FB978
:10053000B89A0895C2988FB980EFE3DFB8988EEF2C
:10054000E0DF809581700895F5CFCF938091B20060
:100550009091B3009C012F5F3F4F2230310528F06E
:1005600001979093B3008093B200B89880EFC9DFF1
:10057000C82F8091B2009091B300892B39F48FEF8E
:100580008FB98EEFBEDF8C2FCF9108951FB8F9CFB2
:100590006115710531F07093B3006093B20061E0B2
:1005A00070E0C29AB29BFECF92E09A95F1F700C03C
:1005B000C09892E09A95F1F700C0C298C09A779BD4
:1005C0000CC0C298880F862B8FB980EF9ADFB8983D
:1005D0008EEF97DF80958170089580E0089570E038
:1005E00060E08CE3D5CFC098C29AB29BFECF82E088
:1005F0008A95F1F700C0C09A85E08A95F1F700006E
:100600000895F1DF80E00895F1DDE9DF811106C092
:100610006AE070E080E090E01ADEF7CFF2CFCF938F
:10062000DF93C82F70E060E080E4B2DF8C2F82DFC0
:1006300062E070E080E4ACDF88DFC82F86DFDC2F6B
:10064000C82FD1DFCE01DF91CF9108951F93CF93B3
:10065000DF93182FEB0170E060E080E499DF812FD9
:1006600069DF8D2F67DF8C2F65DFDF91CF911F91C1
:10067000BACF4F925F926F927F928F929F92AF927A
:10068000BF92CF92DF92EF92FF920F931F93CF937F
:10069000DF93CDB7DEB7A1970FB6F894DEBF0FBEDC
:1006A000CDBF6B017C01142F022F812C912C5401A2
:1006B0008394C114D104E104F10411F04B015C01F5
:1006C000412C512C32014394115051F02AE030E07A
:1006D00040E050E0C301B201A8D32B013C01F4CFAC
:1006E00084149504A604B70470F4602F8CEA90E09B
:1006F00072DE2AE030E040E050E0C501B40195D35D
:100700004B015C01EDCF19A28E010F5D1F4F8AE0F6
:10071000882E912CA12CB12CC701B601A501940102
:100720009DD3822F6AE067D39C2D981B892F9A3026
:100730006CF5805DF80182938F0169017A01C11423
:10074000D104E104F10441F701900020E9F7319769
:10075000AF01401B510BB8018CEA90E0A2DDA196DD
:100760000FB6F894DEBF0FBECDBFDF91CF911F91C2
:100770000F91FF90EF90DF90CF90BF90AF909F9040
:100780008F907F906F905F904F900895895CD2CF4B
:10079000BC0190E080E02AE245E06BCF1F920F920F
:1007A0000FB60F9211242F933F938F939F93AF9384
:1007B000BF938091A4009091A500A091A600B09154
:1007C000A7003091A30026E0230F2D3768F129E818
:1007D000230F0396A11DB11D2093A3008093A400B5
:1007E0009093A500A093A600B093A7008091A800C5
:1007F0009091A900A091AA00B091AB000196A11D13
:10080000B11D8093A8009093A900A093AA00B09373
:10081000AB00BF91AF919F918F913F912F910F901E
:100820000FBE0F901F9018950296A11DB11DD4CF39
:10083000CF93DF9300D000D000D0CDB7DEB781B723
:1008400081BF78948AB582608ABD8AB581608ABD8D
:1008500083B7887F836083BF789489B7826089BFBC
:1008600080B7807F80BF80B7806880BF80B780649A
:1008700080BF8CB580648CBD8FEF8DBD80B78760E5
:1008800080BF86B18877866886B9379A17BA88E0BC
:1008900088BBACDC67E676E080E0D8DE60E074E13F
:1008A00085E0D4DEE0917E00F0917F00099532DD95
:1008B0002EE531E03A83298356E6E52E51E0F52E08
:1008C000E981FA811491812F19DD811104C011DDB4
:1008D00021DD812F13DD29813A812F5F3F4F3A833C
:1008E0002983E216F30661F704DD81E790E0909337
:1008F00081008093800033DD0DDD8FEAFFDCF9DCC1
:100900008091680094E08927809368002FB7F8945D
:100910008091A4009091A500A091A600B091A7009D
:100920002FBF8093950090939600A0939700B0936B
:1009300098008093990090939A00A0939B00B093A5
:100940009C0038EEC32E33E0D32EE12CF12C40E195
:10095000442E4EE0542E612C712C3324339482E0CB
:100960005EDE969587958C7F9093A2008093A10080
:1009700084E055DE97FD15C19093A00080939F0001
:100980006091A1007091A20090E080E020919F0012
:100990003091A00050E040E048D2A70196015ED21D
:1009A00030939E0020939D008FB7F8948090A40010
:1009B0009090A500A090A600B090A7008FBF809156
:1009C000990090919A00A0919B00B0919C00A50184
:1009D0009401281B390B4A0B5B0B29833A834B8309
:1009E0005C838091950090919600A0919700B091C2
:1009F0009800A5019401281B390B4A0B5B0BCA0117
:100A0000B901A70196012AD2209391003093920058
:100A100040939300509394008092990090929A0092
:100A2000A0929B00B0929C0000919F001091A000AA
:100A3000B80190E080E029813A814B815C81F5D159
:100A4000A30192010BD280918D0090918E00A09114
:100A50008F00B0919000820F931FA41FB51F809349
:100A60008D0090938E00A0938F00B09390004091E2
:100A70009D0050919E005E834D83BA0190E080E01E
:100A800029813A814B815C81D0D1A3019201E6D1C9
:100A90008091890090918A00A0918B00B0918C0088
:100AA000820F931FA41FB51F8093890090938A0023
:100AB000A0938B00B0938C008091A1009091A20034
:100AC00020916600309167008217930720F490937D
:100AD0006700809366002091870030918800281776
:100AE000390720F4909388008093870080916400F8
:100AF000909165000817190720F410936500009382
:100B0000640080918500909186008017910720F401
:100B1000109386000093850080916200909163009D
:100B2000ED81FE81E817F90720F4F0936300E0936C
:100B3000620080918300909184002D813E81821714
:100B4000930720F43093840020938300B39B2EC03E
:100B50001092610004DC60E080E0E3DB80918200C1
:100B6000823009F4C9C098F5882309F47CC081302B
:100B700009F4A2C03091600080E2382739833093B5
:100B80006000C8DB8981BADBB4DB8091680094E047
:100B900089278093680064E670E080E090E057DB8E
:100BA000DECE1092A00010929F00EACE80916100EC
:100BB0008111D0CF809182008F5F853028F480939F
:100BC000820030926100C6CF10928200FACF83304B
:100BD00009F4A5C0843071F661E080E2A2DB609187
:100BE0009100709192008091930090919400A301E4
:100BF000920134D1CA01B90120E342E03ADD88E62E
:100C000091E065DC60919100709192008091930079
:100C100090919400A301920121D16093910070936F
:100C2000920080939300909394002CE330E040E096
:100C300050E014D1CA01B90120E342E01ADD86E692
:100C400091E045DC60919100709192008091930059
:100C5000909194002CE330E040E050E0FFD020E39E
:100C600042E007DD87CF8091A1009091A20090DD46
:100C70008AE991E02CDC80919D0090919E0088DDB6
:100C800086E991E024DC80919F009091A00080DDB6
:100C900082E991E01CDC60918D0070918E00809162
:100CA0008F0090919000A7019601D8D0C90170DD06
:100CB0008EE891E00CDC5ECF809166009091670039
:100CC00067DD8AE891E003DC8091870090918800DD
:100CD0005FDD86E891E0FBDB809164009091650028
:100CE00057DD82E891E0F3DB8091850090918600EA
:100CF0004FDD8EE791E0DECF61E080E012DB809196
:100D000062009091630044DD8AE791E0E0DB80912E
:100D10008300909184003CDD86E791E0CBCF609129
:100D20008D0070918E0080918F0090919000A701AE
:100D3000960194D0CA01B9012AE247E09ADC84E71F
:100D400091E0C5DB60918D0070918E0080918F00E5
:100D500090919000A701960181D020E343E089DCC7
:100D600080E791E0B4DB62E080E0DBDA609189004B
:100D700070918A0080918B0090918C00A701960160
:100D80006DD0CA01B9012AE247E073DC8EE691E03A
:100D90009EDB6091890070918A0080918B00909118
:100DA0008C00A70196015AD020E343E062DC8AE67A
:100DB00091E080CFECEAF0E0138212828DE690E0C1
:100DC0009183808384E093E090937F0080937E0002
:100DD0008FEE92E090937D0080937C0084EA92E015
:100DE000909379008093780081E093E090937B006A
:100DF00080937A000895002480FD060E660F11F09E
:100E00008695D1F7802D08950024552704C0080E3B
:100E1000591F880F991F009729F076956795B8F3A9
:100E20007105B9F7802D952F0895EE27FF27AA2782
:100E3000BB2708C0A20FB31FE41FF51F220F331FEB
:100E4000441F551F969587957795679598F3704041
:100E5000A9F7009799F7BD01CF010895A1E21A2ED5
:100E6000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F4E
:100E7000A217B307E407F50720F0A21BB30BE40B9E
:100E8000F50B661F771F881F991F1A9469F76095E5
:100E90007095809590959B01AC01BD01CF0108959F
:100EA000EE0FFF1F0590F491E02D0994F894FFCF09
:100EB0004001FFFFFFFFFFFFB000000000EB01510A
:080EC000011E000802283B009E
:00000001FF

View File

@ -1,192 +0,0 @@
:10000000ABC0CFC0CEC0CDC0CCC08AC3CAC0C9C0EF
:10001000C8C0C7C0C6C0C5C0C4C0C3C0C2C000003D
:1000200000000000000000010101010101010000C9
:1000300000000000000000000000000000000000C0
:10004000C038E0000000203C230202273820087856
:10005000880000C83808000007380E010000F808C2
:1000600000F80008F800033C0700073C030080800C
:10007000808080808000203F20003F20003F08F8E3
:10008000008080800000203F210000203F2000E011
:1000900010080810E000000F102020100F000010C2
:1000A00010F8000000000020203F20200000007019
:1000B0000808088870000030282422213000003011
:1000C0000888884830000018202020110E00000009
:1000D000C02010F8000000070424243F240000F88A
:1000E0000888880808000019212020110E0000E06F
:1000F000108888180000000F112020110E00003811
:100100000808C83808000000003F00000000007028
:10011000880808887000001C222121221C0000E0B1
:1001200010080810E0000000312222110F00C8A1C1
:10013000A81FDA028D142E2B2A002A292A002E2C21
:100140002A002A292A002E2B2F002E2B2A002E2DA2
:100150002A002E2C2A00670511241FBECFE5D2E00D
:10016000DEBFCDBF20E0A8E7B0E001C01D92A53AF8
:10017000B207E1F710E0A0E6B0E0EAECFBE002C075
:1001800005900D92A837B107D9F710E0CCEAD0E07E
:1001900003C02197FE0111D5CB3AD107D1F70AD37D
:1001A00012C52ECFC09AC29ABA9AB89A8FEF8FB959
:1001B0008AE28DB980EF8EB908953FB7F8948091A7
:1001C000990090919A00A0919B00B0919C0022B759
:1001D00008B601FE05C02F3F19F00196A11DB11D03
:1001E0003FBFBA2FA92F982F8827BC01CD01620FDE
:1001F000711D811D911D43E0660F771F881F991F98
:100200004A95D1F70895CF92DF92EF92FF92CF9364
:10021000DF936B017C01D1DFEB01CFDF6C1B7D0B2A
:10022000683E7340A0F0C114D104E104F10439F434
:10023000DF91CF91FF90EF90DF90CF90089581E014
:10024000C81AD108E108F108C851DC4FE6CFC11443
:10025000D104E104F10409F7EBCFCF92DF92EF92E2
:10026000FF920F931F93CF93DF936C01EB017B0100
:10027000E40EF51E10E000E0CE15DF0561F0699197
:10028000D601ED91FC910190F081E02DC601099518
:10029000080F191FF1CFC801DF91CF911F910F9166
:1002A000FF90EF90DF90CF900895E0917A00F09169
:1002B0007B000994E0917800F09179000994E09135
:1002C0007C00F0917D00099580E4F4CFE0917C0002
:1002D000F0917D00099580E0EDCF1F93CF93DF93E0
:1002E000C82F162FD62FD77080916700D82BEEDF3E
:1002F0008D2FE0DF8C2F82958F708061DBDF8C2F5C
:100300008F70D8DFD2DFC093A2001093A100DF91DD
:10031000CF911F9108950F931F93CF93DF93C0E068
:1003200010E86C2F80E0D9DF8091A200012F081B1C
:1003300081F01093A200C3DFD0E080E0BBDF811129
:1003400004C0B3DFBCDF80E0B5DFDF5F0D13F5CFA6
:10035000ACDFCF5FC43029F760E080E0DF91CF9160
:100360001F910F91BACF8091A100860F24E030E059
:10037000261B31098217130609F034F48093A1007B
:100380006091A10080E0A9CF84E0861BF7CFAF92F7
:10039000BF92CF92DF92EF92FF920F931F93CF9372
:1003A000DF93E0918000F0918100309741F06D3053
:1003B00031F0D62FC3816A3079F46C2FD4DF81E01D
:1003C00090E0DF91CF911F910F91FF90EF90DF9020
:1003D000CF90BF90AF900895A2804091A200EA2CE8
:1003E000F12C20E830E02E193F094217130619F0CE
:1003F00014F06C2FB8DFE0918000F091810024812F
:100400008C2F90E0B7018DD3BC014D2F421B550BB3
:10041000CA0187D38C01BC2E52DFC801282F201BB4
:100420002A15C0F46C015FEFC51AD50AE09180006F
:10043000F09181000190F081E02DE80FF91FD49137
:100440008D2F38DF811104C030DF39DF8D2F32DF8F
:10045000C601E4CF0E0D1F1D28DF8091A200C13020
:1004600039F48A0D8093A200BA94B110D5CFA7CFEA
:100470006091A1006F5F91E09B1510F42EDFF4CF27
:100480006C1B8A0DFBCF0F931F93CF93DF938C01CF
:10049000D0E0C0E0F801EC0FFD1F6491662339F055
:1004A0008DE990E074DF892B11F02196F3CFCE0116
:1004B000DF91CF911F910F9108958EB98BE295E056
:1004C0009A95F1F700008DB9B29BFECF92E09A9514
:1004D000F1F700C08DB9769BF2CF85E08A95F1F7F0
:1004E00000008FB19FEF9FB9B89A0895C2988FB955
:1004F00080EFE3DFB8988EEFE0DF8095817008959C
:10050000F5CFCF938091A3009091A4009C012F5F21
:100510003F4F2230310528F001979093A40080933B
:10052000A300B89880EFC9DFC82F8091A3009091F5
:10053000A400892B39F48FEF8FB98EEFBEDF8C2F9B
:10054000CF9108951FB8F9CF6115710531F07093FF
:10055000A4006093A30061E070E0C29AB29BFECF5A
:1005600092E09A95F1F700C0C09892E09A95F1F761
:1005700000C0C298C09A779B0CC0C298880F862B87
:100580008FB980EF9ADFB8988EEF97DF80958170F2
:10059000089580E0089570E060E08CE3D5CFC098C6
:1005A000C29AB29BFECF82E08A95F1F700C0C09A52
:1005B00085E08A95F1F700000895F1DF80E0089565
:1005C000F1DDE9DF811106C06AE070E080E090E0D3
:1005D0001ADEF7CFF2CFCF93DF93C82F70E060E041
:1005E00080E4B2DF8C2F82DF62E070E080E4ACDF79
:1005F00088DFC82F86DFDC2FC82FD1DFCE01DF9147
:10060000CF9108951F93CF93DF93182FEB0170E0E4
:1006100060E080E499DF812F69DF8D2F67DF8C2F09
:1006200065DFDF91CF911F91BACF8F929F92AF92EA
:10063000BF92CF92DF92EF92FF920F931F93CF93CF
:10064000DF93CDB7DEB7A1970FB6F894DEBF0FBE2C
:10065000CDBF6C01F12CE12C812C912C54018394A1
:10066000C114D104E104F10411F04601570180E105
:10067000881687E29806A104B10488F441E050E0AE
:1006800066E770E08DE990E0E8DD2AE030E040E0E8
:1006900050E0C501B40156D24B015C01E8CF19A26C
:1006A0008E010F5D1F4F8AE0882E912CA12CB12C5A
:1006B000C701B601A50194015ED2822F6AE028D25B
:1006C0009C2D981B892F9A304CF5805DF801829300
:1006D0008F0169017A01C114D104E104F10441F7E9
:1006E00001900020E9F73197AF01401B510BB80191
:1006F0008DE990E0B2DDA1960FB6F894DEBF0FBE93
:10070000CDBFDF91CF911F910F91FF90EF90DF90C0
:10071000CF90BF90AF909F908F900895895CD6CF77
:100720001F920F920FB60F9211242F933F938F9326
:100730009F93AF93BF938091950090919600A09165
:100740009700B09198003091940026E0230F2D3748
:1007500068F129E8230F0396A11DB11D2093940091
:100760008093950090939600A0939700B093980083
:100770008091990090919A00A0919B00B0919C006B
:100780000196A11DB11D8093990090939A00A093AA
:100790009B00B0939C00BF91AF919F918F913F912F
:1007A0002F910F900FBE0F901F9018950296A11DCC
:1007B000B11DD4CF81B781BF78948AB582608ABDDC
:1007C0008AB581608ABD83B7887F836083BF789450
:1007D00089B7826089BF80B7807F80BF80B780681B
:1007E00080BF80B7806480BF8CB580648CBD8FEF84
:1007F0008DBD80B7876080BF86B18877866886B9EF
:10080000379A17BA88E088BBCDDC67E676E080E0EF
:10081000F9DE60E074E185E0F5DEE0917E00F091C4
:100820007F00099553DDCEE2D1E056E3E52E51E09D
:10083000F52EFE011491812F3DDD811104C035DDBF
:1008400045DD812F37DD2196EC16FD0691F72DDD74
:1008500080E790E090938100809380005CDD36DD3E
:100860008FEA28DD22DD8091670094E0892780935C
:1008700067002FB7F8948091950090919600A09111
:100880009700B09198002FBF8093860090938700C7
:10089000A0938800B093890038EEC32E33E0D32EA6
:1008A000E12CF12C40E1842E4EE0942EA12CB12CB1
:1008B000C1E0D0E282E08FDE969587958C7F9093A1
:1008C00093008093920084E086DE97FDCFC09093E2
:1008D0008F0080938E0060919200709193008091C0
:1008E0006500909166006817790720F470936600A0
:1008F0006093650080919000909191008617970712
:1009000020F4709391006093900020918E003091BC
:100910008F0080916300909164002817390720F4BC
:10092000309364002093630080918C0090918D003F
:100930008217930720F430938D0020938C0090E071
:1009400080E050E040E0FED0A701960114D1309342
:100950008B0020938A002FB7F89480919500909196
:100960009600A0919700B09198002FBF409186000B
:100970005091870060918800709189002C013D01A1
:10098000441A550A660A770AA301920180938600E9
:1009900090938700A0938800B093890060918E00A7
:1009A00070918F0090E080E0CDD0A5019401E3D05C
:1009B0008091820090918300A0918400B091850085
:1009C000820F931FA41FB51F809382009093830012
:1009D000A0938400B0938500B39B4DC01092620039
:1009E0009ADC60E080E079DC80916100882309F482
:1009F0004EC0809192009091930017DE82E591E0C5
:100A000042DD80918A0090918B000FDE8EE491E0B0
:100A10003ADD80918E0090918F0007DE8AE491E0AC
:100A200032DD60918200709183008091840090910A
:100A30008500A70196019FD0C901F7DD86E491E00A
:100A400022DD109160001D27109360003FDC812F94
:100A500031DC2BDC8091670094E08927809367006C
:100A600064E670E080E090E0CEDB24CF10928F004F
:100A700010928E0030CF809162008111B1CF8091B1
:100A800061008C2780936100C0936200A9CF8091A0
:100A9000650090916600C9DD82E491E0F4DC80910C
:100AA000900090919100C1DD8EE391E0ECDC8091AB
:100AB000630090916400B9DD8AE391E0E4DC809109
:100AC0008C0090918D00B1DD86E391E0B9CFEDE926
:100AD000F0E0138212828CE690E09183808380EEB6
:100AE00092E090937F0080937E008BEC92E0909355
:100AF0007D0080937C0080E892E090937900809361
:100B000078008DED92E090937B0080937A000895B9
:100B1000002480FD060E660F11F08695D1F7802D1A
:100B200008950024552704C0080E591F880F991FE7
:100B3000009729F076956795B8F37105B9F7802D80
:100B4000952F0895EE27FF27AA27BB2708C0A20FDD
:100B5000B31FE41FF51F220F331F441F551F969527
:100B600087957795679598F37040A9F7009799F75F
:100B7000BD01CF010895A1E21A2EAA1BBB1BFD01E6
:100B80000DC0AA1FBB1FEE1FFF1FA217B307E4076C
:100B9000F50720F0A21BB30BE40BF50B661F771FC4
:100BA000881F991F1A9469F76095709580959095A4
:100BB0009B01AC01BD01CF010895EE0FFF1F059011
:0A0BC000F491E02D0994F894FFCFA2
:100BCA00400101FFFFFFFFB000000000C7012D0137
:080BDA001E00080229392A005F
:00000001FF

View File

@ -1,238 +0,0 @@
:10000000CFC0F3C0F2C0F1C0F0C0C8C3EEC0EDC0B5
:10001000ECC0EBC0EAC0E9C0E8C0E7C0E6C0000041
:100020000000000000000030300000000000000070
:1000300000000000000000010101010101010000B9
:1000400000000000000000000000000000000000B0
:10005000C038E0000000203C230202273820087846
:10006000880000C83808000007380E010000F808B2
:1000700000F80008F800033C0700073C03008080FC
:10008000808080808000203F20003F20003F08F8D3
:10009000008080800000203F210000203F2000E001
:1000A00010080810E000000F102020100F000010B2
:1000B00010F8000000000020203F20200000007009
:1000C0000808088870000030282422213000003001
:1000D0000888884830000018202020110E000000F9
:1000E000C02010F8000000070424243F240000F87A
:1000F0000888880808000019212020110E0000E05F
:10010000108888180000000F112020110E00003800
:100110000808C83808000000003F00000000007018
:10012000880808887000001C222121221C0000E0A1
:1001300010080810E0000000312222110F0000001A
:1001400000C0C00000000000003030000000C030DF
:10015000C828E810E0000718272423140B00C8A1C2
:10016000A81FDA028D143A003A002E2D2F00280025
:100170002E2B2F0028002E2D2A002A292A002E2B74
:100180002A002A292A002E2C2A002A292A002E2B6E
:100190002F002E2B2A002E2D2A002E2C2A00DA06C4
:1001A00011241FBECFE5D2E0DEBFCDBF20E0A8E71F
:1001B000B0E001C01D92A43BB207E1F710E0A0E659
:1001C000B0E0E0EBFEE002C005900D92A837B10769
:1001D000D9F710E0C0EDD0E003C02197FE0160D652
:1001E000CF3CD107D1F724D361C60ACFC09AC29AB7
:1001F000BA9AB89A8FEF8FB98AE28DB980EF8EB92B
:1002000008953FB7F8948091A8009091A900A0911B
:10021000AA00B091AB0022B708B601FE05C02F3F7F
:1002200019F00196A11DB11D3FBFBA2FA92F982F1C
:100230008827BC01CD01620F711D811D911D43E016
:10024000660F771F881F991F4A95D1F70895CF929F
:10025000DF92EF92FF92CF93DF936B017C01D1DFAE
:10026000EB01CFDF6C1B7D0B683E7340A0F0C11427
:10027000D104E104F10439F4DF91CF91FF90EF90C4
:10028000DF90CF90089581E0C81AD108E108F10805
:10029000C851DC4FE6CFC114D104E104F10409F7E1
:1002A000EBCFCF92DF92EF92FF920F931F93CF93FA
:1002B000DF936C01EB017B01E40EF51E10E000E022
:1002C000CE15DF0561F06991D601ED91FC910190A9
:1002D000F081E02DC6010995080F191FF1CFC80163
:1002E000DF91CF911F910F91FF90EF90DF90CF9012
:1002F0000895E0917A00F0917B000994E0917800F4
:10030000F09179000994E0917C00F0917D000995CD
:1003100080E4F4CFE0917C00F0917D00099580E0CD
:10032000EDCF1F93CF93DF93C82F162FD62FD77003
:1003300080916800D82BEEDF8D2FE0DF8C2F829527
:100340008F708061DBDF8C2F8F70D8DFD2DFC0939E
:10035000B1001093B000DF91CF911F9108950F93DA
:100360001F93CF93DF93C0E010E86C2F80E0D9DFBC
:100370008091B100012F081B81F01093B100C3DF01
:10038000D0E080E0BBDF811104C0B3DFBCDF80E0E0
:10039000B5DFDF5F0D13F5CFACDFCF5FC43029F7DA
:1003A00060E080E0DF91CF911F910F91BACF8091F3
:1003B000B000860F24E030E0261B310982171306B7
:1003C00009F034F48093B0006091B00080E0A9CFD0
:1003D00084E0861BF7CFAF92BF92CF92DF92EF926D
:1003E000FF920F931F93CF93DF93E0918000F091E2
:1003F0008100309741F06D3031F0D62FC3816A30E3
:1004000079F46C2FD4DF81E090E0DF91CF911F91E0
:100410000F91FF90EF90DF90CF90BF90AF90089535
:10042000A2804091B100EA2CF12C20E830E02E1996
:100430003F094217130619F014F06C2FB8DFE09152
:100440008000F091810024818C2F90E0B701DCD4F2
:10045000BC014D2F421B550BCA01D6D48C01BC2EBA
:1004600052DFC801282F201B2A15C0F46C015FEF52
:10047000C51AD50AE0918000F09181000190F081C9
:10048000E02DE80FF91FD4918D2F38DF811104C0C2
:1004900030DF39DF8D2F32DFC601E4CF0E0D1F1D97
:1004A00028DF8091B100C13039F48A0D8093B1000A
:1004B000BA94B110D5CFA7CF6091B0006F5F91E033
:1004C0009B1510F42EDFF4CF6C1B8A0DFBCF0F931E
:1004D0001F93CF93DF938C01D0E0C0E0F801EC0FC5
:1004E000FD1F6491662339F08CEA90E074DF892B5C
:1004F00011F02196F3CFCE01DF91CF911F910F9193
:1005000008958EB98BE295E09A95F1F700008DB9C8
:10051000B29BFECF92E09A95F1F700C08DB9769B21
:10052000F2CF85E08A95F1F700008FB19FEF9FB978
:10053000B89A0895C2988FB980EFE3DFB8988EEF2C
:10054000E0DF809581700895F5CFCF938091B20060
:100550009091B3009C012F5F3F4F2230310528F06E
:1005600001979093B3008093B200B89880EFC9DFF1
:10057000C82F8091B2009091B300892B39F48FEF8E
:100580008FB98EEFBEDF8C2FCF9108951FB8F9CFB2
:100590006115710531F07093B3006093B20061E0B2
:1005A00070E0C29AB29BFECF92E09A95F1F700C03C
:1005B000C09892E09A95F1F700C0C298C09A779BD4
:1005C0000CC0C298880F862B8FB980EF9ADFB8983D
:1005D0008EEF97DF80958170089580E0089570E038
:1005E00060E08CE3D5CFC098C29AB29BFECF82E088
:1005F0008A95F1F700C0C09A85E08A95F1F700006E
:100600000895F1DF80E00895F1DDE9DF811106C092
:100610006AE070E080E090E01ADEF7CFF2CFCF938F
:10062000DF93C82F70E060E080E4B2DF8C2F82DFC0
:1006300062E070E080E4ACDF88DFC82F86DFDC2F6B
:10064000C82FD1DFCE01DF91CF9108951F93CF93B3
:10065000DF93182FEB0170E060E080E499DF812FD9
:1006600069DF8D2F67DF8C2F65DFDF91CF911F91C1
:10067000BACF4F925F926F927F928F929F92AF927A
:10068000BF92CF92DF92EF92FF920F931F93CF937F
:10069000DF93CDB7DEB7A1970FB6F894DEBF0FBEDC
:1006A000CDBF6B017C01142F022F812C912C5401A2
:1006B0008394C114D104E104F10411F04B015C01F5
:1006C000412C512C32014394115051F02AE030E07A
:1006D00040E050E0C301B201A8D32B013C01F4CFAC
:1006E00084149504A604B70470F4602F8CEA90E09B
:1006F00072DE2AE030E040E050E0C501B40195D35D
:100700004B015C01EDCF19A28E010F5D1F4F8AE0F6
:10071000882E912CA12CB12CC701B601A501940102
:100720009DD3822F6AE067D39C2D981B892F9A3026
:100730006CF5805DF80182938F0169017A01C11423
:10074000D104E104F10441F701900020E9F7319769
:10075000AF01401B510BB8018CEA90E0A2DDA196DD
:100760000FB6F894DEBF0FBECDBFDF91CF911F91C2
:100770000F91FF90EF90DF90CF90BF90AF909F9040
:100780008F907F906F905F904F900895895CD2CF4B
:10079000BC0190E080E02AE245E06BCF1F920F920F
:1007A0000FB60F9211242F933F938F939F93AF9384
:1007B000BF938091A4009091A500A091A600B09154
:1007C000A7003091A30026E0230F2D3768F129E818
:1007D000230F0396A11DB11D2093A3008093A400B5
:1007E0009093A500A093A600B093A7008091A800C5
:1007F0009091A900A091AA00B091AB000196A11D13
:10080000B11D8093A8009093A900A093AA00B09373
:10081000AB00BF91AF919F918F913F912F910F901E
:100820000FBE0F901F9018950296A11DB11DD4CF39
:10083000CF93DF9300D000D000D0CDB7DEB781B723
:1008400081BF78948AB582608ABD8AB581608ABD8D
:1008500083B7887F836083BF789489B7826089BFBC
:1008600080B7807F80BF80B7806880BF80B780649A
:1008700080BF8CB580648CBD8FEF8DBD80B78760E5
:1008800080BF86B18877866886B9379A17BA88E0BC
:1008900088BBACDC67E676E080E0D8DE60E074E13F
:1008A00085E0D4DEE0917E00F0917F00099532DD95
:1008B0002EE531E03A83298356E6E52E51E0F52E08
:1008C000E981FA811491812F19DD811104C011DDB4
:1008D00021DD812F13DD29813A812F5F3F4F3A833C
:1008E0002983E216F30661F704DD81E790E0909337
:1008F00081008093800033DD0DDD8FEAFFDCF9DCC1
:100900008091680094E08927809368002FB7F8945D
:100910008091A4009091A500A091A600B091A7009D
:100920002FBF8093950090939600A0939700B0936B
:1009300098008093990090939A00A0939B00B093A5
:100940009C0038EEC32E33E0D32EE12CF12C40E195
:10095000442E4EE0542E612C712C3324339482E0CB
:100960005EDE969587958C7F9093A2008093A10080
:1009700084E055DE97FD15C19093A00080939F0001
:100980006091A1007091A20090E080E020919F0012
:100990003091A00050E040E048D2A70196015ED21D
:1009A00030939E0020939D008FB7F8948090A40010
:1009B0009090A500A090A600B090A7008FBF809156
:1009C000990090919A00A0919B00B0919C00A50184
:1009D0009401281B390B4A0B5B0B29833A834B8309
:1009E0005C838091950090919600A0919700B091C2
:1009F0009800A5019401281B390B4A0B5B0BCA0117
:100A0000B901A70196012AD2209391003093920058
:100A100040939300509394008092990090929A0092
:100A2000A0929B00B0929C0000919F001091A000AA
:100A3000B80190E080E029813A814B815C81F5D159
:100A4000A30192010BD280918D0090918E00A09114
:100A50008F00B0919000820F931FA41FB51F809349
:100A60008D0090938E00A0938F00B09390004091E2
:100A70009D0050919E005E834D83BA0190E080E01E
:100A800029813A814B815C81D0D1A3019201E6D1C9
:100A90008091890090918A00A0918B00B0918C0088
:100AA000820F931FA41FB51F8093890090938A0023
:100AB000A0938B00B0938C008091A1009091A20034
:100AC00020916600309167008217930720F490937D
:100AD0006700809366002091870030918800281776
:100AE000390720F4909388008093870080916400F8
:100AF000909165000817190720F410936500009382
:100B0000640080918500909186008017910720F401
:100B1000109386000093850080916200909163009D
:100B2000ED81FE81E817F90720F4F0936300E0936C
:100B3000620080918300909184002D813E81821714
:100B4000930720F43093840020938300B39B2EC03E
:100B50001092610004DC60E080E0E3DB80918200C1
:100B6000823009F4C9C098F5882309F47CC081302B
:100B700009F4A2C03091600080E2382739833093B5
:100B80006000C8DB8981BADBB4DB8091680094E047
:100B900089278093680064E670E080E090E057DB8E
:100BA000DECE1092A00010929F00EACE80916100EC
:100BB0008111D0CF809182008F5F853028F480939F
:100BC000820030926100C6CF10928200FACF83304B
:100BD00009F4A5C0843071F661E080E2A2DB609187
:100BE0009100709192008091930090919400A301E4
:100BF000920134D1CA01B90120E342E03ADD88E62E
:100C000091E065DC60919100709192008091930079
:100C100090919400A301920121D16093910070936F
:100C2000920080939300909394002CE330E040E096
:100C300050E014D1CA01B90120E342E01ADD86E692
:100C400091E045DC60919100709192008091930059
:100C5000909194002CE330E040E050E0FFD020E39E
:100C600042E007DD87CF8091A1009091A20090DD46
:100C70008AE991E02CDC80919D0090919E0088DDB6
:100C800086E991E024DC80919F009091A00080DDB6
:100C900082E991E01CDC60918D0070918E00809162
:100CA0008F0090919000A7019601D8D0C90170DD06
:100CB0008EE891E00CDC5ECF809166009091670039
:100CC00067DD8AE891E003DC8091870090918800DD
:100CD0005FDD86E891E0FBDB809164009091650028
:100CE00057DD82E891E0F3DB8091850090918600EA
:100CF0004FDD8EE791E0DECF61E080E012DB809196
:100D000062009091630044DD8AE791E0E0DB80912E
:100D10008300909184003CDD86E791E0CBCF609129
:100D20008D0070918E0080918F0090919000A701AE
:100D3000960194D0CA01B9012AE247E09ADC84E71F
:100D400091E0C5DB60918D0070918E0080918F00E5
:100D500090919000A701960181D020E343E089DCC7
:100D600080E791E0B4DB62E080E0DBDA609189004B
:100D700070918A0080918B0090918C00A701960160
:100D80006DD0CA01B9012AE247E073DC8EE691E03A
:100D90009EDB6091890070918A0080918B00909118
:100DA0008C00A70196015AD020E343E062DC8AE67A
:100DB00091E080CFECEAF0E0138212828DE690E0C1
:100DC0009183808384E093E090937F0080937E0002
:100DD0008FEE92E090937D0080937C0084EA92E015
:100DE000909379008093780081E093E090937B006A
:100DF00080937A000895002480FD060E660F11F09E
:100E00008695D1F7802D08950024552704C0080E3B
:100E1000591F880F991F009729F076956795B8F3A9
:100E20007105B9F7802D952F0895EE27FF27AA2782
:100E3000BB2708C0A20FB31FE41FF51F220F331FEB
:100E4000441F551F969587957795679598F3704041
:100E5000A9F7009799F7BD01CF010895A1E21A2ED5
:100E6000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F4E
:100E7000A217B307E407F50720F0A21BB30BE40B9E
:100E8000F50B661F771F881F991F1A9469F76095E5
:100E90007095809590959B01AC01BD01CF0108959F
:100EA000EE0FFF1F0590F491E02D0994F894FFCF09
:100EB0004001FFFFFFFFFFFFB000000000EB01510A
:080EC000011E000802283B009E
:00000001FF

View File

@ -1,7 +0,0 @@
For ATtiny85:
-------------
avrdude -c usbtiny -p t85 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U flash:w:USB_Tester_t85_v1.1.hex
For ATtiny45:
-------------
avrdude -c usbtiny -p t45 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U flash:w:USB_Tester_t45_v1.1.hex

83
software/makefile Executable file
View File

@ -0,0 +1,83 @@
# Project: USB-Tester
# Author: Stefan Wagner
# Year: 2020
# URL: https://easyeda.com/wagiminator
# https://github.com/wagiminator
#
# Type "make help" in the command line.
# Input and Output File Names
SKETCH = USB_Tester_v1.2.ino
TARGET = usb_tester
# Microcontroller Options
DEVICE = attiny85
CLOCK = 8000000
PROGRMR = usbasp
LFUSE = 0xE2
HFUSE = 0xD5
EFUSE = 0xFF
# Commands
AVRDUDE = avrdude -c $(PROGRMR) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -flto -mmcu=$(DEVICE) -DF_CPU=$(CLOCK) -x c++ $(SKETCH)
CLEAN = rm -f *.lst *.obj *.cof *.list *.map *.eep.hex *.o *.s
# Symbolic Targets
help:
@echo "Use the following commands:"
@echo "make all compile and build $(TARGET).bin/.hex/.asm for $(DEVICE)"
@echo "make hex compile and build $(TARGET).hex for $(DEVICE)"
@echo "make asm compile and disassemble to $(TARGET).asm for $(DEVICE)"
@echo "make bin compile and build $(TARGET).bin for $(DEVICE)"
@echo "make upload compile and upload to $(DEVICE) using $(PROGRMR)"
@echo "make fuses burn fuses of $(DEVICE) using $(PROGRMR) programmer"
@echo "make install compile, upload and burn fuses for $(DEVICE)"
@echo "make clean remove all build files"
all: buildbin buildhex buildasm removetemp size
bin: buildbin removetemp size
hex: buildbin buildhex removetemp size removebin
asm: buildbin buildasm removetemp size removebin
install: upload fuses
upload: hex
@echo "Uploading to $(DEVICE) ..."
@$(AVRDUDE) -U flash:w:$(TARGET).hex:i
fuses:
@echo "Burning fuses of $(DEVICE) ..."
@$(AVRDUDE) -U lfuse:w:$(LFUSE):m -U hfuse:w:$(HFUSE):m -U efuse:w:$(EFUSE):m
clean:
@echo "Cleaning all up ..."
@$(CLEAN)
@rm -f $(TARGET).bin $(TARGET).hex $(TARGET).asm
buildbin:
@echo "Building $(TARGET).bin for $(DEVICE) @ $(CLOCK)Hz ..."
@$(COMPILE) -o $(TARGET).bin
buildhex:
@echo "Building $(TARGET).hex ..."
@avr-objcopy -j .text -j .data -O ihex $(TARGET).bin $(TARGET).hex
buildasm:
@echo "Disassembling to $(TARGET).asm ..."
@avr-objdump -d $(TARGET).bin > $(TARGET).asm
size:
@echo "FLASH: $(shell avr-size -d $(TARGET).bin | awk '/[0-9]/ {print $$1 + $$2}') bytes"
@echo "SRAM: $(shell avr-size -d $(TARGET).bin | awk '/[0-9]/ {print $$2 + $$3}') bytes"
removetemp:
@echo "Removing temporary files ..."
@$(CLEAN)
removebin:
@echo "Removing $(TARGET).bin ..."
@rm -f $(TARGET).bin

135
software/usb_tester.hex Normal file
View File

@ -0,0 +1,135 @@
:1000000092C0ACC0ABC0AAC0A9C0A8C0A7C0A6C0BF
:10001000A5C0A4C0BDC1A2C0A1C0A0C09FC07C1F7C
:1000200002200220022002207C1F000000000000AD
:10003000000000007C1F001F82208220822082207E
:100040007C00000082208220822082207C1F7C0095
:1000500080008000800080007C1F7C008220822045
:1000600082208220001F7C1F82208220822082200A
:10007000001F7C0002000200020002007C1F7C1FA7
:1000800082208220822082207C1F7C00822082208D
:10009000822082207C1F0000F03F8C0082008C00B8
:1000A000F03F0000FE07001800200018FE070000C7
:1000B000FE1F0020001F0020FE1F0000FE3F000169
:1000C00080008000003F0000803F8000803F800073
:1000D000003F000000000030003000000000000081
:1000E0000000300630060000000080008000800024
:1000F0008000800080000000000000000000000080
:100100000000A81F2001DA028D14AFA1C80E0C0D4B
:10011000FF121112FF0E0A0DFF0E0A12FF0E0C1233
:10012000FF0E0B12FF0011241FBECFE5D2E0DEBF91
:10013000CDBF10E0A0E6B0E0E6E4F8E002C0059034
:100140000D92AA36B107D9F720E0AAE6B0E001C0C7
:100150001D92AE36B207E1F740D173C351CF282FBD
:10016000B89898E080E0880FC895BA98B0998160F7
:10017000BA9A9150C1F72111B89AC895BA98C89502
:10018000BA9A0895B89ABA98B898089598E087FFEF
:1001900002C0B89801C0B89ABA98C895BA9A880FA0
:1001A0009150A9F7C895B898BA98C895BA9A089581
:1001B0001F93CF93DF93E82FEE0FEE0FEE0F880F14
:1001C000880FCE2FC80F80E0E1DF80E0DFDFDCE0CA
:1001D000DC0F11E01C0FEC2FF0E0E25EFF4F84918A
:1001E000D5DFC12FD113F5CF80E0D0DF80E0DF91E4
:1001F000CF911F91CBCFB89ABA9AC8CFCF93DF9344
:10020000C82F80E8F8DF8C2FC1DFB898BA9881E852
:10021000F2DF81E0A4DFC82F80E0A1DFD0E0DC2F97
:10022000CC27C82BAFDFCE01DF91CF910895CF93BC
:10023000C82F88E7E0DF80E4A9DF80E0CA3018F04B
:100240008F5FCA50FBCFB4DF8C2FB2DFCF919ACF34
:100250000F931F93CF93DF938C0188E7CCDF80E46B
:1002600095DFC4E6D0E02991399180E002171307A9
:1002700020F08F5F021B130BF9CF9ADF80E0CA36A4
:10028000D80789F7DF91CF911F910F917BCFEF9224
:10029000FF920F931F93CF93DF938C0188E7ABDF1F
:1002A00080E474DF80E6E82E80E0F82EC0E0D0E045
:1002B000F701219131917F0180E00217130728F0A7
:1002C0008F5F021B130BD1E0F8CFD11103C0C430F4
:1002D00009F082E16DDFCF5FC53051F7DF91CF913B
:1002E0001F910F91FF90EF904DCFCF93DF93EC01D3
:1002F00088E781DF80E44ADFFE0184918F3F19F0B7
:1003000057DF2196F9CFDF91CF913CCFCF93C82F04
:1003100088E771DF80E43ADF8C2F4ADFCF9132CF5C
:10032000CF93DF93C82FD62F88E765DF80E02EDFDD
:1003300082E22CDF8D2F2ADF81E08D0F27DF8C2FCB
:100340008F7024DF8C2F82958F7080611FDF8D2F3F
:10035000806B1CDFDF91CF9115CFCF9360E080E001
:10036000DFDF88E748DF80E411DFC0E080E00EDFF8
:10037000C150E1F707DF62E080E0D2DF88E73BDFD2
:1003800080E404DF80E002DFC150E1F7CF91FACED4
:100390001F920F920FB60F9211248F939F93AF93DA
:1003A000BF9380916A0090916B00A0916C00B09116
:1003B0006D000196A11DB11D80936A0090936B00A2
:1003C000A0936C00B0936D00BF91AF919F918F91FE
:1003D0000F900FBE0F901F901895CF93DF93CDB75E
:1003E000DEB7A4970FB6F894DEBF0FBECDBF88E08E
:1003F00088BB8CE789BD82E08ABD83E083BF80E152
:1004000089BF789487B38A7F87BB88B38A7F88BB8C
:1004100080E8F1DE80E0BADE86E0B8DE87E6B6DEB0
:10042000B1DE80E8E8DE85E0B1DE84E1AFDE80E0C9
:10043000ADDEA8DE88E7DFDE80E0A8DE22E031E086
:100440003A8329830DE011E0E981FA8184919EDEEF
:1004500029813A812F5F3F4F3A832983021713077F
:1004600099F790DE7ADFF89440906A0050906B0024
:1004700060906C0070906D00789431E03CA31BA2FA
:100480001D8A1E8A1F8A188E19821A821B821C825C
:10049000198A1A8A1B8A1C8A188A1F868FEF9FEF77
:1004A0009E878D871C861B86AFEFBFEFBA87A98713
:1004B00018861F82EFEFFFEFFE83ED8338EE832E69
:1004C00033E0932EA12CB12C82E098DE969587958F
:1004D0001C01FCEF2F2284E091DE8C0197FF02C00B
:1004E00000E010E0A80160E070E0C101A0E0B0E031
:1004F000498F5A8F6B8F7C8F9A01AB01BC01CD0164
:1005000051D1A50194017BD169017A013E8F2D8FD4
:10051000F89480916A0090916B00A0916C00B0916A
:100520006D008F8F98A3A9A3BAA378948419950915
:10053000A609B7092C013D0189899A89AB89BC8933
:10054000840D951DA61DB71D898B9A8BAB8BBC8B1B
:10055000A3019201698D7A8D8B8D9C8D23D120E131
:100560003EE040E050E04BD189819A81AB81BC8173
:10057000820F931FA41FB51F89839A83AB83BC830B
:10058000C701B60188279927A30192010BD120E169
:100590003EE040E050E033D18D899E89AF89B88D2F
:1005A000820F931FA41FB51F8D8B9E8BAF8BB88FAF
:1005B000AD81BE812A163B0610F43E822D82EF816A
:1005C000F885E215F30510F438862F8229853A85DF
:1005D0000217130710F41A8709878B859C858017EB
:1005E000910710F41C870B87AD85BE85ED8DFE8DC0
:1005F000EA17FB0710F4DE86CD862F8538898D8DAE
:100600009E8D2817390710F4D88ACF86B3990DC06C
:100610009CA191110CC0ABA1AF5FABA3A53008F0BA
:100620001BA29BDEB1E0BCA304C01CA202C0E1E09F
:10063000ECA3FBA1F23009F46DC020F5FF2309F40F
:1006400048C0F13009F0A0C060E080E069DE8D8133
:100650009E811DDE81E191E048DE8F81988517DE65
:1006600081E291E042DE62E080E05ADE89859A858F
:100670000EDE81E191E039DE8B859C8508DE89E123
:1006800091E056C02BA1233009F454C0243009F066
:100690007BC069897A898B899C89A5019401AFD037
:1006A000890161E080E23CDEC80160E17EE093D038
:1006B0008C01862FBCDD80E129DEC8016CE370E08F
:1006C0008AD0182F862FB3DD80E120DE812FAFDDA9
:1006D0005BC060E080E024DEC101D9DD81E291E011
:1006E00004DEC601D4DD8DE191E0FFDD62E080E053
:1006F00017DEC801CCDD89E191E0F7DD69817A81FF
:100700008B819C81A50194017AD0C901C0DD85E16E
:1007100091E00EC061E080E003DE8D859E85B7DD4F
:1007200081E191E0E2DD8F859889B1DD8DE191E095
:10073000DCDD2AC060E080E1F3DD69817A818B81B4
:100740009C81A50194015BD06B017C01C9019FDDF7
:100750008FE0DCDDC6017CDD85E191E0C6DD62E095
:1007600080E1DEDD6D897E898F89988DA5019401F8
:1007700046D06B017C01C9018ADD8FE0C7DDC6016F
:1007800067DD8DE091E0D4CF3FEF80E792E031501C
:1007900080409040E1F700C000004F8C58A069A055
:1007A0007AA092CEEE27FF27AA27BB2708C0A20F68
:1007B000B31FE41FF51F220F331F441F551F9695CB
:1007C00087957795679598F37040A9F7009799F703
:1007D000BD01CF010895AA1BBB1B51E107C0AA1F91
:1007E000BB1FA617B70710F0A61BB70B881F991FD2
:1007F0005A95A9F780959095BC01CD010895A1E285
:100800001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F8A
:10081000FF1FA217B307E407F50720F0A21BB30BD5
:10082000E40BF50B661F771F881F991F1A9469F751
:1008300060957095809590959B01AC01BD01CF01AD
:060840000895F894FFCFBB
:0A0846001027E80364000A00010017
:00000001FF