From 39787f73e71f1258bece67b61086fe7e095cbdfa Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Tue, 26 May 2015 14:50:37 +1000 Subject: [PATCH 01/96] Changed isrs.s with update from Rick Kimball to fix issue with hardware timers when not using the --whole-archive flag in the build flags. also changed platform.txt to remove --whole-archive --- .../maple/libmaple/stm32f1/performance/isrs.S | 17 ++++++++--------- STM32F1/platform.txt | 4 ++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S b/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S index c638078..9252b0b 100644 --- a/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S +++ b/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S @@ -163,15 +163,14 @@ __default_handler: .weak __irq_tim1_cc .globl __irq_tim1_cc .set __irq_tim1_cc, __default_handler - .weak __irq_tim2 - .globl __irq_tim2 - .set __irq_tim2, __default_handler - .weak __irq_tim3 - .globl __irq_tim3 - .set __irq_tim3, __default_handler - .weak __irq_tim4 - .globl __irq_tim4 - .set __irq_tim4, __default_handler + + .weakref __irq_tim2, __default_handler + .globl __irq_tim2 + .weakref __irq_tim3, __default_handler + .globl __irq_tim3 + .weakref __irq_tim4, __default_handler + .globl __irq_tim4 + .weak __irq_i2c1_ev .globl __irq_i2c1_ev .set __irq_i2c1_ev, __default_handler diff --git a/STM32F1/platform.txt b/STM32F1/platform.txt index 1ac7447..f9979c9 100644 --- a/STM32F1/platform.txt +++ b/STM32F1/platform.txt @@ -91,8 +91,8 @@ recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.S.flags} -mcpu={b recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{build.path}/{archive_file}" "{object_file}" ## Combine gc-sections, archives, and objects -#recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group {object_files} "{build.path}/{archive_file}" -Wl,--end-group -recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group {object_files} -Wl,--whole-archive "{build.path}/{archive_file}" -Wl,--no-whole-archive -Wl,--end-group +recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group {object_files} "{build.path}/{archive_file}" -Wl,--end-group +#recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group {object_files} -Wl,--whole-archive "{build.path}/{archive_file}" -Wl,--no-whole-archive -Wl,--end-group ## Create eeprom recipe.objcopy.eep.pattern= From 157391d608a1eb99d31b1a007c6b126fcc011234 Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Wed, 27 May 2015 14:51:43 +0300 Subject: [PATCH 02/96] Added video demonstration of the VS1003B_STM library. --- STM32F1/libraries/Serasidis_VS1003B_STM/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/README.md b/STM32F1/libraries/Serasidis_VS1003B_STM/README.md index 47e24a9..2bb7d1b 100644 --- a/STM32F1/libraries/Serasidis_VS1003B_STM/README.md +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/README.md @@ -2,3 +2,8 @@ Description --- That library is for VS1003B / VS10053B WAV/MP3/AAC audio decoder. The library has been ported to work with STM32 micro-controllers. + +A short Youtube video demonstration of the library can be found [here][A]. +In that video I used an **STM32F103C8T** development board and a **VS1053B** mp3 decoder module. + +[A]:https://www.youtube.com/watch?v=oTPFkK0scAI From 39b200982a1d5f90be3cab207eee220bbe522a45 Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Thu, 28 May 2015 15:31:06 +1000 Subject: [PATCH 03/96] Added generic STM32F103RC support and started work on generic STM32F103R --- STM32F1/boards.txt | 21 +++++++++++++--- .../generic_stm32f103r/ld/stm32f103rb.ld | 18 ++++++++++++++ .../ld/stm32f103rb_bootloader.ld | 17 +++++++++++++ .../generic_stm32f103r/ld/stm32f103rc.ld | 18 ++++++++++++++ .../ld/stm32f103rc_bootloader.ld | 18 ++++++++++++++ .../ld/stm32f103re-bootloader.ld | 24 +++---------------- .../generic_stm32f103r/ld/stm32f103re.ld | 20 +--------------- 7 files changed, 93 insertions(+), 43 deletions(-) create mode 100644 STM32F1/variants/generic_stm32f103r/ld/stm32f103rb.ld create mode 100644 STM32F1/variants/generic_stm32f103r/ld/stm32f103rb_bootloader.ld create mode 100644 STM32F1/variants/generic_stm32f103r/ld/stm32f103rc.ld create mode 100644 STM32F1/variants/generic_stm32f103r/ld/stm32f103rc_bootloader.ld diff --git a/STM32F1/boards.txt b/STM32F1/boards.txt index 1a63831..8a3682e 100644 --- a/STM32F1/boards.txt +++ b/STM32F1/boards.txt @@ -211,11 +211,26 @@ genericSTM32F103R.upload.use_1200bps_touch=false genericSTM32F103R.upload.file_type=bin genericSTM32F103R.upload.auto_reset=true + +#genericSTM32F103R.menu.device_variant.STM32F103RB=STM32F103RB +#genericSTM32F103R.menu.device_variant.STM32F103RB.build.cpu_flags=-DMCU_STM32F103RB +#genericSTM32F103R.menu.device_variant.STM32F103RB.upload.maximum_size=131072 +#genericSTM32F103R.menu.device_variant.STM32F103RB.upload.ram.maximum_size=20480 +#genericSTM32F103R.menu.device_variant.STM32F103RB.upload.flash.maximum_size=131072 +#genericSTM32F103R.menu.device_variant.STM32F103RB.build.ldscript=ld/stm32f103rb.ld + +genericSTM32F103R.menu.device_variant.STM32F103RC=STM32F103RC +genericSTM32F103R.menu.device_variant.STM32F103RC.build.cpu_flags=-DMCU_STM32F103RC +genericSTM32F103R.menu.device_variant.STM32F103RC.upload.maximum_size=262144 +genericSTM32F103R.menu.device_variant.STM32F103RC.upload.ram.maximum_size=49152 +genericSTM32F103R.menu.device_variant.STM32F103RC.upload.flash.maximum_size=262144 +genericSTM32F103R.menu.device_variant.STM32F103RC.build.ldscript=ld/stm32f103rc.ld + genericSTM32F103R.menu.device_variant.STM32F103RE=STM32F103RE genericSTM32F103R.menu.device_variant.STM32F103RE.build.cpu_flags=-DMCU_STM32F103RE -genericSTM32F103R.menu.device_variant.STM32F103RE.upload.maximum_size=492000 -genericSTM32F103R.menu.device_variant.STM32F103RE.upload.ram.maximum_size=61000 -genericSTM32F103R.menu.device_variant.STM32F103RE.upload.flash.maximum_size=492000 +genericSTM32F103R.menu.device_variant.STM32F103RE.upload.maximum_size=524288 +genericSTM32F103R.menu.device_variant.STM32F103RE.upload.ram.maximum_size=65536 +genericSTM32F103R.menu.device_variant.STM32F103RE.upload.flash.maximum_size=524288 genericSTM32F103R.menu.device_variant.STM32F103RE.build.ldscript=ld/stm32f103re.ld diff --git a/STM32F1/variants/generic_stm32f103r/ld/stm32f103rb.ld b/STM32F1/variants/generic_stm32f103r/ld/stm32f103rb.ld new file mode 100644 index 0000000..9c0d19b --- /dev/null +++ b/STM32F1/variants/generic_stm32f103r/ld/stm32f103rb.ld @@ -0,0 +1,18 @@ +/* + * Linker script for Generic STM32F103RB boards. + */ +MEMORY +{ + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K + rom (rx) : ORIGIN = 0x08000000, LENGTH = 128K +} + + +/* Provide memory region aliases for common.inc */ +REGION_ALIAS("REGION_TEXT", rom); +REGION_ALIAS("REGION_DATA", ram); +REGION_ALIAS("REGION_BSS", ram); +REGION_ALIAS("REGION_RODATA", rom); + +/* Let common.inc handle the real work. */ +INCLUDE common.inc diff --git a/STM32F1/variants/generic_stm32f103r/ld/stm32f103rb_bootloader.ld b/STM32F1/variants/generic_stm32f103r/ld/stm32f103rb_bootloader.ld new file mode 100644 index 0000000..d045db9 --- /dev/null +++ b/STM32F1/variants/generic_stm32f103r/ld/stm32f103rb_bootloader.ld @@ -0,0 +1,17 @@ +/* + * Linker script for Generic STM32F103RB boards, using the generic bootloader (which takes the lower 8k of memory) + */ +MEMORY +{ + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K + rom (rx) : ORIGIN = 0x08002000, LENGTH = 120K +} + +/* Provide memory region aliases for common.inc */ +REGION_ALIAS("REGION_TEXT", rom); +REGION_ALIAS("REGION_DATA", ram); +REGION_ALIAS("REGION_BSS", ram); +REGION_ALIAS("REGION_RODATA", rom); + +/* Let common.inc handle the real work. */ +INCLUDE common.inc diff --git a/STM32F1/variants/generic_stm32f103r/ld/stm32f103rc.ld b/STM32F1/variants/generic_stm32f103r/ld/stm32f103rc.ld new file mode 100644 index 0000000..016d59d --- /dev/null +++ b/STM32F1/variants/generic_stm32f103r/ld/stm32f103rc.ld @@ -0,0 +1,18 @@ +/* + * Linker script for Generic STM32F103RC boards. + */ +MEMORY +{ + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K + rom (rx) : ORIGIN = 0x08000000, LENGTH = 256K +} + + +/* Provide memory region aliases for common.inc */ +REGION_ALIAS("REGION_TEXT", rom); +REGION_ALIAS("REGION_DATA", ram); +REGION_ALIAS("REGION_BSS", ram); +REGION_ALIAS("REGION_RODATA", rom); + +/* Let common.inc handle the real work. */ +INCLUDE common.inc diff --git a/STM32F1/variants/generic_stm32f103r/ld/stm32f103rc_bootloader.ld b/STM32F1/variants/generic_stm32f103r/ld/stm32f103rc_bootloader.ld new file mode 100644 index 0000000..00b811b --- /dev/null +++ b/STM32F1/variants/generic_stm32f103r/ld/stm32f103rc_bootloader.ld @@ -0,0 +1,18 @@ +/* + * Linker script for Generic STM32F103RC boards, using the generic bootloader (which takes the lower 8k of memory) + */ + +MEMORY +{ + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K + rom (rx) : ORIGIN = 0x08002000, LENGTH = 248K +} + +/* Provide memory region aliases for common.inc */ +REGION_ALIAS("REGION_TEXT", rom); +REGION_ALIAS("REGION_DATA", ram); +REGION_ALIAS("REGION_BSS", ram); +REGION_ALIAS("REGION_RODATA", rom); + +/* Let common.inc handle the real work. */ +INCLUDE common.inc diff --git a/STM32F1/variants/generic_stm32f103r/ld/stm32f103re-bootloader.ld b/STM32F1/variants/generic_stm32f103r/ld/stm32f103re-bootloader.ld index dd89420..ca56532 100644 --- a/STM32F1/variants/generic_stm32f103r/ld/stm32f103re-bootloader.ld +++ b/STM32F1/variants/generic_stm32f103r/ld/stm32f103re-bootloader.ld @@ -1,28 +1,10 @@ /* - * libmaple linker script for "JTAG" builds. - * - * A "JTAG" build puts .text (and .rodata) in Flash, and - * .data/.bss/heap (of course) in SRAM, but links starting at the - * Flash and SRAM starting addresses (0x08000000 and 0x20000000 - * respectively). This will wipe out a Maple bootloader if there's one - * on the board, so only use this if you know what you're doing. - * - * Of course, a "JTAG" build is perfectly usable for upload over SWD, - * the system memory bootloader, etc. The name is just a historical - * artifact. - */ - -/* - * This pulls in the appropriate MEMORY declaration from the right - * subdirectory of stm32/mem/ (the environment must call ld with the - * right include directory flags to make this happen). Boards can also - * use this file to use any of libmaple's memory-related hooks (like - * where the heap should live). + * Linker script for Generic STM32F103RE boards, using the generic bootloader (which takes the lower 8k of memory) */ MEMORY { -ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K -rom (rx) : ORIGIN = 0x08002000, LENGTH = 504K + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K + rom (rx) : ORIGIN = 0x08002000, LENGTH = 504K } diff --git a/STM32F1/variants/generic_stm32f103r/ld/stm32f103re.ld b/STM32F1/variants/generic_stm32f103r/ld/stm32f103re.ld index 8fa78e1..52abb5a 100644 --- a/STM32F1/variants/generic_stm32f103r/ld/stm32f103re.ld +++ b/STM32F1/variants/generic_stm32f103r/ld/stm32f103re.ld @@ -1,23 +1,5 @@ /* - * libmaple linker script for "JTAG" builds. - * - * A "JTAG" build puts .text (and .rodata) in Flash, and - * .data/.bss/heap (of course) in SRAM, but links starting at the - * Flash and SRAM starting addresses (0x08000000 and 0x20000000 - * respectively). This will wipe out a Maple bootloader if there's one - * on the board, so only use this if you know what you're doing. - * - * Of course, a "JTAG" build is perfectly usable for upload over SWD, - * the system memory bootloader, etc. The name is just a historical - * artifact. - */ - -/* - * This pulls in the appropriate MEMORY declaration from the right - * subdirectory of stm32/mem/ (the environment must call ld with the - * right include directory flags to make this happen). Boards can also - * use this file to use any of libmaple's memory-related hooks (like - * where the heap should live). + * Linker script for Generic STM32F103RE boards. */ MEMORY { From a1fdae2817dec960b37b6cdc51c8cb45375214cd Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Thu, 28 May 2015 17:38:59 +1000 Subject: [PATCH 04/96] Made changes for Nucleo F103RB and Generic STM32F103C . Note this commit only works with these 2 boards, on all others Serial will not compile --- STM32F1/cores/maple/HardwareSerial.cpp | 96 ++++++++++--------- STM32F1/cores/maple/HardwareSerial.h | 14 +++ STM32F1/variants/generic_stm32f103c/board.cpp | 28 ++++++ STM32F1/variants/nucleo_f103rb/board.cpp | 32 ++++++- 4 files changed, 123 insertions(+), 47 deletions(-) diff --git a/STM32F1/cores/maple/HardwareSerial.cpp b/STM32F1/cores/maple/HardwareSerial.cpp index bb46edd..4cd67c3 100644 --- a/STM32F1/cores/maple/HardwareSerial.cpp +++ b/STM32F1/cores/maple/HardwareSerial.cpp @@ -37,54 +37,58 @@ #include #include -#define DEFINE_HWSERIAL(name, n) \ - HardwareSerial name(USART##n, \ - BOARD_USART##n##_TX_PIN, \ - BOARD_USART##n##_RX_PIN) +#if 0 -#define DEFINE_HWSERIAL_UART(name, n) \ - HardwareSerial name(UART##n, \ - BOARD_USART##n##_TX_PIN, \ - BOARD_USART##n##_RX_PIN) - -#ifdef SERIAL_USB - #if BOARD_HAVE_USART1 - DEFINE_HWSERIAL(Serial1, 1); - #endif - #if BOARD_HAVE_USART2 - DEFINE_HWSERIAL(Serial2, 2); - #endif - #if BOARD_HAVE_USART3 - DEFINE_HWSERIAL(Serial3, 3); - #endif - #if BOARD_HAVE_UART4 - DEFINE_HWSERIAL_UART(Serial4, 4); - #endif - #if BOARD_HAVE_UART5 - DEFINE_HWSERIAL_UART(Serial5, 5); - #endif - #if BOARD_HAVE_USART6 - DEFINE_HWSERIAL_UART(Serial6, 6); - #endif -#else - #if BOARD_HAVE_USART1 - DEFINE_HWSERIAL(Serial, 1); - #endif - #if BOARD_HAVE_USART2 - DEFINE_HWSERIAL(Serial1, 2); - #endif - #if BOARD_HAVE_USART3 - DEFINE_HWSERIAL(Serial2, 3); - #endif - #if BOARD_HAVE_UART4 - DEFINE_HWSERIAL_UART(Serial3, 4); - #endif - #if BOARD_HAVE_UART5 - DEFINE_HWSERIAL_UART(Serial4, 5); - #endif - #if BOARD_HAVE_USART6 - DEFINE_HWSERIAL_UART(Serial5, 6); + #define DEFINE_HWSERIAL(name, n) \ + HardwareSerial name(USART##n, \ + BOARD_USART##n##_TX_PIN, \ + BOARD_USART##n##_RX_PIN) + + #define DEFINE_HWSERIAL_UART(name, n) \ + HardwareSerial name(UART##n, \ + BOARD_USART##n##_TX_PIN, \ + BOARD_USART##n##_RX_PIN) + + #ifdef SERIAL_USB + #if BOARD_HAVE_USART1 + DEFINE_HWSERIAL(Serial1, 1); + #endif + #if BOARD_HAVE_USART2 + DEFINE_HWSERIAL(Serial2, 2); + #endif + #if BOARD_HAVE_USART3 + DEFINE_HWSERIAL(Serial3, 3); + #endif + #if BOARD_HAVE_UART4 + DEFINE_HWSERIAL_UART(Serial4, 4); + #endif + #if BOARD_HAVE_UART5 + DEFINE_HWSERIAL_UART(Serial5, 5); + #endif + #if BOARD_HAVE_USART6 + DEFINE_HWSERIAL_UART(Serial6, 6); + #endif + #else + #if BOARD_HAVE_USART1 + DEFINE_HWSERIAL(Serial, 1); + #endif + #if BOARD_HAVE_USART2 + DEFINE_HWSERIAL(Serial1, 2); + #endif + #if BOARD_HAVE_USART3 + DEFINE_HWSERIAL(Serial2, 3); + #endif + #if BOARD_HAVE_UART4 + DEFINE_HWSERIAL_UART(Serial3, 4); + #endif + #if BOARD_HAVE_UART5 + DEFINE_HWSERIAL_UART(Serial4, 5); + #endif + #if BOARD_HAVE_USART6 + DEFINE_HWSERIAL_UART(Serial5, 6); + #endif #endif + #endif HardwareSerial::HardwareSerial(usart_dev *usart_device, uint8 tx_pin, diff --git a/STM32F1/cores/maple/HardwareSerial.h b/STM32F1/cores/maple/HardwareSerial.h index 199b45f..e4f363c 100644 --- a/STM32F1/cores/maple/HardwareSerial.h +++ b/STM32F1/cores/maple/HardwareSerial.h @@ -100,6 +100,20 @@ struct usart_dev; #define SERIAL_9O2 0B00101011 +/* Roger Clark + * Moved macros from hardwareSerial.cpp + */ + +#define DEFINE_HWSERIAL(name, n) \ + HardwareSerial name(USART##n, \ + BOARD_USART##n##_TX_PIN, \ + BOARD_USART##n##_RX_PIN) + +#define DEFINE_HWSERIAL_UART(name, n) \ + HardwareSerial name(UART##n, \ + BOARD_USART##n##_TX_PIN, \ + BOARD_USART##n##_RX_PIN) + /* Roger clark. Changed class inheritance from Print to Stream. * Also added new functions for peek() and availableForWrite() diff --git a/STM32F1/variants/generic_stm32f103c/board.cpp b/STM32F1/variants/generic_stm32f103c/board.cpp index 1c6a570..d19d965 100644 --- a/STM32F1/variants/generic_stm32f103c/board.cpp +++ b/STM32F1/variants/generic_stm32f103c/board.cpp @@ -35,6 +35,10 @@ #include #include +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + #include #include @@ -109,3 +113,27 @@ extern const uint8 boardADCPins[BOARD_NR_ADC_PINS] __FLASH__ = { extern const uint8 boardUsedPins[BOARD_NR_USED_PINS] __FLASH__ = { USB_DP, USB_DM }; + + +/* + * Roger Clark + * + * 2015/05/28 + * + * Moved definitions for Hardware Serial devices from HardwareSerial.cpp so that each board can define which Arduino "Serial" instance + * Maps to which hardware serial port on the microprocessor + */ + +#ifdef SERIAL_USB + DEFINE_HWSERIAL(Serial1, 1); + + DEFINE_HWSERIAL(Serial2, 2); + + DEFINE_HWSERIAL(Serial3, 3); +#else + DEFINE_HWSERIAL(Serial, 1); + + DEFINE_HWSERIAL(Serial1, 2); + + DEFINE_HWSERIAL(Serial2, 3); +#endif diff --git a/STM32F1/variants/nucleo_f103rb/board.cpp b/STM32F1/variants/nucleo_f103rb/board.cpp index 183a22e..0d63eed 100644 --- a/STM32F1/variants/nucleo_f103rb/board.cpp +++ b/STM32F1/variants/nucleo_f103rb/board.cpp @@ -47,6 +47,11 @@ #include #include +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + + #include #include // boardInit(): NUCLEO rely on some remapping @@ -230,4 +235,29 @@ MOSI alternate functions on the GPIO ports. 1: Remap (NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5) -*/ \ No newline at end of file +*/ + + + +/* + * Roger Clark + * + * 2015/05/28 + * + * Moved definitions for Hardware Serial devices from HardwareSerial.cpp so that each board can define which Arduino "Serial" instance + * Maps to which hardware serial port on the microprocessor + */ + +#ifdef SERIAL_USB + DEFINE_HWSERIAL(Serial1, 2); + + DEFINE_HWSERIAL(Serial2, 1); + + DEFINE_HWSERIAL(Serial3, 3); +#else + DEFINE_HWSERIAL(Serial, 2);// Use HW Serial 2 as "Serial" + + DEFINE_HWSERIAL(Serial1, 1); + + DEFINE_HWSERIAL(Serial2, 3); +#endif \ No newline at end of file From 30bcd528ef33ca471383edbc9c7882ed1a56519c Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 15:17:45 +0300 Subject: [PATCH 05/96] Create README.md --- .../Serasidis_EtherCard_STM/README.md | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/README.md diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/README.md b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md new file mode 100644 index 0000000..2dd61e4 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md @@ -0,0 +1,46 @@ +# EtherCard + +**EtherCard** is a driver for the ENC28J60 chip, compatible with Arduino IDE. +Adapted and extended from code written by Guido Socher and Pascal Stang. + +License: GPL2 + +The documentation for this library is at http://jeelabs.net/pub/docs/ethercard/. + +## Library Installation + +1. Download the ZIP file from https://github.com/jcw/ethercard/archive/master.zip +2. From the Arduino IDE: Sketch -> Import Library... -> Add Library... +3. Restart the Arduino IDE to see the new "EtherCard" library with examples + +See the comments in the example sketches for details about how to try them out. + +## Physical Installation + +### PIN Connections (Using Arduino UNO): + + VCC - 3.3V + GND - GND + SCK - Pin 13 + SO - Pin 12 + SI - Pin 11 + CS - Pin 8 # Selectable with the ether.begin() function + +### PIN Connections using an Arduino Mega + + VCC - 3.3V + GND - GND + SCK - Pin 52 + SO - Pin 50 + SI - Pin 51 + CS - Pin 53 # Selectable with the ether.begin() function + # The default CS pin defaults to 8, so you have to set it on a mega: + ether.begin(sizeof Ethernet::buffer, mymac, 53) + +## Support + +For questions and help, see the [forums][F] (at JeeLabs.net). +The issue tracker has been moved back to [Github][I] again. + +[F]: http://jeenet.net/projects/cafe/boards +[I]: https://github.com/jcw/ethercard/issues From 7a087b3e241c99a287106fdd364e261072cbf1dc Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 15:19:53 +0300 Subject: [PATCH 06/96] Delete README.md --- .../Serasidis_EtherCard_STM/README.md | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/README.md diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/README.md b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md deleted file mode 100644 index 2dd61e4..0000000 --- a/STM32F1/libraries/Serasidis_EtherCard_STM/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# EtherCard - -**EtherCard** is a driver for the ENC28J60 chip, compatible with Arduino IDE. -Adapted and extended from code written by Guido Socher and Pascal Stang. - -License: GPL2 - -The documentation for this library is at http://jeelabs.net/pub/docs/ethercard/. - -## Library Installation - -1. Download the ZIP file from https://github.com/jcw/ethercard/archive/master.zip -2. From the Arduino IDE: Sketch -> Import Library... -> Add Library... -3. Restart the Arduino IDE to see the new "EtherCard" library with examples - -See the comments in the example sketches for details about how to try them out. - -## Physical Installation - -### PIN Connections (Using Arduino UNO): - - VCC - 3.3V - GND - GND - SCK - Pin 13 - SO - Pin 12 - SI - Pin 11 - CS - Pin 8 # Selectable with the ether.begin() function - -### PIN Connections using an Arduino Mega - - VCC - 3.3V - GND - GND - SCK - Pin 52 - SO - Pin 50 - SI - Pin 51 - CS - Pin 53 # Selectable with the ether.begin() function - # The default CS pin defaults to 8, so you have to set it on a mega: - ether.begin(sizeof Ethernet::buffer, mymac, 53) - -## Support - -For questions and help, see the [forums][F] (at JeeLabs.net). -The issue tracker has been moved back to [Github][I] again. - -[F]: http://jeenet.net/projects/cafe/boards -[I]: https://github.com/jcw/ethercard/issues From c865aefe5942b6569c9aabc788ffbe386194b572 Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:22:52 +0300 Subject: [PATCH 07/96] Revert "Delete README.md" This reverts commit 7a087b3e241c99a287106fdd364e261072cbf1dc. --- .../Serasidis_EtherCard_STM/README.md | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/README.md diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/README.md b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md new file mode 100644 index 0000000..2dd61e4 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md @@ -0,0 +1,46 @@ +# EtherCard + +**EtherCard** is a driver for the ENC28J60 chip, compatible with Arduino IDE. +Adapted and extended from code written by Guido Socher and Pascal Stang. + +License: GPL2 + +The documentation for this library is at http://jeelabs.net/pub/docs/ethercard/. + +## Library Installation + +1. Download the ZIP file from https://github.com/jcw/ethercard/archive/master.zip +2. From the Arduino IDE: Sketch -> Import Library... -> Add Library... +3. Restart the Arduino IDE to see the new "EtherCard" library with examples + +See the comments in the example sketches for details about how to try them out. + +## Physical Installation + +### PIN Connections (Using Arduino UNO): + + VCC - 3.3V + GND - GND + SCK - Pin 13 + SO - Pin 12 + SI - Pin 11 + CS - Pin 8 # Selectable with the ether.begin() function + +### PIN Connections using an Arduino Mega + + VCC - 3.3V + GND - GND + SCK - Pin 52 + SO - Pin 50 + SI - Pin 51 + CS - Pin 53 # Selectable with the ether.begin() function + # The default CS pin defaults to 8, so you have to set it on a mega: + ether.begin(sizeof Ethernet::buffer, mymac, 53) + +## Support + +For questions and help, see the [forums][F] (at JeeLabs.net). +The issue tracker has been moved back to [Github][I] again. + +[F]: http://jeenet.net/projects/cafe/boards +[I]: https://github.com/jcw/ethercard/issues From 8ab2afbe84f89f134229ad5eff8e2c2771b426ac Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:26:22 +0300 Subject: [PATCH 08/96] Library properties --- .../libraries/Serasidis_EtherCard_STM/library.properties | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/library.properties diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/library.properties b/STM32F1/libraries/Serasidis_EtherCard_STM/library.properties new file mode 100644 index 0000000..403657b --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/library.properties @@ -0,0 +1,8 @@ +name=Serasidis_EtherCard_STM +version=1.0 +author=(Original) Jean-Claude Wippler :: Ported to STM32 by Vassilis Serasidis. +email= +sentence=ENC28J60 Ethernet module library +paragraph=Ethernet module library for STM32F1 +url=https://github.com/Serasidis/STM32duino/tree/master/libraries/Serasidis_EtherCard_STM +architectures=STM32F1 From 44b9f888d721d6d4bb8c36fc46e12f07ce176712 Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:26:41 +0300 Subject: [PATCH 09/96] Keywords of the library --- .../Serasidis_EtherCard_STM/keywords.txt | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/keywords.txt diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/keywords.txt b/STM32F1/libraries/Serasidis_EtherCard_STM/keywords.txt new file mode 100644 index 0000000..ca73a6e --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/keywords.txt @@ -0,0 +1,53 @@ +####################################### +# Syntax Coloring Map EtherCard_STM +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +EtherCard_STM KEYWORD1 +ether KEYWORD1 +BufferFiller KEYWORD1 +Stash KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +emit_p KEYWORD2 +emit_raw KEYWORD2 +emit_raw_p KEYWORD2 +buffer KEYWORD2 +Ethernet KEYWORD2 +printIp KEYWORD2 +staticSetup KEYWORD2 +dhcpSetup KEYWORD2 +packetLoop KEYWORD2 +packetReceive KEYWORD2 +httpServerReply KEYWORD2 +browseUrl KEYWORD2 +memcpy_P KEYWORD2 +tcpOffset KEYWORD2 +tcpSend KEYWORD2 +tcpReply KEYWORD2 +dnsLookup KEYWORD2 +httpServerReply KEYWORD2 +sizeof KEYWORD2 +SerialPrint_P KEYWORD2 +copyIp KEYWORD2 +getIP_address KEYWORD2 +hisip KEYWORD2 +myip KEYWORD2 +gwip KEYWORD2 +mymask KEYWORD2 +dnsip KEYWORD2 +cleanup KEYWORD2 +freeCount KEYWORD2 +extract KEYWORD2 +save KEYWORD2 +size KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### +STATUS_ERROR LITERAL1 From dcaa115d0a26a7298958c326c15a1238299513ec Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:30:03 +0300 Subject: [PATCH 10/96] Present a "Will be back soon web page", as stand-in web server --- .../examples/JeeUdp/JeeUdp.ino | 320 +++++++ .../examples/SSDP/SSDP.ino | 145 ++++ .../examples/backSoon/backSoon.ino | 84 ++ .../examples/etherNode/etherNode.ino | 295 +++++++ .../examples/getDHCPandDNS/getDHCPandDNS.ino | 75 ++ .../examples/getStaticIP/getStaticIP.ino | 76 ++ .../examples/getViaDNS/getViaDNS.ino | 72 ++ .../examples/multipacket/multipacket.ino | 99 +++ .../examples/multipacketSD/multipacketSD.ino | 129 +++ .../examples/nanether/nanether.ino | 59 ++ .../examples/noipClient/noipClient.ino | 293 +++++++ .../examples/pings/pings.ino | 96 +++ .../examples/rbbb_server/rbbb_server.ino | 72 ++ .../examples/stashTest/stashTest.ino | 119 +++ .../examples/testDHCP/testDHCP.ino | 60 ++ .../examples/twitter/twitter.ino | 85 ++ .../Java_ClientAndServer/UDPClient.java | 29 + .../Java_ClientAndServer/UDPserver.java | 39 + .../udpClientSendOnly/udpClientSendOnly.ino | 40 + .../examples/udpListener/udpListener.ino | 101 +++ .../examples/webClient/webClient.ino | 69 ++ .../examples/xively/xively.ino | 158 ++++ .../Serasidis_EtherCard_STM/src/Doxymods.css | 73 ++ .../src/EtherCard_STM.cpp | 433 ++++++++++ .../src/EtherCard_STM.h | 595 +++++++++++++ .../Serasidis_EtherCard_STM/src/dhcp.cpp | 397 +++++++++ .../Serasidis_EtherCard_STM/src/dns.cpp | 117 +++ .../Serasidis_EtherCard_STM/src/enc28j60.cpp | 624 ++++++++++++++ .../Serasidis_EtherCard_STM/src/enc28j60.h | 129 +++ .../Serasidis_EtherCard_STM/src/net.h | 123 +++ .../Serasidis_EtherCard_STM/src/tcpip.cpp | 803 ++++++++++++++++++ .../Serasidis_EtherCard_STM/src/udpserver.cpp | 73 ++ .../Serasidis_EtherCard_STM/src/webutil.cpp | 200 +++++ 33 files changed, 6082 insertions(+) create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/JeeUdp/JeeUdp.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/SSDP/SSDP.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/backSoon/backSoon.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/etherNode/etherNode.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/getDHCPandDNS/getDHCPandDNS.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/getStaticIP/getStaticIP.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/getViaDNS/getViaDNS.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacket/multipacket.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacketSD/multipacketSD.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/nanether/nanether.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/noipClient/noipClient.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/pings/pings.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/rbbb_server/rbbb_server.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/stashTest/stashTest.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/testDHCP/testDHCP.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/twitter/twitter.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPClient.java create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPserver.java create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/udpClientSendOnly.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpListener/udpListener.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/webClient/webClient.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/examples/xively/xively.ino create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/Doxymods.css create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.cpp create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.h create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/dhcp.cpp create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/dns.cpp create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.cpp create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.h create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/net.h create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/tcpip.cpp create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/udpserver.cpp create mode 100644 STM32F1/libraries/Serasidis_EtherCard_STM/src/webutil.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/JeeUdp/JeeUdp.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/JeeUdp/JeeUdp.ino new file mode 100644 index 0000000..f22c538 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/JeeUdp/JeeUdp.ino @@ -0,0 +1,320 @@ +// Collect RF12 packets and send them on as UDP collectd packets on Ethernet. +// 2010-05-20 http://opensource.org/licenses/mit-license.php + +// This sketch is derived from RF12eth.pde (and etherNode.ino): +// May 2010, Andras Tucsni, http://opensource.org/licenses/mit-license.php + +#include +#include +#include + +#define DEBUG 1 // set to 1 to display free RAM on web page +#define SERIAL 1 // set to 1 to show incoming requests on serial port + +#define CONFIG_EEPROM_ADDR ((byte*) 0x10) + +// configuration, as stored in EEPROM +struct Config { + byte band; + byte group; + byte collect; + word port; + byte valid; // keep this as last byte +} config; + +// ethernet interface mac address - must be unique on your network +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +// buffer for an outgoing data packet +static byte outBuf[RF12_MAXDATA], outDest; +static char outCount = -1; + +// this buffer will be used to construct a collectd UDP packet +static byte collBuf [200], collPos; + +#define NUM_MESSAGES 3 // Number of messages saved in history +#define MESSAGE_TRUNC 15 // Truncate message payload to reduce memory use + +static BufferFiller bfill; // used as cursor while filling the buffer + +static byte history_rcvd[NUM_MESSAGES][MESSAGE_TRUNC+1]; //history record +static byte history_len[NUM_MESSAGES]; // # of RF12 messages+header in history +static byte next_msg; // pointer to next rf12rcvd line +static word msgs_rcvd; // total number of lines received modulo 10,000 + +byte Ethernet::buffer[700]; // tcp/ip send and receive buffer + +static void loadConfig () { + for (byte i = 0; i < sizeof config; ++i) + ((byte*) &config)[i] = eeprom_read_byte(CONFIG_EEPROM_ADDR + i); + if (config.valid != 253) { + config.valid = 253; + config.band = 8; + config.group = 1; + config.collect = 1; + config.port = 25827; + } + byte freq = config.band == 4 ? RF12_433MHZ : + config.band == 8 ? RF12_868MHZ : + RF12_915MHZ; + rf12_initialize(31, freq, config.group); +} + +static void saveConfig () { + for (byte i = 0; i < sizeof config; ++i) + eeprom_write_byte(CONFIG_EEPROM_ADDR + i, ((byte*) &config)[i]); +} + +#if DEBUG +static int freeRam () { +extern int __heap_start, *__brkval; +int v; +return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); +} +#endif + +void setup (){ + Serial.begin(57600); + Serial.println("\n[JeeUdp]"); + loadConfig(); + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println( "Failed to access Ethernet controller"); + if (!ether.dhcpSetup()) + Serial.println("DHCP failed"); + ether.printIp("IP: ", ether.myip); +} + +const char okHeader[] PROGMEM = + "HTTP/1.0 200 OK\r\n" + "Content-Type: text/html\r\n" + "Pragma: no-cache\r\n" +; + +static void homePage (BufferFiller& buf) { + word mhz = config.band == 4 ? 433 : config.band == 8 ? 868 : 915; + buf.emit_p(PSTR("$F\r\n" + "RF12 JeeUdp" + "

RF12 JeeUdp @ $D - RF12 @ $D.$D

" + "Configure - Send Packet" + "

Last $D messages:

" + "
"), okHeader, config.port, mhz, config.group, NUM_MESSAGES);
+  for (byte i = 0; i < NUM_MESSAGES; ++i) {
+    byte j = (next_msg + i) % NUM_MESSAGES;
+    if (history_len[j] > 0) {
+      word n = msgs_rcvd - NUM_MESSAGES + i;
+      buf.emit_p(PSTR("\n$D$D$D$D: OK"), // hack, to show leading zero's
+                          n/1000, (n/100) % 10, (n/10) % 10, n % 10);
+      for (byte k = 0; k < history_len[j]; ++k)
+        buf.emit_p(PSTR(" $D"), history_rcvd[j][k]);
+    }
+  }
+  long t = millis() / 1000;
+  word h = t / 3600;
+  byte m = (t / 60) % 60;
+  byte s = t % 60;
+  buf.emit_p(PSTR(
+    "
" + "Uptime is $D$D:$D$D:$D$D"), h/10, h%10, m/10, m%10, s/10, s%10); +#if DEBUG + buf.emit_p(PSTR(" ($D bytes free)"), freeRam()); +#endif +} + +static int getIntArg(const char* data, const char* key, int value =-1) { + char temp[10]; + if (ether.findKeyVal(data + 7, temp, sizeof temp, key) > 0) + value = atoi(temp); + return value; +} + +static void configPage (const char* data, BufferFiller& buf) { + // pick up submitted data, if present + if (data[6] == '?') { + byte b = getIntArg(data, "b", 8); + byte g = getIntArg(data, "g", 1); + byte c = getIntArg(data, "c", 0); + word p = getIntArg(data, "p", 25827); + if (1 <= g && g <= 250 && 1024 <= p && p <= 30000) { + // store values as new settings + config.band = b; + config.group = g; + config.collect = c; + config.port = p; + saveConfig(); + // re-init RF12 driver + loadConfig(); + // clear history + memset(history_len, 0, sizeof history_len); + // redirect to the home page + buf.emit_p(PSTR( + "HTTP/1.0 302 found\r\n" + "Location: /\r\n" + "\r\n")); + return; + } + } + // else show a configuration form + buf.emit_p(PSTR("$F\r\n" + "

Server node configuration

" + "
" + "

" + "Freq band (4, 8, or 9)
" + "Net group (1..250)
" + "Collect mode: " + "(don't send ACKs)

" + "UDP Port (1024..30000)" + "

" + "" + "
"), okHeader, config.band, config.group, + config.collect ? "CHECKED" : "", + config.port); +} + +static void sendPage (const char* data, BufferFiller& buf) { + // pick up submitted data, if present + const char* p = strstr(data, "b="); + byte d = getIntArg(data, "d"); + if (data[6] == '?' && p != 0 && 0 <= d && d <= 31) { + // prepare to send data as soon as possible in loop() + outDest = d & RF12_HDR_MASK ? RF12_HDR_DST | d : 0; + outCount = 0; + // convert the input string to a number of decimal data bytes in outBuf + ++p; + while (*p != 0 && *p != '&') { + outBuf[outCount] = 0; + while ('0' <= *++p && *p <= '9') + outBuf[outCount] = 10 * outBuf[outCount] + (*p - '0'); + ++outCount; + } +#if SERIAL + Serial.print("Send to "); + Serial.print(outDest, DEC); + Serial.print(':'); + for (byte i = 0; i < outCount; ++i) { + Serial.print(' '); + Serial.print(outBuf[i], DEC); + } + Serial.println(); +#endif + // redirect to home page + buf.emit_p(PSTR( + "HTTP/1.0 302 found\r\n" + "Location: /\r\n" + "\r\n")); + return; + } + // else show a send form + buf.emit_p(PSTR("$F\r\n" + "

Send a wireless data packet

" + "
" + "

" + "Data bytes (decimal)
" + "Destination node " + "(1..31, or 0 to broadcast)
" + "

" + "" + "
"), okHeader); +} + +static void collectTypeLen (word type, word len) { + len += 4; + collBuf[collPos++] = type >> 8; + collBuf[collPos++] = (byte) type; + collBuf[collPos++] = len >> 8; + collBuf[collPos++] = (byte) len; +} + +static void collectStr (word type, const char* data) { + word len = strlen(data) + 1; + collectTypeLen(type, len); + strcpy((char*) collBuf + collPos, data); + collPos += len; +} + +static void collectPayload (word type) { + // Copy the received RF12 data into a as many values as needed. + byte num = rf12_len / 8 + 1; // this many values will be needed + collectTypeLen(type, 2 + 9 * num); + collBuf[collPos++] = 0; + collBuf[collPos++] = num; + for (byte i = 0; i < num; ++i) + collBuf[collPos++] = 0; // counter + for (char i = 0; i < 8 * num; ++i) // include -1, i.e. the length byte + collBuf[collPos++] = i <= rf12_len ? rf12_data[i-1] : 0; +} + +static void forwardToUDP () { + static byte destIp[] = { 239,192,74,66 }; // UDP multicast address + char buf[10]; + + collPos = 0; + collectStr(0x0000, "JeeUdp"); + collectStr(0x0002, "RF12"); + word mhz = config.band == 4 ? 433 : config.band == 8 ? 868 : 915; + sprintf(buf, "%d.%d", mhz, config.group); + collectStr(0x0003, buf); + collectStr(0x0004, "OK"); + sprintf(buf, "%d", rf12_hdr); + collectStr(0x0005, buf); + collectPayload(0x0006); + + ether.sendUdp ((char*) collBuf, collPos, 23456, destIp, config.port); +#if SERIAL + Serial.println("UDP sent"); +#endif +} + +void loop (){ + word len = ether.packetReceive(); + word pos = ether.packetLoop(len); + // check if valid tcp data is received + if (pos) { + bfill = ether.tcpOffset(); + char* data = (char *) Ethernet::buffer + pos; +#if SERIAL + Serial.println(data); +#endif + // receive buf hasn't been clobbered by reply yet + if (strncmp("GET / ", data, 6) == 0) + homePage(bfill); + else if (strncmp("GET /c", data, 6) == 0) + configPage(data, bfill); + else if (strncmp("GET /s", data, 6) == 0) + sendPage(data, bfill); + else + bfill.emit_p(PSTR( + "HTTP/1.0 401 Unauthorized\r\n" + "Content-Type: text/html\r\n" + "\r\n" + "

401 Unauthorized

")); + ether.httpServerReply(bfill.position()); // send web page data + } + + // RFM12 loop runner, don't report acks + if (rf12_recvDone() && rf12_crc == 0 && (rf12_hdr & RF12_HDR_CTL) == 0) { + history_rcvd[next_msg][0] = rf12_hdr; + for (byte i = 0; i < rf12_len; ++i) + if (i < MESSAGE_TRUNC) + history_rcvd[next_msg][i+1] = rf12_data[i]; + history_len[next_msg] = rf12_len < MESSAGE_TRUNC ? rf12_len+1 + : MESSAGE_TRUNC+1; + next_msg = (next_msg + 1) % NUM_MESSAGES; + msgs_rcvd = (msgs_rcvd + 1) % 10000; + + if (RF12_WANTS_ACK && !config.collect) { +#if SERIAL + Serial.println(" -> ack"); +#endif + rf12_sendStart(RF12_ACK_REPLY, 0, 0); + } + + forwardToUDP(); + } + + // send a data packet out if requested + if (outCount >= 0 && rf12_canSend()) { + rf12_sendStart(outDest, outBuf, outCount, 1); + outCount = -1; + } +} + diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/SSDP/SSDP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/SSDP/SSDP.ino new file mode 100644 index 0000000..dd0778d --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/SSDP/SSDP.ino @@ -0,0 +1,145 @@ +#include |Mac adress| +#include + +const char SSDP_RESPONSE[] PROGMEM = "HTTP/1.1 200 OK\r\nCACHE-CONTROL: max-age=1200\r\nEXT:\r\nSERVER:Arduino\r\nST: upnp:rootdevice\r\nUSN: uuid:abcdefgh-7dec-11d0-a765-7499692d3040\r\nLOCATION: http://"; //dont forget our mac adress USN: uuid:abcdefgh-7dec-11d0-a765-Mac addr +const char SSDP_RESPONSE_XML[] PROGMEM = "/??\r\n\r\n"; // here is the adress of xml file /?? in this exemple but you could use another /upnp.xml\r\n\r\n +const char XML_DESCRIP[] PROGMEM = "HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\n\r\n\rurn:schemas-upnp-org:device:BinaryLight:1/ArduinoFredycpuhttp://fredycpu.pro1uuid:abcdefgh-7dec-11d0-a765-7499692d3040 "; +const char SSDP_NOTIFY[] PROGMEM = "NOTIFY * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nCACHE-CONTROL: max-age=1200\r\nNT: upnp:rootdevice\r\nUSN: uuid:abcdefga-7dec-11d0-a765-7499692d3040::upnp:rootdevice\r\nNTS: ssdp:alive\r\nSERVER: Arduino UPnP/1.0\r\nLOCATION: http://"; //dont forget our mac adress USN: uuid:abcdefgh-7dec-11d0-a765-Mac addr +// in XML_DESCRIP // urn:schemas-upnp-org:device:BinaryLight:1 // declare as home automation +// in XML_DESCRIP // Arduino // declare the name of the service here Arduino +// in XML_DESCRIP // / // adress of the page who would opened on service double click ,you could use http://ip but if you use dhcp it's better so and dont wase memory +// this is the entire protocol, but you can try to use SSDP_NOTIFY as SSDP_RESPONSE with most systems will work and you can free a bit of flash mem. +static byte myip[] = { + 192,168,1,204 }; +static byte gwip[] = { + 192,168,1,1 }; +static byte ssdp[] = { + 239,255,255,250 }; +static byte mymac[] = { + 0x74,0x99,0x69,0x2D,0x30,0x40 }; // if you change it you must update SSDP_RESPONSE and XML_DESCRIP +byte Ethernet::buffer[750]; // tcp ip send and receive buffer +unsigned long timer=9999; +const char pageA[] PROGMEM = +"HTTP/1.0 200 OK\r\n" +"Content-Type: text/html\r\n" +"\r\n" +"" +"" +"multipackets Test" +"" +"" +"Start here
" +"Image test
" +"

packet 1

" +"

" +"the first packet send " +"

" +; +const char pageB[] PROGMEM = +"

packet 2

" +"

" +"if you read this it mean it works" +"

" +; +const char pageC[] PROGMEM = +"

packet 3

" +"

" +"if you read this it mean it works" +"

" +; +const char pageD[] PROGMEM = +"

packet 4

" +"

" +"if you read this it mean it works" +"

" +; + +void setup(){ + ether.begin(sizeof Ethernet::buffer, mymac);// 53 for the mega ethernet shield and 10 for normal ethernet shield + ether.staticSetup(myip, gwip); + ENC28J60::disableMulticast(); //disable multicast filter means enable multicast reception + Serial.begin(57600); +} + +void loop(){ +wait: + word pos = ether.packetLoop(ether.packetReceive()); + // check if valid tcp data is received + if (pos) { + char* data = (char *) Ethernet::buffer + pos; + if (strncmp("GET / ", data, 6) == 0) { + ether.httpServerReplyAck(); // send ack to the request + memcpy_P(ether.tcpOffset(), pageA, sizeof pageA); // send first packet and not send the terminate flag + ether.httpServerReply_with_flags(sizeof pageA - 1,TCP_FLAGS_ACK_V); + memcpy_P(ether.tcpOffset(), pageB, sizeof pageB); // send second packet and not send the terminate flag + ether.httpServerReply_with_flags(sizeof pageB - 1,TCP_FLAGS_ACK_V); + memcpy_P(ether.tcpOffset(), pageC, sizeof pageC); // send thirdt packet and not send the terminate flag + ether.httpServerReply_with_flags(sizeof pageC - 1,TCP_FLAGS_ACK_V); + memcpy_P(ether.tcpOffset(), pageD, sizeof pageD); // send fourth packet and send the terminate flag + ether.httpServerReply_with_flags(sizeof pageD - 1,TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V); + goto wait; + } + if (strncmp("GET /??", data, 7) == 0) { // description of services (normaly an xml file but here .....) + ether.httpServerReplyAck(); + memcpy_P(Ethernet::buffer + TCP_OPTIONS_P,XML_DESCRIP, sizeof XML_DESCRIP); + ether.httpServerReply_with_flags(sizeof XML_DESCRIP - 1 ,TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V); + goto wait; + } + if (strncmp("M-SEARCH", data, 8) == 0) { // service discovery request comes here (udp protocol) + ssdpresp(); + goto wait; + } + } + if (((millis()-timer)>50000)||(timer>millis())) { + timer=millis(); + ssdpnotify(); + } +} +void ssdpresp() { //response to m-search + byte ip_dst[4]; + unsigned int port_dst=Ethernet::buffer[34]*256+Ethernet::buffer[35];//extract source port of request + for( int i=0; i<4;i++) { //extract source IP of request + ip_dst[i]=Ethernet::buffer[i+26]; + } + int udppos = UDP_DATA_P; + + EtherCard::udpPrepare(1900,ip_dst,port_dst); + memcpy_P(Ethernet::buffer + udppos, SSDP_RESPONSE, sizeof SSDP_RESPONSE); + udppos = udppos + sizeof SSDP_RESPONSE-1; + addip(udppos); +} + +void ssdpnotify() { //Notification + int udppos = UDP_DATA_P; + EtherCard::udpPrepare(1900,ssdp,1900); + memcpy_P(Ethernet::buffer + udppos, SSDP_NOTIFY, sizeof SSDP_NOTIFY); +udppos = udppos + sizeof SSDP_NOTIFY-1; +addip(udppos); +} + +void addip(int udppos) { // add current ip to the request and send it + int adr; + for(int i=0;i<4;i++) { // extract the current ip of arduino + adr = ether.myip[i]/100; + if (adr) { + Ethernet::buffer[udppos]=adr+48; + udppos++; + } + adr=(ether.myip[i]%100)/10; + if (adr) { + Ethernet::buffer[udppos]=adr+48; + udppos++; + } + adr=ether.myip[i]%10; + Ethernet::buffer[udppos]=adr+48; + udppos++; + Ethernet::buffer[udppos]=46; + udppos++; //"." + } + udppos--;//erase the last point + memcpy_P(Ethernet::buffer + udppos,SSDP_RESPONSE_XML,sizeof SSDP_RESPONSE_XML); + udppos = udppos + sizeof SSDP_RESPONSE_XML; + udppos--; + EtherCard::udpTransmit(udppos-UDP_DATA_P); // send all to the computer who make the request on her ip and port who make the request +} + diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/backSoon/backSoon.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/backSoon/backSoon.ino new file mode 100644 index 0000000..9d7834e --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/backSoon/backSoon.ino @@ -0,0 +1,84 @@ +// Present a "Will be back soon web page", as stand-in webserver. +// 2011-01-30 http://opensource.org/licenses/mit-license.php +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +#define STATIC 0 // set to 1 to disable DHCP (adjust myip/gwip values below) + +#if STATIC +// ethernet interface ip address +static byte myip[] = { 192,168,1,203 }; +// gateway ip address +static byte gwip[] = { 192,168,1,1 }; +#endif + +// ethernet mac address - must be unique on your network +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +byte Ethernet::buffer[500]; // tcp/ip send and receive buffer + +const char page[] PROGMEM = +"HTTP/1.0 503 Service Unavailable\r\n" +"Content-Type: text/html\r\n" +"Retry-After: 600\r\n" +"\r\n" +"" + "" + "Service Temporarily Unavailable" + "" + "" + "

This service is currently unavailable

" + "

" + "The main server is currently off-line.
" + "Please try again later." + "

" + "" +"" +; + +void setup(){ + Serial.begin(57600); + delay(10); + Serial.println("\n[backSoon]"); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println( "Failed to access Ethernet controller"); +#if STATIC + ether.staticSetup(myip, gwip); +#else + if (!ether.dhcpSetup()) + Serial.println("DHCP failed"); +#endif + + ether.printIp("IP: ", ether.myip); + ether.printIp("GW: ", ether.gwip); + ether.printIp("DNS: ", ether.dnsip); +} + +void loop(){ + // wait for an incoming TCP packet, but ignore its contents + if (ether.packetLoop(ether.packetReceive())) { + memcpy_P(ether.tcpOffset(), page, sizeof page); + ether.httpServerReply(sizeof page - 1); + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/etherNode/etherNode.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/etherNode/etherNode.ino new file mode 100644 index 0000000..050f7fb --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/etherNode/etherNode.ino @@ -0,0 +1,295 @@ +// Arduino demo sketch for testing RFM12B + ethernet +// 2010-05-20 http://opensource.org/licenses/mit-license.php + +// Listens for RF12 messages and displays valid messages on a webpage +// Memory usage exceeds 1K, so use Atmega328 or decrease history/buffers +// +// This sketch is derived from RF12eth.pde: +// May 2010, Andras Tucsni, http://opensource.org/licenses/mit-license.php +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include +#include + +#define DEBUG 1 // set to 1 to display free RAM on web page +#define SERIAL 0 // set to 1 to show incoming requests on serial port + +#define CONFIG_EEPROM_ADDR ((byte*) 0x10) + +// configuration, as stored in EEPROM +struct Config { + byte band; + byte group; + byte collect; + word refresh; + byte valid; // keep this as last byte +} config; + +// ethernet interface mac address - must be unique on your network +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +// buffer for an outgoing data packet +static byte outBuf[RF12_MAXDATA], outDest; +static char outCount = -1; + +#define NUM_MESSAGES 10 // Number of messages saved in history +#define MESSAGE_TRUNC 15 // Truncate message payload to reduce memory use + +static BufferFiller bfill; // used as cursor while filling the buffer + +static byte history_rcvd[NUM_MESSAGES][MESSAGE_TRUNC+1]; //history record +static byte history_len[NUM_MESSAGES]; // # of RF12 messages+header in history +static byte next_msg; // pointer to next rf12rcvd line +static word msgs_rcvd; // total number of lines received modulo 10,000 + +byte Ethernet::buffer[1000]; // tcp/ip send and receive buffer + +static void loadConfig() { + for (byte i = 0; i < sizeof config; ++i) + ((byte*) &config)[i] = eeprom_read_byte(CONFIG_EEPROM_ADDR + i); + if (config.valid != 253) { + config.valid = 253; + config.band = 8; + config.group = 1; + config.collect = 1; + config.refresh = 5; + } + byte freq = config.band == 4 ? RF12_433MHZ : + config.band == 8 ? RF12_868MHZ : + RF12_915MHZ; + rf12_initialize(31, freq, config.group); +} + +static void saveConfig() { + for (byte i = 0; i < sizeof config; ++i) + eeprom_write_byte(CONFIG_EEPROM_ADDR + i, ((byte*) &config)[i]); +} + +#if DEBUG +static int freeRam () { + extern int __heap_start, *__brkval; + int v; + return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); +} +#endif + +void setup(){ +#if SERIAL + Serial.begin(57600); + Serial.println("\n[etherNode]"); +#endif + loadConfig(); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println( "Failed to access Ethernet controller"); + if (!ether.dhcpSetup()) + Serial.println("DHCP failed"); +#if SERIAL + ether.printIp("IP: ", ether.myip); +#endif +} + +const char okHeader[] PROGMEM = + "HTTP/1.0 200 OK\r\n" + "Content-Type: text/html\r\n" + "Pragma: no-cache\r\n" +; + +static void homePage(BufferFiller& buf) { + word mhz = config.band == 4 ? 433 : config.band == 8 ? 868 : 915; + buf.emit_p(PSTR("$F\r\n" + "" + "RF12 etherNode - $D MHz, group $D" + "RF12 etherNode - $D MHz, group $D " + "- configure - send packet" + "

Last $D messages:

" + "
"), okHeader, config.refresh, mhz, config.group,
+                                            mhz, config.group, NUM_MESSAGES);
+    for (byte i = 0; i < NUM_MESSAGES; ++i) {
+        byte j = (next_msg + i) % NUM_MESSAGES;
+        if (history_len[j] > 0) {
+            word n = msgs_rcvd - NUM_MESSAGES + i;
+            buf.emit_p(PSTR("\n$D$D$D$D: OK"), // hack, to show leading zero's
+                                n/1000, (n/100) % 10, (n/10) % 10, n % 10);
+            for (byte k = 0; k < history_len[j]; ++k)
+                buf.emit_p(PSTR(" $D"), history_rcvd[j][k]);
+        }
+    }
+    long t = millis() / 1000;
+    word h = t / 3600;
+    byte m = (t / 60) % 60;
+    byte s = t % 60;
+    buf.emit_p(PSTR(
+        "
" + "Uptime is $D$D:$D$D:$D$D"), h/10, h%10, m/10, m%10, s/10, s%10); +#if DEBUG + buf.emit_p(PSTR(" ($D bytes free)"), freeRam()); +#endif +} + +static int getIntArg(const char* data, const char* key, int value =-1) { + char temp[10]; + if (ether.findKeyVal(data + 7, temp, sizeof temp, key) > 0) + value = atoi(temp); + return value; +} + +static void configPage(const char* data, BufferFiller& buf) { + // pick up submitted data, if present + if (data[6] == '?') { + byte b = getIntArg(data, "b"); + byte g = getIntArg(data, "g"); + byte c = getIntArg(data, "c", 0); + word r = getIntArg(data, "r"); + if (1 <= g && g <= 250 && 1 <= r && r <= 3600) { + // store values as new settings + config.band = b; + config.group = g; + config.collect = c; + config.refresh = r; + saveConfig(); + // re-init RF12 driver + loadConfig(); + // clear history + memset(history_len, 0, sizeof history_len); + // redirect to the home page + buf.emit_p(PSTR( + "HTTP/1.0 302 found\r\n" + "Location: /\r\n" + "\r\n")); + return; + } + } + // else show a configuration form + buf.emit_p(PSTR("$F\r\n" + "

Server node configuration

" + "
" + "

" + "Freq band (4, 8, or 9)
" + "Net group (1..250)
" + "Collect mode: " + "Don't send ACKs

" + "Refresh rate (1..3600 seconds)" + "

" + "" + "
"), okHeader, config.band, config.group, + config.collect ? "CHECKED" : "", + config.refresh); +} + +static void sendPage(const char* data, BufferFiller& buf) { + // pick up submitted data, if present + const char* p = strstr(data, "b="); + byte d = getIntArg(data, "d"); + if (data[6] == '?' && p != 0 && 0 <= d && d <= 31) { + // prepare to send data as soon as possible in loop() + outDest = d & RF12_HDR_MASK ? RF12_HDR_DST | d : 0; + outCount = 0; + // convert the input string to a number of decimal data bytes in outBuf + ++p; + while (*p != 0 && *p != '&') { + outBuf[outCount] = 0; + while ('0' <= *++p && *p <= '9') + outBuf[outCount] = 10 * outBuf[outCount] + (*p - '0'); + ++outCount; + } +#if SERIAL + Serial.print("Send to "); + Serial.print(outDest, DEC); + Serial.print(':'); + for (byte i = 0; i < outCount; ++i) { + Serial.print(' '); + Serial.print(outBuf[i], DEC); + } + Serial.println(); +#endif + // redirect to home page + buf.emit_p(PSTR( + "HTTP/1.0 302 found\r\n" + "Location: /\r\n" + "\r\n")); + return; + } + // else show a send form + buf.emit_p(PSTR("$F\r\n" + "

Send a wireless data packet

" + "
" + "

" + "Data bytes (decimal)
" + "Destination node " + "(1..31, or 0 to broadcast)
" + "

" + "" + "
"), okHeader); +} + +void loop(){ + word len = ether.packetReceive(); + word pos = ether.packetLoop(len); + // check if valid tcp data is received + if (pos) { + bfill = ether.tcpOffset(); + char* data = (char *) Ethernet::buffer + pos; +#if SERIAL + Serial.println(data); +#endif + // receive buf hasn't been clobbered by reply yet + if (strncmp("GET / ", data, 6) == 0) + homePage(bfill); + else if (strncmp("GET /c", data, 6) == 0) + configPage(data, bfill); + else if (strncmp("GET /s", data, 6) == 0) + sendPage(data, bfill); + else + bfill.emit_p(PSTR( + "HTTP/1.0 401 Unauthorized\r\n" + "Content-Type: text/html\r\n" + "\r\n" + "

401 Unauthorized

")); + ether.httpServerReply(bfill.position()); // send web page data + } + + // RFM12 loop runner, don't report acks + if (rf12_recvDone() && rf12_crc == 0 && (rf12_hdr & RF12_HDR_CTL) == 0) { + history_rcvd[next_msg][0] = rf12_hdr; + for (byte i = 0; i < rf12_len; ++i) + if (i < MESSAGE_TRUNC) + history_rcvd[next_msg][i+1] = rf12_data[i]; + history_len[next_msg] = rf12_len < MESSAGE_TRUNC ? rf12_len+1 + : MESSAGE_TRUNC+1; + next_msg = (next_msg + 1) % NUM_MESSAGES; + msgs_rcvd = (msgs_rcvd + 1) % 10000; + + if (RF12_WANTS_ACK && !config.collect) { +#if SERIAL + Serial.println(" -> ack"); +#endif + rf12_sendStart(RF12_ACK_REPLY, 0, 0); + } + } + + // send a data packet out if requested + if (outCount >= 0 && rf12_canSend()) { + rf12_sendStart(outDest, outBuf, outCount, 1); + outCount = -1; + } +} diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getDHCPandDNS/getDHCPandDNS.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getDHCPandDNS/getDHCPandDNS.ino new file mode 100644 index 0000000..117922e --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getDHCPandDNS/getDHCPandDNS.ino @@ -0,0 +1,75 @@ +// This demo does web requests via DHCP and DNS lookup. +// 2011-07-05 http://opensource.org/licenses/mit-license.php +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +#define REQUEST_RATE 5000 // milliseconds + +// ethernet interface mac address +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; +// remote website name +const char website[] PROGMEM = "google.com"; + +byte Ethernet::buffer[700]; +static long timer; + +// called when the client request is complete +static void my_result_cb (uint8_t status, uint16_t off, uint16_t len) { + Serial.print("<<< reply "); + Serial.print(millis() - timer); + Serial.println(" ms"); + Serial.println((const char*) Ethernet::buffer + off); +} + +void setup () { + Serial.begin(57600); + Serial.println("\n[getDHCPandDNS]"); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println( "Failed to access Ethernet controller"); + + if (!ether.dhcpSetup()) + Serial.println("DHCP failed"); + + ether.printIp("My IP: ", ether.myip); + // ether.printIp("Netmask: ", ether.mymask); + ether.printIp("GW IP: ", ether.gwip); + ether.printIp("DNS IP: ", ether.dnsip); + + if (!ether.dnsLookup(website)) + Serial.println("DNS failed"); + ether.printIp("Server: ", ether.hisip); + + timer = - REQUEST_RATE; // start timing out right away +} + +void loop () { + + ether.packetLoop(ether.packetReceive()); + + if (millis() > timer + REQUEST_RATE) { + timer = millis(); + Serial.println("\n>>> REQ"); + ether.browseUrl(PSTR("/foo/"), "bar", website, my_result_cb); + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getStaticIP/getStaticIP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getStaticIP/getStaticIP.ino new file mode 100644 index 0000000..2564e54 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getStaticIP/getStaticIP.ino @@ -0,0 +1,76 @@ +// This demo does web requests via DNS lookup, using a fixed gateway. +// 2010-11-27 http://opensource.org/licenses/mit-license.php +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +#define REQUEST_RATE 5000 // milliseconds + +// ethernet interface mac address +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; +// ethernet interface ip address +static byte myip[] = { 192,168,1,203 }; +// gateway ip address +static byte gwip[] = { 192,168,1,1 }; +// domain name server (dns) address +static byte dnsip[] = { 192,168,1,1 }; +// remote website name +const char website[] PROGMEM = "google.com"; + +byte Ethernet::buffer[300]; // a very small tcp/ip buffer is enough here +static long timer; + +// called when the client request is complete +static void my_result_cb (byte status, uint16_t off, uint16_t len) { + Serial.print("<<< reply "); + Serial.print(millis() - timer); + Serial.println(" ms"); + Serial.println((const char*) Ethernet::buffer + off); +} + +void setup () { + Serial.begin(57600); + Serial.println("\n[getViaDNS]"); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println( "Failed to access Ethernet controller"); + + ether.staticSetup(myip, gwip); + + ether.copyIp(ether.dnsip, dnsip); + + if (!ether.dnsLookup(website)) + Serial.println("DNS failed"); + ether.printIp("Server: ", ether.hisip); + + timer = - REQUEST_RATE; // start timing out right away +} + +void loop () { + ether.packetLoop(ether.packetReceive()); + + if (millis() > timer + REQUEST_RATE) { + timer = millis(); + Serial.println("\n>>> REQ"); + ether.browseUrl(PSTR("/foo/"), "bar", website, my_result_cb); + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getViaDNS/getViaDNS.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getViaDNS/getViaDNS.ino new file mode 100644 index 0000000..e67a854 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getViaDNS/getViaDNS.ino @@ -0,0 +1,72 @@ +// This demo does web requests via DNS lookup, using a fixed gateway. +// 2010-11-27 http://opensource.org/licenses/mit-license.php +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +#define REQUEST_RATE 5000 // milliseconds + +// ethernet interface mac address +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; +// ethernet interface ip address +static byte myip[] = { 192,168,1,203 }; +// gateway ip address +static byte gwip[] = { 192,168,1,1 }; +// remote website name +const char website[] PROGMEM = "google.com"; + +byte Ethernet::buffer[300]; // a very small tcp/ip buffer is enough here +static long timer; + +// called when the client request is complete +static void my_result_cb (byte status, uint16_t off, uint16_t len) { + Serial.print("<<< reply "); + Serial.print(millis() - timer); + Serial.println(" ms"); + Serial.println((const char*) Ethernet::buffer + off); +} + +void setup () { + Serial.begin(57600); + Serial.println("\n[getViaDNS]"); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println( "Failed to access Ethernet controller"); + + ether.staticSetup(myip, gwip); + + if (!ether.dnsLookup(website)) + Serial.println("DNS failed"); + ether.printIp("Server: ", ether.hisip); + + timer = - REQUEST_RATE; // start timing out right away +} + +void loop () { + ether.packetLoop(ether.packetReceive()); + + if (millis() > timer + REQUEST_RATE) { + timer = millis(); + Serial.println("\n>>> REQ"); + ether.browseUrl(PSTR("/foo/"), "bar", website, my_result_cb); + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacket/multipacket.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacket/multipacket.ino new file mode 100644 index 0000000..85d506f --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacket/multipacket.ino @@ -0,0 +1,99 @@ +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +#define TCP_FLAGS_FIN_V 1 //as declared in net.h +#define TCP_FLAGS_ACK_V 0x10 //as declared in net.h +static byte myip[] = { 192,168,1,203 }; +static byte gwip[] = { 192,168,1,1 }; +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x39 }; +byte Ethernet::buffer[900]; // tcp ip send and receive buffer +const char pageA[] PROGMEM = +"HTTP/1.0 200 OK\r\n" +"Content-Type: text/html\r\n" +"\r\n" +"" + "" + "multipackets Test" + "" + "" + "Start here
" + "

packet 1

" + "

" + "the first packet send " + "

" +; +const char pageB[] PROGMEM = + "

packet 2

" + "

" + "if you read this it mean it works" + "

" +; +const char pageC[] PROGMEM = + "

packet 3

" + "

" + "if you read this it mean it works" + "

" +; +const char pageD[] PROGMEM = + "

packet 4

" + "

" + "if you read this it mean it works" + "

" +; +const char pageE[] PROGMEM = + "

packet 5

" + "

" + "this is the last packet" + "

" +; + + +void setup(){ + ether.begin(sizeof Ethernet::buffer, mymac);// 53 for the mega ethernet shield and 10 for normal ethernet shield + ether.staticSetup(myip, gwip); +} +void loop(){ + word pos = ether.packetLoop(ether.packetReceive()); + // check if valid tcp data is received + if (pos) { + char* data = (char *) Ethernet::buffer + pos; + if (strncmp("GET / ", data, 6) == 0) { + ether.httpServerReplyAck(); // send ack to the request + memcpy_P(ether.tcpOffset(), pageA, sizeof pageA); // send first packet and not send the terminate flag + ether.httpServerReply_with_flags(sizeof pageA - 1,TCP_FLAGS_ACK_V); + memcpy_P(ether.tcpOffset(), pageB, sizeof pageB); // send second packet and not send the terminate flag + ether.httpServerReply_with_flags(sizeof pageB - 1,TCP_FLAGS_ACK_V); + memcpy_P(ether.tcpOffset(), pageC, sizeof pageC); // send thirdt packet and not send the terminate flag + ether.httpServerReply_with_flags(sizeof pageC - 1,TCP_FLAGS_ACK_V); + memcpy_P(ether.tcpOffset(), pageD, sizeof pageD); // send fourth packet and not send the terminate flag + ether.httpServerReply_with_flags(sizeof pageD - 1,TCP_FLAGS_ACK_V); + memcpy_P(ether.tcpOffset(), pageE, sizeof pageE); // send fiveth packet and send the terminate flag + ether.httpServerReply_with_flags(sizeof pageE - 1,TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V); } + else + { + ether.httpServerReplyAck(); // send ack to the request + memcpy_P(ether.tcpOffset(), pageA, sizeof pageA);//only the first part will sended + ether.httpServerReply_with_flags(sizeof pageA - 1,TCP_FLAGS_ACK_V|TCP_FLAGS_FIN_V); + } + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacketSD/multipacketSD.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacketSD/multipacketSD.ino new file mode 100644 index 0000000..8822084 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacketSD/multipacketSD.ino @@ -0,0 +1,129 @@ +// works only with tinyfat library +// with SD library packets lost will occurs +// don't know why ! +// tested with arduino mega 1280 and uno +// send 240 Megabyte file without packet loss +// at 100 kbyte/s +// tinyfat read a block of 512 bytes on SD card , +// so the buffer must be 512 + 60 bytes +// on the arduino mega with bigger buffer you can adjust +// if (cur>=512) { // 512 to 1024 with 1100 bytes buffer + +#include +#include +#include +#define TCP_FLAGS_FIN_V 1 //as declared in net.h +#define TCP_FLAGS_ACK_V 16 //as declared in net.h +static byte myip[] = { 192,168,0,66 }; +static byte gwip[] = { 192,168,0,250 }; +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x39 }; +byte Ethernet::buffer[700]; // tcp/ip send and receive buffer +unsigned long cur; +unsigned long pos; +byte res; + +void setup() { + // Initialize serial communication at 115200 baud + Serial.begin(115200); + // Initialize tinyFAT + // You might need to select a lower speed than the default SPISPEED_HIGH + file.setSSpin(4); + res=file.initFAT(0); + if (res==NO_ERROR) Serial.println("SD started"); + ether.begin(sizeof Ethernet::buffer, mymac , 10); //53 on mega ethernet shield 10 on others + ether.staticSetup(myip, gwip); + Serial.println("ETH started"); +} + +void loop() +{ + wait: + pos = ether.packetLoop(ether.packetReceive());// check if valid tcp data is received + if (pos) { + char* data = (char *) Ethernet::buffer + pos; + cur=0; + if (strncmp("GET / ", data, 6) == 0) {// nothing specified + sendfiles("index.htm"); + goto wait; + } + if (strncmp("GET /", data, 5) == 0) { // serve anything on sd card + int i =0; + char temp[15]=""; // here will be the name of requested file + while (data[i+5]!=32) {temp[i]=data[i+5];i++;}//search the end + sendfiles((char*) temp); + goto wait; + } + not_found(); + + } + +} + +void not_found() { //content not found + cur=0; + streamfile ("404.hea",TCP_FLAGS_FIN_V); + // Serial.println("not found"); +} + +byte streamfile (char* name , byte lastflag) { //send a file to the buffer + if (!file.exists(name)) {return 0;} + res=file.openFile(name, FILEMODE_BINARY); + int car=512; + while (car==512) { + car=file.readBinary(); + for(int i=0;i=512) { + ether.httpServerReply_with_flags(cur,TCP_FLAGS_ACK_V); + cur=0; + } else { + + if (lastflag==TCP_FLAGS_FIN_V) { + ether.httpServerReply_with_flags(cur,TCP_FLAGS_ACK_V+TCP_FLAGS_FIN_V); + } + } +} + file.closeFile(); + return 1; +} + +byte sendfiles(char* name) { // function to find the correct header and send a file + ether.httpServerReplyAck(); + int i =0; + char dtype[13]=""; + while (name[i]!=0) { + i++; + }//search the end + int b=i-1; + while ((name[b]!=46)&&(b>0)) { + b--; + }//search the point + int a=b+1; + while (a +#include + +#define BUF_SIZE 512 + +byte mac[] = { 0x00, 0x04, 0xA3, 0x21, 0xCA, 0x38 }; // Nanode MAC address. + +uint8_t ip[] = { 192, 168, 1, 203 }; // The fallback board address. +uint8_t dns[] = { 192, 168, 1, 1 }; // The DNS server address. +uint8_t gateway[] = { 192, 168, 1, 1 }; // The gateway router address. +uint8_t subnet[] = { 255, 255, 255, 0 }; // The subnet mask. +byte Ethernet::buffer[BUF_SIZE]; +byte fixed; // Address fixed, no DHCP + +void setup(void) +{ + Serial.begin(57600); + delay(2000); + + /* Check that the Ethernet controller exists */ + Serial.println("Initialising the Ethernet controller"); + if (ether.begin(sizeof Ethernet::buffer, mac) == 0) { + Serial.println( "Ethernet controller NOT initialized"); + while (true) + /* MT */ ; + } + + /* Get a DHCP connection */ + Serial.println("Attempting to get an IP address using DHCP"); + fixed = false; + if (ether.dhcpSetup()) { + ether.printIp("Got an IP address using DHCP: ", ether.myip); + } + /* If DHCP fails, start with a hard-coded address */ + else { + ether.staticSetup(ip, gateway, dns); + ether.printIp("DHCP FAILED, using fixed address: ", ether.myip); + fixed = true; + } + + return; +} + +void loop(void) +{ + word rc; + + /* These function calls are required if ICMP packets are to be accepted */ + rc = ether.packetLoop(ether.packetReceive()); + Serial.print("ether.packetLoop() returned "); + Serial.println(rc, DEC); + + // For debugging + delay(5000); + + return; +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/noipClient/noipClient.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/noipClient/noipClient.ino new file mode 100644 index 0000000..01454fc --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/noipClient/noipClient.ino @@ -0,0 +1,293 @@ +// NoIP client sketch for ENC28J60 based Ethernet Shield. +// You need a free account from www.no-ip.com +// +// 1. On NoIP website, create a host of type DNS Host (A) +// 2. Insert your host name in noIP_host[] variable +// 3. Encode "username:password" in base64 using an online tool like +// 4. Paste the encoded string in noIP_auth[] variable +// +// Contributed by Luca Dentella +// http://www.lucadentella.it/2012/04/28/enc28j60-e-arduino-6/ +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + + +#include +#include + +// Finite-State Machine states +#define STATUS_IDLE 0 +#define STATUS_WAITING_FOR_PUBLIC_IP 1 +#define STATUS_NOIP_NEEDS_UPDATE 2 +#define STATUS_WAITING_FOR_NOIP 3 +#define STATUS_ERROR 99 + +// The sketch will check your public IP every CHECK_IP_INTERVAL ms, +// and wait for REQUEST_TIMEOUT ms for a response. +// It will retry for maximum of MAX_ATTEMPTS attemps. +#define CHECK_IP_INTERVAL 60000 +#define REQUEST_TIMEOUT 10000 +#define MAX_ATTEMPTS 3 + +// MAC Address of Ethernet Shield +static byte mymac[] = {0x74,0x69,0x69,0x2D,0x30,0x31}; + +// Insert your hostname and authentication string +const char noIP_host[] PROGMEM = ""; //e.g. myname.no-ip.info +const char noIP_auth[] PROGMEM = ""; + +//---------------------------------------------------------- +// Don't change these ones... +const char getIP_web[] PROGMEM = "www.lucadentella.it"; +const char noIP_web[] PROGMEM = "dynupdate.no-ip.com"; +//---------------------------------------------------------- + +// Some global variables +byte Ethernet::buffer[700]; +byte getIP_address[4]; +byte noIP_address[4]; +byte actual_status; +static byte session_id; +static uint32_t check_ip_timer; +static uint32_t request_timer; +int attempt; +Stash stash; + +void setup () { + + Serial.begin(57600); + Serial.println(F("NoIP Client Demo")); + Serial.println(); + + if (!ether.begin(sizeof Ethernet::buffer, mymac)) + Serial.println(F( "Failed to access Ethernet controller")); + else + Serial.println(F("Ethernet controller initialized")); + Serial.println(); + + if (!ether.dhcpSetup()) + Serial.println(F("Failed to get configuration from DHCP")); + else + Serial.println(F("DHCP configuration done")); + + ether.printIp("IP Address:\t", ether.myip); + ether.printIp("Netmask:\t", ether.netmask); + ether.printIp("Gateway:\t", ether.gwip); + Serial.println(); + + actual_status = STATUS_IDLE; + attempt = 0; + + // Resolve IP for getIP_web and noIP_web + // and store them into global variables + if (!ether.dnsLookup(getIP_web)) { + Serial.print(F("Unable to resolve IP for ")); + SerialPrint_P(getIP_web); + actual_status = STATUS_ERROR; + } else { + ether.copyIp(getIP_address, ether.hisip); + SerialPrint_P(getIP_web); + ether.printIp(" resolved to:\t", ether.hisip); + } + if (!ether.dnsLookup(noIP_web)) { + Serial.print(F("Unable to resolve IP for ")); + SerialPrint_P(noIP_web); + actual_status = STATUS_ERROR; + } else { + ether.copyIp(noIP_address, ether.hisip); + SerialPrint_P(noIP_web); + ether.printIp(" resolved to:\t", ether.hisip); + } + + Serial.println(); +} + + +void loop() { + + ether.packetLoop(ether.packetReceive()); + + // FSM + switch(actual_status) { + + case STATUS_IDLE: checkPublicIP(); break; + case STATUS_WAITING_FOR_PUBLIC_IP: checkPublicIPResponse(); break; + case STATUS_NOIP_NEEDS_UPDATE: updateNoIP(); break; + case STATUS_WAITING_FOR_NOIP: checkNoIPResponse(); break; + } +} + +void checkPublicIP() { + + if(millis() > check_ip_timer) { + + Serial.print(F("Checking public IP... ")); + + // Create a request for GetIP service, + // set destination IP and send request saving session_id + Stash::prepare(PSTR("GET /demo/getip.php HTTP/1.1" "\r\n" "Host: $F" "\r\n" "\r\n"), getIP_web); + ether.copyIp(ether.hisip, getIP_address); + session_id = ether.tcpSend(); + + // Change FSM state, prepare for timeout and increment attempts counter + actual_status = STATUS_WAITING_FOR_PUBLIC_IP; + request_timer = millis() + REQUEST_TIMEOUT; + attempt++; + } +} + +void checkPublicIPResponse() { + + String actualIp, dnsIp; + + const char* reply = ether.tcpReply(session_id); + + // We got a valid response + if(reply != 0) { + + // Parse response for public IP + for(int i = 0; i < strlen(reply) - 189; i++) actualIp = actualIp + reply[187 + i]; + Serial.println(actualIp); + + // If we can't resolve actual IP for our hostname on NoIP, + // return to IDLE state and wait for the next interval + if(!ether.dnsLookup(noIP_host)) { + Serial.print(F("Unable to resolve actual IP for ")); + SerialPrint_P(noIP_host); + Serial.println(); + actual_status = STATUS_IDLE; + attempt = 0; + check_ip_timer = millis() + CHECK_IP_INTERVAL; + + // If we can resolve the IP for our hostname, save it in xxx.xxx.xxx.xxx form + // and compare it with our public IP + } else { + for(int i = 0; i < 4; i++) { + dnsIp = dnsIp + String(ether.hisip[i]); + if(i < 3) dnsIp = dnsIp + "."; + } + SerialPrint_P(noIP_host); + Serial.print(F(" resolved to ")); + Serial.println(dnsIp); + + // If they are the same, we can sit down and wait for the next interval + if(actualIp.compareTo(dnsIp) == 0) { + Serial.println(F("No update needed :)")); + actual_status = STATUS_IDLE; + attempt = 0; + check_ip_timer = millis() + CHECK_IP_INTERVAL; + + // Different? We'd better to update NoIP! + } else { + Serial.println(F("Update needed :(")); + actual_status = STATUS_NOIP_NEEDS_UPDATE; + attempt = 0; + } + } + + // No valid response? Check for timeout + // If we've already sent a max number of requests, return to IDLE state + // and wait for the next interval + } else { + if(millis() > request_timer) { + Serial.println(F(" no response :(")); + actual_status = STATUS_IDLE; + if(attempt == MAX_ATTEMPTS) { + Serial.println(F("Max number of attempts reached")); + attempt = 0; + check_ip_timer = millis() + CHECK_IP_INTERVAL; + } + } + } +} + +void updateNoIP() { + + Serial.print(F("Updating NoIP...")); + + // Create a request for updating NoIP using NoIP API, + // set destination IP and send request saving session_id + Stash::prepare(PSTR("GET /nic/update?hostname=$F HTTP/1.0" "\r\n" + "Host: $F" "\r\n" + "Authorization: Basic $F" "\r\n" + "User-Agent: NoIP_Client" "\r\n" "\r\n"), + noIP_host, noIP_web, noIP_auth); + ether.copyIp(ether.hisip, noIP_address); + session_id = ether.tcpSend(); + + // Wait for response or timeout... + actual_status = STATUS_WAITING_FOR_NOIP; + request_timer = millis() + REQUEST_TIMEOUT; + attempt++; +} + +void checkNoIPResponse() { + + const char* reply = ether.tcpReply(session_id); + boolean done; + + // We got a valid response... + if(reply != 0) { + + // Parse NoIP response looking for status/error codes... + if(strstr(reply, "good") != 0) { + Serial.println(F(" done!")); + done = true; + } + else if(strstr(reply, "nochg") != 0) { + Serial.println(F(" no change required!")); + done = true; + } + else if(strstr(reply, "nohost") != 0) Serial.println(F(" host not found :(")); + else if(strstr(reply, "badauth") != 0) Serial.println(F(" invalid username or password :(")); + else if(strstr(reply, "badagent") != 0) Serial.println(F(" agent banned :(")); + else if(strstr(reply, "!donator") != 0) Serial.println(F(" feature not available for specified username :(")); + else if(strstr(reply, "abuse") != 0) Serial.println(F(" username blocked due to abuse :(")); + else Serial.println(F(" generic error :(")); + + // Record has been updated? Ok wait for next interval... + if(done) { + actual_status = STATUS_IDLE; + attempt = 0; + check_ip_timer = millis() + CHECK_IP_INTERVAL; + } + + // No valid response? Check for timeout + // If we've already sent a max number of requests, return to IDLE state + // and wait for the next interval + } else { + + if(millis() > request_timer) { + Serial.println(F("No response from NoIP")); + if(attempt == MAX_ATTEMPTS) { + Serial.println(F("Max number of attempts reached")); + actual_status = STATUS_IDLE; + attempt = 0; + check_ip_timer = millis() + CHECK_IP_INTERVAL; + } + else + actual_status = STATUS_NOIP_NEEDS_UPDATE; + } + } +} + +void SerialPrint_P(PGM_P str) { + for (uint8_t c; (c = pgm_read_byte(str)); str++) Serial.write(c); +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/pings/pings.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/pings/pings.ino new file mode 100644 index 0000000..834b9a0 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/pings/pings.ino @@ -0,0 +1,96 @@ +// Ping a remote server, also uses DHCP and DNS. +// 2011-06-12 http://opensource.org/licenses/mit-license.php +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +// ethernet interface mac address, must be unique on the LAN +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +byte Ethernet::buffer[700]; + +static uint32_t timer; +static byte myip[] = { 192,168,1,203 }; + +// gateway ip address +static byte gwip[] = { 192,168,1,1 }; + +// domain name server (dns) address +static byte dnsip[] = { 192,168,1,1 }; + +// called when a ping comes in (replies to it are automatic) +static void gotPinged (byte* ptr) { + ether.printIp(">>> ping from: ", ptr); +} + +void setup () { + Serial.begin(57600); + delay(10); + Serial.println("\n[pings]"); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println(("Failed to access Ethernet controller")); + + + if (!ether.dhcpSetup()){//If DHCP fails set the static IP, Gateway and DNS IP. + Serial.println(F("DHCP failed")); + ether.staticSetup(myip, gwip); + ether.copyIp(ether.dnsip, dnsip); + } + + ether.printIp("IP: ", ether.myip); + ether.printIp("GW: ", ether.gwip); + + +//#if 1 + // use DNS to locate the IP address we want to ping + if (!ether.dnsLookup(PSTR("www.google.com"))) + Serial.println("DNS failed"); +//#else + //ether.parseIp(ether.hisip, "173.194.112.119"); +//#endif + ether.printIp("SRV: ", ether.hisip); + + // call this to report others pinging us + ether.registerPingCallback(gotPinged); + + timer = -9999999; // start timing out right away + Serial.println(); +} + +void loop () { + word len = ether.packetReceive(); // go receive new packets + word pos = ether.packetLoop(len); // respond to incoming pings + + // report whenever a reply to our outgoing ping comes back + if (len > 0 && ether.packetLoopIcmpCheckReply(ether.hisip)) { + Serial.print(" "); + Serial.print((micros() - timer) * 0.001, 3); + Serial.println(" ms"); + } + + // ping a remote server once every few seconds + if (micros() - timer >= 5000000) { + ether.printIp("Pinging: ", ether.hisip); + timer = micros(); + ether.clientIcmpRequest(ether.hisip); + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/rbbb_server/rbbb_server.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/rbbb_server/rbbb_server.ino new file mode 100644 index 0000000..5a21c05 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/rbbb_server/rbbb_server.ino @@ -0,0 +1,72 @@ +// This is a demo of the RBBB running as webserver with the Ether Card +// 2010-05-28 http://opensource.org/licenses/mit-license.php +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +// ethernet interface mac address, must be unique on the LAN +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; +static byte myip[] = { 192,168,1,203 }; + +byte Ethernet::buffer[500]; +BufferFiller bfill; + +void setup () { + Serial.begin(57600); + delay(10); + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println(F("Failed to access Ethernet controller")); + ether.staticSetup(myip); + + //if (!ether.dhcpSetup()) + // Serial.println("DHCP failed"); + + ether.printIp("IP: ", ether.myip); + ether.printIp("GW: ", ether.gwip); + ether.printIp("DNS: ", ether.dnsip); +} + +static word homePage() { + long t = millis() / 1000; + word h = t / 3600; + byte m = (t / 60) % 60; + byte s = t % 60; + bfill = ether.tcpOffset(); + bfill.emit_p(PSTR( + "HTTP/1.0 200 OK\r\n" + "Content-Type: text/html\r\n" + "Pragma: no-cache\r\n" + "\r\n" + "" + "RBBB server" + "

$D$D:$D$D:$D$D

"), + h/10, h%10, m/10, m%10, s/10, s%10); + return bfill.position(); +} + +void loop () { + + if (ether.packetLoop(ether.packetReceive())){ // check if valid tcp data is received + ether.httpServerReply(homePage()); // send web page data + + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/stashTest/stashTest.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/stashTest/stashTest.ino new file mode 100644 index 0000000..13344c1 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/stashTest/stashTest.ino @@ -0,0 +1,119 @@ +// Test the offloaded RAM stash mechanism. +// 2011-07-10 http://opensource.org/licenses/mit-license.php + +#include +#include + +// ethernet interface mac address, must be unique on the LAN +byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +byte Ethernet::buffer[700]; + +void dumpBlock (const char* msg, byte idx) { + Serial.print(msg); + Serial.print(" ["); + Serial.print(idx, DEC); + Serial.print("] @ "); + Serial.print(Stash::bufs[idx].bnum, DEC); + Serial.print(" free "); + Serial.print(Stash::freeCount(), DEC); + for (byte i = 0; i < 64; ++i) { + if (i % 16 == 0) + Serial.println(); + Serial.print(' '); + Serial.print(Stash::bufs[idx].bytes[i], DEC); + } + Serial.println(); +} + +void dumpStash (const char* msg, void* ptr) { + Stash& buf = *(Stash*) ptr; + Serial.print(msg); + Serial.print(" c"); + Serial.print(buf.count, DEC); + Serial.print(" f"); + Serial.print(buf.first, DEC); + Serial.print(" l"); + Serial.print(buf.last, DEC); + Serial.print(" u"); + Serial.print(buf.curr, DEC); + Serial.print(" o"); + Serial.print(buf.offs, DEC); + Serial.print(" #"); + Serial.println(buf.size()); +} + +void setup () { + Serial.begin(57600); + delay(1); + Serial.println("\n[stashTest]"); + ether.begin(sizeof Ethernet::buffer, mymac); + +#if 1 + Stash buf; + dumpStash("> AAA", &buf); + byte fd = buf.create(); + Serial.print("fd "); + Serial.println(fd, DEC); + dumpStash("> BBB", &buf); + dumpBlock("EMPTY", 0); + for (char c = 'a'; c <= 'z'; ++c) + buf.put(c); + for (char c = 'A'; c <= 'Z'; ++c) + buf.put(c); + dumpBlock("LETTERS", 0); + dumpStash("> CCC", &buf); + for (char c = '0'; c <= '9'; ++c) + buf.put(c); + dumpBlock("DIGITS", 0); + dumpStash("> DDD", &buf); + buf.print(" x = "); + buf.println(123.45); + dumpBlock("PRINT", 0); + dumpStash("> EEE", &buf); + buf.load(1, 1); + dumpBlock("FIRST", 1); + buf.save(); + buf.load(1, 1); + dumpBlock("FLUSHED", 1); + dumpStash("> FFF", &buf); + for (;;) { + char c = buf.get(); + if (c == 0) + break; + Serial.print(c); + } + Serial.println(); + dumpStash("> GGG", &buf); +#endif + + Stash buf2; + byte fd2 = buf2.create(); + buf2.print(""); + buf2.save(); + buf2.load(1, fd2); + dumpBlock("SECOND", 1); + dumpStash("> HHH", &buf2); + + Stash::prepare(PSTR("a $S b $F c $D d $H e"), + "123", PSTR("4567"), -12345, fd2); + dumpBlock("BUFFER", 0); + Serial.println(Stash::length()); + for (word i = 0, n = Stash::length(); i < n; ++i) { + char c; + Stash::extract(i, 1, &c); + Serial.print(c); + } + Serial.println(); + Stash::cleanup(); +#if 1 + buf.release(); +#endif + Serial.print("free "); + Serial.println(Stash::freeCount(), DEC); + Serial.println("DONE"); +} + +void loop () { + // ether.packetLoop(ether.packetReceive()); +} diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/testDHCP/testDHCP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/testDHCP/testDHCP.ino new file mode 100644 index 0000000..1066982 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/testDHCP/testDHCP.ino @@ -0,0 +1,60 @@ +// Arduino demo sketch for testing the DHCP client code +// +// Original author: Andrew Lindsay +// Major rewrite and API overhaul by jcw, 2011-06-07 +// +// Copyright: GPL V2 +// See http://www.gnu.org/licenses/gpl.html +// +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +byte Ethernet::buffer[700]; + +void setup () { + Serial.begin(57600); + Serial.println(F("\n[testDHCP]")); + + Serial.print("MAC: "); + for (byte i = 0; i < 6; ++i) { + Serial.print(mymac[i], HEX); + if (i < 5) + Serial.print(':'); + } + Serial.println(); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println(F("Failed to access Ethernet controller")); + + Serial.println(F("Setting up DHCP")); + if (!ether.dhcpSetup()) + Serial.println(F("DHCP failed")); + + ether.printIp("My IP: ", ether.myip); + ether.printIp("Netmask: ", ether.netmask); + ether.printIp("GW IP: ", ether.gwip); + ether.printIp("DNS IP: ", ether.dnsip); +} + +void loop () {} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/twitter/twitter.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/twitter/twitter.ino new file mode 100644 index 0000000..5520678 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/twitter/twitter.ino @@ -0,0 +1,85 @@ +// Twitter client sketch for ENC28J60 based Ethernet Shield. Uses +// arduino-tweet.appspot.com as a OAuth gateway. +// Step by step instructions: +// +// 1. Get a oauth token: +// http://arduino-tweet.appspot.com/oauth/twitter/login +// 2. Put the token value in the TOKEN define below +// 3. Run the sketch! +// +// WARNING: Don't send more than 1 tweet per minute! +// NOTE: Twitter rejects tweets with identical content as dupes (returns 403) + +#include +#include + +// OAUTH key from http://arduino-tweet.appspot.com/ +#define TOKEN "Insert-your-token-here" + +// ethernet interface mac address, must be unique on the LAN +byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +const char website[] PROGMEM = "arduino-tweet.appspot.com"; + +static byte session; + +byte Ethernet::buffer[700]; +Stash stash; + +static void sendToTwitter () { + Serial.println("Sending tweet..."); + byte sd = stash.create(); + + const char tweet[] = "@solarkennedy the test Twitter sketch works!"; + stash.print("token="); + stash.print(TOKEN); + stash.print("&status="); + stash.println(tweet); + stash.save(); + int stash_size = stash.size(); + + // Compose the http POST request, taking the headers below and appending + // previously created stash in the sd holder. + Stash::prepare(PSTR("POST http://$F/update HTTP/1.0" "\r\n" + "Host: $F" "\r\n" + "Content-Length: $D" "\r\n" + "\r\n" + "$H"), + website, website, stash_size, sd); + + // send the packet - this also releases all stash buffers once done + // Save the session ID so we can watch for it in the main loop. + session = ether.tcpSend(); +} + +void setup () { + Serial.begin(57600); + Serial.println("\n[Twitter Client]"); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println(F("Failed to access Ethernet controller")); + if (!ether.dhcpSetup()) + Serial.println(F("DHCP failed")); + + ether.printIp("IP: ", ether.myip); + ether.printIp("GW: ", ether.gwip); + ether.printIp("DNS: ", ether.dnsip); + + if (!ether.dnsLookup(website)) + Serial.println(F("DNS failed")); + + ether.printIp("SRV: ", ether.hisip); + + sendToTwitter(); +} + +void loop () { + ether.packetLoop(ether.packetReceive()); + + const char* reply = ether.tcpReply(session); + if (reply != 0) { + Serial.println("Got a response!"); + Serial.println(reply); + } +} + diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPClient.java b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPClient.java new file mode 100644 index 0000000..0439c3e --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPClient.java @@ -0,0 +1,29 @@ +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class UDPClient { + + public static void main(String[] args) throws UnknownHostException { + DatagramSocket s; + byte[] sendBuffer = new byte[1024]; + DatagramPacket sendPacket; + final InetAddress ADDRESS = InetAddress.getByName("localhost"); + final int PORT = 1234; + try { + s = new DatagramSocket(); + System.out.println("Odesilam data na server..."); + + sendBuffer = "abc123".getBytes(); + sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, + ADDRESS, PORT); + s.send(sendPacket); + + } catch (IOException e) { + e.printStackTrace(); + } + } + +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPserver.java b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPserver.java new file mode 100644 index 0000000..b7cda60 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPserver.java @@ -0,0 +1,39 @@ +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class UDPserver { + public static void main(String[] args) { + UDPserver server = new UDPserver(1234); + server.start(); + } + private int port; + private DatagramSocket s; + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public UDPserver(int port) { + this.port = port; + } + + public void start() { + System.out.println("SERVER: Waiting for incomming connections..."); + System.out.println("DATE TIME IP:PORT received_data"); + try { + s = new DatagramSocket(this.port); + while (true) { + byte[] data = new byte[1412]; + DatagramPacket p = new DatagramPacket(data, + data.length); + s.receive(p); + System.out.print(sdf.format(new Date()).toString() + " "); + System.out.print(p.getSocketAddress() + " "); + System.out.println(new String(p.getData())); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/udpClientSendOnly.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/udpClientSendOnly.ino new file mode 100644 index 0000000..da77a35 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/udpClientSendOnly.ino @@ -0,0 +1,40 @@ + +#include +#include + +static byte mymac[] = { 0x1A,0x2B,0x3C,0x4D,0x5E,0x6F }; +byte Ethernet::buffer[700]; +static uint32_t timer; + +char website[] PROGMEM = "server.example.net"; +const int dstPort PROGMEM = 1234; + +const int srcPort PROGMEM = 4321; + +void setup () { + Serial.begin(9600); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println( "Failed to access Ethernet controller"); + if (!ether.dhcpSetup()) + Serial.println("DHCP failed"); + + ether.printIp("IP: ", ether.myip); + ether.printIp("GW: ", ether.gwip); + ether.printIp("DNS: ", ether.dnsip); + + if (!ether.dnsLookup(website)) + Serial.println("DNS failed"); + + ether.printIp("SRV: ", ether.hisip); +} + +char textToSend[] = "test 123"; + +void loop () { + if (millis() > timer) { + timer = millis() + 5000; + //static void sendUdp (char *data,uint8_t len,uint16_t sport, uint8_t *dip, uint16_t dport); + ether.sendUdp(textToSend, sizeof(textToSend), srcPort, ether.hisip, dstPort ); + } +} diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpListener/udpListener.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpListener/udpListener.ino new file mode 100644 index 0000000..7f9806c --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpListener/udpListener.ino @@ -0,0 +1,101 @@ +// Demonstrates usage of the new udpServer feature. +//You can register the same function to multiple ports, and multiple functions to the same port. +// +// 2013-4-7 Brian Lee + + +//************************************************************* +// +// IT DOESN'T WORK ON STM32 YET (IS NOT PORTED YET). +// +//************************************************************* +#include +#include + +#define STATIC 0 // set to 1 to disable DHCP (adjust myip/gwip values below) + +#if STATIC +// ethernet interface ip address +static byte myip[] = { 192,168,0,200 }; +// gateway ip address +static byte gwip[] = { 192,168,0,1 }; +#endif + +// ethernet mac address - must be unique on your network +static byte mymac[] = { 0x70,0x69,0x69,0x2D,0x30,0x31 }; + +byte Ethernet::buffer[500]; // tcp/ip send and receive buffer + +//callback that prints received packets to the serial port +void udpSerialPrint(word port, byte ip[4], const char *data, word len) { + IPAddress src(ip[0], ip[1], ip[2], ip[3]); + Serial.println(src); + Serial.println(port); + Serial.println(data); + Serial.println(len); +} + +void setup(){ + Serial.begin(57600); + Serial.println(F("\n[backSoon]")); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println(F("Failed to access Ethernet controller")); +#if STATIC + ether.staticSetup(myip, gwip); +#else + if (!ether.dhcpSetup()) + Serial.println(F("DHCP failed")); +#endif + + ether.printIp("IP: ", ether.myip); + ether.printIp("GW: ", ether.gwip); + ether.printIp("DNS: ", ether.dnsip); + + //register udpSerialPrint() to port 1337 + ether.udpServerListenOnPort(&udpSerialPrint, 1337); + + //register udpSerialPrint() to port 42. + ether.udpServerListenOnPort(&udpSerialPrint, 42); +} + +void loop(){ + //this must be called for ethercard functions to work. + ether.packetLoop(ether.packetReceive()); +} + + +/* +//Processing sketch to send test UDP packets. + +import hypermedia.net.*; + + UDP udp; // define the UDP object + + + void setup() { + udp = new UDP( this, 6000 ); // create a new datagram connection on port 6000 + //udp.log( true ); // <-- printout the connection activity + udp.listen( true ); // and wait for incoming message + } + + void draw() + { + } + + void keyPressed() { + String ip = "192.168.0.200"; // the remote IP address + int port = 1337; // the destination port + + udp.send("Greetings via UDP!", ip, port ); // the message to send + + } + + void receive( byte[] data ) { // <-- default handler + //void receive( byte[] data, String ip, int port ) { // <-- extended handler + + for(int i=0; i < data.length; i++) + print(char(data[i])); + println(); + } +*/ diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/webClient/webClient.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/webClient/webClient.ino new file mode 100644 index 0000000..12acc4a --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/webClient/webClient.ino @@ -0,0 +1,69 @@ +// Demo using DHCP and DNS to perform a web client request. +// 2011-06-08 http://opensource.org/licenses/mit-license.php +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +// ethernet interface mac address, must be unique on the LAN +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +byte Ethernet::buffer[700]; +static uint32_t timer; + +const char website[] PROGMEM = "www.google.com"; + +// called when the client request is complete +static void my_callback (byte status, uint16_t off, uint16_t len) { + Serial.println(">>>"); + Ethernet::buffer[off+300] = 0; + Serial.print((const char*) Ethernet::buffer + off); + Serial.println("..."); +} + +void setup () { + Serial.begin(57600); + Serial.println(F("\n[webClient]")); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) + Serial.println(F("Failed to access Ethernet controller")); + if (!ether.dhcpSetup()) + Serial.println(F("DHCP failed")); + + ether.printIp("IP: ", ether.myip); + ether.printIp("GW: ", ether.gwip); + ether.printIp("DNS: ", ether.dnsip); + + if (!ether.dnsLookup(website)) + Serial.println("DNS failed"); + + ether.printIp("SRV: ", ether.hisip); +} + +void loop () { + ether.packetLoop(ether.packetReceive()); + + if (millis() > timer) { + timer = millis() + 5000; + Serial.println(); + Serial.print("<<< REQ "); + ether.browseUrl(PSTR("/foo/"), "bar", website, my_callback); + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/xively/xively.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/xively/xively.ino new file mode 100644 index 0000000..3541743 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/xively/xively.ino @@ -0,0 +1,158 @@ +// Simple demo for feeding some random data to Pachube. +// 2011-07-08 http://opensource.org/licenses/mit-license.php + +// Handle returning code and reset ethernet module if needed +// 2013-10-22 hneiraf@gmail.com +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +// +// + +#include +#include + +// change these settings to match your own setup +#define FEED "12345678" //Write here your FEED key (look at "Feed Keys" on xively. +#define APIKEY "asgEEwewtwerweTRRWER323SSDFfds" //Write your own APIKEY. + +// ethernet interface mac address, must be unique on the LAN +static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; + +const char website[] PROGMEM = "api.xively.com"; + +byte Ethernet::buffer[350]; +uint32_t timer; +Stash stash; +byte session; + +//timing variable +int res = 0; + + + +void setup () { + Serial.begin(57600); + Serial.println("\n[Xively example]"); + + //Initialize Ethernet + initialize_ethernet(); +} + + +void loop () { + + //if correct answer is not received then re-initialize ethernet module + if (res > 220){ + initialize_ethernet(); + } + + res = res + 1; + + ether.packetLoop(ether.packetReceive()); + + //200 res = 10 seconds (50ms each res) + if (res == 200) { + + + //Generate random info + float demo = random(0,500); + word one = random(0,500); + String msje; + + if (demo < 250){ + msje = "low"; + } + else{ + msje = "high"; + } + + + // generate two fake values as payload - by using a separate stash, + // we can determine the size of the generated message ahead of time + byte sd = stash.create(); + stash.print("demo,"); + stash.println(demo); + stash.print("one,"); + stash.println(one); + stash.print("mensaje,"); + stash.println(msje); + stash.save(); + + //Display data to be sent + Serial.println(demo); + Serial.println(one); + + + // generate the header with payload - note that the stash size is used, + // and that a "stash descriptor" is passed in as argument using "$H" + Stash::prepare(PSTR("PUT http://$F/v2/feeds/$F.csv HTTP/1.0" "\r\n" + "Host: $F" "\r\n" + "X-PachubeApiKey: $F" "\r\n" + "Content-Length: $D" "\r\n" + "\r\n" + "$H"), + website, PSTR(FEED), website, PSTR(APIKEY), stash.size(), sd); + + // send the packet - this also releases all stash buffers once done + session = ether.tcpSend(); + } + + const char* reply = ether.tcpReply(session); + + if (reply != 0) { + res = 0; + Serial.println(reply); + } + delay(50); +} + + + +void initialize_ethernet(void){ + for(;;){ // keep trying until you succeed + //Reinitialize ethernet module + pinMode(5, OUTPUT); + Serial.println("Reseting Ethernet..."); + digitalWrite(5, LOW); + delay(1000); + digitalWrite(5, HIGH); + delay(500); + + if (ether.begin(sizeof Ethernet::buffer, mymac) == 0){ + Serial.println( "Failed to access Ethernet controller"); + continue; + } + + if (!ether.dhcpSetup()){ + Serial.println("DHCP failed"); + continue; + } + + ether.printIp("IP: ", ether.myip); + ether.printIp("GW: ", ether.gwip); + ether.printIp("DNS: ", ether.dnsip); + + if (!ether.dnsLookup(website)) + Serial.println("DNS failed"); + + ether.printIp("SRV: ", ether.hisip); + + //reset init value + res = 0; + break; + } +} \ No newline at end of file diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/Doxymods.css b/STM32F1/libraries/Serasidis_EtherCard_STM/src/Doxymods.css new file mode 100644 index 0000000..ec01e9e --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/Doxymods.css @@ -0,0 +1,73 @@ +/* Get rid of all those overriden font families */ +body, table, div, p, dl, +#projectname, +#projectbrief, +#nav-tree .label { + font: 15px/21px Georgia,serif +} + +#projectname { + color: #990000; + font-weight: bold; + font-size: 24px; +} + +#titlearea table { + padding: 20px; +} + +dl.reflist dt, div.memproto { + border: 1px solid #A8B8D9; +} + +dl.reflist dd, div.memdoc { + border-width: 0; +} + +div.contents { + margin-left: 20px; margin-right: 16px; + width: 700 px; +} + +/* Get rid of the gradient backgrounds and background colors */ +div.header, +#nav-tree, +.navpath ul, +.memproto, dl.reflist dt { + background: none; +} +#nav-tree .selected { + background: none; + background-color: #990000; + text-shadow: none; +} + +a, a:link, a:visited { + color: #2A5685; + text-decoration: underline; +} +a:active, a:hover { + color: #CC0000; +} + +.directory tr.even, +pre.fragment, +.mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams, +.memproto, dl.reflist dt { + background-color: #EEE; + box-shadow: none; + border-radius: 0; +} +.memdoc, dl.reflist dd { + background: none; + box-shadow: none; + border-radius: 0; +} +pre.fragment { + background-color: #FAFAFA; + border: 1px solid #DADADA; + margin: 1em 1em 1em 1.6em; + overflow-x: auto; + overflow-y: hidden; + width: auto; +} diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.cpp new file mode 100644 index 0000000..be99de4 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.cpp @@ -0,0 +1,433 @@ +// This code slightly follows the conventions of, but is not derived from: +// EHTERSHIELD_H library for Arduino etherShield +// Copyright (c) 2008 Xing Yu. All right reserved. (this is LGPL v2.1) +// It is however derived from the enc28j60 and ip code (which is GPL v2) +// Author: Pascal Stang +// Modified by: Guido Socher +// DHCP code: Andrew Lindsay +// Hence: GPL V2 +// +// 2010-05-19 +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- + + +#include +#include +//#include + +//#define FLOATEMIT // uncomment line to enable $T in emit_P for float emitting + +byte Stash::map[256/8]; +Stash::Block Stash::bufs[2]; + +uint8_t Stash::allocBlock () { + for (uint8_t i = 0; i < sizeof map; ++i) + if (map[i] != 0) + for (uint8_t j = 0; j < 8; ++j) + if (bitRead(map[i], j)) { + bitClear(map[i], j); + return (i << 3) + j; + } + return 0; +} + +void Stash::freeBlock (uint8_t block) { + bitSet(map[block>>3], block & 7); +} + +uint8_t Stash::fetchByte (uint8_t blk, uint8_t off) { + return blk == bufs[0].bnum ? bufs[0].bytes[off] : + blk == bufs[1].bnum ? bufs[1].bytes[off] : + ether.peekin(blk, off); +} + +void Stash::initMap (uint8_t last) { + while (--last > 0) + freeBlock(last); +} + +void Stash::load (uint8_t idx, uint8_t blk) { + if (blk != bufs[idx].bnum) { + if (idx == 0) { + ether.copyout(bufs[idx].bnum, bufs[idx].bytes); + if (blk == bufs[1].bnum) + bufs[1].bnum = 255; // forget read page if same + } else if (blk == bufs[0].bnum) { + // special case: read page is same as write buffer + memcpy(&bufs[1], &bufs[0], sizeof bufs[0]); + return; + } + bufs[idx].bnum = blk; + ether.copyin(bufs[idx].bnum, bufs[idx].bytes); + } +} + +uint8_t Stash::freeCount () { + uint8_t count = 0; + for (uint8_t i = 0; i < 256/8; ++i) + for (uint8_t m = 0x80; m != 0; m >>= 1) + if (map[i] & m) + ++count; + return count; +} + +uint8_t Stash::create () { + uint8_t blk = allocBlock(); + load(0, blk); + bufs[0].head.count = 0; + bufs[0].head.first = bufs[0].head.last = blk; + bufs[0].tail = sizeof (StashHeader); + bufs[0].next = 0; + return open(blk); +} + +uint8_t Stash::open (uint8_t blk) { + curr = blk; + offs = sizeof (StashHeader); + load(1, curr); + memcpy((StashHeader*) this, bufs[1].bytes, sizeof (StashHeader)); + return curr; +} + +void Stash::save () { + load(0, first); + memcpy(bufs[0].bytes, (StashHeader*) this, sizeof (StashHeader)); + if (bufs[1].bnum == first) + load(1, 0); // invalidates original in case it was the same block +} + +void Stash::release () { + while (first > 0) { + freeBlock(first); + first = ether.peekin(first, 63); + } +} + +void Stash::put (char c) { + load(0, last); + uint8_t t = bufs[0].tail; + bufs[0].bytes[t++] = c; + if (t <= 62) + bufs[0].tail = t; + else { + bufs[0].next = allocBlock(); + last = bufs[0].next; + load(0, last); + bufs[0].tail = bufs[0].next = 0; + ++count; + } +} + +char Stash::get () { + load(1, curr); + if (curr == last && offs >= bufs[1].tail) + return 0; + uint8_t b = bufs[1].bytes[offs]; + if (++offs >= 63 && curr != last) { + curr = bufs[1].next; + offs = 0; + } + return b; +} + +uint16_t Stash::size () { + return 63 * count + fetchByte(last, 62) - sizeof (StashHeader); +} + +static char* wtoa (uint16_t value, char* ptr) { + if (value > 9) + ptr = wtoa(value / 10, ptr); + *ptr = '0' + value % 10; + *++ptr = 0; + return ptr; +} + +void Stash::prepare (PGM_P fmt, ...) { + Stash::load(0, 0); + uint16_t* segs = Stash::bufs[0].words; + *segs++ = strlen_P(fmt); +#ifdef __AVR__ + *segs++ = (uint16_t) fmt; +#else + *segs++ = (uint32_t) fmt; + *segs++ = (uint32_t) fmt >> 16; +#endif + va_list ap; + va_start(ap, fmt); + for (;;) { + char c = pgm_read_byte(fmt++); + if (c == 0) + break; + if (c == '$') { +#ifdef __AVR__ + uint16_t argval = va_arg(ap, uint16_t), arglen = 0; +#else + uint32_t argval = va_arg(ap, int), arglen = 0; +#endif + switch (pgm_read_byte(fmt++)) { + case 'D': { + char buf[7]; + wtoa(argval, buf); + arglen = strlen(buf); + break; + } + case 'S': + arglen = strlen((const char*) argval); + break; + case 'F': + arglen = strlen_P((PGM_P) argval); + break; + case 'E': { + byte* s = (byte*) argval; + char d; + //while ((d = eeprom_read_byte(s++)) != 0) + // ++arglen; + break; + } + case 'H': { + Stash stash (argval); + arglen = stash.size(); + break; + } + } +#ifdef __AVR__ + *segs++ = argval; +#else + *segs++ = argval; + *segs++ = argval >> 16; +#endif + Stash::bufs[0].words[0] += arglen - 2; + } + } + va_end(ap); +} + +uint16_t Stash::length () { + Stash::load(0, 0); + return Stash::bufs[0].words[0]; +} + +void Stash::extract (uint16_t offset, uint16_t count, void* buf) { + Stash::load(0, 0); + uint16_t* segs = Stash::bufs[0].words; +#ifdef __AVR__ + PGM_P fmt = (PGM_P) *++segs; +#else + PGM_P fmt = (PGM_P)((segs[2] << 16) | segs[1]); + segs += 2; +#endif + Stash stash; + char mode = '@', tmp[7], *ptr = NULL, *out = (char*) buf; + for (uint16_t i = 0; i < offset + count; ) { + char c = 0; + switch (mode) { + case '@': { + c = pgm_read_byte(fmt++); + if (c == 0) + return; + if (c != '$') + break; +#ifdef __AVR__ + uint16_t arg = *++segs; +#else + uint32_t arg = *++segs; + arg |= *++segs << 16; +#endif + mode = pgm_read_byte(fmt++); + switch (mode) { + case 'D': + wtoa(arg, tmp); + ptr = tmp; + break; + case 'S': + case 'F': + case 'E': + ptr = (char*) arg; + break; + case 'H': + stash.open(arg); + ptr = (char*) &stash; + break; + } + continue; + } + case 'D': + case 'S': + c = *ptr++; + break; + case 'F': + c = pgm_read_byte(ptr++); + break; + case 'E': + //c = eeprom_read_byte((byte*) ptr++); + break; + case 'H': + c = ((Stash*) ptr)->get(); + break; + } + if (c == 0) { + mode = '@'; + continue; + } + if (i >= offset) + *out++ = c; + ++i; + } +} + +void Stash::cleanup () { + Stash::load(0, 0); + uint16_t* segs = Stash::bufs[0].words; +#ifdef __AVR__ + PGM_P fmt = (PGM_P) *++segs; +#else + PGM_P fmt = (PGM_P)((segs[2] << 16) | segs[1]); + segs += 2; +#endif + for (;;) { + char c = pgm_read_byte(fmt++); + if (c == 0) + break; + if (c == '$') { +#ifdef __AVR__ + uint16_t arg = *++segs; +#else + uint32_t arg = *++segs; + arg |= *++segs << 16; +#endif + if (pgm_read_byte(fmt++) == 'H') { + Stash stash (arg); + stash.release(); + } + } + } +} + +void BufferFiller::emit_p(PGM_P fmt, ...) { + va_list ap; + va_start(ap, fmt); + for (;;) { + char c = pgm_read_byte(fmt++); + if (c == 0) + break; + if (c != '$') { + *ptr++ = c; + continue; + } + c = pgm_read_byte(fmt++); + switch (c) { + case 'D': +#ifdef __AVR__ + wtoa(va_arg(ap, uint16_t), (char*) ptr); +#else + wtoa(va_arg(ap, int), (char*) ptr); +#endif + break; +#ifdef FLOATEMIT + case 'T': + dtostrf ( va_arg(ap, double), 10, 3, (char*)ptr ); + break; +#endif + case 'H': { +#ifdef __AVR__ + char p1 = va_arg(ap, uint16_t); +#else + char p1 = va_arg(ap, int); +#endif + char p2; + p2 = (p1 >> 4) & 0x0F; + p1 = p1 & 0x0F; + if (p1 > 9) p1 += 0x07; // adjust 0x0a-0x0f to come out 'a'-'f' + p1 += 0x30; // and complete + if (p2 > 9) p2 += 0x07; // adjust 0x0a-0x0f to come out 'a'-'f' + p2 += 0x30; // and complete + *ptr++ = p2; + *ptr++ = p1; + continue; + } + case 'L': + //ltoa(va_arg(ap, long), (char*) ptr, 10); + break; + case 'S': + strcpy((char*) ptr, va_arg(ap, const char*)); + break; + case 'F': { + PGM_P s = va_arg(ap, PGM_P); + char d; + while ((d = pgm_read_byte(s++)) != 0) + *ptr++ = d; + continue; + } + case 'E': { + byte* s = va_arg(ap, byte*); + char d; + //while ((d = eeprom_read_byte(s++)) != 0) + // *ptr++ = d; + continue; + } + default: + *ptr++ = c; + continue; + } + ptr += strlen((char*) ptr); + } + va_end(ap); +} + +EtherCard ether; + +uint8_t EtherCard::mymac[6]; // my MAC address +uint8_t EtherCard::myip[4]; // my ip address +uint8_t EtherCard::netmask[4]; // subnet mask +uint8_t EtherCard::broadcastip[4]; // broadcast address +uint8_t EtherCard::gwip[4]; // gateway +uint8_t EtherCard::dhcpip[4]; // dhcp server +uint8_t EtherCard::dnsip[4]; // dns server +uint8_t EtherCard::hisip[4]; // ip address of remote host +uint16_t EtherCard::hisport = 80; // tcp port to browse to +bool EtherCard::using_dhcp = false; +bool EtherCard::persist_tcp_connection = false; +uint16_t EtherCard::delaycnt = 0; //request gateway ARP lookup + +uint8_t EtherCard::begin (const uint16_t size, + const uint8_t* macaddr, + uint8_t csPin) { + using_dhcp = false; + Stash::initMap(56); + copyMac(mymac, macaddr); + return initialize(size, mymac, csPin); +} + +bool EtherCard::staticSetup (const uint8_t* my_ip, + const uint8_t* gw_ip, + const uint8_t* dns_ip, + const uint8_t* mask) { + using_dhcp = false; + + if (my_ip != 0) + copyIp(myip, my_ip); + if (gw_ip != 0) + setGwIp(gw_ip); + if (dns_ip != 0) + copyIp(dnsip, dns_ip); + if(mask != 0) + copyIp(netmask, mask); + updateBroadcastAddress(); + delaycnt = 0; //request gateway ARP lookup + return true; +} diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.h b/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.h new file mode 100644 index 0000000..7a85834 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.h @@ -0,0 +1,595 @@ +// This code slightly follows the conventions of, but is not derived from: +// EHTERSHIELD_H library for Arduino etherShield +// Copyright (c) 2008 Xing Yu. All right reserved. (this is LGPL v2.1) +// It is however derived from the enc28j60 and ip code (which is GPL v2) +// Author: Pascal Stang +// Modified by: Guido Socher +// DHCP code: Andrew Lindsay +// Hence: GPL V2 +// +// 2010-05-19 +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- + + + +#ifndef EtherCard_STM_h +#define EtherCard_STM_h +#ifndef __PROG_TYPES_COMPAT__ + #define __PROG_TYPES_COMPAT__ +#endif + +#if ARDUINO >= 100 +#include // Arduino 1.0 +#define WRITE_RESULT size_t +#define WRITE_RETURN return 1; +#else +#include // Arduino 0022 +#define WRITE_RESULT void +#define WRITE_RETURN +#endif + +#include +#include "enc28j60.h" +#include "net.h" + +/** This type definition defines the structure of a UDP server event handler callback funtion */ +typedef void (*UdpServerCallback)( + uint16_t dest_port, ///< Port the packet was sent to + uint8_t src_ip[4], ///< IP address of the sender + uint16_t src_port, ///< Port the packet was sent from + const char *data, ///< UDP payload data + uint16_t len); ///< Length of the payload data + +/** This type definition defines the structure of a DHCP Option callback funtion */ +typedef void (*DhcpOptionCallback)( + uint8_t option, ///< The option number + const byte* data, ///< DHCP option data + uint8_t len); ///< Length of the DHCP option data + + +/** This structure describes the structure of memory used within the ENC28J60 network interface. */ +typedef struct { + uint8_t count; ///< Number of allocated pages + uint8_t first; ///< First allocated page + uint8_t last; ///< Last allocated page +} StashHeader; + +/** This class provides access to the memory within the ENC28J60 network interface. */ +class Stash : public /*Stream*/ Print, private StashHeader { + uint8_t curr; //!< Current page + uint8_t offs; //!< Current offset in page + + typedef struct { + union { + uint8_t bytes[64]; + uint16_t words[32]; + struct { + StashHeader head; + uint8_t filler[59]; + uint8_t tail; + uint8_t next; + }; + }; + uint8_t bnum; + } Block; + + static uint8_t allocBlock (); + static void freeBlock (uint8_t block); + static uint8_t fetchByte (uint8_t blk, uint8_t off); + + static Block bufs[2]; + static uint8_t map[256/8]; + +public: + static void initMap (uint8_t last); + static void load (uint8_t idx, uint8_t blk); + static uint8_t freeCount (); + + Stash () : curr (0) { first = 0; } + Stash (uint8_t fd) { open(fd); } + + uint8_t create (); + uint8_t open (uint8_t blk); + void save (); + void release (); + + void put (char c); + char get (); + uint16_t size (); + + virtual WRITE_RESULT write(uint8_t b) { put(b); WRITE_RETURN } + + // virtual int available() { + // if (curr != last) + // return 1; + // load(1, last); + // return offs < bufs[1].tail; + // } + // virtual int read() { + // return available() ? get() : -1; + // } + // virtual int peek() { + // return available() ? bufs[1].bytes[offs] : -1; + // } + // virtual void flush() { + // curr = last; + // offs = 63; + // } + + static void prepare (PGM_P fmt, ...); + static uint16_t length (); + static void extract (uint16_t offset, uint16_t count, void* buf); + static void cleanup (); + + friend void dumpBlock (const char* msg, uint8_t idx); // optional + friend void dumpStash (const char* msg, void* ptr); // optional +}; + +/** This class populates network send and receive buffers. +* +* This class provides formatted printing into memory. Users can use it to write into send buffers. +* +* Nota: PGM_P: is a pointer to a string in program space (defined in the source code) +* +* # Format string +* +* | Format | Parameter | Output +* |--------|-------------|---------- +* | $D | uint16_t | Decimal representation +* | $T ¤ | double | Decimal representation with 3 digits after decimal sign ([-]d.ddd) +* | $H | uint16_t | Hexadecimal value of lsb (from 00 to ff) +* | $L | long | Decimal representation +* | $S | const char* | Copy null terminated string from main memory +* | $F | PGM_P | Copy null terminated string from program space +* | $E | byte* | Copy null terminated string from EEPROM space +* | $$ | _none_ | '$' +* +* ¤ _Available only if FLOATEMIT is defined_ +* +* # Examples +* ~~~~~~~~~~~~~{.c} +* uint16_t ddd = 123; +* double ttt = 1.23; +* uint16_t hhh = 0xa4; +* long lll = 123456789; +* char * sss; +* char fff[] PROGMEM = "MyMemory"; +* +* sss[0] = 'G'; +* sss[1] = 'P'; +* sss[2] = 'L'; +* sss[3] = 0; +* buf.emit_p( PSTR("ddd=$D\n"), ddd ); // "ddd=123\n" +* buf.emit_p( PSTR("ttt=$T\n"), ttt ); // "ttt=1.23\n" **TO CHECK** +* buf.emit_p( PSTR("hhh=$H\n"), hhh ); // "hhh=a4\n" +* buf.emit_p( PSTR("lll=$L\n"), lll ); // "lll=123456789\n" +* buf.emit_p( PSTR("sss=$S\n"), sss ); // "sss=GPL\n" +* buf.emit_p( PSTR("fff=$F\n"), fff ); // "fff=MyMemory\n" +* ~~~~~~~~~~~~~ +* +*/ +class BufferFiller : public Print { + uint8_t *start; //!< Pointer to start of buffer + uint8_t *ptr; //!< Pointer to cursor position +public: + /** @brief Empty constructor + */ + BufferFiller () {} + + /** @brief Constructor + * @param buf Pointer to the ethernet data buffer + */ + BufferFiller (uint8_t* buf) : start (buf), ptr (buf) {} + + /** @brief Add formatted text to buffer + * @param fmt Format string (see Class description) + * @param ... parameters for format string + */ + void emit_p (PGM_P fmt, ...); + + /** @brief Add data to buffer from main memory + * @param s Pointer to data + * @param n Number of characters to copy + */ + void emit_raw (const char* s, uint16_t n) { memcpy(ptr, s, n); ptr += n; } + + /** @brief Add data to buffer from program space string + * @param p Program space string pointer + * @param n Number of characters to copy + */ + void emit_raw_p (PGM_P p, uint16_t n) { memcpy_P(ptr, p, n); ptr += n; } + + /** @brief Get pointer to start of buffer + * @return uint8_t* Pointer to start of buffer + */ + uint8_t* buffer () const { return start; } + + /** @brief Get cursor position + * @return uint16_t Cursor postion + */ + uint16_t position () const { return ptr - start; } + + /** @brief Write one byte to buffer + * @param v Byte to add to buffer + */ + virtual WRITE_RESULT write (uint8_t v) { *ptr++ = v; WRITE_RETURN } +}; + +/** This class provides the main interface to a ENC28J60 based network interface card and is the class most users will use. +* @note All TCP/IP client (outgoing) connections are made from source port in range 2816-3071. Do not use these source ports for other purposes. +*/ +class EtherCard : public Ethernet { +public: + static uint8_t mymac[6]; ///< MAC address + static uint8_t myip[4]; ///< IP address + static uint8_t netmask[4]; ///< Netmask + static uint8_t broadcastip[4]; ///< Subnet broadcast address + static uint8_t gwip[4]; ///< Gateway + static uint8_t dhcpip[4]; ///< DHCP server IP address + static uint8_t dnsip[4]; ///< DNS server IP address + static uint8_t hisip[4]; ///< DNS lookup result + static uint16_t hisport; ///< TCP port to connect to (default 80) + static bool using_dhcp; ///< True if using DHCP + static bool persist_tcp_connection; ///< False to break connections on first packet received + static uint16_t delaycnt; ///< Counts number of cycles of packetLoop when no packet received - used to trigger periodic gateway ARP request + + // EtherCard.cpp + /** @brief Initialise the network interface + * @param size Size of data buffer + * @param macaddr Hardware address to assign to the network interface (6 bytes) + * @param csPin Arduino pin number connected to chip select. Default = 8 + * @return uint8_t Firmware version or zero on failure. + */ + static uint8_t begin (const uint16_t size, const uint8_t* macaddr, + uint8_t csPin =PA8); + + /** @brief Configure network interface with static IP + * @param my_ip IP address (4 bytes). 0 for no change. + * @param gw_ip Gateway address (4 bytes). 0 for no change. Default = 0 + * @param dns_ip DNS address (4 bytes). 0 for no change. Default = 0 + * @param mask Subnet mask (4 bytes). 0 for no change. Default = 0 + * @return bool Returns true on success - actually always true + */ + static bool staticSetup (const uint8_t* my_ip, + const uint8_t* gw_ip = 0, + const uint8_t* dns_ip = 0, + const uint8_t* mask = 0); + + // tcpip.cpp + /** @brief Sends a UDP packet to the IP address of last processed received packet + * @param data Pointer to data payload + * @param len Size of data payload (max 220) + * @param port Source IP port + */ + static void makeUdpReply (const char *data, uint8_t len, uint16_t port); + + /** @brief Parse received data + * @param plen Size of data to parse (e.g. return value of packetReceive()). + * @return uint16_t Offset of TCP payload data in data buffer or zero if packet processed + * @note Data buffer is shared by receive and transmit functions + * @note Only handles ARP and IP + */ + static uint16_t packetLoop (uint16_t plen); + + /** @brief Accept a TCP/IP connection + * @param port IP port to accept on - do nothing if wrong port + * @param plen Number of bytes in packet + * @return uint16_t Offset within packet of TCP payload. Zero for no data. + */ + static uint16_t accept (uint16_t port, uint16_t plen); + + /** @brief Send a response to a HTTP request + * @param dlen Size of the HTTP (TCP) payload + */ + static void httpServerReply (uint16_t dlen); + + /** @brief Send a response to a HTTP request + * @param dlen Size of the HTTP (TCP) payload + * @param flags TCP flags + */ + static void httpServerReply_with_flags (uint16_t dlen , uint8_t flags); + + /** @brief Acknowledge TCP message + * @todo Is this / should this be private? + */ + static void httpServerReplyAck (); + + /** @brief Set the gateway address + * @param gwipaddr Gateway address (4 bytes) + */ + static void setGwIp (const uint8_t *gwipaddr); + + /** @brief Updates the broadcast address based on current IP address and subnet mask + */ + static void updateBroadcastAddress(); + + /** @brief Check if got gateway hardware address (ARP lookup) + * @return unit8_t True if gateway found + */ + static uint8_t clientWaitingGw (); + + /** @brief Check if got gateway DNS address (ARP lookup) + * @return unit8_t True if DNS found + */ + static uint8_t clientWaitingDns (); + + /** @brief Prepare a TCP request + * @param result_cb Pointer to callback function that handles TCP result + * @param datafill_cb Pointer to callback function that handles TCP data payload + * @param port Remote TCP/IP port to connect to + * @return unit8_t ID of TCP/IP session (0-7) + * @note Return value provides id of the request to allow up to 7 concurrent requests + */ + static uint8_t clientTcpReq (uint8_t (*result_cb)(uint8_t,uint8_t,uint16_t,uint16_t), + uint16_t (*datafill_cb)(uint8_t),uint16_t port); + + /** @brief Prepare HTTP request + * @param urlbuf Pointer to c-string URL folder + * @param urlbuf_varpart Pointer to c-string URL file + * @param hoststr Pointer to c-string hostname + * @param additionalheaderline Pointer to c-string with additional HTTP header info + * @param callback Pointer to callback function to handle response + * @note Request sent in main packetloop + */ + static void browseUrl (const char *urlbuf, const char *urlbuf_varpart, + const char *hoststr, const char *additionalheaderline, + void (*callback)(uint8_t,uint16_t,uint16_t)); + + /** @brief Prepare HTTP request + * @param urlbuf Pointer to c-string URL folder + * @param urlbuf_varpart Pointer to c-string URL file + * @param hoststr Pointer to c-string hostname + * @param callback Pointer to callback function to handle response + * @note Request sent in main packetloop + */ + static void browseUrl (const char *urlbuf, const char *urlbuf_varpart, + const char *hoststr, + void (*callback)(uint8_t,uint16_t,uint16_t)); + + /** @brief Prepare HTTP post message + * @param urlbuf Pointer to c-string URL folder + * @param hoststr Pointer to c-string hostname + * @param additionalheaderline Pointer to c-string with additional HTTP header info + * @param postval Pointer to c-string HTML Post value + * @param callback Pointer to callback function to handle response + * @note Request sent in main packetloop + */ + static void httpPost (const char *urlbuf, const char *hoststr, + const char *additionalheaderline, const char *postval, + void (*callback)(uint8_t,uint16_t,uint16_t)); + + /** @brief Send NTP request + * @param ntpip IP address of NTP server + * @param srcport IP port to send from + */ + static void ntpRequest (uint8_t *ntpip,uint8_t srcport); + + /** @brief Process network time protocol response + * @param time Pointer to integer to hold result + * @param dstport_l Destination port to expect response. Set to zero to accept on any port + * @return uint8_t True (1) on success + */ + static uint8_t ntpProcessAnswer (uint32_t *time, uint8_t dstport_l); + + /** @brief Prepare a UDP message for transmission + * @param sport Source port + * @param dip Pointer to 4 byte destination IP address + * @param dport Destination port + */ + static void udpPrepare (uint16_t sport, const uint8_t *dip, uint16_t dport); + + /** @brief Transmit UDP packet + * @param len Size of payload + */ + static void udpTransmit (uint16_t len); + + /** @brief Sends a UDP packet + * @param data Pointer to data + * @param len Size of payload (maximum 220 octets / bytes) + * @param sport Source port + * @param dip Pointer to 4 byte destination IP address + * @param dport Destination port + */ + static void sendUdp (const char *data, uint8_t len, uint16_t sport, + const uint8_t *dip, uint16_t dport); + + /** @brief Resister the function to handle ping events + * @param cb Pointer to function + */ + static void registerPingCallback (void (*cb)(uint8_t*)); + + /** @brief Send ping + * @param destip Ponter to 4 byte destination IP address + */ + static void clientIcmpRequest (const uint8_t *destip); + + /** @brief Check for ping response + * @param ip_monitoredhost Pointer to 4 byte IP address of host to check + * @return uint8_t True (1) if ping response from specified host + */ + static uint8_t packetLoopIcmpCheckReply (const uint8_t *ip_monitoredhost); + + /** @brief Send a wake on lan message + * @param wolmac Pointer to 6 byte hardware (MAC) address of host to send message to + */ + static void sendWol (uint8_t *wolmac); + + // new stash-based API + /** @brief Send TCP request + */ + static uint8_t tcpSend (); + + /** @brief Get TCP reply + * @return char* Pointer to TCP reply payload. NULL if no data. + */ + static const char* tcpReply (uint8_t fd); + + /** @brief Configure TCP connections to be persistent or not + * @param persist True to maintain TCP connection. False to finish TCP connection after first packet. + */ + static void persistTcpConnection(bool persist); + + //udpserver.cpp + /** @brief Register function to handle incomint UDP events + * @param callback Function to handle event + * @param port Port to listen on + */ + static void udpServerListenOnPort(UdpServerCallback callback, uint16_t port); + + /** @brief Pause listing on UDP port + * @brief port Port to pause + */ + static void udpServerPauseListenOnPort(uint16_t port); + + /** @brief Resume listing on UDP port + * @brief port Port to pause + */ + static void udpServerResumeListenOnPort(uint16_t port); + + /** @brief Check if UDP server is listening on any ports + * @return bool True if listening on any ports + */ + static bool udpServerListening(); //called by tcpip, in packetLoop + + /** @brief Passes packet to UDP Server + * @param len Not used + * @return bool True if packet processed + */ + static bool udpServerHasProcessedPacket(uint16_t len); //called by tcpip, in packetLoop + + // dhcp.cpp + /** @brief Update DHCP state + * @param len Length of received data packet + */ + static void DhcpStateMachine(uint16_t len); + + /** @brief Not implemented + * @todo Implement dhcpStartTime or remove declaration + */ + static uint32_t dhcpStartTime (); + + /** @brief Not implemented + * @todo Implement dhcpLeaseTime or remove declaration + */ + static uint32_t dhcpLeaseTime (); + + /** @brief Not implemented + * @todo Implement dhcpLease or remove declaration + */ + static bool dhcpLease (); + + /** @brief Configure network interface with DHCP + * @return bool True if DHCP successful + * @note Blocks until DHCP complete or timeout after 60 seconds + */ + static bool dhcpSetup (const char *hname = NULL, bool fromRam =false); + + /** @brief Register a callback for a specific DHCP option number + * @param option The option number to request from the DHCP server + * @param callback The function to be call when the option is received + */ + static void dhcpAddOptionCallback(uint8_t option, DhcpOptionCallback callback); + + // dns.cpp + /** @brief Perform DNS lookup + * @param name Host name to lookup + * @param fromRam Set true to look up cached name. Default = false + * @return bool True on success. + * @note Result is stored in hisip member + */ + static bool dnsLookup (const char* name, bool fromRam =false); + + // webutil.cpp + /** @brief Copies an IP address + * @param dst Pointer to the 4 byte destination + * @param src Pointer to the 4 byte source + * @note There is no check of source or destination size. Ensure both are 4 bytes + */ + static void copyIp (uint8_t *dst, const uint8_t *src); + + /** @brief Copies a hardware address + * @param dst Pointer to the 6 byte destination + * @param src Pointer to the 6 byte destination + * @note There is no check of source or destination size. Ensure both are 6 bytes + */ + static void copyMac (uint8_t *dst, const uint8_t *src); + + /** @brief Output to serial port in dotted decimal IP format + * @param buf Pointer to 4 byte IP address + * @note There is no check of source or destination size. Ensure both are 4 bytes + */ + static void printIp (const uint8_t *buf); + + /** @brief Output message and IP address to serial port in dotted decimal IP format + * @param msg Pointer to null terminated string + * @param buf Pointer to 4 byte IP address + * @note There is no check of source or destination size. Ensure both are 4 bytes + */ + static void printIp (const char* msg, const uint8_t *buf); + + /** @brief Output Flash String Helper and IP address to serial port in dotted decimal IP format + * @param ifsh Pointer to Flash String Helper + * @param buf Pointer to 4 byte IP address + * @note There is no check of source or destination size. Ensure both are 4 bytes + * @todo What is a FlashStringHelper? + */ + static void printIp (const __FlashStringHelper *ifsh, const uint8_t *buf); + + /** @brief Search for a string of the form key=value in a string that looks like q?xyz=abc&uvw=defgh HTTP/1.1\\r\\n + * @param str Pointer to the null terminated string to search + * @param strbuf Pointer to buffer to hold null terminated result string + * @param maxlen Maximum length of result + * @param key Pointer to null terminated string holding the key to search for + * @return unit_t Length of the value. 0 if not found + * @note Ensure strbuf has memory allocated of at least maxlen + 1 (to accomodate result plus terminating null) + */ + static uint8_t findKeyVal(const char *str,char *strbuf, + uint8_t maxlen, const char *key); + + /** @brief Decode a URL string e.g "hello%20joe" or "hello+joe" becomes "hello joe" + * @param urlbuf Pointer to the null terminated URL + * @note urlbuf is modified + */ + static void urlDecode(char *urlbuf); + + /** @brief Encode a URL, replacing illegal charaters like ' ' + * @param str Pointer to the null terminated string to encode + * @param urlbuf Pointer to a buffer to contain the null terminated encoded URL + * @note There must be enough space in urlbuf. In the worst case that is 3 times the length of str + */ + static void urlEncode(char *str,char *urlbuf); + + /** @brief Convert an IP address from dotted decimal formated string to 4 bytes + * @param bytestr Pointer to the 4 byte array to store IP address + * @param str Pointer to string to parse + * @return uint8_t 0 on success + */ + static uint8_t parseIp(uint8_t *bytestr,char *str); + + /** @brief Convert a byte array to a human readable display string + * @param resultstr Pointer to a buffer to hold the resulting null terminated string + * @param bytestr Pointer to the byte array containing the address to convert + * @param len Length of the array (4 for IP address, 6 for hardware (MAC) address) + * @param separator Delimiter character (typically '.' for IP address and ':' for hardware (MAC) address) + * @param base Base for numerical representation (typically 10 for IP address and 16 for hardware (MAC) address + */ + static void makeNetStr(char *resultstr,uint8_t *bytestr,uint8_t len, + char separator,uint8_t base); +}; + +extern EtherCard ether; //!< Global presentation of EtherCard class + +#endif diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/dhcp.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/dhcp.cpp new file mode 100644 index 0000000..f8f8f21 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/dhcp.cpp @@ -0,0 +1,397 @@ +// DHCP look-up functions based on the udp client +// http://www.ietf.org/rfc/rfc2131.txt +// +// Author: Andrew Lindsay +// Rewritten and optimized by Jean-Claude Wippler, http://jeelabs.org/ +// +// Rewritten dhcpStateMachine by Chris van den Hooven +// as to implement dhcp-renew when lease expires (jun 2012) +// +// Various modifications and bug fixes contributed by Victor Aprea (oct 2012) +// +// Copyright: GPL V2 +// See http://www.gnu.org/licenses/gpl.html + +//#define DHCPDEBUG + +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +//----------------------------------------------------------------- + +#include "EtherCard_STM.h" +#include "net.h" + +#define gPB ether.buffer + +#define DHCP_BOOTREQUEST 1 +#define DHCP_BOOTRESPONSE 2 + +// DHCP Message Type (option 53) (ref RFC 2132) +#define DHCP_DISCOVER 1 +#define DHCP_OFFER 2 +#define DHCP_REQUEST 3 +#define DHCP_DECLINE 4 +#define DHCP_ACK 5 +#define DHCP_NAK 6 +#define DHCP_RELEASE 7 + +// DHCP States for access in applications (ref RFC 2131) +enum { + DHCP_STATE_INIT, + DHCP_STATE_SELECTING, + DHCP_STATE_REQUESTING, + DHCP_STATE_BOUND, + DHCP_STATE_RENEWING, +}; + +/* + op 1 Message op code / message type. + 1 = BOOTREQUEST, 2 = BOOTREPLY + htype 1 Hardware address type, see ARP section in "Assigned + Numbers" RFC; e.g., '1' = 10mb ethernet. + hlen 1 Hardware address length (e.g. '6' for 10mb + ethernet). + hops 1 Client sets to zero, optionally used by relay agents + when booting via a relay agent. + xid 4 Transaction ID, a random number chosen by the + client, used by the client and server to associate + messages and responses between a client and a + server. + secs 2 Filled in by client, seconds elapsed since client + began address acquisition or renewal process. + flags 2 Flags (see figure 2). + ciaddr 4 Client IP address; only filled in if client is in + BOUND, RENEW or REBINDING state and can respond + to ARP requests. + yiaddr 4 'your' (client) IP address. + siaddr 4 IP address of next server to use in bootstrap; + returned in DHCPOFFER, DHCPACK by server. + giaddr 4 Relay agent IP address, used in booting via a + relay agent. + chaddr 16 Client hardware address. + sname 64 Optional server host name, null terminated string. + file 128 Boot file name, null terminated string; "generic" + name or null in DHCPDISCOVER, fully qualified + directory-path name in DHCPOFFER. + options var Optional parameters field. See the options + documents for a list of defined options. + */ + + + + +// size 236 +typedef struct { + byte op, htype, hlen, hops; + uint32_t xid; + uint16_t secs, flags; + byte ciaddr[4], yiaddr[4], siaddr[4], giaddr[4]; + byte chaddr[16], sname[64], file[128]; + // options +} DHCPdata; + +#define DHCP_SRC_PORT 67 +#define DHCP_DEST_PORT 68 + +// timeouts im ms +#define DHCP_REQUEST_TIMEOUT 10000 + +#define DHCP_HOSTNAME_MAX_LEN 32 + +static byte dhcpState = DHCP_STATE_INIT; +static char hostname[DHCP_HOSTNAME_MAX_LEN] = "Arduino-00"; +static uint32_t currentXid; +static uint32_t stateTimer; +static uint32_t leaseStart; +static uint32_t leaseTime; +static byte* bufPtr; + +static uint8_t dhcpCustomOptionNum = 0; +static DhcpOptionCallback dhcpCustomOptionCallback = NULL; + +// static uint8_t allOnes[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + +static void addToBuf (byte b) { + *bufPtr++ = b; +} + +static void addBytes (byte len, const byte* data) { + while (len-- > 0) + addToBuf(*data++); +} + + +// Main DHCP sending function + +// implemented +// state / msgtype +// INIT / DHCPDISCOVER +// SELECTING / DHCPREQUEST +// BOUND (RENEWING) / DHCPREQUEST + +// ---------------------------------------------------------- +// | |SELECTING |RENEWING |INIT | +// ---------------------------------------------------------- +// |broad/unicast |broadcast |unicast |broadcast | +// |server-ip |MUST |MUST NOT |MUST NOT | option 54 +// |requested-ip |MUST |MUST NOT |MUST NOT | option 50 +// |ciaddr |zero |IP address |zero | +// ---------------------------------------------------------- + +// options used (both send/receive) +// 12 Host Name Option +// 50 Requested IP Address +// 51 IP Address Lease Time +// 53 DHCP message type +// 54 Server-identifier +// 55 Parameter request list +// 58 Renewal (T1) Time Value +// 61 Client-identifier +// 255 End + +static void send_dhcp_message (void) { + + uint8_t allOnes[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + + memset(gPB, 0, UDP_DATA_P + sizeof( DHCPdata )); + + EtherCard::udpPrepare(DHCP_DEST_PORT, + (dhcpState == DHCP_STATE_BOUND ? EtherCard::dhcpip : allOnes), + DHCP_SRC_PORT); // SRC<->DST ?? + + if (dhcpState != DHCP_STATE_BOUND) + EtherCard::copyMac(gPB + ETH_DST_MAC, allOnes); //force broadcast mac + + // Build DHCP Packet from buf[UDP_DATA_P] + DHCPdata *dhcpPtr = (DHCPdata*) (gPB + UDP_DATA_P); + dhcpPtr->op = DHCP_BOOTREQUEST; + dhcpPtr->htype = 1; + dhcpPtr->hlen = 6; + dhcpPtr->xid = currentXid; + if (dhcpState == DHCP_STATE_BOUND) { + EtherCard::copyIp(dhcpPtr->ciaddr, EtherCard::myip); + } + EtherCard::copyMac(dhcpPtr->chaddr, EtherCard::mymac); + + // options defined as option, length, value + bufPtr = gPB + UDP_DATA_P + sizeof( DHCPdata ); + // DHCP magic cookie, followed by message type + static byte cookie[] = { 99, 130, 83, 99, 53, 1 }; + addBytes(sizeof cookie, cookie); + // addToBuf(53); // DHCP_STATE_SELECTING, DHCP_STATE_REQUESTING + // addToBuf(1); // Length + addToBuf(dhcpState == DHCP_STATE_INIT ? DHCP_DISCOVER : DHCP_REQUEST); + + // Client Identifier Option, this is the client mac address + addToBuf(61); // Client identifier + addToBuf(7); // Length + addToBuf(0x01); // Ethernet + addBytes(6, EtherCard::mymac); + + addToBuf(12); // Host name Option + addToBuf(10); + addBytes(10, (byte*) hostname); + + if( dhcpState == DHCP_STATE_SELECTING) { + addToBuf(50); // Request IP address + addToBuf(4); + addBytes(4, EtherCard::myip); + + // Request using server ip address + addToBuf(54); // Server IP address + addToBuf(4); + addBytes(4, EtherCard::dhcpip); + } + + // Additional info in parameter list - minimal list for what we need + byte len = 3; + if (dhcpCustomOptionNum) + len++; + addToBuf(55); // Parameter request list + addToBuf(len); // Length + addToBuf(1); // Subnet mask + addToBuf(3); // Route/Gateway + addToBuf(6); // DNS Server + if (dhcpCustomOptionNum) + addToBuf(dhcpCustomOptionNum); // Custom option + addToBuf(255); // end option + + // packet size will be under 300 bytes + EtherCard::udpTransmit((bufPtr - gPB) - UDP_DATA_P); +} + +static void process_dhcp_offer (uint16_t len) { + // Map struct onto payload + DHCPdata *dhcpPtr = (DHCPdata*) (gPB + UDP_DATA_P); + // Offered IP address is in yiaddr + EtherCard::copyIp(EtherCard::myip, dhcpPtr->yiaddr); + // Scan through variable length option list identifying options we want + byte *ptr = (byte*) (dhcpPtr + 1) + 4; + bool done = false; + do { + byte option = *ptr++; + byte optionLen = *ptr++; + switch (option) { + case 1: EtherCard::copyIp(EtherCard::netmask, ptr); + break; + case 3: EtherCard::copyIp(EtherCard::gwip, ptr); + break; + case 6: EtherCard::copyIp(EtherCard::dnsip, ptr); + break; + case 51: + case 58: leaseTime = 0; // option 58 = Renewal Time, 51 = Lease Time + for (byte i = 0; i<4; i++) + leaseTime = (leaseTime << 8) + ptr[i]; + leaseTime *= 1000; // milliseconds + break; + case 54: EtherCard::copyIp(EtherCard::dhcpip, ptr); + break; + case 255: done = true; + break; + default: { + // Is is a custom configured option? + if (dhcpCustomOptionCallback && option == dhcpCustomOptionNum) { + dhcpCustomOptionCallback(option, ptr, optionLen); + } + } + } + ptr += optionLen; + } while (!done && ptr < gPB + len); +} + +static bool dhcp_received_message_type (uint16_t len, byte msgType) { + // Map struct onto payload + DHCPdata *dhcpPtr = (DHCPdata*) (gPB + UDP_DATA_P); + + if (len >= 70 && gPB[UDP_SRC_PORT_L_P] == DHCP_SRC_PORT && + dhcpPtr->xid == currentXid ) { + + byte *ptr = (byte*) (dhcpPtr + 1) + 4; + do { + byte option = *ptr++; + byte optionLen = *ptr++; + if(option == 53 && *ptr == msgType ) { + // DHCP Message type match found + return true; + } + ptr += optionLen; + } while (ptr < gPB + len); + } + return false; +} + +bool EtherCard::dhcpSetup (const char *hname, bool fromRam) { + // Use during setup, as this discards all incoming requests until it returns. + // That shouldn't be a problem, because we don't have an IP-address yet. + // Will try 60 secs to obtain DHCP-lease. + + using_dhcp = true; + + if(hname != NULL){ + if(fromRam){ + strncpy(hostname, hname, DHCP_HOSTNAME_MAX_LEN); + } + else{ + strncpy(hostname, hname, DHCP_HOSTNAME_MAX_LEN); + } + } + else{ + // Set a unique hostname, use Arduino-?? with last octet of mac address + hostname[8] = '0' + (mymac[5] >> 4); + hostname[9] = '0' + (mymac[5] & 0x0F); + } + + dhcpState = DHCP_STATE_INIT; + uint16_t start = millis(); + + while (dhcpState != DHCP_STATE_BOUND && (uint16_t) (millis() - start) < 60000) { + if (isLinkUp()) DhcpStateMachine(packetReceive()); + } + updateBroadcastAddress(); + delaycnt = 0; + return dhcpState == DHCP_STATE_BOUND ; +} + +void EtherCard::dhcpAddOptionCallback(uint8_t option, DhcpOptionCallback callback) +{ + dhcpCustomOptionNum = option; + dhcpCustomOptionCallback = callback; +} + +void EtherCard::DhcpStateMachine (uint16_t len) { + +#ifdef DHCPDEBUG + if (dhcpState != DHCP_STATE_BOUND) { + Serial.print(millis()); + Serial.print(" State: "); + } + switch (dhcpState) { + case DHCP_STATE_INIT: + Serial.println("Init"); + break; + case DHCP_STATE_SELECTING: + Serial.println("Selecting"); + break; + case DHCP_STATE_REQUESTING: + Serial.println("Requesting"); + break; + case DHCP_STATE_RENEWING: + Serial.println("Renew"); + break; + } +#endif + + switch (dhcpState) { + + case DHCP_STATE_BOUND: + //!@todo Due to millis() 49 day wrap-around, DHCP renewal may not work as expected + if (millis() >= leaseStart + leaseTime) { + send_dhcp_message(); + dhcpState = DHCP_STATE_RENEWING; + stateTimer = millis(); + } + break; + + case DHCP_STATE_INIT: + currentXid = millis(); + memset(myip,0,4); // force ip 0.0.0.0 + send_dhcp_message(); + enableBroadcast(true); //Temporarily enable broadcasts + dhcpState = DHCP_STATE_SELECTING; + stateTimer = millis(); + break; + + case DHCP_STATE_SELECTING: + if (dhcp_received_message_type(len, DHCP_OFFER)) { + process_dhcp_offer(len); + send_dhcp_message(); + dhcpState = DHCP_STATE_REQUESTING; + stateTimer = millis(); + } else { + if (millis() > stateTimer + DHCP_REQUEST_TIMEOUT) { + dhcpState = DHCP_STATE_INIT; + } + } + break; + + case DHCP_STATE_REQUESTING: + case DHCP_STATE_RENEWING: + if (dhcp_received_message_type(len, DHCP_ACK)) { + disableBroadcast(true); //Disable broadcast after temporary enable + leaseStart = millis(); + if (gwip[0] != 0) setGwIp(gwip); // why is this? because it initiates an arp request + dhcpState = DHCP_STATE_BOUND; + } else { + if (millis() > stateTimer + DHCP_REQUEST_TIMEOUT) { + dhcpState = DHCP_STATE_INIT; + } + } + break; + + } +} + + + diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/dns.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/dns.cpp new file mode 100644 index 0000000..4f4957f --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/dns.cpp @@ -0,0 +1,117 @@ +// DNS look-up functions based on the udp client +// Author: Guido Socher +// Copyright: GPL V2 +// +// 2010-05-20 + +#include "EtherCard_STM.h" +#include "net.h" + +#define gPB ether.buffer + +static byte dnstid_l; // a counter for transaction ID +#define DNSCLIENT_SRC_PORT_H 0xE0 + +static void dnsRequest (const char *hostname, bool fromRam) { + ++dnstid_l; // increment for next request, finally wrap + if (ether.dnsip[0] == 0) + memset(ether.dnsip, 8, 4); // use 8.8.8.8 Google DNS as default + ether.udpPrepare((DNSCLIENT_SRC_PORT_H << 8) | dnstid_l, ether.dnsip, 53); + memset(gPB + UDP_DATA_P, 0, 12); + + byte *p = gPB + UDP_DATA_P + 12; + char c; + do { + byte n = 0; + for(;;) { + c = fromRam ? *hostname : pgm_read_byte(hostname); + ++hostname; + if (c == '.' || c == 0) + break; + p[++n] = c; + } + *p++ = n; + p += n; + } while (c != 0); + + *p++ = 0; // terminate with zero, means root domain. + *p++ = 0; + *p++ = 1; // type A + *p++ = 0; + *p++ = 1; // class IN + byte i = p - gPB - UDP_DATA_P; + gPB[UDP_DATA_P] = i; + gPB[UDP_DATA_P+1] = dnstid_l; + gPB[UDP_DATA_P+2] = 1; // flags, standard recursive query + gPB[UDP_DATA_P+5] = 1; // 1 question + ether.udpTransmit(i); +} + +/** @brief Check if packet is DNS response. + @param plen Size of packet + @return bool True if DNS response has error. False if not DNS response or DNS response OK. + @note hisip contains IP address of requested host or 0.0.0.0 on failure +*/ +static bool checkForDnsAnswer (uint16_t plen) { + byte *p = gPB + UDP_DATA_P; //start of UDP payload + if (plen < 70 || gPB[UDP_SRC_PORT_L_P] != 53 || //from DNS source port + gPB[UDP_DST_PORT_H_P] != DNSCLIENT_SRC_PORT_H || //response to same port as we sent from (MSB) + gPB[UDP_DST_PORT_L_P] != dnstid_l || //response to same port as we sent from (LSB) + p[1] != dnstid_l) //message id same as we sent + return false; //not our DNS response + if((p[3] & 0x0F) != 0) + return true; //DNS response recieved with error + + p += *p; // we encoded the query len into tid + for (;;) { + if (*p & 0xC0) + p += 2; + else + while (++p < gPB + plen) { + if (*p == 0) { + ++p; + break; + } + } + if (p + 14 > gPB + plen) + break; + if (p[1] == 1 && p[9] == 4) { // type "A" and IPv4 + ether.copyIp(ether.hisip, p + 10); + break; + } + p += p[9] + 10; + } + return false; //No error +} + +// use during setup, as this discards all incoming requests until it returns +bool EtherCard::dnsLookup (const char* name, bool fromRam) { + uint16_t start = millis(); + + while(!isLinkUp()) + { + if ((uint16_t) (millis() - start) >= 30000) + return false; //timeout waiting for link + } + while(clientWaitingGw()) + { + packetLoop(packetReceive()); + if ((uint16_t) (millis() - start) >= 30000) + return false; //timeout waiting for gateway ARP + } + + memset(hisip, 0, 4); + dnsRequest(name, fromRam); + + start = millis(); + while (hisip[0] == 0) { + if ((uint16_t) (millis() - start) >= 30000) + return false; //timout waiting for dns response + uint16_t len = packetReceive(); + if (len > 0 && packetLoop(len) == 0) //packet not handled by tcp/ip packet loop + if(checkForDnsAnswer(len)) + return false; //DNS response recieved with error + } + + return true; +} diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.cpp new file mode 100644 index 0000000..db8b673 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.cpp @@ -0,0 +1,624 @@ +// Microchip ENC28J60 Ethernet Interface Driver +// Author: Guido Socher +// Copyright: GPL V2 +// +// Based on the enc28j60.c file from the AVRlib library by Pascal Stang. +// For AVRlib See http://www.procyonengineering.com/ +// Used with explicit permission of Pascal Stang. +// +// 2010-05-20 +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +//----------------------------------------------------------------- + +#if ARDUINO >= 100 +#include // Arduino 1.0 +#else +#include // Arduino 0022 +#endif +#include "enc28j60.h" +#include // Using library SPI in folder: D:\Documents\Arduino\hardware\STM32\STM32F1XX\libraries\SPI + +uint16_t ENC28J60::bufferSize; +bool ENC28J60::broadcast_enabled = false; + +// ENC28J60 Control Registers +// Control register definitions are a combination of address, +// bank number, and Ethernet/MAC/PHY indicator bits. +// - Register address (bits 0-4) +// - Bank number (bits 5-6) +// - MAC/PHY indicator (bit 7) +#define ADDR_MASK 0x1F +#define BANK_MASK 0x60 +#define SPRD_MASK 0x80 +// All-bank registers +#define EIE 0x1B +#define EIR 0x1C +#define ESTAT 0x1D +#define ECON2 0x1E +#define ECON1 0x1F +// Bank 0 registers +#define ERDPT (0x00|0x00) +#define EWRPT (0x02|0x00) +#define ETXST (0x04|0x00) +#define ETXND (0x06|0x00) +#define ERXST (0x08|0x00) +#define ERXND (0x0A|0x00) +#define ERXRDPT (0x0C|0x00) +// #define ERXWRPT (0x0E|0x00) +#define EDMAST (0x10|0x00) +#define EDMAND (0x12|0x00) +// #define EDMADST (0x14|0x00) +#define EDMACS (0x16|0x00) +// Bank 1 registers +#define EHT0 (0x00|0x20) +#define EHT1 (0x01|0x20) +#define EHT2 (0x02|0x20) +#define EHT3 (0x03|0x20) +#define EHT4 (0x04|0x20) +#define EHT5 (0x05|0x20) +#define EHT6 (0x06|0x20) +#define EHT7 (0x07|0x20) +#define EPMM0 (0x08|0x20) +#define EPMM1 (0x09|0x20) +#define EPMM2 (0x0A|0x20) +#define EPMM3 (0x0B|0x20) +#define EPMM4 (0x0C|0x20) +#define EPMM5 (0x0D|0x20) +#define EPMM6 (0x0E|0x20) +#define EPMM7 (0x0F|0x20) +#define EPMCS (0x10|0x20) +// #define EPMO (0x14|0x20) +#define EWOLIE (0x16|0x20) +#define EWOLIR (0x17|0x20) +#define ERXFCON (0x18|0x20) +#define EPKTCNT (0x19|0x20) +// Bank 2 registers +#define MACON1 (0x00|0x40|0x80) +#define MACON2 (0x01|0x40|0x80) +#define MACON3 (0x02|0x40|0x80) +#define MACON4 (0x03|0x40|0x80) +#define MABBIPG (0x04|0x40|0x80) +#define MAIPG (0x06|0x40|0x80) +#define MACLCON1 (0x08|0x40|0x80) +#define MACLCON2 (0x09|0x40|0x80) +#define MAMXFL (0x0A|0x40|0x80) +#define MAPHSUP (0x0D|0x40|0x80) +#define MICON (0x11|0x40|0x80) +#define MICMD (0x12|0x40|0x80) +#define MIREGADR (0x14|0x40|0x80) +#define MIWR (0x16|0x40|0x80) +#define MIRD (0x18|0x40|0x80) +// Bank 3 registers +#define MAADR1 (0x00|0x60|0x80) +#define MAADR0 (0x01|0x60|0x80) +#define MAADR3 (0x02|0x60|0x80) +#define MAADR2 (0x03|0x60|0x80) +#define MAADR5 (0x04|0x60|0x80) +#define MAADR4 (0x05|0x60|0x80) +#define EBSTSD (0x06|0x60) +#define EBSTCON (0x07|0x60) +#define EBSTCS (0x08|0x60) +#define MISTAT (0x0A|0x60|0x80) +#define EREVID (0x12|0x60) +#define ECOCON (0x15|0x60) +#define EFLOCON (0x17|0x60) +#define EPAUS (0x18|0x60) + +// ENC28J60 ERXFCON Register Bit Definitions +#define ERXFCON_UCEN 0x80 +#define ERXFCON_ANDOR 0x40 +#define ERXFCON_CRCEN 0x20 +#define ERXFCON_PMEN 0x10 +#define ERXFCON_MPEN 0x08 +#define ERXFCON_HTEN 0x04 +#define ERXFCON_MCEN 0x02 +#define ERXFCON_BCEN 0x01 +// ENC28J60 EIE Register Bit Definitions +#define EIE_INTIE 0x80 +#define EIE_PKTIE 0x40 +#define EIE_DMAIE 0x20 +#define EIE_LINKIE 0x10 +#define EIE_TXIE 0x08 +#define EIE_WOLIE 0x04 +#define EIE_TXERIE 0x02 +#define EIE_RXERIE 0x01 +// ENC28J60 EIR Register Bit Definitions +#define EIR_PKTIF 0x40 +#define EIR_DMAIF 0x20 +#define EIR_LINKIF 0x10 +#define EIR_TXIF 0x08 +#define EIR_WOLIF 0x04 +#define EIR_TXERIF 0x02 +#define EIR_RXERIF 0x01 +// ENC28J60 ESTAT Register Bit Definitions +#define ESTAT_INT 0x80 +#define ESTAT_LATECOL 0x10 +#define ESTAT_RXBUSY 0x04 +#define ESTAT_TXABRT 0x02 +#define ESTAT_CLKRDY 0x01 +// ENC28J60 ECON2 Register Bit Definitions +#define ECON2_AUTOINC 0x80 +#define ECON2_PKTDEC 0x40 +#define ECON2_PWRSV 0x20 +#define ECON2_VRPS 0x08 +// ENC28J60 ECON1 Register Bit Definitions +#define ECON1_TXRST 0x80 +#define ECON1_RXRST 0x40 +#define ECON1_DMAST 0x20 +#define ECON1_CSUMEN 0x10 +#define ECON1_TXRTS 0x08 +#define ECON1_RXEN 0x04 +#define ECON1_BSEL1 0x02 +#define ECON1_BSEL0 0x01 +// ENC28J60 MACON1 Register Bit Definitions +#define MACON1_LOOPBK 0x10 +#define MACON1_TXPAUS 0x08 +#define MACON1_RXPAUS 0x04 +#define MACON1_PASSALL 0x02 +#define MACON1_MARXEN 0x01 +// ENC28J60 MACON2 Register Bit Definitions +#define MACON2_MARST 0x80 +#define MACON2_RNDRST 0x40 +#define MACON2_MARXRST 0x08 +#define MACON2_RFUNRST 0x04 +#define MACON2_MATXRST 0x02 +#define MACON2_TFUNRST 0x01 +// ENC28J60 MACON3 Register Bit Definitions +#define MACON3_PADCFG2 0x80 +#define MACON3_PADCFG1 0x40 +#define MACON3_PADCFG0 0x20 +#define MACON3_TXCRCEN 0x10 +#define MACON3_PHDRLEN 0x08 +#define MACON3_HFRMLEN 0x04 +#define MACON3_FRMLNEN 0x02 +#define MACON3_FULDPX 0x01 +// ENC28J60 MICMD Register Bit Definitions +#define MICMD_MIISCAN 0x02 +#define MICMD_MIIRD 0x01 +// ENC28J60 MISTAT Register Bit Definitions +#define MISTAT_NVALID 0x04 +#define MISTAT_SCAN 0x02 +#define MISTAT_BUSY 0x01 + +// ENC28J60 EBSTCON Register Bit Definitions +#define EBSTCON_PSV2 0x80 +#define EBSTCON_PSV1 0x40 +#define EBSTCON_PSV0 0x20 +#define EBSTCON_PSEL 0x10 +#define EBSTCON_TMSEL1 0x08 +#define EBSTCON_TMSEL0 0x04 +#define EBSTCON_TME 0x02 +#define EBSTCON_BISTST 0x01 + +// PHY registers +#define PHCON1 0x00 +#define PHSTAT1 0x01 +#define PHHID1 0x02 +#define PHHID2 0x03 +#define PHCON2 0x10 +#define PHSTAT2 0x11 +#define PHIE 0x12 +#define PHIR 0x13 +#define PHLCON 0x14 + +// ENC28J60 PHY PHCON1 Register Bit Definitions +#define PHCON1_PRST 0x8000 +#define PHCON1_PLOOPBK 0x4000 +#define PHCON1_PPWRSV 0x0800 +#define PHCON1_PDPXMD 0x0100 +// ENC28J60 PHY PHSTAT1 Register Bit Definitions +#define PHSTAT1_PFDPX 0x1000 +#define PHSTAT1_PHDPX 0x0800 +#define PHSTAT1_LLSTAT 0x0004 +#define PHSTAT1_JBSTAT 0x0002 +// ENC28J60 PHY PHCON2 Register Bit Definitions +#define PHCON2_FRCLINK 0x4000 +#define PHCON2_TXDIS 0x2000 +#define PHCON2_JABBER 0x0400 +#define PHCON2_HDLDIS 0x0100 + +// ENC28J60 Packet Control Byte Bit Definitions +#define PKTCTRL_PHUGEEN 0x08 +#define PKTCTRL_PPADEN 0x04 +#define PKTCTRL_PCRCEN 0x02 +#define PKTCTRL_POVERRIDE 0x01 + +// SPI operation codes +#define ENC28J60_READ_CTRL_REG 0x00 +#define ENC28J60_READ_BUF_MEM 0x3A +#define ENC28J60_WRITE_CTRL_REG 0x40 +#define ENC28J60_WRITE_BUF_MEM 0x7A +#define ENC28J60_BIT_FIELD_SET 0x80 +#define ENC28J60_BIT_FIELD_CLR 0xA0 +#define ENC28J60_SOFT_RESET 0xFF + +// The RXSTART_INIT must be zero. See Rev. B4 Silicon Errata point 5. +// Buffer boundaries applied to internal 8K ram +// the entire available packet buffer space is allocated + +#define RXSTART_INIT 0x0000 // start of RX buffer, room for 2 packets +#define RXSTOP_INIT 0x0BFF // end of RX buffer + +#define TXSTART_INIT 0x0C00 // start of TX buffer, room for 1 packet +#define TXSTOP_INIT 0x11FF // end of TX buffer + +#define SCRATCH_START 0x1200 // start of scratch area +#define SCRATCH_LIMIT 0x2000 // past end of area, i.e. 3.5 Kb +#define SCRATCH_PAGE_SHIFT 6 // addressing is in pages of 64 bytes +#define SCRATCH_PAGE_SIZE (1 << SCRATCH_PAGE_SHIFT) + +// max frame length which the conroller will accept: +// (note: maximum ethernet frame length would be 1518) +#define MAX_FRAMELEN 1500 + +#define FULL_SPEED 1 // switch to full-speed SPI for bulk transfers + +static byte Enc28j60Bank; +static int gNextPacketPtr; +static byte selectPin; + +void ENC28J60::initSPI () { + + SPI.begin(); + SPI.setBitOrder(MSBFIRST); + //SPI.setDataMode(SPI_MODE0); + //SPI.setClockDivider(SPI_CLOCK_DIV16); +} + +static void enableChip () { + //cli(); + digitalWrite(selectPin, LOW); +} + +static void disableChip () { + digitalWrite(selectPin, HIGH); + //sei(); +} + +//static void xferSPI (byte data) { + //SPDR = data; + //while (!(SPSR&(1<>5); + } +} + +static byte readRegByte (byte address) { + SetBank(address); + return readOp(ENC28J60_READ_CTRL_REG, address); +} + +static uint16_t readReg(byte address) { + return readRegByte(address) + (readRegByte(address+1) << 8); +} + +static void writeRegByte (byte address, byte data) { + SetBank(address); + writeOp(ENC28J60_WRITE_CTRL_REG, address, data); +} + +static void writeReg(byte address, uint16_t data) { + writeRegByte(address, data); + writeRegByte(address + 1, data >> 8); +} + +static uint16_t readPhyByte (byte address) { + writeRegByte(MIREGADR, address); + writeRegByte(MICMD, MICMD_MIIRD); + while (readRegByte(MISTAT) & MISTAT_BUSY) + ; + writeRegByte(MICMD, 0x00); + return readRegByte(MIRD+1); +} + +static void writePhy (byte address, uint16_t data) { + writeRegByte(MIREGADR, address); + writeReg(MIWR, data); + while (readRegByte(MISTAT) & MISTAT_BUSY) + ; +} + +byte ENC28J60::initialize (uint16_t size, const byte* macaddr, byte csPin) { + + bufferSize = size; + //if (bitRead(SPCR, SPE) == 0) + initSPI(); + selectPin = csPin; + pinMode(selectPin, OUTPUT); + disableChip(); + + writeOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET); + delay(2); // errata B7/2 + while (!readOp(ENC28J60_READ_CTRL_REG, ESTAT) & ESTAT_CLKRDY) + ; + gNextPacketPtr = RXSTART_INIT; + writeReg(ERXST, RXSTART_INIT); + writeReg(ERXRDPT, RXSTART_INIT); + writeReg(ERXND, RXSTOP_INIT); + writeReg(ETXST, TXSTART_INIT); + writeReg(ETXND, TXSTOP_INIT); + enableBroadcast(); // change to add ERXFCON_BCEN recommended by epam + writeReg(EPMM0, 0x303f); + writeReg(EPMCS, 0xf7f9); + writeRegByte(MACON1, MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS); + writeRegByte(MACON2, 0x00); + writeOp(ENC28J60_BIT_FIELD_SET, MACON3, + MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN); + writeReg(MAIPG, 0x0C12); + writeRegByte(MABBIPG, 0x12); + writeReg(MAMXFL, MAX_FRAMELEN); + writeRegByte(MAADR5, macaddr[0]); + writeRegByte(MAADR4, macaddr[1]); + writeRegByte(MAADR3, macaddr[2]); + writeRegByte(MAADR2, macaddr[3]); + writeRegByte(MAADR1, macaddr[4]); + writeRegByte(MAADR0, macaddr[5]); + writePhy(PHCON2, PHCON2_HDLDIS); + SetBank(ECON1); + writeOp(ENC28J60_BIT_FIELD_SET, EIE, EIE_INTIE|EIE_PKTIE); + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); + + byte rev = readRegByte(EREVID); + // microchip forgot to step the number on the silcon when they + // released the revision B7. 6 is now rev B7. We still have + // to see what they do when they release B8. At the moment + // there is no B8 out yet + if (rev > 5) ++rev; + return rev; +} + +bool ENC28J60::isLinkUp() { + return (readPhyByte(PHSTAT2) >> 2) & 1; +} + +void ENC28J60::packetSend(uint16_t len) { + while (readOp(ENC28J60_READ_CTRL_REG, ECON1) & ECON1_TXRTS) + if (readRegByte(EIR) & EIR_TXERIF) { + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRST); + writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_TXRST); + } + writeReg(EWRPT, TXSTART_INIT); + writeReg(ETXND, TXSTART_INIT+len); + writeOp(ENC28J60_WRITE_BUF_MEM, 0, 0x00); + writeBuf(len, buffer); + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS); +} + +uint16_t ENC28J60::packetReceive() { + uint16_t len = 0; + if (readRegByte(EPKTCNT) > 0) { + writeReg(ERDPT, gNextPacketPtr); + + struct { + uint16_t nextPacket; + uint16_t byteCount; + uint16_t status; + } header; + + readBuf(sizeof header, (byte*) &header); + + gNextPacketPtr = header.nextPacket; + len = header.byteCount - 4; //remove the CRC count + if (len>bufferSize-1) + len=bufferSize-1; + if ((header.status & 0x80)==0) + len = 0; + else + readBuf(len, buffer); + buffer[len] = 0; + if (gNextPacketPtr - 1 > RXSTOP_INIT) + writeReg(ERXRDPT, RXSTOP_INIT); + else + writeReg(ERXRDPT, gNextPacketPtr - 1); + writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PKTDEC); + } + return len; +} + +void ENC28J60::copyout (byte page, const byte* data) { + uint16_t destPos = SCRATCH_START + (page << SCRATCH_PAGE_SHIFT); + if (destPos < SCRATCH_START || destPos > SCRATCH_LIMIT - SCRATCH_PAGE_SIZE) + return; + writeReg(EWRPT, destPos); + writeBuf(SCRATCH_PAGE_SIZE, data); +} + +void ENC28J60::copyin (byte page, byte* data) { + uint16_t destPos = SCRATCH_START + (page << SCRATCH_PAGE_SHIFT); + if (destPos < SCRATCH_START || destPos > SCRATCH_LIMIT - SCRATCH_PAGE_SIZE) + return; + writeReg(ERDPT, destPos); + readBuf(SCRATCH_PAGE_SIZE, data); +} + +byte ENC28J60::peekin (byte page, byte off) { + byte result = 0; + uint16_t destPos = SCRATCH_START + (page << SCRATCH_PAGE_SHIFT) + off; + if (SCRATCH_START <= destPos && destPos < SCRATCH_LIMIT) { + writeReg(ERDPT, destPos); + readBuf(1, &result); + } + return result; +} + +// Contributed by Alex M. Based on code from: http://blog.derouineau.fr +// /2011/07/putting-enc28j60-ethernet-controler-in-sleep-mode/ +void ENC28J60::powerDown() { + writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_RXEN); + while(readRegByte(ESTAT) & ESTAT_RXBUSY); + while(readRegByte(ECON1) & ECON1_TXRTS); + writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_VRPS); + writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PWRSV); +} + +void ENC28J60::powerUp() { + writeOp(ENC28J60_BIT_FIELD_CLR, ECON2, ECON2_PWRSV); + while(!readRegByte(ESTAT) & ESTAT_CLKRDY); + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); +} + +void ENC28J60::enableBroadcast (bool temporary) { + writeRegByte(ERXFCON, readRegByte(ERXFCON) | ERXFCON_BCEN); + if(!temporary) + broadcast_enabled = true; +} + +void ENC28J60::disableBroadcast (bool temporary) { + if(!temporary) + broadcast_enabled = false; + if(!broadcast_enabled) + writeRegByte(ERXFCON, readRegByte(ERXFCON) & ~ERXFCON_BCEN); +} + +void ENC28J60::enableMulticast () { + writeRegByte(ERXFCON, readRegByte(ERXFCON) | ERXFCON_MCEN); +} + +void ENC28J60::disableMulticast () { + writeRegByte(ERXFCON, readRegByte(ERXFCON) & ~ERXFCON_MCEN); +} + +uint8_t ENC28J60::doBIST ( byte csPin) { +#define RANDOM_FILL 0b0000 +#define ADDRESS_FILL 0b0100 +#define PATTERN_SHIFT 0b1000 +#define RANDOM_RACE 0b1100 + +// init + //if (bitRead(SPCR, SPE) == 0) + // initSPI(); + selectPin = csPin; + pinMode(selectPin, OUTPUT); + disableChip(); + + writeOp(ENC28J60_SOFT_RESET, 0, ENC28J60_SOFT_RESET); + delay(2); // errata B7/2 + while (!readOp(ENC28J60_READ_CTRL_REG, ESTAT) & ESTAT_CLKRDY) ; + + + // now we can start the memory test + + uint16_t macResult; + uint16_t bitsResult; + + // clear some of the registers registers + writeRegByte(ECON1, 0); + writeReg(EDMAST, 0); + + // Set up necessary pointers for the DMA to calculate over the entire memory + writeReg(EDMAND, 0x1FFFu); + writeReg(ERXND, 0x1FFFu); + + // Enable Test Mode and do an Address Fill + SetBank(EBSTCON); + writeRegByte(EBSTCON, EBSTCON_TME | EBSTCON_BISTST | ADDRESS_FILL); + + // wait for BISTST to be reset, only after that are we actually ready to + // start the test + // this was undocumented :( + while (readOp(ENC28J60_READ_CTRL_REG, EBSTCON) & EBSTCON_BISTST); + writeOp(ENC28J60_BIT_FIELD_CLR, EBSTCON, EBSTCON_TME); + + + // now start the actual reading an calculating the checksum until the end is + // reached + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_DMAST | ECON1_CSUMEN); + SetBank(EDMACS); + while(readOp(ENC28J60_READ_CTRL_REG, ECON1) & ECON1_DMAST); + macResult = readReg(EDMACS); + bitsResult = readReg(EBSTCS); + // Compare the results + // 0xF807 should always be generated in Address fill mode + if ((macResult != bitsResult) || (bitsResult != 0xF807)) { + return 0; + } + // reset test flag + writeOp(ENC28J60_BIT_FIELD_CLR, EBSTCON, EBSTCON_TME); + + + // Now start the BIST with random data test, and also keep on swapping the + // DMA/BIST memory ports. + writeRegByte(EBSTSD, 0b10101010 | millis()); + writeRegByte(EBSTCON, EBSTCON_TME | EBSTCON_PSEL | EBSTCON_BISTST | RANDOM_FILL); + + + // wait for BISTST to be reset, only after that are we actually ready to + // start the test + // this was undocumented :( + while (readOp(ENC28J60_READ_CTRL_REG, EBSTCON) & EBSTCON_BISTST); + writeOp(ENC28J60_BIT_FIELD_CLR, EBSTCON, EBSTCON_TME); + + + // now start the actual reading an calculating the checksum until the end is + // reached + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_DMAST | ECON1_CSUMEN); + SetBank(EDMACS); + while(readOp(ENC28J60_READ_CTRL_REG, ECON1) & ECON1_DMAST); + + macResult = readReg(EDMACS); + bitsResult = readReg(EBSTCS); + // The checksum should be equal + return macResult == bitsResult; +} + diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.h b/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.h new file mode 100644 index 0000000..d5007d8 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.h @@ -0,0 +1,129 @@ +// Microchip ENC28J60 Ethernet Interface Driver +// Author: Pascal Stang +// Modified by: Guido Socher +// Copyright: GPL V2 +// +// This driver provides initialization and transmit/receive +// functions for the Microchip ENC28J60 10Mb Ethernet Controller and PHY. +// This chip is novel in that it is a full MAC+PHY interface all in a 28-pin +// chip, using an SPI interface to the host processor. +// +// 2010-05-20 +// +//----------------------------------------------------------------- +// Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 +// Home: http://www.serasidis.gr +// email: avrsite@yahoo.gr +// +// PIN Connections (Using STM32F103): +// +// ENC28J60 - STM32F103 +// VCC - 3.3V +// GND - GND +// SCK - Pin PA5 +// SO - Pin PA6 +// SI - Pin PA7 +// CS - Pin PA8 +//----------------------------------------------------------------- +#ifndef ENC28J60_H +#define ENC28J60_H + +/** This class provide low-level interfacing with the ENC28J60 network interface. This is used by the EtherCard class and not intended for use by (normal) end users. */ +class ENC28J60 { +public: + static uint8_t buffer[]; //!< Data buffer (shared by recieve and transmit) + static uint16_t bufferSize; //!< Size of data buffer + static bool broadcast_enabled; //!< True if broadcasts enabled (used to allow temporary disable of broadcast for DHCP or other internal functions) + + static uint8_t* tcpOffset () { return buffer + 0x36; } //!< Pointer to the start of TCP payload + + /** @brief Initialise SPI interface + * @note Configures Arduino pins as input / output, etc. + */ + static void initSPI (); + + /** @brief Initialise network interface + * @param size Size of data buffer + * @param macaddr Pointer to 6 byte hardware (MAC) address + * @param csPin Arduino pin used for chip select (enable network interface SPI bus). Default = 8 = PA9 + * @return uint8_t ENC28J60 firmware version or zero on failure. + */ + static uint8_t initialize (const uint16_t size, const uint8_t* macaddr, + uint8_t csPin = PA8); + + /** @brief Check if network link is connected + * @return bool True if link is up + */ + static bool isLinkUp (); + + /** @brief Sends data to network interface + * @param len Size of data to send + * @note Data buffer is shared by recieve and transmit functions + */ + static void packetSend (uint16_t len); + + /** @brief Copy recieved packets to data buffer + * @return uint16_t Size of recieved data + * @note Data buffer is shared by recieve and transmit functions + */ + static uint16_t packetReceive (); + + /** @brief Copy data from ENC28J60 memory + * @param page Data page of memory + * @param data Pointer to buffer to copy data to + */ + static void copyout (uint8_t page, const uint8_t* data); + + /** @brief Copy data to ENC28J60 memory + * @param page Data page of memory + * @param data Pointer to buffer to copy data from + */ + static void copyin (uint8_t page, uint8_t* data); + + /** @brief Get single byte of data from ENC28J60 memory + * @param page Data page of memory + * @param off Offset of data within page + * @return Data value + */ + static uint8_t peekin (uint8_t page, uint8_t off); + + /** @brief Put ENC28J60 in sleep mode + */ + static void powerDown(); // contrib by Alex M. + + /** @brief Wake ENC28J60 from sleep mode + */ + static void powerUp(); // contrib by Alex M. + + /** @brief Enable reception of broadcast messages + * @param temporary Set true to temporarily enable broadcast + * @note This will increase load on recieved data handling + */ + static void enableBroadcast(bool temporary = false); + + /** @brief Disable reception of broadcast messages + * @param temporary Set true to only disable if temporarily enabled + * @note This will reduce load on recieved data handling + */ + static void disableBroadcast(bool temporary = false); + + /** @brief Enables reception of mulitcast messages + * @note This will increase load on recieved data handling + */ + static void enableMulticast (); + + /** @brief Disable reception of mulitcast messages + * @note This will reduce load on recieved data handling + */ + static void disableMulticast(); + + /** @brief Reset and fully initialise ENC28J60 + * @param csPin Arduino pin used for chip select (enable SPI bus) + * @return uint8_t 0 on failure + */ + static uint8_t doBIST(uint8_t csPin = PA8); +}; + +typedef ENC28J60 Ethernet; //!< Define alias Ethernet for ENC28J60 + +#endif diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/net.h b/STM32F1/libraries/Serasidis_EtherCard_STM/src/net.h new file mode 100644 index 0000000..a80c5b9 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/net.h @@ -0,0 +1,123 @@ +// Based on the net.h file from the AVRlib library by Pascal Stang. +// Author: Guido Socher +// Copyright: GPL V2 +// +// For AVRlib See http://www.procyonengineering.com/ +// Used with explicit permission of Pascal Stang. +// +// 2010-05-20 + +// notation: _P = position of a field +// _V = value of a field + +#ifndef NET_H +#define NET_H + +// ******* ETH ******* +#define ETH_HEADER_LEN 14 +// values of certain bytes: +#define ETHTYPE_ARP_H_V 0x08 +#define ETHTYPE_ARP_L_V 0x06 +#define ETHTYPE_IP_H_V 0x08 +#define ETHTYPE_IP_L_V 0x00 +// byte positions in the ethernet frame: +// +// Ethernet type field (2bytes): +#define ETH_TYPE_H_P 12 +#define ETH_TYPE_L_P 13 +// +#define ETH_DST_MAC 0 +#define ETH_SRC_MAC 6 + + +// ******* ARP ******* +#define ETH_ARP_OPCODE_REPLY_H_V 0x0 +#define ETH_ARP_OPCODE_REPLY_L_V 0x02 +#define ETH_ARP_OPCODE_REQ_H_V 0x0 +#define ETH_ARP_OPCODE_REQ_L_V 0x01 +// start of arp header: +#define ETH_ARP_P 0xe +// +#define ETHTYPE_ARP_L_V 0x06 +// arp.dst.ip +#define ETH_ARP_DST_IP_P 0x26 +// arp.opcode +#define ETH_ARP_OPCODE_H_P 0x14 +#define ETH_ARP_OPCODE_L_P 0x15 +// arp.src.mac +#define ETH_ARP_SRC_MAC_P 0x16 +#define ETH_ARP_SRC_IP_P 0x1c +#define ETH_ARP_DST_MAC_P 0x20 +#define ETH_ARP_DST_IP_P 0x26 + +// ******* IP ******* +#define IP_HEADER_LEN 20 +// ip.src +#define IP_SRC_P 0x1a +#define IP_DST_P 0x1e +#define IP_HEADER_LEN_VER_P 0xe +#define IP_CHECKSUM_P 0x18 +#define IP_TTL_P 0x16 +#define IP_FLAGS_P 0x14 +#define IP_P 0xe +#define IP_TOTLEN_H_P 0x10 +#define IP_TOTLEN_L_P 0x11 + +#define IP_PROTO_P 0x17 + +#define IP_PROTO_ICMP_V 1 +#define IP_PROTO_TCP_V 6 +// 17=0x11 +#define IP_PROTO_UDP_V 17 +// ******* ICMP ******* +#define ICMP_TYPE_ECHOREPLY_V 0 +#define ICMP_TYPE_ECHOREQUEST_V 8 +// +#define ICMP_TYPE_P 0x22 +#define ICMP_CHECKSUM_P 0x24 +#define ICMP_CHECKSUM_H_P 0x24 +#define ICMP_CHECKSUM_L_P 0x25 +#define ICMP_IDENT_H_P 0x26 +#define ICMP_IDENT_L_P 0x27 +#define ICMP_DATA_P 0x2a + +// ******* UDP ******* +#define UDP_HEADER_LEN 8 +// +#define UDP_SRC_PORT_H_P 0x22 +#define UDP_SRC_PORT_L_P 0x23 +#define UDP_DST_PORT_H_P 0x24 +#define UDP_DST_PORT_L_P 0x25 +// +#define UDP_LEN_H_P 0x26 +#define UDP_LEN_L_P 0x27 +#define UDP_CHECKSUM_H_P 0x28 +#define UDP_CHECKSUM_L_P 0x29 +#define UDP_DATA_P 0x2a + +// ******* TCP ******* +#define TCP_SRC_PORT_H_P 0x22 +#define TCP_SRC_PORT_L_P 0x23 +#define TCP_DST_PORT_H_P 0x24 +#define TCP_DST_PORT_L_P 0x25 +// the tcp seq number is 4 bytes 0x26-0x29 +#define TCP_SEQ_H_P 0x26 +#define TCP_SEQACK_H_P 0x2a +// flags: SYN=2 +#define TCP_FLAGS_P 0x2f +#define TCP_FLAGS_SYN_V 2 +#define TCP_FLAGS_FIN_V 1 +#define TCP_FLAGS_RST_V 4 +#define TCP_FLAGS_PUSH_V 8 +#define TCP_FLAGS_SYNACK_V 0x12 +#define TCP_FLAGS_ACK_V 0x10 +#define TCP_FLAGS_PSHACK_V 0x18 +// plain len without the options: +#define TCP_HEADER_LEN_PLAIN 20 +#define TCP_HEADER_LEN_P 0x2e +#define TCP_WIN_SIZE 0x30 +#define TCP_CHECKSUM_H_P 0x32 +#define TCP_CHECKSUM_L_P 0x33 +#define TCP_OPTIONS_P 0x36 +// +#endif diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/tcpip.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/tcpip.cpp new file mode 100644 index 0000000..4713e8c --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/tcpip.cpp @@ -0,0 +1,803 @@ +// IP, ARP, UDP and TCP functions. +// Author: Guido Socher +// Copyright: GPL V2 +// +// The TCP implementation uses some size optimisations which are valid +// only if all data can be sent in one single packet. This is however +// not a big limitation for a microcontroller as you will anyhow use +// small web-pages. The web server must send the entire web page in one +// packet. The client "web browser" as implemented here can also receive +// large pages. +// +// 2010-05-20 + +#include "EtherCard_STM.h" +#include "net.h" +#undef word // arduino nonsense + +#define gPB ether.buffer + +#define PINGPATTERN 0x42 + +// Avoid spurious pgmspace warnings - http://forum.jeelabs.net/node/327 +// See also http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734 +//#undef PROGMEM +//#define PROGMEM __attribute__(( section(".progmem.data") )) +//#undef PSTR +//#define PSTR(s) (__extension__({static prog_char c[] PROGMEM = (s); &c[0];})) + +#define TCPCLIENT_SRC_PORT_H 11 //Source port (MSB) for TCP/IP client connections - hardcode all TCP/IP client connection from ports in range 2816-3071 +static uint8_t tcpclient_src_port_l=1; // Source port (LSB) for tcp/ip client connections - increments on each TCP/IP request +static uint8_t tcp_fd; // a file descriptor, will be encoded into the port +static uint8_t tcp_client_state; //TCP connection state: 1=Send SYN, 2=SYN sent awaiting SYN+ACK, 3=Established, 4=Not used, 5=Closing, 6=Closed +static uint8_t tcp_client_port_h; // Destination port (MSB) of TCP/IP client connection +static uint8_t tcp_client_port_l; // Destination port (LSB) of TCP/IP client connection +static uint8_t (*client_tcp_result_cb)(uint8_t,uint8_t,uint16_t,uint16_t); // Pointer to callback function to handle response to current TCP/IP request +static uint16_t (*client_tcp_datafill_cb)(uint8_t); //Pointer to callback function to handle payload data in response to current TCP/IP request +static uint8_t www_fd; // ID of current http request (only one http request at a time - one of the 8 possible concurrent TCP/IP connections) +static void (*client_browser_cb)(uint8_t,uint16_t,uint16_t); // Pointer to callback function to handle result of current HTTP request +static const char *client_additionalheaderline; // Pointer to c-string additional http request header info +static const char *client_postval; +static const char *client_urlbuf; // Pointer to c-string path part of HTTP request URL +static const char *client_urlbuf_var; // Pointer to c-string filename part of HTTP request URL +static const char *client_hoststr; // Pointer to c-string hostname of current HTTP request +static void (*icmp_cb)(uint8_t *ip); // Pointer to callback function for ICMP ECHO response handler (triggers when localhost recieves ping respnse (pong)) +static uint8_t destmacaddr[6]; // storing both dns server and destination mac addresses, but at different times because both are never needed at same time. +static boolean waiting_for_dns_mac = false; //might be better to use bit flags and bitmask operations for these conditions +static boolean has_dns_mac = false; +static boolean waiting_for_dest_mac = false; +static boolean has_dest_mac = false; +static uint8_t gwmacaddr[6]; // Hardware (MAC) address of gateway router +static uint8_t waitgwmac; // Bitwise flags of gateway router status - see below for states +//Define gatweay router ARP statuses +#define WGW_INITIAL_ARP 1 // First request, no answer yet +#define WGW_HAVE_GW_MAC 2 // Have gateway router MAC +#define WGW_REFRESHING 4 // Refreshing but already have gateway MAC +#define WGW_ACCEPT_ARP_REPLY 8 // Accept an ARP reply + +static uint16_t info_data_len; // Length of TCP/IP payload +static uint8_t seqnum = 0xa; // My initial tcp sequence number +static uint8_t result_fd = 123; // Session id of last reply +static const char* result_ptr; // Pointer to TCP/IP data +static unsigned long SEQ; // TCP/IP sequence number + +#define CLIENTMSS 550 +#define TCP_DATA_START ((uint16_t)TCP_SRC_PORT_H_P+(gPB[TCP_HEADER_LEN_P]>>4)*4) // Get offset of TCP/IP payload data + +const unsigned char arpreqhdr[] PROGMEM = { 0,1,8,0,6,4,0,1 }; // ARP request header +const unsigned char iphdr[] PROGMEM = { 0x45,0,0,0x82,0,0,0x40,0,0x20 }; //IP header +const unsigned char ntpreqhdr[] PROGMEM = { 0xE3,0,4,0xFA,0,1,0,0,0,1 }; //NTP request header +const uint8_t allOnes[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; // Used for hardware (MAC) and IP broadcast addresses + +static void fill_checksum(uint8_t dest, uint8_t off, uint16_t len,uint8_t type) { + const uint8_t* ptr = gPB + off; + uint32_t sum = type==1 ? IP_PROTO_UDP_V+len-8 : + type==2 ? IP_PROTO_TCP_V+len-8 : 0; + while(len >1) { + sum += (uint16_t) (((uint32_t)*ptr<<8)|*(ptr+1)); + ptr+=2; + len-=2; + } + if (len) + sum += ((uint32_t)*ptr)<<8; + while (sum>>16) + sum = (uint16_t) sum + (sum >> 16); + uint16_t ck = ~ (uint16_t) sum; + gPB[dest] = ck>>8; + gPB[dest+1] = ck; +} + +static void setMACs (const uint8_t *mac) { + EtherCard::copyMac(gPB + ETH_DST_MAC, mac); + EtherCard::copyMac(gPB + ETH_SRC_MAC, EtherCard::mymac); +} + +static void setMACandIPs (const uint8_t *mac, const uint8_t *dst) { + setMACs(mac); + EtherCard::copyIp(gPB + IP_DST_P, dst); + EtherCard::copyIp(gPB + IP_SRC_P, EtherCard::myip); +} + +static uint8_t check_ip_message_is_from(const uint8_t *ip) { + return memcmp(gPB + IP_SRC_P, ip, 4) == 0; +} + +static boolean is_lan(const uint8_t source[4], const uint8_t destination[4]) { + if(source[0] == 0 || destination[0] == 0) { + return false; + } + for(int i = 0; i < 4; i++) + if((source[i] & EtherCard::netmask[i]) != (destination[i] & EtherCard::netmask[i])) { + return false; + } + return true; +} + +static uint8_t eth_type_is_arp_and_my_ip(uint16_t len) { + return len >= 41 && gPB[ETH_TYPE_H_P] == ETHTYPE_ARP_H_V && + gPB[ETH_TYPE_L_P] == ETHTYPE_ARP_L_V && + memcmp(gPB + ETH_ARP_DST_IP_P, EtherCard::myip, 4) == 0; +} + +static uint8_t eth_type_is_ip_and_my_ip(uint16_t len) { + return len >= 42 && gPB[ETH_TYPE_H_P] == ETHTYPE_IP_H_V && + gPB[ETH_TYPE_L_P] == ETHTYPE_IP_L_V && + gPB[IP_HEADER_LEN_VER_P] == 0x45 && + (memcmp(gPB + IP_DST_P, EtherCard::myip, 4) == 0 //not my IP + || (memcmp(gPB + IP_DST_P, EtherCard::broadcastip, 4) == 0) //not subnet broadcast + || (memcmp(gPB + IP_DST_P, allOnes, 4) == 0)); //not global broadcasts + //!@todo Handle multicast +} + +static void fill_ip_hdr_checksum() { + gPB[IP_CHECKSUM_P] = 0; + gPB[IP_CHECKSUM_P+1] = 0; + gPB[IP_FLAGS_P] = 0x40; // don't fragment + gPB[IP_FLAGS_P+1] = 0; // fragement offset + gPB[IP_TTL_P] = 64; // ttl + fill_checksum(IP_CHECKSUM_P, IP_P, IP_HEADER_LEN,0); +} + +static void make_eth_ip() { + setMACs(gPB + ETH_SRC_MAC); + EtherCard::copyIp(gPB + IP_DST_P, gPB + IP_SRC_P); + EtherCard::copyIp(gPB + IP_SRC_P, EtherCard::myip); + fill_ip_hdr_checksum(); +} + +static void step_seq(uint16_t rel_ack_num,uint8_t cp_seq) { + uint8_t i; + uint8_t tseq; + i = 4; + while(i>0) { + rel_ack_num = gPB[TCP_SEQ_H_P+i-1]+rel_ack_num; + tseq = gPB[TCP_SEQACK_H_P+i-1]; + gPB[TCP_SEQACK_H_P+i-1] = rel_ack_num; + if (cp_seq) + gPB[TCP_SEQ_H_P+i-1] = tseq; + else + gPB[TCP_SEQ_H_P+i-1] = 0; // some preset value + rel_ack_num = rel_ack_num>>8; + i--; + } +} + +static void make_tcphead(uint16_t rel_ack_num,uint8_t cp_seq) { + uint8_t i = gPB[TCP_DST_PORT_H_P]; + gPB[TCP_DST_PORT_H_P] = gPB[TCP_SRC_PORT_H_P]; + gPB[TCP_SRC_PORT_H_P] = i; + uint8_t j = gPB[TCP_DST_PORT_L_P]; + gPB[TCP_DST_PORT_L_P] = gPB[TCP_SRC_PORT_L_P]; + gPB[TCP_SRC_PORT_L_P] = j; + step_seq(rel_ack_num,cp_seq); + gPB[TCP_CHECKSUM_H_P] = 0; + gPB[TCP_CHECKSUM_L_P] = 0; + gPB[TCP_HEADER_LEN_P] = 0x50; +} + +static void make_arp_answer_from_request() { + setMACs(gPB + ETH_SRC_MAC); + gPB[ETH_ARP_OPCODE_H_P] = ETH_ARP_OPCODE_REPLY_H_V; + gPB[ETH_ARP_OPCODE_L_P] = ETH_ARP_OPCODE_REPLY_L_V; + EtherCard::copyMac(gPB + ETH_ARP_DST_MAC_P, gPB + ETH_ARP_SRC_MAC_P); + EtherCard::copyMac(gPB + ETH_ARP_SRC_MAC_P, EtherCard::mymac); + EtherCard::copyIp(gPB + ETH_ARP_DST_IP_P, gPB + ETH_ARP_SRC_IP_P); + EtherCard::copyIp(gPB + ETH_ARP_SRC_IP_P, EtherCard::myip); + EtherCard::packetSend(42); +} + +static void make_echo_reply_from_request(uint16_t len) { + make_eth_ip(); + gPB[ICMP_TYPE_P] = ICMP_TYPE_ECHOREPLY_V; + if (gPB[ICMP_CHECKSUM_P] > (0xFF-0x08)) + gPB[ICMP_CHECKSUM_P+1]++; + gPB[ICMP_CHECKSUM_P] += 0x08; + EtherCard::packetSend(len); +} + +void EtherCard::makeUdpReply (const char *data,uint8_t datalen,uint16_t port) { + if (datalen>220) + datalen = 220; + gPB[IP_TOTLEN_H_P] = (IP_HEADER_LEN+UDP_HEADER_LEN+datalen) >>8; + gPB[IP_TOTLEN_L_P] = IP_HEADER_LEN+UDP_HEADER_LEN+datalen; + make_eth_ip(); + gPB[UDP_DST_PORT_H_P] = gPB[UDP_SRC_PORT_H_P]; + gPB[UDP_DST_PORT_L_P] = gPB[UDP_SRC_PORT_L_P]; + gPB[UDP_SRC_PORT_H_P] = port>>8; + gPB[UDP_SRC_PORT_L_P] = port; + gPB[UDP_LEN_H_P] = (UDP_HEADER_LEN+datalen) >> 8; + gPB[UDP_LEN_L_P] = UDP_HEADER_LEN+datalen; + gPB[UDP_CHECKSUM_H_P] = 0; + gPB[UDP_CHECKSUM_L_P] = 0; + memcpy(gPB + UDP_DATA_P, data, datalen); + fill_checksum(UDP_CHECKSUM_H_P, IP_SRC_P, 16 + datalen,1); + packetSend(UDP_HEADER_LEN+IP_HEADER_LEN+ETH_HEADER_LEN+datalen); +} + +static void make_tcp_synack_from_syn() { + gPB[IP_TOTLEN_H_P] = 0; + gPB[IP_TOTLEN_L_P] = IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN+4; + make_eth_ip(); + gPB[TCP_FLAGS_P] = TCP_FLAGS_SYNACK_V; + make_tcphead(1,0); + gPB[TCP_SEQ_H_P+0] = 0; + gPB[TCP_SEQ_H_P+1] = 0; + gPB[TCP_SEQ_H_P+2] = seqnum; + gPB[TCP_SEQ_H_P+3] = 0; + seqnum += 3; + gPB[TCP_OPTIONS_P] = 2; + gPB[TCP_OPTIONS_P+1] = 4; + gPB[TCP_OPTIONS_P+2] = 0x05; + gPB[TCP_OPTIONS_P+3] = 0x0; + gPB[TCP_HEADER_LEN_P] = 0x60; + gPB[TCP_WIN_SIZE] = 0x5; // 1400=0x578 + gPB[TCP_WIN_SIZE+1] = 0x78; + fill_checksum(TCP_CHECKSUM_H_P, IP_SRC_P, 8+TCP_HEADER_LEN_PLAIN+4,2); + EtherCard::packetSend(IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN+4+ETH_HEADER_LEN); +} + +static uint16_t get_tcp_data_len() { + int16_t i = (((int16_t)gPB[IP_TOTLEN_H_P])<<8)|gPB[IP_TOTLEN_L_P]; + i -= IP_HEADER_LEN; + i -= (gPB[TCP_HEADER_LEN_P]>>4)*4; // generate len in bytes; + if (i<=0) + i = 0; + return (uint16_t)i; +} + +static void make_tcp_ack_from_any(int16_t datlentoack,uint8_t addflags) { + gPB[TCP_FLAGS_P] = TCP_FLAGS_ACK_V|addflags; + if (addflags!=TCP_FLAGS_RST_V && datlentoack==0) + datlentoack = 1; + make_tcphead(datlentoack,1); // no options + uint16_t j = IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN; + gPB[IP_TOTLEN_H_P] = j>>8; + gPB[IP_TOTLEN_L_P] = j; + make_eth_ip(); + gPB[TCP_WIN_SIZE] = 0x4; // 1024=0x400, 1280=0x500 2048=0x800 768=0x300 + gPB[TCP_WIN_SIZE+1] = 0; + fill_checksum(TCP_CHECKSUM_H_P, IP_SRC_P, 8+TCP_HEADER_LEN_PLAIN,2); + EtherCard::packetSend(IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN+ETH_HEADER_LEN); +} + +static void make_tcp_ack_with_data_noflags(uint16_t dlen) { + uint16_t j = IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN+dlen; + gPB[IP_TOTLEN_H_P] = j>>8; + gPB[IP_TOTLEN_L_P] = j; + fill_ip_hdr_checksum(); + gPB[TCP_CHECKSUM_H_P] = 0; + gPB[TCP_CHECKSUM_L_P] = 0; + fill_checksum(TCP_CHECKSUM_H_P, IP_SRC_P, 8+TCP_HEADER_LEN_PLAIN+dlen,2); + EtherCard::packetSend(IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN+dlen+ETH_HEADER_LEN); +} + +void EtherCard::httpServerReply (uint16_t dlen) { + make_tcp_ack_from_any(info_data_len,0); // send ack for http get + gPB[TCP_FLAGS_P] = TCP_FLAGS_ACK_V|TCP_FLAGS_PUSH_V|TCP_FLAGS_FIN_V; + make_tcp_ack_with_data_noflags(dlen); // send data +} + +static void get_seq() { //get the sequence number of packets after an ack from GET + SEQ =(((unsigned long)gPB[TCP_SEQ_H_P]*256+gPB[TCP_SEQ_H_P+1])*256+gPB[TCP_SEQ_H_P+2])*256+gPB[TCP_SEQ_H_P+3]; +} //thanks to mstuetz for the missing (unsigned long) + +static void set_seq() { //set the correct sequence number and calculate the next with the lenght of current packet + gPB[TCP_SEQ_H_P]= (SEQ & 0xff000000 ) >> 24; + gPB[TCP_SEQ_H_P+1]= (SEQ & 0xff0000 ) >> 16; + gPB[TCP_SEQ_H_P+2]= (SEQ & 0xff00 ) >> 8; + gPB[TCP_SEQ_H_P+3]= (SEQ & 0xff ); +} + +void EtherCard::httpServerReplyAck () { + make_tcp_ack_from_any(info_data_len,0); // send ack for http get + get_seq(); //get the sequence number of packets after an ack from GET +} + +void EtherCard::httpServerReply_with_flags (uint16_t dlen , uint8_t flags) { + set_seq(); + gPB[TCP_FLAGS_P] = flags; // final packet + make_tcp_ack_with_data_noflags(dlen); // send data + SEQ=SEQ+dlen; +} + +void EtherCard::clientIcmpRequest(const uint8_t *destip) { + if(is_lan(EtherCard::myip, destip)) { + setMACandIPs(destmacaddr, destip); + } else + setMACandIPs(gwmacaddr, destip); + gPB[ETH_TYPE_H_P] = ETHTYPE_IP_H_V; + gPB[ETH_TYPE_L_P] = ETHTYPE_IP_L_V; + memcpy_P(gPB + IP_P,iphdr,9); + gPB[IP_TOTLEN_L_P] = 0x54; + gPB[IP_PROTO_P] = IP_PROTO_ICMP_V; + fill_ip_hdr_checksum(); + gPB[ICMP_TYPE_P] = ICMP_TYPE_ECHOREQUEST_V; + gPB[ICMP_TYPE_P+1] = 0; // code + gPB[ICMP_CHECKSUM_H_P] = 0; + gPB[ICMP_CHECKSUM_L_P] = 0; + gPB[ICMP_IDENT_H_P] = 5; // some number + gPB[ICMP_IDENT_L_P] = EtherCard::myip[3]; // last byte of my IP + gPB[ICMP_IDENT_L_P+1] = 0; // seq number, high byte + gPB[ICMP_IDENT_L_P+2] = 1; // seq number, low byte, we send only 1 ping at a time + memset(gPB + ICMP_DATA_P, PINGPATTERN, 56); + fill_checksum(ICMP_CHECKSUM_H_P, ICMP_TYPE_P, 56+8,0); + packetSend(98); +} + +void EtherCard::ntpRequest (uint8_t *ntpip,uint8_t srcport) { + if(is_lan(myip, ntpip)) { + setMACandIPs(destmacaddr, ntpip); + } else + setMACandIPs(gwmacaddr, ntpip); + gPB[ETH_TYPE_H_P] = ETHTYPE_IP_H_V; + gPB[ETH_TYPE_L_P] = ETHTYPE_IP_L_V; + memcpy_P(gPB + IP_P,iphdr,9); + gPB[IP_TOTLEN_L_P] = 0x4c; + gPB[IP_PROTO_P] = IP_PROTO_UDP_V; + fill_ip_hdr_checksum(); + gPB[UDP_DST_PORT_H_P] = 0; + gPB[UDP_DST_PORT_L_P] = 0x7b; // ntp = 123 + gPB[UDP_SRC_PORT_H_P] = 10; + gPB[UDP_SRC_PORT_L_P] = srcport; // lower 8 bit of src port + gPB[UDP_LEN_H_P] = 0; + gPB[UDP_LEN_L_P] = 56; // fixed len + gPB[UDP_CHECKSUM_H_P] = 0; + gPB[UDP_CHECKSUM_L_P] = 0; + memset(gPB + UDP_DATA_P, 0, 48); + memcpy_P(gPB + UDP_DATA_P,ntpreqhdr,10); + fill_checksum(UDP_CHECKSUM_H_P, IP_SRC_P, 16 + 48,1); + packetSend(90); +} + +uint8_t EtherCard::ntpProcessAnswer (uint32_t *time,uint8_t dstport_l) { + if ((dstport_l && gPB[UDP_DST_PORT_L_P]!=dstport_l) || gPB[UDP_LEN_H_P]!=0 || + gPB[UDP_LEN_L_P]!=56 || gPB[UDP_SRC_PORT_L_P]!=0x7b) + return 0; + ((uint8_t*) time)[3] = gPB[0x52]; + ((uint8_t*) time)[2] = gPB[0x53]; + ((uint8_t*) time)[1] = gPB[0x54]; + ((uint8_t*) time)[0] = gPB[0x55]; + return 1; +} + +void EtherCard::udpPrepare (uint16_t sport, const uint8_t *dip, uint16_t dport) { + if(is_lan(myip, dip)) // this works because both dns mac and destinations mac are stored in same variable - destmacaddr + setMACandIPs(destmacaddr, dip); // at different times. The program could have separate variable for dns mac, then here should be + else // checked if dip is dns ip and separately if dip is hisip and then use correct mac. + setMACandIPs(gwmacaddr, dip); + // see http://tldp.org/HOWTO/Multicast-HOWTO-2.html + // multicast or broadcast address, https://github.com/jcw/ethercard/issues/59 + if ((dip[0] & 0xF0) == 0xE0 || *((unsigned long*) dip) == 0xFFFFFFFF) + EtherCard::copyMac(gPB + ETH_DST_MAC, allOnes); + gPB[ETH_TYPE_H_P] = ETHTYPE_IP_H_V; + gPB[ETH_TYPE_L_P] = ETHTYPE_IP_L_V; + memcpy_P(gPB + IP_P,iphdr,9); + gPB[IP_TOTLEN_H_P] = 0; + gPB[IP_PROTO_P] = IP_PROTO_UDP_V; + gPB[UDP_DST_PORT_H_P] = (dport>>8); + gPB[UDP_DST_PORT_L_P] = dport; + gPB[UDP_SRC_PORT_H_P] = (sport>>8); + gPB[UDP_SRC_PORT_L_P] = sport; + gPB[UDP_LEN_H_P] = 0; + gPB[UDP_CHECKSUM_H_P] = 0; + gPB[UDP_CHECKSUM_L_P] = 0; +} + +void EtherCard::udpTransmit (uint16_t datalen) { + gPB[IP_TOTLEN_H_P] = (IP_HEADER_LEN+UDP_HEADER_LEN+datalen) >> 8; + gPB[IP_TOTLEN_L_P] = IP_HEADER_LEN+UDP_HEADER_LEN+datalen; + fill_ip_hdr_checksum(); + gPB[UDP_LEN_H_P] = (UDP_HEADER_LEN+datalen) >>8; + gPB[UDP_LEN_L_P] = UDP_HEADER_LEN+datalen; + fill_checksum(UDP_CHECKSUM_H_P, IP_SRC_P, 16 + datalen,1); + packetSend(UDP_HEADER_LEN+IP_HEADER_LEN+ETH_HEADER_LEN+datalen); +} + +void EtherCard::sendUdp (const char *data, uint8_t datalen, uint16_t sport, + const uint8_t *dip, uint16_t dport) { + udpPrepare(sport, dip, dport); + if (datalen>220) + datalen = 220; + memcpy(gPB + UDP_DATA_P, data, datalen); + udpTransmit(datalen); +} + +void EtherCard::sendWol (uint8_t *wolmac) { + setMACandIPs(allOnes, allOnes); + gPB[ETH_TYPE_H_P] = ETHTYPE_IP_H_V; + gPB[ETH_TYPE_L_P] = ETHTYPE_IP_L_V; + memcpy_P(gPB + IP_P,iphdr,9); + gPB[IP_TOTLEN_L_P] = 0x82; + gPB[IP_PROTO_P] = IP_PROTO_UDP_V; + fill_ip_hdr_checksum(); + gPB[UDP_DST_PORT_H_P] = 0; + gPB[UDP_DST_PORT_L_P] = 0x9; // wol = normally 9 + gPB[UDP_SRC_PORT_H_P] = 10; + gPB[UDP_SRC_PORT_L_P] = 0x42; // source port does not matter + gPB[UDP_LEN_H_P] = 0; + gPB[UDP_LEN_L_P] = 110; // fixed len + gPB[UDP_CHECKSUM_H_P] = 0; + gPB[UDP_CHECKSUM_L_P] = 0; + copyMac(gPB + UDP_DATA_P, allOnes); + uint8_t pos = UDP_DATA_P; + for (uint8_t m = 0; m < 16; ++m) { + pos += 6; + copyMac(gPB + pos, wolmac); + } + fill_checksum(UDP_CHECKSUM_H_P, IP_SRC_P, 16 + 102,1); + packetSend(pos + 6); +} + +// make a arp request +static void client_arp_whohas(uint8_t *ip_we_search) { + setMACs(allOnes); + gPB[ETH_TYPE_H_P] = ETHTYPE_ARP_H_V; + gPB[ETH_TYPE_L_P] = ETHTYPE_ARP_L_V; + memcpy_P(gPB + ETH_ARP_P,arpreqhdr,8); + memset(gPB + ETH_ARP_DST_MAC_P, 0, 6); + EtherCard::copyMac(gPB + ETH_ARP_SRC_MAC_P, EtherCard::mymac); + EtherCard::copyIp(gPB + ETH_ARP_DST_IP_P, ip_we_search); + EtherCard::copyIp(gPB + ETH_ARP_SRC_IP_P, EtherCard::myip); + EtherCard::packetSend(42); +} + +uint8_t EtherCard::clientWaitingGw () { + return !(waitgwmac & WGW_HAVE_GW_MAC); +} + +static uint8_t client_store_mac(uint8_t *source_ip, uint8_t *mac) { + if (memcmp(gPB + ETH_ARP_SRC_IP_P, source_ip, 4) != 0) + return 0; + EtherCard::copyMac(mac, gPB + ETH_ARP_SRC_MAC_P); + return 1; +} + +// static void client_gw_arp_refresh() { +// if (waitgwmac & WGW_HAVE_GW_MAC) +// waitgwmac |= WGW_REFRESHING; +// } + +void EtherCard::setGwIp (const uint8_t *gwipaddr) { + delaycnt = 0; //request gateway ARP lookup + waitgwmac = WGW_INITIAL_ARP; // causes an arp request in the packet loop + copyIp(gwip, gwipaddr); +} + +void EtherCard::updateBroadcastAddress() +{ + for(uint8_t i=0; i<4; i++) + broadcastip[i] = myip[i] | ~netmask[i]; +} + +static void client_syn(uint8_t srcport,uint8_t dstport_h,uint8_t dstport_l) { + if(is_lan(EtherCard::myip, EtherCard::hisip)) { + setMACandIPs(destmacaddr, EtherCard::hisip); + } else + setMACandIPs(gwmacaddr, EtherCard::hisip); + gPB[ETH_TYPE_H_P] = ETHTYPE_IP_H_V; + gPB[ETH_TYPE_L_P] = ETHTYPE_IP_L_V; + memcpy_P(gPB + IP_P,iphdr,9); + gPB[IP_TOTLEN_L_P] = 44; // good for syn + gPB[IP_PROTO_P] = IP_PROTO_TCP_V; + fill_ip_hdr_checksum(); + gPB[TCP_DST_PORT_H_P] = dstport_h; + gPB[TCP_DST_PORT_L_P] = dstport_l; + gPB[TCP_SRC_PORT_H_P] = TCPCLIENT_SRC_PORT_H; + gPB[TCP_SRC_PORT_L_P] = srcport; // lower 8 bit of src port + memset(gPB + TCP_SEQ_H_P, 0, 8); + gPB[TCP_SEQ_H_P+2] = seqnum; + seqnum += 3; + gPB[TCP_HEADER_LEN_P] = 0x60; // 0x60=24 len: (0x60>>4) * 4 + gPB[TCP_FLAGS_P] = TCP_FLAGS_SYN_V; + gPB[TCP_WIN_SIZE] = 0x3; // 1024 = 0x400 768 = 0x300, initial window + gPB[TCP_WIN_SIZE+1] = 0x0; + gPB[TCP_CHECKSUM_H_P] = 0; + gPB[TCP_CHECKSUM_L_P] = 0; + gPB[TCP_CHECKSUM_L_P+1] = 0; + gPB[TCP_CHECKSUM_L_P+2] = 0; + gPB[TCP_OPTIONS_P] = 2; + gPB[TCP_OPTIONS_P+1] = 4; + gPB[TCP_OPTIONS_P+2] = (CLIENTMSS>>8); + gPB[TCP_OPTIONS_P+3] = (uint8_t) CLIENTMSS; + fill_checksum(TCP_CHECKSUM_H_P, IP_SRC_P, 8 +TCP_HEADER_LEN_PLAIN+4,2); + // 4 is the tcp mss option: + EtherCard::packetSend(IP_HEADER_LEN+TCP_HEADER_LEN_PLAIN+ETH_HEADER_LEN+4); +} + +uint8_t EtherCard::clientTcpReq (uint8_t (*result_cb)(uint8_t,uint8_t,uint16_t,uint16_t), + uint16_t (*datafill_cb)(uint8_t),uint16_t port) { + client_tcp_result_cb = result_cb; + client_tcp_datafill_cb = datafill_cb; + tcp_client_port_h = port>>8; + tcp_client_port_l = port; + tcp_client_state = 1; // Flag to packetloop to initiate a TCP/IP session by send a syn + tcp_fd = (tcp_fd + 1) & 7; + return tcp_fd; +} + +static uint16_t www_client_internal_datafill_cb(uint8_t fd) { + BufferFiller bfill = EtherCard::tcpOffset(); + if (fd==www_fd) { + if (client_postval == 0) { + bfill.emit_p(PSTR("GET $F$S HTTP/1.0\r\n" + "Host: $F\r\n" + "$F\r\n" + "\r\n"), client_urlbuf, + client_urlbuf_var, + client_hoststr, client_additionalheaderline); + } else { + const char* ahl = client_additionalheaderline; + bfill.emit_p(PSTR("POST $F HTTP/1.0\r\n" + "Host: $F\r\n" + "$F$S" + "Accept: */*\r\n" + "Content-Length: $D\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "\r\n" + "$S"), client_urlbuf, + client_hoststr, + ahl != 0 ? ahl : PSTR(""), + ahl != 0 ? "\r\n" : "", + strlen(client_postval), + client_postval); + } + } + return bfill.position(); +} + +static uint8_t www_client_internal_result_cb(uint8_t fd, uint8_t statuscode, uint16_t datapos, uint16_t len_of_data) { + if (fd!=www_fd) + (*client_browser_cb)(4,0,0); + else if (statuscode==0 && len_of_data>12 && client_browser_cb) { + uint8_t f = strncmp("200",(char *)&(gPB[datapos+9]),3) != 0; + (*client_browser_cb)(f, ((uint16_t)TCP_SRC_PORT_H_P+(gPB[TCP_HEADER_LEN_P]>>4)*4),len_of_data); + } + return 0; +} + +void EtherCard::browseUrl (const char *urlbuf, const char *urlbuf_varpart, const char *hoststr, void (*callback)(uint8_t,uint16_t,uint16_t)) { + browseUrl(urlbuf, urlbuf_varpart, hoststr, PSTR("Accept: text/html"), callback); +} + +void EtherCard::browseUrl (const char *urlbuf, const char *urlbuf_varpart, const char *hoststr, const char *additionalheaderline, void (*callback)(uint8_t,uint16_t,uint16_t)) { + client_urlbuf = urlbuf; + client_urlbuf_var = urlbuf_varpart; + client_hoststr = hoststr; + client_additionalheaderline = additionalheaderline; + client_postval = 0; + client_browser_cb = callback; + www_fd = clientTcpReq(&www_client_internal_result_cb,&www_client_internal_datafill_cb,hisport); +} + +void EtherCard::httpPost (const char *urlbuf, const char *hoststr, const char *additionalheaderline, const char *postval, void (*callback)(uint8_t,uint16_t,uint16_t)) { + client_urlbuf = urlbuf; + client_hoststr = hoststr; + client_additionalheaderline = additionalheaderline; + client_postval = postval; + client_browser_cb = callback; + www_fd = clientTcpReq(&www_client_internal_result_cb,&www_client_internal_datafill_cb,hisport); +} + +static uint16_t tcp_datafill_cb(uint8_t fd) { + uint16_t len = Stash::length(); + Stash::extract(0, len, EtherCard::tcpOffset()); + Stash::cleanup(); + EtherCard::tcpOffset()[len] = 0; +#if SERIAL + Serial.print("REQUEST: "); + Serial.println(len); + Serial.println((char*) EtherCard::tcpOffset()); +#endif + result_fd = 123; // bogus value + return len; +} + +static uint8_t tcp_result_cb(uint8_t fd, uint8_t status, uint16_t datapos, uint16_t datalen) { + if (status == 0) { + result_fd = fd; // a valid result has been received, remember its session id + result_ptr = (char*) ether.buffer + datapos; + // result_ptr[datalen] = 0; + } + return 1; +} + +uint8_t EtherCard::tcpSend () { + www_fd = clientTcpReq(&tcp_result_cb, &tcp_datafill_cb, hisport); + return www_fd; +} + +const char* EtherCard::tcpReply (uint8_t fd) { + if (result_fd != fd) + return 0; + result_fd = 123; // set to a bogus value to prevent future match + return result_ptr; +} + +void EtherCard::registerPingCallback (void (*callback)(uint8_t *srcip)) { + icmp_cb = callback; +} + +uint8_t EtherCard::packetLoopIcmpCheckReply (const uint8_t *ip_monitoredhost) { + return gPB[IP_PROTO_P]==IP_PROTO_ICMP_V && + gPB[ICMP_TYPE_P]==ICMP_TYPE_ECHOREPLY_V && + gPB[ICMP_DATA_P]== PINGPATTERN && + check_ip_message_is_from(ip_monitoredhost); +} + +uint16_t EtherCard::accept(const uint16_t port, uint16_t plen) { + uint16_t pos; + + if (gPB[TCP_DST_PORT_H_P] == (port >> 8) && + gPB[TCP_DST_PORT_L_P] == ((uint8_t) port)) + { //Packet targetted at specified port + if (gPB[TCP_FLAGS_P] & TCP_FLAGS_SYN_V) + make_tcp_synack_from_syn(); //send SYN+ACK + else if (gPB[TCP_FLAGS_P] & TCP_FLAGS_ACK_V) + { //This is an acknowledgement to our SYN+ACK so let's start processing that payload + info_data_len = get_tcp_data_len(); + if (info_data_len > 0) + { //Got some data + pos = TCP_DATA_START; // TCP_DATA_START is a formula + if (pos <= plen - 8) + return pos; + } + else if (gPB[TCP_FLAGS_P] & TCP_FLAGS_FIN_V) + make_tcp_ack_from_any(0,0); //No data so close connection + } + } + return 0; +} + +uint16_t EtherCard::packetLoop (uint16_t plen) { + uint16_t len; + if(using_dhcp){ + ether.DhcpStateMachine(plen); + } + + if (plen==0) { + //Check every 65536 (no-packet) cycles whether we need to retry ARP request for gateway + if ((waitgwmac & WGW_INITIAL_ARP || waitgwmac & WGW_REFRESHING) && + delaycnt==0 && isLinkUp()) { + client_arp_whohas(gwip); + waitgwmac |= WGW_ACCEPT_ARP_REPLY; + } + + + + delaycnt++; + //Initiate TCP/IP session if pending + if (tcp_client_state==1 && (waitgwmac & WGW_HAVE_GW_MAC)) { // send a syn + tcp_client_state = 2; + tcpclient_src_port_l++; // allocate a new port + client_syn(((tcp_fd<<5) | (0x1f & tcpclient_src_port_l)),tcp_client_port_h,tcp_client_port_l); + } + //!@todo this is trying to find mac only once. Need some timeout to make another call if first one doesn't succeed. + if(is_lan(myip, dnsip) && !has_dns_mac && !waiting_for_dns_mac) { + client_arp_whohas(dnsip); + waiting_for_dns_mac = true; + } + //!@todo this is trying to find mac only once. Need some timeout to make another call if first one doesn't succeed. + if(is_lan(myip, hisip) && !has_dest_mac && !waiting_for_dest_mac) { + client_arp_whohas(hisip); + waiting_for_dest_mac = true; + } + + return 0; + } + + if (eth_type_is_arp_and_my_ip(plen)) + { //Service ARP request + if (gPB[ETH_ARP_OPCODE_L_P]==ETH_ARP_OPCODE_REQ_L_V) + make_arp_answer_from_request(); + if (waitgwmac & WGW_ACCEPT_ARP_REPLY && (gPB[ETH_ARP_OPCODE_L_P]==ETH_ARP_OPCODE_REPLY_L_V) && client_store_mac(gwip, gwmacaddr)) + waitgwmac = WGW_HAVE_GW_MAC; + if (!has_dns_mac && waiting_for_dns_mac && client_store_mac(dnsip, destmacaddr)) { + has_dns_mac = true; + waiting_for_dns_mac = false; + } + if (!has_dest_mac && waiting_for_dest_mac && client_store_mac(hisip, destmacaddr)){ + has_dest_mac = true; + waiting_for_dest_mac = false; + } + return 0; + } + + if (eth_type_is_ip_and_my_ip(plen)==0) + { //Not IP so ignoring + //!@todo Add other protocols (and make each optional at compile time) + return 0; + } + if (gPB[IP_PROTO_P]==IP_PROTO_ICMP_V && gPB[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V) + { //Service ICMP echo request (ping) + if (icmp_cb) + (*icmp_cb)(&(gPB[IP_SRC_P])); + make_echo_reply_from_request(plen); + return 0; + } + if (ether.udpServerListening() && gPB[IP_PROTO_P]==IP_PROTO_UDP_V) + { //Call UDP server handler (callback) if one is defined for this packet + if(ether.udpServerHasProcessedPacket(plen)) + return 0; //An UDP server handler (callback) has processed this packet + } + if (plen<54 && gPB[IP_PROTO_P]!=IP_PROTO_TCP_V ) + return 0; //Packet flagged as TCP but shorter than minimum TCP packet length + if (gPB[TCP_DST_PORT_H_P]==TCPCLIENT_SRC_PORT_H) + { //Source port is in range reserved (by EtherCard) for client TCP/IP connections + if (check_ip_message_is_from(hisip)==0) + return 0; //Not current TCP/IP connection (only handle one at a time) + if (gPB[TCP_FLAGS_P] & TCP_FLAGS_RST_V) + { //TCP reset flagged + if (client_tcp_result_cb) + (*client_tcp_result_cb)((gPB[TCP_DST_PORT_L_P]>>5)&0x7,3,0,0); + tcp_client_state = 5; + return 0; + } + len = get_tcp_data_len(); + if (tcp_client_state==2) + { //Waiting for SYN-ACK + if ((gPB[TCP_FLAGS_P] & TCP_FLAGS_SYN_V) && (gPB[TCP_FLAGS_P] &TCP_FLAGS_ACK_V)) + { //SYN and ACK flags set so this is an acknowledgement to our SYN + make_tcp_ack_from_any(0,0); + gPB[TCP_FLAGS_P] = TCP_FLAGS_ACK_V|TCP_FLAGS_PUSH_V; + if (client_tcp_datafill_cb) + len = (*client_tcp_datafill_cb)((gPB[TCP_SRC_PORT_L_P]>>5)&0x7); + else + len = 0; + tcp_client_state = 3; + make_tcp_ack_with_data_noflags(len); + } + else + { //Expecting SYN+ACK so reset and resend SYN + tcp_client_state = 1; // retry + len++; + if (gPB[TCP_FLAGS_P] & TCP_FLAGS_ACK_V) + len = 0; + make_tcp_ack_from_any(len,TCP_FLAGS_RST_V); + } + return 0; + } + if (tcp_client_state==3 && len>0) + { //TCP connection established so read data + if (client_tcp_result_cb) { + uint16_t tcpstart = TCP_DATA_START; // TCP_DATA_START is a formula + if (tcpstart>plen-8) + tcpstart = plen-8; // dummy but save + uint16_t save_len = len; + if (tcpstart+len>plen) + save_len = plen-tcpstart; + (*client_tcp_result_cb)((gPB[TCP_DST_PORT_L_P]>>5)&0x7,0,tcpstart,save_len); //Call TCP handler (callback) function + + if(persist_tcp_connection) + { //Keep connection alive by sending ACK + make_tcp_ack_from_any(len,TCP_FLAGS_PUSH_V); + } + else + { //Close connection + make_tcp_ack_from_any(len,TCP_FLAGS_PUSH_V|TCP_FLAGS_FIN_V); + tcp_client_state = 6; + } + return 0; + } + } + if (tcp_client_state != 5) + { // + if (gPB[TCP_FLAGS_P] & TCP_FLAGS_FIN_V) { + if(tcp_client_state == 3) { + return 0; // In some instances FIN is received *before* DATA. If that is the case, we just return here and keep looking for the data packet + } + make_tcp_ack_from_any(len+1,TCP_FLAGS_PUSH_V|TCP_FLAGS_FIN_V); + tcp_client_state = 6; // connection terminated + } else if (len>0) { + make_tcp_ack_from_any(len,0); + } + } + return 0; + } + + //If we are here then this is a TCP/IP packet targetted at us and not related to out client connection so accept + return accept(hisport, plen); +} + +void EtherCard::persistTcpConnection(bool persist){ + persist_tcp_connection = persist; +} diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/udpserver.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/udpserver.cpp new file mode 100644 index 0000000..08ac5fe --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/udpserver.cpp @@ -0,0 +1,73 @@ +// Simple UDP listening server +// +// Author: Brian Lee +// +// Copyright: GPL V2 +// See http://www.gnu.org/licenses/gpl.html + +#include "EtherCard_STM.h" +#include "net.h" + +#define gPB ether.buffer + +#define UDPSERVER_MAXLISTENERS 8 //the maximum number of port listeners. + +typedef struct { + UdpServerCallback callback; + uint16_t port; + bool listening; +} UdpServerListener; + +UdpServerListener listeners[UDPSERVER_MAXLISTENERS]; +byte numListeners = 0; + +void EtherCard::udpServerListenOnPort(UdpServerCallback callback, uint16_t port) { + if(numListeners < UDPSERVER_MAXLISTENERS) + { + listeners[numListeners] = (UdpServerListener) { + callback, port, true + }; + numListeners++; + } +} + +void EtherCard::udpServerPauseListenOnPort(uint16_t port) { + for(int i = 0; i < numListeners; i++) + { + if(gPB[UDP_DST_PORT_H_P] == (listeners[i].port >> 8) && gPB[UDP_DST_PORT_L_P] == ((byte) listeners[i].port)) { + listeners[i].listening = false; + } + } +} + +void EtherCard::udpServerResumeListenOnPort(uint16_t port) { + for(int i = 0; i < numListeners; i++) + { + if(gPB[UDP_DST_PORT_H_P] == (listeners[i].port >> 8) && gPB[UDP_DST_PORT_L_P] == ((byte) listeners[i].port)) { + listeners[i].listening = true; + } + } +} + +bool EtherCard::udpServerListening() { + return numListeners > 0; +} + +bool EtherCard::udpServerHasProcessedPacket(uint16_t plen) { + bool packetProcessed = false; + for(int i = 0; i < numListeners; i++) + { + if(gPB[UDP_DST_PORT_H_P] == (listeners[i].port >> 8) && gPB[UDP_DST_PORT_L_P] == ((byte) listeners[i].port) && listeners[i].listening) + { + uint16_t datalen = (uint16_t) (gPB[UDP_LEN_H_P] << 8) + gPB[UDP_LEN_L_P] - UDP_HEADER_LEN; + listeners[i].callback( + listeners[i].port, + gPB + IP_SRC_P, + (gPB[UDP_SRC_PORT_H_P] << 8) | gPB[UDP_SRC_PORT_L_P], + (const char *) (gPB + UDP_DATA_P), + datalen); + packetProcessed = true; + } + } + return packetProcessed; +} diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/webutil.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/webutil.cpp new file mode 100644 index 0000000..282ae48 --- /dev/null +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/src/webutil.cpp @@ -0,0 +1,200 @@ +// Some common utilities needed for IP and web applications +// Author: Guido Socher +// Copyright: GPL V2 +// +// 2010-05-20 + +#include "EtherCard_STM.h" + +void EtherCard::copyIp (uint8_t *dst, const uint8_t *src) { + memcpy(dst, src, 4); +} + +void EtherCard::copyMac (uint8_t *dst, const uint8_t *src) { + memcpy(dst, src, 6); +} + +void EtherCard::printIp (const char* msg, const uint8_t *buf) { + Serial.print(msg); + EtherCard::printIp(buf); + Serial.println(); +} + +void EtherCard::printIp (const __FlashStringHelper *ifsh, const uint8_t *buf) { + Serial.print(ifsh); + EtherCard::printIp(buf); + Serial.println(); +} + +void EtherCard::printIp (const uint8_t *buf) { + for (uint8_t i = 0; i < 4; ++i) { + Serial.print( buf[i], DEC ); + if (i < 3) + Serial.print('.'); + } +} + +// search for a string of the form key=value in +// a string that looks like q?xyz=abc&uvw=defgh HTTP/1.1\r\n +// +// The returned value is stored in strbuf. You must allocate +// enough storage for strbuf, maxlen is the size of strbuf. +// I.e the value it is declated with: strbuf[5]-> maxlen=5 +uint8_t EtherCard::findKeyVal (const char *str,char *strbuf, uint8_t maxlen,const char *key) +{ + uint8_t found=0; + uint8_t i=0; + const char *kp; + kp=key; + while(*str && *str!=' ' && *str!='\n' && found==0){ + if (*str == *kp){ + kp++; + if (*kp == '\0'){ + str++; + kp=key; + if (*str == '='){ + found=1; + } + } + }else{ + kp=key; + } + str++; + } + if (found==1){ + // copy the value to a buffer and terminate it with '\0' + while(*str && *str!=' ' && *str!='\n' && *str!='&' && i= '0' && c <='9'){ + return((unsigned char)c - '0'); + } + if (c >= 'a' && c <='f'){ + return((unsigned char)c - 'a' + 10); + } + if (c >= 'A' && c <='F'){ + return((unsigned char)c - 'A' + 10); + } + return(0); +} + +// decode a url string e.g "hello%20joe" or "hello+joe" becomes "hello joe" +void EtherCard::urlDecode (char *urlbuf) +{ + char c; + char *dst = urlbuf; + while ((c = *urlbuf) != 0) { + if (c == '+') c = ' '; + if (c == '%') { + c = *++urlbuf; + c = (h2int(c) << 4) | h2int(*++urlbuf); + } + *dst++ = c; + urlbuf++; + } + *dst = '\0'; +} + +// convert a single character to a 2 digit hex str +// a terminating '\0' is added +void int2h(char c, char *hstr) +{ + hstr[1]=(c & 0xf)+'0'; + if ((c & 0xf) >9){ + hstr[1]=(c & 0xf) - 10 + 'a'; + } + c=(c>>4)&0xf; + hstr[0]=c+'0'; + if (c > 9){ + hstr[0]=c - 10 + 'a'; + } + hstr[2]='\0'; +} + +// there must be enough space in urlbuf. In the worst case that is +// 3 times the length of str +void EtherCard::urlEncode (char *str,char *urlbuf) +{ + char c; + while ((c = *str) != 0) { + if (c == ' '||isalnum(c)){ + if (c == ' '){ + c = '+'; + } + *urlbuf=c; + str++; + urlbuf++; + continue; + } + *urlbuf='%'; + urlbuf++; + int2h(c,urlbuf); + urlbuf++; + urlbuf++; + str++; + } + *urlbuf='\0'; +} + +// parse a string and extract the IP to bytestr +uint8_t EtherCard::parseIp (uint8_t *bytestr,char *str) +{ + char *sptr; + uint8_t i=0; + sptr=NULL; + while(i<4){ + bytestr[i]=0; + i++; + } + i=0; + while(*str && i<4){ + // if a number then start + if (sptr==NULL && isdigit(*str)){ + sptr=str; + } + if (*str == '.'){ + *str ='\0'; + bytestr[i]=(atoi(sptr)&0xff); + i++; + sptr=NULL; + } + str++; + } + *str ='\0'; + if (i==3){ + bytestr[i]=(atoi(sptr)&0xff); + return(0); + } + return(1); +} + +// take a byte string and convert it to a human readable display string (base is 10 for ip and 16 for mac addr), len is 4 for IP addr and 6 for mac. +void EtherCard::makeNetStr (char *resultstr,uint8_t *bytestr,uint8_t len,char separator,uint8_t base) +{ + uint8_t i=0; + uint8_t j=0; + while(i Date: Thu, 28 May 2015 16:31:56 +0300 Subject: [PATCH 11/96] 1 --- .../{examples => exampless}/JeeUdp/JeeUdp.ino | 0 .../Serasidis_EtherCard_STM/{examples => exampless}/SSDP/SSDP.ino | 0 .../{examples => exampless}/backSoon/backSoon.ino | 0 .../{examples => exampless}/etherNode/etherNode.ino | 0 .../{examples => exampless}/getDHCPandDNS/getDHCPandDNS.ino | 0 .../{examples => exampless}/getStaticIP/getStaticIP.ino | 0 .../{examples => exampless}/getViaDNS/getViaDNS.ino | 0 .../{examples => exampless}/multipacket/multipacket.ino | 0 .../{examples => exampless}/multipacketSD/multipacketSD.ino | 0 .../{examples => exampless}/nanether/nanether.ino | 0 .../{examples => exampless}/noipClient/noipClient.ino | 0 .../{examples => exampless}/pings/pings.ino | 0 .../{examples => exampless}/rbbb_server/rbbb_server.ino | 0 .../{examples => exampless}/stashTest/stashTest.ino | 0 .../{examples => exampless}/testDHCP/testDHCP.ino | 0 .../{examples => exampless}/twitter/twitter.ino | 0 .../udpClientSendOnly/Java_ClientAndServer/UDPClient.java | 0 .../udpClientSendOnly/Java_ClientAndServer/UDPserver.java | 0 .../udpClientSendOnly/udpClientSendOnly.ino | 0 .../{examples => exampless}/udpListener/udpListener.ino | 0 .../{examples => exampless}/webClient/webClient.ino | 0 .../{examples => exampless}/xively/xively.ino | 0 22 files changed, 0 insertions(+), 0 deletions(-) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/JeeUdp/JeeUdp.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/SSDP/SSDP.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/backSoon/backSoon.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/etherNode/etherNode.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/getDHCPandDNS/getDHCPandDNS.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/getStaticIP/getStaticIP.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/getViaDNS/getViaDNS.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/multipacket/multipacket.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/multipacketSD/multipacketSD.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/nanether/nanether.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/noipClient/noipClient.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/pings/pings.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/rbbb_server/rbbb_server.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/stashTest/stashTest.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/testDHCP/testDHCP.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/twitter/twitter.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/udpClientSendOnly/Java_ClientAndServer/UDPClient.java (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/udpClientSendOnly/Java_ClientAndServer/UDPserver.java (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/udpClientSendOnly/udpClientSendOnly.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/udpListener/udpListener.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/webClient/webClient.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{examples => exampless}/xively/xively.ino (100%) diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/JeeUdp/JeeUdp.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/JeeUdp/JeeUdp.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/JeeUdp/JeeUdp.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/JeeUdp/JeeUdp.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/SSDP/SSDP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/SSDP/SSDP.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/SSDP/SSDP.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/SSDP/SSDP.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/backSoon/backSoon.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/backSoon/backSoon.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/backSoon/backSoon.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/backSoon/backSoon.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/etherNode/etherNode.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/etherNode/etherNode.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/etherNode/etherNode.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/etherNode/etherNode.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getDHCPandDNS/getDHCPandDNS.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getDHCPandDNS/getDHCPandDNS.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/getDHCPandDNS/getDHCPandDNS.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getDHCPandDNS/getDHCPandDNS.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getStaticIP/getStaticIP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getStaticIP/getStaticIP.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/getStaticIP/getStaticIP.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getStaticIP/getStaticIP.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getViaDNS/getViaDNS.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getViaDNS/getViaDNS.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/getViaDNS/getViaDNS.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getViaDNS/getViaDNS.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacket/multipacket.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/multipacket/multipacket.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacket/multipacket.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/multipacket/multipacket.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacketSD/multipacketSD.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/multipacketSD/multipacketSD.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacketSD/multipacketSD.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/multipacketSD/multipacketSD.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/nanether/nanether.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/nanether/nanether.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/nanether/nanether.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/nanether/nanether.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/noipClient/noipClient.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/noipClient/noipClient.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/noipClient/noipClient.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/noipClient/noipClient.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/pings/pings.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/pings/pings.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/pings/pings.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/pings/pings.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/rbbb_server/rbbb_server.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/rbbb_server/rbbb_server.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/rbbb_server/rbbb_server.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/rbbb_server/rbbb_server.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/stashTest/stashTest.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/stashTest/stashTest.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/stashTest/stashTest.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/stashTest/stashTest.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/testDHCP/testDHCP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/testDHCP/testDHCP.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/testDHCP/testDHCP.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/testDHCP/testDHCP.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/twitter/twitter.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/twitter/twitter.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/twitter/twitter.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/twitter/twitter.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPClient.java b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/Java_ClientAndServer/UDPClient.java similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPClient.java rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/Java_ClientAndServer/UDPClient.java diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPserver.java b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/Java_ClientAndServer/UDPserver.java similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPserver.java rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/Java_ClientAndServer/UDPserver.java diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/udpClientSendOnly.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/udpClientSendOnly.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/udpClientSendOnly.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/udpClientSendOnly.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpListener/udpListener.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpListener/udpListener.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpListener/udpListener.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpListener/udpListener.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/webClient/webClient.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/webClient/webClient.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/webClient/webClient.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/webClient/webClient.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/examples/xively/xively.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/xively/xively.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/examples/xively/xively.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/exampless/xively/xively.ino From ce860eab9e5ccd2b57302061d9ea7a7f1fca91c1 Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:33:15 +0300 Subject: [PATCH 12/96] ENC28J60 Ethernet library for STM32. --- .../{exampless => examples}/JeeUdp/JeeUdp.ino | 0 .../Serasidis_EtherCard_STM/{exampless => examples}/SSDP/SSDP.ino | 0 .../{exampless => examples}/backSoon/backSoon.ino | 0 .../{exampless => examples}/etherNode/etherNode.ino | 0 .../{exampless => examples}/getDHCPandDNS/getDHCPandDNS.ino | 0 .../{exampless => examples}/getStaticIP/getStaticIP.ino | 0 .../{exampless => examples}/getViaDNS/getViaDNS.ino | 0 .../{exampless => examples}/multipacket/multipacket.ino | 0 .../{exampless => examples}/multipacketSD/multipacketSD.ino | 0 .../{exampless => examples}/nanether/nanether.ino | 0 .../{exampless => examples}/noipClient/noipClient.ino | 0 .../{exampless => examples}/pings/pings.ino | 0 .../{exampless => examples}/rbbb_server/rbbb_server.ino | 0 .../{exampless => examples}/stashTest/stashTest.ino | 0 .../{exampless => examples}/testDHCP/testDHCP.ino | 0 .../{exampless => examples}/twitter/twitter.ino | 0 .../udpClientSendOnly/Java_ClientAndServer/UDPClient.java | 0 .../udpClientSendOnly/Java_ClientAndServer/UDPserver.java | 0 .../udpClientSendOnly/udpClientSendOnly.ino | 0 .../{exampless => examples}/udpListener/udpListener.ino | 0 .../{exampless => examples}/webClient/webClient.ino | 0 .../{exampless => examples}/xively/xively.ino | 0 22 files changed, 0 insertions(+), 0 deletions(-) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/JeeUdp/JeeUdp.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/SSDP/SSDP.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/backSoon/backSoon.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/etherNode/etherNode.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/getDHCPandDNS/getDHCPandDNS.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/getStaticIP/getStaticIP.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/getViaDNS/getViaDNS.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/multipacket/multipacket.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/multipacketSD/multipacketSD.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/nanether/nanether.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/noipClient/noipClient.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/pings/pings.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/rbbb_server/rbbb_server.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/stashTest/stashTest.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/testDHCP/testDHCP.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/twitter/twitter.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/udpClientSendOnly/Java_ClientAndServer/UDPClient.java (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/udpClientSendOnly/Java_ClientAndServer/UDPserver.java (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/udpClientSendOnly/udpClientSendOnly.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/udpListener/udpListener.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/webClient/webClient.ino (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{exampless => examples}/xively/xively.ino (100%) diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/JeeUdp/JeeUdp.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/JeeUdp/JeeUdp.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/JeeUdp/JeeUdp.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/JeeUdp/JeeUdp.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/SSDP/SSDP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/SSDP/SSDP.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/SSDP/SSDP.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/SSDP/SSDP.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/backSoon/backSoon.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/backSoon/backSoon.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/backSoon/backSoon.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/backSoon/backSoon.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/etherNode/etherNode.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/etherNode/etherNode.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/etherNode/etherNode.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/etherNode/etherNode.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getDHCPandDNS/getDHCPandDNS.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getDHCPandDNS/getDHCPandDNS.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getDHCPandDNS/getDHCPandDNS.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/getDHCPandDNS/getDHCPandDNS.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getStaticIP/getStaticIP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getStaticIP/getStaticIP.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getStaticIP/getStaticIP.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/getStaticIP/getStaticIP.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getViaDNS/getViaDNS.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/getViaDNS/getViaDNS.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/getViaDNS/getViaDNS.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/getViaDNS/getViaDNS.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/multipacket/multipacket.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacket/multipacket.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/multipacket/multipacket.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacket/multipacket.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/multipacketSD/multipacketSD.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacketSD/multipacketSD.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/multipacketSD/multipacketSD.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/multipacketSD/multipacketSD.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/nanether/nanether.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/nanether/nanether.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/nanether/nanether.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/nanether/nanether.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/noipClient/noipClient.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/noipClient/noipClient.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/noipClient/noipClient.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/noipClient/noipClient.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/pings/pings.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/pings/pings.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/pings/pings.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/pings/pings.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/rbbb_server/rbbb_server.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/rbbb_server/rbbb_server.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/rbbb_server/rbbb_server.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/rbbb_server/rbbb_server.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/stashTest/stashTest.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/stashTest/stashTest.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/stashTest/stashTest.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/stashTest/stashTest.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/testDHCP/testDHCP.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/testDHCP/testDHCP.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/testDHCP/testDHCP.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/testDHCP/testDHCP.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/twitter/twitter.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/twitter/twitter.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/twitter/twitter.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/twitter/twitter.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/Java_ClientAndServer/UDPClient.java b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPClient.java similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/Java_ClientAndServer/UDPClient.java rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPClient.java diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/Java_ClientAndServer/UDPserver.java b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPserver.java similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/Java_ClientAndServer/UDPserver.java rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/Java_ClientAndServer/UDPserver.java diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/udpClientSendOnly.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/udpClientSendOnly.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpClientSendOnly/udpClientSendOnly.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpClientSendOnly/udpClientSendOnly.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpListener/udpListener.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpListener/udpListener.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/udpListener/udpListener.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/udpListener/udpListener.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/webClient/webClient.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/webClient/webClient.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/webClient/webClient.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/webClient/webClient.ino diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/exampless/xively/xively.ino b/STM32F1/libraries/Serasidis_EtherCard_STM/examples/xively/xively.ino similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/exampless/xively/xively.ino rename to STM32F1/libraries/Serasidis_EtherCard_STM/examples/xively/xively.ino From a61bd57817730a8f2fe556b0c1394f7f4504f340 Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:34:55 +0300 Subject: [PATCH 13/96] ENC28J60 Ethernet library for STM32. The ReadMe file --- STM32F1/libraries/Serasidis_EtherCard_STM/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/README.md b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md index 2dd61e4..a8b2e53 100644 --- a/STM32F1/libraries/Serasidis_EtherCard_STM/README.md +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md @@ -17,7 +17,7 @@ See the comments in the example sketches for details about how to try them out. ## Physical Installation -### PIN Connections (Using Arduino UNO): +### PIN Connections ( Using Arduino UNO ): VCC - 3.3V GND - GND From 901138750553d5345ac084e92ca637939deb8315 Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:41:18 +0300 Subject: [PATCH 14/96] ENC28J60 Ethernet library for STM32. --- .../Serasidis_EtherCard_STM/README.md | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/README.md b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md index a8b2e53..aa366ee 100644 --- a/STM32F1/libraries/Serasidis_EtherCard_STM/README.md +++ b/STM32F1/libraries/Serasidis_EtherCard_STM/README.md @@ -1,46 +1,45 @@ # EtherCard -**EtherCard** is a driver for the ENC28J60 chip, compatible with Arduino IDE. +**EtherCard** is a driver for the ENC28J60 chip, compatible with Arduino IDE 1.6.3 (or later). Adapted and extended from code written by Guido Socher and Pascal Stang. License: GPL2 The documentation for this library is at http://jeelabs.net/pub/docs/ethercard/. -## Library Installation - -1. Download the ZIP file from https://github.com/jcw/ethercard/archive/master.zip -2. From the Arduino IDE: Sketch -> Import Library... -> Add Library... -3. Restart the Arduino IDE to see the new "EtherCard" library with examples - -See the comments in the example sketches for details about how to try them out. - ## Physical Installation -### PIN Connections ( Using Arduino UNO ): +### PIN Connections (Using STM32F103): - VCC - 3.3V - GND - GND - SCK - Pin 13 - SO - Pin 12 - SI - Pin 11 - CS - Pin 8 # Selectable with the ether.begin() function +|ENC28J60|STM32F103| +|:------:|:-----:| +|Vcc|3.3V| +|SCK|PA5| +|SO|PA6| +|SI|PA7| +|CS|PA8| # Selectable with the ether.begin() function +|RST|3.3V| -### PIN Connections using an Arduino Mega +The **CS** pin is selectable with the ether.begin() function. - VCC - 3.3V - GND - GND - SCK - Pin 52 - SO - Pin 50 - SI - Pin 51 - CS - Pin 53 # Selectable with the ether.begin() function - # The default CS pin defaults to 8, so you have to set it on a mega: - ether.begin(sizeof Ethernet::buffer, mymac, 53) +e.g. If you want to use the **PA9** as **CS** pin then you can initiallize the ethernet module inside the sketch as: + +`if (ether.begin(sizeof Ethernet::buffer, mymac) == 0,`**`PA9`**`) ` + +By default the pin **PA8** is used as **CS** (you don't have to initiallize it). + + +## Credits + +The **EtherCard** library was written by [Jean-Claude Wippler][F] and ported to **STM32F103** by [Vassilis Serasidis][V] ## Support -For questions and help, see the [forums][F] (at JeeLabs.net). -The issue tracker has been moved back to [Github][I] again. +That library works perfect on Arduino IDE 1.6.3 (or later) with [Arduino_STM32 project][S] installed. -[F]: http://jeenet.net/projects/cafe/boards -[I]: https://github.com/jcw/ethercard/issues +The Arduino STM32 project has a forum ([STM32duino][F]) also for getting or for providing help to people that are interested in that project . + +[F]: https://github.com/jcw +[S]: https://github.com/rogerclarkmelbourne/Arduino_STM32 +[F]: http://www.stm32duino.com +[V]: https://github.com/Serasidis From eee152cecadf9c12372f4138b3cbad6305e6fdd2 Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:47:02 +0300 Subject: [PATCH 15/96] ENC28J60 Ethernet library for STM32. 12 --- .../libraries/Serasidis_EtherCard_STM/{src => srcc}/Doxymods.css | 0 .../Serasidis_EtherCard_STM/{src => srcc}/EtherCard_STM.cpp | 0 .../Serasidis_EtherCard_STM/{src => srcc}/EtherCard_STM.h | 0 STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/dhcp.cpp | 0 STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/dns.cpp | 0 .../libraries/Serasidis_EtherCard_STM/{src => srcc}/enc28j60.cpp | 0 .../libraries/Serasidis_EtherCard_STM/{src => srcc}/enc28j60.h | 0 STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/net.h | 0 STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/tcpip.cpp | 0 .../libraries/Serasidis_EtherCard_STM/{src => srcc}/udpserver.cpp | 0 .../libraries/Serasidis_EtherCard_STM/{src => srcc}/webutil.cpp | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/Doxymods.css (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/EtherCard_STM.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/EtherCard_STM.h (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/dhcp.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/dns.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/enc28j60.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/enc28j60.h (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/net.h (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/tcpip.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/udpserver.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{src => srcc}/webutil.cpp (100%) diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/Doxymods.css b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/Doxymods.css similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/Doxymods.css rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/Doxymods.css diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/EtherCard_STM.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/EtherCard_STM.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.h b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/EtherCard_STM.h similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.h rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/EtherCard_STM.h diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/dhcp.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/dhcp.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/dhcp.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/dhcp.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/dns.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/dns.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/dns.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/dns.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/enc28j60.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/enc28j60.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.h b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/enc28j60.h similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.h rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/enc28j60.h diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/net.h b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/net.h similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/net.h rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/net.h diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/tcpip.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/tcpip.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/tcpip.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/tcpip.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/udpserver.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/udpserver.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/udpserver.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/udpserver.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/src/webutil.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/webutil.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/src/webutil.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/srcc/webutil.cpp From ed14ded3cc30b6269224cd645356292512146d39 Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 28 May 2015 16:48:02 +0300 Subject: [PATCH 16/96] ENC28J60 Ethernet library for STM32. Example sketches that use the EtherCard library. --- .../libraries/Serasidis_EtherCard_STM/{srcc => src}/Doxymods.css | 0 .../Serasidis_EtherCard_STM/{srcc => src}/EtherCard_STM.cpp | 0 .../Serasidis_EtherCard_STM/{srcc => src}/EtherCard_STM.h | 0 STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/dhcp.cpp | 0 STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/dns.cpp | 0 .../libraries/Serasidis_EtherCard_STM/{srcc => src}/enc28j60.cpp | 0 .../libraries/Serasidis_EtherCard_STM/{srcc => src}/enc28j60.h | 0 STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/net.h | 0 STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/tcpip.cpp | 0 .../libraries/Serasidis_EtherCard_STM/{srcc => src}/udpserver.cpp | 0 .../libraries/Serasidis_EtherCard_STM/{srcc => src}/webutil.cpp | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/Doxymods.css (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/EtherCard_STM.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/EtherCard_STM.h (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/dhcp.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/dns.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/enc28j60.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/enc28j60.h (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/net.h (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/tcpip.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/udpserver.cpp (100%) rename STM32F1/libraries/Serasidis_EtherCard_STM/{srcc => src}/webutil.cpp (100%) diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/Doxymods.css b/STM32F1/libraries/Serasidis_EtherCard_STM/src/Doxymods.css similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/Doxymods.css rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/Doxymods.css diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/EtherCard_STM.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/EtherCard_STM.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/EtherCard_STM.h b/STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.h similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/EtherCard_STM.h rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/EtherCard_STM.h diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/dhcp.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/dhcp.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/dhcp.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/dhcp.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/dns.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/dns.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/dns.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/dns.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/enc28j60.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/enc28j60.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/enc28j60.h b/STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.h similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/enc28j60.h rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/enc28j60.h diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/net.h b/STM32F1/libraries/Serasidis_EtherCard_STM/src/net.h similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/net.h rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/net.h diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/tcpip.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/tcpip.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/tcpip.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/tcpip.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/udpserver.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/udpserver.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/udpserver.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/udpserver.cpp diff --git a/STM32F1/libraries/Serasidis_EtherCard_STM/srcc/webutil.cpp b/STM32F1/libraries/Serasidis_EtherCard_STM/src/webutil.cpp similarity index 100% rename from STM32F1/libraries/Serasidis_EtherCard_STM/srcc/webutil.cpp rename to STM32F1/libraries/Serasidis_EtherCard_STM/src/webutil.cpp From 44bfd8ae54ca019115d61ec40b8e70094ebae713 Mon Sep 17 00:00:00 2001 From: Martin Ayotte Date: Thu, 28 May 2015 17:20:49 -0400 Subject: [PATCH 17/96] fix SetupClock168() for Netduino2Plus + add STM32Stamp/Netduino2Plus boards + add dfuse_addr in upload --- STM32F4/boards.txt | 60 ++++++++++++++++++++++++++++ STM32F4/cores/maple/libmaple/rccF2.c | 4 ++ STM32F4/platform.txt | 3 +- tools/linux/maple_upload | 9 ++++- 4 files changed, 73 insertions(+), 3 deletions(-) diff --git a/STM32F4/boards.txt b/STM32F4/boards.txt index 689aff7..4c83f80 100644 --- a/STM32F4/boards.txt +++ b/STM32F4/boards.txt @@ -30,4 +30,64 @@ discovery_f407.build.error_led_pin=14 #discovery_f407.build.gcc_ver=gcc-arm-none-eabi-4.8.3-2014q1 ############################################################## +stm32f4stamp.name=STM32F4Stamp F405 + +stm32f4stamp.upload.tool=maple_upload +stm32f4stamp.upload.protocol=maple_dfu + +#stm32f4stamp.upload.use_1200bps_touch=false +stm32f4stamp.upload.file_type=bin +stm32f4stamp.upload.ram.maximum_size=196608 +stm32f4stamp.upload.flash.maximum_size=1048576 +stm32f4stamp.upload.maximum_size=1048576 + +stm32f4stamp.upload.usbID=0483:df11 +stm32f4stamp.upload.altID=0 +#stm32f4stamp.upload.auto_reset=true +stm32f4stamp.upload.dfuse_addr=0x8000000 + +stm32f4stamp.build.mcu=cortex-m4 +stm32f4stamp.build.f_cpu=168000000L +stm32f4stamp.build.core=maple +stm32f4stamp.build.extra_flags=-DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -march=armv7-m -DSTM32F2 -DBOARD_discovery_f4 +stm32f4stamp.build.ldscript=ld/jtag.ld +stm32f4stamp.build.variant=discovery_f407 +stm32f4stamp.build.variant_system_lib=lib_f407.a +stm32f4stamp.build.vect=VECT_TAB_BASE +stm32f4stamp.build.density=STM32_HIGH_DENSITY +stm32f4stamp.build.error_led_port=GPIOD +stm32f4stamp.build.error_led_pin=14 +#stm32f4stamp.build.gcc_ver=gcc-arm-none-eabi-4.8.3-2014q1 + +############################################################## +netduino2plus.name=Netduino2 F405 + +netduino2plus.upload.tool=maple_upload +netduino2plus.upload.protocol=maple_dfu + +#netduino2plus.upload.use_1200bps_touch=false +netduino2plus.upload.file_type=bin +netduino2plus.upload.ram.maximum_size=196608 +netduino2plus.upload.flash.maximum_size=1048576 +netduino2plus.upload.maximum_size=1048576 + +netduino2plus.upload.usbID=0483:df11 +netduino2plus.upload.altID=0 +#netduino2plus.upload.auto_reset=true +netduino2plus.upload.dfuse_addr=0x8000000 + +netduino2plus.build.mcu=cortex-m4 +netduino2plus.build.f_cpu=168000000L +netduino2plus.build.core=maple +netduino2plus.build.extra_flags=-DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -march=armv7-m -DSTM32F2 -DBOARD_discovery_f4 +netduino2plus.build.ldscript=ld/jtag.ld +netduino2plus.build.variant=discovery_f407 +netduino2plus.build.variant_system_lib=lib_f407.a +netduino2plus.build.vect=VECT_TAB_BASE +netduino2plus.build.density=STM32_HIGH_DENSITY +netduino2plus.build.error_led_port=GPIOD +netduino2plus.build.error_led_pin=14 +#netduino2plus.build.gcc_ver=gcc-arm-none-eabi-4.8.3-2014q1 + +############################################################## diff --git a/STM32F4/cores/maple/libmaple/rccF2.c b/STM32F4/cores/maple/libmaple/rccF2.c index 9ac8bcb..40816c4 100644 --- a/STM32F4/cores/maple/libmaple/rccF2.c +++ b/STM32F4/cores/maple/libmaple/rccF2.c @@ -360,7 +360,11 @@ void SetupClock168MHz() /******************************************************************************/ /************************* PLL Parameters *************************************/ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#ifdef ARDUINO_STM32F4_NETDUINO2PLUS + int PLL_M = 25; // The NETDUINO has a 25MHz external oscillator +#else int PLL_M = 8; +#endif int PLL_N = 336; /* SYSCLK = PLL_VCO / PLL_P */ diff --git a/STM32F4/platform.txt b/STM32F4/platform.txt index 6b264a0..9ac8a78 100644 --- a/STM32F4/platform.txt +++ b/STM32F4/platform.txt @@ -105,10 +105,11 @@ tools.maple_upload.cmd.windows=maple_upload.bat #tools.maple_upload.cmd.linux= tools.maple_upload.path={runtime.hardware.path}/tools/win tools.maple_upload.path.macosx={runtime.hardware.path}/tools/macosx +tools.maple_upload.path.linux={runtime.hardware.path}/tools/linux tools.maple_upload.upload.params.verbose=-d tools.maple_upload.upload.params.quiet= -tools.maple_upload.upload.pattern="{path}/{cmd}" {serial.port.file} {upload.altID} {upload.usbID} "{build.path}/{build.project_name}.bin" +tools.maple_upload.upload.pattern="{path}/{cmd}" {serial.port.file} {upload.altID} {upload.usbID} "{build.path}/{build.project_name}.bin" {upload.dfuse_addr} # Generic STM32 upload via serial to Serial Port 1 (pins PA9 and PA10) - note. Boot0 line needs to high on board reset to enable upload via serial # at the end of the upload the program is automatically run, without the board being reset diff --git a/tools/linux/maple_upload b/tools/linux/maple_upload index e6caa7f..598c981 100755 --- a/tools/linux/maple_upload +++ b/tools/linux/maple_upload @@ -6,7 +6,12 @@ if [ $# -lt 4 ]; then echo "Usage: $0 $# " >&2 exit 1 fi -dummy_port=$1; altID=$2; usbID=$3; binfile=$4 +dummy_port=$1; altID=$2; usbID=$3; binfile=$4; +if [ $# -eq 5 ]; then + dfuse_addr="--dfuse-address $5" +else + dfuse_addr="" +fi #DFU_UTIL=$(dirname $0)/dfu-util/dfu-util DFU_UTIL=/usr/bin/dfu-util @@ -15,4 +20,4 @@ if [ ! -x ${DFU_UTIL} ]; then exit 2 fi -${DFU_UTIL} -d ${usbID} -a ${altID} -D ${binfile} +${DFU_UTIL} -d ${usbID} -a ${altID} -D ${binfile} ${dfuse_addr} From daef5a1781b544c7085a2fc562985e433b10454d Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Fri, 29 May 2015 09:06:23 +1000 Subject: [PATCH 18/96] Fixed issue in boards.txt where board indentifier for Maple mini included a underscore - which seems to cause problems in some version of the IDE (namely 1.6.0) --- STM32F1/boards.txt | 50 +++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/STM32F1/boards.txt b/STM32F1/boards.txt index 8a3682e..77cd480 100644 --- a/STM32F1/boards.txt +++ b/STM32F1/boards.txt @@ -6,35 +6,35 @@ menu.bootloader_version=Bootloader version menu.upload_method=Upload method ############################################################## -maple_mini.name=LeafLabs Maple Mini Rev 2 to Flash +mapleMini.name=LeafLabs Maple Mini Rev 2 to Flash -maple_mini.build.board=MAPLE_MINI -maple_mini.build.core=maple -maple_mini.build.cpu_flags=-DMCU_STM32F103CB -DSERIAL_USB -maple_mini.build.variant=maple_mini -maple_mini.upload.usbID=1EAF:0003 +mapleMini.build.board=MAPLE_MINI +mapleMini.build.core=maple +mapleMini.build.cpu_flags=-DMCU_STM32F103CB -DSERIAL_USB +mapleMini.build.variant=maple_mini +mapleMini.upload.usbID=1EAF:0003 -maple_mini.upload.tool=maple_upload -maple_mini.upload.protocol=maple_dfu -maple_mini.upload.use_1200bps_touch=false -maple_mini.upload.file_type=bin -maple_mini.upload.auto_reset=true +mapleMini.upload.tool=maple_upload +mapleMini.upload.protocol=maple_dfu +mapleMini.upload.use_1200bps_touch=false +mapleMini.upload.file_type=bin +mapleMini.upload.auto_reset=true -maple_mini.menu.bootloader_version.original = Original (17k RAM,108k Flash) -maple_mini.menu.bootloader_version.original.build.vect=VECT_TAB_ADDR=0x8005000 -maple_mini.menu.bootloader_version.original.build.ldscript=ld/flash.ld -maple_mini.menu.bootloader_version.original.upload.ram.maximum_size=17408 -maple_mini.menu.bootloader_version.original.upload.flash.maximum_size=110592 -maple_mini.menu.bootloader_version.original.upload.maximum_size=110592 -maple_mini.menu.bootloader_version.original.upload.altID=1 +mapleMini.menu.bootloader_version.original = Original (17k RAM,108k Flash) +mapleMini.menu.bootloader_version.original.build.vect=VECT_TAB_ADDR=0x8005000 +mapleMini.menu.bootloader_version.original.build.ldscript=ld/flash.ld +mapleMini.menu.bootloader_version.original.upload.ram.maximum_size=17408 +mapleMini.menu.bootloader_version.original.upload.flash.maximum_size=110592 +mapleMini.menu.bootloader_version.original.upload.maximum_size=110592 +mapleMini.menu.bootloader_version.original.upload.altID=1 -maple_mini.menu.bootloader_version.bootloader20 = Bootloader 2.0 (20k RAM,120k Flash) -maple_mini.menu.bootloader_version.bootloader20.build.vect=VECT_TAB_ADDR=0x8002000 -maple_mini.menu.bootloader_version.bootloader20.build.ldscript=ld/bootloader_20.ld -maple_mini.menu.bootloader_version.bootloader20.upload.ram.maximum_size=20480 -maple_mini.menu.bootloader_version.bootloader20.upload.flash.maximum_size=122880 -maple_mini.menu.bootloader_version.bootloader20.upload.maximum_size=122880 -maple_mini.menu.bootloader_version.bootloader20.upload.altID=2 +mapleMini.menu.bootloader_version.bootloader20 = Bootloader 2.0 (20k RAM,120k Flash) +mapleMini.menu.bootloader_version.bootloader20.build.vect=VECT_TAB_ADDR=0x8002000 +mapleMini.menu.bootloader_version.bootloader20.build.ldscript=ld/bootloader_20.ld +mapleMini.menu.bootloader_version.bootloader20.upload.ram.maximum_size=20480 +mapleMini.menu.bootloader_version.bootloader20.upload.flash.maximum_size=122880 +mapleMini.menu.bootloader_version.bootloader20.upload.maximum_size=122880 +mapleMini.menu.bootloader_version.bootloader20.upload.altID=2 ############################################################## maple.name=LeafLabs Maple Rev 3+ to Flash From 58df3f36b467026536a50fc7f35e4c42e078639e Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Sun, 31 May 2015 16:09:26 +1000 Subject: [PATCH 19/96] Changed all remaining boards to have HW serial definitions in board.cpp so that every board can configure which Arduino Serial instance maps to which hardware serial device --- STM32F1/variants/generic_stm32f103r/board.cpp | 21 +++++++++++++++++ STM32F1/variants/generic_stm32f103v/board.cpp | 19 +++++++++++++++ .../variants/generic_stm32f103v/board/board.h | 10 ++++---- STM32F1/variants/generic_stm32f103z/board.cpp | 19 +++++++++++++++ STM32F1/variants/maple/board.cpp | 20 ++++++++++++++++ STM32F1/variants/maple_mini/board.cpp | 23 +++++++++++++++++++ STM32F1/variants/maple_ret6/board.cpp | 21 +++++++++++++++++ STM32F1/variants/microduino/board.cpp | 20 ++++++++++++++++ STM32F1/variants/nucleo_f103rb/board.cpp | 16 +++++-------- 9 files changed, 155 insertions(+), 14 deletions(-) diff --git a/STM32F1/variants/generic_stm32f103r/board.cpp b/STM32F1/variants/generic_stm32f103r/board.cpp index 9825d9c..d04bb4a 100644 --- a/STM32F1/variants/generic_stm32f103r/board.cpp +++ b/STM32F1/variants/generic_stm32f103r/board.cpp @@ -32,6 +32,11 @@ #include // For this board's header file + +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + #include // For stm32_pin_info and its contents // (these go into PIN_MAP). @@ -148,3 +153,19 @@ extern const uint8 boardUsedPins[BOARD_NR_USED_PINS] __FLASH__ = { BOARD_JTMS_SWDIO_PIN, BOARD_JTCK_SWCLK_PIN, BOARD_JTDI_PIN, BOARD_JTDO_PIN, BOARD_NJTRST_PIN }; + + +#ifdef SERIAL_USB + DEFINE_HWSERIAL(Serial1, 1); + DEFINE_HWSERIAL(Serial2, 2); + DEFINE_HWSERIAL(Serial3, 3); + DEFINE_HWSERIAL_UART(Serial4, 4); + DEFINE_HWSERIAL_UART(Serial5, 5); +#else + DEFINE_HWSERIAL(Serial, 1); + DEFINE_HWSERIAL(Serial1, 2); + DEFINE_HWSERIAL(Serial2, 3); + DEFINE_HWSERIAL_UART(Serial3, 4); + DEFINE_HWSERIAL_UART(Serial4, 5); +#endif + diff --git a/STM32F1/variants/generic_stm32f103v/board.cpp b/STM32F1/variants/generic_stm32f103v/board.cpp index 079108d..1b9b1c0 100644 --- a/STM32F1/variants/generic_stm32f103v/board.cpp +++ b/STM32F1/variants/generic_stm32f103v/board.cpp @@ -32,6 +32,10 @@ #include // For this board's header file +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + #include // For stm32_pin_info and its contents // (these go into PIN_MAP). @@ -178,3 +182,18 @@ extern const uint8 boardUsedPins[BOARD_NR_USED_PINS] __FLASH__ = { BOARD_LED_PIN, BOARD_BUTTON_PIN, BOARD_JTMS_SWDIO_PIN, BOARD_JTCK_SWCLK_PIN, BOARD_JTDI_PIN, BOARD_JTDO_PIN, BOARD_NJTRST_PIN }; + + +#ifdef SERIAL_USB + DEFINE_HWSERIAL(Serial1, 1); + DEFINE_HWSERIAL(Serial2, 2); + DEFINE_HWSERIAL(Serial3, 3); + DEFINE_HWSERIAL_UART(Serial4, 4); + DEFINE_HWSERIAL_UART(Serial5, 5); +#else + DEFINE_HWSERIAL(Serial, 1); + DEFINE_HWSERIAL(Serial1, 2); + DEFINE_HWSERIAL(Serial2, 3); + DEFINE_HWSERIAL_UART(Serial3, 4); + DEFINE_HWSERIAL_UART(Serial4, 5); +#endif \ No newline at end of file diff --git a/STM32F1/variants/generic_stm32f103v/board/board.h b/STM32F1/variants/generic_stm32f103v/board/board.h index 4834b8b..319688d 100644 --- a/STM32F1/variants/generic_stm32f103v/board/board.h +++ b/STM32F1/variants/generic_stm32f103v/board/board.h @@ -46,20 +46,22 @@ #define BOARD_LED_PIN PE5 #define BOARD_LED_PIN2 PE6 -/* Note: UART4 and UART5 have pins which aren't broken out :( */ -#define BOARD_NR_USARTS 3 +// USARTS +#define BOARD_NR_USARTS 5 #define BOARD_USART1_TX_PIN PA9 #define BOARD_USART1_RX_PIN PA10 + #define BOARD_USART2_TX_PIN PA2 #define BOARD_USART2_RX_PIN PA3 + #define BOARD_USART3_TX_PIN PB10 #define BOARD_USART3_RX_PIN PB11 -/* + #define BOARD_USART4_TX_PIN PC10 #define BOARD_USART4_RX_PIN PC11 + #define BOARD_USART5_TX_PIN PC12 #define BOARD_USART5_RX_PIN PD2 -*/ diff --git a/STM32F1/variants/generic_stm32f103z/board.cpp b/STM32F1/variants/generic_stm32f103z/board.cpp index d575fcb..cb04ae9 100644 --- a/STM32F1/variants/generic_stm32f103z/board.cpp +++ b/STM32F1/variants/generic_stm32f103z/board.cpp @@ -32,6 +32,10 @@ #include // For this board's header file +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + #include // For stm32_pin_info and its contents // (these go into PIN_MAP). @@ -213,3 +217,18 @@ extern const uint8 boardUsedPins[BOARD_NR_USED_PINS] __FLASH__ = { BOARD_JTMS_SWDIO_PIN, BOARD_JTCK_SWCLK_PIN, BOARD_JTDI_PIN, BOARD_JTDO_PIN, BOARD_NJTRST_PIN }; + + +#ifdef SERIAL_USB + DEFINE_HWSERIAL(Serial1, 1); + DEFINE_HWSERIAL(Serial2, 2); + DEFINE_HWSERIAL(Serial3, 3); + DEFINE_HWSERIAL_UART(Serial4, 4); + DEFINE_HWSERIAL_UART(Serial5, 5); +#else + DEFINE_HWSERIAL(Serial, 1); + DEFINE_HWSERIAL(Serial1, 2); + DEFINE_HWSERIAL(Serial2, 3); + DEFINE_HWSERIAL_UART(Serial3, 4); + DEFINE_HWSERIAL_UART(Serial4, 5); +#endif \ No newline at end of file diff --git a/STM32F1/variants/maple/board.cpp b/STM32F1/variants/maple/board.cpp index e66da96..e1f66c4 100644 --- a/STM32F1/variants/maple/board.cpp +++ b/STM32F1/variants/maple/board.cpp @@ -32,6 +32,10 @@ #include // For this board's header file +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + #include // For stm32_pin_info and its contents // (these go into PIN_MAP). @@ -141,3 +145,19 @@ extern const uint8 boardUsedPins[] __FLASH__ = { 13, 33, BOARD_JTMS_SWDIO_PIN, BOARD_JTCK_SWCLK_PIN, BOARD_JTDI_PIN, BOARD_JTDO_PIN, BOARD_NJTRST_PIN }; + +/* + * Roger Clark + * + * 2015/05/28 + * + * Moved definitions for Hardware Serial devices from HardwareSerial.cpp so that each board can define which Arduino "Serial" instance + * Maps to which hardware serial port on the microprocessor + * + * Note. Maple always has SERIAL USB, so there is no need for the #fidef for this + * As its a Medium Density device (F103RB), it only has 3 hardware serial devices. + */ + +DEFINE_HWSERIAL(Serial1, 1); +DEFINE_HWSERIAL(Serial2, 2); +DEFINE_HWSERIAL(Serial3, 3); diff --git a/STM32F1/variants/maple_mini/board.cpp b/STM32F1/variants/maple_mini/board.cpp index 358f89c..0641d77 100644 --- a/STM32F1/variants/maple_mini/board.cpp +++ b/STM32F1/variants/maple_mini/board.cpp @@ -35,6 +35,10 @@ #include #include +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + #include #include @@ -103,3 +107,22 @@ extern const uint8 boardADCPins[BOARD_NR_ADC_PINS] __FLASH__ = { extern const uint8 boardUsedPins[BOARD_NR_USED_PINS] __FLASH__ = { 32, 32, USB_DP, USB_DM }; + + +/* + * Roger Clark + * + * 2015/05/28 + * + * Moved definitions for Hardware Serial devices from HardwareSerial.cpp so that each board can define which Arduino "Serial" instance + * Maps to which hardware serial port on the microprocessor + * + * Note. Maple mini always has SERIAL USB, so there is no need for the #fidef for this + * As its a Medium Density device, it only has 3 hardware serial devices. + */ + +DEFINE_HWSERIAL(Serial1, 1); +DEFINE_HWSERIAL(Serial2, 2); +DEFINE_HWSERIAL(Serial3, 3); + + \ No newline at end of file diff --git a/STM32F1/variants/maple_ret6/board.cpp b/STM32F1/variants/maple_ret6/board.cpp index b29c95c..c210673 100644 --- a/STM32F1/variants/maple_ret6/board.cpp +++ b/STM32F1/variants/maple_ret6/board.cpp @@ -32,6 +32,10 @@ #include // For this board's header file +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + #include // For stm32_pin_info and its contents // (these go into PIN_MAP). @@ -155,3 +159,20 @@ extern const uint8 boardUsedPins[BOARD_NR_USED_PINS] __FLASH__ = { BOARD_JTMS_SWDIO_PIN, BOARD_JTCK_SWCLK_PIN, BOARD_JTDI_PIN, BOARD_JTDO_PIN, BOARD_NJTRST_PIN }; + +/* + * Roger Clark + * + * 2015/05/28 + * + * Moved definitions for Hardware Serial devices from HardwareSerial.cpp so that each board can define which Arduino "Serial" instance + * Maps to which hardware serial port on the microprocessor + * + * Note. Maple Ret always has SERIAL USB, so there is no need for the #fidef for this + * As its a High Density device (F103RE), it has 6 hardware serial devices. + */ +DEFINE_HWSERIAL(Serial1, 1); +DEFINE_HWSERIAL(Serial2, 2); +DEFINE_HWSERIAL(Serial3, 3); +DEFINE_HWSERIAL_UART(Serial4, 4); +DEFINE_HWSERIAL_UART(Serial5, 5); \ No newline at end of file diff --git a/STM32F1/variants/microduino/board.cpp b/STM32F1/variants/microduino/board.cpp index d9434ae..6375197 100644 --- a/STM32F1/variants/microduino/board.cpp +++ b/STM32F1/variants/microduino/board.cpp @@ -33,6 +33,10 @@ #include +/* Roger Clark. Added next to includes for changes to Serial */ +#include +#include + #include #include @@ -95,3 +99,19 @@ extern const uint8 boardADCPins[BOARD_NR_ADC_PINS] __FLASH__ = { extern const uint8 boardUsedPins[BOARD_NR_USED_PINS] __FLASH__ = { 4, 24, USB_DP, USB_DM }; + + +/* + * Roger Clark + * + * 2015/05/28 + * + * Moved definitions for Hardware Serial devices from HardwareSerial.cpp so that each board can define which Arduino "Serial" instance + * Maps to which hardware serial port on the microprocessor + * + * Note. I think a microduino is a Maple mini clone in another form factor, + */ + +DEFINE_HWSERIAL(Serial1, 1); +DEFINE_HWSERIAL(Serial2, 2); +DEFINE_HWSERIAL(Serial3, 3); diff --git a/STM32F1/variants/nucleo_f103rb/board.cpp b/STM32F1/variants/nucleo_f103rb/board.cpp index 0d63eed..8f58386 100644 --- a/STM32F1/variants/nucleo_f103rb/board.cpp +++ b/STM32F1/variants/nucleo_f103rb/board.cpp @@ -249,15 +249,11 @@ MOSI alternate functions on the GPIO ports. */ #ifdef SERIAL_USB - DEFINE_HWSERIAL(Serial1, 2); - - DEFINE_HWSERIAL(Serial2, 1); - - DEFINE_HWSERIAL(Serial3, 3); + DEFINE_HWSERIAL(Serial1, 1); + DEFINE_HWSERIAL(Serial2, 2); + DEFINE_HWSERIAL(Serial3, 3); #else - DEFINE_HWSERIAL(Serial, 2);// Use HW Serial 2 as "Serial" - - DEFINE_HWSERIAL(Serial1, 1); - - DEFINE_HWSERIAL(Serial2, 3); + DEFINE_HWSERIAL(Serial, 3);// Use HW Serial 2 as "Serial" + DEFINE_HWSERIAL(Serial1, 2); + DEFINE_HWSERIAL(Serial2, 1); #endif \ No newline at end of file From 912098d5b84a0c73d7743c815c6c469a134af99b Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Sun, 31 May 2015 18:06:19 +1000 Subject: [PATCH 20/96] Updated with commits that had been applied to Leaflabs:libmaple since the original copy of the repo was taken (by BobC) in Nov 2014 --- STM32F1/cores/maple/usb_serial.cpp | 8 ++++++++ STM32F1/system/libmaple/dma_private.h | 3 ++- STM32F1/system/libmaple/usart_private.h | 17 ++++++++++++----- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/STM32F1/cores/maple/usb_serial.cpp b/STM32F1/cores/maple/usb_serial.cpp index c11fd15..fcc39b1 100644 --- a/STM32F1/cores/maple/usb_serial.cpp +++ b/STM32F1/cores/maple/usb_serial.cpp @@ -72,9 +72,17 @@ void USBSerial::begin(void) { //Roger Clark. Two new begin functions has been added so that normal Arduino Sketches that use Serial.begin(xxx) will compile. void USBSerial::begin(unsigned long ignoreBaud) { +volatile unsigned long removeCompilerWarningsIgnoreBaud=ignoreBaud; + + ignoreBaud=removeCompilerWarningsIgnoreBaud; } void USBSerial::begin(unsigned long ignoreBaud, uint8_t ignore) { +volatile unsigned long removeCompilerWarningsIgnoreBaud=ignoreBaud; +volatile uint8_t removeCompilerWarningsIgnore=ignore; + + ignoreBaud=removeCompilerWarningsIgnoreBaud; + ignore=removeCompilerWarningsIgnore; } void USBSerial::end(void) { diff --git a/STM32F1/system/libmaple/dma_private.h b/STM32F1/system/libmaple/dma_private.h index 82f5fc1..c0ee11f 100644 --- a/STM32F1/system/libmaple/dma_private.h +++ b/STM32F1/system/libmaple/dma_private.h @@ -38,10 +38,11 @@ * in the series support files, which need dma_irq_handler().) */ #ifdef DMA_GET_HANDLER static __always_inline void dma_irq_handler(dma_dev *dev, dma_tube tube) { - dma_clear_isr_bits(dev, tube); /* in case handler doesn't */ + void (*handler)(void) = DMA_GET_HANDLER(dev, tube); if (handler) { handler(); + dma_clear_isr_bits(dev, tube); /* in case handler doesn't */ } } #endif diff --git a/STM32F1/system/libmaple/usart_private.h b/STM32F1/system/libmaple/usart_private.h index 8e8e11b..9bc0527 100644 --- a/STM32F1/system/libmaple/usart_private.h +++ b/STM32F1/system/libmaple/usart_private.h @@ -38,14 +38,21 @@ #include static __always_inline void usart_irq(ring_buffer *rb, usart_reg_map *regs) { + /* We can get RXNE and ORE interrupts here. Only RXNE signifies + * availability of a byte in DR. + * + * See table 198 (sec 27.4, p809) in STM document RM0008 rev 15. + * We enable RXNEIE. */ + if (regs->SR & USART_SR_RXNE) { #ifdef USART_SAFE_INSERT - /* If the buffer is full and the user defines USART_SAFE_INSERT, - * ignore new bytes. */ - rb_safe_insert(rb, (uint8)regs->DR); + /* If the buffer is full and the user defines USART_SAFE_INSERT, + * ignore new bytes. */ + rb_safe_insert(rb, (uint8)regs->DR); #else - /* By default, push bytes around in the ring buffer. */ - rb_push_insert(rb, (uint8)regs->DR); + /* By default, push bytes around in the ring buffer. */ + rb_push_insert(rb, (uint8)regs->DR); #endif + } } uint32 _usart_clock_freq(usart_dev *dev); From 164c8065c8d65b398eebef1e3110cb97a362226b Mon Sep 17 00:00:00 2001 From: victorpv Date: Sun, 31 May 2015 09:10:31 -0500 Subject: [PATCH 21/96] Weakrefs used instead of weaks in isrs.S --- .../maple/libmaple/stm32f1/performance/isrs.S | 222 ++++++------------ 1 file changed, 74 insertions(+), 148 deletions(-) diff --git a/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S b/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S index c638078..4833d9c 100644 --- a/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S +++ b/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S @@ -37,227 +37,153 @@ __default_handler: b . - .weak __exc_nmi + .weakref __exc_nmi, __default_handler .globl __exc_nmi - .set __exc_nmi, __default_handler - .weak __exc_hardfault + .weakref __exc_hardfault, __default_handler .globl __exc_hardfault - .set __exc_hardfault, __default_handler - .weak __exc_memmanage + .weakref __exc_memmanage, __default_handler .globl __exc_memmanage - .set __exc_memmanage, __default_handler - .weak __exc_busfault + .weakref __exc_busfault, __default_handler .globl __exc_busfault - .set __exc_busfault, __default_handler - .weak __exc_usagefault + .weakref __exc_usagefault, __default_handler .globl __exc_usagefault - .set __exc_usagefault, __default_handler - .weak __stm32reservedexception7 + .weakref __stm32reservedexception7, __default_handler .globl __stm32reservedexception7 - .set __stm32reservedexception7, __default_handler - .weak __stm32reservedexception8 + .weakref __stm32reservedexception8, __default_handler .globl __stm32reservedexception8 - .set __stm32reservedexception8, __default_handler - .weak __stm32reservedexception9 + .weakref __stm32reservedexception9, __default_handler .globl __stm32reservedexception9 - .set __stm32reservedexception9, __default_handler - .weak __stm32reservedexception10 + .weakref __stm32reservedexception10, __default_handler .globl __stm32reservedexception10 - .set __stm32reservedexception10, __default_handler - .weak __exc_svc + .weakref __exc_svc, __default_handler .globl __exc_svc - .set __exc_svc, __default_handler - .weak __exc_debug_monitor + .weakref __exc_debug_monitor, __default_handler .globl __exc_debug_monitor - .set __exc_debug_monitor, __default_handler - .weak __stm32reservedexception13 + .weakref __stm32reservedexception13, __default_handler .globl __stm32reservedexception13 - .set __stm32reservedexception13, __default_handler - .weak __exc_pendsv + .weakref __exc_pendsv, __default_handler .globl __exc_pendsv - .set __exc_pendsv, __default_handler - .weak __exc_systick + .weakref __exc_systick, __default_handler .globl __exc_systick - .set __exc_systick, __default_handler - .weak __irq_wwdg + .weakref __irq_wwdg, __default_handler .globl __irq_wwdg - .set __irq_wwdg, __default_handler - .weak __irq_pvd + .weakref __irq_pvd, __default_handler .globl __irq_pvd - .set __irq_pvd, __default_handler - .weak __irq_tamper + .weakref __irq_tamper, __default_handler .globl __irq_tamper - .set __irq_tamper, __default_handler - .weak __irq_rtc + .weakref __irq_rtc, __default_handler .globl __irq_rtc - .set __irq_rtc, __default_handler - .weak __irq_flash + .weakref __irq_flash, __default_handler .globl __irq_flash - .set __irq_flash, __default_handler - .weak __irq_rcc + .weakref __irq_rcc, __default_handler .globl __irq_rcc - .set __irq_rcc, __default_handler - .weak __irq_exti0 + .weakref __irq_exti0, __default_handler .globl __irq_exti0 - .set __irq_exti0, __default_handler - .weak __irq_exti1 + .weakref __irq_exti1, __default_handler .globl __irq_exti1 - .set __irq_exti1, __default_handler - .weak __irq_exti2 + .weakref __irq_exti2, __default_handler .globl __irq_exti2 - .set __irq_exti2, __default_handler - .weak __irq_exti3 + .weakref __irq_exti3, __default_handler .globl __irq_exti3 - .set __irq_exti3, __default_handler - .weak __irq_exti4 + .weakref __irq_exti4, __default_handler .globl __irq_exti4 - .set __irq_exti4, __default_handler - .weak __irq_dma1_channel1 + .weakref __irq_dma1_channel1, __default_handler .globl __irq_dma1_channel1 - .set __irq_dma1_channel1, __default_handler - .weak __irq_dma1_channel2 + .weakref __irq_dma1_channel2, __default_handler .globl __irq_dma1_channel2 - .set __irq_dma1_channel2, __default_handler - .weak __irq_dma1_channel3 + .weakref __irq_dma1_channel3, __default_handler .globl __irq_dma1_channel3 - .set __irq_dma1_channel3, __default_handler - .weak __irq_dma1_channel4 + .weakref __irq_dma1_channel4, __default_handler .globl __irq_dma1_channel4 - .set __irq_dma1_channel4, __default_handler - .weak __irq_dma1_channel5 + .weakref __irq_dma1_channel5, __default_handler .globl __irq_dma1_channel5 - .set __irq_dma1_channel5, __default_handler - .weak __irq_dma1_channel6 + .weakref __irq_dma1_channel6, __default_handler .globl __irq_dma1_channel6 - .set __irq_dma1_channel6, __default_handler - .weak __irq_dma1_channel7 + .weakref __irq_dma1_channel7, __default_handler .globl __irq_dma1_channel7 - .set __irq_dma1_channel7, __default_handler - .weak __irq_adc + .weakref __irq_adc, __default_handler .globl __irq_adc - .set __irq_adc, __default_handler - .weak __irq_usb_hp_can_tx + .weakref __irq_usb_hp_can_tx, __default_handler .globl __irq_usb_hp_can_tx - .set __irq_usb_hp_can_tx, __default_handler - .weak __irq_usb_lp_can_rx0 + .weakref __irq_usb_lp_can_rx0, __default_handler .globl __irq_usb_lp_can_rx0 - .set __irq_usb_lp_can_rx0, __default_handler - .weak __irq_can_rx1 + .weakref __irq_can_rx1, __default_handler .globl __irq_can_rx1 - .set __irq_can_rx1, __default_handler - .weak __irq_can_sce + .weakref __irq_can_sce, __default_handler .globl __irq_can_sce - .set __irq_can_sce, __default_handler - .weak __irq_exti9_5 + .weakref __irq_exti9_5, __default_handler .globl __irq_exti9_5 - .set __irq_exti9_5, __default_handler - .weak __irq_tim1_brk + .weakref __irq_tim1_brk, __default_handler .globl __irq_tim1_brk - .set __irq_tim1_brk, __default_handler - .weak __irq_tim1_up + .weakref __irq_tim1_up, __default_handler .globl __irq_tim1_up - .set __irq_tim1_up, __default_handler - .weak __irq_tim1_trg_com + .weakref __irq_tim1_trg_com, __default_handler .globl __irq_tim1_trg_com - .set __irq_tim1_trg_com, __default_handler - .weak __irq_tim1_cc + .weakref __irq_tim1_cc, __default_handler .globl __irq_tim1_cc - .set __irq_tim1_cc, __default_handler - .weak __irq_tim2 + .weakref __irq_tim2, __default_handler .globl __irq_tim2 - .set __irq_tim2, __default_handler - .weak __irq_tim3 + .weakref __irq_tim3, __default_handler .globl __irq_tim3 - .set __irq_tim3, __default_handler - .weak __irq_tim4 + .weakref __irq_tim4, __default_handler .globl __irq_tim4 - .set __irq_tim4, __default_handler - .weak __irq_i2c1_ev + .weakref __irq_i2c1_ev, __default_handler .globl __irq_i2c1_ev - .set __irq_i2c1_ev, __default_handler - .weak __irq_i2c1_er + .weakref __irq_i2c1_er, __default_handler .globl __irq_i2c1_er - .set __irq_i2c1_er, __default_handler - .weak __irq_i2c2_ev + .weakref __irq_i2c2_ev, __default_handler .globl __irq_i2c2_ev - .set __irq_i2c2_ev, __default_handler - .weak __irq_i2c2_er + .weakref __irq_i2c2_er, __default_handler .globl __irq_i2c2_er - .set __irq_i2c2_er, __default_handler - .weak __irq_spi1 + .weakref __irq_spi1, __default_handler .globl __irq_spi1 - .set __irq_spi1, __default_handler - .weak __irq_spi2 + .weakref __irq_spi2, __default_handler .globl __irq_spi2 - .set __irq_spi2, __default_handler - .weak __irq_usart1 + .weakref __irq_usart1, __default_handler .globl __irq_usart1 - .set __irq_usart1, __default_handler - .weak __irq_usart2 + .weakref __irq_usart2, __default_handler .globl __irq_usart2 - .set __irq_usart2, __default_handler - .weak __irq_usart3 + .weakref __irq_usart3, __default_handler .globl __irq_usart3 - .set __irq_usart3, __default_handler - .weak __irq_exti15_10 + .weakref __irq_exti15_10, __default_handler .globl __irq_exti15_10 - .set __irq_exti15_10, __default_handler - .weak __irq_rtcalarm + .weakref __irq_rtcalarm, __default_handler .globl __irq_rtcalarm - .set __irq_rtcalarm, __default_handler - .weak __irq_usbwakeup + .weakref __irq_usbwakeup, __default_handler .globl __irq_usbwakeup - .set __irq_usbwakeup, __default_handler #if defined (STM32_HIGH_DENSITY) - .weak __irq_tim8_brk + .weakref __irq_tim8_brk, __default_handler .globl __irq_tim8_brk - .set __irq_tim8_brk, __default_handler - .weak __irq_tim8_up + .weakref __irq_tim8_up, __default_handler .globl __irq_tim8_up - .set __irq_tim8_up, __default_handler - .weak __irq_tim8_trg_com + .weakref __irq_tim8_trg_com, __default_handler .globl __irq_tim8_trg_com - .set __irq_tim8_trg_com, __default_handler - .weak __irq_tim8_cc + .weakref __irq_tim8_cc, __default_handler .globl __irq_tim8_cc - .set __irq_tim8_cc, __default_handler - .weak __irq_adc3 + .weakref __irq_adc3, __default_handler .globl __irq_adc3 - .set __irq_adc3, __default_handler - .weak __irq_fsmc + .weakref __irq_fsmc, __default_handler .globl __irq_fsmc - .set __irq_fsmc, __default_handler - .weak __irq_sdio + .weakref __irq_sdio, __default_handler .globl __irq_sdio - .set __irq_sdio, __default_handler - .weak __irq_tim5 + .weakref __irq_tim5, __default_handler .globl __irq_tim5 - .set __irq_tim5, __default_handler - .weak __irq_spi3 + .weakref __irq_spi3, __default_handler .globl __irq_spi3 - .set __irq_spi3, __default_handler - .weak __irq_uart4 + .weakref __irq_uart4, __default_handler .globl __irq_uart4 - .set __irq_uart4, __default_handler - .weak __irq_uart5 + .weakref __irq_uart5, __default_handler .globl __irq_uart5 - .set __irq_uart5, __default_handler - .weak __irq_tim6 + .weakref __irq_tim6, __default_handler .globl __irq_tim6 - .set __irq_tim6, __default_handler - .weak __irq_tim7 + .weakref __irq_tim7, __default_handler .globl __irq_tim7 - .set __irq_tim7, __default_handler - .weak __irq_dma2_channel1 + .weakref __irq_dma2_channel1, __default_handler .globl __irq_dma2_channel1 - .set __irq_dma2_channel1, __default_handler - .weak __irq_dma2_channel2 + .weakref __irq_dma2_channel2, __default_handler .globl __irq_dma2_channel2 - .set __irq_dma2_channel2, __default_handler - .weak __irq_dma2_channel3 + .weakref __irq_dma2_channel3, __default_handler .globl __irq_dma2_channel3 - .set __irq_dma2_channel3, __default_handler - .weak __irq_dma2_channel4_5 + .weakref __irq_dma2_channel4_5, __default_handler .globl __irq_dma2_channel4_5 - .set __irq_dma2_channel4_5, __default_handler #endif /* STM32_HIGH_DENSITY */ From 53e4329a757c9678245923061be3b43d063c0703 Mon Sep 17 00:00:00 2001 From: Martin Ayotte Date: Sun, 31 May 2015 13:22:21 -0400 Subject: [PATCH 22/96] add dfuse_addr arguments option for tools/macosx/maple_upload --- tools/macosx/maple_upload | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/macosx/maple_upload b/tools/macosx/maple_upload index e55078d..a4a577e 100755 --- a/tools/macosx/maple_upload +++ b/tools/macosx/maple_upload @@ -18,6 +18,11 @@ if [ -e $dummy_port_fullpath ]; then # sleep 1 fi +if [ $# -eq 5 ]; then + dfuse_addr="--dfuse-address $5" +else + dfuse_addr="" +fi DFU_UTIL=/usr/local/bin/dfu-util if [ ! -x ${DFU_UTIL} ]; then @@ -29,4 +34,4 @@ if [ ! -x ${DFU_UTIL} ]; then exit 2 fi -${DFU_UTIL} -d ${usbID} -a ${altID} -D ${binfile} -R +${DFU_UTIL} -d ${usbID} -a ${altID} -D ${binfile} -R ${dfuse_addr} From a52c360cebc67ffec22869a77170f0bdbc8169fe Mon Sep 17 00:00:00 2001 From: Martin Ayotte Date: Mon, 1 Jun 2015 13:47:11 -0400 Subject: [PATCH 23/96] experimental version for SD/SdFat --- STM32F4.zip | Bin 0 -> 715812 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 STM32F4.zip diff --git a/STM32F4.zip b/STM32F4.zip new file mode 100644 index 0000000000000000000000000000000000000000..507be0c3ab0305745accd9f601955f0a109f5a5e GIT binary patch literal 715812 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

)60ESn`jD62cr4i-9|%TS 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

NEq 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 L#NYf?wr7 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

  • g)iU#uys@< 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 z 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 Date: Tue, 2 Jun 2015 08:05:32 +1000 Subject: [PATCH 24/96] Undid changes to isrs.s from last merge (its not practical to undo the remove, its easier just to replace the file in question with the older / working version --- .../maple/libmaple/stm32f1/performance/isrs.S | 221 ++++++++++++------ 1 file changed, 147 insertions(+), 74 deletions(-) diff --git a/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S b/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S index 2d6052c..8c1a44f 100644 --- a/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S +++ b/STM32F1/cores/maple/libmaple/stm32f1/performance/isrs.S @@ -37,153 +37,226 @@ __default_handler: b . - .weakref __exc_nmi, __default_handler + .weak __exc_nmi .globl __exc_nmi - .weakref __exc_hardfault, __default_handler + .set __exc_nmi, __default_handler + .weak __exc_hardfault .globl __exc_hardfault - .weakref __exc_memmanage, __default_handler + .set __exc_hardfault, __default_handler + .weak __exc_memmanage .globl __exc_memmanage - .weakref __exc_busfault, __default_handler + .set __exc_memmanage, __default_handler + .weak __exc_busfault .globl __exc_busfault - .weakref __exc_usagefault, __default_handler + .set __exc_busfault, __default_handler + .weak __exc_usagefault .globl __exc_usagefault - .weakref __stm32reservedexception7, __default_handler + .set __exc_usagefault, __default_handler + .weak __stm32reservedexception7 .globl __stm32reservedexception7 - .weakref __stm32reservedexception8, __default_handler + .set __stm32reservedexception7, __default_handler + .weak __stm32reservedexception8 .globl __stm32reservedexception8 - .weakref __stm32reservedexception9, __default_handler + .set __stm32reservedexception8, __default_handler + .weak __stm32reservedexception9 .globl __stm32reservedexception9 - .weakref __stm32reservedexception10, __default_handler + .set __stm32reservedexception9, __default_handler + .weak __stm32reservedexception10 .globl __stm32reservedexception10 - .weakref __exc_svc, __default_handler + .set __stm32reservedexception10, __default_handler + .weak __exc_svc .globl __exc_svc - .weakref __exc_debug_monitor, __default_handler + .set __exc_svc, __default_handler + .weak __exc_debug_monitor .globl __exc_debug_monitor - .weakref __stm32reservedexception13, __default_handler + .set __exc_debug_monitor, __default_handler + .weak __stm32reservedexception13 .globl __stm32reservedexception13 - .weakref __exc_pendsv, __default_handler + .set __stm32reservedexception13, __default_handler + .weak __exc_pendsv .globl __exc_pendsv - .weakref __exc_systick, __default_handler + .set __exc_pendsv, __default_handler + .weak __exc_systick .globl __exc_systick - .weakref __irq_wwdg, __default_handler + .set __exc_systick, __default_handler + .weak __irq_wwdg .globl __irq_wwdg - .weakref __irq_pvd, __default_handler + .set __irq_wwdg, __default_handler + .weak __irq_pvd .globl __irq_pvd - .weakref __irq_tamper, __default_handler + .set __irq_pvd, __default_handler + .weak __irq_tamper .globl __irq_tamper - .weakref __irq_rtc, __default_handler + .set __irq_tamper, __default_handler + .weak __irq_rtc .globl __irq_rtc - .weakref __irq_flash, __default_handler + .set __irq_rtc, __default_handler + .weak __irq_flash .globl __irq_flash - .weakref __irq_rcc, __default_handler + .set __irq_flash, __default_handler + .weak __irq_rcc .globl __irq_rcc - .weakref __irq_exti0, __default_handler + .set __irq_rcc, __default_handler + .weak __irq_exti0 .globl __irq_exti0 - .weakref __irq_exti1, __default_handler + .set __irq_exti0, __default_handler + .weak __irq_exti1 .globl __irq_exti1 - .weakref __irq_exti2, __default_handler + .set __irq_exti1, __default_handler + .weak __irq_exti2 .globl __irq_exti2 - .weakref __irq_exti3, __default_handler + .set __irq_exti2, __default_handler + .weak __irq_exti3 .globl __irq_exti3 - .weakref __irq_exti4, __default_handler + .set __irq_exti3, __default_handler + .weak __irq_exti4 .globl __irq_exti4 - .weakref __irq_dma1_channel1, __default_handler + .set __irq_exti4, __default_handler + .weak __irq_dma1_channel1 .globl __irq_dma1_channel1 - .weakref __irq_dma1_channel2, __default_handler + .set __irq_dma1_channel1, __default_handler + .weak __irq_dma1_channel2 .globl __irq_dma1_channel2 - .weakref __irq_dma1_channel3, __default_handler + .set __irq_dma1_channel2, __default_handler + .weak __irq_dma1_channel3 .globl __irq_dma1_channel3 - .weakref __irq_dma1_channel4, __default_handler + .set __irq_dma1_channel3, __default_handler + .weak __irq_dma1_channel4 .globl __irq_dma1_channel4 - .weakref __irq_dma1_channel5, __default_handler + .set __irq_dma1_channel4, __default_handler + .weak __irq_dma1_channel5 .globl __irq_dma1_channel5 - .weakref __irq_dma1_channel6, __default_handler + .set __irq_dma1_channel5, __default_handler + .weak __irq_dma1_channel6 .globl __irq_dma1_channel6 - .weakref __irq_dma1_channel7, __default_handler + .set __irq_dma1_channel6, __default_handler + .weak __irq_dma1_channel7 .globl __irq_dma1_channel7 - .weakref __irq_adc, __default_handler + .set __irq_dma1_channel7, __default_handler + .weak __irq_adc .globl __irq_adc - .weakref __irq_usb_hp_can_tx, __default_handler + .set __irq_adc, __default_handler + .weak __irq_usb_hp_can_tx .globl __irq_usb_hp_can_tx - .weakref __irq_usb_lp_can_rx0, __default_handler + .set __irq_usb_hp_can_tx, __default_handler + .weak __irq_usb_lp_can_rx0 .globl __irq_usb_lp_can_rx0 - .weakref __irq_can_rx1, __default_handler + .set __irq_usb_lp_can_rx0, __default_handler + .weak __irq_can_rx1 .globl __irq_can_rx1 - .weakref __irq_can_sce, __default_handler + .set __irq_can_rx1, __default_handler + .weak __irq_can_sce .globl __irq_can_sce - .weakref __irq_exti9_5, __default_handler + .set __irq_can_sce, __default_handler + .weak __irq_exti9_5 .globl __irq_exti9_5 - .weakref __irq_tim1_brk, __default_handler + .set __irq_exti9_5, __default_handler + .weak __irq_tim1_brk .globl __irq_tim1_brk - .weakref __irq_tim1_up, __default_handler + .set __irq_tim1_brk, __default_handler + .weak __irq_tim1_up .globl __irq_tim1_up - .weakref __irq_tim1_trg_com, __default_handler + .set __irq_tim1_up, __default_handler + .weak __irq_tim1_trg_com .globl __irq_tim1_trg_com - .weakref __irq_tim1_cc, __default_handler + .set __irq_tim1_trg_com, __default_handler + .weak __irq_tim1_cc .globl __irq_tim1_cc + .set __irq_tim1_cc, __default_handler + .weakref __irq_tim2, __default_handler - .globl __irq_tim2 + .globl __irq_tim2 .weakref __irq_tim3, __default_handler - .globl __irq_tim3 + .globl __irq_tim3 .weakref __irq_tim4, __default_handler - .globl __irq_tim4 - .weakref __irq_i2c1_ev, __default_handler + .globl __irq_tim4 + + .weak __irq_i2c1_ev .globl __irq_i2c1_ev - .weakref __irq_i2c1_er, __default_handler + .set __irq_i2c1_ev, __default_handler + .weak __irq_i2c1_er .globl __irq_i2c1_er - .weakref __irq_i2c2_ev, __default_handler + .set __irq_i2c1_er, __default_handler + .weak __irq_i2c2_ev .globl __irq_i2c2_ev - .weakref __irq_i2c2_er, __default_handler + .set __irq_i2c2_ev, __default_handler + .weak __irq_i2c2_er .globl __irq_i2c2_er - .weakref __irq_spi1, __default_handler + .set __irq_i2c2_er, __default_handler + .weak __irq_spi1 .globl __irq_spi1 - .weakref __irq_spi2, __default_handler + .set __irq_spi1, __default_handler + .weak __irq_spi2 .globl __irq_spi2 - .weakref __irq_usart1, __default_handler + .set __irq_spi2, __default_handler + .weak __irq_usart1 .globl __irq_usart1 - .weakref __irq_usart2, __default_handler + .set __irq_usart1, __default_handler + .weak __irq_usart2 .globl __irq_usart2 - .weakref __irq_usart3, __default_handler + .set __irq_usart2, __default_handler + .weak __irq_usart3 .globl __irq_usart3 - .weakref __irq_exti15_10, __default_handler + .set __irq_usart3, __default_handler + .weak __irq_exti15_10 .globl __irq_exti15_10 - .weakref __irq_rtcalarm, __default_handler + .set __irq_exti15_10, __default_handler + .weak __irq_rtcalarm .globl __irq_rtcalarm - .weakref __irq_usbwakeup, __default_handler + .set __irq_rtcalarm, __default_handler + .weak __irq_usbwakeup .globl __irq_usbwakeup + .set __irq_usbwakeup, __default_handler #if defined (STM32_HIGH_DENSITY) - .weakref __irq_tim8_brk, __default_handler + .weak __irq_tim8_brk .globl __irq_tim8_brk - .weakref __irq_tim8_up, __default_handler + .set __irq_tim8_brk, __default_handler + .weak __irq_tim8_up .globl __irq_tim8_up - .weakref __irq_tim8_trg_com, __default_handler + .set __irq_tim8_up, __default_handler + .weak __irq_tim8_trg_com .globl __irq_tim8_trg_com - .weakref __irq_tim8_cc, __default_handler + .set __irq_tim8_trg_com, __default_handler + .weak __irq_tim8_cc .globl __irq_tim8_cc - .weakref __irq_adc3, __default_handler + .set __irq_tim8_cc, __default_handler + .weak __irq_adc3 .globl __irq_adc3 - .weakref __irq_fsmc, __default_handler + .set __irq_adc3, __default_handler + .weak __irq_fsmc .globl __irq_fsmc - .weakref __irq_sdio, __default_handler + .set __irq_fsmc, __default_handler + .weak __irq_sdio .globl __irq_sdio - .weakref __irq_tim5, __default_handler + .set __irq_sdio, __default_handler + .weak __irq_tim5 .globl __irq_tim5 - .weakref __irq_spi3, __default_handler + .set __irq_tim5, __default_handler + .weak __irq_spi3 .globl __irq_spi3 - .weakref __irq_uart4, __default_handler + .set __irq_spi3, __default_handler + .weak __irq_uart4 .globl __irq_uart4 - .weakref __irq_uart5, __default_handler + .set __irq_uart4, __default_handler + .weak __irq_uart5 .globl __irq_uart5 - .weakref __irq_tim6, __default_handler + .set __irq_uart5, __default_handler + .weak __irq_tim6 .globl __irq_tim6 - .weakref __irq_tim7, __default_handler + .set __irq_tim6, __default_handler + .weak __irq_tim7 .globl __irq_tim7 - .weakref __irq_dma2_channel1, __default_handler + .set __irq_tim7, __default_handler + .weak __irq_dma2_channel1 .globl __irq_dma2_channel1 - .weakref __irq_dma2_channel2, __default_handler + .set __irq_dma2_channel1, __default_handler + .weak __irq_dma2_channel2 .globl __irq_dma2_channel2 - .weakref __irq_dma2_channel3, __default_handler + .set __irq_dma2_channel2, __default_handler + .weak __irq_dma2_channel3 .globl __irq_dma2_channel3 - .weakref __irq_dma2_channel4_5, __default_handler + .set __irq_dma2_channel3, __default_handler + .weak __irq_dma2_channel4_5 .globl __irq_dma2_channel4_5 + .set __irq_dma2_channel4_5, __default_handler #endif /* STM32_HIGH_DENSITY */ \ No newline at end of file From 146dad45121b959a6e06671f078317c8636a6232 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Wed, 3 Jun 2015 10:44:10 +1000 Subject: [PATCH 25/96] Upadted VS1003_STM lib with latest files from Vasillis Serasidis --- .../Serasidis_VS1003B_STM/VS1003_STM.cpp | 29 ++++++++++--------- .../Serasidis_VS1003B_STM/VS1003_STM.h | 8 +++++ .../examples/hello_STM/hello_STM.ino | 9 +++++- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp b/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp index a59f030..1063049 100644 --- a/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp @@ -8,22 +8,11 @@ Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 Home: http://www.serasidis.gr email: avrsite@yahoo.gr - + 29 May 2015 - Added a fix for booting the VS1053B boards into + mp3 decoding instead of booting into MID (modeSwitch function). */ -// STL headers -// C headers -#include -// Framework headers -// Library headers -#include -#include -#include -#include "pins_arduino.h" -#include "wiring_private.h" #include -// Project headers -// This component's header #include const uint8_t vs1003_chunk_size = 32; @@ -318,6 +307,20 @@ void VS1003_STM::printDetails(void) const print_byte_register(i++); } +/****************************************************************************/ +void VS1003_STM::modeSwitch(void) +{ + //GPIO_DDR + write_register(SCI_WRAMADDR, 0xc017); + write_register(SCI_WRAM, 0x0003); + //GPIO_ODATA + write_register(SCI_WRAMADDR, 0xc019); + write_register(SCI_WRAM, 0x0000); + + delay(100); + write_register(SCI_MODE, (1< #include + /* * VS1003 development board connected by it's header pins the following way: * @@ -27,9 +31,10 @@ * GND - GND - * 5V - 5V - */ + VS1003_STM player(PC14, PB10, PA8, PA9); // cs_pin, dcs_pin, dreq_pin, reset_pin -unsigned char HelloMP3[] = { +static const unsigned char HelloMP3[] = { 0xFF,0xF2,0x40,0xC0,0x19,0xB7,0x00,0x14,0x02,0xE6,0x5C, /* ..@.......\ */ 0x01,0x92,0x68,0x01,0xF1,0x5E,0x03,0x08,0xF0,0x24,0x80, /* ..h..^...$. */ 0x05,0x9E,0x20,0xC6,0xFC,0x12,0x32,0x5C,0xBF,0xF9,0xB9, /* .. ...2\... */ @@ -196,6 +201,8 @@ void setup () { // initiate a player player.begin(); + player.modeSwitch(); //Change mode from MIDI to MP3 decoding (Vassilis Serasidis). + // set maximum output volume player.setVolume(0x00); } From a3a3c9d90bb3062fd1d43c50b9936085ebe0df9d Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Fri, 5 Jun 2015 16:42:25 +1000 Subject: [PATCH 26/96] Changed boards.txt so that Maple DFU upload is now called STM32duino bootloader --- STM32F1/boards.txt | 85 +++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 43 deletions(-) diff --git a/STM32F1/boards.txt b/STM32F1/boards.txt index 77cd480..59e476e 100644 --- a/STM32F1/boards.txt +++ b/STM32F1/boards.txt @@ -146,7 +146,7 @@ nucleo_f103rb.build.vect=VECT_TAB_ADDR=0x8000000 ###################### Generic STM32F103C ######################################## -genericSTM32F103C.name= Generic STM32F103C series +genericSTM32F103C.name=Generic STM32F103C series genericSTM32F103C.build.variant=generic_stm32f103c genericSTM32F103C.build.vect=VECT_TAB_ADDR=0x8000000 genericSTM32F103C.build.core=maple @@ -173,6 +173,16 @@ genericSTM32F103C.menu.device_variant.STM32F103C8.upload.ram.maximum_size=20480 genericSTM32F103C.menu.device_variant.STM32F103C8.upload.flash.maximum_size=65536 #---------------------------- UPLOAD METHODS --------------------------- + +genericSTM32F103C.menu.upload_method.DFUUploadMethod=STM32duino bootloader +genericSTM32F103C.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu +genericSTM32F103C.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload +genericSTM32F103C.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER +genericSTM32F103C.menu.upload_method.DFUUploadMethod.build.vect=VECT_TAB_ADDR=0x8002000 +genericSTM32F103C.menu.upload_method.DFUUploadMethod.build.ldscript=ld/bootloader_20.ld +genericSTM32F103C.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003 +genericSTM32F103C.menu.upload_method.DFUUploadMethod.upload.altID=2 + genericSTM32F103C.menu.upload_method.serialMethod=Serial genericSTM32F103C.menu.upload_method.serialMethod.upload.protocol=maple_serial genericSTM32F103C.menu.upload_method.serialMethod.upload.tool=serial_upload @@ -189,20 +199,10 @@ genericSTM32F103C.menu.upload_method.BMPMethod.upload.protocol=gdb_bmp genericSTM32F103C.menu.upload_method.BMPMethod.upload.tool=bmp_upload genericSTM32F103C.menu.upload_method.BMPMethod.build.upload_flags=-DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG -genericSTM32F103C.menu.upload_method.DFUUploadMethod=Maple DFU -genericSTM32F103C.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu -genericSTM32F103C.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload -genericSTM32F103C.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER -genericSTM32F103C.menu.upload_method.DFUUploadMethod.build.vect=VECT_TAB_ADDR=0x8002000 -genericSTM32F103C.menu.upload_method.DFUUploadMethod.build.ldscript=ld/bootloader_20.ld -genericSTM32F103C.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003 -genericSTM32F103C.menu.upload_method.DFUUploadMethod.upload.altID=2 - - ########################### Generic STM32F103R ########################### -genericSTM32F103R.name= Generic STM32F103R series +genericSTM32F103R.name=Generic STM32F103R series genericSTM32F103R.build.variant=generic_stm32f103r genericSTM32F103R.build.vect=VECT_TAB_ADDR=0x8000000 genericSTM32F103R.build.core=maple @@ -235,6 +235,16 @@ genericSTM32F103R.menu.device_variant.STM32F103RE.build.ldscript=ld/stm32f103re. #---------------------------- UPLOAD METHODS --------------------------- + +genericSTM32F103R.menu.upload_method.DFUUploadMethod=STM32duino bootloader +genericSTM32F103R.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu +genericSTM32F103R.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload +genericSTM32F103R.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER +genericSTM32F103R.menu.upload_method.DFUUploadMethod.build.vect=VECT_TAB_ADDR=0x8002000 +genericSTM32F103R.menu.upload_method.DFUUploadMethod.build.ldscript=ld/stm32f103re-bootloader.ld +genericSTM32F103R.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003 +genericSTM32F103R.menu.upload_method.DFUUploadMethod.upload.altID=2 + genericSTM32F103R.menu.upload_method.serialMethod=Serial genericSTM32F103R.menu.upload_method.serialMethod.upload.protocol=maple_serial genericSTM32F103R.menu.upload_method.serialMethod.upload.tool=serial_upload @@ -250,19 +260,9 @@ genericSTM32F103R.menu.upload_method.BMPMethod.upload.protocol=gdb_bmp genericSTM32F103R.menu.upload_method.BMPMethod.upload.tool=bmp_upload genericSTM32F103R.menu.upload_method.BMPMethod.build.upload_flags=-DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG -genericSTM32F103R.menu.upload_method.DFUUploadMethod=Maple DFU -genericSTM32F103R.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu -genericSTM32F103R.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload -genericSTM32F103R.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER -genericSTM32F103R.menu.upload_method.DFUUploadMethod.build.vect=VECT_TAB_ADDR=0x8002000 -genericSTM32F103R.menu.upload_method.DFUUploadMethod.build.ldscript=ld/stm32f103re-bootloader.ld -genericSTM32F103R.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003 -genericSTM32F103R.menu.upload_method.DFUUploadMethod.upload.altID=2 - ########################### Generic STM32F103V ########################### - genericSTM32F103V.name=Generic STM32F103V series genericSTM32F103V.build.variant=generic_stm32f103v genericSTM32F103V.build.vect=VECT_TAB_ADDR=0x8000000 @@ -300,11 +300,20 @@ genericSTM32F103V.menu.device_variant.STM32F103VE.upload.flash.maximum_size=5242 genericSTM32F103V.menu.device_variant.STM32F103VE.build.ldscript=ld/stm32f103ve.ld #---------------------------- UPLOAD METHODS --------------------------- + +genericSTM32F103V.menu.upload_method.DFUUploadMethod=STM32duino bootloader +genericSTM32F103V.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu +genericSTM32F103V.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload +genericSTM32F103V.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER +genericSTM32F103V.menu.upload_method.DFUUploadMethod.build.vect=VECT_TAB_ADDR=0x8002000 +genericSTM32F103V.menu.upload_method.DFUUploadMethod.build.ldscript=ld/stm32f103veDFU.ld +genericSTM32F103V.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003 +genericSTM32F103V.menu.upload_method.DFUUploadMethod.upload.altID=2 + genericSTM32F103V.menu.upload_method.serialMethod=Serial genericSTM32F103V.menu.upload_method.serialMethod.upload.protocol=maple_serial genericSTM32F103V.menu.upload_method.serialMethod.upload.tool=serial_upload - genericSTM32F103V.menu.upload_method.STLinkMethod=STLink genericSTM32F103V.menu.upload_method.STLinkMethod.upload.protocol=STLink genericSTM32F103V.menu.upload_method.STLinkMethod.upload.tool=stlink_upload @@ -315,20 +324,9 @@ genericSTM32F103V.menu.upload_method.BMPMethod.upload.protocol=gdb_bmp genericSTM32F103V.menu.upload_method.BMPMethod.upload.tool=bmp_upload genericSTM32F103V.menu.upload_method.BMPMethod.build.upload_flags=-DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG -genericSTM32F103V.menu.upload_method.DFUUploadMethod=Maple DFU -genericSTM32F103V.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu -genericSTM32F103V.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload -genericSTM32F103V.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER -genericSTM32F103V.menu.upload_method.DFUUploadMethod.build.vect=VECT_TAB_ADDR=0x8002000 -genericSTM32F103V.menu.upload_method.DFUUploadMethod.build.ldscript=ld/stm32f103veDFU.ld -genericSTM32F103V.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003 -genericSTM32F103V.menu.upload_method.DFUUploadMethod.upload.altID=2 - - ########################### Generic STM32F103Z ########################### - genericSTM32F103Z.name=Generic STM32F103Z series genericSTM32F103Z.build.variant=generic_stm32f103z genericSTM32F103Z.build.vect=VECT_TAB_ADDR=0x8000000 @@ -360,6 +358,16 @@ genericSTM32F103Z.menu.device_variant.STM32F103ZE.upload.flash.maximum_size=5242 genericSTM32F103Z.menu.device_variant.STM32F103ZE.build.ldscript=ld/stm32f103ze.ld #---------------------------- UPLOAD METHODS --------------------------- + +genericSTM32F103Z.menu.upload_method.DFUUploadMethod=STM32duino bootloader +genericSTM32F103Z.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu +genericSTM32F103Z.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload +genericSTM32F103Z.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER +genericSTM32F103Z.menu.upload_method.DFUUploadMethod.build.vect=VECT_TAB_ADDR=0x8002000 +genericSTM32F103Z.menu.upload_method.DFUUploadMethod.build.ldscript=ld/stm32f103z_dfu.ld +genericSTM32F103Z.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003 +genericSTM32F103Z.menu.upload_method.DFUUploadMethod.upload.altID=2 + genericSTM32F103Z.menu.upload_method.serialMethod=Serial genericSTM32F103Z.menu.upload_method.serialMethod.upload.protocol=maple_serial genericSTM32F103Z.menu.upload_method.serialMethod.upload.tool=serial_upload @@ -373,12 +381,3 @@ genericSTM32F103Z.menu.upload_method.BMPMethod=BMP (Black Magic Probe) genericSTM32F103Z.menu.upload_method.BMPMethod.upload.protocol=gdb_bmp genericSTM32F103Z.menu.upload_method.BMPMethod.upload.tool=bmp_upload genericSTM32F103Z.menu.upload_method.BMPMethod.build.upload_flags=-DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG - -genericSTM32F103Z.menu.upload_method.DFUUploadMethod=Maple DFU -genericSTM32F103Z.menu.upload_method.DFUUploadMethod.upload.protocol=maple_dfu -genericSTM32F103Z.menu.upload_method.DFUUploadMethod.upload.tool=maple_upload -genericSTM32F103Z.menu.upload_method.DFUUploadMethod.build.upload_flags=-DSERIAL_USB -DGENERIC_BOOTLOADER -genericSTM32F103Z.menu.upload_method.DFUUploadMethod.build.vect=VECT_TAB_ADDR=0x8002000 -genericSTM32F103Z.menu.upload_method.DFUUploadMethod.build.ldscript=ld/stm32f103z_dfu.ld -genericSTM32F103Z.menu.upload_method.DFUUploadMethod.upload.usbID=1EAF:0003 -genericSTM32F103Z.menu.upload_method.DFUUploadMethod.upload.altID=2 From 279790722158ed0b4769b2dc7781c42d77104e9c Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sat, 6 Jun 2015 07:46:42 +1000 Subject: [PATCH 27/96] Added support for SPI 2 to VS1003 library, and made a change to SPI to support other libs being able to select which SPI they want to use (issue with const in transfer() --- STM32F1/libraries/SPI/src/SPI.cpp | 2 +- STM32F1/libraries/SPI/src/SPI.h | 2 +- .../Serasidis_VS1003B_STM/VS1003_STM.cpp | 124 +++++++++--------- .../Serasidis_VS1003B_STM/VS1003_STM.h | 16 +-- .../examples/hello_STM/hello_STM.ino | 37 +++--- 5 files changed, 88 insertions(+), 93 deletions(-) diff --git a/STM32F1/libraries/SPI/src/SPI.cpp b/STM32F1/libraries/SPI/src/SPI.cpp index da936fa..f17d804 100644 --- a/STM32F1/libraries/SPI/src/SPI.cpp +++ b/STM32F1/libraries/SPI/src/SPI.cpp @@ -347,7 +347,7 @@ void SPIClass::write(const uint8 *data, uint32 length) { while (spi_is_busy(this->spi_d) != 0); // "... then wait until BSY=0, this indicates that the transmission of the last data is complete." } -uint8 SPIClass::transfer(uint8 byte) { +uint8 SPIClass::transfer(uint8 byte) const { uint8 b; spi_tx_reg(this->spi_d, byte); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." while (spi_is_rx_nonempty(this->spi_d) == 0); // "4. Wait until RXNE=1 ..." diff --git a/STM32F1/libraries/SPI/src/SPI.h b/STM32F1/libraries/SPI/src/SPI.h index 4ec2723..490d58b 100644 --- a/STM32F1/libraries/SPI/src/SPI.h +++ b/STM32F1/libraries/SPI/src/SPI.h @@ -238,7 +238,7 @@ public: * @param data Byte to transmit. * @return Next unread byte. */ - uint8 transfer(uint8 data); + uint8 transfer(uint8 data) const; /** * @brief Sets up a DMA Transfer for "length" bytes. diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp b/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp index 1063049..2f80b19 100644 --- a/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp @@ -12,16 +12,10 @@ mp3 decoding instead of booting into MID (modeSwitch function). */ -#include +//#include #include -const uint8_t vs1003_chunk_size = 32; - -#undef PROGMEM -#define PROGMEM __attribute__ ((section (".progmem.data"))) -#undef PSTR -#define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];})) - +#define vs1003_chunk_size 32 /****************************************************************************/ // VS1003 SCI Write Command byte is 0x02 @@ -70,24 +64,24 @@ const uint8_t SM_LINE_IN = 14; // Register names -char reg_name_MODE[] PROGMEM = "MODE"; -char reg_name_STATUS[] PROGMEM = "STATUS"; -char reg_name_BASS[] PROGMEM = "BASS"; -char reg_name_CLOCKF[] PROGMEM = "CLOCKF"; -char reg_name_DECODE_TIME[] PROGMEM = "DECODE_TIME"; -char reg_name_AUDATA[] PROGMEM = "AUDATA"; -char reg_name_WRAM[] PROGMEM = "WRAM"; -char reg_name_WRAMADDR[] PROGMEM = "WRAMADDR"; -char reg_name_HDAT0[] PROGMEM = "HDAT0"; -char reg_name_HDAT1[] PROGMEM = "HDAT1"; -char reg_name_AIADDR[] PROGMEM = "AIADDR"; -char reg_name_VOL[] PROGMEM = "VOL"; -char reg_name_AICTRL0[] PROGMEM = "AICTRL0"; -char reg_name_AICTRL1[] PROGMEM = "AICTRL1"; -char reg_name_AICTRL2[] PROGMEM = "AICTRL2"; -char reg_name_AICTRL3[] PROGMEM = "AICTRL3"; +const char reg_name_MODE[] = "MODE"; +const char reg_name_STATUS[] = "STATUS"; +const char reg_name_BASS[] = "BASS"; +const char reg_name_CLOCKF[] = "CLOCKF"; +const char reg_name_DECODE_TIME[] = "DECODE_TIME"; +const char reg_name_AUDATA[] = "AUDATA"; +const char reg_name_WRAM[] = "WRAM"; +const char reg_name_WRAMADDR[] = "WRAMADDR"; +const char reg_name_HDAT0[] = "HDAT0"; +const char reg_name_HDAT1[] = "HDAT1"; +const char reg_name_AIADDR[] = "AIADDR"; +const char reg_name_VOL[] = "VOL"; +const char reg_name_AICTRL0[] = "AICTRL0"; +const char reg_name_AICTRL1[] = "AICTRL1"; +const char reg_name_AICTRL2[] = "AICTRL2"; +const char reg_name_AICTRL3[] = "AICTRL3"; -static PGM_P register_names[] PROGMEM = +static PGM_P const register_names[] = { reg_name_MODE, reg_name_STATUS, @@ -116,15 +110,15 @@ inline void DMA1_CH3_Event() { /****************************************************************************/ -uint16_t VS1003_STM::read_register(uint8_t _reg) const +uint16_t VS1003::read_register(uint8_t _reg) const { uint16_t result; control_mode_on(); delayMicroseconds(1); // tXCSS - SPI.transfer(VS_READ_COMMAND); // Read operation - SPI.transfer(_reg); // Which register - result = SPI.transfer(0xff) << 8; // read high byte - result |= SPI.transfer(0xff); // read low byte + my_SPI.transfer(VS_READ_COMMAND); // Read operation + my_SPI.transfer(_reg); // Which register + result = my_SPI.transfer(0xff) << 8; // read high byte + result |= my_SPI.transfer(0xff); // read low byte delayMicroseconds(1); // tXCSH await_data_request(); control_mode_off(); @@ -133,14 +127,14 @@ uint16_t VS1003_STM::read_register(uint8_t _reg) const /****************************************************************************/ -void VS1003_STM::write_register(uint8_t _reg,uint16_t _value) const +void VS1003::write_register(uint8_t _reg,uint16_t _value) const { control_mode_on(); delayMicroseconds(1); // tXCSS - SPI.transfer(VS_WRITE_COMMAND); // Write operation - SPI.transfer(_reg); // Which register - SPI.transfer(_value >> 8); // Send hi byte - SPI.transfer(_value & 0xff); // Send lo byte + my_SPI.transfer(VS_WRITE_COMMAND); // Write operation + my_SPI.transfer(_reg); // Which register + my_SPI.transfer(_value >> 8); // Send hi byte + my_SPI.transfer(_value & 0xff); // Send lo byte delayMicroseconds(1); // tXCSH await_data_request(); control_mode_off(); @@ -148,7 +142,7 @@ void VS1003_STM::write_register(uint8_t _reg,uint16_t _value) const /****************************************************************************/ -void VS1003_STM::sdi_send_buffer(const uint8_t* data, size_t len) +void VS1003::sdi_send_buffer(const uint8_t* data, size_t len) { data_mode_on(); while ( len ) @@ -159,14 +153,14 @@ void VS1003_STM::sdi_send_buffer(const uint8_t* data, size_t len) size_t chunk_length = min(len,vs1003_chunk_size); len -= chunk_length; while ( chunk_length-- ) - SPI.transfer(*data++); + my_SPI.transfer(*data++); } data_mode_off(); } /****************************************************************************/ -void VS1003_STM::sdi_send_zeroes(size_t len) +void VS1003::sdi_send_zeroes(size_t len) { data_mode_on(); while ( len ) @@ -176,21 +170,21 @@ void VS1003_STM::sdi_send_zeroes(size_t len) size_t chunk_length = min(len,vs1003_chunk_size); len -= chunk_length; while ( chunk_length-- ) - SPI.transfer(0); + my_SPI.transfer(0); } data_mode_off(); } /****************************************************************************/ -VS1003_STM::VS1003_STM( uint8_t _cs_pin, uint8_t _dcs_pin, uint8_t _dreq_pin, uint8_t _reset_pin): - cs_pin(_cs_pin), dcs_pin(_dcs_pin), dreq_pin(_dreq_pin), reset_pin(_reset_pin) +VS1003::VS1003( uint8_t _cs_pin, uint8_t _dcs_pin, uint8_t _dreq_pin, uint8_t _reset_pin, SPIClass _spiChan): + cs_pin(_cs_pin), dcs_pin(_dcs_pin), dreq_pin(_dreq_pin), reset_pin(_reset_pin), my_SPI(_spiChan) { } /****************************************************************************/ -void VS1003_STM::begin(void) +void VS1003::begin(void) { // Keep the chip in reset until we are ready @@ -206,17 +200,19 @@ void VS1003_STM::begin(void) // DREQ is an input pinMode(dreq_pin,INPUT); + // Boot VS1003 - //Serial.println(PSTR("Booting VS1003...\r\n")); + //printf(("Booting VS1003...\r\n")); delay(1); - SPI.begin(); - SPI.setBitOrder(MSBFIRST); - SPI.setDataMode(SPI_MODE0); + my_SPI.begin(); + my_SPI.setBitOrder(MSBFIRST); + my_SPI.setDataMode(SPI_MODE0); // init SPI slow mode - SPI.setClockDivider(SPI_CLOCK_DIV64); // Slow! - + + my_SPI.setClockDivider(SPI_CLOCK_DIV64); // Slow! + // release from reset digitalWrite(reset_pin,HIGH); @@ -231,7 +227,7 @@ void VS1003_STM::begin(void) /* Switch on the analog parts */ write_register(SCI_VOL,0xfefe); // VOL - //printf_P(PSTR("VS1003 still booting\r\n")); + //printf(("VS1003 still booting\r\n")); write_register(SCI_AUDATA,44101); // 44.1kHz stereo @@ -248,17 +244,17 @@ void VS1003_STM::begin(void) // Now you can set high speed SPI clock // 72 MHz / 16 = 4.5 MHz max is practically allowed by VS1003 SPI interface. - SPI.setClockDivider(SPI_CLOCK_DIV16); + my_SPI.setClockDivider(SPI_CLOCK_DIV16); - //printf_P(PSTR("VS1003 Set\r\n")); + //printf(("VS1003 Set\r\n")); //printDetails(); - //printf_P(PSTR("VS1003 OK\r\n")); + //printf(("VS1003 OK\r\n")); } /****************************************************************************/ -void VS1003_STM::setVolume(uint8_t vol) const +void VS1003::setVolume(uint8_t vol) const { uint16_t value = vol; value <<= 8; @@ -269,46 +265,46 @@ void VS1003_STM::setVolume(uint8_t vol) const /****************************************************************************/ -void VS1003_STM::startSong(void) +void VS1003::startSong(void) { sdi_send_zeroes(10); } /****************************************************************************/ -void VS1003_STM::playChunk(const uint8_t* data, size_t len) +void VS1003::playChunk(const uint8_t* data, size_t len) { sdi_send_buffer(data,len); } /****************************************************************************/ -void VS1003_STM::stopSong(void) +void VS1003::stopSong(void) { sdi_send_zeroes(2048); } /****************************************************************************/ -void VS1003_STM::print_byte_register(uint8_t reg) const +void VS1003::print_byte_register(uint8_t reg) const { const char *name = reinterpret_cast(pgm_read_word( register_names + reg )); char extra_tab = strlen_P(name) < 5 ? '\t' : 0; - //printf_P(PSTR("%02x %S\t%c = 0x%02x\r\n"),reg,name,extra_tab,read_register(reg)); + //printf(("%02x %S\t%c = 0x%02x\r\n"),reg,name,extra_tab,read_register(reg)); } /****************************************************************************/ -void VS1003_STM::printDetails(void) const +void VS1003::printDetails(void) const { - //printf_P(PSTR("VS1003 Configuration:\r\n")); + //printf(("VS1003 Configuration:\r\n")); int i = 0; while ( i <= SCI_num_registers ) print_byte_register(i++); } /****************************************************************************/ -void VS1003_STM::modeSwitch(void) +void VS1003::modeSwitch(void) { //GPIO_DDR write_register(SCI_WRAMADDR, 0xc017); @@ -323,7 +319,7 @@ void VS1003_STM::modeSwitch(void) } /****************************************************************************/ -void VS1003_STM::loadUserCode(const uint16_t* buf, size_t len) const +void VS1003::loadUserCode(const uint16_t* buf, size_t len) const { while (len) { @@ -333,13 +329,13 @@ void VS1003_STM::loadUserCode(const uint16_t* buf, size_t len) const n &= 0x7FFF; uint16_t val = pgm_read_word(buf++); len--; while (n--) { - //printf_P(PSTR("W %02x: %04x\r\n"),addr,val); + //printf(("W %02x: %04x\r\n"),addr,val); write_register(addr, val); } } else { /* Copy run, copy n samples */ while (n--) { uint16_t val = pgm_read_word(buf++); len--; - //printf_P(PSTR("W %02x: %04x\r\n"),addr,val); + //printf(("W %02x: %04x\r\n"),addr,val); write_register(addr, val); } } diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.h b/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.h index e1492e0..e9c7359 100644 --- a/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.h +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.h @@ -19,19 +19,16 @@ // STL headers // C headers // Framework headers -#if ARDUINO < 100 -#include -#else -#include -#endif +#include +#include /** * Driver for VS1003 - MP3 / WMA / MIDI Audio Codec Chip * * See http://www.vlsi.fi/en/products/vs1003.html */ -class VS1003_STM +class VS1003 { private: uint8_t cs_pin; /**< Pin where CS line is connected */ @@ -40,7 +37,8 @@ private: uint8_t reset_pin; /**< Pin where RESET line is connected */ uint8_t my_SPCR; /**< Value of the SPCR register how we like it. */ uint8_t my_SPSR; /**< Value of the SPSR register how we like it. */ -protected: + SPIClass my_SPI; +public: inline void await_data_request(void) const { while ( !digitalRead(dreq_pin) ); @@ -82,14 +80,14 @@ protected: */ void loadUserCode(const uint16_t* buf, size_t len) const; -public: +//public: /** * Constructor * * Only sets pin values. Doesn't do touch the chip. Be sure to call begin()! */ - VS1003_STM( uint8_t _cs_pin, uint8_t _dcs_pin, uint8_t _dreq_pin, uint8_t _reset_pin); + VS1003( uint8_t _cs_pin, uint8_t _dcs_pin, uint8_t _dreq_pin, uint8_t _reset_pin, SPIClass _spi = SPIClass(1)); /** * Begin operation diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/examples/hello_STM/hello_STM.ino b/STM32F1/libraries/Serasidis_VS1003B_STM/examples/hello_STM/hello_STM.ino index e00ad11..a498597 100644 --- a/STM32F1/libraries/Serasidis_VS1003B_STM/examples/hello_STM/hello_STM.ino +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/examples/hello_STM/hello_STM.ino @@ -9,6 +9,7 @@ Home: http://www.serasidis.gr email: avrsite@yahoo.gr + 06 Jun 2015 - Roger Clark, added support for SPI 2 and SPI 3 29 May 2015 - Added a fix for booting the VS1053B boards into mp3 decoding instead of booting into MID (modeSwitch function). */ @@ -16,7 +17,6 @@ #include #include - /* * VS1003 development board connected by it's header pins the following way: * @@ -32,8 +32,6 @@ * 5V - 5V - */ -VS1003_STM player(PC14, PB10, PA8, PA9); // cs_pin, dcs_pin, dreq_pin, reset_pin - static const unsigned char HelloMP3[] = { 0xFF,0xF2,0x40,0xC0,0x19,0xB7,0x00,0x14,0x02,0xE6,0x5C, /* ..@.......\ */ 0x01,0x92,0x68,0x01,0xF1,0x5E,0x03,0x08,0xF0,0x24,0x80, /* ..h..^...$. */ @@ -189,26 +187,29 @@ static const unsigned char HelloMP3[] = { 0x20,0x20,0x20,0x4D,0x50,0x33,0x20,0x48,0x65,0x6C,0x6C, /* MP3 Hell */ 0x6F,0x2C,0x20,0x57,0x6F,0x72,0x6C,0x64,0x21,0x20,0x20, /* o, World! */ 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, /* */ - 0x00, /* . */ + 0x00 }; -void setup () { +VS1003 player(PC14, PB10, PA8, PA9); // cs_pin, dcs_pin, dreq_pin, reset_pin, SPI channel - defaults to SPI + +/* Example of how to use the VS21003 attached to SPI 2 +VS1003 player(PC14, PB10, PA8, PA9,SPIClass(2)); // cs_pin, dcs_pin, dreq_pin, reset_pin, use SPI 2 +*/ + +/* Example of how to use the VS21003 attached to SPI 2 +VS1003 player(PC14, PB10, PA8, PA9,SPIClass(3)); // cs_pin, dcs_pin, dreq_pin, reset_pin, use SPI 3 +*/ +void setup () +{ Serial.begin(9600); - while (!Serial) { - ; //Give some time to Serial port to be initiallized. - } - Serial.println("VS1003 test"); - - // initiate a player + Serial.println("VS1003 HelloMP3"); + player.begin(); player.modeSwitch(); //Change mode from MIDI to MP3 decoding (Vassilis Serasidis). - - // set maximum output volume - player.setVolume(0x00); + player.setVolume(0x00); // set maximum output volume } void loop() { - // play hellomp3 flow each 0.5s ;) - player.playChunk(HelloMP3, sizeof(HelloMP3)); - delay(500); -} + player.playChunk(HelloMP3, sizeof(HelloMP3)); // play hellomp3 - this blocks until the player is ready to receive more data + delay(1000); +} \ No newline at end of file From 1af98fed89041f3c2d67e69d188f7cec258a6cd3 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sat, 6 Jun 2015 08:15:47 +1000 Subject: [PATCH 28/96] Converted VS1003 lib to new lib style including keywords --- .../libraries/Serasidis_VS1003B_STM/README.md | 3 +- .../Serasidis_VS1003B_STM/VS1003_STM.cpp | 345 ------------------ .../Serasidis_VS1003B_STM/VS1003_STM.h | 145 -------- 3 files changed, 2 insertions(+), 491 deletions(-) delete mode 100644 STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp delete mode 100644 STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.h diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/README.md b/STM32F1/libraries/Serasidis_VS1003B_STM/README.md index 2bb7d1b..975665e 100644 --- a/STM32F1/libraries/Serasidis_VS1003B_STM/README.md +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/README.md @@ -1,7 +1,8 @@ Description --- -That library is for VS1003B / VS10053B WAV/MP3/AAC audio decoder. The library has been ported to work with STM32 micro-controllers. +That library is for VS1003B / VS10053B WAV/MP3/AAC audio decoder. +The library has been ported to work with STM32 micro-controllers. A short Youtube video demonstration of the library can be found [here][A]. In that video I used an **STM32F103C8T** development board and a **VS1053B** mp3 decoder module. diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp b/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp deleted file mode 100644 index 2f80b19..0000000 --- a/STM32F1/libraries/Serasidis_VS1003B_STM/VS1003_STM.cpp +++ /dev/null @@ -1,345 +0,0 @@ -/* - Copyright (C) 2012 Andy Karpov - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as published by the Free Software Foundation. - - Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 - Home: http://www.serasidis.gr - email: avrsite@yahoo.gr - 29 May 2015 - Added a fix for booting the VS1053B boards into - mp3 decoding instead of booting into MID (modeSwitch function). - */ - -//#include -#include - -#define vs1003_chunk_size 32 -/****************************************************************************/ - -// VS1003 SCI Write Command byte is 0x02 -#define VS_WRITE_COMMAND 0x02 - -// VS1003 SCI Read COmmand byte is 0x03 -#define VS_READ_COMMAND 0x03 - -// SCI Registers - -const uint8_t SCI_MODE = 0x0; -const uint8_t SCI_STATUS = 0x1; -const uint8_t SCI_BASS = 0x2; -const uint8_t SCI_CLOCKF = 0x3; -const uint8_t SCI_DECODE_TIME = 0x4; -const uint8_t SCI_AUDATA = 0x5; -const uint8_t SCI_WRAM = 0x6; -const uint8_t SCI_WRAMADDR = 0x7; -const uint8_t SCI_HDAT0 = 0x8; -const uint8_t SCI_HDAT1 = 0x9; -const uint8_t SCI_AIADDR = 0xa; -const uint8_t SCI_VOL = 0xb; -const uint8_t SCI_AICTRL0 = 0xc; -const uint8_t SCI_AICTRL1 = 0xd; -const uint8_t SCI_AICTRL2 = 0xe; -const uint8_t SCI_AICTRL3 = 0xf; -const uint8_t SCI_num_registers = 0xf; - -// SCI_MODE bits - -const uint8_t SM_DIFF = 0; -const uint8_t SM_LAYER12 = 1; -const uint8_t SM_RESET = 2; -const uint8_t SM_OUTOFWAV = 3; -const uint8_t SM_EARSPEAKER_LO = 4; -const uint8_t SM_TESTS = 5; -const uint8_t SM_STREAM = 6; -const uint8_t SM_EARSPEAKER_HI = 7; -const uint8_t SM_DACT = 8; -const uint8_t SM_SDIORD = 9; -const uint8_t SM_SDISHARE = 10; -const uint8_t SM_SDINEW = 11; -const uint8_t SM_ADPCM = 12; -const uint8_t SM_ADCPM_HP = 13; -const uint8_t SM_LINE_IN = 14; - -// Register names - -const char reg_name_MODE[] = "MODE"; -const char reg_name_STATUS[] = "STATUS"; -const char reg_name_BASS[] = "BASS"; -const char reg_name_CLOCKF[] = "CLOCKF"; -const char reg_name_DECODE_TIME[] = "DECODE_TIME"; -const char reg_name_AUDATA[] = "AUDATA"; -const char reg_name_WRAM[] = "WRAM"; -const char reg_name_WRAMADDR[] = "WRAMADDR"; -const char reg_name_HDAT0[] = "HDAT0"; -const char reg_name_HDAT1[] = "HDAT1"; -const char reg_name_AIADDR[] = "AIADDR"; -const char reg_name_VOL[] = "VOL"; -const char reg_name_AICTRL0[] = "AICTRL0"; -const char reg_name_AICTRL1[] = "AICTRL1"; -const char reg_name_AICTRL2[] = "AICTRL2"; -const char reg_name_AICTRL3[] = "AICTRL3"; - -static PGM_P const register_names[] = -{ - reg_name_MODE, - reg_name_STATUS, - reg_name_BASS, - reg_name_CLOCKF, - reg_name_DECODE_TIME, - reg_name_AUDATA, - reg_name_WRAM, - reg_name_WRAMADDR, - reg_name_HDAT0, - reg_name_HDAT1, - reg_name_AIADDR, - reg_name_VOL, - reg_name_AICTRL0, - reg_name_AICTRL1, - reg_name_AICTRL2, - reg_name_AICTRL3, -}; - -/****************************************************************************/ - -inline void DMA1_CH3_Event() { - dma1_ch3_Active = 0; - dma_disable(DMA1, DMA_CH3); -} - -/****************************************************************************/ - -uint16_t VS1003::read_register(uint8_t _reg) const -{ - uint16_t result; - control_mode_on(); - delayMicroseconds(1); // tXCSS - my_SPI.transfer(VS_READ_COMMAND); // Read operation - my_SPI.transfer(_reg); // Which register - result = my_SPI.transfer(0xff) << 8; // read high byte - result |= my_SPI.transfer(0xff); // read low byte - delayMicroseconds(1); // tXCSH - await_data_request(); - control_mode_off(); - return result; -} - -/****************************************************************************/ - -void VS1003::write_register(uint8_t _reg,uint16_t _value) const -{ - control_mode_on(); - delayMicroseconds(1); // tXCSS - my_SPI.transfer(VS_WRITE_COMMAND); // Write operation - my_SPI.transfer(_reg); // Which register - my_SPI.transfer(_value >> 8); // Send hi byte - my_SPI.transfer(_value & 0xff); // Send lo byte - delayMicroseconds(1); // tXCSH - await_data_request(); - control_mode_off(); -} - -/****************************************************************************/ - -void VS1003::sdi_send_buffer(const uint8_t* data, size_t len) -{ - data_mode_on(); - while ( len ) - { - await_data_request(); - delayMicroseconds(3); - - size_t chunk_length = min(len,vs1003_chunk_size); - len -= chunk_length; - while ( chunk_length-- ) - my_SPI.transfer(*data++); - } - data_mode_off(); -} - -/****************************************************************************/ - -void VS1003::sdi_send_zeroes(size_t len) -{ - data_mode_on(); - while ( len ) - { - await_data_request(); - - size_t chunk_length = min(len,vs1003_chunk_size); - len -= chunk_length; - while ( chunk_length-- ) - my_SPI.transfer(0); - } - data_mode_off(); -} - -/****************************************************************************/ - -VS1003::VS1003( uint8_t _cs_pin, uint8_t _dcs_pin, uint8_t _dreq_pin, uint8_t _reset_pin, SPIClass _spiChan): - cs_pin(_cs_pin), dcs_pin(_dcs_pin), dreq_pin(_dreq_pin), reset_pin(_reset_pin), my_SPI(_spiChan) -{ -} - -/****************************************************************************/ - -void VS1003::begin(void) -{ - - // Keep the chip in reset until we are ready - pinMode(reset_pin,OUTPUT); - digitalWrite(reset_pin,LOW); - - // The SCI and SDI will start deselected - pinMode(cs_pin,OUTPUT); - digitalWrite(cs_pin,HIGH); - pinMode(dcs_pin,OUTPUT); - digitalWrite(dcs_pin,HIGH); - - // DREQ is an input - pinMode(dreq_pin,INPUT); - - - // Boot VS1003 - //printf(("Booting VS1003...\r\n")); - - delay(1); - - my_SPI.begin(); - my_SPI.setBitOrder(MSBFIRST); - my_SPI.setDataMode(SPI_MODE0); - // init SPI slow mode - - my_SPI.setClockDivider(SPI_CLOCK_DIV64); // Slow! - - // release from reset - digitalWrite(reset_pin,HIGH); - - // Declick: Immediately switch analog off - write_register(SCI_VOL,0xffff); // VOL - - /* Declick: Slow sample rate for slow analog part startup */ - write_register(SCI_AUDATA,10); - - delay(100); - - /* Switch on the analog parts */ - write_register(SCI_VOL,0xfefe); // VOL - - //printf(("VS1003 still booting\r\n")); - - write_register(SCI_AUDATA,44101); // 44.1kHz stereo - - write_register(SCI_VOL,0x2020); // VOL - - // soft reset - write_register(SCI_MODE, (1<(pgm_read_word( register_names + reg )); - char extra_tab = strlen_P(name) < 5 ? '\t' : 0; - //printf(("%02x %S\t%c = 0x%02x\r\n"),reg,name,extra_tab,read_register(reg)); -} - -/****************************************************************************/ - -void VS1003::printDetails(void) const -{ - //printf(("VS1003 Configuration:\r\n")); - int i = 0; - while ( i <= SCI_num_registers ) - print_byte_register(i++); -} - -/****************************************************************************/ -void VS1003::modeSwitch(void) -{ - //GPIO_DDR - write_register(SCI_WRAMADDR, 0xc017); - write_register(SCI_WRAM, 0x0003); - //GPIO_ODATA - write_register(SCI_WRAMADDR, 0xc019); - write_register(SCI_WRAM, 0x0000); - - delay(100); - write_register(SCI_MODE, (1< - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as published by the Free Software Foundation. - - Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 - Home: http://www.serasidis.gr - email: avrsite@yahoo.gr - - 29 May 2015 - Added a fix for booting the VS1053B boards into mp3 decoding instead of booting into MIDI. - */ - -//This is an additional test line -#ifndef __VS1003_STM_H__ -#define __VS1003_STM_H__ - -// STL headers -// C headers -// Framework headers - -#include -#include -/** - * Driver for VS1003 - MP3 / WMA / MIDI Audio Codec Chip - * - * See http://www.vlsi.fi/en/products/vs1003.html - */ - -class VS1003 -{ -private: - uint8_t cs_pin; /**< Pin where CS line is connected */ - uint8_t dcs_pin; /**< Pin where DCS line is connected */ - uint8_t dreq_pin; /**< Pin where DREQ line is connected */ - uint8_t reset_pin; /**< Pin where RESET line is connected */ - uint8_t my_SPCR; /**< Value of the SPCR register how we like it. */ - uint8_t my_SPSR; /**< Value of the SPSR register how we like it. */ - SPIClass my_SPI; -public: - inline void await_data_request(void) const - { - while ( !digitalRead(dreq_pin) ); - } - - inline void control_mode_on(void) const - { - digitalWrite(dcs_pin,HIGH); - digitalWrite(cs_pin,LOW); - } - - inline void control_mode_off(void) const - { - digitalWrite(cs_pin,HIGH); - } - - inline void data_mode_on(void) const - { - digitalWrite(cs_pin,HIGH); - digitalWrite(dcs_pin,LOW); - } - - inline void data_mode_off(void) const - { - digitalWrite(dcs_pin,HIGH); - } - - uint16_t read_register(uint8_t _reg) const; - void write_register(uint8_t _reg,uint16_t _value) const; - void sdi_send_buffer(const uint8_t* data,size_t len); - void sdi_send_zeroes(size_t length); - void print_byte_register(uint8_t reg) const; - - /** - * Load a user code plugin - * - * @param buf Location of memory (in PROGMEM) where the code is - * @param len Number of words to load - */ - void loadUserCode(const uint16_t* buf, size_t len) const; - -//public: - - /** - * Constructor - * - * Only sets pin values. Doesn't do touch the chip. Be sure to call begin()! - */ - VS1003( uint8_t _cs_pin, uint8_t _dcs_pin, uint8_t _dreq_pin, uint8_t _reset_pin, SPIClass _spi = SPIClass(1)); - - /** - * Begin operation - * - * Sets pins correctly, and prepares SPI bus. - */ - void begin(void); - - /** - * Prepare to start playing - * - * Call this each time a new song starts. - */ - void startSong(void); - - /** - * Play a chunk of data. Copies the data to the chip. Blocks until complete. - * - * @param data Pointer to where the data lives - * @param len How many bytes of data to play - */ - void playChunk(const uint8_t* data, size_t len); - - /** - * Finish playing a song. - * - * Call this after the last playChunk call. - */ - void stopSong(void); - - /** - * Print configuration details - * - * Dumps all registers to stdout. Be sure to have stdout configured first - * (see fdevopen() in avr/io.h). - */ - void printDetails(void) const; - - /** - * - * - */ - void modeSwitch(void); - - /** - * Set the player volume - * - * @param vol Volume level from 0-255, lower is louder. - */ - void setVolume(uint8_t vol) const; - -}; - -#endif - From 263d3af2669524a217773848321f44f6f1961596 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sat, 6 Jun 2015 08:16:20 +1000 Subject: [PATCH 29/96] Added files missing from the last commit --- .../Serasidis_VS1003B_STM/keywords.txt | 30 ++ .../Serasidis_VS1003B_STM/library.properties | 8 + .../Serasidis_VS1003B_STM/src/VS1003_STM.cpp | 345 ++++++++++++++++++ .../Serasidis_VS1003B_STM/src/VS1003_STM.h | 145 ++++++++ 4 files changed, 528 insertions(+) create mode 100644 STM32F1/libraries/Serasidis_VS1003B_STM/keywords.txt create mode 100644 STM32F1/libraries/Serasidis_VS1003B_STM/library.properties create mode 100644 STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.cpp create mode 100644 STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.h diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/keywords.txt b/STM32F1/libraries/Serasidis_VS1003B_STM/keywords.txt new file mode 100644 index 0000000..e488f47 --- /dev/null +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/keywords.txt @@ -0,0 +1,30 @@ +####################################### +# Syntax Coloring Map For VS1003 +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +VS1003 KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### + +begin KEYWORD2 +startSong KEYWORD2 +playChunk KEYWORD2 +stopSong KEYWORD2 +printDetails KEYWORD2 +modeSwitch KEYWORD2 +setVolume KEYWORD2 + +####################################### +# Instances (KEYWORD2) +####################################### + + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/library.properties b/STM32F1/libraries/Serasidis_VS1003B_STM/library.properties new file mode 100644 index 0000000..67c5b61 --- /dev/null +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/library.properties @@ -0,0 +1,8 @@ +name=Serasidis_VS1003B_STM +version=1.0 +author=Andy Karpov - ported to STM by Vasillis Serasidis. Updated by Roger Clark +email= +sentence=VS1003 and VS1053 MP3, MP3 player and recorder +paragraph=VS1003 and VS1053 MP3, MP3 player and recorder +url= +architectures=STM32F1 diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.cpp b/STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.cpp new file mode 100644 index 0000000..2f80b19 --- /dev/null +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.cpp @@ -0,0 +1,345 @@ +/* + Copyright (C) 2012 Andy Karpov + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 + Home: http://www.serasidis.gr + email: avrsite@yahoo.gr + 29 May 2015 - Added a fix for booting the VS1053B boards into + mp3 decoding instead of booting into MID (modeSwitch function). + */ + +//#include +#include + +#define vs1003_chunk_size 32 +/****************************************************************************/ + +// VS1003 SCI Write Command byte is 0x02 +#define VS_WRITE_COMMAND 0x02 + +// VS1003 SCI Read COmmand byte is 0x03 +#define VS_READ_COMMAND 0x03 + +// SCI Registers + +const uint8_t SCI_MODE = 0x0; +const uint8_t SCI_STATUS = 0x1; +const uint8_t SCI_BASS = 0x2; +const uint8_t SCI_CLOCKF = 0x3; +const uint8_t SCI_DECODE_TIME = 0x4; +const uint8_t SCI_AUDATA = 0x5; +const uint8_t SCI_WRAM = 0x6; +const uint8_t SCI_WRAMADDR = 0x7; +const uint8_t SCI_HDAT0 = 0x8; +const uint8_t SCI_HDAT1 = 0x9; +const uint8_t SCI_AIADDR = 0xa; +const uint8_t SCI_VOL = 0xb; +const uint8_t SCI_AICTRL0 = 0xc; +const uint8_t SCI_AICTRL1 = 0xd; +const uint8_t SCI_AICTRL2 = 0xe; +const uint8_t SCI_AICTRL3 = 0xf; +const uint8_t SCI_num_registers = 0xf; + +// SCI_MODE bits + +const uint8_t SM_DIFF = 0; +const uint8_t SM_LAYER12 = 1; +const uint8_t SM_RESET = 2; +const uint8_t SM_OUTOFWAV = 3; +const uint8_t SM_EARSPEAKER_LO = 4; +const uint8_t SM_TESTS = 5; +const uint8_t SM_STREAM = 6; +const uint8_t SM_EARSPEAKER_HI = 7; +const uint8_t SM_DACT = 8; +const uint8_t SM_SDIORD = 9; +const uint8_t SM_SDISHARE = 10; +const uint8_t SM_SDINEW = 11; +const uint8_t SM_ADPCM = 12; +const uint8_t SM_ADCPM_HP = 13; +const uint8_t SM_LINE_IN = 14; + +// Register names + +const char reg_name_MODE[] = "MODE"; +const char reg_name_STATUS[] = "STATUS"; +const char reg_name_BASS[] = "BASS"; +const char reg_name_CLOCKF[] = "CLOCKF"; +const char reg_name_DECODE_TIME[] = "DECODE_TIME"; +const char reg_name_AUDATA[] = "AUDATA"; +const char reg_name_WRAM[] = "WRAM"; +const char reg_name_WRAMADDR[] = "WRAMADDR"; +const char reg_name_HDAT0[] = "HDAT0"; +const char reg_name_HDAT1[] = "HDAT1"; +const char reg_name_AIADDR[] = "AIADDR"; +const char reg_name_VOL[] = "VOL"; +const char reg_name_AICTRL0[] = "AICTRL0"; +const char reg_name_AICTRL1[] = "AICTRL1"; +const char reg_name_AICTRL2[] = "AICTRL2"; +const char reg_name_AICTRL3[] = "AICTRL3"; + +static PGM_P const register_names[] = +{ + reg_name_MODE, + reg_name_STATUS, + reg_name_BASS, + reg_name_CLOCKF, + reg_name_DECODE_TIME, + reg_name_AUDATA, + reg_name_WRAM, + reg_name_WRAMADDR, + reg_name_HDAT0, + reg_name_HDAT1, + reg_name_AIADDR, + reg_name_VOL, + reg_name_AICTRL0, + reg_name_AICTRL1, + reg_name_AICTRL2, + reg_name_AICTRL3, +}; + +/****************************************************************************/ + +inline void DMA1_CH3_Event() { + dma1_ch3_Active = 0; + dma_disable(DMA1, DMA_CH3); +} + +/****************************************************************************/ + +uint16_t VS1003::read_register(uint8_t _reg) const +{ + uint16_t result; + control_mode_on(); + delayMicroseconds(1); // tXCSS + my_SPI.transfer(VS_READ_COMMAND); // Read operation + my_SPI.transfer(_reg); // Which register + result = my_SPI.transfer(0xff) << 8; // read high byte + result |= my_SPI.transfer(0xff); // read low byte + delayMicroseconds(1); // tXCSH + await_data_request(); + control_mode_off(); + return result; +} + +/****************************************************************************/ + +void VS1003::write_register(uint8_t _reg,uint16_t _value) const +{ + control_mode_on(); + delayMicroseconds(1); // tXCSS + my_SPI.transfer(VS_WRITE_COMMAND); // Write operation + my_SPI.transfer(_reg); // Which register + my_SPI.transfer(_value >> 8); // Send hi byte + my_SPI.transfer(_value & 0xff); // Send lo byte + delayMicroseconds(1); // tXCSH + await_data_request(); + control_mode_off(); +} + +/****************************************************************************/ + +void VS1003::sdi_send_buffer(const uint8_t* data, size_t len) +{ + data_mode_on(); + while ( len ) + { + await_data_request(); + delayMicroseconds(3); + + size_t chunk_length = min(len,vs1003_chunk_size); + len -= chunk_length; + while ( chunk_length-- ) + my_SPI.transfer(*data++); + } + data_mode_off(); +} + +/****************************************************************************/ + +void VS1003::sdi_send_zeroes(size_t len) +{ + data_mode_on(); + while ( len ) + { + await_data_request(); + + size_t chunk_length = min(len,vs1003_chunk_size); + len -= chunk_length; + while ( chunk_length-- ) + my_SPI.transfer(0); + } + data_mode_off(); +} + +/****************************************************************************/ + +VS1003::VS1003( uint8_t _cs_pin, uint8_t _dcs_pin, uint8_t _dreq_pin, uint8_t _reset_pin, SPIClass _spiChan): + cs_pin(_cs_pin), dcs_pin(_dcs_pin), dreq_pin(_dreq_pin), reset_pin(_reset_pin), my_SPI(_spiChan) +{ +} + +/****************************************************************************/ + +void VS1003::begin(void) +{ + + // Keep the chip in reset until we are ready + pinMode(reset_pin,OUTPUT); + digitalWrite(reset_pin,LOW); + + // The SCI and SDI will start deselected + pinMode(cs_pin,OUTPUT); + digitalWrite(cs_pin,HIGH); + pinMode(dcs_pin,OUTPUT); + digitalWrite(dcs_pin,HIGH); + + // DREQ is an input + pinMode(dreq_pin,INPUT); + + + // Boot VS1003 + //printf(("Booting VS1003...\r\n")); + + delay(1); + + my_SPI.begin(); + my_SPI.setBitOrder(MSBFIRST); + my_SPI.setDataMode(SPI_MODE0); + // init SPI slow mode + + my_SPI.setClockDivider(SPI_CLOCK_DIV64); // Slow! + + // release from reset + digitalWrite(reset_pin,HIGH); + + // Declick: Immediately switch analog off + write_register(SCI_VOL,0xffff); // VOL + + /* Declick: Slow sample rate for slow analog part startup */ + write_register(SCI_AUDATA,10); + + delay(100); + + /* Switch on the analog parts */ + write_register(SCI_VOL,0xfefe); // VOL + + //printf(("VS1003 still booting\r\n")); + + write_register(SCI_AUDATA,44101); // 44.1kHz stereo + + write_register(SCI_VOL,0x2020); // VOL + + // soft reset + write_register(SCI_MODE, (1<(pgm_read_word( register_names + reg )); + char extra_tab = strlen_P(name) < 5 ? '\t' : 0; + //printf(("%02x %S\t%c = 0x%02x\r\n"),reg,name,extra_tab,read_register(reg)); +} + +/****************************************************************************/ + +void VS1003::printDetails(void) const +{ + //printf(("VS1003 Configuration:\r\n")); + int i = 0; + while ( i <= SCI_num_registers ) + print_byte_register(i++); +} + +/****************************************************************************/ +void VS1003::modeSwitch(void) +{ + //GPIO_DDR + write_register(SCI_WRAMADDR, 0xc017); + write_register(SCI_WRAM, 0x0003); + //GPIO_ODATA + write_register(SCI_WRAMADDR, 0xc019); + write_register(SCI_WRAM, 0x0000); + + delay(100); + write_register(SCI_MODE, (1< + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + version 2 as published by the Free Software Foundation. + + Ported to STM32F103 by Vassilis Serasidis on 21 May 2015 + Home: http://www.serasidis.gr + email: avrsite@yahoo.gr + + 29 May 2015 - Added a fix for booting the VS1053B boards into mp3 decoding instead of booting into MIDI. + */ + +//This is an additional test line +#ifndef __VS1003_STM_H__ +#define __VS1003_STM_H__ + +// STL headers +// C headers +// Framework headers + +#include +#include +/** + * Driver for VS1003 - MP3 / WMA / MIDI Audio Codec Chip + * + * See http://www.vlsi.fi/en/products/vs1003.html + */ + +class VS1003 +{ +private: + uint8_t cs_pin; /**< Pin where CS line is connected */ + uint8_t dcs_pin; /**< Pin where DCS line is connected */ + uint8_t dreq_pin; /**< Pin where DREQ line is connected */ + uint8_t reset_pin; /**< Pin where RESET line is connected */ + uint8_t my_SPCR; /**< Value of the SPCR register how we like it. */ + uint8_t my_SPSR; /**< Value of the SPSR register how we like it. */ + SPIClass my_SPI; + + inline void await_data_request(void) const + { + while ( !digitalRead(dreq_pin) ); + } + + inline void control_mode_on(void) const + { + digitalWrite(dcs_pin,HIGH); + digitalWrite(cs_pin,LOW); + } + + inline void control_mode_off(void) const + { + digitalWrite(cs_pin,HIGH); + } + + inline void data_mode_on(void) const + { + digitalWrite(cs_pin,HIGH); + digitalWrite(dcs_pin,LOW); + } + + inline void data_mode_off(void) const + { + digitalWrite(dcs_pin,HIGH); + } + + uint16_t read_register(uint8_t _reg) const; + void write_register(uint8_t _reg,uint16_t _value) const; + void sdi_send_buffer(const uint8_t* data,size_t len); + void sdi_send_zeroes(size_t length); + void print_byte_register(uint8_t reg) const; + + /** + * Load a user code plugin + * + * @param buf Location of memory (in PROGMEM) where the code is + * @param len Number of words to load + */ + void loadUserCode(const uint16_t* buf, size_t len) const; + +public: + + /** + * Constructor + * + * Only sets pin values. Doesn't do touch the chip. Be sure to call begin()! + */ + VS1003( uint8_t _cs_pin, uint8_t _dcs_pin, uint8_t _dreq_pin, uint8_t _reset_pin, SPIClass _spi = SPIClass(1)); + + /** + * Begin operation + * + * Sets pins correctly, and prepares SPI bus. + */ + void begin(void); + + /** + * Prepare to start playing + * + * Call this each time a new song starts. + */ + void startSong(void); + + /** + * Play a chunk of data. Copies the data to the chip. Blocks until complete. + * + * @param data Pointer to where the data lives + * @param len How many bytes of data to play + */ + void playChunk(const uint8_t* data, size_t len); + + /** + * Finish playing a song. + * + * Call this after the last playChunk call. + */ + void stopSong(void); + + /** + * Print configuration details + * + * Dumps all registers to stdout. Be sure to have stdout configured first + * (see fdevopen() in avr/io.h). + */ + void printDetails(void) const; + + /** + * + * + */ + void modeSwitch(void); + + /** + * Set the player volume + * + * @param vol Volume level from 0-255, lower is louder. + */ + void setVolume(uint8_t vol) const; + +}; + +#endif + From 76f90cca9e30bfae6358c74972593a58a7cccb67 Mon Sep 17 00:00:00 2001 From: Gabriel Staples Date: Sat, 6 Jun 2015 17:59:45 -0400 Subject: [PATCH 30/96] Update README.md --- README.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index aa8063e..eb25187 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,18 @@ -Arduino STM32 -============= +Arduino STM32 +============= -This repo contains, the "Hardware" files to support STM32 based boards on Arduino version 1.5.x to the latest version (currently 1.6.3) including LeafLabs Maple, and Maple mini, and other generic STM32F103 boards +##Background: +This repo contains, the "Hardware" files to support STM32 based boards on Arduino version 1.5.x to the latest version (currently 1.6.3) including LeafLabs Maple, and Maple mini, and other generic STM32F103 boards -Please read the wiki https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki for full details +##Support: +* Please read the wiki https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki for full details +* Based on https://github.com/bobc/maple-asp, which is in turn based on LibMaple by Leaflabs +* See also my blog: http://www.rogerclark.net/stm32f103-and-maple-maple-mini-with-arduino-1-5-x-ide/ +* **NEW: Main support site for using STM32 boards with the Arduino IDE: http://www.stm32duino.com/** -Based on https://github.com/bobc/maple-asp, which is in turn based on LibMaple by Leaflabs +##Additional Help & Links: +* https://www.hackster.io/rayburne/4-dollar-90-mips-32-bit-72-mhz-arm-arduino +* -See also my blog - -More information is available at http://www.rogerclark.net/stm32f103-and-maple-maple-mini-with-arduino-1-5-x-ide/ +##Purchase info: +[Ebay search for "arduino maple"](http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&LH_BIN=1&_nkw=arduino+maple&_sop=15) (currently costs <$5 with shipping) From 14525f4d7972064f3962e81c9a8e679c713b4bdb Mon Sep 17 00:00:00 2001 From: Gabriel Staples Date: Sat, 6 Jun 2015 18:10:24 -0400 Subject: [PATCH 31/96] Update README.md --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eb25187..c7ae598 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,15 @@ This repo contains, the "Hardware" files to support STM32 based boards on Arduin * Based on https://github.com/bobc/maple-asp, which is in turn based on LibMaple by Leaflabs * See also my blog: http://www.rogerclark.net/stm32f103-and-maple-maple-mini-with-arduino-1-5-x-ide/ * **NEW: Main support site for using STM32 boards with the Arduino IDE: http://www.stm32duino.com/** +* LeafLabs "Maple Language Reference:" http://leaflabs.com/docs/language.html -##Additional Help & Links: +**YouTube Videos:** +* 20141116: Arduino 1.5.8 IDE with STM32 board - https://www.youtube.com/watch?v=-zwGnytGT8M +* 20150413: STM32 for Arduino 1.6.2 or newer (update) - https://www.youtube.com/watch?v=TePglhSkghg +* 20150419: Uploading via USB to Serial to STM32F103 boards - https://www.youtube.com/watch?v=G_RF0a0hrak + +##Additional Links & Info: * https://www.hackster.io/rayburne/4-dollar-90-mips-32-bit-72-mhz-arm-arduino -* ##Purchase info: [Ebay search for "arduino maple"](http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&LH_BIN=1&_nkw=arduino+maple&_sop=15) (currently costs <$5 with shipping) From 41242ec4761e563384d91924b4fcbd86ed3376a7 Mon Sep 17 00:00:00 2001 From: Gabriel Staples Date: Sat, 6 Jun 2015 18:12:58 -0400 Subject: [PATCH 32/96] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c7ae598..7121d52 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ Arduino STM32 ============= -##Background: -This repo contains, the "Hardware" files to support STM32 based boards on Arduino version 1.5.x to the latest version (currently 1.6.3) including LeafLabs Maple, and Maple mini, and other generic STM32F103 boards +##Summary: +This repo contains, the "Hardware" files to support STM32 based boards on Arduino version 1.5.x to the latest version (currently 1.6.3) including [LeafLabs Maple, and Maple mini](http://www.leaflabs.com/about-maple/), and other generic STM32F103 boards ##Support: * Please read the wiki https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki for full details @@ -20,4 +20,4 @@ This repo contains, the "Hardware" files to support STM32 based boards on Arduin * https://www.hackster.io/rayburne/4-dollar-90-mips-32-bit-72-mhz-arm-arduino ##Purchase info: -[Ebay search for "arduino maple"](http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&LH_BIN=1&_nkw=arduino+maple&_sop=15) (currently costs <$5 with shipping) +* [Ebay search for "arduino maple"](http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&LH_BIN=1&_nkw=arduino+maple&_sop=15) (currently costs <$5 with shipping) From 0e91b3f2ce5c6b7f9842f31846e6778c341f3cc4 Mon Sep 17 00:00:00 2001 From: Gabriel Staples Date: Sat, 6 Jun 2015 18:22:05 -0400 Subject: [PATCH 33/96] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7121d52..d3f313e 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ This repo contains, the "Hardware" files to support STM32 based boards on Arduin * LeafLabs "Maple Language Reference:" http://leaflabs.com/docs/language.html **YouTube Videos:** -* 20141116: Arduino 1.5.8 IDE with STM32 board - https://www.youtube.com/watch?v=-zwGnytGT8M -* 20150413: STM32 for Arduino 1.6.2 or newer (update) - https://www.youtube.com/watch?v=TePglhSkghg -* 20150419: Uploading via USB to Serial to STM32F103 boards - https://www.youtube.com/watch?v=G_RF0a0hrak +* 20141116: [Arduino 1.5.8 IDE with STM32 board](https://www.youtube.com/watch?v=-zwGnytGT8M) +* 20150413: [STM32 for Arduino 1.6.2 or newer (update)](https://www.youtube.com/watch?v=TePglhSkghg) +* 20150419: [Uploading via USB to Serial to STM32F103 boards](https://www.youtube.com/watch?v=G_RF0a0hrak) ##Additional Links & Info: * https://www.hackster.io/rayburne/4-dollar-90-mips-32-bit-72-mhz-arm-arduino From d0a2c69acc19f0062e099ee0f50b9018d7f15288 Mon Sep 17 00:00:00 2001 From: Gabriel Staples Date: Sat, 6 Jun 2015 18:31:14 -0400 Subject: [PATCH 34/96] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d3f313e..6adeece 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ This repo contains, the "Hardware" files to support STM32 based boards on Arduin * See also my blog: http://www.rogerclark.net/stm32f103-and-maple-maple-mini-with-arduino-1-5-x-ide/ * **NEW: Main support site for using STM32 boards with the Arduino IDE: http://www.stm32duino.com/** * LeafLabs "Maple Language Reference:" http://leaflabs.com/docs/language.html +* LeafLabs "Maple-Arduino Compatibility:" http://leaflabs.com/docs/arduino-compatibility.html **YouTube Videos:** * 20141116: [Arduino 1.5.8 IDE with STM32 board](https://www.youtube.com/watch?v=-zwGnytGT8M) From ea665f4ac459bfe561eefd62ff9930652307d4b6 Mon Sep 17 00:00:00 2001 From: Gabriel Staples Date: Sat, 6 Jun 2015 18:38:47 -0400 Subject: [PATCH 35/96] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6adeece..f34adb9 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ Arduino STM32 ##Summary: This repo contains, the "Hardware" files to support STM32 based boards on Arduino version 1.5.x to the latest version (currently 1.6.3) including [LeafLabs Maple, and Maple mini](http://www.leaflabs.com/about-maple/), and other generic STM32F103 boards -##Support: -* Please read the wiki https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki for full details +##Background & Support: * Based on https://github.com/bobc/maple-asp, which is in turn based on LibMaple by Leaflabs +* **Please read the wiki (https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki) for full details** * See also my blog: http://www.rogerclark.net/stm32f103-and-maple-maple-mini-with-arduino-1-5-x-ide/ * **NEW: Main support site for using STM32 boards with the Arduino IDE: http://www.stm32duino.com/** * LeafLabs "Maple Language Reference:" http://leaflabs.com/docs/language.html From e53e45ab9c56970b371df182a4fd846f890209d0 Mon Sep 17 00:00:00 2001 From: Gabriel Staples Date: Sat, 6 Jun 2015 18:43:21 -0400 Subject: [PATCH 36/96] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f34adb9..65b32a7 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ Arduino STM32 ##Summary: This repo contains, the "Hardware" files to support STM32 based boards on Arduino version 1.5.x to the latest version (currently 1.6.3) including [LeafLabs Maple, and Maple mini](http://www.leaflabs.com/about-maple/), and other generic STM32F103 boards +***PRIMARY SUPPORT FORUM: http://www.stm32duino.com/*** + ##Background & Support: * Based on https://github.com/bobc/maple-asp, which is in turn based on LibMaple by Leaflabs * **Please read the wiki (https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki) for full details** From 12686bd98ab074cdde55a70e38ab736db6cdee32 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Mon, 8 Jun 2015 12:59:06 +1000 Subject: [PATCH 37/96] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 65b32a7..da6ba54 100644 --- a/README.md +++ b/README.md @@ -24,3 +24,5 @@ This repo contains, the "Hardware" files to support STM32 based boards on Arduin ##Purchase info: * [Ebay search for "arduino maple"](http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&LH_BIN=1&_nkw=arduino+maple&_sop=15) (currently costs <$5 with shipping) +* [AliExpress search for "leaflabs maple"] (http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20150607085526&SearchText=leaflabs+maple) + From a6c2d73a4353a4f707452eee8772ab32ad614e3f Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Mon, 8 Jun 2015 13:09:00 +1000 Subject: [PATCH 38/96] Update README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index da6ba54..229757e 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,17 @@ This repo contains, the "Hardware" files to support STM32 based boards on Arduin * https://www.hackster.io/rayburne/4-dollar-90-mips-32-bit-72-mhz-arm-arduino ##Purchase info: +###Entry level boards + * [Ebay search for "arduino maple"](http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&LH_BIN=1&_nkw=arduino+maple&_sop=15) (currently costs <$5 with shipping) * [AliExpress search for "leaflabs maple"] (http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20150607085526&SearchText=leaflabs+maple) +### Bigger boards (You need to load the stm32duino bootloader) + +Some supplier have this board e.g. + +*[ STM32F103VET ](http://www.ebay.com.au/itm/1PCS-STM32F103VET6-ARM-STM32-Minimum-System-Development-Board-Arduino-M77-/301433302819) + +There is also a STM32F103ZET board which also works, however they are not always available. They have been listed as "STM32F103ZET6 Minimum System Development Board ARM STM32 Cortex-m3 M75" + + From 5e0d577aac92780d49d3004fe64b881b45cdcb0e Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Mon, 8 Jun 2015 13:10:15 +1000 Subject: [PATCH 39/96] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 229757e..0c25ba8 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,6 @@ Some supplier have this board e.g. *[ STM32F103VET ](http://www.ebay.com.au/itm/1PCS-STM32F103VET6-ARM-STM32-Minimum-System-Development-Board-Arduino-M77-/301433302819) -There is also a STM32F103ZET board which also works, however they are not always available. They have been listed as "STM32F103ZET6 Minimum System Development Board ARM STM32 Cortex-m3 M75" - +*[There is also a STM32F103ZET board which also works, however they are not always available. They have been listed as "STM32F103ZET6 Minimum System Development Board ARM STM32 Cortex-m3 M75"] +(http://www.ebay.com.au/itm/1pcs-STM32F103ZET6-Minimum-System-Development-Board-ARM-STM32-Cortex-m3-M75-/291305557264) From ef03bcdfdc801398c6db89571667a1df8c7aa43b Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Mon, 8 Jun 2015 03:35:01 +1000 Subject: [PATCH 40/96] Removed old version of usb-bootloader and replaced with the stm32duino-bootloader as a submodule --- .gitmodules | 3 + STM32duino-bootloader | 1 + usb_bootloader/STM32F1/.gitignore | 6 - usb_bootloader/STM32F1/CREDITS | 12 - usb_bootloader/STM32F1/Makefile | 265 ----- usb_bootloader/STM32F1/README | 35 - .../STM32F1/binaries/maple_mini_boot20.bin | Bin 6948 -> 0 bytes usb_bootloader/STM32F1/common.h | 44 - usb_bootloader/STM32F1/config.h | 78 -- usb_bootloader/STM32F1/dfu.c | 475 -------- usb_bootloader/STM32F1/dfu.h | 128 --- usb_bootloader/STM32F1/flash/debug.cfg | 83 -- usb_bootloader/STM32F1/flash/flash.cfg | 91 -- usb_bootloader/STM32F1/flash/openocd.cfg | 73 -- usb_bootloader/STM32F1/flash/stm32.cfg | 72 -- usb_bootloader/STM32F1/flash/stm32loader.py | 435 ------- usb_bootloader/STM32F1/hardware.c | 285 ----- usb_bootloader/STM32F1/hardware.h | 190 ---- usb_bootloader/STM32F1/main.c | 84 -- usb_bootloader/STM32F1/stm32_lib/c_only_md.ld | 172 --- .../STM32F1/stm32_lib/c_only_md_RAM.ld | 169 --- .../STM32F1/stm32_lib/c_only_startup.s | 367 ------ .../STM32F1/stm32_lib/c_only_startup_user.s | 128 --- .../STM32F1/stm32_lib/cortexm3_macro.h | 53 - .../STM32F1/stm32_lib/cortexm3_macro.s | 312 ----- .../STM32F1/stm32_lib/stm32f10x_type.h | 80 -- usb_bootloader/STM32F1/usb.c | 501 -------- usb_bootloader/STM32F1/usb.h | 142 --- usb_bootloader/STM32F1/usb_callbacks.c | 31 - usb_bootloader/STM32F1/usb_descriptor.c | 236 ---- usb_bootloader/STM32F1/usb_descriptor.h | 40 - usb_bootloader/STM32F1/usb_lib/usb_conf.h | 86 -- usb_bootloader/STM32F1/usb_lib/usb_core.c | 1013 ----------------- usb_bootloader/STM32F1/usb_lib/usb_core.h | 247 ---- usb_bootloader/STM32F1/usb_lib/usb_def.h | 80 -- usb_bootloader/STM32F1/usb_lib/usb_init.c | 64 -- usb_bootloader/STM32F1/usb_lib/usb_init.h | 49 - usb_bootloader/STM32F1/usb_lib/usb_int.c | 192 ---- usb_bootloader/STM32F1/usb_lib/usb_int.h | 33 - usb_bootloader/STM32F1/usb_lib/usb_lib.h | 37 - usb_bootloader/STM32F1/usb_lib/usb_mem.c | 73 -- usb_bootloader/STM32F1/usb_lib/usb_mem.h | 32 - usb_bootloader/STM32F1/usb_lib/usb_regs.c | 748 ------------ usb_bootloader/STM32F1/usb_lib/usb_regs.h | 619 ---------- usb_bootloader/STM32F1/usb_lib/usb_type.h | 72 -- 45 files changed, 4 insertions(+), 7932 deletions(-) create mode 160000 STM32duino-bootloader delete mode 100644 usb_bootloader/STM32F1/.gitignore delete mode 100644 usb_bootloader/STM32F1/CREDITS delete mode 100644 usb_bootloader/STM32F1/Makefile delete mode 100644 usb_bootloader/STM32F1/README delete mode 100644 usb_bootloader/STM32F1/binaries/maple_mini_boot20.bin delete mode 100644 usb_bootloader/STM32F1/common.h delete mode 100644 usb_bootloader/STM32F1/config.h delete mode 100644 usb_bootloader/STM32F1/dfu.c delete mode 100644 usb_bootloader/STM32F1/dfu.h delete mode 100644 usb_bootloader/STM32F1/flash/debug.cfg delete mode 100644 usb_bootloader/STM32F1/flash/flash.cfg delete mode 100644 usb_bootloader/STM32F1/flash/openocd.cfg delete mode 100644 usb_bootloader/STM32F1/flash/stm32.cfg delete mode 100644 usb_bootloader/STM32F1/flash/stm32loader.py delete mode 100644 usb_bootloader/STM32F1/hardware.c delete mode 100644 usb_bootloader/STM32F1/hardware.h delete mode 100644 usb_bootloader/STM32F1/main.c delete mode 100644 usb_bootloader/STM32F1/stm32_lib/c_only_md.ld delete mode 100644 usb_bootloader/STM32F1/stm32_lib/c_only_md_RAM.ld delete mode 100644 usb_bootloader/STM32F1/stm32_lib/c_only_startup.s delete mode 100644 usb_bootloader/STM32F1/stm32_lib/c_only_startup_user.s delete mode 100644 usb_bootloader/STM32F1/stm32_lib/cortexm3_macro.h delete mode 100644 usb_bootloader/STM32F1/stm32_lib/cortexm3_macro.s delete mode 100644 usb_bootloader/STM32F1/stm32_lib/stm32f10x_type.h delete mode 100644 usb_bootloader/STM32F1/usb.c delete mode 100644 usb_bootloader/STM32F1/usb.h delete mode 100644 usb_bootloader/STM32F1/usb_callbacks.c delete mode 100644 usb_bootloader/STM32F1/usb_descriptor.c delete mode 100644 usb_bootloader/STM32F1/usb_descriptor.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_conf.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_core.c delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_core.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_def.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_init.c delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_init.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_int.c delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_int.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_lib.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_mem.c delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_mem.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_regs.c delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_regs.h delete mode 100644 usb_bootloader/STM32F1/usb_lib/usb_type.h diff --git a/.gitmodules b/.gitmodules index b9d9d26..f204a0e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "tools/src/dfu-util"] path = tools/src/dfu-util url = https://gitorious.org/dfu-util/dfu-util.git +[submodule "STM32duino-bootloader"] + path = STM32duino-bootloader + url = https://github.com/rogerclarkmelbourne/STM32duino-bootloader.git diff --git a/STM32duino-bootloader b/STM32duino-bootloader new file mode 160000 index 0000000..f883a67 --- /dev/null +++ b/STM32duino-bootloader @@ -0,0 +1 @@ +Subproject commit f883a676c42e2c264e00021173e7bbbf82772f95 diff --git a/usb_bootloader/STM32F1/.gitignore b/usb_bootloader/STM32F1/.gitignore deleted file mode 100644 index 0799f56..0000000 --- a/usb_bootloader/STM32F1/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.dep -TAGS -tags -cscope.out -build -*~ diff --git a/usb_bootloader/STM32F1/CREDITS b/usb_bootloader/STM32F1/CREDITS deleted file mode 100644 index 4318fff..0000000 --- a/usb_bootloader/STM32F1/CREDITS +++ /dev/null @@ -1,12 +0,0 @@ -This is at least a partial credits-file of people that have -contributed to the Maple bootloader. It is formatted the same way the -Linux kernel CREDITS file is structured: sorted by name and formatted -for easy processing. - -The fields are: name (N), email (E), web-address (W), description (D). - ----------- - -N: Tormod Volden -E: debian.tormod@gmail.com -D: Fixes for DFU compliance diff --git a/usb_bootloader/STM32F1/Makefile b/usb_bootloader/STM32F1/Makefile deleted file mode 100644 index ce17743..0000000 --- a/usb_bootloader/STM32F1/Makefile +++ /dev/null @@ -1,265 +0,0 @@ -# Makefile skeleton adapted from Peter Harrison's - www.micromouse.com - -# MCU name and submodel -MCU = cortex-m3 -SUBMDL = stm32f103 - -# toolchain (using code sourcery now) -TCHAIN = arm-none-eabi -THUMB = -mthumb -THUMB_IW = -mthumb-interwork - -# Target file name (without extension). -BUILDDIR = build -TARGET = $(BUILDDIR)/maple_boot - -ST_LIB = stm32_lib -ST_USB = usb_lib - -# Optimization level [0,1,2,3,s] -OPT ?= s -DEBUG = -#DEBUG = dwarf-2 - -INCDIRS = ./$(ST_LIB) ./$(ST_USB) - -CFLAGS = $(DEBUG) -CFLAGS += -O$(OPT) -CFLAGS += -ffunction-sections -fdata-sections -CFLAGS += -Wall -Wimplicit -CFLAGS += -Wcast-align -CFLAGS += -Wpointer-arith -Wswitch -CFLAGS += -Wredundant-decls -Wreturn-type -Wshadow -Wunused -CFLAGS += -Wa,-adhlns=$(BUILDDIR)/$(subst $(suffix $<),.lst,$<) -CFLAGS += $(patsubst %,-I%,$(INCDIRS)) - -# Aeembler Flags -ASFLAGS = -Wa,-adhlns=$(BUILDDIR)/$(<:.s=.lst)#,--g$(DEBUG) - -LDFLAGS = -nostartfiles -Wl,-Map=$(TARGET).map,--cref,--gc-sections -LDFLAGS += -lc -lgcc - -# Set the linker script -LDFLAGS +=-T$(ST_LIB)/c_only_md.ld - -# Define programs and commands. -SHELL = sh -CC = $(TCHAIN)-gcc -CPP = $(TCHAIN)-g++ -AR = $(TCHAIN)-ar -OBJCOPY = $(TCHAIN)-objcopy -OBJDUMP = $(TCHAIN)-objdump -SIZE = $(TCHAIN)-size -NM = $(TCHAIN)-nm -REMOVE = rm -f -REMOVEDIR = rm -r -COPY = cp - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = "-------- begin --------" -MSG_ETAGS = Created TAGS File -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_FLASH = Creating load file for Flash: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling C: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d -ALL_CFLAGS = -mcpu=$(MCU) $(THUMB_IW) -I. $(CFLAGS) $(TARGETFLAGS) $(GENDEPFLAGS) -ALL_ASFLAGS = -mcpu=$(MCU) $(THUMB_IW) -I. -x assembler-with-cpp $(ASFLAGS) - -# --------------------------------------------- # -# file management -ASRC = $(ST_LIB)/c_only_startup.s $(ST_LIB)/cortexm3_macro.s - -STM32SRCS = - -_STM32USBSRCS = usb_regs.c \ -usb_int.c \ -usb_init.c \ -usb_core.c \ -usb_mem.c - -STM32USBSRCS = $(patsubst %, $(ST_USB)/%,$(_STM32USBSRCS)) - -SRCS = usb.c usb_callbacks.c usb_descriptor.c main.c hardware.c dfu.c - - -SRC = $(SRCS) $(STM32SRCS) $(STM32USBSRCS) - -# Define all object files. -_COBJ = $(SRC:.c=.o) -_AOBJ = $(ASRC:.s=.o) -COBJ = $(patsubst %, $(BUILDDIR)/%,$(_COBJ)) -AOBJ = $(patsubst %, $(BUILDDIR)/%,$(_AOBJ)) - -# Define all listing files. -_LST = $(ASRC:.s=.lst) -_LST += $(SRC:.c=.lst) -LST = $(patsubst %, $(BUILDDIR)/%,$(_LST)) - -# Display size of file. -HEXSIZE = $(SIZE) --target=binary $(TARGET).hex -ELFSIZE = $(SIZE) -A $(TARGET).elf - -# go! -all: begin gccversion build sizeafter finished end -maple-mini: begin gccversion build_maple-mini sizeafter finished copy_maple_mini end -maple-rev3: begin gccversion build_maple-rev3 sizeafter finished end - -build: elf bin lss sym - - -build_maple-mini: TARGETFLAGS= -DTARGET_MAPLE_MINI -build_maple-mini: elf bin lss sym -copy_maple_mini: - @echo - @echo "Copying to binaries folder" - @echo - cp $(TARGET).bin binaries/maple_mini_boot20.bin - @echo - -build_maple-rev3: TARGETFLAGS= -DTARGET_MAPLE_REV3 -build_maple-rev3: elf bin lss sym - -bin: $(TARGET).bin -elf: $(TARGET).elf -lss: $(TARGET).lss -sym: $(TARGET).sym -dfu: $(TARGET).bin - sudo dfu-util -d 0110:1001 -a 0 -D $(TARGET).bin - -begin: - mkdir -p build/stm32_lib - mkdir -p build/usb_lib - @echo -- - @echo $(MSG_BEGIN) - @echo $(COBJ) - -finished: - @echo $(MSG_ERRORS_NONE) -tags: - etags `find . -name "*.c" -o -name "*.cpp" -o -name "*.h"` - @echo $(MSG_ETAGS) -end: - @echo $(MSG_END) - @echo -sizeafter: - @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi -gccversion: - @$(CC) --version - -program: - @echo "Flash-programming with OpenOCD" - cp $(TARGET).bin flash/tmpflash.bin - cd flash && openocd -f flash.cfg - -program_serial: - @echo "Flash-programming with stm32loader.py" - ./flash/stm32loader.py -p /dev/ttyUSB0 -evw build/maple_boot.bin - -debug: $(TARGET).bin - @echo "Flash-programming with OpenOCD - DEBUG" - cp $(TARGET).bin flash/tmpflash.bin - cd flash && openocd -f debug.cfg - -install: $(TARGET).bin - cp $(TARGET).bin build/main.bin - openocd -f flash/perry_flash.cfg - -run: $(TARGET).bin - openocd -f flash/run.cfg - -# Create final output file (.hex) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O binary $< $@ - -# Create final output file (.bin) from ELF output file. -%.bin: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O binary $< $@ - - -# Create extended listing file from ELF output file. -# testing: option -C -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S -D $< > $@ - - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - -# Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(COBJ) $(AOBJ) - -%.elf: $(COBJ) $(AOBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(THUMB) $(ALL_CFLAGS) $(AOBJ) $(COBJ) --output $@ $(LDFLAGS) - -# Compile: create object files from C source files. ARM/Thumb -$(COBJ) : $(BUILDDIR)/%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(THUMB) $(ALL_CFLAGS) $< -o $@ - -# Assemble: create object files from assembler source files. ARM/Thumb -$(AOBJ) : $(BUILDDIR)/%.o : %.s - @echo - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(THUMB) $(ALL_ASFLAGS) $< -o $@ - -clean: begin clean_list finished end - -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).bin - $(REMOVE) $(TARGET).obj - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).obj - $(REMOVE) $(TARGET).a90 - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lnk - $(REMOVE) $(TARGET).lss - $(REMOVE) $(COBJ) - $(REMOVE) $(AOBJ) - $(REMOVE) $(LST) - $(REMOVE) flash/tmpflash.bin -# $(REMOVE) $(SRC:.c=.s) -# $(REMOVE) $(SRC:.c=.d) - $(REMOVE) .dep/* - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - - -# Listing of phony targets. -.PHONY : all begin finish tags end sizeafter gccversion \ -build elf hex bin lss sym clean clean_list program cscope - -cscope: - rm -rf *.cscope - find . -iname "*.[hcs]" | grep -v examples | xargs cscope -R -b - diff --git a/usb_bootloader/STM32F1/README b/usb_bootloader/STM32F1/README deleted file mode 100644 index 4aaac53..0000000 --- a/usb_bootloader/STM32F1/README +++ /dev/null @@ -1,35 +0,0 @@ - -FILES ------------------------------------------------------------------------- - -stm32lib/* - - all the (possibly consolidated) stm32 lib and usb example code - -usb.c - - USB-specific hardware setup. Interrupts, clocks, etc. handling USB when - not "Attached". some low-level callbacks (low power mode, init, reset, - resume, etc). - -usb_callbacks.c - - aka endpoints: handling data transfer when "Configured". calls out to - application specific callbacks (i.e. DFU). - -usb_descriptor.c - - aka application descriptor; big static struct and callbacks for sending - the descriptor. - -main.c - - main loop and calling any hardware init stuff. timing hacks for EEPROM - writes not to block usb interrupts. logic to handle 2 second timeout then - jump to user code. - -hardware.c - - init routines to setup clocks, interrupts, also destructor functions. - does not include USB stuff. EEPROM read/write functions. - -dfu.c - - mostly the giant FSM case switch, also some USB endpoint callbacks - -TODO -------------------------------------------------------------------------- - - * pack the structs - * use sizeof() for usb application descriptor once structs are packed diff --git a/usb_bootloader/STM32F1/binaries/maple_mini_boot20.bin b/usb_bootloader/STM32F1/binaries/maple_mini_boot20.bin deleted file mode 100644 index b28cfcb39c045e42fdced1e408c99ff2e59de72d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6948 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 diff --git a/usb_bootloader/STM32F1/common.h b/usb_bootloader/STM32F1/common.h deleted file mode 100644 index ba322df..0000000 --- a/usb_bootloader/STM32F1/common.h +++ /dev/null @@ -1,44 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -/** - * @file common.h - * - * @brief toplevel include for bootloader source files - * - * - */ - -#ifndef __COMMON_H -#define __COMMON_H - -#include "config.h" -#include "hardware.h" -#include "stm32f10x_type.h" -#include "cortexm3_macro.h" -#include "usb.h" - -typedef void (*FuncPtr)(void); - -#endif diff --git a/usb_bootloader/STM32F1/config.h b/usb_bootloader/STM32F1/config.h deleted file mode 100644 index 69b6d5d..0000000 --- a/usb_bootloader/STM32F1/config.h +++ /dev/null @@ -1,78 +0,0 @@ -/****************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - *****************************************************************************/ - -/** - * @file config.h - * - * @brief bootloader settings and macro defines - * - * - */ - -#ifndef __CONFIG_H -#define __CONFIG_H - -#include "common.h" - -/* Speed controls for strobing the LED pin */ -#define BLINK_FAST 0x50000 -#define BLINK_SLOW 0x100000 - -/* On the Mini, LED is PB1 */ -#if defined(TARGET_MAPLE_MINI) -#define LED_BANK GPIOB -#define LED 1 -#define LED_BANK_CR GPIO_CRL(LED_BANK) -#define LED_CR_MASK 0xFFFFFF0F -#define LED_CR_MODE 0x00000010 -#define RCC_APB2ENR_LED 0x00000008 /* enable PB */ - -/* On the Mini, BUT is PB8 */ -#define BUTTON_BANK GPIOB -#define BUTTON 8 -#define BUT_BANK_CR GPIO_CRH(BUTTON_BANK) -#define BUT_CR_MASK 0xFFFFFFF0 -#define BUT_CR_OUTPUT_IN 0x00000004 -#define RCC_APB2ENR_BUT 0x00000008 /* enable PB */ -#else - -#error "No config for this target" - -#endif - -#define STARTUP_BLINKS 5 -#define BOOTLOADER_WAIT 6 - -#define USER_CODE_RAM ((u32)0x20000C00) -#define RAM_END ((u32)0x20005000) -#define USER_CODE_FLASH0X8005000 ((u32)0x08005000) -#define USER_CODE_FLASH0X8002000 ((u32)0x08002000) -#define FLASH_END ((u32)0x08020000) - -#define VEND_ID0 0xAF -#define VEND_ID1 0x1E -#define PROD_ID0 0x03 -#define PROD_ID1 0x00 - -#endif diff --git a/usb_bootloader/STM32F1/dfu.c b/usb_bootloader/STM32F1/dfu.c deleted file mode 100644 index 14eef74..0000000 --- a/usb_bootloader/STM32F1/dfu.c +++ /dev/null @@ -1,475 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -/** - * @file dfu.c - * - * @brief The principle dfu state machine as well as the data - * transfer callbacks accessed by the usb library - * - * - */ - -#include "dfu.h" -#include "usb.h" - -/* DFU globals */ -static volatile u32 userAppAddr = USER_CODE_RAM; /* default RAM user code location */ -static volatile u32 userAppEnd = RAM_END; -static volatile DFUStatus dfuAppStatus; /* includes state */ -volatile dfuUploadTypes_t userUploadType = DFU_UPLOAD_NONE; -volatile bool dfuBusy = FALSE; - -static volatile u8 recvBuffer[wTransferSize] __attribute__((aligned(4))); -static volatile u32 userFirmwareLen = 0; -static volatile u16 thisBlockLen = 0; -static volatile u16 uploadBlockLen = 0; - - -volatile PLOT code_copy_lock; - -/* todo: force dfu globals to be singleton to avoid re-inits? */ -void dfuInit(void) { - dfuAppStatus.bStatus = OK; - dfuAppStatus.bwPollTimeout0 = 0x00; - dfuAppStatus.bwPollTimeout1 = 0x00; - dfuAppStatus.bwPollTimeout2 = 0x00; - dfuAppStatus.bState = dfuIDLE; - dfuAppStatus.iString = 0x00; /* all strings must be 0x00 until we make them! */ - userFirmwareLen = 0; - thisBlockLen = 0;; - userAppAddr = USER_CODE_RAM; /* default RAM user code location */ - userAppEnd = RAM_END; - userUploadType=DFU_UPLOAD_NONE; - code_copy_lock = WAIT; - dfuBusy = FALSE; -} - -bool dfuUpdateByRequest(void) { - /* were using the global pInformation struct from usb_lib here, - see comment in maple_dfu.h around DFUEvent struct */ - dfuBusy = TRUE; - - u8 startState = dfuAppStatus.bState; - dfuAppStatus.bStatus = OK; - /* often leaner to nest if's then embed a switch/case */ - if (startState == dfuIDLE) { - /* device running inside DFU mode */ - dfuBusy = TRUE; // signals the main loop to defer to the dfu write-loop - - if (pInformation->USBbRequest == DFU_DNLOAD) { - - if (pInformation->USBwLengths.w > 0) { - userFirmwareLen = 0; - dfuAppStatus.bState = dfuDNLOAD_SYNC; - switch(pInformation->Current_AlternateSetting) - { - /* - Roger Clark. removed upload to RAM option - case 0: - userAppAddr = USER_CODE_RAM; - userUploadType = DFU_UPLOAD_RAM; - break; - */ - case 1: - userAppAddr = USER_CODE_FLASH0X8005000; - userUploadType = DFU_UPLOAD_FLASH_0X8005000; - - /* make sure the flash is setup properly, unlock it */ - setupFLASH(); - flashUnlock(); - // Clear lower memory so that we can check on cold boot, whether the last upload was to 0x8002000 or 0x8005000 - flashErasePage((u32)USER_CODE_FLASH0X8002000); - break; - case 2: - userUploadType = DFU_UPLOAD_FLASH_0X8002000; - userAppAddr = USER_CODE_FLASH0X8002000; - /* make sure the flash is setup properly, unlock it */ - setupFLASH(); - flashUnlock(); - break; - default: - // Roger Clark. Report error - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errWRITE; - break; - } - } else { - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errNOTDONE; - } - } else if (pInformation->USBbRequest == DFU_UPLOAD) { - dfuAppStatus.bState = dfuUPLOAD_IDLE; - /* record length of first block for calculating target - address from wValue in consecutive blocks */ - uploadBlockLen = pInformation->USBwLengths.w; - thisBlockLen = uploadBlockLen; /* for this first block as well */ - /* calculate where the data should be copied from */ - userFirmwareLen = uploadBlockLen * pInformation->USBwValue; - switch(pInformation->Current_AlternateSetting) - { - /* - case 0: - userAppAddr = USER_CODE_RAM; - userAppEnd = RAM_END; - */ - case 1: - userAppAddr = USER_CODE_FLASH0X8005000; - userAppEnd = FLASH_END; - break; - case 2: - userAppAddr = USER_CODE_FLASH0X8002000; - userAppEnd = FLASH_END; - break; - default: - // Roger Clark. - // Changed this to report error that its unable to write to this memory - // However the code should never get here as only AlternateSetting 1 and 2 are allowed (see above) - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errWRITE; - break; - } - } else if (pInformation->USBbRequest == DFU_ABORT) { - dfuAppStatus.bState = dfuIDLE; - dfuAppStatus.bStatus = OK; /* are we really ok? we were just aborted */ - } else if (pInformation->USBbRequest == DFU_GETSTATUS) { - dfuAppStatus.bState = dfuIDLE; - } else if (pInformation->USBbRequest == DFU_GETSTATE) { - dfuAppStatus.bState = dfuIDLE; - } else { - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errSTALLEDPKT; - } - - } else if (startState == dfuDNLOAD_SYNC) { - /* device received block, waiting for DFU_GETSTATUS request */ - - if (pInformation->USBbRequest == DFU_GETSTATUS) { - /* todo, add routine to wait for last block write to finish */ - - /* Roger Clark. Commented out code associated with RAM upload - - if (userUploadType == DFU_UPLOAD_RAM) - { - if (code_copy_lock == WAIT) { - code_copy_lock = BEGINNING; - dfuAppStatus.bwPollTimeout0 = 0x20; // 32 ms - dfuAppStatus.bwPollTimeout1 = 0x00; - dfuAppStatus.bState = dfuDNBUSY; - - } else if (code_copy_lock == BEGINNING) { - dfuAppStatus.bState = dfuDNLOAD_SYNC; - - } else if (code_copy_lock == MIDDLE) { - dfuAppStatus.bState = dfuDNLOAD_SYNC; - - } else if (code_copy_lock == END) { - dfuAppStatus.bwPollTimeout0 = 0x00; - code_copy_lock = WAIT; - dfuAppStatus.bState = dfuDNLOAD_IDLE; - } - - } - else - */ - { - dfuAppStatus.bState = dfuDNLOAD_IDLE; - dfuCopyBufferToExec(); - } - - } else if (pInformation->USBbRequest == DFU_GETSTATE) { - dfuAppStatus.bState = dfuDNLOAD_SYNC; - } else { - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errSTALLEDPKT; - } - - } else if (startState == dfuDNBUSY) { - /* if were actually done writing, goto sync, else stay busy */ - if (code_copy_lock == END) { - dfuAppStatus.bwPollTimeout0 = 0x00; - code_copy_lock = WAIT; - dfuAppStatus.bState = dfuDNLOAD_IDLE; - } else { - dfuAppStatus.bState = dfuDNBUSY; - } - - } else if (startState == dfuDNLOAD_IDLE) { - /* device is expecting dfu_dnload requests */ - if (pInformation->USBbRequest == DFU_DNLOAD) { - if (pInformation->USBwLengths.w > 0) { - dfuAppStatus.bState = dfuDNLOAD_SYNC; - } else { - /* todo, support "disagreement" if device expects more data than this */ - dfuAppStatus.bState = dfuMANIFEST_SYNC; - - /* relock the flash */ - flashLock(); - } - } else if (pInformation->USBbRequest == DFU_ABORT) { - dfuAppStatus.bState = dfuIDLE; - } else if (pInformation->USBbRequest == DFU_GETSTATUS) { - dfuAppStatus.bState = dfuIDLE; - } else if (pInformation->USBbRequest == DFU_GETSTATE) { - dfuAppStatus.bState = dfuIDLE; - } else { - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errSTALLEDPKT; - } - - } else if (startState == dfuMANIFEST_SYNC) { - /* device has received last block, waiting DFU_GETSTATUS request */ - - if (pInformation->USBbRequest == DFU_GETSTATUS) { - dfuAppStatus.bState = dfuMANIFEST_WAIT_RESET; - dfuAppStatus.bStatus = OK; - } else if (pInformation->USBbRequest == DFU_GETSTATE) { - dfuAppStatus.bState = dfuMANIFEST_SYNC; - } else { - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errSTALLEDPKT; - } - - } else if (startState == dfuMANIFEST) { - /* device is in manifestation phase */ - - /* should never receive request while in manifest! */ - dfuAppStatus.bState = dfuMANIFEST_WAIT_RESET; - dfuAppStatus.bStatus = OK; - - } else if (startState == dfuMANIFEST_WAIT_RESET) { - /* device has programmed new firmware but needs external - usb reset or power on reset to run the new code */ - - /* consider timing out and self-resetting */ - dfuAppStatus.bState = dfuMANIFEST_WAIT_RESET; - - } else if (startState == dfuUPLOAD_IDLE) { - /* device expecting further dfu_upload requests */ - - if (pInformation->USBbRequest == DFU_UPLOAD) { - if (pInformation->USBwLengths.w > 0) { - /* check that this is not the last possible block */ - userFirmwareLen = uploadBlockLen * pInformation->USBwValue; - if (userAppAddr + userFirmwareLen + uploadBlockLen <= userAppEnd) { - thisBlockLen = uploadBlockLen; - dfuAppStatus.bState = dfuUPLOAD_IDLE; - } else { - /* if above comparison was just equal, thisBlockLen becomes zero - next time when USBWValue has been increased by one */ - thisBlockLen = userAppEnd - userAppAddr - userFirmwareLen; - /* check for overflow due to USBwValue out of range */ - if (thisBlockLen >= pInformation->USBwLengths.w) { - thisBlockLen = 0; - } - dfuAppStatus.bState = dfuIDLE; - } - } else { - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errNOTDONE; - } - } else if (pInformation->USBbRequest == DFU_ABORT) { - dfuAppStatus.bState = dfuIDLE; - } else if (pInformation->USBbRequest == DFU_GETSTATUS) { - dfuAppStatus.bState = dfuUPLOAD_IDLE; - } else if (pInformation->USBbRequest == DFU_GETSTATE) { - dfuAppStatus.bState = dfuUPLOAD_IDLE; - } else { - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errSTALLEDPKT; - } - - - } else if (startState == dfuERROR) { - /* status is in error, awaiting DFU_CLRSTATUS request */ - - if (pInformation->USBbRequest == DFU_GETSTATUS) { - /* todo, add routine to wait for last block write to finish */ - dfuAppStatus.bState = dfuERROR; - } else if (pInformation->USBbRequest == DFU_GETSTATE) { - dfuAppStatus.bState = dfuERROR; - } else if (pInformation->USBbRequest == DFU_CLRSTATUS) { - /* todo handle any cleanup we need here */ - dfuAppStatus.bState = dfuIDLE; - dfuAppStatus.bStatus = OK; - } else { - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errSTALLEDPKT; - } - - } else { - /* some kind of error... */ - dfuAppStatus.bState = dfuERROR; - dfuAppStatus.bStatus = errSTALLEDPKT; - } - - if (dfuAppStatus.bStatus == OK) { - return TRUE; - } else { - return FALSE; - } -} - -void dfuUpdateByReset(void) { - u8 startState = dfuAppStatus.bState; - userFirmwareLen = 0; - - if (startState == appDETACH) { - dfuAppStatus.bState = dfuIDLE; - dfuAppStatus.bStatus = OK; - - nvicDisableInterrupts(); - usbEnbISR(); - - } else if (startState == appIDLE || startState == dfuIDLE) { - /* do nothing...might be normal usb bus activity */ - } else { - /* we reset from the dfu, reset everything and startover, - which is the correct operation if this is an erroneous - event or properly following a MANIFEST */ - dfuAppStatus.bState = dfuIDLE; - dfuAppStatus.bStatus = OK; - - systemHardReset(); - } -} - -void dfuUpdateByTimeout(void) { -} - -u8 *dfuCopyState(u16 length) { - if (length == 0) { - pInformation->Ctrl_Info.Usb_wLength = 1; - return NULL; - } else { - return (&(dfuAppStatus.bState)); - } -} - -u8 *dfuCopyStatus(u16 length) { - if (length == 0) { - pInformation->Ctrl_Info.Usb_wLength = 6; - return NULL; - } else { - return (u8*)(&dfuAppStatus); - } -} - - -u8 *dfuCopyDNLOAD(u16 length) { - if (length == 0) { - pInformation->Ctrl_Info.Usb_wLength = pInformation->USBwLengths.w - pInformation->Ctrl_Info.Usb_wOffset; - thisBlockLen = pInformation->USBwLengths.w; - return NULL; - } else { - return ((u8 *)recvBuffer + pInformation->Ctrl_Info.Usb_wOffset); - } -} - -u8 *dfuCopyUPLOAD(u16 length) { - if (length == 0) { - pInformation->Ctrl_Info.Usb_wLength = thisBlockLen - pInformation->Ctrl_Info.Usb_wOffset; - return NULL; - } else { - return((u8*) userAppAddr + userFirmwareLen + pInformation->Ctrl_Info.Usb_wOffset); - } -} - -void dfuCopyBufferToExec() { - int i; - u32 *userSpace; - -/* Roger Clark. - Commented out code associated with upload to RAM - - if (userUploadType == DFU_UPLOAD_RAM) - { - userSpace = (u32 *)(USER_CODE_RAM + userFirmwareLen); - // we dont need to handle when thisBlock len is not divisible by 4, - // since the linker will align everything to 4B anyway - for (i = 0; i < thisBlockLen; i = i + 4) { - *userSpace++ = *(u32 *)(recvBuffer + i); - } - } - else -*/ - { - if (userUploadType == DFU_UPLOAD_FLASH_0X8005000) - { - userSpace = (u32 *)(USER_CODE_FLASH0X8005000 + userFirmwareLen); - } - else - { - userSpace = (u32 *)(USER_CODE_FLASH0X8002000 + userFirmwareLen); - } - - flashErasePage((u32)(userSpace)); - - for (i = 0; i < thisBlockLen; i = i + 4) { - flashWriteWord((u32)(userSpace++), *(u32 *)(recvBuffer +i)); - } - - } - userFirmwareLen += thisBlockLen; - - thisBlockLen = 0; -} - -u8 dfuGetState(void) { - return dfuAppStatus.bState; -} - -void dfuSetState(u8 newState) { - dfuAppStatus.bState = newState; -} - -bool dfuUploadStarted() { - return dfuBusy; -} - -void dfuFinishUpload() { - while (1) - { - __asm("nop"); - -/* Roger Clark. - Commented out code associated with upload to RAM - - if (userUploadType==DFU_UPLOAD_RAM) - { - if (code_copy_lock == BEGINNING) { - code_copy_lock = MIDDLE; - strobePin(LED_BANK, LED, 2, 0x1000); - dfuCopyBufferToExec(); - strobePin(LED_BANK, LED, 2, 0x500); - code_copy_lock = END; - } - } - -*/ - - /* otherwise do nothing, dfu state machine resets itself */ - } -} - diff --git a/usb_bootloader/STM32F1/dfu.h b/usb_bootloader/STM32F1/dfu.h deleted file mode 100644 index d6ad1bc..0000000 --- a/usb_bootloader/STM32F1/dfu.h +++ /dev/null @@ -1,128 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -#ifndef __DFU_H -#define __DFU_H - -#include "common.h" -/* -#define DFU_UPLOAD_NONE 0 -#define DFU_UPLOAD_RAM 1 -#define DFU_UPLOAD_FLASH_0X8005000 2 -#define DFU_UPLOAD_FLASH_0X8002000 3 -*/ -typedef enum {DFU_UPLOAD_NONE, DFU_UPLOAD_RAM, DFU_UPLOAD_FLASH_0X8005000,DFU_UPLOAD_FLASH_0X8002000} dfuUploadTypes_t; - -/* exposed types */ -typedef u8 *(*ClassReqCB)(u16); - -/* exposed structs */ -typedef struct _DFUStatus { - u8 bStatus; - u8 bwPollTimeout0; - u8 bwPollTimeout1; - u8 bwPollTimeout2; - u8 bState; /* state of device at the time the host receives the message! */ - u8 iString; -} DFUStatus; - -typedef enum _PLOT { - BEGINNING, - MIDDLE, - END, - WAIT -} PLOT; - - -/*** DFU bRequest Values ******/ -/* bmRequestType, wValue, wIndex, wLength, Data */ -#define DFU_DETACH 0x00 /* 0x21, wTimeout, Interface, Zero, None */ -#define DFU_DNLOAD 0x01 /* 0x21, wBlockNum, Interface, Length, Firmware */ -#define DFU_UPLOAD 0x02 /* 0xA1, Zero, Interface, Length, Firmware */ -#define DFU_GETSTATUS 0x03 /* 0xA1, Zero, Interface, 6, Status */ -#define DFU_CLRSTATUS 0x04 /* 0x21, Zero, Interface, Zero, None */ -#define DFU_GETSTATE 0x05 /* 0xA1, Zero, Interface, 1, State */ -#define DFU_ABORT 0x06 /* 0x21, Zero, Interface, Zero, None */ - -/*** DFU Status Values ******/ -#define OK 0x00 /* No error */ -#define errTARGET 0x01 /* File is not appropriate for this device */ -#define errFILE 0x02 /* File fails some vendor tests */ -#define errWRITE 0x03 /* Device is unable to write memory */ -#define errERASE 0x04 /* Memory erase failed */ -#define errCHECK_ERASED 0x05 /* Memory erase check failed */ -#define errPROG 0x06 /* Program memory function failed */ -#define errVERIFY 0x07 /* Written program failed verification */ -#define errADDRESS 0x08 /* address out of range */ -#define errNOTDONE 0x09 /* received DNLOAD with wLength=0, but firmware seems incomplete */ -#define errFIRMWARE 0x0A /* Runtime firmware corrupt, cannot return to non-dfu operations! */ -#define errVENDOR 0x0B /* vendor specific error */ -#define errUSBR 0x0C /* Unexpected usb reset! */ -#define errPOR 0x0D /* Unexpected power on reset */ -#define errUNKNOWN 0x0E /* Unknown error */ -#define errSTALLEDPKT 0x0F /* device stalled unexpected request */ -/***************************/ - -/*** DFU State Values **************/ -#define appIDLE 0x00 -#define appDETACH 0x01 -#define dfuIDLE 0x02 -#define dfuDNLOAD_SYNC 0x03 -#define dfuDNBUSY 0x04 -#define dfuDNLOAD_IDLE 0x05 -#define dfuMANIFEST_SYNC 0x06 -#define dfuMANIFEST 0x07 -#define dfuMANIFEST_WAIT_RESET 0x08 -#define dfuUPLOAD_IDLE 0x09 -#define dfuERROR 0x0A -/***********************************/ - - - -extern volatile bool dfuBusy; - -/* exposed functions */ -void dfuInit(void); /* singleton dfu initializer */ - -/* should consume dfuEvent type, but for now we can use pInfo (see comment above) */ -bool dfuUpdateByRequest(void); /* returns if new status is OK */ -void dfuUpdateByReset(void); -void dfuUpdateByTimeout(void); - -/* usb callbacks */ -u8 *dfuCopyState(u16); -u8 *dfuCopyStatus(u16); -u8 *dfuCopyDNLOAD(u16); -u8 *dfuCopyUPLOAD(u16); - -void dfuCopyBufferToExec(void); -bool checkTestFile(void); - -u8 dfuGetState(void); -void dfuSetState(u8); -bool dfuUploadStarted(); -void dfuFinishUpload(); - - -#endif diff --git a/usb_bootloader/STM32F1/flash/debug.cfg b/usb_bootloader/STM32F1/flash/debug.cfg deleted file mode 100644 index bf2e4d6..0000000 --- a/usb_bootloader/STM32F1/flash/debug.cfg +++ /dev/null @@ -1,83 +0,0 @@ -# script for stm32 - -interface ft2232 -ft2232_device_desc "Olimex OpenOCD JTAG" -ft2232_layout olimex-jtag -ft2232_vid_pid 0x15ba 0x0003 - -if { [info exists CHIPNAME] } { - set _CHIPNAME $CHIPNAME -} else { - set _CHIPNAME stm32 -} - -if { [info exists ENDIAN] } { - set _ENDIAN $ENDIAN -} else { - set _ENDIAN little -} - -# jtag speed -jtag_khz 600 - -#use combined on interfaces or targets that can't set TRST/SRST separately -reset_config trst_and_srst - -#jtag scan chain -if { [info exists CPUTAPID ] } { - set _CPUTAPID $CPUTAPID -} else { - # See STM Document RM0008 - # Section 26.6.3 - set _CPUTAPID 0x3ba00477 -} -jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID - -if { [info exists BSTAPID ] } { - set _BSTAPID $BSTAPID -} else { - # See STM Document RM0008 - # Section 26.6.2 - # Medium Density RevA - set _BSTAPID 0x06410041 - # Rev B and Rev Z - set _BSTAPID 0x16410041 - # High Density Devices, Rev A -#set _BSTAPID 0x06414041 -} -jtag newtap $_CHIPNAME bs -irlen 5 -ircapture 0x1 -irmask 0x1 -expected-id $_BSTAPID - -set _TARGETNAME [format "%s.cpu" $_CHIPNAME] -target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME - -$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 -work-area-size 0x5000 -work-area-backup 0 -#$_TARGETNAME configure -event halted halt_handle - -#flash bank stm32x 0 0 0 0 0 - - -#target create cortex_m3 -endian little -#run_and_halt_time 0 30 - -#working_area 0 0x20000000 0x4000 nobackup - -flash bank stm32x 0x08000000 0x00010000 0 0 0 - -# For more information about the configuration files, take a look at: -# openocd.texi - -#script flash.script - -proc halt_handle {} { - resume -} - -proc flash_test {} { - puts "Entering DEBUG wait" - sleep 100 -# reset run -# sleep 500 -} - -init -flash_test diff --git a/usb_bootloader/STM32F1/flash/flash.cfg b/usb_bootloader/STM32F1/flash/flash.cfg deleted file mode 100644 index dff972c..0000000 --- a/usb_bootloader/STM32F1/flash/flash.cfg +++ /dev/null @@ -1,91 +0,0 @@ -# script for stm32 - -interface ft2232 -ft2232_device_desc "Olimex OpenOCD JTAG" -ft2232_layout olimex-jtag -ft2232_vid_pid 0x15ba 0x0003 - -if { [info exists CHIPNAME] } { - set _CHIPNAME $CHIPNAME -} else { - set _CHIPNAME stm32 -} - -if { [info exists ENDIAN] } { - set _ENDIAN $ENDIAN -} else { - set _ENDIAN little -} - -# jtag speed -jtag_khz 600 - -#use combined on interfaces or targets that can't set TRST/SRST separately -reset_config trst_and_srst - -#jtag scan chain -if { [info exists CPUTAPID ] } { - set _CPUTAPID $CPUTAPID -} else { - # See STM Document RM0008 - # Section 26.6.3 - set _CPUTAPID 0x3ba00477 -} -jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID - -if { [info exists BSTAPID ] } { - set _BSTAPID $BSTAPID -} else { - # See STM Document RM0008 - # Section 26.6.2 - # Medium Density RevA - set _BSTAPID 0x06410041 - # Rev B and Rev Z - set _BSTAPID 0x16410041 - # High Density Devices, Rev A -#set _BSTAPID 0x06414041 -} -jtag newtap $_CHIPNAME bs -irlen 5 -ircapture 0x1 -irmask 0x1 -expected-id $_BSTAPID - -set _TARGETNAME [format "%s.cpu" $_CHIPNAME] -target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME - -$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 -work-area-size 0x5000 -work-area-backup 0 -#$_TARGETNAME configure -event halted halt_handle - -#flash bank stm32x 0 0 0 0 0 - - -#target create cortex_m3 -endian little -#run_and_halt_time 0 30 - -#working_area 0 0x20000000 0x4000 nobackup - -flash bank stm32x 0x08000000 0x00010000 0 0 0 - -# For more information about the configuration files, take a look at: -# openocd.texi - -#script flash.script - -proc halt_handle {} { - resume -} - -proc flash_test {} { - puts "Trying to flash" - sleep 100 - halt - sleep 300 - stm32x mass_erase 0 - sleep 20 - flash write_bank 0 tmpflash.bin 0 - sleep 50 -# reset run -# sleep 500 - reset run - shutdown -} - -init -flash_test diff --git a/usb_bootloader/STM32F1/flash/openocd.cfg b/usb_bootloader/STM32F1/flash/openocd.cfg deleted file mode 100644 index c343de6..0000000 --- a/usb_bootloader/STM32F1/flash/openocd.cfg +++ /dev/null @@ -1,73 +0,0 @@ -# script for stm32 - -interface ft2232 -ft2232_device_desc "Olimex OpenOCD JTAG" -ft2232_layout olimex-jtag -ft2232_vid_pid 0x15ba 0x0003 - -if { [info exists CHIPNAME] } { - set _CHIPNAME $CHIPNAME -} else { - set _CHIPNAME stm32 -} - -if { [info exists ENDIAN] } { - set _ENDIAN $ENDIAN -} else { - set _ENDIAN little -} - -# jtag speed -jtag_khz 500 - -jtag_nsrst_delay 200 -jtag_ntrst_delay 200 - -#use combined on interfaces or targets that can't set TRST/SRST separately -reset_config trst_and_srst - -#jtag scan chain -if { [info exists CPUTAPID ] } { - set _CPUTAPID $CPUTAPID -} else { - # See STM Document RM0008 - # Section 26.6.3 - set _CPUTAPID 0x3ba00477 -} - -jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID - -if { [info exists BSTAPID ] } { - set _BSTAPID $BSTAPID -} else { - # See STM Document RM0008 - # Section 26.6.2 - # Medium Density RevA - set _BSTAPID 0x06410041 - # Rev B and Rev Z - set _BSTAPID 0x16410041 - # High Density Devices, Rev A -#set _BSTAPID 0x06414041 -} - -jtag newtap $_CHIPNAME bs -irlen 5 -ircapture 0x1 -irmask 0x1 -expected-id $_BSTAPID - -set _TARGETNAME [format "%s.cpu" $_CHIPNAME] -target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME - -$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 -work-area-size 0x5000 -work-area-backup 0 - -flash bank stm32x 0x08000000 0x00010000 0 0 0 - -init - -halt -sleep 1000 -stm32x unlock 0 -flash erase_sector 0 0 0 -sleep 1000 -flash write_bank 0 tmpflash.bin 0 -sleep 3000 -reset -sleep 3000 -shutdown diff --git a/usb_bootloader/STM32F1/flash/stm32.cfg b/usb_bootloader/STM32F1/flash/stm32.cfg deleted file mode 100644 index 15edaad..0000000 --- a/usb_bootloader/STM32F1/flash/stm32.cfg +++ /dev/null @@ -1,72 +0,0 @@ -# script for stm32 - -interface ft2232 -ft2232_device_desc "Olimex OpenOCD JTAG" -ft2232_layout olimex-jtag -ft2232_vid_pid 0x15ba 0x0003 - -if { [info exists CHIPNAME] } { - set _CHIPNAME $CHIPNAME -} else { - set _CHIPNAME stm32 -} - -if { [info exists ENDIAN] } { - set _ENDIAN $ENDIAN -} else { - set _ENDIAN little -} - -# jtag speed -jtag_khz 500 - -jtag_nsrst_delay 100 -jtag_ntrst_delay 100 - -#use combined on interfaces or targets that can't set TRST/SRST separately -reset_config trst_and_srst - -#jtag scan chain -if { [info exists CPUTAPID ] } { - set _CPUTAPID $CPUTAPID -} else { - # See STM Document RM0008 - # Section 26.6.3 - set _CPUTAPID 0x3ba00477 -} -jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID - -if { [info exists BSTAPID ] } { - set _BSTAPID $BSTAPID -} else { - # See STM Document RM0008 - # Section 26.6.2 - # Medium Density RevA - set _BSTAPID 0x06410041 - # Rev B and Rev Z - set _BSTAPID 0x16410041 - # High Density Devices, Rev A -#set _BSTAPID 0x06414041 -} -jtag newtap $_CHIPNAME bs -irlen 5 -ircapture 0x1 -irmask 0x1 -expected-id $_BSTAPID - -set _TARGETNAME [format "%s.cpu" $_CHIPNAME] -target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME - -$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 -work-area-size 16384 -work-area-backup 0 - -#flash bank stm32x 0 0 0 0 0 - - -target create cortex_m3 -endian little -#run_and_halt_time 0 30 - -#working_area 0 0x20000000 0x4000 nobackup - -#flash bank stm32x 0x08000000 0x00010000 0 0 0 -reset -sleep 3000 -shutdown -# For more information about the configuration files, take a look at: -# openocd.texi - diff --git a/usb_bootloader/STM32F1/flash/stm32loader.py b/usb_bootloader/STM32F1/flash/stm32loader.py deleted file mode 100644 index 67ab8d2..0000000 --- a/usb_bootloader/STM32F1/flash/stm32loader.py +++ /dev/null @@ -1,435 +0,0 @@ -#!/usr/bin/env python - -# -*- coding: utf-8 -*- -# vim: sw=4:ts=4:si:et:enc=utf-8 - -# Author: Ivan A-R -# Project page: http://tuxotronic.org/wiki/projects/stm32loader -# -# This file is part of stm32loader. -# -# stm32loader is free software; you can redistribute it and/or modify it under -# the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 3, or (at your option) any later -# version. -# -# stm32loader is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License -# along with stm32loader; see the file COPYING3. If not see -# . - -import sys, getopt -import serial -import time - -try: - from progressbar import * - usepbar = 1 -except: - usepbar = 0 - -# Verbose level -QUIET = 20 - -def mdebug(level, message): - if(QUIET >= level): - print >> sys.stderr , message - - -class CmdException(Exception): - pass - -class CommandInterface: - def open(self, aport='/dev/tty.usbserial-FTD3TMCH', abaudrate=115200) : - self.sp = serial.Serial( - port=aport, - baudrate=abaudrate, # baudrate - bytesize=8, # number of databits - parity=serial.PARITY_EVEN, - stopbits=1, - xonxoff=0, # enable software flow control - rtscts=0, # disable RTS/CTS flow control - timeout=5 # set a timeout value, None for waiting forever - ) - - - def _wait_for_ask(self, info = ""): - # wait for ask - try: - ask = ord(self.sp.read()) - except: - raise CmdException("Can't read port or timeout") - else: - if ask == 0x79: - # ACK - return 1 - else: - if ask == 0x1F: - # NACK - raise CmdException("NACK "+info) - else: - # Unknow responce - raise CmdException("Unknow response. "+info+": "+hex(ask)) - - - def reset(self): - self.sp.setDTR(0) - time.sleep(0.1) - self.sp.setDTR(1) - time.sleep(0.5) - - def initChip(self): - # Set boot - self.sp.setRTS(0) - self.reset() - - self.sp.write("\x7F") # Syncro - return self._wait_for_ask("Syncro") - - def releaseChip(self): - self.sp.setRTS(1) - self.reset() - - def cmdGeneric(self, cmd): - self.sp.write(chr(cmd)) - self.sp.write(chr(cmd ^ 0xFF)) # Control byte - return self._wait_for_ask(hex(cmd)) - - def cmdGet(self): - if self.cmdGeneric(0x00): - mdebug(10, "*** Get command"); - len = ord(self.sp.read()) - version = ord(self.sp.read()) - mdebug(10, " Bootloader version: "+hex(version)) - dat = map(lambda c: hex(ord(c)), self.sp.read(len)) - mdebug(10, " Available commands: "+str(dat)) - self._wait_for_ask("0x00 end") - return version - else: - raise CmdException("Get (0x00) failed") - - def cmdGetVersion(self): - if self.cmdGeneric(0x01): - mdebug(10, "*** GetVersion command") - version = ord(self.sp.read()) - self.sp.read(2) - self._wait_for_ask("0x01 end") - mdebug(10, " Bootloader version: "+hex(version)) - return version - else: - raise CmdException("GetVersion (0x01) failed") - - def cmdGetID(self): - if self.cmdGeneric(0x02): - mdebug(10, "*** GetID command") - len = ord(self.sp.read()) - id = self.sp.read(len+1) - self._wait_for_ask("0x02 end") - return id - else: - raise CmdException("GetID (0x02) failed") - - - def _encode_addr(self, addr): - byte3 = (addr >> 0) & 0xFF - byte2 = (addr >> 8) & 0xFF - byte1 = (addr >> 16) & 0xFF - byte0 = (addr >> 24) & 0xFF - crc = byte0 ^ byte1 ^ byte2 ^ byte3 - return (chr(byte0) + chr(byte1) + chr(byte2) + chr(byte3) + chr(crc)) - - - def cmdReadMemory(self, addr, lng): - assert(lng <= 256) - if self.cmdGeneric(0x11): - mdebug(10, "*** ReadMemory command") - self.sp.write(self._encode_addr(addr)) - self._wait_for_ask("0x11 address failed") - N = (lng - 1) & 0xFF - crc = N ^ 0xFF - self.sp.write(chr(N) + chr(crc)) - self._wait_for_ask("0x11 length failed") - return map(lambda c: ord(c), self.sp.read(lng)) - else: - raise CmdException("ReadMemory (0x11) failed") - - - def cmdGo(self, addr): - if self.cmdGeneric(0x21): - mdebug(10, "*** Go command") - self.sp.write(self._encode_addr(addr)) - self._wait_for_ask("0x21 go failed") - else: - raise CmdException("Go (0x21) failed") - - - def cmdWriteMemory(self, addr, data): - assert(len(data) <= 256) - if self.cmdGeneric(0x31): - mdebug(10, "*** Write memory command") - self.sp.write(self._encode_addr(addr)) - self._wait_for_ask("0x31 address failed") - #map(lambda c: hex(ord(c)), data) - lng = (len(data)-1) & 0xFF - mdebug(10, " %s bytes to write" % [lng+1]); - self.sp.write(chr(lng)) # len really - crc = 0xFF - for c in data: - crc = crc ^ c - self.sp.write(chr(c)) - self.sp.write(chr(crc)) - self._wait_for_ask("0x31 programming failed") - mdebug(10, " Write memory done") - else: - raise CmdException("Write memory (0x31) failed") - - - def cmdEraseMemory(self, sectors = None): - if self.cmdGeneric(0x43): - mdebug(10, "*** Erase memory command") - if sectors is None: - # Global erase - self.sp.write(chr(0xFF)) - self.sp.write(chr(0x00)) - else: - # Sectors erase - self.sp.write(chr((len(sectors)-1) & 0xFF)) - crc = 0xFF - for c in sectors: - crc = crc ^ c - self.sp.write(chr(c)) - self.sp.write(chr(crc)) - self._wait_for_ask("0x43 erasing failed") - mdebug(10, " Erase memory done") - else: - raise CmdException("Erase memory (0x43) failed") - - def cmdWriteProtect(self, sectors): - if self.cmdGeneric(0x63): - mdebug(10, "*** Write protect command") - self.sp.write(chr((len(sectors)-1) & 0xFF)) - crc = 0xFF - for c in sectors: - crc = crc ^ c - self.sp.write(chr(c)) - self.sp.write(chr(crc)) - self._wait_for_ask("0x63 write protect failed") - mdebug(10, " Write protect done") - else: - raise CmdException("Write Protect memory (0x63) failed") - - def cmdWriteUnprotect(self): - if self.cmdGeneric(0x73): - mdebug(10, "*** Write Unprotect command") - self._wait_for_ask("0x73 write unprotect failed") - self._wait_for_ask("0x73 write unprotect 2 failed") - mdebug(10, " Write Unprotect done") - else: - raise CmdException("Write Unprotect (0x73) failed") - - def cmdReadoutProtect(self): - if self.cmdGeneric(0x82): - mdebug(10, "*** Readout protect command") - self._wait_for_ask("0x82 readout protect failed") - self._wait_for_ask("0x82 readout protect 2 failed") - mdebug(10, " Read protect done") - else: - raise CmdException("Readout protect (0x82) failed") - - def cmdReadoutUnprotect(self): - if self.cmdGeneric(0x92): - mdebug(10, "*** Readout Unprotect command") - self._wait_for_ask("0x92 readout unprotect failed") - self._wait_for_ask("0x92 readout unprotect 2 failed") - mdebug(10, " Read Unprotect done") - else: - raise CmdException("Readout unprotect (0x92) failed") - - -# Complex commands section - - def readMemory(self, addr, lng): - data = [] - if usepbar: - widgets = ['Reading: ', Percentage(),', ', ETA(), ' ', Bar()] - pbar = ProgressBar(widgets=widgets,maxval=lng, term_width=79).start() - - while lng > 256: - if usepbar: - pbar.update(pbar.maxval-lng) - else: - mdebug(5, "Read %(len)d bytes at 0x%(addr)X" % {'addr': addr, 'len': 256}) - data = data + self.cmdReadMemory(addr, 256) - addr = addr + 256 - lng = lng - 256 - if usepbar: - pbar.update(pbar.maxval-lng) - pbar.finish() - else: - mdebug(5, "Read %(len)d bytes at 0x%(addr)X" % {'addr': addr, 'len': 256}) - data = data + self.cmdReadMemory(addr, lng) - return data - - def writeMemory(self, addr, data): - lng = len(data) - if usepbar: - widgets = ['Writing: ', Percentage(),' ', ETA(), ' ', Bar()] - pbar = ProgressBar(widgets=widgets, maxval=lng, term_width=79).start() - - offs = 0 - while lng > 256: - if usepbar: - pbar.update(pbar.maxval-lng) - else: - mdebug(5, "Write %(len)d bytes at 0x%(addr)X" % {'addr': addr, 'len': 256}) - self.cmdWriteMemory(addr, data[offs:offs+256]) - offs = offs + 256 - addr = addr + 256 - lng = lng - 256 - if usepbar: - pbar.update(pbar.maxval-lng) - pbar.finish() - else: - mdebug(5, "Write %(len)d bytes at 0x%(addr)X" % {'addr': addr, 'len': 256}) - self.cmdWriteMemory(addr, data[offs:offs+lng] + ([0xFF] * (256-lng)) ) - - - - - def __init__(self) : - pass - - -def usage(): - print """Usage: %s [-hqVewvr] [-l length] [-p port] [-b baud] [-a addr] [file.bin] - -h This help - -q Quiet - -V Verbose - -e Erase - -w Write - -v Verify - -r Read - -l length Length of read - -p port Serial port (default: /dev/tty.usbserial-ftCYPMYJ) - -b baud Baud speed (default: 115200) - -a addr Target address - - ./stm32loader.py -e -w -v example/main.bin - - """ % sys.argv[0] - - -if __name__ == "__main__": - - # Import Psyco if available - try: - import psyco - psyco.full() - print "Using Psyco..." - except ImportError: - pass - - conf = { - 'port': '/dev/tty.usbserial-FTD3TMCH', - 'baud': 115200, - 'address': 0x08000000, - 'erase': 0, - 'write': 0, - 'verify': 0, - 'read': 0, - 'len': 1000, - 'fname':'', - } - -# http://www.python.org/doc/2.5.2/lib/module-getopt.html - - try: - opts, args = getopt.getopt(sys.argv[1:], "hqVewvrp:b:a:l:") - except getopt.GetoptError, err: - # print help information and exit: - print str(err) # will print something like "option -a not recognized" - usage() - sys.exit(2) - - QUIET = 5 - - for o, a in opts: - if o == '-V': - QUIET = 10 - elif o == '-q': - QUIET = 0 - elif o == '-h': - usage() - sys.exit(0) - elif o == '-e': - conf['erase'] = 1 - elif o == '-w': - conf['write'] = 1 - elif o == '-v': - conf['verify'] = 1 - elif o == '-r': - conf['read'] = 1 - elif o == '-p': - conf['port'] = a - elif o == '-b': - conf['baud'] = eval(a) - elif o == '-a': - conf['address'] = eval(a) - elif o == '-l': - conf['len'] = eval(a) -# elif o == '-f': -# conf['fname'] = a - else: - assert False, "unhandled option" - - cmd = CommandInterface() - cmd.open(conf['port'], conf['baud']) - mdebug(10, "Open port %(port)s, baud %(baud)d" % {'port':conf['port'], 'baud':conf['baud']}) - try: - try: - cmd.initChip() - except: - print "Can't init. Ensure that BOOT0 is enabled and reset device" - - bootversion = cmd.cmdGet() - mdebug(0, "Bootloader version %X" % bootversion) - mdebug(0, "Chip id `%s'" % str(map(lambda c: hex(ord(c)), cmd.cmdGetID()))) -# cmd.cmdGetVersion() -# cmd.cmdGetID() -# cmd.cmdReadoutUnprotect() -# cmd.cmdWriteUnprotect() -# cmd.cmdWriteProtect([0, 1]) - - if (conf['write'] or conf['verify']): - data = map(lambda c: ord(c), file(args[0]).read()) - - if conf['erase']: - cmd.cmdEraseMemory() - - if conf['write']: - cmd.writeMemory(conf['address'], data) - - if conf['verify']: - verify = cmd.readMemory(conf['address'], len(data)) - if(data == verify): - print "Verification OK" - else: - print "Verification FAILED" - print str(len(data)) + ' vs ' + str(len(verify)) - for i in xrange(0, len(data)): - if data[i] != verify[i]: - print hex(i) + ': ' + hex(data[i]) + ' vs ' + hex(verify[i]) - - if not conf['write'] and conf['read']: - rdata = cmd.readMemory(conf['address'], conf['len']) -# file(conf['fname'], 'wb').write(rdata) - file(args[0], 'wb').write(''.join(map(chr,rdata))) - -# cmd.cmdGo(addr + 0x04) - finally: - cmd.releaseChip() - diff --git a/usb_bootloader/STM32F1/hardware.c b/usb_bootloader/STM32F1/hardware.c deleted file mode 100644 index bef4f33..0000000 --- a/usb_bootloader/STM32F1/hardware.c +++ /dev/null @@ -1,285 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -/** - * @file hardware.c - * - * @brief init routines to setup clocks, interrupts, also destructor functions. - * does not include USB stuff. EEPROM read/write functions. - * - */ - -#include "hardware.h" - -void setPin(u32 bank, u8 pin) { - u32 pinMask = 0x1 << (pin); - SET_REG(GPIO_BSRR(bank), pinMask); -} - -void resetPin(u32 bank, u8 pin) { - u32 pinMask = 0x1 << (16 + pin); - SET_REG(GPIO_BSRR(bank), pinMask); -} - -bool readPin(u32 bank, u8 pin) { - // todo, implement read - if (GET_REG(GPIO_IDR(bank)) & (0x01 << pin)) { - return TRUE; - } else { - return FALSE; - } -} - -void strobePin(u32 bank, u8 pin, u8 count, u32 rate) { - resetPin(bank, pin); - - u32 c; - while (count-- > 0) { - for (c = rate; c > 0; c--) { - asm volatile("nop"); - } - setPin(bank, pin); - for (c = rate; c > 0; c--) { - asm volatile("nop"); - } - resetPin(bank, pin); - } -} - -void systemReset(void) { - SET_REG(RCC_CR, GET_REG(RCC_CR) | 0x00000001); - SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) & 0xF8FF0000); - SET_REG(RCC_CR, GET_REG(RCC_CR) & 0xFEF6FFFF); - SET_REG(RCC_CR, GET_REG(RCC_CR) & 0xFFFBFFFF); - SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) & 0xFF80FFFF); - - SET_REG(RCC_CIR, 0x00000000); /* disable all RCC interrupts */ -} - -void setupCLK(void) { - /* enable HSE */ - SET_REG(RCC_CR, GET_REG(RCC_CR) | 0x00010001); - while ((GET_REG(RCC_CR) & 0x00020000) == 0); /* for it to come on */ - - /* enable flash prefetch buffer */ - SET_REG(FLASH_ACR, 0x00000012); - - /* Configure PLL */ - SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x001D0400); /* pll=72Mhz,APB1=36Mhz,AHB=72Mhz */ - SET_REG(RCC_CR, GET_REG(RCC_CR) | 0x01000000); /* enable the pll */ - while ((GET_REG(RCC_CR) & 0x03000000) == 0); /* wait for it to come on */ - - /* Set SYSCLK as PLL */ - SET_REG(RCC_CFGR, GET_REG(RCC_CFGR) | 0x00000002); - while ((GET_REG(RCC_CFGR) & 0x00000008) == 0); /* wait for it to come on */ -} - -void setupLED (void) { - /* enable LED pin */ - pRCC->APB2ENR |= RCC_APB2ENR_LED; - - /* Setup LED pin as output open drain */ - SET_REG(LED_BANK_CR,(GET_REG(LED_BANK_CR) & LED_CR_MASK) | LED_CR_MODE); - setPin(LED_BANK, LED); -} - -void setupBUTTON (void) { - /* enable button pin */ - pRCC->APB2ENR |= RCC_APB2ENR_BUT; - - /* Setup button pin as floating input */ - SET_REG(BUT_BANK_CR,(GET_REG(BUT_BANK_CR) & BUT_CR_MASK) | BUT_CR_OUTPUT_IN); - setPin(BUTTON_BANK, BUTTON); -} - -void setupFLASH() { - /* configure the HSI oscillator */ - if ((pRCC->CR & 0x01) == 0x00) { - u32 rwmVal = pRCC->CR; - rwmVal |= 0x01; - pRCC->CR = rwmVal; - } - - /* wait for it to come on */ - while ((pRCC->CR & 0x02) == 0x00) {} -} - -bool checkUserCode(u32 usrAddr) { - u32 sp = *(vu32 *) usrAddr; - - if ((sp & 0x2FFE0000) == 0x20000000) { - return (TRUE); - } else { - return (FALSE); - } -} - -void jumpToUser(u32 usrAddr) { - typedef void (*funcPtr)(void); - - u32 jumpAddr = *(vu32 *)(usrAddr + 0x04); /* reset ptr in vector table */ - funcPtr usrMain = (funcPtr) jumpAddr; - - /* tear down all the dfu related setup */ - // disable usb interrupts, clear them, turn off usb, set the disc pin - // todo pick exactly what we want to do here, now its just a conservative - flashLock(); - usbDsbISR(); - nvicDisableInterrupts(); - setPin(GPIOC, 12); // disconnect usb from host. todo, macroize pin - systemReset(); // resets clocks and periphs, not core regs - - - __MSR_MSP(*(vu32 *) usrAddr); /* set the users stack ptr */ - - usrMain(); /* go! */ -} - -void nvicInit(NVIC_InitTypeDef *NVIC_InitStruct) { - u32 tmppriority = 0x00; - u32 tmpreg = 0x00; - u32 tmpmask = 0x00; - u32 tmppre = 0; - u32 tmpsub = 0x0F; - - SCB_TypeDef *rSCB = (SCB_TypeDef *) SCB_BASE; - NVIC_TypeDef *rNVIC = (NVIC_TypeDef *) NVIC_BASE; - - - /* Compute the Corresponding IRQ Priority --------------------------------*/ - tmppriority = (0x700 - (rSCB->AIRCR & (u32)0x700)) >> 0x08; - tmppre = (0x4 - tmppriority); - tmpsub = tmpsub >> tmppriority; - - tmppriority = (u32)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; - tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub; - - tmppriority = tmppriority << 0x04; - tmppriority = ((u32)tmppriority) << ((NVIC_InitStruct->NVIC_IRQChannel & (u8)0x03) * 0x08); - - tmpreg = rNVIC->IPR[(NVIC_InitStruct->NVIC_IRQChannel >> 0x02)]; - tmpmask = (u32)0xFF << ((NVIC_InitStruct->NVIC_IRQChannel & (u8)0x03) * 0x08); - tmpreg &= ~tmpmask; - tmppriority &= tmpmask; - tmpreg |= tmppriority; - - rNVIC->IPR[(NVIC_InitStruct->NVIC_IRQChannel >> 0x02)] = tmpreg; - - /* Enable the Selected IRQ Channels --------------------------------------*/ - rNVIC->ISER[(NVIC_InitStruct->NVIC_IRQChannel >> 0x05)] = - (u32)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (u8)0x1F); -} - -void nvicDisableInterrupts() { - NVIC_TypeDef *rNVIC = (NVIC_TypeDef *) NVIC_BASE; - rNVIC->ICER[0] = 0xFFFFFFFF; - rNVIC->ICER[1] = 0xFFFFFFFF; - rNVIC->ICPR[0] = 0xFFFFFFFF; - rNVIC->ICPR[1] = 0xFFFFFFFF; - - SET_REG(STK_CTRL, 0x04); /* disable the systick, which operates separately from nvic */ -} - -void systemHardReset(void) { - SCB_TypeDef *rSCB = (SCB_TypeDef *) SCB_BASE; - - /* Reset */ - rSCB->AIRCR = (u32)AIRCR_RESET_REQ; - - /* should never get here */ - while (1) { - asm volatile("nop"); - } -} - -bool flashErasePage(u32 pageAddr) { - u32 rwmVal = GET_REG(FLASH_CR); - rwmVal = FLASH_CR_PER; - SET_REG(FLASH_CR, rwmVal); - - while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} - SET_REG(FLASH_AR, pageAddr); - SET_REG(FLASH_CR, FLASH_CR_START | FLASH_CR_PER); - while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} - - /* todo: verify the page was erased */ - - rwmVal = 0x00; - SET_REG(FLASH_CR, rwmVal); - - return TRUE; -} -bool flashErasePages(u32 pageAddr, u16 n) { - while (n-- > 0) { - if (!flashErasePage(pageAddr + 0x400 * n)) { - return FALSE; - } - } - - return TRUE; -} - -bool flashWriteWord(u32 addr, u32 word) { - vu16 *flashAddr = (vu16 *)addr; - vu32 lhWord = (vu32)word & 0x0000FFFF; - vu32 hhWord = ((vu32)word & 0xFFFF0000) >> 16; - - u32 rwmVal = GET_REG(FLASH_CR); - SET_REG(FLASH_CR, FLASH_CR_PG); - - /* apparently we need not write to FLASH_AR and can - simply do a native write of a half word */ - while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} - *(flashAddr + 0x01) = (vu16)hhWord; - while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} - *(flashAddr) = (vu16)lhWord; - while (GET_REG(FLASH_SR) & FLASH_SR_BSY) {} - - rwmVal &= 0xFFFFFFFE; - SET_REG(FLASH_CR, rwmVal); - - /* verify the write */ - if (*(vu32 *)addr != word) { - return FALSE; - } - - return TRUE; -} - -void flashLock() { - /* take down the HSI oscillator? it may be in use elsewhere */ - - /* ensure all FPEC functions disabled and lock the FPEC */ - SET_REG(FLASH_CR, 0x00000080); -} - -void flashUnlock() { - /* unlock the flash */ - SET_REG(FLASH_KEYR, FLASH_KEY1); - SET_REG(FLASH_KEYR, FLASH_KEY2); -} - - - - diff --git a/usb_bootloader/STM32F1/hardware.h b/usb_bootloader/STM32F1/hardware.h deleted file mode 100644 index ec447a6..0000000 --- a/usb_bootloader/STM32F1/hardware.h +++ /dev/null @@ -1,190 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -#ifndef __HARDWARE_H -#define __HARDWARE_H - -#include "stm32f10x_type.h" -#include "cortexm3_macro.h" -#include "common.h" - -/* macro'd register and peripheral definitions */ -#define RCC ((u32)0x40021000) -#define FLASH ((u32)0x40022000) -#define GPIOA ((u32)0x40010800) -#define GPIOB ((u32)0x40010C00) -#define GPIOC ((u32)0x40011000) - -#define RCC_CR RCC -#define RCC_CFGR (RCC + 0x04) -#define RCC_CIR (RCC + 0x08) -#define RCC_AHBENR (RCC + 0x14) -#define RCC_APB2ENR (RCC + 0x18) -#define RCC_APB1ENR (RCC + 0x1C) - -#define FLASH_ACR (FLASH + 0x00) -#define FLASH_KEYR (FLASH + 0x04) -#define FLASH_OPTKEYR (FLASH + 0x08) -#define FLASH_SR (FLASH + 0x0C) -#define FLASH_CR (FLASH + 0x10) -#define FLASH_AR (FLASH + 0x14) -#define FLASH_OBR (FLASH + 0x1C) -#define FLASH_WRPR (FLASH + 0x20) - -#define FLASH_KEY1 0x45670123 -#define FLASH_KEY2 0xCDEF89AB -#define FLASH_RDPRT 0x00A5 -#define FLASH_SR_BSY 0x01 -#define FLASH_CR_PER 0x02 -#define FLASH_CR_PG 0x01 -#define FLASH_CR_START 0x40 - -#define GPIO_CRL(port) port -#define GPIO_CRH(port) (port+0x04) -#define GPIO_IDR(port) (port+0x08) -#define GPIO_ODR(port) (port+0x0c) -#define GPIO_BSRR(port) (port+0x10) - -#define SCS_BASE ((u32)0xE000E000) -#define NVIC_BASE (SCS_BASE + 0x0100) -#define SCB_BASE (SCS_BASE + 0x0D00) - - -#define SCS 0xE000E000 -#define NVIC (SCS+0x100) -#define SCB (SCS+0xD00) -#define STK (SCS+0x10) - -#define SCB_VTOR (SCB+0x08) -#define STK_CTRL (STK+0x00) - -#define TIM1_APB2_ENB ((u32)0x00000800) -#define TIM1 ((u32)0x40012C00) -#define TIM1_PSC (TIM1+0x28) -#define TIM1_ARR (TIM1+0x2C) -#define TIM1_RCR (TIM1+0x30) -#define TIM1_CR1 (TIM1+0x00) -#define TIM1_CR2 (TIM1+0x04) -#define TIM1_DIER (TIM1+0x0C) -#define TIM1_UP_IRQ_Channel ((u8)0x19) - -#define USB_HP_IRQ ((u8)0x13) -#define USB_LP_IRQ ((u8)0x14) -#define TIM2_IRQ ((u8)0x1C) - - -/* AIRCR */ -#define AIRCR_RESET 0x05FA0000 -#define AIRCR_RESET_REQ (AIRCR_RESET | (u32)0x04); - -/* temporary copyage of example from kiel */ -#define __VAL(__TIMCLK, __PERIOD) ((__TIMCLK/1000000UL)*__PERIOD) -#define __PSC(__TIMCLK, __PERIOD) (((__VAL(__TIMCLK, __PERIOD)+49999UL)/50000UL) - 1) -#define __ARR(__TIMCLK, __PERIOD) ((__VAL(__TIMCLK, __PERIOD)/(__PSC(__TIMCLK, __PERIOD)+1)) - 1) - -#define SET_REG(addr,val) do { *(vu32*)(addr)=val; } while(0) -#define GET_REG(addr) (*(vu32*)(addr)) - - -/* todo: there must be some major misunderstanding in how we access - regs. The direct access approach (GET_REG) causes the usb init to - fail upon trying to activate RCC_APB1 |= 0x00800000. However, using - the struct approach from ST, it works fine...temporarily switching - to that approach */ -typedef struct { - vu32 CR; - vu32 CFGR; - vu32 CIR; - vu32 APB2RSTR; - vu32 APB1RSTR; - vu32 AHBENR; - vu32 APB2ENR; - vu32 APB1ENR; - vu32 BDCR; - vu32 CSR; -} RCC_RegStruct; -#define pRCC ((RCC_RegStruct *) RCC) - -typedef struct { - vu32 ISER[2]; - u32 RESERVED0[30]; - vu32 ICER[2]; - u32 RSERVED1[30]; - vu32 ISPR[2]; - u32 RESERVED2[30]; - vu32 ICPR[2]; - u32 RESERVED3[30]; - vu32 IABR[2]; - u32 RESERVED4[62]; - vu32 IPR[15]; -} NVIC_TypeDef; - -typedef struct { - u8 NVIC_IRQChannel; - u8 NVIC_IRQChannelPreemptionPriority; - u8 NVIC_IRQChannelSubPriority; - bool NVIC_IRQChannelCmd; /* TRUE for enable */ -} NVIC_InitTypeDef; - -typedef struct { - vuc32 CPUID; - vu32 ICSR; - vu32 VTOR; - vu32 AIRCR; - vu32 SCR; - vu32 CCR; - vu32 SHPR[3]; - vu32 SHCSR; - vu32 CFSR; - vu32 HFSR; - vu32 DFSR; - vu32 MMFAR; - vu32 BFAR; - vu32 AFSR; -} SCB_TypeDef; - - -void setPin(u32 bank, u8 pin); -void resetPin(u32 bank, u8 pin); -bool readPin(u32 bank, u8 pin); -void strobePin(u32 bank, u8 pin, u8 count, u32 rate); - -void systemHardReset(void); -void systemReset(void); -void setupCLK(void); -void setupLED(void); -void setupFLASH(void); -void setupBUTTON(void); -bool checkUserCode(u32 usrAddr); -void jumpToUser(u32 usrAddr); - -bool flashWriteWord(u32 addr, u32 word); -bool flashErasePage(u32 addr); -bool flashErasePages(u32 addr, u16 n); -void flashLock(void); -void flashUnlock(void); -void nvicInit(NVIC_InitTypeDef *); -void nvicDisableInterrupts(void); - -#endif diff --git a/usb_bootloader/STM32F1/main.c b/usb_bootloader/STM32F1/main.c deleted file mode 100644 index 494dd2b..0000000 --- a/usb_bootloader/STM32F1/main.c +++ /dev/null @@ -1,84 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -/** - * @file main.c - * - * @brief main loop and calling any hardware init stuff. timing hacks for EEPROM - * writes not to block usb interrupts. logic to handle 2 second timeout then - * jump to user code. - * - */ - -#include "common.h" -#include "dfu.h" -extern volatile dfuUploadTypes_t userUploadType; - -int main() -{ - systemReset(); // peripherals but not PC - setupCLK(); - setupLED(); - setupUSB(); - setupBUTTON(); - setupFLASH(); - - strobePin(LED_BANK, LED, STARTUP_BLINKS, BLINK_FAST); - - /* wait for host to upload program or halt bootloader */ - bool no_user_jump = (!checkUserCode(USER_CODE_FLASH0X8005000) && !checkUserCode(USER_CODE_FLASH0X8002000)) || readPin(BUTTON_BANK,BUTTON); - int delay_count = 0; - - while ((delay_count++ < BOOTLOADER_WAIT) || no_user_jump) - { - - strobePin(LED_BANK, LED, 1, BLINK_SLOW); - - if (dfuUploadStarted()) - { - dfuFinishUpload(); // systemHardReset from DFU once done - } - } - - - if (checkUserCode(USER_CODE_FLASH0X8002000)) - { - jumpToUser(USER_CODE_FLASH0X8002000); - } - else - { - if (checkUserCode(USER_CODE_FLASH0X8005000)) - { - jumpToUser(USER_CODE_FLASH0X8005000); - } - else - { - // Nothing to execute in either Flash or RAM - strobePin(LED_BANK, LED, 5, BLINK_FAST); - systemHardReset(); - } - } - - return 0;// Added to please the compiler -} \ No newline at end of file diff --git a/usb_bootloader/STM32F1/stm32_lib/c_only_md.ld b/usb_bootloader/STM32F1/stm32_lib/c_only_md.ld deleted file mode 100644 index a841d7b..0000000 --- a/usb_bootloader/STM32F1/stm32_lib/c_only_md.ld +++ /dev/null @@ -1,172 +0,0 @@ -/* -Default linker script for STM32F10x_128K_20K -Original Copyright RAISONANCE S.A.S. 2008 -Modified P Harrison May 2009 -*/ - -/* - * Default stack sizes. - * - * These are used by the startup in order to allocate stacks for the different modes. - * PROVIDE" allows to easily override these values from an object file or the commmand line. - */ - -__Stack_Size = 1024 ; -PROVIDE ( _Stack_Size = __Stack_Size ) ; -__Stack_Init = _estack - __Stack_Size ; -PROVIDE ( _Stack_Init = __Stack_Init ) ; - -/* - *There will be a link error if there is not this amount of RAM free at the end. - */ -_Minimum_Stack_Size = 0x100 ; - - -MEMORY -{ - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 3K - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 8K -} - -/* higher address of the user mode stack */ -_estack = 0x20005000; - -SECTIONS -{ -/* - * for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, - * which goes to FLASH - */ - .isr_vector : - { - . = ALIGN(4); - KEEP(*(.isr_vector)) /* Startup code */ - . = ALIGN(4); - } >FLASH - -/* - * for some STRx devices, the beginning of the startup code is stored in the .flashtext section, - * which goes to FLASH - */ - .flashtext : - { - . = ALIGN(4); - KEEP (*(.flashtext)) /* Startup code */ - . = ALIGN(4); - } >FLASH - - /* - * the program code is stored in the .text section, which goes to Flash - */ - .text : - { - . = ALIGN(4); - *(.text) /* remaining code */ - *(.text.*) /* remaining code */ - *(.rodata) /* read-only data (constants) */ - *(.rodata*) - *(.glue_7) - *(.glue_7t) - . = ALIGN(4); - _etext = .; - _sidata = _etext; - } >FLASH - -/* - * This is the initialized data section. It is stored in RAM but the initial values - * are held in flash and copied to RAM by the startup code - */ - -/* we copy the important program globals vector in RAM as well, so that users can fool with it */ - .data : AT ( _sidata ) /* AT makes the LMA follow on in the binary image */ - { - . = ALIGN(4); - _sdata = . ; /* Used by the startup in order to initialize the .data section */ - KEEP( *(.data) ) - KEEP( *(.data.*) ) - . = ALIGN(4); - _edata = . ; /* Used by the startup in order to initialize the .data section */ - } >RAM - - - -/* - * This is the uninitialized data section. Date here is stored in RAM and will be - * set to zero by the startup code. - */ - .bss : - { - . = ALIGN(4); - _sbss = .; /* Used by the startup in order to initialize the .bss section */ - *(.bss) - *(COMMON) - . = ALIGN(4); - _ebss = . ; /* Used by the startup in order to initialize the .bss section */ - } >RAM - -PROVIDE ( end = _ebss ); -PROVIDE ( _end = _ebss ); - -/* - * This is the user stack section - * This is just to check that there is enough RAM left for the User mode stack - * It should generate an error if it's full. - */ - ._usrstack : - { - . = ALIGN(4); - _susrstack = . ; - . = . + _Minimum_Stack_Size ; - . = ALIGN(4); - _eusrstack = . ; - } >RAM - -/* - * after that it's only debugging information. - */ - -/* remove the debugging information from the standard libraries */ -DISCARD : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - -/* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } -/* - * DWARF debug sections. - * Symbols in the DWARF debugging sections are relative to the beginning - * of the section so we begin them at 0. - */ - -/* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } -/* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } -/* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } -/* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } -/* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } -} diff --git a/usb_bootloader/STM32F1/stm32_lib/c_only_md_RAM.ld b/usb_bootloader/STM32F1/stm32_lib/c_only_md_RAM.ld deleted file mode 100644 index 0ed3a67..0000000 --- a/usb_bootloader/STM32F1/stm32_lib/c_only_md_RAM.ld +++ /dev/null @@ -1,169 +0,0 @@ -/* -Default linker script for STM32F10x_128K_20K -Original Copyright RAISONANCE S.A.S. 2008 -Modified P Harrison May 2009 -*/ - -/* - * Default stack sizes. - * - * These are used by the startup in order to allocate stacks for the different modes. - * PROVIDE" allows to easily override these values from an object file or the commmand line. - */ - -__Stack_Size = 1024 ; -PROVIDE ( _Stack_Size = __Stack_Size ) ; -__Stack_Init = _estack - __Stack_Size ; -PROVIDE ( _Stack_Init = __Stack_Init ) ; - -/* - *There will be a link error if there is not this amount of RAM free at the end. - */ -_Minimum_Stack_Size = 0x100 ; - - -MEMORY -{ - RAM (xrw) : ORIGIN = 0x20000C00, LENGTH = 17K -} - -/* higher address of the user mode stack */ -_estack = 0x20005000; -_magicRate = 0x5000; -SECTIONS -{ -/* - * for Cortex devices, the beginning of the startup code is stored in the .isr_vector section, - * which goes to FLASH - */ - .isr_vector : - { - . = ALIGN(4); - KEEP(*(.isr_vector)) /* Startup code */ - . = ALIGN(4); - } >RAM - -/* - * for some STRx devices, the beginning of the startup code is stored in the .flashtext section, - * which goes to FLASH - */ - .flashtext : - { - . = ALIGN(4); - KEEP (*(.flashtext)) /* Startup code */ - . = ALIGN(4); - } >RAM - - /* - * the program code is stored in the .text section, which goes to Flash - */ - .text : - { - . = ALIGN(4); - *(.text) /* remaining code */ - *(.text.*) /* remaining code */ - *(.rodata) /* read-only data (constants) */ - *(.rodata*) - *(.glue_7) - *(.glue_7t) - . = ALIGN(4); - _etext = .; - _sidata = _etext; /* Uused by the startup in order to initialize the .data secion */ - } >RAM - -/* - * This is the initialized data section. It is stored in RAM but the initial values - * are held in flash and copied to RAM by the startup code - */ - .data : AT ( _sidata ) /* AT makes the LMA follow on in the binary image */ - { - . = ALIGN(4); - _sdata = . ; /* Used by the startup in order to initialize the .data section */ - KEEP( *(.data) ) - KEEP( *(.data.*) ) - . = ALIGN(4); - _edata = . ; /* Used by the startup in order to initialize the .data section */ - } >RAM - - - -/* - * This is the uninitialized data section. Date here is stored in RAM and will be - * set to zero by the startup code. - */ - .bss : - { - . = ALIGN(4); - _sbss = .; /* Used by the startup in order to initialize the .bss section */ - *(.bss) - *(COMMON) - . = ALIGN(4); - _ebss = . ; /* Used by the startup in order to initialize the .bss section */ - } >RAM - -PROVIDE ( end = _ebss ); -PROVIDE ( _end = _ebss ); - -/* - * This is the user stack section - * This is just to check that there is enough RAM left for the User mode stack - * It should generate an error if it's full. - */ - ._usrstack : - { - . = ALIGN(4); - _susrstack = . ; - . = . + _Minimum_Stack_Size ; - . = ALIGN(4); - _eusrstack = . ; - } >RAM - -/* - * after that it's only debugging information. - */ - -/* remove the debugging information from the standard libraries */ -DISCARD : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - -/* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - .comment 0 : { *(.comment) } -/* - * DWARF debug sections. - * Symbols in the DWARF debugging sections are relative to the beginning - * of the section so we begin them at 0. - */ - -/* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } -/* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } -/* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } -/* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } -/* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } -} diff --git a/usb_bootloader/STM32F1/stm32_lib/c_only_startup.s b/usb_bootloader/STM32F1/stm32_lib/c_only_startup.s deleted file mode 100644 index 02c578b..0000000 --- a/usb_bootloader/STM32F1/stm32_lib/c_only_startup.s +++ /dev/null @@ -1,367 +0,0 @@ -/** - ****************************************************************************** - * @file startup_stm32f10x_md.s - * @author MCD Application Team - * @version V3.1.0 - * @date 06/19/2009 - * @brief STM32F10x Medium Density Devices vector table for RIDE7 toolchain. - * This module performs: - * - Set the initial SP - * - Set the initial PC == Reset_Handler, - * - Set the vector table entries with the exceptions ISR address - * - Branches to main in the C library (which eventually - * calls main()). - * After Reset the Cortex-M3 processor is in Thread mode, - * priority is Privileged, and the Stack is set to Main. - ******************************************************************************* - * @copy - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY - * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING - * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE - * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. - * - *

    © COPYRIGHT 2009 STMicroelectronics

    - */ - - .syntax unified - .cpu cortex-m3 - .fpu softvfp - .thumb - -.global g_pfnVectors -.global SystemInit_ExtMemCtl_Dummy -.global Default_Handler - -/* start address for the initialization values of the .data section. -defined in linker script */ -.word _sidata -/* start address for the .data section. defined in linker script */ -.word _sdata -/* end address for the .data section. defined in linker script */ -.word _edata -/* start address for the .bss section. defined in linker script */ -.word _sbss -/* end address for the .bss section. defined in linker script */ -.word _ebss - -.equ BootRAM, 0xF108F85F -/** - * @brief This is the code that gets called when the processor first - * starts execution following a reset event. Only the absolutely - * necessary set is performed, after which the application - * supplied main() routine is called. - * @param None - * @retval : None -*/ - - .section .text.Reset_Handler - .weak Reset_Handler - .type Reset_Handler, %function -Reset_Handler: - -/* Copy the data segment initializers from flash to SRAM */ - movs r1, #0 - b LoopCopyDataInit - -CopyDataInit: - ldr r3, =_sidata - ldr r3, [r3, r1] - str r3, [r0, r1] - adds r1, r1, #4 - -LoopCopyDataInit: - ldr r0, =_sdata - ldr r3, =_edata - adds r2, r0, r1 - cmp r2, r3 - bcc CopyDataInit - ldr r2, =_sbss - b LoopFillZerobss -/* Zero fill the bss segment. */ -FillZerobss: - movs r3, #0 - str r3, [r2], #4 - -LoopFillZerobss: - ldr r3, = _ebss - cmp r2, r3 - bcc FillZerobss -/* Call the application's entry point.*/ - bl main - bx lr -.size Reset_Handler, .-Reset_Handler - -/** - * @brief This is the code that gets called when the processor receives an - * unexpected interrupt. This simply enters an infinite loop, preserving - * the system state for examination by a debugger. - * - * @param None - * @retval : None -*/ - .section .text.Default_Handler,"ax",%progbits -Default_Handler: -Infinite_Loop: - b Infinite_Loop - .size Default_Handler, .-Default_Handler -/****************************************************************************** -* -* The minimal vector table for a Cortex M3. Note that the proper constructs -* must be placed on this to ensure that it ends up at physical address -* 0x0000.0000. -* -******************************************************************************/ - .section .isr_vector,"a",%progbits - .type g_pfnVectors, %object - .size g_pfnVectors, .-g_pfnVectors - - -g_pfnVectors: - .word _estack - .word Reset_Handler - .word NMI_Handler - .word HardFault_Handler - .word MemManage_Handler - .word BusFault_Handler - .word UsageFault_Handler - .word 0 - .word 0 - .word 0 - .word 0 - .word SVC_Handler - .word DebugMon_Handler - .word 0 - .word PendSV_Handler - .word SysTick_Handler - .word WWDG_IRQHandler - .word PVD_IRQHandler - .word TAMPER_IRQHandler - .word RTC_IRQHandler - .word FLASH_IRQHandler - .word RCC_IRQHandler - .word EXTI0_IRQHandler - .word EXTI1_IRQHandler - .word EXTI2_IRQHandler - .word EXTI3_IRQHandler - .word EXTI4_IRQHandler - .word DMA1_Channel1_IRQHandler - .word DMA1_Channel2_IRQHandler - .word DMA1_Channel3_IRQHandler - .word DMA1_Channel4_IRQHandler - .word DMA1_Channel5_IRQHandler - .word DMA1_Channel6_IRQHandler - .word DMA1_Channel7_IRQHandler - .word ADC1_2_IRQHandler - .word USB_HP_CAN1_TX_IRQHandler - .word USB_LP_CAN1_RX0_IRQHandler - .word CAN1_RX1_IRQHandler - .word CAN1_SCE_IRQHandler - .word EXTI9_5_IRQHandler - .word TIM1_BRK_IRQHandler - .word TIM1_UP_IRQHandler - .word TIM1_TRG_COM_IRQHandler - .word TIM1_CC_IRQHandler - .word TIM2_IRQHandler - .word TIM3_IRQHandler - .word TIM4_IRQHandler - .word I2C1_EV_IRQHandler - .word I2C1_ER_IRQHandler - .word I2C2_EV_IRQHandler - .word I2C2_ER_IRQHandler - .word SPI1_IRQHandler - .word SPI2_IRQHandler - .word USART1_IRQHandler - .word USART2_IRQHandler - .word USART3_IRQHandler - .word EXTI15_10_IRQHandler - .word RTCAlarm_IRQHandler - .word USBWakeUp_IRQHandler -/* - .word TIM8_BRK - .word TIM8_UP - .word TIM8_TRG_COM - .word TIM8_CC - .word ADC3 - .word FSMC - .word SDIO - .word TIM5 - .word SPI3 - .word UART4 - .word UART5 - .word TIM6 - .word TIM7 - .word DMA2_Channel1 - .word DMA2_Channel2 - .word DMA2_Channel3 - .word DMA2_Channel5 -*/ - .word BootRAM /* @0x108. This is for boot in RAM mode for - STM32F10x Medium Density devices. */ - -/******************************************************************************* -* -* Provide weak aliases for each Exception handler to the Default_Handler. -* As they are weak aliases, any function with the same name will override -* this definition. -* -*******************************************************************************/ - - .weak NMI_Handler - .thumb_set NMI_Handler,Default_Handler - - .weak HardFault_Handler - .thumb_set HardFault_Handler,Default_Handler - - .weak MemManage_Handler - .thumb_set MemManage_Handler,Default_Handler - - .weak BusFault_Handler - .thumb_set BusFault_Handler,Default_Handler - - .weak UsageFault_Handler - .thumb_set UsageFault_Handler,Default_Handler - - .weak SVC_Handler - .thumb_set SVC_Handler,Default_Handler - - .weak DebugMon_Handler - .thumb_set DebugMon_Handler,Default_Handler - - .weak PendSV_Handler - .thumb_set PendSV_Handler,Default_Handler - - .weak SysTick_Handler - .thumb_set SysTick_Handler,Default_Handler - - .weak WWDG_IRQHandler - .thumb_set WWDG_IRQHandler,Default_Handler - - .weak PVD_IRQHandler - .thumb_set PVD_IRQHandler,Default_Handler - - .weak TAMPER_IRQHandler - .thumb_set TAMPER_IRQHandler,Default_Handler - - .weak RTC_IRQHandler - .thumb_set RTC_IRQHandler,Default_Handler - - .weak FLASH_IRQHandler - .thumb_set FLASH_IRQHandler,Default_Handler - - .weak RCC_IRQHandler - .thumb_set RCC_IRQHandler,Default_Handler - - .weak EXTI0_IRQHandler - .thumb_set EXTI0_IRQHandler,Default_Handler - - .weak EXTI1_IRQHandler - .thumb_set EXTI1_IRQHandler,Default_Handler - - .weak EXTI2_IRQHandler - .thumb_set EXTI2_IRQHandler,Default_Handler - - .weak EXTI3_IRQHandler - .thumb_set EXTI3_IRQHandler,Default_Handler - - .weak EXTI4_IRQHandler - .thumb_set EXTI4_IRQHandler,Default_Handler - - .weak DMA1_Channel1_IRQHandler - .thumb_set DMA1_Channel1_IRQHandler,Default_Handler - - .weak DMA1_Channel2_IRQHandler - .thumb_set DMA1_Channel2_IRQHandler,Default_Handler - - .weak DMA1_Channel3_IRQHandler - .thumb_set DMA1_Channel3_IRQHandler,Default_Handler - - .weak DMA1_Channel4_IRQHandler - .thumb_set DMA1_Channel4_IRQHandler,Default_Handler - - .weak DMA1_Channel5_IRQHandler - .thumb_set DMA1_Channel5_IRQHandler,Default_Handler - - .weak DMA1_Channel6_IRQHandler - .thumb_set DMA1_Channel6_IRQHandler,Default_Handler - - .weak DMA1_Channel7_IRQHandler - .thumb_set DMA1_Channel7_IRQHandler,Default_Handler - - .weak ADC1_2_IRQHandler - .thumb_set ADC1_2_IRQHandler,Default_Handler - - .weak USB_HP_CAN1_TX_IRQHandler - .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler - - .weak USB_LP_CAN1_RX0_IRQHandler - .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler - - .weak CAN1_RX1_IRQHandler - .thumb_set CAN1_RX1_IRQHandler,Default_Handler - - .weak CAN1_SCE_IRQHandler - .thumb_set CAN1_SCE_IRQHandler,Default_Handler - - .weak EXTI9_5_IRQHandler - .thumb_set EXTI9_5_IRQHandler,Default_Handler - - .weak TIM1_BRK_IRQHandler - .thumb_set TIM1_BRK_IRQHandler,Default_Handler - - .weak TIM1_UP_IRQHandler - .thumb_set TIM1_UP_IRQHandler,Default_Handler - - .weak TIM1_TRG_COM_IRQHandler - .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler - - .weak TIM1_CC_IRQHandler - .thumb_set TIM1_CC_IRQHandler,Default_Handler - - .weak TIM2_IRQHandler - .thumb_set TIM2_IRQHandler,Default_Handler - - .weak TIM3_IRQHandler - .thumb_set TIM3_IRQHandler,Default_Handler - - .weak TIM4_IRQHandler - .thumb_set TIM4_IRQHandler,Default_Handler - - .weak I2C1_EV_IRQHandler - .thumb_set I2C1_EV_IRQHandler,Default_Handler - - .weak I2C1_ER_IRQHandler - .thumb_set I2C1_ER_IRQHandler,Default_Handler - - .weak I2C2_EV_IRQHandler - .thumb_set I2C2_EV_IRQHandler,Default_Handler - - .weak I2C2_ER_IRQHandler - .thumb_set I2C2_ER_IRQHandler,Default_Handler - - .weak SPI1_IRQHandler - .thumb_set SPI1_IRQHandler,Default_Handler - - .weak SPI2_IRQHandler - .thumb_set SPI2_IRQHandler,Default_Handler - - .weak USART1_IRQHandler - .thumb_set USART1_IRQHandler,Default_Handler - - .weak USART2_IRQHandler - .thumb_set USART2_IRQHandler,Default_Handler - - .weak USART3_IRQHandler - .thumb_set USART3_IRQHandler,Default_Handler - - .weak EXTI15_10_IRQHandler - .thumb_set EXTI15_10_IRQHandler,Default_Handler - - .weak RTCAlarm_IRQHandler - .thumb_set RTCAlarm_IRQHandler,Default_Handler - - .weak USBWakeUp_IRQHandler - .thumb_set USBWakeUp_IRQHandler,Default_Handler - diff --git a/usb_bootloader/STM32F1/stm32_lib/c_only_startup_user.s b/usb_bootloader/STM32F1/stm32_lib/c_only_startup_user.s deleted file mode 100644 index dc758fd..0000000 --- a/usb_bootloader/STM32F1/stm32_lib/c_only_startup_user.s +++ /dev/null @@ -1,128 +0,0 @@ -/** - ****************************************************************************** - * @file startup_stm32f10x_md.s - * @author MCD Application Team - * @version V3.1.0 - * @date 06/19/2009 - * @brief STM32F10x Medium Density Devices vector table for RIDE7 toolchain. - * This module performs: - * - Set the initial SP - * - Set the initial PC == Reset_Handler, - * - Set the vector table entries with the exceptions ISR address - * - Branches to main in the C library (which eventually - * calls main()). - * After Reset the Cortex-M3 processor is in Thread mode, - * priority is Privileged, and the Stack is set to Main. - ******************************************************************************* - * @copy - * - * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS - * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE - * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY - * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING - * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE - * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. - * - *

    © COPYRIGHT 2009 STMicroelectronics

    - */ - - .syntax unified - .cpu cortex-m3 - .fpu softvfp - .thumb - -.global g_pfnVectors -.global SystemInit_ExtMemCtl_Dummy -.global Default_Handler - -/* start address for the initialization values of the .data section. -defined in linker script */ -.word _sidata -/* start address for the .data section. defined in linker script */ -.word _sdata -/* end address for the .data section. defined in linker script */ -.word _edata -/* start address for the .bss section. defined in linker script */ -.word _sbss -/* end address for the .bss section. defined in linker script */ -.word _ebss -.word _magicRate - -.equ BootRAM, 0xF108F85F -/** - * @brief This is the code that gets called when the processor first - * starts execution following a reset event. Only the absolutely - * necessary set is performed, after which the application - * supplied main() routine is called. - * @param None - * @retval : None -*/ - - .section .text.Reset_Handler - .weak Reset_Handler - .type Reset_Handler, %function -Reset_Handler: - -/* Copy the data segment initializers from flash to SRAM */ - movs r1, #0 - b LoopCopyDataInit - -CopyDataInit: - ldr r3, =_sidata - ldr r3, [r3, r1] - str r3, [r0, r1] - adds r1, r1, #4 - -LoopCopyDataInit: - ldr r0, =_sdata - ldr r3, =_edata - adds r2, r0, r1 - cmp r2, r3 - bcc CopyDataInit - ldr r2, =_sbss - b LoopFillZerobss -/* Zero fill the bss segment. */ -FillZerobss: - movs r3, #0 - str r3, [r2], #4 - -LoopFillZerobss: - ldr r3, = _ebss - cmp r2, r3 - bcc FillZerobss -/* Call the application's entry point.*/ - bl main - bx lr -.size Reset_Handler, .-Reset_Handler - -/** - * @brief This is the code that gets called when the processor receives an - * unexpected interrupt. This simply enters an infinite loop, preserving - * the system state for examination by a debugger. - * - * @param None - * @retval : None -*/ - .section .text.Default_Handler,"ax",%progbits -Default_Handler: -Infinite_Loop: - b Infinite_Loop - .size Default_Handler, .-Default_Handler -/****************************************************************************** -* -* The minimal vector table for a Cortex M3. Note that the proper constructs -* must be placed on this to ensure that it ends up at physical address -* 0x0000.0000. -* -******************************************************************************/ - .section .isr_vector,"a",%progbits - .type g_pfnVectors, %object - .size g_pfnVectors, .-g_pfnVectors - - -g_pfnVectors: - .word _estack - .word Reset_Handler - .word _magicRate - - diff --git a/usb_bootloader/STM32F1/stm32_lib/cortexm3_macro.h b/usb_bootloader/STM32F1/stm32_lib/cortexm3_macro.h deleted file mode 100644 index 6adbc3b..0000000 --- a/usb_bootloader/STM32F1/stm32_lib/cortexm3_macro.h +++ /dev/null @@ -1,53 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : cortexm3_macro.h -* Author : MCD Application Team -* Version : V2.0.3 -* Date : 09/22/2008 -* Description : Header file for cortexm3_macro.s. -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __CORTEXM3_MACRO_H -#define __CORTEXM3_MACRO_H - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f10x_type.h" - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -void __WFI(void); -void __WFE(void); -void __SEV(void); -void __ISB(void); -void __DSB(void); -void __DMB(void); -void __SVC(void); -u32 __MRS_CONTROL(void); -void __MSR_CONTROL(u32 Control); -u32 __MRS_PSP(void); -void __MSR_PSP(u32 TopOfProcessStack); -u32 __MRS_MSP(void); -void __MSR_MSP(u32 TopOfMainStack); -void __RESETPRIMASK(void); -void __SETPRIMASK(void); -u32 __READ_PRIMASK(void); -void __RESETFAULTMASK(void); -void __SETFAULTMASK(void); -u32 __READ_FAULTMASK(void); -void __BASEPRICONFIG(u32 NewPriority); -u32 __GetBASEPRI(void); -u16 __REV_HalfWord(u16 Data); -u32 __REV_Word(u32 Data); - -#endif /* __CORTEXM3_MACRO_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/stm32_lib/cortexm3_macro.s b/usb_bootloader/STM32F1/stm32_lib/cortexm3_macro.s deleted file mode 100644 index a6eb4bc..0000000 --- a/usb_bootloader/STM32F1/stm32_lib/cortexm3_macro.s +++ /dev/null @@ -1,312 +0,0 @@ -# 1 "./stm32_lib/cortexm3_macro.S" -# 1 "" -# 1 "" -# 1 "./stm32_lib/cortexm3_macro.S" -# 16 "./stm32_lib/cortexm3_macro.S" - .cpu cortex-m3 -.fpu softvfp -.syntax unified -.thumb -.text - - - .globl __WFI - .globl __WFE - .globl __SEV - .globl __ISB - .globl __DSB - .globl __DMB - .globl __SVC - .globl __MRS_CONTROL - .globl __MSR_CONTROL - .globl __MRS_PSP - .globl __MSR_PSP - .globl __MRS_MSP - .globl __MSR_MSP - .globl __RESETPRIMASK - .globl __SETPRIMASK - .globl __READ_PRIMASK - .globl __RESETFAULTMASK - .globl __SETFAULTMASK - .globl __READ_FAULTMASK - .globl __BASEPRICONFIG - .globl __GetBASEPRI - .globl __REV_HalfWord - .globl __REV_Word - - - - - - - -.thumb_func -__WFI: - - WFI - BX r14 - - - - - - - -.thumb_func -__WFE: - - WFE - BX r14 - - - - - - - -.thumb_func -__SEV: - - SEV - BX r14 - - - - - - - -.thumb_func -__ISB: - - ISB - BX r14 - - - - - - - -.thumb_func -__DSB: - - DSB - BX r14 - - - - - - - -.thumb_func -__DMB: - - DMB - BX r14 - - - - - - - -.thumb_func -__SVC: - - SVC 0x01 - BX r14 - - - - - - - -.thumb_func -__MRS_CONTROL: - - MRS r0,control - BX r14 - - - - - - - -.thumb_func -__MSR_CONTROL: - - MSR control, r0 - ISB - BX r14 - - - - - - -.thumb_func -__MRS_PSP: - - MRS r0, psp - BX r14 - - - - - - - -.thumb_func -__MSR_PSP: - - MSR psp, r0 - BX r14 - - - - - - - -.thumb_func -__MRS_MSP: - - MRS r0, msp - BX r14 - - - - - - - -.thumb_func -__MSR_MSP: - - MSR msp, r0 - BX r14 - - - - - - - -.thumb_func -__RESETPRIMASK: - - CPSIE i - BX r14 - - - - - - - -.thumb_func -__SETPRIMASK: - - CPSID i - BX r14 - - - - - - - -.thumb_func -__READ_PRIMASK: - - MRS r0, PRIMASK - BX r14 - - - - - - - -.thumb_func -__RESETFAULTMASK: - - CPSIE f - BX r14 - - - - - - - -.thumb_func -__SETFAULTMASK: - - CPSID f - BX r14 - - - - - - - -.thumb_func -__READ_FAULTMASK: - - MRS r0, FAULTMASK - BX r14 - - - - - - - -.thumb_func -__BASEPRICONFIG: - - MSR basepri, r0 - BX r14 - - - - - - - -.thumb_func -__GetBASEPRI: - - MRS r0, basepri_max - BX r14 - - - - - - -.thumb_func -__REV_HalfWord: - - REV16 r0, r0 - BX r14 - - - - - - - -.thumb_func -__REV_Word: - - REV r0, r0 - BX r14 - -.end diff --git a/usb_bootloader/STM32F1/stm32_lib/stm32f10x_type.h b/usb_bootloader/STM32F1/stm32_lib/stm32f10x_type.h deleted file mode 100644 index 5563de3..0000000 --- a/usb_bootloader/STM32F1/stm32_lib/stm32f10x_type.h +++ /dev/null @@ -1,80 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : stm32f10x_type.h -* Author : MCD Application Team -* Version : V2.0.3 -* Date : 09/22/2008 -* Description : This file contains all the common data types used for the -* STM32F10x firmware library. -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F10x_TYPE_H -#define __STM32F10x_TYPE_H - -/* Includes ------------------------------------------------------------------*/ -/* Exported types ------------------------------------------------------------*/ -typedef signed long s32; -typedef signed short s16; -typedef signed char s8; - -typedef signed long const sc32; /* Read Only */ -typedef signed short const sc16; /* Read Only */ -typedef signed char const sc8; /* Read Only */ - -typedef volatile signed long vs32; -typedef volatile signed short vs16; -typedef volatile signed char vs8; - -typedef volatile signed long const vsc32; /* Read Only */ -typedef volatile signed short const vsc16; /* Read Only */ -typedef volatile signed char const vsc8; /* Read Only */ - -typedef unsigned long u32; -typedef unsigned short u16; -typedef unsigned char u8; - -typedef unsigned long const uc32; /* Read Only */ -typedef unsigned short const uc16; /* Read Only */ -typedef unsigned char const uc8; /* Read Only */ - -typedef volatile unsigned long vu32; -typedef volatile unsigned short vu16; -typedef volatile unsigned char vu8; - -typedef volatile unsigned long const vuc32; /* Read Only */ -typedef volatile unsigned short const vuc16; /* Read Only */ -typedef volatile unsigned char const vuc8; /* Read Only */ - -typedef enum {FALSE = 0, TRUE = !FALSE} bool; - -typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; - -typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; -#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) - -typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; - -#define U8_MAX ((u8)255) -#define S8_MAX ((s8)127) -#define S8_MIN ((s8)-128) -#define U16_MAX ((u16)65535u) -#define S16_MAX ((s16)32767) -#define S16_MIN ((s16)-32768) -#define U32_MAX ((u32)4294967295uL) -#define S32_MAX ((s32)2147483647) -#define S32_MIN ((s32)-2147483648) - -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ - -#endif /* __STM32F10x_TYPE_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb.c b/usb_bootloader/STM32F1/usb.c deleted file mode 100644 index 07c30ae..0000000 --- a/usb_bootloader/STM32F1/usb.c +++ /dev/null @@ -1,501 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -/** - * @file usb.c - * - * @brief usb-specific hardware setup, NVIC, clocks, and usb activities - * in the pre-attached state. includes some of the lower level callbacks - * needed by the usb library, like suspend,resume,init,etc - */ - -#include "usb.h" -#include "dfu.h" - -void setupUSB (void) { - /* enable USB DISC Pin */ - pRCC->APB2ENR |= RCC_APB2ENR_USB; - - /* Setup USB DISC pin as output open drain */ - SET_REG(USB_DISC_CR, - (GET_REG(USB_DISC_CR) & USB_DISC_CR_MASK) | USB_DISC_CR_OUTPUT_OD); - setPin (USB_DISC_BANK,USB_DISC); - - /* turn on the USB clock */ - pRCC->APB1ENR |= RCC_APB1ENR_USB_CLK; - - /* initialize the usb application */ - resetPin (USB_DISC_BANK,USB_DISC); /* present ourselves to the host */ - usbAppInit(); - -} - -void usbDsbBus(void) { - setPin(USB_DISC_BANK,USB_DISC); -} - -vu32 bDeviceState = UNCONNECTED; - -/* tracks sequential behavior of the ISTR */ -vu16 wIstr; -vu8 bIntPackSOF = 0; - -DEVICE Device_Table = { - NUM_ENDPTS, - 1 -}; - -DEVICE_PROP Device_Property = { - usbInit, - usbReset, - usbStatusIn, - usbStatusOut, - usbDataSetup, - usbNoDataSetup, - usbGetInterfaceSetting, - usbGetDeviceDescriptor, - usbGetConfigDescriptor, - usbGetStringDescriptor, - usbGetFunctionalDescriptor, - 0, - bMaxPacketSize -}; - -USER_STANDARD_REQUESTS User_Standard_Requests = { - usbGetConfiguration, - usbSetConfiguration, - usbGetInterface, - usbSetInterface, - usbGetStatus, - usbClearFeature, - usbSetEndpointFeature, - usbSetDeviceFeature, - usbSetDeviceAddress -}; - -void (*pEpInt_IN[7])(void) = { - nothingProc, - nothingProc, - nothingProc, - nothingProc, - nothingProc, - nothingProc, - nothingProc, -}; - -void (*pEpInt_OUT[7])(void) = { - nothingProc, - nothingProc, - nothingProc, - nothingProc, - nothingProc, - nothingProc, - nothingProc, -}; - -struct { - volatile RESUME_STATE eState; - volatile u8 bESOFcnt; -} ResumeS; - -/* dummy proc */ -void nothingProc(void) { -} - -/* Function Definitions */ -void usbAppInit(void) { - /* hook in to usb_core, depends on all those damn - non encapsulated externs! */ - USB_Init(); -} - -void usbSuspend(void) { - u16 wCNTR; - wCNTR = _GetCNTR(); - wCNTR |= CNTR_FSUSP | CNTR_LPMODE; - _SetCNTR(wCNTR); - - /* run any power reduction handlers */ - bDeviceState = SUSPENDED; -} - -void usbResumeInit(void) { - u16 wCNTR; - - /* restart any clocks that had been stopped */ - - wCNTR = _GetCNTR(); - wCNTR &= (~CNTR_LPMODE); - _SetCNTR(wCNTR); - - /* undo power reduction handlers here */ - - _SetCNTR(ISR_MSK); -} - -void usbResume(RESUME_STATE eResumeSetVal) { - u16 wCNTR; - - if (eResumeSetVal != RESUME_ESOF) - ResumeS.eState = eResumeSetVal; - - switch (ResumeS.eState) { - case RESUME_EXTERNAL: - usbResumeInit(); - ResumeS.eState = RESUME_OFF; - break; - case RESUME_INTERNAL: - usbResumeInit(); - ResumeS.eState = RESUME_START; - break; - case RESUME_LATER: - ResumeS.bESOFcnt = 2; - ResumeS.eState = RESUME_WAIT; - break; - case RESUME_WAIT: - ResumeS.bESOFcnt--; - if (ResumeS.bESOFcnt == 0) - ResumeS.eState = RESUME_START; - break; - case RESUME_START: - wCNTR = _GetCNTR(); - wCNTR |= CNTR_RESUME; - _SetCNTR(wCNTR); - ResumeS.eState = RESUME_ON; - ResumeS.bESOFcnt = 10; - break; - case RESUME_ON: - ResumeS.bESOFcnt--; - if (ResumeS.bESOFcnt == 0) { - wCNTR = _GetCNTR(); - wCNTR &= (~CNTR_RESUME); - _SetCNTR(wCNTR); - ResumeS.eState = RESUME_OFF; - } - break; - case RESUME_OFF: - case RESUME_ESOF: - default: - ResumeS.eState = RESUME_OFF; - break; - } -} - -RESULT usbPowerOn(void) { - u16 wRegVal; - - wRegVal = CNTR_FRES; - _SetCNTR(wRegVal); - - wInterrupt_Mask = 0; - _SetCNTR(wInterrupt_Mask); - _SetISTR(0); - wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM; /* the bare minimum */ - _SetCNTR(wInterrupt_Mask); - - return USB_SUCCESS; -} - -RESULT usbPowerOff(void) { - _SetCNTR(CNTR_FRES); - _SetISTR(0); - _SetCNTR(CNTR_FRES + CNTR_PDWN); - - /* note that all weve done here is powerdown the - usb peripheral. we have no disabled the clocks, - pulled the usb_disc pin back up, or reset the - application state machines */ - - return USB_SUCCESS; -} - -void usbInit(void) { - dfuInit(); - - pInformation->Current_Configuration = 0; - usbPowerOn(); - - _SetISTR(0); - wInterrupt_Mask = ISR_MSK; - _SetCNTR(wInterrupt_Mask); - - usbEnbISR(); /* configure the cortex M3 private peripheral NVIC */ - bDeviceState = UNCONNECTED; -} - -void usbReset(void) { - dfuUpdateByReset(); - - pInformation->Current_Configuration = 0; - pInformation->Current_Feature = usbConfigDescriptorDFU.Descriptor[7]; - - _SetBTABLE(BTABLE_ADDRESS); - - /* setup the ctrl endpoint */ - _SetEPType(ENDP0, EP_CONTROL); - _SetEPTxStatus(ENDP0, EP_TX_STALL); - - _SetEPRxAddr(ENDP0, ENDP0_RXADDR); - _SetEPTxAddr(ENDP0, ENDP0_TXADDR); - - Clear_Status_Out(ENDP0); - - SetEPRxCount(ENDP0, pProperty->MaxPacketSize); - // SetEPTxCount(ENDP0, pProperty->MaxPacketSize); - SetEPRxValid(ENDP0); - - bDeviceState = ATTACHED; - SetDeviceAddress(0); /* different than usbSetDeviceAddr! comes from usb_core */ -} - -void usbStatusIn(void) { -} - -void usbStatusOut(void) { -} - -RESULT usbDataSetup(u8 request) { - u8 *(*CopyRoutine)(u16); - CopyRoutine = NULL; - - /* handle dfu class requests */ - if ((pInformation->USBbmRequestType & (REQUEST_TYPE | RECIPIENT)) == (CLASS_REQUEST | INTERFACE_RECIPIENT)) { - if (dfuUpdateByRequest()) { - /* successfull state transition, handle the request */ - switch (request) { - case(DFU_GETSTATUS): - CopyRoutine = dfuCopyStatus; - break; - case(DFU_GETSTATE): - CopyRoutine = dfuCopyState; - break; - case(DFU_DNLOAD): - CopyRoutine = dfuCopyDNLOAD; - break; - case(DFU_UPLOAD): - CopyRoutine = dfuCopyUPLOAD; - break; - default: - /* leave copy routine null */ - break; - } - } - } - - if (CopyRoutine != NULL) { - pInformation->Ctrl_Info.CopyData = CopyRoutine; - pInformation->Ctrl_Info.Usb_wOffset = 0; - (*CopyRoutine)(0); - - return USB_SUCCESS; - } - - return USB_UNSUPPORT; -} - -RESULT usbNoDataSetup(u8 request) { - if ((pInformation->USBbmRequestType & (REQUEST_TYPE | RECIPIENT)) == (CLASS_REQUEST | INTERFACE_RECIPIENT)) { - /* todo, keep track of the destination interface, often stored in wIndex */ - if (dfuUpdateByRequest()) { - return USB_SUCCESS; - } - } - return USB_UNSUPPORT; -} - -RESULT usbGetInterfaceSetting(u8 interface, u8 altSetting) { - /* alt setting 0 -> program RAM, alt setting 1 -> FLASH */ - if (interface > NUM_ALT_SETTINGS) { - return USB_UNSUPPORT; - } else { - return USB_SUCCESS; - } -} - -u8 *usbGetDeviceDescriptor(u16 len) { - return Standard_GetDescriptorData(len, &usbDeviceDescriptorDFU); -} - -u8 *usbGetConfigDescriptor(u16 len) { - return Standard_GetDescriptorData(len, &usbConfigDescriptorDFU); -} - -u8 *usbGetStringDescriptor(u16 len) { - u8 strIndex = pInformation->USBwValue0; - if (strIndex > STR_DESC_LEN) { - return NULL; - } else { - return Standard_GetDescriptorData(len, &usbStringDescriptor[strIndex]); - } -} - -u8 *usbGetFunctionalDescriptor(u16 len) { - return Standard_GetDescriptorData(len, &usbFunctionalDescriptor); -} - - - -/***** start of USER STANDARD REQUESTS ****** - * - * These are the USER STANDARD REQUESTS, they are handled - * in the core but we are given these callbacks at the - * application level - *******************************************/ - -void usbGetConfiguration(void) { - /* nothing process */ -} - -void usbSetConfiguration(void) { - if (pInformation->Current_Configuration != 0) { - bDeviceState = CONFIGURED; - } -} - -void usbGetInterface(void) { - /* nothing process */ -} - -void usbSetInterface(void) { - /* nothing process */ -} - -void usbGetStatus(void) { - /* nothing process */ -} - -void usbClearFeature(void) { - /* nothing process */ -} - -void usbSetEndpointFeature(void) { - /* nothing process */ -} - -void usbSetDeviceFeature(void) { - /* nothing process */ -} - -void usbSetDeviceAddress(void) { - bDeviceState = ADDRESSED; -} -/***** end of USER STANDARD REQUESTS *****/ - - -void usbEnbISR(void) { - NVIC_InitTypeDef NVIC_InitStructure; - - - NVIC_InitStructure.NVIC_IRQChannel = USB_LP_IRQ; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelCmd = TRUE; - nvicInit(&NVIC_InitStructure); -} - -void usbDsbISR(void) { - NVIC_InitTypeDef NVIC_InitStructure; - NVIC_InitStructure.NVIC_IRQChannel = USB_LP_IRQ; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelCmd = FALSE; - nvicInit(&NVIC_InitStructure); -} - -void USB_LP_CAN1_RX0_IRQHandler(void) { - wIstr = _GetISTR(); - - /* go nuts with the preproc switches since this is an ISTR and must be FAST */ -#if (ISR_MSK & ISTR_RESET) - if (wIstr & ISTR_RESET & wInterrupt_Mask) { - _SetISTR((u16)CLR_RESET); - Device_Property.Reset(); - } -#endif - - -#if (ISR_MSK & ISTR_DOVR) - if (wIstr & ISTR_DOVR & wInterrupt_Mask) { - _SetISTR((u16)CLR_DOVR); - } -#endif - - -#if (ISR_MSK & ISTR_ERR) - if (wIstr & ISTR_ERR & wInterrupt_Mask) { - _SetISTR((u16)CLR_ERR); - } -#endif - - -#if (ISR_MSK & ISTR_WKUP) - if (wIstr & ISTR_WKUP & wInterrupt_Mask) { - _SetISTR((u16)CLR_WKUP); - usbResume(RESUME_EXTERNAL); - } -#endif - - /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ -#if (ISR_MSK & ISTR_SUSP) - if (wIstr & ISTR_SUSP & wInterrupt_Mask) { - - /* check if SUSPEND is possible */ - if (F_SUSPEND_ENABLED) { - usbSuspend(); - } else { - /* if not possible then resume after xx ms */ - usbResume(RESUME_LATER); - } - /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */ - _SetISTR((u16)CLR_SUSP); - } -#endif - - -#if (ISR_MSK & ISTR_SOF) - if (wIstr & ISTR_SOF & wInterrupt_Mask) { - _SetISTR((u16)CLR_SOF); - bIntPackSOF++; - } -#endif - - -#if (ISR_MSK & ISTR_ESOF) - if (wIstr & ISTR_ESOF & wInterrupt_Mask) { - _SetISTR((u16)CLR_ESOF); - /* resume handling timing is made with ESOFs */ - usbResume(RESUME_ESOF); /* request without change of the machine state */ - } -#endif - - /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ -#if (ISR_MSK & ISTR_CTR) - if (wIstr & ISTR_CTR & wInterrupt_Mask) { - /* servicing of the endpoint correct transfer interrupt */ - /* clear of the CTR flag into the sub */ - CTR_LP(); /* low priority ISR defined in the usb core lib */ - } -#endif - -} diff --git a/usb_bootloader/STM32F1/usb.h b/usb_bootloader/STM32F1/usb.h deleted file mode 100644 index 3c99951..0000000 --- a/usb_bootloader/STM32F1/usb.h +++ /dev/null @@ -1,142 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ -#ifndef __USB_H -#define __USB_H - -#include "common.h" -#include "usb_lib.h" -#include "usb_descriptor.h" - -/* USB Disc Pin Setup. On the Mini, USB DISC is PB9 */ -#define USB_DISC_BANK GPIOB -#define USB_DISC 9 -#define USB_DISC_CR GPIO_CRH(USB_DISC_BANK) -#define USB_DISC_CR_MASK 0xFFFFFF0F -#define USB_DISC_CR_OUTPUT_OD 0x00000050 -#define RCC_APB2ENR_USB 0x00000008 -#define RCC_APB1ENR_USB_CLK 0x00800000 - -/* USB configuration params */ -#define BTABLE_ADDRESS 0x00 -#define ENDP0_RXADDR 0x40 -#define ENDP0_TXADDR 0x80 /* gives 64 bytes i/o buflen */ -#define ENDP1_TXADDR 0xC0 -#define ENDP2_TXADDR 0x100 -#define ENDP3_RXADDR 0x110 - -#define bMaxPacketSize 0x40 /* 64B, maximum for usb FS devices */ -#define wTransferSize 0x0400 /* 1024B, want: maxpacket < wtransfer < 10KB (to ensure everything can live in ram */ - -#define NUM_ENDPTS 0x01 - -/* do we gracefully implement usb suspend? */ -#define F_SUSPEND_ENABLED 1 - -/* defines which interrupts are handled */ -#define ISR_MSK (CNTR_CTRM | \ - CNTR_WKUPM | \ - CNTR_SUSPM | \ - CNTR_ERRM | \ - CNTR_SOFM | \ - CNTR_ESOFM | \ - CNTR_RESETM \ - ) - -typedef enum _RESUME_STATE { - RESUME_EXTERNAL, - RESUME_INTERNAL, - RESUME_LATER, - RESUME_WAIT, - RESUME_START, - RESUME_ON, - RESUME_OFF, - RESUME_ESOF -} RESUME_STATE; - -typedef enum _DEVICE_STATE { - UNCONNECTED, - ATTACHED, - POWERED, - SUSPENDED, - ADDRESSED, - CONFIGURED -} DEVICE_STATE; - -void setupUSB(void); -void usbDsbBus(void); -void usbAppInit(void); /* singleton usb initializer */ - -void usbSuspend(void); -void usbResumeInit(void); -void usbResume(RESUME_STATE state); -RESULT usbPowerOn(void); -RESULT usbPowerOff(void); - -/* internal functions (as per the usb_core pProperty structure) */ -void usbInit(void); -void usbReset(void); -void usbStatusIn(void); -void usbStatusOut(void); - -RESULT usbDataSetup(u8 request); -RESULT usbNoDataSetup(u8 request); -RESULT usbGetInterfaceSetting(u8, u8); - -u8 *usbGetDeviceDescriptor(u16 length); -u8 *usbGetConfigDescriptor(u16 length); -u8 *usbGetStringDescriptor(u16 length); -u8 *usbGetFunctionalDescriptor(u16 length); - -/* internal callbacks to respond to standard requests */ -void usbGetConfiguration(void); -void usbSetConfiguration(void); -void usbGetInterface(void); -void usbSetInterface(void); -void usbGetStatus(void); -void usbClearFeature(void); -void usbSetEndpointFeature(void); -void usbSetDeviceFeature(void); -void usbSetDeviceAddress(void); - -/* the small number of comm emulator functions to - eventually be migrated into their own usart sources -*/ -u8 *vcomGetLineCoding(u16 length); -u8 *vcomSetLineCoding(u16 length); -void vcomEp1In(void); -void vcomEp3Out(void); - -/* Interrupt setup/handling exposed only so that - its obvious from main what interrupts are overloaded - from c_only_startup.s (see the top of main.c) */ -void usbDsbISR(void); -void usbEnbISR(void); - -/* override the weakly defined isr in linker */ -void USB_LP_CAN1_RX0_IRQHandler(void); - - -void nothingProc(void); - -#endif diff --git a/usb_bootloader/STM32F1/usb_callbacks.c b/usb_bootloader/STM32F1/usb_callbacks.c deleted file mode 100644 index 6881efe..0000000 --- a/usb_bootloader/STM32F1/usb_callbacks.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -/** - * @file usb_callbacks.c - * - * @brief aka endpoints: handling data transfer when "Configured". calls out to - * application specific callbacks (eg DFU) - * - */ diff --git a/usb_bootloader/STM32F1/usb_descriptor.c b/usb_bootloader/STM32F1/usb_descriptor.c deleted file mode 100644 index 7883700..0000000 --- a/usb_bootloader/STM32F1/usb_descriptor.c +++ /dev/null @@ -1,236 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - - -/** - * @file usb_descriptor.c - * - * @brief aka application descriptor; big static struct and callbacks for sending - * the descriptor. - * - */ - - -#include "usb_descriptor.h" - -u8 u8_usbDeviceDescriptorDFU[18] = { - 0x12, /* bLength */ - 0x01, /* bDescriptorType */ - 0x00, /* bcdUSB, version 1.00 */ - 0x01, - 0x00, /* bDeviceClass : See interface */ - 0x00, /* bDeviceSubClass : See interface*/ - 0x00, /* bDeviceProtocol : See interface */ - bMaxPacketSize, /* bMaxPacketSize0 0x40 = 64 */ - VEND_ID0, /* idVendor (0110) */ - VEND_ID1, - - PROD_ID0, /* idProduct (0x1001 or 1002) */ - PROD_ID1, - - 0x01, /* bcdDevice*/ - 0x02, - 0x01, /* iManufacturer : index of string Manufacturer */ - 0x02, /* iProduct : index of string descriptor of product*/ - 0x03, /* iSerialNumber : index of string serial number*/ - 0x01 /*bNumConfigurations */ -}; - -ONE_DESCRIPTOR usbDeviceDescriptorDFU = { - u8_usbDeviceDescriptorDFU, - 0x12 -}; - -u8 u8_usbFunctionalDescriptor[9] = { - /******************** DFU Functional Descriptor********************/ - 0x09, /*blength = 7 Bytes*/ - 0x21, /* DFU Functional Descriptor*/ - 0x03, /*bmAttributes, bitCanDnload | bitCanUpload */ - 0xFF, /*DetachTimeOut= 255 ms*/ - 0x00, - (wTransferSize & 0x00FF), - (wTransferSize & 0xFF00) >> 8, /* TransferSize = 1024 Byte*/ - 0x10, /* bcdDFUVersion = 1.1 */ - 0x01 -}; - -ONE_DESCRIPTOR usbFunctionalDescriptor = { - u8_usbFunctionalDescriptor, - 0x09 -}; - -#define u8_usbConfigDescriptorDFU_LENGTH 45 -u8 u8_usbConfigDescriptorDFU[u8_usbConfigDescriptorDFU_LENGTH] = { - 0x09, /* bLength: Configuation Descriptor size */ - 0x02, /* bDescriptorType: Configuration */ - u8_usbConfigDescriptorDFU_LENGTH, /* wTotalLength: Bytes returned */ - 0x00, - 0x01, /* bNumInterfaces: 1 interface */ - 0x01, /* bConfigurationValue: */ - 0x00, /* iConfiguration: */ - 0x80, /* bmAttributes: */ - 0x32, /* MaxPower 100 mA */ - /* 09 */ - - /************ Descriptor of DFU interface 0 Alternate setting 0 *********/ - 0x09, /* bLength: Interface Descriptor size */ - 0x04, /* bDescriptorType: */ - 0x00, /* bInterfaceNumber: Number of Interface */ - 0x00, /* bAlternateSetting: Alternate setting */ - 0x00, /* bNumEndpoints*/ - 0xFE, /* bInterfaceClass: DFU */ - 0x01, /* bInterfaceSubClass */ - - 0x02, /* nInterfaceProtocol, switched to 0x02 while in dfu_mode */ - - 0x04, /* iInterface: */ - - /************ Descriptor of DFU interface 0 Alternate setting 1 *********/ - 0x09, /* bLength: Interface Descriptor size */ - 0x04, /* bDescriptorType: */ - 0x00, /* bInterfaceNumber: Number of Interface */ - 0x01, /* bAlternateSetting: Alternate setting */ - 0x00, /* bNumEndpoints*/ - 0xFE, /* bInterfaceClass: DFU */ - 0x01, /* bInterfaceSubClass */ - - 0x02, /* nInterfaceProtocol, switched to 0x02 while in dfu_mode */ - - 0x05, /* iInterface: */ - - /************ Descriptor of DFU interface 0 Alternate setting 2 *********/ - 0x09, /* bLength: Interface Descriptor size */ - 0x04, /* bDescriptorType: */ - 0x00, /* bInterfaceNumber: Number of Interface */ - 0x02, /* bAlternateSetting: Alternate setting */ - 0x00, /* bNumEndpoints*/ - 0xFE, /* bInterfaceClass: DFU */ - 0x01, /* bInterfaceSubClass */ - - 0x02, /* nInterfaceProtocol, switched to 0x02 while in dfu_mode */ - - 0x06, /* iInterface: */ - - - /******************** DFU Functional Descriptor********************/ - 0x09, /*blength = 7 Bytes*/ - 0x21, /* DFU Functional Descriptor*/ - 0x03, /*bmAttributes, bitCanDnload | bitCanUpload */ - 0xFF, /*DetachTimeOut= 255 ms*/ - 0x00, - (wTransferSize & 0x00FF), - (wTransferSize & 0xFF00) >> 8, /* TransferSize = 1024 Byte*/ - 0x10, /* bcdDFUVersion = 1.1 */ - 0x01 - /***********************************************************/ - /*36*/ -}; - -ONE_DESCRIPTOR usbConfigDescriptorDFU = { - u8_usbConfigDescriptorDFU, - u8_usbConfigDescriptorDFU_LENGTH -}; - -#define USB_STR_LANG_ID_LEN 0x04 -u8 u8_usbStringLangId[USB_STR_LANG_ID_LEN] = { - USB_STR_LANG_ID_LEN, - 0x03, - 0x09, - 0x04 /* LangID = 0x0409: U.S. English */ -}; -#define USB_VENDOR_STR_LEN 0x12 -u8 u8_usbStringVendor[USB_VENDOR_STR_LEN] = { - USB_VENDOR_STR_LEN, - 0x03, - 'L', 0, 'e', 0, 'a', 0, 'f', 0, 'L', 0, 'a', 0, 'b', 0, 's', 0 -}; -#define USB_PRODUCT_STR_LEN 0x14 -u8 u8_usbStringProduct[USB_PRODUCT_STR_LEN] = { - USB_PRODUCT_STR_LEN, - 0x03, - 'M', 0, 'a', 0, 'p', 0, 'l', 0, 'e', 0, ' ', 0, '0', 0, '0', 0, '3', 0 -}; -#define USB_SERIAL_STR_LEN 0x10 -u8 u8_usbStringSerial[USB_SERIAL_STR_LEN] = { - USB_SERIAL_STR_LEN, - 0x03, - 'L', 0, 'L', 0, 'M', 0, ' ', 0, '0', 0, '0', 0, '3', 0 -}; - -#define ALT0_STR_LEN 0x6A -u8 u8_usbStringAlt0[ALT0_STR_LEN] = { -ALT0_STR_LEN, -0x03, -'B',0,'o',0,'o',0,'t',0,'l',0,'o',0,'a',0,'d',0,'e',0,'r',0,' ',0,'2',0,'.',0,'0',0,' ',0,'E',0,'R',0,'R',0,'O',0,'R',0,'.',0,' ',0,'U',0,'p',0,'l',0,'o',0,'a',0,'d',0,' ',0,'t',0,'o',0,' ',0,'R',0,'A',0,'M',0,' ',0,'i',0,'s',0,' ',0,'n',0,'o',0,'t',0,' ',0,'s',0,'u',0,'p',0,'p',0,'o',0,'r',0,'t',0,'e',0,'d',0 -}; - -#define ALT1_STR_LEN 0x62 -u8 u8_usbStringAlt1[ALT1_STR_LEN] = { -ALT1_STR_LEN, -0x03, -'B',0,'o',0,'o',0,'t',0,'l',0,'o',0,'a',0,'d',0,'e',0,'r',0,' ',0,'2',0,'.',0,'0',0,' ',0,'U',0,'p',0,'l',0,'o',0,'a',0,'d',0,' ',0,'t',0,'o',0,' ',0,'F',0,'l',0,'a',0,'s',0,'h',0,' ',0,'a',0,'d',0,'d',0,'r',0,'e',0,'s',0,'s',0,' ',0,'0',0,'x',0,'8',0,'0',0,'0',0,'5',0,'0',0,'0',0,'0',0 -}; - -#define ALT2_STR_LEN 0x62 -u8 u8_usbStringAlt2[ALT2_STR_LEN] = { -ALT2_STR_LEN, -0x03, -'B',0,'o',0,'o',0,'t',0,'l',0,'o',0,'a',0,'d',0,'e',0,'r',0,' ',0,'2',0,'.',0,'0',0,' ',0,'U',0,'p',0,'l',0,'o',0,'a',0,'d',0,' ',0,'t',0,'o',0,' ',0,'F',0,'l',0,'a',0,'s',0,'h',0,' ',0,'a',0,'d',0,'d',0,'r',0,'e',0,'s',0,'s',0,' ',0,'0',0,'x',0,'8',0,'0',0,'0',0,'2',0,'0',0,'0',0,'0',0 -}; - -u8 u8_usbStringInterface = NULL; - -ONE_DESCRIPTOR usbStringDescriptor[STR_DESC_LEN] = { - { (u8 *)u8_usbStringLangId, USB_STR_LANG_ID_LEN }, - { (u8 *)u8_usbStringVendor, USB_VENDOR_STR_LEN }, - { (u8 *)u8_usbStringProduct, USB_PRODUCT_STR_LEN }, - { (u8 *)u8_usbStringSerial, USB_SERIAL_STR_LEN }, - { (u8 *)u8_usbStringAlt0, ALT0_STR_LEN }, - { (u8 *)u8_usbStringAlt1, ALT1_STR_LEN }, - { (u8 *)u8_usbStringAlt2, ALT2_STR_LEN } -}; -/* - Roger. - Javascript utility to make new ALT ID text structs - - - - -*/ diff --git a/usb_bootloader/STM32F1/usb_descriptor.h b/usb_bootloader/STM32F1/usb_descriptor.h deleted file mode 100644 index 58c612d..0000000 --- a/usb_bootloader/STM32F1/usb_descriptor.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ***************************************************************************** - * The MIT License - * - * Copyright (c) 2010 LeafLabs LLC. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * ****************************************************************************/ - -#ifndef __MAPLE_USB_DESC_H -#define __MAPLE_USB_DESC_H - -#include "common.h" -#include "usb_lib.h" -#include "usb.h" - -#define NUM_ALT_SETTINGS 3 -#define STR_DESC_LEN 7 - -extern ONE_DESCRIPTOR usbDeviceDescriptorDFU; -extern ONE_DESCRIPTOR usbConfigDescriptorDFU; -extern ONE_DESCRIPTOR usbStringDescriptor[STR_DESC_LEN]; -extern ONE_DESCRIPTOR usbFunctionalDescriptor; - -#endif diff --git a/usb_bootloader/STM32F1/usb_lib/usb_conf.h b/usb_bootloader/STM32F1/usb_lib/usb_conf.h deleted file mode 100644 index e17fc7a..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_conf.h +++ /dev/null @@ -1,86 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_conf.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Device Firmware Upgrade (DFU) configuration file -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_CONF_H -#define __USB_CONF_H - -/* Includes ------------------------------------------------------------------*/ -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -/* External variables --------------------------------------------------------*/ -/*-------------------------------------------------------------*/ -/* EP_NUM */ -/* defines how many endpoints are used by the device */ -/*-------------------------------------------------------------*/ -#define EP_NUM (1) - -/*-------------------------------------------------------------*/ -/* -------------- Buffer Description Table -----------------*/ -/*-------------------------------------------------------------*/ -/* buffer table base address */ -/* buffer table base address */ -#define BTABLE_ADDRESS (0x00) - -/* EP0 */ -/* rx/tx buffer base address */ -#define ENDP0_RXADDR (0x10) -#define ENDP0_TXADDR (0x50) - - -/*-------------------------------------------------------------*/ -/* ------------------- ISTR events -------------------------*/ -/*-------------------------------------------------------------*/ -/* IMR_MSK */ -/* mask defining which events has to be handled */ -/* by the device application software */ -#define IMR_MSK (CNTR_CTRM | \ - CNTR_WKUPM | \ - CNTR_SUSPM | \ - CNTR_ERRM | \ - CNTR_SOFM | \ - CNTR_ESOFM | \ - CNTR_RESETM \ - ) - -/* CTR service routines */ -/* associated to defined endpoints */ -#define EP1_IN_Callback NOP_Process -#define EP2_IN_Callback NOP_Process -#define EP3_IN_Callback NOP_Process -#define EP4_IN_Callback NOP_Process -#define EP5_IN_Callback NOP_Process -#define EP6_IN_Callback NOP_Process -#define EP7_IN_Callback NOP_Process - - -#define EP1_OUT_Callback NOP_Process -#define EP2_OUT_Callback NOP_Process -#define EP3_OUT_Callback NOP_Process -#define EP4_OUT_Callback NOP_Process -#define EP5_OUT_Callback NOP_Process -#define EP6_OUT_Callback NOP_Process -#define EP7_OUT_Callback NOP_Process - - -#endif /*__USB_CONF_H*/ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ - - - - diff --git a/usb_bootloader/STM32F1/usb_lib/usb_core.c b/usb_bootloader/STM32F1/usb_lib/usb_core.c deleted file mode 100644 index 50f5111..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_core.c +++ /dev/null @@ -1,1013 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_core.c -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Standard protocol processing (USB v2.0) -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_lib.h" -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -#define ValBit(VAR,Place) (VAR & (1 << Place)) -#define SetBit(VAR,Place) (VAR |= (1 << Place)) -#define ClrBit(VAR,Place) (VAR &= ((1 << Place) ^ 255)) - -#define Send0LengthData() { _SetEPTxCount(ENDP0, 0); \ - vSetEPTxStatus(EP_TX_VALID); \ - } - -#define vSetEPRxStatus(st) (SaveRState = st) -#define vSetEPTxStatus(st) (SaveTState = st) - -#define USB_StatusIn() Send0LengthData() -#define USB_StatusOut() vSetEPRxStatus(EP_RX_VALID) - -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -u16_u8 StatusInfo; -bool Data_Mul_MaxPacketSize = FALSE; -/* Private function prototypes -----------------------------------------------*/ -static void DataStageOut(void); -static void DataStageIn(void); -static void NoData_Setup0(void); -static void Data_Setup0(void); -/* Private functions ---------------------------------------------------------*/ - -/******************************************************************************* -* Function Name : Standard_GetConfiguration. -* Description : Return the current configuration variable address. -* Input : Length - How many bytes are needed. -* Output : None. -* Return : Return 1 , if the request is invalid when "Length" is 0. -* Return "Buffer" if the "Length" is not 0. -*******************************************************************************/ -u8 *Standard_GetConfiguration(u16 Length) -{ - if (Length == 0) - { - pInformation->Ctrl_Info.Usb_wLength = - sizeof(pInformation->Current_Configuration); - return 0; - } - pUser_Standard_Requests->User_GetConfiguration(); - return (u8 *)&pInformation->Current_Configuration; -} - -/******************************************************************************* -* Function Name : Standard_SetConfiguration. -* Description : This routine is called to set the configuration value -* Then each class should configure device themself. -* Input : None. -* Output : None. -* Return : Return USB_SUCCESS, if the request is performed. -* Return USB_UNSUPPORT, if the request is invalid. -*******************************************************************************/ -RESULT Standard_SetConfiguration(void) -{ - - if ((pInformation->USBwValue0 <= - Device_Table.Total_Configuration) && (pInformation->USBwValue1 == 0) - && (pInformation->USBwIndex == 0)) /*call Back usb spec 2.0*/ - { - pInformation->Current_Configuration = pInformation->USBwValue0; - pUser_Standard_Requests->User_SetConfiguration(); - return USB_SUCCESS; - } - else - { - return USB_UNSUPPORT; - } -} - -/******************************************************************************* -* Function Name : Standard_GetInterface. -* Description : Return the Alternate Setting of the current interface. -* Input : Length - How many bytes are needed. -* Output : None. -* Return : Return 0, if the request is invalid when "Length" is 0. -* Return "Buffer" if the "Length" is not 0. -*******************************************************************************/ -u8 *Standard_GetInterface(u16 Length) -{ - if (Length == 0) - { - pInformation->Ctrl_Info.Usb_wLength = - sizeof(pInformation->Current_AlternateSetting); - return 0; - } - pUser_Standard_Requests->User_GetInterface(); - return (u8 *)&pInformation->Current_AlternateSetting; -} - -/******************************************************************************* -* Function Name : Standard_SetInterface. -* Description : This routine is called to set the interface. -* Then each class should configure the interface them self. -* Input : None. -* Output : None. -* Return : - Return USB_SUCCESS, if the request is performed. -* - Return USB_UNSUPPORT, if the request is invalid. -*******************************************************************************/ -RESULT Standard_SetInterface(void) -{ - RESULT Re; - /*Test if the specified Interface and Alternate Setting are supported by - the application Firmware*/ - Re = (*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, pInformation->USBwValue0); - - if (pInformation->Current_Configuration != 0) - { - if ((Re != USB_SUCCESS) || (pInformation->USBwIndex1 != 0) - || (pInformation->USBwValue1 != 0)) - { - return USB_UNSUPPORT; - } - else if (Re == USB_SUCCESS) - { - pUser_Standard_Requests->User_SetInterface(); - pInformation->Current_Interface = pInformation->USBwIndex0; - pInformation->Current_AlternateSetting = pInformation->USBwValue0; - return USB_SUCCESS; - } - - } - - return USB_UNSUPPORT; -} - -/******************************************************************************* -* Function Name : Standard_GetStatus. -* Description : Copy the device request data to "StatusInfo buffer". -* Input : - Length - How many bytes are needed. -* Output : None. -* Return : Return 0, if the request is at end of data block, -* or is invalid when "Length" is 0. -*******************************************************************************/ -u8 *Standard_GetStatus(u16 Length) -{ - if (Length == 0) - { - pInformation->Ctrl_Info.Usb_wLength = 2; - return 0; - } - - StatusInfo.w = 0; - /* Reset Status Information */ - - if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - /*Get Device Status */ - u8 Feature = pInformation->Current_Feature; - - /* Remote Wakeup enabled */ - if (ValBit(Feature, 5)) - { - SetBit(StatusInfo0, 1); - } - - /* Bus-powered */ - if (ValBit(Feature, 6)) - { - ClrBit(StatusInfo0, 0); - } - else /* Self-powered */ - { - SetBit(StatusInfo0, 0); - } - } - /*Interface Status*/ - else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) - { - return (u8 *)&StatusInfo; - } - /*Get EndPoint Status*/ - else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) - { - u8 Related_Endpoint; - u8 wIndex0 = pInformation->USBwIndex0; - - Related_Endpoint = (wIndex0 & 0x0f); - if (ValBit(wIndex0, 7)) - { - /* IN endpoint */ - if (_GetTxStallStatus(Related_Endpoint)) - { - SetBit(StatusInfo0, 0); /* IN Endpoint stalled */ - } - } - else - { - /* OUT endpoint */ - if (_GetRxStallStatus(Related_Endpoint)) - { - SetBit(StatusInfo0, 0); /* OUT Endpoint stalled */ - } - } - - } - else - { - return NULL; - } - pUser_Standard_Requests->User_GetStatus(); - return (u8 *)&StatusInfo; -} - -/******************************************************************************* -* Function Name : Standard_ClearFeature. -* Description : Clear or disable a specific feature. -* Input : None. -* Output : None. -* Return : - Return USB_SUCCESS, if the request is performed. -* - Return USB_UNSUPPORT, if the request is invalid. -*******************************************************************************/ -RESULT Standard_ClearFeature(void) -{ - u32 Type_Rec = Type_Recipient; - u32 Status; - - - if (Type_Rec == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - {/*Device Clear Feature*/ - ClrBit(pInformation->Current_Feature, 5); - return USB_SUCCESS; - } - else if (Type_Rec == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) - {/*EndPoint Clear Feature*/ - DEVICE* pDev; - u32 Related_Endpoint; - u32 wIndex0; - u32 rEP; - - if ((pInformation->USBwValue != ENDPOINT_STALL) - || (pInformation->USBwIndex1 != 0)) - { - return USB_UNSUPPORT; - } - - pDev = &Device_Table; - wIndex0 = pInformation->USBwIndex0; - rEP = wIndex0 & ~0x80; - Related_Endpoint = ENDP0 + rEP; - - if (ValBit(pInformation->USBwIndex0, 7)) - { - /*Get Status of endpoint & stall the request if the related_ENdpoint - is Disabled*/ - Status = _GetEPTxStatus(Related_Endpoint); - } - else - { - Status = _GetEPRxStatus(Related_Endpoint); - } - - if ((rEP >= pDev->Total_Endpoint) || (Status == 0) - || (pInformation->Current_Configuration == 0)) - { - return USB_UNSUPPORT; - } - - - if (wIndex0 & 0x80) - { - /* IN endpoint */ - if (_GetTxStallStatus(Related_Endpoint )) - { - ClearDTOG_TX(Related_Endpoint); - SetEPTxStatus(Related_Endpoint, EP_TX_VALID); - } - } - else - { - /* OUT endpoint */ - if (_GetRxStallStatus(Related_Endpoint)) - { - if (Related_Endpoint == ENDP0) - { - /* After clear the STALL, enable the default endpoint receiver */ - SetEPRxCount(Related_Endpoint, Device_Property.MaxPacketSize); - _SetEPRxStatus(Related_Endpoint, EP_RX_VALID); - } - else - { - ClearDTOG_RX(Related_Endpoint); - _SetEPRxStatus(Related_Endpoint, EP_RX_VALID); - } - } - } - pUser_Standard_Requests->User_ClearFeature(); - return USB_SUCCESS; - } - - return USB_UNSUPPORT; -} - -/******************************************************************************* -* Function Name : Standard_SetEndPointFeature -* Description : Set or enable a specific feature of EndPoint -* Input : None. -* Output : None. -* Return : - Return USB_SUCCESS, if the request is performed. -* - Return USB_UNSUPPORT, if the request is invalid. -*******************************************************************************/ -RESULT Standard_SetEndPointFeature(void) -{ - u32 wIndex0; - u32 Related_Endpoint; - u32 rEP; - u32 Status; - - wIndex0 = pInformation->USBwIndex0; - rEP = wIndex0 & ~0x80; - Related_Endpoint = ENDP0 + rEP; - - if (ValBit(pInformation->USBwIndex0, 7)) - { - /* get Status of endpoint & stall the request if the related_ENdpoint - is Disabled*/ - Status = _GetEPTxStatus(Related_Endpoint); - } - else - { - Status = _GetEPRxStatus(Related_Endpoint); - } - - if (Related_Endpoint >= Device_Table.Total_Endpoint - || pInformation->USBwValue != 0 || Status == 0 - || pInformation->Current_Configuration == 0) - { - return USB_UNSUPPORT; - } - else - { - if (wIndex0 & 0x80) - { - /* IN endpoint */ - _SetEPTxStatus(Related_Endpoint, EP_TX_STALL); - } - - else - { - /* OUT endpoint */ - _SetEPRxStatus(Related_Endpoint, EP_RX_STALL); - } - } - pUser_Standard_Requests->User_SetEndPointFeature(); - return USB_SUCCESS; -} - -/******************************************************************************* -* Function Name : Standard_SetDeviceFeature. -* Description : Set or enable a specific feature of Device. -* Input : None. -* Output : None. -* Return : - Return USB_SUCCESS, if the request is performed. -* - Return USB_UNSUPPORT, if the request is invalid. -*******************************************************************************/ -RESULT Standard_SetDeviceFeature(void) -{ - SetBit(pInformation->Current_Feature, 5); - pUser_Standard_Requests->User_SetDeviceFeature(); - return USB_SUCCESS; -} - -/******************************************************************************* -* Function Name : Standard_GetDescriptorData. -* Description : Standard_GetDescriptorData is used for descriptors transfer. -* : This routine is used for the descriptors resident in Flash -* or RAM -* pDesc can be in either Flash or RAM -* The purpose of this routine is to have a versatile way to -* response descriptors request. It allows user to generate -* certain descriptors with software or read descriptors from -* external storage part by part. -* Input : - Length - Length of the data in this transfer. -* - pDesc - A pointer points to descriptor struct. -* The structure gives the initial address of the descriptor and -* its original size. -* Output : None. -* Return : Address of a part of the descriptor pointed by the Usb_ -* wOffset The buffer pointed by this address contains at least -* Length bytes. -*******************************************************************************/ -u8 *Standard_GetDescriptorData(u16 Length, ONE_DESCRIPTOR *pDesc) -{ - u32 wOffset; - - wOffset = pInformation->Ctrl_Info.Usb_wOffset; - if (Length == 0) - { - pInformation->Ctrl_Info.Usb_wLength = pDesc->Descriptor_Size - wOffset; - return 0; - } - - return pDesc->Descriptor + wOffset; -} - -/******************************************************************************* -* Function Name : DataStageOut. -* Description : Data stage of a Control Write Transfer. -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -void DataStageOut(void) -{ - ENDPOINT_INFO *pEPinfo = &pInformation->Ctrl_Info; - u32 save_rLength; - - save_rLength = pEPinfo->Usb_rLength; - - if (pEPinfo->CopyData && save_rLength) - { - u8 *Buffer; - u32 Length; - - Length = pEPinfo->PacketSize; - if (Length > save_rLength) - { - Length = save_rLength; - } - - Buffer = (*pEPinfo->CopyData)(Length); - pEPinfo->Usb_rLength -= Length; - pEPinfo->Usb_rOffset += Length; - - PMAToUserBufferCopy(Buffer, GetEPRxAddr(ENDP0), Length); - } - - if (pEPinfo->Usb_rLength != 0) - { - vSetEPRxStatus(EP_RX_VALID);/* re-enable for next data reception */ - SetEPTxCount(ENDP0, 0); - vSetEPTxStatus(EP_TX_VALID);/* Expect the host to abort the data OUT stage */ - } - /* Set the next State*/ - if (pEPinfo->Usb_rLength >= pEPinfo->PacketSize) - { - pInformation->ControlState = OUT_DATA; - } - else - { - if (pEPinfo->Usb_rLength > 0) - { - pInformation->ControlState = LAST_OUT_DATA; - } - else if (pEPinfo->Usb_rLength == 0) - { - pInformation->ControlState = WAIT_STATUS_IN; - USB_StatusIn(); - } - } -} - -/******************************************************************************* -* Function Name : DataStageIn. -* Description : Data stage of a Control Read Transfer. -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -void DataStageIn(void) -{ - ENDPOINT_INFO *pEPinfo = &pInformation->Ctrl_Info; - u32 save_wLength = pEPinfo->Usb_wLength; - u32 ControlState = pInformation->ControlState; - - u8 *DataBuffer; - u32 Length; - - if ((save_wLength == 0) && (ControlState == LAST_IN_DATA)) - { - if(Data_Mul_MaxPacketSize == TRUE) - { - /* No more data to send and empty packet */ - Send0LengthData(); - ControlState = LAST_IN_DATA; - Data_Mul_MaxPacketSize = FALSE; - } - else - { - /* No more data to send so STALL the TX Status*/ - ControlState = WAIT_STATUS_OUT; - vSetEPTxStatus(EP_TX_STALL); - } - - goto Expect_Status_Out; - } - - Length = pEPinfo->PacketSize; - ControlState = (save_wLength <= Length) ? LAST_IN_DATA : IN_DATA; - - if (Length > save_wLength) - { - Length = save_wLength; - } - - DataBuffer = (*pEPinfo->CopyData)(Length); - - UserToPMABufferCopy(DataBuffer, GetEPTxAddr(ENDP0), Length); - - SetEPTxCount(ENDP0, Length); - - pEPinfo->Usb_wLength -= Length; - pEPinfo->Usb_wOffset += Length; - vSetEPTxStatus(EP_TX_VALID); - - USB_StatusOut();/* Expect the host to abort the data IN stage */ - -Expect_Status_Out: - pInformation->ControlState = ControlState; -} - -/******************************************************************************* -* Function Name : NoData_Setup0. -* Description : Proceed the processing of setup request without data stage. -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -void NoData_Setup0(void) -{ - RESULT Result = USB_UNSUPPORT; - u32 RequestNo = pInformation->USBbRequest; - u32 ControlState; - - if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - /* Device Request*/ - /* SET_CONFIGURATION*/ - if (RequestNo == SET_CONFIGURATION) - { - Result = Standard_SetConfiguration(); - } - - /*SET ADDRESS*/ - else if (RequestNo == SET_ADDRESS) - { - if ((pInformation->USBwValue0 > 127) || (pInformation->USBwValue1 != 0) - || (pInformation->USBwIndex != 0) - || (pInformation->Current_Configuration != 0)) - /* Device Address should be 127 or less*/ - { - ControlState = STALLED; - goto exit_NoData_Setup0; - } - else - { - Result = USB_SUCCESS; - } - } - /*SET FEATURE for Device*/ - else if (RequestNo == SET_FEATURE) - { - if ((pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP) - && (pInformation->USBwIndex == 0) - && (ValBit(pInformation->Current_Feature, 5))) - { - Result = Standard_SetDeviceFeature(); - } - else - { - Result = USB_UNSUPPORT; - } - } - /*Clear FEATURE for Device */ - else if (RequestNo == CLEAR_FEATURE) - { - if (pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP - && pInformation->USBwIndex == 0 - && ValBit(pInformation->Current_Feature, 5)) - { - Result = Standard_ClearFeature(); - } - else - { - Result = USB_UNSUPPORT; - } - } - - } - - /* Interface Request*/ - else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) - { - /*SET INTERFACE*/ - if (RequestNo == SET_INTERFACE) - { - Result = Standard_SetInterface(); - } - } - - /* EndPoint Request*/ - else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) - { - /*CLEAR FEATURE for EndPoint*/ - if (RequestNo == CLEAR_FEATURE) - { - Result = Standard_ClearFeature(); - } - /* SET FEATURE for EndPoint*/ - else if (RequestNo == SET_FEATURE) - { - Result = Standard_SetEndPointFeature(); - } - } - else - { - Result = USB_UNSUPPORT; - } - - - if (Result != USB_SUCCESS) - { - Result = (*pProperty->Class_NoData_Setup)(RequestNo); - if (Result == USB_NOT_READY) - { - ControlState = PAUSE; - goto exit_NoData_Setup0; - } - } - - if (Result != USB_SUCCESS) - { - ControlState = STALLED; - goto exit_NoData_Setup0; - } - - ControlState = WAIT_STATUS_IN;/* After no data stage SETUP */ - - USB_StatusIn(); - -exit_NoData_Setup0: - pInformation->ControlState = ControlState; - return; -} - -/******************************************************************************* -* Function Name : Data_Setup0. -* Description : Proceed the processing of setup request with data stage. -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -void Data_Setup0(void) -{ - u8 *(*CopyRoutine)(u16); - RESULT Result; - u32 Request_No = pInformation->USBbRequest; - - u32 Related_Endpoint, Reserved; - u32 wOffset, Status; - - - - CopyRoutine = NULL; - wOffset = 0; - - if (Request_No == GET_DESCRIPTOR) - { - if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - u8 wValue1 = pInformation->USBwValue1; - if (wValue1 == DEVICE_DESCRIPTOR) - { - CopyRoutine = pProperty->GetDeviceDescriptor; - } - else if (wValue1 == CONFIG_DESCRIPTOR) - { - CopyRoutine = pProperty->GetConfigDescriptor; - } - else if (wValue1 == STRING_DESCRIPTOR) - { - CopyRoutine = pProperty->GetStringDescriptor; - } else if (wValue1 == 0x21) /* added to support functional descriptors */ - { - CopyRoutine = pProperty->GetFunctionalDescriptor; - } /* End of GET_DESCRIPTOR */ - } - } - - /*GET STATUS*/ - else if ((Request_No == GET_STATUS) && (pInformation->USBwValue == 0) - && (pInformation->USBwLength == 0x0002) - && (pInformation->USBwIndex1 == 0)) - { - /* GET STATUS for Device*/ - if ((Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - && (pInformation->USBwIndex == 0)) - { - CopyRoutine = Standard_GetStatus; - } - - /* GET STATUS for Interface*/ - else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) - { - if (((*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, 0) == USB_SUCCESS) - && (pInformation->Current_Configuration != 0)) - { - CopyRoutine = Standard_GetStatus; - } - } - - /* GET STATUS for EndPoint*/ - else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) - { - Related_Endpoint = (pInformation->USBwIndex0 & 0x0f); - Reserved = pInformation->USBwIndex0 & 0x70; - - if (ValBit(pInformation->USBwIndex0, 7)) - { - /*Get Status of endpoint & stall the request if the related_ENdpoint - is Disabled*/ - Status = _GetEPTxStatus(Related_Endpoint); - } - else - { - Status = _GetEPRxStatus(Related_Endpoint); - } - - if ((Related_Endpoint < Device_Table.Total_Endpoint) && (Reserved == 0) - && (Status != 0)) - { - CopyRoutine = Standard_GetStatus; - } - } - - } - - /*GET CONFIGURATION*/ - else if (Request_No == GET_CONFIGURATION) - { - if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) - { - CopyRoutine = Standard_GetConfiguration; - } - } - /*GET INTERFACE*/ - else if (Request_No == GET_INTERFACE) - { - if ((Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) - && (pInformation->Current_Configuration != 0) && (pInformation->USBwValue == 0) - && (pInformation->USBwIndex1 == 0) && (pInformation->USBwLength == 0x0001) - && ((*pProperty->Class_Get_Interface_Setting)(pInformation->USBwIndex0, 0) == USB_SUCCESS)) - { - CopyRoutine = Standard_GetInterface; - } - - } - - if (CopyRoutine) - { - pInformation->Ctrl_Info.Usb_wOffset = wOffset; - pInformation->Ctrl_Info.CopyData = CopyRoutine; - /* sb in the original the cast to word was directly */ - /* now the cast is made step by step */ - (*CopyRoutine)(0); - Result = USB_SUCCESS; - } - else - { - Result = (*pProperty->Class_Data_Setup)(pInformation->USBbRequest); - if (Result == USB_NOT_READY) - { - pInformation->ControlState = PAUSE; - return; - } - } - - if (pInformation->Ctrl_Info.Usb_wLength == 0xFFFF) - { - /* Data is not ready, wait it */ - pInformation->ControlState = PAUSE; - return; - } - if ((Result == USB_UNSUPPORT) || (pInformation->Ctrl_Info.Usb_wLength == 0)) - { - /* Unsupported request */ - pInformation->ControlState = STALLED; - return; - } - - - if (ValBit(pInformation->USBbmRequestType, 7)) - { - /* Device ==> Host */ - vu32 wLength = pInformation->USBwLength; - - /* Restrict the data length to be the one host asks */ - if (pInformation->Ctrl_Info.Usb_wLength > wLength) - { - pInformation->Ctrl_Info.Usb_wLength = wLength; - } - - else if (pInformation->Ctrl_Info.Usb_wLength < pInformation->USBwLength) - { - if (pInformation->Ctrl_Info.Usb_wLength < pProperty->MaxPacketSize) - { - Data_Mul_MaxPacketSize = FALSE; - } - else if ((pInformation->Ctrl_Info.Usb_wLength % pProperty->MaxPacketSize) == 0) - { - Data_Mul_MaxPacketSize = TRUE; - } - } - - pInformation->Ctrl_Info.PacketSize = pProperty->MaxPacketSize; - DataStageIn(); - } - else - { - pInformation->ControlState = OUT_DATA; - vSetEPRxStatus(EP_RX_VALID); /* enable for next data reception */ - } - - return; -} - -/******************************************************************************* -* Function Name : Setup0_Process -* Description : Get the device request data and dispatch to individual process. -* Input : None. -* Output : None. -* Return : Post0_Process. -*******************************************************************************/ -u8 Setup0_Process(void) -{ - - union - { - u8* b; - u16* w; - } pBuf; - - pBuf.b = PMAAddr + (u8 *)(_GetEPRxAddr(ENDP0) * 2); /* *2 for 32 bits addr */ - - if (pInformation->ControlState != PAUSE) - { - pInformation->USBbmRequestType = *pBuf.b++; /* bmRequestType */ - pInformation->USBbRequest = *pBuf.b++; /* bRequest */ - pBuf.w++; /* word not accessed because of 32 bits addressing */ - pInformation->USBwValue = *pBuf.w++; /* wValue in Little Endian */ - pBuf.w++; /* word not accessed because of 32 bits addressing */ - pInformation->USBwIndex = *pBuf.w++; /* wIndex in Little Endian */ - pBuf.w++; /* word not accessed because of 32 bits addressing */ - pInformation->USBwLength = *pBuf.w; /* wLength in Little Endian */ - } - - pInformation->ControlState = SETTING_UP; - if (pInformation->USBwLength == 0) - { - /* Setup with no data stage */ - NoData_Setup0(); - } - else - { - /* Setup with data stage */ - Data_Setup0(); - } - return Post0_Process(); -} - -/******************************************************************************* -* Function Name : In0_Process -* Description : Process the IN token on all default endpoint. -* Input : None. -* Output : None. -* Return : Post0_Process. -*******************************************************************************/ -u8 In0_Process(void) -{ - u32 ControlState = pInformation->ControlState; - - if ((ControlState == IN_DATA) || (ControlState == LAST_IN_DATA)) - { - DataStageIn(); - /* ControlState may be changed outside the function */ - ControlState = pInformation->ControlState; - } - - else if (ControlState == WAIT_STATUS_IN) - { - if ((pInformation->USBbRequest == SET_ADDRESS) && - (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))) - { - SetDeviceAddress(pInformation->USBwValue0); - pUser_Standard_Requests->User_SetDeviceAddress(); - } - (*pProperty->Process_Status_IN)(); - ControlState = STALLED; - } - - else - { - ControlState = STALLED; - } - - pInformation->ControlState = ControlState; - - return Post0_Process(); -} - -/******************************************************************************* -* Function Name : Out0_Process -* Description : Process the OUT token on all default endpoint. -* Input : None. -* Output : None. -* Return : Post0_Process. -*******************************************************************************/ -u8 Out0_Process(void) -{ - u32 ControlState = pInformation->ControlState; - - if ((ControlState == OUT_DATA) || (ControlState == LAST_OUT_DATA)) - { - DataStageOut(); - ControlState = pInformation->ControlState; /* may be changed outside the function */ - } - - else if (ControlState == WAIT_STATUS_OUT) - { - (*pProperty->Process_Status_OUT)(); - ControlState = STALLED; - } - - else if ((ControlState == IN_DATA) || (ControlState == LAST_IN_DATA)) - { - /* host aborts the transfer before finish */ - ControlState = STALLED; - } - - /* Unexpect state, STALL the endpoint */ - else - { - ControlState = STALLED; - } - - pInformation->ControlState = ControlState; - - return Post0_Process(); -} - -/******************************************************************************* -* Function Name : Post0_Process -* Description : Stall the Endpoint 0 in case of error. -* Input : None. -* Output : None. -* Return : - 0 if the control State is in PAUSE -* - 1 if not. -*******************************************************************************/ -u8 Post0_Process(void) -{ - SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); - - if (pInformation->ControlState == STALLED) - { - vSetEPRxStatus(EP_RX_STALL); - vSetEPTxStatus(EP_TX_STALL); - } - - return (pInformation->ControlState == PAUSE); -} - -/******************************************************************************* -* Function Name : SetDeviceAddress. -* Description : Set the device and all the used Endpoints addresses. -* Input : - Val: device adress. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetDeviceAddress(u8 Val) -{ - u32 i; - u32 nEP = Device_Table.Total_Endpoint; - - /* set address in every used endpoint */ - for (i = 0; i < nEP; i++) - { - _SetEPAddress((u8)i, (u8)i); - } /* for */ - _SetDADDR(Val | DADDR_EF); /* set device address and enable function */ -} - -/******************************************************************************* -* Function Name : NOP_Process -* Description : No operation function. -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -void NOP_Process(void) -{ -} - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_core.h b/usb_bootloader/STM32F1/usb_lib/usb_core.h deleted file mode 100644 index 4a5e0df..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_core.h +++ /dev/null @@ -1,247 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_core.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Standard protocol processing functions prototypes -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_CORE_H -#define __USB_CORE_H - -/* Includes ------------------------------------------------------------------*/ -/* Exported types ------------------------------------------------------------*/ -typedef enum _CONTROL_STATE -{ - WAIT_SETUP, /* 0 */ - SETTING_UP, /* 1 */ - IN_DATA, /* 2 */ - OUT_DATA, /* 3 */ - LAST_IN_DATA, /* 4 */ - LAST_OUT_DATA, /* 5 */ - WAIT_STATUS_IN, /* 7 */ - WAIT_STATUS_OUT, /* 8 */ - STALLED, /* 9 */ - PAUSE /* 10 */ -} CONTROL_STATE; /* The state machine states of a control pipe */ - -typedef struct OneDescriptor -{ - u8 *Descriptor; - u16 Descriptor_Size; -} -ONE_DESCRIPTOR, *PONE_DESCRIPTOR; -/* All the request process routines return a value of this type - If the return value is not SUCCESS or NOT_READY, - the software will STALL the correspond endpoint */ -typedef enum _RESULT -{ - USB_SUCCESS = 0, /* Process sucessfully */ - USB_ERROR, - USB_UNSUPPORT, - USB_NOT_READY /* The process has not been finished, endpoint will be - NAK to further rquest */ -} RESULT; - - -/*-*-*-*-*-*-*-*-*-*-* Definitions for endpoint level -*-*-*-*-*-*-*-*-*-*-*-*/ -typedef struct _ENDPOINT_INFO -{ - /* When send data out of the device, - CopyData() is used to get data buffer 'Length' bytes data - if Length is 0, - CopyData() returns the total length of the data - if the request is not supported, returns 0 - (NEW Feature ) - if CopyData() returns -1, the calling routine should not proceed - further and will resume the SETUP process by the class device - if Length is not 0, - CopyData() returns a pointer to indicate the data location - Usb_wLength is the data remain to be sent, - Usb_wOffset is the Offset of original data - When receive data from the host, - CopyData() is used to get user data buffer which is capable - of Length bytes data to copy data from the endpoint buffer. - if Length is 0, - CopyData() returns the available data length, - if Length is not 0, - CopyData() returns user buffer address - Usb_rLength is the data remain to be received, - Usb_rPointer is the Offset of data buffer - */ - u16 Usb_wLength; - u16 Usb_wOffset; - u16 PacketSize; - u8 *(*CopyData)(u16 Length); -}ENDPOINT_INFO; - -/*-*-*-*-*-*-*-*-*-*-*-* Definitions for device level -*-*-*-*-*-*-*-*-*-*-*-*/ - -typedef struct _DEVICE -{ - u8 Total_Endpoint; /* Number of endpoints that are used */ - u8 Total_Configuration;/* Number of configuration available */ -} -DEVICE; - -typedef union -{ - u16 w; - struct BW - { - /* Little Endian */ - u8 bb0; - u8 bb1; - } - bw; -} u16_u8; - -typedef struct _DEVICE_INFO -{ - u8 USBbmRequestType; /* bmRequestType */ - u8 USBbRequest; /* bRequest */ - u16_u8 USBwValues; /* wValue */ - u16_u8 USBwIndexs; /* wIndex */ - u16_u8 USBwLengths; /* wLength */ - - u8 ControlState; /* of type CONTROL_STATE */ - u8 Current_Feature; - u8 Current_Configuration; /* Selected configuration */ - u8 Current_Interface; /* Selected interface of current configuration */ - u8 Current_AlternateSetting;/* Selected Alternate Setting of current - interface*/ - - ENDPOINT_INFO Ctrl_Info; -}DEVICE_INFO; - -typedef struct _DEVICE_PROP -{ - void (*Init)(void); /* Initialize the device */ - void (*Reset)(void); /* Reset routine of this device */ - - /* Device dependent process after the status stage */ - void (*Process_Status_IN)(void); - void (*Process_Status_OUT)(void); - - /* Procedure of process on setup stage of a class specified request with data stage */ - /* All class specified requests with data stage are processed in Class_Data_Setup - Class_Data_Setup() - responses to check all special requests and fills ENDPOINT_INFO - according to the request - If IN tokens are expected, then wLength & wOffset will be filled - with the total transferring bytes and the starting position - If OUT tokens are expected, then rLength & rOffset will be filled - with the total expected bytes and the starting position in the buffer - - If the request is valid, Class_Data_Setup returns SUCCESS, else UNSUPPORT - - CAUTION: - Since GET_CONFIGURATION & GET_INTERFACE are highly related to - the individual classes, they will be checked and processed here. - */ - RESULT (*Class_Data_Setup)(u8 RequestNo); - - /* Procedure of process on setup stage of a class specified request without data stage */ - /* All class specified requests without data stage are processed in Class_NoData_Setup - Class_NoData_Setup - responses to check all special requests and perform the request - - CAUTION: - Since SET_CONFIGURATION & SET_INTERFACE are highly related to - the individual classes, they will be checked and processed here. - */ - RESULT (*Class_NoData_Setup)(u8 RequestNo); - - /*Class_Get_Interface_Setting - This function is used by the file usb_core.c to test if the selected Interface - and Alternate Setting (u8 Interface, u8 AlternateSetting) are supported by - the application. - This function is writing by user. It should return "SUCCESS" if the Interface - and Alternate Setting are supported by the application or "UNSUPPORT" if they - are not supported. */ - - RESULT (*Class_Get_Interface_Setting)(u8 Interface, u8 AlternateSetting); - - u8* (*GetDeviceDescriptor)(u16 Length); - u8* (*GetConfigDescriptor)(u16 Length); - u8* (*GetStringDescriptor)(u16 Length); - u8* (*GetFunctionalDescriptor)(u16 Length); - - u8* RxEP_buffer; - u8 MaxPacketSize; - -}DEVICE_PROP; - -typedef struct _USER_STANDARD_REQUESTS -{ - void (*User_GetConfiguration)(void); /* Get Configuration */ - void (*User_SetConfiguration)(void); /* Set Configuration */ - void (*User_GetInterface)(void); /* Get Interface */ - void (*User_SetInterface)(void); /* Set Interface */ - void (*User_GetStatus)(void); /* Get Status */ - void (*User_ClearFeature)(void); /* Clear Feature */ - void (*User_SetEndPointFeature)(void); /* Set Endpoint Feature */ - void (*User_SetDeviceFeature)(void); /* Set Device Feature */ - void (*User_SetDeviceAddress)(void); /* Set Device Address */ -} -USER_STANDARD_REQUESTS; - -/* Exported constants --------------------------------------------------------*/ -#define Type_Recipient (pInformation->USBbmRequestType & (REQUEST_TYPE | RECIPIENT)) - -#define Usb_rLength Usb_wLength -#define Usb_rOffset Usb_wOffset - -#define USBwValue USBwValues.w -#define USBwValue0 USBwValues.bw.bb0 -#define USBwValue1 USBwValues.bw.bb1 -#define USBwIndex USBwIndexs.w -#define USBwIndex0 USBwIndexs.bw.bb0 -#define USBwIndex1 USBwIndexs.bw.bb1 -#define USBwLength USBwLengths.w -#define USBwLength0 USBwLengths.bw.bb0 -#define USBwLength1 USBwLengths.bw.bb1 -#define StatusInfo0 StatusInfo.bw.bb0 -#define StatusInfo1 StatusInfo.bw.bb1 - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -u8 Setup0_Process(void); -u8 Post0_Process(void); -u8 Out0_Process(void); -u8 In0_Process(void); - -RESULT Standard_SetEndPointFeature(void); -RESULT Standard_SetDeviceFeature(void); - -u8 *Standard_GetConfiguration(u16 Length); -RESULT Standard_SetConfiguration(void); -u8 *Standard_GetInterface(u16 Length); -RESULT Standard_SetInterface(void); -u8 *Standard_GetDescriptorData(u16 Length, PONE_DESCRIPTOR pDesc); - -u8 *Standard_GetStatus(u16 Length); -RESULT Standard_ClearFeature(void); -void SetDeviceAddress(u8); -void NOP_Process(void); - -extern DEVICE_PROP Device_Property; -extern USER_STANDARD_REQUESTS User_Standard_Requests; -extern DEVICE Device_Table; -extern DEVICE_INFO Device_Info; - -/* cells saving status during interrupt servicing */ -extern u16 SaveRState; -extern u16 SaveTState; - -#endif /* __USB_CORE_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_def.h b/usb_bootloader/STM32F1/usb_lib/usb_def.h deleted file mode 100644 index cfc551c..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_def.h +++ /dev/null @@ -1,80 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_def.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Definitions related to USB Core -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_DEF_H -#define __USB_DEF_H - -/* Includes ------------------------------------------------------------------*/ -/* Exported types ------------------------------------------------------------*/ -typedef enum _RECIPIENT_TYPE -{ - DEVICE_RECIPIENT, /* Recipient device */ - INTERFACE_RECIPIENT, /* Recipient interface */ - ENDPOINT_RECIPIENT, /* Recipient endpoint */ - OTHER_RECIPIENT -} RECIPIENT_TYPE; - - -typedef enum _STANDARD_REQUESTS -{ - GET_STATUS = 0, - CLEAR_FEATURE, - RESERVED1, - SET_FEATURE, - RESERVED2, - SET_ADDRESS, - GET_DESCRIPTOR, - SET_DESCRIPTOR, - GET_CONFIGURATION, - SET_CONFIGURATION, - GET_INTERFACE, - SET_INTERFACE, - TOTAL_sREQUEST, /* Total number of Standard request */ - SYNCH_FRAME = 12 -} STANDARD_REQUESTS; - -/* Definition of "USBwValue" */ -typedef enum _DESCRIPTOR_TYPE -{ - DEVICE_DESCRIPTOR = 1, - CONFIG_DESCRIPTOR, - STRING_DESCRIPTOR, - INTERFACE_DESCRIPTOR, - ENDPOINT_DESCRIPTOR -} DESCRIPTOR_TYPE; - -/* Feature selector of a SET_FEATURE or CLEAR_FEATURE */ -typedef enum _FEATURE_SELECTOR -{ - ENDPOINT_STALL, - DEVICE_REMOTE_WAKEUP -} FEATURE_SELECTOR; - -/* Exported constants --------------------------------------------------------*/ -/* Definition of "USBbmRequestType" */ -#define REQUEST_TYPE 0x60 /* Mask to get request type */ -#define STANDARD_REQUEST 0x00 /* Standard request */ -#define CLASS_REQUEST 0x20 /* Class request */ -#define VENDOR_REQUEST 0x40 /* Vendor request */ - -#define RECIPIENT 0x1F /* Mask to get recipient */ - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ - -#endif /* __USB_DEF_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_init.c b/usb_bootloader/STM32F1/usb_lib/usb_init.c deleted file mode 100644 index 679dabe..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_init.c +++ /dev/null @@ -1,64 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_init.c -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Initialization routines & global variables -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_lib.h" - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* The number of current endpoint, it will be used to specify an endpoint */ - u8 EPindex; -/* The number of current device, it is an index to the Device_Table */ -/* u8 Device_no; */ -/* Points to the DEVICE_INFO structure of current device */ -/* The purpose of this register is to speed up the execution */ -DEVICE_INFO *pInformation; -/* Points to the DEVICE_PROP structure of current device */ -/* The purpose of this register is to speed up the execution */ -DEVICE_PROP *pProperty; -/* Temporary save the state of Rx & Tx status. */ -/* Whenever the Rx or Tx state is changed, its value is saved */ -/* in this variable first and will be set to the EPRB or EPRA */ -/* at the end of interrupt process */ -u16 SaveState ; -u16 wInterrupt_Mask; -DEVICE_INFO Device_Info; -USER_STANDARD_REQUESTS *pUser_Standard_Requests; - -/* Extern variables ----------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/******************************************************************************* -* Function Name : USB_Init -* Description : USB system initialization -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -void USB_Init(void) -{ - pInformation = &Device_Info; - pInformation->ControlState = 2; - pProperty = &Device_Property; - pUser_Standard_Requests = &User_Standard_Requests; - /* Initialize devices one by one */ - - pProperty->Init(); -} - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_init.h b/usb_bootloader/STM32F1/usb_lib/usb_init.h deleted file mode 100644 index 7e8487d..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_init.h +++ /dev/null @@ -1,49 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_init.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Initialization routines & global variables -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_INIT_H -#define __USB_INIT_H - -/* Includes ------------------------------------------------------------------*/ -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -void USB_Init(void); - -/* External variables --------------------------------------------------------*/ -/* The number of current endpoint, it will be used to specify an endpoint */ -extern u8 EPindex; -/* The number of current device, it is an index to the Device_Table */ -/*extern u8 Device_no; */ -/* Points to the DEVICE_INFO structure of current device */ -/* The purpose of this register is to speed up the execution */ -extern DEVICE_INFO* pInformation; -/* Points to the DEVICE_PROP structure of current device */ -/* The purpose of this register is to speed up the execution */ -extern DEVICE_PROP* pProperty; -/* Temporary save the state of Rx & Tx status. */ -/* Whenever the Rx or Tx state is changed, its value is saved */ -/* in this variable first and will be set to the EPRB or EPRA */ -/* at the end of interrupt process */ -extern USER_STANDARD_REQUESTS *pUser_Standard_Requests; - -extern u16 SaveState ; -extern u16 wInterrupt_Mask; - -#endif /* __USB_INIT_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_int.c b/usb_bootloader/STM32F1/usb_lib/usb_int.c deleted file mode 100644 index 28f80ce..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_int.c +++ /dev/null @@ -1,192 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_int.c -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Endpoint CTR (Low and High) interrupt's service routines -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_lib.h" - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -u16 SaveRState; -u16 SaveTState; - -/* Extern variables ----------------------------------------------------------*/ -extern void (*pEpInt_IN[7])(void); /* Handles IN interrupts */ -extern void (*pEpInt_OUT[7])(void); /* Handles OUT interrupts */ - -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/******************************************************************************* -* Function Name : CTR_LP. -* Description : Low priority Endpoint Correct Transfer interrupt's service -* routine. -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -void CTR_LP(void) -{ - u32 wEPVal = 0; - /* stay in loop while pending ints */ - while (((wIstr = _GetISTR()) & ISTR_CTR) != 0) - { - _SetISTR((u16)CLR_CTR); /* clear CTR flag */ - /* extract highest priority endpoint number */ - EPindex = (u8)(wIstr & ISTR_EP_ID); - if (EPindex == 0) - { - /* Decode and service control endpoint interrupt */ - /* calling related service routine */ - /* (Setup0_Process, In0_Process, Out0_Process) */ - - /* save RX & TX status */ - /* and set both to NAK */ - SaveRState = _GetEPRxStatus(ENDP0); - SaveTState = _GetEPTxStatus(ENDP0); - _SetEPRxStatus(ENDP0, EP_RX_NAK); - _SetEPTxStatus(ENDP0, EP_TX_NAK); - - - /* DIR bit = origin of the interrupt */ - - if ((wIstr & ISTR_DIR) == 0) - { - /* DIR = 0 */ - - /* DIR = 0 => IN int */ - /* DIR = 0 implies that (EP_CTR_TX = 1) always */ - - - _ClearEP_CTR_TX(ENDP0); - In0_Process(); - - /* before terminate set Tx & Rx status */ - _SetEPRxStatus(ENDP0, SaveRState); - _SetEPTxStatus(ENDP0, SaveTState); - return; - } - else - { - /* DIR = 1 */ - - /* DIR = 1 & CTR_RX => SETUP or OUT int */ - /* DIR = 1 & (CTR_TX | CTR_RX) => 2 int pending */ - - wEPVal = _GetENDPOINT(ENDP0); - if ((wEPVal & EP_CTR_TX) != 0) - { - _ClearEP_CTR_TX(ENDP0); - In0_Process(); - /* before terminate set Tx & Rx status */ - _SetEPRxStatus(ENDP0, SaveRState); - _SetEPTxStatus(ENDP0, SaveTState); - return; - } - else if ((wEPVal &EP_SETUP) != 0) - { - _ClearEP_CTR_RX(ENDP0); /* SETUP bit kept frozen while CTR_RX = 1 */ - Setup0_Process(); - /* before terminate set Tx & Rx status */ - _SetEPRxStatus(ENDP0, SaveRState); - _SetEPTxStatus(ENDP0, SaveTState); - return; - } - - else if ((wEPVal & EP_CTR_RX) != 0) - { - _ClearEP_CTR_RX(ENDP0); - Out0_Process(); - /* before terminate set Tx & Rx status */ - _SetEPRxStatus(ENDP0, SaveRState); - _SetEPTxStatus(ENDP0, SaveTState); - return; - } - } - }/* if(EPindex == 0) */ - else - { - /* Decode and service non control endpoints interrupt */ - - /* process related endpoint register */ - wEPVal = _GetENDPOINT(EPindex); - if ((wEPVal & EP_CTR_RX) != 0) - { - /* clear int flag */ - _ClearEP_CTR_RX(EPindex); - - /* call OUT service function */ - (*pEpInt_OUT[EPindex-1])(); - - } /* if((wEPVal & EP_CTR_RX) */ - - if ((wEPVal & EP_CTR_TX) != 0) - { - /* clear int flag */ - _ClearEP_CTR_TX(EPindex); - - /* call IN service function */ - (*pEpInt_IN[EPindex-1])(); - } /* if((wEPVal & EP_CTR_TX) != 0) */ - - }/* if(EPindex == 0) else */ - - }/* while(...) */ -} - -/******************************************************************************* -* Function Name : CTR_HP. -* Description : High Priority Endpoint Correct Transfer interrupt's service -* routine. -* Input : None. -* Output : None. -* Return : None. -*******************************************************************************/ -void CTR_HP(void) -{ - u32 wEPVal = 0; - - while (((wIstr = _GetISTR()) & ISTR_CTR) != 0) - { - _SetISTR((u16)CLR_CTR); /* clear CTR flag */ - /* extract highest priority endpoint number */ - EPindex = (u8)(wIstr & ISTR_EP_ID); - /* process related endpoint register */ - wEPVal = _GetENDPOINT(EPindex); - if ((wEPVal & EP_CTR_RX) != 0) - { - /* clear int flag */ - _ClearEP_CTR_RX(EPindex); - - /* call OUT service function */ - (*pEpInt_OUT[EPindex-1])(); - - } /* if((wEPVal & EP_CTR_RX) */ - else if ((wEPVal & EP_CTR_TX) != 0) - { - /* clear int flag */ - _ClearEP_CTR_TX(EPindex); - - /* call IN service function */ - (*pEpInt_IN[EPindex-1])(); - - - } /* if((wEPVal & EP_CTR_TX) != 0) */ - - }/* while(...) */ -} - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_int.h b/usb_bootloader/STM32F1/usb_lib/usb_int.h deleted file mode 100644 index ddc8b33..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_int.h +++ /dev/null @@ -1,33 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_int.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Endpoint CTR (Low and High) interrupt's service routines -* prototypes -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_INT_H -#define __USB_INT_H - -/* Includes ------------------------------------------------------------------*/ -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -void CTR_LP(void); -void CTR_HP(void); - -/* External variables --------------------------------------------------------*/ - -#endif /* __USB_INT_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_lib.h b/usb_bootloader/STM32F1/usb_lib/usb_lib.h deleted file mode 100644 index 4437b8d..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_lib.h +++ /dev/null @@ -1,37 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_lib.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : USB library include files -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_LIB_H -#define __USB_LIB_H - -/* Includes ------------------------------------------------------------------*/ -#include "usb_type.h" -#include "usb_regs.h" -#include "usb_def.h" -#include "usb_core.h" -#include "usb_init.h" -#include "usb_mem.h" -#include "usb_int.h" - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -/* External variables --------------------------------------------------------*/ - -#endif /* __USB_LIB_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_mem.c b/usb_bootloader/STM32F1/usb_lib/usb_mem.c deleted file mode 100644 index b72778c..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_mem.c +++ /dev/null @@ -1,73 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_mem.c -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Utility functions for memory transfers to/from PMA -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_lib.h" - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Extern variables ----------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ -/******************************************************************************* -* Function Name : UserToPMABufferCopy -* Description : Copy a buffer from user memory area to packet memory area (PMA) -* Input : - pbUsrBuf: pointer to user memory area. -* - wPMABufAddr: address into PMA. -* - wNBytes: no. of bytes to be copied. -* Output : None. -* Return : None . -*******************************************************************************/ -void UserToPMABufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes) -{ - u32 n = (wNBytes + 1) >> 1; /* n = (wNBytes + 1) / 2 */ - u32 i, temp1, temp2; - u16 *pdwVal; - pdwVal = (u16 *)(wPMABufAddr * 2 + PMAAddr); - for (i = n; i != 0; i--) - { - temp1 = (u16) * pbUsrBuf; - pbUsrBuf++; - temp2 = temp1 | (u16) * pbUsrBuf << 8; - *pdwVal++ = temp2; - pdwVal++; - pbUsrBuf++; - } -} -/******************************************************************************* -* Function Name : PMAToUserBufferCopy -* Description : Copy a buffer from user memory area to packet memory area (PMA) -* Input : - pbUsrBuf = pointer to user memory area. -* - wPMABufAddr = address into PMA. -* - wNBytes = no. of bytes to be copied. -* Output : None. -* Return : None. -*******************************************************************************/ -void PMAToUserBufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes) -{ - u32 n = (wNBytes + 1) >> 1;/* /2*/ - u32 i; - u32 *pdwVal; - pdwVal = (u32 *)(wPMABufAddr * 2 + PMAAddr); - for (i = n; i != 0; i--) - { - *(u16*)pbUsrBuf++ = *pdwVal++; - pbUsrBuf++; - } -} - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_mem.h b/usb_bootloader/STM32F1/usb_lib/usb_mem.h deleted file mode 100644 index f726b49..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_mem.h +++ /dev/null @@ -1,32 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_mem.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Utility prototypes functions for memory/PMA transfers -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_MEM_H -#define __USB_MEM_H - -/* Includes ------------------------------------------------------------------*/ -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -void UserToPMABufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes); -void PMAToUserBufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes); - -/* External variables --------------------------------------------------------*/ - -#endif /*__USB_MEM_H*/ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_regs.c b/usb_bootloader/STM32F1/usb_lib/usb_regs.c deleted file mode 100644 index b36bff3..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_regs.c +++ /dev/null @@ -1,748 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_regs.c -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Interface functions to USB cell registers -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Includes ------------------------------------------------------------------*/ -#include "usb_lib.h" - -/* Private typedef -----------------------------------------------------------*/ -/* Private define ------------------------------------------------------------*/ -/* Private macro -------------------------------------------------------------*/ -/* Private variables ---------------------------------------------------------*/ -/* Extern variables ----------------------------------------------------------*/ -/* Private function prototypes -----------------------------------------------*/ -/* Private functions ---------------------------------------------------------*/ - -/******************************************************************************* -* Function Name : SetCNTR. -* Description : Set the CNTR register value. -* Input : wRegValue: new register value. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetCNTR(u16 wRegValue) -{ - _SetCNTR(wRegValue); -} - -/******************************************************************************* -* Function Name : GetCNTR. -* Description : returns the CNTR register value. -* Input : None. -* Output : None. -* Return : CNTR register Value. -*******************************************************************************/ -u16 GetCNTR(void) -{ - return(_GetCNTR()); -} - -/******************************************************************************* -* Function Name : SetISTR. -* Description : Set the ISTR register value. -* Input : wRegValue: new register value. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetISTR(u16 wRegValue) -{ - _SetISTR(wRegValue); -} - -/******************************************************************************* -* Function Name : GetISTR -* Description : Returns the ISTR register value. -* Input : None. -* Output : None. -* Return : ISTR register Value -*******************************************************************************/ -u16 GetISTR(void) -{ - return(_GetISTR()); -} - -/******************************************************************************* -* Function Name : GetFNR -* Description : Returns the FNR register value. -* Input : None. -* Output : None. -* Return : FNR register Value -*******************************************************************************/ -u16 GetFNR(void) -{ - return(_GetFNR()); -} - -/******************************************************************************* -* Function Name : SetDADDR -* Description : Set the DADDR register value. -* Input : wRegValue: new register value. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetDADDR(u16 wRegValue) -{ - _SetDADDR(wRegValue); -} - -/******************************************************************************* -* Function Name : GetDADDR -* Description : Returns the DADDR register value. -* Input : None. -* Output : None. -* Return : DADDR register Value -*******************************************************************************/ -u16 GetDADDR(void) -{ - return(_GetDADDR()); -} - -/******************************************************************************* -* Function Name : SetBTABLE -* Description : Set the BTABLE. -* Input : wRegValue: New register value. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetBTABLE(u16 wRegValue) -{ - _SetBTABLE(wRegValue); -} - -/******************************************************************************* -* Function Name : GetBTABLE. -* Description : Returns the BTABLE register value. -* Input : None. -* Output : None. -* Return : BTABLE address. -*******************************************************************************/ -u16 GetBTABLE(void) -{ - return(_GetBTABLE()); -} - -/******************************************************************************* -* Function Name : SetENDPOINT -* Description : Setthe Endpoint register value. -* Input : bEpNum: Endpoint Number. -* wRegValue. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetENDPOINT(u8 bEpNum, u16 wRegValue) -{ - _SetENDPOINT(bEpNum, wRegValue); -} - -/******************************************************************************* -* Function Name : GetENDPOINT -* Description : Return the Endpoint register value. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Endpoint register value. -*******************************************************************************/ -u16 GetENDPOINT(u8 bEpNum) -{ - return(_GetENDPOINT(bEpNum)); -} - -/******************************************************************************* -* Function Name : SetEPType -* Description : sets the type in the endpoint register. -* Input : bEpNum: Endpoint Number. -* wType: type definition. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPType(u8 bEpNum, u16 wType) -{ - _SetEPType(bEpNum, wType); -} - -/******************************************************************************* -* Function Name : GetEPType -* Description : Returns the endpoint type. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Endpoint Type -*******************************************************************************/ -u16 GetEPType(u8 bEpNum) -{ - return(_GetEPType(bEpNum)); -} - -/******************************************************************************* -* Function Name : SetEPTxStatus -* Description : Set the status of Tx endpoint. -* Input : bEpNum: Endpoint Number. -* wState: new state. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPTxStatus(u8 bEpNum, u16 wState) -{ - _SetEPTxStatus(bEpNum, wState); -} - -/******************************************************************************* -* Function Name : SetEPRxStatus -* Description : Set the status of Rx endpoint. -* Input : bEpNum: Endpoint Number. -* wState: new state. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPRxStatus(u8 bEpNum, u16 wState) -{ - _SetEPRxStatus(bEpNum, wState); -} - -/******************************************************************************* -* Function Name : SetDouBleBuffEPStall -* Description : sets the status for Double Buffer Endpoint to STALL -* Input : bEpNum: Endpoint Number. -* bDir: Endpoint direction. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetDouBleBuffEPStall(u8 bEpNum, u8 bDir) -{ - u16 Endpoint_DTOG_Status; - Endpoint_DTOG_Status = GetENDPOINT(bEpNum); - if (bDir == EP_DBUF_OUT) - { /* OUT double buffered endpoint */ - _SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPRX_DTOG1); - } - else if (bDir == EP_DBUF_IN) - { /* IN double buffered endpoint */ - _SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPTX_DTOG1); - } -} - -/******************************************************************************* -* Function Name : GetEPTxStatus -* Description : Returns the endpoint Tx status. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Endpoint TX Status -*******************************************************************************/ -u16 GetEPTxStatus(u8 bEpNum) -{ - return(_GetEPTxStatus(bEpNum)); -} - -/******************************************************************************* -* Function Name : GetEPRxStatus -* Description : Returns the endpoint Rx status. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Endpoint RX Status -*******************************************************************************/ -u16 GetEPRxStatus(u8 bEpNum) -{ - return(_GetEPRxStatus(bEpNum)); -} - -/******************************************************************************* -* Function Name : SetEPTxValid -* Description : Valid the endpoint Tx Status. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPTxValid(u8 bEpNum) -{ - _SetEPTxStatus(bEpNum, EP_TX_VALID); -} - -/******************************************************************************* -* Function Name : SetEPRxValid -* Description : Valid the endpoint Rx Status. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPRxValid(u8 bEpNum) -{ - _SetEPRxStatus(bEpNum, EP_RX_VALID); -} - -/******************************************************************************* -* Function Name : SetEP_KIND -* Description : Clear the EP_KIND bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEP_KIND(u8 bEpNum) -{ - _SetEP_KIND(bEpNum); -} - -/******************************************************************************* -* Function Name : ClearEP_KIND -* Description : set the EP_KIND bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void ClearEP_KIND(u8 bEpNum) -{ - _ClearEP_KIND(bEpNum); -} -/******************************************************************************* -* Function Name : Clear_Status_Out -* Description : Clear the Status Out of the related Endpoint -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void Clear_Status_Out(u8 bEpNum) -{ - _ClearEP_KIND(bEpNum); -} -/******************************************************************************* -* Function Name : Set_Status_Out -* Description : Set the Status Out of the related Endpoint -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void Set_Status_Out(u8 bEpNum) -{ - _SetEP_KIND(bEpNum); -} -/******************************************************************************* -* Function Name : SetEPDoubleBuff -* Description : Enable the double buffer feature for the endpoint. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPDoubleBuff(u8 bEpNum) -{ - _SetEP_KIND(bEpNum); -} -/******************************************************************************* -* Function Name : ClearEPDoubleBuff -* Description : Disable the double buffer feature for the endpoint. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void ClearEPDoubleBuff(u8 bEpNum) -{ - _ClearEP_KIND(bEpNum); -} -/******************************************************************************* -* Function Name : GetTxStallStatus -* Description : Returns the Stall status of the Tx endpoint. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Tx Stall status. -*******************************************************************************/ -u16 GetTxStallStatus(u8 bEpNum) -{ - return(_GetTxStallStatus(bEpNum)); -} -/******************************************************************************* -* Function Name : GetRxStallStatus -* Description : Returns the Stall status of the Rx endpoint. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Rx Stall status. -*******************************************************************************/ -u16 GetRxStallStatus(u8 bEpNum) -{ - return(_GetRxStallStatus(bEpNum)); -} -/******************************************************************************* -* Function Name : ClearEP_CTR_RX -* Description : Clear the CTR_RX bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void ClearEP_CTR_RX(u8 bEpNum) -{ - _ClearEP_CTR_RX(bEpNum); -} -/******************************************************************************* -* Function Name : ClearEP_CTR_TX -* Description : Clear the CTR_TX bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void ClearEP_CTR_TX(u8 bEpNum) -{ - _ClearEP_CTR_TX(bEpNum); -} -/******************************************************************************* -* Function Name : ToggleDTOG_RX -* Description : Toggle the DTOG_RX bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void ToggleDTOG_RX(u8 bEpNum) -{ - _ToggleDTOG_RX(bEpNum); -} -/******************************************************************************* -* Function Name : ToggleDTOG_TX -* Description : Toggle the DTOG_TX bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void ToggleDTOG_TX(u8 bEpNum) -{ - _ToggleDTOG_TX(bEpNum); -} -/******************************************************************************* -* Function Name : ClearDTOG_RX. -* Description : Clear the DTOG_RX bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void ClearDTOG_RX(u8 bEpNum) -{ - _ClearDTOG_RX(bEpNum); -} -/******************************************************************************* -* Function Name : ClearDTOG_TX. -* Description : Clear the DTOG_TX bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -void ClearDTOG_TX(u8 bEpNum) -{ - _ClearDTOG_TX(bEpNum); -} -/******************************************************************************* -* Function Name : SetEPAddress -* Description : Set the endpoint address. -* Input : bEpNum: Endpoint Number. -* bAddr: New endpoint address. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPAddress(u8 bEpNum, u8 bAddr) -{ - _SetEPAddress(bEpNum, bAddr); -} -/******************************************************************************* -* Function Name : GetEPAddress -* Description : Get the endpoint address. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Endpoint address. -*******************************************************************************/ -u8 GetEPAddress(u8 bEpNum) -{ - return(_GetEPAddress(bEpNum)); -} -/******************************************************************************* -* Function Name : SetEPTxAddr -* Description : Set the endpoint Tx buffer address. -* Input : bEpNum: Endpoint Number. -* wAddr: new address. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPTxAddr(u8 bEpNum, u16 wAddr) -{ - _SetEPTxAddr(bEpNum, wAddr); -} -/******************************************************************************* -* Function Name : SetEPRxAddr -* Description : Set the endpoint Rx buffer address. -* Input : bEpNum: Endpoint Number. -* wAddr: new address. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPRxAddr(u8 bEpNum, u16 wAddr) -{ - _SetEPRxAddr(bEpNum, wAddr); -} -/******************************************************************************* -* Function Name : GetEPTxAddr -* Description : Returns the endpoint Tx buffer address. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Rx buffer address. -*******************************************************************************/ -u16 GetEPTxAddr(u8 bEpNum) -{ - return(_GetEPTxAddr(bEpNum)); -} -/******************************************************************************* -* Function Name : GetEPRxAddr. -* Description : Returns the endpoint Rx buffer address. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Rx buffer address. -*******************************************************************************/ -u16 GetEPRxAddr(u8 bEpNum) -{ - return(_GetEPRxAddr(bEpNum)); -} -/******************************************************************************* -* Function Name : SetEPTxCount. -* Description : Set the Tx count. -* Input : bEpNum: Endpoint Number. -* wCount: new count value. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPTxCount(u8 bEpNum, u16 wCount) -{ - _SetEPTxCount(bEpNum, wCount); -} -/******************************************************************************* -* Function Name : SetEPCountRxReg. -* Description : Set the Count Rx Register value. -* Input : *pdwReg: point to the register. -* wCount: the new register value. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPCountRxReg(u32 *pdwReg, u16 wCount) -{ - _SetEPCountRxReg(dwReg, wCount); -} -/******************************************************************************* -* Function Name : SetEPRxCount -* Description : Set the Rx count. -* Input : bEpNum: Endpoint Number. -* wCount: the new count value. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPRxCount(u8 bEpNum, u16 wCount) -{ - _SetEPRxCount(bEpNum, wCount); -} -/******************************************************************************* -* Function Name : GetEPTxCount -* Description : Get the Tx count. -* Input : bEpNum: Endpoint Number. -* Output : None -* Return : Tx count value. -*******************************************************************************/ -u16 GetEPTxCount(u8 bEpNum) -{ - return(_GetEPTxCount(bEpNum)); -} -/******************************************************************************* -* Function Name : GetEPRxCount -* Description : Get the Rx count. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Rx count value. -*******************************************************************************/ -u16 GetEPRxCount(u8 bEpNum) -{ - return(_GetEPRxCount(bEpNum)); -} -/******************************************************************************* -* Function Name : SetEPDblBuffAddr -* Description : Set the addresses of the buffer 0 and 1. -* Input : bEpNum: Endpoint Number. -* wBuf0Addr: new address of buffer 0. -* wBuf1Addr: new address of buffer 1. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPDblBuffAddr(u8 bEpNum, u16 wBuf0Addr, u16 wBuf1Addr) -{ - _SetEPDblBuffAddr(bEpNum, wBuf0Addr, wBuf1Addr); -} -/******************************************************************************* -* Function Name : SetEPDblBuf0Addr -* Description : Set the Buffer 1 address. -* Input : bEpNum: Endpoint Number -* wBuf0Addr: new address. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPDblBuf0Addr(u8 bEpNum, u16 wBuf0Addr) -{ - _SetEPDblBuf0Addr(bEpNum, wBuf0Addr); -} -/******************************************************************************* -* Function Name : SetEPDblBuf1Addr -* Description : Set the Buffer 1 address. -* Input : bEpNum: Endpoint Number -* wBuf1Addr: new address. -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPDblBuf1Addr(u8 bEpNum, u16 wBuf1Addr) -{ - _SetEPDblBuf1Addr(bEpNum, wBuf1Addr); -} -/******************************************************************************* -* Function Name : GetEPDblBuf0Addr -* Description : Returns the address of the Buffer 0. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -u16 GetEPDblBuf0Addr(u8 bEpNum) -{ - return(_GetEPDblBuf0Addr(bEpNum)); -} -/******************************************************************************* -* Function Name : GetEPDblBuf1Addr -* Description : Returns the address of the Buffer 1. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Address of the Buffer 1. -*******************************************************************************/ -u16 GetEPDblBuf1Addr(u8 bEpNum) -{ - return(_GetEPDblBuf1Addr(bEpNum)); -} -/******************************************************************************* -* Function Name : SetEPDblBuffCount -* Description : Set the number of bytes for a double Buffer -* endpoint. -* Input : bEpNum,bDir, wCount -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPDblBuffCount(u8 bEpNum, u8 bDir, u16 wCount) -{ - _SetEPDblBuffCount(bEpNum, bDir, wCount); -} -/******************************************************************************* -* Function Name : SetEPDblBuf0Count -* Description : Set the number of bytes in the buffer 0 of a double Buffer -* endpoint. -* Input : bEpNum, bDir, wCount -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPDblBuf0Count(u8 bEpNum, u8 bDir, u16 wCount) -{ - _SetEPDblBuf0Count(bEpNum, bDir, wCount); -} -/******************************************************************************* -* Function Name : SetEPDblBuf1Count -* Description : Set the number of bytes in the buffer 0 of a double Buffer -* endpoint. -* Input : bEpNum, bDir, wCount -* Output : None. -* Return : None. -*******************************************************************************/ -void SetEPDblBuf1Count(u8 bEpNum, u8 bDir, u16 wCount) -{ - _SetEPDblBuf1Count(bEpNum, bDir, wCount); -} -/******************************************************************************* -* Function Name : GetEPDblBuf0Count -* Description : Returns the number of byte received in the buffer 0 of a double -* Buffer endpoint. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Endpoint Buffer 0 count -*******************************************************************************/ -u16 GetEPDblBuf0Count(u8 bEpNum) -{ - return(_GetEPDblBuf0Count(bEpNum)); -} -/******************************************************************************* -* Function Name : GetEPDblBuf1Count -* Description : Returns the number of data received in the buffer 1 of a double -* Buffer endpoint. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Endpoint Buffer 1 count. -*******************************************************************************/ -u16 GetEPDblBuf1Count(u8 bEpNum) -{ - return(_GetEPDblBuf1Count(bEpNum)); -} -/******************************************************************************* -* Function Name : GetEPDblBufDir -* Description : gets direction of the double buffered endpoint -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : EP_DBUF_OUT, EP_DBUF_IN, -* EP_DBUF_ERR if the endpoint counter not yet programmed. -*******************************************************************************/ -EP_DBUF_DIR GetEPDblBufDir(u8 bEpNum) -{ - if ((u16)(*_pEPRxCount(bEpNum) & 0xFC00) != 0) - return(EP_DBUF_OUT); - else if (((u16)(*_pEPTxCount(bEpNum)) & 0x03FF) != 0) - return(EP_DBUF_IN); - else - return(EP_DBUF_ERR); -} -/******************************************************************************* -* Function Name : FreeUserBuffer -* Description : free buffer used from the application realizing it to the line - toggles bit SW_BUF in the double buffered endpoint register -* Input : bEpNum, bDir -* Output : None. -* Return : None. -*******************************************************************************/ -void FreeUserBuffer(u8 bEpNum, u8 bDir) -{ - if (bDir == EP_DBUF_OUT) - { /* OUT double buffered endpoint */ - _ToggleDTOG_TX(bEpNum); - } - else if (bDir == EP_DBUF_IN) - { /* IN double buffered endpoint */ - _ToggleDTOG_RX(bEpNum); - } -} - -/******************************************************************************* -* Function Name : ToWord -* Description : merge two byte in a word. -* Input : bh: byte high, bl: bytes low. -* Output : None. -* Return : resulted word. -*******************************************************************************/ -u16 ToWord(u8 bh, u8 bl) -{ - u16 wRet; - wRet = (u16)bl | ((u16)bh << 8); - return(wRet); -} -/******************************************************************************* -* Function Name : ByteSwap -* Description : Swap two byte in a word. -* Input : wSwW: word to Swap. -* Output : None. -* Return : resulted word. -*******************************************************************************/ -u16 ByteSwap(u16 wSwW) -{ - u8 bTemp; - u16 wRet; - bTemp = (u8)(wSwW & 0xff); - wRet = (wSwW >> 8) | ((u16)bTemp << 8); - return(wRet); -} - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_regs.h b/usb_bootloader/STM32F1/usb_lib/usb_regs.h deleted file mode 100644 index 6927f6e..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_regs.h +++ /dev/null @@ -1,619 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_regs.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Interface prototype functions to USB cell registers -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_REGS_H -#define __USB_REGS_H - -/* Includes ------------------------------------------------------------------*/ -/* Exported types ------------------------------------------------------------*/ -typedef enum _EP_DBUF_DIR -{ - /* double buffered endpoint direction */ - EP_DBUF_ERR, - EP_DBUF_OUT, - EP_DBUF_IN -}EP_DBUF_DIR; - -/* endpoint buffer number */ -enum EP_BUF_NUM -{ - EP_NOBUF, - EP_BUF0, - EP_BUF1 -}; - -/* Exported constants --------------------------------------------------------*/ -#define RegBase (0x40005C00L) /* USB_IP Peripheral Registers base address */ -#define PMAAddr (0x40006000L) /* USB_IP Packet Memory Area base address */ - -/******************************************************************************/ -/* General registers */ -/******************************************************************************/ - -/* Control register */ -#define CNTR ((volatile unsigned *)(RegBase + 0x40)) -/* Interrupt status register */ -#define ISTR ((volatile unsigned *)(RegBase + 0x44)) -/* Frame number register */ -#define FNR ((volatile unsigned *)(RegBase + 0x48)) -/* Device address register */ -#define DADDR ((volatile unsigned *)(RegBase + 0x4C)) -/* Buffer Table address register */ -#define BTABLE ((volatile unsigned *)(RegBase + 0x50)) -/******************************************************************************/ -/* Endpoint registers */ -/******************************************************************************/ -#define EP0REG ((volatile unsigned *)(RegBase)) /* endpoint 0 register address */ - -/* endpoints enumeration */ -#define ENDP0 ((u8)0) -#define ENDP1 ((u8)1) -#define ENDP2 ((u8)2) -#define ENDP3 ((u8)3) -#define ENDP4 ((u8)4) -#define ENDP5 ((u8)5) -#define ENDP6 ((u8)6) -#define ENDP7 ((u8)7) -/******************************************************************************/ -/* ISTR interrupt events */ -/******************************************************************************/ -#define ISTR_CTR (0x8000) /* Correct TRansfer (clear-only bit) */ -#define ISTR_DOVR (0x4000) /* DMA OVeR/underrun (clear-only bit) */ -#define ISTR_ERR (0x2000) /* ERRor (clear-only bit) */ -#define ISTR_WKUP (0x1000) /* WaKe UP (clear-only bit) */ -#define ISTR_SUSP (0x0800) /* SUSPend (clear-only bit) */ -#define ISTR_RESET (0x0400) /* RESET (clear-only bit) */ -#define ISTR_SOF (0x0200) /* Start Of Frame (clear-only bit) */ -#define ISTR_ESOF (0x0100) /* Expected Start Of Frame (clear-only bit) */ - - -#define ISTR_DIR (0x0010) /* DIRection of transaction (read-only bit) */ -#define ISTR_EP_ID (0x000F) /* EndPoint IDentifier (read-only bit) */ - -#define CLR_CTR (~ISTR_CTR) /* clear Correct TRansfer bit */ -#define CLR_DOVR (~ISTR_DOVR) /* clear DMA OVeR/underrun bit*/ -#define CLR_ERR (~ISTR_ERR) /* clear ERRor bit */ -#define CLR_WKUP (~ISTR_WKUP) /* clear WaKe UP bit */ -#define CLR_SUSP (~ISTR_SUSP) /* clear SUSPend bit */ -#define CLR_RESET (~ISTR_RESET) /* clear RESET bit */ -#define CLR_SOF (~ISTR_SOF) /* clear Start Of Frame bit */ -#define CLR_ESOF (~ISTR_ESOF) /* clear Expected Start Of Frame bit */ - -/******************************************************************************/ -/* CNTR control register bits definitions */ -/******************************************************************************/ -#define CNTR_CTRM (0x8000) /* Correct TRansfer Mask */ -#define CNTR_DOVRM (0x4000) /* DMA OVeR/underrun Mask */ -#define CNTR_ERRM (0x2000) /* ERRor Mask */ -#define CNTR_WKUPM (0x1000) /* WaKe UP Mask */ -#define CNTR_SUSPM (0x0800) /* SUSPend Mask */ -#define CNTR_RESETM (0x0400) /* RESET Mask */ -#define CNTR_SOFM (0x0200) /* Start Of Frame Mask */ -#define CNTR_ESOFM (0x0100) /* Expected Start Of Frame Mask */ - - -#define CNTR_RESUME (0x0010) /* RESUME request */ -#define CNTR_FSUSP (0x0008) /* Force SUSPend */ -#define CNTR_LPMODE (0x0004) /* Low-power MODE */ -#define CNTR_PDWN (0x0002) /* Power DoWN */ -#define CNTR_FRES (0x0001) /* Force USB RESet */ - -/******************************************************************************/ -/* FNR Frame Number Register bit definitions */ -/******************************************************************************/ -#define FNR_RXDP (0x8000) /* status of D+ data line */ -#define FNR_RXDM (0x4000) /* status of D- data line */ -#define FNR_LCK (0x2000) /* LoCKed */ -#define FNR_LSOF (0x1800) /* Lost SOF */ -#define FNR_FN (0x07FF) /* Frame Number */ -/******************************************************************************/ -/* DADDR Device ADDRess bit definitions */ -/******************************************************************************/ -#define DADDR_EF (0x80) -#define DADDR_ADD (0x7F) -/******************************************************************************/ -/* Endpoint register */ -/******************************************************************************/ -/* bit positions */ -#define EP_CTR_RX (0x8000) /* EndPoint Correct TRansfer RX */ -#define EP_DTOG_RX (0x4000) /* EndPoint Data TOGGLE RX */ -#define EPRX_STAT (0x3000) /* EndPoint RX STATus bit field */ -#define EP_SETUP (0x0800) /* EndPoint SETUP */ -#define EP_T_FIELD (0x0600) /* EndPoint TYPE */ -#define EP_KIND (0x0100) /* EndPoint KIND */ -#define EP_CTR_TX (0x0080) /* EndPoint Correct TRansfer TX */ -#define EP_DTOG_TX (0x0040) /* EndPoint Data TOGGLE TX */ -#define EPTX_STAT (0x0030) /* EndPoint TX STATus bit field */ -#define EPADDR_FIELD (0x000F) /* EndPoint ADDRess FIELD */ - -/* EndPoint REGister MASK (no toggle fields) */ -#define EPREG_MASK (EP_CTR_RX|EP_SETUP|EP_T_FIELD|EP_KIND|EP_CTR_TX|EPADDR_FIELD) - -/* EP_TYPE[1:0] EndPoint TYPE */ -#define EP_TYPE_MASK (0x0600) /* EndPoint TYPE Mask */ -#define EP_BULK (0x0000) /* EndPoint BULK */ -#define EP_CONTROL (0x0200) /* EndPoint CONTROL */ -#define EP_ISOCHRONOUS (0x0400) /* EndPoint ISOCHRONOUS */ -#define EP_INTERRUPT (0x0600) /* EndPoint INTERRUPT */ -#define EP_T_MASK (~EP_T_FIELD & EPREG_MASK) - - -/* EP_KIND EndPoint KIND */ -#define EPKIND_MASK (~EP_KIND & EPREG_MASK) - -/* STAT_TX[1:0] STATus for TX transfer */ -#define EP_TX_DIS (0x0000) /* EndPoint TX DISabled */ -#define EP_TX_STALL (0x0010) /* EndPoint TX STALLed */ -#define EP_TX_NAK (0x0020) /* EndPoint TX NAKed */ -#define EP_TX_VALID (0x0030) /* EndPoint TX VALID */ -#define EPTX_DTOG1 (0x0010) /* EndPoint TX Data TOGgle bit1 */ -#define EPTX_DTOG2 (0x0020) /* EndPoint TX Data TOGgle bit2 */ -#define EPTX_DTOGMASK (EPTX_STAT|EPREG_MASK) - -/* STAT_RX[1:0] STATus for RX transfer */ -#define EP_RX_DIS (0x0000) /* EndPoint RX DISabled */ -#define EP_RX_STALL (0x1000) /* EndPoint RX STALLed */ -#define EP_RX_NAK (0x2000) /* EndPoint RX NAKed */ -#define EP_RX_VALID (0x3000) /* EndPoint RX VALID */ -#define EPRX_DTOG1 (0x1000) /* EndPoint RX Data TOGgle bit1 */ -#define EPRX_DTOG2 (0x2000) /* EndPoint RX Data TOGgle bit1 */ -#define EPRX_DTOGMASK (EPRX_STAT|EPREG_MASK) -/* Exported macro ------------------------------------------------------------*/ -/* SetCNTR */ -#define _SetCNTR(wRegValue) (*CNTR = (u16)wRegValue) - -/* SetISTR */ -#define _SetISTR(wRegValue) (*ISTR = (u16)wRegValue) - -/* SetDADDR */ -#define _SetDADDR(wRegValue) (*DADDR = (u16)wRegValue) - -/* SetBTABLE */ -#define _SetBTABLE(wRegValue)(*BTABLE = (u16)(wRegValue & 0xFFF8)) - -/* GetCNTR */ -#define _GetCNTR() ((u16) *CNTR) - -/* GetISTR */ -#define _GetISTR() ((u16) *ISTR) - -/* GetFNR */ -#define _GetFNR() ((u16) *FNR) - -/* GetDADDR */ -#define _GetDADDR() ((u16) *DADDR) - -/* GetBTABLE */ -#define _GetBTABLE() ((u16) *BTABLE) - -/* SetENDPOINT */ -#define _SetENDPOINT(bEpNum,wRegValue) (*(EP0REG + bEpNum)= \ - (u16)wRegValue) - -/* GetENDPOINT */ -#define _GetENDPOINT(bEpNum) ((u16)(*(EP0REG + bEpNum))) - -/******************************************************************************* -* Macro Name : SetEPType -* Description : sets the type in the endpoint register(bits EP_TYPE[1:0]) -* Input : bEpNum: Endpoint Number. -* wType -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPType(bEpNum,wType) (_SetENDPOINT(bEpNum,\ - ((_GetENDPOINT(bEpNum) & EP_T_MASK) | wType))) - -/******************************************************************************* -* Macro Name : GetEPType -* Description : gets the type in the endpoint register(bits EP_TYPE[1:0]) -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : Endpoint Type -*******************************************************************************/ -#define _GetEPType(bEpNum) (_GetENDPOINT(bEpNum) & EP_T_FIELD) - -/******************************************************************************* -* Macro Name : SetEPTxStatus -* Description : sets the status for tx transfer (bits STAT_TX[1:0]). -* Input : bEpNum: Endpoint Number. -* wState: new state -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPTxStatus(bEpNum,wState) {\ - register u16 _wRegVal; \ - _wRegVal = _GetENDPOINT(bEpNum) & EPTX_DTOGMASK;\ - /* toggle first bit ? */ \ - if((EPTX_DTOG1 & wState)!= 0) \ - _wRegVal ^= EPTX_DTOG1; \ - /* toggle second bit ? */ \ - if((EPTX_DTOG2 & wState)!= 0) \ - _wRegVal ^= EPTX_DTOG2; \ - _SetENDPOINT(bEpNum, _wRegVal); \ - } /* _SetEPTxStatus */ - -/******************************************************************************* -* Macro Name : SetEPRxStatus -* Description : sets the status for rx transfer (bits STAT_TX[1:0]) -* Input : bEpNum: Endpoint Number. -* wState: new state. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPRxStatus(bEpNum,wState) {\ - register u16 _wRegVal; \ - \ - _wRegVal = _GetENDPOINT(bEpNum) & EPRX_DTOGMASK;\ - /* toggle first bit ? */ \ - if((EPRX_DTOG1 & wState)!= 0) \ - _wRegVal ^= EPRX_DTOG1; \ - /* toggle second bit ? */ \ - if((EPRX_DTOG2 & wState)!= 0) \ - _wRegVal ^= EPRX_DTOG2; \ - _SetENDPOINT(bEpNum, _wRegVal); \ - } /* _SetEPRxStatus */ -/******************************************************************************* -* Macro Name : GetEPTxStatus / GetEPRxStatus -* Description : gets the status for tx/rx transfer (bits STAT_TX[1:0] -* /STAT_RX[1:0]) -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : status . -*******************************************************************************/ -#define _GetEPTxStatus(bEpNum) ((u16)_GetENDPOINT(bEpNum) & EPTX_STAT) - -#define _GetEPRxStatus(bEpNum) ((u16)_GetENDPOINT(bEpNum) & EPRX_STAT) - -/******************************************************************************* -* Macro Name : SetEPTxValid / SetEPRxValid -* Description : sets directly the VALID tx/rx-status into the enpoint register -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPTxValid(bEpNum) (_SetEPTxStatus(bEpNum, EP_TX_VALID)) - -#define _SetEPRxValid(bEpNum) (_SetEPRxStatus(bEpNum, EP_RX_VALID)) - -/******************************************************************************* -* Macro Name : GetTxStallStatus / GetRxStallStatus. -* Description : checks stall condition in an endpoint. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : TRUE = endpoint in stall condition. -*******************************************************************************/ -#define _GetTxStallStatus(bEpNum) (_GetEPTxStatus(bEpNum) \ - == EP_TX_STALL) -#define _GetRxStallStatus(bEpNum) (_GetEPRxStatus(bEpNum) \ - == EP_RX_STALL) - -/******************************************************************************* -* Macro Name : SetEP_KIND / ClearEP_KIND. -* Description : set & clear EP_KIND bit. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEP_KIND(bEpNum) (_SetENDPOINT(bEpNum, \ - (_GetENDPOINT(bEpNum) | EP_KIND) & EPREG_MASK)) -#define _ClearEP_KIND(bEpNum) (_SetENDPOINT(bEpNum, \ - (_GetENDPOINT(bEpNum) & EPKIND_MASK))) - -/******************************************************************************* -* Macro Name : Set_Status_Out / Clear_Status_Out. -* Description : Sets/clears directly STATUS_OUT bit in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _Set_Status_Out(bEpNum) _SetEP_KIND(bEpNum) -#define _Clear_Status_Out(bEpNum) _ClearEP_KIND(bEpNum) - -/******************************************************************************* -* Macro Name : SetEPDoubleBuff / ClearEPDoubleBuff. -* Description : Sets/clears directly EP_KIND bit in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPDoubleBuff(bEpNum) _SetEP_KIND(bEpNum) -#define _ClearEPDoubleBuff(bEpNum) _ClearEP_KIND(bEpNum) - -/******************************************************************************* -* Macro Name : ClearEP_CTR_RX / ClearEP_CTR_TX. -* Description : Clears bit CTR_RX / CTR_TX in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _ClearEP_CTR_RX(bEpNum) (_SetENDPOINT(bEpNum,\ - _GetENDPOINT(bEpNum) & 0x7FFF & EPREG_MASK)) -#define _ClearEP_CTR_TX(bEpNum) (_SetENDPOINT(bEpNum,\ - _GetENDPOINT(bEpNum) & 0xFF7F & EPREG_MASK)) - -/******************************************************************************* -* Macro Name : ToggleDTOG_RX / ToggleDTOG_TX . -* Description : Toggles DTOG_RX / DTOG_TX bit in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _ToggleDTOG_RX(bEpNum) (_SetENDPOINT(bEpNum, \ - EP_DTOG_RX | _GetENDPOINT(bEpNum) & EPREG_MASK)) -#define _ToggleDTOG_TX(bEpNum) (_SetENDPOINT(bEpNum, \ - EP_DTOG_TX | _GetENDPOINT(bEpNum) & EPREG_MASK)) - -/******************************************************************************* -* Macro Name : ClearDTOG_RX / ClearDTOG_TX. -* Description : Clears DTOG_RX / DTOG_TX bit in the endpoint register. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _ClearDTOG_RX(bEpNum) if((_GetENDPOINT(bEpNum) & EP_DTOG_RX) != 0)\ - _ToggleDTOG_RX(bEpNum) -#define _ClearDTOG_TX(bEpNum) if((_GetENDPOINT(bEpNum) & EP_DTOG_TX) != 0)\ - _ToggleDTOG_TX(bEpNum) -/******************************************************************************* -* Macro Name : SetEPAddress. -* Description : Sets address in an endpoint register. -* Input : bEpNum: Endpoint Number. -* bAddr: Address. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPAddress(bEpNum,bAddr) _SetENDPOINT(bEpNum,\ - _GetENDPOINT(bEpNum) & EPREG_MASK | bAddr) - -/******************************************************************************* -* Macro Name : GetEPAddress. -* Description : Gets address in an endpoint register. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _GetEPAddress(bEpNum) ((u8)(_GetENDPOINT(bEpNum) & EPADDR_FIELD)) - -#define _pEPTxAddr(bEpNum) ((u32 *)((_GetBTABLE()+bEpNum*8 )*2 + PMAAddr)) -#define _pEPTxCount(bEpNum) ((u32 *)((_GetBTABLE()+bEpNum*8+2)*2 + PMAAddr)) -#define _pEPRxAddr(bEpNum) ((u32 *)((_GetBTABLE()+bEpNum*8+4)*2 + PMAAddr)) -#define _pEPRxCount(bEpNum) ((u32 *)((_GetBTABLE()+bEpNum*8+6)*2 + PMAAddr)) - -/******************************************************************************* -* Macro Name : SetEPTxAddr / SetEPRxAddr. -* Description : sets address of the tx/rx buffer. -* Input : bEpNum: Endpoint Number. -* wAddr: address to be set (must be word aligned). -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPTxAddr(bEpNum,wAddr) (*_pEPTxAddr(bEpNum) = ((wAddr >> 1) << 1)) -#define _SetEPRxAddr(bEpNum,wAddr) (*_pEPRxAddr(bEpNum) = ((wAddr >> 1) << 1)) - -/******************************************************************************* -* Macro Name : GetEPTxAddr / GetEPRxAddr. -* Description : Gets address of the tx/rx buffer. -* Input : bEpNum: Endpoint Number. -* Output : None. -* Return : address of the buffer. -*******************************************************************************/ -#define _GetEPTxAddr(bEpNum) ((u16)*_pEPTxAddr(bEpNum)) -#define _GetEPRxAddr(bEpNum) ((u16)*_pEPRxAddr(bEpNum)) - -/******************************************************************************* -* Macro Name : SetEPCountRxReg. -* Description : Sets counter of rx buffer with no. of blocks. -* Input : pdwReg: pointer to counter. -* wCount: Counter. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _BlocksOf32(dwReg,wCount,wNBlocks) {\ - wNBlocks = wCount >> 5;\ - if((wCount & 0x1f) == 0)\ - wNBlocks--;\ - *pdwReg = (u32)((wNBlocks << 10) | 0x8000);\ - }/* _BlocksOf32 */ - -#define _BlocksOf2(dwReg,wCount,wNBlocks) {\ - wNBlocks = wCount >> 1;\ - if((wCount & 0x1) != 0)\ - wNBlocks++;\ - *pdwReg = (u32)(wNBlocks << 10);\ - }/* _BlocksOf2 */ - -#define _SetEPCountRxReg(dwReg,wCount) {\ - u16 wNBlocks;\ - if(wCount > 62){_BlocksOf32(dwReg,wCount,wNBlocks);}\ - else {_BlocksOf2(dwReg,wCount,wNBlocks);}\ - }/* _SetEPCountRxReg */ - - - -#define _SetEPRxDblBuf0Count(bEpNum,wCount) {\ - u32 *pdwReg = _pEPTxCount(bEpNum); \ - _SetEPCountRxReg(pdwReg, wCount);\ - } -/******************************************************************************* -* Macro Name : SetEPTxCount / SetEPRxCount. -* Description : sets counter for the tx/rx buffer. -* Input : bEpNum: endpoint number. -* wCount: Counter value. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPTxCount(bEpNum,wCount) (*_pEPTxCount(bEpNum) = wCount) -#define _SetEPRxCount(bEpNum,wCount) {\ - u32 *pdwReg = _pEPRxCount(bEpNum); \ - _SetEPCountRxReg(pdwReg, wCount);\ - } -/******************************************************************************* -* Macro Name : GetEPTxCount / GetEPRxCount. -* Description : gets counter of the tx buffer. -* Input : bEpNum: endpoint number. -* Output : None. -* Return : Counter value. -*******************************************************************************/ -#define _GetEPTxCount(bEpNum)((u16)(*_pEPTxCount(bEpNum)) & 0x3ff) -#define _GetEPRxCount(bEpNum)((u16)(*_pEPRxCount(bEpNum)) & 0x3ff) - -/******************************************************************************* -* Macro Name : SetEPDblBuf0Addr / SetEPDblBuf1Addr. -* Description : Sets buffer 0/1 address in a double buffer endpoint. -* Input : bEpNum: endpoint number. -* : wBuf0Addr: buffer 0 address. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPDblBuf0Addr(bEpNum,wBuf0Addr) {_SetEPTxAddr(bEpNum, wBuf0Addr);} -#define _SetEPDblBuf1Addr(bEpNum,wBuf1Addr) {_SetEPRxAddr(bEpNum, wBuf1Addr);} - -/******************************************************************************* -* Macro Name : SetEPDblBuffAddr. -* Description : Sets addresses in a double buffer endpoint. -* Input : bEpNum: endpoint number. -* : wBuf0Addr: buffer 0 address. -* : wBuf1Addr = buffer 1 address. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPDblBuffAddr(bEpNum,wBuf0Addr,wBuf1Addr) { \ - _SetEPDblBuf0Addr(bEpNum, wBuf0Addr);\ - _SetEPDblBuf1Addr(bEpNum, wBuf1Addr);\ - } /* _SetEPDblBuffAddr */ - -/******************************************************************************* -* Macro Name : GetEPDblBuf0Addr / GetEPDblBuf1Addr. -* Description : Gets buffer 0/1 address of a double buffer endpoint. -* Input : bEpNum: endpoint number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _GetEPDblBuf0Addr(bEpNum) (_GetEPTxAddr(bEpNum)) -#define _GetEPDblBuf1Addr(bEpNum) (_GetEPRxAddr(bEpNum)) - -/******************************************************************************* -* Macro Name : SetEPDblBuffCount / SetEPDblBuf0Count / SetEPDblBuf1Count. -* Description : Gets buffer 0/1 address of a double buffer endpoint. -* Input : bEpNum: endpoint number. -* : bDir: endpoint dir EP_DBUF_OUT = OUT -* EP_DBUF_IN = IN -* : wCount: Counter value -* Output : None. -* Return : None. -*******************************************************************************/ -#define _SetEPDblBuf0Count(bEpNum, bDir, wCount) { \ - if(bDir == EP_DBUF_OUT)\ - /* OUT endpoint */ \ - {_SetEPRxDblBuf0Count(bEpNum,wCount);} \ - else if(bDir == EP_DBUF_IN)\ - /* IN endpoint */ \ - *_pEPTxCount(bEpNum) = (u32)wCount; \ - } /* SetEPDblBuf0Count*/ - -#define _SetEPDblBuf1Count(bEpNum, bDir, wCount) { \ - if(bDir == EP_DBUF_OUT)\ - /* OUT endpoint */ \ - {_SetEPRxCount(bEpNum,wCount);}\ - else if(bDir == EP_DBUF_IN)\ - /* IN endpoint */\ - *_pEPRxCount(bEpNum) = (u32)wCount; \ - } /* SetEPDblBuf1Count */ - -#define _SetEPDblBuffCount(bEpNum, bDir, wCount) {\ - _SetEPDblBuf0Count(bEpNum, bDir, wCount); \ - _SetEPDblBuf1Count(bEpNum, bDir, wCount); \ - } /* _SetEPDblBuffCount */ - -/******************************************************************************* -* Macro Name : GetEPDblBuf0Count / GetEPDblBuf1Count. -* Description : Gets buffer 0/1 rx/tx counter for double buffering. -* Input : bEpNum: endpoint number. -* Output : None. -* Return : None. -*******************************************************************************/ -#define _GetEPDblBuf0Count(bEpNum) (_GetEPTxCount(bEpNum)) -#define _GetEPDblBuf1Count(bEpNum) (_GetEPRxCount(bEpNum)) - - -/* External variables --------------------------------------------------------*/ -extern volatile u16 wIstr; /* ISTR register last read value */ - -/* Exported functions ------------------------------------------------------- */ -void SetCNTR(u16 /*wRegValue*/); -void SetISTR(u16 /*wRegValue*/); -void SetDADDR(u16 /*wRegValue*/); -void SetBTABLE(u16 /*wRegValue*/); -u16 GetCNTR(void); -u16 GetISTR(void); -u16 GetFNR(void); -u16 GetDADDR(void); -u16 GetBTABLE(void); -void SetENDPOINT(u8 /*bEpNum*/, u16 /*wRegValue*/); -u16 GetENDPOINT(u8 /*bEpNum*/); -void SetEPType(u8 /*bEpNum*/, u16 /*wType*/); -u16 GetEPType(u8 /*bEpNum*/); -void SetEPTxStatus(u8 /*bEpNum*/, u16 /*wState*/); -void SetEPRxStatus(u8 /*bEpNum*/, u16 /*wState*/); -void SetDouBleBuffEPStall(u8 /*bEpNum*/, u8 bDir); -u16 GetEPTxStatus(u8 /*bEpNum*/); -u16 GetEPRxStatus(u8 /*bEpNum*/); -void SetEPTxValid(u8 /*bEpNum*/); -void SetEPRxValid(u8 /*bEpNum*/); -u16 GetTxStallStatus(u8 /*bEpNum*/); -u16 GetRxStallStatus(u8 /*bEpNum*/); -void SetEP_KIND(u8 /*bEpNum*/); -void ClearEP_KIND(u8 /*bEpNum*/); -void Set_Status_Out(u8 /*bEpNum*/); -void Clear_Status_Out(u8 /*bEpNum*/); -void SetEPDoubleBuff(u8 /*bEpNum*/); -void ClearEPDoubleBuff(u8 /*bEpNum*/); -void ClearEP_CTR_RX(u8 /*bEpNum*/); -void ClearEP_CTR_TX(u8 /*bEpNum*/); -void ToggleDTOG_RX(u8 /*bEpNum*/); -void ToggleDTOG_TX(u8 /*bEpNum*/); -void ClearDTOG_RX(u8 /*bEpNum*/); -void ClearDTOG_TX(u8 /*bEpNum*/); -void SetEPAddress(u8 /*bEpNum*/, u8 /*bAddr*/); -u8 GetEPAddress(u8 /*bEpNum*/); -void SetEPTxAddr(u8 /*bEpNum*/, u16 /*wAddr*/); -void SetEPRxAddr(u8 /*bEpNum*/, u16 /*wAddr*/); -u16 GetEPTxAddr(u8 /*bEpNum*/); -u16 GetEPRxAddr(u8 /*bEpNum*/); -void SetEPCountRxReg(u32 * /*pdwReg*/, u16 /*wCount*/); -void SetEPTxCount(u8 /*bEpNum*/, u16 /*wCount*/); -void SetEPRxCount(u8 /*bEpNum*/, u16 /*wCount*/); -u16 GetEPTxCount(u8 /*bEpNum*/); -u16 GetEPRxCount(u8 /*bEpNum*/); -void SetEPDblBuf0Addr(u8 /*bEpNum*/, u16 /*wBuf0Addr*/); -void SetEPDblBuf1Addr(u8 /*bEpNum*/, u16 /*wBuf1Addr*/); -void SetEPDblBuffAddr(u8 /*bEpNum*/, u16 /*wBuf0Addr*/, u16 /*wBuf1Addr*/); -u16 GetEPDblBuf0Addr(u8 /*bEpNum*/); -u16 GetEPDblBuf1Addr(u8 /*bEpNum*/); -void SetEPDblBuffCount(u8 /*bEpNum*/, u8 /*bDir*/, u16 /*wCount*/); -void SetEPDblBuf0Count(u8 /*bEpNum*/, u8 /*bDir*/, u16 /*wCount*/); -void SetEPDblBuf1Count(u8 /*bEpNum*/, u8 /*bDir*/, u16 /*wCount*/); -u16 GetEPDblBuf0Count(u8 /*bEpNum*/); -u16 GetEPDblBuf1Count(u8 /*bEpNum*/); -EP_DBUF_DIR GetEPDblBufDir(u8 /*bEpNum*/); -void FreeUserBuffer(u8 bEpNum/*bEpNum*/, u8 bDir); -u16 ToWord(u8, u8); -u16 ByteSwap(u16); - -#endif /* __USB_REGS_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ diff --git a/usb_bootloader/STM32F1/usb_lib/usb_type.h b/usb_bootloader/STM32F1/usb_lib/usb_type.h deleted file mode 100644 index a40be61..0000000 --- a/usb_bootloader/STM32F1/usb_lib/usb_type.h +++ /dev/null @@ -1,72 +0,0 @@ -/******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** -* File Name : usb_type.h -* Author : MCD Application Team -* Version : V2.2.1 -* Date : 09/22/2008 -* Description : Type definitions used by the USB Library -******************************************************************************** -* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS -* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. -* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, -* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE -* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING -* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. -*******************************************************************************/ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __USB_TYPE_H -#define __USB_TYPE_H - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ -#ifndef NULL -#define NULL ((void *)0) -#endif - -#ifndef __STM32F10x_TYPE_H - -typedef signed long s32; -typedef signed short s16; -typedef signed char s8; - -typedef volatile signed long vs32; -typedef volatile signed short vs16; -typedef volatile signed char vs8; - -typedef unsigned long u32; -typedef unsigned short u16; -typedef unsigned char u8; - -typedef unsigned long const uc32; /* Read Only */ -typedef unsigned short const uc16; /* Read Only */ -typedef unsigned char const uc8; /* Read Only */ - -typedef volatile unsigned long vu32; -typedef volatile unsigned short vu16; -typedef volatile unsigned char vu8; - -typedef volatile unsigned long const vuc32; /* Read Only */ -typedef volatile unsigned short const vuc16; /* Read Only */ -typedef volatile unsigned char const vuc8; /* Read Only */ - - -typedef enum -{ - FALSE = 0, TRUE = !FALSE -} -bool; - -typedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus; - -typedef enum { DISABLE = 0, ENABLE = !DISABLE} FunctionalState; - -typedef enum { ERROR = 0, SUCCESS = !ERROR} ErrorStatus; -#endif - -/* Exported macro ------------------------------------------------------------*/ -/* Exported functions ------------------------------------------------------- */ -/* External variables --------------------------------------------------------*/ - -#endif /* __USB_TYPE_H */ - -/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ From ece9c3681d42076ea6cc45bf46083817e521470d Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Wed, 10 Jun 2015 10:25:22 +1000 Subject: [PATCH 41/96] Added code to 'get' the gpio mode of a pin, and have used it in SPIClass::begin() to store and reinstate the pin mode of the SPI NSS pin. This is a work around for 'features' in the STM32 silicon, which seem to change the GPIO mode of the SPI NSS (hardware - 'Software Select' pin) --- STM32F1/cores/maple/libmaple/gpio_f1.c | 17 ++++++++++++ STM32F1/libraries/SPI/src/SPI.cpp | 26 +++++++++++++++++++ .../system/libmaple/include/libmaple/gpio.h | 2 +- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/STM32F1/cores/maple/libmaple/gpio_f1.c b/STM32F1/cores/maple/libmaple/gpio_f1.c index 4b596e9..ecd015d 100644 --- a/STM32F1/cores/maple/libmaple/gpio_f1.c +++ b/STM32F1/cores/maple/libmaple/gpio_f1.c @@ -138,6 +138,23 @@ void gpio_set_mode(gpio_dev *dev, uint8 pin, gpio_pin_mode mode) { } } +gpio_pin_mode gpio_get_mode(gpio_dev *dev, uint8 pin) { + gpio_reg_map *regs = dev->regs; + __io uint32 *cr = ®s->CRL + (pin >> 3); + uint32 shift = (pin & 0x7) * 4; + uint32 tmp = *cr; + + uint32 crMode = (*cr>>shift) & 0x0F; + + // could be pull up or pull down. Nee to check the ODR + if (crMode==GPIO_INPUT_PD && ((regs->ODR >> pin) & 0x01) !=0 ) + { + crMode = GPIO_INPUT_PU; + } + + return(crMode); +} + /* * AFIO */ diff --git a/STM32F1/libraries/SPI/src/SPI.cpp b/STM32F1/libraries/SPI/src/SPI.cpp index f17d804..cd2b834 100644 --- a/STM32F1/libraries/SPI/src/SPI.cpp +++ b/STM32F1/libraries/SPI/src/SPI.cpp @@ -119,10 +119,35 @@ SPIClass::SPIClass(uint32 spi_num) { */ void SPIClass::begin(void) { + gpio_pin_mode nssPinMode; + int nssPin; if (dataMode >= 4) { ASSERT(0); return; } + +#if BOARD_NR_SPI >= 1 + if (this->spi_d == SPI1) + { + nssPin=BOARD_SPI1_NSS_PIN; + } +#endif +#if BOARD_NR_SPI >= 2 + if (this->spi_d == SPI2) + { + nssPin=BOARD_SPI2_NSS_PIN; + } +#endif +#if BOARD_NR_SPI >= 3 + if (this->spi_d == SPI3) + { + nssPin=BOARD_SPI3_NSS_PIN; + } +#endif + + + nssPinMode = gpio_get_mode(PIN_MAP[nssPin].gpio_device, PIN_MAP[nssPin].gpio_bit);// get and save NSS pin mode + uint32 flags = ((bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE | SPI_SOFT_SS); spi_init(spi_d); configure_gpios(spi_d, 1); @@ -130,6 +155,7 @@ void SPIClass::begin(void) { Serial.print("spi_master_enable("); Serial.print(clockDivider); Serial.print(","); Serial.print(dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); #endif spi_master_enable(spi_d, (spi_baud_rate)clockDivider, (spi_mode)dataMode, flags); + gpio_set_mode(PIN_MAP[nssPin].gpio_device, PIN_MAP[nssPin].gpio_bit, nssPinMode);// restore pin mode of nss pin (work around for bug in the STM32) } void SPIClass::beginSlave(void) { diff --git a/STM32F1/system/libmaple/include/libmaple/gpio.h b/STM32F1/system/libmaple/include/libmaple/gpio.h index 013b3ae..aba4e11 100644 --- a/STM32F1/system/libmaple/include/libmaple/gpio.h +++ b/STM32F1/system/libmaple/include/libmaple/gpio.h @@ -71,7 +71,7 @@ void gpio_init(gpio_dev *dev); void gpio_init_all(void); /* TODO flags argument version? */ void gpio_set_mode(gpio_dev *dev, uint8 pin, gpio_pin_mode mode); - +gpio_pin_mode gpio_get_mode(gpio_dev *dev, uint8 pin); /** * @brief Get a GPIO port's corresponding EXTI port configuration. * @param dev GPIO port whose exti_cfg to return. From 657d6dae02fba02891700a8c806a7ba8ce9d2b78 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Wed, 10 Jun 2015 10:33:13 +1000 Subject: [PATCH 42/96] Alternative / better fix provided by @pico based on work by @victor_pv. Commented out AF REMAP of NSS in spi_f1.c --- STM32F1/cores/maple/libmaple/spi_f1.c | 2 +- STM32F1/libraries/SPI/src/SPI.cpp | 29 --------------------------- 2 files changed, 1 insertion(+), 30 deletions(-) diff --git a/STM32F1/cores/maple/libmaple/spi_f1.c b/STM32F1/cores/maple/libmaple/spi_f1.c index 1c78cc3..bbea5a4 100644 --- a/STM32F1/cores/maple/libmaple/spi_f1.c +++ b/STM32F1/cores/maple/libmaple/spi_f1.c @@ -63,7 +63,7 @@ void spi_config_gpios(spi_dev *ignored, uint8 miso_bit, uint8 mosi_bit) { if (as_master) { - gpio_set_mode(nss_dev, nss_bit, GPIO_AF_OUTPUT_PP); + // gpio_set_mode(nss_dev, nss_bit, GPIO_AF_OUTPUT_PP);// Roger Clark. Commented out, so that NSS can be driven as a normal GPIO pin during SPI use gpio_set_mode(comm_dev, sck_bit, GPIO_AF_OUTPUT_PP); gpio_set_mode(comm_dev, miso_bit, GPIO_INPUT_FLOATING); gpio_set_mode(comm_dev, mosi_bit, GPIO_AF_OUTPUT_PP); diff --git a/STM32F1/libraries/SPI/src/SPI.cpp b/STM32F1/libraries/SPI/src/SPI.cpp index cd2b834..3d4d0c7 100644 --- a/STM32F1/libraries/SPI/src/SPI.cpp +++ b/STM32F1/libraries/SPI/src/SPI.cpp @@ -119,34 +119,6 @@ SPIClass::SPIClass(uint32 spi_num) { */ void SPIClass::begin(void) { - gpio_pin_mode nssPinMode; - int nssPin; - if (dataMode >= 4) { - ASSERT(0); - return; - } - -#if BOARD_NR_SPI >= 1 - if (this->spi_d == SPI1) - { - nssPin=BOARD_SPI1_NSS_PIN; - } -#endif -#if BOARD_NR_SPI >= 2 - if (this->spi_d == SPI2) - { - nssPin=BOARD_SPI2_NSS_PIN; - } -#endif -#if BOARD_NR_SPI >= 3 - if (this->spi_d == SPI3) - { - nssPin=BOARD_SPI3_NSS_PIN; - } -#endif - - - nssPinMode = gpio_get_mode(PIN_MAP[nssPin].gpio_device, PIN_MAP[nssPin].gpio_bit);// get and save NSS pin mode uint32 flags = ((bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE | SPI_SOFT_SS); spi_init(spi_d); @@ -155,7 +127,6 @@ void SPIClass::begin(void) { Serial.print("spi_master_enable("); Serial.print(clockDivider); Serial.print(","); Serial.print(dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); #endif spi_master_enable(spi_d, (spi_baud_rate)clockDivider, (spi_mode)dataMode, flags); - gpio_set_mode(PIN_MAP[nssPin].gpio_device, PIN_MAP[nssPin].gpio_bit, nssPinMode);// restore pin mode of nss pin (work around for bug in the STM32) } void SPIClass::beginSlave(void) { From c27b6774fc62917107f0c2c20358f90b643f2e25 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Thu, 11 Jun 2015 09:10:55 +1000 Subject: [PATCH 43/96] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 0c25ba8..6bf62e3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,13 @@ Arduino STM32 ============= +##Notice + +This software is experimental and a work in progress. +Under no circumstances should these files be used in relation to any critical system(s). +Use of these files is at your own risk. + + ##Summary: This repo contains, the "Hardware" files to support STM32 based boards on Arduino version 1.5.x to the latest version (currently 1.6.3) including [LeafLabs Maple, and Maple mini](http://www.leaflabs.com/about-maple/), and other generic STM32F103 boards From efd8ecb7a7d3f03805fda74ee08bf752f5592461 Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Thu, 11 Jun 2015 10:19:36 +1000 Subject: [PATCH 44/96] Added license --- LICENSE | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c775e52 --- /dev/null +++ b/LICENSE @@ -0,0 +1,5 @@ +This project is built of many different components. + +Substantial portions were derived from leaflabs libmaple - see https://github.com/leaflabs/libmaple/blob/master/LICENSE + +Other sub projects e.g. Texane STlink have their own licenses \ No newline at end of file From 1a676200f78baf07497aa5f1c94c761a7b18ae2f Mon Sep 17 00:00:00 2001 From: Vassilis Serasidis Date: Thu, 11 Jun 2015 15:01:45 +0300 Subject: [PATCH 45/96] Example of using the SPI_1 and SPI_2 ports on STM32F103. --- .../using_SPI_ports/using_SPI_ports.ino | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 STM32F1/libraries/SPI/examples/using_SPI_ports/using_SPI_ports.ino diff --git a/STM32F1/libraries/SPI/examples/using_SPI_ports/using_SPI_ports.ino b/STM32F1/libraries/SPI/examples/using_SPI_ports/using_SPI_ports.ino new file mode 100644 index 0000000..b8ebea4 --- /dev/null +++ b/STM32F1/libraries/SPI/examples/using_SPI_ports/using_SPI_ports.ino @@ -0,0 +1,64 @@ +/** + SPI_1 and SPI_2 port example code + + Description: + This sketch sends one byte with value 0x55 over the SPI_1 or SPI_2 port. + The received byte (the answer from the SPI slave device) is stored to the variable. + + The sketch as it is, works with SPI_1 port. For using the SPI_2 port, just + un-comment all the nessesary code lines marked with word. + + Created on 10 Jun 2015 by Vassilis Serasidis + email: avrsite@yahoo.gr + + Using the first SPI port (SPI_1) + SS <--> PA4 <--> BOARD_SPI1_NSS_PIN + SCK <--> PA5 <--> BOARD_SPI1_SCK_PIN + MISO <--> PA6 <--> BOARD_SPI1_MISO_PIN + MOSI <--> PA7 <--> BOARD_SPI1_MOSI_PIN + + Using the second SPI port (SPI_2) + SS <--> PB12 <--> BOARD_SPI2_NSS_PIN + SCK <--> PB13 <--> BOARD_SPI2_SCK_PIN + MISO <--> PB14 <--> BOARD_SPI2_MISO_PIN + MOSI <--> PB15 <--> BOARD_SPI2_MOSI_PIN +*/ + + +#include + +#define SPI1_NSS_PIN PA4 //SPI_1 Chip Select pin is PA4. You can change it to the STM32 pin you want. +#define SPI2_NSS_PIN PB12 //SPI_2 Chip Select pin is PB12. You can change it to the STM32 pin you want. + +//SPIClass SPI_2(2); //un-comment this line in case you want to use the SPI_2 port. +byte data; + +void setup() { + SPI.begin(); //Initialize the SPI_1 port. + //SPI_2.begin(); //Initialize the SPI_2 port. + + SPI.setBitOrder(MSBFIRST); // Set the SPI_1 bit order + //SPI_2.setBitOrder(MSBFIRST); // Set the SPI_2 bit order + + SPI.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0 + //SPI_2.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0 + + SPI.setClockDivider(SPI_CLOCK_DIV16); // Slow speed (72 / 16 = 4.5 MHz SPI_1 speed) + //SPI_2.setClockDivider(SPI_CLOCK_DIV16); // Slow speed (72 / 16 = 4.5 MHz SPI_2 speed) + + pinMode(SPI1_NSS_PIN, OUTPUT); // note: this must be after the SPI.begin() for gpio control of CSN + //pinMode(SPI2_NSS_PIN, OUTPUT); // note: this must be after the SPI_2.begin() for gpio control of CSN +} + +void loop() { + digitalWrite(SPI1_NSS_PIN, LOW); // manually take CSN low for SPI_1 transmission + //digitalWrite(SPI2_NSS_PIN, LOW); // manually take CSN low for SPI_2 transmission + + data = SPI.transfer(0x55); //Send the HEX data 0x55 over SPI-1 port and store the received byte to the variable. + //data = SPI_2.transfer(0x55); //Send the HEX data 0x55 over SPI-2 port and store the received byte to the variable. + + digitalWrite(SPI1_NSS_PIN, HIGH); // manually take CSN high between spi transmissions + //digitalWrite(SPI2_NSS_PIN, HIGH); // manually take CSN high between spi transmissions + + delayMicroseconds(10); //Delay 10 micro seconds. +} From 7d7f113f630457b1d163064034e8cbf9d2cea885 Mon Sep 17 00:00:00 2001 From: rogerclarkmelbourne Date: Fri, 12 Jun 2015 09:49:00 +1000 Subject: [PATCH 46/96] improved vasillis's SPI 2 demo --- .../using_SPI_ports/using_SPI_ports.ino | 66 +++++++++++-------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/STM32F1/libraries/SPI/examples/using_SPI_ports/using_SPI_ports.ino b/STM32F1/libraries/SPI/examples/using_SPI_ports/using_SPI_ports.ino index b8ebea4..dfffc0d 100644 --- a/STM32F1/libraries/SPI/examples/using_SPI_ports/using_SPI_ports.ino +++ b/STM32F1/libraries/SPI/examples/using_SPI_ports/using_SPI_ports.ino @@ -1,22 +1,22 @@ /** SPI_1 and SPI_2 port example code - + Description: This sketch sends one byte with value 0x55 over the SPI_1 or SPI_2 port. The received byte (the answer from the SPI slave device) is stored to the variable. - + The sketch as it is, works with SPI_1 port. For using the SPI_2 port, just un-comment all the nessesary code lines marked with word. - + Created on 10 Jun 2015 by Vassilis Serasidis email: avrsite@yahoo.gr - + Using the first SPI port (SPI_1) SS <--> PA4 <--> BOARD_SPI1_NSS_PIN SCK <--> PA5 <--> BOARD_SPI1_SCK_PIN MISO <--> PA6 <--> BOARD_SPI1_MISO_PIN MOSI <--> PA7 <--> BOARD_SPI1_MOSI_PIN - + Using the second SPI port (SPI_2) SS <--> PB12 <--> BOARD_SPI2_NSS_PIN SCK <--> PB13 <--> BOARD_SPI2_SCK_PIN @@ -30,35 +30,47 @@ #define SPI1_NSS_PIN PA4 //SPI_1 Chip Select pin is PA4. You can change it to the STM32 pin you want. #define SPI2_NSS_PIN PB12 //SPI_2 Chip Select pin is PB12. You can change it to the STM32 pin you want. -//SPIClass SPI_2(2); //un-comment this line in case you want to use the SPI_2 port. +SPIClass SPI_2(2); //Create an instance of the SPI Class called SPI_2 that uses the 2nd SPI Port byte data; void setup() { - SPI.begin(); //Initialize the SPI_1 port. - //SPI_2.begin(); //Initialize the SPI_2 port. - - SPI.setBitOrder(MSBFIRST); // Set the SPI_1 bit order - //SPI_2.setBitOrder(MSBFIRST); // Set the SPI_2 bit order - - SPI.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0 - //SPI_2.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0 - - SPI.setClockDivider(SPI_CLOCK_DIV16); // Slow speed (72 / 16 = 4.5 MHz SPI_1 speed) - //SPI_2.setClockDivider(SPI_CLOCK_DIV16); // Slow speed (72 / 16 = 4.5 MHz SPI_2 speed) - pinMode(SPI1_NSS_PIN, OUTPUT); // note: this must be after the SPI.begin() for gpio control of CSN - //pinMode(SPI2_NSS_PIN, OUTPUT); // note: this must be after the SPI_2.begin() for gpio control of CSN + // Setup SPI 1 + SPI.begin(); //Initialize the SPI_1 port. + SPI.setBitOrder(MSBFIRST); // Set the SPI_1 bit order + SPI.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0 + SPI.setClockDivider(SPI_CLOCK_DIV16); // Slow speed (72 / 16 = 4.5 MHz SPI_1 speed) + pinMode(SPI1_NSS_PIN, OUTPUT); + + // Setup SPI 2 + SPI_2.begin(); //Initialize the SPI_2 port. + SPI_2.setBitOrder(MSBFIRST); // Set the SPI_2 bit order + SPI_2.setDataMode(SPI_MODE0); //Set the SPI_2 data mode 0 + SPI_2.setClockDivider(SPI_CLOCK_DIV16); // Use a different speed to SPI 1 + pinMode(SPI2_NSS_PIN, OUTPUT); + + } void loop() { - digitalWrite(SPI1_NSS_PIN, LOW); // manually take CSN low for SPI_1 transmission - //digitalWrite(SPI2_NSS_PIN, LOW); // manually take CSN low for SPI_2 transmission - - data = SPI.transfer(0x55); //Send the HEX data 0x55 over SPI-1 port and store the received byte to the variable. - //data = SPI_2.transfer(0x55); //Send the HEX data 0x55 over SPI-2 port and store the received byte to the variable. - - digitalWrite(SPI1_NSS_PIN, HIGH); // manually take CSN high between spi transmissions - //digitalWrite(SPI2_NSS_PIN, HIGH); // manually take CSN high between spi transmissions + + sendSPI(); + sendSPI2(); delayMicroseconds(10); //Delay 10 micro seconds. } + +void sendSPI() +{ + digitalWrite(SPI1_NSS_PIN, LOW); // manually take CSN low for SPI_1 transmission + data = SPI.transfer(0x55); //Send the HEX data 0x55 over SPI-1 port and store the received byte to the variable. + digitalWrite(SPI1_NSS_PIN, HIGH); // manually take CSN high between spi transmissions +} + + +void sendSPI2() +{ + digitalWrite(SPI2_NSS_PIN, LOW); // manually take CSN low for SPI_2 transmission + data = SPI_2.transfer(0x55); //Send the HEX data 0x55 over SPI-2 port and store the received byte to the variable. + digitalWrite(SPI2_NSS_PIN, HIGH); // manually take CSN high between spi transmissions +} \ No newline at end of file From a9402388a8c7ab34657db1b31bd0e8c6a09baa7c Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sun, 14 Jun 2015 07:36:13 +1000 Subject: [PATCH 47/96] Remove STM32F4.zip accidently added in pull request from @martinayotte --- STM32F4.zip | Bin 715812 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 STM32F4.zip diff --git a/STM32F4.zip b/STM32F4.zip deleted file mode 100644 index 507be0c3ab0305745accd9f601955f0a109f5a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715812 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

    )60ESn`jD62cr4i-9|%TS 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

    NEq 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 L#NYf?wr7 zuykB$os(f~Od96C&p%J zqp|=CxT>|;rrLtI(w3kvTf-Hi+8gpbmMn|>t#EbHP%iX?$Za;7g`Nd{<9F7%*!ch0 z1>cYLP0whh&8`>kprH-LLtBipo<~LWh6n4uaNmbn=xuL7JL_#V#tV1{n6*)kdNa1$ zkDpe<>WyGvR){jY0|?H2Cd#l41A(R3$S|RwB7AMgg}@`UK`V_qaj+~QbF=zVa8DjCw`7?cKB+&pSvZ^b@&0~1L>hU=R!ofdYi^G7fc z*rTSrY8|Qo&$0+pLnsYcRzjr|F`QF~iKvHGri#`2U1*iu1qsP%q*^QJNj2kmbJq2I+AQ}%~T`o3DZ~+Rv?Td)5UywQnRd(n< zS^JG#Wn15e2y{~HW2*M^Onk=Pb|`-gU(v?%%NN+7KziU$`7^ey3U~h^(#caU-pd>q zk9;45MmpZt2$gh&Hf=>+$OxH;1+3&n*7JaWw+WY(n>+ z_Y=bl0~NG*YZVvwKLCIrr@!LJ{~7*coA_^8_3Ql4S(*G7XZ8OY&HcCZxbOde)BEML z06+jBBsGgBv2b9f!vg?73;h?O*6b~4&1vKmCB*(u*SaokFS~CfZ(#>Pgt zqpd8yM-C#p@a7WZ3N7P)?Q=2Y%sLn3OFhAswc+BU7KxsXi$qYE0W`S#G=dbq7I|l!sh@v7bH}R#3lH+8w>_l8?cyOT4iJ95ZCRcMk4(ANCUmjSO z#!2X6>SP6QffQz1pt}OJFE@)Z^`IQf0Vkj{=0#YqRH3CJe8o5s47=1pWaBhQU)SIa z<}}KEvTG+fIo**hu<7-K@e(``_kBmxee8iPq!Z+!@%poPANYrk6R2i@CRXK%nQU$ zL8l8t!Yji#g)^c_VfDNp{I&rutYP{q1c!htnNArLnKghrIEB(IM$T|F16n?XT6tWD zvaO~NUf^v)4d|Guyq@XMFb(eXs7^}2B*UZZSu>AoIe-mK<*bdg{H#p~S47?f$6xl0 zdq81u`k{Tz*i&eEFkb^*BG)HL^`_|%PL%wr-(7rkE+Y|XG3m>m(*?M%n`fL(vEPx)Yh zs+eQ|3LcJlfha$}^)1^)jck6`C!{BTu))#O`n;dfldZKiu7n}qK4tzwo`0+NwX#45 z?8HjoK(U)(xL%He_XoBVykGkYW>*{&r~NRld`_Vzqo1+8!Hy{zI+@rm&)KI{emOuWL+LBcgXcdQS}#^MW&f?I6J2^>AgB6&;>0Y zbcN3mh&YO|#EF@SxyPMgi@5D!dIwE@8GAd; z{=B&4g0e7+;R!v)5?KgFnN0yfPObWtD+cWzh6{&_UUGfT!HrgSKY%1HUsRvQA8t!<>VRFoQW`LUVU?`x~&bg5f zC!W=9A0_3yS1oal8brWjgCLYa`BX)6F`InCbdy-6;O2#z_=uYulr;X8ig?V(oAtd$ zfmN%ZWu_9zxgK(IN8){lAP0lpjq^a2`jZceQ^74cw;IZLxdjI0d_|sU)SIw~hRcGv z1D~>j>jiL$G}I=I3Vrj1P_>;UrC>XpCE(z#wJIN8zltw< zqu7+(NOPnHUx0=hlNr&!h<5gOlzp`GL%ImP#i8ngLy;N3xLmw4^~)ji`%0c=zI7iF zJ3NDS<;NR@RI7{NK)CZ5>JK8##q4KON(C&Y`iJ+DK}bufVrY zb!=k}y#xXL5xj%xV?dTxo(w<5;DltrSp3Za#E!^WE|fiA_e~%MzUCzo89pl4Xo^L# z6+4ZlkAPZJeI9`pS>fsGkvr$Isp&V)>&?+_fjMNC(FfF(+PhS{Qtou2fk^+02%r!D zY~b>Q`#v!#dL8n}vThq5%MMFSI=L4gaZ4r=3y+SQjZ6b_h6xu9Jjav@%1TtQGP2el zO)H8=WhGUppvBi=UuyO;Y_JTm%r&Q4mACf1*l@nrhVj^GC3~sMjG)TRa-q0YU;C2r z_XB`m_*;=qeMgGF%qT`_;p@=J2jkIaQ9}iF7_qz{OG!=7P8vo1J;SfbugQ3rL(HQ9 z=)?A6Ky3&`7ytmL)xn##b2Ol%*fAckY@U>~i@@D`Q5rP}5ZZiR?{ z52K)}fgW4^>ap>wLeOh!wmnqT9r@bEBqL5{s%f!d!&1Kl_3!~?OEJURX|LcWYvAfJ z5ANZj*w7e%(%Yp_0TZQx12V*SrYglUlbkkd{c4n#591tKsj)EA#A0W)r~}hP@!&k4 zK>ggKv6lNcJ0mqLM=4-o6PV)DnFRg4p!iaenEtSkl_D)L6W(K{`k_zyq`ztEcgf^D z*EHkl1oamfYHmZEi)`vL7QUpG^!PLfsOY@T76*rPM;C9Y++;}!Qv-_K;a?+`FeCm1 z+-Q`z@$KHQGVee|?x=}a9l@1mog22S>hM=31I(CRncZ*E^d8v$9C9Q@TW3!mB*m0OXh}A*A=xn-R)#q+P6a9+q|-wGB}?)S?^Z+?K@=u33z}w0Znk?*S|hW z?or_7E&sNgZp|+;*%6%Ko&`>#m2qV!6h6uO;V20Mf+IyDzAOdls z0*R0X2IC8TlJMsLhF$LV>eLlFhGgVK#aTqN$#`SlSqc0jc@Qz*Qz68)`{;ENMD2-3 zUCy%U_Sm;I5I2tg6dZ@T0q#9dHcgWOX#@w^50rsw89Jy(y}mXUAI%LaIStILVWmI) zJ#Wp@6H;*(y5#s|hf`6%u@|GitWIspGC(^dKPdUzl5th>m=7++grji_DFX0Bj)GY0 zHPT0-)R30zI-I^D@VWdO4c!&czIoawjC2c@O;kfzsYPiu$)d4%`qqB{J6yU?P7I#1 z4A6t~DTh8TNveX_22UWu?1wgTAIjCQ3q}vM>So#)dw!b--%xD7i2o)EsJd4~k|iHI zPP|X=z~PNPvU$o|^yc9nkIang^s*H^W zDsHB46RQoyc$A_K0-M?G?!r7iZvb&x+QrA1p%s1b zsobisut?#KF zHVtbRVMr3DW~niFliI!CCxObjCehiZqe@bpXQCo(gjv#6iKzo6K3tT8vwSSRZ{IRo z3+6)M)h~S0h1@Bt5GH$zkPam4N>c)y}ha)Bb!1YI60#dRz!17KK zEwF+{Uhil*+!H6W;u4nrn)2kwHZe_1|f-&wD%7}|jQ4zy(9vd-7z-v*U1(#3?zmBQZw2 zGFX|ksq+itg<<*1ErsTIg72Xz=xOo%D1< zak;bV;CR6xpxcQ(4tvObP#Yxd%vExxiP=8HOQiFAsJQ_|ROzpGk_ZkW_nul0YYasJ zJ*$W4{#d%aa4fxEQ7T()V4$E3dAx<9@Br3Nt-!=_a8N=@AE!&<4m&eg4K|8gY+87A ztk9m1yN7DWNtRoT#etlB@!yj0DnGRCpDX7i z?6y~L?7neAUsHr3yoO#yog?c{iO^9w7~5J2k~YYSOyS0{s$!W`-D2$(vY+pAX?LQV z)>1-tt&W>@+tIKeyPFb~)D^Acn!>B&QhN0?>9YCz zV%#A-Io3pF7Pv!t46)ul`33hLHVq267?V?emqogub*3R<8FcmCfsJ_`pZklgMe~;u;A9}sZg)ON)^1UB`^A>W|pVLLp_a65{`-#9}_HK|+ zv~~aoJMr**-PU%~1LbB#z?~Yd-ev@VtoG3qF51~??w({_AqbaK$%_snCk3xp5N`MA z6iifCie%9#P-y*4BC)Ts6ab496Hoz;j0gV#%T2)Q%-5XtY^$hx1A82t!Y^J4g2%?} zpbUC@VftZiHhiNgSo=sJ4Ag>aDuGzNZ-lfg;f^jTcLK8IH`{Ug=pnWYna zay)X(F{X1w?qYwI@8yN|2Tb9VM#UjG$nenZfc#VG1>UZN^#)hRb%wrn#gmB>6LA*K z)FF#F7b)W4PcN0JdN)06@O@WLtec;J=fUS+VD4t?I47C7HY%XcNh!;JE1ra%?h*5n z9>P$V<_1aqn07XEwZn$s~YmbEPsF z%LrIi;P%`N=FtSPE51KxdSCw}iRpU>u|aXKc>wz+A(bCfjGgiUrU+}Wn0M6o`LaTG z#^82(`w#0)wiK7?WiO3{@k2Nnz@_K*cXwhz#7QTXd>s|yVtUm!9v zyGhA6KHSU0)$V4kYYSK}$9HK4l7l1(l*GqO(33j9K7Tg28mGHMYSlX-QB$7ms&N_P ztWke&Azb?b#pc|AD3dw^K6)e=vLPQbXFI`Te}n=C%Q#hD@-@1*(^wXZ_-HWhW;BvC zaD+WaPAPAQIu|Jq1RnwX?;n0d@6?*F;QrV6SHWBVHvkDiTw^KBzrN$h{m~-I@tROk z?ySp6xl1Kw@$U!*41K%{BFoe|x70)BkSG@YK*E;2ZTRDYi^6gE2wIFJVua#G5Q9@7 z)S%5a_~VITzhasAQj}?JsF^n4qkZ7p(RIweEr-F@zun%Hl$kl9uBJ zSU)(}8?<%+j& zP_YJQYHt{GcV>FGXlJn-F*=6jW!G$x%v3RO^I65uOdoo>GZE1DH-jb78M}*A^`YIP zna!qf8UENDt{*U9bPS%wdB$$pz?;pUZ8_)ki8(?lfeYpT11<*N9FrekG>?UOsDUrB z`{Tv<2ZIYi~}>mNl&}n-P&GY>0Xr+4v!}n`|NGZn%HFT#<q$)jK2?>8`9Lk9> z?M~p)+K0YD_hG3=*BiG-n&bLF2zMBYCkvKB0;_aT3$$J=kjPz!qkt%j-xyGZ#{&>I zpu7W4#-CG-5X{K03^fW4B$p`Nb~_rSHb7|U=a4r@+4UiX^dpvO`bRwrdPeh?2=jSTC+pb$Juqm!*6{y?D1__(Oyuid*ezYLiYJxw zy(dIfvVJ=pE!REi5V>CZoIiPeyCR$B^V|Pik<0!$j(FJNb@+BW{Qf@t2GS9@X2}j2 zMLZ1O8!or@lglNNpdHse)DdF7?|9aSRwxNnzVa!y#3NPtXici1(GbZsOlu)tP9m7j zgWc%pht7toYdg4KA7=ov)CNv6Nie+w=h{CC6;sSL?w*=~FLw}v7G zBp__Dpq?+r9L7`kJHJf1hrNAA)m&OBvAT(of;iVuG|7~pJOBV^1io-Z+LSUqjldRS z#|*pSFU3$W#6C-$nRPA+vo&IN_ybICX6G#dS0G4a72+^b>h>Na0PlgB0+dttZ8Y^4 z7yM{@Z&ielZxa5bX(wWYha4#+A++FuBLYLjv3 z@}^{g=<9Rs4qy>M%3WxnYF@gsNj-#tbRfm{DNBbWeNmvd>p1^){PAm$hUpktPrCEr zx}oYC;sAt@u6M6`FDFz_UvyG;Zryit<}ZLTgS|HBuf;H&Od-)~=#HO(eJ$Lr3gRa7 zW1fCcM2{vCiXF@X4J%UGBM;qW_2#2UJR-dT@ik5ncYfM1r=F1$Y5)|1F`$dxQvF77 zjtOnV!ytWvl128+smyOcx6(t?HPQ9b4AOo;pM5(DRwPSQ5A*Cn@77g zt@HbZML5*m=ejV77RlBQn1OKtpxXu&S{gXC^B{pD!q9WLSQhHwxbF_X&JzaNV*QA& ziP?cdN2Wv@UmThS>Dr4&IDL zqYKain|rP@!i{1P*#a^SOcqR-zGz6CaR9VmW?}2rV2lNLabP)2pJ^nZYj(mFu zto9Xp3*O<6A}TA=T771G07g$3o<{ z%oLoHeY&dtHY!g6x-8oadd}iqb0Ql6np!^kV=J$hxXcIDT=re+jxw-3%7P}6NM!5_7HliihBAhr%0$b{lSZ=Uw;?qJV#a{o~f!6F6njcOTb zWn4tNH~+W5y^ih;v&7h7(ztZ&edyq<=E2YC9?JklSvkQdJFw?ngo(WSFL+~<1DSvz zbyj)F01>J-K|!W*4TNr`Y`Vi7n}0AFC9N1-6!{^SSnUwV%1yv;+&o*<4W?>=pi$K- zQ?bkNO%n3PQB?((q;ip87nOVJ59?^1sY^nkaB$=xB*-)|>9uK+q*Ow^D%_R}4iO?v za>OUL!lr^)CX;L2ZK{kL?q9jdA@yxVgo(Ik;z_jb6;IFkz8$+=;a|rdDpGp^Gu83Y z|A)4BYz{T*)-_|>wr$(CZD+-{ZQHh!72CFL+expttGmwWU8i<`+JE7xdTP!w$8}%# z31Z$y$st54ExpYg#hVc(V}LW=R7|5Xmnz(-pK1gS)r+SjRHPaHZ=lu+{# zkR$iny%w6d`*O(9A>)oeWWf0@6mXdnXo23!+w)f8TmOTj)*|K&Z;uUu?&rfv(P|U_ zI`4xVzh-wX4k0Q{#XY7zn;lEXaFjMo57QRw7>lx~l0?~hwupeN=5}$m-9n+Vhlh1w zo9B9sZgDJlhluW5L6?SVL%AeD01XiZRR3PaEYTbB0+?naDKtrGb)z8SWY|1xHa9gR zc*?Z0Wq3Q|W0^=6I$pWJW6ec^G9@PPJbP|I%~Z;YrZ;uQ*xhd09+~TNzqXgz*IuK6 zPq}J3?sbe0m7lbap`eb9@l!}WBwg;>af*b)X^36Pai&B*6Cojd{0?@_W)FA>V68h7 zk7CPU@83L2)tVD&Z(_(GJA}db4Ib5c!EbxN^H;}MTR6IY^e-M>L9~QWccLtiDmg|j zancQyHa#6Gj7|-sUDD}j`o-mW)T&#(0L5MX-s$l%1H8|aa-6XR`o|YX4Q zZ}eqJHGb9+qKU`6QxW?uRV!NyI+g zjhf++h`~LtdAo|PiCFP)id(n8wj{oP;s3wGSJW%fyX(J3bSW$V0ImO_UAn2ev*rJf zUPZ&!=|BwWXQuA#QI*uaXs^wM4qLyLC`h9U4j9phU0a<}Dje{HhD4NEi$3MiulHsJ z8i`_u6i)vNQG76d&2CXf#`Uw_fkCB-sHCPWGHIdWpasUb(1t4jlzd*49PPpl`jGowEqsY1$ z;*kyf)%nt!M3Z3C%;0j3`Zb~fh{l~?DE&nkNtz;paJ+GGekk-r9cBKbh+?d}lX>y} zTvHEt;utmaQU#?0-Nr|GtLp-6C#npdz;b-yo0J*A_sp4;k;M4)I1VX|+n!NT!45Yx z88M&N?sE+Td4sFyops(SaPkw7QF5@Zw(ZXOB~YFHbm3Rv=nn%p{=VL8!#HN6Zzk93 zaS$=Mwb#P{+h>^iu+DJHYjVrcPo`b){D;Y)WXcNzn$2*RH-8hVQHh?$3 z4Fq;w!$3C0b&y9&4>z{Y`^ZPD277}3R(n~Wxhk;F1U$omGjuS6 z1FKoc&BKP(T*Z#y<9uG{K)V$Q&N`BTI9V4&oLu)!pcDpe2UzZ6&oSRlx1mADB8=^u zcEsG?(&P%IoWv_k)mq1eq7>d(oN;lm%o&f;mh5gKPXa79kfUVxFblz==qBgCF+xPb z)xd-Y>dzw97T!A>UDI4>o&fBVnSje7h&ALse5wD;Xw@`TM}3Rb01T1Sa`VNVMxaR7 z^I0YYZ$aMWk;Jg7_R19kAZ?v69l?e(_{~CN$YB`!C}lt%c^?i3l+T9Zm+0qZNb`rSWVc#Ir$14y z5+&`LnXJlQR)EpsoSf>p-#r;HU?|0*IsS6ZW}WR@kU+Q+!bfQ3{!$Jm=~( zzf}L5*h7k;QalvOMa`0m35yvWksRjErIiG)Ofy2Kp2Ovc!bF%_URa#sx5wkdca=;+ z+=WQS;EatV$5Nd|2$~&9=jXsgMSR(FJrSaWj^!KD+_C#YXFl8ZQ4R?9UppkYP$7vV zNEl0dF*ik`5@t#wAXvA*P!C7y~vv|E&wJDaHMNJj$lA3rB6b1FFz1aWk!dVhI zXBe&I6;X7NzFS+UPv7&>EK70uQSfHXn!CHjGm}2SP%3>=>$zCVRond@w(fI7KvIevb*}<`N?Y4EKo+OMwnLR^5=xW?nup34UsF(kj*Tf<- zO|!dd_K3K7UL$;+KTujH7$IAj)}Ug#jMJ8B;iefn{VS~aiILGGgOcbF>-|{as4_Q8 zEjT*K*{aTupx0Uwg`1HA;Br7@aUq?oGI7U4KS)pWRH^6_fe6>?{=HTb9X$w4{jP<( z>>AE>)S{rLTRA?n4nS^}ii$pvW8Rj;103T<-DDTX1m>8Fx`{V5%!q&aP#<1ywg3U9F1>XE3|TW@qe9C2w~ga`FwN}oWgh7i7U2Zr>NJN6b(Cc)AP z^9XGw!8=-Nl_o=tS9E6$n_H(`>6{*g6qt*8TxQ>YHJ1;Dbo}iEn<45}yHnq_3D30fMlXKks zu+bns3e`5LCR)^}e!MMDSMc2y=z6U2Bpoc5RPUO2TD9R(4d>)w-RUisn<{vDJzAyp ziFCTm<%J2p`TpKS__h_K_{WzIRT;p_MZxQ9yh}5Fzx}4`B?jeME^Gmk3vPmMrWR#+ ziq0hxIIzc_03m(4%TVO)G|tAH?c*fNsvUaR359a7y+}2g^y!pZM1d6v zB~$xaVAGEO6bv%ma79#z==5u5ceE|r32+-l6vP2&(HyM?1Od{9r<>2lP1Gp;)}Mh+ zDOkU2OW|)gAcRV=#2Ub0$#wMTOSiUXk4f&<*)(_*erU>QQ(1V=z@JWTY})Q~12gX4 z=(;)GsUCgVIu_CDmb>Tit5eV^@L1k#*pr!|COh#NM;?c!Bl>Gsx63hL)KZy)aE~fE zV8Q34Og-)Q?CuiorxE8thG(1;ry>4o#i=ZKMsd6oSO>1tz&~0 zKjR^JdcatSFCYNz{&LZZ0C_+p^0yWjFn@IDv0>0WALL~VuwKiuhp?CruAYn~Vtd|RN8+k@o;XpAbzG;Rhc8Hx+=#?GbWx+s`x!hYHY zeJom7CZ$TnD<$)AM~^lydqFP3mZ8-$X!`x6+ck3^o{7@W2F<0@u)Cn+Rq0;ei4@nP zFm3J-&0P(ba$ELb#T|?@4aOeMDkXB={2o8lLL$XPi*DDPO*67KW=za&-Q0k><@oEK zaDl^pq{=Dm*}vA~H$!(%bcpLJLW)BywTP4v>XV~O6|cNtALA+6Mkz|q;E z>n!ji!?malDdqyS8vsmhg+E&@JY5Y|l&{)W(`W|zGv_Xp+B!Ey;@B5jYBv?w&-jp7 zga|`OpZ<#gzT{^3j|$cA_g`>t;WgHdE5(+-%+CDV-%m2~+}Bn5 zA1r%NTclwT`vV&8JW`x;^H&6V{G>(=Q+orQASH{}0{k9Ei0NO3cws*-gzU%TQpFYF z#0Zo$9s{TH^%5G%4!xj)1Dr#E?$W6=?$C`G8c!hBxy2457xz5IL`d^M815E{!A+z@ zB@Xet^}$75@HDc<@(jTs{4Z?Oc&0SSoI(UbxdWo1iYz%o6&{qb@7W;)MEP!;>URW< zrd{I_toxR!5OMKZ6sIBBc|4RP1Sr%An+Xt!G0FDql%Ya9tq`WDpG59f{gIOht63ft z3#QQCf@hDip-GgoQl8o<3fyu8$A%IFfo1;`@ME%+Vy!Dfc4`b{HT*P(%MKDkL?Brt zLW4S$?~F_o*FV$U(Pk3F;e!mm`54_C51=8bKYApIseoCduR3C>Wqgs$Ph4&xiH$qt zo$e`gn4yeis>%%EFA0vV&~Owh(>&Amk`Pm)Tyn+RjzgQE$Fa`#)dgNv8(bK0GPajh z1?N~Ss^Fv3Xj@n}V}Bh0No|&$Z~L$Ut#Tu(O_U#N!ADtDj8I5S24Dt zRk2IiUzQx5orQ=+7nxw4EQ)A-3bSrlH%2(;dJh1y6S(lCgDzl04W;S9SDt3r{^jB@ zG>v83a0AaT&k8s2FFOQb>>1QzB%xVc3Vr8G3PS{1QK-GUaL*l~WGl%E%7ItwWeP0} zGHPQ6(Zp;zxv#Yc=e6@ULWPfDY@ulpI?DyWBoS0tpK-#+_-7EM=HEuOtW7BA`W-L+VcGB?{0x!;eEZkWH?hxy$O9ltV~-x@ac*cxv--m;&m?#0C_9;; zlgO}V&@qrQy~x&Y5{LOG1H_HPwvi&dWDOfpgb!$z#f1TT8q3a}fT#z%NT3HXKg0b@ zTDejpCZi3Go${OYjhG8T&}r^##eL9$8SDt)-S!bw4esgB@XGm06ZO;w0QAbwGHdsE z?n-ui!-9={R?#AJa>l;(+X{fU8FRq1l*l?aDA)^mJp6#q2oS!hB+d;ZVr}*Q*57s- zMOmw>3)s|_VIbCAHX4+u@JOyn4d7g#RQD5w zeb4!m_7$_SpjC$TB8o{euR2S_2vsRTs$bxS7B>ADjS`vahl?RA(fAE8Yq0B%)zg-l zqpJBzTgz?DtL35gVekHjCN$a(emU3h;88Z~n4A^pkBN#NrK;cWdMMw@+8hRR%2w8% zI9vlMsZA_7(yqD#Ni|P8IyvgAWz*AppR&dGaQw8*gPMCUnQq`DuBTZ90%7%ewfzp%yaYI+2kpZi z!FCBU#aD&;+rEpCt`~^PQiBZ+a2N^j@P59m%ZKi zyRz?*RV&`^#hHCC0*20W^6rU)Z3jAgzZFI%F_`uvm9p+ZHaR)-W|^65S%TEKNSRq{W;oS6k2PBRou&GD7TI$pGl^g+ z>EqRQsdFW@N-~fatUd=HC8#kelU^L<-O0?gu7#?Scww>&N6HpT@=Dqkh$ZcEt^&kE zgh}Iml*yVuj;X&dVmSNZs z-L~^~4mXbe>_3b|XL6^~9I;wBbZ0z#sTEbrucE(i8?;KkZMqFJ2M4a$(l^7QfRR*%JBVrnsJkRlTb(hvoMR4|N{`_u=5&22w(*StO?~ zW$+X2B8l)m0VL5B^=&OOyeOd&*J$!5D^3|enz1GP7d5F=TY`pwhKxlOK8h&Wq>xr* zDV4-x#!uj4n1ydd)gm&B_rKPt{TDT%LK>Pz(ty(XPt>H@=<@Vm)TC#~rxiw{@j4z= z_{lVNU=Re~@eg-<{v`z&BrFh!A^Qyg$|>R)o#1o($Ca+RYqxbG01!$F%vc2-lu~}4s z$z?xN>KRj@;2eCiSJ*J3j&-Yyl078YXG5G(ZCl5|KtZ-w&f3YEN0}xUqYYErRNIII zeuC3<=zpRnGxj&rA;JcsCDYmPLpaE`F9BaxQ)1rYPp?kWZMH^QL+LZ*p?ntz#%$R% zVk1|vFapkIflb(Z5B`_wI%NXP&hgm96DnK?`Om9hvU*_>gV zLQ!C+GmQIJ;i}gh;TCRTv~LlnnQTbRZ8Gu!*FhnV;)49oWM%{6zdrE#X})^upBD-f zYGnat#JKkWjZhvP@_r{~pV!x2a{up?iNCuXq9 z@*a%?r%{ z`JDxBZ65*p)8E&db@scEkf%G`G{HSL32AHzTo$tY)O;lt2){y>qhuH$EVc6i9`v%W z&*;8U7fcf}w9>i{6N~3R634(}zroIUr4A^`cf3O>qM!5#*Ht32HMOZxney>4YSa=f zuFOhsv@kUDXDN_seuOs5BLnUs}XA9 z+z6E)vclQ?BsJ-z$;CF}o2=ops(u}mytbnF9!TI-go^52(V^?HlXryshG%81MVx=R znQUZaiWb7P7p@^DG!JNj!*MCam=i~b{w6R$_NwP z0`zj*YugEXAmrgj{Cm1a{5tq~(fdaXb~-kUXF`AgP$hzE@wMFQNUw@5zi-R)TFTXN zGvKIW$5b21^;Wv!x@Q$vaFj)s$e(HS$u!qi1uyJXTUI?3F$l%eFM+dc6>o<6*7{Ou zOqsI`@%4`k{-H3^4<`lx4VNwx*=Ij80zDU$WtGPX!wuzCx~U7t-&(FR{)BcK`cZRw z0sTs330kWp^EITz!^b%c{0#+Pl9e69v&1!mCpVcLIO29>XP414UQWxb=0PVbKLZ75 z41Pq2{2LS*T91!|3N}0%yl?OPz1MF_o%kES!i_Tkal(sMTjZX$x*>!muaq{7uPY<^ zG=IDce0PdXSi>)bEdX=L4#b>l`nC#c96}Ihta-->)fdNaG?@Zjvupu>t-_S-Wl< z>>dKk2lNeetR2xaO*+9>00U+(h6jTI%}Fe&$22cr-jnVW&?p(H(VcZ@{0*!&{h5YG zV~Br`3hC}(@qF>D=wd|7__7sX#x94mU^R}qB-;6T{`sfv6ZmVD?&(Rty6kt^b0(Y2!(t~5HHuHEZMl(q$*cBzrZFcHFy2hN8-HV1O+W3LD4UQa<)|g%kK{vL<%2Q@ zQ$a&f0}an=Sj)20zOShJ%{%;__CQ7JlAk}FN+_c(W~q9>{8t!*XW)gAaGl~QpA?7o zgH>qngoG|Dk_xv*!&o#|=FnIcP#|-nXZ$rAOYn=JWyp2@C~@t;zm)~Yv6l|S;J+Ad4(NiynREUhjZJ`K7W>}u0zGy9 zPkQ>l5^9Iz|U3+OnUiPOiCQQeep4k4`1fE<2)Y&gBkpgt& zRLA~Q;m5?Iq1hZQuT1(saMLYz2JAP4K)R3U**yqN!j1E%C_*M;*6{yps5MG+` zxk8=n*B`#Usq?LSA4EkG2t^@mmSjnuFy{4SHi#tiX8U23y_+@RRM5RaX(*x$C^Ys= z%p4#2JfNo_sFDuwohNCfwY~6-Ait>HL+^JuSeJGbEEJbbO`{MSGSw{&zJE|-UO~TB zPjJO{7Vm;GMLxe^MGo;yVUFXuS;akrA_w>lSrxjI!me*w8F|>YcdTDWiDTbGf)*Fb zv}z=5+{we~^Plg4b~gI~fpa)qNj}X0Vfz6MT6btP^-}~C><#i{d0>#{!EwSj@5h{+ zVy$3YBk2;|BF4;B>3f-+PE*g*g_VcIE*n?XWGYWfS4?|-Qi0W<4nyRGy;`*8xI`ym zr@hKH;DR>uEyJGskaT;7)OKtp_!PTm5LZ)&psCrp!__GZ)SiSFTt2I7WI`pNZ+!6E(`#~@+1nQ%&`>R!Y%gR6 zp#e+N@I6AY5Xm!2%PUQjQv`m&jw))vgFeyXD`VI$s<1G;+wK&^^tWA@c>aD$Ux^bk z(UB_ZI-P78{Rk~-;LZ$JOEv}9#`Vxy*uEmscshe;vsM-{ZZSQ zOd;NL3U?*8V>~z(mP)lh?rE&)40MpHwru-6A+_NZiuAYy#YFXs6IgNYs>B{aJM^Pa zd^ccshXvJce>gz3gYK1}+u4IMVeK|hOw#55Q_tND62{@!d$*v-X`r@O3}HS6)9N-lBh=HO1?+11wIj9SpWMhgwl82G+>o4 zqb@Pw5&jI+_-XnneCmJ+%xJvm7haK~N3pkf)8~30x z?RIw&?Y3H*)_o3!g(9x!_;!!l&DO8$OIOLG`z1w4p`jJp={^bj;~iQYx=kK&iM6NT zP;LI3d_DHXPrq^c{dYUjWOq)q4R90c-4K1a3x&>(QJzbTvF{*md>@pi$5-!nNrvAd z!|c2@tQ(iAM}UIUzTawMjD%yl`jmqoJwa6eHM zZC?!+x&KmEQUs#}ZC`zIw2+3L`QEmG3!eCMLMe6?fTMB@Qk44MZR2gxc07*=13DOZ z@M2Erplk3N=STA_Z=z)Y8sMB78_xFaGUEF;s+yX^yTD@^t*Bn!A>!fP-igTf2mOD+ z6L%WDVv9>B5`X^rYM}lHR|Zb@milHa{|`RVOl~XXLKw{!X@l< z?a8L=t{fV|%|5_*m zM@KlpQKJFTCh1bbku}K~-!`Ug^#Besfmm!yiV*ZGGkBzED$>9-*le2DTy5LC|LYrk z+_MqO#nYTDL`g`E0OhFn_=ec(qQc6IfKo*|eh{+xbaRf|$(WvMR!R!_mAVPW*~bHP*jQ%kQ;utw-OQHwK0Mg}^@D;I>jbK04Gyd z&)J;p_Av#qQLlmf*8*E}%h|YCO$>hoDX1s&Xy=Xen6pCMz-Tni5Uzk6Wbb77O`2M4 zKlW;TW?^Y$jN}4hFB#1DiPKsdv+aYoEPyYOdj#rPY_*Xyt&{gJY0PWgPMfk!A*5Gx zwS5H`R?$i=^fuL`!-33O$JM~5rc*qO&jru}ysuY|-8-9`At`0U6s9!Cbi$-qoO0$y z)qznz_ZdG@K~n)sXMw0@2HX+?Dx(lp_+bMJVwZsw@8!LM^`3g*s!yX&QZ0#f1U&Ks z7~p=EPW9iTy}BJb@A&4Z`n0jr=4LZJ5-!8Ks^)nn$B_2dM@igRM2gKg&bi zOt*eM6!ySq?15vEG<#M79cbOb1l#{+(~%*#+f0=LLJBOfZ?_M2nv0oC?B;Q=-vsk; zUKHJ$sT11`ihJa-ARK1z9@Z$)1{EGB0eF;t<^IU;$xj$DxADP}4OTJZEu!NoKb_&u z(9KEh_aaU$M|f;xl&Kd}4Yp)NM3w>9cr^`mh;Weiy<-ie(f=#IYK;psU+C~om^r>n zerYV~?z-sSZ;xpdM)cO{8Jknx*NapUKA4yoauqI72_lYPQ)?WNmxZ6<^HOB(J$yA* z7OUKUZrg%r9f%aRr0UWewZzra9$uu%HubyU?QU1Y)XSq72j5_5AFJHochrS} z2ToE2*235I{uJ9h_Op#Lr`UkmhH}67{x9hrbXKxME=T}?DT4pG^v-|kNf`fof^1sT z)+tK@>Bsv6wOcMl-O-_yl)J&HRtGmRUR2Z$)V;fcHVvwOEE5(875K%2zGK&S8(5-C z0y;+ zqoCoy-8_) zQL4%@(a3ac)Q`Z`)v=ZFiTPC?@F$gAZF~!q zq$W6>eh)>x*}|}F*Il~?<(^|=PdG6N6w$;Q)zO?LLZCsexDW?26T)O*Mq-S!Ek%za z7GuS?2WoW`odcyIW*8rp8PW+DhG503{E3JN;SkeZ*ItIVGtlnwQRbU?rbH#67a|Yi zxn`mpfB4+R5Q@}tELF9Zi3nP_72PerJG-BV_L-a-R&u>(`8e z3^EzmxzVPC+Go@`^6q(E{k$z9^nxTxw9Z)4ILDfbr3|S>)*)Dl2@PgX;o@>#pJMGi z6pXW#;2}7LS}5k_`lp?3304DF^QqF(P_ZXSjtse{@je0F4UH^~vT|(8{O?eD1GwdR z2`ZJ_Iapz>^{g2_%#Z82z)2)yLasIJiVux|9xgRIR>E1&R)}Yrs6@IZ8H2qyv4)>WgsnuYQC~m)id5et1L7OHN&! z^J1ZCxKe_M9x50#4viu)Jm%jX_Z73e=?}J^N3@=u9FK=U8CZT3FidCNJ-NSO+kD>% zy78%C(c>9d@H*Vbw+18$CY=K##nK&M!(*kjeJ50n<(&tr=IRdBLnB^eyU|pJUT5M4>e;>$RhG7lm0va9 z0@oGQom8~hD;VIVhi8tsEC0*|aovMN_v3^WHE~pgpv5(YOXU7FX1DN*n$Z&-JkA~g z^V)7aRo|qL5Uh(1J2fuI!5qMN=?UBM5d;1K1lz4OGO~CDn)kcX$JeLDXTutQOXl~Z zZpkB_eRE(}C4rqaQB=%6oc6>qp-IQtu6n+mwGg)#*Wjk-rFsrl{Vsa8C_U zoi*ERVF$3&R+V<(@X*t8&}0eL_UrKD=2MA%0N4X+QGj~Im zpNv9v zlcuQ%ps7>C&LpWh5=>y>TjYUOnVE*HPJDiE1hcN)^Wuwrf?&#?-q~){QT(hS!KfbL zs3omR#>WIjnH#&m>)2aZXDVPHiSIp+6OqFFyzZy4P84XIoFlSgKZ#ft@gwI)rPT>f zifiFtU4>BrC-l<;uZP(HMZXox8y{`V)<`^d)}H1Ia_kF!GVD+s#a?|5)9&<8?ld2& z{_ZD;+uA&a=f&vW9#!QwvHX30B|0##TV1{DKI1fUeDN!h^OBL_od)hrLyp<#CarsE zfhI{Jr#bIhH@xp6c%*HP4h}CQc{{Uoh)%DxC=ntDmM)Cs>HyPQuz+q& z$7&qUv!^@~s~eJ@4h-?B7)pj~^+QW3)I>6}Hg(BPVwtUuZ=qntehO?0v(P=X2 z>#Ym9L<3PR+Fnd{;?<4cY4UvKGmk~(D901U)O_t?k@wt+*BENBICmVrHNeLEk?VEc z(gY-}j<0^k*NIKvpM0WDz4asQq#;LIQ>yQW<~GiK^*{qr^Cdy&l+uI}^D4rfK{OYJ z2_`&}i^7tm(m<6bg!t~fpvh77VU2!v9=y828w{tu6EGwI>%@eZx{$)1bH_jp=ond7 zW(h5hwN&WhpNur%Uet4(-YH6E&!sxu-OieHj4=P+vv*X!6qngZS?cmGNvjU6wm1Fc zk;`Dc*EHio$umP+UxLldFw`^P{g9@R|Mo`tWG_}VFfpo`a@CM(%IEcvw3EFAJKq*U`MBi5zdZJ^~*`{>8khnl@CC74Yu zUVCt_!`vr1#&gmh(Z0g;w&)w*s;qH?uis7;Qoj9EGJfj?;O@3vt(U6sSfPM-ZOus> znjlr#rsGF4n_^w5n@d)gU6Fk7|F4nuKNQ@t9I?^CKMF1%^nY%f_%Dq8-(TixRQesW z7!bNosa?0E6AceYx}Q~s!!?v)@Cezb5rY^m42}c~F<&n`sU^59>-I~RdtP6zYc=%z z&fEZ3^R-~H3kXLOheNv`rja@9B^8 z8GAz)IJGm7C<|Jb-Iu!QyE8Db7A?Wk@MviwF`L_=lv?Px8F=TmFHyTNb~omco#$rY zONmM$9xMM;S0r)*b2+gj$r(V@*bi}YH480^4LLTqSk55gxYWC2z2-RBg0v96e4jC% zQDAstClr+6_MO)fBNgddh&h1kOa&F=QoO#T!OfI*ysj88D^s#0FYX%7s@KxakL0SE-4I+D zPfoHs3FwV>Kei)*ojNoM&wa1nUkX*Qh7rjxAt&L80BUFWp)y-CjjBBq`s)O)*(moPLWs0VxiyU8?E@BQ#!k}NA1A0E3p$x0 z<2XPz*tF}^Fb?2}P%SxuL?~d+lZ{OpOcoG$1 zZD0WZ;KD0ZYi5E8whCi2sdP-V%_{NKqEs?d-Ko#(zv8%M-f)`^) zu*0A$F4$)7EnDT;yJX|NrU^*98)soPL$i8(=j+HLTBI8UI#2w}vO+BUJD7Lqx9VoM z`c|45^1>D-W8w5wEg0fY|&^<)! zugyU{;oq_%i+3BQY(yh~&8 z){rWT18!@1Qbo{N5=C$tjJ~7irNtaJKSA_gxyWR|L`J@k!vXyh zSx1fm8Ymu&bjOAYc$fzVzY^DQI|ZYY&f4E_wv8TkmpK+!N^+#_zRWlHWNot2ok!t0 zt@6O6Mk#V_wuTT;GnqMSk{|{?g+HVth|R2-^$0ox0q+{`fcR||4p#~%IbxyT+K)v> z79#kG0rS84Z7pmbB{2K%syW_E)15zKBy)obo+soBy`)mN$R2gC8{T5g_~4;zIEg)i zPdE8R*4JF~URLHyD_*x_u;DKsd$(NfynC5Ge5E3btnr`lPVho zR}uS; z{w>Q7RH%w)cwu?z&Ml#+Rj)bLod$RmEOWw7IeZJ3B8*S?(H52u#{av@w~$8`knr`5 z%}3{p3)QMr)K=yKU>D)t12r1@cF65Lxt-qG!A2bO?NbndfW*~^6le1@6|GMNUTEn% zAB(x=f>#sh(U%+2=Wj*JR`3ihj#^ za(R$~X>||LiuV(P864p~&b9pn6iG*|Wzlf3#dXi%Ak?=%Dm&C4W5ui~MOYdGLQ9tp zqTaDrvRle}Mq}Gtp^66j087^1=Sq`x@Pil%hritP$iGQK;1?Ba*+rE%e>1_l9a`k% z+s3$!n+v@ybv|)Veu{2b_+bE(w{z=zl(=^b2!#~AG{w?Qxb=(a`fO7NA=>eV3q}!h zFMFO4=a3gC=sD#>4Y5l$?6@1>!5bv7jf%jMKM#7l1hM%xhVR4yb)G@`N1w)4p93Qm z4Px;NddKjrit2B6<8v<-*A-M6&&#%k$x~PRiIn%mWv4(V*@hu zW)?WNuID)gD1Bl_eCHFw(!AQEf>P(r$FQ&;}K! zL@|*BV8y@UNMGBR%*FGrho|DSK3HH>X~-4d{+(B?8b9v%(7w&3ekO@CJE{Fidg9 zYAIm=4DB~v&>8}%p;blPV-3byLpl?hjakl~0}_fn@r)>CAT5}e`P9?bI(nuebnj!q z=}nytgA&bcFRIWy_miy#WQ4wp_K23{kX+$BT>CR0z?2g51NCx&m|V8gHAB7Xst!o( z7exVVJ^vC+K4OYsDrDT74&}>3(ILDwc#u6+aTc*XWHVA^cOV6Xi<*&mD?NsEa_CuO z=+5O`_29FAzkH&m=T9s>ockgk!lM!Qk@V(K;?qsT9YM&hQDF93!=O;W~n_mFrqq9Y)LjnH2 zJPT30j|XU~Hr)?tRR$*#{Vkc{j95O|h@LbK8k}qda8$bn$Paa|13g0!F)RK3Nc?F2 zVM6!90Z`k2&4v&-sIPMTDOMZyLJ1<*@QY|M1X_rc2K6wmTw;Uyw5FX(A5PU}J*#M+ zzu}N_u)r++P}_8g@zwZxM`+FOn@jQK(|Tb*fi!3Ss_oOD^;+hA9W_20=a@|NZ#jT` zcg`1WT7;>ygINZsVC|zWk~$261a@{9-On+NYjWqTnFQxuPHqtxA7@@JgH3QZQH8D2-s zXF%8n1(cr>G{rPjji{Kt@Ky7y{x$wom)3;~c#Auc*-j5dTFJw`Q_vpiC*{IXouM&tz08a)J>JAl`@i0fn0- zuVHax7kRM8=WvD=&^{eJF@hg9{RsGEj0KyNtw&js2oip9vTf zH%AXf6E@pbOO1~YzsPSK9NY1pAK>i=5*&p(+tBZePzTV9X-bdvYG;m&;2kOhRo_IHDD7L61@2!na z=_7OOkUGoH!qBrqs@@DE&i?pn04WW_hgf)C4NTTe4!AheWZ(=4fOV90(Il=8F+

    &5-7F@Kq!LhBMl@;CjffNO5SHrl zPrCCGyHHlkdnBNcAxQGN1`IUK3`dD*f5(g?2Ejk=hig?%V5QaQEz^jW5buz13RN^B zrJs~BS(%v^@9f<1jHK);Sr=2_$>0?>(jV<;R6lPTW$H1^l=W8hSoERv%%Al8mclK- zI(ba zz)iZOHQl^Zc*f663$jHec+yjcqEd>l`rI5Gc`^<-%lf{XBNtkLMD7>mjbbdH8M{%1 zT(JCX^Z{$D?h$6%S-UwP?C*L&vipL`9(=CW9;?xD2;j+T)@WT@mEW6uK7MiRy!rU~ z>DwlgUvrG=PnTX5m9$Mw#0>Al4&H##-TP;UvtYIAZQe)1yW#f|g@%}Y%m z)=uv_H1}|+AlsnqL(#PJlyLJFbAzW7)K4fl&d57hfwCTPImo)`gvGp3>5WPpK{9E8 ziKSc?u9i$da?{7Ma2cpNumnFbXalna)#_iBdnb*++kVn8A0YVDcJT_!9dff{;2cojG)#3^W{X0B2~5lQK>FJE21a?w5on- zW9#Ym%6<81K_d|#Hp1IS_BKQofP!2MMGqt`!`$a z*}+Gb5YH&7EOYEr{;F8@LgY@684fJOH*u_}PoQe6O2(#EZF6@-aFRH+ht>fdT3r=4 zp!OL3TUiX1N`XFKw0TR8Quxi4di~}~wGd_WE(E0_e{-eqLT)0}`&lX7D!pNYIDkT9 zm^Ml4Qnk3nm0wFBB|XiO%9(vrrOZ{czNu1>-&Cor{JjvG z&hYFXK#YCe*1O_bXU(@zCIJCLG*EqK*8PbfcovP(Dc@8nEsI>)41=7MO~)A;=kkei zu{$%zD)fk+j1YCIWG0$gmax9}-DmafU5r1z z5>R;9gN!=C?NP{(B2Z;gyg4$%MrsD6JmR4VcIu~ToL*B3k)9f4@z(;X3MnSHW;Z+N zW~&jl2@urm5GDp@pwSG0xkup0hV-TP^>EW*$}aLs1+MBEl}hunU{I)TpX}Agq|D}e zb%f;Yl5uU2!r*xcnt!3v9f%+`X4GV=s z=KT1o<|@M!#YD+V2a7&bM=8Oei!B~gT^PP-xuov7oO$6}(aj=WNN&tsw3}Puns)|p zI_m9${;V@PfncCNTQRMObaFUWn3nI_m#2?oz@XV=f7aEXvv1TwqzZRmUKyiM3lR+z zCAfwRvm_jYX8hKri33k5dTwkFrx%*P$YWJ=67c zo8GoJUQAt`VwV{jw>ePqh5}w#;`aJ5IjJg_(c3x$? zKU;SjfV|Po*k+2!S6GBCkFPR`SZ?^^&1d^$c;`3S>weVpU(v8oFrRUFCJl{ z)#E0+?6p?%($p2c-&b_UiH9us8S6*t`|VXjjw4njj^j78g1xvz zqAKAYQ*W)qYUdm93~Ry)urTcw^#ZyJ)|KVa+Ri4~C{e4CHfBZQeDRrxPR~A9xy0i{ z(WzY5@p7*Cdu7EJ_TwWXw*nM@Le{oxwoH|Smt)=+o;V}<6q&2%Kbb20!rJDp`mU(N zLH^&Cq`y)5|0YQ*Yum0$B6wH&4iv{#A|>(*7L+RFl@99YY5Epe3iT%#pZ_U0uv*d) z+tGRGa&>{FET~sft-wdfTH!D~96xVfI>7+Qb(rWXL-f6A(t1^rbE!W&|o(tIwT?j#^AF%&^6;~EFlv1Gt&7lGQS zQ>+3Ypyq^q`-Kn&A~MV{P-wzmh^6pkf+bNJQ#6BE{|(-pQJ$V4n@o+H6}MU%oeQy^ zm0%;2GkApnNKHnQBOeeg7cgYpwZSJ8iR$B>5Cj?JQeAAW&eK|%0TQCQP+E`StuiH? zzetoTC$*QgM9iu@3=t*VB0a>MvPs5KcjD4f*EadXwF#0fUG?fyBHY0{FxQn?RBR7n zUXBV^L;;n1FRVOVi{!!D7TIpC@3@O8fQKOx?=gU0cv1jOPURg@B6n9Ju<0Z&a5$lS z=IM0THA`lSL8hNb_QpYEh6H0d?&rFhRYn2rNETvCNw2K?hv)TBv#c;Qc+~@(z~tp^ zLvFaz60NlHO$$|;LW%c=YO1ggd$<+TAG9zWPCYWqp}P-X4g7a=L&TD(b(5|(kwz}z zs)z}q5@Y#+Y>t9FAGb|HO*ICe0Iay8+F}yf{6_KzpLrEwZ*GW-P>*b~#0jDhw|u+z z(}f3Y&~-5H4F%i-s3p=W)?B$YvzU1X5)WlAOLf+;ATy!Lr-EF#Fs;rgl8jOlD0i@; ziNSc*mz9Z4f5c=Jt--L^vk%9k9Gz-%B+k2XalE{C^$)Z1fv$H@k_ybxu1`|hiYscu z7j0$nb{+1I1AS0eik2qMD3h9m1#Zt!yVBA{rw0?m(dVC1(!P(TjPgH!_&6|p%?$|_ zv~9{r+|frBFOHgcZCt1&jyreNZ2Sl@IXJFvW~?lE9WwX%Zscf!rAm}#N>BdoO8}eB zJ!4q5s#$El5wb7aEbRCk1~I+jNE2SmTQCMWrC0-?rPc;5wGk5tiC=x}`mo4V9l0~l z$@M8>)&|BIr!s0ZVp=?A4%E1^G^6TE#PmZ`u)@9@c)2MuPpu7?y%!c z6$VL9zb)!_GrxbHKy|&ark1#Yq{4^^eE{*d#8`D!(jhkI*!L<{Dw7j#8V?K4D2(}T z)9ZR>(~TPd<7?)-j(ertGUI2twt=>iOgDAgx{%PoOxN_$Y6ED%2QbT$&ZPTjtnEKL zMnAbH)0DZ=!kL~SBeS7Xb56VOeJbOCH%#j7iE4IZz-@j;Ycgq%M|d|{07=AuXbU1voZ)750hke?%bzU~2p2Lpy1J9GyXHLN$R zblFubibkfb{C6F9lxoYWqEyDmG^(S=zNHjONhN7i9qlLIT}zI73T!m=kfUBVLZ3p8 zTuk}9Wa8#m!b9B1#L)tEjG?NO?3@(WkzV{s^ImGSDfM2ooP*(^NP9v@F!MH zNX+UF%|oDS0g6wFPiA(P6H+@V!u%)cjmOquE%>%0eLf4ePUzCwl=pNIb0E*Ndmou6 z?g`kO?cm_7yUZg+>;w)?BftUIkx$30t3uiR!7!cLelOuR>DzqK#jb zO(B2KwP&^Oi=1GGReG+?w`(!<$d^|*XQdR3lXq}a z_x^QUIpEO0K984N{pWb4fgHsq)P*OCemukd_5c5`L8!kKJ2Nvk`hQWu^jFybGwe)0 zqw+TLJL5Kg@AUrGjQek){{uVwKKMUTFnw?J*4Vx+9jcnm{Bl{5#$3W}L;~|_g*9U_D;e8H#%5da!b3b|XfaAaN)z(1Z-AJ+o zZFZTEj{CM2nE26fT2;=t)=(x5i|_{Mwsz4vUe~y;M4QyA?>mjZ+(Bd+ zwQuHh^Je4i%ZLRNvgn|ge2PX({TsCuZ0`*Xx1QP=iQgvjBRkP)v9WYE^|;IA=PwYG z42XE~6gfOy&x~$o@ehPzKgd0X%(?ELUO+TqN!v4Oe&lg|Xe>D+DDN$?G-O&B9hOu= z*QqtrATKrKlt29vN`@xrJPNe#0$b=o1N?6M?Dn9o8O6bRH4(7!q9pLSox-3D@J1XF zmvOO5Iy8UAQKqK5aKEPLOu3EF{J6$u}b_Lj56|t-k>)Oa>59*k5afF zh#=aR(~GM4qi*d~ zQad^lAYqP$0Qxk6CC~8EeoZ6$ldWYZX%W z>L_Gat@$dnXy2x-L{quIU!swtkSA%o1YjiSlqDz|>J@z1`Q;Jw8sw&W^U59znc3<* zF#&VWL6!jP=}hwoq9iI~l4P$$YjW6sciV=AI{JBg01L6})?wa+G-o)Za$4yp(#Ccz>lmFPq z{a={J4UPVv4pUY z(tHWKUya6V%GrQEB>~Xcq>ZBeXgWUEl61%3OGtl2q}^M$+rZ|JS!wK!>BCB-vO?grQ)B-*`rgqnNrT7{iMc z&=&lr`(0Z>$DU^mxLqKmrH`dj=CE z@ZJ$+aFSIVh@EV~mCJ{!zUm6(aUfN8n_mRR z89>fw(Ne+QWl=sL%u@f@KDZ=je^LTzzDpSW#L5Lv0o)?~agR29HWi}+MqD^)$V+#G zwRB`_d-P1>;AJp}a37&XOB_a)=~nDiyiyEJQFow)p++)KHVQKzQZ&9U6D=!2-dt3N z2;+Wx9-FafG1Xh zE+A%5vA0r?Z+GIS(S>4GxuatMli^>Y&Lu9Aky0nBxR@ay9J~@0j8?8_YQtDsW4l(? zy*}i%?yAF0TC^^8;?)kpO=6A@gCqhXs-@2-6G|fQ#LjRdJAw$0Vf z5k}$Yy^m>!`=yks1Tv2yvW>rvF%lyr_uGY`kariPa+8t-Qwbc*j7$a%>#Y;R#TPTT zSZ4Z)oBI`A^v3B;z2K%a&-Kv^i`uIp zW@$$t|DRIn&ZO>pWRzbHdLcaXgRu$*=vqd1Na z@mi)ZFo0(FngsE44IF#KZ;SXnKhe9daK*Xx9wtY>C$XP?AYURzh{AC{0#NuP&iFUK zy9qIY(Dz1CK$$4Tl6oU{M=63(iyYdH<2TdclG1Fu6?*;B*IpR9d1NR@Ah1iy2j#Bmyx^JbcF8=q}k{t8=THGBRz@=&qB!0DXe#8uJMU%kr42sT~xHfW)iX{pfF z0KU<<(uCQbUC{$u;<|!e2K=!$*nR3EzSYk5dQKT>_E6)y*T`Evv*7dwTQ@Zr;A+iu zjI`!v=x|@&=q?3=fkd#}RMA6N18!Zmd6h<6$9wF`rLsZx7&T)NC*#UrDdk|;h*e;W zsY;vB!@_BcS^R4u1TTbv;0v@5C=Yk-{RAzvDH6>b!+LMEo&%Oa3tkhD4Zwe1Gvl_? z7#I;ouWrkl`4cb^@V07=fGE?m6nub-%`wm-i;lgwx{je;=_cW9&e1-{W?R= z@p~Tt3$KSVDz1)l?o&3Cc1e6k$0?xES!GwhMBfa#FI=hTmOBp4i%K@Ibk{^@ub$>L z#yS_T$o#bU;2wK3bl?Gy`~AKXgkp@os~wM3ifwr-hn2djcmCAx(~ze~sugD`^7ee; zpyD|)uVG-U=Dt6&$`A!Gz183{NQZ`fJ$(V9lCvdGm7^!y;E*=R++g88Oeu}PlJ_HW zM!d6q89ziNogY7;i_GMR5v0FuJ;jw2&dc`BY(HB$#5l1 zyWzVT^1A|3?(5GkX0E&MDIetFhz1tQ@uK~bHq^63gi+F2!&!g)<$Xu)08rWq7rjyj z`&P#5JP4135Lk!iI}A|K!s!C$-Rj5Ui5zsv^a%pN=BA(xhjbC6lu2?XH~UZ!e^c|? zhtTFvGFx=46nU(FDdXES@&TrU&wmC+e4jS>FoHW7MW~5h1*pn-IL_$~=8OOA36?U%j3+yzuTDaEGOyK^~HFB|f zhV7RLIC2QsHV~}7!!KS3smBpJvxPI!E*_kCs1iJ{yKps8{G(;)DexEnNco3O&7jGR zas9c$+&xcMN2QE0<}5!*(HnYzT1dzsP8=-SvsUJIrYgeMpAN`6l8p8aai*~ZEESfb zbn#!C&ZMDtRc&n`rX zPJjfqz|{z^DU<$?^r6|a-xEmaC&?`m_~8VxijPaS@7KuOZ~p8hLt<8gy}(%d`OHOH z%LJeo=f}~h#hQ*TQl;rc_X_06@Gy)rH(QTN!>84%rXj#q6FXGeD&(5@OZ*cfWj`9= z98Xl4R+DFa>`&GzagxMt!lZSXb4r;aKy(T*oC=%xODwg3{9`eEA5;H2vG~hMcQp zGff_WHooj`Ys~P-!MJ|_rlo4P746&u9KZm!H(>*oZ$L}$0L}^tF{If|g9lSYg=dwy z_P2`SJ0~4XB+jBIM@kINYNx`i$_QTuZ<0CsuWoXgFs_cxqb9>x@#j#9AUA=>I!0GR z)jVT=JN=kSS}mp9i8c|1K@c6okdGplH<+NZs<8ZS!CXjq2-7NxYM$_CEcSQPK63Di+QKlTWg-jc0>;dB#q zb1FlwMYMC!F1^3!tqeS&A4vKgar<1*y?p|L*9Om<#wi(~;Fyq68H_5~M zqdYu$R!p;hpU<%x9ij3X_o)5(tdI2wE?)1w$flhzwH)3Z))SB_B8t;r3*%=A_d0!X zZg8HNdd&1pbE?X`b2hm&V~UQmC$CwW1M1|SI;znS-kLpSWarnII|Hf;uZ<#_BtyUi z;c#d49Kaw1S?R-w5h`t7AWsjS-eumCZ`KO+*W4&;0(Ru%b1%gqGlvzmPBEEY1`7`c z?x>M`Lp9wBKhg-H7J|P`cFeMWLo~)spTOlxDme9Z80~RlEbHByFuyQ)SY>^pfdB6I z%9~48C&|m`hMstUENadR=oo(+Nil&nx>j(~(-$_8~YH))@f|y#Xz@i}6jU%`^?RgVRCWNWHvz zyvDJEXfz}%FF=HCXA+Hk5gk+V42qmpUR_Vvn-W}7fx#%ia*c?=Tp}RwXCUZOv(UVzmx!xX)RN2~MjLJ*6X+zx&s zUccSku(1=_!6%nH=3sNH^@mzZ>|%;u0G^|zQjidJAE>S`H`C~dakr&qhA^AbE!o76 zMLl2{VWPlZqU4j!gFs0W-|Jwr`?D3>X_<3`%BJsZdn$hWSaQ4A*)fYXOxelqGP%G9 zyBBdH1fovI7lApx;;%Lc+Yce#N3K`UTk$fa32ndep$xvj2 zQWo{b0vr3-6Q5|wGM=b(*>i4$aCZD0?(MamzYQuCYCYeOJrl00JgJY8shBhs`#?fJ zxeLxWs0~f3GvYU(hTd^!;41l;yEJn)Bb6ac9`mAOaYwGhX@mV3-vpyV~ zp}l2-c4(k3894q<#(^$Ov`^{mOTH=0(-lP??w*Nf%Gyo1FtY=m<_NWUb6!i7)g_zK z1jgk0A!cvqge(jt2US0>UleN zG#ZM@Q#F)J&wv1dGdeLDB24@&2$-91q-bv&)E}lj7@wxp7LybVTZzq38WAKC~JjE>~hA&;7G z#KtOW3*7^{lTh=! z-j~UF;pXQfti4q;4fE2w6vb|pQn;0RmXveqDXOp@38+Vs0}l!Xo$z6D@63I^t{5>j zY`%b0@CBA~G~Y^i@{bzW9kcVGJz3|W$L?d6NS{FB5^!+9v^QQlc-ZcSlF9ig((p~A z?Ba6bD%}KhR0sDFM-gv}Y|hJyWSO4xK{1&yJp zQv`EwYM_lkd@eW_0abHdNe~7W{u)H2f;~>*elF-Cn$2@Ne4xFydG@+ z5z5DQW{12L{af+gCus#sS%#~5!I@DqIsE0%$9>W2RSvJB+4A4J=05TfgFJpI{0eka3>;R;aQ>G_b5=C5}t(Pi{P zLUB?0W+lNtzuJ{-+sR5>@6CL&n%+LBhq5Cyh4w`R40VbZ25mpgIVNv&A&u-=ejMYr zSA|82rI~%+YgP8tcu$X*A|#@Vxs(baKLq zeVfSn*Tc{p9rK2Z!bVk4P@lvh)}a{Eos5#KO?K?PjN7DYB9t^TVfSTHj?$Wh@u4|K z3Aj^fX;hM08IIR^6G<+YFyz z+*x3WMxSwS;PhmV-Ziu{Ul?%M_q18Sn^vT%tnGybSx9XwZ{!xoDziZtbYjh@_$ANn z>7Zf#D&uu79I?RnCV=n**jK7=%r`@Zo#YvC�$I5dh+gDfT)O5K7iB(Kln!FZr52 zd$%X%#K8w#m%qo*Z*-^>zI>3BE+K2t!mVxlZguR4{&Y$Qi=5n)+*DSFZK6n4H%--4 zR+lY{&s)B1L1%GlJfSYRVeU1-qmSFugxhzsoHadawXUeabfQQ#W+3r;Gyf`Y>`1l? z)CkJ!eh@j$4EY_Y1HEkj%0f(TvA(k|R8et1N@U$ab8gZ>eW zc&MJ!Vlm-l>@m$eyzz>4sptuOW*F6Bb80G8v8rtegI zW-%SnkZUwAlgKMe#1IMwoaeOMEC%faF_p^=w#+JOMiFm4FiY+E{Ofn&Pt}l-E!eTh z=GS0)%tMe?>9hO428xF0qqDCc+KmcFl20Kj7xWh}T+g=y+-G%L!c@9=9dVj}N6hK zshvY$-BC_%|6GrB-6K`9%m*YVJ$v_Wd2r9DEE$HX(OE)v5KC^*s-|vy;Wi3eD0dPA z0srN=6m^O3#CrCH*^GjGudE?IlRk009N6;_QZG(*sbSoiTE%3*XXlHoMT{x$)TE`% zIT*t)b3WqEI8D@^=g>g*Lb}3|S9J_P^zpm1*R6QEyj=1FHc8Mmi(qx5(1ZcuTf^r> zUVyo)je4IYCVauUN1Ig6o9w-fYI#a)9L{KD%c>8tB#-Hk6qMdpzBE-@WMFhz+_#d5jisUJa5O=a#i-*53vX8VQNKRQvCR8TBNLUl1Np zcVh}vP@2j6c{oFn@)_GAde2^p3hG%3K1zb>u`;*uV*YD1&ASp^KJ8Q5RhkY9U56qo z&cFA$)$!0UNj%G0QO>!@X*hSCPmYsc6enIrpUP!2&P@&^wC#`In>D#on|Q?wMwdu$ zEPT8A!{kA4}{1 z+lC|!s%zh__Xyvv_b^y``ku&KE^Fs#km0l6YN4`-}(^qzm`(1A?`rsv@i+!E>T49Ccpcm)bt#{o7T`(8?0pU1-`Mj2 z;zS8kZ0$cGzErqMW^da-8DTG+L8N~JYd#~tROB1O;3jHS9V+xXPjA5An!6gjnFGpj zLF6#$1tW-kZa+2inv0ryf9J6sBi9@i-QS=gqQr1Z$=;tg-LXMch|pYIaWNycLOT8j zZSXG#i~EcSn-b#-6ZMJ1L#-;Z%otTdJeLgbciM~ze0oIA_JeXhgdDoUSw_e@b?&G> z?({zr&CM1S0IIaYU-8t-Kz(Mcet&kHFbAO7-%e)CFb5@=WQe60D8+nK(~>BqV-z`J z2O(w1&D%{u1%ipLxoDzQcwYWDue3DQ9_9uQOYrUS>Ob7>1oY|ywHs8iED5! zi(ob;=~4Tw8B)P)CGx(3Q{}tdhW^&g4R>Z&_qRuGGkoO(#>PE7X z_Of+5s-F>GXDB$r)%mwCpKeund@!pVC;(@YaK~^&$I@eJE^SAWY-#)Z@pN1j(li5K(ck*a^E^EGk~+t)<+z8VoXj)Aix?DqvMMC8&|s zGcgo#OSeBK{`w<1uo2RBHSrp~TN1Kry{?8Ywrq2UL9vLYA6h_}Q0u(u94Jy*=-eJr zAoG^PnS(SNKE7N)lTb@GP3D2*DZqor+c0A2^3DH;Lf0S8xgRkFZW%++mg%m4(7A_1 z79?nHtuPOB@c9-KmUUra8;lhtEuuKEfBs@SUCmzopb0xoeztZ^My-0nT{AvhaWei{ z@!eS>@P(Cg;q5cg9k_MO{^n=ZioHhHx)9pFzguzD#5+c87r^s|T15QBp@uZdox_$q zw=bHEAFkOSUCOlL@Cs8}ZE$s@b?LH+7(_ljq4Y|GIlY?LosCsFh za_8rLyIgZh&RR{P%I-j(_SPLQGr98b?f|=Aitu0|w(8pD{7jp?#q&v|^SC248cHIX zl?Pj6!dx#}EdaR3z!a85vihxceiJCSpAh3I*DWNig)y=XcF>A|L|LUJ^SKPn{o%-x z@|Y4zD1+gN4p&^@|Fvx17{O+*Pm%+PsY}9Uqp56h`r5=S5z-s4DBun0IM~6}OS#T5 z?%)TR0*-@5SQln158>qs8srWX+MltVv@)*ihYE%1mKXtd6)gc?o^!{5f5$_lz71Ri z-OEL-@@*ElmP-l>CeUp?+NN=Q#}7s@OnY&{7=y)MO+pkp{TrR2V2B1!E?FZUoVN}H zBBYt_**^#qG^CZSIdWWURUgTBL15+EUI-NJysMf9=>hZuGtW&_t2#^!P3a!1dR;+` z5L*~v?Bd%%Oimb_{m6gm0bah~QkMZ7(O@syo1~NHR9S$6!mYoML6gT-$~31==`F%GmR+kI@#!D(PmHo@ zlBiVX>80Zd7fw#%DbWmXKP$J*7%+Ayl#-I6R-sNsc?_h@lxq86J(OaTC2G!GPHuU? z5kuTn3Y%r+QNmMk)f-W3+(}BBoWcs?m@x{yJAMGOkQbg6TD*1EUTqgp>c>=#x48TA z`RQ+>`z2VnwJyh4BbDF~{e_+!9OjeB?A`;@wZABqKZ__E}mvy8dJ= z8!dWj41Qec&AtG8>dDl1f`te1W89Th|B0w(ge#!kK%5@?`m7@}71)wdWcEF}(; zvi=CbGfh!`czpenAsyND#(ZGZ#x!Gl6moD($TM|WvF4^0zXUE*QRho<-&H@~^svWd zO1IFJ-}9f`{UT$)UxB}w3E~ZItS+@SZo_GbNDmJOH+ct;195X-Hr9mx^yT@6)Y012BHF~4soT}bk6W_jS*3mN zk^Gb_@oV!psuR8eUml||@1sXYvMpy{!kjtx-E`mh9kHkVVrobyE{7shUmQ!m%rFsK zG-=4h`M~&D!GW4K2OFMZNP%xH))RkF%SWvNrHBz?)OqOtlF zrA5qy%3uW*UGmta!db1|Y@6?r=hLm=F3-Zj3$?U)8T$mN%SE< zZ<$LOipzHR1)(Fj0g~#-8Rakey74c&&WzF@7qvM$NuVK!9H&JK;_zlYB4vzYCZrHt zgV*}tX7%#J$WBw%(Wf$J3n;Dsq9M?ik^nj3-W%Y~stRr;=bh3eCjq4s3^3e< z^CwFpDT`n2Ql-&kwO0QGr_Vm9x@hf#me+|R{miznqG(*78m;+FMzHb=+ zju(mpThTczPN(4M$Fm$JfdLCEgb#tdC}EDt23`H7wlhrgqao#Wy4VJ4t^a7e5-}rGa{^-6{#7XNEc^dJYdh%WM4b z87Htgj$A=q4}xxJZbe9*9_O&;I{GI?OOF8m#|SbOlAd6UKpdzVksND~dic%MI#EV* z{a4SjRWZeO*S%vrOhUrl%`e(+bHj6yAk(8+hu}&z_C9+Uu>0Bl>>9Bi(ER}rMf?Dk zRF+yTyt=BPu63=hNA&h>EMIE!l53CMy4dw;@ZCbk-d0Ho9fgzNrv8|jjYL{o9*9)R zJ1wNmzV(_)O>GkYW+Mh11a4-GMEokIyQ&h;smxC_QBIsrFX9iUp`P%OfjoMm@Q)q( z+4Lq`ox?G*lY!a{MLhRrN4@^Nc+P?Mg34`uDY5zd8a-lJZg7s5XFM}BgeSZhw_zi7 zS6;Zwl`X;3&PV#tqY5TB`%8ey`n8s;{<4hhynYS;SDP%cHju6_TBD!Sl5B-%RIY$2 zj$DYWI?r^bAFyzIXs3Ysd+2zX5X?wE=(i%q7|RrJgo&ZhHHTKtMF97!UA`DR<(?pb zRTN)Bg7~|4XmfVj7eGQETAq&>V5m|qtRVkp(sS!5OmCqNk;X?9L-OSMnZ%F zt&Df1$J7FC`BY#}{c-j;`^9qw^_+_8C$h@9^he%KVzA5-Ueu)4Mp`EshT2h2;Q9%* zRj8So0Oqi#wI8YXq~R*wSrt`#icpTPv#^eaJ}u^3L*uOmx?g+L`R0P?GApm~lIYo9 zY(a{oOCGkAQZ|UIJ1$%ehN;VZL~MU$AkKRRQE_~|pZ!khJn}|);}2z%1l-8KiJLm3 zIv*T;X!)K3u}4L@G!2@5_ov+Akqh&K_~{@}2&faAKMb-goH~a+qwfHl8+dHa>Z_>QGM-7;}+;SGS(af9YAJXkaXZiRsi-xEI)>5gv_me`T_@g zHn-3QG9?Z+su@$fO?+4;ep0#6>vP$QPd}*Id-nX8*=unn0DL_~n45sV4Cjh&cA*OQChL9?urL5o85Xa+1zG>QRX_ScwJ# z>#tm9Q2J^=xm!4fB3;=SZ`<(^nj>UKo%pc5Lzlc9xHH=DsMqW;!-G;O><#~`G;!zq zb`Q_rr}TN%)(r=w~tP+A!mWrA%Yn-z0o>IJzlDs|+d>rMXkJDdxpQdAC0 z=mI5iF!Ui{_ODT_7~zf_7Hzd9NJ+zTECKV#21Pk6;>&+Oqi+FP(y-Y>z#K-Eomcdm@iYP=^C`rTqf4wGZ=M?l0qt^FxewCpo z7TU3XKiZ-whefm;J#o=HTwu3qLak$9nr`qj$yjFSTvk_EXBK{u&sLc&ul_JMpgISpvk(N;0aQD1lb!o zMS<{5x&e9cL4ZHK9)c;MkN$q)g=|8;o?$5bVRRWD(fv&D$&$aCq2o1recz`Cd{h@E z8BmFfhKa=k{!F_@uO#$DW0aVeomyU&Ok*eHg)AXH=n-P;^XZ&bb6PWbS3mah;5Rh2 zpl85fx)tXo&qKx^x{F#hIo|Ik1DqH{4aIZvrW4NDS=g$*1IIPF2kTf>oE?1@r& zls{lRS^SO`hToC6rZbSGa9z{F0&%SDs3~~tDr51 z_S2^?YiTB>5Xw}6VKmb>E$J&JQ<0zzNB*=d(EY_8k-eHI6biWgJX8$ci6`|MJzMu& ziRk-%Aa~4I4<_EAq7AOYrkXov>ial+-8F&7D)vbuZziyDkq(OVY=k{)-1;m!raqVP zYb693Jtg^Nj6=U`!Od2jq35jDhK5jtVM;CK9>@`02&V;-&$PpESE%v?N$L>jG>p)YoDb!HpdmbBz_GCh1TjT@B;Ye*3T6e zh%)l(y?PuVq^Hu+pYTQ3=dr8@%usyJRGs~L2FHmlchM)+9jg9VgJJ`!k#*`umS7drX6mwYp!erFh9un(Z`)91{P z(duccDd|@c9weU zJEqJ;4u=X_w*p%A@p*9l>=fmkXZ}kXT63Gox!qPclVxcL{1ZB$7LY$cnw6p zV9R@pE=0Sr`OCNk_XRX2_OQyCA7{bz&UB@MUVU|c+A&rN*gPRLFr=qm@RX|`!S#v> zOaznP$;6>KS5IWQ##vpY?)h>)Q*Is+_$z(Hae6TJ+0m5JFqgz57pCb;Y#bw!YpIx= z(KF2b4@hLv%G}&@7|m$trXd)rdrQKng~Qf9-4OI)?J$O7njb9Bbcyd`hF7-LzMBNb zl9X@msUv=pt|!d&nZYcZh&aib0A582_!~(}>a;t^vZ!99p^T!wRNUG`btJyM*?^K3 zul6jiJxQFMmHg}eUis;cpL`iH;q_|_e)Fz=02%cq;^#KLo%3#rD>$m`rrzt-Vx4(U zZS&6fH)-oCLhEW~G-DkD+ichfRax!d+S#)eq_G#^HK2>BB9C5#Xzm2N4e32rWpe1z zgB{79ieHAPE)OAk71*2x7s8ng*SoZ6QP8a8P*fJ42u!%_V|ee{6v)0)T`j6x=JiN@ zJgRP#)h+P(q&%NhHOuR}2K7`LVTDpoI+6O&F4wE*syi)qy&uUuSY^oZ{HB(lPa}UR zkrhzS`7g@?8^}0=ppDGpLKUdwJlKi=^EA#_8nJ}d2Q+$(PtM%ND&&7(*j);?%0p6>p}L=P!glxqo}MAA+vE+peSj{mkTvY{`n*0sRyN7&8w3rc zudN&D23hn(4ThNl4kHVWTJgj#K3O+T>gM_UVxHfun`iZle7>=+9#$>#dc{6IS=nE! z#zJkVGAmS&HIz)&v0$cp_{R3UIjvnEpgTMbTI(duJ~B=I+wvtVtHio}J{eh}YL!TZ z9SV8@$JthX>c^S5^f!>CVz-CnX)~?Z_akx1UO(~uN?NJcNAkRlUNT5l66>_orlL~y z3pQ$r9XwxBfdO2ZOj0p=Py-06N?bjAI&^dE8)oC=Dc?sA{=Y6QEyLE*?69xu&VPj( zXsq*L@AY%EdeQ4@o;___X05Ay^t7)YHmvei)jqmfH%?lXiRv;qz_dB;h@zrBRl)cN za=RHF9&C9cvww{nK0$7$m`+|Dbe+Wkt);3;>|VUu59NuuzA>Ngi=g_oFQ1+ZMyutil?c(G%44A_=Q-H4 z+Yl@IKvnIh#I@X*qtGYH)Frd|s3MFGs@|bYr$Ei+gCu-*=OmFYh zPfdR5TpfOJ1T*kK`!7Wlo)cb}d~_VNZ;%Yx^j;F$U;1hFVhGlgMEyl_W(XjPJS_?9 zCuQ8+79hMtgnrlC4yiawH zd6TqWu{LI&(HU_R=H%|i6nK5(WAgs6*1iLP_*pDV=^~d&r!3nMoYS*U#fBM42a5YNh4|Ld*}j zzU3~hBH@A=LPEeHhNv+35dR6wbZDPTY&r5xTVpL9D-Mhufy(~e+GJQUnU=o{T2Aka zLS%sFinn@X1*CrzkSBKQBxOvbLA$euol=>U`JC&CjSRFqUp#~K0z3r0_)5wCO;`~u z$Ezj#2PjSfPZeDmaUaU8?_@XctAkdR9=WG7q%VKb(PHCwJ+3xCvy!rrKC zz9phhMKrY!sfPtxrP2QS{mrZt`twqGn2PHA$JVdp*T!O%iDtuXFQV-mavY&XW@&!P zpkSqwXDCgI$f$>r4y-dPs*ciULuKL7BrNbB+Kmj7feoe{aap?1CQ$mO^i|GEtA7J z_isw{f&L;C%d7?V=Iw|UiBkv}l;O+}A(q2EY(E}Xmd~i_yMT132M6D>R}}fIe0^wo zA<%NMqo*xw^XA1$VDJ}qzL2t2GC|a=ebFA)F2HU%k{i$8O^rg!@HWuq_uQ(EX>>XL z0tmScc6nL1S-IgQP;qL5jjNyCvfv}NXjcSx49j+1TDB8SII?eC$Otf4yNX>Sn_d*La+avmpzu1V*ZhO1vD-eC@eq#0K8^Uf%Hxe?SxRu>?pow}_q_czsXrI< z%)6j+mQCi)HAD+%U_XV5e9TDVYi4J9)kOpl`2tkth_lwcdQ%61@_^^qY{I! zwCn5N|M#hEkAF=ESNI2K`2TSr+xuU*Hs!AytX}jU2H5siU1(2|vA`09cD^Ws8kCmcHYXxV^ntpB9 zodCiBfi#v}Ztqm+w1P5!W$M2?%E03+U!eNG%kc*jeDb*Rg5Nf2>B-UTzI{1N)oxb( z@wx_n)MEN!N1Vi7_2ta=xm;qe?62IV9Zvl4Fh&f6bhFj~OWd5CZYL)`+#D7-_`nQa z=zLZ)_IV#Rbb(AeZ%^8;hcty8uKJkj&5<|r`o=uKDaIx=!Pe}qJs;|>FQGmC!=RSn9iLl@W!YR^HqN}L43JU?wDp-QdKRW4YuL?)9f5#FUspVz6qljKaRl{BtnTZSZy1(U_bA6Rm=hj80 zFqx0NUd!XoWrq8Fo5H2v#k+&EkE?&tBk%x8nNY-C`e6$q)^T{;miel9?lU>vDj)8x z^4I9Qo~*AbMl$}EIV8ek$^dzw_Uq9?0Pf~!m{Y9@SZ^>nD%wz@k@YE)<`Q0--K~%^ zT#aBh#chbPIhzO*Q6QkhfAc&1V1F2&a2BzO7oWy@zos3*oBV8bNNr?xHK%htGHrZO zJiTxy{7vMQoZKV>-9Va?8{^b7Mzg)C%#&*^2pUqZ<)H4L{lP< zqc^g$hCrrL0;$s9xTGe%@GBLRm7|j17rHXom%mrjz~y=TG(qFrWN%ZQoz1|ejds(y z&W!yO(wsg3?3sMVW?zo_5*~>XDG&k%buy8qWwC9C68CX4g&P_{7EpOjQzJaYpe49I zWg!i4CV&33PMK9+v6M2>ysoPcOTKQQ4u@&Ug#AofZllRQ>Of}Sf6%q ziIESBc2eQ*6KR3>10G_2cV>*F0rvZY0baa88Vu;r$Tf!D$#t;nH3uN#s5^T9R$XXi z3s{Gdt0UA155Rd;g!2bZc?FxdguXDNxG+}F1xBeg!~%-&AY}3QkbCOnhcoqTC2OAS zcGWLus`2s%U`)&<>E~$(*;TjrgdbdIvQ}=dz8d67{|uDinQc# z73TFl^7`-PoZUOI*E1uw1IQ|@sWJw;?G9sdDF=v*kgH90fFY2wJs)>5uNd4tJ~z%1 z5)XZ+N%uhQO<*)tYK-J|8kVtINHA>KykNumkII zqqLw0=^ROQVt0wZ4c#sju14#zMhgPvRl?5sd5wT|xAVHtDhj5Fh>{F)iDGFz#(!5} zxJfCBE>lS++o>4kn(mOB5C@c}3Q@pybeorFB+4%0WcVQIXbc!c^GUMg7_)-=uO|l? zNS%|-t90yeAVjwsYgX0bOKP)gf7(N#B+KCoV7ywHL}x_n_Z>rs6$+TSg*jv$;JN!B z99hRN-Nrisd`j11%gboyOw=U!d zykE~wmNE43Gl;nytl^GC*(I;|?pjCQ4l}=@YWH9s);AW*NbtZ8q1Bt!4seC+fRbUR zxZkqnF&s%4A@=M?ChioR$?PGE%M|pZw>n|h>XHfL{e3C7s0WSKifqxGhracLyr}kg z1>^V);Q|NS>TR-JGEK7s+DN5~U`W^twx&86A%gxentIcdWZd%e?G=8M^ojlCt)Jgv z=8(gH?nJDMm}CD|VsD|KiMJ1>+PXB*A?egJOPb zdjISA4(yo85|dA8CLIz^3qFNXJ2?{wA8>lj*ufa|tq*K1H1c#Q5&ue=bQL|B9-!5) zbv@;TmN#7c*TRp}C2hzzS3OFRTEM~fCLOcfaZAQPPykP|qLpCD!Y+K0g?Cc5?Z+wL zjSBI8tu-G!QeQFwnF#4c2s|HT%3c3^6nZHs&%?U(nPr^4cXm9p?wT1cSvripxD#{T z&d8oP=YHQ7;hFEbh5ym`CDam4X5{^q6|VJUDpN>GM_;G5bUIojb=LLde5N?xT<8u9CVReLQUrCl~YlwSuri4TP_fCkqg#sAe>O3XX{O<0|A#K zZzV&NlwkbN4KWnLeteoSLAp|g6dhESn-GQ^J=VWElLG)furV>p)%keuTci~&cw1;& zl5L9>2fJs(B$1|fg2?1v4u_^Z)?&<7_}CkVVa>fj?f*?6(ayu4{Ne72W8Tk=csoGT#z*taHU zyHKGqv$|Z(I6_s9vl~TKc+u1xJs5Q|*XO6dYPX(U#>ljq<{Lp14NRdSz!|l0=8ZtA z+yt#S&P)rC5El?}=rUIBaq$d03ALhAG@OS&6s<|S3lr5Vo6+8Hxa9dNDf~>3c38I5 zwfR*LTBDN8zcrC*Tdp#=wZ_*2)5(~qUGpAu^>fb%*mRq>F|GhZO@_J)Yb5Sb9aJd0 zqY5!ga2LMxP{i5R_UwY(8x?YPj1awDXvo?MH?KC0-Ti`Ts#$7rgMqR$w#M0L0<(8uj9vex==@ zz!+HEdSEzdiG9?ZX`sDC{$cKhf}LR1v{o*RPP|%yFCVbsNlXBk*Cdj%W%xilmKv@@ zDoW_5;6ZsrfFAwWk3gW(`g5n5>w-Ctz3M_c+u)P_E2$-ZSf2GnB6pOCl;WsisGY;P z=h&Gd?ppVN#WXQ&6$(Ehw$rqHLQj4BNJcd0v!eV#U0(DT=d?^|VWdWLtnpkH|3D zfxVT+!j_u7KSF}R!Og4RpmX6BZirz+|lyP40XX5OXp}mEiz1XYiErv2Vwm zBByW}tj50aXL?mRA~kPxCxF4HI8P%fv&r~g-vQRSK0I#$bV>mp{p(Du?`vh3^}JQ% z9JfPS&i?mW><CEK-ku$dC{M)iZ^QOJZ1E2t4XaEqRfN=M8=H#)TNj2$k~LC!`_ zj_`8L^y=DD&@# zN)0JstLVFD2_Fmn=O)wV6s)?{r*OFFp-;Oa&zix#r1#!wV7v-XgIomjh!%64v-~8=;jF7Er z6kJkVIRI9?4Q+9`^;fo>^(|XacT7hBgiv)$Ywch++dq@-ZVkX@5jQtvJvLkf!V&|0 zA)cqTug5;$k!a4~VfdLv4~peA(AgTR&f2@kSCC9pNJ$F3|(O>rMSOTYD6E!^%E9M#teqAOr4!)2|j)gq3jxSO@riZ(;ux($0wbS(z zp!jIbRnniRj;D~&n$>xfq=iUWEaGmDlziq7N^p=l%^WFKNRE5~?~DByb}Sj8BOY2+ zmn7|cTpzFCW)YZ~tq8)rdsj7W1mqh>JOa_|K~P@y_QR`%Mb45ga*DWGt%XCINei9I z^Bv}+cqW+&+Qk$t@y_A6{X%o7QEt9{-cZ>s$L_4e$2zl8R^0<}1!f!5>sICczd}YF}!UU(hI?8Ke2IwyMfwt3?z46+AL5OiGFj3IG7|6D45g!%r2pozYQ~~vWrz9Q?C$OTDxSiFhu0PxyEGw-*o0X7 z>h1`+V5?_x;4vok#~r2|__WK2lwR;g8Ab3!G4-BE+P`FwCrVk5ZKnc;@Pr2SEJB_0 z$Q|-gcOP*x4Ep@J)+Mb^H4RHQA5Vva&IN2~$u`K}SbH^pF&Dfej%$XLwPG94_|KbM zTzhV_yXY4kMyyT&+xd%29v54CaZ#re8n2T2X%_I{ivk4BDoO2Qh&Asm?(L&=;Xo1Z z0syXVA*j8{0S_0R!@*#5Qr6a1WS8elWMs#ONHi!Z&TOHisix_Z%QjOE zyxrV<+%X6?YS~{nrfJe{^IxSdCd6GrxzStY%Oe~v0w1--L*~EH98g9DE;=RfzasZB{))>c zdor>_WBaNz&*a(aEUC=H&EC$3FZv((we+wcJTX9u>;Ps8!g{x^MxkB$(m`B^pyC9S zqbkpsQcCoqrgzkVFWFg_8(@*mfPMqxly@|r6ELS{)`Hhu4yak1|FWu=%eQ=oF;4cGBdCtxEwOkzS zD7oxN<9N_CHASPmq-oVoThKg9^;doZt;jQe5y{6JSZvtm>s_RtCn%)CD~wuE2i#!X zk!^6|s>5MBxZF8q{EE^ml@^U<#}|JaE{$BZ7xJb$Eea+Rc<6YeghSjrv-5(AX{@b9 zi8eu~C(WA_I@F;gp=z8>r9zaJQ%EB-H&SmooQGyrAn;k^ZCNubsn;dcoGGaX5R z7=KSR4i#OedqLk#ODUkrfNvAw;}{raT{e^D;DkbXUsM-N-)_YrYy}t$OD>&R6iEe9 zOcqyf@IWR;0fq$ePE``oZZJo)^bL^}Sh5@S;VwW$W9G=nPvm|T7F3rvt+{myD;1Xs z`e~6x0irn<$(0Pc>@5F^0K%<_Egn;%Jb!;G#Xv^vEMSJI2%_^$o>WogRTWW|zIMbB zV+B^^T9fvKQKV?pJu4dKj6knZ5y{9{9AK5P8wFadO04@AOs+Zz{10eAZHpABfl%)N#n7(vE2h!L;svM^}hXm7fh(s85cT}TfVDgM+ zw5f6(K}AzYp9ND8DMMqbOwqE83|SWW3D>XZ*Q5KapeWh>NnrBm+}Q+IuQKXYcCz|c z5gcA}xCr@d7C7Kp$)22Jm|eMq4`HEO6tC_@Vg;blSqnIv-Zw6;E1&yzj@OcjlTm%O zFys3o(aSJ7SE7Mg2B% zZ@%C^NVdt1vOVAcVOUSx>w(cf=iJt#4>l!%=&XntQL)w=x&iVNT-EA50hz$yDyA3d zj1A$VBonh0kpYU5UhqUK7ZvYLpE1K_5`wr_e_4qnj$|a6N#sdaFq%qEX_!Gqv^fls z=x*?p8wyyY>4fHL11{)_SuU~Ef|U@ZL`m@~6|*@}-Yiil7%{*aTv?eSJ4;C6ii1i7 zxrJf|6%n1>K5F9ahn|kaZu8qf@pMFQ7V8~Nr!XD~+zR!>P(36snZ3TACCK4*k(87- zEf*#vE~69f-BT{!k$$@?rN<`dZRN55gvYAsI2SVpA+L$<_cux&FS;?}j@UB@jfmV2QR(Tj$NQt9eoAYK#S)5;pDw?~% zFj_w2s5km};jp})#v9nsV{Zj1j$TGMwXj{pm}f2zV(y=nLNUZ4f|SN{g;P`Kolbd> zmN==*L8OS6xbqpG&^HVUGl@}bw&0_v>M^exCGr>ZJ54weyJk>J^Y~h8$w-J)wK6o7 zBt0;svxm?4Gs9iJ^yQU_3_424@{Pn_I$s$2gK}U(e!*8xs~(`*5l3Gj>7=We)?NXb zeJO)KyB&Iys7pORBkzM$wImo-h~9swE$xypX9bTQ(?6|`Slb)@I!}{#ArEHpl~3Y6nHc6xZ1t{QArVe#KZzoi#B{fBIumj_fkCvbL)i6TON zZGUx?*3b32s@nO}zl)O_-=kFabyj+}sfDHGeonF_v@(r|MXlEWLcbnT04&M{ z+cr|W!5ozTmhu_$6+q%1A@9slWTLsSL)ZG%s4r$5);Ob0R)>zg0v~ce8!I{P3SN=OrJK*<=fc%v+`&kAP7jl`6{ptKe z&+n_t2OfXXe&@WIzH!lqS(}bLs1&fFSr76|K<3p1G9+Zh-^(fw3-W&ldbnxoL!GG2Yu?x}0ZF z)1zuFt_%C+7RRN%(8ZUr`#RCijizpbV(;@jP;iIT0u15B@s=QQ`FZ^d8AX;*yMFDl zw*3iL?&-MwsyL`Kw^y`O^1cT_lH2#F9%xp}ah$YyIdvvYJ!bV_yQhQB-^OEdO!mJf}H+r@}G|uwSNn5 zc=<Wcq{DG` zhVYEUi~|P%#&?}G@W4rkmgEl@`hn;w)2q4px!OAI2MXPR7ysl{a$l{g3K=ows}UDd zjcxn88zU!frlw|0E6B~$^SMNuH(NJXUuP}Hv*r-U-8%!d5lpyKAduGnI}K`TLoJod z^=ma9DQ^I_EKm$m1_S=)C$8ayc@><@0LeLhCS9B;O$Z0{ML>hXp9BMWmnlwE*}xV5|3$T|&;7=iEAk$wK01ile;EyGPw2e&>=NSF!AN-8| z!xBlz-!;?VAqMmyAyKBXft7GC>Sp+v2WGGTnFp?i0Or_pw0IOw7P&x|7no9LuZbnO z$I(We0tt!tKpAT!uLZw=s0)j|lAq5H^*pxzXhwxcnCjZZ=A)>1g#^#xaG7 zGlnRCZ%B}PX~08eYSB?=fY}1CI*RR6cWnnN&#~a|s}X&%1pfAr0a;$Gkr95^yTG`J z57o+yzVTn z>5~z7cpMi8zTWevjPRf>?+Y{J7R%3_dluF*^;}`W`ZoI!0e;+m`&}O?;+VGdsvRG5@I=NRl74*2b(B#8wx ztKq~8y&Q~R(Ox5+$n)oyWqOag*YSCH?xaHC#;RCiJH{($-vBpzG+gx(c(uK`&~y|G+|j*Xld|lZ8Qj=Wiqs^bfJXdE8HI4Dv=oiO28Ms~AYdImr= z3%=00SvjVy#FeP?e za@mJammpw!_;MMN@g{2LTw+qAdn%7C1q=l(2O6WC&WNXrAh$s29o`?)`0T2=xLOG>$B?yaC z;juB6Vz8v4G_VPC9Ol@Bx$m%M3Kq1-2c&6cq(FHhrm_JqfsPQp5Gw@0t~ss~nS4lK zjsr=P^Dv5vT74$qhM|G&)r6rQYu$b&h465BL$9|QBQ9Wa*bR8AQb)+Binv^kVIfB3 zD8Mg?7E_2KKS zZfOp8#*Z`{L3Eta;qLg0%G7);3vSPt;<@p{(M=cHg32gc`|IWLct$7OlX9(9QoULl z?Z}F}hTz3n&3I1nk|WM&Ye<>JWGD9MBT~p8k2J7{@ih}t9J@VU2z1vzS1iz@EsgZ@ z=Q68L75l+Ugjxpa8PCI6q$dmXdNQ(|{7spk%-e0;v?x&4+w}U2t(im8I&jbfiJh4J zMyYb+)Me`x-tq5`;^-bYlf1#~c zRzvKXIz?B@#R}Ge6_Q9)YTt1+K;&&hs-^kWIlH#;LEsIW05&0>nJ`*Py7<7rbMbvt ztN58fi>iEmcuelrf9Z6mJaxj$pWb76GoS1AH1<53gI+(;a;+cd9J1F@UWN=aK-f80 z`YC<*CG#x}5c;F_gW;5 zqJKlss#*7`AN(O@jJXJd9bnvb|GJy^Z`?5aH`=? zh1r1ti}v+`n;46|Y?nya>Mb!vILpaAm@)6cP!9n1_d+T7)-eYi$-#A67p+W{RvgChh7`TV7%2ynmuq8xDIUqWCj@K zIfS#ni2}5%3uu@NfJ8*5!4&r9Tu+P$hIb_Nu-)hY=$0>^9_JAkOmiEs$ho%>85vF8 zg}h$SCyn3`=2R16ju#9F(O5jfdpwVbkSqd*_kku?YsE3ix0EtxG_g^5;4%6{VNp+h9x+TVB0A1~0w*dNSaPRg+Z?tDz$R;g zGZ_PfEXP4W*+Upj!Gt~oFrwi;oF_>SGn=9y$xq5i0fVm3Y`V~&0yFLe=3(h{dEDp- zWf_!3HvDa+(T!lZ_SC zjI!w`5BPRG;`cU`Jq#M_XnVp{Ps)NC1MNxNNFmxqxK0alLi)wR#V?odOjZnS^S6$v z`m%ivBxUkeV7Y@3*Hp}e9@PrwlKAmsS0MT-Y%Y%=TpV*twvDbc>?RCdPD9x$rL1}K zL5?`w4imN*UACj(EUoX?I61O!MvX)EG2wD~bJ_NBY-aOY zzs`i&7(83=$^iIh=9qNfZ8cZwrnN5f2jE(tHK`}M#>*c6Mk|wBcDUZ&KSr+>>0(B% zYf});VJqxk+Rc)itm;xb41T}5#R;w0H)?cbyGrxeE>KP;i}eCwAB>YnW$5o|lDOor zBa4E+z$-P?OS$^8I;^Nu?)Xk>Czykb(<9pASWP_aCnbm?U0O^G-!%w>x*vzB;KVy_7h9r5!#5 z@B?SMirz&Dbe3N|eM!#o&CVT}e(>25>hAtHSd(akT6<@lba>1gr|wz*3|&kMECZHF zPcM9oZqEm{J$I({5*=3w`iT2%n@yEiajShj{g-?c4*&v8tse~u{LzqqrR)3OHRK;R z!vAxvq52rSbz8&yB3(o;JgDUc;g^KClW#!l3<>(dlrXhhk|L zU8xK6d~M<+XgFSx9}$dsa7Vj`Vuwzn0f5XP%{iq`Ln0|aC|k%)K!YYgvQcb})@TCP zFEz$es>9KxO@@w8EH{YM92a3?36wnp>8@mAvb7ObB>?3OLJ3dlu2UW*SV}OK`F!1w z9vkqFlZh$`y}(#HC{GC@EQvfa8Uz9~l4yJ}QYi`=3lyP|36^4*WFj{>DpM>Py2RRF zVJ#OH#K&1wuvrNZ!ie$gNItM)?G5!)SRw(0r+;b)ILCqI<$V~%!ZCeLfQI3I?t?_) z+)YtnNm1Ndv$BUu2ya`XV1y*Pa zv<6D@F8fRPzwJ}|^7c_v-J~1AY^U_Av+QZ|%Q$s;^RE^bJbPQolY;(+vy_);rgbl84yWX zcJQ|zl)|om&XKeEQ+Opfr_tKw9V+_EX_xl~dZs~As!B*jC|7Q-Iu{+LYOfxRJktSSdg^Sb-xwxWa21hozB z2Ke4Ak~Hs@VMdjAzwh|{=jsBz!X^Us$1O5|^nZymn3$UVZ%c5YJLo~;S*l;L~)aw z+c_YPPyH;E;5zj;CSaS*tVz+1vD(;L*S|K}dUeqLeU1S(Y?I!6)DKTk`!>&Qc#c`9 z?2RW~ekS-(P*#FHc#MM68LNaQAD{Zrmad1W9G}~ag;I~s4UU_#ysr=*#pDroW=$~UEzZihIEj) zP>QGW0rdg^5eX498IuEu91-C~{!RstbQ(NhD9FPq z`r&rts}s{{>pWhWYl|2C>t{G++|)BWGpku2y9qfmoY*nO@lncTOnK-RHW|~CM%@!9 z>}B1!4jaPnX*2_P8fx(5!dHM4tM!zP+AL6_Y`gol9n%E*(`ni*y*q7|VZ4)EV|8ln zH3YKAj4sM)UT14ubJ$m=`W5B_t2u8zKS&L z*_k#+fzKqdhKXH{vpHFw*5i?DS5H>`RD5s6n@+pQNP}kh>B;yNrA$(O)xxK0@|Cz} zxhk4PsmxAKQ=bwJ8}5I^RiwZ-p02M5wrU-!uN+{LUMwnzW%|m8&+>?I@jO!qWJ zVAhJ{4u19XU3wI`)qk1do9SV<0+lAU-j?}j(8saa;rGh4Wih?XE|Kqr|E>u41hx$d zfa58HTz1(NxtUN10$KnDrlA-m+8VesPO_|y!ozOK=TEl?1cwQ%DoD4#1qxCN*JyD zBQckgHbk=8DDh0K-lKQ6QJM=x^Q3mO3_@?C)-AYilh*1N*MX;qa;R^cf4m#D>U1*U z8~)=P9@Zbr(`e80q0*s^4-vG6kW`8{cJ zh0tACOWrPrGQIikq9VD9w<{`H^y@anTMKtRh_MxY=h(ktsa^8nD&JAwZw4t{{$8H< z@N|v5WL=8o7&v>*`#46jp0PrKF?SJnbHVV}f;bA24O+@@d(6>yz~{Pi<=FO6eUMwO zU*VjG&00c+>GHy1e}egG!dCdvHq`}D`B1ufLFILBmw7%DA1&#sM_!iOoxtr>(kGql zt%VgBn_+ceUwF1|hcq!$_T+VzPUXx-db|DJ>XiKKN^H}eUbc~obp1`|7>P~#L!ozn6Q)_I76aE~d5)Hij;y|3TjW7s+@nD%hUAd4$*pm##7dt`FP zW8w`tvG+)>5lv#}i4?L`vf+Pons}f4$y|k|`KD{?s_QCI)D3Rd4LRs6KOwl0(#t0^IH9TkwdLQ6wn1V3g*dTbNc`Z){^5SYr57_Zf{E8^HM?Wt>ihsHZ4NzC+5_T4 z?TSBHU9+rZs;jMT+KLHp2R#B@?VCc)ary-2fl^694XXP?xON+ZteI%#kmUw7O{r-! ztCiDhM7XP`sl+j-{t7=UZNsDLedIyL4v)Y}w$oVH% zKi9bnOR6uL^8Ln|Hdwu&h-JaLtd1*{+zmaOOYd(M-azgn59{V1bbxMf#H+Ea zQo^@fF-eG*i$}x62(!c$uhK)= zhqe+w0mw8D{+EGE;SBmsC(nkRI&=K^wi>1{H#;-i?PXl8t&3X)RZq=6gWD}s?~Xq; z4|adkHyVl)s`B9DKvn+k8+?KN=l|11!(;mj4*=k-2mnC)|0g$>i>0mUf4uwo6ZYTk zelB%CoHxZ1zqkE{vz1*FaJ0|>-V;<4p+SX^=#a*V`%RSF)M?^DNV6sVq5Yj)w7+-j ze&Kmc!Qe$-b#HgnBW;58)RmR}U@-&wZ2g}zL~BPHnl&Z56A=?p%+=AiIGYV2_*uLkbld6Qb4cpHcAHi z4`DZY-6nnHi#Mjf&LgjbOJa#j#HD56iy6Aedp8CWA!hUX7qje`;D3?;d}h8{V$})Z zizK>saa{&dJT%2it_5!rkdk9A?Y~7Q<>oCE{y((6Q*bEZv-X>;*tTukwrx9Ev9)5` zwr$(CZQD*xcGXvP_WsVUbN9b^Yo=zZ=4#&Qe!8cB&$3?+iGlEKcB=?);F^%vXly#L zMRFij;v&$drKfrUDYiiK9fe2#N;^88J+=7BV6z1fna;C*VbEc!6`Miqy{_PMEKwTgV?p#@edPv=TI)9 zgtJ#O*Hh@Rhd$_TzMD8b?Hg0>7jXRIfVdYb486F%Q?>g9E=vD+h?hIrROlpi;25?bPJ4qBhvuYWeXjrY76n@!k0@=Po_Z!|^9k z@@L3H*imEpCvDGvT&eM6UYr;+*z$&8FyE+Y18tPML?9Ww6-{^_{y{0IIXTcjM$qn)i{#a0l5@G z_BcLm_NOG|4)lT)KpT!DM9gtKxb8}?>j9W@U724IT#g>b^v-7HnH6W~lKdBcfUd-X z0Gto$1NfpOX*TlNZaVsBieo@?-0V&|J<=ciTguE8YLNeyZVjFG+E(oE&>V+XlU6j0zqG)^ z2mBfCCji8y|G;XS89`l9=fw<^#fYAI{b458|`gr@ej0LXAHMp#c$vZZ`0~%$BNhoj* zx3+?&oH)~0^gKM<--ln?C1cVWlGBf^y>IaVb;6)DvK!q`k*JOOaxU;t(h>@8L^N(R z3SKozXH`|OWYtt^a<5wVN*7sV|7+=tX0Q}`>WVhE64r|CVY#YJ>i3gP#_aQj$fV$C zw9Em5>DVG|$2M#FXTN3zUX&uT2NAuvZTWW6_=8WnsAzCR z>8vOxxS{~*bYAX<0P)u-=Z?>$nVa*z5%@w~u*b^qbwtt$Z^$eMuEy(D(A7c2;jv{tS3YT^m;4V}_56%=w`mt>mQVX=WzM@ins_*)d`w%%??B zCL>9btXU+_)G;rKaH^P4N+Sr(eVS4;(F8{!+4--=m!-xR(fB!@)-spnxZ)?Z&E`eM z&@9H3_RUH>YE8`S{!^Xi>JnxTM}8%nj7idZ82Lmj_uF%5{Wh)^>XWh3gO{takh|;O zhs%qMlN6ez^OSTm=eIBvIy#P|MU%H}fVm;0ZWnVIH=kn)2-HEIB z)U~?e?ydK~=Yh3%G16b^RWm``m*#+V>@lL7Z)2XVkwo;OU?UK6pQ)e%_DzPp_?(xo zH0MyJ+?bLPeYYolqr=V~O*2TtNJLHk&R3C{XS>ak^H?$@LbvU#aeO335aT29^Ipsv z(JRLY#QKy9gquJHguqk=+;ym~WUjJWnq0Sa7HJCT1|ny*$Fl3f5{ol%GJBc#6M4wU z%~n9Pb)k!q%MHSRE;85U=o9vI$bCeA5;S z<`oEWnHN1Y=NAbb{2oCIn^Kr8X|mZWl)U2^7{*fHiH&H7uPbXTIxVkr<)y59g44Ot zm5EfQaFH!73(L;}1XvVjp5%p+-mPI2QQl<(9<_xMPPPSmz`X}tGQP3gA$P#a7zJ{T zH*hUSIXBjxwF4H@rklx{!xsycj!pBu#toDM{V{_#U#`5Y7Kw8M{-^@&T;}?&75c6T z05Au_NfY5Prs|5Pf|GD zl4gSar&YqQq%$Eo-i)Z(^k99pD>tf|MIyLGZ^aRDx0E!=VS50*l_L{o*{eWFh0vv zb^8RrZJOI@^>-JQ^}HDzK=9@+lK6CX-v;Y2at5ut=z&l%!NN8%%dc5sTUzEi(A$;f z2_9j9iA*~;#hYPQepiE1bnq+d4K1UOE5O9=Meg( z014YXi3m5|K9rWl={v{jvq;i&iPK||pyLpu!yq2xT(aBl3c)vj^jSX!PzpQ=6#!QR z09PpZuL=0Ck@ubA_nF7i-{_CD?Jfv3H1_Qq7vqsCJw(-TQn$*N76nmep|XUcmOlnH z9&?svew(&Rmh_cPtTRPY&?uhy6|;NK8zlXU8cG8#drYRzW)?4kGqo=eu(Y;4jm2D; zd2&`mEV}K2u8ee&y32!(apP~iuLA8}^Rs2Wje_+mNQMI}swd%vK? zLhCE5^6bf?6I8wFfc2{Ivvt|cfbl8-+9^Gn;ZpaZT}?&2c!|zpUs=BdPeI#uP7(GO zr*8(ODgg^_WESV(p)V{G7(eqPfPqnzg$vEJvMMYDQ++cnGMipInsQUjt z*!G`}$LDr{;xp4?A0Hurj>Z!x)92kzNHeOKORN=&Z0u4dE~j= z8ffB0UPpCN{FFl(Fi$m66l0>}kd>`fm9|SY`3%uep!0T?s&kUhwrWksXU=;mE(mJB zeTRoJX-&szE6?f^eogsg?{hZzL*%xjtWzx02>3FIal!BnoTJn!2TN8watC3h>Nud5 zi=$cAg>%sY4)dt>T$LOryBVw|1}&jHnP#22<5(8Xz{)x7dQt1q?bk(={K6(W@-C;2(#t2OFC4qSBT>s$GkLQ%-mpO~7mo0j z&gYKg^-4KHaa-@$x$3 zyk&nJA345e7Ed1elyVk+puJ&jnW}6W(*u?{t7jNuZXDebtkoJhjH_UOM^{5G>$OS5~p*(#}{J^kvvpNur939hf(pvpB$ujSM#5E`X{DpsHXn zm839}u$ZYbn5j6-^cl?boaXw>7Wz)Jz2rPl7Tn`|z;ZsbEJB^#tymYhgcEZzc|bJE zu(pt0pAx@pMw?CS@&rmY8%UfP({t5-CZ`m+)sQObQS^R>*YRBwrtx1Sm-FLz%(s2& zRbDo;nEyQAHpex2)0?8`r1i*pukd@TQ0%yxeH4KgqoExouSlyw$EzM1etk^I-wASr z8K{uIPG$4eQ6zplpYs9)zoDwXjH+u_gLSPMLc^4vrGeT-7YZ#W zzhxDgfTb&U_boeFB7>wZ1CmM#gQKRBKNZU|YgweVL~jJd%>9^^j7%Vxxu9IBZZ;BQ`j_y6r46*EDy528EFR`@;pTZyhh^G&I zB;u^1iN18168#U5lK5u&~)v5 zhvLB^>&5H=zV-%=R%!IOOHo_GtW_bt)0B?*DmzlDm)OVQsA0qU;2#XexGpOgIh`H3 zy*0txy_?@CfkL&f6100Bi%!uG`3C1W9Z4KS$Yz80Tl&Mn4LGbtX~hD>KS zo)Lwaa&!`ho-z}7K%!8-jV77~9kFr!H<2)@)G4aQQq zT;4MO_oH!p8am+|-?I-nV{|b+Gx!T1o;v<_kA&^dk0e7TG((( z!HdUycMXEGaAfe!Z9}=&Xm2Su{7s)5Y&)6xMWuSv)3s#ycx}k`np{?q9p0f}mOLOE zG(5_@L?MZI1Cd}_b|wrlS&6cazI?KDH!G_)j+jo)G5=bN6cEHn zs*18Fn_)zfJ4tQLhnfp#)QuBpKEnJyQ!z|C*w=X}%2TV#Q%zJP@3j)ol-rjy+n+$B zZd#JJe;kTpZWiZ9Tv1xA3YCN07OX@uV^}38Lq8O(b8t9j)CmXp9w1ZT4P&@ z+s`8<%FYU_hHoChgh^3B#}6P=T#{szBAia+EB`s7?MEQ>V!`2l?~sN`L-KH)ue67) zMUg}Hf+0;bn0a==jHfwoK!bBHltQZbMGxvsH2IPN!?RuKqWkn`(f`UmP_r`9;YT z^SPpAcQ|=WcpGE=%Iljs2&!*zSfdKY=>f}@)CPs0AQbrPd1r9spIMfg2+U-9`4`4keVdvr_ ziYt_p9hRy_IFglVSmCb@IiL7thZJ~c>trp*-Ns?^z-oYdEql6`Ece%@#V!Lvf%xj2V-F^v%t3Z8EcLkHumE%sL^0chUjS`l}Cjka@ zP@*)|Xbt7xxP?ZtIuU{uYyJUc1;}%7>>SKKGY?mOpJFwEHz9DmlZvyiYer za9~;cuW^`Aw@E=h_(-8m;dDkoTiD&0AcRtW6q2N`neLq|Q7Pj?$%Fp+)?p=~xJ#BS zIwlW7EskZt`&u6KzvNk z_~y)X=8$~URldw|vuX(fdUnX}cp=E2=7skM(KTUtrdyLyG#rO&bDD`!|cdiD4q z(GtnG1YemveZ`jeBA|Ya#vORsDIsbKOV}?py3l=FGsbB_u&a>g+np0OKJ_nigm;@=jESUHCVDEdT zaMo-#L~nWY>cjyCEKRsL*C7$8mG%Fw@SA|t&xLe@*9(sU8!NzDtU_%5^K>N@K3rEJ*i{tiXK$0wn5cn=}L;E4yBm|+bRMKF=>VBFhn?X#RYgBzELQOq8E6;*xs-c2Q6^>w6INWO5o|ypGiTA1sD5EN7lY?&Ys|= z!C%$c2<=!A^^CDahv7qamguKRquK`uABYLbV4uO22TPswuGHvuZaIMUm)!>-m-=Ak zs#cKag^=Vi2R6gN8Jp=N1KbgO@2}tTJFB|$Stg_!Je6?iVuwjdjdZd&)%heJ9@HqKUM$Ahdd6k{0dHA*=pi7x+TK^GN zXJI67*v~xJORaaQ61;s(iY^rSr@5UVt{!V*P37k8Z4R;x*7d4j!gS2YjYaD1-*R>r zWYQl^*OMhVnSz6eUKivZaB0+e#^OddZU@|?3?9L(&9W;P5F&^C7lTFd8Zl1IRTR-5 zY0P7VY(WKzX?~)nv9m;#+`|&6@)W>;p121K-q%E&5bHo` zF923+09T&@hRE=fa<`fTNFVxv9_?Sf&$xou`$4;4q>a+2$O(ZOC%BLOW$1v?1UcR0 zVmG=Q@+PkZgjmm%mPglG)(;vsjoC<0_65Djtv7|!W;u!Z9@`3P8+0x10HPR446axr zI#PnVglMq$PZOu)A9o~f3PVmFQHQa(6c!iyY8ps`VW*z6WvSrUt(+3dfDxzm`P)>_ zflskkzNN0*n-Mn<8TAK^boMJ=wBroz6WA8Yd8*7Z*Ft477t!)~kx{;0^6t)Rwe+aJ zM1_HuhL6`8jrS`2&cgGyPgEQUuho3-fxH=V4F+lCn=rekL1?I(Q$>1hCl}FVL{%0F zWqZfMAiwh5Wx(|NPtd#XDnl6*B0>KfN8ar1u=h?1BA5 z4hHIjbayx1dh*~e?R=CUE?>2kl}^rICZ1We{YGfh0O#~g%8*h=mpghS*g%ci!NuI| zO$8S?_rbS|SDbrSm``8@9rnM(!P)Gr?%+L1Qdh~Z$wtWJy-=2c1z>+S5`w#Y0o-mQ z@l+Ti|KfkQb{{KCZfep*oi_x+#cxLo1g9=GL5jqg?EO4 z?xMsprf5=M?01pL-r^L!KOXFmj1opUH8LTI)S@2`021^)hyH-hx4nK{fckGg6_5bW zfczDUzT9-k^xiv0A>Q=0s}dBQ4zb*h()FFP{U(Zvva`-W zZVd0HcNdnfkRa3L% zy=#}$VB-|qThu`U3akW4CR}>hP7!G6#@(5V8H{Lk!;P*jvs?Fk^aO6%RM&Adm0u zm@QOm$0p**=Q2*YZl6q99)jFt@}2<=H-g(Ca;1}L&mOT5oPB}YLm(*bjiK}k)q;Zv zhNBt^oXcHDdIfQftW7^z=-z`J4uQU5--CALA1SQ%^3M!Z_N*w`txj;UNKQl4AbM>|AJI{A(Z@9ygLziD ze?~nOE0i{;bib}R%L}S z)2MdNmL-rgf3yiuHy+z)mT9ypR02Q{t=yC+BNn2&hg`Si0^kn9(}uPhOu(d5zRa$oxPMR76paJ}p?ls7Mvvb>>h@7dpSnGnuVMY8inZlJZ>$kLYEAao*k?&Cj4AgOtd zG)Zfpx+^xKq!?4fKq_ppGI}5=N8jo)ApU;i>dT}sjIm_*QR9A0`h|}5(jy&l<9L4J z?%~?TLyM+LPH~JG>6~8HzC-P8VmlVW>-hE67^j(eyg(4AI{djm>`1<{ONj`aJ)L6w zK|5%{n&!;%M+~)0@^Egx+zuX_Cp{02|D2q%RqN=~Awz#gGaF!jx}h<2;wX$cfRBg{ z0RssG`jLajXorzQg~Y+b@7e}xCxvQl#U}lzTUMB7qUmIJ@A1hFKQqmF2h>dwjtI0T zkP=MMdKI(1%Kmub)^!0}U!~RvxCAno4vsezOle34CacS1A0!;dnAVK(!OU}aZ9kkc z@lCNJGLiH76Jo)`X%;4W&D9^Qy09*19}h0#57LNOXsju8MQ?Q1((G6aM#5rM?LY(5S^KKblFMVpF{KxwD>Sq=kU2Q2L?Z*%6$tS?weo?vxMscppInh6&${Y zHwrrK2OLh%22M^x{C)v04Gah!ja1u7BVeucbkns{1MvfJv4cN-|Ha(doTX&_0K=q=BN+omy2zHGK``Tjc((OvOP0}D1$_fUOK{uLd2Jv1z zc>NL~YkHiaidkH2w(oH7?P@4UR~NiUu1qfRtuY>PkrHodAyjwtlo-t2c8`5Rv7NH_ zSoV{dxmdU}vTzKCGG4ZB$to8CM9f1EDbm11M6)Df|CDfr*f zg$9-+h2M5MCd2IZ0u{sfD4V*g*L@V`9Z_HfmqY4bB&rE?5Xum4PoYTUO|MganC=hS z+u}KMy?iR@cS#ivkMd^fkb-7`i8p;Bno)yqi{tAktWJGB5*#gIXH6hed`rydnnl=* zaF#lfJLK0~c1+?!+N?D|OG?$%Kwq?LC}MpNePuXk75183zVfOW`}=A5aP8hFm&@1a z<7v~rgA-YfI%ez&%gLERAqB>b$g>Axu0b~M|80`=RyB14P2=@2TDMGQQT z`4n=;vodI2h5j)Xwyr2c&JFb;SN_@|9k*nSDDz;7U4dB9CPu{joFF!#Fcuo&igEKO zMfwq;RkoBQR6Hcym|MtqXdvBo;tv1|hzu#tsmp+(hzwnvkxsrA5vdiN(jNc|6xJ>c z_MvBq3r2)moFQgJ28Z&3x+ z&*bVvSfCPFJHB?efQi8572LxVa9>(Tj_n%zdjjrd_56ZyVvwl)VwC-4MYcGzSmBhj zQY0SQ6~T?pCeBdrE;8aiJ@1=eUD`GC7rJ^s=?CGV4DMOhaVFwdA)Jeb-6_jF{3Kjx z(UqL3WjpHQfBkDCfYdXevO5VuHmu{P9xPuERbXDVac}J}but4VvE43fOL%(Gf%EVpo z)tW|oqLs_V<(`3LT#QjbXDvwPqVMhLPhPv58+55-F0$pRIjlbO}^JY$n8)2NAO|*9fLHySntY>R!2t+`Yb`V*}JyolA#}` z{6ts~XDA8n3u(j0hkB?L85OUTXsfCgE@k7?Kz*L2B)Mi@_P&~h!5HBoJbR* zVhJ7g3zd|0GDe4278a4QS?Ix5Z{PLEUD;P>iX~itJ5bzw{X<5kX$|2WM{?I@x@>?@ zlf)!$W?^oMddkx>#@$6&TFNz91%H#Feqp+&cKEnAUgQN)@#ICcnsTz%%J!UBu9c*! zQHkzHEQ{lqJ0wN+>`$xjuM&EI1em9Vo;R&fY&Y1b-5Yt4_w+WiXE--iv-`f{&XwcI z30uspo8g}!%Oju0cRmP5++2KU0^jRAX*w8y+1zT>0=QvZ>XQlh-#|4@MA5uRq- zsdYz%NqvD!vF!a|)f)2I9VWjciLKa0?_NN47CY2I|0Ma+9Wy)29%oyBqwA`f-;j4B ze41tUL{uT{Dq`OY(DDftS;dm$%iH1#*kv+F%)nzqzxOR@JU@22G-RaVuAQ_em#UDw zYkXMVo_q)Ce}DA+Pvwz05kxxsJ8<<0`=3)D7Ouu-|4n&7{C}}8RcbnN8{){`Cu-V7 zbcOYTxyX6e8cW2oMsb62SH1Vh9M7qf)ka$10QD+AAK6^fU|~AXMMQviubGZ~C$j7x zuUab*-o&mH=6~CnZP17nF{Ng20&}nFz=sAUZE4%$11`hpZ$;lF1kr5=8dK)Q9B`z=c5FAHV()YuQoOjqbM~#tkgON59(S{H%S6!)V69wq#SJ27G~75 zL>5=oO9Wwc+*V#&V$W?LF3=W6h!Bsf5Do;hp+w)1my+bv!*hJTK8utmeRuRJ28n?*!?5>Jp`8Rt81Tw=K*tih6%n|FI#@2O-evW98+AhG_yxcn?&0%(l`*l2w>VZ)L@0 z5&ql3^&D`9j(OI6X6FFf3<8y@L(lFb3A`Al0AYU*X9bMRH-l|-qp&k87VEeQ_qTQ! zb;kKS>*Dh8url3f#|=5w3nH6S>gh6xeRQpFb>93k@8^^??64taZe=O|{gDPy7u`Lg z^MI^^55+r90wEp)j1c7&1?_Pk<(pAFdv=!M<*wRnNm~Aj8f!N-fN=uq{!O{o$1$>V zzp;uGra^r`YJpmUDcd2@kP(oY(fM&Qb8>B-NLL;RkiwJQs%17P50~vB*yLHp3AYVh2(KwYEy?)&kGKfs1p#Hyl zMoOseEQ&AJeNarw!wgaMbdBK+i4=cAtcx0C@=zX_Dde%c+5RO-u;U0p{8RL^579^n zB#_F5;vI$GjXl16^J3?F^CiQG_yWaW3e8s~Mx&yO8tharA-tj1vfWM!igXJ>N!s0% zD_}gyLAncfGqQZr+cm~%+=xuZ2o(leF>Ae>IZx929z;SrC?}W zF%H0CHXDP~pFTr^DKk7&0@dEoGrIv|q<1D;>AElZkji3hDC4^IOuK@M6OXb|ef~u| zXTf;BYfAIrP1*b54*!tiir9K~dCjCI^RUq0KyNviO`$zv^kJ>v56RKIccuV1c1 zbqa)5uSj<*d1D;6u-&q!g?Dr9Va?e1>H3`4NsrHHX%`4cO<~}?`&^x+^dR-AUByLj~!j2oY-3yzkdyXqTlOy2#(>z5Hti%h}Mb zS8dnU509exwb|Mb%xIpL8?y(k2HlhgOow+U;}(TRf+OMF99#?=wzW6Cdnc)Fox+<< zuZ{|eo68>deP+;m4bY`2`?VsU;2#^>Sn|7{GSEkt?yy#E6)-!WDU}CnB}kwzH^lp>KHu!&>r8_xc@6PM} z+*IJ=Hr|d~`eNk_#fG@mq#Pwy^(utvLde1MeidC1_{JEmD z4Ly$lXxIC;eQJ;{|f}9 zN_FD5Nrb$0K}DMxg+t$bNoqdpG>3pUmy0M7o2WBD4$K=o--s-hN^k)#^3(MapZK>Z zxpZD8S0Q$pYZcO3S;j7jrL5AV z%OBZcv0&FUN?J5&%BUP<7%djFz#)y01ewzI*ZO&0^clLSGSKe6i#nu<6~crlO8urr zErL$i25Uv3hL*gz;mkTH9gL1kS5s*&RZ(APIUyp2^h)SG`4nwrWAoyU>8X0jcdKf~ zLA>#Zd~>^~!CW6?5YDC354^h&TOhfLN|{(WgPJoz8S}#ez4$tyIMY+gspJJ1T$3gJ z4Q<*#+Km$T8$ExG5_Kt2Po_qMgx>Cw5J*2r8>WR_U2*Jj)ic@8i~1L>Bx#*cAi6fA zI4JI5dPtkL15UePL+%_6yO9KoUm_9_;W60@yj$<5=WEi3EF0=e3%$bux;RAflEU~SirB|lWw%UWG>gQL&T;#*i9{Ner}Tn4YE;GbOib$xU5&s7ABM85+CQOm7!1eP3Y(G}c2mHs=niL}T7MdagY`IhuMP zzOY+!gCPY6{++wkCSMWm;$t@jU&uurVfi0U#K3nOIpHb3Yy{CccZ3c(3=Y~10v&1h zT@d@r1B>aO6Gs+IohQ|2s5ih=?hb9&5osv}!A_>A)!Ah>&AoC}${(aDN}9l7a^W6~ zXVhuRH0yb5lH@5Hs>!4GNZn*-KkA9qZ0eGUIV|o`P3-Byulhh#Dks1^Kng!_iO6q6 zoOPjy9n$0W!B&!>Po6(s$x>mYL>I>)ShWKnuDp9BmY>pOyRg!VMEL8DL`N&+HX{gr z9>`)$%k5jN=4ak64Dag~&@HWaa?ma2gs%`}7Qs_6t`-{0ugH*bX4=Oqjt7FsMg zB38ObskrviN;;X*&e65eqw7m&yKkFDa^9&%NXHgg)xfp+y*t+{eF=aY0c7M$7uo(M zVj2z45tYW_Kd+gY?x!MfjVwF@r7F?!uYm4<^4_1~IJO^>a5P>1M03p8&&2ZrMr1|f zZr`k6b5+5!s|A(H`ah(Kz~MdHad(BjpR_G`b1tzk-M3f8KlRqL>D_Nb4D4jsdRw0S zJgu~#9nf97al2&Qz5emm+2s>BGJpKPfGCa(MO1jdKolU*|J)bS!N})!+FEW7ok5ibG^ICf5+RU&9pq5Zu;lZmMTr<lNChWRF}@JZipR!JP17Th}(B%?X#cT(0)x{s}7ck$G#EJ|^X334$iTetH!l zGC)?Yy}Qq(T(l+wd|kq-mZr2iotE>DZ62nr-BLmWQP9S^nkn-E2&Md}*mSoLv6QO5E9uK5A}2g2aA=>q~h^6D)*reXNCTLUgBCx2%ipR$BjIcn=;= zW=_W7bx~q-D>A$G8;C)3G|0JbDW+D0m8A2Fm2i;flxf%-k~H7h>4nfi&OjDaDs;D> z`SFAxLd}hr=OAWEF4o|}Hoj%id1&RPFEKC^sU5Kkh6@rD%kd|*h83z674m}OI1Q@M zPxbqA8SL2QUs|GAzdm2J3uNby$|tA%k)Kc;*%49#wlE-B+7CQKjKKgTw=JO?;t>H~ ziZ5=w$q~~bMC~QUH?jscXTMK2F&*S6N$3Fu3U@TW@y8=}#3ceQJ@bV9Do8ZmYgp#hEG+}Ws^^9<`_~E`- zcGAme6zeYEEx?dpkp;f7St5Z@^2g^R_0U0HpiuU(HY)H#FN4T)?0pbC$h8t_G{WHJ zD6TvBB!W0-3(H6e5FBZtF-BgkH^qIVWaCVO;y#1mP`y{gKSYoiUkL?yd&D#%AQd#C z(tm)!LQLHN3U@m%;9aL)w68UhhSQ3HROE2X@WT~+PjA2E=Z=o6`*81)5&+VoYZdn8 zggKhfy>%-O20JgZt1p;f4QKt4Z`9+O>P&@PkBaZ%tj7nGWN)(2C&z!U%@L}2JgUw$ zEv;LRa2#agSKZOb9Eyv?%Erk!YuVe0t*>H7MRmxrmd??&qKNaHMVT|dsa)% zQ7~GkDbvh=j|p~Fo;!pa&-#Y1biNcIFr&oVafOx1H=^b(5}phV`=_5FuWXg?*Eiyy z1a_YzLy|zSw4jnWQEJ9kmV*Z}m4%Vx29+(1uB5-J02!@+cvGB@P}oPwJ6Q)rr?F0e zFqVFO4>5`$){_gXgn5oL{7%qNu)J-^i*o{t)KWFbDFb}B(@<%n~~Si>C8mgQm3}p$<->YP*?M?5I7d-`QZj>HQ{|Qfq%Vg!3gj1R=}IgyCO5ag^@;{;c4^P<@wRIyvrYA zyna12WIt%1!J7V@BG<@DcIh@{qR^i(4s;~5N;@gqIyU)nPH7T6&FQuf8o7sT`5Fp! z9_$ehl>ZnmGWU$zz5Uo?EV;dxxTzZUAb8rr$*skjGQ)&{8Evt~7-GuUxFSF8P z#_;0dFm-x@1XWE$wsgp1bzhfT%Uvk>JGwoH>cydyGwXC2(p*`8>9p4oNa>Ozbw8t@ zNW}nv;wTACE4?8!0@PRxL4vGSp$S zSe$zBVGHVV*!$PU-T79{`wt5v51hIc=<1}x@hn$3xctoV~z753T++g>Mx^etKUX|^k~{SI2hsv?~0BQwz~8ar;^_NI>o0YLVojl zg7Q7leZ7-pCN$&;E+neCapn%?`O??d%x3L!B%_1no5M`{QyO>U4uYhkuNoE27uH~w-+&*99bRkvu8&!bfW4y;*`P8{5m^c(Eo{d0KM($=Nu zmbp&kTuOnSW`?fsy>gK@Y&}=YI=9&P3p5oZykVV@2c61+3K?RPs6R$ua)6jcBr|c; z5$f4Px99yeXT^8Yr81j5yzrTxFl}wOXX23f@u_LI2a=28pRN})okp47S87|BN8FS` zn`J)`q8m_&VcB_L9qo5~1(10~<35qR<5LHwEazPu(LV`x9>4q>P!aBg{A8P^r40!z z&adBAgid@P|GC|?F0a8m#JMD4st;a1LvA!LxF!!!a?@reUtPIm0n^}FbbfuwTlm%% zj6xU%@Kp9})4R-s5WS0x>b^X*G{H%C1H=!1r}QlcW`8#mk1alB64%`-?p@B>jv)75 zl<3l1J3TCQzDF3No4I-ZBw*`QkkNPDY7u+$aqY-Wzc@b7Si(BKqxok?SJ2scKz^h( zsa^g2!2HknK(&A}eD%vbDf^8P|0&J;Um4y1ORf9g!h>?3!!Nv~>x9as9|TS!2( zB^e7QIx7xEGA5d4H4O;FMS)+eYO)t$1EP{eo8E2Iv z@?cCvPNuWC+n|ZH)yer!9pX#p9svK9&T02GKy+pON#eW;V1gkaNnL?flFFjSpigZ` zb0-vR>_@sjRDg8OfFECLF76<;TUOXN;e;K2foKe#jZx~&Ezy5uB@k#?_FEa?#~1xD z7k(+9N)^>cyJw@07I{9|&eoG+M99n7{7vVQn^18gJNcZD$OTcda6mt#F|oLsgA3ng zCh#r5&I`VZ3hLdj3t(2CHX&h-?p;?Wl5VUL?F*AMu!a9Mc77AVieETA0;=`za?>u0 zZ2O?}P$#ZCl#WaDFpdc**QOk?#oZ$>SN1<}`ibQ=9|-`OimR5Aku&KJA$g&QV3PIs z+>q2zl9PmP@uG3d@FQn@#)j_$Ue`5}+pmFCbMKck{z5eTjdVoGxoFw6B5OV4pq>)> zNtFd^G4>f(naT!_W0@d60ya}nMo1MYsmBG8(}Zce4}#hSY$5@Fg276gsb`1?xN@N} zIyMtO$S81|A)8II9W)Roc}7szyr<0skz2>oR!L&(aXfeHYK8GJ7LsxCTDXH_<52?p zStS!eG#V+ONbXW|4a>fj`NG4=dJ9WOGo_P9`L7K@-p~YU8+V!D(|$ZeQ$N(MZEQW>2>damF+`^PL<7x+9ebZ$Zq;^am+{oQ+q*+bS>bJNxe5oC>Y~ z&NM+%>k*|%yvz3cRaBzC%pv3dP|fMDg`u^9-Cq+uCwDs&$N#exNeHY|{@1N26_X(j z-~FMM$c^S1XiB=K(zveefAu{3|Iqf$L9#S`x?|hc8QZpP+qP}nw$Io+W81cEpV6In zcO&-h7aRBf^+j}abY)g|R&+#VRzAN6nlKRdq`ZVMF=wcyG#wE~et8wF2bf$=FyQiC z-L<-l2cP&pqW16>H2OnIwx-2?w7;o11gY#ltD#u+_?7q72;dT*u!NjQ~Q^e4;xah;2g>0&~&iwJ?G zLUot$IQhmw&qKY~BH~Z&?yk))YE55*) zSe+k-!4>wk_VA^ED_{1lgsll4^uSRz^RT1x)hS>6$)=ik9E!ob1u10zm`1k-G-4C* zxa@_N>$1-Q@*K2{wjn;@kV{iroq|m+tj0TzlC9fffdwt zjirifvoPlXXP&0Fl^~}=o8eh(W4eBDKIly>1MH(kTnQPCQR3Bmw}qMGjO`CLK!S#X z>Gubpz-V8M1U&Vy6SjY1C0V33~6dApPj z2c7mwtHn`oqk73$>qQ7KykI?i-Djv2lw>17am&4@&qtdYAc#?LuG?qt67IPT=GYzP zE;yz>K)@{T#1QywB*4I`V?tp0xh+pc?l}$YFlo{+erXGO@m!*MZ@4Ndqcf>9X(H^(s@g=fOrA8RV82mIu^~z^(qV5E z=(gRl!OFuRJ_^T96?lmYzGAPnV{2w!W2T-OpiVE1jqy zU3nr{RZ2HWia>il>^J`KmqIp^+L8Hl=gjGYzlHOVG;O>Q&+Tn%U*k>xmvLDC>K&aL zY1hJ;>~>eBXyWBx{O&QO(^ zv6NIIl488`5|8G5aV*%;A$dkAIUwY8ad3ro|;2X`(?3{QkX@^@G3=KimgoO`dn7mkgI*$d^-OotU!4EmHO| zA2Tz`fX?xya<7s7Y~ondu*3xQ`B+PsedCz6e71r}b0k8l~L|ymc2OMn;#2moNh^@9-^!6is0A!CXx~$fL$C`CE799A5STR3& zEHy9f(U<1FA$7j^lN#2`FvWw+N33 z#y~7I^MYfCl26BKpt~rxLk{d3#fA_|v%&&bjaiDAPHyApiO;S#f*9@NHX0bOUxOKH zuG3lN8V{iP+J^Em(g!ddEYVaOI`o-^w$|9{#-S zCOhh>4=O7@gbB*)nSWjgx-{dT|9ixefbz>APCn||jL<9Ae3Tk}PcRY~G`N1DjQ4x; z;?ELit;Qu?A&|UQNYa~}-_qoQo)d*TSZf4|Ny(&9?1|W}gGk_Ly!Rw~AtjLyl16}F z_`o|trx$YE!7^FV5WI1@Iy_gC6N4UER`!Tz=UzpRWske6MM6@rJ*;)M?Y-ojUKF1N zEwuT@)lIb=j+~JxQhaKmL+L6TAQ?lXvJ?*pSouTY}ehm6%ml&rA4 zL3B=d~UnQPgM!Q$OMV{}q zedpClChm92*glJ0O`hDz%~8k^-$#b00_6D{TDXM^wz3zNRU7{?5NnWHp)PI}kVSaA z)vdchtWTxBLf^qZ67I!(?pPUCe(vD{9=X;iG}xoXO+0;?hi$L+>(nSAI|!RX8AgHP zlT!@aIf<4+sSY+SPtyA=I^fy|oJEtNv+}Msx8o{4j;F=pD0xT8vl41KVT#lpuws%y z-+Fx?=FOVLU4F77O$+&w1KteJm0m98A=rA1Gae`E(@{CEG1LpdlAAPQunL%(hxfqk zwC%Am&%d4Z6xUApA~GnJ2GTE4#lkRcZBVpT-_D$Y1V#>$P*iT)R@_@A>8EA)T|0a=>3^T#6=nv!-8hlL(i_7M)+jt0Ixc(< zC@oz~a^H!AZ$e}GJbI++Z~7SIy$7D2+4G=SyCLq}@dNyydqPxK?s~hQMW^Sd4*G9p z`TswIP=7E(r>y_L4C@c3osGjr8**G39o8XJLha0z76m@7s}aCCg5!|P`rh6; zh_5e_?Fpu1ow#bWn`ta-T)_W}(?=m}1;)e{NFk>|h?zOciE>o4|6&E&^$0=>b^@H< zSh3z$Ond!)jG)P?ElCTti?m#2I0koJ*(PsoBB06uMik_XtM>8_W=QM$BSne~+!QG^ z)V zYRmz}E|sFbAU<)l>5D}6RHR~-WIW&2RG!T!=WpO9LzphM6@Dg`@rgD}S=2M(EG^=z z8alR+(EerYqN1-~x}^%lReta_rYM4TKPsFX1zy2`Iuxm7aUX+8>_8wpn0hvz*^Vw~ zuq;E#oP6)FdYq&^qAn_!%z!)ix_a-fha+F@LWHUqc)%^GaMm_MWebTag9GvD;A{mB z*G4!A{5_1z@r%7h$eXWacR7aiiwKAtaaGqD{0qbS29CFFTU>7N%?OX(0KymG+M3rT zCjqpEEt^)f<^`{2Zs{T6l2-9&#nBsKHm?ctH4@C==(7(*dtcA#n9Bh*V!MZMjc#L| zydrQ6i~5b*>y0@1Ion4pdU*Pldl3U1eKd(fcWz|e6yOv@hah`-rVQSMt}dG2i1YWM zv)6|&LVsUQOcnuYvN?!ieMPAZG8`1Htc9yl-+1QoCD!#3k$iSUI<^&AEQ`MQ3Nex= zT6?Dm4c3Pa>UOC=GRXYK=OQ!~)O9y>G23C+2;`jBQ~sM7qQg@bSa`~h^B1?sP1LN% zr1{~hQZO{dPX$2KEBE;0S6*XLQKM;8SCI<9P-@wyat|4*8K!%=Bk>WMi@)+=TY5zW zEvf{+3OR)62X#bhGFJbmaX8EfmX*(D{V21CseIN1G~-pHd10uui(v{XI;t9%vVMr; zx%ZgI+_jb*`LpN+eY9yBIzgm2xVO@AG+J)3TD*OU%R>L&atGZl9}2T%1ik#Wx|~x( zoI3eBY?Ot=tR>hw8rJiN+UQ#9k=*XzOxM%5yZfnK-%>G&FdX>_i^y#7Q3JHAPhg0IphnL zWUQ**rsTdOHL4R`H-wyBRf}vLnhV5C`E|iN1Nq@2QqJU;S-C?8EsM^qSu6~VM4X{_ zbsWNFGzYL8OHxZZCisF$mb<`(txQ;PIqQDm$sXf-@j&@_I20ayzy#49AiG1>^7h%y zZlK#<+U@jLQo%mL+Dlg@CAuBJ!B%m7i|c=f**{)!@N5MxupaAW)C3c7Jya(WD_`~a8a6=mkZ5zsGPC3-wdx=DpS_7TC?}AbX6QV$1W#*tT z^5z!ZFPhPgTUES={9A==QE>$0Z7IQbNnUu8R``ZK7mzX6tZZsi&Y+^CE3YBdu2Jr` zW+*EojojfgXoOznThrWm-Y^-+&MtbHEi|+OWd2~Zpbym^#b1|CicY;l_YkDd5HI9) zZz!sU7H;AyVq3QD=YLO}T{MCsyt7}N2q0;f+d#3H=f+X2B>V$?$M`in>{aa58y+U? zZEJCrcLg|S?O*7YY_hzgZ$GdE zJjB1xYSq-*z{&joQ|eWbirZ&L=zgG*tYR+I()i2ZwXRw_>~B#82`M@G=qM<=@2^HE z5V1hh6t~l@B73@WX#jtKOtJFf^JI^zmd5u8vx{`7JD@0jD^oEcS`<;WaPD3)Wou`U ztlN9_G{sWotdpldm)hxY6Py}kfu)q9kF|QCNk+E1RMEuwKv3HpN*U%{d!F;$tC~NK zjN`JUOww05NU46JeDr|Z|O=PX-MZE2L>~v7Zoc=&5Pk>QW8@5&-ubB^2BXmC@1=ySR?xq^YB(1 zdeq3}U#UVV86Ssz0-Y#vHj3${Hv*>NJQg%q*o+e`?`wlo(?P?Jkf)nuAPGRcFt>3Y4VK1P@gdlxKdn94Q$EiLfCraC(l@k6gXkGl$^B5kSuc!lamIR~JzB6i1P!ygNR z33G|*f>EJKFzCEf2QG1HhA@l}n1aCc^MgDPDJu3|L?H z8^wU1Br`N1`gUO;`qx{aFABqpzX(z3{$vpXYI#R^{$CEHV6Z>G3io?%5IyH!IFD-) zr`R77XiM2=`Ektr&L85q)q?s|T8Fx4DgFP*Px)qZ3Mpde3}jQ=%a^QMXyUR{lwf;e zVF!ON@@ZqBk#dw96^y*^VOx#7PA6kz?JCFLiF6?+v4_ms!DxGCV9y#=JJ~30#u|~m zDQ8qcJ6B4jpm=&cW6UjqesBPAr%5ynB`}T5m9@|854rXmem&S(W9=C^gMGB?h&XZV zZA8SQ+rzWD1@-U^qgZYH?rZGV2`n<-ns>121I3k6r>U*=Yaa?J&@tJ4cm-?y;h>7J zo-`?Eo)?wW?Ma|kU$3A$*m2o{tJE>cbp*R3%YD{1IXE_2S+&Z~4167xTe`S|(`*P8 zUN9NpQ%6@Meu+ao;FnPi|3Y@emLh$7UVq~nT{ar|8Q)Vjud34nc@OY!{t7uv~^NG`4} zAOOJj&y4i%GJZBTu{QAde`6q5@-k8b{0KaqJ%+0UO?|8qURD(3%D1zg7Chl8@o^H3 zb@(QHKq4PEwuTA$H2Yfty~kZ1Om?~`p&){7)fi&r31%Y>TY&AR>U|9&{t>`p0rRG* z6lZ7Q@&03hok#(WsZo<`#n0~iOf?p9OsdjkG>7$)slJ9CfAqF^%HSy=Kj@NHg~Xj5 z7xZkcf_bdu1D%P)U@L(7psHceBvVZ_`A$l^s$Z)_HfdyIe53t*O9gb1EEy>(ckzRF~GXfmi&xi%) z%V;S+(pF#+KfqlC7`T81PGT*gfb-_s!77Y6vy9102m0Jy-vuP$Z5_s;&nsa4 zlUKV>oO&Zu8}?32t;=;Mk92$YV7ailXTs;@tYnr=(hD~)9o7SfkKURF`>oWRU5QVOi0R+?fYVJW+( zSwp}w65Ga*8`yrPfhXsWM~30VdS)CdD8Iz6k9}bg_GyjUtJGlJ0f*8|0-Pl~k%wCOVkb zyj@Mau+l*>C)TF2e6eD~;awP$d+$+b@60VVrLAZ|c*pvNKBfy&tm)pSJ#l2e))5cl zGAt%ftSuYvrY=3LqcyF$F?Dxhhm+thfkI_V^Dm9$J@Tz&EMz5Ytb5y}iXDy82dLZ` z+c5Ovs%L0iIa)}?pOH@CR;~3l5B9E}dW{>koLF`m$`&z?rI~5Iq9lOW& zw=AB0&8JkY}NLcBW$jixL>xz#N?pf$<1nm+)WSZa$o2V>y9_ zz9Qs%|8#G-o?Q?AEU7-TI|qA8S$gzUvfZw zf}^oR!iZsuF)4MuA-xYwe#djp=)P_f*|+f8+3A|g8LiOpsoQmxe-Qt9p!Bf^EddYz z<==K>1`mm`i|*~7Od#3b=IAwcv$%uDW%lhgxVsSh#%XZwG_AkK^KJ<6PMeuPfxSYK zski?UVl9;#+XWhwD&(gcr=#chp~~y}N%zC%A!7^^!X`_q{+J$KTJJ`8G|%zIi89@I zE%zLJ_e{4mRHve&8OqfHo~RQ$;J}(VJ>9^h1ffCV?!_%cu}(o5XCTr`j8s*xNL*Uu zrFe#ysQ;Fxc=miUymWydulG}r{k$2k|K{d+{yC~0`*|@Gk9E=eY?-~prma_!w^(Rm z_XpTdVM{KK+)C9wwZX?Ce=OXT!Aybh{YJO9znf|V;s(*w_S|htl|ARTuX`SSX28*p zxbZi0PL&GB9NqYGx)_x84-~)@2eg1)O__R$j=aej%P~3Oebz^WrXyjdfWD>$0?kjk zx3^gMU{$1)lA(dnx~IGIQ97q~=J1H~^t$&o?&oC*uh#Q3=^}lH{+omABLs=S>jl`0 z9<6SC!4e8#ap~@x74r(UCIE_wiQbA&p6V|Te5>HU%lBsq$wAcxKv_GI0eJy0vy~0q ziQ+@|J4ch4UlYtB0^6)l@I&@1#qIlsX-S55bjnc6na6Ak7j=T9Il8F&bR{164cFg; zu-JWTspl~{{SRtz+Z#>~T687cD@DEckA(+C#!Og`C+KA*!{gy0Pd#AH*^Mk!18B@^ zSxq(Bx@X}P_GNk^U1avF^{7iEXk>~CNW%v3bHqEsC0{6(bBMb`Na9K`fpJmPUui!@ zYH{Q@%>8jh_(py>{H$*iA$?=tJm^?*pAA61RVc90KaYS<09BBy!T^h= zYLDCk$`HsIAkK!@_cWppS3>dWzqD-2bwBL1WR(LOH}Uo~;;YsezBtjz!M=e8RwLIR z;cnM71hKh!J$mkO?WgD@LhO$5trsw&o2K(UB{r3UL2#z0wl&&?de#f*I8j^^DlMVU z_G*2VWP>mw^NawVgUiPI{L?1szmj8efRgKh!%0^As~A%o8)CA0MecEi;OGZDe+YupBQ33<7T? z?LPm8^k*v^0#l{0Q;BM+O)-1V_iR)7*kzNB-L6spd_y6krvjUp)Iy^F1@Y6cY1O{I zQU^4L%h1P5^LZ`~k#fDKJHCPaSnJv_^MVr+Jw1G3m4~rBpSrSz_ZAqQgOuEw5#vji zf-RLye}YQ_%cj}KO;sGYeKt(UasMyQ{i(^jg%-e!L?kc#3c_i2UZZYv+`_7?*vL-~GYAwR=?C=)(8 zm1YxLTT?QXh6TGKAku0Gsn=WLr@RLogNzcoR)H@i&bmUEPG@D%y4fiA&itmGcp6np zo2^?V77ZI9fXtF>-vh~XW^0Cs$Dm~h)LI{Vs6Bj=Nbm$FBgRdDVj&X%%Z_8kDMF}x zPJM9l6&6sAripTI%g&q1Pxi2nV}qI!zS#p>%Ab$|S^^8W7DQq7Ud2wI)x&ui92zW= z+TUMZ#TKidLcL0AsAfT4!T2>qS&B7_S6={{RV4GL z{FyTjfU!;<)l-|+%3_itD}0ZA1H4aK2Ub7G^}KrekSq_vL^%{`!;+_Pt;mrTydKV% z)(p5-FM@l_XrNeyy;Gt>V#T`cyGbl+_R0CvBG_RC+FE~UCgZBr4OZ>~-uvhy*a}F4 z*1&Lb_m-1Mx%Bb@ypmUY^R|3s|BBKWhkFiPJ_S0jCy=XlORZZ;N?B-6XlDxo6urVD z2EuuPRT-TTki)|}_PDm2rJ^BvY>r-Yu`CC~#q6-k^iL*eFJk5wfn^3K$NEMTq>i2` zjBg}}lzJScK}+q~dI|GA8BX{fsD>+Y2uc&E~Ipe|?2YCMP{n3_-NqhV`Pf5)<0V zn&rkLWWKv()IC8r=LglV8}txvCd#4|smtTZ+F`j(KoM^aPtH4Fo^b_#!RKh(Nj|zg zIKLy*&~0V}i`(njC-}Vm&A(5>5%$q9v!;(Yv|BkS5*}ZJqi+`3jiWYKQJXne3~psM zG;CSYqgwK)@|K%cfBHLJXmPQEgaP0}6tBGxy8Sr`U4HW7tZ`U}*KF~zC~}8u z#9G`}om!@L7&SrmdWP}>4IF;e9zho`L8h)}+*a#5mTP(Oc!!1aT(Rg-pRm5>(2M!l zEA$=(tNEE|JWp1fvdf=c1+OaV1mTmt1{+jMk9Z*p93qD31$rGIRjL(}UyP`qg)v?R zj7IrMYA^KCQ;-BB*(l zfwquPmiNNCHs}HchnC2`+MPRv3M&U*3Cfo4k8-|`uPHUGVlH^Ax}0TS5m>~)(Kx~G z;;+j$cf|vTvM@@R>(K^jLaV0D>(_Ijm54Q^&imph*ebM`DnKb30 z_E-kgck5yIgT9$W(F#r4>Kb)W{%qX!Q$${|UluSU*a4a0Z%vBxha#tw;`t8huBSyjC>|;vGACdPan3#r+w^nd6hcDLe}N5{Dv#2{1G&U9{Ze8+I%es zzz(-cXSc!4q#&gG;wE(OhDg;KuV2t~T`&9>eU~QBdfG9A9ECQ%Y>6qnr{Q$qP7~c3 zvC&G;r5h%CtbT%ij=Z~;mSWMi)ibU))t?g-7hP8${nY6dMhRmyjVSsjeIon?*k;pc z*+o)AgcSj*qbj^q(!UT(vYwdqHm7YC(y^C+bEYQ~L{|{a!hPBfEipPYKhKh_L;+7+ zyU-1z;ih9a{n2qBhgpYPzR2}IuM}cK@ceXNXv3V0zw2F##MY`S+P&v$jB>*O>fON)-KDShej#LSb zf;a+$W|V$uuXtC;0Nk}bs!lPZu2J7B@AI}zS8YdNn}l|_&EsLpgc|?78hOEu?)EO6 zp~8nkCXvdW*GRMjnrH(<+ZUt+-(gi&!0tQM2VqBb$vpOMb#keLdL(te96IV1SJV9D z7(eY))4{oMBwiKX8Ra43K%YDwV;SqMpDgH_7-qx~iYlCo^9)0qhsv2^SPKQ)45R3F zm}|SbM{|Q}4!gt*-UuzeYwmM9DzSFa%BJRbe$oHdWuH|7(If%~lv!07O?!#6;A~J7 z_)U@+w>R5FccOVJPZBSr-E177rP#aG4$vzpP{@cl&slkquVs7yt3kXg`c3xvQS{YY zGAZN-5B&6~x1uL0AG+->(}gA3AB-yV9QhktOC{EoxX>vmTN&f*2zm)ap^@sAvUEZP zLMjEY+&vytIsCa!T;vPS4IX65*M#Tu57>!s#tqO1vsTcTQ{E_OobTffq4;mF&^$q&XBbPH^X=d?_ z=^dk0Eivx_fX#M5$*e8ouTX?Oj+Cj26&xf&%brV@9$z1_hV_s45S$?bt!)=9gvZvMnn^NERP;+^upNl`;gLM8LZodZbk)JU zmDjSkp6v)V#pt-&AutjUNrU7(A8^^zDuyz2R7>LX$c@K_)L1h7dqa!#@JtF^^1wx4 zm_xi%9wdS2u=`__+!2#&umK(in^4A&_`6#EP>85XzH???2OwJ7TfyLyAwhRUe`WDemvh2yU0 zs0T#}jvoTm=hX06_H_91>O^@L!AX4p_E@p~gNHtGVG-^g8ERwg@hl;;-2JMg%U)V! z;(z%g4&<4(=O_LmHEhQE6ICmc>ut`jjhi2z8!4C%d2tHPV;ev{zR?eas|S3kXye&R zz=@}Woy?|+G@^mi?p_2>4b3J}S#x5SX#wgs4@fO73R#A1z#SV` z_l&fnTIE{oi5lz697t^$mk z#gNT0zJp*P;RUAI*Zs;f5fob1!|wJI@Eq>~bonY3g83eh9=kWPH{e$`F_aY!_eT7# zdXgaJDLA5w0jjbVq>v=Ll#C?RnPKiyadAPqg$IJ;AKdOO|z@bL;dIy z@W|$qAJr5H@?wu%a#B^cTual7k2%;M=nKI|Ehw9ne5SUmlHO;6Q+_i z>R#$;*r5&7gjr_Nn22lWAeqEryg#zFSRiVnNzb$>T?E-Xc^eEyQXe)dQ?1r+=7_J| zu9Oy@7+xILU_M0yg59C!C$SUCK((Xfxs^BcpWnW3Qe20L4bUx$W5yvp&R#4eS9Bte_$Z-Ylxa$zBp{|TVhc)W z0``9be*%mqF0DzSIHzLzE2BHlA7c%|7 zq<;=+zuRq$BK{LeNCdvAQS*WDWUooqM}b0vyfjd9SZtwyz}(!hnk1f5eAyQEag(Fb zJ*FY)2%X%kLv4ASm0{-^CS;kGX7;^s5S&y07TH+OYxZm8*tT~MC0C{Es`7@rTF}*! zE!}ac!_a6%SHpYi`VUP{_|SEGk3(SZo%S(^^^nik>v*pB1ngVkSSs(yq!#1sL!Nt5 z2wvl+TFa5|ZhQGPPiX1^=QVO;IxLz3yEdTWF3kY?#0f!DmqUL_E40GWiNGlrD-nypwC)YssRVW3 z^7L@TB?O3osDE20fS`a~R(Qi5+Vp+%7^`-0+ZInvj{cG{H25688(}ugZLxl91fY&5 zFZ8Qt3;`TG2;xLwmLQCcO~MYnskFMEhDVm6cr3sAwKqD9Q$fqEzktC@-X`1~j3sr~ z)4Eq5hRuu)JBH?M8G8adRF&9GM$~BGWT!5Ku2_w}Vv9z@L2Y0Pr~&tWegr1SJAZo$ z*a-ddmJvdKygdQF)(pDq1R@!*rEgjN+N0}Nvz@tgUcHymUlDwB;O82?pqZP@%Szs! zEZ#{>ag5Kg5A3Y%hOa~H_eNgK@Mv?tF1Dt%Xc^ejxErw!R&z$5!dN`8zs94yLFdL$ z13F;>@NEyj>oAMXuuiv##?_e?x!4!JtKuHtT1h*XPLPAUKsR|iZ?K(od@!D1UBC4= z<;<|y8Tg0BoD1b_Ve3j_n#VqXtOqzseFEUEU03j9g8ROJgAE|)md-xegz&eg*0!9P zXQO{oF_wFWzD^R*FoOY>6!h@f*7EtT;aLjUK?#Jyhj@Lv76vKk*YXG?^>Qv2AQg*c z$((?BSqTk|axMLq%rujpV0}UlH?frJ{4WE+?#cN1T?$3`#eEsX2txAkO*N0__%GrB zY(sr}AqT||8D_pG4(<;R87qu>3@P-ZVqEGYN9Jpn;Yu53hS8!qp4YUvW>RN(t?`O_ ze07|x+FS5~pf@(WI|O15)B8c}wW;y5t}@F&!vq{A)cOXei*9a7u-SQKTNrlSzo;%Y zSm6h=9a`kk0jXAP93F#0?KSIwp6-y2k>F|P?ryyxk`}`<0~gjq_}KcdMT#Gi8lBPg zM{%Oxk8?ckk-hD;bA7=A%;6f`tWF$^0xnEnJC6E>&ULQ2c3PsyHqFGc1%QEenp!V( z{J(Qo@ISr-pAx{Dux;Fwsz&@_u1X8Y=Vf(f$$G_7gwdj3+TqU^Y~}w0jlJ~ z1%Aj7<+23jbqj&>MX2`WSg}!L{HhFmFJ_uTC^BxJnRQsZBEv3koch%d54M9CScCrg zNH+vb{PmElr2SvMfgY?f;O89rt*GR*!>|*$2$SHYMH+ssuz&+lZUSfsy=n-yOF+Vq zfWuhIx){#BG?5ip)liXGpd*^%OYln~ zDe;a*o0`<#IM2=I2bxVX%znn=2!05p^71Dv2T`oydmxE@z}I{aLm|Q1B9b+Z)a{YM z+DGb+sF=9pTBFqhUeN91h=(mDhb?g=tu%zKKGf|tn7CK1@mfL8XpS3V@f!(=8yu;d zvB8_u^@py;&d%F{wy^73qgOZrwrY~LFY1n+NRFK&i5n?%b3V}REarBEtzIDQJQVF+ zMq^hJqgS|6wsN9kH#CRK`CTEK+lYs{Qe$1bshd`i?JFaRUNl7qfB&n`3bUQ>o@PJh z)NJC)qH=W}twV`lT+?yZGD0+EZsg3OnT*Fu+vi4GheFMsdEV5U6~7hr0nQeFDu6Yk z&j#-()v-=%JZtMbUn}v)MjqUGR`gMsupPJjChx&EW7apzNv5ZZmG9yqQES{q(#iC`)teRr-XsTqCY7$E^C}slH ztumqTS%iqh{6l0SaTzMf=&8mMk?@(sPm9w(Ehr?THN+(q)ZpOed8*?YL9}{aiwj6< zD(ECOc`hmyyv5DX=R)lcRo>vi+eu;Fay-@P&Zl10m5NV<)jDuGrZ~`NfCX+x1vg4^ z(Db-}buTKEeZ;NOgwilaI=uN$aXn7o7Z*Hb!@5^GC{^(1*NV(gKdbVrH`BXno9NF?br68yf zcOwaw4v8n_27O~3}fT1Eb+UX6Ahe;^8gtpPQPc%WGw?+~DNU}Jo}694m% zMoM1*P(^@_v|2?1(EQFfC{Rc6QQvM!z$Iie^e|xZpYwTqQvUh!k{WqD7yt8<3RL+v zd*>z2e++i@pM!P($6!4_gSo7(p6P$9@w>gDLOJUA-Va24xD^Cqq9P2h zs|S2PKiLQ>=anx$G+sm=b_qAAB`CWDC10u%gLeo(HdN%rtHvPNs1XzT6&EWGDO-%G ziYR8q+ory!;=G{F5f7DoFjsKLRk+@=cm3Tq#pmVEl0Hi>I#W|TsSq`*f_)5YsLWre znCr`HCg+ljnMR*_RaK~pGUHzO7X92!IoFnOo_y&&i$3PBSU68fQG_ezvxUfl%i$Xit<_Tb;UID$S2xvvzml*HXY~*+iNujj8r5V=Mis~@n zRVRG_)tqMeOSL|uYv517~x>3%|IW;ZUs?hlK`SG*PrLfGC$i$$#;Q$YVIzM!0r z*R!28J~5{->3&?_&bPxaXShOU9quY@KMBM^IFLT|K_zjjySOyJw zOf|dgQu5m#QSN)&m1QLY)zSkD7@rB)RC-e=8Dj%q$85mxraQDvZKx-6dBd1qTM-5k zy@v#mv|(8$EVa9R4|3qUemoFyu#DLuN8VhxCgqn7%($^H+Q(_!mFJ}mf{eZLNNYjw8|t@1m!cr&tjjj8<`JYw%L1~88O!->EkT>hffY# zP04)dh^bay1RaIirHvvCHhz2!S1(GG4M~+dvALIz%*NM5;h{|LG?9w!W~f{=7&EJj zhoBc(0rU%&I`GX>WsO7ltzl`_qUHe#BYi;bSuITgMb`V5T+XOr_u(Cgi4bA!9LO= zOXsF`_3CZqKa5Nqbp*_k!bWTa*o=n#GZ5$^;9(Vk?f7jqcWpS5H>y|4>`9f zH9}*p?PDHxr%J%Ii|rfdaV4Es?(~s_?Dx8g*dY_DKuKE`==y~VQy`|3=y0#fQOR4P z=<&DCOiriM9-2!B#xIAU*_TbdZ~c3PEtEl@zK&n{fAACT1uGKypoD7YVevTc zV{zOMyP(_?ITbA^p=0Hb_YJ662Rc|Me-o_tPgVoel+snMypmFN0(#T~nQC3I=xJvk zVy}~l18$G4F4OL=PALlUqK?MAwa?{E+Oo6-!EZ;scSt_ zU^4$h!pePvqRx=-zofB5*FnZj6$;JIKi)w0A z{UZ$!dfOkcz(vLKQ$-r(j<*GlF|le1suJgbYV3g(Fe)^yCknBMKLu{zxeo-l9()fTE z1q1l`Q^OvG2N~$x>u+)`ok<6@|rq4t_ zr6^%LiMpf{&Aoc2PWHff_dc>Vj5&=Bh$VPhLY!ApAUxhGqEG!JYN7O;kTZ~6XUPSo ztj^QFWpW9Iz@qC*FItw*5uiEu49|xEaf{+fBuHxE9oDTT%Se?3qpyHrw$jP3f{H`> z0XN@rXDCt{FRjf(#-*RJv%W&C50D)pP`3&n!t(_`+T{Hh{LA}96T2O8{FCADFYy0K zfI56p2Sog_S;G7wLH)ZpZ~w`_{cmah|7J(0renAMpN^+<=tu>F66;sjE$~*+fKx_GV)8`-7m3(z3v1)B|z%_)L_86RqZHD6u zfd@#{nrog}Q70mh)n}-i*lu7T+%v88tHm>HTnIH)!V2NkpbEW#C*BPqC)^TJyjBC; zCpZlp(&!RjlN<7;@x@x|4}V4#3(b-k5r2#45e85U|FUoAFCofGqm!6M`h^|1}AS1Dujc!6)TD&N_ z>D->7K*|L|JtV2@P#kD2BG8cqBvoL&QQR`CTgchxd z+-svW(6$i=s#`lTd^f~;@Pk+evPj+P+^+p1J^HI*RJDu*@;Cj?AqCiRBI`t55aYF< zx8^()!||G9Mwfid0(A}~W%a9<8SxZ9<5;(ohQ^UsW=gtC3RFe|Z+h4JZ*^kz;b2kI z6@lnD8oBLA;0hNe3P~Ku0N<)c?O_$FZFptoI>H|j^r$f_J0ZyA_p$R8E%Ow@O_mJ? z$6T*pBmm;%Va)|r{Om?Jr_)$*)9z5N`0q|J@P&W^Bq}=|yckXp?2O6`G0QPP{6pfeaWU8u4_L0qaAC{+Jym?ht!2%-Z`58C4pG%=}PirP4@($;QWoU9v0ova#pAc4l$DBO0vgAb8)sfHS?d%LFD}q*vxYlNr6DyvFfFT@ zoA{O-;rC`S#`%ElXhAy)@*u5;w(ZKFHVx*p5f9D*e}@^C0RirCZ2ViaF)=ET#B}!# zU0bNXR<~-=*@6p}U*_JsZ44(3q&k);(MSc~#6e<{U@xuIoTA3k`S`H^r~vU)h-m8F z7Yy}wPX(W9^<~Tcke`y1KUjN&2i;SC&*9}kh=2Xs(ItKpaPChkw!9;vaQey`7rKPvD!o~;Ub!?sweXa3_jiu|`UZBOtuVcbW|emvBu`ec+cR5v zx_1;H3j6uB$JN~7=i){Je#LkE1UoZ(Z*k-dK&Ut?oH?_1-S-nT+>o76i zSWa1D)^_1}e?qzWRp4$XMMDz{iS@%1#8eMo2-UjPFL@$gxSkqzui2ZTSgM{0Q-)2? zEc}k*1U=KPepCu!b8`VoDM$l_EA8nD4t-20^)1K=kCP6I96>KqXIOMs$#W80-Tmm0r?uH3F!i)+@ayiRrk<- z06Jaw1yeqHvMtFL2*s2#E!8gr!wc~ne5>X)R_4i>v#qRFJ9FBLzX_!_%^p|T`fC(M z$u;7b>*Ja=cos@#D!*3nP@9vBp~qV_x)ShMG8@hlo*P&@_U*eY8C8B;3Sl0Nj!aLX ziHo9738_lG)>1Huo>2aTb-HX{8!s8hoFhP~ND2*rp-dy8JG zQf-9|Tb^fb9>*LD($j6Rsu}c<|Ls~aVT5Q+1#|GjQ)<(UQ*iaHjueY?ombp!tyIjY z7PA^Ut!xRHtDAdXHWEbdApJFwD3HwDf;iO3SdD$M?&OEP!jSc8Q0X>9K@lb2Xp#lO0wxDg%GP8*!#c zI6s^LJX8TAI0>VDFa}~_WfT@WBJMTc_u9V^4QJc)*y49IWtBin|?Bd zKjQz;_D(^fMA4RDS+{K4wr$(CZQHi3Teff6wr$(4srR}krn{r3qkrD{*qL!6KlV=^ z?7i^4B<&0-V9)#zgcUdZ9rGiw+6%#7@8ZO=EgQl@P=d!8$tM{^eux@VNFQ@|7T}PL zTWA*~?0z^R&_9(ih`?y?hS2w`V*vpp0zNq9*DZFtehYZne5_xJrD z*DVVOzsj>YVPBkW(^-|+PA(6F>IDbW45sGc>zj_=IAVLeN4pY9@}8rKZlbJ=%G2U+jIrmOCYU8gJx#<6cam6DpFNpe2G@}yC22VjFAF}_T-OGu25RLYP6O_N;ya=v2Z6O?Y9kT+rJA<( z&3l5Jo5^k4l`wi#wm|Om{vXY}&^_A_!k<U)-CG4jZ)&tJs!ZA0*tCq_fNww(jdoimnoTKRPx;nC zdil0~Ock0{2WDg6huN#Slc{d-kp)T#biqYCT}k_aIH!6zew8z^a`A&Xry7Sxh@Yvj zr30?B)SeSE`XAL=v+R~5~WZOMHJ%E@kyrZutdd4?V{q**L6}^pD(^%iTwJBXF~4v&8;6kJJ(lN z5^TS`y_G^KDAmAHS$-sp2x-XlRnAeie}cSK%*{oxU)~?*siuYGuFTt}a9!h&sm;og z#~2bKR0`oovAB`+3xwB-iVy-Gf^(GAxWZ}9vIZ?hG33g*4({EH1(U|l`~)JqMrK_= ziQ`CL$f!Wy3?Y(73DAHN4!AZegbM|!B!YxW1!dI<{X?Bl9jE9O>cJFa(eBl{g=FPw zZ>mn_1j)3BwvwCX`DR zQuW4~q9M;8al#RB3jB4CCF z{rlJ`%${f`)vo9tQ4mOf^`)ehkbnqJ3f$tz#JrlP|pNLSEu% z%h)q$I`5|-MmN0p?ysp>-h_6-sUH!(E}I2w2p_E(b~7i3Z->%mNF%teV-Da+9|Z^7 zb6&w6xS3l56Tob@&}JdWtKnD-9V zA53<(LWA+ZIx{Yt32?Mtmj49cHtQ0;0O6SNw2~qSnywQJP)yh~)~k{J`KnsBtWbn#eM z(96Nif!@i*Q`l-j>`Hb^2a=OH3dLb1)rfV?^jNW9TStP)Yi_xXCzukeR>{xqc&aMKa+k5R`IeEow{R~D2>!%dfsSJO>wX2-x>gH+`_=WJQ_3M2p zftH%6?2rl0TAnmZiAs7bfIXi)vm4_Kjc z!ScU{L2!?s8LI?J0^XaWBZ>a6)XD}ZIdu61cF1npqSlN=ICLYEGu+@<)vFQh+*;wW z5S@q@Ws{+_4G@upABb7ewQgK%F#^d&*`6nDZlyhun3cE`;b;XeVSf3m#ENmq(MdHX z6)e5w%$1^no(95WirLgzrwy`*0q#UfW zsgO(Oy~L%4uT|}9V}vk#~?1RLHJZVwXYjcd7k$2M{X#h8rcWy(r?eGpE7~9NZkj~ zr-xZ$byCOCx}+bC=GrO`(aeh!%g_G<9tSJ9Qxu(4msS+v_b#ITUspBzm9rFO{O>!U zi#FSy8NB=Qx_l+o!2+yZWm9bAcms}0OLD@|(p9riQWtUiHUBkCU3x}hNh=&OIy zx3H#hsDjLb>OBKloV2|}&Yu^VCR5rwfPqa{@gTik!VlN~+|1ddkI(ek>v)-BLO?os z{lZyN%-l=))zeX(3QqUnw@($%WFp*H%tAqrp-waXAaP}Gwzu7j&*@j3CNT(76l_gx zj*TOd0VcFF3-Mxmb@mXihldK{n@t2Y)}5U0ltW1lgtYBSQ_r^33~UkKoevC(q+&K( zO)%w$TzgGYMes?T+KEsRnA*{wnn`~==Z!jFM!dW*a1zH5P_fKHaF}XXTjzp0cl;VM z#Au4^>u4r?iy5Xbmo|$F+WpdyBpCFiufT`JNRNF?yv&>FLr6_aiE3)C7?cUzST5c)YnhzFWPV+!+Sx;* zm2sjQ*1galBDirM`bakEVm)yNJ1#9}>R2n#d46rbwm|1>yYtuK45}CuTOQ~>bkthX zcPxtvb;XD_i966^KZ4=Fd|2u=gC7uGVr}GqA@ulft96KG%%TD%LJeu&QAb#t#n_$FOa&+V#^e0Tz@^IoPq| zqp^eq)raa$up8QRE_I)sT``tv%8{KoHxWGZZ;Qa(? zZ$UqThc*xM*hZpeYxJs9TSkf-E#J#zO4oS4WYaF$HiaPsh7bO1+is{yE`ip

  • g)iU#uys@< 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 z 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 Date: Sat, 13 Jun 2015 18:14:51 -0400 Subject: [PATCH 48/96] integrate a copy of SPI from STM32F1 into STM32F4 --- STM32F4/boards.txt | 6 +- STM32F4/cores/maple/libmaple/HardwareSPI.cpp | 37 +- STM32F4/cores/maple/libmaple/HardwareSPI.h | 45 ++ STM32F4/cores/maple/libmaple/dma.h | 1 + STM32F4/cores/maple/libmaple/dma_common.h | 112 ++++ STM32F4/cores/maple/libmaple/spi.c | 102 +-- STM32F4/cores/maple/libmaple/spi.h | 174 ++--- STM32F4/cores/maple/libmaple/spiF4.h | 99 +++ STM32F4/cores/maple/libmaple/spi_f4.c | 85 +++ STM32F4/cores/maple/libmaple/spi_private.h | 37 ++ STM32F4/libraries/SPI/keywords.txt | 31 + STM32F4/libraries/SPI/library.properties | 8 + STM32F4/libraries/SPI/src/SPI.cpp | 648 +++++++++++++++++++ STM32F4/libraries/SPI/src/SPI.h | 363 +++++++++++ 14 files changed, 1549 insertions(+), 199 deletions(-) create mode 100644 STM32F4/cores/maple/libmaple/dma_common.h create mode 100644 STM32F4/cores/maple/libmaple/spiF4.h create mode 100644 STM32F4/cores/maple/libmaple/spi_f4.c create mode 100644 STM32F4/cores/maple/libmaple/spi_private.h create mode 100644 STM32F4/libraries/SPI/keywords.txt create mode 100644 STM32F4/libraries/SPI/library.properties create mode 100644 STM32F4/libraries/SPI/src/SPI.cpp create mode 100644 STM32F4/libraries/SPI/src/SPI.h diff --git a/STM32F4/boards.txt b/STM32F4/boards.txt index 4c83f80..8c919f0 100644 --- a/STM32F4/boards.txt +++ b/STM32F4/boards.txt @@ -19,7 +19,7 @@ discovery_f407.upload.maximum_size=108000 discovery_f407.build.mcu=cortex-m4 discovery_f407.build.f_cpu=168000000L discovery_f407.build.core=maple -discovery_f407.build.extra_flags=-DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -march=armv7-m -DSTM32F2 -DBOARD_discovery_f4 +discovery_f407.build.extra_flags=-DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -DSTM32F2 -DSTM32F4 -DBOARD_discovery_f4 discovery_f407.build.ldscript=ld/jtag.ld discovery_f407.build.variant=discovery_f407 discovery_f407.build.variant_system_lib=lib_f407.a @@ -49,7 +49,7 @@ stm32f4stamp.upload.dfuse_addr=0x8000000 stm32f4stamp.build.mcu=cortex-m4 stm32f4stamp.build.f_cpu=168000000L stm32f4stamp.build.core=maple -stm32f4stamp.build.extra_flags=-DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -march=armv7-m -DSTM32F2 -DBOARD_discovery_f4 +stm32f4stamp.build.extra_flags=-DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -DSTM32F2 -DSTM32F4 -DBOARD_discovery_f4 stm32f4stamp.build.ldscript=ld/jtag.ld stm32f4stamp.build.variant=discovery_f407 stm32f4stamp.build.variant_system_lib=lib_f407.a @@ -79,7 +79,7 @@ netduino2plus.upload.dfuse_addr=0x8000000 netduino2plus.build.mcu=cortex-m4 netduino2plus.build.f_cpu=168000000L netduino2plus.build.core=maple -netduino2plus.build.extra_flags=-DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -march=armv7-m -DSTM32F2 -DBOARD_discovery_f4 +netduino2plus.build.extra_flags=-DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -DSTM32F2 -DSTM32F4 -DBOARD_discovery_f4 netduino2plus.build.ldscript=ld/jtag.ld netduino2plus.build.variant=discovery_f407 netduino2plus.build.variant_system_lib=lib_f407.a diff --git a/STM32F4/cores/maple/libmaple/HardwareSPI.cpp b/STM32F4/cores/maple/libmaple/HardwareSPI.cpp index bd5425c..cf591a5 100644 --- a/STM32F4/cores/maple/libmaple/HardwareSPI.cpp +++ b/STM32F4/cores/maple/libmaple/HardwareSPI.cpp @@ -65,12 +65,12 @@ static const spi_pins board_spi_pins[] __FLASH__ = { BOARD_SPI2_MOSI_PIN}, #endif #ifdef STM32_HIGH_DENSITY - {BOARD_SPI3_NSS_PIN, - BOARD_SPI3_SCK_PIN, - BOARD_SPI3_MISO_PIN, - BOARD_SPI3_MOSI_PIN}, + {BOARD_SPI3B_NSS_PIN, + BOARD_SPI3B_SCK_PIN, + BOARD_SPI3B_MISO_PIN, + BOARD_SPI3B_MOSI_PIN}, #endif -#ifdef STM32F2 +#ifdef STM32F4 {BOARD_SPI3B_NSS_PIN, BOARD_SPI3B_SCK_PIN, BOARD_SPI3B_MISO_PIN, @@ -96,10 +96,10 @@ HardwareSPI::HardwareSPI(uint32 spi_num) { this->spi_d = SPI3; break; #endif -#ifdef STM32F2 - case 4: - this->spi_d = SPI4; - break; +#ifdef STM32F4 +// case 4: +// this->spi_d = SPI4; +// break; #endif default: ASSERT(0); @@ -138,6 +138,15 @@ void HardwareSPI::beginSlave(void) { this->beginSlave(MSBFIRST, 0); } + +/* +void HardwareSPI::beginTransaction(uint8_t pin, SPISettings settings) +{ +// this->begin(settings.clock, settings.bitOrder, settings.dataMode); + this->begin(SPI_1_125MHZ, settings.bitOrder, settings.dataMode); +} +*/ + void HardwareSPI::end(void) { if (!spi_is_enabled(this->spi_d)) { return; @@ -300,7 +309,7 @@ static const spi_pins* dev_to_spi_pins(spi_dev *dev) { #ifdef STM32_HIGH_DENSITY case RCC_SPI3: return board_spi_pins + 2; #endif -#ifdef STM32F2 +#ifdef STM32F4 case RCC_SPI4: return board_spi_pins + 3; #endif default: return NULL; @@ -353,7 +362,7 @@ static void configure_gpios(spi_dev *dev, bool as_master) { disable_pwm(misoi); disable_pwm(mosii); -#ifdef STM32F2 +#ifdef STM32F4 if(dev->clk_id <= RCC_SPI2) { if(nssi) { if(!as_master) { @@ -363,9 +372,6 @@ static void configure_gpios(spi_dev *dev, bool as_master) { gpio_set_af_mode(scki->gpio_device, scki->gpio_bit, 5); gpio_set_af_mode(misoi->gpio_device, misoi->gpio_bit, 5); gpio_set_af_mode(mosii->gpio_device, mosii->gpio_bit, 5); - //gpio_set_af_mode(GPIOC, 10, 6); - //gpio_set_af_mode(GPIOC, 11, 6); - //gpio_set_af_mode(GPIOC, 12, 6); } else { if(nssi) { if(!as_master) { @@ -375,9 +381,6 @@ static void configure_gpios(spi_dev *dev, bool as_master) { gpio_set_af_mode(scki->gpio_device, scki->gpio_bit, 6); gpio_set_af_mode(misoi->gpio_device, misoi->gpio_bit, 6); gpio_set_af_mode(mosii->gpio_device, mosii->gpio_bit, 6); - //gpio_set_af_mode(GPIOC, 10, 6); - //gpio_set_af_mode(GPIOC, 11, 6); - //gpio_set_af_mode(GPIOC, 12, 6); } #endif diff --git a/STM32F4/cores/maple/libmaple/HardwareSPI.h b/STM32F4/cores/maple/libmaple/HardwareSPI.h index c4f7806..327f29d 100644 --- a/STM32F4/cores/maple/libmaple/HardwareSPI.h +++ b/STM32F4/cores/maple/libmaple/HardwareSPI.h @@ -37,6 +37,7 @@ #include "spi.h" #include "boards.h" +#include "wirish.h" #ifndef _HARDWARESPI_H_ #define _HARDWARESPI_H_ @@ -62,6 +63,42 @@ typedef enum SPIFrequency { //#warning "Unexpected clock speed; SPI frequency calculation will be incorrect" #endif + +//#define BOARD_SPI_DEFAULT_SS PC13 +#define BOARD_SPI_DEFAULT_SS PB0 +#define SPI_MODE0 SPI_MODE_0 +#define SPI_MODE1 SPI_MODE_1 +#define SPI_MODE2 SPI_MODE_2 +#define SPI_MODE3 SPI_MODE_3 + +/* +class SPISettings { +public: + SPISettings(uint32 clock, BitOrder bitOrder, uint8 dataMode) { + if (__builtin_constant_p(clock)) { + init_AlwaysInline(clock, bitOrder, dataMode); + } else { + init_MightInline(clock, bitOrder, dataMode); + } + } + SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); } +private: + void init_MightInline(uint32 clock, BitOrder bitOrder, uint8 dataMode) { + init_AlwaysInline(clock, bitOrder, dataMode); + } + void init_AlwaysInline(uint32 clock, BitOrder bitOrder, uint8 dataMode) __attribute__((__always_inline__)) { + this->clock = clock; + this->bitOrder = bitOrder; + this->dataMode = dataMode; + } + uint32 clock; + BitOrder bitOrder; + uint8 dataMode; + friend class HardwareSPI; +}; +*/ + + /** * @brief Wirish SPI interface. * @@ -226,9 +263,17 @@ public: * @see HardwareSPI::read() */ uint8 recv(void); + +// void beginTransaction(SPISettings settings) { beginTransaction(BOARD_SPI_DEFAULT_SS, settings); } +// void beginTransaction(uint8 pin, SPISettings settings); + void endTransaction(void) { } + private: spi_dev *spi_d; }; + +extern HardwareSPI SPI; + #endif diff --git a/STM32F4/cores/maple/libmaple/dma.h b/STM32F4/cores/maple/libmaple/dma.h index cce8995..a965c03 100644 --- a/STM32F4/cores/maple/libmaple/dma.h +++ b/STM32F4/cores/maple/libmaple/dma.h @@ -32,6 +32,7 @@ #ifdef STM32F2 #include "dmaF2.h" +#include #else #include "dmaF1.h" #endif diff --git a/STM32F4/cores/maple/libmaple/dma_common.h b/STM32F4/cores/maple/libmaple/dma_common.h new file mode 100644 index 0000000..15dfab9 --- /dev/null +++ b/STM32F4/cores/maple/libmaple/dma_common.h @@ -0,0 +1,112 @@ +/****************************************************************************** + * The MIT License + * + * Copyright (c) 2012 LeafLabs, LLC. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + *****************************************************************************/ + +/** + * @file libmaple/include/libmaple/dma_common.h + * @author Marti Bolivar + * @brief Common DMA sub-header for and . + * + * CONTENTS UNSTABLE. The existence of this file is an implementation + * detail. Never include it directly. If you need something from + * here, include instead. + */ + +/* + * There's a fair amount of common DMA functionality needed by each + * and . This header exists in order + * to provide it to both, avoiding some hacks and circular + * dependencies. + */ + +#ifndef _LIBMAPLE_DMA_COMMON_H_ +#define _LIBMAPLE_DMA_COMMON_H_ + +#ifdef __cplusplus +extern "C"{ +#endif + +#include +#include +#include + +/* + * Devices + */ + +struct dma_reg_map; + +/* Encapsulates state related to user interrupt handlers. You + * shouldn't touch these directly; use dma_attach_interrupt() and + * dma_detach_interupt() instead. */ +//typedef struct dma_handler_config { +// void (*handler)(void); /* User handler */ +// nvic_irq_num irq_line; /* IRQ line for interrupt */ +//} dma_handler_config; + +/** DMA device type */ +//typedef struct dma_dev { +// struct dma_reg_map *regs; /**< Register map */ +// rcc_clk_id clk_id; /**< Clock ID */ +// struct dma_handler_config handlers[]; /**< For internal use */ +//} dma_dev; + +/** + * @brief DMA channels + * + * Notes: + * - This is also the dma_tube type for STM32F1. + * - Channel 0 is not available on all STM32 series. + * + * @see dma_tube + */ +typedef enum dma_channel { + DMA_CH0 = 0, /**< Channel 0 */ + DMA_CH1 = 1, /**< Channel 1 */ + DMA_CH2 = 2, /**< Channel 2 */ + DMA_CH3 = 3, /**< Channel 3 */ + DMA_CH4 = 4, /**< Channel 4 */ + DMA_CH5 = 5, /**< Channel 5 */ + DMA_CH6 = 6, /**< Channel 6 */ + DMA_CH7 = 7, /**< Channel 7 */ +} dma_channel; + +/** + * @brief Source and destination transfer sizes. + * Use these when initializing a struct dma_tube_config. + * @see struct dma_tube_config + * @see dma_tube_cfg + */ +//typedef enum dma_xfer_size { +// DMA_SIZE_8BITS = 0, /**< 8-bit transfers */ +// DMA_SIZE_16BITS = 1, /**< 16-bit transfers */ +// DMA_SIZE_32BITS = 2, /**< 32-bit transfers */ +//} dma_xfer_size; + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif diff --git a/STM32F4/cores/maple/libmaple/spi.c b/STM32F4/cores/maple/libmaple/spi.c index 1b58e99..194a82e 100644 --- a/STM32F4/cores/maple/libmaple/spi.c +++ b/STM32F4/cores/maple/libmaple/spi.c @@ -1,6 +1,7 @@ /****************************************************************************** * The MIT License * + * Copyright (c) 2011, 2012 LeafLabs, LLC. * Copyright (c) 2010 Perry Hung. * * Permission is hereby granted, free of charge, to any person @@ -25,57 +26,17 @@ *****************************************************************************/ /** - * @file spi.c + * @file libmaple/spi.c * @author Marti Bolivar * @brief Serial Peripheral Interface (SPI) support. * Currently, there is no Integrated Interchip Sound (I2S) support. */ -#include "spi.h" -#include "bitband.h" +#include +#include static void spi_reconfigure(spi_dev *dev, uint32 cr1_config); -/* - * SPI devices - */ - -static spi_dev spi1 = { - .regs = SPI1_BASE, - .clk_id = RCC_SPI1, - .irq_num = NVIC_SPI1, -}; -/** SPI device 1 */ -spi_dev *SPI1 = &spi1; - -static spi_dev spi2 = { - .regs = SPI2_BASE, - .clk_id = RCC_SPI2, - .irq_num = NVIC_SPI2, -}; -/** SPI device 2 */ -spi_dev *SPI2 = &spi2; - -#ifdef STM32_HIGH_DENSITY -static spi_dev spi3 = { - .regs = SPI3_BASE, - .clk_id = RCC_SPI3, - .irq_num = NVIC_SPI3, -}; -/** SPI device 3 */ -spi_dev *SPI3 = &spi3; -#endif - -#ifdef STM32F2 -static spi_dev spi4 = { - .regs = SPI3_BASE, - .clk_id = RCC_SPI4, - .irq_num = NVIC_SPI3, -}; -/** SPI device 3 remapped*/ -spi_dev *SPI4 = &spi4; -#endif - /* * SPI convenience routines */ @@ -89,42 +50,6 @@ void spi_init(spi_dev *dev) { rcc_reset_dev(dev->clk_id); } -/** - * @brief Configure GPIO bit modes for use as a SPI port's pins. - * @param as_master If true, configure bits for use as a bus master. - * Otherwise, configure bits for use as slave. - * @param nss_dev NSS pin's GPIO device - * @param comm_dev SCK, MISO, MOSI pins' GPIO device - * @param nss_bit NSS pin's GPIO bit on nss_dev - * @param sck_bit SCK pin's GPIO bit on comm_dev - * @param miso_bit MISO pin's GPIO bit on comm_dev - * @param mosi_bit MOSI pin's GPIO bit on comm_dev - */ -void spi_gpio_cfg(uint8 as_master, - gpio_dev *nss_dev, - uint8 nss_bit, - gpio_dev *comm_dev, - uint8 sck_bit, - uint8 miso_bit, - uint8 mosi_bit) { - if (as_master) { - if(nss_dev != NULL) { - gpio_set_mode(nss_dev, nss_bit, GPIO_OUTPUT_PP); - } - gpio_set_mode(comm_dev, sck_bit, GPIO_AF_OUTPUT_PP); - //gpio_set_mode(comm_dev, miso_bit, GPIO_INPUT_FLOATING); - gpio_set_mode(comm_dev, miso_bit, GPIO_AF_INPUT_PD); - gpio_set_mode(comm_dev, mosi_bit, GPIO_AF_OUTPUT_PP); - } else { - if(nss_dev != NULL) { - gpio_set_mode(nss_dev, nss_bit, GPIO_INPUT_FLOATING); - } - gpio_set_mode(comm_dev, sck_bit, GPIO_INPUT_FLOATING); - gpio_set_mode(comm_dev, miso_bit, GPIO_AF_OUTPUT_PP); - gpio_set_mode(comm_dev, mosi_bit, GPIO_INPUT_FLOATING); - } -} - /** * @brief Configure and enable a SPI device as bus master. * @@ -179,21 +104,6 @@ uint32 spi_tx(spi_dev *dev, const void *buf, uint32 len) { return txed; } -/** - * @brief Call a function on each SPI port - * @param fn Function to call. - */ -void spi_foreach(void (*fn)(spi_dev*)) { - fn(SPI1); - fn(SPI2); -#ifdef STM32_HIGH_DENSITY - fn(SPI3); -#endif -#ifdef STM32F2 - fn(SPI4); -#endif -} - /** * @brief Enable a SPI peripheral * @param dev Device to enable @@ -252,7 +162,3 @@ static void spi_reconfigure(spi_dev *dev, uint32 cr1_config) { dev->regs->CR1 = cr1_config; spi_peripheral_enable(dev); } - -/* - * IRQ handlers (TODO) - */ diff --git a/STM32F4/cores/maple/libmaple/spi.h b/STM32F4/cores/maple/libmaple/spi.h index 004fb8d..e69f27d 100644 --- a/STM32F4/cores/maple/libmaple/spi.h +++ b/STM32F4/cores/maple/libmaple/spi.h @@ -1,6 +1,7 @@ /****************************************************************************** * The MIT License * + * Copyright (c) 2011, 2012 LeafLabs, LLC. * Copyright (c) 2010 Perry Hung. * * Permission is hereby granted, free of charge, to any person @@ -25,7 +26,7 @@ *****************************************************************************/ /** - * @file spi.h + * @file libmaple/include/libmaple/spi.h * @author Marti Bolivar * @brief Serial Peripheral Interface (SPI) and Integrated * Interchip Sound (I2S) peripheral support. @@ -33,19 +34,19 @@ * I2S support is currently limited to register maps and bit definitions. */ -#ifndef _SPI_H_ -#define _SPI_H_ - -#include "libmaple_types.h" -#include "rcc.h" -#include "nvic.h" -#include "gpio.h" -#include "util.h" +#ifndef _LIBMAPLE_SPI_H_ +#define _LIBMAPLE_SPI_H_ #ifdef __cplusplus extern "C" { #endif +#include +#include +#include +#include "spiF4.h" + + /* * Register maps */ @@ -63,13 +64,6 @@ typedef struct spi_reg_map { __io uint32 I2SPR; /**< I2S prescaler register */ } spi_reg_map; -/** SPI1 register map base pointer */ -#define SPI1_BASE ((struct spi_reg_map*)0x40013000) -/** SPI2 register map base pointer */ -#define SPI2_BASE ((struct spi_reg_map*)0x40003800) -/** SPI3 register map base pointer */ -#define SPI3_BASE ((struct spi_reg_map*)0x40003C00) - /* * Register bit definitions */ @@ -90,20 +84,20 @@ typedef struct spi_reg_map { #define SPI_CR1_CPOL_BIT 1 #define SPI_CR1_CPHA_BIT 0 -#define SPI_CR1_BIDIMODE BIT(SPI_CR1_BIDIMODE_BIT) +#define SPI_CR1_BIDIMODE (1U << SPI_CR1_BIDIMODE_BIT) #define SPI_CR1_BIDIMODE_2_LINE (0x0 << SPI_CR1_BIDIMODE_BIT) #define SPI_CR1_BIDIMODE_1_LINE (0x1 << SPI_CR1_BIDIMODE_BIT) -#define SPI_CR1_BIDIOE BIT(SPI_CR1_BIDIOE_BIT) -#define SPI_CR1_CRCEN BIT(SPI_CR1_CRCEN_BIT) -#define SPI_CR1_CRCNEXT BIT(SPI_CR1_CRCNEXT_BIT) -#define SPI_CR1_DFF BIT(SPI_CR1_DFF_BIT) +#define SPI_CR1_BIDIOE (1U << SPI_CR1_BIDIOE_BIT) +#define SPI_CR1_CRCEN (1U << SPI_CR1_CRCEN_BIT) +#define SPI_CR1_CRCNEXT (1U << SPI_CR1_CRCNEXT_BIT) +#define SPI_CR1_DFF (1U << SPI_CR1_DFF_BIT) #define SPI_CR1_DFF_8_BIT (0x0 << SPI_CR1_DFF_BIT) #define SPI_CR1_DFF_16_BIT (0x1 << SPI_CR1_DFF_BIT) -#define SPI_CR1_RXONLY BIT(SPI_CR1_RXONLY_BIT) -#define SPI_CR1_SSM BIT(SPI_CR1_SSM_BIT) -#define SPI_CR1_SSI BIT(SPI_CR1_SSI_BIT) -#define SPI_CR1_LSBFIRST BIT(SPI_CR1_LSBFIRST_BIT) -#define SPI_CR1_SPE BIT(SPI_CR1_SPE_BIT) +#define SPI_CR1_RXONLY (1U << SPI_CR1_RXONLY_BIT) +#define SPI_CR1_SSM (1U << SPI_CR1_SSM_BIT) +#define SPI_CR1_SSI (1U << SPI_CR1_SSI_BIT) +#define SPI_CR1_LSBFIRST (1U << SPI_CR1_LSBFIRST_BIT) +#define SPI_CR1_SPE (1U << SPI_CR1_SPE_BIT) #define SPI_CR1_BR (0x7 << 3) #define SPI_CR1_BR_PCLK_DIV_2 (0x0 << 3) #define SPI_CR1_BR_PCLK_DIV_4 (0x1 << 3) @@ -113,17 +107,14 @@ typedef struct spi_reg_map { #define SPI_CR1_BR_PCLK_DIV_64 (0x5 << 3) #define SPI_CR1_BR_PCLK_DIV_128 (0x6 << 3) #define SPI_CR1_BR_PCLK_DIV_256 (0x7 << 3) -#define SPI_CR1_MSTR BIT(SPI_CR1_MSTR_BIT) -#define SPI_CR1_CPOL BIT(SPI_CR1_CPOL_BIT) +#define SPI_CR1_MSTR (1U << SPI_CR1_MSTR_BIT) +#define SPI_CR1_CPOL (1U << SPI_CR1_CPOL_BIT) #define SPI_CR1_CPOL_LOW (0x0 << SPI_CR1_CPOL_BIT) #define SPI_CR1_CPOL_HIGH (0x1 << SPI_CR1_CPOL_BIT) -#define SPI_CR1_CPHA BIT(SPI_CR1_CPHA_BIT) +#define SPI_CR1_CPHA (1U << SPI_CR1_CPHA_BIT) /* Control register 2 */ -/* RM0008-ism: SPI CR2 has "TXDMAEN" and "RXDMAEN" bits, while the - * USARTs have CR3 "DMAR" and "DMAT" bits. */ - #define SPI_CR2_TXEIE_BIT 7 #define SPI_CR2_RXNEIE_BIT 6 #define SPI_CR2_ERRIE_BIT 5 @@ -131,12 +122,12 @@ typedef struct spi_reg_map { #define SPI_CR2_TXDMAEN_BIT 1 #define SPI_CR2_RXDMAEN_BIT 0 -#define SPI_CR2_TXEIE BIT(SPI_CR2_TXEIE_BIT) -#define SPI_CR2_RXNEIE BIT(SPI_CR2_RXNEIE_BIT) -#define SPI_CR2_ERRIE BIT(SPI_CR2_ERRIE_BIT) -#define SPI_CR2_SSOE BIT(SPI_CR2_SSOE_BIT) -#define SPI_CR2_TXDMAEN BIT(SPI_CR2_TXDMAEN_BIT) -#define SPI_CR2_RXDMAEN BIT(SPI_CR2_RXDMAEN_BIT) +#define SPI_CR2_TXEIE (1U << SPI_CR2_TXEIE_BIT) +#define SPI_CR2_RXNEIE (1U << SPI_CR2_RXNEIE_BIT) +#define SPI_CR2_ERRIE (1U << SPI_CR2_ERRIE_BIT) +#define SPI_CR2_SSOE (1U << SPI_CR2_SSOE_BIT) +#define SPI_CR2_TXDMAEN (1U << SPI_CR2_TXDMAEN_BIT) +#define SPI_CR2_RXDMAEN (1U << SPI_CR2_RXDMAEN_BIT) /* Status register */ @@ -149,37 +140,35 @@ typedef struct spi_reg_map { #define SPI_SR_TXE_BIT 1 #define SPI_SR_RXNE_BIT 0 -#define SPI_SR_BSY BIT(SPI_SR_BSY_BIT) -#define SPI_SR_OVR BIT(SPI_SR_OVR_BIT) -#define SPI_SR_MODF BIT(SPI_SR_MODF_BIT) -#define SPI_SR_CRCERR BIT(SPI_SR_CRCERR_BIT) -#define SPI_SR_UDR BIT(SPI_SR_UDR_BIT) -#define SPI_SR_CHSIDE BIT(SPI_SR_CHSIDE_BIT) +#define SPI_SR_BSY (1U << SPI_SR_BSY_BIT) +#define SPI_SR_OVR (1U << SPI_SR_OVR_BIT) +#define SPI_SR_MODF (1U << SPI_SR_MODF_BIT) +#define SPI_SR_CRCERR (1U << SPI_SR_CRCERR_BIT) +#define SPI_SR_UDR (1U << SPI_SR_UDR_BIT) +#define SPI_SR_CHSIDE (1U << SPI_SR_CHSIDE_BIT) #define SPI_SR_CHSIDE_LEFT (0x0 << SPI_SR_CHSIDE_BIT) #define SPI_SR_CHSIDE_RIGHT (0x1 << SPI_SR_CHSIDE_BIT) -#define SPI_SR_TXE BIT(SPI_SR_TXE_BIT) -#define SPI_SR_RXNE BIT(SPI_SR_RXNE_BIT) +#define SPI_SR_TXE (1U << SPI_SR_TXE_BIT) +#define SPI_SR_RXNE (1U << SPI_SR_RXNE_BIT) /* I2S configuration register */ -/* RM0008-ism: CR1 has "CPOL", I2SCFGR has "CKPOL". */ - #define SPI_I2SCFGR_I2SMOD_BIT 11 #define SPI_I2SCFGR_I2SE_BIT 10 #define SPI_I2SCFGR_PCMSYNC_BIT 7 #define SPI_I2SCFGR_CKPOL_BIT 3 #define SPI_I2SCFGR_CHLEN_BIT 0 -#define SPI_I2SCFGR_I2SMOD BIT(SPI_I2SCFGR_I2SMOD_BIT) +#define SPI_I2SCFGR_I2SMOD (1U << SPI_I2SCFGR_I2SMOD_BIT) #define SPI_I2SCFGR_I2SMOD_SPI (0x0 << SPI_I2SCFGR_I2SMOD_BIT) #define SPI_I2SCFGR_I2SMOD_I2S (0x1 << SPI_I2SCFGR_I2SMOD_BIT) -#define SPI_I2SCFGR_I2SE BIT(SPI_I2SCFGR_I2SE_BIT) +#define SPI_I2SCFGR_I2SE (1U << SPI_I2SCFGR_I2SE_BIT) #define SPI_I2SCFGR_I2SCFG (0x3 << 8) #define SPI_I2SCFGR_I2SCFG_SLAVE_TX (0x0 << 8) #define SPI_I2SCFGR_I2SCFG_SLAVE_RX (0x1 << 8) #define SPI_I2SCFGR_I2SCFG_MASTER_TX (0x2 << 8) #define SPI_I2SCFGR_I2SCFG_MASTER_RX (0x3 << 8) -#define SPI_I2SCFGR_PCMSYNC BIT(SPI_I2SCFGR_PCMSYNC_BIT) +#define SPI_I2SCFGR_PCMSYNC (1U << SPI_I2SCFGR_PCMSYNC_BIT) #define SPI_I2SCFGR_PCMSYNC_SHORT (0x0 << SPI_I2SCFGR_PCMSYNC_BIT) #define SPI_I2SCFGR_PCMSYNC_LONG (0x1 << SPI_I2SCFGR_PCMSYNC_BIT) #define SPI_I2SCFGR_I2SSTD (0x3 << 4) @@ -187,17 +176,26 @@ typedef struct spi_reg_map { #define SPI_I2SCFGR_I2SSTD_MSB (0x1 << 4) #define SPI_I2SCFGR_I2SSTD_LSB (0x2 << 4) #define SPI_I2SCFGR_I2SSTD_PCM (0x3 << 4) -#define SPI_I2SCFGR_CKPOL BIT(SPI_I2SCFGR_CKPOL_BIT) +#define SPI_I2SCFGR_CKPOL (1U << SPI_I2SCFGR_CKPOL_BIT) #define SPI_I2SCFGR_CKPOL_LOW (0x0 << SPI_I2SCFGR_CKPOL_BIT) #define SPI_I2SCFGR_CKPOL_HIGH (0x1 << SPI_I2SCFGR_CKPOL_BIT) #define SPI_I2SCFGR_DATLEN (0x3 << 1) #define SPI_I2SCFGR_DATLEN_16_BIT (0x0 << 1) #define SPI_I2SCFGR_DATLEN_24_BIT (0x1 << 1) #define SPI_I2SCFGR_DATLEN_32_BIT (0x2 << 1) -#define SPI_I2SCFGR_CHLEN BIT(SPI_I2SCFGR_CHLEN_BIT) +#define SPI_I2SCFGR_CHLEN (1U << SPI_I2SCFGR_CHLEN_BIT) #define SPI_I2SCFGR_CHLEN_16_BIT (0x0 << SPI_I2SCFGR_CHLEN_BIT) #define SPI_I2SCFGR_CHLEN_32_BIT (0x1 << SPI_I2SCFGR_CHLEN_BIT) +/* I2S prescaler register */ + +#define SPI_I2SPR_MCKOE_BIT 9 +#define SPI_I2SPR_ODD_BIT 8 + +#define SPI_I2SPR_MCKOE (1U << SPI_I2SPR_MCKOE_BIT) +#define SPI_I2SPR_ODD (1U << SPI_I2SPR_ODD_BIT) +#define SPI_I2SPR_I2SDIV 0xFF + /* * Devices */ @@ -209,45 +207,55 @@ typedef struct spi_dev { nvic_irq_num irq_num; /**< NVIC interrupt number */ } spi_dev; -extern spi_dev *SPI1; -extern spi_dev *SPI2; -#ifdef STM32_HIGH_DENSITY -extern spi_dev *SPI3; -#endif -#ifdef STM32F2 -extern spi_dev *SPI4; -#endif - /* * SPI Convenience functions */ void spi_init(spi_dev *dev); -void spi_gpio_cfg(uint8 as_master, - gpio_dev *nss_dev, - uint8 nss_bit, - gpio_dev *comm_dev, - uint8 sck_bit, - uint8 miso_bit, - uint8 mosi_bit); +struct gpio_dev; +/** + * @brief Configure GPIO bit modes for use as a SPI port's pins. + * + * @param dev SPI device + * @param as_master If true, configure as bus master; otherwise, as slave. + * @param nss_dev NSS pin's GPIO device + * @param nss_bit NSS pin's GPIO bit on nss_dev + * @param comm_dev SCK, MISO, MOSI pins' GPIO device + * @param sck_bit SCK pin's GPIO bit on comm_dev + * @param miso_bit MISO pin's GPIO bit on comm_dev + * @param mosi_bit MOSI pin's GPIO bit on comm_dev + */ +extern void spi_config_gpios(spi_dev *dev, + uint8 as_master, + struct gpio_dev *nss_dev, + uint8 nss_bit, + struct gpio_dev *comm_dev, + uint8 sck_bit, + uint8 miso_bit, + uint8 mosi_bit); /** * @brief SPI mode configuration. * - * Determines a combination of clock polarity (CPOL), which determines - * idle state of the clock line, and clock phase (CPHA), which - * determines which clock edge triggers data capture. + * A SPI mode determines a combination of the idle state of the clock + * line (the clock polarity, or "CPOL"), and which clock edge triggers + * data capture (the clock phase, or "CPHA"). */ typedef enum spi_mode { - SPI_MODE_0, /**< Clock line idles low (0), data capture on first - clock transition. */ - SPI_MODE_1, /**< Clock line idles low (0), data capture on second - clock transition */ - SPI_MODE_2, /**< Clock line idles high (1), data capture on first - clock transition. */ - SPI_MODE_3 /**< Clock line idles high (1), data capture on - second clock transition. */ + /** Clock idles low, data captured on rising edge (first transition) */ + SPI_MODE_LOW_RISING = 0, + /** Clock idles low, data captured on falling edge (second transition) */ + SPI_MODE_LOW_FALLING = 1, + /** Clock idles high, data captured on falling edge (first transition) */ + SPI_MODE_HIGH_FALLING = 2, + /** Clock idles high, data captured on rising edge (second transition) */ + SPI_MODE_HIGH_RISING = 3, + + SPI_MODE_0 = SPI_MODE_LOW_RISING, /**< Same as SPI_MODE_LOW_RISING */ + SPI_MODE_1 = SPI_MODE_LOW_FALLING, /**< Same as SPI_MODE_LOW_FALLING */ + SPI_MODE_2 = SPI_MODE_HIGH_FALLING, /**< Same as SPI_MODE_HIGH_FALLING */ + SPI_MODE_3 = SPI_MODE_HIGH_RISING, /**< Same as SPI_MODE_HIGH_RISING */ } spi_mode; /** @@ -302,7 +310,11 @@ void spi_slave_enable(spi_dev *dev, uint32 spi_tx(spi_dev *dev, const void *buf, uint32 len); -void spi_foreach(void (*fn)(spi_dev (*dev))); +/** + * @brief Call a function on each SPI port + * @param fn Function to call. + */ +extern void spi_foreach(void (*fn)(spi_dev*)); void spi_peripheral_enable(spi_dev *dev); void spi_peripheral_disable(spi_dev *dev); diff --git a/STM32F4/cores/maple/libmaple/spiF4.h b/STM32F4/cores/maple/libmaple/spiF4.h new file mode 100644 index 0000000..d288a0c --- /dev/null +++ b/STM32F4/cores/maple/libmaple/spiF4.h @@ -0,0 +1,99 @@ +/****************************************************************************** + * The MIT License + * + * Copyright (c) 2011, 2012 LeafLabs, LLC. + * Copyright (c) 2010 Perry Hung. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + *****************************************************************************/ + +/** + * @file libmaple/stm32f1/include/series/spi.h + * @author Marti Bolivar + * @brief STM32F1 SPI/I2S series header. + */ + +#ifndef _LIBMAPLE_STM32F1_SPI_H_ +#define _LIBMAPLE_STM32F1_SPI_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Register map base pointers + */ + +struct spi_reg_map; + +#define SPI1_BASE ((struct spi_reg_map*)0x40013000) +#define SPI2_BASE ((struct spi_reg_map*)0x40003800) +#define SPI3_BASE ((struct spi_reg_map*)0x40003C00) + +/* + * Device pointers + */ + +struct spi_dev; + +extern struct spi_dev *SPI1; +extern struct spi_dev *SPI2; +#if defined(STM32_HIGH_DENSITY) || defined(STM32_XL_DENSITY) +extern struct spi_dev *SPI3; +#endif + +/* + * Routines + */ + +/* spi_gpio_cfg(): Backwards compatibility shim to spi_config_gpios() */ +struct gpio_dev; +extern void spi_config_gpios(struct spi_dev*, uint8, + struct gpio_dev*, uint8, + struct gpio_dev*, uint8, uint8, uint8); +/** + * @brief Deprecated. Use spi_config_gpios() instead. + * @see spi_config_gpios() + */ +static __always_inline void spi_gpio_cfg(uint8 as_master, + struct gpio_dev *nss_dev, + uint8 nss_bit, + struct gpio_dev *comm_dev, + uint8 sck_bit, + uint8 miso_bit, + uint8 mosi_bit) { + /* We switched style globally to foo_config_gpios() and always + * taking a foo_dev* argument (that last bit is the important + * part) after this function was written. + * + * However, spi_config_gpios() just ignores the spi_dev* on F1, so + * we can still keep this around for older code. */ + spi_config_gpios(NULL, as_master, nss_dev, nss_bit, + comm_dev, sck_bit, miso_bit, mosi_bit); +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/STM32F4/cores/maple/libmaple/spi_f4.c b/STM32F4/cores/maple/libmaple/spi_f4.c new file mode 100644 index 0000000..a9aaa60 --- /dev/null +++ b/STM32F4/cores/maple/libmaple/spi_f4.c @@ -0,0 +1,85 @@ +/****************************************************************************** + * The MIT License + * + * Copyright (c) 2011, 2012 LeafLabs, LLC. + * Copyright (c) 2010 Perry Hung. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + *****************************************************************************/ + +/** + * @file libmaple/stm32f1/spi.c + * @author Marti Bolivar + * @brief STM32F1 SPI/I2S. + */ + +#include +#include +#include "spi_private.h" + +/* + * Devices + */ + +static spi_dev spi1 = SPI_DEV(1); +static spi_dev spi2 = SPI_DEV(2); + +spi_dev *SPI1 = &spi1; +spi_dev *SPI2 = &spi2; + +#if defined(STM32_HIGH_DENSITY) || defined(STM32_XL_DENSITY) +static spi_dev spi3 = SPI_DEV(3); +spi_dev *SPI3 = &spi3; +#endif + +/* + * Routines + */ + +void spi_config_gpios(spi_dev *ignored, + uint8 as_master, + gpio_dev *nss_dev, + uint8 nss_bit, + gpio_dev *comm_dev, + uint8 sck_bit, + uint8 miso_bit, + uint8 mosi_bit) { + if (as_master) { +// gpio_set_mode(nss_dev, nss_bit, GPIO_AF_OUTPUT_PP); + gpio_set_mode(comm_dev, sck_bit, GPIO_AF_OUTPUT_PP); +// gpio_set_mode(comm_dev, miso_bit, GPIO_INPUT_FLOATING); + gpio_set_mode(comm_dev, miso_bit, GPIO_AF_INPUT_PD); + gpio_set_mode(comm_dev, mosi_bit, GPIO_AF_OUTPUT_PP); + } else { + gpio_set_mode(nss_dev, nss_bit, GPIO_INPUT_FLOATING); + gpio_set_mode(comm_dev, sck_bit, GPIO_INPUT_FLOATING); + gpio_set_mode(comm_dev, miso_bit, GPIO_AF_OUTPUT_PP); + gpio_set_mode(comm_dev, mosi_bit, GPIO_INPUT_FLOATING); + } +} + +void spi_foreach(void (*fn)(spi_dev*)) { + fn(SPI1); + fn(SPI2); +#if defined(STM32_HIGH_DENSITY) || defined(STM32_XL_DENSITY) + fn(SPI3); +#endif +} diff --git a/STM32F4/cores/maple/libmaple/spi_private.h b/STM32F4/cores/maple/libmaple/spi_private.h new file mode 100644 index 0000000..f0e0bd1 --- /dev/null +++ b/STM32F4/cores/maple/libmaple/spi_private.h @@ -0,0 +1,37 @@ +/****************************************************************************** + * The MIT License + * + * Copyright (c) 2012 LeafLabs, LLC. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + *****************************************************************************/ + +#ifndef _LIBMAPLE_SPI_PRIVATE_H_ +#define _LIBMAPLE_SPI_PRIVATE_H_ + +#define SPI_DEV(num) \ + { \ + .regs = SPI##num##_BASE, \ + .clk_id = RCC_SPI##num, \ + .irq_num = NVIC_SPI##num, \ + } + +#endif diff --git a/STM32F4/libraries/SPI/keywords.txt b/STM32F4/libraries/SPI/keywords.txt new file mode 100644 index 0000000..47738f9 --- /dev/null +++ b/STM32F4/libraries/SPI/keywords.txt @@ -0,0 +1,31 @@ +####################################### +# Syntax Coloring Map SPI +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +SPI KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +begin KEYWORD2 +end KEYWORD2 +transfer KEYWORD2 +#setBitOrder KEYWORD2 +setDataMode KEYWORD2 +setClockDivider KEYWORD2 + + +####################################### +# Constants (LITERAL1) +####################################### +SPI_MODE0 LITERAL1 +SPI_MODE1 LITERAL1 +SPI_MODE2 LITERAL1 +SPI_MODE3 LITERAL1 + +SPI_CONTINUE LITERAL1 +SPI_LAST LITERAL1 diff --git a/STM32F4/libraries/SPI/library.properties b/STM32F4/libraries/SPI/library.properties new file mode 100644 index 0000000..98d05dd --- /dev/null +++ b/STM32F4/libraries/SPI/library.properties @@ -0,0 +1,8 @@ +name=SPI +version=1.0 +author=Roger Clark +email= +sentence=Serial Peripheral Interface +paragraph=SPI for STM32F4 +url= +architectures=STM32F4 diff --git a/STM32F4/libraries/SPI/src/SPI.cpp b/STM32F4/libraries/SPI/src/SPI.cpp new file mode 100644 index 0000000..6d37eb8 --- /dev/null +++ b/STM32F4/libraries/SPI/src/SPI.cpp @@ -0,0 +1,648 @@ +/****************************************************************************** + * The MIT License + * + * Copyright (c) 2010 Perry Hung. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + *****************************************************************************/ + +/** + * @author Marti Bolivar + * @brief Wirish SPI implementation. + */ + +#include "SPI.h" + +//#define SPI_DEBUG + +#include +#include +#include + +#include "wirish.h" +#include "boards.h" + +//#include "HardwareSerial.h" + +#if CYCLES_PER_MICROSECOND != 72 +/* TODO [0.2.0?] something smarter than this */ +#warning "Unexpected clock speed; SPI frequency calculation will be incorrect" +#endif + +struct spi_pins { + uint8 nss; + uint8 sck; + uint8 miso; + uint8 mosi; +}; + +static const spi_pins* dev_to_spi_pins(spi_dev *dev); + +static void configure_gpios(spi_dev *dev, bool as_master); + +static spi_baud_rate determine_baud_rate(spi_dev *dev, uint32_t freq); + +#if (BOARD_NR_SPI >= 3) && !defined(STM32_HIGH_DENSITY) +#error "The SPI library is misconfigured: 3 SPI ports only available on high density STM32 devices" +#endif + +static const spi_pins board_spi_pins[] __FLASH__ = { +#if BOARD_NR_SPI >= 1 + {BOARD_SPI1_NSS_PIN, + BOARD_SPI1_SCK_PIN, + BOARD_SPI1_MISO_PIN, + BOARD_SPI1_MOSI_PIN}, +#endif +#if BOARD_NR_SPI >= 2 + {BOARD_SPI2_NSS_PIN, + BOARD_SPI2_SCK_PIN, + BOARD_SPI2_MISO_PIN, + BOARD_SPI2_MOSI_PIN}, +#endif +#if BOARD_NR_SPI >= 3 + {BOARD_SPI3_NSS_PIN, + BOARD_SPI3_SCK_PIN, + BOARD_SPI3_MISO_PIN, + BOARD_SPI3_MOSI_PIN}, +#endif +}; + + +/* + * Constructor + */ + +SPIClass::SPIClass(uint32 spi_num) { + switch (spi_num) { +#if BOARD_NR_SPI >= 1 + case 1: + this->spi_d = SPI1; + break; +#endif +#if BOARD_NR_SPI >= 2 + case 2: + this->spi_d = SPI2; + break; +#endif +#if BOARD_NR_SPI >= 3 + case 3: + this->spi_d = SPI3; + break; +#endif + default: + ASSERT(0); + } + + //pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT); + + clockDivider = SPI_BAUD_PCLK_DIV_16; + dataMode = SPI_MODE0; +} + +/* + * Set up/tear down + */ + +void SPIClass::begin(void) { + + uint32 flags = ((bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE | SPI_SOFT_SS); + spi_init(spi_d); + configure_gpios(spi_d, 1); + #ifdef SPI_DEBUG + Serial.print("spi_master_enable("); Serial.print(clockDivider); Serial.print(","); Serial.print(dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); + #endif + spi_master_enable(spi_d, (spi_baud_rate)clockDivider, (spi_mode)dataMode, flags); +} + +void SPIClass::beginSlave(void) { + if (dataMode >= 4) { + ASSERT(0); + return; + } + uint32 flags = ((bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE); + spi_init(spi_d); + configure_gpios(spi_d, 0); + #ifdef SPI_DEBUG + Serial.print("spi_slave_enable("); Serial.print(dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); + #endif + spi_slave_enable(spi_d, (spi_mode)dataMode, flags); +} + +void SPIClass::end(void) { + if (!spi_is_enabled(this->spi_d)) { + return; + } + + // Follows RM0008's sequence for disabling a SPI in master/slave + // full duplex mode. + while (spi_is_rx_nonempty(this->spi_d)) { + // FIXME [0.1.0] remove this once you have an interrupt based driver + volatile uint16 rx __attribute__((unused)) = spi_rx_reg(this->spi_d); + } + while (!spi_is_tx_empty(this->spi_d)) + ; + while (spi_is_busy(this->spi_d)) + ; + spi_peripheral_disable(this->spi_d); +} + +/* Roger Clark added 3 functions */ +void SPIClass::setClockDivider(uint32_t clockDivider) +{ + #ifdef SPI_DEBUG + Serial.print("Clock divider set to "); Serial.println(clockDivider); + #endif + this->clockDivider = clockDivider; + this->begin(); +} + +void SPIClass::setBitOrder(BitOrder bitOrder) +{ + #ifdef SPI_DEBUG + Serial.print("Bit order set to "); Serial.println(bitOrder); + #endif + this->bitOrder = bitOrder; + this->begin(); +} + +/* Victor Perez. Added to test changing datasize from 8 to 16 bit modes on the fly. +* Input parameter should be SPI_CR1_DFF set to 0 or 1 on a 32bit word. +* +*/ +void SPIClass::setDataSize(uint32 datasize) +{ + uint32 cr1 = this->spi_d->regs->CR1; + datasize &= SPI_CR1_DFF; + cr1 &= ~(SPI_CR1_DFF); + cr1 |= datasize; + this->spi_d->regs->CR1 = cr1; +} + +void SPIClass::setDataMode(uint8_t dataMode) +{ +/* Notes. As far as I can tell, the AVR numbers for dataMode appear to match the numbers required by the STM32 + +From the AVR doc http://www.atmel.com/images/doc2585.pdf section 2.4 + +SPI Mode CPOL CPHA Shift SCK-edge Capture SCK-edge +0 0 0 Falling Rising +1 0 1 Rising Falling +2 1 0 Rising Falling +3 1 1 Falling Rising + + +On the STM32 it appears to be + +bit 1 - CPOL : Clock polarity + + (This bit should not be changed when communication is ongoing) + 0 : CLK to 0 when idle + 1 : CLK to 1 when idle + +bit 0 - CPHA : Clock phase + + (This bit should not be changed when communication is ongoing) + 0 : The first clock transition is the first data capture edge + 1 : The second clock transition is the first data capture edge + +If someone finds this is not the case or sees a logic error with this let me know ;-) + */ + #ifdef SPI_DEBUG + Serial.print("Data mode set to "); Serial.println(dataMode); + #endif + this->dataMode = dataMode; + this->begin(); +} + + +void SPIClass::beginTransaction(uint8_t pin, SPISettings settings) +{ + #ifdef SPI_DEBUG + Serial.println("SPIClass::beginTransaction"); + #endif + //_SSPin=pin; + //pinMode(_SSPin,OUTPUT); + //digitalWrite(_SSPin,LOW); + setBitOrder(settings.bitOrder); + setDataMode(settings.dataMode); + setClockDivider(determine_baud_rate(spi_d, settings.clock)); + begin(); +#if 0 +// code from SAM core + uint8_t mode = interruptMode; + if (mode > 0) { + if (mode < 16) { + if (mode & 1) PIOA->PIO_IDR = interruptMask[0]; + if (mode & 2) PIOB->PIO_IDR = interruptMask[1]; + if (mode & 4) PIOC->PIO_IDR = interruptMask[2]; + if (mode & 8) PIOD->PIO_IDR = interruptMask[3]; + } else { + interruptSave = interruptsStatus(); + noInterrupts(); + } + } + uint32_t ch = BOARD_PIN_TO_SPI_CHANNEL(pin); + bitOrder[ch] = settings.border; + SPI_ConfigureNPCS(spi, ch, settings.config); + //setBitOrder(pin, settings.border); + //setDataMode(pin, settings.datamode); + //setClockDivider(pin, settings.clockdiv); +#endif +} + +void SPIClass::endTransaction(void) +{ + #ifdef SPI_DEBUG + Serial.println("SPIClass::endTransaction"); + #endif + //digitalWrite(_SSPin,HIGH); +#if false +// code from SAM core + uint8_t mode = interruptMode; + if (mode > 0) { + if (mode < 16) { + if (mode & 1) PIOA->PIO_IER = interruptMask[0]; + if (mode & 2) PIOB->PIO_IER = interruptMask[1]; + if (mode & 4) PIOC->PIO_IER = interruptMask[2]; + if (mode & 8) PIOD->PIO_IER = interruptMask[3]; + } else { + if (interruptSave) interrupts(); + } + } +#endif +} + + +/* + * I/O + */ + +uint8 SPIClass::read(void) { + uint8 buf[1]; + this->read(buf, 1); + return buf[0]; +} + +void SPIClass::read(uint8 *buf, uint32 len) { + uint32 rxed = 0; + while (rxed < len) { + while (!spi_is_rx_nonempty(this->spi_d)) + ; + buf[rxed++] = (uint8)spi_rx_reg(this->spi_d); + } +} + +void SPIClass::write(uint16 data) { + #ifdef SPI_DEBUG +// Serial.print("SPIClass::write("); Serial.print(data); Serial.println(")"); + #endif + // this->write(&data, 1); + + /* Added for 16bit data Victor Perez. Roger Clark + * Improved speed by just directly writing the single byte to the SPI data reg and wait for completion, * by taking the Tx code from transfer(byte) + * The original method, of calling write(*data, length) . + * This almost doubles the speed of this function. + */ + + spi_tx_reg(this->spi_d, data); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." + while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." +} + +//void SPIClass::write(uint8 byte) { + // this->write(&byte, 1); + + /* Roger Clark + * Improved speed by just directly writing the single byte to the SPI data reg and wait for completion, * by taking the Tx code from transfer(byte) + * The original method, of calling write(*data, length) . + * This almost doubles the speed of this function. + */ + +// spi_tx_reg(this->spi_d, byte); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." +// while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." +// while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." +//} + +void SPIClass::write(const uint8 *data, uint32 length) { + #ifdef SPI_DEBUG + Serial.print("SPIClass::write(data, "); Serial.print(length); Serial.println(")"); + #endif + uint32 txed = 0; + while (txed < length) { + txed += spi_tx(this->spi_d, data + txed, length - txed); + } + while (spi_is_tx_empty(this->spi_d) == 0); // "4. After writing the last data item into the SPI_DR register, wait until TXE=1 ..." + while (spi_is_busy(this->spi_d) != 0); // "... then wait until BSY=0, this indicates that the transmission of the last data is complete." +} + +uint8 SPIClass::transfer(uint8 byte) const { + #ifdef SPI_DEBUG +// Serial.print("SPIClass::transfer("); Serial.print(byte); Serial.println(")"); + #endif + uint8 b; + spi_tx_reg(this->spi_d, byte); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." + while (spi_is_rx_nonempty(this->spi_d) == 0); // "4. Wait until RXNE=1 ..." + b = spi_rx_reg(this->spi_d); // "... and read the last received data." + while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + return b; +} +/* Roger Clark and Victor Perez, 2015 +* Performs a DMA SPI transfer with at least a receive buffer. +* If a TX buffer is not provided, FF is sent over and over for the lenght of the transfer. +* On exit TX buffer is not modified, and RX buffer cotains the received data. +* Still in progress. +*/ +uint8 SPIClass::dmaTransfer(uint8 *transmitBuf, uint8 *receiveBuf, uint16 length) { + if (length == 0) return 0; + uint8 b; + if (spi_is_rx_nonempty(this->spi_d) == 1) b = spi_rx_reg(this->spi_d); //Clear the RX buffer in case a byte is waiting on it. + dma1_ch3_Active=true; + dma_init(DMA1); + dma_attach_interrupt(DMA1, DMA_CH3, &SPIClass::DMA1_CH3_Event); + + // RX + spi_rx_dma_enable(SPI1); + dma_setup_transfer(DMA1, DMA_CH2, &SPI1->regs->DR, DMA_SIZE_8BITS, + receiveBuf, DMA_SIZE_8BITS, (DMA_MINC_MODE | DMA_TRNS_CMPLT));// receive buffer DMA + dma_set_num_transfers(DMA1, DMA_CH2, length); + + // TX + spi_tx_dma_enable(SPI1); + if (!transmitBuf) { + static uint8_t ff = 0XFF; + transmitBuf = &ff; + dma_setup_transfer(DMA1, DMA_CH3, &SPI1->regs->DR, DMA_SIZE_8BITS, + transmitBuf, DMA_SIZE_8BITS, (DMA_FROM_MEM | DMA_TRNS_CMPLT));// Transmit FF repeatedly + } + else { + dma_setup_transfer(DMA1, DMA_CH3, &SPI1->regs->DR, DMA_SIZE_8BITS, + transmitBuf, DMA_SIZE_8BITS, (DMA_MINC_MODE | DMA_FROM_MEM | DMA_TRNS_CMPLT));// Transmit buffer DMA + } + dma_set_num_transfers(DMA1, DMA_CH3, length); + + dma_enable(DMA1, DMA_CH2);// enable receive + dma_enable(DMA1, DMA_CH3);// enable transmit + +// while (dma1_ch3_Active); +// if (receiveBuf) { + uint32_t m = millis(); + while (dma1_ch3_Active) { + if ((millis() - m) > 100) { + dma1_ch3_Active = 0; + b = 2; + break; + } + } + +// } + while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + dma_disable(DMA1, DMA_CH3); + dma_disable(DMA1, DMA_CH2); + spi_rx_dma_disable(SPI1); + spi_tx_dma_disable(SPI1); + return b; +} + +/* Roger Clark and Victor Perez, 2015 +* Performs a DMA SPI send using a TX buffer. +* On exit TX buffer is not modified. +* Still in progress. +*/ +uint8 SPIClass::dmaSend(uint8 *transmitBuf, uint16 length, bool minc) { + if (length == 0) return 0; + uint32 flags = ((DMA_MINC_MODE * minc) | DMA_FROM_MEM | DMA_TRNS_CMPLT); + uint8 b; + dma1_ch3_Active=true; + dma_init(DMA1); + dma_attach_interrupt(DMA1, DMA_CH3, &SPIClass::DMA1_CH3_Event); + + // TX + spi_tx_dma_enable(SPI1); + dma_setup_transfer(DMA1, DMA_CH3, &SPI1->regs->DR, DMA_SIZE_8BITS, + transmitBuf, DMA_SIZE_8BITS, flags);// Transmit buffer DMA + dma_set_num_transfers(DMA1, DMA_CH3, length); + dma_enable(DMA1, DMA_CH3);// enable transmit + + while (dma1_ch3_Active); + while (spi_is_rx_nonempty(this->spi_d) == 0); // "4. Wait until RXNE=1 ..." + b = spi_rx_reg(this->spi_d); // "... and read the last received data." + while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + dma_disable(DMA1, DMA_CH3); + spi_tx_dma_disable(SPI1); + return b; +} + +uint8 SPIClass::dmaSend(uint16 *transmitBuf, uint16 length, bool minc) { + if (length == 0) return 0; + uint32 flags = ((DMA_MINC_MODE * minc) | DMA_FROM_MEM | DMA_TRNS_CMPLT); + uint8 b; + dma1_ch3_Active=true; + dma_init(DMA1); + dma_attach_interrupt(DMA1, DMA_CH3, &SPIClass::DMA1_CH3_Event); + + // TX + spi_tx_dma_enable(SPI1); + dma_setup_transfer(DMA1, DMA_CH3, &SPI1->regs->DR, DMA_SIZE_16BITS, + transmitBuf, DMA_SIZE_16BITS, flags);// Transmit buffer DMA + dma_set_num_transfers(DMA1, DMA_CH3, length); + dma_enable(DMA1, DMA_CH3);// enable transmit + + while (dma1_ch3_Active); + while (spi_is_rx_nonempty(this->spi_d) == 0); // "4. Wait until RXNE=1 ..." + b = spi_rx_reg(this->spi_d); // "... and read the last received data." + while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + dma_disable(DMA1, DMA_CH3); + spi_tx_dma_disable(SPI1); + return b; +} + + +void SPIClass::attachInterrupt(void) { + // Should be enableInterrupt() +} + +void SPIClass::detachInterrupt(void) { + // Should be disableInterrupt() +} + +/* + * Pin accessors + */ + +uint8 SPIClass::misoPin(void) { + return dev_to_spi_pins(this->spi_d)->miso; +} + +uint8 SPIClass::mosiPin(void) { + return dev_to_spi_pins(this->spi_d)->mosi; +} + +uint8 SPIClass::sckPin(void) { + return dev_to_spi_pins(this->spi_d)->sck; +} + +uint8 SPIClass::nssPin(void) { + return dev_to_spi_pins(this->spi_d)->nss; +} + +/* + * Deprecated functions + */ + +uint8 SPIClass::send(uint8 data) { + uint8 buf[] = {data}; + return this->send(buf, 1); +} + +uint8 SPIClass::send(uint8 *buf, uint32 len) { + uint32 txed = 0; + uint8 ret = 0; + while (txed < len) { + this->write(buf[txed++]); + ret = this->read(); + } + return ret; +} + +uint8 SPIClass::recv(void) { + return this->read(); +} + + +/* + * Auxiliary functions + */ + +static const spi_pins* dev_to_spi_pins(spi_dev *dev) { + switch (dev->clk_id) { +#if BOARD_NR_SPI >= 1 + case RCC_SPI1: return board_spi_pins; +#endif +#if BOARD_NR_SPI >= 2 + case RCC_SPI2: return board_spi_pins + 1; +#endif +#if BOARD_NR_SPI >= 3 + case RCC_SPI3: return board_spi_pins + 2; +#endif + default: return NULL; + } +} + +static void disable_pwm(const stm32_pin_info *i) { + if (i->timer_device) { + timer_set_mode(i->timer_device, i->timer_channel, TIMER_DISABLED); + } +} + +static void configure_gpios(spi_dev *dev, bool as_master) { + const spi_pins *pins = dev_to_spi_pins(dev); + + if (!pins) { + return; + } + + const stm32_pin_info *nssi = &PIN_MAP[pins->nss]; + const stm32_pin_info *scki = &PIN_MAP[pins->sck]; + const stm32_pin_info *misoi = &PIN_MAP[pins->miso]; + const stm32_pin_info *mosii = &PIN_MAP[pins->mosi]; + + disable_pwm(nssi); + disable_pwm(scki); + disable_pwm(misoi); + disable_pwm(mosii); + + #ifdef SPI_DEBUG + Serial.print("SPI configure_gpios / (nss="); + Serial.print(pins->nss); Serial.print(", sck="); Serial.print(pins->sck); + Serial.print(", miso="); Serial.print(pins->miso); + Serial.print(", mosi="); Serial.print(pins->mosi); + Serial.println(")"); + #endif + +#ifdef STM32F4 + if(dev->clk_id <= RCC_SPI2) { + if(nssi) { + if(!as_master) { + gpio_set_af_mode(nssi->gpio_device, scki->gpio_bit, 5); + } + } + gpio_set_af_mode(scki->gpio_device, scki->gpio_bit, 5); + gpio_set_af_mode(misoi->gpio_device, misoi->gpio_bit, 5); + gpio_set_af_mode(mosii->gpio_device, mosii->gpio_bit, 5); + } else { + if(nssi) { + if(!as_master) { + gpio_set_af_mode(nssi->gpio_device, scki->gpio_bit, 6); + } + } + gpio_set_af_mode(scki->gpio_device, scki->gpio_bit, 6); + gpio_set_af_mode(misoi->gpio_device, misoi->gpio_bit, 6); + gpio_set_af_mode(mosii->gpio_device, mosii->gpio_bit, 6); + } + +#endif + + spi_config_gpios(dev, as_master, nssi->gpio_device, nssi->gpio_bit, + scki->gpio_device, scki->gpio_bit, misoi->gpio_bit, + mosii->gpio_bit); +} + +static const spi_baud_rate baud_rates[8] __FLASH__ = { + SPI_BAUD_PCLK_DIV_2, + SPI_BAUD_PCLK_DIV_4, + SPI_BAUD_PCLK_DIV_8, + SPI_BAUD_PCLK_DIV_16, + SPI_BAUD_PCLK_DIV_32, + SPI_BAUD_PCLK_DIV_64, + SPI_BAUD_PCLK_DIV_128, + SPI_BAUD_PCLK_DIV_256, +}; + +/* + * Note: This assumes you're on a LeafLabs-style board + * (CYCLES_PER_MICROSECOND == 72, APB2 at 72MHz, APB1 at 36MHz). + */ +static spi_baud_rate determine_baud_rate(spi_dev *dev, uint32_t freq) { + uint32_t clock = 0, i; + #ifdef SPI_DEBUG + Serial.print("determine_baud_rate("); Serial.print(freq); Serial.println(")"); + #endif + switch (rcc_dev_clk(dev->clk_id)) + { + case RCC_APB2: clock = STM32_PCLK2; break; // 72 Mhz + case RCC_APB1: clock = STM32_PCLK1; break; // 36 Mhz + } + clock /= 2; + i = 0; + while (i < 7 && freq < clock) { + clock /= 2; + i++; + } + return baud_rates[i]; +} + + +//SPIClass SPI(3); + diff --git a/STM32F4/libraries/SPI/src/SPI.h b/STM32F4/libraries/SPI/src/SPI.h new file mode 100644 index 0000000..490d58b --- /dev/null +++ b/STM32F4/libraries/SPI/src/SPI.h @@ -0,0 +1,363 @@ +/****************************************************************************** + * The MIT License + * + * Copyright (c) 2010 Perry Hung. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + *****************************************************************************/ + +/** + * @file wirish/include/wirish/HardwareSPI.h + * @brief High-level SPI interface + * + * This is a "bare essentials" polling driver for now. + */ + +/* TODO [0.1.0] Remove deprecated methods. */ + + + +#ifndef _SPI_H_INCLUDED +#define _SPI_H_INCLUDED + +#include +#include +#include + +#include +#include +#include + +// SPI_HAS_TRANSACTION means SPI has +// - beginTransaction() +// - endTransaction() +// - usingInterrupt() +// - SPISetting(clock, bitOrder, dataMode) +//#define SPI_HAS_TRANSACTION + +#define SPI_CLOCK_DIV2 SPI_BAUD_PCLK_DIV_2 +#define SPI_CLOCK_DIV4 SPI_BAUD_PCLK_DIV_4 +#define SPI_CLOCK_DIV8 SPI_BAUD_PCLK_DIV_8 +#define SPI_CLOCK_DIV16 SPI_BAUD_PCLK_DIV_16 +#define SPI_CLOCK_DIV32 SPI_BAUD_PCLK_DIV_32 +#define SPI_CLOCK_DIV64 SPI_BAUD_PCLK_DIV_64 +#define SPI_CLOCK_DIV128 SPI_BAUD_PCLK_DIV_128 +#define SPI_CLOCK_DIV256 SPI_BAUD_PCLK_DIV_256 + +/* + * Roger Clark. 20150106 + * Commented out redundant AVR defined + * +#define SPI_MODE_MASK 0x0C // CPOL = bit 3, CPHA = bit 2 on SPCR +#define SPI_CLOCK_MASK 0x03 // SPR1 = bit 1, SPR0 = bit 0 on SPCR +#define SPI_2XCLOCK_MASK 0x01 // SPI2X = bit 0 on SPSR + +// define SPI_AVR_EIMSK for AVR boards with external interrupt pins +#if defined(EIMSK) + #define SPI_AVR_EIMSK EIMSK +#elif defined(GICR) + #define SPI_AVR_EIMSK GICR +#elif defined(GIMSK) + #define SPI_AVR_EIMSK GIMSK +#endif +*/ + +#ifndef STM32_LSBFIRST +#define STM32_LSBFIRST 0 +#endif +#ifndef STM32_MSBFIRST +#define STM32_MSBFIRST 1 +#endif + +// PC13 or PA4 +//#define BOARD_SPI_DEFAULT_SS PA4 +#define BOARD_SPI_DEFAULT_SS PC13 + +#define SPI_MODE0 SPI_MODE_0 +#define SPI_MODE1 SPI_MODE_1 +#define SPI_MODE2 SPI_MODE_2 +#define SPI_MODE3 SPI_MODE_3 + +class SPISettings { +public: + SPISettings(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) { + if (__builtin_constant_p(clock)) { + init_AlwaysInline(clock, bitOrder, dataMode); + } else { + init_MightInline(clock, bitOrder, dataMode); + } + } + SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); } +private: + void init_MightInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) { + init_AlwaysInline(clock, bitOrder, dataMode); + } + void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) __attribute__((__always_inline__)) { + this->clock = clock; + this->bitOrder = bitOrder; + this->dataMode = dataMode; + } + uint32_t clock; + BitOrder bitOrder; + uint8_t dataMode; + friend class SPIClass; +}; + + +volatile static bool dma1_ch3_Active; + +/** + * @brief Wirish SPI interface. + * + * This implementation uses software slave management, so the caller + * is responsible for controlling the slave select line. + */ +class SPIClass { +public: + + + + /** + * @param spiPortNumber Number of the SPI port to manage. + */ + SPIClass(uint32 spiPortNumber); + + /* + * Set up/tear down + */ + + + + /** + * @brief Equivalent to begin(SPI_1_125MHZ, MSBFIRST, 0). + */ + void begin(void); + + /** + * @brief Turn on a SPI port and set its GPIO pin modes for use as a slave. + * + * SPI port is enabled in full duplex mode, with software slave management. + * + * @param bitOrder Either LSBFIRST (little-endian) or MSBFIRST(big-endian) + * @param mode SPI mode to use + */ + void beginSlave(uint32 bitOrder, uint32 mode); + + /** + * @brief Equivalent to beginSlave(MSBFIRST, 0). + */ + void beginSlave(void); + + /** + * @brief Disables the SPI port, but leaves its GPIO pin modes unchanged. + */ + void end(void); + + void beginTransaction(SPISettings settings) { beginTransaction(BOARD_SPI_DEFAULT_SS, settings); } + void beginTransaction(uint8_t pin, SPISettings settings); + void endTransaction(void); + + void setClockDivider(uint32_t clockDivider); + void setBitOrder(BitOrder bitOrder); + void setDataMode(uint8_t dataMode); + + // SPI Configuration methods + void attachInterrupt(void); + void detachInterrupt(void); + + /* Victor Perez. Added to change datasize from 8 to 16 bit modes on the fly. + * Input parameter should be SPI_CR1_DFF set to 0 or 1 on a 32bit word. + * Requires an added function spi_data_size on STM32F1 / cores / maple / libmaple / spi.c + */ + void setDataSize(uint32 ds); + + + /* + * I/O + */ + + /** + * @brief Return the next unread byte. + * + * If there is no unread byte waiting, this function will block + * until one is received. + */ + uint8 read(void); + + /** + * @brief Read length bytes, storing them into buffer. + * @param buffer Buffer to store received bytes into. + * @param length Number of bytes to store in buffer. This + * function will block until the desired number of + * bytes have been read. + */ + void read(uint8 *buffer, uint32 length); + + /** + * @brief Transmit a byte. + * @param data Byte to transmit. + */ +// void write(uint8 data); + + /** + * @brief Transmit a half word. + * @param data to transmit. + */ + void write(uint16 data); + + /** + * @brief Transmit multiple bytes. + * @param buffer Bytes to transmit. + * @param length Number of bytes in buffer to transmit. + */ + void write(const uint8 *buffer, uint32 length); + + /** + * @brief Transmit a byte, then return the next unread byte. + * + * This function transmits before receiving. + * + * @param data Byte to transmit. + * @return Next unread byte. + */ + uint8 transfer(uint8 data) const; + + /** + * @brief Sets up a DMA Transfer for "length" bytes. + * + * This function transmits and receives to buffers. + * + * @param transmitBuf buffer Bytes to transmit. If passed as 0, it sends FF repeatedly for "length" bytes + * @param receiveBuf buffer Bytes to save received data. + * @param length Number of bytes in buffer to transmit. + */ + uint8 dmaTransfer(uint8 *transmitBuf, uint8 *receiveBuf, uint16 length); + + /** + * @brief Sets up a DMA Transmit for bytes. + * + * This function transmits and does not care about the RX fifo. + * + * @param transmitBuf buffer Bytes to transmit, + * @param length Number of bytes in buffer to transmit. + * @param minc Set to use Memory Increment mode, clear to use Circular mode. + */ + uint8 dmaSend(uint8 *transmitBuf, uint16 length, bool minc = 1); + + /** + * @brief Sets up a DMA Transmit for half words. + * SPI PERFIPHERAL MUST BE SET TO 16 BIT MODE BEFORE + * + * This function transmits and does not care about the RX fifo. + * + * @param data buffer half words to transmit, + * @param length Number of bytes in buffer to transmit. + * @param minc Set to use Memory Increment mode (default if blank), clear to use Circular mode. + */ + uint8 dmaSend(uint16 *transmitBuf, uint16 length, bool minc = 1); + + /* + * Pin accessors + */ + + /** + * @brief Return the number of the MISO (master in, slave out) pin + */ + uint8 misoPin(void); + + /** + * @brief Return the number of the MOSI (master out, slave in) pin + */ + uint8 mosiPin(void); + + /** + * @brief Return the number of the SCK (serial clock) pin + */ + uint8 sckPin(void); + + /** + * @brief Return the number of the NSS (slave select) pin + */ + uint8 nssPin(void); + + /* Escape hatch */ + + /** + * @brief Get a pointer to the underlying libmaple spi_dev for + * this HardwareSPI instance. + */ + spi_dev* c_dev(void) { return this->spi_d; } + + /* -- The following methods are deprecated --------------------------- */ + + /** + * @brief Deprecated. + * + * Use HardwareSPI::transfer() instead. + * + * @see HardwareSPI::transfer() + */ + uint8 send(uint8 data); + + /** + * @brief Deprecated. + * + * Use HardwareSPI::write() in combination with + * HardwareSPI::read() (or HardwareSPI::transfer()) instead. + * + * @see HardwareSPI::write() + * @see HardwareSPI::read() + * @see HardwareSPI::transfer() + */ + uint8 send(uint8 *data, uint32 length); + + /** + * @brief Deprecated. + * + * Use HardwareSPI::read() instead. + * + * @see HardwareSPI::read() + */ + uint8 recv(void); + + spi_dev *dev(){ return spi_d;} + + + +private: + + static inline void DMA1_CH3_Event() { + dma1_ch3_Active = 0; +// dma_disable(DMA1, DMA_CH3); +// dma_disable(DMA1, DMA_CH2); + + // To Do. Need to wait for + } + spi_dev *spi_d; + uint8_t _SSPin; + uint32_t clockDivider; + uint8_t dataMode; + BitOrder bitOrder; +}; + + +extern SPIClass SPI;//(1);// dummy params +#endif From 4cd1b55dfe96396ba670595f4a2a527bbddc88d3 Mon Sep 17 00:00:00 2001 From: Martin Ayotte Date: Sun, 14 Jun 2015 09:26:22 -0400 Subject: [PATCH 49/96] remove useless STM32F4.zip --- STM32F4.zip | Bin 715812 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 STM32F4.zip diff --git a/STM32F4.zip b/STM32F4.zip deleted file mode 100644 index 507be0c3ab0305745accd9f601955f0a109f5a5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715812 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

    )60ESn`jD62cr4i-9|%TS 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

    NEq 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 L#NYf?wr7 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

    &5-7F@Kq!LhBMl@;CjffNO5SHrl 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�$I5dh+gDfT)O5K7iB(Kln!FZr52 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

  • g)iU#uys@< zanP-#AuhQ>TkRVA7?`?}d@W>+@0T6q8;E5ih#3#HT~qWy#dA)M!P3TkAUfp@$)R~D zKA3wMy#Mk~_ zb1e226&{@E-DRD1-Qvs_ab+?+Q$GISNda-N)&--cI=Desf!{fBQl)?BHkI2^!ukCa5Vpr))GQ<^?pmL zdtp{ZfpdOC^S*j!eYdMNt*sn5426{z#zA1fx@(emrZYb_Bg;CbQy3mIl0Ps=!COL> zyU3_ADOTf?YjA_@C43Kx&qEHGZ^kGB)2q)@&>oDX|M8uf&L(l?(JNv*iCYG#qbDrT zqm&_4m5RShBk0%h!Bh&Bc{p_mtwpzgl$hg&crJ!73{=jSB_;I*yVk;izNr*u7 z?xl&-hLQE)U-2q6!zc>C?8Os`@})+azxmv-5{?729bRIK<*np$9sl7#_pRS;y#u}` zLK-7rGX;D?KolO?7tiL>~x2LPB4LY#2a(Y+G7R4|<8)%7Qh?NKGq!i5gzM-d}M0&af@L}Tu zZ1Ee_-Y-2#pHS2H?HaZLYS}4&9oW2G<0`muqq&?QCOWd}w6|)%7<0;`Pfr=8+@yHc zuCVCyj_doQQRhz4zON;cOSLhcVp}l#xO3`_TL10rkObC~qc>>EJ)Hf#?9jHmaz|w8 zo#??i7a3Ztey4r4_AMNeEvecv9GA{-ap-Her7H7WD;LWzt?i+K=SS0c-x)3|dfI&F z5ju45ZHM{YgJ}MG%gBb_$*4<;o^%iD)4H%_Qp^!8$5-f1wq)w8OJ*KlANYUK_D(^% z1>L%4VU=y$wr$(CZQHi(Rkm&0)+*bs>e{EfqxX)}aqj+$FCxE~^EPv4=6J{Rxczu? zPcR%&aAJksrFCS`am;l+Hf|2ESVbnZFHnPqKPoN;A!gvIN&JY1eS+~xCIkThwNG`m z`J>V479SH{A9-3CSy?$*SzSm)D=Y^xRJ=DZtY4jF3bqq>bqbQh0wXsi+UY4*%fnvt ze#YGO&@*?fJLYsBDyDs>f8>k$CMCNpKMI{YLMh^4X_-s(iqr%yRRu0p1TJZcZTL#$ z;vF_kpqHsM@l*yntAd<$K`y+3b`CqR_5glVkHIMAZ@E#A9{E21w*#l!Z*YMot-wzC zH#5#l2>@X9A8N!BH*hp|GjKFfl9!-0vbXgl!f8@r!DIt@B>0vWVr96OI7JRir+>1I931i+*bC`Pjz6zSOGWezT9*djPM zzWM5-<--4JFww)>6%K0F9*8xq?;ag^70AiL9g0+7FK~ZrFw~>x0=}IK3VO3X2LxTe zkXsNob!^p>9pCA zra#>lk!9b~@Ky51DXVRE03d)Du-%S?@$b3kUgL6P`r6bakZuX=$2N@Uw;m9n?&>Wav0C=!^iN*Dyl5# zRRu6)K_j#e zarhohU58v4Er(&Znfb;!%WeecT#({bTr6!{(qOAXrNLstEuyt`9 zQ5NRX=9Q=cVYTx0x8&2;scD3pWpWv}YCEG^9Ty_!5g7tPIJ~@LY3;7Hne^ZSeh0T8 zb%Bn)WR=V9ekOho*_@m9=QC@agXmNIToj8vTH080{<~5PowC3vi~d2#&te z%6GThu){uljf&SfGga(XDgHy>n-|}@f5UX{W;3_&(FvO*$JN_BOx;*kxai4D zChRW7Dmhrr=5k!`XR70h3{kmqIE=7LhFEeN+-z&b5CcB%&=3Qp6q2S7# z)SNLIZGPj_Fap>xg1f$-?-*(ZhMs%Hgv?u^>NcQUO$x22E3DT}t;ecViJ0M_k-K%n zUh1n-?ZwkbrNNIH1%qJVhJfqFM4Q3U4^f`hNaS&#^t+0soMZQ`O2E(X0n%1%AS3r! zEnmE2OD$CQiA4;Rg__yd#83bB=3!7M+feXV zV{G1qw&JC3tN}!l!{VTcd_vte2>sAzNHE#i9s}Kh%Ml%eEPqUS-j&(@&cWC|@Inc> z)ybo|{B62&qaclQe9<#mXvgbV*)uUIv|Y2V z%#xC&ia1e}6quvZh58ILrjdOaAuA{EE=(zY*a-cIOGH*8x%NvNE&{lYl>PVVNMc^T z!`V&z!R~I+&sH>taIl{oF*%2O1Ht1>k>yG-D5N8Fy4s5~#~UiR5f{MCuc%9q(%ARf zKenN%lEge~N?>fCIVL5NdwxquC5otg&5~#JeQ`A%F6z!*eno?AVDS_)s95aJ_d_f{ zb!t2d@pW@iAF|Yk4W$E4zUbx^HNM#6UNxI8foUw9c5qvmuK9)2FD5m^Nk*!aDApBP zv#{#_I@f*r8o)x-ePp2wYjO7oNQ=lJorvfc4AlQj<}AV7XJZq~$|BginD2*>XY}i^ z#z~-d?U5@ALy~L9ZBdL>JX~MNeB6x%uOMtUL_{GdsYJh z1FI0X=Ly!XkL|0}p69_nt!Ki=^q#df+viC6jrJX(V+0C=>1g{JueO|e@IQ~Cdv!F{ zVY55%y6$W*VLCH1R<4iY&M*bUoj2=3N+g+I zV8TRO;RAE0(%O29t4kar{%{_2Of{jH=+Cec|n}Q{F zA2#!1mi}xVB?|cgkNa&E3c}f7zQm__vq)nFk(yVn^jfkbn`jFH=9dY47_~o_>$4DM zm*9ARIB@vJ`Tf}q6@@=j+_^8s?egGCOm-o~zy96BzSSnjvxI#fbc7F+-WFSnn-s|Q zCheRb>mPg1=AukV@f)+PnC93^djCoHC>L_{S~2;c_)h!rSbP5)HH!Uar@6DpOVgsI zrsK1K(KWdE+PxDGiK>fA(?zTKHxI2k8%2_X4q3?#8Pc*#P~y>?CbT;Ns}3q%(a-kP zw{2tui|Y}u{>2rCUcV38N`LATiLY(6KLrj|SoPZb9NJhWPhXEwne$vdiR(}yZD+!F z0A?k#3CrK-OD@LXhwWRVY_`$qvnu>2>9|uSxV&_dNk(w_4tpxrJ?%jFpCymq%o+H| zF0tOqG62$c175=PGP2P6m$7|K|!@ zv&OpP<`|04uNy+NX02G-s-P;FszF)kmoXkGOo`8&%5)?cpdWOJ{>PlUfu;W8ilent zAn-z(6c*1q|KnOKFBJC0@6;~sc^n6-qgkgTAt0P7fJE1ZY_Uu^c7$U&kdq}YHttlm z_zX!0?e4S>-oS*gQJR!tJbHu>C5Q~O#5X(2AZS1tTv8Bn#FrBhW&-K{kSsHjS<28< z4z!)l2qSK+4B$PT9ZyIxHTVsU4<#QjG0#K--zU7-01+7p;l!7=Iapqlut*aY?fE^_ zqP9jECIl}bI^t!5=AH1tLGj;IW+b(oNnavnK2)LMSSmVX;a@dYrE*x_h26>F@^IfFz+(!%f%@q}{zU?@{c#ub*M z*JDyc$&WM#Mh#~PN(h655qWClO?rVpDLa0V_$MgG;7R0?J#}#ch;SsGsb9;)iB^4h z#BqWir4P7d991i&_KKws##z7nRWE4x>)(;!< zx2&SxyQyA$ChNzp7jqUr*00rZHmsiRdRFsaTD-P9-5`)yF1}xzpgh*E_P%_9p9;s7Xl-yC$Xfcf`hKIQhhe_WiMKu zW)!1&z#Wk@>hHdqOH%V2mQ5(CTdZC>unS#lFF4(8`iw?%9C}+nRD(2Qw@>!8Ie5(X zP6LAu%Yyxztt1EBflsbkZizkT_<9sFU$bi2dm54v-@4?mu;-zVokCJ=evWr@ke07Ue2EfXZ z3ARLW?75CC5EUZZ35=HK>n<|Rz&92}V_sbIU_`)yrjOg$rBNa-mc~%EvyC+c@%h|}j)$I1rgsgjbc@B2JV%8xG<#Mqp zdCRt+nQPaR&dlg&NxN3R)@j+?dh;B@V=$#vSd(J1v0Ck(XU^JN9;}nVrl)b4+1%%> zbH7W$rfqPU(YVcR@A5ew^4sTwlBRL9KjCn*tsnM``-75baI>el**Oj&p%v_x-0b8s zcUVZHSL-``q$62+_V=GWSMi^p@E)Tz*f>VKn0jALg0w87x(%ULOF`huuzsPHhoyP8 z3|~!_?`Niqa#D+Ov#xm%*&X}d`ez7+qlt2&Z&b3HeSuBfByh;nOLAWjQF$0K#z%^N%K}dDRJkmh>2el!7PeC!@=P^Cf4j0-(BTY+V8PUU|g zR_XO-9O=5jV5h=1t5T7#R3cSPVjz;WlBq zcr7h0PMD1eCVk~zEpk)IxvvW>eMBgx|9%Gt^2`jp>Ri#VAOjU$%$x&VKZ~KFaQo8c z`$W+>Ela1}!J(pOGX|+h>f)N8vC#2bCRqIKlA%re zYFcN%bimW0R4rlC&QRV$Pv-l{gL_s)5#g?D>?F~~VB?AAWA*(xbvLgw&8Ft@k1C42 zUHMkEoUZEAXJth*GfnB+Gk$e6ko3$1u{K^%f1l82N$jCFVVWpg1utJ8#mxffH=iz> zBp2fcpE}=?qTk;)v5P4;hmYYD#x39A8d-0ny@~erZF}e*s*nAZg;hi6Eq?n>V`3ps zNl4~{q&Infw;MYT=nlAlVc;Y+9fMWb?!6iVn(G813JEa~X;BslO6$|FJ{XhjF}~MC z*$jSze<`%+;3-8~nDSO_v*0bZ_wD_ny?DPzw`heFW-NGYq6;+TY<6H~(J}!CZ#cfj ztzUB1ZFldsTy-}4dfPEfnzyw|A|o%I-d_wWQ?zZi1`H`nkGixViP99_Ro--~<1y6t z;t+X5M5;tN%tT)M)i*u!DO}2f8FW&V#f<<)Qh-k413F7nEk6vj^HwK(yQ!1uYtAYY zI20ycju$>4cG!ZR5)%{bLlWjqd_pPJGz+tafO&a1ia4`KKG$|oNKi=P-si{-WDpig zILs4W8VC^%Yra%u0a5_hK=GvoF}aTjwf4nDW^gujNST=1&%}ddCNdfV!|h26;+N~C zKIrX36Z9t$g(rF`^_`fZ9tUu|Rgd@qrC(J&f*L^Ara$EY?hI?F4RudHLL&HP7P=d4 zoi99JPsOMC@-awEcfTfTP&r`B3~W^tX-RIBndSnO(HiQ*S7)9Cn8fA5NrWXc%_ zkuQ#|HL$nB9Z1FMfe0aGQ}QqZR)8=ht(D=BFw}bLpamHEVLQwZW@k{-%Fe3zRPIdY z5+}vSSuFjp!yJhpq=k|L;3Xa7rArgWL>`r^3wK3HF}%sXXx8C*3|Em!{Q^Lor_(y| zoZ9^1vfw$1llxEPc1L#fVzWpO@(IhM6pDt56DftL6Y%2e82ms7{;YXBJRVq!4qt?w ztkH8&R|c)pEn#R>XQ+tI}6PxD#VKMP4e=+K&j=DK2qv#X{1oz;M7S25LFt0ga zjD0OqecH(I)pc^d<|aizCrpu?Sg?$663Dx{9;*v|k~Cn#G};L%y=twYp1ppi8QtDq z?;qE{h#NoFmRA`X)b(jIt&0%(I-=1^nezw#_U4IvLyjIs(9x7`I=2L0e+#P zb;f3i`@I>}NRz8t0RuhZgWdyQRhp4YBE(Jg%am6mvU$@cQ~FWkbOEl#vfmjpE4W!!oodm!#(}PO}6PS%RFmZET1xxH^~aYByK3d=U1{Z z;84LXo&F8{KexRsJI#6je$$-AziH0@6y4d(-oozxyzBiRan22c1JeID&KVt_bsR2$ z?m~Z$KOg<^w2eZX)3oZiXu0e4;i^`}_qlol$?Jd4d>I_LwB%`zDTKVe_F%$1Iy30< zg?r7r;~Oj(cL>t5Xy2ugNbkrvgTdwh3yD?uwU%I4_Fs?&x-MZ_L%FEMh~WgZ%EO?s zU(Bxu>^<*MF{ST=qb&Uu8}AV!HPiahj=_Au`kUR@Tpo{zsU=6o^E#20QNYseYJW99 zP@&CV`65s;uL5TZ(Bah{Xm-fOGEj81!aSMZh{&|*vH!A$r5(#!r2~IZD5ak#ud85kIPqsy!lA} zIKtC7F^Ie%{*4Xc0bR9f=z%g&tf1vh7tmBZwVZ4WNq-&58$|<~bf6b4F^%LO;!uq^ zNE{LTI_dT(p_ji`uqg*^XJ3k#ZVK3Rh>ZOZ$xy?gW8*M*CtA6@90IYRiEtJ^T~MF| z3F}9)1o?Brm{hFD(4VP$Y2yfCnx4aq4gs5Jz+X59c`LO{5dLNn3`WJ)zu_cgI4zJ( z?wEG!h~r$Nh)dq1MtsbzV(Cl5@by@pTY#wq@zAD{kx?2rf@EWi`nniI4^f(pe;JAH z(R206wWneV_u%QsBrIeJ9F+2I2m)VF#NgAf(!$ezTtria4?X|G`qg z-k48*-l}VBRvz>&p}rvZ+*zMXVNV9louS}D#vDjsZ1Ub%dQT8`TQSV7AbLXGN^R(y zl{@9!#<#IES}|0G)3>&lD&bdnzVUv#dwse`-IjH~K>z2wJ0qKJPyz!0*h2Zwu|)rC z-ib2)pJ(2%x{Y0tDE#-7fAl8TdmZaLUA|eyl!xR%;Cs%>by9l3{J>+-vVBdWK9U-n6wg~ZZ(vcEnX(M*> zUl294G_<{2W}m_iCRM*18_l>0ve zuMnx+(~0R*NeZ};>O)H41cH9W*|YEzQlxK2>5fZyLg^+F#Dc-W4v5vL+%tpP$lyo} zCm7@$q4t+4qN6ltmQ#Zq;ppbont@^ovxzFQr4+OG%EH0Lg}TgoF%c5wfKK)BA$Sq^ zN(l(pl!Nl&)so~<#?+*8l+gI7UGWC-s)~JT)M3xzhL8o|1xHUn*kuEF~j@A$X zPwJ%QkDXW!%ksW)0cKg>UehM}9(!%iv#I^i>?_>fysG=%M=zILc=ChGq2D}fq~?QO zuj81Q4TP6yqb9jvEl?|cXIfM8{g~%pT!Wad1wo}kSXtWxsbbo@sk~CmQ3W{?mV1ZB}FLM|fG@p7vtoM^sER#Op z5wKfN&0abjOE>gTDvk3NryI@fTsWRiJNi|kbXcKC&9Yg@F!cPL)v5rG!^>?(N+_uz+aV$3tpL9A&2~3(HzGntALaGsqIxU*MD$eMxhLrMv2y zZdmAVa11pmG2mP=#ym4E!!a!DnO3mT|JQ)3be?wc&bM@gpmbzXItKK=2BO2x-ZDHr z>r4W0aCv?DLU3>iSLm9&w`C(7d4(>zsdP`~koyU;KgE)?#ej~;H)k%k&>qpC~t!C!ek zgi5NM;r;MX=8o$k4@93n0pb)T5Ltb0I@D62oJ;iYHt0orfdNix8K#Rxt@D;RTtw;Q z=or;xmkzl*wMuE$+%3S8WGPO_n(S><3R|686k;OAZ4E!$=oUzU8LoXH^5Z|z5S zQ1Uti3L-Xx+PMoPc{Ubh3KeXUF)LAApH9Fl;6|*Hoz*T`)(r;+h<~HmVJ0Jbt%FO# z^=OYhY#>tl`|}+4Xe(nLY*h~o_ZikHwX<_{daAW1mTBWWB$19ObrK<-*0@hBqJP-; zoUtbbdSQvX;}^Lp`WSVkp#UL)6}QT9nn5F4KcqrZ!XMm%i*2){%(PfWzHq4rNU|ql z{D2$APq|huDqXXBa<(l?Kd1zocE3U~C(Igb3Gq zu3;Eei$_-7U#-i<=OBBz>lIubgSI#2g{+kzGz0UG%d#|mD~}ADMYHPi+$wKwk)^ux zHQB5`lMlZu(-a_6AJ4~i{HS#8ei5px>~(!2)sPFK>)tT(TGVFuiF$`B6k=K?hyRLC z4botk$=V*!N&6gXDYp-rbT14$GMj2wI~<$IGqnr4s;{7$&GwwE2jV`gGo|Uvm)mr{ zzp(!2hu-=lFBJZl0Alp3Q29@7ur1t-&Hm4y`DzszyF*s^?hiHSEvW|iLu0MSx%^>D zR2-xPlAuJkX^MQ32}3nhkcfsX)UTVIf`8u4+l%k|;s2(*9!x_A*Td}Iv--fqr9h~1 z1^+UsxIwo5T0=9-RBt4q%+@))ySh4pQ)VQ~Db+JYb)rqJmakn_EtG<;^OdVNc>8No znpN7tL@JTff#zzrDd4IAHTVRIHfEOo*|w;jYp!y|#}g1?Y$7IbDyT% z#390{$zSr~x#s{*i-EKMj3ZfK&Lg;+f)Z%H!YP7$C-`hCyt3ePgTW~FOFi>TOJain*++}0-qE(bADVM#SH;vKj2lu( z&XiP;D=0Z)lGZy3*C-=C}w_09~p4xrRG@S+^-gRUj~Ou?T(4?%lhz9{~$bikU51?w;SS=MF&NQH$oQU)&&1&NQGL0HWuU6 z$9o8rSb`TCJGYw;yI>j*p zPMp1te)yHxPE-6yBzSj15l19B&mF56AO(jK^|=0#OEv|pcN?782+zPM?>ZlJf5Jb< zVh9XR@?#S-7rBxZ+%1eu&nMg#e9#9oz`m}O(|cscnlTm1@f;xvcxu$sIkx4wX{iEG z>$FV%SxJLkGCi?%xfi_))_Ss*4)a8$Ni^kV1U$H8ki3ZY4=J$}b!FS0q^?Bk!t?dd z$2lbnyEdan`ASAh1tTKQlD^%O?tXAPfcoB*yx*9Q(tL{F9i|wN$XodI=j)(YHW^sX zp%0-y9^L-rz1$dOk`Ewuo4YhKmk)o?%427PXCM_@&Q>)JF#C4BT#WV6w@UQINi7ht z=P*AYG&5Q)wiw4x#`@GF`-fb#eZ0!e^|Q4jJ*V4|$54db?AEFj_^cl8W5=(jA_n~A zcJ+_`*icMf-Hl&2((Pnj4^mtfdGv|f>W%b@@qP5`w{oyEcb}fzseR}dhbmGT(R67b z;WwmR;=z|&pR8DcvahQz&)bL3EVv8hd;A0eSDE0HgX{vk>tge%)eGuAu<)YN0n-DW zSmr-15jwO2Og7g$g?G&c9rGq^rnlZi)M$|6J-q*KjoLQs6}|4^i)s8_qX>WNU&jCG zu%C&eg@N_|17J5`u~OL!``^-j|BY63BAKEz-zFnhrbL(%i>_U?p$}+Fn^(m`Z7P>8 z(kX?gxBOqYB43H6W2HAkCc4=v?uUWbZ8{&&TiAufK|*l@T1H)~Si(eE<3=?@ElhM1 zH2bIhLojv6l4p9Wiz^em;KZCc%`wd2&_t@9^+DD8joYmNK?m3d|0-k4NgR4a_3p4x zDjF-tG^{~knsXZZF?w8#EX0H+>M0^6>?nOU=gBYQR=%lXq;IR^2oa;n;pZrW0Kx;gq2eFWa{4$YnsR2(HI@WZAM1U<=0r!& z>Vp1?4&_qv@zSMkiBzbGwYjk;CSicMK9<()|P@^bi5|7>3l|+rdXfqax_f+E<|Qshn9Gezy>lA=XKW zrmnc4*+yj3`K^b;V0~L3>G|%Q4;}tr%${3N2ykwvJ>SO)gJAwz<`c)xv^Uj2ysbF- zH8D(KJb9+D0p?+45X$J;{0FVLH`o@tczCu2w!t4mG@fuisKAH^KeDz2ovh z{DZ%kHIS+6cS3*J3jaDW>&$Mg6*(jE!EU{Iw%~RNwEumJQ$Agp=7pxJU#~Acuxhkx z>!A)a>riDf5qBolqLl8R7-<2=R=;=8wc(g?N*zhiC+F3RssdNHi_Dbx?ZPcQLFwOIEADY z%c576h`d2MIw+0*@8yykc#^UFv{dyYcef@Ut!_2UJ{9_v^;9)+Uw%O;dDg2o%z08H^Tn##zrL7G^J&7TfQj9jMeqY)^AdbaEwgQa8vCBnEA#Utp z5ye_PtLRW+{K8wBHM!TI(kXAKx>EhZ9Ade#|+5MS>EvryO}HE+_ouF%ruO`7sI zz#~WVJ@^(RMgoo3+>E-3DHht(AExgrPrbRix^kI(qqx@N@cEC@XDr*1UhePtKtJ2m z*xt*CFY3;E& zhswvD%hNJU4#?>WA0Els!Q!%K=!xgmn?a!23(!ta$S&;rCiu-@2NzI%-nYXY1#x7adiRwtPme{b*y0c1|F@w2SC721dJCV!Z@ca(=YOt8-oW_36Sx0=R?%*) z{~LIO{S&ECb}o5O(E`Bby3(m7^(XRfJQ3Kv`%Rd@!q_2-pG+QcRrk78?*$rPAGBD8 zq%!gd{oUi;q{9moeMYwD>?AxJ-c4dW=O|HuzDPlEA08KH=;B1?wnPtD$gw;K>COWV}xF0I*)Ri405X9zWa?2AeaCl{iN)oaj$V z4IdSmAr0+P&Cp|k%24{X$f&EL1BpIp*crjkU{dD+jqpo-lrf{g6&NCf9ehQ4XOAlK z@UJ1^GX;*|*poYqOZFHU<%v|P%ghQ4YS@8sb*0pJ-y1ar)!4Et`a_ zNa%m3K8jV^dhL)ae;p%{JwE5NWRs*0+ulmns}X7uZ?qlI8|U?J-qDT}jusF?3$GJz z%vk*K4(y)J%DN7L!LPSfW|ROaOWo~-Xp-4;2op{eE|kSrYzN4hJHWUV|0rNJhdu`* z%LK?aoZ79Fr!9c!UCYY29naI)yxpi62dGx|+GVpD6pm<{^abwuYlxvA95~=`d<_%M zX3k_M!{`Osd62>I8`KZ}L=-P3UGNKVt1ctu*Srq4>FIWum^D5|Zv$qrlc`_$?P}~8 zvbU#StmVdIc|t}Z_HFbH8P5ogaefFj;`?-U?nqxUf6GZxp8X-$KA3G^kvRr z8h6@qq;DVk{D)cJ`PVOFL=1qFl?@)GheH%U(2IxdWR_rXPL%I72g~k{-Oe5R(E6E; zgOhVdE9yI}%m4Xy>6}4=^ybn5aT<7?=}1R&??hz+`!(hGZbcHidgj9IKio^{?oZ5;|0 zpOfI#=+Y*0dlK#|dqzq)8g$4Pr>ppPdRT$rq|GgpQ#lS?B5xHrj^Ai~CO;&BZ$At` z0YHW#Tv3Juc(iB4$c&8dQ@Bsl-nkiwtl)dW28iYcVgqseG5mJ^#K}BdJuND@l#fuI zK#8wE{GRED_-j_PHx2=D3D(lmOq=F0!x<@z#uHA(i&n*IY&o#Q=G1O%OYTdMt%;Al z;c1X){;fg4D2V?slwf#87D?jocgK_3);k^f-W|c6Ho8m@ZB5jr;R&gmo4jf9A_B>{ z1lrilhmS~z!6`0E1`tSJ7aey(9?cEei)h_sqm`62sQ;WJn8%~5u++dWa9of)AU8(^J)KVVxf5Heb z9t(HD=1hOa{|LbnC25uV;AD`JaQ$#LI0ameG!HZQJ}$01;_@YsR59se0HicT4|+I- z#%OBjD>#8iJoIFiMGwtriU|HRmdsc2xb3JRxxxhyJM5~7THpm3oBIpklZT4x!{3Dx z{{iXQpe3QO692U0mvUT+XW#Wtb+=V^Y(SwgEg-P6YOzjbe^jc-ds@? zAhs$$BJ~3Lk*G0<mUQrK{@80cSC8OC5et2P2>qpplp zQTF({CyXjq%qg4TM_ofJd6U1}Ij^fr_T$8HkmNcuWirMy8`Ca%M^moQt5y_9X+t;Q zZ06yFprBap(JYUY)LVe3-Tc`B$ou&M>@lRwQc8e7;Vqa7bJ#4xIv9?KS58<^5E(-P%@PH3~N@|bM4Qyl?9%V+rr9U6jqghIP zjTT5OtW5c)8Q*1t-;GS16Tq7a^PVEz`Cv;t(Sy)@0e3AdSn&v=Fz5(cIs_nspn+wK zqGH%rL|~*MG7ly4wUoBs zN^{P@K)gZq%I#4+BGhon!Yf4{@suv;)r4k2I^a>!H0X9ltgy>3udplXe=-8+1_W3f zIj+ibpS*oypIf!yKe_khe`0Upr%3W8@#Jhocm@AtsLIpDMUhms$|!!GC@Of~h$gua zONFxXN8(U6&2fbb!=1TdXIvXGGZqr%zVl*ZrL&_+@n)uC6<Q3cFx)I z!lobhWZuEWAs3Z1>zqX#QKkt@+D%%bS+M0f%;&k>3>z*6IwYSr>?mp@s2d(Ee;g`e z&_?(1<9OA5zIUo??D|+TN@z))wo?Z%VxnIEx!|ENG2bPk(WQyjrp`mBImoSoa)$qFbPTFuxTzr2At$rw}Ha|whj#l5hJHe$Z7Kf@a~eOG%QWxlIqWr)?t-U$6o!*i6$3Jww|q`?J~fhnCEzVL}m!hrrhpkYH7mX2xJ(uZeYiQHnpjP>PFx!niwg~3tMUh!E86&mTj z0qy-wW^LROVQ%tM^&ZmI#rnH6r8OTR_^VUg6deC^BI`{xqR`f&rjLKnUD%SuC%|Kh zCk~Oy2bD?0-U+}&mT*kRH5@4piBnMjfLG9EGoe*$j#*(7`4Zi@3FA1da)z? z^?0^ecUVgsIG9LdA=+5?qX1n(*j7O8(CdjB!S}qd!Hp()pB8m8VA|Ib$urJu8C5C( zt2%wN!BO_~#xmH~fB8yY_+Wb57lt=VEwkgsv)7;Tb8*a)4sis3h>yAS?s*vGvfMjI zM!nX*%alUp$TvBT`nPW8XDRUGCg3#@qI`gka^uQ5!AYHXdt0zd-T9*T_x~U{f7N-68@BQS}Yi@24k94fo;~+9xmM+ zr$n!@WaIu4ciMS|bMx;ny>&GCFHK#>84Jl|FE6oD(LeyH@&EE^xvmAwj1!)#M#y#? z82*ta8NdEk3cOLT3-VT4y!1eAaKme8g+tW5L>+kn`c&xxk-DV;?D9ydS`P$0yZr)5 z1}}VKCBZwSf66;8Z_{3{mc6wNFLOtGs_vrhm^cGz{Y`1iz=C#K`|Gp}BFpqS*l2Re zb|)S#Rl07qpW+VY+&J7E2*!4{ts$j?`lNY1mTzF)2>#|Pf#Oe`8#KMJ_)4CICvfg^)~>(IJP+ccFnkcy*ib{Cbv)Ao?<)E;=L((-vi*&G@=WYqP&N_?%~38OBKvWRV8O(T^ya$q zvRMT;nE57QHDWyC;cukm*V@$0p@*3KuS1$eNT|kU)qF?(O5Z5C>)|mZJ11c~N^Usm z{_^F&p8-`>dqur^6i4=cRfe?4|G6{ZFZ%ocx%VH$`~T&B536n3Zi*xNyr>~J@T)%4 zyIz8T_8$k%A)+8rDF8{xAyR`1CRs~%4@NBzU%Au%^ps^5(}r@>Bi_K`{i*NlsF2M$ zUz~1CBJ+to4IW4-F2`CB9&Y$c9O~|@UUSo=S!0PgH0peJ|G9Or3zaFJAS>y@U zUfHmBWTFhE^4Cxz&~WItsT4#`C1a&kP-=~gxS}FD#a~KtqHWwnAxg6uS21Ng5|m|* z7wT7t6)W>sI5JvUfO}PLzPduqMCn11rc$#qokycCs*!YGniFb5xn_fXB#1&}*f$GO zo?R=d`=3eS0#}ry1%6Eyxzh4Pp>X}n-*N`^yZnNFLw>W8Qb|(`E`7ajd z>8I+>$c)q0O2*x=;^?rZc@Q9}MrsNL0i+i`#u|@cwPKUhl-6hl+9+X$rt>_Uge_V^ zO1ol#m3!S}mIhlT1H~1shR$+J5&)uu>vPKRSMv5X|6ez|uu4p-{GO4HCDIG;K~KQ| zRaoFU`=|K_Y&+oe*Sg&G7{)vkSKkLy6mQ4=@+Bv+`fCfCZ|Qov^$pY44@AFAxp8z6}?&&o5D%MB%ku(k+w}^Fg!UK{nd0PV+ z64G1`DDUs~By~D^iG(ua4djAuXY~7NR zrkM7pPptm%&1yj7wE4d^q&6saIOw{#om>y!iIdCI(<+p%7iy5TW(C@n4DQO6b7t1V z!v4?|W|ULz4r(SBBIfS#qUYTY=!rCeH`zl*KQmNe&GBTQ@^*s)drKIDK|QpJQl)?% zygyDa=sw-YuB?{pJcFWEV@jX`e>GqmW@*>Izrlm9ZwRO9aI?zf02mD+{7pl zYBYDLu=l!=y_{JfolC4;)Dm%i)*+a6?pe$1_*q)=-_8c9>fm81`?zi0crV_TiuStQ z`khQrhkm~qVg~c-a*VLGhSEPOXS5~wiP&8R|NPwB3E~$2;CjTFm6x3m@OCwXH!yyO zR1WW1YO_#n#a~ZC&(`O=zOZQfINMp#(sy?Lm8g$cP_}fEJI6`fuM6ZZ;I9LWV@&dX z5gu;dn)miq4tUasQQKKC26zx&0=gk&+jk0xYT`^OTM0OFh!|#wg&9gaP6w#1)#cxK z`*!{=dV49^=TeT5TE3&*l163U?5XG)FE_sjXOF)lUDc5`O-W^`iTsB{e|34@@-Y+3 zxshJ}e!&wepsmtMHVrY+xQ~AJ2<=Anq_*cFMW<&6s;A(rHYuW&)jHyrSPD#ZYqy)( z&4C$*R*RZuyH?YobGL7+D36k;G3Kqa+f0?qH~N)l)Wy*MaT=PM47w@b$@H0SBrs|6 zbg(@ph8rXRHBs#D2(3K&V>-(BdHZnjdsLODV_rJs$@zKBuPnN<8-?7&Huo}9b8m6H z&*yFOa`bDpO~ct}@UbZzL#KT`6<&nNz2Ohi)x_F|K89U1ntvrN^LB&M!w9`wEdiO!0$w^J&eG)XJ{z7+$P8jfeT82t35{xcv zFPpVmjJ_$>Ok7H76~y{4i`$B=9VMxklMi<9PNFm8-csY;9ArXf65IX*BwZC=AG1A; z>!HQ<)`-p3P2<7u-)4?(_H1Yf2-+Twfqi${2Y-yEd^%pGS$nQRotFu%@)QrM#~rOc zur>$_#H?SK)|L2fwS&E)=3KQ$x8bv>1#l6=wDyqQFK&mQDduX!asKQq)CZ7gcuWo= zxd?GNvxhY|76DoW&jqtJf7c63uO zAVmOK=a7R<8)UDm0gt~S@Gt$pXnUvV+=6vmG@h|-+qP}nwr$(Cof$isv2ELSW{i_{ z_r3eBz4topyqxv&w;H4BZ{w*~tNOl<{1%$S`@`z&zbB|3g})=-2MkX@Hc&M z_YD2fG=(=+Gu-TkN1^=@`;2BMvFLlu=pk+#X`oQgS_HifgYn5}Yro}m-#-v9x<$1wn&j_yX+Jv6cc zQGR^UGa<%!hO&aVGA#nr;>Qtv4z01l=%tyNrE!NR^ca!jXLTLuSQD8M`suyE>LdZW zRK!iY-9GE`M|g0M#`Fzhvt>A0b;iHZ4x-KTwNc~ZgBrnqGB@!e-uTcx_Rn}>_P&%_ zjSRt!_BpuSf)Xw{N(2E66Ph9As|7{!v0I^?Muad{b6s5iij}1WfWYHDoSN3)UVF#s zTJ4t5`I{#7$Nx7vnN|A^4$ucrQEfS|M^Vq~^BNp7*b^of=#tnq{4pzhWVxKbRd18d zoEiEbz!jK|T5++u1b3|OBJOaLU*N>6ov84d;tw}WmzWcd_{5yHs|pdkINSHIz%_hH z5YaBsELLVtw;seXA^iA)Um~z>E*#bbq7mxpT^0c$2iF9JwU@K9w?L=r03piqP#ZZi zMD~F?{HL(y?hqNFp+~0{3XFwS2|}N(ft%KGSAUN3Fi`avUH`;{$unz0AInj@_5b>= z8_@=zjx4}>Ks835;TygP!yjj79=rrFrqeQOKcXFiw@2z4a)m%)GJTza>4I9ky3b}d zrMKz@{MG+LZz&K77-mt*lh_ePW>{N*)4N=sPJW#L-W<($T*@-1N&G(W2JU=ZX;I8D zr)!|ibv;yXr*vw|(E)W@gI%3gi< zdE^bVYc<+@o>uhke?2i5Uu83xy9qZwzx z`6V(gwAh^5$w%{}zvP+sUSZp;rM?4GIy0CrCKP`!mu;g~%|<=U$GkO* zqkZemu~Uymjc$DDVq&RBwPv1n{Awv}vL+l{&-O{Clq?B{I{L3~iX)p!IG`qu-S2mlea?@i)N!*(u%0?~D z{lko~O(cFQM<(|qjZHDkNDy+d4#XMU$U3%~j##)NL7Bz|?eCQyJ0_JDMQ4TTbQ zV6>Npc!psnzkJ9)ek90t;=BY;0E6RGpH*^OXi8&{71p2KzQZk26g620KsB3_pEw6v zlkzN?%yQXjRTIqZ6BZ5i={>HmnNSsbZ47J$*vrV?|F#iAJSErYLmvDdGrQr}wMMG} zWcjOsatJ`J8XI?%=iYRCM4^{#dOT-++xKTekf-nr(Mr~EUGF8b{Z#v#11a{W_Rp;4 z4aR(YwTc&bwee}t8dVl;F}6!!IA(uPEBW-a=+k+BwP>9pz(kvqRI_B^iG!0^I8d*N zZ>D;8km71=+9aW+G@tXGx18?~-pih0pJgR`th;qgFTV+!9_@vtO9wv|W7Hz==-n#p zn&F(3Lb1#Rhl+SDO6;ddZ@|eQKBx*IoafPbuNyg#kN@aifErX}2|7QJi;&AOKkhd_JTT_q&{U&8RH_- z4ai-mJb-t1#ofQ53i2~S@C)TMD$^?070grOa1J~zs`k2d7jw!m2rZ6xJO_3Xqu z8uY#^WozqMfCf1#9ZVP8=)VIoU%Obx3RtvR9~zji!>D1gS}2k!vel;b5etAa)bAI| zBrBQe%B%cxxC@iTm3yLun}rQeI>j%O#s9p~BGv{Y&bcj07rbP>$u2hPF#_+Zvf9q8 zq((Vsgs7|?siYQ9CSsU5n8Yn<1OscR>LbAQNb7{CeHrZb=hgGq8yW2RC;?GT!R$VU0VGa!H=wJKGBQB{!vVIjsL1#3vfYuzYzzWg=bf zmy(gb3`|>UVx$sNvkoMa7+whdktmRoWC;bHq=BNvYuk*z)5Di$PiMmi+(yEw#W1r)_?5yoQgY@CFCgiL%X&vHnLN6->j#cf%FdxM{bfG=IvB}#lq z>iBW3h;esGgM~FhhMh%o3uE3$K0Y)FG|2;Ss=x40>4(a&iC#{2(h*s&UAYEWsmiR6 zGK6kp_;v^r?a=EU_}Kbrcu61FsNNPDFZ zx*^>yC4H0n#XQfuZJdAbxWYgDw-O)%Mi~%cgAAy!aVBK=C?g7dg26a`d&=Y-ZOD-g zCSi-z&rI6S4DHX14kbQer!v2=>(5^=6~V@;MIE|G%cd}k)$K;-U74C*J%v(LXJ(Ht zU^LcsLs|8H-eO{`dv_5?ZT!D)1wx;;A~-}-j?hy+XHqCA9i@XgC`Ja;ksPI?ISBs6 zz+SrMP&wC#aFl|BG<0!>fuYzpHiF=* z+y7?e06{xsA@PWCQ?sMAv=-6GU=z##7!+bVY2v8Fo2`bXEah!oEQ?=!=C(j-8Anj! zQEE}5jSGp>RYEx4_ur$BiKqa}>Z%VBw3ma8j%^S+&S~Z(?0`!}udK;bo4jh^x3COP z1Bv|diPd^(_*J+$un_oG_>eqSf%%c@M_rNQ2P@i}KQv`QZ7W=(Vn5@!g4ki! z$2Z{-{-H#{Zq5Oh5JU+IM{`1OFJH1-c*HGCTZ!!5ls)3|Cf~~tyIFdG+&PLjY;9Zw z<7*Bv^LLL7cX>3Y^!o|P>+!m7M{MKcl0tR`ih}Q9mQbf{RpFKy1=s5#?`|=%vp+ms zY!DXEZ#j?iau?n3_7QymHJ0>t{%~M&mw;;v35K=(oP6q|Ui@m!)%D3x>~08n+IIqX z&$OLkcccJFGVTOp*RY5pV&JkSWj`TuM7#De6qBGQ*|zyEsP^s^7T=#3n{Nc|ZQ4}m z&VKK>uF)sg@x%YbTHXjRMsKNQKMw>UaSct`22ig*JL*F zleJr|&)7HB;VAYxOYT`JN5`Pw%Ts6}`zE_`@IGW`0!M{?-fGCfXGIG|F~cWt3V?Ui zWKkTOOa!WB3aYo!gEGycdXz5La$#9`Q*VyE!wQ*Ku^^G2%BvjNTI*Q-)YS#}n%n61 z)0&nd<3O~)-J4V^oTJ6QD3IcsC^CbTE1IM9=fT1? z%<{O&;5U$2Pz30SUi^}F?oP073g=SF5>?myH*2PYnlfdP z(Yd^)Ldo>Ae1%elA}86gieh(| zn+y^7yyqyg*Y|xVRUTED4Ycj}B(D^ik9aVzTw{UOr$%5XEIXOoeB22Drg&gRTpWDM zN!+YI@?p~PUhrLvF`T|{TP`DHmis5(NuZOCUG?ZtEuv7xQW&zpi)Sp-GpD@8u)L;% zTG!@A(_bWfKGIZYriMxC?;bLYS7aKXi3dq0nS;tZ{3WOw*ta$=#*YrL*mNM{Q@GW4 z<}VWEijMA$-Lw`g?qPK!%~+$SHggqm;On z0&jCPFSCD79SmpQKLR(3!3K%YOHKCNHkB(15?DDixoB>cQ)atKHiQ)52s1og$3o;{8?x!k-x@56k5+Busk`SnNh;$Vc5psDW7 zcy_sn?b;@b;F*gT&Rot!iH8w259VvM!F3I(7L*6!#*$PC;cG}VNPOdie?+2$!6VU- ze}5QLXeJLGipe!0NMMTn#+_l*6J^v)lmq;zw{Hn7Vb(Q<^CkQt^YO_X@W0VZJg|?h z5RQLHTS7r$L?&ZmD6+dkmK>BivY`2jGZJo7wVn!?R49GAz(w5u*L=C-@j*pGwK?|h+v1_ z0iU1`&S^VZo`vn>X8?auccW1<`CKbx6IkLv;*FcStq!Sn+$Ri2Qz+qsfBSFlkcwqn z@k%kt3+{8XIuw3fn`tAC|C~%SV7IsiSjQYshjYISVI~1_uwc9KT2H4PYs*?`1^QV@ zuhBAL$I`tE@~X%9bHZOQVr)2JWo#OT*@z~vn?^Gq#ae-_?lWrgIWqz;QOV&tua#e^ ze`}CFhFY6guYX$oMps)Nb?j*}H*ZH`8~(>v}cR%B$7s$c+Uny{gNgLL$IaBU0iL z4*X0oh|yxEA09SSqL4KhRW%fec3Uac43skJSB>trk|Bdu@Z)r_@wOo_+Ssz((TH6m z9B9D?Gc%Xl3z!Q5J1C3hcQLdSg7*E4#vj_T!*N2J>tz2Au zT++EjY6ZGK5#SI6)P*ust1`#s9}%p_{G6FM=WPXBNg`Oys)N`W&v54P0)sfNoM|tV zAxHy)tzNhwZs8r}qlrlV3mb(pXYBE{^{|tt^R|Xe5CNY6grR<<8kl$qTi|UK*~x0%yH6ZjT({nB1cgA;saI11>o2h1{+1S> z!Zv#IT&_+IqaHVP58GBhUq0zt$$5r6>4FNiX809{yuQr>xrCLD^b6EYIpXBfp4+T; z$Vv5Q^w)hl(tVmXb{mrUW+?VK^GKDry>I;6e!w(nv*rj)tpP7Jdu^;Z(gr*zkRG;s zzac8P5SEVas4KkkT)0JCr1To2QJYb0F z_!TTKhy$@kekAWlbT)+7MtSDChXXmxkzL8=UqWNMT7?w72O8oS%UF?Q&L`WQnHhvnwN(Rj}clf&v96!!c!N98ZL_*Y1zf4 z{f(_p;_?a+pbc%8q(EJf=kA9213YoBF<4Z4W7yBuMK**~4JY*4YNOt8r%8~USW zG#u+7e#UVy|94nvx-xbT)wu$pD%nexvbvmA&vMoDR5QR}$ahwE( z`%t1#fyzEWLa34_v5mF!<2?*da-&0}ZcxlqPv>yvYz$SlJBu;bjR8BE{uZa^@_+|P z#2n#q#GJYY=P8))v{?hvLA zgGjp&mrrD%3Zj^Uu7?y_8klYTxc>O3(qHJQiq9|k_Upe3t!)F|zEo-7-9lv0wZ`~v6Rxm~VXA!pYs`N(41u+1ny9crk`DqLT!E}tzs zxN{D)esislvt57#B~7@y8g0IqJ4}{s?Fn@&v1(WdPCt31tWaQw-=DY z1HS3ECiL42f5&7KRI8)NUy%GqXOt|#Yc*KC4@dv2cszCgB2%WyZnW5bMk#Y#y9_*q zUBM3k$O)s4A*w3MRjvYZlBqh2u{5X>d&7X|5}ooCZL9LYLtw)vJO>CbW^>A1kN6R*?j>2mGp-1|kwj|W|_&eYxrRR1B} zgk*qbJ?D5sr%%la@Y5ZDj&2xDztP?zOravcMsDWZi%HemUE`h`ShqhDg?hcO5}c_I z5hfMXD4vc$H*6@<0^bq55y$#Rihz;vWAfuM+=vnkZzSG9y?k0RnYPbBjlM01Pd&kX zOwbWb99IQ1Axz$OUw24BRX|4{h1A2!i7_e<0j0EyF{|MO5~uz9K{DQ=Pg3DFo!i2l zPPQsIevu9T2&-ma94;{?@k5oQRM4E|zF`chd()!MfN{tMrR0ycRlNN@t_l#F)Ozxx zW%8_tF8|nka<;vyBw;E}`aR~*I$}?uskEq{_DPnlq_(HJsz_)+2D6l-vHY;ljG+LR zasA{1vtKdx0k;%;iRza&TB0$$=qqqiM#a2YJO3giB#Ma_xvP(IjgT}E;nE_sp?5L& zCfToKE0h!M}jX&`YaZI)#DB4-OooapB&(d|?=^ocy6ZA0bb3WR6=Jc(BR?n;e zfA-E~?SEaPoKEBXX~q^(9sIC4&gh1#`L#SX*&;0jJdv^98hZ3603wr<_Iyilsc5G+ zg~7@$HNsWx@M!q4bfv9Gj(P*~nz^k3C~Q-=Ko7^X15JHFOY2$R^Hhl`n8?%!ihf2$Q%=@~LMBqV}!qzz?2 zhQ5kwEjCQ_x0tWtJ@^>(i$Z9wncg)x>c@d zXX?Ds_IvGU{>wtpJF=Yo3L{D}Vc%9!_o(I8ZV!Ir^p2Qo@BRR+!=iRMm#@^G2i+TO zm6N_MS&;^> z1P25IyIIrPVhMzzN2Oc_b!zrlh}?)9Jy-$=kv8-FXNzaDK&H0Kzx1bs25=ylx_x;( zy*n7WDQ%g5a%f07QOlms5*4i(``%YQ%s}uu+mL73F$zJ~c?SL-1t1RvrZ}AQe*Ho$ z-o%Gir5?3>i8TBB%+lxl? z(S$jto(a=GTyp|sh=DxR)amPsc`!^XP%#Yu3PISK>J`eB~z7)lG81e(C z<^_1-DRTgILr8(zW`J;W78m_W=*RAoNyYIo8oz@e4&RqTgJ6OdQa))h7Y*cO7Z>AVU4E7~#OF<7 zAwzNA^?NDWBOO@U?O~Wq>Ji3!&SsN}N^1l%H`0qOeuKr|ik0;Xs@)(1#U?2Qx#aeF zVI4$c1(ZVxl2K#d;yk0P(VF~J`Fk16PC66?$cwy6cV)rf3u>zM0fB4%ouo!fsN#v| z;Wb~Gv{$Z&3Z3IyLHNw&&4C7AeEa57M&t;OD7k?Bzf%axM9PG*TE?PqeyTp(^Dpj$ zXhb|*pn57EA&qm0Gj|z1GIuUfn)#fGNq6SKB28Pb{kPsQEcN>tZ+`esdV_OT16T)8 zemaLsmN6;#17CfYL+`N7@C3%Y6kl!E)8peS#5MT>VA zWSllD7j0N~_4VGAmuj_|@OjSE`RmhUfE;CU`20f4XXfpd+% zX*+0kfN0hlvVOAQeU0HB@m-{;g|>SXiJs=Z(TGwEbV z)5b1K9rcGh;*cWQ=(;Qe?W$mAQ>SuhS2V#LXHxw=y*n z9bZ{TiS?h1e^nnY)McALn~^|bPY}uQr8Zj2><-sjH)nI%M*CZB_Gw0~Ena6_gMxAE zH`yBMKYN`hHnT!g4>+%x>PMlK75D5Rqyt*Pf9N}4uN?J(y;&Tn@`>$i8#Oj;O@d^G z>g-fp_|5Qt+7^vwO>!zSH#XD3g?^-a@U&o$giv-toX!WY z#C2*^lKZQGP=ouU(xjp;Hs;;~?1s|s6Z1c+xkLKUp=CFL`YC-UIKt7#FM}CD&k#b? zZOfxBc|5aRF1K>4KE8e7dB(cZZMQ5B)ROJLf_0pXA*3daa;_g``W69LN}4PVAOd{B zo9i56<+U3Y@PZQT@o_OHOkEanNr8-Dh;u333<%5-qnrvXM^T$eo`;IFd+#Pe(#A&l z+?XK5%m&upM3Q;n2X=>z+}HKd;(97F^Dc$v!nhSe8s{wG+^Au3JRTnr&VZb%`P(Mt zp1Ul_rA($tB)xwrCdB6l0ksi2?&Vp#S;X~Nhm%|2{s1X}PQ?$66yziPRZv3F0V485 zW>+1)Z>tTUwIGg(v6_Wh34a9bhWEjT4wEjp1-CVylvGgYvA8b_5C9vmBeUQvIg`{c zoW+q$5VV)ahP*Eq@az|VA!f)262?S|vdM-fc7;%eG#V!i5B(i&5ia~A6u)f-#I+iR z5SqDTT7bBE= z_+a8=LqlUzAbO8!0crqWZoD9Q=lzT0CGbY|zLe3g2h@>nRwuiX`z@-*e>&hUwAx$^ffOmaKUCjIm+OEBo+fM=Q1w2phiOK02V*wJ`KP4(0`>p*J^jy4_L z1GQ0k2-mNJ$!=c6sQ`~V*lv!Rt{#4o^k9yS-z|Wj?R9!W8*XDI?yoCDTv)2NhGeB! zMW}YL`Qekf%*zGnh;q#D7@P=g5W}F>G&5H>b*@2!TU3HBf^3@;2h&o83Y(^qpJ9-*@h_(RJ$2?8k>(Tq8 zHzR~wpaf@BObUo$&?s!*c&rnLICloav=nB$-TX>3H+pzFC}%U4DZ@z-GD{T21Ru z`n8;VmQz*#Qp4sK04x;+(ZcVgeCV&HlfQ3s#gF#&csHxwD$gzHwEXJXol_OwFaEk#aY?Ltqe-mc^dOIP#EO)rGd$Ti>YmSN# zf%3{DClxO!*8$|cXm#HMd5cr!O;|W9}C@J7xq2=8u82ledm&OrDaDog^^w z>S5?9XwXoc^a$;_o}(nU+^4imD~z*LncJLL+2ob5JpDbrvpf$Dt_XipNi3@Z&Wb!f z!S|%*)|@OfjocEGVQY$5ONj}BJiKl!4E(a8mIYa3Pd&12ESy&}Dt=VV#$TU~R1~zx zMzJ9%#3TeSYl6k)NlA){JD6Gm{jprzvQ{D^#w zYhyn59VX5KeU%$Ru48EuJqLAB;CE2w0vA)JC;sHvUqwR^gildm=<8mj2Z9MGgJ|-0 zSGF&CJ17)}(RWcd?5$CCvi85HZYH2L2qvK25DX2P7ez00q=h}`K12wd6P{iMlt!Cc zL4AEmXmY|g{dM}tT&w}UcRi2pZ{H4okfo`Qo(IgJVI~SQ5mJsJZKzHgylwX;B!Gu4 z_@WJNL!zM<+t6gihMvos&geZKyqa?ve1&l-Yr+qOAo5$}a(_o+qkSM<5Oslipjhlw z2Mm(l5OpBUU>+CcZ2>8|Ain#XK|0TX(FF?K;ia9-Z)}7aLHb#N4Yyf36bafbY=iW) z%?3JnIDZ8TdM^8E&IDb+nW72|UOl5APE|cXX1bzojDv)gqimS;1bOW+n=&g~$u!C7 z+}crgPI|gLQ^I5Ik}cbIpQn7_nGH0gXuc05XP1!)8%4#Uc3LtKl`s;{Ay`cKA=G?R zU4?87PWT2`YXk3`13#&!>%x?O3UQWZ#7saNBHZf!$`*4lEn~&njWJ&pqI~O5&xHRv zNj|LGj2VAxJHF6tygy#k0xB3{7&#^2*1<9gT)o&*Bz*bHZ3>qU3A*vyI8Kji`sGUs zmmi7Lug0sT1mgp_yl0m4I8D$Yp+8#9r+vM=cwW3bb5;|?=MU`Jt&L4WMI z#|LM`>feU~j<7zlH9|Y`>e37ykwI^%3pgfa8Rw}cZ z-FomSx_A1|?+MI|duI6GR7I9-&BkEGIFe)2G+fH2m9p|{T`7SO6o5z4Tyt$oS5wHx z-TLUHAK9nAft*vH=q{P>4CS+*iD;G-q8bb)piXV02jIakT8H$&2G^)B6ZGk=TyAR` zjpS2G6Q4=aUDaHzyICxG@2>FJxQhx0FjuottZhaJo~f}{ezkD!?21sVRAj}ih;W!} zT(>XMt)*ClEv6Gc>H-*gF}I2$z|OwhIn2k^ZQqp+*?2XXgBk5*D%6;Dx0wvRrL0=F zyNTa#7{_deP8CFtn@hHMUAaA3c9!#G8W?!1&8>g^7y|g#KyYEi-pPWCTpDO-7E`C? z>PmbXXlxcy@2s^FCogf~8%bv`@rr?K7vWCSEUPjhsu__uPqN@o0CQu^9@p4;cf&I0 zXqgVaW}#h?8MhlFU&Ws5&X@#ChF7H>7?KUvr5XCNAhr> z?-5on>&y$yZ9`Py6X}*Mtwv4;)+FYD)ruNR?jV#$bmo#Tg!1Dbb!I{BVYgkuAf$%?!T#|WNl$+V_@=q-9f8noD zt>8! z@Ce%8ao*+mqZEI6O3MY@6jYQ{j|A~BvBNxXLA1~hwt~U4O7X|1$gZ>N_ePTnS+JnWe6LFsVyFWi^PhUUXD#=d{FR z5%P{wQA3LX#~75RKYrsjQmB#S&MIeS^KDBmHR74CU4G){0n7_K#VW3z&zi02e<@Hr zlLs!0p4CdF6+}g87S!Nh>krSO*zv1%Of{_`LT(&pV~#${_ML=CpkN)?<#06y1qSOP z`+w~@z=cu|-xL7H5o!cqfXosZ3fzP2VXNPQ=n3zxq3!9ZA;cMh6TwfU(6ycTgKPU; zMeO35qGJZHUIJ<1IwZ|HKA8s^ZDz}-ayz1#8!+uf9gYRGivtDb5YYyqL?Q0g_@MS# z;#Bvi8zJI?f*IfkdIW2Gj|CYAZ<+&t`QyRUrQc`?wuoXROwGfn$tASu5!ZqH#ECKV zO|qAcn)31?6!Nc_8J_u%q+aH3^uh-aUM!!ywCyejCsX4iACnS7mkZmX6C?O?ma|Lh z7UGFa;^-%YSFk^j3xieCipqadgNK5BfCvxucoRJq-ndNaG2OF2Akda_&+?<2`FWn` zdHfg@y)+H&!mWd{x2*B^%!`7h@+7 z`$}|Gw_(oD#ln}3gtvop1$l#Xoqi^Yb=8CZmG?FJo5}s{wn>t&8*PBxR1)yo*l`b; zZ1S@~q8|lgMmBHmOj6bEaas`71M4l1l5*XHEy#_r@x%H?C)PK+b{zV*WwX%TS1}Aj) zi5ff)Nl1e8&CB*!bBd^YEY9k5M=s=AsufHuiuiql{;D4y1s4|QB|BbVI3eHtyRf6v zw^|SArqG(i>H{L8%0!-S_S#}nJrph$bR9J~k6sOs(@iNQeQvn!$w^ph)@|CkWh4O@D z3>73re_t0qR^_ovz%I@Tia4=bL-l?f8pQ%jU_p*E(dHEZ*?A@IIF(v!H2xy+E=(Lu z8jP+EK!kO3VAUs{0CI~i_^VFFF03QYq;6Z)NwXg3x5wPXd+;lBFllNZ^&$m zI2z=IOFp%9gZ0ZoMd6vBZocB@KniDc^GsQ~zO%4ZxsnAxmVTa>uj8&j7Rrmvje+TS zBxrnNfDSlR7j-1a-6I-UdCzXct)Y}|(2>?!ykQ)`y1fK5y!Yut_GqZ?-B7z3KSr$T zK%R#Nn%(>@A@n{0-yWFnXa;$(98{2_j=S$d{TkQ+az%&e504PI49rt?TO6!B`>7c- z97PVH4qAe1joj-6B;JP*bb3Im_lzW~H2b0U;17vnBgB(?_LFcLeRbjKKnv7IXRIUI z)-&^tG3|3;mqfVvt05BmNTFiI3Gb9em$!)zWjYX@)DarG@RLLXhyx?RG7t&+$-&-u z{Mgq6WXHfvAmd#d+6ND@9!RCoN`eqYiDncM$R-vU2Mqkf9_- z3x;Wq%b;;wuF!@v;~A~(oD`TJlJK_m>}12)MfRlKfW%}9OVpMmvb`Y4970sfafdv8 zP;9q}YHKG*WN5Eb>Rs8@s+I=#tPdepP8~saQ2p~xg1x)xP%Z6uZ@7nEeGwzT7tZGQ zAVZGAHfVfwX`J)FcRp+T&=)TQmM{T0^%*)4Jnj}*og5&{;`XxvDu)=)fAC{Vk3~KujgrbN!BwDmjnA_ugPfl z=hrk}suySzI)fQ0ab+SgDhA;>aXC6sp1-iHQ!pQ28)tON3b61IJQckMN zlsthAvr? zpVpxwV(1AO*W4}Wx?rz*^N>ZbV8`X^b6p^IDLaRb#h?ZsfNH|W zw|#nZiqj3O_yR7Q-f;tbc#>*6;b(zTIii|~w~N$Rk0-0z89W+_xLKXa@WJ`CW=yVA zkMD$-B5)OFPxQwWZdOlg6pcnd>Y!qla?4NZu11f?BG+=yR6(H(Us$j92A>dC%k|8X zpwT#*+U-d|kFLe#JxTKHk>Z$>&z^&okpI9uu27#pT71+cRh$O&MP2U$r#}&$+gbt0 zB)owpui!r*AKdc;`G`8Zc6|}R41n$#r0IPCcTAG7^fEa6xDt!d_i2XBi(Tt$=?3{vNfR z0qm0MKL8Ig0K5*bYm$5v7sz)hxoRRYDJ($$3{4XH43Pyf_n&zGbqvJ>g2-z#=f25+ zCpb<|l1xwOk*XL~NKFHZ3+zli-g-_%rw&lC3(8_f#b}&=Z3y~zCP?36+!WvPYXrjp zH3ts#z2ZOMe%1?M@aK3T+waJ&RdZ_!ZcXnIx!0McHHL3lbPU$fC*_BZjKR}O$`^^X zITEoPU#$OHX5wHV)BO3S)5{D4s*ACzzVx_0yDf{Ww#Q}G0r?$lIy?3J+B)PW(($ZO z?LC}lQtGu_Ns>V3{j?b>%XVu7`a-Z)fzh2;Y_=9o&Y7^zw?oTw4biu~_1XCb_g_KF zvPLsO{bOee|C3+-f7y2V|BEeGwy-gA{HH6z-v2Z*UDDiAI$%fil2xv_F$!~Ppa*#cu(NLbOE_@}KHvs@wU~tbcDRBqVh}}mOOPV#rrE>^?3%oZ zVKOxkYAx5G8M#k_xO%jMLVIfvSdNo`AtnfU@SHk_p+;cEsJvS6S4zc5@>3bhPO^-l zWIrPU0eNZU)XA}0k|T7PV8 zD(BZ2dK{09<@DmaN#K^sl)23bLT+ueznOH#!a(|bsAk2ejKJ{C)HwB;Ep21CH94Hh zaS3n5h`s|`J;vq;`a6l@uoF}R&M~KAK0~rmdbd-Qf~}MXy)V+iB!=dsTd0P{EYPr4 zphmzn^h!NwquwBCt(qrmS_XhYczDd&P^RV|#(U{VC(zCVm<)bFbjG}l!$u{uZJ~ITwPWUtRFgv|~6(b#URvbwm+p{CE60 z{Le^Qp}g?i(a>Ju>ex_$AM~E=ZxE>(;#RrXIe9@np-T7fWsOmda(?hxw)ROc%!rFh zBoGaoMGTkT$Da@;)&eCUL&KATF`jbqMj^-6KEG!X#SDVR1!mwgykp6Ml!W2hepA@) z)=Et!tg}uo=^A1XVv-G7xn6KXm$ETMgF_if=;%dEQ&S=8`0Tn(kgL6u9bkIAE{gEa5JD5_D_CM8gLZ?3Pe_rwwQ;R13hW51Yd`Minq_QKUE zqR7heDWl&e9ia1%#S;c-9w)~0UX6-IZOsl4COV4L*t2Pl5wFG5uTlHcg4QYo3CM$$ z>{I6>L>tv5EwG#(9B>8dl>JRm z9kl?EnIIuyxLEzR7#iq8?>oq?6Cxc_3UchBJc_sy+t@56hXCZvZlARqMGS`etN}v@ zs1;(I1d=EMIAu&;JE)Nqvo%R`I0us$+3dm~yQC_V4d&+;-J{ShbCE|74HzbgESCJX z0Ygw83>aYiP7=6_b~?*b)H7`q86*IEpqKv9MXRB}!N1OthzkyOt^$1*WZsc`SO_RD zN@8ys{CW)3^?KxV;&d~y#yc{kJgvBFMdCLSp#|(ZmdWPG1su5n1eF-c;<3Ls(|i3T z0imK5wfh8~+#Bz^0@|of%E*wuC51k{&m?&50Yrh<-$wcek%1F*7Jxrx8HR(JJbLTy z?XW4)ql4U%%W=2eXB|i$5E2$zsHP#aZwb7FVUAvtRPj3RKG$+Q!a`Cf2?kA%9;*f9 z>R!L<8${cU+Pqii`=!Y@?EAX}1b<2)jVI@L;36o`i_?Wy+=t^>mkZ^NM;ffv&VH=L&NvdH$Z!pDCms~ifTf66r| zFb2`d>~-WK8Q5KW$|u7bq8F|zRZ$kp9%`2fp&JTx2Q>Rax#0r{t_aFljj)Ch*hOax z=@8iu&CC1H5CkrZy#Y-9g|y(WW+dfRPZyXicY4aVmSn%T{LNf2qD52+#v&~coSmQ_ z%#E*yqB7`<0SA?EL|wHLcxAkt->O$J-#WVoilA~e$4!c|onAhI_gJSuP^WobibQ;N zv%u|mA9(`{)x-TL|CXRK%o1X92|xV-XcDO~kE`lil9YUVUcgM^O46{I{FMBos8|M6 zq8=cb5q?xoVDpTO?*gPgtB7Km2&8__)PbCD1NjG@ErqA-JzSeY$IiwiEIzbb8EHor z^=r{>>W(!TlH72k5f%``Hy`UhNEYW?;doxlI7Qs#d>X3@w41!fRAXPM0@X~XK zYSNoR%xhWF6U#M3yV{G=E=2$#Ss>h+-3!*_D6_2>mlgIV5Nn4jEt}v?_>>i!Uo;KN zYhHG!_myee?)pk{ggYtDa;-aeHP@fbSj3%XUZ;wM_}$abt0`^-Ad$cW_Bo#X6W53w1@JM#=wT~LxLj~pm$qr-YeM(5NK0_8;ufK zRYAu{w*g^AkKF<@_eVd(@(=Yk59wMpLv^0hqHFyHZOe|CNl5SRlSOX%jyY-+2brgP zVSz8+al{(kp%Tw8IV=CSYiIfnbBH@Z2NeSr$Uoko>9$hzTP^w>b^r@j5Tz@q(l;>r zZ!~?68-Ztd0HirLP(miSmz4SAAf66^Z_i`ySfRF1&|7Hq&O6}+D?mawpwL}xhNrE) zvwna=JvNT2fvaO-)5pkD_XcK?OKa_7`&0}r8%F0X1B*UPrMh0yU9Rb#cEgKyaTPnT zO5gO-ok+R_pbckjxap>o_m))ow%xSOv#4+DEeoUyTS575JJ4P42l>yif!kh8kK1uU z+kD`j-&3>iVM04Rm6vD5Aw@Dikq6gSsVk-@EDkG=imAYm}M3KNFs|UviP2M{8XV)tq?8oKCdLcX6I5z%zpGha+ht_pM8}B+P$OcDhj< zpYG4Xk+*d!@~3xdksgbDI|a`DJj~d@d!>7RtSocX2o`6eCfpD=edzkSo)I^D2A_Rz zuQJ=67A|6>wx|O@DG#e0=D(d;qn~&YDdW{kVtyw@atJIvn=GPcC1`PcEOr z|J_QHp@p;4KOI~DRb^XQ#%_Ziy6dOBv{r%>UA$4xHl&Ja5Nk6k+xWBRkJf{YKvJ6s ze1D1$+05l$WRc(Vbc<iTMTcMyrXOBJ6S3&CUsthUp6UY}UhT_j84@+mSTEqgJ zk~N;+;puO3;BRWUd_@>i-3r!q$g`>U$Vd!tol6OpCg3w;7ysi z<5ek|!gC6Edi@u&X5Hm@zuZ}QIi`d3=cal7H7`%51orq=Y{!k;*J%LpY^VU~f(1W5 z#@yipv0MCS@S)_q`3lIKxj+pqOh8J&&W=AY)fA-aEtkKkVLSXuD2q3yZThe_3;W@6 zWjdQzavry!D;gM)N^cq6dG_H;rTOQk*;INnmBPGiYR)Xt7`K3L0W&`Sp`^QJ^S@|& z%iuVIC0kgwn3Q5uejUqh!e40zU~q`WU_nj@wTllRJW zpbA>Wievwzb(wiYU_W-`UR{{SpL6Vn2VRdpT&9&8h?ztx9Js(zZ{(X#7|AX2P8ajY z9gZTTLB@c;*tbxUNY^;=EWMyYiSRc%JHSR$ocAb@jAO9^(s<0cxd%csObsOjXfaP5 z!X>I1hKURs@zQ{daBYNUf|CtVK|h|1NL^}wS2GI*dVdh(+LY%gI8>rPR$1W3jD(Vp03e_RIAPUByv=wmZax$;IZYojiy}44%8|)Kdfe~bGbv1&y zAX<>QqBsxOA2l@F1<$xUpi~sjw7O(Urr0($flqe?8kuL<(D5&hzXkc|j;?S;eh)yT zDB)ueL@s%y-~IF%Td@ku!Y;YdK*UHl~j0aWD z1n8PNk}3oSB-DPw{g%KT)$CVvhZxX8q&Kn@h@OO%vu*OPi9E@j@}k|$p>7l9!oS)o zCa@id=h_irSbIFf=0}5K>!%vniP-A>^IfX`Bonjc8Y*`LzQyDc%a$w5X$Ims|1|nk z_KPv&uUV<3GVukd5V0X{#@za5?Z+jODA3R}X+rZ^Q(W-W~ zo|=tFDE^Eh5k$JcK#o-NGy{n5x7_5W(%|-m8Be;l<6Ym(`K}k&z_o+_w@R>tm18SD zJZU@DY%OisskNN;5`?Zrx8iGmf~E987~$QKX|=;87A>KVpl_<1qSLY7gd-T&+X+cJ zEIsmNg@sa-g;{j_-zCXqc>3diCmiFON>Lm*WnfTtZS-I9Lfy_E#gZ`;-sfr|+%wE` z+3Z%ZL5BEX0Bz*!RIQ!jx_WkdaoL^X4sj-q!q5HK{z0~CSp_$mgq&5O(fG3%rxBw6 zdp6&TLMqlL*DiF6(9ZVxc9|muiaK`YWCFyb;L^#w1g%TlGx7i`lNCmz42nl5kh38Y z(V=0!u{?h#nABx|D>lHG5%C`x?<*R6iMLUeK6b)$#gQN9fvK^2MX+=!FUkc?~ zUe)D9iDRe5YS&$hK~D)XX8&LoOas8!fY_u1C9+fj29^q`p(YHqQhrY@#e1+0I;?Ul zYEw5sct20yaM`XtsgR$AO72{7B$liIzl{P1Lhf)@s@1qO(AW&q*39}sMLm^G4_UVQ z0lkIamFp#ALE0EHH%cy|EF&CRS0{T+6nYU+wgm5;$(&8U4nfyGakxmlqK#SIZ6py} z%$Nl)Wqi;Y^H)si@`e%a1`ht#C6A6AQJz>?yFm?!ZeciRUa>sb)gj;R0MmkSVfL-z z($$^;AKq0-y5pGvIpvV4cjoRhyw_W@tGi&`n~KimGEdV~!e9nFrYoND#72fSWWD~= zY7Pu!HSpS2C10-Q8gxN%zOu z>%O&a;;)yKDiGg0(QDj)`t`p#y4VDe-82AVfEwDrJyb96U~c2|7nh@zQ9t}*RAUpc#0i=m@UdR zd#klFzlgBwjO=$R`g5)}U%mu?5-$+4%C=#*g+BDk%1ucF1#wcTo$B~n7zYntD8 zEYx<73IqknvJ&GR{Z$Agtm93W$FD9tc`jekoekgtF1}7n{?+M0VMLwVl!*|Boj^=H z5vj^!~LKs{_|1cAfCZ zJ%@F;tcDCeRUp)@Rf}7Re7aoYs(v11Kxd&J0sr@N5ws;k}^BB`A41|=gl z0a_RxD`xX$Q2`zSgMBWC>rs^oxL1eY9{NDx$*S=yZY5Gy6KqyuZCOg9Z0-ox&CGVN z(J1|By=(LkGeHvWPjvZAv!=*uE&_Wn2`sp|@dKUS`wx^QvAtBO$}^vd5U3hWO+99W zj@;(YHXggyx9Yz-l$ceYga%@m;a9^GA(~|a;Ie*rjbRU}qau&vuvI992#}5iKvwL> zh=cLoM!mWOQM)QEq*+sQ%WEF3>r>d9ofnOSp=zFPtPpD&s0DuG`r-Q%hcs$1yab0h zn{_{Jh!xx~an6&1Fh9;xtftf~Q88x3ytinW&y=c1o+;ph2(t7PeYZ~{ z?b`k&@GPMbA(GR)6&{Y4%_2M>uFw0$-BC=)!&JxSBsiS{#egz@I0W-KpPq#YQkDtR zSwk^<$IwOzqa8On4pG`eYN{7TX{R+lKMm zsm$y(`-#_0k{h1rB8lrafdqpa@F{_ZS;7lWX0F28ms-=p-HJS1jY19Y9wgJojoABp zN!L_mdGl~GjuVH(d(*qO;w>78RD4bP{8S*$vf~0e8&sVkl(^TAx1w~o6EqR)ymgC{ zQX86=)*8rCH>wHDTdYmVb2(t_9$oWo>|ee!z1Dv?AV*)hGqYx2HvZhTXU$sF7^y10 zBHKqorKPCB5uXH}ihMY|ZJgQ&sO0@A!!8vq%|6c0d9TFyU`p{pdLsPnzcwZ7n3cB) z?df$i)M6ZvUK_@a7B6B^eOw!ZGq5;qn25akBp(G%r61n70Lsu#W7SpAjXAtnJ!5lT zlzG)jWIr4;A}+A)>sYP5&D8U?L1;&RpqKV@O@DJ8?B(`y^Umlp{iqu7sXJm@z2G#V zJ@SHHPj1wO46oZZcCEFb=ctcojtZ=MbFB{R`EYkFpts>@5~`9%+S1IBJVf{7RJXlA z38pSuk(z7hY;$Hnw}p`euMZyRUHAJ>=Ns)94Zx;~Ce9;xLB3P+hdh*xE$ zQkzk{&yRBVgJVqnK+RTLfLgf;vGyx-HqP26)2qu~&8VcNDy_Y%fJ3jdleVgIkOh4b zSP}E?2SBtM5vpD4S;})yaShMwWL*|-XGhKF9CG&#~hHUMNmReNT$h~ciJ{o=*s(CULd}M8w-JI;Ole689u2Y zt>`isKS+R(bDO;S_R2X?`oxQ7(>9H-QJx~;srpepl9geSi`gtWOvScni9BNnF$6DlZ64A;CkW@AVHk;C(a{8(} zl$*NrT2GaTW&b#wFIhNF=Y-$J-R}u51=j(g7uW+WpF?}4Nx!w|E>fhBQBs_CTR0%7 zJa7V!n3UD6j5U}`8`0Z;*cjV1yY7u#Zua}|nyoEFHdHYgQ$KmIH}FcVj0VXjI*H&R zu_SNAyx(Q{`*wW%M^J_u zoMEiSr$WVI^}%DL+_XiD(4ck|U-Jwzg^V4y=h-#>0CP%D6*NW_C^Z?@O|yN`Bg~=NX|L!4g-?h$kW&5p52ZaAQ771&p{Z6e7Cj@ut-qenG!Ecv1%9UQsAoM zwQI9Xcw%IVOm(QtkQbu^Q!|ITnCT6|O|?oDEBH37Dq4SzC)7-jcfYZWhLV1&Q{OBi zJ3976!HwjW6;tOtwA}mtbNRxq*CARNHQMbA*pk)(j(>BytgE?$xucn`p{GpY#{b-(hQdF=+}=CJxIR7sn05EikkLnqVBw~Rg$4<`ij&g7XW?>m!<4jO z`jzwH@$-2+prodS7IX*m?TO`Z9-$I;i*lKH!1`QEAi;uKpnBrR$%8T-WfOm zoe)ttH`6jL^XUT_C8Hc8nWCUHr-iCnpDBf?l@#U;hbE+mq0|B&ki7phN;&LOk1CR8 zN|QxjMlcd@CGst(dT4wBD}9uw5-&jT7k^$3%^d?|PJA9uIXh9AKa~R3E(t2BGj*Wd zA)BD-(X29we`0*(b2)F`P=Usg^FUq@MHvyKx)QvXzJ}PjM4y0ptwbVjiGZL&?PjYm z#kqA%gVilXm@Drp1mmog+WqS(d)*FzhmrN!_A^0YM@ z4>q36jNFw}x&3vb4%7G4UwapE(&>M{jI-_p_V~}O%%?}=EHjZG&Y$(MnHg>F2Cdha ztj*>${=kU7SInNc!aXxNpK&w6F50V2w?wA1SZXYRA^NegSS}F*W1Y8=s%Qr$5^ZGZ z)sCGJ50bE&*kIObI#C1@$Cu#&r{fvAeDgT#nr!(f?nsl;gUQLPrsqW1^DIG%keM!t z7~tz6w!QllWQoVaBs~$#mGS}P=Uo5pHRXH2eCz~P8u4MMPC`_K9S5n*N_&^HttHKI z5x=EEh)!`%f^3{&y~OPl#_?yaR4m3n=i7jSt?{RLZm;gB_%sgDWBi7YCjbx(ib7=p*^?kXANI z_(($LkvpjP54uX0jujI1cPDGv-db>Axqt;AN6%P}5Ko8f$`e^Sj2;0@_gz zD5GC!exges1m9x3NHckEN}r&KtmS!%b5XoNKF-?td}sJLj-XL1$~!x5g;#k!1{lW9t+&_^NMAz*IMj98;Kj2<$tUJ6w0H}s>-Jq&Gc`@nqKG`vvfdjVrj>tU@& zP?&71BynA|!Zf9J8;8HR0v&zAWvHQDH{vQ<48LUSc(xu`rtU*R+T&jcOo25O7<27q z?j*Zq?g1q;LOcSUm)*r>r>x7sD|2#`Q4 z0+`-PEDWkhcp9Yt5YP%ET&yPB4Ak$jXoIgvQry{RvTEXGOQTh~a;U1mF`>c}krIE^ zYeKgC41NiIl5RjQ>3pkTn=ca6EUX1-5p{kGI6Lmdfq#$2f9E?4TWgm?Yy5gT1XIhp z8JbAcj|~^3+R+wWvYNYLUWm*ZS64{o<{5 zDczC}F&TD$;re}dZlDeN<(xIAif;%Vp6Mczd#gyasdsbo1)D%~CdZ%RyISG6=wu=I z?;E+w>dzI08k~RtOp8B-LQ{1d>drM$Ld?THBzQXAXW%xyx|v#Hc9$6jt4PP>ap*O^V>T!Cr!>GESkz1d;MKzkc z%=}vHcFJuPX1UNUl}W!$)-9AaSbSFC-3#wmui-Ra2C~PcU-we=rm7DoG?wT22Ht+W z)@tk#8#VY?oDKd?k2b-Vrflbsg6bibCmkL+sK>~%;^kRk8fOZ&{JK5!^yu*A-td&Q z)<3sq3{I*E?s9EDxhtz0KA=itcfVJb4Pu+~i}8bVWWS-033a@CKY6_e{*fD``TDJh z6l-9p%;bqnlEtaRW6ostXfpesD?c2=F426)Zlp2*$Fv6gFDQWnWCnn^>8V`y{eWO$($u8EH?45%&`d@E@XfpaVL+;pnk{BrV7hiJVNL=~XWt z@yHfPy*}^f$kn7Qb@f(GHXgPEhXpu`Bf$>z=quJcyC;)Z$GH3lB_WIaEOb{hBfGIF z9-wgwokf+JS6&s(3ti;}gFN=npN99P_p+s^XS#xCIh9I~D0A6VTw_;LbRJ-$ED8g{ zhL8qd5Lh~46dPzX<*|lcn0o4NJ?Gq^8fM+gs0_lVt1Q~mnJ{^BRKOR`K!T^C#M(3a z6e-q1)!>R$C!|2YF(r9i)>K=(K^ll2t&b3$K!P_#m8YX>wvE=1!s6*z@;IfKo8uPa zUe7|JK_8AfIDe-Ud>5KikLqO#Tma+7aQcc(A`c|Onrl2vvnY?OL`^#EgbOIZrD!^o z2p)ZHvD{-k;{)J+H`dDmBNtLMhEmkbP6!V*2M3n+KN?&#kL*cNCil#&ra#nf%yYv@ z19&u1o@(^E9n~Vvqo-DI2JNGd>_MK|)l4$JPYd;%-vF(A-@X6lvv&pi3oiBLYGLQO*}pUt5A@*3!cNj9DU!?qd*vG%v| z8F-Iv3MfsT(WI~}i&8M<;9TH?zuGoU*b9}vdwaO8I>dOaI7k!W&>JZRUUVoaSmVjqaMgg#X^3FP^wW4fZ>3cqf`FB18B@a0K7;3c)Q2VBj*UYHZ*3N6O0sk=<; zYtI9=E!J3PAZ-fqQX!we+xir{6@SLZ;AK_ZIw1WH{>2Q;$37XN`>nb6=gpUP=<6xT z7vB(lb%GAc%RUW$|6vfvP+|sV#mz#(L(5KRR8Nzw!{X1964JRvW#7Dt=f`ZcJ?2mE z7~fb?pFZ<5*S(9cZOkb2f~82&uYc%P0JyDy*SE9=(SN-8k4Em_>pS#a9O(ZM>Q(?i zf9SFQ!)N@{iTyQ1fxX~K6~I}50w9rU|9(S^oNOJP98CTLS^aC#zsQV9QtGk6Vnpb; z`pH9@0%8q8avD~83MSw$4B;<=SUg;As$Qmpy`n==`g(24{6+ro8>UT`5Xbi4{03@&&gEG_|%bAL`xhI*ri`Q$~o%eP{Jgq56 zR}g$DF%a7^JA`O3j#V&FC60LM!}%ge5LAN5_QvR&hNM!SL3u+G&cJYl;RU=#E8j~~ zYUz`0k?C5@t-95x1rc#gk$W47@9@471+N}wuV+c9r#{d z<}R{JI~a@feCdTlUvbarzSFDUBcAh9y9>GSJ8tJIKpJZ-j$SsGg#%>00}PJX0|%8> zjuSCC(5DjKcg&NBGb(O=)1s}==)!ZbD<|8U%T-C2Zr%WqG*gmGbJW_9x#7?T!$%HZ zlFdnUM(++Kc(G~FG5Tl_^zmr!C+t|H(=zDN9?Fd&+IGhu@7vwqGRJJ;M!%_QvMDMe zNWL}RvBEFa@zE-T@!rHjE4GUvP`EvOTKcc1Td&ax@x9~xNMc|s;JDVQ)q1U5;=|g&CsfPcbzw?X422lrw)wKL?KtQ{7^XJ=~dXs2)Z zpV_CGIyx%_|`fBcDQhF1c4B__4|ssPT3GF`0dZu0fk5)tXDe-q1o)$&o_;OTAo_mhY{m3 z?=+6#R0@~f<(D2EoGmjG7Son=cetkWQ1g3%Hulh^4XX_zYbM^OrysY2f)gg=a4z15 zmOHPbc@rkm@Gcu~AE8jH1q+Bo(rLRC-saR zWJu1kBo^TmR5B!dtMN7w_6G55_Okpgviz6pe)b8(8>@jdT}U3%X>j8B#(WwyX!~OQ zYUz7SAK%?{dn}Oqffl36TtFd`<(KhL`ydMs6({XIt%p*~WHqvX_vseqpzF8L2c_qo zkoZu%*o05Q6@Jpo9*fpfxaw}xAmW~41hy3;V_|9iIVw0tSyZ+&P~C&>sP&z9VCZUc z_~A=&kaI4(8EKzxy2<{}U(H|dcovd<>kjaaKmPyqj{l#0@L%r;`9H;ll9aS<0p8K8 zOP5hH2;|t|TOOZ+N(X^>9E5-ug`f)lxO+^Uhbi$IxS-0H=Tb_nu!YX6$<<|~sp%5? z21M*8hpnTQq1Hm-^{CnYVCUeShUt`mB~@sC2i*dl;r1}jr0NB9jLTwA4!}EF7+2Iw z{Hmv!A;G2LtQCugG|Vc$&0=vejVyQ2fs6vLp-0`3N>-jYS*zS6pY)At_R*#Q_nCt7 z1jBcf0x@;)MM@6l$iTu>Qj3>1S*UyjIUuZWXH33HilgEWk*^?CfA-%VQH3M3rF*)A zHQ84qyp%{lB}IFvRL<>58x`mFx8n#*r4|P}_{I(?s7f!$z$m??#tuR`8PXJEq}^U?Cw4>(uAP-C*Qrk<71&jU0sqNe@%%kno_q9+ z$pox&V9x2|!@f?GYipNMn{MvKgL_{?7h`fZE-OvhdHb8Vosz1VugQk=HG@ucCo@q; z#$?f%H3ENH<prHV&MQ&;CtWpZ*qApQz-m zU{d9Y*I1u(c~v4sf1KMeCgmnEgi*W47i-V#vG*LE(B?ai;KB6Z5XTL`J>LCwkJhb> zMO;z_UYCw>(_NBT-QhdPNz4xgEQ5p1d%nn$_=-8~$4{P1f8FD9`RpH0WRdK|$x)5l zL2mja38>Bcas;%Eu@pIFCKw-Kd0qc} z6#l~WZQ>vtO>@^7+e~5G)>a2kL)+ZpJSqIzWesm@wj5(b zQ<=~7nyyjlo6FsCYv$h8fo_ZK#)$y3?#U-BZC1?C*FRzQ7cDfjk zIBWFz(*cIkjv4s*fw}LNbr<})5;Y}X*E*leP>5gK)$-fL7-cW95arb`WRE8PX2ZAV zVcFJ4ilF6EhJnZ6FEwcH3+SEAB!L!$$>^p21-9@Yn zjh(!^KJme2((ig?531mQRH8GPURiU6?Nu(1g^b+pa>d`gomjPg^4R^Hd-%PfBhqE) z%B)jajE--*SJ?K_+^$|u#uzGv$Duo3d{<`t+wxYQN%srwD0*DxGnBu1;lYh90dff6 z5KAiT*1-PGo%7?v82g7pFfm0mA2xk4HQnTb1ET5n=^&yO zzdcgOB>4y;x-Ngd*#N((_i>w-}n$HJc_*uNdr?dA!}(Hru9+%BZ6yw#t#4ozKFx3-|4f&lAqeyEQs2pQGoz zsqEGZy45!NnT?dxFALn1-qW#%6n1`6_Nw>8p{iZm_P4b4t*^^>`lCb-$?)JTFp-EX zwD4qJTGR>;4N8rtdR3?8x!k<`tY{Q#kJV!u2M3Uq4{^C8F;0P5Ohwr^r|854l1$PA z7KtMXPKDVtMcE{$%EScHOxgn{i6d->PJzG8x2&TW@X|Y2PC)qi|J~3!bOuc}4Zol< zZt?r>Xn##*Gk#&+RsFZdcamaA%+%!`YD~Tc&mx(C!EYD?3vCB8U#rXxFT07RFK6#A znG}P8&laQ4kaP0#H7KsNK} zS&rgeygsHX13hN4p7CL!qv%W8Qt2b0m*t-hK(E#LO+c?H*FT4(eM~sL?M7<;Ld^7; z%%h&Z1=&?%$vY5#+imfQxLdP(oIsjBup)P#lus(|K^8%dWE9E&xW8!{OAQi0czOe^HNr zLM-VkC@zpo5QdCK&J8?*oO2X+-;*ySCjw?JgaWk4ydjCU5{g42auV6-VMsU_f>VSa z%`3s%2?!>VLVF1)1ztjkR(Hxq>qm-4bu%r))n!V*n=2soi;URWD8*mUAe$q2d!++5 z26O~Q*@b_>QnPFa8)JeOw+IC90=xpyZ4{|RP0^4$xmS6WElE8ag* z?l#9&EAN}j@9AIM(dHBlQz)jOe1MU^v7^uB*lu)Y*~>H;u%Oc~)h+TV{T8~G zfMAAoD`5gy9kZ45s2~@xDHaB{EC#UpAc2kLuhm#s|FHTGn$8=FhTHW>{q-^PtfTnL zI}OC&siB$pBm{0h6x5Hs6V1N8iJKwnHIM6T+kH{A-8F)9>#ng&NKu_6nye zDQ1vmvS#YNc4-~GJ0J{mwX=Onm#i=;>y|i^ElUhqCiuI5Z7i9b^65%>eU}DQ0ah~O z^al(R@OK#F{1BvqH>X<&_3Lco0CCPsbBYF06zfL`UCrCYi2at$4IVnU_X>DJ? zN}8-{(10vB((yw=(8xv7(?|kLQDw*RZMu ziQJp3@og;)oUZLT#x9NmfV)H89#KfGcWD66Fo#vCJ<>5~nPP5Txgl-|uwRa-+s<4P z1ZPq^3+#h1*wbEpb{~_ zYXr9(qGls}*oG2NMb!MSI3D$pPRBFxo~%YR5a2b|niJuWD~lnUYuxaJeFi$@SF0n-X$fGL;&Q^b><*NFnA01U~=l3YM= z&@>$9BN`U{pGGSB>{;??h_1TT@9PjY9;UKgf6_fzU4LYn2iP9W`m)#_tp5VhCV#M! zUt+YD1blajom95h4vvZ`u+4}dHdc+=soWY8P|B`t7SRCv-=a1(a@0-Y0;5&5H~hpE z?L~=O3cJ38$t;EMf`WJ%IV9dIzZ!R&7#a&G4}QYlQiK%X9!b@scKz{g?~m|~M5!`2 z5^rZ+4cE1jcMJQ;&wP3Y4IicGEoMgTgKa34u88(2jAzZMb8AMOX~_f_#8^UZx?MKa z>8*ud9rASw64@nI$y)|m{S;beyWRt`t=k{9kftw8K1b5KL{#%8!b15}>JN`nyQqg` zyQoRHZW*(L(&%iOKWdVW(kP(rg+eTjEl@-1DYiVFq_@xyz!j_Vr)6)kAMR4qq0*^> zVU4@!ZBL528|>#(TKdv zH6RUjMt(BI^>{fc^VwRUJ`%BR(D}{-RSOMPmaH_s+Ke7aAIX8ro&6v}D`>36{hE25 ziEdJJHOnkt`r>D*&znR$sBRYj$dGPgIhmE(Y6JSB0xrQGZPZ|YJp0*YdBELh z6I;7Q=yMR~7P5Sj;1*KkN1i<_Zz$C+G(U%Qh0tnN(%H8v-^iM-_O9_U)~I@R8^V@v zxpD>3B_Pp$Ejv@Sg=nD^<{HSQyo;L#m-{?0nB5=Y!M}js;9W|8`mC%we_qlFd)%qK zMFueVIZA5RS`zRjAL{!p>+AY0ook;P(o?M~J`dnyL{DyuG4stiH}&SJhp>MX7d>F} z`1lduXcD4!HRM`Bd(0NQi3QhM2PA&vVI{tT_2L!xNBHUyJirEGY3-6KuOZRDBMKQ%7ra?`AXkJ z!x*oDQN9ILxtV_if4}!AwM7Jc^1bAl7S>pEegVnW4@zT~Hc}O>OBJ=QVxj9@f0aV} zQ8TY7$xTYR3dt6di*=!i2G)2Ds^qx>a7m_Sm(Rmd;Gb+{I6<1|Aow~Msw-dD1YL>Gdg*ws*Pc>APEc|fp&NTlCH~HB6&#r z2k!X%1wwX|&7&R!x1c6~Dr}^$y%v|c)M)gVD(-^F5M#3{#x5?bMy>^~0q3dYf+>9T ztor#-o=VY8j$*$~Bw9eQe`OOMX6phl#!91bUV(kopRL4`S@E*s&(#t`*^l|-Jx!@m z#`(SJ+-j$4Nkj0=Oa9t=6hh&OHP!54!;&`1IM%y0r#Kd1_uT9PN0*i-S*)?|Tos)-7%yygycbgi(ttS)@3^Q1(dP zXnarllZxw8yvq?*$QMlAk%2)gz`~Y#JHYRRf?FF9U(B*@>4J&BmIwW|JHd&xK)H1T zpQ?q;Fm|e;aoqPOh>AIDAfuaEYpmRBSM>sEMF?ua;TMUZ!(5`;VGNRu3>u)-zTeP= zPB}xv znLM2QtqUTrN2R-e5jfj=h1azkA`B^oZJ~L~4qZ?J4GCJ)mN%5Y2D+PV?<}# zGtL2CjY!dAk}FK!uQdYVG@Dq!Y?xkn{=LaHP`!Su@Lf}c&-B}Dp)xpF=pJYG<%?M5 z+RFLkZFtYsK#mct)gRG?6W75kO~@M`=+ot<+k=H1D1?VOmMR8Y75j0a^1e@~j^3xBPoHPd(wQvygBGg;)OT)R zE!iFU5%T7uZ0=AIx8>Sr`oItGJBM)HHL;W`3$<-TuhszLexxr1vXD15VetOK>jP+x zWNrvo4zrYtHo5&s|FrHJJ{ol@)v4EdF!P&-=4;=~4yrM6Pl|_{A$TW0;mt49kQmRU zkwwpoi@o!+^Zyq4{TsM=AP30q0iwPmus}eX|6V^}?B=8k$S^Q=aB#N!FM8hp7P2fJ+gw{oo7i~Ee#P$b6qf{(;`ajuRDs2Sn>iL{0Uv293_d#t^ZB?Q16O0DglDil zyJ*%7B<8L}L1(oCB~7q${8b@sIpF{fHG&cPy_P9S^Y9m1>>{{Xs&Zb@g+acO&YcG| zr4dF9+8I(@BE>yl63o(3EEOqJ77@ulk)><-V#y&|?l!8DU4=rg%DQ!HD`T!hvTCPJP6|PuE!L52Ma8y_HHRMrge;j3J=dU&d6yXZ6Z+at{JTDujhgTJIh0J9` zHe^beL@==>(42jxEJ zGkTM-_nwk~<$Rdn@sYbx^KM)P$ch_o0 zEXT`N!SEC}ki-sPxDHSctZ6SqCoznSGTip=g%3TtG|>Ov8bd+ML_@xF%6W@_2sz$2 zFdt#y-|`fj=h<~_^#g@Nz4>$2ucXZhpQnydIA@sVjDv52mpPDdh#& ze!zh4pvQ zwbm>)C$k8AHYBE?JoaHv2aUVBUHp&Msm0ZF;M_h$m-I|6u|`AE5&#&s6|Z# z)B5T^h!8mk%8c}*L6_=d(sS7Kpvfk1kA{;aokSD9F9)Bx52J1D0tbVEy@d~+pD!+2 z`D)pQN-QcMWcR3wUc;}EAG?lXnf_>!rV$T5&wTI1qKVm?S zRy%ziELb|*NG8A~6xbZt zu~DY-XfeTP%M&$Zxg!+PJTD=yY)V=#Ku!57r`@r<-(H&u`ee}c+{XHrHlb)KI|uXv`??Bw9_c-FeW48i^uPVztId=$=P7AGCT}c05YWFF&^Q0j z#N_|wpJhRP%Wsi3CAcnOUK38zgK4+5m58HJ!w?4mi> zQ`gfPsJKFHVVl#fV#hLw-^a~`!4vTF8v=j$i)7fF9i1qbYKsa+-VAo#3aUp7 zl?eG|_|wm;%6?(g0oiqxm)a|GeWQws1v2#2@Fc2v1M=jcajB$xVGRmWX{y~Mn&eV) zNn)c;WNa0+ggJ*gio!|fP87xdX|aScR1)=sWKDI7ak;?y#eNOJ0&!`r3KgAEMQ+HF z$wbslBs#6h_q;K>GReg8z)8@KGTpEWx}QZ<=H|Ip>c^=h4-E8^rGYdz%)&)Wt0(%9 zFhQg(NkP;`)-eU;GI?{_a^L!i*hE})236_uO z_~N7AS{SCnc^&PiWFX5jDNzz9_?ADDv?ZErauRPK1o;V4q8$CbD$p8*CC&N`4WSl2 z&+Rki@7i)xMVju0^te!Vq@{~yj_eq4LdW!ikH)gxV2)g8`n2>0Sum!$LXTBJ_UL!B zcig%WF+VMta3@WO(!;NPn4m%evLJ@o^FstUK1nKToNx$NgbH}}Cy5tN3WJ2o+ej&& z`c5WrMg7n0P$s+X`>i?f6P7iHVf#r^C;Ku&6c|twLQY81VfFiep+)E0b9813E?xU@ zWIg3#8yY-g!W+1tM~ap+xc$ObYP=;&_eu-SzC7He!-5T-!whS|>+Rq6U~z)l*`A<) zxbieWSO?DzZfEe%p_IF029X>cB8%YXivf@eI0{*@vz^hyh$OHPbqr|_aD88>HUvqWG zUePnie;BH1lqsY!MPmNsAJiaF;ix3r-)tT#Mqt!Smxnbr_gOs58_!~`OqfZ(1v0r&J?{+wBP#^6?8R3{Kmp|6cclQ?*Qr` z7StN*uDnHxpgAaBHB+-}DKu$3PMK&p=vAeXU7WWbzJ?WbTZR_jC|(16O{JbMH(ukSov0)-(^gWV5b%YuDJ8EZ{#5AormtHK zte*cE{Vy-NG7j7e<1w^67?6YX*DNi=a$#R?boDDXqVY_`>UXLKgst3vZ_QxNuVRP0d-zXW;9zPA;XZ%@N1=TYs}Q7#^XC%$>(M$4%X zW#%J1q&XoxS8y4+Cy>x_iD7A{g)tlI<4)Tq<#9#+sOv{FN0RAWUa#elCULaGD(5G|3Cw%Uz%is#VT>BMGl^PU^ct{*4;VeC$j(U8}6cLg#H-!KNJD zosWFR<+K%KT4Cg4aCMb`0lcr+F#3(fKm7`sS7B=Vm0YGKdaz%MD%!PIf9xs~!JlNu z22CnEIOROM)yUm;x_eo4fAH+PQTi?85eHxAcstAqfd`InSB_6{btjryuPy#+89&0( z5|NbA5jODKTds4xe|(heRB^#?SQ^uzmuVkEJ6kaYhM}20aM#8$nNCf|pdHA!mxQ6W zuZmb!*0XNC(7SgHr$_%~+hxz;?ly4M_Wcgx4;9Y0`6^*8{coda9AaS}!^XUO5J>sF zK^pB5B?bmeW}HuP!3XRO)BEJDy*g0OkQl+dim!^Vl;8ANZA8dt7Vp%PIDmY(dAhvJ z;6&NU%n)kty zt*^AA)B{KAsQ=7^wa8J@y^V60(B-iszsUqttg=8-w@X!uz6~QCcG#rD z?*b?`J9hX>Zy+5TBt3k;sTRRMTgcgnH3ZPL@Gb`CU^=5B89yY^vH4bP$p^Yar*f5m5MW zsqUkc&ruKF(CM2#Tf`VPX>pz#5h|r;Q@8#YA(X#(mB4?a0>G<@R~=2i6W{77BfkKS zo#PqrQOdx$Z}ioBpWz z=$pxmwDVH;n7?@GnH&8&jc=Zns?GVYwKhe($jSvb#cRv&!-3t|@kS3i%_I0ip04)$ zf77jqIn5`f{=PnjMf|s; zB=L}t;64nvV=9n@fDL)iIPpOVG<%@6WLEs(ifj zlFg1aDstSfKp&6Dnl$TxHESwXQWMel6U9W{cV^asf}|OL(`OMIUdD~5euEATS?Mad zTCaU*9cwnoTC^Uv`93EWc!zFA(+qv5-^2+kC!Cf9dRZXkC;q-U@d%5d(#?DS@}axF zYxTVTFGd^q$z_fa++2qGtp+=TUJv^%4pYWF!5&154h?uOBb%k_hE7syp3b<88b@N*jfq7ZPn5?3FK(73w<$$sdU!wQ92ug;rs;8>%&}W2Jp874a8RSCmD)gkg^vjGnm{LuUGt6DlI-eh8`f_;iHv zRs?tEGUw)1qw-s2ew{>TTPLX}4pZ7qhPbp@9x`@NCEPkSsL;*vlKQ+>J47a~=%KVl zD*gD-4PeIpzE*RPr#Z3V8}OwP91~~yLi4M{yly)*pru!^K;M#4YxHK7HH}qAm95m**7w5jc=0@C7WXp_fpF=QQfh z{=?iP2A}Jq#`NZM1gZ3Xj(xYb@Uz)lFfU)gqS8sSZEPayD&Koz;Wb&eSmA^gUjDf~ zDT913tqa7mwYFv21Gd_R%Ew5HYYg^Vof<3Ib+g-pI{Svq$B5UZ&&NoOtJL;A_1b^) zfo{4acx3;@2l}0&_HT}Q{~MgZ*u>Dq?0+Lu_Qw`|dp>5>l8=n*=A_w1e>d7Jwt58t z0_u*ER|Sk*K`f%d8fhqe@~Xh*ZrvKgW78smM^-+a{j5DZhUa_m@Q07bMXeSA3!qar zLJg(hVn4R}R$YQ48%FW{I6M%8NUjFT(1H)t|71BDuH?0_YO&zg;;2+TRO4uFJXJmw zSf&Ck4cw>L47$r_Cdi`BR?R4SL&PKU6d zl~S@wH1)=SOBfM2-4|vz?ww#S8mtOYJ5wCjh4FqiibXIvW@gR{{1%%$tooK*^0DQ{ zfs8qJV5>R!spgGcZaqvGgSMXfH(w~?kEgwalIM?;epTZt^CUo15}GMj1X}+P?q{Lk z9&W@>v+Ns|5DLJCSm1sicwr8BwjPKyhQS4f0S|PJhwvIXY_Y}=i$IU z#75W&aqYBwifvNEjtPBK&>wP&ff)|g3DZD75DNP|`i3@u^J>-;y9OWvzI~yO?K%$V zf|6)RP+4X~P~(LjD5j9Up5@=Z(5g0~L%e$7V&fU2i1>hC!%%m#0s0nW-~>!xm)~Lt zK6Z+qEyQ_E0DFpOz`(%{lYjAb%-#F~9Njb`lF%&V&OH7IHK{IK2a`v$U0Yf3=v^5e z;mhPgMYE+1%Cy|6aAW8!fxe(a6;gKd1iVX3ZSyGNf|0$+O^Mu!Fu#4=H0>CtG+oxq z_wIBJZ}*wUTYWa?U&Va7O>o_di+Ry*E^P;6uvE%PAYMBsvI?sCuwC%f*=se=&FnW+ zFiZyVc>37nbgK7Xm)MTx{i44IenFx`0suJR{M-2*O3scZ2LBZ`VfLMu2K_&C9j4W7 zoHp5zK4jlF~ipDGZVQ7Nb#9)gW@BI!c7fpocll z__!T>LCui_4*3%_WlX2osV<|0D&|~in1Lw)gm;&iF&SJ6|F{O3#rSAC7ZK{LK#>D0 zPSqWD#0@F$ELzv~p_qogM)<9;jAHFA>p6bBQU4sE2)H?swAo#kBQ0*CdZJCgw}7+1 z`}-$QxRL}lu~}6!GGgn(Y|(h!buAeSkDnYLJUxBbancj8wMhMq>b3;AIBjZ0ptgH* zRJFVRGGY#{9^OYd@L*ff;{0!3EnlY0Z2Y)U=ew)KP-n*O?C989*|0Qc2N#c9TkmN3 z*b%Ky0ZHZvp{Erqj4!y5%t`S5$IK z3h-jnO}y?^uQd^- z{(Iw7V$TPfCfv>YQ;g3Kd>s)kbRl?7Dm;PNVzaB2;fdAvs6y_TGa5kV#&nKR&8n&L zESPTNj^^mL7Wl4c*hN8a`KV>X9Ilm&pj%qzk)Y@@z_-EuJ}QY6bdjD!wta7-pc~`< z@jmZy9e^fDmSwJz3F9AIjonS>k6jF2&M%iLs^!gxx~^kaTQ=7h&EP7MP#Dk?=;q9S zh@|^a@wW`2d44K*2bD5)2~?=If@11=G%iQMO$%EZXZ*_dBT0I=kQn7MUaGt6yphbi zU9>ryds#lU0DsZ)jA|VLnxPF$Ac{LC;Z!F*I!RO}gG%1MZ|9DY!TzX|oMJW=grs@k z+sxtj`>0KQNMSq}CO+`C?F zZ+rGfy5KCNJa4mbika5?@{R%nA^9vs>o*ijNspI*@mQg8ezm)?85OzFQvyK^ecB~m_#%S^fph`W>@Ve;84O|+cy~)f#txRlj^ZQA2S*~+W@Hi3As%spqGiYyIS$kd!HFAzf!l~gbl~GU`N!I zUmm4W5Ln4pmbetQaaP9LOE*=A{Us@|Cu0mLlNJTIQ<(AauspEU=^Qq!HpExs<})2l zlSK)EYcnQf_PAHk^!#mPojeAOGQ|TNM7VCLW=W~^D`KcFp1~BT2Ajl#T8CmRc~~4n z*L6qbrMkvZ@M>XhT{c^_rfM|lN=(um#dkL#!UyAuW~L;g^1yY_pvy|I*WbF%!sC%0 zlT)VS!3#BEz1~`DQn>)Q?qAz!9kw)UIu0wMy@Fp05tU*%W9_i^JkoTy_br1`ZqNmq zZ8s=kC91A7=$(o!!gZ?L)eAGE83l(u8xTT^_J9nsV5ECWsxN0YUg=c0XESU{^tERX zVM}?}Jk-fRI&w!vI>#LqwnV^VNbPp(wTLnDEaw7ZgBRJ%<#{!5s~d`l%k)fYKO%em zz4I*Io<}p!<%3#;=$63)VA163lKH})3(IF5%QVrf!uh8`A0BO{t#lfy%cNWV+!IJ0 zufBAqGMmG6-e}C4wnUoD0n(_;sEV!}RL%!v1Yw?(cwa|HXd9+ic6^J#beCEkg6&$) z;i4C=eBKbI*go6LpbRP_8^(2*z&#U`g>d$NE@d-3svDzcNq7uMX<5$Iuvgh@aW2P9 z`E};!vh-*u&88`TJO)qe%f4j?5{FSjv~ew6KmJe&|1v9iMr~1(P1(}-1K2iOJv&fC ztEx*;bn%H;Rah5U>iiI}2mfNH?xu3!e^5E>8J>*?^p`zlysq7dhE2UemQ;6YHM${& za>N#C&73yI3vsK?8Ss9?#c9zKDpNF7H4i)MO4SVQjZ#zc^7@%jL4MD_&4lXkLCRTQ z^g0~j_-VVJdE0rtdqj5U#4iD9y`Ytg_+GpZVx6P%p%{%;OELM&FT}wL{LuAFV#JZZ z>3-*#hB*YV&35^Gdvg%cN@mkfyJ6w!ab<(A3oFs{F!JkDb=C*fT@Q&4pBlSuI-#)^ z{1c7tHrd+&p<=lRR6LcNf9Gc>Vn)`H>mTEjKnZ3Xk~~<7u>Lnc{twsbyiKwht~J}s zIPfm2%iX9xv*Dc>#q-;?sv!NdwNR%~w#BO^t{uFXNPe@B3(T%@65(aq7wGNYu*5Un zP3NX+;3rNr=s41*xouB2yIi>LM#~>2%PabR6(zA@dMtu>b_}0x|7E37eWxT zexn53NdN61bhU3Y&BFHoJ)O&%n_9PdcloB~K#!aqm4ILX^3FwGeS zw1as8Gh47lYmU`rvA@L{C7f`tns#c9NB#DL`8iEBkvyKtwwAB#NHc!su=P!w6ozE~ z5n2O%LL_2bk)9=#$FdE^-3TpsR3b#R{PXrv!6d-~K5eE+0-45;JIEf zEVyojI@^*S4C&lW*NqMH+1kbDKdUW8<^zhKv0^=7jIWO&vP;6suD#>bTlr;M-@8*K zw-AH@{)zZi@Uy3^)Mlw2Dn!HGA73FpNI`(fC=-7`yJVL!BI$V`zw3Zyj{u3^=`mUK zqvB44p{zjpRa*$jQM^4DOFrP^?)02B+aZW;fSj(w6fwK(K-|6Dn~aAJ7TlDelo8o6 z&rry-%y`Vi6e61{*epW+4xzp8nB|Fg6-;bb$B!?MR_Fq-RwRtnxEBmH$q+pzS7>Oi zQ@d#gC15}SKe)NPAacG6;dX8|qi-&bvp5voVo3-jIV5X-`Pgn%jp6+j*ESR#eXve# z2VQ{<67|R7(=WmZ3miz0+dMpN>F1^N_#n?t3St>UC>u zX?V0we)*HP9g-2T{*NIdqTGaY_*b$p?kA1x}3b3!r!)1IXH*PQiJjvT5}fzY&>~hA1D3 zsQ^GVqGm8|@wdq}Ue{sWNxXZ`DI*HRe+qMET`FO*ocIsfC7YN@cP=cs5 zHib+OC@07*UNSL4@q)#%ssYPP#Fs8XFdzky0XSTv2H7Vo|H83s!r z;a^-%n>PJej7VoXBlOb6!6wm&yT(Mb4?GJSXR&N6Cn&GKO1UXG(B|Y=bHEo3aQcD@ z>CB;9WBp;>R&B3B;s@1>w_&qM)*Uoerue!JIJF*}h2;ZDi4>6SGFyn^lnx>?h+OEK zLDXV|5IjVk4+QtRmYPP9nlnsi8*Qz>M+Frml&(`i*)^=8oPE=2}{x*9H zcV`>U_WBA<{RL(dONU}wVR9$2&x+20e$MtbFWHiaz0t_$R=n_&Bt=x3M1?%^PyQY1 z$QYm4TM!xV)H}I2JxE@uDDEX^6ORIYIEoh2cPO_UNu$rqFtKy(1pf*ZkK*bAmr z<$!9sYhNDx+=9&#vh8ud677_@gKXn0sesFHldG_`DAaq#q~S=YbE;ddK_4nfg%6El zOaPe(uSmTYZQ3dU$IEER11?Qbun37Q1yjrr(~?M>=O-e_p<#Y-d7IZ2VEwiR|J@Ge zSXhB9z22W~EN&ZNz7ij;HEL3-5h)*|e`DQ9@JU=g9|0$$a2AsY%E(LfOhltBq}wkM zqiBUeb&aRtHsYO2`2oysAU;+Ro~X0&Xk=7qO@$iz!lxqI`YbJ{NHshnDh$NhM9FL3 z8$LfWje$2u5w}=fj?k(LDcjWHSDjEz=iam%xQmUy3Z^!p@G$QD$}wXU_(;=;xKNas znzJg&fu~E|SV}+;Wo4mN_<}8DMz*V1lEgp`x{3$BbZ<0M0gy5dBLcPh+z64`9k z1{5=D((7wnHKkY+ohXfB=x2UWOCPLBdb9(s6Mt_fM4PrEm7l8qbx7kaG3Uta!3nL0 z(y}n)i(Rwvs!LIWUA3$-vriUeVPOBXsK7K(n{vIC9oc}cr&WuaNo#E$^$p6$i|h*N zejl|!*p2oJyL=xhtONyT;0Oli;wH(UeV1HzQyC5sZ9#j^qrAe%Bh{gLLfs$6Yj4n7 zg=5BSkGU8Glb5<*O~65}3H5A=P^n{MK3@hi{kbt$`&7SCyUh4`LsRo)Wms=oTV~E# zCx%?X!Z*S^RyuBqREq3Gd~=~?rPXj0@Z1rgo1__IrGkKwTivYlDkBbN)oAQr1ek1w zr{m8wi#M`CyV`%#Yj9ajP(16ma)mJ;d7x5wXsWIg;rEHXBAE2&v1q>o7CF~DoBY?( zVql>Ko4k+HK-s(ww0&06TzG%7g0ir<-_3hNFer1a1AwP%~OHIZ;g|< z=SE%kAWUWp&!RnB1S`%VazRz+NK`s!s0zHTyuBZ9dz5pm%n1aRs-0F0o{+S6T^?GX znWN6&XH*1zE|-T-0j}N(LC_tF{;f_S6Kjn}%FFaNoUU`+6YiZrg z+*)6P&N*zo^M{)qe@0~?1+jgr)~{z>xlUdYBeNz-yx1l^+PKQ4mn*&M_^iaXNOCk* z`^7Wv$*OkIj``ZNd3hX?uDNQ5pDsUk3tz5?pfSsl+z$!{6*q3GrbA_5$tNE4Gj<)j z-`DkL*}{g<=~vyGMkMz;pKJ_?GW+!(%TL&@h0kZ@S;91Bv8AFk)NCEDX(h+4e4Hi9 zuFJ6;L??O;W;N?BrZ_e9#~fcB(vr!Y8cQ8u6SG#b+SVMnP+)5>ZJez0)ZsccO{&s7 z9kJ)NC%M|)N3Lc^wRy45AM#EKd}4v{eR-;v?Czta4IQBF*Y2P@>Nfql8*i0w*vU-3 zV?F{alsaC3bw&dpD%<4~so-F-CD7(Vrjt^lYj3Ux)&5M1TBujjeD@joN42b_h;Gra z==D>mZ&40|4gDYZt4j?VyG;(HPdtLJ z0Q(=!TfvUHoqaZd2k|4*Y-=QN7sXF|p5*dKCQecbnu(IxlP|s3^2OHUsYZ5imuT%W zdPJ~hp@U|jzo*RMFRw28^_=NYCyEQhBb0lZk|P*9d{-}HGcr&V5GJdoloc5WyUISF zfZqlx(Y@!t{Nn=g8Ar&e`Z*Pj5dAIAb&>3=Pv!y12Wz1C5*6JAZO<{_u+; zg7o%uJIlK(-q2C=T`hWvOhxa)qVxm4i z&`^>nbO+22TK494Z+>$p_5vj3m4MuI!AmiOfu;yh%3LDDh1?fZhnRHr8++&ZnQPXIA9bEjKNl(-{8XK8uOo?J{D_~=9@4%rzgZ+CDzCM6W&k5GGIdOLp zS+|mKb19~9!T>zN3dhVn(q$*0N6)(W?n|hzlz|(iQMy;*V)~KpY~Hy-p=LZ$<@lbx zqQjO0(<^K0i&0cFzQtaNbL`fH8 za5QD83@v~WKtrMOJ`Zuq{O7=-qu1e!JqfkFW1THqYmn(VCm)X^! ziiFkb0IE=BJJ9lD(Myo{3LDeYR0$n-c2E4rQ{E^G_i-Z7W8)_nVH(%3EF?HJcXru* zzFG_WH>WikjPXLHstU?$G^XL|RRUw`)+kQfv zO5`Yq(T2$hr1f^hS`c25JyoI-HOfsnkAg5k z3Y9xiRHp2LJ5}vTkc>sFFM8Vf0*uO9Q~&nX(?6xieFEGdY7Mf}a&njZ9TAH<8Ka}J zF3?W&BH(oUDKhRj-ipf#y?dqCQV^hjIuql`KPBs}aU3kaD_?%+08=4mN+yE#awJ-9 zuE{HF{$8>|u5Rn=4uvYp`xq)unQ=qx-uF2AOPmm8IdNwZjj&)r2!Ud*&C9n!DvgYc3Xs)D- zt&Vo^zGJt>Um}|qAPzNEXc1%d z@p{$I?^ylojnf|~8v_WwY>=8il5~+h3k5`V!0L7&VdbVbUYenaM$eVRadRbfviF^% zrBt)FsWTBzXB`h57PeGMw8B+Y|!5ZGw5ZbZ|y2QFzGXotwSb{bJeYl;#H z>*by+MAlRs-W1T%Oo!+y3~T; zVmwL29q(IS1;wV2Nfj(7o%1Y&V=BLMVS-mDVAdR>XAU#Rnw_j4)nr)KV$tAtWF{dj z?3`ElgphG>Frk1&Va=c57;^E~Syb`$?$yNa$H-A5Yi2>%OYai297<^Z@ML>~h{E2i zvy~=R#K=G#wC;Qj@0$l7^TkXKNpfQrUAoG2+zu()(teOx$geiZvP(J=_sOfCU}2YZ z^4`o@p!-QFoOfV5a)LEuhgD2RAl8C{n?okkfXKthw=o@i}Z3L&XeEnayYJW)+^?AVYGXExWW`Eaz0|@i)=7^(-o1=xZ z37wURhtuC}lfPv0RHpq8+r(v>5pIA1hJPM6qG-)l3LFjYfK1hjvLOoc%)gzxyq=-{ zbI*q!lUrI>jTWihQHw6FU2Bo5T;uVsIE2^^M{xS*FLPN)4yyDl|C?fleM~t9=MVQw z3&o;?e&aW}Yq(D=yN9kf0Q$f5{I4w1zx4dO!+(E?|Nl3{Tn!v8{-Rd#R|x4}disBX zkp8s=mEY2ifB*XLH~$8b^50uvY~f^N=W62Up=Zj%!2Z_;<$tR?{(m;;zYmG#zi~+Z zTZ62P|JOl6`5qDofWNeniHtG4QZygXFq%{_=78{(3jo0mBKe zFm}E;=rPj`$2F6VN9wi$P!XbrKF@yAyrH=#ToRDxlYikOu8Jbq%$b$D2VRpX1Z z)qYCBhFc~h)*6H!DgdO=c|mQfWoCHZ20yiToa0Ib<34E?Zd$pIj{Vhd$F9QrA+nY4 zFKobl3HVA8ppAuS=`7)V%9x4U&lJcQcnGoytfXqJy)wYLwcFtYJDX?aKC7+ObzNV` zTW2md7d-I$RsOE?K#>DaOwj5o6Q6OLdzgR>tC(z`$KgHP+wf#o%Faz$~$ zkOXO%3~2xeY2X)Z66Pwfgo7@!NpTwO&jPJzBf;m9Kdbx1uRVmP#bE5*H!z!$QKVRV zjGaq2GTINxk3?yKSEU49l%Ln7>aIy62>8B`XgUHJt{ynD3KIykXG#ofXG7tDLx&O& zZe*9pTI*h|jZfAl*M7|(%^3d>z44a?QUa5f3G}@{Ccdlwe{_L3en)ax8~;6G`Csg0 zK5;ry!Tczp*WUu8kCGzJOPYlz1Fqyr55yzu<;(Hxl@Uu>E zbv6VH{%Vb0d^ZbD0+Z?&9c^%rco15d_2~3o6jiP0gJp0n=6ckSK7_-Y0JAwbHfN*t z+~J)Uw5T@0hDc?9zCQpM$DaE=st_h6Zh;XDsSW(2Q+*oB2$?7mcVD zY9fv59dOH;OW_XOXXSeot7jnUe50q}^Xk%z2xZ>+bJene+LQh|Y{col!PB?W)&ZAL zGLS*Wkq_!aS}PlgIL_K2R^*}TE23rg-D96@@(3_fHa4F@Lu8XRpwKF_wnbPgAOD~K zU99(TE%(2J@NU0F4vqh#b7N#@V`FFgPru%O5onWwVf9TTxa;yACeS0|V#6f|tqo7W zQ-;1f}v?Vkh*&%CuXF?aT0^np$Zzh+R+ z1t4Vv#3&;`^BHJN=?Eha3r5t4YrxR3Bkt=B)4&pC^aREvLRPN~rI5cOJq`%RkI7pL z_eIB7fPDcl&#*BcStYvhV$kHS%FS9``!;yv)EGQRj%Gbw*BTl~Pi08z>Ig#K4Yxk{ zk~n|`Sy^r5NV6MeQNt|=|H`aQN75e59n38O6NU;G5Pt2r1CMAGu$Sn4o?e*qgn=mm zVUjS0qLEj$n)67NFmZh7~%n}-iJYOQMutoK<$ z`v|7=zH9y7eL+E^!~@r$ynF&k*9^JI#<(PO!qsdVXz)F~Xf=Y~NGEIpiXx!i$eh=+ zTa&NH4;(u+{24%q3Ixr{q6*_@y}iN+b}5)sqFM1hNh<{OnPByW(48nuWbkA(wX(jLguFPB5Cb7{`t7$k3T#%iBH$viR=59oB`bO9+n`g zmEw#~G-zKQ!P~f~dlaf)oVgXhkK1zb@3X z-7ch@j}ky@kxj^NMb9;Z86JX6yJl{)0c2NtIJ zHOzZsP>}9MoWPP^JYUR^?O6i+AiD)8#5j;pxcD4W1LQ_0T~j7i{j4n`k?93D0&z3C z>~lj&99cWGmfLWtUDco6G_&YlR!}Izv*y6FWBK=wp&&)a{(n@>8tpJOcKhYgbl z7Eur{)=tSIPd9t`l96PCkOJ`~6kz~Al2&r8lPVaR8R1@6r(UUhi+U}zACzXanUI&w zHs+?T`PwG^7D3@0KW5%R{r*IO)N+;AAKA}(ot3V<88T4lN{13)GfpT!n%316$svVf zXr&$jJ-tN7LN9@yIAgOMj>KkOi&G9*FFE%?e7I}Q*n!3y&^;TeXRzKr$2~ z+UlCjB~a-(=nlX$R??H#HD{e}&^8OXbKcV3V^t_?AyMXy%V%z~5=kude z-C{!52CZ(rTf>4Eq_70Tvo5cDFwtIFEwDw@5TecsI|x3PB3q~MD;p;WzSfRV?8#yG zX1ta^t&;_NxEnJY1*Bu}ASq*;ZQ51Wl1B6acOA<*HAHVdj&Z@iS0|Ofdc74f^qa51 zN|A#|&Gu5H9m=_3Lleyg0v^-a@1BOhm%9V);T-bRl1kk8uxoz!`0w2I#29siX*-oz zycVlzx10A3w!NjFj%~l^Og>Q*lX`c!gCx|`)|IJq<85yk9K%`r+TYoXaV?hFul0w_ zA&;*>vu##ym6%4o4BEG1#E2c-Hj3vTWMf;IU%k%h%CP390?&9W?vuS)7G9^xcjlEEa|f*YH@t&(8yiQ(2HaXSPn^+@PT-t$Dmw}mX_V1v*m z^2QN_Ljn2)uEe503rDMh)T)le(SpSd+J^Y8x~(j++=M@mBr_<>F&v>}$%}th;DXN`<>Apms1LpwulOpj?lwD~P|3V7$>v#v^I^@;K6{xX$H#Hp*#g($%H(hEYus%E|>S|dfu<~={ zw?qm1iY(uxyO_uwXsS=E&9#~B^2i-fgZO-QbAl4OE@w2@@uYyreegQ$#i<6M z&M(*UTtX_XOod<}=Hje!w`B&YQ^J9Ku51bPo#cf5D#nI(c(W_kwp6|IGC_5KyR+#R zeX?6Q^>f5sZRfyjQa#$uqr^Hi50%Zs)D!AXjwAXFoI_3loCC8E>6onsZ}ITsG9;g> zcix)lPqj$nIjM*nIFo@_==@;z!cNb0T|U`7RTuYJwB_8U*`FPih+71|E#@ZWiMe2o z;%{|BvE~i>&Wn1TsX^w^VJcXDr2@-l)=*>*+!gR3#;C2FGyG3=t06XzuVqg=$LQ`+5>}h2g^J z;Uv;uTDeT_L&jvvhiji&RSImlJ_j4D99sf8nDDt7f=oGBMzA214zaPG(c+To*xj`1 zDnQI_^tPC$7V!(Q7U?H3Y7FXfft=tG3bux9#c);Iaet+ejo83GK6S8~I27Va>`VRl z2T8-f7}a2YdE02;26g*)HTaJXoTamY**{v<|6;^^W+!EX_))-iKX`^E)c7IPY@%bJ zsgeylFfgKP$L!~2K}5l^tfH^!l+Fj-Gq$9An7>|JKm&k^_bxodEH{BD2NP^+qz8L$ zZ?r>bebxlG{s80ZnV4IAt=VHx$>xc+n`uky8H|EgkaP#sVoFpA&gL6iTVqyW(+PDH z+3=btEh9#DQ%GFTVFP_rXCrzqOgO?wVBZNsp&1@iZ#|SDey)w4pE~$9BIZK!-Cl2V zyzR-!SOsk(E}-5llJur(YN`h5z!;fng`6nka9arfs7~?pjUNg@29qV5j%B~t+RvbJ zJRH6raH%H-c~PQiy6}r9)62s#ly88_vDTrvCvYyKIsyW{HA(NnQ?5Q&ubb}?{BM?a zeoGlH()VQ5d{@K&=!BVC8#tN&z|2)`GpF@PoVUWF==LR~l09O2JP1}Ro zA9{L+s0F-+@9*|Ny&h!MV#bX%oZjSo96rx;KR+_p1&teD6)Z5f|nFl=yusA)_H(*({KxVPr89 znrAy%6AHI3)@@I`WQ**~I6Jy=^s{ldq)uCk&5B;R`BiPMb$38}-`u zzA67_>7ny8ocj@$lEUum1oO(zr8?7AkSR@FcLu=ErofCqza|r$EzV#5uy>T zh3aV;Ohoz*H8{$!tG((BKD=OeI#!RiH>b_zm^biP3K%-*RNpT;P-4ph<}$O;z@nc- z8N(AqD}#w`ZC|VW%%*m2ul@U zqw~by%On*60Knuww^aV|itc~OYfHP7D^f=p>3yo>aQN}u7%f>9yR~Hv){Y)26aaAc zTv0&VV!g2sglok1)_d(_Tcs*B?VV0W;y8Q%KEr$5)0~U*u^<-}OOau^gcOz(PAZ_1;>c%%z7&`c6Z2ULc0*algglTD}C!>@@lg)Zv0tIL?EYHkDOtvbu88 zdx!+KbKaWsD5DycW%BriDvqe!R(VQCl_JEfiqS+j`hGk~^jE2=U|BZ?nu}7hvT;3{&_lICRC-%lX`Evf_^D0TP1?jS8|}W0^e~b^BNdwD+mooB zA4GM%vtE9L=qeq#UhV!HOKjLM+sR`2`aI;fO*~u_enzEr%b%#ik!m%iJrNIgoeP)p z%u))Yu`biCzht~ErtODY>A+QCX%UTj@}QJVy!GrK!>0Tp84k$#g_S_UUdjMvt4#=c ziOIPA#M0@Kq-&ppfReCB?uN2v{OtB;`XNLU@r5_q7)J>qVH2KL4Jt-^=dL#7oZEQd z41DdH&Xu=aBHyvrqBeNeR8mh=6`nZs)YI0nEa8&uhmnmvEL04ILygsJI7N5t06}Vc zuznH#bFH1&80p)BTxOC{!;)B3+M;`kAn6sX`$9gZE7A>-> z=<8}dP~jBQ6Z?54TvyF;WtKcT`}}E3at-%mG^Q_c&Bc7jgUfn)X6>t{?W?h3!|(Ja z7^xm?giumL=NBGERaIbS;S%uAlcQTVK}9Sy3y#_q)|JZN5tOMoaw*=rH-tL7voB{{ z8e0@9q1cvzn{qkeSJ0L($#Q5IB>|Wi2^bLUt%2B>Td)^R0(Nt+#W?G=H&Q%9lvZIc z`~GoRqJ!N(ih&>QJa*Rjcoyh=4;s{hT+BR}@Pe7J{^(E-xQ-M;6MgJAf-Wn{MD7>w zSilQTzLl~^x9FK;bJ2_mFu#lQspKU!4T2fHkw;&~0PS~S9N%sdBoN>axz#0C3ko}b&!F{qkqF;D|LW5ME@#%xbYsBJDhJWX?+ z24jbF#rQ^XG0JYnQs%H@Y;;*NWMNgna9ipNIfde~))!PrUFxvb8(0Yq&b{d4VwEku z^JbON7@{9JX}){Js?!)&OA5gF{2)h6BdsP{mYz zJwLfs%g)AoG1Z9vm$r639UeMn|@@k5su&-B zUu&<&dGFG7eM3(T@+{8oc5BsoP4lBlxVv_I)><4RPzS8(6z-`mkwP}JcXI{1ad`r5 zlJjE|Dn^Nx#hJ&32bagpedbns_a*QcNiL05a!fL(gv-hW?fh7ingx*+kp+<%kqMD8 z;BTd?T0u~iX~Z~s97D-~Mws?H2a6_{MwmwbuceyKDmgwSx&gz8aYPX#pqyWxfD8dC z96}$20SE&y`lL}5QezyW|GN}0ASp!T3riD`ASU#Q>yt1bVXT|PAT=g3{-r1ySPR>L z*bG?*TMJw3|FvBF?b(<{%pgQ~HAHcZ36{Y@z7xaH~fBo&x%lO;hwI26BT#Y#iI?#a( zD4})VJlepuK&Z1H@?Dt4u@+mxFp~!yC`!%`Z%yz;Om-W~d)fCqUZY^?87NGJY_Y#( z5vaxJR(T*)P~Pq{&fw1ou}-pk(G-`=lalz6kBR7MQKNa_Ndv(r+=f&y$U6J9OYHlB z5gwCV=U*jUtU;37c}jOec{LwL&>v#<*3rzU1&mAzirdh-?gzbib(8a}Zi&97p%b(8 z^rL>m-vP($!U_+1{={A`uHnX~x0SXf(IV_dCOPDzTbDgNBoq1wn@Xw*gOQHJ%!uv$ zksDpA_Rj`pJ2M+e{Wtwrobo^FHTyq$uX+|vj!tw+fA@=k|IY;1k_;WCO^)wjAFsQS zHZyb0pwlM>Y;uEss3M_QPRhG2(vYU5(the?jhpN0T(e$$R4*H|ICK2+#F{Y+Md@>rIr&Rrj+*yKzO6 zdP!`rHrF`Si&u+*1y%^5R5r!<%TAO_E~j_l;5KmU4}dt?+_b8fyYPkj;`zwd=|5i6 ze*$J_@V}$bT7z}vus_P&Slnb=f3$siu*iueaU>!^k{We9zppcT#8c4wVqJv-O09t2 z=4*B^Mj7$l=3(wmbnfCQQ@iOJlXWH1lzYuX(K6+31gn67sE@^*(8Rrwm|#k=)9_@+ zLsN=tEuZ-akJyPxuU>j zIj*^`=Eb>U`P-=dYb5YBGJn2ivL0com}Ig}-tQn9_OOY$SLLF|cGO-tGVemSF?%Jd z;4dO}|5}!!vC~Ukv476Y8{W-M8X*nIFWhlQ*B5x{EcRcfNFqzDhrGYp(96E5VMnBa zO$gGeB#*Eu-?kOrn8T>h>1)@!tx~$4^7?>DNTzVxknQCTt_^IIe$%LM7~u6O?xkio z7(~=p18D)(6hWu%A;xCOfjD;|qoVb4IZD)5s3HY3X6W@suINZE{BhyJPV6te3SJXL zZJ!)M+P9wlooLo~d;dOcmW0WjR3diZBp#C&IcnItQm2_(vZe_b9CTWfjEeA8W54H!wk2!gRyaeOJ*;*7P zotsHN6HS$5m!jw7vhY_bO-}7dWOQ!7s}F&=m?1Y3Pp4N#ylLO}A{Dsl4I*Bp(3={( zJ{DKV=@}wkm~cLWsQakLvL4IO1l6C%TGcr zxk~j~;4dFw7c8YH_>>CdCmt7~Mpx>yn4ns%Id@Y=*7#-4RHU(W8w;OQq%}J&5$Yk< z2DJ&;j}L(embbO?-KC_eZ-6&ctyJ5g5awk(#WC zWuClZNM75sqAiuew0QySVerWCi-?7_1bR96m*Ep1YXfEMLWR9FvB0*~)%cKE?*pU@ z8%@z@wvQ48tJv*{Ic7TS%{H_(<$$H%l`a>)JxtuHP8Wu_%kJ5_+pbR=#OUs-Bsje1 zRo#Q6w8iKlbM-_6UP{si-4oks3mmdLGju=2l({91}N$ku=9 zBQz3z`)2n4(-HJPON0Fv8%m|d7m>?}{?7Y>CVJFg99&$x^JClNtBs+fX$!9TU%PVvMQ zJIAamX`MC9G`?i*L2#I36rPL~IY-eHeNQY6mA#p)kU)NFhF(h+Qn+)6FC*4O-wp7H z`i&MDL99iNM7c_>#m_%rft4&dSR=>o&^skPv1hFiIJI??r|QsPAUXD{`qWS_@s8h% z7Aj*{ES*ByFafc7gSUz@kvqU9A+!)Xl;y?}b>LN9pE{{hlonx?T0=ncg6K$TgMZ5= zVNchvJZR+_Uz!ztVPu?UHi*716YbVigj7=dMz{iD?!bU`DdkLS32nc?uX7q7z9h*$ ztWaqs$3H~}`l{X%-eOqI?jBYC7v zDj40QUF)K)yd{<~nnzJq=SzG(L3}#Vh;@0mJwJ#Pxnh`o{7=gz7DoVdl}=Nd4p?)_ zHM3ps(Z_|_v;&^2Dcy}Xd94;hOZFxxEK(O69DnU9T77ZOin!g`4VuFz%k$=7z@+z) z?2*y53+a*U~=j;?mX7RmC)l3oT>Lj#-x*fJ8??*`TDYXEnsT}hF|hx45nDr z3rsh1l1|{};%Dt){h#QsLPTxST||5CpPutH1V*hWZrC0DE9OR5)$aO{R#v=6AetO$ zA=C8@X7}=4&mY|S%k{PUFEII7trD}?(VLcnGBfyETcU>2j4T_v&i}!n-;5fQ?N1qEUx^)#Jq*fJ(bhf_+;CWz#729e0JVXKZZ(ybXqxP>ubKSGr;e{A zg(H=3tM~XIui4VX@4>gNrDy3G(MDrO=m2C5@2Kf^yyh9@5FOnC3viD3s_FgVdo^ht zj)klwP@J6c9+C5}m`pC1GNfK~GoyLoFg*!j&Re%FN^vF{~ohklI>pJ^vHn!i}LSK6&io7wMpVYD(#N(Zq> zdzDZpmw9<8ux%n&f+eC1qkS0NoXr}|kqWW%qeRC|(wX~-%AZwwA03Kpvv|d%$E-#^ z@YoJQW?O3*Ggvis(+JxDZt{#tLMlHcmc1(e)Lc8`RE5sR@Err17juYi>ijIjs?JZi|m z5=03|2@KO{{^#v)EO42e{s!=3pkkNa2k>GJMm)w&7*p0{R_rvOG$F>2O^9L4C4Sux z-D|;;UlZgY^?A%fCis)NFR4uz{KvnSdcc3cWx$rb$978)9AiS`irB;I^%Fg><1$-F zU3G_upmVnL94y;Y0z;I_s>-Ft!zZIhEs&SvG0OgkUo*ZGv!R)0%o;Z(09YnI28NSc z*bOt4aV_|us5N1;;>Kf%66*MRZ zw~1T4NKHHNW3=3=&JN;bRoqLt&qojm#nHLX+kw+P(wurLXaV@wg6Skw05WEi}-o6o!nA z{-i~PFiX=Kn3bGSD_6A2$iPzD*F9Q}uP4%1+P;;47&X|<^;Zf9%UBn{m^L*-pfT4@ z(y#om>+xcQW3GkJsUh0_@oW$m&c~~nU=%VhK}Odf&e&^@trorkgaTUbPb|Zj381#Xk_&?R>q(n_uD%b76l7+Hzn(FqB0>?r3Vi*HmyrRccKyE95)tyLTo`g(H*VuSSRVcSUFW}l+4t}%72;+CZ?%~x zIJXuTtU_d4&Zj$`h!LU=Yb;W%t1g10nYEu8LNB|jZwBz4o&8v(#b=jKBj=UtHi{r~ zj#}hs2Eu>fB*v55^#dfotV-KI>_6s<|ClfSHJ6nbXZvd|`)ic#Z*#~IJjj}}J^Ss# z&=-z8tY%LN9}Ty@nS3MJ1ex*LzL~l&;5JG|(rs!kBtU*z;-VWNQf||nUYMg4gT~d+ zv@U}@Pc1h-rqIQ7sPbNh2s626|fn++)>CX?omhx z!5G})!XK5k)^UX*dQG}Dg4yyp*>(@dx1Yqic;xo=_E`m3$_o3`!es>F972pgubRCf z$s_F@&Xv`C=I|dx^!-F*`99n+uiYz;S3m9_M0OYg@KR&KPt`$vTGZTS)^Zba5y4+% zl*g0K2L*F1SYZMPcEBA6*}l2{_yDQ_8GuD(5uEtO^!3l|WfGl0&T zSSX!5dn7Y#J;{Ay715Kt<59@e^KPJfJRlz39>*PgqU%8~yjU{T_MgHElQrPRR0Mmi zt`l*Ejfk|V(NAq_-*tJn!lwS*?&plYV!v&*TPI@bEX@=B81Du&#Uf4pLHv!s^>UT; zKAN3F(VUGkHZ%f*4l&tV;vunGBfz!VYlgx0aw2zbt?6{&hpAq9bDoLppBy_}na@m} z!TF*z^^8xetH<&Ax1i8}oqetQKZhy*F4y<}BHg$cKR0^iD{#{J)${p(5bOS9T~5vh zj$cin>HnE>{9j>RRUNx^c2u9|>Xz{zlXA)wcp-4+Yrqkeq-&^LamlW$kwVf*lPW2^ z5fSHb@7Fx32_`(JThyR2Vq0EU%e#5g^4+KN1xgXA30H4vz{w-|3F>=`3awj~jq2EE z6d*6BdyiJog(JXB)ws|Bvo($Fsh&k;QpsSY5h;q}e^SsjQ31v9CYn;zEK(`L422@a zqzcv+bS^6B7rIl?--D^qNhyUS*x98CRZL9Tg{4NB+pVCkV3dh>Xu|mS_!pkmXgPa)olL4 zY_9qaZFbH$Rwkp;mZRz${azW+gn(ob^{pX{M)+cH#0t2kJsVz(y5 z3^&l>ozPTg`XFWz=aLAGVA4t8+O9$eHkQU>wFXbjuSwtb#jR8xCj*h89@Ww}M!$CK z;pOdV#TF-?|1QAsIFLW(&+xt(-b$0(pxTnheK{F!P7F=cM`|^AlSs63>=%F8L>P7@ z-XeI8=g68PCH}nPzv-+M@#TcZAM$kjzoJN zLwNf=n`b2ekM)GzLciIra1o0S%#r^Zdg9Cc7&nlH*DrYzx{PG#;iij;fP`ap;L`&m zYqv>Q1GEW|gtSU4p7=UE(%l+;>WUoIX+FlNhOg*c4O|Ts1}yG>zRktzdcA=&%`Nv0 zRimDLIJP-kM_7Wx7}X8+H8D<$H6zF&NbReYlEd-)Y>p>e`7||yx-Ps2B+pXAo5X>3~l1klT&}R z$3S^B!NXc!->oC+&03;j8F@f%`z^Lm_igXyxSFAlAbSK`voJRJ@dgvWRDnVaVy<7% z+gIz)pNJOfu(kNIeE7`~=gMWWf@+sPh4yt=6SToZf3T3S@wk?to$+flo8b6W0|4SX zQ<99TG{hsn=HX?mVrW&D(72q7YD{6Nf<7!vq6V&jQ(-7t7j_AAOo04{h>tCOaug*99<0Cp<$#OeOwjG{+alU2=`Hg}@ZXw*3 zds`6{Jkq%azao|y`3RDFO=9cCL|g+@O$nJF@{m2PhK)K|jH7A0yu`yAXzC+ln!3Zb zVhqh7-ob`nGmo|GN%;nLLTNa8K%mvUT$|k9=B)VLus*3=Bt>A`rLQzDAsWoT#|RUo zui_%GoYu9pc%!qI{XxCVD0-gN%kJ#$>g--DXNyG1>6|LS0ohv-@z_QDgrjfQtsgbe zeUfqY4LlzGlisKg2S*U_?K$#yP>#1ZJO{EH;I<$yq(%psw)TB|TnGbLfYm`^VP`0H z%kN(!_NipI<3^z0zR`XKTK)%l{{Ou3{GVg?l`7M*%hswSo;;Tp<>&5VeAG94;Dgdq(zdTkj&>mH`4`b8%0ejEj?r5x1s z1JL9cv5$z06Jie$SoFOKKd+%IY4JpeMmzjHj$>{CKPh46zIU%EPg=ZM9E^_|4!{cM zFJXX-v?!Y~6=nE1P@RS4G%Md|X(yckpNH)n>L2VxgT{Qa_dx|M&2gYmTC6}(R{LFt zs+9HK#+Ec1XnL{TK3TT%I%%+?MEMuhd(rBBVkuWj{QSZMtf6;dW=ty>Y^L0w;sF-m~QYl(*`W7Heu7*%WF@~!=AZ{Y*3 z-G4amhvvbYT-Qbon6yT@*+F@&el_##SBWbGy~ov$_;A9M0jljWIjOINpz%BJ2AyI8 zNua`5761>QVxIGq} zVS^?oB>rp?Hy1nh!PaKh1oI8Er#ke<2)eb9_xXt5-cMzSz5li!lz<(FcxypNCb!R1 z1usiGg_E;IG22@rRql%1u2^U}6FfswQ>EVHQzAFxWHV|L=^3c>mhYiA-j~~Yg@Hhd z)e=?r%OYkIJbQUO0s*Gu8Vugmquv0-GO`P8?7Xo}A+^3iTM`OrmVe6ePQZ{#q0m+t z`F<|(0=`WxXv^x6-a!d!Vre7bcMoJD{l*nPb9jyBM9`+~Qz6WWoFw8BEp*zf229*L zZoPRH&5=EQFsnWg(ph@S60|qp-gH2MD_iyPKEPa0(v*k7)m%j7#NC&^^kLsAm?+En*XDa*iu-q+Qtn_1&3_j~{+7<4WaQy${*GFR{0vTAA1P2rYG*4^nJuhr8f# zc(ytoS;0N~0{`j(g?1COeZEw?YrZm_tp4YY1b^o&|B)BxY+z_@^8erm({z-6e${kU zPgbwYp30mzgbQ|EWJN2a$+5x}o-Iy+vj;)L=%oC5f7C%1HxYpJwf~dNacnTXT93#b z+Ve=B0=2YaMg;~-X9x?=Q@NzebF7$@(E08v!8Ti8F-h-EZ$G+$s)ocsghBwwn_=<9p?Hf zpr*|DJeQg=$v91wZS1YACQ6|TnYU}F_nDSEflMStMx)NSR4X|E6l+G0NZ8)`M5LJC z_*8_gBAb68=-1|_lKeXF@t1R0fZ7RfvZp>DY-b$IcZh13);N;9sSOzl7zvq)a4cSNPd zLoShXNGxmwl5C;wR-V>Gq!%Kc(2rE4UZCF{TyJ@ond>*s-n-melNhDSA|?ePWdOLw zXl$wIJst)18D@D6 z;dJ`h_dv2}#j4opruY&~`R=9&9!(k8{Qc-^bYi|@FT9S8D#3z^c!)_H9rv?}V08}k z1{-CO>mj1EDR?rYhf-F>Y>$Sc>9X&3;YX^I{GfMjtqn$$NK;bf??Fjs^M9_EL2MPpvK3RdG4lP|szGdS;3&JP z-XQ++5PuIE6dLvZOTo0{|921Zm96jiRkdyMkD6`eFl!Z)uaAp6%r_v=lP^#7x6415 zU~B!aOOX3_ExJ?unzm>J5V$xz&J)@@D?nlAHrr z%fu*E$mn3PNoVETazBElRU{Pr%lxO z#tYvYZUE(G77wj*jx+|qDBJL=iI3THO;s7I;-f^(GiwKrPKlD!iG|d$08v#%^QW}P zLOj$+pNe+0k=!m;nlSOxIG^MqJ477IDrKs5HV6iQ>1_EKZ^Z=@OX;Y*1als>(W5HV zyKRaoVuZ;ENDo(Z{?X)6chQ2@8GCYG-K1$pmmn!9K1CgPqip3&0NHCBw+^JsyWwwI zYw6f#;b&FmHi;8We3*^Jx&b|Mcu0?3#eDG%IPQXo<;?;_qRx;!^*=!6L;c=Gc^mAn zZAW@~<~5ZBR)FgiXg!Mwi#3c~Dd}n^5P?$R8xQ z`%xl~FXN7ld;#j)w&WDd`fl%z^R#b|6zOv z;V*r{5C^y@!xg(PNfVG!N(1z!4MO$8Vx^oQfGm-V1{Cxhvmgw8O!(>3GYaRfw7RhI z%cZjzNC}Xl`X${_l7<5m(uUk0;v6#Z3kW>=cyEld<2VyJ`(O*{0dcli70WaDTocYi#6yq7Ejew{Hd{}jmdGEJiON3;hr24Lda;JTk@pe?KK0%Epf z1bK~eM;OhTjZ6(ALjfpq&y*X1fE~~|MF)i@WKN@C@1fgT(hw3sBB7t~HLT5N%+JkL z?aBL!3wMKy?5O57BNDc2aFT&=T~w}Ru78+%)Z_ZDV%cU^+L$53q|)(MW_pCF*vl0A zc8EoKBdQv5+Dk(|6jofim-|^KLkpJN+_VbfWAL9`_AKbK!6Q8qCAb?A_ za%q!FZ$Q%qR~LTNRSb;jIzw)6RL8?zeQ)_#c@1%M40d9Ux$0rq02mGFW5_C8M4(fq zgj1#k@_Rir_PB)Tb)wN}fMAoc+X$>|Nfz~Y3(*iH`$MkiU9G4(BO;odZ1unMZFHpU z^}r5_nR4KP#i2b7xH&Z24R2--W_7%g8aQyba3vo7TIqasfzEP&cO!MB{k&ZFR1qtG zs8<~KbWqfB@ma6f5~^zN^^C|LWKdQvd7y-)3xi$BIt-p{gvw>{DN|mk4k^(>W*GD; zRAM4!Bp+_S#iq-uAG?mfli1iP_e$WuMVRU_C(Z_9FP0H~^?Wf@AKKJP>a*qpSh$py zVZ>^lN^M+nMAtQn7a2ZGc7@K?&6b`!2r1c&j1?Ool2xMQbLX9Ia4yF@UWyNDKOJi} zmyl6~e!r9r9heJF#)fX|@EglFgArG5vv^=xRzImy*3R(ZU{5F!w0=l*PKL|6cK(W# zqS=mJY1I$wHK9`)^^34jhrPvV<3^HHxpdd^0fh4icx<${meB~nsrA5<$Rgjiw2$A#pi za?vH4;}>G}Z-D2XYy*1Z5W%L11++a_pVdB&d%(!QNoB2%-1=g1qA0#F75uK}l`%{) zPZ{utkVil(`NQ-w7^}u9QnLKtk0f`ptQl5SFlG}mh6Q?8rYXv7-?$z#jCN* zyiuESkvRQ26t$CVK;_h_a_rq{rFT!9Bv=bczB@(Q?(4SOYID+yQRLt?YXJp{iPhmf zkq}tj$+oIxjmLg7l7xPBJm?8sn$;&PuH#kiA5Ny8EdxLWvVr%G#joM0xR8N*Xuq7k z@yi4bAMPK((Uv8a09xRObEe>7tIz7ME2hWvd9qgc1@}@^ewO{*`#RO6qr$1a*9Je> zt`rY8=YOVOM0o}Xs%z2S$lgLSF?jsscl6rgVKF}O+r@bEs=%&oyhbYVsu0$IkEi7p zXz7gtFu?PHb8Oy)7>8@F45qveg0*Mkro+-aesjcx!+nCLBeH-kmctm_y5Sq)h-Q3O zcs2M|HFR?7R_F%u^B#uLwXwUHr`+Tgqcno)JKJ{KhAJyk>XobdQk_#^_;!_H>fEFd zS;Q_lZ|-F-2W}>S!Wy2B)2*Q+e$&nw&afJDGWpQ?NyQ~5Jf2RE>g`ycPWqRDyw&G* z+SRwuLbQhzt;H+?rB9#9)z9EzobdDV{L=?#$j`q4=)a5U{L*LvghH=l$$W`V-hACs z{kNmne?g3qX9oWjVjNVrvfCd*d$<0KXs4f%(x@beB>ee;6qItphLesg!Cj>Q+82f^ zg`!m0lShj)`PBTpfu)F`1z;EZF-Kqwcg^?gV+s)8ek+~k_Ys*@o{Pp%&>Li4Mwaea zqdS@|%8;S49JG0H_jZ)=p_=Q$v^slk4{coep2AYpNbRVYQCyd_ZbU+>9O6*Q*8Pb9=dTW8M(mOwveNhJmKCn#u1tOAsfifV6A z<|z4Bl9+@FIa?z&r~~4X6oictbv!XiGD^3V?yRE9yrDv^C6$XxSz0`ITx7jiU-klW zQfYdfD{O#di0MW!fbzm7RKZj%f9@E5vJlFl3)4(Wo+pVCK)^svYpKh+dTB2xE+(mI ziWNv%DoZ>^#}SRWp5f$M&TTaG;;1>%B%%mTq?5!2D_xL+I+9!aS{_BCYY^QqQfD~I zG$fWy2``(o6nsFBxWA{6F=BmqpC7QighoH+t#k2`oDChsbW~i*0{JS@stzWOdu~`k z(-0)gcO+(U(G}HV@#|!*$le}plgnRPSE674rheJU%Xug0x9?0I4?`RN1^_g?=eEEL zTRVP#dtN?!o8>Dziwkyxu~0~GYqI9LwG-aMx7ly~{%zVBO2zMo>+{S*Pc-~u_9u31C))RCKJX{vxU0bscMeeQ*BW@6V=1Fb7zzyFg^$)t| zp~nJ|l_Bg_fqj_ZWw~xUSng&>5=LEDi2m1}S8u%8$J}kFz&HbXot6{rCmkz9AlKIz zxB0wmr+shN=)G@({z&CM9qq1@$THmg1)Q5BIKMOVuXA{TVUH&ue9rN@YOB?$> zqAchJ-HAGVY$`^}I7TLR$ns3^UNABnckDoQ|JL5^_wulBOs?#TiBV4w^}9uxnGF*2 z!+}aFiY-LvC*bfY-bP1v>kXOsj z#LATa7(ue?z6`q(bR?PCsOXTn&p8a;QTVPPV+E8y+J%G?ed>~3w8R%qXLbi}L&4@% zFB3m0GMU5$8`3(&1Qa9?i?A?FyWiyjJ-~|QFwL%yrqX06)z-+dj0!9qWQN-bX!?b} z2VY!%i4&)dB($Yd62N<4{CNVMCekUTAcwBRuy>$#Dy$7FTB>AMZv{@QZHfYO>=iXo zhoEw96HtH&0s_0AN)rSYE3RQ15${)(1U3wfOkh)oY!{-#bA8QhU^=6jAN##Vu;EXQ zRP-yOlQ>l#jaAS4w55nH3*d{_KRR5vltfIqI=`G||Hb~zg+J{Wq zoVusZD7=x%{3&izu<}#!o&qloJsV%2D!z1#%!8o4p#7V**szwB|M^3hT#Gz=8_dQB zq#Cwk2?FX#l)aBHgU+DFy=iV1p&Gb3IpWAf}$RLHIa z)_4{|52#06c!a#X9U$POIohVxu^zrqk_LUWf~;=}Vqxx-9_zTTOsXPWm&{ zS}pRbPARoUjh;g zIuH>I3}?6un+?rq^Kw_hIO5f&ZPTp%wU5+y1|B21fylJykJKM12EfJSdumOX0}I8A zpfl>?v5P&ja2I1Zh=Xr5h%)(8O+ja5xf%A&-znmdZu{A9#^UiPd92gfK%&d$z&h6z z(0>+X&E7?jA$+*gc(PtwiFZ?jbSJ8UPq`6w*>p@Xhth{1vD`eYWTC_ zT~AcoyyF&{>fO&YBq33V9Y65#Z*_0u2IEbo>zdGX>&&bV=H5G5`n=?_C+VskjenT> zV?I=hX6QS7vsj&G`#tTUwlaAZPKZ)~$x;h~{esZ=nj7Fp2Ry1&{+g0D4n zLlAFhu}on_U2((V);oAv3AI@na{Nq6gCrNV&X0H|ahhesX>K)0!<)YI?Dd*gyxnZ{ zJ!5zB$;8amWmuU2eEX< zbd>f1=sw448z%U`Nf4L`Ycj&@Xa?hf>_f$*NX+exVvU99SE7nMl_}9Q$?un5w$kiP zOry%|o4vEtY8M|MK)*N7(CCt~&W7sB;v3nhO$zZ3=JH3=Bq@Y~sa33oiCXj*qShDegIAw0ix$$y zQu(NhoE(-&gUd?z#!w3=q6ZBoL+RW2Tu)?h%1jg(!x9={M7zZ1!)q(ChL>HDoR%<@ zbZpxTafP?iphJq3##xC^Ew*-U}$=;sInoqoft2u zqRu#SzL4M_Kj1qdyAiyc2?mxE+tUb9;UVD(}Kn7~s6(0bed!6w&Hu8%rE;Kd5N$J7t+ ze?D7@F(mY9dl2mGg|Q_^Oh5`=!I>Quc*__>_c=r`Tv8Lwa_85B5K+}RJMxvqz5_T> zf1+q6=-=sgky%ch?fELNZoLzlZO8soDa5%#;L$4^3%(Wo-0K#B@-0}dV&C2GvYjOD zVJK?vabKVL2=S3(pL1XupBH|=@yQ4A58quM;oc5xKNPLKb6)SQ6XAEfS2{!pKOXV8 zy=}Mn&k6G#FOnXy2@r^=+Js}?&*bUV-d+u!;jVoJ!RN6N8in!sQXUkzjMeYfDcb%I z@;Z5>-ICE2W!-*{hpF3qDZ*$arS#n{d*KSqZkXnu1CW73zE{{)%ZhJ>(RJf0@6*D1!McikrjtYl{C!A#?Mxe zjW|s%T%a0NmX>J-*dAjPr=NC=9N;?T4O#mH(F0gGxcBLbXOd>>Iw;jq zd5E0uVbtraq1|B$J&o{tYB{K@nF|kg`61uGU@1Wr0sPjEsEXq&V*cf~d=XKk#2aVN z-`-Dfa~csEMAHjmp4{(G`fz=i2x@Nql)o{2e0%diJt7SvSnZdzHBFKS)h%5(K4N0h zH=v2y&YwLP5woi6KoQ%CjZ8Lr%yZ9m6sr00%1-1BIs^wmp`{~ zV1?UO5ILBWtEj2tKV&*;H1|`=m5tMPc`xz@b~*E>1<($`;+y7gy=#H;bYhB_MyN`z zdy-Gvs7}?mc}Nh}dmx+LTG0oDm)es2cm(k@t!dH?D0YSN@yA|}(Dpxc+eA?FeB_T# zi7f8?>e8+FBYZ5GB#sNRio7aPVfktYbZy~ZS-&91uz`Pe$LcJ)g% z&=;zA`l)xeTekw){(?K2oeHwBQ=~tZKvZL_!d6+^>b{vsu7yMQ8m~bS3VaKkVnEoi zp|rVgr3UVJedKVv+rBJF847<53`bIqu!9|Q=qa?3w&3I7sjWxzn1*ZNJ6N3t1F%yI z^Aq!Wtxh+Ntv!oZlH`6m`}%sfj#DSJfU>g;o0kttx6t8la>_5|C9I-Pn$c*@4`_H> zls!tQ4JK?U1tgqsx4O_cfV?K&0DU5NPP?%_8FG|gt*vIYMlW*}uLWa#wg{h4J4dXB zobR+P8N0TLm3?)W05vINkPN;{1#iBqa@#l=9HSo4cKtc11K?OqS1o83{zbRM@&p-m zCii0)h@jE?IsRNQq-L2sup8oO;3AQ^ue?fAh`aq_f#{Rd8n{aX&>cR zV|@mO^{EM6OPgP1mus9(1D9bRX6@U3h@7s&K=m2;`j%YqVPQTYC#P*SEvn^gFdF%G z_u)tv>{>{cz)&?e!-pPAHCH`@tNmEp+AB-mzWhO=58Q4QF+E+8E%j@MMrOfEj)jr^ zX#Gvu>(XZBZ@!}DEe!E)D@XbWKoxBlcz37-aSq=g2EnxT2kquM2(b}-xBn2%l*&}S z_qpNoe`4?d3ck)RP`=T9N!kQ`ReAsWLko^B)?eDZHdg8(25K^JUHHOuH5^?Ut9FfZD+s0D%oy@!f$8b@=Io&?O)=9r?}hT2r2|(H^Xjf; zzsWW3@F#Alf`u)nTIzSa;U$@hn;XM7x^t(L>uJGQ9sBVXr1y$4e9T8Qo#2ksZ$8@9 zUBLI#1e}{S=+V4>grEm27`p!aNh5Zw*#zG!SPSxppP`tLJQyir@2pH7UMV|L#>~Ex zF4jehJvD-6k2k0lf9P(9LSj=wdep*hz^@FAzYFaEy@xPa=R9W+OFIGKNzn$RSVh})(?vx!^;~Rg{aVSn4ak2KJcX&L$ zpuuuRLePF^#B`pPZbnLl$x9khM1(%lzS9R`8J)`%w+SOVjvGXrO3%DyKftPS29c&$ zNl|o1KaeRT&H@TVWJz%17bi^~{F5OW^MS-zRQH`RD2Ng!5=`DH1tt(NGKj|fNPS?m z1(w_5R2j((Dh%~R=Mj2|ILAy(E-#^6J0dP_?F55dOjJe+L1I8SjTc*pLj=h-uLjj{ zojgelJ=}dh1ZZf{y{dmx_fOEZ4onh}<6fP7s-_`12Z zV|yQaT5;fT+n2%3R`6szr*6Qjn4C}cT6j1g!p_^d&BBjXFqbKkc-GIi@(0^o!DBvW zLb~=5pqgS^(4%Ol-P#iU4|~n`qBm-zNj*_HokOQ;t_|p4r|@5n({OC`{RSW~w>1O( z<;-PkVCCyC+6o}1TU#G@m+&5}?PM62*%ceAAetn@z+53xoR&kfUCcIDxM#!&<=c~S zufOzy`;wO8zE@OTw}@COEaSc4^EcHRPHzLYd5qfOQjViaxqPMvVHb3waz88(Ve!_$ z!!o-404HM8iM5?Z3-y&iebM1x1Y^P7S12g@?I_x7y|s;WEO z(l>`8rii|yinwELc?T9R`_p#YzG-x65>x%wx4P{RiZ|*7x!*t&B(*O$w`K6wgse-Mf^;?lMu9!cDJrW|FuVYXW#a{-ieuHCwuxZTYSJV1b-W6D93fsd+S-ml!Z5y zZg&iy!n*i_&#cfp^HxbsNzZCq%Zw@bdhUjGEs_)+t?D+J_j4p+d?<1V25H~(fVz=`It6q*OsykRl}Cv4W-*qQlZKLOSr&N zH^XM`Szo*Gr5vaP+HP3X#3f3!5cf3z^m9KGE3NKH&W!ie^>%HR?!wu-`B?V{niw}3 zjHs|w(E7VsZ~O}|RXvsuqQUv3nM#}ql$j<_%|59nnom$5qDr1kq0ng-`HJPDN|$5< zcOJ5}1Y<(oM!LF+B__q20w#7)=#)_Wn}3#M0R;s;SDms4!K+r45EtRYpWqyvK|^e7 z$F6k<-iJ!0t^LFO)%kNtzl%3rfiL}5mCYi42#B99&Lw48f+iVT(RRhzHjmk>#Wq9x zS{BB;iM$(Qo0#}z!>fzv2TVtbcPFbpmD3~WJ0}5)>$2~B)=w^-%VY<)Cyu4f-`01G z?rMj|<5Q2zG0J>1A6;5JuLN_h#OWg)`CPTnk6%S0rl+B$%A})h{OLLUe)LX1rf^}I945eXpKrTsa6`&cHQjo$Y$WiGt(01vayIo zPRPuLDEzFn81P}^*Ewq7VdGUwoed`M^j!n8+04S_S2%CJWgJUC++ZHOl{Qh z&}fgyN%ul$I~SpN4zY!3bPL3tJvCB$>y1{@>;e`C5=f|Mjr9A|rXp{yzMr~+Of4sm zw(rMCau8T^VPSGyI7c9ob$g(lf_Z;R53DY6%tw%aySs`ny0dZTGAF}ieym>{cWV{g%gDuLg`~Fm&3#>#+XB!m_dEk zUQr3>%5*uNNzyobp7kS18jqAJQC%y_jM(gJ7f+nIUG$?Pv_^uvpOhpdw(vnw%WfFFk*o(^9%XfSA&SZzZ=13mM zm7oF+Hs!ph@t#Itz(1@{z&M20c{RK|;8@jiF%$zwfVj?9QG>!aJxa%us`GdR7PFr*go0mwGC{2$Ny6 zAeA@%pKV?Mk>y(;4ikJvMnHS^^dBw$cexV1^Ob5^Fz1r*(loF1?B)jvdw1dGvA*+Q zW4FhJNn*E8C2rTgJ|n?nQ^;ALhN%ovWT~!Sq=Z5QvTU>}N0ZE|H(k_$Dll-vNXBx} zSS=!%-l!uL@;c;Xy%tjrf?`$c{)~IlXywFNBXMcFAexrR0&${EY@g96SDgb>hMrU2 zBzGe;q)#K!O-Nf_X@7R}MFCqa|+ zq)_%`_3WUhO^J*(%0~9VfUc`~q6We;*$1p@#W+rE(At>h4sgK9qccCSPy;BD;V7Gd z9U7-w^zANU$K!rDDiP`L8E!bo_07@l{<>yscVAw>{W|}@XnV&XTcadvxO~gDZCkf& z+q`AlzGd6CZQHhO+_L#qPtSDE%scaSOhosIc+S~zer4<*nd`}1xz-D_$Q9RY%vQ(G z0M6I@$Km~-L?)Q?Zp98Yz3u1|!BtlqE_kx1L~5$MT5^TC8>Z;1gk=>4( z=jX%o^W(CaCi)5=2%;OHsHNq1k`H(Lh3+4i*L?>Kix~Ex9q|Iyvc5N^LA<=1KU{xe zMQ)g0w)etld<8?%%P>kAhPkY%%)GfDk-Xu)te8om)4H<9_{_U(mxdc=jY)B9;lhu_)C&LjNWSIstFgIKUyGR?^TiCjhk%z(sm{FG-4t9pT zvZStzp;9MmLNm>GJpTF8tWpHjwQlr!Xz*3XvpPy|&G-}MA zS=iu3O*a9zmw>6h^2U*`{vy@$FIk=j*s|?_S1`GL158^)ktb^yJ&?p@w?E$jEQKEp zu8!k*yiFF55q?dM>E-RA&iavAwNS@cdCiv!`bqw9q;FL22Q`zFSqnO*YzlgYFD}Y+ z9@i{`;aU}z>~*_&pU%Gd!`us~*}|=d2`s(J)*<2ajZRETB2vX{m@q)|ctc?Zd&4&p z0Zt`z7TQ^%G45Kb<{Y!cq7$cNa4RvM*xpJwD@?kp2W4ewpw_O$YB`nZa=@6DPn#Z= zq$-zY?4~EkmQi~M@X!b2vWXDINTQkh6WxVa%4mBkN{!84wKxRy98$<#n*QXR>e@_~ zCc2#H!-t>e0>lC?nh1E)mNnGmhC8FB*AtyXXC|N5>4PeCKEi#_(n8+8W-t=)$wg}> zIi0Xn(t~PTyR_^mWzDTMhN@QCU2*Sm6DWg*xC(f3)PbMZ!?;NWR%H$)lQ%2-%SUMo zk@xH(8g|eHuB6I)FZ;J#cYeH3#_=%3r%k%PuQyPYr;y&@F+=}X&nu*KY0|>gl?}=l z@ZTx39dZBF=1A(FNjgvz`YT~JAk;!R`uq7`iMt;P<3is8bbtFO|C6IIa@Du8{cceF zH5@PF6vdYR*Malzmtt)CUoYjKu>bsbMDcwoe+x(Oo5m|{ZEW+`xMp}Pl;eW_$7}lQ z6y-116h-PRa{j&lybA*WVE(VVroYAYABS(>7Mp)-?fm8L{s%qjLe+2gQdam+?vF5w zw_b@I&f0n8%1&$W3=kGfHvU886}g@q63RWo_#mM{hxTu|A5jVKQOVj|;dQx#O$VE4 zoK*i0UvkbuHDm~Nb&Wo@PiaQwxOdG7wAKPfrt!FIJmo^-bn&u^u|#e8D&s)%1nN;! z4P(lw=N1(D0$xo7U*o(42ny*UF+={PnaGA`8JN)2QtC=6WoBzfpjYbLADU)~isq2V zDRXSZ9ogej<|<|=aSgRfDr$O2MNkS&1%(vW>bPa>KX&M_V++(!>GBae3qbcyoY$Fgg_9>us-^qG;USsc^+-83k(1$&m>f{2%_z~CDl~mO8B(eQke!r=D+3&Zy z8}9tF_-uJ1xsN*On&*HIGR6vOl~~)pAD` zX_FWdNiJ(p7^c#oOpmn_=Awv`Fq@~Zf(Ejsr!A$kE&OnG>y$*Im>ipx_ z*9u}#4!Y@g`3npU0bQ|TXw51Fr7$t7QlRDoU&39G6tmvSw|bhi`Y7&l18$35^`y2B zoy#`JGY}wRh`;E#FRwfejDm^eE+90rrX2fq#HkGMxi;vCFr(RA03+M zf&!rd2PJQ|s>Wbn;h?%Mr0YP1T1sE-7+=>k@Mx){@vX?|^`GWoO3$O{ zrxPrjIbWK}TyqPUUl$bXxzP%wJK*8W0YejGs=m*-AXw?)K!8Eh-6ydss90xIs;wB( znNtqOki$jVf0j9-wW_qvb8Ttwa4=U@PE&}+q*WQ%kW#}ak7oze@FEX?LrLDkVklA+ zp(DFBwLbc>uHR;EIG;-czdk_r*St`yhIUQ{=>%yWub&5do|xL1nVC(^Y8}hA zX6YcUu-V&pEGRuvoSs}~Sj(9$9DD0sWP^eaUXS7xor;(j143^fW-s!mnqH-luym}# zfM4D@F*&C>wW*l)?OdrC?Mw%s0HwLz4lrI-I4!_+<$=WUoL_jS@NA1}MY6aB147aD zGe#Lt{Z2Xt+yFfVr`HGbr;fM7i>u6>e;zky`*Um;2EsX_BzK&ziN&tWVzzw1+;}}P z4?nKuQ`&s8=h~N=*QlK`*K`-GE*uJl;K*7yKh4vnj? z<>kbweUD_@LG>h1sTc>zWk+o}f4X|jz~3C)jaA+^@agEmM0MV5wu$f2qr-IdMvCwV6)%YG^?x#H z{O?u!pP(K4KbJ`%eMfyu8xs>F`@a|P|HUiu?}aiGoMYhjn{4j)y`E(KuPT)PDYCyG z|533_RFVHnvGlI;9$fSa$!Lq(X9dP&0}g5cjbM?MD?ZuhlS~j+A_R>KJ4gArdW$Ns zG}#2BhV!G?+;n-`bP>(WG!`mvRsz>l_-5ox7!z5EU~Ddr#lDlSRmC2d*E#ZhC-U z3CoYi0asooHC*CAh$fn07W5Sr-@oktA(@^0V=hitqL?-{P3BmywFx`?5>Una&Xb|D z*B}wBny}CIMHzF1$*~|{W5@x9Cy=~5S$~IdSiYFDw&m93S9t2R{O0RT#J0!qK4|b9 zzWV+1{?(^D@dfqi&x|RQD%r-WG2X|d$dY9lnCMscg9PYs{Cp8-Q6XVtg-rGm$os0t zibh`pLo#qyhJ((jHox+g1%qAVbuy`Q&N#-;KpR;F5>7X*J1_dk@95hYS)`Iex$yd# zXIPlaA+hOL^(wPacU$`@#57fACgj@B~!0t$uCo*33N0T5OU+Hh!O zYQVM!k7BdESf8m!z(&O_TZWF;S5 zT98A2Wvy;8M)R;g6O0_b)9knA?&3!6>>bG84N5TLp`5S4}un{W&3=`&)4Kt%Z?t!wI%3O-pK0V`%JvK z-?5Lmh->h*A&|mo1=PLF>CmsB29vM^-iE7y_4VYecr=Z->}9-e9tD&1nKGgT2s@2? zRL+VviYBSE3MzRvgz{oU^n;oHh&_;Tp;@&s@tx?-MZvH4p(Ye^E5aAfz^T8$$Q<8Z zJ}>XQdLjX_lW^bB884_*(h^sEcw*9qG+;nS;)wbHJ36HkaNRj@)wpT9XJ1az1XY0o z1gG&MNn-T~AqbLFTt~57jxCPLSX6X^mP<8{4KzUFe1<|!@erl&hZy~xUuhTA?FuTn z0XMOb9^E>iI@}=l`Tb`|C=Fo_^Bwc0KG=BEX5J2iU3@%W8ajN?0Dv$&ntcrTG{W0B zu!(Sga4&q3jKWR^+}9AWOIrgT4O8MB@8hjL$AT3xkWP;4sQk`oju`!gGBt`yMXCL3 z_c44im_Ib=o%y39Z`L$+&~zo)sEs7}JQjtJa{;-EEegGs9ligMawJ6Z(8^1=esJ~% zrjwhK$A?F5SOx(Q_vV94@7QC0U`0M_x?17Z%~1+nZzc-F8X=lVz#d)FWK zk%rqf;)g_Exz}m5b71ScdR{ak^w$YIs{xV1iP14Zgzj$<;6Xk zjk#fX$L#8OC_)Gep->)+D!UOg@c;)RGGW09`DEezGYAni=ii6$qny+m$ku3nKd6W~N~6cYUZxVc!(VgD3&NW< zA2kDrRvx1Snq3T~8j{grOBea5~mFv4? zlzs0f{S#bY{^w%$_rU&k`bPz$@!tieqPzzy-{d%KQOL}K7FWSQq#@DA(T+g8uuVh5 zLS_p1Lu>KyxF3 zYRcY}G23D##-yxV0w0<2YU}Pwh1cGkD7w!wH#)ht6;hpFmG0)ooGl*Tep_TvskgrI zQ{cW+j4C)9$wfTkM-^0>JiQ%V?`J5iUyVVv+Q$Gcu=3h`h5wM?2|3=C%?jqlxC-Ls zc&*-*jnaYgp{N9ucNWO5U|@WjPzuaUv}KfQQqse_m*JhXF8$3sM^d2+o64O+($*x& ziJ32zR(+~Pt;}zN0XeV10zqS$D*?JA%2|#B91V00Ds{RN<6lQ`-GbwMY_RPMdL$$so~o7!$rdsID7%)x&0?5EixnhCXg7q-;o zv_UUjSU@|%Dbs3%q;|cXN~K{$t&NXkQg9U$U(ySv95R>t)l`*+FW|T&bidmYJZ-*< z`>j5^i*Vx*rwLq`a3iL=$W*GHsCx=5p{8NGF1EdNO8=4t@42}!r#DWK+q>~=7Bdm5 zdWR?~hEIgVysQ#xO=E|QJE502ef)>fTr_XwaKGZkT-mRwIkp>Dv2C|_8IHLjWwgqt zl;NS#6OAz-PNo7IsydPC-8~BNCI*Y(y}8~6^60|Xq6tCX8ucU?0YWYH1)u&`>Kf!V zyj##qrnFZV7^XhO&QnY4YJsG@MV|1ks!Eg9K(ba4-7@0Apdoj2tOIC^D3oF|9;@U9*tfB7~Q2eOT{8928E>%s=u z)5;2ui51`YmOfLx6j4V99~TcFG?ISaGe5)Q%(V3;j7OkL#%gI!xt~wD$|cBhovuiw zWLiC4PDjiqkI_wmEOkhgRN-84Q2XN?`-Gflt!UQ>aIaKUId&nEA~Xl&ZKl++B*bcC zGx}?+n+tU>T6u$cB+XHLAPwMDI3_s#K(x>7IIgSD6Fv|A2wqt_I`1!s(Wje(GIe@Y zvMlUEbSt8@xK3BNAaFJbJ+}9sL=yA8XgwSl==TI{og2rEg)syXL(|{y2xrJeI0kXQwX32m*S@xPVsoJFrrv_Y+A5yOCi{t zFQ2JLyI?!X>=C5Z<%ry!Q<(?7w3_EuGf+k21?c|qWMM4nUs#0{X`d43!0e|q-$gv{> z@}ol_df7TlpI0_dO+z(_k|$7UppZgfTVDx-=atCS6~8-!-7WcF%V|_nfC<9we!dz5 z**e8f?~s`$`0ei#XieUxPdal4oE~1KZ(^+-ejL#hG#n}Oi%(JnOQe8~0isM`+)bA6 zBNVvt__jUxF$6SNnXb(UclQOl;(i{uJ;%>_KgZv6!}u_MwqGZk!XOxt(Kin1A*7Us z$*A<{i>@j_fD2t&rfmxZ3gj6K=FuVoRQ*95%HNjerQdh(>u6`=OYos#ingFrl+F*m6jmlJQ7UaSvuEDOz^CAzHoN zx5E%U6XlGGmx6I^>Js%hY@1L^UCC$CLx(}>xmR5EK99e;>z`Bv+*2z}2M2L#;c`J# zFYWc7x^RFN;w~kKFqlY~8TYZ&3Jw+QLjC3~X}*l=6Y@g&rXV4bP*yL7W{?L#cDH_2 z%W#M5} za?WB6v8p?rQSEVP*1bRVRnqP`tQ{^^K!x~&hvQ;gzWJB-M-B5A!A*0R7a-?%In3Ac zFFW)8-bwY>=&)VsW4PdX`gFX*B7bi1R>Z@%Ixhb-AN}m-#s-3}+B5l0Ca}mNAqZ#(abXvz8I=W7Y!@YA!fFt2q1+4HpI z=SFw?+S=!;5u_T*l%&Ba@Hkjj$6{$?bEy`JtbSJQi$!0ls6h;uMd?5S!|zHDiQZidE`Wb zB=Nm6UZovRH93di9m|%WNzp-^3q@IQw^U)<9g4cwv3nP1Z*(W}QXkNk?zP)FBB^d$ zF#0E@D3WN`)VK_i1AVRV?L3_+uRMJ;#XC>K3=`VjktJ)RVLTsKTkCVHDylZE0_}=o z@aOg+J_~5D!ilK5qZ~ccQKpMOPhq@x@KNMl1mGNVm$m1JHwoV0_&pijeD=M|d^YyS z_C1;CSJI~fCQR-GhBkVo(WQDRqHI#%82;+F-Fu9SCqrwYLYTlBv3heMex5~rPCidq zMwKZsYFUmfMp+rGSV{!OsFxc- z_PN3gDd8vl-GQ>^`q{>jTYW@(%%hPac!`fW!EOeg_3{{|StXwE+N#LoE+|=hz|MsTWW0qT z#r+E^4Cslf z=H`Lg2=6h&OEk*Lpw5y8*^E2@kg6$=Qtr`zO^rE7S^3D077f-1ON^OKF70`$oSTZ3 z7ri9RNT#kgtYtEWyR_xOxkg`ZP4pT;-hg9@VClahxTrU|A`ntJvT-S(6o#r4z#dDs zFS}%V8GzG|8@H(poG)OdB_1Uy%nSTVnCPrBAUvrW>rAD^-o4r0Y8m(2ahCtPt*PW4;k*{uwAI>;FcLAmKb$wpR zbeNAn2uhHs~*hyCM< zR~gJ0l1HOw1#d8HiZYXUralSohBz_An!V%@_l=)BYm`>X*mnDUpk%z_HI)t24xQT` z;2xAUmxIm|-2`%U&eQz)p*%^|{RXV(1<>-?rN9hbQVh&j27St}xBPvsxsY{c!y9c! z8s_t7kHe?NhlV~n7^|F?n4$&Z-a-F&?D{Vo$O<`G+5QD2{vVnKp!<=i<=^nt=f}Tr zAp5tt{^RfubGNeoUwX_R-ve3ASAF{(il}Ai@=jRtI8^$i1;B)N01Zw}Argfg@?xFX zuP&DYL$Y&vy-&W7;b9M#tILz{y8!a;T!GfOrZ!{Bw<2ls++Ycp0bS+!z7^%iQX=XD z8V(hb(vU6A^_c4Cll-fO)ld=y#Y#4rR$vN6g<-V@vUU@+D#we4veL#W6NnG|1gSu0 z;pz{<+`D|)!%j*{+Cc7Z-PximF{g$`r^p%*cbVwyWvIM%r>?y0(#0TJx?;!XvE_Yd zp2G8W-r-HUmBaocn!@L#Y5|Nj{2+-`oMa?1BERv`^l^+rH=f+0s}4QihE5v~yp=20 zVx4*2&Z6$L&Vuf=FWuMj7oXYfIu`gb+LJZR{y?-sO0}$nef(9O@|MsTs}Bc-^Hn0m!FC& zaS$E>bQ4zHrB3{XRtc;MHapXFaR-sC!kfUaTzeB`ygHcHhS^$L&~ZI*?*xtCgPA=4 zKbiMps%BM^0wp1})ov7Q2T#3;ovcYbzqc_Sf$b5Dc=IG0olINf%V|$=Go28;IIwoz z$~Tg&Y-FxOo@pp5`0W~Qz*U<$mK8#t?wwPKJ<5#$JhzMD4>Sd?8?9F(h~!p^P9td( zmah?3vXKeb2+1(uMpuElWAtHE>tL=L#J4{<)1{MY<`hZxQ$Eq7$?l~i8jy?f%h7cfl3i3kaD4bDsi`yoZ36vp$J`TIw7xKbU;FO!~7OHoEZl z&Y{xUlp61x5P|?TgRNNU1YjgoCB1Y9_%Lkc&IBX)d*>JWE5!)^8b8q~mbl#3wp7cH z%)(!4d%Y>;IZd1Nn)Y7(rU9;szg6^lp7nm6Dn9$j=>$eU zm3Wbs+)G(DZW?`Bz~k3JJAu#kG_DEKHW)D=uVDimS&D_e@$*u--I04uz$cd*%tTUVEKM8 z*TVjO{zcI!{u>46-}iR^!Y?`fe|7Bs{JWi$PR^HKkLOC0*e}hfyR!>`vOkUyoVEHK z@i1UeeyF7>B|7*N9zVlht~}@{*5gRX{Drwzv@LxJYhB$g{g1OGTPxuP5~B%lXklY+in4Y{p?-42<7z35N_E04U z)QJHw?cUa~z;g4aE@ls9-fn3lMBVy2JJCOQtfqzJ!VkMM;l1Tgt39jT>hWEtf^9&~jn0PxV6+7CMi z$KdUWtHEbbx|lpc^U*)i=i0m~p@>tJYk0eQEJgDVS*)>ouCm_7=39C*7ZDu#u5Kafn#8 zT^|h+g1o&zPXa((-Un0L31@%IjI9+jjh6k0JdcZa5Q#6)dSo73BcTTlI@v@AB98-X z9JE+53J^P;Cg&Vslvo$SHZwMxZ5+b58WlTv`OY{GXhsL>Gh*+?kxZ#zBZWsfQ(TYlQox>Xu|Q_1 zgn`^EQ_#?;(RK!?Zi1%uQPHBGN)s7lC+tAv=pz$Qu7wE3JDkcbpcBji0dKfIK~Oz* z?u1LO-0v4rHyf8)rrN-+T|WZu7|jdjt8Ed4)cQ4^tyYyn@(7eSdwVk5RXiap1)tY< zVRnj!sP> zmY~C>!9+TWg}iMW1Nb$NPdt(r8@{TQaLn93MImCHc4uA5qeNRowAVo0j$EoD98 z=7cl_tZ}*xfsVJ-D=s-kttCL5Jd|#_p1UxHSSX7+MwtIrg%=bFa3_E z%4<r0WJ7Y>A^fcbMKVnXA9epyPZCJLjIVh*@Jk@(e(vI1FI~0C$i0 z`6v9u^0ug#CdgIeiu=0D32a9(`l6DPio3rqr*sE5HBOO(T};$3o)%xwVvQ)qT9!h7 zqeY5p(lfnA%~dEgY`iMi3}wryaaMkKbXp~9_a78;M|6a|d*UBjcHJCvz{Xlim7XNt z`h-Ej`TeCc{APCD!ria8c6MiQm+o{p>{7`H|H}GKTnDHV^ z%(y7G?@nyn8=_m!upP3PmBei@c{cdUM(X=3lh+1>oh};S_={+#5kXGn1=#lsJn;({ z29FtB&k4GNo3aYaGRJmX(RIA;Zkx2V(}uVe%_r?Z=W|-J>h6P>O;*lyKBfSnpUy(8 zZ#kzHi~ZylZSq>i99o{UF;SZfa%4=zI-i(|`tj=e>PHqmLfXL77s~B_k{|iY)LHgc zI!_1+0KlE}pW<@;U&ajo0jv}aRctJsto|;``@g`MK@E@Z&KlwuFJD)`BizYg?Oo0M z@}M-THD+^fqqJV}^0`yEZ_-H$mO3Iih0aye_J?s$f{?oX9I&$k|Lh8}3H$qGeE)@2 zKi^v_BoX?XU~C^3%d7w$8=D@MOrC4$;sbSHWjyNr=moyKOk+Zf(7Yo-19yN?f*+Z{%$%xt*&?x|ojS0)+v{uVqb$M49d8q)J1Xl<@G0C;f zM)U;H2mZhbZ`488G7QE+2U9(yCxwU$V0QogPAyA zUEIGw8;7BK_>8)j`i5z)K7F{Ht?+=vIh=IEE_5242Q8k5`jxY%byU3m~abE$cG>cnOC`&fg420eD(gu z>YB>K5TSAXBaJDON!-fysMEA2CtEAnnPV+Ln+Ilq<&=`(Dgt;{{BuZ3;6*cx9OBQU zJrA)N;XK1+vXt#WRei#vD|6)8+FBLFm?4FT(1s2#3P0f+^E(c)w<9rQ0=g2A6On%*Xh1}uVzNU8%C4G; zL6C2AtNmd8?~f)RL_(xMDk&U>c3Ve7C2PY*HOYojkw1Gv6teMUz_G|_1gMtJu>PfD zvav7nT}J_rUG_D`(szLDk+8HDBQ;y5HOy-<+BIT^=Tf%Z^K44G+s>$NqqPRzp~9+iD^`YIHD^c^_p(KN(? z1ymB%_*>`cEZdXSh>PB%ZwR*@M2aTSu-sWqOW?A|imn0I96<1D&axG_HDY>nzxKz5 zYcDAVJ7jJ1wNW?Nf&ZNSuGx>PNJH|_Ga<*t z9m@mE*8|K^5P(EjBh)on4!CNzb1h`cbxXC{rsd#`XyG7r<{;m97N}W7bQhM(sNO>! zT_@FwD%vZTfXk@2K_8Mzwn-Kd9dGuV!pLt!q{m>|@$O)zbJ zcN&fF#&;3SIEbiW3l^g<@lnUwhZ@qp(}}{bGMEgkA%A;-H_q7wG59N3kMP;vkg*-& zqvJQ}8n;7h#39O}&!)+>gFead@HG(ZX7%)2E3;5IVB--qjDBOtj@Z0keDCP`eEIIn ziMb=EYiASC9%d_{TCZFBjbDCQ_1@lPJzZ->bgS%b<1S-M(rb=tt~bwnShsxQkIpCm z8(utSlsuY9Mf3Je8%ZVYs^-Ftgj?L-2auq(i;S^pYfe-Tx=}rnCzauYpwaXa6dfy) zOJCM`Nq8!CIwC(+()9zbEMRY2!hgQ#noPhMO>O+fk3=PF>+iX0wg~WLS=Za<)muW@ zJ913aJ&+PVXI+3Ctu&85Jz7!Hs1t~giH9l;?i>0Oe1q4u@y^$m??lF|ewR0A(E(7+ zpLniN_+!yg@k||hoLcQs`ucKlhLfC$h(>Lhb3|60|D4nswU40Nqo+^e)!adgM zOJ_Lx%n#wSg7ikWyc-w5tx*dEbX|ts6EuC(0M;w`%}g?(-pMo!Ck_^oDs=6@S6LFp zcQP?GBaJAB*f}hOPIr1Vz$@KI&TE|-4IN>0710yhwPF(rMGvaGv|nx|1NuaWhj>VmP9W<3Kq>zv@a-T%o`AFD8vMvK--7eB%ru=3P9xyM zt%y-4EIfw*7nbToEv_V$7)ID@PwxN{J z|9BR%9V@yGhN?uhjuiCerDQ0;s;Ro4NvXB#sKuBj>v;KNVu->1Oy(eVgF~3Z*E6eO zY4dlvy6wXNZycguV6Fn22p_Jh0%};NWWDZ5cjl$4$#JFYaf%;(Xhk4~2j0$lb4Rb= zyjen+-UK^|+JNKJQ~BM74AWhNd*h;bkaB(Vn+Gq9M76atjl~xT0NG8zOusJ6d(rn4 ze>hwKhnL9Q5p;mqQuZ^1P8F1~gLwL62%SpNt=6<;xsq{7yd8OSgtCXD4{V#UsTwo| zfr=_JzbpqVq@$z81GU_IEMm>E0W-Ax;1BET*`1S-N#SdmAXC8_qBkv8 z$ffN5T7S^4f5%Fx%At~R6{mz2zBo1O-Sy6cK5_G=eP;Bo+}o9&UgS2;h{ zEv7>5WZO5Fvi>-)T5%w1q-I2JBB82>FLyCY(!^QgYugZ2l~%}MFNwmre}vgaM8wY6 zl?&uoDRI>_hRw-Lc4$;J*`S~zp7gr4j(^}&FI5@6Wb_rOY`?a622|W9z% zosdP7bhWGYF59V(zmagS`rI^Jzuba>Z)SOrgCr+y?XVhADYyoolYx&$zmMi`&n~ zW;_7Em>goZ)A0s_PylDN@Q)#d;_p=#>Lz~V@SD6Vqdm$L5}n)Y11vjg&YL3w2y4~U z5~s7h_lpZr1`l`}e|qSSM%T>e-nDRB(#fof-%8Z}GicW?`y{C$$%L9Oi{ST+FYv0g zNZV*;9TS(G1Ksd&H!2gIV#J?>V)eu+R!n>`5Of+DL!oNJ;d-MBef?Gq*GPS-FQc5w zARV|HAPn2ozx-uLD#_O zvICjf1=rf#iekhAK_N)L75qDaZbC!YT54dCc|&H#@7Llba8D{}h2RmMl{@^jD*?za z?r@{{COm7UKMq+f;h|G#wsd5?F}9?HJg#LrtfEE!^d4wK8Jm=&i+pfp>w}(4qXU?( zXzmHG0$cj=b(}_WcK4(`mXDW@k8-Vqp6JSeb>67m2NTVrF8`T5sB>^w#0@=9pM9|1 z;6nIyL8Q;aztVe3l8H+1uxp|NU*!IDwG*P4L$4K*=yKdIKmD--dvZ5`O>Fx`frv~O zk*~RC(KrLxm@J7fs4iH*L-%I(ZR!?2KmYdj7Qb%lfk@U|OyDmqtBV+0EZg-`tp}0U zXlOc*!tHCre{lYzc(^0=sRZyIB1jH{Pi}X=+O9?W?H8^)1;COV!inSBrxSDL-jgY= zHCos6XuG5gTl2Z&{^Upeq9pn)5xk?p*!FPvT~so)jEWCiHW14`_3Bi81HEk~h`h+O zjBK{|qL2I4ANq(ZdGebP)K4(jIY9&+>wJzgK1!ei@B4dRZ$v6wF_EU~svw)<&8>%$ zWiwg#O|viKnN%&<9|p7UlBPVup&&470EM>H5T(sxe)?TJbTh&$uoMJ%$MH5N;CC1_ z0rz|5pG0c~*YI^@+w`ruF6nWYfo7F5TE()=_;qTQ*CB<%$a+f*NtUmDK&;b;R?=@%#rtAaC zU~o|Q*_mG$F*Rp_u17#->|q}{Lu}P;$zxVC6u!?lfC%g`5VGcUEo{mD6#WhieuFqM zF$2`Vcmm2oKn^fMIcIUUaskkN^Z1Yq4g4LGctsJ2oi;Q+w>uu!|=}2ph>S~=Wev(Zj9Me-s^&4<9)Br_rR%@b>jgm zUK9x1{&}B?`064M8Wbc@l5i)fx8GIOwoz!F#~v0 z?#ZyEcm^rpff;m|7#jGME=Sr^ZvKD-0g_J$49}4F(6o%{=PAO^)X;)F!O+RrR^QdY00&`NssOA?d}k zI5`S1p{5xyiQi}R%3koOwmlC?h6mCC4-zp!4@$Fa4smoS+(rZ52^dax&Cc&=zvU}n$QOJ-_AFY9AnP%gOJHbvHUKKm zDOTB$H&fZZVpOYKi!#1&H~gAEe};StOO6;4-K;Oj(o5$OFKKxZx;h}1DWGwLy_Pd> zu&e8?v>e6gjZYIdK^k02vy)qafBc;90#$*~7fz=+uSIYY@LY)T3xp(Jd26KpEvG&R zbD^~Hs;(iHnUwa4lU>AdD5FWzXos zY~J&Rq0%ka-#n`D!TJog@0$!LnNKv_0EhGauK@#EIkH3(q^oDn_$x?bN1^A21W-%W zbe_M{3kq?xj(2ijS~p+OUP!=Rsa6xZ7#PJe0C3xEOkyMw^%N$8pddei&B}V@sWL-6LPlj?b1R#lC3E{S3KWTvH};O22Ywh7vU`+_5+O=BD$}7dxjoWe*MRuD9b*#5I%{2oq*uu2jRUR=F!H;MxaGKu{7R*}txEos9 zyZU;KeikPgni0MIJCmYrR3=Nf_U-FB)QH?9X8y(nmBg_pO$UAwcot!rqhS5uFEqt~ zD*kh?M;z8M_j2YI*M6|1Vq;OKj2h2)sXRY$&VnK!R9&UchzWrdg|T5I_9_%15goHw zboi8Tce8`;s}P{uw9QaWbV{(v;dwoJ+zsGy4yJ8~&^sF9wOG`4g_8N>KF#1{!d+f$ z9e#%cVEmqw@Ab*j-e-tF0ZT)+MvbNvYxl!q10C5jsud#&XNx8cf-2@Zq0e(bBcKZl zutmA7b+pZmDdG4T!7E4&syhGBOsJh9#GS^g!f%cCbN`R!Q*0vp;9TvqZ9xtsDQew@sC@JEC1*X#=WN? zlp4u+gX+99ABKbFTpYr;61#b$NdkZ}Bv2?R1b933O}}4;n2e0`_6lpumCV_Y8(uXd zDk$Y|S~65HyZC2CAyU(moSc0|ot6r4 zkXSZKV~b zK%>P%Tqi$$GdPmerX#8AU$RD^Wi{r`@%m>4kF+InVQK2czo{{ewV>#gtl-^13FE-( zDd(%OP{Yt7XiG^}5*cD?%Fje}pvv1tTnxr3aYW?5nrZE9K?TeDT2;}dAaA!y!jR>c zn<7sDJ~=r61u2gOK$8|vv=)r#WK#^F^`iIfD)hc$jSoD+GF=psO+WA3oIhSC?=>b_ zhWkp`%P{Y{KBd8CTJou)UJ=@=aJejr)~s0*=BH=veRI2>;>bhr1xU`B(RH+8Nq<{O zC*jr1*8WJ6S|V^L{RP_I@*Jn(%r95Yhr_{#V1=ZQHg^+O|&Goz+!0Zd63ye!BJgN6fj``XACs4o(ict31h0*ZY;D7qL~rm7aeS2v(=$J4*Q>6dk0!Lwi(>$>4@O-6` z7pBv5OOgE>U`XybZ!gPTXxU+PdMMt!p>{201l8Qm2`L`sxu)G{68{fQI(gMZJDo9E1 zy7$$fM&b!yjc-!Z*i=o6MU*6-x;tN)askDvY;(Mp5wVSWrezb@(F8!Bdz_-4zlgy} zq1=}dzwHl~k!UNqWcXA0m6^4qTJ}!9&H63b>Ny2+rQ+ePhv1cff%J^)U=POLnD)|U zZf^CoQp*(6RjkCF-@eGW?KOiP8j`-#M5*&b_WfhCzo2)vJ%#wq?80<+EN5c}De8A*|R$eCu(UG*xLo`~dF8an5% z%!`?9?K_v%^Mm=QtBfAf#3Atm-zJO#m&=ktlH{;H*I?D(jUpI42%*`)xthMK9?l0@ z=_1_ZEdEF+*Gnj^0Jjj;eMojsJL1388yhV2X_Stfd?!eCweWLqU|}HQLsHSGoLC=U zA17~pTHr!Q&nhZq{cZgf-ZdxieR=*rL&kf&-0lO1(*E$@-#a}1ehfUDDi{pse?hY% zceB6|&L|V?c~t(Wd-QStJ9TVSAXsIFMB=*w4bO{_jm8|5j#LA+=ak08^BFh2uLAcN z;WJ5{BLCn{TqnU@iKYqtLcAVx3e_!A#U0m!IN*NnG3g!5s15druls2~Fy9)NOZz&1U4|N34 z-yesW7>-_uU&LN|v~I+2F=$^j9zdd`%Z=%_Q2;O7hRvU7kZRby&NDtbJUA1w5Ph+` z02<+knub^V=^Ct00Q8ZiJf+KUhX#3dd4>(AO(*ww>W-^rfS2ev^mUX- zB&Gf(@wP;xTyOLZ%u}YkZMmTuZ~?2YH>y84^h9lll?IS7p3}_(z_=03=8RrG+$Zg( zvt%H@p3KuNMrK$>(J5qf4{vI&EF^0Al4||%9){VGB&t@?6Wer<>}!Bq z^>{1MEh$!v-57)&I_+CAl-J-ZTRJc^hZFn8djh;AnZDwraH5kp84pQSZ;|9uW}`Zo z!lu%D3#5Xclg16P=PaSvlV$k;{f1|18((L!Vh3GP(kTyVN`ZY?oi{f^1cIRmBw~j^Db7myVwTJ3_)#(z z_(K5;8m~~DOB`{&V_G!6Sf4S^D~TA`K>!ebYsLi4=3m|6Ka3s}vKOL9m1CUNCQYF7`zGOy^3V z>b={vli^sTP%z@Vz3F}ckYN6vjghq*f>Nuplr;*hTe|z5%YFOI@|Vj9UQ^go-x zgA=Isz0D_Mr!J|=_QQNW7$MDrt@EPi-AMYJYQ z&^y%`cvK^ytA0$1RsRDp5v202m##2t9PZ;AoyaJ*mMm~QhT8?f@HrKgpxH;?9?2}t zcNO=oxACH+Od(Z#rZcllF%xQxS9TZeFX^nt6;Kyz;FLF@9N}A@x_VtSC`Rm??Dtgf zPFJ2BpkNCfUC6P&$~siWFi2fo#Wl<;Cap`mC`{pjRi9S-LqQEv+`k`R$uL88P@v+Sb{E8nD!0 zlDvn?s;jd-eDGq7>RDJW3PpIabu&J%g6tZW=Ek5?4YFXH2Kzh=Rr?_LQSR$Z+!dR@ z^@|`@q&~;~9uG*Q%EB@NIUXS-SKF6Uy?YV2in^5_;rz-Kl+21^nQlI(HDvdyaBCDq zY2@h1^TFOl!^{S5-eGTwVZhe*HQviC%GRA}A;j%b*(OJbX~;|LQQxoJ2dtNE-$Sc9 z|0>HHULHo#Gu8JL6tQnR@9=P6rgZw&Xl+2;)CT>y+pxK&!`)y6heoxoYwKE>EQu5C zF&rZ-4XxDz%M<4P@F1g(5CfNlW4r%?Yb=6U5yCIF`&-+(v-REWBiI+otXRhq82gc7 zivlpzb}|gQN&dDhh(BsmYs_jFgJ!Ab)fE7oSVsTk)B#1_CWXl4dhvvE)bTd=%?|+{hJp;4q;-y#T7KML{_zLkKLpPIFPG;l z#c>7hzqmaAf7|f>+fBXduiE+lt|}f;`%h}!uc~-Iz$iGoQ?35j$4e4$x>2DxhGxV|?tpm6%k_PJ;t(oyEV3=uSJ$?eb2(0|BF|%1EgHo#Oq;HK>Xo zt95%IVT~Kqt&}hzLvWu?UhjA--tA`D%u0hLh1Dd3T3nZ=11v`|%Kf`h6u?a2%JXT+ z&2}>dPt&L+`KESmA`9^KX{^N}0fm@LVhygg41s_|jS5s0rlU^rXzVo#$c)g7ofLtpQ3t3KQe3YH4tO1mw03u*ahgla`a_`g$DyjI7${achS2&mg=#GI z9%`clR~&dX{W9xP8Pd1=p9tc>n~r7iYh(%UQ|&6^M<%0~VPab-iKg+S9SCd1?(dM_ zVf?aW$fvNYK}M5~ZJIUuJ@AGA3I)5fVbqrdVHT+3PNEgz4FqW!E{J@>&$nEmC#K5@ zW2~!pI<^dgSq}~|QB0&87AQ@%MZ^h4-abC?Iw?Y=8yr)5d7L6#{{$zLLT7rlH4Ua; z2xHv1b?u1#<*i^Nd@*$O*vCTY^?M3C=FsSfZ)J)h2gN&pM1Fi_;JJtWvU=(NYH^|s z!h*$M%2_39In3W&BRX~!+piwjqNdXk%VLlO(?1~bv=D8js%9&xm5|DzEDZ^57(S2^ zC`s=>2H@tGfPj;qjik#j9{=h+Wn$|ulEu`#+^Y@dRf%zUNf!}p))@8Jcrzbp7|Nc? z*(7Gc8r^sKv=O4iD>*ulT#TP36($Uj*|}!t=-{rfYr!r8j@$!co+~p?g8CcGc5K6! zAxqwb$RsJ#q$G(1BE&SXkgpBBRWNPF+g@!}HF9?N`Cy#3!UVJXRfVtbC?i|*=@-?h zQzWx@RQD2QC1G7cvDo}_5Yhe16Vk6|qmZ_Q-e4QIQkR)Dpw?Uo``pf9^4LXX*oyQ)%8ym4ydG`FH!nSLb-4PgHIn6Yz;m;x8FPgg%Gv^ zj^2=8+~^caXbPFWrCP>nS7=?r?wwzTVQcd38*@TZL({N{qH!p<``+#Atx&Kd$Ji~!oxA-LKXXd*D86v6`ifXE=Cb+V=e<>h z#cA*HaB=BY;p^ODKG)0m^S>cA|2d{yP5Q*{8jnrjU;qGmNdW+K|HqsUO#cDc{I4OU z$6>Ade?V)tX#EZ;4y5njA!S$(e#IG@wI;VDo3sgxvnd%e+92<=ad`j`m{_h+PV*)~ z*=yte^DzVSWW^n+Z1X|NB+B>j?I7{A2m6?k7wQNUw~GyNJf!MT72@Ub1+~*ppvhN$ zXO}BvT@T(PcM814*MG_oCDafAO*#}BVM#WZJ0lD$h#}eECtaW<0VHwyj}mct&?jL9 zOiF5AGNCr)5BXh!$zCKz@}qE0d~Z{6hb9c>`~|40uOlMkMrW-L`%Q}NTMhfnIpDI#4YNUbjdwC z4w{hDFdIpfq81V9F)E3)R(m)WzW~Xi)%AA~U%AW^VGO2UF3mzEXHa1dH4M;})Oa&Y zWBCjQ2R5H})6~Qa%=@bTp7U<&$7&OO83%U``K#KFbTBGis$#^vMHZ6ddjJ{3u!jje zoull}bZ4WP{yY*#o7pPySl~k>tZ(}Bbp~sD$HgW?PeU29c{BW;gpv%?AaX7oht`>l zekoCmi|H3SOoJFKG5*Pco>4h3=1!3x5YP0$Y0)?Zk<r+Luux|~(0f}vJs@XpO ziDf4bCx=Fj+K0PiYhHO*@HoI_uzzDFc%A+iEeu0P5YSxCA;LGDu_iv3hq25%yebes z>c1Wd3tgiTz2vuFIzihK177s;_h;EjJ1RINJP}DJ2dMcS;vxvzfqykDje(c* z{N^dbQIMQmvkdNSRjjj?_XiC;ZX#Y6r5E!G1WU`-Lsk{_YDS!x@GB};nJgttd?Czd z*KI)Gm3~gz-8T7t{EI%=R~`2BK%#Ep%kTMjmxDO%L`Tz{903f&5azcBIY@5+1$~1y z&1nQwKx4@`iZ#dJLCJw$sHa>74VyE_846~&6AZG3p&OOl**AHYOac$Km6S>*>`d4F zS>Y{L(gWs9KTXW;H=U}`ECDU_qOoeC*62Sul#L80Kp8Yy=LR;5T;Odv>`~;gAUkw? z8grm+y{z#>-EH3L%4$k&5yi$u4n)o*&g9qp+h_sPae8!R@N7?t1|mgvVHUn3n{rT8 zX`~w}MSa$4l7GnDwPBAHUAwdyR)RKXFo_!}b+CD$<4~Jut}DD-&Beibd>$WZ--lNE z$PW*5^GyG~QZJ3Rw!duxbI+dRxNEy!#_%`wp5u0wrh2f{3GkSh%OK(=F?8V_9Ojds ziDiT^O~#O3kXJ~HbtRWPVz;n1_Mj{Xt!R+Z7e`p%oxY=%uunjVn%F}%d+=aMqq6sJ%e!}D&#%^zA%P+f=Z-# zDp=Ks>%{EB38HzK==G;o2o{AbHvF162H!}~Q-tF3apv|LP)ri-hBccwuhj#`iH-;w z)zVg+zL*=*X~-DH*2T0rhH!PXlvgozW5Jl+t#pYUIpKJ-8?z*35)>r=Y%X%L;!9IK ziH2QH6l!Za<4e|Vv9~-s2aVjt#YQ4Gk3?E9w-~9pWvNLhiQsndjU1kXVF+Q+2>C+6 zoR|A!-7?{78eOp`-b%gN z_qy-#6O~6?q*vV+13W^2wK^F;8%7{}Dizsb#i}{0YV_mvY_+l5{8PNS4l@SVpbKr= z_Mt1N8*SOvX3UZ`aD|u47GbwN;?Fr(5T=|`d~~k8^5uxd z{#gU?GovwjX#XU2hFO#bW@JA_O|c%?NFq48tA8LGc>I#1Jvz1nBqWzlM*a@BMFzty z9pq|4v3myz!#@75&P?_B^0-Qn@@Rk;%U=WZE#lE@oSx~BqQfoqq`;n}Z*ek`oEK2e zShMuO@|Ushbg-nX%k|o*7s&_V;8$tchd%3k_1jJv5JIz=TOV8n7JSo<8zKNjjsAPL z)qdJceut}nQG|PPubfBB)gOV(Ec5tS&BhjYa-{43N)k=*v8MfWb*b>>X)2_PlFCPW zNvS|E3%Cip;#_?di!%_NQ=>5%qf&onOs+5w{u!d9*Ev%d!R5*gvb<3>2#Zoo^00(6 z&!bm(s9`MBBr;YnJ@#WQUPF!;i;FYcZx%rVvvJur?pw*RTT=&igu@aoL*K`=H{irxxm#nVd+3$kK>+!cQh-a( z?NByo%#YgzUA(Q*vV}7|BY}*?#nOk%?s?_y)*tH)eS1oUW%)BJI>`_aSeJTwKTft-9&kW9rTt$`@G2Ja7__J&1SIaYUa~ z&l{o5!|YTg%w4f*FlsIMVkXRa+lg|4a+ttDb4n}+cNSO4p2Rk|gB5@K-r*h~-wTVM zR>=_0gGgTjwZ)h8bhef|Q~0#mCNJm%Coe4p^Z0hx&go&RL(%3m=;AY-e*ja$&6|bB;WM z-BNhiRxT)Eb6;Mm*QJspI1#eJ8ui}n9)lRIwEyHHcY7%GWZ&I!qBJo2$|+rPRh6vu zp;de*5GRr^Zjq)Z`g5`@YWElZehO?*jePko?{RKvKAu86Wv(b%B>WZo{NA<=3&ypP zaa@i@EY=6=4$L~4Yp;Si$#fxTrq%M9+rH6}50p~O^bgjAfXJg|;(ri_vY;=xSE|f~ ze^UZB@|%~!<{;8`RZU#A?@?wwfP3Y#U_`CkEml+0Au|1seT9)gP99`j0TV~g*nDi_6n9DvM`~#@SE3~_&%Cqgy6mW;grHC!bUIc`kTRCM(09v zK!bqi6;?aSz+OsqZwVhcBBa*Wta8?bLq3bv_Sf8SL}jW1Q79Dw|aXLG5rwsz^na`U3+9Kw7EQEmqDml>Q>@;DAJaKAq{&WXh4@N!1FeFs&zPsCKR zk;BP3BblDRQ0G+@3%5}o8~d(_&EM>)W=gaQJA*ayoqFB$9O#flwQ^DMH~r-t*{D%| zo9*XZQPMGQfhB;$VlDl!xN4f_=q%yo4mwGrRK>7OQY zsTkBuMwZC(ctkh427FPMC4c5wqbfi)C3r%Xx*y#lY!-v-`%a;etxs)-R(Tgwm*qwO zR+WMpK5k2aakh?`pDz^f!uw23CEvAUhwA5A*Rl*0j!%_N95+&|t&+E92rMCpWS)8O zQ)Tqm+|@v)8U47>O0yIqS4H)y;nOpfW=-Ewqs>juU2Jg7^ZjkhB8s6`PO*80pG8VV zN}lo9<8Iocaf*f+!nWL%!XQP&<>H+{!E;`==?SsZ{X}i3c`f#(*TM7kK*{CwXn4BtV3iGYYp*T25DQ)Jn zjZj+T6X9EicuE6THW7<_kAB6b!?X&iF-)$PEwba0(T@P>95kVa(csB(UmB$E(GEk# zQ>ciHH)A|9c=;gxoC(h3^%0h}Rvz#u{(*I-6T5NHPKiO%C3%00=S05qnB`$KN2b}-Y zcCbvZfBiV08SAmLXz7O9<4jhwX}9+(SHJ#{SglI!UUTn#3euck3eC-&e^B{`IPc`R zOAkd)bXKPq7GU(*dV;NIdvo)x)PI;=COlS5js-s!?-PL>zz#h>6(zn)yl5$Uc30C9}PtBAenjVAu zfxN^|(zlH7a9UXE7QV3~<%ch9Qn>z5kw)K#Mpe&PJYXGkY6y)cm=G(I0D*LO2Y5u= zK;(6{huw+pJ0ji}(&wK~4Y3=8ZD5_(fsqM>M_@wCyBQKZr8P5{JZYZZkg={NV=L;@ z$+aE4EIMHH7HyeLZ?FhbU&;xhOJEB)Y)>C(E9^1=?WK{g2pi_o)rqWnkA1_#KYza3 zr@u+p0(8|DtES@O*5qXSh);rbZtm^ptzXs=vDv4KvM?o23@zueAJ>W1DjU-16OWUe zI;uA%*D$%Zw?UFkd5#q=ZP=9;4X)x0@rN`J+<+Bc7Mv1?NtZx}-42G0V1Lu%-3$;9 zvF!n&?6E?f-8QW8@zmhc>)@r{g#oSCJs8TYfWJK_;P&&# zxxhHr`SDe!&KR4qL3}uw6zyJQp~Y;2hELrVaROD+q!lsJ09hz}9nDHOF4X@h&#}uY zeO=bn0xt9_LtIB6iUlUG5a5?;(E_Lxs6!f3gZ9A{S_4!v===IR86hCun_z;5=)Tc} zihXSanLITS8Zcyt6(8WyV20lj;{oICXR{a?C7Fgqg%%Ue8MO{&Gj1S+8#qVUb)11| z&07J&8gj0|REwXTd;d}h36%v<&8ar*0y1BJR?2rn7&2Y3jLd`&E@TbmTYISK9Y6Wp z$w+l7nr`-t{$A#$O%?v2cX7K>oi`Q1bWL!fOwyEzS}a< z^s=_{X?P?aA7`rUBW7YmnFkFFUKJ>@y7HlSUzn=C4^d^laY%Q*fVjnp?1YF&Mv%d~zRp+Y&6o z_)ZD{`xYRx3c! zV-}>1*@7`<&Li#z3Knf^0Yi)sG|-kyK&c?WTLn=p<;Op57qurj8{nlJ=BG;tul~&6TF# ztm2k^Z`XK(m2s2PDBM&Q@x9^D7|r~=<(>A!#gQ1@9rx@pjO{7_o#9-|{Mt&h@8?`I z*rMGKB{5)+voW|v1Oo`Xx^|I+g#|7TeUYQtqPvbYi*jAWPVH`u`rw`jWj{fORf(zq zw<~6VPu1L_qq>#X`w?P;H<_7ScL^bafMqiG?(8NvTPJFynG@`0K1CFo=h^QNR_FTA623)uA{u?G}TTDKZ(_rb)Ct1Y^> z9`I?vpNlBnU=}fB|Dy*0HTmayJT{q!4L~LaqJ3PHXG zF_Y28d?`g&B5|gb815eGB+#K)%_{gfrgGlq^zIU6dnn}2WXMI&WXK$d&PX77P`6W% zND8|&nexq|EB2;{h=LRlf<{r-2{3U$y1#b+j2S>1d(R)CXaaH@A{F9FSmiA7OfZo! zt-moDg`s#_uy8n+rpptC#(oWfeo6~_F(xKXWKvbWV6Aod0G^s>6FI`l4@$rZ$e$eX z(4wCeBBx-$crcKRG+P#b7M*U~r}c~UQ`1DI-uWX0dBisG8W8Gr(m^S&aS<(%aP6-v z175DgJ9o2yn@>B!ewFJ=M;E>+ zp~Xsz<|Nip3d0UkSdZE;7cDyj8Te8$9}^1xYt$rj*ZQ<=#Z=HO38p<_&`FO)D;TU% zmw-~y3DeoH)!EhwZ7s|;oYXS;QE)?01V%ntf{;l^cX8XTBHe-IaY0tCQtnRqF?wdGhShWN*DG(cs+E;rR`G;OP` zk|N{w*9VY%|EkeKmj+g{RAc)?)Jwj6&LB&Ph@>~bDYL1o@od>ao1~H}u zYd7{0I9Og3y$gfaAL!JoNVT=)|K?C zUcVXqoja8Sk()=tj6lzpzY?rx+mHCtRww_vYaWH1AR;&;?CuU@04Mbv&^QXL-8OH5 z-_rGyl$mw`g;f^{WZ}KK1JWwoDjsFgib0Sk^0nUNLa)qH(0e>P+ASrlbmALRcCuU8 zD(-*()~mz!f_8)*O<`p%kP*IJI8H&PVWpa3IB{~c1jUQ|q&DDFKT#)iB1^F=0HM;U zotmZ5uo_dRh*}Gl4feHBz6n-l#b5)+U2&1Nc#$#Uw#P!T^J$k2uf&KdMYdWpIW_zUixSAW;BW@Ai^QRd*i?zYQ~(?T~lpLu9?bez|tF!kxz zQWKo)K?JKW2DE|1bnIuKtG0XOK|Q9^oAGT)r$)RDORV&gRJ1?xPdb8Qm!R{HbIq|W ztneIdL}P>rfF~s~D~RMChWRo+LV7nAmjQuDf=>Om7)h%QE>rOB(?|7R6r>2#U&@h} zl1*Rms}af|3hnbNTmMb~%nt*C!oH@Nzj*t&_@Tnh;U7IiO*<{$D`9;~*^lxGN zBgtkhLG(vY2=6#|aw!;1aHCqWI_V*Fgei5S^vr_Kgk>n{7GgUmqxKyH8d?C<3LHmP z^Y@x0S$9Y@cA=)2cBl?9)R58BKGP`BD+Ub1A`vG7ru*g$nShzeQ z)F8q-oHD}Kg>x&PKtHy&LZmcCrv1o86>uAnIaiSyD%D$s#Mj{rG3k2QUBm4+gOh=~ z4ntT(0*3og!=J_>DM5@YgZX@!lz%fzfILOFU8d*rWy&y`ZWt3F7{Utlo;C!lyQtX^SePuB z{8Hg9AqLcH@A&5F(cIf43{T)BaEfjTeCjDZ^02w%hV%8n)fU#}6t@LM;rhK276Fl* zEAb>4dXwFXO>k{!dcf~W@oBdPrY_aM{GMue?*Pfy*TZ21Qyt|V- zMJV$C1+;&IWjpe-P@+^Ptw4>fr54}G=0xFTu5S3bi`e`1J4MuQC=8Ov5`3)WhoP}(|76Y;j!o}+|~fbtY)paUJm<@B(d zLQJPJVHaKhY}Ny29h%<~C)7jTL~AUKsBO@;WLL8m?O_D6hS_eS(d@M8#Hw!c$xnw0 zk*=44R)waL+O8j1la;3X5uvM5XN6ax#jBwaS6?-$!p8`nEN?NhYb3`t zJSsy4QYf%Hu~*?D4r%V8w(PbO80aHR?HYUGTYdsP<}T-IZP~cHTc^}hiptp=(6p;$ zc`!f4YPUMTeNeu5J)j8+btFjV0KaJWhmI2?v~=3KIA{S=Pbyh7oY6>CQeirVsVA4E zq87p+r%Mb^lxp{fVRh8g(Jy}-B0V#vM!BjWZ(qCvLB*I2{OH+JC`@qXEz$N#X|BK( zmrkoEzC$PW99&qm7PN1Wo!C*Z<=H)=SH2T8c>pXaB!VXyt}BSnC#N>++Kl>v(Vy=X z`TFjZRvJN;zZoLRi`DEL?+|rU25PGUQ?G#JxmBEQymj|d-5O~b9+h)xSUGgfaYjM@LH|J=sqnUt{bVty_oXbTZW5TblB<~Yzdbhglv zCLyJP&%~O=@A0n3FwF1`L21`eR|@eoKhe#17bBspUPg|9WSI?h+DK5n@{-_DVk>Z! z8s0X|e8ZX261|Ajz?_<;2nXOT1(b1vvE9uvs z6f5<621fHgQtHHNtf*_Aowb(LwQx_Gy*d}6T(6{>zEaHOA2_^Q7q1B7TY{GbFDXxM zXb4Xu@3C%+_Bt&%GmHB2rS)zeJF_oRHD{Z9`|!VPF=Z>AUZ_ZZv~_MZ7jWH1iYR*! z?{}Fe5lw>;Rnn3wM>9g)_{7L%;zBgru*%z;KI;#X|4zYR`&VNA$Vn=C98u{!Lsq}& zpk_Bn(P;a|ZmB)^o>a!8?L23gHs-fV@0MiRB@R!S7;MfMA|uCt70^)an5@+>Ui2DM zM?h&DEIUw78)g|)!DyX?>NLdA?+-{d|K{d4P*_k^y-##Z75&2v5v<^1q_3tEQ5@JJ zPoLW;3OGk{`4+=GP^|N3ylN&X75lk*q%Rg_gbeN@C(~OtI96Sa23@P{lGmpwg z(_4Q)>%7prn!%_;Fx2YM5J#AYN*2V@jE>Ov-e+ok@!cC~vInbdnp!e!bFcKx2~v>D zg)Yv^OWcP1klDb4w zDhNiS0BdGnroClOkYv7impYv;SU|@wLNoGK@49i8c9-*h?ZXRmtRJ9hD5MKk$C&jZ z*15`}Ie3uy%O{hXsF+;7*6mZ_l9D!C;R;!5dUs z(tSPp&*O`T7=u&E0sXm`zcEB5g<7aD8zlP#ved(d^IAV_Qpf-hSsXsoXG?eFYd5r% zrVEhE-ti;xErhWl{lM_Vx7CRG=ot_#SYurL{mNxs`yRhHeg($GgUd#J=C>EfPq^8~ zdqF#={Psx6y1wQ)^LA)W*4*4(QRet|*aLuNRYzkYenZ^=^$Jy%MX3d)r|cIBzSx(TK2L` z4#l$%0!VbyNC^yvP*+e zZ6J-QVvD|=kyqreZgc(fQ{Im$Q7w&do30v^8TXb;0b3KLe_1|>kD28|<_z6uv0+~) z9d~Hco)4}^y^96YvL6(3D_b!-qN1&Of*KPR99jA&IptBBAKz4bY9!zPI|ceb1y4qn zePRS}IY&yrS&7Qb|D)d$6fEsz4ITbV@>C}9f0R63Yunmyto=%!Dt-)`Q;5b-!0`J7 z*|w#?goFwtL5|dxm!UFV0alQ(*U1!bT3_03Uyt`B12r>cy>G)e>1p}mPqUesb3O4s zn%yAej%q#$LJC$Lk_24aus?=WijR$vMKVj z@@tZE2m;ydEe}H62+if4RE>Gi!H${+k zaI82_@u1_~(lMjxDM_j|(x?XFBGht2=7)(Bc;~ z44HZyrK){JM6*-c@$Oy%KUU+t3!eVu(K)C+u|Row3m^=L3{j;is~S->175gm;O=bi z#0+$PgXH514s_;xcZoVP!8<7LPV1okvFo^7V7Z}n3O+(?OUQV2V6)KOB0IXJj^_8!|w%d3jSjwCq-f5Hf){%+z;%%_EuG z_ty#@9)7IJz!gWVX@iIzdv(V&y1K{jX*BPkv&@g6XVT+J%>B?2)vD!*<~k+B>`V;L z&ba{s|6sMQF^d7etR3WQ1D>ya>K=#w#4J}&reWaP=vdN2JDn%DPr7alvUHpFoiKv2 z=ZnBH2D#q@;1g<9_S%JeZ)mwb3rI_7H}njy&M9Oq5Tn&Af!F~}C$clQC~WB7^#y4x zd}yg|Y;iq$;W01kkfRN2%-=5NaC*|C%01Il9PBl{4DM&c*6E&vX_g;c)TFkt48?zF zIF>Q3@obod2jcxqEHGX(sakp!7%fCI)kIPafdM>Ckt2Gm>(Cz30#ojVukwv5vt@%{ z?-5>$hXj5kmG)7S6{AgENs_icoTDbB7^!dEH&)=;k0I`)3j_z^DqD2EfJs? zJmE7ljTGvOJ9;NqYljQ_y_i&M4iTxVt#t46ay|zw418TzMoG?Gtf|9XENOe$=te8p z)3nC>x!69%kRFLxZpF_#?7b$@r{laG{A}DFfUSwYF09yV+w(ERV)(fX@H|Gg0tX-g zMs|e*S-|WbO=uH94C@WgSPpvo1Co0jM^b}1g*RA0%c$;Ado+-{;sG6kIWtE~JoJ`$ z&OpVJ?%q2V%&Zy*_MSNEke*hg=ZEUM9#o6YAsx0%-9Fc zOK*P<{li`lfFTn{iux@pf(}n|4|Ma`i12!sfVU~n24}7A-iE2qCRhYm@Di#VxZ~j7 z-}eomOQ2xoOKWQlq7@GEF;37~N=LW@7qGGuR|mb|feK#^t~0V=Wj{xld0Mcte{;XF zzL?pQ{9`~pvwJGvoNQ;X|M6=@u-<4<%Apo$t?Gf6D+9}Kx$U|E1X$VgLSz3tX7)en zDUcxphsilwV3?$ViuM*42AbcxeA52<-)>c@U|=sk6hAEs{-!)^m$h2EoVB+hzkfjv zGy^MG*@}B@pyp^%-r+lFt$uBtKDe^E168jtw#@JHUY}_hWWmY~HrWT7F|woVcLA2n z947sJai_V0mA@~Gez0KV-sSsG;AP79rKQ2;e>{-9pA94XpT0c!rpfPWc!6!A2Pl7@Wa@3f%05?{ z`fHgvj{ET5>jw5N^a;iae&l+ynAQtLo$n2^PFRa%9W*493b3b@o_=gRi7sMz5Mz6e zBPS}6<+9ge*edwdGwVq~+m*zmP#j8Pl6m%|FewW}GV4`xB#=`pku3+6T!~~gD&cgh z$dgexsAMSU98}Vk%;KPwq3Hf&QJck!Cdj|bXf0=1AEx|iv89sLfFj|z5T!`jD@QM| z_-&OO|JzCkDh>)+s?u2{T|pL<&SMQ(2> zUNCW#33B~lVzS}_Y#c^Hkb%7jNKa84r{R!pA~sGVA&8g>L}Z}|nVS?2LJhJPDV?4J zk-=2I!dE*H^3-(}{|AV$dhByZKAH6}E@4#uyla+r_gwN1XxY?Th-ZngwNlqrp`};; z-M8C2-0vPna+Y&%cppEh`_2E3-s)DOsxIFZ zW~|2EEpjdi@0?uOe=Q(=J&JYE{ibZv#ZU3$H1v?)Q6qqlZ5AnKM;ttVxocpYutmu8^zxGtih} z5V-uBZ_ywx#V0uQ)R;$m1fheQbzjO`FbESSsGtg*K3e4WrMq#w^g-^o22h($fCn{r99rIIaN>HS_~+NdTJPp*)_lg7fo=Bgucs`1 zUlq=7*xawE-^zy5swq9P@qOu4DePr-+075CFvXW&YsJ#HpSu!V2VwDvc~=rW-tG-v z16xHWZpYG6O?q@6OxC-^UlPFUJnFgMZ9(jsq@rP7+~O}gMi5OGoD*{IWvncEv`fp9 zw;Gz>Ul;QKT{c6NqIFe@1OQMX^go9J{zZi;yEwTTyEy;fJxDX$ANHH$8T|Hv-|)d` z?HhrlivNslPg?_Qq$6uvO*JOTI$R86#uJCb;Bh526}?~jc3&`h!%$4y)_aiAu%)x# zc5X46B{efpsLS%B0!RoL7~BzI7)k5chRRq+75Bdu4wjxK9(6h~Q2q#KbO?Y=&CuO$msO z+Z~ZQnp}Y(kO+axki`b!aouPC4#r>hDfu|D-w3|k#$grRqVE~zAv>Q5*Bty>;-&Yr6^hO_|M22~g3`XSR0MrTi zkPM>Q@qk3N4JJwUw)H53aaP4S00Z^GsP``;1pwt?D+H!fHpDIaT;n3bXwdS-mEMlw zmlpc}X!>07^F7~|f1E;m-5} zlN)wm>A{yFGve?=@x7n-&yK6*-+IO$844c@zc-mjGb&7A5JkWu;U%{XWWY_4SdDhR z;SY{7&YyQ4R^p>pXsOvU&zFb7rg7*)gN%9{G!X2*VdKhoV?h^8$BERqZ}rzFo49CP zTDM`l7Ol4nUno3eTx)+YCu)57*!^0_3AUU8?aw4x*pNFYBmIQp?+9e_yY4n@{f_Dt z@Q3|Sc8f_@t06|UZpYQT2zNZN9e5Ph-|BEfDg1&aZ(i+%Li&wn5(3q|Y=`Av2m@O1 z>+H1+_cL#DxsvOSMLu>{Gq5Fa?PGQ)#=mYK3fS=LeosZ3xAa|wZ=m-}-N|I-+YIW; zb)!`|pn*YVd=UDe)>_$KCRPN{lA6s!QgB5eKd|D-l@q(AxlgL+%gOEC2CVy#^3V-h zz3ux-;V=tr@}hk1ID1g$Ttd5B)jSG%BZysBPTVsFgrXA}^80c=&|UQVTQ0-EG%SfR z0m}848N)_f97#3W6f)2*ZUJJTgGvszE7jy4-XqgDz31~mOs8N^Jn(P>Ndn>e(H=E= zMoG~_1l1gU@k-KZVBH{I}W7-E0RTif>iPvt<3)Cj=nl${nYf`Zk^^5Q2TRPPA?apNJk zl8xkk&ZH3?Lj)c(Q0DKY$A_Uk$WSYQC}D?N9{n0AheNSHjw5(XX`+2i`UVBLAfcDy zI;=e`8{HeXFm@_?-8<)cb4pE1zUps-VykUbM+X zH5q{0zB@V^{wTHtGq@z`JKznF56O7*jmSP!@#`h6t2PS&XjOX`3_-PT5qd+k84|a< zB;HmNej(JAfa^ZFp@uALe*$26&hE%}naQaaF0}py>!_r|pHwn4X}97J_<3_w82E^1 z4o$KerFsJHyT?$fEYqexKAR!ho2v{2*aaiBWFEYHz1(-!xmH9rEVHYaz~XD>cAADro=KrEaAcmXNivN8`T@jiz^j z40TC@+*pa#4!Q6HCxKX=;$$Arw1r_Ecu z#)2HjClM_)$<8*+aW~M;x*Eee0uUYwh_D=VOMd=r<^gu_b16+P2LXq$#$@3qbV_8v z+T<=)+YG`2Uz#Xb111m`=t_ePS|*ip7m3p6I|s}W0dD64Z<&c5V)W(=s6oyy-sG^A zO3eV)``*+nr0UIlNzX8}A73C}4_!Y7WbZylpYRJ#0smu*;G~T%05wbdKk- zDQl1O!W?Dn2l`yjH3~6-&b-haoT^vP_w+3X#jQ)enQdd{7Y-dKVwD2raJV6%mE$wh z(yxYrc7~aYpvjV&b zwzU^rhog2FtSi!sZ4V_#(LvfFKyJSa_n?LDy{&Um4yFi$mQQfCbfP2O#{YdEaMX z)J|f&^z#&X6*;u=>RCc06Fvrla4C>$?3I(ald;PVHyNs9wU(XoRLzwvF=8dj8vSnc zcDGr9EmH;3qQwM|jxw1-EEtrz6b=MKrdfx?tbg8h=V5vkju1A8%~tyg%~5KR43JG( z*)7{IAfX*~PLgi_CS_<}Y2vZ1?_El`J7TnxqT25}g{v3x-SvvZF6j)7yccIG>!A!OFpo z9aU>jZQc?qQbl49GoLBpJdN*U#0yzTbsL3;wIML?`fs`PPE-M-;OXIky%ewv?MdPa zhJo+Wv(Gf<{Q+EEAMm9S0TYmxXduX}e4O8bHdhxko??O6;J<07Fv<>q>Z*W*V5J@) zVbhlyR#C}zKwSGdm13Z*u>>ZXI!)VItsSL@AzR-`0^3+phUa6$yd*2Hr8k6Uc62H4 z(B}!8DdW&-Pp?=iEeL=tP@)G6*@#kTWy&c@nJpo@7KD*c3l_%1=jK;6%|{_>FOv zwQT*Dea`oyPKC5Nb>_wBK%aFYrrjIEQ;#+z*g82W_0??Q?VX74af&wOvSLo23LIH1u_R zB_E-VJ%|TuX=K!n#Vr!>8OHNX-BO3yB&HJscj>2u3Nu}|sHtA(uDvN-$@3OoIg6y|MO=fiTYwbR^qYk7W_={I5WVR`kZh zR@4;0Zj8T_#(>;ANmfw-xza}d=Q&CaJ=niGevjx$A)VjmrIDF17PJ|2hkN8=rl7a@ zJre1qVp#9gL*xvkZyzp0kUS^5A!@m8aS?Y!lmQK-2hic{?1$WwXTEG06k#YSn}u^_ zBqqc-(nrFAU?ZyJ|KzSJMe!67>CX`!tmlU!cy1z-$ton4jU;&rm8<4Uvk+9Kvm(@B;JEVnq z2ZAVMM{>`2;WMsJU1)`qK#xD(f3jNbq~q%V*-@CdAzJr@7~A25P?CR)nHVp@KA(3Vai+veQ|?sDDJ{fu)>JlAS>B<&c=BnFJ@hMF;RCiX0r5gU1pC7EeTz?a!Mk^X0D5(&N8F&((LUOuX%V_Ao+*xSxK{{m#WM_7sL0YA}#w08aTqY z!Dy{#K5OAf$&b^=(puW-pu2Qnw6u6xVjp%z*oz;w3at8Hv|R&*uqbGspwfPGM2Ir# z+fq-GstFh~51~NWG@TEji@Ve8N!EkLJX0BnfddGC0drPb&_A*%bv^wfbpbPHiRoHf zf67p}?C`cu^bvkyINn~runAp*vC?F`D~~nDf9wg404oMb!I3yJ5sj8Da@&cWtc*-E zlYlaail|_yICP-_Rd43kXhNaQHr&o5g+Z}Z&-mbEQp7aeXVle0_@2VB=@;=>Aah7A zmj#Mo%fbkR-Lo*P?SN16?~@>Sf#d3!Z!{2CHH%{l9@sTGIWW*fL~T_J1n=Qo@i(Iz z=(X3#bae3uF(C|ErpOeMkA9Ic4pq1SxaZ}=K_E`AV`ktQR6{&=Pk?L&3s1_$CSe98 zNUMqe3S)|0`3n%BeAg71*X7Vx!b3pT^}Y6xWklXT1s_gN4r>AEB&%L~8+nJOZcXWg zCNa=*ct5Odlc>2y1ygR3qx*@_%1E_R|(?^Cqc z07?wCYBAtcfL7_2>EL9oc3Fn9-S_&ixfh%)sg}^!7kfP9s;5q#2N}?4vlC6BTpq#2 zJfMKK@iOnXVQj&d24YIjRm$l(LN7#wI?Lv4nDhdy1v$NOVA46HjHIRDqU~w0WLNCQ zJP#b^`#iAr_IyndcARkp?8GkJ_&?VFMboP_oQ=K@s%-;&{G6Yf=8J*yz^1-Tpm#E8 zEK)~b?7*5odNBUmX2?f|Js&l9l6<3-H0s^4_ru-u1^9?j*IV`AiQ$;*A{giky1IBz z2w9hTp$9uKNTVk5iiiPZ(PiHOpVO`rhIt`dJ?=Vq#jD$k^EJJBRV-J^UOpZbw%bUw zy9j`$+h@G)xA@_p`yB2wiMJbjyIc3RKXxSd{jB&b-{IG26_>M$Z2n+}tR%Q0+0Si+ zoOgg?;=!X^K2g_TF*l;e*@3sstrcC8z)ZGa33)p-3DCT4#E)Cof5z?oN+c9SDUy)A z1vDxJcmez4I2NT=oZy7w|F(UmBL^t*G-w}nYvf*uSZms*bg*9|jyX7Y?Wc>jSin`j z`Rl7n^={WPzDCbjVwHqy_YV|Ukq-hX>}attkU1BCwOaoe$fUV)+JQ4@o@^eyh`P-&J@&H9t;PD$$8Qt@nf zF|ul`bmY1qHdEd=~zkF3K~U5MqAO!U9~tysLI7ssi^H zg?^Dt?uc(aqS&fWw_F#jvoLCN-i;XYe6veX=QR&o)6y{?dO~*t|SN79A7e}Qb2$;s3!yZ;F!Azn;7l1yTRW_-9a~o`M|vkWrgr%FvvM->Y)?L{oM0G9 z;ytwH1c%X`K}F|suc=*JgJErPa6y}mle1izU( z9n#>7pAEI8OV^`!6DNB0;@M9BGOrq?fH>T_fUWAdeD~s2R3`tbMA4!#F;W!q*M}XN|R4!JSZ2pHh-nCEg0tQNLgf!NH(g*>V3+>cllO}*A&Sp8mWjaPR-t4sXXd5 znD`Vsx;Ce$I5Xdd&h>+C{ zm0b57_%{7}Y5plfbABz{F|xP>Em2BWs#5__qtS#z0CbqlksAf0yCXyO%_z zEH=99RIs=XR1}{OpCrNka1-(MW#7HGNqROTzw@+d-_Mx|+HzOvN=6->l_?if8D2~J zv&*IeDfSJhGj5@fq+(*{TubOECRajJY~D&7404}da|1Z3c>2C|r!xK@U_Wj(<@K9{ zs(J{$b<{?>wS@;J|J9sb{AN<~ookKUUCv{y>q^5j-^epMq+$c-xbc&cqK|{2@E2Ct zaWeW4O5G6p8TcJ36xeUIQgGx9U;qfM;jcR|$*Aza{JjnAR`Ql1wm&5f9(wg&xGSSS zx@w??9L*dqQGZIcgB7|m+Z4X|UPDHMa3DI~rPgMfK@-&x8HWV{55Qk74Vc&8fI97| z66|;hnnA}><=8sWwT&@l)}dIYGyqVB0bgK!3x`}5)2dr{xfM>~OtI=XQi*I`06onvJ74+XCBFicAx^=(VQEtm&V(~0{fo;SPfHC$Zy`fDN-ArH?tCI(K zNyiCI^^ArOC1Zmk>S5d~z?za4JhUCe<(jxVJ^BZir6Of#bO=jKdGk&eeUWxV5{ zLK6Mwmja#(LroJAn(&bU38Z-5U=9a7%etW*<*Ax7!9)Glq9xh)Q`otFWvbJ#VxS){ z2bp>~did`b+L%*1X;q?8Db8uq1p*?){i_~9m6UJ!yL*UFZBahO7I9AuBQgQW>y3Mq zOI7|x(Q+XSYb)4P0= zZ}_ynU32$NIHxEWH(1yp%{rRpot8Pz+K<#+d?wT`-Z?-g9FFZgJRE<_?sA~@RUN}3 zq5V2XYDy3XnsHW9_c|p7)TfY11>pkTi1#f`)NyrrS+l9L%{UIAXE(xwbvuCm6O2+A zZpISlrV6k2B-{`O%Jcsl;9f7`4%cCPDci;pIY*C$_h&P11wqV<8!HpbD@zLt1K-lF za*ySe0T{i>G!DOz4BZvRN5Ct?Tv?s2sR!VJ3s2J}`}8kI#!Nl#y=tFzj$mM9L;R1pT&A*E1 zj6ct0Ll|x374U45Cum!Xeh%&6B_F!T^w7?Q7!O*m<~+ii@qzxJ_R#Y#;El!?^%vn6 z!52Z(K=VuVOZ7|fOP$Mo45?9lGKvTrxK}8Jpne+wGF$*^$;>%jm+37qXC$2=;oli- zExc_W+A9J=OA$tRbw+J1?N5YgI=VLumwhq?GrUG_=qhY4{?8U756Y%@IKae@4+hnt z6(LWa;kom_`?m#@42;i264vRQtad8<2MOkX9iWqWn~mBfCZ%WGKM#N{K-TKump27E zIou~f1|$BKhDu6vY*+KkAG8$;ri%<-Wm-UPMH;Q2l~e=Yg(o7z&}k!?NwBmx>I&xYys4#d1$S|c zGnpyPXh#*vs@``-K8(7%?$P=Mg~87t7LprHdoFKDQBRvHF3Ss(#0ZNFznS9+XN<-o zvuf>xI&Kl;kcrZ)ShxZ>rOWE<8ib zOD_J9e!p*^BbfE-9blESv<#-t2K!e5HfY?|O1N_@ARxD#m4kL?WUhL+!q0y$;8R<9 ziMnSzi&rJN3jkqS5s;dt>MizZGi$xJmdb0SN(4qB^iM|{C#FuM9sMA8yTcR)0(f>m zb%fNG1QwZ#1b*(^asSmDFu;v=j(%8O8I?gCpB%=x5rfp~_K^vcipe(EqZ}Rd`%D=w zV-Zd;E=04GX9m`bqKb}qwuG%8ClmQUUs_BbMceV2UpK2qAr0_fn9v0V3}8Vp0*zQw z_9TU)0Yu>m#en#zKaSeCi{;3%u`%a=5Yt>qUUfWkbPsUas^h?RxE(n9?#6-GCC29g zG&{42ECX56LWw@`Vu7ekqi3IEqQJVM^wwm`wMJxFS#?N?MMQWHtAlK+-ZG5vrZzQa zwLJ}*491mZsI&B1)vWeBnd2U%SeZWXC82aTR`bv(JBkD?*_h)dQMek5TE8J4^C8`#U@93Uv;{nKiYUoc1GJAY zS}3d)@Po-lq0!GC_|0S2e{>2)0i|1+U$?ek#I@Y@$^F?DqUV+mJyM0uQq~5Z_9#4B z3RaL5Xcm8)D5{Gi%iWD6O{KHmSB|E@&KG&Kq1)sl6^BuOvDVGZ#~ocRfb>Uuq3xmT zJjp-jl-I6+t2$=AwdW?;k{67_J00>xQ0M)T_4kKJEezdWzP2jl4zeks^^DT;sh=~F zBB~-F%ovHZhmCNwynB#rRZe(*3`N(+sbjaMyxTnKive`4hciri3Gy)N&grFx$~%L) zSvTH>Q#|MWS@vYJSYeH4U-!4o>o|)&><}F0!z0Sey6BsBVEgH-jD=>-0njcw>D%M3 zvpx2h0ON=6cf4LLRJumGRWW_(a)Y>Jx!fIZ=Pm9XZEa0yNKBX0gggRQLYl~+5vgHa z8KN#zntzhzPL(o0F8%syPc*_#uoEu3cP^EGs2M^dT)N!c2okTRJg zIku3;SyaqEl6|jKW&=M`1zj$VSGX6mU3NQ&By%MX{RB666R~fF8lzKjnyw26Nlc%B zNs8a9UoMxq&5Qx~Rh_!08|2lcR<3eLV)hOaZAwJZo6shqC0af*WP5zf^nb5nMfNk< zwsCm#`9TyHg>d_CcVc}`g?-b?g@ZEACRyzqmd69{r*&r;ui zfd5l40?mhe=aBu^Y*7pVp!>fk7%i;-zsbutJXT8BYK?nJCx7;b%UFPiCVSVUqogAI z#L5Qw!QHxciB(tmlJc4bxL*MrI`l$FXyVpH++dbj`Y%-H=S50-5#S% zq?%Bjl9!_P5YajoY>-y0JrcSH$|ZSVTp`2QLTd!Fdv3)g8~wh`)0A|9s8uC(iJWGg zikeq#1BR=1Fw$;?m{MnNMiisHCRRCd@&3PUR~OKrL0-Fkh-G}$CqmpgG8-&l%__FB z9=ti-x8>gptrye2tsTCbo}G}@6BRJKqpS2W$XgRYab%xvP(?!(*E*Nsq z0Gv?L6c{PCZ}$cf(d!2%#C1g07;s+bWor$560m^4X!%62NHUEtNN!p%FZ5f+j8aTZ zv``t`yc|?go6fYf*x1;z(k{H2rsxvd*o#G&5jhf zReyee^}2p~&7TN6XWLBEmJHEgk7lZP+)>N?OB*9}aeH<)H{XT+4#MrtNRtGZy~{?Q zoWmi+!2!f^>{2FBUVU>&h*mU%e)>~}b#d4Gb8%^OFL-bSnF)z=r=h!F zO~Cx{1H7L>X}`04E2dcs4glLMYbyN!7b(;oucof77x&hKlBPq!H8e@no~(77T{kZ$ z>~pW+epXc48BVyvkYhtEi^BU zMb+r^Ds6g5O9Is-sg2ay(uLDR^nBbaVn4;k$Z~!U9MJ!O1%qLIhyE^3Qa^CizP5M( z{raH1+YADM?-5?Cvdx6)orh#DtJK6XCh2kdF}sBzG67k1a7BlzK7o0pVXQU7mmjrH z9N2PjX<+8L2Q#*dM{vZ;{i^%v>mlic7fRe;o9$A+6&cVjR?$i9PwyUNqz)1O!6}BP zZb%qgs8e93>_^8_dVO z*3o@SD)d;vO_^f)XDcLg#@f;l=H+*bs-B??ASNZ4@$^)w>Yr;)1Y@c&ZN97CH7 zgTpLbiciJ zFY&PhTHM_a+{W?V1XW>(V630bKk~UfdJ;%L-bdRq_W(z{D(2#u6D~ZH#rydw1WhH! z=gf*Ey5x@$7w!vx+ZM_Rxq=G}y5tGZduhDQ!3V*7`omE3Z=Rm1<-;OwWei`Kc!&gn zl9x6T)Wgb;VmZvfZH@$)W7;;G7VN3sW&l=_$YAp?hv6Nqi4$Y1;X$j${j{iMB zALL4bKt^DyDI{jH8VX1(aB!Kg)P-QzX)xQF{@{xL_a{UhLKlasENT8~*(IXJ?`%Ez zOa{pLE>-{eRzN_YkR-tnW+CFd%7hdG%oC|h9~v-PwL#d?7+Di0H zIOg-`51f{8a(Bt^S@SAcFvn<&ko;hjfllmR_6L%wh^r+225v*wAuqs;P1x2Ra<`(4 zY66Bf_biyQL$Gp&xcDE!5rh0k#$vyWp{jN!Ac!K3flhZl7OtC1&i%pZusIAEETLG( z0q`cUS$EBn;r`+g){Hj~zdzW)9%gWrngrqe#fn>RMAE3llmS>S(&C(L<$`!(_sv5w z8K8TlrmAQ|5Jqs@AHQsOMP?}}LhZ!sQ)hx$bag{?jpH0pNv_j~XIGRmJ1@T`mr~=G z1{rx2RrIdOVH_aPE+=Wq#79)j3JK?!`vl*C19$`eUj5h_fc#nH@m{i7b_rcDW*6JS zfaqQVw5rT}>>n6@AjkE{oT1MuBbhHpqeEhWYH2IegjM8|FS9eabtx3~lvJ#A5M`P} zD#si=VFQ39e`}~#FZ1p zFASP>E}!@1o_5?;Cii691|ufDoqkbfYHoF(%v~CTdxiJCevX^%^l5hstGW%H#iGO6 zRFT-rmOjK;UIOYLht3{dI*4{%S8ZZFuwXrft*hm2{`M2rPLzd*WD`PrI5A^9?eAH* z+?r)#X&1rGJ44iZC;)Yl*cVLp2UFlBr0w_46f0WD!m#i6#uR+oe#{{5X@;(%gr;E9 zZK5rn>Sq7%sIJWq+lZ_!zRLR9h%0DHZ=Av8P;y|FJg&0@KElP;U77E2{ja*h&auF@P9T)hv?_B)1 zzAw1NgjgSZ9r;NzO9@6&Z|GwGa9iI@D9o2az;-Z_DKi}dqrksuPl204h-od=vWtn< z(>C*vn1*@J?Eo-Mvrii0AC|8KmD;wYg@hKA0Z=f=2xQ4myFml?Idhi@Pm1f+Mfk0> zwvSLPh8dlukaM_u1J*JHcC`;KHED<~#c$@7Bb#B(3q_<-6%B>EF)ufZ?dPJ@<3&d& zH%4&{R#^*Z9fy~G)cE1La%L;B`tR?GGgZ5#O!0SQ4;ME#c}chY!|?t_*7TiEYJLwo#L6Qo*KN?I%*JTJ-+8WU=G*D1tz0w!O=Ha;+#-Y z&P4`|gqb~)$V{T)vro0UKJ+1+1wDlJftPOE^iPP>SL;@@t9ayIjw9N@fuh!hpEkSM z>Y0fQz^W2wNG+y-ox`J34Oy#oX`7{_;M<5)ZE>7~&F?l0oO4kj6{l7&SDVUmJ^U%6 zDX)PQg;*u#$OT?(pXkdC;`5s-BW3bMGodW1_0;74c}KGQx*?{~q?^M&;Gqk=rhzl? zSzF-JwI{?Ij(V_yK5VE%%l88$6jC}DYJbcy5rEU*g`K88u1W$8>3pa`_5V%PqABlP zJ@HraCtzh-M2nlL^v>sth`NnSDTxoNIQ`sbO!0X=EWU40DX!{fg`CuZGOPl zeV!4&<>@_l){NolUjN*EPTjToewwuPygnV}`T1VoZ~Hp|)R?6$@iMOPLgm(A@}tp0 z0onNTW2-6$)*VK)MUv-5s?bknup|kbkZ~_&o?NfKX$;ZGk8PgRE$z~|1*`UBJqoES$(kk@&)^?V5}jx@3tL_ikKvCAMityTG05mACChzT&_v%d zO_pP%zMLv2ATiPn=D8_BBS&lJ(`c_?z}v(?q9Yx;9gG96aMyYcPcg;sWn!y47OC-B@vl>4wCIfnZumN-!(Yw1F_*fRx4~GP|iCjPPx}sm8)h z-dL$p%Rk>%WA&hMi*2uP=%R_9#i;N5ui%Te`DUL}@>(bv&jRk)f4T)Fa5>O)f#d#! zWzDsSQ7j{QUUO}#vEfKLV6HT{52D_h05RmoN1CSgT0&>M0xP)mL3>EnKNq*ZS9oC6 zd2>^d!{|EM-B9Ts)l7-9r5MQQ?rS#$?y>JI}i01cgwCA z8ZGpL`oYm;wx9GJUGqbM9Ys-$1NM*jL`HEKd$nj)MBX^x={h6L~xI7dGEP)*3RHls)#^tHZbE!rHR$(NQ z;B9V>tE~O|h~couKF9QkK{xo2(om1}w?O8T6Je0cDE^uWsnUqwsu$1^7Y*JViz~=! zvhWXeF1)9QGSrKc`rwB?Hzks%pFzqhTP!~$S^$Quv0|3~8ZSE78fHkv|mtJYbNB!Mf@p#_(xLtpi(nfxxvdR_+aG4==>$SsK>wBl%DI zj@<3s(V=SJzmpH`K3m7^3^4=PQ~+1fbLCTlU@ zAJvl}AzwTejSmR-#Li5bw5W3fTSLY`(1TJp-#XAB)ld2d) zT4)b;(^Fz2E2V7}r6@bNwSm4^sxtD(tc=hW@=p8o;iYtJmH3LY}?v`3ib#swZDLr{uiv{7M46mmdAcp83%zCUgVB5 zLsl|vPOSbRWXZK_aAyAZA`zE8)Rhv-t~6io_FZ`dQ03G6MJ#o05ES7m!gZzFE5yX( zR-ZY~I9}?@6J=wa)vWaM^-LM(Anb@D~FHT7-IBkDdYV*@HLI)@S11vJYroDA>%b$ydBk zB^+D49W|Edbwg@5X;hM?H9~-_d5toRl{FQ_OO%0Wqr1Gz z+>Th0V3DxvHbZTG!U*Y4hptMF3Bq++yw}U08nt;^zj)pQVc5>!>53G<) zf~XP1aE;9wWcJB|Z{vLG`F9NJ@i55F{q2h=jAHNJQpI5~Y0 z5ig2KLCQoVjFFYPa;ei;X11gDMW!f-f~*|0AZ!bMvU>2|D-_$v6+KhH+F=`E$Bv?c z%}~+b4y#JI@m<&8GewE9%0wgY^0&XgvOz#Zg&D}FzT`<>Xom4Li|RhTgShdl+6I9m zvt^6oB^J|9)D%3}&+kz(&4Z)?#4K<1HIM|}Og+J&O9fhDOoIqfKoj9e$VMIh`UY;{ zi0Y#Yw!wAM$+H-$TwN1<uAyu%`F4a>DWZsoG!gxXOfo8J#cPi%7Vx_{Xs zJ}LDcd~kuaGy*uf(xxf|q@*+7ROY7s-vSGr_@r3w zZf>N8H z?Xq>h(VzTC-#k|ArJR&n7}=a}1n!c4e+ZMZmy{U%W0#0He|r~1uglLUw6ZV*>RjF( zNq!%-xn}C`zVNfMO)Nxi?%z*zc*t{0$1|ZB{nP#-gUIIB)JrQ<-%9Z%JmOp$b#bqS zKW@%(1ZfJinepS%rfLbkVEbR-dn1UlQ*+6f3DVh8$*t5 zG*%%UJ9v=7dQ3&p{#7Hd)xvDCqk2&Qu3FF>Fs|Z3Th5Q|RI`EnC&2DJKq;RW+lGN- zMl$G&kBjT(*Mkxl-fiDYC+~4aLRQbi^mc-d4o{wJ9{S6NiP5Zk0WdPK?_hw!VKg^= z%IH9tW=De~1}x>l^E> zGp@sq&m<(f++V|pZg3CxHvo-`1X`eyhvXw?`RDw1V$&(*K~k3oH`tTFQzMsKODBaD zyrPdTc4wWM#F|lhhnt9!WRP!4&phcfC52-Eyd{ewVwDxV*kDh88cor0s`MG~qjdrH zL0I}>qx0tQ)>UW(tZKdVbL=9Wd4S%rxD%253l{8La@ZipthCCCh%BnZXv0kLqS64UfXeCf z)ShDkw-EZGz3Yg`1Yc|BGF^iP+S;a4qEgHR9q>%iFtFZd7a-=5TbzFv+H|%+^YwuB zF!3aChExQffLpz2p&aZ6!V_()PI$&X8^yFZ_tw=fSbf2TKG(2U!HTR!_oV^;hL$Gm z+0`QzE}T`W3Nl0&QmjUwoGR?X`>ALrG$!W2zfUhLeU+(J=z^ki_Lxrpv3lLaK4Hd) zwpLJf9i3QJcy`tknzHo#s`w5^ROk=JeZs#a1BuWuoQ2wNL(uPg3~Hq-8EzKnvj9Yt zy6g1r^ueg{ICm99NT_d!I5<~@h@iO?ZEGWhivM#ez5pr+%2HaVQFX!DY^-u0m)w_4 zfMA5jVFE9@dAEDD&5Pg~8DAC>o*>u@B=q)snpHMM12w(u#m(0O@|m}3jV$+BFwamu zuE*JBVfIp)9#WqnD^OXK*Sn6bD#yd1zwz4BUEBf%_Rqa+pNZ4exUWUMc#U=I~Rmb2*^_~P@or2;i&aQN@Kes zbYKUOO)Gt>zd`E8@BdAT=TYK)ShXjG59aL>dl>Z#BeV(9d@XC009l5IBe@37P_pkO*MG?n&-L6dA8gD`3s7CV3)T*GYzn}|}^9Cwx< znc#Lr%E=~U8bqZM{LB4{oUNvz12_R|XQU}m;~C+$dij@)wffO62F|IFr#WdvC1N4R ziUzTE>+BTdl2SWSt;b*BVMdm=ja@W z4Qax0m`WNf%p{pMVxC&eQjcCZoYz-w?kuyQOpgS(l4~{Yn+vH@qPfB;9JV?*9&ij8 z4WeExca`}_g|pI57mOnc*dQSQ79jFW0bNPd+%9b{0|$3XprnQc#{+QcM0if(eyq3| zze5lZhvKsnc*XHg0Ws2?^XQ$VfUzk;kgeDNH!o0ieyE9SI@IZVc+m8t*IPPI1rZur zRVX)LtSpDEXLj$mr)lF$>+Zqqdb{{$OFw~ijIcdAk!u4|@T|1<>|D?OlNlCGy|IOY zO`VZGLyOi>1k6+&3g7!6im2i0M{C%Jk3!9BnR$nKa?e6~tzFs)l2qwHC_qon_)9*+ z0ZU&3(qSi$hDbpC%8xnV1s8ItakJNXMFw>1lkiv<&T7sbUF1Q!%JY!+H;>W>Oql{- zL{n})Bc%IwoG`dztpOh!ZZGS*N{-ahP12g_m$`TIeK`SnaQgJJ54MApwi=)-DzM}2 z)UaW#Lt^i_4nHS->G>SVK^5*g(`Z}06y2kcl#3&rCa_0VBk2I9BJgp#VGkSO`Q8re z2lbq3OI6VJ~8GQyicm=t*}R6VfJfdTKmGt~HNg;@@L;$n6MziYlBNO;E5w=^8~ zH<(zeru#QQgs*DTU5Nh^Pw7}mZcNNd&L<<6M+?Q#`V#%&vZr3CV$rtbzq{gHI_IV$piaeTxwa0aUHYRZnY zrCW>~{>1jx6mnh3r)Ym-9TrxF{`CahkK3Y5!}1>*D1;uae>UZPEBu0feiO&w`FX#= z&AzYJNUn$lMlob;0o6(72y*kPr5besGh!&RrU9-BF&kK{A}nESBzZ47Dg-V}bT7te zAD3cvRpgRy8#=yEmfae1Qzyosl&f+k2DVZP9<98{mvMW64q9)tpr)C8UY(>-SE057 zX(edPR+XK#ZfgOxTe0yi%PH!T4-F-cx}!w!I$rK$`tBHk*6^F?&W zWz%q{9wTb@WpT&XpGWyx|#IFsRHWhIF}$F{!*bSjM352wt(=ZpV>LNfo5LVMYp zZ>|Wj`Ww-ki*}!?g|qaTJ|Ie4_gjOvUUcuxq>WT`D#V*OL#mXx?&WA zO1X=3MWA*@G^dpY!I8kb0ji2RpI(|IqpD7FI&Ne)nJ>Um^E;S~<8qRyjvRx4_MxqP z&`8?Fa%Fho;mNG!V>akz5J*sdx9F1?+$&(yQ*zTQysye!P7`>j%!v-X#8<~^J}^RR zPLP~Pu=kIIVapy)kcJ4|i~bqdpObpIE7?2woqN~iPqimZu3`vkL=+ufJHZZaL?v7L zOkr|PiTt9N+8D~-o*e;2n~IjADjNV3zgiqQLjVuH38WHsuJn-x#gL6F$n>9BzOtBf zTa^*rZLXO-3%49aMCcL;{-8n?D!DtY%(3g+2!+hOwf-CNfv9M`LSe3;>Z5~#luL8Q z7HLb7opVif?wmaRWweNyORYgb;Q`=Zzq_(ad!{nvPgxlB4bVABk7jwbVjnj^$l4(z zzaWkj#?ExK5p~^*Zuy=KDF)1k_#g^()}Jic(`8s7biypkY-d{vm-G+1O~W>wDfQBZ zQlJ-FHm9~iZG13p4;iQ_(FgB*F*6-+;Hv#1N7c|m7}HTC1XS{7U0Sh>w$-5$W?u+H znE082AnYr#d1s4*ex%i@Mt9EnHuG|ByJqSYnWuLL;=Zi#33d}@9q4=8UtI@x=F>km zvqc&G;px}>l0IVLMaHSrRqP3~2lm3JZ>^pIZLS|N8#W8ta*7PUAc%A}aHvJgi|4@f zA#{a2#TE(W=c1^Ht$XzJKADT@Kh}&zP{v65>3Q><@q8I1Kpa~VgkF4NHo$(IU7dYx z5&ZmueI9bb`jOK=TKWc_V?RTpgH#4b(Pj}2@ zb1nz7kb^rOmdG$!fzJ?pGdn-93e`7^a|}sW?_;=KLE}7S6A^}28>dlDMFcjR3MOh# zQlXRUeB(@sSO6<_AKerAy6sRX`rO22nW(-3kBSmI2FyLj5*u-bVt)BOSr?h zdsLn07G}jH;hGUO&A`NN5CtU;hL#0-9+~*Z*P-+F+)XJt+G&x(I7SLyS}_;(Gc3S{ z2r|`#f!`8t)6v;OAolv`m^N~QY`e&5{(cdui>9&iCbd-_6|H3HO0M15{E)OIY6W+x zUY4~@AI=}GULLYS{giogV#p}AJdmF%slHyLgVwhe&S3cSowTm+STqRAweH-UtQ|$! z`5LOdd#HIalNx0QyFJKOY|?bD3$9f2J-PaiC-ClShnZ_sadI4laydrATXy5MCW&K# zJC7+mHndo#v1vU=@t0*z!y3bAF2Ck$T8R6IH&Qy11TRNYU-h)IwYfWNRdFiAw4>52 zs~`%FUJ3kwgpRiI5jwl0z)NRsxThz3O9QYg8AMzXhXcS(h*(`h4*QCdQ&EXs;G$4* zJb|`uM)+Px6|qK^SMK)_`v(Krjdr~s4eQ#9)C-G_-*oZ4e;)vn+(`d_nBnE^j+CeG%diIDjJW$$e=27axPBe(k4+R#n0+h7o6(e$+(zmL-a{1WYHp!2S}_&V0{ zf;1OKWYf};cvIHF;Sb*_7TJv}63`tY@bUz+Ye1f1tdYTR(yM7SERn_9l%n5DlLNJB zdEkF{4=$l+*!Pbt@XY0ZkkbFa>qOqazf6R44ahMJUNdQdr(ufcpa}%}q3@#zvk5j-1i*-$*dOjZ zx6R4XNvGZ+#}8?aL4Ka;+nISl%wn5U=PyKZD5m#`_dh{{xQl%>V*mgE;eY@D>i=QT zpp}V-o1LSv6Roqmvx+hV0MI{F%{oG@Rb1Sm0Db|V0s#R0b4W=LfDEFC7g;?)4zS)Z z=?O>&S1ic~Ijbz@Y!;9iE*9~6*Ni0I9=Y6^`pL+HAkYOv(4JYig&3<;DvEc@e)yG! z{PqTMkBTVWv2TjYf4H5XQ>i2X=k>!u0;7s1DGZj%Dm*^Gtz5*A1|yr>$SNp-MfMoy z6x0=O6%0Q>+&rK9(TY$sg5dcC81~WEirL>$b)D?mjG5oUOit5Vkkjj~zydL@^z7VYgg*vbQ^ew5 zN%;TN>YcD!sT_p=n?qw%|EgJwLVsWD2^8}m0!KV3>Z2dD@LQ4D_%kycG>_0jUrQ7g zX%%x_IZK|qY})M(aY?wohoXq+By@*y-xGL%bp`#JE^C&HJQv(O=~Y*-z*$_dV8!Ug z&90<$ZElV|x32ImK*H{vaFKbfQ?eD2Ok?qo`mAVVfl^Icx}2Z|;Z~t7GBHxDt5FDf zuKHym#B278W<*i}_Rp>2Ee~4rGUqm7*5^P4-oSo{?D~?oU>)7=ycO%EvOp6lh4aSQ z=~vUQC%@1-b`_Xnoh4*K*i;N2^E@J8oj6wj-t5b{VO1(Jiu}W&BB4yR-`hDXp|ViI zd)4z6Fq7Ls1A7s=nbB#@>QiM=Y*8b75WUU&E&S4_$4`&jZ^tM-?y_QGVelEv=8UB^ zX|z_&4MpBox4}`FY|411Gdr9rqB#?fjy0bq*EmtV6r5+yI1e}rs#MEB zXY#_8JHG3B@Cw8%Xme=0F0_faSF3LBAVE+x zX}P-u4LTK}Kc1@R>D($>%G?kW>k8~*f~^Kfjjtj#VHG&+fIZ$huWm^L+SFF{ZNVYX zN%FkVf4fO5t)FUVdj$mwzixSeao4)&bKggZc;*I1`<#X9WBSe&=$5n+?UD$(XaT(s z3Q7>YI7D2An`2x00ppsp_rYup&NLkoODC*Jzv)e_^eTZ$!Pn3OYoN~LjJwBWB{w8S zT%DH-A0eii9iVP#)km&F)hqOKh2}YtowJ2(p32%cYS^lP5$Y}mIZ^p+O=p7)fr2e0 zPb8~X1jd?i;aQF?nW;+sMdJcIs(nv}H$Gp|(tO(cXF+wbYBEZ1^&5xJJjn-0%CI&h zoe3;DDM`NiZZFSa)%f9z_|sPus`>*GxqCuGlwP#`kPi#r%)r?y$XWk&MY0j_*^Iae zp{Wh;e8GJT31fw^VQl}ShbA)-q53m=wdbt*$tL?&qZYh&p{oqTvWqYnQxSsnxRruY zk~qCmp2Ey3T{--@#i+%JX+u|E48Yi@S{CZ(xD`a5&9Owz9;m<^-WbQQ`ovQLvt)8wS#M6-D;~i@ zCuv|9BJ>R~&2`c1k^~NIe##9r4cGepFn{{<@lamSn2Nd$lyb~QMYZhn64X-sCom1M zFrb4Ud7^ZQPO+r^lsYE#mC!B&NsnJjKc>uM9G{ta%Nn)2YH;fkbbV29p^v8jl^__ywWJEW;PR(qT zeQ>)AvZg;ro{X17f)KknsSTy3%7+-Df z@%`(l_)?q{u588Gr$qt)@Z$miQ2fsy75`mR^nW=l{=ox|#gX{U{f^R%R!<_9ns}Ke z(ml~{M8!2q(rQ4)<(7`2uFPiQuzkMbs-%#-{rOVG*0@eH;ehJKj$JQsAiizfpk613 za<;EfR%AQ7+^|sj`|@kb#EOMZvZ%C##RGCzwM3U%x}sF1qSCoi$CQlzY-maqk~g(e zo66=-iem_49-4?r{EDL@Mp+~UqMUO^N#01rYd zcVk6`KGCEiPkKuxfSJ-or5cX$vAE8WM60xoZ{29ypP+U1vl6P4jdfu&{Ow}qjREhP z>n6iOrW3r-Sd$A&mZk}4<8&Yk_^cowvKc#oVer9Lr>wKYvKbfHLID$GSP)H)oU(F& zQaWV^FgVZ^hLU9r`jj$D?m>tShr@u|zoeZ^O0`?c&W}!|ou`CdfABT&7>IB%%+=B3{pb1C-gziPO2ogri z$TvVkQr%<0ug-AA*DvEImhr3NNUxR%pTsWCsxeUF zCw>iUvz(*yVw89@Ups?lkS&LbkIV?#TLZPfi_8@}&-`^$pY_J*^xS@umAoej}#?X2wD|{BkOz*KVJVzcfT~qnx=oE`^lc@%B_2L zxsTb79wt#}9nORvN{I=YshfzlQVmwC(xxe(E-00b-o^-OxCY5=S*9d(f_wrkQA7=? zTrmTg9{i~0xlQym7#b70%&|veJwoqqy*kLs_AIW|P17H{?fHu_uzo%H;P-(p%PY&P z{|OCi+F9nnSAHvV_^A^%?(21gIJvX3bp7~13Tp*nUDBWcHIN{Ki}O%!TNYpaBt}cz zfE^yRMLDmkb=aZTA?>tTm?Q_)2~;?42bSA+yx=GBi@V=@o|~E4O!S?6Qv@f(%tsLJcw#@t4;bvPAR%VyL)q0eynIdw=#;6Ee#+f2c z!C&4XHA=5pgqeY+ED52TvUf77Ea0oxy&3uo^7z3{>=}Xe2zwjq-oh*z41qL2j)IZ4}l0Ejiq>0L;P^NfHkW5GBgG=stYiGFXZ3WZycx4|10;C z!3f2SN}WpD@~F(Cr;aCR12+5VlVcfFe>`GKaydouk*I$S34~ z|9c#=9!+Eeu#lJkQAMRZMFGyEL2(5~wNUymtzlx}FgiSUrBEudaGiQ+-SPv{PvLD` zpinlrR2!UY!Ee9?czYW3VgBA_czyeOWfzB}zWeIk<%?DQ&9F-@$x~i0SHRugLB7(6 zxoF_@pt5^7L}im}1`22K26%@q7~h}nv!@)qr2&Dc03K8Q)vDcGyk~AV>F-td6th`< zD9TI_xb(M~l{c0A81&&x_XE|W`}WLYAY}j;=w7wcTOx9l z^q6L?M32{YO?Gs605}z?@A)qKf;)PBGq_r%o*~!#Ne+ zYrpF(%V@*)A;wBE3zc7ThaS# zLtQju48`+12iU#9dR|VDY9evgds#RJ;>%HY<`pwwtn~54hM-q4;1a=ld?CJpC4)k1 z94j8-=TmciF2Ko!_)>Pc24Fz1X=s!`#ImHhWhxC*ih>`v!^ODLdzg97rsVC;;zGg* zNajg*z$SDb+Al!%G(M96Z3`kZH zASKw5cTFAx?x$yEY=s%TE+$uBLJSPz8(RinA^)~_Gq<6WWyS3&29Q#aNgS2se*B0S zY=BYMWM*of3#FggKP|qa4p5J89qo8KfIa7bbrn>A{r=65?+O1PV@LdZpb9=aBEQ&R ziw|^07CRh)J!iT7?8)^=hb$84*9Kwyjzki+)gS1>Run_sg z^5j`gJ)%Bb0>$rV!QH45T_y5v zcN2RF2+32=k8_xM_-c(x76%tMCtsJh>%Q*OJnGgP#0@3kRwey;ScCbz3~rD`lzX6t zHk2p)ZhB2F=VbPIU(ldTq*S?~Lf-*rXakb5exyI;?QZ^m>qT~jPAFA9c-G0bYe4Tk z(*lNlwZ?Gl2ypnyV?n~Li{KXu5eOsv4i80$vg`R%2FQQn#HQtMzuQ>aWb9g!9AQ`= zRS^`w<8Ze{1vL4qmM-xMp%n}kN@=wLP~xQ|DKWBa(kv28Mk0s4#Fgq)6**ScaWxcJ z%GmY_>?PjNiuj&gr6|&T;x_DG6d^VFF-g!WaotE+T1U1jOEY?3IAA7T37IPq3pWZv z=re#z?9TcC6Di166wKsr2_i@VBYL+FhXT_2aTIY9uIvOJxCFY-!G(82_Os@C=3O}+ z24BvtlI5UR!&+WR>;vG_=?W2a+bTVq(Tf$Ma?2L!*ZjoGT|&3P;~yi9jEEy>7{dpR z?W0uD4KxRUEYT35{_NKbQlElq`PH+dSo}mfev36Xm5ks(Hy%^C{@!0&Uehw8=Ru*l zmRFVb4CyhNpw{nc6%nAsUMSwxwx~1-ou>t^DvcG{VKmR$=c_$|*$2@kgvhY)%2}mK zxE2YEs}(5jtqe7x$7qFKnF;mCkNA#iy)zzKvqfreq^q`4=F^yD;+5>Dz16OZ0EE*- z^6t-Nbv?y=+9(DPH|Pn8=A}E`i_pr}K9)p-RU(A_I z`u?C!7lLjV)tysqfA&Z0BT<;4=E~UaeRztGljr8Cwcq&1Sbm1#@+KKbaO2s5 z=G9G*cj0#r`i^tPI}}(@YE1Y`x2H(i>oy6%5Z|^yijvM|ciquuce(Y~h^ok|A_-iL zQ^RX}i%V5M8|D{-%ZG6%Lbzc2gK)3-s$B-LJN?p20Ho05Z&epD((x!-#J$JstEZ9e z*|M9Roo(GX(LX+YJUeK1;jWJM@Rbzwq1GI1+;|i$yM}FP%|1YQo!qHeM?(e7t=1z? z#V1sZsjx}?&x-+__SweFE2x$_)D?&U$$@B~_syu-hGkpTN3y`{W^?GmtG0DPgJh*HNetgO3+*~VlW^i zZ8`!G-3A2%vPX3~iFz*uX7wOXqu64=a)PCF!NL(=hVpZzOih+H2Zz!C{Do;r%3-~c zvtu0(ZtEc(hU7k?+#sQSy z8@AMN9K8V7Lr!WuwV52VR;qIjMcK~L$3F~=l;%-{*%>I~h#@{_4c^%;MWylV!WO*I z>E?n{QHTSlld_)tqFpF~HjV_5$uv&A-LIqje&wnI@IIO_+^*SuQZYV0Gm}`E*LHvP zIvquXI`Vd06D(cQA;3mf%6YNJL#H8>9J9lep_tF@j=UGw8_5p2M4)i4v_Unn8k|@R z$B0YLy25Dvvc-zj4<0=53t@<=1G$tp+$&&q>dAvq=o5u1Bs(EueO#nBw0wj%sna zJaIDK6tdrjAuW-y8Fb2Mytc%QRMB~_B4Wq8z);aR45)!b(K ziF-z`OIJ92Di|9iocpZ_Tb)Rz*q>6s5`a87H#c0aHJ(}>NkzVpUrr-!Na>4kX6$}Y z7DF`F9v&ML0QqNS!+ljYbF!2=s*$(zU=r6{VaJam6Vi1kD`7^Exg2^W!llz#$_&j4 zAmr3pEZnp1H&pHBI!hIgHdQPh0~|I)QSoVzPEJ>5O0`SMM5z};aOoWC>t)r~zAqgx zP(D(26!AFlIgF!OR})RU<@#W*88bCwJ&Iz;fo)JiE?KC03hj!etP_m9`AFR#O@P;}6ONIQ^2-}?C)aOQl>4<&%d=30AXx{)= z?4CnCMemh+s9mKd4xx($$9NsW?bn?^y36oSl0tAj1Gew>3i-ZKS}I>#z1ByvVHlIx zAE}tpk+u>wJpSOoAB$+)j)FFsNV)A_jU#E@qX9c>i?^Fr5*{z4hoCzvIoI+NpT9Q! zxtIx;@4UYF`@(@Zo_M3?g#!AD5Hk1C@mPItgmMN&(_WfhQL%JuN?n%k47uY~dgUVK z5p?S2ccHNkzfXR;Vh}dFT8F=OZM-}=eF_Jln!OA?6Em8!nrwaOCjO|M7c2vvY#pW9 zVz?Yo?nWMB`GwMriit&MuXQBEBmmQ~D>QFRozR2z(gDBS*%`v1l0;uz|D5R5j zGP&@2vc1y-GC#{LquaBydq=M}+pA1lcQKs273(=n(BrXg5)5NSc3ux(5s0C+xjDBw zxj4Cf+>yBlV!B7ejK^c1d1s+y4(=yym@Iv3+n2IfCZ2u%+BJ2U6@o<{H^|JPYCu|B zAmP5DeSg$VH{Zmr92){N)c3pKUyFl>5KK^t;R5a23f&;b+hFW?kL$TIWq#5=fI^jf zc%CDr0hiyUpO9a(QJ9AAw)O++5E~fEld7?f{T|KT8Bwbru;&<3ed40H3(Px^E;yB= zw40UV{DJwOkvqSw@+_2J000SpyXt>9a;GRFAS@&DKXPaPOZ1K>UO;Y$9y;Xa4J9t8 z)lwSB78|1;Dl;B*YjIQu#sZOqw&>Gyi(z~q(ddsC-K;Xo^GkcM$es7;aNMa8X>$ez z`&I0EsW67k6nSmSL5HXc#>0X`0PFe*Lh1)#M1CDIluUC0EphnYP`0(JdDtBIm_E-W zIBa}uwBm=wM4^&P%H5*`Zd21abc1i1sOl)UgHXX7O>38$HHCaD?yS&N$ACv@8&*&s zQ(w_2tmm8EyYWl&slD;p57Ryl(sZOhPLPAxVZw#Mq|6!qJkroIm#JfyMKWJuXEq z&x7gzEya2AHxtJPr-=&z3;^K!S9ekQKRijI|D6p*p6!3l#^tDN+G4T6`|Q@CSNS(o zsiz(R*cdFs%5VObngf=%<5vPkc3Ux&Nq|bUazkR@-Pt#B(O4Hyu$F^3{omdRk^s3PQSqnhpBd zwt~u|+SGi?uZEk=q$IdZejThT4Y_KHkKB&pIoC34SWoC^nBX3V2pZuG;Q0pU=q4F# z2P|fChpqc_kJT+25-Q=oN?o$I&Gq_a0-7cF&E&Wu->d{9;4n_TFVK!60sq{LfBRYK zPo>i~ss&({bOwyd!sPZKIuJt)B1$ztV*)#-@th;C%}O#T7j?0?Y?2xiHjs;$Hhoni z-zEhlfp`H{epVHDa9VG51$9ZuW~wFZmm)5@}CU1I&8_ z8d~L79=IVlXip%E(%d;Hy3KM9xs+VzD3bhZJes^^^Y3|A@C)66O)hu-$N>9#Yl9JG z4`Kel&CMlRf|~B?X3FBK z)aKj)XBwV(f_^fy-=qXdIf->{OMb1kz3vPbfl$nW6N?-1$8UST@tvA)Zoq;L&XAv^ zy>ET(VP}ygQtUe9_TEn@kLP0nxlQA|K0ND0FupFj;iO`5rCCv<$K<5OT&^~Zh0&qt zEQfA8!~}d6w8mH@AKAmelda}hL^U#pHI-On2&bLU74oi7OdDW`vfwV`N6y<5VG{%> zpdHLP@q@uySsW9AYHQ}c}nS94jzsj-Z|s<8zppP{XW%#rGK$WDLFQ?kvcE>+&l9t- ziYX$nel%Q!&XbT4N%L(gs1?5`EQyLRZ01bPA7Ak#q}0XwpH`p-9??q~+~SW5F|h9(0KdmSMd34H@U{nChxE7gHZ)Ih;J z_sBz%O}6haP=Szr!HTKwbMrPU#pbkpNA$)koqnmI|JuRZom|;hvw~`AFcv#5Zqs$0 z4K|j-JRrl~W!ju{_c$?$KkP**HxzcV3h6WGLD515Nuz&z2z&E}t?R`5lMm>ou0dR9 zY@`NeJ4VE5qgmySYi8nS`el29B~g6f@rIIw>b88vJPfFF9R)N5O8c~LYB4ML!E-Zo zKia*?a177p@dDEJ5&zu*uHpkW)Z)BWm*>hO&EWt_6_nm+T0b4x*59TZxT$5%9C<63 z_qEOQ+(*k`$QnIkdJA)VJimoIZzplR<6KILzx4A@fWY59=x=M%?-Tv!%l{c<{-fKH zyae4p;T8%ERw}Lk4!8K%5jLsYBZ@h$v9R>ljQYO-5RLz|8UKa=sf{vM`QH#A@dL1d z^zg#7$5fe*g=_4aAs@l_SWNvJT#_@|$s zD3maKV7Wa(J=~P|#Vq?Ah`?tv>Q3gcjo0`q;@K2amIk+Jn6H0>oq~zDFtnY2c?fDf z?+Gk`kYG9TCDMmYl0PQ=V`WCVn4yXw2(IqaI{eaK!eqEEfr706GKaY=rIGq7xF*y6 z%gy$BJ)+7v^_b3o-5l|^>;0$QY;9raXyE8UYwu`hZ{p}|VdC`9`9F#_|KH}HC0Ys+ zhyWS*H--q@gZqtYkTx&on`W4OvCPZOtV22xuifi3caPu;)$s zV+zaMR^bix60_#}Qz7anWIEF#b@kA(SFgm0Ie8`w zbd^)#3eV@COlAMI^qJ!S=h9dBPdmfO(dfUH|3I*n%IM$zf1!>3H80u*J)-NLYkSv! zEknltPv7AF{)PWAMM+-b|A2Mk#;C@leMNx1$z;f$1F&{~D2eqGG+YE) z3AOnUrvdZ<%PSV0hrW%t(QTpGT7&Q~Lcv(o(jh_|Za)y-8-jhOfFz-AnVjw*JTHJ; z_}U-b#9;jACYmTky5q>f%rI$wCJ~e!cFZ#wsYb|jG{89j=X)CWgEP_@MM0T#ainXc z64t>t1Jrn8OhCcjMjpTT*$H#8w&QR)_x8S(`P+iUV4$5N+!Xc>BWM--_DE z&Ez(lq#>LRfPoOG=|OJ-PX>hW{8-0KA#^ifd;2Yh z(ycgh_vrx&u8ms1!JM?|PxTIvS+ORP8T#t1l^*tQfm(H@tDls^tXQ*m;Au2*wF@k* zW9MuOripbT#VZmA<#z16_9tvHGr+a=Wgf*R7*9Queb7&_R| zox(v1K}R^S=4~=z=!qQDR;WyMQ`1oNk< zB&N=0X-yY(O^Th;Nay|9qA{vU4+&>*K|m6yQChnSqWi@h#=PHH^{YLsUFZ zBfLEn51Yxv#)Ad|^6As-%|I542qsdX1RJW|T*6SiAcgoVkraI^B6K8~qFiLKD(>{Y z-uC2<$;+;O6HSO}zbnLp3E?K=6k|Yp@?OlSR&OjI^0)}YRzua+GB(T30b$(QJSQPJ z%sw80o=uO=IOkhX7Vk}Z`_`u>7_sZ;ux$O4xtX06O3^wjcm#5iv8IlaXzF+lthfZs zn222#$Hq_V)KEMbk{!1IKLA=fE3SL5|Si_GOmMV7+*)J)2IIjw}7$DL94i+n6YvyORu%x%!B(6r@mjqs#E%X;6H-_wS zkv2WJ&sx-19iH1T%{{oM{+dChWnb%xIiqrU23hrZkzXtD^t_w->>$9Z23$FD z(r%XQdHEk=Zs7jc4BAsKiJIB~$ov0H>P z5!;pk-8Cdo_f>bPAztimD|5cTLR#bKbx$12I`oqoY~=$d7qgnOb)U8)oSdxIXBwHc zOfWh*EKzJU<5KB_=){PsXhVCb&UsKryL$TjGO(V-PZkn9thVG*X;Ga4Jum<)SYokj zv^uq4%$w9~pJQ1+j!l2eA1b$mOMSzqZ*+Z;Zu>&58NT9TntF~+LuCU-#RbUvv2p-j z7zqNr`NIi`2y2>{xK~OqY8i0}3DB^F)+;->QY5q>Poc9OmskeLZZy;pR(PHT3vuuV z-Si9ez1o$|$@RiE@_&4`3{ zGx#WJDi01e61ssvn(63iYZ_JuF$!;w33#9}cfr5G7jv18Vc-&a0WQFfr!ybeUdDI&b*Gjh@0wff_% z1BMl9wCWU)JgM>G6ofJ}%mbGJ_b#pByyZO1=PH+k^pkD#4Kvxg?WGZV@nW{q{5wh?gwMwAky=l zTSoSW)JU?`@rjFEv-~N;*W(>VKr^;bxYLr3a84S8*ICLjL4Cub^VAoBF=JL6xUWt& z@uOd>ixT9MZ(s+krnswsC_TEyZvj+g@XbXzf@&vExD!=Y+1v25CZ z&UROqsZ~AGElu`BYuJ=bn1f9`Xo@PwXMnr$$-x6@Aa%m$(GgZWMr zOi;0iRF*~FXevuIq`))WJ*dq2f{~gCB$lKKRQLsS(;C4eItxS!ohX?9QtVI|HIVun zUR0%3x9RAfUT<8bT|p0AG`t#KJRu1fmVu?Ok(hig5I8i!6r%C+_;gt=CZyTo6rUcF z16B?GSo%DId<2-B3kdGMBS=>oKg`&t825qes$q-FIl$kUtX6L%uGy!-OQ) zQ3C|`wbNOh_U4<)y^e$6RR)TYi(uH7Tk@!7Ch?e|as^RT$w&i)eYV3Oy2a_Qk_=_4 zC3X5_Yd)6Mu9@I)1o@GN2x8TvrP5@EkkbW(bPE5n;1iNVYHPXY(rL#rq3&lr7w5G7 zwK|B9@!vwUd5O@5J->hgrcYp*0mRNRwZ(l1-oc+Qy84X$@$D_UI=P03V0KfW(%T-K zA?=j+EVP-sScT$CLk|9 zcSZ=&G!;9#J9Ordu83tb9OVsOGJ)R^1S-$O5Dv1NweCk}k!iM$*^u4UN;Kw%QNDt= zd2^~vd@%X#UoK8LNjQKeSonP4}6g zVV_JsQ2E!4$|l3!yG~(;RIA>@XC)Q3Y_PWAduXSyOO06N0>u*UHiM)`D^guP9Z^4P z)O1GZBWdcTOK=rS*1sc~9G-DlXjl|ElUH%r<@ISXv2_zqXL`SNi%;H#cOuH8cJ2{> z;eqDJHmzdLxj3|L^9E6O5cb`E{x{^KrCOh8ARnxp3IYIt73+Vx`ryCazW-nR;~0UJ z%3i|1-M^PLJ)Aa2QGT*Mk+DohNlY@!4&95#Y3M}KZ!!Jv72?2v5Ty`V!0XwanU~#e zZmtf91teUPGE^my_pf@}ZgyT=+Z^7*zLVD}vh3KgsGL|EQ@8Fo_<^swy1ZsJ?EqCZ zR5iNREgLajy1iUcI4?YzA>wO}KT~??!mEyh4%en?_Y}|4ivL9FN|vbdLh2 zVa)JsI?TG^2)dyK7;vOEnSyE=@?>IL^G~>`4b<#AOtEF`e_Ssx@+W3oGj2JO(E~~; zs%x;mXps1WlW7J!E22ncY}IER(_==3t<|7dZ_(o`$9)8t(L^Z1JfymsBa+QSn`&uE z)e@0|tGo)cJrY1VXc19rtv0K^u(Tcv4(qhn)A%VFm5MB(835$V@fU1jLM++yoH%Wg z5~99@5UO&pjxcLliM_)R#zZXJv0by$C6bU=3(gJ7hRO2y#7ykP+uQjePu!WjCLZ;1yR5nHw2 z0<{N&cwK7CRd>-jT*^OG5iFLbJ;3R>j3dWPFP(Xr&|}vp)rQ_AVSeOK)s?O~g<@E` zG5!pfrd4yj4f`sQ0vROik7aN!F|(>wdLv3CKcfo;Dj zS7RtBh4yz5Qyvy<^Z^!cDvAF7REp7|e1J&k0p6y~a#`+J=)-kUVeL{iQ?dak1r27; zkWHQ_iEIfy+&9)8+wgDL_wuH{s^r3q0O?wV7edi~E^CsjyuVn^){zklDyT%r*ny{Z z^(rdRh6j8W(=pLD3c7CpxRA$}6%a>RB*f*@h5-SWawQWk+03I_gs3Rz%b8N~UcqnR zl&j|>->4t$tSn4$q+O;^#lHd!dL#=6aA8ai7Ju`=GC=jwvl>b+8mQ+28w6^XaQlD+9!5T8^vqrnG>s#MaUmqQ;quajX3aG!O?lr`t zhI1Hd&KRt|nmLj1Bv2Lj9vg2+&@+|vaS8;%;>+|l;mD4E9H@8uvNGMEYi(J>#9soZ zCJuQ&(V16ASAR|*uO&g6w%}gq0t^<`by6O_68vzNgCw|&O-m5*KGJM`!+8> zYbvOWOX-Dl3sC^O41;=h!h#HzgD$;vYTBt~`*{cHFq%ZT6G#3=-8jM(T(&nx^q2G< z1|+n|)8_iL4TBCU*W0+hr+RS9&iW&mA^!aX-O+$t8%e$)KKe;RWdzfRd>p@wscq(T2(+Qg}*&pZT`Su zUmMT07m5VKkq_zOi95I#%*bglP{$3l$!ZP8L$Z)=R!uZYK}3YZ^~}R$3k^kJXte0M z2I>Xy>gr9^Ze~cJh}GDe$D$G7nPERI+>zHuuhWO^(n6(UhE`7r(MqQ#rGDcE0a{%m z$J}1USP}6n6=Uwb4+Sn7#m3XvxRQeTUOtM0?x3J&Oy~n0?#hU}IqrVWmlQ6C2bXiq z{S^DKz$rOQ_7@y7QMjMR4F@BjjvOg({-e#3u9?}L9?Dtq;DT&>jVQr+k+G(&ItdW3 z?P1Bj(+X!&_kLL7?1QJ5&0WE!q=idv!6v6@QUUmU zQFAZ~PqoF+^X`Re$?7o23T;bfcs!%kqm*G$@WaXLC-Yh>O_q1AMKC$ zUPTS{fhDE}25s&7hLtX5Wt*9A%I6`e7B1X#fX1e&7x4>~^}gd!508qzWiNB~qqb*( zRnhI2p;x37z~Q)8f{-F1aO2i!{}76fQB8E(fkJs-Q!`o-t^JuG_!Oi}s-%_~oZl`f zNtCSBm)H#{Fx6O-#nHKVTopLdaVj6t6@md?{F}eP$O501{9rqxjjNBIQ!G=L&F!VC zhq;&4n~6CT5{k@Q9fp4JdXBk1i{7+nzQ}CdqEXHx3J{5?Jyw z3EOyyT`@j+zIJTqyQBdI^4!R}X@}Xl4SXq}M&KPEx{HTcR_%NO=C&<0M0PHblwNPg z+tf39s?r0AcH5)XgD7@PNY8fe>k3|umP8_B$G5fa(BHtCL?Q_Dbk(X+76i%WvA4sY z{0hU>`;$J&=|e1AeZ4132T!W;)y)qQHRtEuSzf*;(FOAYt(CU%#|t}RI+?;!PgKqtd%=%% z)c0$l<4dsZVW#G^|9ZI?ALi96fTs5@%~ut08nx*njaBZvQ3++V9^lavwaA`|*^Z?I z8*gMO*Dsp56SiETb_TI_pqn)*-=j;T>p5+X2+zDuv3pnt5usHOG3k6z#c7l6l6W?9;Um`&@a& z>Rer79VbHgm$Xp;)GtXq&bLS;%dyvFgR!A?p+MDD+YDhKHR9-t)b#k4MfZxRb|73AB4 z;*^iIJZrZYS(WEe=V7Wpo8eb9W_ma;sX2X>j0y^T8Cc|^BeKupw&GR6Ut96Rha!lX zARPtDw6tp{#Y95DYKeq%qD$tu??C{pg*uwwchS;f$K!V-jV_SyC`-polO6q@f7YKx z0vAI;gi2dl0f)Z*&BaH>7U7uFr>7Z;o~$XSO$UqxRr5Zwmgg5!Gz%j-Z|f-y$T&++ z>NG@E8i=i`$(Jp*8G5;6uc=k9RWm6m$Oyd@Y)C?P3TlND6eS7z>Q}HJBn{~1a_Tb} zuX;Vhb~_p6otR;MF8-XPJ@6#A@}J>|S>WV%qmq9el3xKOw*i{iW0w%gc1@Uz-GvA7JeQJ`NaFhB;P0t%&x4dUa14&B8C1tFIU5%~36 z$w1y;5gxRECPa`02?8Tbjs_3sh&-l(yDQ<(as>vD?U5EchXF!uaQvA-ayocD_meml zJ41@H`>83Q$O0Eixa04uw=~Up_$v9k58R7-iZx&wE&>MSUpQAjBSIk3#H(jYrM5zazk`E?r&a!FAtd$)a;Bccy!3^9gpGF$#qOj4=5%)d?l^T2$b}CH9ph zI9|}=TF#37!+_;K#x^qVuk6TT*vsz{9mzNGP+69o%9f(iU%;i}X9Ynkx#T*{>OH>V zr}@jJS@r4Q@P%A4+bom_YB+vju$$BXt+mU4%m>MZX43r~RhZTBa^?UP7*0mA(FI`B_u`(M|=4a;l#fv8nQPP4zbdG#?Yg? z9=h$aM_DgNKB)8)7(L%;*dh;>qJEP&Sv5Z%mlnAt#M!-y?1hjw9QiD)#E)&MD_QF^ z%z*f4|7)zi;M#pa#i#-5`A7No+s zc_M;aUy3z&y|SI>BSx^w1l6MW=RBg@>u zn-zVa)-SI#Kf@Ohjys3A6-PqcIg@1E-`O?eYXnZQ6vTOmn^3Tl&qqM^AxS0wL6~;# zRbz@i_CA$34##-36~luY1N)u0ks*fMbUrbD8y?D85n3*4s92RC=~#&jH4(6eDMsej zm}KN|CdwRn*~5>2@u`ObSX>qat!S@86~uOykTjTwt&n8qw1!rkyP&Zg$T@U0TY$Wc zewmO+GZCG8MU%GmqBBcpD|?zTZGB_Qk!b%TAfsARw=?m=0is34v-HLrc^@)MAmaD- z)CC@iCIa$^z57G!c`%?@xb zRa@77j)~SIq@~=~?gOv&%`z0fv(A%B+7|cSy~x$eNLFzZG20RDUqQeIDdAF|U}($l z6{p>H;bP7)i5955)?!!U;)y5oWQ(~bxYNSwq8r;b1+pWsP1&sSB3q4)%cbAC>RNR> z5n)N4-ZrTZl)uVwqGqh0%~sR_^Q)l4Hd$EJMuk-H$T540ag^iiUuEPz34Nb;x^p6T z(ZF(%c*vteJ_7vZw7bwQz#&EeztEgzIj?7Ukq8n@d$aihLz-3nK~9U*lk1@7z(3h> z8yyjF`}GboSq`Cz6^#?A)7@zSph_e6n$4??7P^{EjU^2RhTT~_#Ubem8iuVH^FvUu zDJH`!c)Fp(Z-=Rt${-+I7c~<2W0dy8hkMaAYFARASH&bp(sA~29>*Fo89jtQz>P30 zo!?%VImUm`J02~rnM?&J{%W57h6AzS@R7*+JofYL`e{rCR~*{9(1m-{@O#7}{OQ@L z#ldj*vEI9C2w2H7BFZVM>gMQ_uJUm%c$QO-z%~2*6-E0sTX@L53)i+)Rz~Z0H!P$R z6w}^-i2?PKg15C;KulsUScUEJ>?1JSYgNs4(UO6%cXPMgH*6Ng%Vl?~ky5w&6F)ZP zkd@U-RzL}O_Kq>z5V^wXZAy|W&3Blh(rn^2Ny1QNv^rz6d!MZNu0XMlEg@qDv3ozk zf>G&%%kx=my8nk2%kJAHe4TR8+Ju424pCa;WBe@!3bjYG1=f-l3S@Qm5k4DuZ1>)l zXIc;X_ky_?WTx!m^??jK3k|H}9N17q+v=l%aRt^Ysrz5f?h z?jIxTkC=UVU*l|)F|V>qRRgdaqk$U`L|^Wr)}G|ZQHhO+jgb1(zb0? z+P1UOthC?k?&*7{XL{zoH=_SNpPuuJcs{H+5ohmp*52#ve=9-neuLQm&w-$P?+66I zoM(pEXbD1vGQ@XV03HBW(~T3SHgZCbN^@0Ml@^M${$D|eNNYw zZKa4oLX-4uZb6uFfQ}F@CnBsJK?sdDWV2buF2t?F$vp1*y{R@|{+h-fyJEl^a&uo& zR^3vS?^W0c55tjZi|E7BFos*%OsdJc>gThV^PqZJUqY$sRB?6P73WiK7JFtQOLq}Ik?l%&vzRd_GTSZ4T||Ok z12`bUnYZ`>uXY67Lro^`~=)CU|v5~#8n!jpy&D_I+LB}eFz z)P6Si^X6C)E&w`|H)a@P4uOzy7#+v+21CXOO=bW%NWid-`QmY^8aDQdcav47ajyA# zMv((kY;__>6KY8OAc2@^m{j+N%$%>#$w|qwSjup*qwVSw21pZ3XQeh;lbwu(K&|0= zn49+&L%zH9qaDo$M4!Y#2c@2HtTFhsjSuvBrztX!oZ^c@E(dk?PV-LaS6%^$vPLxc*lvllEZ zyN8j_Nn;Y2l1sbG^UA#9khn7}Yw;o-4xEws2S!@&0P0>inH1%9^L|~??w;11*m*5_Qo`B>-&Bll8H2a*}R3@{aF>_y_4>lky0=kj&_J z+A?Bzd{F?rgLCU*Gxhh@9I8L5CO1p?T|y1^3ZTX~%v) zy6a{)6-L+2G%%_TwO0t6nUh8=GVa3S&V1Iy(D*ZU8X5eK&z0^g&DQL;Fj+m{xxiAz z<@51#tTxIH`%W|BT6+b0*)^#^&#*f@xO`sxw|hYQp}52{jiD%g7X{RW-r@c<0g`pr z51I@Kz?4MgRLIJKh|eKu1( zVk5Uzf|o5VgZC(jP0fNMpkfIE4d2C-w>TEF65`z*jk3N)dG~UR@xd5vTFtNA^8bkR z<>4ivtgY7R9@owuvYA_#duq8;K=a~Jx>hSJM{B`6SLavU#?vdi6kFH?tY`-b6}%|0 zw=9Btz;$8S=(5X8#3JxeHHBfgcA`;szKSW?a-+Mp#np@Um7SowzqEL8YQb9wZzu%P z__L?9CixasO*?gZdL$`+UFPd3tz9ftC#KH4FhB>4P<2*_-(Bc#Tj<>^jp7VPct)Un zqF~xHQ$^>I4B0Gi0spCG(PfFouPt^i=9sv2qB!_sv~1SYl-z``>GIf7(D;VRkK_o{ zI3Hcy+i}nITLvL0fTDEAN->~O7TJp1<05I|wBD&E!H=ppPtFQZ0+*E^wBPfy9nx0p z$^M!txEq#v6*~hkdri7EF{sI z4Vv%MO&2m+A}+pTH(9KZ$Q^jbeqLh|1jOoFB?$tMRY}1QER{-Kn*C#8Dgg4tQ)pbO z7Iikv%oQ}t@VgWFBTG45yQQXlD2VvZt+yT)mT6|8VD#+5vAWeOb|!6>QdLnO%^Yf8 zPr?l(h3<4h9d;SAkLeq0w;rh&dOzVOl=Yl8)b5WJZRmwNW@}WAvd>PkdS=-wRYUFD z(h2Ao+rzz_=WNhZv-`T^%M(6)RncBte?o7w7`j*{jAWrokSS1ZL7|L9p#6fc*ayWI zPrvnvIgqLu#`ejszSt(|8xVjJz^u1}i=;wIh|F8^ow|i}UV_h{CiF5>k^|YL*Ih?% z0W79$l1agCwC!;s;pLllBYbEohF}s(K>SD{k&_S5#QJF1`(tLPoMKOHk*PSAzx!RO zZPVyUt`;Ke`CvTo)$An6j60Y7Je551ljq-Vu!U*w=#aDfG(J$L8<}9|8JlBW zhziCjd#jUTJJp$@9OueLRnOmbqa@;{FE9$LZffF`z3ACKU3)5) zd6D+aAX{O}i2UOJ0GQ5bvP*J5BB!2<-UL8f&apE z{zd}77yq@7jr}X-GW9UDb+9pY{x|ORFC-`RKkt71H$=aT{v!$euWifxkBF2_B<;-X z{|#8(Hz@Rk|CF8nofI+(VM$JWlfn=j007JXdQ$ket@IT@(f326P9C`fmq;(`^J9f+C$O&g!Eb(g_PjVUR*%8o^j zxIqfPNmETg-7-6clK{kU>gub83e>kifhj8ULiHPqb?iOo;sH+kQ8W?`Uc36kcekcb zH$p}>aiH9g#qRfvTgK0NMF)T^CFB@d6K-K`5ho}MXN5Vgbg*#ieAX{7fXQ1681kt) z8O13pj7J*bwVj=}a(*>wVpL!6@eNCvJDV?OdgIBtv7 zyl!_J(2I!#&`X$V5ggEs-Br*&?uISCDgc@__IH5bn&J~iI})C}uo@)0f`|mpp@b=) z0r~3E+^--y8FL<-Uy=!#$>D21m=9CQN!x5!`LRLhcYErJpZYd90Wy^F>Ss@@Fi1pi zps_4dEtMG;tK0I3vXwKrP&u(VtXX-07_NTxb@hwk4NdHc%7MWnfN!2lKUIEJKe@vG zNeN=%V3vb`sq4##5^i#b-#dut3XE5;J%bBfL`L-A)5k{r_?3L5w212Rll07wsA`g) zoBkZ#(L1(J6N->1wp50**f~?vgqAI{l7$}x6SCa!93)1VIk3PaH6!7T-ZyVIZ{spi z{TCn~Qw7-%p8(>~R_>)cQhge1RHq&1(!fM0zB}q}{kQGf!3zjd2Lw+v)aVG`h{Fpz zTay?@ru(o_41RK^1QvzU%_lC3Y2J`u-Zxz0O?0pxCUCa)WD6&D1Hba&p)beYg2+@< zB{q<0P#zIykGk1jsNE)GDvu%S!}@Z zp=Q(UN;q1o)G}#H{I*JN0HXUZaIaEYJA&ru_z(cT2Wh$iBKeQq&oOLGlavW<2ywbh z;=;!?3l+2w^N1!{m4=HK*}0*2JZn94hW!cu9^qKST*|5jc<&z}dqRseDmn|PY?^l$ zX3nx&jw%>^thYG7me_wP2NWi5{sVEii1$i7!8T}sNLy0bAvIwpX2$D8`y5R7By|$)keH;~6yXN#fdi7}yjJsnMM$ zWj+DD=ff4U(?rRT1ZaqugT5pSo{-#HsYag1=FyK3OUIh}Y!^~e@Qt-1*We+_2H#yQzk!B&GNt0^mFJ?A{rVHx* zs@`bs!cSGe4X*ZK6#Dcb0(lJtACHy2IF^Az&;>FXC3=+zV%LpcYj7xY`YFKrGrzg5 zj&gmi;4MSumP65Iy4RCl-)PsG{`Vlu7q|CDj7yL;Sm)g=^*Njlxuw_4=);((Emvc7 z{+rXy;N7hO5Tx@TOAlVY&iBGA5n1h$LMI@K$m6A@PXRW%@p|1U*v&+_sFS&!f_`Fk zgmA*ITQ)cyCrCb(#MM>C?WjP}rf$K0OkYg(XxYvLu+QctC(nEtEJJ;(fS!=fg7yBohYV4vlf!zVta#zYCY67F5iGi(9BqVkS{Qv!n!;aE+eZMdqurfNu+_K3Zk|^758V=|T1NA-E@4$+PqT z_we>FwfZy6jE#89*;hio5ioA*?c)3RGdQ}LYT-fpY*10E{@J}25|-CsS% zG_*Tz^m^-})bUKHD$$Shc6pcY&4JZ&;9`f9dcYsW9f%9uf3%hF)NN3%=#1HnzzbOd z(cP(JnRc4)ZKWT&P5)qtbJQ6ZO2ArLfnci+U}_oA?nj-VV1ipsW0?-|9>l`pGosgh zn+(}vTz$rD_AAghqeCGo+4~pJ-?hO1m6+=Ng>1{r+|=cNqNo3m1(xg4&q{qildJO0 z1kL|)T>pyhKX5>s#Q%+^HmmN)V+kVo_4XP?!Q(`VZZyea|M~@io;hm;av*Fu>coC* z%j0%>rAOKPex1F>i$F`}tDv`v&+NS8b2oL-4|wlTB6yszlh>G_PUWgZ?SKUn1tV3S z5Eq*h7@(878uwTvH9;lJfu-kThd#0au1SQ0FA5IMa3QEQ%Bexa=*o~rCDq&jM^(N# z5_#7;=&%;LSBEURjc>DT_|;CxT^HvtS%94MBa^Roa~5Bqf*KuuPC~I|_5Gpo^Z9Mr zGB{w^VvwS!qn-fuu(%F%GJ>r!=8?ID9gH)~e%{H6Y5ktsL^fJCRU z4b&YGA!Fd#%Gdkt(>ok4oo5JIN_6IjRMaotw1nvh3$1`L4}5l?+l{L<>x;pc!v_C( zV!2>zEdwuTPRHHg=R*!JxZBFz?bOGtnte3@AXdy+*a5LARLPS-{1?0M%o8^qVjPFxrB zW9{gA^?KFsfM(2{-%6t`(w;9&hbD%+U>oI1#Am&2!N4!0hB&=r?YqQ#?V?~IoHU!X$ zRHmerToQ?0Y=U#4waeboucr!mIP_{;q=tV2CMhhwqer&go{46N$!~-s=ru$d`b3q5 z=ttdxc2Ozmv=y!-Deh2y&J%GEK3C9C(Lyu_CpRWZ(w=DVjxol-F@Lp9f;ol?;bgL- z3~T#3n}BHd^wrpsfkLPAw6aUqEDr3YnNaaP(2A{qy)41aC*hWVh`|E3$wb*(X6tDW zBc5B!b#L`Z@m<74{h4KG;EF1RUHL;vOXbPG8U+9IyYXLn)RjyPP1Kz%T}+k#UZ(h$ z>)t<%Me7ZjqEm{hwEef&zUR6&y&`-(tRWGnP~egy zz-la3VTi2@%88}y_o#FT5jx3A-1>8`d6L?!KeO;Z>@PDL!kngfJ8+4}U!0Sp)g zRj3x+ZU?~cd^ND?J2nNo&Fb7Hl8UALCP$U za3MJTEU0wTx~kD@xP;n^Xz*7Dt|~AT-~uWMM387rBxe+}YsYGq2I>%{_6Eg0qTq#( zN(jMZ)rq+e9JN^RJww~(5{D`;DE#Xv&aOzvxDiPv`YX4@Mv8X5_jcqi*`R{%TxBBC zz28Cro9pHr*so4;@_%iMe5+ERH(C4S4$uCs4Y8kM+7K{CsdG;q`F*n(jAq#;=+hr|j%l_niUDQ2ix2+!W=APLB)Mp!bCE`oi`A?(y&oGw?UDa4YbQV@x?@6C-Pv@Usr^l_PW>+80?a zvsJ|B-DsX5a{W(rYl-PC`oG*}wGi?hm;Fyl{H~dKhcVpn$!6{j+onu*+^hOJ4gj-Y zcWoD~qD!hre4nF(ZG9v_@ZIa1z_{sfdS1vMHak#m_xT;TGvDd44u*NmZZYtezES1X=?7&6>;MZNGXfN(7LwPBXBgV7k$M2KT|2gzc5V5JDA$ZnR@(>LhJvp z2v)!oJ_h=2bGQ9|48-=o1KPi1{6|r%S-Ia1nGvD;T3seuB%A6Y6&eUMfr?a-Iuxn? zH;(5@l38E9dJDUB)Sv5^Y+2+JNJyvk$u9Q0quA26$z7zQI2i!>c#e=})uzp$M8IeP z>o|$RzEReJd9DPl!9*4>0^sTO1m{2^Z^4q~Y9SB(Y5TjSk%fSt;|RikSSzakgyj4tbs#^e$cJ%H3dMZk|ajQHrN&TLrXnFa- z5OpTu*x35!B5R@Z%Y}P=-G!_30{#EZF;a227dHH!(eZc9{2vm5dBQbRgzw1~j^Da&GbXr%;uZ{m4JDLrk`*C> zjfzXMdD(FnmueuHfJ8H~zY`|9^}D@#^ALC4Y1)N_u@5%EbzUvPSp=F?>vsV#%qwgP z{$qFEoM6}$$>Ht(gJncAhC^zFo zyw~OqS@_h#hc8QZ#2+Rb^JCom)K?(e{#$qkr9>Iunl$WPy6o|u!{-WV9vnjEF~bJ*(cC#))V(3Bymq2)Hd|FUvaB7 zx44ME5b9JwQA#J2%r?5!QuMpcvQLgc&}r0svwf}vW%#WH;%GjdCiL3t!@+0wV-stFK9(foi$YBHDhz8=){$9KfSGS z7prBUYFDeGI)s7&kV=6gR{==^+N3Q&J|W7x290mM$#L&eI}J($Cac`+sJ2G;*186WT_*8w% zC>3kGXJRpWBuk$g1)7p z+n>hUw8nyfP<}YGq52%G8I)#RlxWa_2u7w5-A0RJP~!f$2)rJ@`}G<(I%b(|2MmZU zU{c9!93n`f(8DySndxc?Sr zBo(BSQ6ZYFhHA3usF3ROrgXZGA{|wUbQ{uXDGR1cE}E>mZVX!(!~tp;xW89ZQhExv zrcm)vxplBCui$tH#Y)y*W+3E-VwHFJ@LNn`Q)wDqyrqMz;n1X^K_6QTkki^Wr`R3Uv zR_R$_S0*_|u$Rp_MOU3zl~sI*Rt%NO*~4r@(BZsY)ueveoy{_v!$oPBrS4yO&&oPU zwQMy->Slhnn`#=z&Q7)M$ilsp(O_)7a;mlG{ z6002b^vYR#p*;fjDtr7t`|HQNBQzL^rbyd{f2lDbrH8gJ+wb#=aqM(7T(ka&PksZk43CMtPXo$%uv zVn}s^;1}d}g~)b!Bera<0A@6uBIQ#cdlqlr8z?@B((h-2S(7d5;4JLytmNvWGIw2d zr)D}vSuMY@;Ml>62Cm}qmjP~uhewO+Vimw~`p%52y}d^v|I)JG*XM^3fryfg=sP$k zlWSK@$U!V>&p*-+^ztmzaMSI$Ux2z+IjnF*_0Tc>__7tx2mFI)Qcs>mat-9C%ZD)^ ze9~lrt0cXJ7J}pCe~+3Z#eqeiGg8>79-%~1iFZ1hv2Ma=Y5fj*=O-Y&3{2dF!v8FU zU(uj^+j^aS1^+*16yv{;{is+tnVSByIR&X7%_9#C0AK{|JFoorfcrbnf0S36HEiXv zIT1c{^!LC{n=Ax`vnzO;DW+fC`Qgk4+ZImFfQ+uxYqpaSO=}rp%1(oh;<> z`e)+b$n)wlv&<1S4FYm>hPbA6N8c^plq5qqs#Oo<)DJ76IDyf#yZ7m5!3znRlNj0) z$xYt}icuNpPu3W7q&K@(MpdLEHK8+pI##f@i`Y>_Yc5i8)W^yr;p0oN+!71u>2kHAM6st(IAlm2*l0Oie#wn#bOIrbE|s;(X~N)P#`n6N&PF zPBG}DW=IZi?Ko?uPD+4!Wmm(-5F@lVzUm^BcSrivScmt$fGgmvI<*ABl20ASYyIVJ>a%C;j~kspb~d^j8V!Do z&9)Z-5Fo>S3^gRFQZekFo1EZy`1XE4I_=`c>NNKljR!1<3XT`YE@C^Xmz-TuM~awD zAHX2zDlO2ub1$@hI0@QL8x)SlLQtT3?S)zdBG4`91&G~#K3&Jc;*+%9t1VR2nJlZw z5>zPjyd+@K7P&O>)eFEfp@=v^Vv#SRx4HpnvgAd5QlFj=^ZrSv0r!U)cJFWqB#mWk%OP+;G&)tVDscJZ^gMstppy2H$KWl88!fn;G_0fB}_C^Of1S+QM zM!A-b%&g7a{oSklqgH!c4n{Z_MFP3qs_E#$MLncSSZ-Xk(Avn07--Z<`2w_1_lPJK zfS_7}fk%pYq9_)Ogs&V>F4RygxoU8r>of|DDBmBG1$}sefv5@ws3;nEpe?ANj~q}o z)KE14@}F;Om?EVGW~deQLt~31z@Pj|q8CAEi5p-MrClxIs*?Bn>+-DI z#&e3LfWUDSrRl26zWpatl1k##oT9{eT$|TDw-P@RCNgr2O}xwHNB*LOqySX5f6E@|r@k(s%Z0 z7x<$3_{O!H|Mcu_8pOYZ5(8f?+ATg0F%Q{&`pgm0$3?AZms#s1S6X$CJUN~5R68{# zAw6lP6o!t^H94`A9(f;ja<=LC>l+Khz2nQ#nJ+YHx*c=KOD_e)s8nFX) zO72lSIw1Z1WPc#BPI1FlG5}IreQ$k3+xnEcYxl_sMeiBZ zh26MV3lgW5q%cLhB5n*NwKGMpK7!en>`gwWo+{ja1jH3PXO#Mx8Sd^Eq6VjGrmJZr zTC^8^-1dz^l1V0wXY!w_B&y>^iW#V6bIRYELY|K}=zT$_yW7+ck?%ijGJWKv`9Nc-MQm6Lr0qApx4A`-?0f`ciUwoW9>mz3@#U3 zH}+a9>j5~yP0MmU)eW#`cY@4*--qHw1(ZnYY>?DU#5b*IlCh;(!$iopuIM*JN;QG- zGdIMw#kKFn1e)`ca#~0=Jns);Q5I$`C=6{{ntCZ?8LaiydTAq4nd+(Wu()|(I1eVr ze%m#NyM!uPH4e95g@hYqYyI5Y?g3pPni!}3|KH?!MORB>Yh@Qhr+-F*VbEsLKK;(~ zj^E?1{>nW6KY{!E@*m~-Y7JZabqR#;{`d65qMUZ=z#_|~3GEaBO9f=o*fG_Pb4slX z(u<*sf-TnMmX~YxM!$Zx5_c^;s#7wDmN+ne^#?LL0q&Wjy)dNB4UzpsWJ+#pp1s6jDAaIi3N zsjz?+fryJCz}Doak`Cp6|%FFy$$!)3hK#sj3iTp zRwnW(UN6Z|)c?zprG3NL{AB~w;udfVrjm}AhrbL8CHEkICZZV9DSBVKdi3Rk82o5!QKAn5- zRt(K737Cb2O5EI(I8CCTCzn>G=`zcGd%*$Kpo1dQ33G`+w)!sGt#@<_HgzIrBXzCQ zIH-x)E$WU*o*&_{*6FII@&K6%OS`h`tMEFrcqaY)-2Kr(1KQgR!oVBnvTfgssdMUungdQJ#x|sewHL4 z6ja)AU#bWrhFcL54-H^(!@Tj3$vvsH3~R|6)@wA$oCr{U%udUsOJ%KI-qOS}l-pYW z!mpd{?LKqKY8(o|II%5;38I$=&^UmHVV2%(Ka?s!U$RR6;hU_Iosn>q2llko*UJ}h zNv2E0%G2S7t`nxH`nZmtY;xzZ!PDC2mDf~cbDXDI8GgYh8aUjt zLAOd0a5G&r48O+JLVv!?VWCoi6iQ`y0dZx~^_)3x=txFH1h)2+0mzBPNZLMEEG(MS zfGu5s{)hz(5(}0?C7laGsDr`s++&(gG{SxFu&9o>;zvynCEGo+157m?C2-_@zg5-1 zSR!!5_^_5)sRBRMsSaHexgC7jyV|i!+=OolXrlQn4A~>}VYc;HqA7Qn3_EPp zinqpEU74kMBMV5XnQC9&L#(S^(gc1ZWsWDs5)g)pZb!|;h{3V}H*i*^f`ocQG5mh9 znpt^W?l|c?+$nIbM&v@nNyA-94Y#*Kg#wWqsbT(MLEcy+R$poXWHyqgs%z?XKSY>= zWEQNgR8$%iIx7*|qNq4}s=SL4s`d<<#Lx75l4qH5ha1)aHOy-2i%IY6{Urms!8< z9m1LSprHp|2?q*PfZD{BBEn3HzIWvI=T^eOQD6H=5>e1ll?_(y&W|SOQu1W3iYW-X*@Pu>l?$g`n_I#9NXfnX z*=Z@l=IqWXihOf55`gP>-vwvfCP{w=EiJpB50F%pUo{0Dc{?J-}NO zY%U}Y&)vUF!%&Dji)Nj;3nf6~kHXGXCbWgss0{lNc^9#Kydvr)d3eAKF+qgf^hh)R zn0<~0Y!e;mzCN|ypx#uwb6t?dk2QI9DHS ziZ`&YtSRP<^xB`jiIF3@cd6N3ZOs)@MSYPk1b7TpoT*T4gk1|8?gamSbK3IyD}6GQ7C@?< zS-MxMt`ApP)h&IJa2bnV%9j5F`2P)IPzB zS(raayg#iyOa@zGvxmsxLxiv!#22m^FRO*TuTBK z7+x0vxmk#_T^iyUai+Rv8_BFQX)ghi4-bQBRG%@IE{qW%OmxQ7yoUJ%cAV50$efdv zr4Kg}kwELqg$w)YPvFVHmjXS^0)t>0NcGOLw|h@UK7III3Nd!bsv(pOTs_AUJBv`! z7IRR10XAZk8x5Ng+C0>6wtefcmNB;jVTb;zNSfLPbhd}+>ay3N+NMP|{i)wq*Mn=}xa(xfhrsfY9Rinls=GzS^Jp!6Acl zabdFYK^-**b~&v#5r$i*&9Uw;e(uPV);VtjnKl!*D=@`k;aeGBqo94ahUl^=V=Fr~ zjfTRhJ9@1}-9;W~I_??$HN-eMLrz|}pg(fM9w*klBksh2rwb>K#U(fNRT2P%KQo$a zH`xOL%nXHMni2m8L%8rL*>JhODf<@q_X4IyhOx_@GWtTM@3)4VO-j##w;FXe$ch>S^Yr|9nu>y()S*^(TskIMDgAU4)N(NHc{ zs0pp_y^03cns^qyB7j{1RIK_r-7>i!QG5{<;bAbvKW9DcDl|$vB#32K{dENlA>Ghp z@N14Jwm2!d{9sC6eJeX-Z+bK!#xW2*^8(cc5tl#|QF0|jf+#qYmq`)A^yo=Ty4G9Y zNtlNu)su_J?hHqKh#+6+r-eLasZH|nDPV02%$r)OQKZL>E4CW1e%5`M*TuToNYMj7 zdd`GNFmI4S@+5cJookbKxu&kH%jz4rFIm0fRPK<}f6~MH$^!Yf=ND&v&Ro=>MR>83 z0PxE^c!+{YKtx%l`rm#a6dI9uQ%jddP#fO>`}K-vO@SW+OZfyqf)ve zdzClkXl&cr)oPg^;6HYiohk5ThhmaR}G-#DJyhg8#c=X0o)7UMK@U}|2z zrD$q)hfe6BkDnIkgapI#n%xl8#rI5K%5FU+sPMK>Mae^ zz)l^5mYXemLkf=1jaOqg+tC^vPPWsDA_5Tu*YY}$=4lt^ze`@1&o_Ylc*<`^Q0h}g zczLJ|jnMg47rkj;YUPMmjMz!527lR7s)|l0hcb?huCp$m3fut;e-+MS>x@kQY(KaSui1w_Zm;Y6*yb?8?+m#;c3+o1RDZ=Rk>Cok+4NV1+q zXhrMYkAG)mnCDLEk=-EG;EQaqLUaUiyTqzMq|DK3&}1z_@pVej&)?lUvpKL1u#b!w zWGfUikiN;+FO72%<7n9@7}H)Avw0()-sxeKdqY1f7>wlGj(ctzTCa=f$E^6&0cm<~B8CYdl` z3@u2-b#2Pe5h7PrV!${lcB)OCzNQ;Eveuv>+m5~q(A5s7J$YAOm+?`lGi9KFKu{&7 zsQFP4IGc7jo{XaYHQO1gA0YH(*LK5J2+5iASu5{UYbwe625Vog&J4th)Bgry@d}8r zX9^I^QM<_72Dk^1hvX%_Xc1D)D~QAQtf}c3e{-kN_ZWRq+fZb0)@O3l5;j)NozHh$U8DsVdS*Mtg;fzqWpEVVuvoN^R+U?lZDvuG zOYut9Lfgh_7j|w~y%8oMP3<%8SJs{SrWzf`@}Il>IeHs{TrlD#@uP;=npd{cp6)Pa z{rd_tF}OAASh+!jw?lmkx!ob|2O|)CK7l%NBr0~CP%0s~UXi&c7&61oC{HTFOmg}g z9WyQ%yAVeiFMi%>zH|}fYjqY183;ouuH887XUca$s)otXq1$xgd=AWvJy%azQRGB1VZkwh}|9sukQ5zR*?;^h85y!eFiEaVW~w z?k0h@xUng4pLB5$iK4k;UXtMfgmZq8u^RBb28(zSggT0YP2wE{WlAS8)7Un|GUX)5 zVek|?#92a)lNQ9zX<^yN{x4QWqrWijs94&XI=g)P z8vluyh}VYUI{Mw9!TH^wVgKKP?QbamVO&(#wqKA!@SCZ{h!Vk-`w5K#*K{wTn1quM zrNt`PMWBl9ja%#BMtt2t=`lp%23?r3I2;= z_87@14Kt=^{{3XoJVNOJ*)EKRBlTX#SNknbV*Na*wLvCECR?vRN;$Ncge6~KFbv4J zNBAGeR-&omP>k%@LzdjRa<(;`{5qgadbILHL>YAgfP*x=dWH0#H{5xnz3Rqb0D74! zLf0ouF5=w>V5SvMXv)orM1v&VXOD66*yrz4v2Kt`-dj;{>+ zHCBTPM{1Kr^rhN`1q~Fzt`xq@S_-~N{bcV}00yJ0`5C_w&CJ^@#_~CsoyU=jD<|{N zZ!JY^kUn~jVP{e#)6Cbcr)UQ-#XiQS^7t_abV4!+Wky0U!a->lMhjM@kNBuLfrA7m zzK27W53g^`PS>cdljrjB7iG84NKFR>%u&_NQq9MsUFA@{6cPy?ZURwn0uI-l#kZu2 z@#Q3w2a5MYNBHg&r64}a->MEF@I-G&U|OYB2cau2+zHGP!c_=IfLcYu{Uq@a&oAl$ z!{_Ux;NU0~i`dQ%;E&(90CC#^G$V~zH|!V4ovcUW3mKFJ1T!EN$i)Uy56!7MyrDS%U`Sr(v)F3f?Ce^31W7l<(fIX3l&7An!XLD*%&E-f z@zt_ns-FruHMFbAn76xvi$11AF(SJ!ghkshYNPAbprtTW>%b5t69UH#2#ZC|^dyUa zF}sP@3PHdqYdU-QZMZi=#Yw{MVTC{^V;Chxqv(*!hRZk>oujJ8u~OtGr3Yhao}=!= z8hY`+tM_N@z|@Bg2mT{;^HAFUK+#gCLU(Ib0#RvUrLfonSgGIed@?a4N+_qEBPIT% zIU2JO09P*gYSiy}dZ2y@Tulo7^V=)&T z{2Xu1jXx{i`jX*~^yD;i&F6#UobN{uk-!A0_R*+7e(|#G_;vt~ZDWGhf(kU9{d8^k z2jqLWy?!mfY}iI@a7Z3m;}RcR-My?n(vz?Lvc&q8#i5#O`Jx8Ccmk=9DHdbcp+mk^2}9Y$$xTvKD`I-g5Onr&CF6<$QNSwC6)K~`)8R;sUB6yLI-~pG z)rE4)m^fU*i+fiGga*KCyrTzHkM7&nb4+(UcC`=~T?LjOOQRh|Il8MuYMu>)>}2k4_Q(=!WW4`*0|?Zps`=5A!d1a52Ago zS_;;N%cJ9yH0?gLJSe#D zke>%|Z3N^=0u;UsTol9u(kdb<{zRb|uTekjz1C4u+NwFJOY4@{|J|;Ctn*_bDa686 zvfTlclQQabo02{$WI4r3!VhgjOWKO6(;fo;4_lu^dJs@D)E;Q&ni5y%&{U0f`i*7HC`4U?R78R}PA94BQF5bOb^VSt9`7bT zAY++YHL=4c zgB{A%RzLcHiZ?BBqexjEoeUa|BzPN>`l&h?b3N_ zRMYxLQpREfsOd+M>5Hu=BZ`I*4c3a)K?t|P+D{&+R&}lL{l{hBeKdtWS}}xE<&Lj9 zzvntI>AFHh3)i)Bj+pHt^s977+hO7*XFReHDZu7v^dC+GGgsQ?)4_UQXWAOX!5X^U zJYky%_`sOxJBZWB0pgnhqhXwo7B>3~irN{&2(iV%wu0|+VeRuRdl(3rTkJ@|sJxyA zAWQ}f=~>U-v)8*!2bZ^_6T{}8jrheb-CgZo@6X3hzO2bm^WOz(juU(SNa6KtM+w~N z8UeeQ4`Qy7!uSAZN{16?Mq z79(zp;XOBv^P%p>!_}0brg@_0InUAfW3XGmO2C(Efe#kHTEDhNkm|7?R&{?FmIQVOexCZe>GBRdRJE z;<~SdP6Z(YNhu5vj2S_cOq@#{)+v(WssAF_G&X;~KUfl1#XPh5>ZpN5< zubr`eRLxbIwW^*<=bEY<|1_7v()iibEUQ>5CuHh#1bNa76^};jx-9o1f|{_gT&q(C`63dYek(!j3`YN zG>~YO2+}a=Cc3&O$FsqNo$#3`-kh-!VyzBDc@*-b!GGDiQXpEY}O;i zX}H<%SltrEz+CE*iyT?+t9$G05|v^0v|EQjoe>dfRKjL;<#k(O}O zuDU+VlMbUlP`nOIS%@H@#}z`QpP-WKONTCZn^+-EMmiqmQcTC|2l`2autUWfWiGI`_==p_#WS^3)`bdtpKkb zgM+QDW}7?3!M=RALZJ$bxf$?LErJpu#jzy2q8-Z5@!+It(zh%87;%xW($^1IhKkhS zCaQI(v~pSL2k+UtVR)5lgWi<+ss7Q)mmm1i_(Z|MPcrsO*HQ0%=8+>0r~TlNh8we9 zLMaCw%!Fsju3np0@MeX5F=6O|VXi5=hhd3+PCSm;W78fPK8AShpOYkWIxZ#6#Roqf z*d_G0iDXamUerTH9?PAJ*9ACyW4J8nB%Z%}tri#p=w$%ArsRJJ1R11mO&b`S;>uFz zw`%kCUwB}iMNL902s|SudAfeijMQ_8P2O||{+P0ZCodb;llr2c-}=Cb;^E~OYIhFg z7fbRqo6j?8On5aEd2tUo)QW!5$GN}7?|VwifO^j(iS@+s2OiY73M>)@ZRdsu3&riw zo9puRB8pWVkFz3kbgK?QyXt;t6B;kcKD+>9m7k*+15p6RXv6~N=kb#O4O>LEfgM;& zjeBw1kN?DskN?%P#Z~6ci7l*%Rv8kVN9XMnF zA>q^oBO{?W;q;U|IiqoLaOl(}p9ayPuYLbcjp6aura=zoEQD&R&en%P&%r)T1V2IA z2d~mrC-+I6>BG>LGprr01uvBPLl8crLPvdiW$Q`JqY+I?32v1X3v;j7F~lajg=+yH zmh*PX;lQ5|UqJ1%BVbFPJ1#=yX(E8k2va5J7#b(fXETE}ex|O$Z&q>aMwnP{V925A zis}qDfz7M(`qvbXutN}1fccp->FMAR+lC}}>Lkm$UaCy?3nYs^gGlL^gT|l9b)RIm z*T)d*KR=sQ*_U$h2%`^kRrGdyNT%`~PCR>Y%~g)(XS|#)IX+)>vnk ze7ou|-KOTxv1~CAvV?UUI5d~2%J{|#0_^D&BN>Om=!W{~J;&yg5d#o!qf9 zUX<*`==18f#Ny#D3Uh?MV)HHMQBlg4DBZ+opL;GH)#iCs*YfRIt4W0KQY~k(=953- z_%#+DNs+>x}}R6f6a z95zJ0(f8`sIZaRwTo3a7}>8ztFa2W7DZ05jH#IkuT$E>Cg=<1Mde)o=%nNH`)c4 zNKrJ^x$;_$lW=nFeH9YR);#`>rLUpfqUtny{Ok<*=txwA&C*}oy3{Rfni^kL-IU6c zzrsw^RtKz7_*c?Am1bmF17D*$Qr}o^Er}=Z!=r5KfC3^CzEG^LP!7w^qxAv*P~y7Hren&PJylCZeS!g4s2^(R*(Q#Yq< z)rCHQtwir{j6@jQ+xS<+UE{h^|FE#(nIPn(Lu4XVFW8*wuL7L z`*ymwoOMYpR4Qmx2GPSeN7mKs7}xg>$R)fgw^nsHt=egrU?*Su!>8%dWbZxZ{Iq_# zZ$i0DxA8axozI0Q*jBGTZWe0mZjks0=5JM8DJQ*>Sw~tkvvJ0;^j?VaV1cHNRnm0t zPkKiO-lnK7PT1vf#Z06^JO1FsXeR)>Uap&Uxq9RO55rpj6&vGsHm0k%IGF-$6#-7p zrc!o)rlt_&3lRazds`>fdzrxRY)t^3M15-PIq|PAGB_TM>i#lQ#n}oru5*3 zMB{&OF?##u!XaV)Xy$4 zAZ#9G9=)9m+3UxB!x`MMGAKQ&-5#GDUp|S^Nk7toM2WLN!7M)`Rrz^~q;;~ZQ%zzj z=T98eB~B^WwV@fwdo7qWV0c`hMOGz}<;j9SK`h1rMj!W6&TH}CmRa*=OJaD(@|`=? z$8*y{s00ryPH2K^M=YE(l$(B1b5D%1(-%EO{dQUxvhlG+U zz+nxl7ei0?z1PMaW9b|2os>-Hbbkb|n#|qJ5q;(Ua4QVfK#9MZ(vCrKVQ^EUs1>p9leaz5f;B>|``B1`;=n9B5@%Jw~M`Z#A$4(Js<>6i_<6!t|7YUAK^_Ep`v8o9#| zeuI4JiN|Qtv`CCb?XXL1$FgZ+q_&ly+$0c+80TZf-4qZ2jQ67T~dOKb%4dMN-TvmA*X3n zpR+(%LcR?KGAw?i`Na3t9l4?Mm@&IpVZz5`lm9yw_mePx?$>yTwi}Iv4_}CV)}kq> zVjmtVmnE}(9|P17j@^<6dM7sVxQT9{nkjtH;KXIsW)7^LrE0has4 z*DpgaDRPI`yQTZP?iM~Veil#jLn{cNFODFXsAUnSEB!ID|eTC5QE#%hEgZW zj5~m=Y0XedWqFFH0v=AgfV2R`^rI?X^|=kU^|8si5(AEBJKP8+Qeu6H3BB%sQrU7OWS&uCH4EW%hq;5VL3URIVH9j6 zCxy8(-ImWn27b zpZH2k7kFL^5YuOpf%C&7DR&uU(lH{yj3JV6?6<7W{JtKt-o62u2B&!1F*NI)BKLxn zIC6LzcswkU@G{dJNZ+)W?ZT-VDkx@h3^ypK-e!lRD1b*1joz|}K*SKEFUijV{UBRP zCrE>LO1`7Be7P*&E_4a{Ix@#5H3~y~fkw<8kp?3~nYYXz{(7u-rqx3!eDFEv%N}{= z!4rE_!%~0tV=Cw62V~%TlA{5YYJ^-XL0D<|Kq%0U&>pxJ;nTA{ZD7@5hyT-E{=CY7%j0h>$` z`|{&t=iyma?d}ooU~QSaa#f#&d^Gc12ITyk#|sx4S=IA=Gizblw&>ZhnQw3HcvmvFc59=lu^Fy&0~8wBW2_$Zbtw1-0vHbehUL9;*Ye&1W``XY^Ae;p;Xjk=awB z=R|iFmXf=j+gM_7z;)%#3pnNC^nGz5`_IpNQ5ZXTKrfQhq1z$dSYdZ>IVSlw21wdh0#3eiBLs-t!*_?hWO5!J zly7-18Q2wyTQ`PlJ1aVg&LK~PAnX*%nkCY3IrA=UMp>O)M@m__ck3S;v6)8bkgfA< z^nE#lzK6Io_{6`4-{fGhNbt^ zS#vx>z?`*8r;T=lILRIW3LeLJHyoST(|)t@E?;!4;^5btq|e z^-L_!Y}BU9c&zHU6Qh{$4$sQrF?-+J;j}~6 zr&xMm-e=QYwT<`<=?J-(ka_5~C`=X^Z0{Aw7mc0Mth0Z<9bO#iAEPSQzFoCS6PoWN zNAPEv*==I;tq z>_cI){la;DaRamU;aR54GOVyWAsyoDo2QX>{y37|GDGX`)O?TQ_iwMm`?LZd6287k z?p95#$&)-NzY(WCDHX_Sc~-n2{O|9qOnze!{0=DiA2GVA)1L^@)k?biX_0_{nt6eM zoc|)~{(;gza@}V--tT~dC~pS2L5^Rw>(Eb3X{FKHYfQ?Zw>#({Q}wHv)U~Bo%^J(s z!ton_xOb=T7>{lwpKb3JaOnoJA#=0hA%wGb6Su~6!mJsm$}pOpQ0aO&yIy~WC z03N4V2R6DPa%Tqgc5C!mt)Ew_PveBlOlm|hbOnW~WghYvgKs+lG`Qv%A|$Si6gYjV zaqnSj{?KNW^i}vvjcnqNDDl06g99QrOAtVV#Y7*Gyarz+uJhm)lS`}y6Dtz6i@fZ~ zXXdz-``fw&F(XO`dVCjq+_U*oHk?!6Z{W~-28km8eI`Ul8p9IHHp9)V>=+0_|28lG ztH(3)V5K0Y`)mooK5y!DXMoPebxlSw|Ze7PeY z+aTni;Bwy~%J@PSv>fW58uv=FLY+BuyiTAi&gq02IRQAe-tOh|If&JGCyCu~kCj8H33%LM_HboyTF?gllDm^C7w(<-u$ zZurOz*m%7M&UtRAek4|~7Mp5?+I_##RBXyX*L6}v#3*!6PMhO~*ndPf-n?4Ptl;Lt z@*u)`w0gdJezv;yW8*1o%yiQJ&K@`79)vBi8OLN#_Ii1ByX)ivn7Oegs98p|4}hjx zW{Uwp#pkL>A$rRO>1XG}g`(xJhe+h?)icR0QX^3!yQ`yHw!2%h|Bs`(xmCX&U^iN0pV11$+%+fC~ge2=xpEkq3N|RVxN7w!&js0i|CmR;# z3~2+WeUKq(z7f=`sGM-@5SR@Vgq>l3E@TtQN#q`Sk~)>hwi|XfiVH!gqjwpg-oC`> z=DIqwV9jq2dqoA_#}oqZfa`$ga68MqI|g@0V>8`s7-`@Kj?HVoRoh%*FAn#*b{u7w zCRYy27Zf0zwXtTI*_j9Xg9AsQ``Dl7Zt$Ecvahr)5|jPMo|P`Xib$n$D+2$L1tv#Z z8_tt_M^-#Q-;vPmm;k3>=(Ut-75{W!hNJ4-!Nj}Q%`nyEOz@+>kj-r^Hi%xbG6XWB zNUDala6CCoQ)o(4Hg)p856-Z)u~3n^oHl^8h!Iw}Iik@g^Tv!7Yk~T~Ia!NJrH_CjYb6#Y zG1Ve+h9-2Y=E~BBiqX`l!8NXM+$~sL29L=Pyu9o-{C7<<-5ar1T~{2y51a|94hcYd z3FycSMAt$;T*Zm&h?Uh`6E8~wmnD$HkMN*0rr7_49nGd!t=Ou-v;l#Oz5Pp9hh-ul_vS z%0*5DiUlmwJlABfN$;(RNoa6$!D&vq?Yc%0Bh7Fojr21Okw6NhJClcF!C4{06LRsm zevMs;!OHinbPX-QKJ7cklXo{K_GY|!*H&_DM)+D9;WzQgN@IbZ(ACK^j+0G+tNsJG zdTK(J&gvRE35mXG0!k>OR(ct{3Y>m+bw;Foj&HG8)1g0wGXqrMv=w44YW$7 zP!}zkS1e5eX3pH4ho)NTc=s4&DvKlyMBUEvwTE!RB3+#Tt7;{@TOX$Pa{9%W951=l z>lAYFnT=p+nK}Lo184`~X(W5=0$~XVc81&Ktq&BH8W;9^0 zXZQ*m+@5SIi8phx7vR@&X%@?vpL8?^qaPrcnh)}EEdlk}4BiY>v?+BOGY%r}GlmS- zU0~8lS!@26wZl-Pcwhgw0jmlnz6X!_)-l8TAmq`sL-pMn+Jx!a3&|L9(R+ z2})c@4H|zao77?OH>I=+X4ov^S=1E@rtE`42_Dwm58KF?%4k(uQ1qHDOZJ%Bl3}4s zHsO#cD6)kVP+|39X?^{q-J3UFcp^g;T)Y`H>1(c3GMfM0wTZ078A=m4U(NhUlxOXb zXh&JzH(vXTL$mSy)Oyses5^E^gAsE7z|{ixSgoTWtxA&8F-MfA)G70&=6+>defh#Z zQV0qUy@n$VjD{*J5)A4R=q4SE@jdPiV}nus@6X-LQS z!hIa9N}mr5h0% z*1b=4g=!Y3cWk?A0NkXd5;IzjOKe@k0Qu&ua*q+ipYAb@Gx;EXW)aQZ2C_C4HiEC6wJo+sniraLOtI4zE@I@(e>{=4UVKC&2v@9(=EX+0 zpQnurF4drv9mYa??iH(F>{wk&Hi&<;;12KvaWzrtDGNgCt;gYVZ>EIiTXOY`w?*M) zmOGmeM+v?B3tAiy{Wsk;qg`$E4C>cjZ{QN@Imv!JqeI_pNSQ>*R?`m`}U~$DA4N`LSJb z0>NT55J%!Q5KFWG35@88fA6~b#@=<4_p@jaNBiwM>OZ-* zHW=LA=&$I~?idH_@0$<}(?KKjJNY^F8)spAz78InfW1CWBSRe6wYz$FY+}ZzVqMWo zpX1}|2aO)Wk`i474R(VtC!Cg1;^>K;7cYSGL=Y@UQ$7Xe1ygW-3Y!Z_Q(^IZDjvJ; z(W%fFa&XG>Mo$*fP_Y6wZJsEsJ%vbsQ<`)sHCG;Epb71bT1q5$&ks2U382_A{?2EX zt$wwu%KxA!EUSZuJA_m!|G|Up<2Bb~!iNGOYiJL#cSJVk1GR&x#HsSukV z(20|ypQWew`b@CCce+sXjhsPkS(=P>dJq;pXmY_4v!#X!LqFahZM*`r_QkduLB{ME zlMb{+v`w8h0I|6&1C#4A;QaK?T-rBl%{?X%@N*3x&HI_MNk5z;h0pVl z5>*w70H(~X*Za~>l?$CJpbwtv{F&@|Hm0KV2^C44>rla1YcHOd@I~hu^PqZb1_-y1 z8n+1hDR-e4HebSz^miTNyS8{_xC_97P`3$tYDiN15cNXH;5yWv;2n1GKMVoQl$$L1 zOLm47w?nHO^bz!2#J6OO2sPCYqUShzMC|o}*Z>)OGmj}6tRU6Qpf)uO=&pZ$_+X>c zQHW`}>s*pmNh}15xnLcfgXw>_Xw@oI)M0K-@fm!mhi|_yZ4?M~uLy#Rmz%yxdJ32!Wu1!ndTuIfcX+OF~H z0$z)zF6U~j*@EFHX}#wbnAQYW7qtkq;t_cV3ANGiDTo<^U?1YtpB3$X_Qxwf+3x?F z2EpIim~3L{WNPeU@8l`&YG>?XX>a#upqxMckZx&zFPpi50|E;Cjmek)50U@#Uw@Q} zX;k0(1;gn#ZNMx?xSZz#s^;3(o+6DWC;GWmEF>~qS!}8*^?tcgqX}~)`T2s=*xMgT zxTu_qAfVBF=-2R><-!+&)BgJ$bknJP7CcpmQ5tj}95`am+x8adT-jovHU|Ud#~82b zP}ysm{Y!u!M~ntxJM3|YmNrg|;VU#su?ifWG!x%pM5yveODdHmovQHa7AD3d24%@y z{h$vYZmw<*^2FiA*O$qtSEL-)Dp;YzK((504wTY4K_lB998XTIEm=7+LRd9zyX-?n z%AW2|P%J69uU!&X6d&cHqf(COh1?}h2=%{0T-StBL8S5I^QO1~@-Ht9fLv-B)O1M)^Gv4BM7=|Tm z1SM-Z$VMhy(A(?|xz#+yiobTYS6uf&Zp2}kNfajt`OP6&?A4hmZxz4u2(cH>I_3dw z9m{PJepe;KDqQwpqGEURTz2(N9*9!rG-iqYA5q@7Mz|q z0gg389zKWIdpYnh zL_$N9AB>CS>e5w#G@~f*aD3#r;|-mOzU~MRofW~4$_JvbKOAV_8jWR{Yhi11sL#Y+ zv0SpG0myhMsHc&fXHi~590pkg(-ct;D;}q-;jJC1$yd?1HWcmGfD|;(vYCZ}?J(F@ zg{~>H-s~FsR`PrDrF%7|bcepsPOQ$pHqUDU#IPNV$iNcZ(kYOHxJ+$c5)R_BByEYr8_zk{_vE7oEW5vf|jN+)V@h zpzx^aXhrVFsKu{Ho2~Rb*BkEl9$?-zOHOk&tjWz(BWTYy6#UI;oIBO!#)-6ZLRzq+ z$+wdddRgYqHc1vWdvI+K0W;UPmX`=6Pft%H+1+f3S?|Np$C7O<*Ii6C;?zbj`Wh}^ z)(xtts8+d7Icq>ZZ{s%+2CnfDKyR{C%JHYsL!I9VWiRf~kbYyYN}Z^}QIz9kD-~~W z!CLcPD=Fsct!fE?e7?B$@nYT#%i;@KfBXR4tyguJWEspSZ9VvnJzOVQ1AKEwdP|W* z?j&I~*gw_bt;I9Np&37~4WJZWTHY?!-fSPY+RM9fVvi3h>8orxY3eR~y4!ho&*;Nh z@(eRA5W4(r{wfRF2W>~^s~nOdi!K_x+z4A2!4v6(;k#ULW@X(7Z(MJuSgJjTAV=qC zd(PXV9~Fzamy=s(V&hMFby-%K&?>ZH>kxF<<6I!EqxPu!;XEmrHtFc~@&TPtooG;P z4xS^dJefb$*SW9hbwWB!1KJZC^@yw_mm=ERaeVM^6r`^;{Csb^JB|cs+Y8POYEgJc z^oClMO-~I>ZyEW=IR4$VvEPZN@m^19BBG-HCzA1ED4E@A@BYBzeJ;`ObXxyK*?)fj zvE{e@1?>M?W#H&2pvr(o-c-*fq#ux1y9T_eJ->06PYt47K+k|i{ZUna@v-~joJvQ2 z)>kKb0OP{L9WmEC|87(C5@K5>A8*84NnKl*UhG^jK&8Wn^NBTZBIUibrVgd?k|kUx zANLqVlZsx&jTu7=SQ{JK4Y(`5B1kx%lKwzBn2DRlikfq=wAKt8%^d?{73N}OL;qGf zU6!*oWNxLzU~bn(Cte|hQmLUCvR-BcMlCQ&+l+w5v|s|~FkfkiP|tgDD(D){tRA(= z$mYD)Q!6O@EoSUvXV7?m7@X84idmhyaPUnFU11cDMD?BVo;jVMIu2ntzi-1hj8gr{ zmKb%nU%v-GW43uLi~Aa{&~*FTNq8QQy)|@Qm93m$vKEgb#3))7kbQ524sbM(9@C)UXW9T;D0xA;ygsO|R+7vHEOXSlfe~==YmuFC% zE=moSVG+FLB$~J9MK{7-w=Ed<_j=;jIC-FtiP9#T0g_Nl^eL(XPC8P->#B0Nc!Ko8 zb_uYiyRPR{={E7`EbRaZn=zYO^Z{Oz1R8g_j26Op5gEI9 z)bb8OH7oEDJR?BPVD8R+QECnFBs0UKta99`jVC=l58NmUTVA8nB9HntWVly1HT`Vu zy%fGbJ?(i`cw$9%3_`Ed?%fXkg>5{uNh4$ph}?1QkAMaSMWFDp+duRSvF~nhlQwM+ zBZ71^Vl_sY6R!;3IOL}>XQ}+u4JEm$3*!wXrKxYDmV=UE1(8<}`Ea!)<&Q~tcZ}@m zO(%Gr0~K~lFIOc(?fC8LG0#YE;so_ZvtLS{a=57%M3PXAR&8QVTJPs(o3;ic3+TDk z#PwX0`A+f0S}bg^`-Y*ch$+7Z8>g?QuVi zVFR*qdOw5;`Z6?nd_;s2BU1D5QE9a~5`$DSCS7YyF_md$87m~rs(MBdsmA;m*#^BO zQYD}(OSx39uy;k?i{x|dxwkrRc=JTkk{^*VO`p+*mgkr_N$D?JQpt_)$-s|an#f)y z4PaRzZ#J#=_Lj;4TE1mIC!g7ylzTl|wR|c&;aj%jWoTgE08H3ysBdJ;9h4rOA4`OF z(mGqltRK7TtLM`+H0q+2|GO%8)87~g%i7zSi(A^5$^&fw49pSaA+=A;d;RV5dl$3o zUq#+O()x!cT21MfiS~Q%W%d%JD=a_dt62U{CO9)-5x@a&bPBKt3P3JPOOu5mOCGRz z*>ZRPY(nX{#&6?QJId?#bK|Og&jYR`&S+&GM!UL4T~Xt}xp1P@3yvrnEDE+oFOWl- zA7jM>&VL0%8gMVD_(8D9dOyFZ2uiwulzVbtHl#Lk+3)#lMmu&}c2p709I^I2$&*-S zom~-6nn4zNRG}X{BwUU0$#kCe>H!g@{tgwf#yb)wDEIQytQ%=)9j>BuzpSQZ6rK z1fz_Godwkr2Q)93^5kKf1(5g{L?eE~SLZIv2Y7+d=SX*`_n|*{EUbAbL=^atr`ph| zP}i-Z(6pzH+PaWNexOZvKPYs+*7QRdGT{7tt)GD)>~~JZ>9^p2-CNutbr&A580R3Sr@S1@A{Q zcR~1~v5Ox~;;#n?(=T54u8c7P0GX;=6!w?B0|Owrj}9g)E4m*BUu|pL`#5`g`P5Bn|A>a<1H<});vtLh zh&PLl%k?pGV{LC4PL`EyOC~=@bQ@{D$KQC*?Ubz%T0Sc@rS2p@h(DdB-%7yVUZFu` z1@PJK0yKAoa|T&=y}S#(tt&r+j~dc9)30?X#dyY!c7a{UE@VuT0s)f5RuLC}J;|HB z+Q7NC2@X*nG8qxDjLSv#lr(hRInOkQA8_@>(mnf!#Q3V$0<`suzz=U*+of~W&^pxh zh&#T}P%ZLe3;R_?n{Npy4$_jMTtQM9;M2ST+Sl`771Rp5Ts|tiHZ#|W5Dy&Rp!SE; z=H$0mZ!{;zk$s*ZJa#9E;V4Dm{Gf_aAI2S>%+AH==LU-zz#O=avsM^__JxHos4??KJ=eT;dDzlKBO>%ReS`<(~~|7b24UEWcPe%ZM{ zla0_YO0fO_1Oz1Tz5@O#BlmYgH7s2$7~W@15t-P#I5W6-xTvW@1A+dUEa&_`$Ka~K zOw)}jLQzjI$&4~mFVdD#DJgGX1GAuC&!I&sqek7_M50TxutcE;P$~6N3NY&R(z8;k z^)fPZs>Q+nt&;Y=JQWBE=vVItJpWl?`1`Mh_vP`|^KEPCVQRvls;T<#_@$3#M(AUL z6Z@I9OPDv-*9V=Zh{;pa79m5Yq$5qYx|xGk+x7ESeT94Yn41`vvy>ag7b~Rw7?#tM zRa~1p?9$;21HRoZ_#T@fcct5!A#8_azmY3`pZ!iKv&tSTkR`;$)an3QnPSm5-2^Wr z%_P$)q)_`Xt!Duf-92zE8p>v`fQ1v}?q8Knf8V$Oi^&@6_f1QBU!VT^jT0iWdH3c- zcJHp7$QWQpWMoRj!p=@)Yyofr7`vD{{h<))#R$O!5TS|w%rQCwq7OotDOPK^1`&8D z&ck>NZu4!UOIx_yjCSkFE6zlUZ6H-L!IECa>gVd?8Z!xTKHg7}e~0EF#EON1y3X2E z?3w-6`omi9NDUl2!H%%{V~-_fc)$7%Y}3hBjMu;P^wHD7M-sem+OPG0AaM#ZziG#rXeeP)k5& z%Yd@AOsv@WnI-axw}O3b4F51e=@7nEptwE6j@@IQ9LA6&?cpZ^Ap)l!xdMO>LYhK( z_*o71*U!cr2I03lqQ7#35`UH`{pPnLr0u#r?RDKM~vor#nqi(} zBt3U3*_em5>Jbc!_*?lplI_8;OB8bkJFxri(lLrlpf(fV$`6_b*L#S&+cWu9+BNlw zd!$5u9h(o?>SHy|8`}c<4Bf$Hjjl2v8(QEjv>w!hL+=xU7G;jfnnl7R1id#s=`uHstRExHU6f zXu01R`n7!jdR6!peGm!T0PL*)NHG5SP8exdXBQ%XoxO{NsS}Z@$2(M{jVY16**n9( z0y3gsK^W1m(CMonf?j^{zRI!r;M_H3ls=Q>YY~0 z-%r?o(Dz3t_)2x9xK;7@>8aIeJd6}1cjRSXI9gSO!9OL9;P+|#K&HQY?BManJgXum z8}`4LsOp7qv@9n;LCMKZe>upsA0n#;^??6b#8k8RU8o+%NuSoT!Yl>X0uEA5FhfCX zP{3zKw=P2h6vl{!lD9saTihF^1BInLBdgz)r#oVN>j~nTQYD@&K9-nv5C^W>!wf)g z6908_2FlW3Puo4?v0ov+m{3nOP_XATdf#<>HgNPsYOK)^eKBw+0Ngu5}S~XgnfBNJxQEF<5y|4Se|Ek<2B{VQ74%wF!i# z;5cJcNT0g&|? z3n0Iz@BM{Vu`_xeqY}*05>recu4PLT75w&()$^J`=AIY3$*&Flek_wL4?p`f8<7J=rkSbO*>= zT+4~Pt;8mRgLw?8xf1oqEZGVa#=`x0jO9c3c38_WI*)9$eYMJ1Ry9~SP%yc#+?kC# z1H+LzU#utDKP%{xW;z_tx&B3?1WSuP&YZUs;NVHo{ z53ow?b?^?E<1}^aIK|%f!`J_GHb2BoRM=l{wqq9ID<@1kWBbGLIjn>&wZj1xF zNmG}Qm7r7QhDp#=UN`TuL?tee^@>Fi;u#^}Breflad3|<}3atfFxzfAh#hzwK3{!LlD8I@FUU2jjye@y{CXRxButRhbXNgS(&{^ z%v%f_ZY8x3=1q9YYe&P|ieI8W@^H;V&@40u+BrnKXXkYy-~Nmnzu@Hwv1`^9UCX&8 zrp+>pOVc#7_L(@gm3#bx)@2ZqC}71iXrS+3@?^}Gt6(=g9VGo4g^?4}CVKpaEII8P zJzjs&@zbA-rfB``qwgi>KO6u5wu|ox3A0gi^?(He20MDUe}DV< z-wFGjrtv=sd+!7RxTsiq{Tb`6S)GAG|Bi>?{oYva_8YDD{~+J`6T{Q*wM3#LUVWxui~Shr z1K1^-yi5|kW2LQ^Co>NGQ1m%xe)#R@X_k7>5$9!@v%L;PNp&8vpw>1sqw+3th|W`? z7ROaD<2kb8{1m#1L<^AZ7G!gg^($CX^Le7AekWQR-va|*CkTZo&nv!g1q8c;IVto) zsm8Pq7!|iFUNvnZ##G#66>yDd;&WTJ=qAjH?f$Ec#F6Fa1OI03y4CN0xN??umMW%B zmH?Z->&PDtV250_(YAaSz?ydf{GF%w{}jM~pz-gQeBzz*jbs zwkbc7Kru+VFE}@OHukbnKRD=_zO^$}N)P@>naJdvJ2v4NtWzSmrC60m{j~TMk`lyI zRH23)<61lfG*_;~B3Y?&=A#+QhDiDb$+?J%CNmY8$3z@QGx23#oNT(j8JqD;bMllIhc!DvxyE%I>S%tZsDR zZ8mRSc-}40Qlb@~ZYpbl-XR_u?RV4)HH+R#Tdo|l zm2$PLc;VA)5JGJ6xzWg+bTm&b;fP-X#!9@p^Oq#8{Yp}Ri0VI88kqc1EU z#X&Mmb@Mf?e6aM>DGQm0Fv#AEjX7(_T8cLl|MD3A1pU98PmA9#zNT)bb}lyde+H6+ zeoN8e)4Sjvz5~>|{Dl<$7pZ?FxQ(j4c5{MAolmsI2fM1ac#5HUatS2lN`ay4KrEm%%gzKOOwX$lqfGil@Qf3 z8%kS%t7)?x2|5&zMin^fW{5L>V)!mkB3pm*bMO1cPM|K#wS-cJFh_WSGCfyCEs;fX zEKDK3PzhUSYd+HC<2Jd;idZQO+xiePhvD@FUNi^|*9xU19lv>Ri+Ti(tc0xuXupLS zd4Hw?zUdASOf03AB)*=*%W?f{!R>|9qS+ZP_8cNi#s)U|%g!zWJ9#IZ7&#ptryYM# zI8=ZRZ5lJNq^VGH9x}OfEEl((-2+nuc5hKN1>^KAqVVwgG@p%qYur zOrHqCIG$4S7=u!GzNeAV&3gSFQxyM|hEvy0Xgg%^eE3!}I^Ve~;+Q~EM6GMFIhiyMalBN`C^@GC zsh@>Ns;W#ENNF(FM%qbB%W!nb>H}QgDZ{=#k{=KRV8%DU99T7JZ<;Jc4f6T01u1$S zhUNEl7JLaG<&Rr;D8mJHK@fSkKCxo|l7DNJH@wX==3BiOc)PZ- zm907Dc!dAob^I>~k&Il;oc{*R_9r~l=0*)yz`KWneh>2gf)MHNB>wl+AE|kzvYZ0Q zdx-Q?gYU<-up$yVI}!>b1qDS0lERQkz8;pQ_UxJP{N+}*UAf@ySAt@~o6U)isfJ7t zxsDVZ4#=4Dj$3Vp9eVZIt8!7HFwR0l>uQKieK3D(8(2-;mG)^I z!?{Q4F`>ZM{I1h{vkBRQenY>+ASqwhsV>Di;-Lt8gMk5zziq9h+9rB_%JOOi!pifV zi|~Xx{j_T7xQ5J-wNRLpSDNOkv2xFb?1ASvsY#s26#I({u|S<&iCH9$co^T@k;)D8 z3t75lsqIoN^C557drkTGw(!ig_B{iy)B4=wfqvjS$>iQTw~vWTma<#tZG zy&1u-CPkLngPrwzx!eP)Z(H!fbOK1sScb?GmM3gBH=V5Dg)uaKMz(klpwxUNjw8Yb zDr{4mm^#R~2AVoQeQCS?<$c6I9!G3`zf%yh1H3yeS$lKyKh>%Z{dFaf?;T;e^?i7; z&tFXCKa%`Mvi<*vd#5PPwq;v5ZQHhOv(mPmS!uh{wv9^LMx|}rwq2R|=iYap|D3b$ zIeWMDu-1K;ZG7V`+Baj4h|!}*kH)V##>nD-A3g=r$SM4tTOLpbU?e;Xi4ws$Bd@Ho z;$efU`M_qWZ6gAb;zzcv+-_!L=2sUlP4#KF0YRec2X$Qpk@KzD6h7Ghu zxwqw;WFagB?KK#iq}DQ3ivJ3S$u$DmUEffCapw+#BsJ|g8hM&#Pa6Yg!KC&1jGbE; z%)xhr3@-|#S~|&t;Or__y%P>TC}yFH&UEVeHih1Wf_+DQz0{dAM>C}3#OnW z-8=+1g?|g))PJ+{B4wI~-69t6(-zqT{tEHDLRpgASb_))X^>d;O$Fj`R)$Vt(nPrZU9 zx$K)U(5>WmqyC~ z2{r_~rl}52r|_+0SbyAR`$Ui_lBOA<10-1{WSp$m$UREWMyxEz`dU_LJ2L-yMH9Y=V5q)^0@rfdHW?Cs`I&8$uugl?z_pc;Z2 z(;cS{b=koP%16)h8{Y12%@LZ~;YZ(6z4=5$NgQn{1(A2)S?1v=7mEjC#3cnEHGItF z*=7z;?-ahG9|}r!zvdI8_zI=S%k@+T#mFn}4ny`!{6slP<~#-i&Zb%bhlL1Wy6=t< zSc@NXC;O&iIdU+K!l>*C9qx^MTIBFk2O*|}QEXdp2oLT8-uEQM~wRbO7Nyt!6DMt-Onq31puR#jsbL%m^v&B3O zUby^u;S@U~RE(El1BbG#^GP8|X{y*k?3VCp%N4gW+-oMUxxD|MjdvsT8L)6xcXALA?b zm=eo5#n@3~z9b5!279^%OvgNuY>s8b!q=tRhxGXB&*qav1FW`Do{dn};o_=1yCIq9 zo%$Yl<01(ErUZ0SD?WXsdQ_#X#2J+Kz76nKwWuHzaO&Rhe);b8qb;*5OO_l3uE)8J zs?v3VAFIrF8)|!RMrRh@Wq*D~$YYkbaw%B0#&Dc4SaSQ@`YWM-qZY;<-12w}4HQd^wZu`nG`BC6C&tP;%ZI(ztp>&z6{UoxqHn)S-6sxhFWQ%iDPiJK zu;C;aM1MSxK@8d&6za|RNAts9%e+dYvwFkdIW3eFs3q0Wyhc=6#o=BT3DAlZ=vAIq zAGCA|yT)&*3SOmkdgzz@ND7VxY!g6t$*p;Fu?(sgUS)C%*#VdKuvr>U{az-|gU8?N zyRY(by3&)nzoZH1p2jKa!_&P)RX4l~l_Lf*MAlC=B)O*>fz{W9TCc&&vfN*M-ksF&-G!0zzXt3IO_fIVuw1_i z_w^xNE|3a?849wa>S&x0doTM^wj-&+*ax9Ouk&Gfba7nj4-ia7CROg76Pg+}bS!E3 zf18^47lUp7OzPA>kQN~WM-x#uC*iL}`HMgG2NLeCkC)@ZuY^1HE8+J4^HY<5HuRtN z|29EURFGR^_* zf~fYJL@*BOBa9#J8051ZkA!ImYD~~_T`SE;QkyRV@?d=Mw!u3Xe7~LQ2>Gy>Z`KKBBWjcR*i$Nd z-FkDJo1kn|dR^V51e2P;#unA=^$HfkN-I#?NOrO>WBkliw%^ZYhtTH5kMs{V!DXl8 zy0@9a+$T+9^8Yy{)KEfEO}iHEA(NCd2ZBWk3tpC>Im1J!H zjw-3~j1QD{!$AfujV4@sV)qKepCq@D~p$I=K%H*dAwKn>chHj1 zw1SN*#rGgjJ(BZ~?7Qy#*lH%&*-R;^JFsw3DjNtPCeIp<^+TrNt>D(r$+#WE=hmi# zOOOFZ9`j_Y5-^9lei!SxST`Dy85~DI+A#Zi24vnCRcNp^EEc(ax^QKQIIRtSgqwkj zwQK;d&#NB$CONCevi4GDm_ROxfj`diQ&=-ZCsuCTU!SL>m_Hk< z=^1#U*4QwOA2Yn+-R)->e6@q}P=Gen2ztC^1!ezzF?s4HY8cee4Wk=pugt#pE;mn( zmaw~5oWcgp+GjEKafOU{&F8VN!eu*k;ve=9W-doievnjACGP$T!Bm@eeB+3GzBD;l14s5cEy_Vul zDN^OXJ%=83`@ml19|>38c!talGjAT7fR}?MdRb_av?=0&ej!cM=r}+%heHA@QSFkD zo-+1MbZ$c;}>bD#;oFOOg4jLs=6D_g}#eiVpF) z0qxy%n}pG1DS|q{WkQzqd@BfoY+QdAmj315(%IgTrhh1ik1yS{61@jwxcr!rO#UVb>SLmM&R!vmKk zIn7*)Z5BZntZekQ4waOdXZs%H^&?efd$gll)Ve@O*dpMRhJ^vpQP#;2w`c@8sJ;HI z8A&%VYve2*2(enfkgQhFbrnT8@x^bS)dc)whs1{=#WVA4jkas^H>|Q^gwG~Q^70w1`zVQ8cC@Hw= zgyD|VNjhz9-7Nm~Egjj(cM10}w!&}p5p^pJG6wA5mF;yc7yWf^0e=0*QkWUc~NOBeMtj=yfpn0Z^CD+tln&K~UwcBHES{a&Qb9*>D;|VpI_H<&E_t4qK+?g?{Lq!q)hY`Tc`m)$#oHsDJCp%J`VOj z;VK%dyywvwtE7G>YbJb>Z8cDtRAMmw!4*V)P1F_B43BcUjSqOEl_`v;QlME z-|GLS^#>_Q*=#VttiPdj_+~M89R57c6OCvQNb$3pX}Ts+$Sp`ID5j_6e6Ki-B8_L> zhqqcJVkLARpJUL@yJ_$#@)i$9q>Ife>P|Q8e!3QeK|$O{4OIw50Ui-G zVW9lU5Oe)*hj|M-=FvTB4rPh}*T>y^80hF8puL3Z=;DgA{Z81!-%&&TT;nlX0?0O? zP~0^pis8f-A?RO7?#K2mxITj0Dw~8XM1&44l$B;UT$iD0$jjOsbL5e4y0_=L(t;XX zh|Vy^02;k%LDc_+3wL{?H+UqQZug9k6t>fz%z|W+Pv({Oe#IK=~K`r z$j)N?eqGn6}Xn zH#-|=O~Eb!rrwSm7Ga5}P8(t5SxSv^U5&q~y(`Ceu{#j9lyjUTEq^u@y}a_Y=WK-d z<0wBL%JAiyTHR_b-GR&det*Fiu`Js87v+1?KR+57*x8xb82^E2Y2di@gZ0bdg}z|q zzaXyv!@mEs{M*Q=y!Dl%!hGp#7%&meS~q|K`d5mUsh1O?GREC}`2)$)K^Y190o~c? z@n`f!dxObu4?jMZkrykUkKZc+eE@Iadk@xii3MZGb($ypIT*;iy$mHo@eAg(;Lt1;bgu%OxR49YBE5ywS>HyWqMtK!U$P zM@h7g;l%A?IADW-mq|vjB`}23Z$92Fy@9Vtt8+nt0f$ZzOsK$$p)obems5RnHlb-K ztD~=`(K0f_5yr`>LpNiwG%|tY(#T`nF41RlCA2Q6K{8ySQ1GpN)&NT&>nnNnwlw1N zRc>Z;aP^p+Qr{q;lnG$TODU^@r7&(pAS2I?YKglxxTWJ5-uHjWFONGhIOOZfiRcw$ z<~cFw82Y?NUpG%8RBEcs$6E&l$PSm(|17yn1|i~}AaKnCWcu;yzaONF{{=#g~ZPjNE68bau zhz5#&sZoTn60`JMrPcCK_~4JKUT+RO>L%L0zu)2Pc~Nrq~17l zCsyz69pa~zp_lb`WQDK>WqDfc-&CSWvm$<)1kDs^L$9(MLr)0z+97^{q9w&z_KdU{ z`Y{T|vlq|>_;EP`%lTjWQS9l{A{zpfiM`h-_{8ZNUYuN~iUuY;n>Mq*R3)~NV3@IxE*+w#JhEtt^>vw5hh5vB_~y+f8XMWemd|_q_)=Sfhz{ zP0!vA!EfLgUz%q5;XzETT?_LiO$ zkghL=$yWH2$Qq#w^XfvRQ|g5$4>@=bgGK$>>B6}1*QEr%I%n84W(HfHA5B@XB1t{h z!QgL1^-ztW3n-&kSvIsC4U4@;Bx{PGy3a`%k4?IQEN!)oba0$alr;m#N-Tlg7uq{ai@0iB#JStb{h z+zbB7r7yh)>xF+2>HY#&`}>@WKXfrX&4L|*{{mxjVgC|W`ws*EvHm+(yHM4V+Y>|i zf*?7JRd(zofUFgo0SkDB?YJ(E2jJL_7EQ{O*+oLC3|j5Qv&$F*XFJs_vrg=_S3Pj_%}^vaahq7?{2&2k3p>&>BGD zV)Jvc43}>H)Uc__pLW%i&e@ps`g~X1liWFAkxCePa#fc{OI_LUP zoF%VK>{Weh_J?87(MrnN1wGY42U1&k^C*a*GC&-{vJqh$36cSG{?(gF}0HdyXE|gz`#ck(#ew4qyOqs;SU zUZ9cWrF6FG%{|9JXS%uqQ`%fH*n4raLW)73cB=4DeT1Q*P_=Lrw;~2?slRZJm#sG{ zkiJ8w_aMtDSqQVlwJlUVwncAu2mox)g;uOzjT_To#hB9vDo6qXDp>db3N^Q?sp}rM zN|dWtR_C@P-N&)g@ElY95_d!z1r$Fc1jwQUj20YA^gQJDHkI6)s03URIJ7fp3J7!3 z60Vo#;+v@?et!AE_R15$f4yVs@-_$lc5mRq+EPnOD~a3{G%5rEf%ThnfnA7Km3FTc6^ z4!rr~{+rT=_Jp^0>oEz_owsDIh1!gtYbJTiwkWrlOSom+mTT#?rd(Dq{cOd8z9_3{ z?Eo#r^fan1w^%^Tck9!$(ks76&t1*|yuv9ISd@IyFj zn~9Z`t(vWa)gQS@jN?4%H+=DCp1z*HfCT(sZ2Zrk|L%|#js9w3WWWe~;u$EF0-4z* z2o<$M1Qq-l5Fust!p7;)}> z0g&L1*d_&Z^bQuV4dG3Mx*KlPo;8dpw0w~^nsp;T^6sPL%b6*+6PxTE8$VNE>!sm;^L9%r+> z54@W3iyyR`|GOvr1yR<(#l*qD?2j}fkl3q&qJ3Q`%f2p@e?da`9|rzo{dW$~s3Ie` z_BS%E8q5i)fPH3@P$f<*5yAIDWl`2n6(LJc9NV*V&2~%k@Y^l!dKW|BT~#8{I#<5O zi469=5d{EoJHoPxFD8y1slW9ifim1KT$DQDF%XFIEY}YzD%wnC>XJrfIOTfT8Ffh} z$jxs_Dl*XwQdM1n2QSwIdJse6J;p#Iq{f96J%&MP0h(n5bK$e>i8p(dcZ&tA*@E%? ze3Hdo&$-is0R<#M6%glxT-x9tKsD}X8AgPtNZ%vG!l9h@PJ_oMbJf8e6Xs-Iwf2yF z05DgE!d!VHDL?kRKK!|99b4FEcVIP}3Fh~N-5>y3%CM5EivxyP<3!PERm(zaqYhoE zqhUAj*@;4}E96#C!(6s9f01WbFvfB5lB$x%xidxOSxCn)yP=CB^5f?8+(M|3VtV z9C6zWZ!&6GL9H%vqe`*Jx1pvtDNVh}rUgoi&pRdn`!qTl#2|V4X?r!AP&YM3KUK$f z;$V56PV+`4^&k{ek5s?)D@Lf%B6WRGe+#Bm_cTa(N=uOQWO5yzgVoGsT|fq03(i*WpfE~??>4Tf>=o0n;=-c70mbDtp1%L(x^PH_8+4Shm zBM%D;qyi zJW8&Eeg0E3^Nb+B;yBj-%ERqOlT$OUnbe+l>TzghWTH~;R$=~UJE z+o(P7FC8jpd@8`S1ZT_I9vi?Vd~-lsNE&o+^I+fPDnlYBi&$me>N}sU&H_Fhdf3<4 z2?(IDl$59Ib;oa6Iej4PSWbXou3}uJHi80_sI$Jq28|)RXjxI&Qb|cF(G1eneD_PX zG2pjpc04FqIl^3i(y2IgjqCmcNX+0`rFqiSXSwmC?+$xjEU-Q7u|>c+n!`vvmz8}o z`%54hA;XLEc3;3&Sv)CZaBiSPTzts_- zq7>FxE+hDv;`2_`>aYH;SSADcb(OOfF+0GFC6SG{hED4^4A~u-fkJ-G3PhxavDG_8 zulLTF3rI%42VV49oYMcPs%41g`&iUm(oM)3@>0y0myK=U@FT|a*Sq&q@mW^S!Gz(h zMI1}%3RXQgMJP&F=oW1XHNg+G*|%9;MG9FUrjnJD##m3tJ+67^>*6bQo7O6gLvDmZc!zUop<~UA(Yct{JR=Z3)s*m(z%6^EjFmZ93+%v?0=I^%d;eLW~s` z&XmW~J>&wE9`m4(X1RW-Tk~NYkLS@xWIW}+oRf8?%aX$gKVMW+VF#ML_aG5p>l0bqrrAs2aeWkL8Mk4b?ZIRI=J}fs<2L&%+Eb?U6FWi zC2VqvKizBxo?EicKmk{WOs^@PH8qADxU zCj* zohf$nz^5z8n42jD0G@XW;P&$4(Q_%UbHmpfV=C3(o$QJ^9taPTB6*TC=qwTv7MW^S zL$VH^5ULsbDlODKTmCq@sw=pjIVbi$Ojo#VCKB5relcsjcap(=n+QL}5a z2YdvnqG0k!5cx`a_gZ_3gme$bKyF-r?`@Ct5T2$U5v>m1)hT zu+h?nmGq1=H!zcqP{*(frts1nvXUDv{P~OdG1FEWNWb7Eu$IxOkZkhBouwI~npWhX zJj5;k<~F*r zk*8vMv{=3E3(TL!F4$w zgzUPyLP^Xtq5rgqDshtY7UJ{MZLaE^VqUIorB*SiyLQJ`RIA45!D&^5# z9bNE6)FLUtBpdSZFoag)r^P3$jJKG(BIR1+fQQCG4|W#w*^!A%h^^}+#oD=c;mtAZ zFPT=7Y7Up*Y(o`ADV>^JmF3Qn19F&0(x5>txCN&k-Rl&Lnfbd#zVzh^w@;l5C}y+Y zsahha#(G~nUT}6{x;yk)&s5evhS$hZ9(sJic>aJUTG#D?;JHUBPFnDas zCu7PGj6=sqP!^x76jvn*EW~quV|q+8t7g^f+{7snGNd zRH*SmvaNGulGNSMA{)qcgu<5MAwnA#kn?mkNU8%8V|yF3#$`bZ{G50FEw?RIFV*Gc zGZdVj|96#Y_N^o3aeI8b)$hL-{{LrLmOr!bFKz28ZQ%4pYI6U>ojw|I%fnt@iFx_g zREuzW*Tz=u9v|0WqS0O!F0E36Mvg9$SQbeB3_2 z3B+X+V=d){*rkX$uJoOxosvd;>SZS3AO3BrC5ifsQPq`|p@5&yVm}U61Ule_|Jl8-B>9eZXdJKbB*X zt)+v_r746KO1Q~fTwP-}Tp8&~r|WG32A_zObAm3t9a?_=(1-(Pa*tiu!`0C-%DQgG znnXRh_>M=th9e6a4U9>j$pkP%L?V`cg(loRq&9&lZInU=1lnOT&ln4x5IznJCc9_^ zcZxKjc|EJ>Sb6|A;kO`_Bm*!xY=9`5qbST`)?F-U{DGHlzaZQ`>C~0KdUr2zZYu;{ zo~R(sWWMp_t$;%T(rqO9Pkjp^sZU)Hdy*8ItXdPzeJi)|B0;#sgxFV;hV7ccE78Qh zujy+@obW-Hjm;!cDhv)P8>2sk@{;ubk%!{ zwINWLhMN&cAQ6k7c+7+tqizLPHXssJyC+|G^h4a$MI=UT+%x@#x4Vl@dg**c1Q30P zg7g`zM>Vck-+n!X%OrOX7NkzN(dp0GNAh&n{aoo|EQ7H^!c3+pO)QYXk~fFb_lY1% zMs#2gn>(@f@a*mdiUyassPZme2=Bz#&2q7UUk|<}iG`J6X9}-%cXd6=_y81)#Z%+z zF%^3eEIP8lm`H9B?iqt)1AhORPykue7<8OCUPVlsIA@-AGkL*fB;bP}X3j*w$vloR zanJVcF!NiKi5YAfXJ-7WKZS)~rraD(ze|c(ZbBLSN%MTB4Az3_r>4=p#gVU*PY!LK zMRvHVCp=f|0a_|nL~edN_-ChC$k6-E%?YR1%BtcVtRF$Y0*pSn))B@HNmuTQq6 zdpf7`+yQk#m2tZuF-ef_-!N5q7pm|xBRj;q&diaq!WZ?Q;i9|h#l{(~EpH#nYmLoP z_@m_L#RAUs;HC!I`vma=KcLpHH|senXw#9evs2v7c|(C<025?n;d{5?j1J z0Ic9*hTeCcPw#=2vEiQXJNC@+B$hd)1;`Od4Ol>rA_0Sr+@Z*bTl%xJ@FGlUBnn;n z7|`>LVRkH##7AsLu_u5?#F%?*(*W-hl{!!?V4$M*e0AzDNdgoI>F+)Kfr`UgYk)CH zL7Rn^JTbNP^mJpUz=k~dxjT;#A0b}{!7Oqttpt84iTDt3C=iONk6;8c2bt3&I+tvW zM>HUOCjxVHaqwWnz|Yco{A9e;+tiNCygr(ZxX1a;57$rojoR07x>nZM3(Id?0b1FP znL>m_xf~-yR0pIPKOVZw{PDdblZYD_m>acMaLQ&})%7_xL;_qVc2( zfdR~*SJow1OZ+4C2^h7=(HTX^C5|@s$rvi68EA)RKu8G`oUj`mnPd%lc;1}>%mTC7 zvl_kNXHB_F{49;Tqyz77AXG`r;9zz>r$hN5yL18Yb3CdMO;mLhnx(MiWiRv8rF}V< zg;8-qMpfF+A2)%zhC=d%`?UpHgScAyHXB@7r=UWc!kqYZjDtw@aD^l1Tf?EKd%x3r zIO$(UQk+(t!)F&anq1_17pVpL1gA`_z5)pW5rAo;m=ZHJ6cky+4f8gOf}in5-3&q1 z{$SeY&**W}ZOM@f#y)=WSA3GaKg#Ht5V%{_57L5(w3Bgc8WAu%xIOYm|DBKpVGPT7 zDweBlf#o;aW^5{oQ(ffW$%kk)!!jKb;tEJs)g<$Y;Sh2bKqH# zjQ7Jmb)XWWE4Rb*^3=+?L4pt-JBkNUn*I!ZdlE4Tkm|VW1Et}+Mu*vM(WA=;pWYS zRpZlF{PD1DCz2z!#E$Mw4R?UMXrH$e>kA0KWZjr6VQhmP4&8_@{f0Y-bo~BWIK7ZUpT!K_yC^j~ zZXH=?-PBe6p@vjI+8*ptI@Vs=o}7FwF)jv*tDLs$CvB}1*&pWI5?!tL zr3U+=QS!AyqH&rTWHjPl6OVc z69N{AIdybhNCg0zRq$f4m4m%nb0)dyL~LKy@dRVb zvAIn#d-n7o)m+SP#PhSyy(L@?-;q4nm~Yd(6xC^%hRFShsM!*+dv&2oS3y;>#y`Qy zywe3^ewj8=A^()u1~v;{*Xz?ePpkZe1&@8bn6Qwstr`aVNph(;#sk!jW!GGOIF-Mv zE+C?MeMjV`A6A)A3Js$S+*Y9<+jS;4M-aVa6{)=Pv5l30rnBPt@ThV%kx|cULS7SS zL>3dQn#ZCQX@i3v;2=d40bE`I2GIJGzt>SZ50VeFnJ(LzTph zx2PhEDswfG8gm8EQwy>&X*IvU%sYL2OuZZycnl9dE;i2uNkHzvnYTU};E|75b>rE- zkI{d@C<(cWV_MwI*N&|Xn~ui@?>8pxj8UItEAf*I3&xNJ4QV2?~dsUX|ZI%#+r6`=#6<2?p4 z#8!Ht8x(i@(bu#};jWTXkRhvi*I(;gCtKKtz!#O2}_*HD)zZ6j@sLTeXlsAMnScTK z_p3i>hVNoq>P;#b1i2I02W&hmrFG9SXZNfWv7*mGQn5XxIb!gAHhYyRa?uPWgEFE0 zi3D}%%-Za)O~sR9-SZTeW1G>RdaP!dPp$j?5ALYUgNtC0-I_W%GnY}Vfg~I*#@Id_`1^zbpir(Zp)eo)=2EXf zO1rdSh1M>OUnZT<7VQxrguIrT0)pC3~H*J1Gy#fqBPm^^Y}$hbp~+y1TIDR z(n~8uVX=(wWmUhkaPqu=cy7hhfdvy?N!uq+!bXuZW3jZ|mFHP>#;CI@r<2r8UH|Q? zBtmCUu0c3x%v#Q55flZqInDFcDR@o(*!q)A7XIrri*1JM>zN4x2_g}y)r)j_UQR82m=NdhI% zOVeM_JNgSH-X2&Pz*a&2tNlwVOe zn|xj|4TiNe*YP;%=n5pLw{#$a3kn}4!@4GZE?qK)^4}A5OS~>8lj%BL$kX`O;sr7Gm)wH>pR1kzPhLg;Py2rd zcnu02thNp3vMY?U3^Mx7-c&j*0AUO$gH?3MRgc1fUl= z&)kST)iq-bC}0(6Q0+p>IjxGRPus)glGzJY>h1%IFhUavjOTzLcEb_9I&E~~WV^lr zr?TB-p8_TCIu4ohbv`7Z^vHCQ+n?%dSj$^uj21Bf>q<66ItZSkbND zF7S|8OG5~`65~2wM zPK*C3Soj$;s+Y6k&ik`XtBb!0d(cc*b=D~X^ygg1Dp4gTWS-;vV8M^Bwz|f~m%LAa zTyu*9Wf54xdUZ4Pb=kY<0AAT!T9obAd4~S+Syo z2?53jaN4?iu^ujX6SvzzmcWZ3js)5ZBT1Y_@w~Uj0~2ON^c_g@7-uJ?sNf?4Juiw6T&F+ebgc;v2Cy4(Is^2A_u&9S3%-wx7ky0pecENwWg1w0* z6Fw~7JM7!l>EW$YDn81<%%SZMBxX8dcr>#N=LvrrF?EXI8y+lRz~L)*v6QGGBw|HN zgb)I}1c5Q<=p$lK3_lY<^-aAQMS!U;Bk?AHvBR^HvO!eQ)~fzVYtun;C3=_~sNMKl zS5U^(04Mi!BM3?6sH_^S@XM(HRynh6nH5(=jC+9YRgKIdKn{Wc&|byoovqKXBLEmy zf_rfe3p|5sA`xk0uG(7*5A2X-OSg@)`?bnDS-D&0Xp}tw=#xay2?o&voQ)xZFpeO0 z;4Tg+pun6AI2vq!B6!_cwdY)pv&m0hP2YNhw^!5hR&RoIeIP!cXBh%}B75Y42=U8| zxVLto-@1FP#82bHS=N5Z$F0P!v{p|&t$aTF(U|T8@?DO^q602_3eU>ks0vpv2(8Z; z(>(nKhZ{fPPv2@YtuI0_}D`rdCSP7h*_3rk#{j-;`>* z+M$VDYCL5W^dDNU`|(LjIJX(E%dRfEpr$4ntPEwu%Hybj?RLB&i|!~xR4lHsISrr+ z6|MV}Z<&a4!WGDay%Bte?h?Tjy<8VTsXZNjEPNc*zy`bO545p$2t@aM2J3pz|Lzwi zA7<3~(kKI*2JUl(+f}r<+ZREhO&E|noC&QkWB6GB5du8T5@E({{?JL{RkxRsWxXvA zC}H>0^9@5R)~C-rf~*ZRQ)FL8p-IIm4ot5*+&zqalpztwMeuhlmTO;)*8Ajjo%0N0 zd8TG1)evN)t=@xdNY#dZ|@ur*)d%Hx#pt;CbDyp^vmF1H@%;}cDBJmAwPS{AGBw*k zJQO?9t{aA>0>FQ2t4;oasyg1Csy1r2WF%0IJhC@_1w@+P@R_psvAP_fprAH<4eDx+ zz4SxV8ku^&{q1?|Z;;tC#_m4j(~=C0q=$xbepXF)1TdG((p#2x*QS^39dlSir>=jx z#x-f)lk^*t%76@teFP!gnm5Z)`*yXn=OM4iuw>ie- zW#v_N4}rczMIT64vUp-%U_oXJZy>e08H_>$fE`?Z@!dGh=Dk?P1rDC$@@KbYRqbn& z;L4q6M!uCk95Ut9KMA$>ORvkxE!(_>{mAa0W|0YfEDMta&2zw{lngW=ffZv>9J9iB zHsYPMFn}6BEMie#CeJpU>ppwJG{VOWrK4*(auVhQ+xj^CgYc`uE--M{I~TT3@ZAN{ z|Gu`>PpQF6X~ir?n9tNc?S)K+7QBU9(EtO2I{^XMx44oQJaVWfIXSs6@dCn7%cmb0 z*dXK!(@y z{4)o{lpd;&2t{11*IOq+J!-%fAfhyvD*)dgQG^_1NpMK0bs@-g$Jj9lu@FKe55R78 zNB2dSez)Mn8w@y71#UhQQwt&=Mk?XI5J**V%v%|;s|vE#VU;6P;E*ftMY19^+_xRn z&sUD~v9nI;xw0uV)Ow2CKyFAx5km#{Zh5y z{ypL=9QnH>i~vD9!-zkpOj^(%t>Y7FKHv>KaXcFqS%0 zHy?E?&yv(JfP{G$;!3pL76r8{R~0c)P2xTXde@^${2)p9||*!uKk zyr1t0&D0t15}LuU9W;mfCklU)F@h)$#h+0X~e&RwqkS@KomT+NHd)SswC z%yMv8W=Y+;klH6-8fgaK-d41_aOl^0FAz_%o%|4B2!Vvh4+919ho)O^2sgR6;{5Qi z>t`hSI`o~#(mp+wpo&{!G^^Bf0d6Ji^%)81*rMof*zG8BHbNIOfemhxan1vj3=`wW zm?ZM`+~(*hx~^RPSL39GzQJ9*Yz{V7dW8PG;w+Q1HLVB=qu5v}xegr&1nLN#Stjd? z#Ud<3sm!bic7COpN_#Cv%LrM5)1leEu)x(NQu$|N_K{OyVl5Tnx7>;cz6z|$u3>a^ zd7h>Ba1sttv$6mXdGa8;1TypPD3q%j>TOl-FNvPFV^|gn{>3!&hk>9|<&P@&zap7H zyQFp(2k%48J7_zmVP+=^8hLalij8X4UFtfL<9;e_71jO|#^uL__!|}D*R_AL@3s`V zivbBRR^0yVuoWXUhy#xIsgzLY$@u2%pH5&jcMX_8Ojf6d9iH#U`8+oghu!eL5)=tv z2H5?zC^_VeZVRc!AP5;MdOw9+5u{=q^3+#qZ9&)cBpf)s$4#yZ*iyU_!LXw$9*xWQ(YSM-o<=exNB672?nt#-hmKkceX2>O_5=1FY=!*$ zHPDCUURCjHV?=keqJ$&%la5J_KG(1S!)$R3+I#AwK?#h!)&Q)G@+w$uxG#KOquy9= zCIIjHZ|uaITS!P|qxH1xwCG zR}bnQQ=c=@zawPMfU!p@*}`lWJJ0pXQKjhmHfgWh#_Ayzh+HzXh|3cODZ7-{y_UlHL?j-2uc-p6bj^iFHKhno z1HJ`Tj+><3!fKb-)Kof(cAl;7fv*Vo{_SoOo#Rq5BZHt*RUu5Q`cS74-r)jE2WN+r zu^L!rYJSoZ){(x@_s#qJcpZ|~F5g;>tEp1t!UPb36_|82d~vO)rRE_mt`ua)CIJtr zdwvWRnrO^3e`|~dPK8ljcfLm8p(&ZU9&D69tVHgBIi&~QKLAY&et-H$LI%Xs>8V+8 z(+e&9lgswV^7fCXhwGfzIeXtB#~i(x&amvKF5SO_wkwY9s)8k;K+)|7WZ5E|s1vtB zy+BZ8ymZUHH0k){wT;Eo>JhaDe5Ac%!Q?k28XJJ_rxIYI_=>EWWo9+Iy?8f)P@z1Gy6 z-yp!U>epqOz}n&}}98#BexLal+lNha$=-*qbZ zT!(<&t{0-c(~P|ZX*{_UrBp+C+czwll<%t;G9GwRjK*a}n2Wq*n0TcZdE8RcP2kp? zErNKEH{m+dbbQ*(u2T+orNRd;z2yPKIqIfFS%Rtf^*(y}`F054zJDT3a3iyA_3C>y zLq@)Dc1H{;tY3QlmtS^#Ff`^q+3q)H3?1%Zr81(g6`=G#c1MgUqBDjGr+`e?!6i*U zf%G`wa03{!v6l7|4}Yyh`AxT0u(Y%@wefZ?0%Nt+;7^hm2h1k`C$Pu$P>=-Z`fpSn z-e8pv<78gTu@RptpyHDk?oh6fL~y!tMFKB28t+k6Rh^U7FlWK#bqIX&v14U69?S^w z>moNQhV3ca{1xpa^+v#N-zSx-?lB19mkPkFFdS9t2q&NBU%;EvrY=|s=^m# zG?{j8utkzBFiOVgoJQ+%K5x#Brt7DVE)dQL?Ez0*pv<;&`j5sl$#Z z^xM0UYIqdZBM2p)j@*o9t$5Egn!*h`OhaRCiyI9n9rh7r&N~JA^?DAhn>B)Mtc=%i zNTvMopHbvHv>WqCdCYX-GAy10Z!ps7H6WJH+nx)4WGmY@`(IS`T7Ts&60?>Z*|05` zbtJbo>_Had*3mY|uch&hj#&rdd*KdT-sS8iQSwtwR*7(C$2jR$tdgshjbql8K=rhm z`hWqv)cm9ottSV&EHrbR7_h+Y`2w$;B644A1(Sul<2~P>@w8aoCG zdDH~$0dbiyrgJD0&{>?-{6{8iEh7}#2Whbkz^A?`y|jNpwB{SXieU;8f;z!{_@S&W z^h30JU)Xd3$%6D)#iYv9+9sCz34y95KLIl3chZ=?zTT|UosTr;bH{7>ehXw&*nJd| zfq)x8jOS@A{oGi}J1a^~edqR&(f}2xU!SHNl`#a&hmn_M9Z=IIeJbYaEj~o+S3G{y z`H0|H4K1Wl8%h;YCtm*Jjrq3PHcK2Vw^|sJPAQtg#mtIA?eFc2m)lw^%*GQbR=|y9 z3*5v?zQ&~AP*O`}2eYu15QcX4qdtuT3WR`?#eMkdEp|h(Y()J|pYP(aZyj+U%iR7{ z5yxent8L}ZQpVhYxwKI6LF7Gw0zEN`oUdBtHp)s&m;&6O5Z2O`iUE{}^xxC*4;(M= zl0mUQ7(XC^(v61kdy(Nuk^fux}x!* zNtsDHdZK0Tm16Elmh^7T#>+73GD+C!Wlpm4Y|#NYme^}4ik;wC+eq~!~p+^w7MD|!03b!ZxjGwmw6|noqe%9+HyK)YyRYDaEQZLez z#vpBG#5CB8s}As)!z)gyFdFZ@I2)rd%)ko!U!Z#r0>LL-+E>nhhzQinN^QTpa(HJO zV0w)CUZwnMwm-)q>b7ROqFBZ{*Am=r(+zs*^%?_s$n+eQzeL63 z+Jw|`y46kArH&K^>@){;L_6&)VbNlIWxMHC{t$ZsgOh~cq%Yurep?;|??=2`c{!CX z4koGUT(9ly+T7ga;59@HAg6@T!lJ7@jqquQA9ee>FGc0>m2Yy!{Cuf(nGFq>6LzZ} z4ex`R3LrFbLLMB|8$_EPcoKme!7%IaO#W2~zZnz*j+6Y39rlqqbwtBr?7Bb`brrcT z4mj{HrF%t?7hcB1K2A&}focvpA!BB-^>wqPI6CNgf32pfo6G~g8`0DhnBemLTe+8) zPcipW(3;+bY7Nnrp%@{ohMuMBw0@FQ!xPSqy(l2A+$3-XgOTkiBl!scSQv^$Ol}=B zmJiSuG}BKDkfurc@7EDAE|rC>ik)Ie@<8+|NUYoji2~<3V`w-!0Mbo!v{@`RRMbw5 zg-V|0=af3O%TJ9?3xrN+uKjHy!isO)w6g1-y?^lXA%j)?@04xFlk8=1a@SvOx?0u> zu6}=kL~MfMLDp6rAon7g+D9A+vEAz?epvTf=_Z}4rRDwl{JNMN0FV08^rnyNEk z+fQ`=&y`Nt@4ytFgs+CO%1SBoV9 z&N5osw+*fF%?js*4{9D^Q;NpHn}85gJSj3B4rzkKu9^Uv&6*>PPmn#kf%}nNse~wG zu9Eul?ycz3?DB_%StQ56A1;FmUeP2&ST|paJ|Pr^fixbu->hv+3aOF%kzjjTJ$rXi z9zYUlXm^i{Fk()lG5YC2k54@Z#PA%BNcSg44bw!A!7{|mS**$-4e)^DZVMe(`I-c* zJg29C))a=y%eHCko3SQrD~#sSTmcJ&pCe;+^~4L(>a-Ep0C5UT!7vdW!)%8}-(wx- z`FTDGqdU~cD}8J8`+VJMTcP+G2PwkCRAV7?o#8qZ5Wb)FTR ziG+cc?g|U=8prZRhH19W@sXh9E_u@DqI z0AL%-JiP(l+C2fi@Tx#Afo4u3&~{zbH2*}}dL5TB$I;QwUxMQDo}(VRn4DZn{%E{7 zu%To5d0zD?A^le&eXBakfj1`kt_WH7M#f%q@RRbJ1T7MJ#t3 zC$KFNsW3bx!j?;Z;sQu-$l9JYmI~oOLH^Q`cVa2shPq&U!=dAJH^KW9hv&QRZNHPC z?cz82fMT5I@mYihDlC~dX3b_N)wHkjhig(MCH{aKNV!D$*lwYk1YO=w#a7L41%na4 zUA=|u%*u!wprUIfpzoH2DoClX@KloWl?-~-0h|N6Akt0iE<%+p@G?_C=hcP*xZ<;J z*X#^Ghw|VgtJ{4&Lsv49&Tui(=C2N1AHmx{ZHXhU`>z}}Z6V{gc7^3MwbFmD$$TEF z!!sl3-d{uN(oeOWgN>PwkNQ6yiyX@n5ZZ`pqguL29oIWLUd7VL>cP?0xC{P=Nx1JL zQUqZpk5fV83CvBPa>`rY-ytBR__wHX?G2m-tw66qna)kt`acX$Y?=HXKc@P=c<)@E zRTukH!9++fglk8?`b(7xFk$${nj{JMUi@&2nQ1#buHvPZ0+Gwd9RE0bH8T9S4m#SV zwv>YPu&Kga240*YC7*3R!zi1Hw9B1kP#KZES8_gLoOK%kRX65Wakdk|inIT0tKVX% zeWAYTITJw!^dF6HL@}pAKSQ59So3`R)bqzZOvXFWf1m1X_mC5fe*M49w+;Ubc^^i< z6p#Py(Kf{VmS6L)Yg!6C0D%4fKf(R?IR96p#%5LPU*7e9JZJ2k`P5_-hRs6_vNHi{ zh+4t2(1c{Ts>oq93TSMQ&VQ*Dw$r}5I27Y4i=b-pCxL$+k8fVL9A~xR{%O>K=Z~pS zgr;GDm21$t-yA;ZU$)1|YYbuUgrpksajffviB8QaT;3rJD25@`15GR9VyHo$19u(f zMP>#5f_kP;&iuw%$P@3d=WvHUMTE2t%gF&t2;#P0tHs2v^AHw3Ihj_h&Z=+)(O;@N z>zTQG^(m&>+mE$6`W$h~xmWOsjR>WKM{XHcc(>C?u~#QG)&1d4uv0ip+dxS5k@(n+ zu4IgaMP}QlgZJYOdZJe9B%r0q#*z@zz5hh^pc0m{4Ii6hf!@SXFbkO4B!vlV-*M9s z@0CtybE^hFvWq@K-f@}Sk7CIW6!u=NtOgVh;OjuERT8$MH*)WQoh?fWkz;3R%LJ^y zdSPmLV@sKs5)eK&tUAg`FCn19BUBeqXtJs^)VBy2vA2Ij)Kn^nA zCh}AAX!H0{1Rz+cCyl4Z&wQHyb5<`}YZ_yp+q(M(Y7WK^8oLK5saU~A;a= zsVwLo5v)as;RB$A74aHCmTrVj3%VDM*<;ecfEr20Z>ARGg+iLo##vt}IcZDUQ&nX1 zEMjVB$5|B(HyF!e!zTd~8NJGJ#$6=zHX_P#|3rct7bO@XF`ly29W~)Dg-@eUk{Iow z(f*II`>G)9?PU`@1!>g0`s2x~*=k`6xiTSD8nQgt3pM5k0>Ovo`@~|OMY#u>ZZ8a= zctj78XSC%0?F>cUyp`a|!>7o0BL#q97F6;1iQX-N;%nx!3ix;MI%NaGzNL<{CCc4x2UP77mJI!E%U*1mGW8&D^eHlDUD z>9Mm1UJ7Gy`vHf~WLgwEN`RVP)EH#wvdIv~T6mr&3Q!ITy0e^PSy5M{5piAq9)zM; z6rs!Yj?4SPvdn?(p0n|)d{cL#N+B|8uU5PbWOFdd`#fOei6_y$@Pk7ON+T-qCXUkjk@5eh?48jR}0p$#> z>B{G%j`LXMsE^nYwE|5Fv*lvz`cxttYSc)dK)SX%P;?0|9#Gr+(HsxWda!JmYd)f* zVQGFLccf4u>O={xtKvT}ZlOJ-@sthg>-4PD; zu=NYIfn`Qt)g>L@=qguy3NM~CL|$iXcekYKjz$*dp~_k{&28QrbXyFF4R^1JUMTYe zZ6qP{%)-CFP5y?Ptx_59>qBN!j$cx&9^B%r;|lNG{($~Jlk<)K3(prtTN5W&eFtMj zJM;eyX8zmR&1d4TYGv5(3F!F$Q*{4Br2nh)ulm>EVdEFl^+-i}WKa|oOQ>8eMo0h* zO9>K$b8JTQf?nHn)zNwBRW|K=dxeQ)Hdc*Y*Zue(og=1fI2e*Wrp*)}fnz=BAo5Il ztnw`p67Wc515^T(sWg|uMgO+FlWVx{6A9o%`YE*cI33tF|qEB|Bsca!8ny zHvOFbcs>T{@)X6=M-=)W)U;xr6 zAZ_tnm4R-hCw!L*nL!PPY>cv~L{qpV_J$D-V^rl3yJMM%%t7E&N$(^w#m!y@Y~>jT(6@@U2d3y-vft zj%eeBgy(M*O4{qzp}$ROL*rhUGzrH~a5ee=jO~!>!%94bZixw@d_DXGpTN1a_4_3i z=zeFS4XJ`8{MS0Lr*~t_rk4JALD30!E*(+@_g2^=A6wf3gRVR7c1Q1;)6s+Not%`n z2W=^lMEh)d4H?`b3Gt3(;caK`>ZYLh{$pX+mYygDB*9F}o8S{G|t2V7Hd5fh3 z+mJICZ&+w6q0RkL{zFmHN}iT?%+R)+&mDlQ&NiHtSa;b{X}7XMbk)apXu6C~rxp>%Cj1 zq1A}@Ex4oh;k&Cv;41}1ybLozq+Kx_M7Y%(n+-!Z*1h|K9z4m~ii!=vy!=#NhjiRy zcmybu`tx{SM}-csDZ*L4lQ})!bbX)EA&NhdyI5!B(VuX>ozfu>y*OakaH%<-JAT$n zato)*7?REwxqbhefy;k~tm)%LiToe|06dEV0BHSxUq6aQzvV2b?_fl0XlM6-@sq8Tb<8*Koy>3Gs{>i!B!Mffnn zOm>O>Sc6f<;+a?aAQA`k!MH#|gF9n*NtQag=13y_apZ|U z=d1+WPF9zx?Et$}AO@Fa&TIig6&u_kwGrT51kt)NJK%a8+{|5ks6apP;~#wNBYC9T zdisD-lq^-*RCsg)X;BJsj2QgZuWL|j*gAKh;;uFpAPgyf*J!?$Bz1EYUR0e zXvhdYiV53%-y|K=LQ1B%>aU1wnb|L+L;QaF974Jm6PGvX_Q$`EFSB(A(XCSI0|Q$q z?u?Lf=;+jPzz*Z41MM@eJ~<&v!D_Islx_X!zHLL5TMwP4bbhT{L+0eTj@^bt_a735?c86YN~%d^_CSk1Dc-%t z@T#PL=zbq5w!Maonb!z9-5!GjeFlIyXU;z_Nszwie^b9^IA0~~J2OO?e8D?>Axt>_ zS=whWi67v9OAdOaj|klyOOm>*qj?=)9$M;aUtgir1$4}sjKd0XqkG)2{~BzL;@cQ+ zss6lbFTL!gg7hkV!fO&YZnCEr#;-h6S`@7zme$v3w@7YG7w`=_A3vx|U!&GGQ>O0F zHLo3yb^A=i2-O75pW)stHPxE{53g|oE*&{-2>+efuq@UodLDn~xKrcNQYGUS!TH9V zSrPD^7Q$7eEW*{D=J&=ldizl<)+0tJTQf8ID&@mW#?&cqTvEf$@_nD0c`vn%={A%b z{gG2y6O(HLmnjifPNOkpc*1#I53D2?Bh(=gh`*zR&WKVK{xyWJ2q->K{(}u$+p%}< znH4|)1s0Q5V05sIgaTdLQnv2qEHv0(Nu@!n!!v(>cM+K*i!3C5VhIeLg{HpnwvkZe zprbT?Vo8-S?mkbVd)g&dBZ4fYeqxE$Fy>xwoLy@@PI)?2&1nn@fPuA$ft@`)P{n!v_f<&GSAOq8JMg@CmaO1`vMYfCh z?b4C8)@e}t1{OwiCH!sa3DU?)lVt7GsZZAH#I42-Izp0UTGYu`!wHaV&|1-ocGkH^ z4cZH>)`?p!?5H4QQIATUPUgP#K2tTQLIfF5Cmd_UyI^M87Nkmjkn)$igt8 zen*;wO%}1;8qu~kxYKC|l7vl^F&(XFJA0Hw^0ORq2T#`XO-D$y+0(AE95Dw^#`VZj zB-$KW1khbJahqLI?+@DjgO4nYV=z&I|Ku6=S6mgwvwWH%4X&oB& zqvHfgooctEV~z9efc|(y5Xqvk12JTC?sUS)Jh`HHr3mT>k$4d*qA07!X6be2u}bgE zuC3;=O5@ZnEvKjP;k_hSsiFgqu@`f``Va(<*`j(6M ztqQ|LRn4GCi?pL<%<*bUUiW69wz9wH+YzD;R54QV!-QJMf<C@C*lq~F16G1e{4jwQOzhP# zJp|hzB~es$qE?Hk#aY=#%aX(dU#H5tdP!!dSO$ibwH_=Yk6d6I&{m1Gv`U|BLlhZO}b?Sso zhA|!NSUdYH#(`JD@$1PVTU`<@uWf=_*8e2U^Im&k_#gD`3U~a`i_t>se==GlXT%_G zGyA)zH8A`boLw6VFD*G)aEQ3DAhOalp@4?=D31x2I4_+b!zmlNRVtyLA49INNNbYV z`}TcW(L&y^)@i;R@eVw;o!>&RyOGqYQd`Zqys@Y8{5rNw5vS`6cC!D8&A5K6mYG8~ zZq>XOiFUd#jO=<+XoZ*`-e;_w5<^!wjGq;J_(>h1I=KEi5nWSAEj}J}Qb;eIxFk+W zKyJ=EVT-13E|EpQ)o0tGT^P<;y?aRI7h1-{7u)w_@CrJTeL@|3LI7oEf-woK!yq*4)t@f$+*G6g3*5(GUPY`$tI(yS@i>y(#JZS z9OTRxVgs|yn9KzKSyA*aC!Jf1YDh)^I=C#l<4&7b&b=0Jr!)1YHCiLY9FQKnS}>R7ECEXhX@u;rel`SE#;)zGRH zqo#5qQ!wPcuZFLU`?Es|N>plrJFs|{a}4he{t^EUfK-dKrn)5TY8N1ga1P$nf8KFB zy6WC*q25oJ+&WIfJlT8Jfv+ah*jToV1txo((buafEH!j*m_aWMtxmBN{--_6Z4ivK z>h;JjKQEZ9MX-68z>Q$NTlJTu%!0yuL);GQYKDyW-kq=N z{wG)QISdUDAUDJgs{}gEoEfg+)A;$-`ILeY*zx8{aqV7efrB_w9c)E`i1V%Jo|gy$ zG#~G999I)0_h|N$a9+45^6t%&LWn+Hk2H#6mJ9{*?hkaIaCI^BeNoF^hO$n)vW~y9 zgYJxZAgz!6?T-eVBry=6Y5bkzcyxTxqWO9q#limk z>|*KNL!xR|SH*Ca2BPvW69qBPVLAj4Uhm@?f$GpIASO#14!S4@-(sdO7>GGj=@-vY zEr+XZC)GIq-P{(7TvyR|w!^J>czpF{#SHD<{`ZeXVCeFul1OZw-N@gfqG@oEH223q zlzdI0tCQK(lO*>bGBc@xz?^5YI!){v2K5=WnTJlv!!wJomgDeXSf%MDT8~UExJ+f8EFoj1%yOUUX_DrV;AL+?@-VWF6 z@zEUDqXYEp9a&EH*A>jAQYXy>e=e@0?p@?2njZamJV13t@|rDhRzNrPIGV*c9KmTg zbrR(5E#|^E!Yq(`_N{hB8Qawf9!!3C4HE)-z91_G=rY}<@&X*6RY1#ST$c)(S3ryP zj(7NFP_`0J>sQ3NgX}s^9eQ?%NA3u^yXjG&+U9h}+-jU`pEI9SnwE7Wm_>Z(%CPYg z`HW*$mqd&32Ws+>9&>1$Cqc|)3otRkX3rTc)vWLYwR)<1hBf&b5q+&n=Qny=%SQJ& z?P}|&#|@V>zy$G)wHV7x%P;q4$U6l)P{1N#M;&+QD`=~=Y$)&z+=|l5fheXiNfc^; zQGw6et|K?Zm_iDlH&g%(O-hwoTm6AGE_dJ;6TEEB+ndUc^3egTdf6M~Ik_Cvt>vQu zS?35kHx)+ZK;@n$9h<}O(+H7tbpZP5e@ERJ!%e*{D&4Jw_3iB{X%dA%L}wFFS2_#L z8rFwMnh|@s`C2 zI}{8noFw$U@)t_O(#N;5d&SAXY#uTH(g06y!SMq#4mh4@O55A(x^s4iL!PHC1gi<;oFz*!=eTO|#=YF)s^tPSRLDoCCSf z{FXeWQ0g5&9ovnHTdVThoRgJDn+}aI(4eYbmH~6ZonNa=oHZf-<|*O!Q!P3=gge?n z${>G#T&?5Mj^uP7s4c%&$X3+z`9e#^Yoz7NV4`8E`9gm(t+Frh&uQ&=ja8=l2=pz`>Q^zCzZ&o(4B& z0Zl{*(6Th!9~bpiGZNM;0Iyj@y?)s9|1MS#b+q@Ab5@)^Rda z{YN+z$!m2#eY?Rr%xCUr)x7?AsE@Ma`%v+6ESf#;DcAqJIYVX24L&OS6A27sP&+>G z?wuL@J(xh|w5nLD8+@+K-K_p2=j&Qu9NPQQ5%`A^#hRQuuYsV9B2@c*Bp4FmCms^)_um1(;TYAAs+Ls%^b`@V{y+}aD zx%0ct_PLvFH>n|PLpHr$Zls=Ku`5v%j`b*Im&lR1hsM$BxhVIy<}869D=EpW2#I*` z8^RX&kYhbE23?8YK_D$re84t`DtF-3ius?UhZttHFn0x7ibXReM!-#kYFTO45>D@? zo6fe_2!(;a@oYTU)>5}r99enUrWfp)IK5uYDP=#aKCli#i>z)r37EMf*c=yl-~=Us zo8CXfPpeP6u=aD&o~sWJcgC?u?_lm{+=%9LX9BJgXcmqLVNV{(d-ishh#!Zkrz&sG zS7MP`#@;nVMBgB8P#A!m*5HDN7oPS_y%R%X~|?U4@kJtXfE-pB%UdzdBS zKGLcLoNilPT?M}026Z~=cCLxGoCjBIfXEar$(SueR%-qV)E1WlNZMRbRCN{I{DC*4 zM7H{_s~L!xZ;5NkZ7`ZZtY>H@MTyX#J- zIXK;_=H6ME49yDX{S#6?2ce?iHXxPm?GM88=^1+E>v*5nLX3smZg~!@5 zHe?yv{>FRBz~b$t{0$8~PF0VoqdI~XKAywZ_<35?LUOrBjPggLjYG_rUI0(o`pv?% z8}T8@gVx)Yp0fq)wnG^WOq6=`ekLTx)3&Lnl(+P z5`iISu^u13sCm2o{Z2KYyI#Z_YwGDeh33OntZm6wvTe!N%zwdvLwUGG|MV4F^Y8h5 z;Ql$r&x~J-f3L(#?e!lNCioq~Z}|T^kJMTm9c%PgYL<`%06_J>qA4eCV`BS1aFOl) z=YHI<=B48%E7DI+FA&q0oeNou(D(z9xvfZwndqNxnWV%M4>s(GAZn>sPQRv#ohRR3 zZGa-N@T6nXn>RtKgg#rej~$Z5*LbJ))CPLO6w~3VQ@dE0^#Crf$B<7k5BaYBEBoZQ z#2pHAmS|LUt1;7)k15D8o>FSNziMHYr&Oe432#Y#KZc=X#2N`k!te@XY!{ksuHzIW zgc_ulp^L6Ye~O2k{|=Oo3Jt6iO8W`@&6=|m$^wZWO-WF1OAWz2PB8oHj?V~pGYWr{ z6OzQmn_dE)+s;2*oS!!YsB<5qCJ#Ro!rpcW=U&GQe?$wUN2V|Tnj!}_%i&(2)yHCP z%FMi{iDVDLVUKi_l}J9~UD|gO@+#A??V;oNc}>AH@Hf0W!hn4q3V%P!GLBbWE&-}T z>Z=t3Fmn8~|8ww2U#8=b?#R)V^)lvEcW3ax2&G@~T?hpk+8`H@F)NZwzX9+CQQv6B z15Z!#p9?+qRBs=_*tQ-oD^28Wei zh{2QD0llsf_zzG7N?-PEeDb4^KtHXqY+t6JR$b?5awvWbUU2L~TIg^44ToABoy0ag z&*4&>60zaRyG4I(wZ+v5>ft3D3Zrf%+8 zF*YGr=%AjSL-*@Tx=_Fd2M|0wX{!5I(gl3t}od@^M!S%l>71es?fu2%&M zP}Ymli8W~wR>4woNzFB2BYXj;$s3#$FkVL^02}wJU#fKg+K8^43G+Z z`p|q1y#tt|TqneJXpk+sB6ks4_<)4wIKn3q3GHqe>6X$WIaDEDcHBH9qcf3b&9r0V z8I4DvPI}M_?MhB#r|Wt)8-=0!Ui3H_FV}VpA7;lTtwCv^PqF;hVoQ~1_Pf76+vn3U z`rU;>PSs&*CtKg#z%hIS5jDme-Q$C9KE#vSN9{EGHptjJ?etRt0-`REj0u0y-lPNM0DrrNrLiz#LdqXD3rvIXCsyKXTXX6G;#xF zfWy*+_xznO1qfOJ1&>z&Q;vGXE>2%pHt10VIU3o?ixmd6*kj)(g!(+y8QwbiQ1H{O zt&`E>(ld?go<|WXpc+A|S5FAlM+P}ys6|*0XUUbi=0FyH@p_oY<_pcHQ|$`{?o41d zLNdMF76(zKq}2Zf1w6sXV}u|J;H+g6=L6con?XTqAv&;-QX0qhD&pdRR$k40mvUs1 zL!sS5`V(_Ai6+XH$au=hdwd{yMHR`gDoD@BD6M+o4F5&dLjevA>`KBj31Za{Nq{=2 zA&+xRQ4`>zBjC!GzA@dNhxnA2@1fo_IO?DXJqd855Vf2l`5Mc{@8c4Ur%*4L0hGfM z0k|dwp$5p_QJwIddFNMbv@wBR#Xyymk#Tl?H|017 z+vrxG&561m-`hf$r>vG#zK<>h&rj2 ztCPql$xN#-SeC$F+@p~~r43ZMNQ_5oZoZo7l_Fq!f(5F&a8m|c;>0Wq=I7+~_LIqe zVvI9H1i!0_v2u)GcQw^3*hShgjvf0LH(Kaj8i@eI0qeo5)zJlz> zxARft1;IF&xsk@htbUA0^hep^feF=vD`|4;noo?c<$EnEPRf^H_fxS$W3j{Q80@rY zixjk5WwHBl^W)vfQYO;D`^!vgi9g-{75WxxF+{zhEZA~sWCrV#o_W#+*9@ER>Hj|G z=Zi;!qa>v%QtYFFay@_UpN(DiHI2zzwlry~-ah3I2lcIX`AQ3Rziq`|&hxZ}L=~DC z@R8HA;-{y{b#6uTpp|xd%WniuPaDY~bJAVU|QNQ4FyGS?V}SN)HM zJh#PYv}KB+48+QY@dg;b$;XPqaVZQ8aW^gpDD=YSyv=MWeiVtLxZf5E&5THHYrl zr7RvEJx19455P2KP`=A#7F2`gEL0Hb3$~YIuQD>iyMS_cyUY^9SU|p8ka*_dff8Uz z<;_t*z-OS027;@=))?Lfe&@C=+es)9;WiKagaX$@$B4Ty2KG&V-pb|;J( zJLBIrL51ZKPG!5mBVi~o%{W3yiH;=4!U!PIDwtAM>P`Q@&c_-k_2B-q>~w!odq9=` zn3{B51tteNMb(sg&7%2Bqm9|wXfXl&TYN>J0e2QsVF4%^K%oIew)n^6pPqQ8@nNu-t)X3fzxY2Ta)_i9;Qj-cYvTCcP%mMLRIbN% zNc6Yf`la?O3!Y>rW%D#b|ExNAXU-~%}H%%qE_IV{2s6d{NTQ! zAfn2*fh>RV>qw@avVYJ&cwmIEpqT5wYmLe8kg!zOsj{R|;L@ivD_Q;7vqjg^sBv#q{6B%MsxO9p%11osn$O&z~%hk@A5p- zrxZo2CS{^`L-j!>xcTvJDsJq!7`{Dhw-Zm-w?^1FSY-%y_o?sZFi}-%=bw`HBt@JR zC$W~0z>8v)R>hv_4KH~{94vQSp#igHha^2}@8Hy%C5z`UosnhpVzd-O>u<#_*L;rZ zw@L=)305lb|MAc@;y48hs%&X&qBj!h&h7aBEa5-ZB`sv9eJ&|F z7V%&1H!P|1xLrAtClPi?LC$y_ZCC1?6!tNq4|>}{!tcYU~i{97~KKWke(JIUpF4~>uz%(Om_hp^#)6cy%;oe2TK@4Nz^kizpi=Ud zBpc&RPbpRlKx1~kf<#pr4x8#al1~-W>+$@OGR%uL;jJ!UIBqlkM@*ktNr%#qr6C;>rNA5BZXiE3;(#`yXwI?yTvJfpg6gxLr;=1f5H|vWB`QaVX^#!7vgO zcB!MoQA=FNb4m+|>BxqZ;kXZymusE~2AzuS6{OX#iCQC}zs{-$^t6LHKs$-K(XzJjbsrDS; zQc}Q7Fqwh_FE1}o9aS>X z-8ZQI<(JEUnTgPhuZ z93da>$38UX8!+NFe zg4t7{y63Ss+A`-z--_6lL!gv(1_SS2-(>mZJ7la92$i?wW9-fSYd&eNrqHsH~ZQHi(?%TF)+qP}n#% zoZ3HkovK~6_P0a|>BHeIkh9c>v%k7qo`fk}RT!6YPle-J5fse-ZgLbkR6Tf(zobEW z9=0;>R~{s|?-E(3N1Dp)SlP;&!Lgbd{nKScGD_=bgAPFKY!!`iABB-p`Ie_c;Qo zqhXBJXqhs7^)TA=s934(fbXbXnJvI^dPOTp=NL5+4I(Q=tYfR-@$gr=gfG5wfmIi+ z`!|3hH+QTzYT+`_Z%^^r^E8E<3y^u}?7lYCU!!1>3pFK|at>+mR>1%%I~y;gFKEQG ziz9uo(6&`0Bk&-~#2b|sd~uw@voZbYblw?hf}9GhM?SGM(LnSQL9cI(%_|>SDBwpE1x9kP4=7k?CO@nK+phnqEeuaF4R%#+f@;fb= z`KD(aaY$=yaC{CN3*KP$wg}jCPcLUdrCmbHr^MmM-p90^8yMfFI^j`Fe&s< z69o3pXH3zt3QK|C!ut9oIA@@o{#aG-0Apks?C66R2OLzA?<-WC z``vBm@IzXh+AC}Ylfju1x+B&U7=R|#S6}$#avu`nz$q({c^3x0Ur6N)R$YAjW?vRV zmXW_{#&u&qLFVjB%(DUADJyy|L*$U|p(mdAp2*UaC0^2vnFmaXWocX*AI+Ejf?tg4 zv~HGBZqx_xcs`o%UmKcX-0v5FZaTySN^rL7DwKTB_>S6z<_Vm`EZ9hLR%Wp?9tg5r zBT!3qrx>V{Ggnw8nJO?%!E(5L z9NPxgE8p%^2}GozV5NdI>rf9N!&9_@~$jVH`DM>buSGO8u4 z6e@WLpvDZ`RRQQF5lom54xqIT0AL($f^|m_zR?YlS+e+yPEw_NsFKx9gUyL+l(p2z)h_Vqb6TZ%n${Ix=PtUY}FT!16j{XCo-fWGrLv#yK4Qx6~nXJt|w0 zjCvLN{FQvF8%(lOOy?Bo;~<~-R^BuNhkt*yKJI!jCyVQj47p6{X6m~u+_cdsQ+2V_ zkO5J-XI<5bcGk#RLBjr0u!K;DCKjP{>;H1Tul}hIgXjA2=zvFC{wo~FAC}Qe(df6u zk)<1%6!7B-1vnJ>Y(Wj7rKqcQ_g29scfvH%tDntfHvB__fpdG}dX^sBNCKb56W~XH zNrtg|ghU4(v7q1euoKri7fH_EqO+8P7n<$^1+9KeAOtQ%H%R(toCvkfUgbDDl!kaA zww8M^ijQ)nRrN!DZ*f8s)pVWa9XxAZi2Goztpjqbvni#UI9c@Ldc z^yxY+wr-9lX(A+Dut&?p0e4USl|zK41K}yrnABFC%~5qUjB6DL_es^N)ilkEh{hS5n>$E$hd)x9u1fqSexXogI;@VkDuCcjrtFs%$by6OLJedRQj@W$NZlg|AS>cj?d zs@7q0ax{LBG+vW?esTx$9wT#KJiCd5wh^0F8|>O1NiP~(EU^C#j^F=)ywd-7TsZHM zAqrmvK~(YE6x>b$0HFGx!8iQk!vBA|;aXGczw~qZ&en3Q)%CG$xl1wX+iw8H(pLlw zLDH1z)WLz#&aX#usW=@(Xz+K#*|ghFP?s z5DzaMA}Z%op2kT^mtsjyGi86jE>cG0?RVe#^qbljw58VrkS}cYD+e>6@qvH-F_R3! z3CjJ~yrER!9)2_u=>&1C{)b`s@{WSoUIQS~i)cwQnkeRiwXUyH0+jhYqTT^zw6O1R z0%J*gdSK{XOouVcrSUQP$DK`32FtlzBdhb>B?ElK`m5i|Q0(9!144 z8a~|v!y#OdFZPqFqHp}JhuhuDhudHD7H)_A{Y%u&-YqogN%=s>cea{}G3x_})kr%M z^c``V99Hex_klK&Wu`N2yB`+}Fy|(J)fMMV`=tPoJ?1-qv#ZoF!EDt%LzM{&R#Q(8Lx(jhe0 zbreBdCnO%bLQSdq^hxu2e}CT?Ntj$w#(e1q;2v2v7 ziZlv7#Lda1c!V)m8z1zby3F2t!stHtsMAT|c(NPQ7aco}#Xj_xx)9@I+Rd^heeRP` z&4@2)UH9PZvPz{1k2H`KEO$)*olfVibFJ6VW1gS4$2)Sz!@I^GixcU@xq2tGf3l2G zGEPzP%!W5&AeCY1>C*{8#7VSTg(9Hxt;Vi^My$YoxWmLx#A7lvDf_i@9D)%6r3YhD z!Z{Y&j*sAOGHwDFL>BQ5jL_TSlz0SyCGQjn&bj^?2$HJ-9%57E z0z~QnCYbt>lDPXrbDH*oc@+d%3>d=^+y*Zo)}RvOwD_zUUxIG}e7Q?dJjSVyD}LDH z2~C@cR3UJ61k44#9mrW`ws8u;AhAf33K2UsDEHXY^|haq$rGi)_?q*oXI_P}ht~?X za-%xYB*{5CA=1db40S^&5T3{Nk|&|8CJ2`Q9itmEIO@O&I^nCHg84B`!I6;Qj*5Vg zJl9mIoee#Emsg_*tSVm_T;1bXS3elB;-LLC3LEhB z2Y7Bzq|Dk&3eJ->VMm-;tdcJV4|B%uV~PQxcBpCIU2!5SuZ%OU1N7y+quqMXfXtn>7HB~&e@(gcK9)MLT7tv=c)j&npW@JuC zoJgO^$O%ch_-;{vszKnlHf&%dSFy5DVz0X{5)8CzRAhBiD>iM8TOLGqwx_Vbs;t9U zmi5@ac<_y2op$B8(g)7sdTm3H-f{GsS^lA#%?je#94U;hf)0)5PbhLV$4{gi&6phF z<&&y{n$KKMN|XbMZqCrlMJH5*@Rf`Hq#jcj-wZ(U9^tte>iW^wbTiVHs*@m?2SiWP z+9k&(+C)Tsk)=P&4s^v^kOmJ{Z-TGn1k*4j4jw}Lq8KGn3r z1C);>-c0;)QE;cR*?a%}YE|?5^mt=MJ63$3cQHFQW5Efnl&7dRf;(xLSJty?pb=AI zBo(D8-82hz4Ko6$v0X9S5PpbItq>?g6;pF378IW%Is>O7%5n-m*+)sY+NhR!> zcZsRsaSd~l64K1aK8UMC&mOH^JNo~w1{rGe^nJ!iBI7x(ln z3frG-Qc7|B$rj#tA6yBNs8c!dV%|5Od($+UlS~H1zr&+6|5z>A1@pp`9|s04U>TJL zPh4sjyW6hW!5-nBr>)!}{eEDdVXM_Fb$&eE=5JEe=I<1v=XRIv3hOr>9V2x)g0U!t zK&ACkjC@w=7cRW{ERmRB2AAmKH!u};)!+0?OcGL?RtQ=Ckdvw*MEk-u#Tbmwrc(5# z%7lM%e%+j^B*sz0ObVyNjme{c;k*#*_Ht^reA%RYj*QkO#|6)+QMM>akE+iouzJnw zZ92_QehCx2A+G%SkHFz95O;#%cdGLO0RW)+p9CCKoGq;X2k`K}@D2^D>cnkuA^4oC zMR!<&QcG^^wA!jricF$Km=qy2X+Eh^lV>2P#p15RX*)0f_?p33_vW`&Q>CDXGdrDR zGc%+8R@b&%6|>b*kPi$>pQx_cz|R<1Z&asLZV37D_@mF}_WFB6w<=OnVzo6;U>8uv z8#QWjl@|-<->Ry^mjdY>N<4-Ye<7Z#pdn^ge2S`jLuxGw5VEM#lsu@O22kXhdGsatdM zk08|FFPRtOm$;>^n&A3ZTmtN5 zqow={naE;0<}rrI6{b=a3M0^O&po}fL&F??>Sm8!X2COiLr1Z;8oG0Uy>-v*^age~Vj-U;=jZRsOhzCl(=pFH}Z=g|*WqnSw!eS)AEC6JI zKv}X43yXxhl{j?GNkUa-p#RGcYzcun1S;-D;*W+gWe%J#ROUuW@_MjMe!c_NG}-6` z<(G;;$shXl#X^DA$OGoay7J*t z9l%cTJ}7rFrTIs2bg#A1@fR8B^$$sB&WMworQ311wd0IWU^KpH>T2oDw|Vw@5SWMp z{T`F4f>n>DaDz2+D`7b?4lt8TrNDAbZEFi~m_{bh$VvTlaf@UkCvJ^!_u>@UH_<*~G-w z$%FZSX97INw6Hr6fA;bn&WczH)YcbgrVy(Q4;YdJ8gp$)%CI2}nk-lv5p99Y$(Zun zeVJg#a4TiUjA^2PdR6KEsB*M{=gMtAiiOUspyk-Qi!gJa<*oy7=yZR6J*4rE)D98V zu^c$U1*r^uGse zjF>JPvzx%l3kYyT8p>ltej?%uo+rm_5(hi$6kmgAyTk!FY`f`4e(?4VHJu_RatEjp z6Q&a7PxRWOgQ$%>;0v+=p}d$!ds3p6*^ABRbwV$nhmk0ZrEcPp#-Q;rrM(6w3dq`T zEYyR&bv}c^+jA0A;RgQNM_~tNMps)$hL*U08#ocieEJ7N?k;*CF<>K?Qj1XHRIo+y z4on5;BZB|P0{bq6%EfR|-a)jx?W~NkT~So9!VNTs5iuOj9}z*jPs&m>4ivQMTlEUe zwIX(IjchuCECeox=_j}jlWsWWv+E%|RHt*QP~OfvBd<6NGztsXX9jd>jRq2xr1=|} zhs(<~NxbS+wN9we`y2sMb$#V%W=Sst_6OQftT7MKxBv;wEnNdM4%UtjPi=oN41^4R zc}M;B32Z~irA!srra0It+pupo{xk9e_(n|F0bZLrD7VIZH8`vWw8Di$z)mZdQLI)& z*vh-?Y2+GO1pj4u#wITC*zKg9yOZ#zkk*CBZSYiFLOg)2sqI+M-;X)c;Y7cVF%MuQ zX>!_reHh~@RW`PPN#41{iTQ^5Yrkz1`&?~~;4Aw*M}Ca_yv;8ur|1yZLkr9gfC0Q4&FU%_BqUv#u#QZ;YvXZgBXdJ)AC_5Rxp z@vqy%Fh}Vf$Rcu}o1j0A1uTj|09d)9d_<_^3gTl)EzpMlTK6#|{5^x|8DC?ssAFB^?fEbTSVP zA0St(2K)|WR04p2o(U-_thlUW}f*8-Inlw~G!~%Exdd_q3L4+V!hZ0n>wqkg$ zs!IHu8uF^Tc*uelrz0}Sqw8Y(ICUt#f>N#cL-rIx3BW`oj8xTcBvQQQyo+uS6M=y& zI>Dbe0a@XqwKx`O$*BmP)ByZaP>g(OG^(xjhQQ4+4t{|IzE%S z%8}U2gL>U#c6gtC@i*;AI{mdjy*x)lgq~qCgfwzb$RIVF+}2@m=|FVW1`KkfESftP zqxqcTZNN#Rnuv+1>pjx2L7``kI+H7C|bbmfJ{Barje|4wZoE40;)c|#m#LPUlecyKX}~RfqBdg z8K^y{_U0cyZphY%25L_Qo;@@XF?a8P$Jaz0x<@)Zbn8RR+1mcd{RHKz55f&%p`2_6 z%5rQD=ROA+<_lOj$;{+0;kIJ$;AbZ|cxJFon8lRKj9Lh#Y@|sb)U;hD<<%J~`b%)w z`3XwVg>X8^`H`IukaN9crep<6gMQ6waD@>+>eole4eUPn&4*T!=Uw@yRwUnRp0)%! zg&&XBqO>z^KB$EAzV${lT2iy>@lDqKacb^6FRSi#OZKL`4meTemgRvTk6PNBv~^jD zR$-R4Q<+xPXy0PAP>W=V&y-O{OVEexTsxf|#gX{g7j-z|1~Hn6V1;1N3X0gLAS9BI z;rfH;CtDd+l3}aPD)G2EhM(f^_m@z!8swps{L7y5yV`PTThUp)^UTU0${i;lQJZq% zF1M@iN&$VRZg1w~+EJb3UB#lD!f_HQ_T*M1W?miY8mn?; zm|WQ+OLMd>qCdmzHjKK&P9m+bE?uaXZ6KB1sFgZ_DY})m`4ZJgT_>)~nI;|0E!3+M zmaQ_SqTEhFE&Da(`{mkLr#z@&t(l#=k_YUWf1fa=_IBIdC2s>_527ZaWbP%fDni`Y ztuPPig6IpowP|Rhc7!{}bKpxLmV1htL7epKIM+nPFW)~Wc+`$+4}l(dJ_&ufAJG_q zq#30omuWi{k+vCtOt1}W@QHTpKBdm4VYNcOr*JKWAth(R)t=T zFM?knWq|dc2c(pgWtf>n8UJ@cYFhob(tHf@M=#IN6A)&c{PK8be=iJ5BTl`X6q^K> zn-(gNC~bvkDUl$}H96{IoxAZ!vRL;XcZNTPB-Ztm_aQ4ouapqaG-Ebl< zd^QdStR~=56TR|3}!L# z$x@yKK@u8P@8aWSCt&xEiRT$QpQV{Mo1i`;)MYYDgFK9`(5Jxkj>;`aH}9RufQj{G zWqhs^V>hy5<_siiWW~iIgRzY@7u1<+5cBcE&I^2V6Vs{XveTA)>0#ZMuWu0 zg#MXojL>O_(p4%67^Ivc7)a7uqlE@M`#(NuOE`3Z>_Q^B_Jqx?kyY6v#@C$2dx-=H zfs|CO?7cwYECBnL7#V5Vn*vr6DRkBVYjD?g-JscBq4f@Sd>wF0c0sL<>%Au((=3)> zwBkcyh6(f?@bE?q&2?l*ndf#k#BEuysgOR&b^L7!RpRIfzVLg1e=T!!VHV!ZnpP{Z zp!oJDB7-|?4{k_oj!k6OAT-5_rPiWyEU)q|e6@Nl4xn8SNo~6BI%?&j#qQ}=u({bM ztmYi&D{;dR0HqA^#lJrem}Ehd|JR!5eB_Ff^E_4txMMrI5ln3EedA(j4_~8X5Hm9i2}dIE zg#M`2FXl>YJ>i{S!nS`nB(|@GBIT!0>;6}zGHLhWV;gB<cNq_dJqwEewmA*0o&=bw%}`Xd5y^-WAmwKYAava#8Pf#u}2csTMZ<@y^nNn_Bs^R_84 z>q=?FhpvWlp-H?ZZ;^hOPxHG!vsb!@khEd!p8t&Eb9yk1S2hJiCwD&#V9K4_k?-s* z#Y)9bqLO?Sl24MUoMBT)u*D=WY6)BTgtAk@P`rP1^#g83p6Gj5pjOk4rJ&9RG!_nH zcZLEP<2+ovzsQlq7XfyjCL*(l(twxWxi+X{8)Ee)ArH4Bv)k_ z=JmaARKac4jgoZ?Q~zbN<`Y!%`ctM!HG&P=K+G?DciJ^>11HBiTEA?_&#%v; z#p7du$oUD_uXWJ+%X+Q6E^hFURDS+XcC+X^x24nHDQ@&Hc+vkqKLL`lu(hypu~9N{ zv@o##-yxS~6)n3BaTMQEwd@wf6=P(WrfE^a7~wV&amWZ5)kJcZJtLk(-ou$_gY(iK zpV?^GcI(FNFghgkJkHasTWQ^dx8TbSWLib-ZkkPOZxbpOuH04(lGAbTuoWk zY*Xy^ql?LnFmx#Yq9GlddKQDN!aXAScR7{7jA6+7+2`E^QpQJyp%9y*r!y&e0%BdX+ky)bN_*ExAGSt zV%#^O<>(7{(8R`IXu>5$0>h93G7pw;0312j=!ZxyGJ9|BC;;O5E29k&XAEfvOxbAX zoY@kXoKQC1hklZ$AlmQOA!j5N1`|jeW-`G$1q&K!7lWe(X7Agwbaz3P&Efv((_x3` zI6M~$%a$QJM^RH3yr+@lBut_k4qiv_iL&Q~@JvHl;KkR8DTOBi3N1Q!XUOQgBlD-* zat%5!N7r=$Zi5Zl%o@)JWDt;ortRx3=5SRhWDzyTkb6>n1x8gx?qmrJu8xQ5;_o4{ zg+W_#`a_=!YEXe9MgDNjM_gKj5zGRfKQEF)HgZJX)2myHEv3Lxtod#M`S*)iYOdC2 z&oBWEalis}LwsfoBPlu^I=ZV4pXKuIwT=1F?gpO@?C@Rb?8A!AUDX&_IlCn0$j62- zq?GS?pefcAtVZlma|(f$wyf4ql%UU zUO#joIk}Uz&S&?Et7VriTyyvx z2QMPOa`(}fp`}rs7wo29>Ert{EOcb=X^O%)L9Hd<=7_4ui<_?7)MqmvN~Qp0ZMuG1 z&xFhRi{6>_C$!OzL6_QgPUfvX=PYrXtNv#*S8ahTvM3;@m1@;?zT1m7wrgyBqEWGm zMr(Q|iKgrV80tOF)#M9)^1<#u(nyJTM;6e(y5u18|0Mm%?+E&TppgC-cGqJ~AEymb z3u}zvq*n{x=y+LsHeHcE6 z&65sbbiTvbn*%}3P5cJ{8e8VR*@zqHI~oL|mP9W>6j;QZV`i`bvk0$kvr&czK?Y}Z zZ_|JLuih9?#`OGd(+#IVhZ$Rmfd}emnNw-lP$%31T_3|wu-Xi1Zym7P_U2B&FU;xK z408&ySdb%A!rkHU3cs^w+C)H2Jf;=Umn~j>oKv54raygV9FZ^K7&if@$Vr8C;*R)T zkn`91ZOnBpjO4V{@_scXkXtETqdOq1Sj19G_jt7MLSP1cRdYMUXl)pL%^ztwS$s>i zcKb@*tCe~$c9m`F(Y)CvN~P)!W`<5j(VlM|)TR`C4sBewtaJ&*zAN8zH@k&MbCxf) zv#hY1Ie1G2TDMP|FkA~#;_w@GC$86Ody%jZ7 zr-L0UA=PP9+}@zM?z=^rzT>=SYar?kt_1O4Jkb66g3Aq z?6dOOr%mUzTdfuRiWnudu<~ZW^(;)K&|znrU&~p1RVb1tKW5*_QH8KSYntK}bIvC+ z6H@Wp=>=I@S8U3hmtlkU)dE&*6rTf>HwWGrIbe8sl-T4?wD#cq(3A@?M?nEl05|B+ zwOiltnL>|r2N?(y{VhoPmJZWXtcSJ_;IjJ!SPPfa<3Xs}Q-`HIKuQ23*$JKy5}i-k zZ*~k)Wjy?qH4oL4=b3xP5C!4$3^EOIkjRl}(m?|`EfWk|NC?GLBF`l5eF+R_xa+HU zQCBdQ2Q&0B9lXf|cSS(-E81CJ(#?{wG>C_ybLP;z4XN=w-iZLV3T$XOplPG-=A$qr zK@ry<7ZL-s+u(8tYera-qm_(3BtO&Mavy9323YF3gYk*hw8E=;D6KF`pc^4$UEcpR&dxnp|0Pea^r?ahupMiP z9K5c7Cn87&%C`f=3)a(S;71D*J?&WTX**y3xSnCn&h1mcO5NiSEQXQnP8AJw^pGMG z-ZzA92sonLO9SfmL)h~{&({KK^Mh=&fwY_jGJoT50UUB{S%Wc>>#G-8Ujb65bH7F= z0%f`ofl5X>Tn>LCw}GP+9s0a4VSwSDL5U{arnt}-!~IsR6XhxFB?rRc;W?7a&F&+V z`D?mF!^WLwM?X{Rrg%+(RH5oD1t4OQ2PzaXtJYr*HI9;+SU|o7i$=t7L!e?EpGoQN z^NH`jmV5+=Y^Lq(ZLHO`Fr#^$yOQQfvM3|HMJ-%Jw0`$@k>^j}+mXDW>(`vcCzpB4 zA3W8aGDvI^S)~Z=>>{s;ERP`yD(Mt}vz~M~OLF;$W6|Zhq%nCll;NTa2{cMSZK1bA z&50K)irv~09`DxB$GdIKjUt!7c-5;<+gv8QCe1pudZenhB|>EjDGxYW&nDTBvx;Ml z{L(-YD5DpOJg-}pCW^N|MQdVcgfqkD@snWKe=PS7MmJj@?sA*1FE?-PhR0w7#I# z4GG-To||2Ctu!Jv(Sd8+}A2vP+Q}!tBP`OtJT%%WGsuRSm zqS5wJC(ZZ%({#K)LcO#!9yF zAY}Ls1)F)^bm|I=&wC9%4iV-$;iygsJmJ`Gi-Hxa2im4&4KlYO$!pCORwzfS?dNWG zOT1D%(xGEH{L@N@6+Gh#pZ6kxc27Bqjx&Sr zmrb7vAfVYarOU;`JR-4nI|ON1pW4H>tR4F6gQui$=F{&STU>To*98NHZ2A%)f-*ICyaS)Pq8g;5yY!a27 zg~F`e&toUHche|(<_bu3P6B(hnw7LL zNU@VA*e;}V*Xfp#;f*3%_GE=`bRzGyE7Qh@QEgm`abc}ddFUyw(59PU(z5k6AW)gU z`*m0e^SxtN%6w!e;ck|bkA<_xe+&HH zOS4uv_fb)D}{scjO6ps5M(qTRxP~tjT{Nl5A z1)A*}3ehbLn%-3i5}2Ue%evq-wtrrN|0L_<2gT_>p8vt^K3AART5}lr7@r}4Y;i>SdsXvK#&BWRHu`qAq2D3 z1|RSRm<_Kly$4>KbzTKrGCvbQIEVoU5ApI9P83kgeg_X!r7ShE;Q0Rl~QNxd31f96|!A6CQ@kL;71!ZaDcw)O|1K zUWX`o`lPQP1BzEiyTv$R8W3Zw<>L-w=n=4cYBNKK5$V3~k3Xam4g&uNW5}Ux*PMrs zZ{_2=9B<5bP{~~3FrLH;WkqNAS(F#h>U8kck>v_X1HTFt3$|@=du!;%KD=zrX%zMd zFCB~kwyJ)}LspJs?i}aqqhoPgAFi$u@i|Pve7%s5gQn_`VHMrp&1t2*z5CUFg1!nG z-vh?K(%fIP=vl|l9Nek6?64oSf}Myz&nUUjuFYi@BIMVQWCp{8^t*2)y}6 z%kesKant3CMS~XIO?u49jBSPXkev4hC2QuKtr5KI)gFnbC<<20!|HeWZf!p(45;Rd zYGY3r-61rdA4VHr?i#)^%qz(|1wCg1)fV-O{<^WEIJhM#14tknN|c}SRENUA@?8>1 z#e?Fo7|R3R4QlmB%bYa;HWRhreFj%7dOjJ_f&^krmpZ0(1i!pNIsM|9`uyCM3GY!> zOD2CTk@Dvis1USF8fyf$OtLO{cCcUh<9wa%_|Di_M^7m#Xi9&C!FA_ZB}P( z>-6U|Ez~{37B%3vH=RCtG%y#1917vro3?!K zYTsr1-CvDuMwQMVPTedlMjVg3i?Q+^OFAqAuS8MvD^B7wh~iLnhJh26;&%C1eVE#* zzbvUzo?VIyhboB;I3tP@acL5gmE}7nmFdgE7L$(!#X6K?Z2B`)qtt2|q4k!nx=oU0 zOzOk%c=gIgkaE+gWp;Fj>85jrHMLyrU(J!)Mq1P=2G!eI)QQ9AW+rYQue+HnE0Q7Y zEgj3BqpClmEfbE}Rmq3OB{-wh#~d1zqvw*GvT73!4T`agy>YjSo;szB&4+fIlapV& zP@J)96ZMbQdUWUKlRQuCj$dBl6Fa_?(CcaR&FFadazp9Jj6HrEdZj}T#fl1$l%;bz z)B`-+cPaz5QX0}eF7bs`DquR%g1I4_&+KM3o1I?VC!WvZ9I-H=9`;i&Mecc?wv6|= zC=MuKf2~FOMN1WE&M!a+%iFO*UhZZZZXKZQsdzf_7&JEE)ulcVchz_dV`hh$rx6m> zgR=U9TFZN66D%-#xYc#!wedUvNlKv5{-_HXR=k<>inz2vh5|8rB08|fHp=TM@2)@} z_DxR&5>Zj?Si06Z{;Q1dvDWwdMjcIs(u3B1rc30TQq!)%?mMI}XW7pYI6O0rjTLWg%hc9c|4Evl( z#ByN{5?!iRWdgSHAq-1?ts8mB0<37!7>v9IgoD$sEG`}pYZO*QsceQf%tzF*M+po9nhKo;UE!+3=X>qf0 za%Q?S&h1u?oBgMw?P9B^vn``%F2YcH(&mxh7iG}~&@*}8u6J4jCJ#)bo8)zEtTB5dM!CT`M5# zu_{&57)k_$0%W~F=?kj_;)wi+%KKm}ifZj35;}X~?$&OK#QsL3SvO2%sVTFWtgwx! zm9od^t+h_u2B)aTQdhgy<-hH&e}bT1`r}L-gRjbKRs2qAu~kriiIufHaOPgXkJ885 z%RHxcGZvm70p-z#cVe*0ZiW#w$y8i-Oiu*rDHuJfR3+m?d=t69nq0hWtqv$T=VYCa z4(t+_?C(re-Z=A@;!3qh!?2tlNvQDiIUpjVPw&rq8ZsuSU-|_|X-$i0XGRS#d_piy zGo9bcqzB`T3zV?w37UkK;16UZW1e0~CcWx=5GN!SWnPdc56A+6xdJ9Yzw{MRD)-IS zX>1O?Pt73)i<*m67+?s$3S4two{07wqqlb#hmk{VJhE#c->xim-ptZSRVeOv^fUsj zYWNrJZj-iIQj7PTWL>j&*2dTr*;WnU%XNcG-AT-P#NK;h@0>AOeo1n}UW)pZL9z1T z$!aMTdE$WN&Y3Mu^jn#`jF^|AbS1nmrD1{^o!ur7Xvsm!E8VGxqnRo=C=2TG$~mNQ zA%i0y?AQ-a1vbe>%h+(ft$14EaoTq~THq}wW-PIoX#5$wPo1yCj{ zKW;#)=FGLoaMez-s&Ul0$S3{EfuOn5gEBuz7g(hp>SrSXOohkSqI>(qg?5Uj5vOi0 zr6Y6T)r2**{lFBM@P?h2)I#Krx}JTAXJAwZ5T=$UShidgufR5QIot8}e}gtG^(0Ke z^-uUUCwl0YtYUp<4k_ea9GNvB;pmj~Xj>MeF~>;k)`T-(ZnyIyDxbn-rC5xRN~c$_ zpTh-v3~7$9d*~L;?&853z40Cx=(@Crr(4R54yn&XMM|-z#YMlFG@*=RDfKX9>1NGv zuc!JMC%(ygYiRpE1_}#aKZ0kM+WFsKz6sy3!dv|EBsb7ScK)edBKs3~+tQ{>(gkFqtJ=}1%tnDy$q?C5#7wSoS_w{EyPd?y<{5M_US(H$llj$n!{SC&M9dqa!hO_%Y5PpL~$UAVnF&6ChG zVQ$_-5q8S@PQToN?MFu2MNwKnGMS_XFaiW9?uaXq#Yx1jR;7-S!I_k^(4VI>0psCS zi4z&dKY|t)kDFqdxTp_wTw)qDlYC(!ueFZ{@IaUY&k@O_!I5^Cg}qxO3jUO&6eJ8w z!WHsi7D^{p{*$jg=h%JzTD+E3VJgW_ibr`TVy;73_0g4-U2^X2YK)D@$(Lhu@-KG0 z*eDY}NkTmLZ{;{w)N^(mw6<9o=!&wsu6 z{r6%R*HmNBi(f+U;#bXN@_(Kb{D1FR2F{`u)+S1#vj4k_*09Eh+@UzqcTR8NS^^nd zFbT}UPB=_9PrpGSG^Av-x~-iFt81A0D`GP@!#ei&OZA2ApMU8*tZ9~5s`1c!FF2L>{Zf7#&vzQV6!4h8AkL}6;-q6X) z`(yJ17C^G>sRNR|5Cl1uREB84G@9s!t$S=~>(CVuz^OIhQIHQFZ~je;SBRF|UyV{7 zh0INImKH!L*>hQZaRVTx+Tx$-;%xj@&A7O@=}zN$>0uq}g@uL{N{y8b4|Fo$CJ2tt z;9vRe!O2zGbpJS05>KgI^-6!I_G4)3A0tC}B(w*vPd9J`vVkP8 z$Fn^x4p1xhDN(0fbr)X1y{m`z)y5Ct+ku-{FfdQZ$~l6-$Ha_jHI{aVq-;_|@|IMtKev%K|GMEDpY# zjcxkaFo=hdSRYk-o_>{DN1$b*2}2r$2Bk{e1A6E@SX`FO4#PV*NDex&GMWkd*Ynv~ zGqmp+UJX-cx&h&1<*$62nV8OGW8{mX-AHo`5DIo(RJ6l&ZJcbrNO{LeVZ-eww)QVL zmup=a96JWA!mIDT`_ShQ<~QuSYDE;t9Qaun-10*4WcLxqc$Y2dF4h~v@j+?YfDfzU##NE6Zm5b+qrx8dFcF%sUt?+ zQO?V)n0G+u|KjZ(dqfSpF2S;G+qP}jDciPf+cr+wwr$(C?V9sudXjlNlb-(abaG$+ z;Lgt4dkO7LEdnG$3r&uYsnt=V04Ww;W}J}k_0`FpN)1k~(c;0XOaj;vD_KiaKjPpJ zKPNU)f|4{(MDA*yJjRI%3TGhX?i$-RLxKi5R>3qKZ<1b06M;yIvBc^*}e?lB0v50&}3**FfKtMce1^`Rrlj*F@B4Jx7j0!xbF0?%iZkR=ffE~=cVM~DV1QR|ylDdT%wS2OIZC{pi(rVR<@%T~vy^Te*`gf|&Q zZpYQ8^%ESA9mL4Atp2FR)9+PD6R&oM4aW^U6u$9aTVnuP%OY?4DXghr)LE(U-F890 zvB=aV+`x9v7c)QEdu6z9)Bk2_>j-$okV(dy>?rFA^Runh?*%6xlpFm$x^t&Xt56uN z!-%tx-Yn@93j4X@(;DJPA$N~0V>)HQjL4tJ4dXwoQ(Pp+Q^#DH(kH8JF-`D@S?c_e zslm;L`U$_R@&pA8^Jr0VN#jd#QN;4U7}$#MQg`lDnePJ%PQGZN0TS;vp0i9U7LPP( ztL73S07CS(Ge8OsqwU9hmheslA}^qCV9d0)*KEoow_m~c%7h(_ZA1&^S@-yT_bf1* z>2t_wRJ^fV(3?{(U`<@fI}3%xULRjJ!y(LhUOu}S;dwdq2yw;wqrTDy+oVe>45JfI z##(+EF;QO1|)$g!ftjmkVq`Ata*0Y>7@-1`LfDxy+_L)gt* zY1h=y#o#k-a3_kU;y2^#)Jl!=*(*aUV#vwG+%h9k-8Mip;!XW2agZp&J(cjM(>>jJ z*_7v@X4GeO99}U6OTkHbP#IUHQP0nJ=jhyh}g7<~HS|gdy5l~&Q>ue!epr4rz&z-?}-a#i>n4O=n zpPd4{j=GlExT0I92ICqWbA%^}CfAHirXHO@Y@4CChf$5xJyJbiDnE`^GnhPTDD9&v zWCpFW>b0W<;^OTYCJeidt0dU24`w+ZtWPeQmPmtYVlzY~!}+65XA8sYWf>r^<I+_=}MX=%&YKpcdXzN%E#tAfDDg4+!V9m&Qpd%JsbNXi+##6W>N=|VRV!m9%q`6&5+cQyHI?snW z+YVDTj@Rel1K%S@K*SFu-^)vH(Q$<)(gQ0}2CJn6&3rXK{KqvQ?4Cg*>(O!>N9OfM1Hao9886nOtp|ezS)A zr6Xv*NV{ypORFEN?O*#xgN*lO@k2!ufmSWs{|v;GQP>w~{x$T0iu|7dVlw~#K?0$mWV|+{lmzM0fy((HB5Iv4oO1YH&+kLK(?*i~QWq&-GQ;8EL>S zg8BQ;EJ^s{_RUVu?M{8;_=emT>M6`mh@5-l2%83T`fl)nAy%Vd386ux2S*gk#wxkl73-_VnfsNq!wn?* zUHeuXhm*emPDF_}47L!52*m=!AC@{-0RJ3y5Z??3z*}M0;X#O=MxPjAK$=DZ5du+i zu?bNq|bq;xtmi+{qog)od_Gmg}4Lc!Z)a2Av}5^{Qjkt9-tty zE9-ypmR{tw;@5JmtXvjdHn6#Y;?@9}h>WK=DR2Cp`UQ;Sjk)e}EGFjuUi9krA*%T9 z{jBg&#n-I+UIV97Ib4Lmxo|;r-37NbM-dwe1q%A~@EMbAY2PgzR)Tw{jfXcUOON?KNQqxV!uzGy3i|pg?O&(Wr z{fo+ZDl`4%iRcC4A(`?r4%+rB8*1Nh3R4+AC_m&UF`{E~zWIW|DRJ>$M(R!IGjykYa52jn-em@kl^cw1rz8 zqd9yUmM+d)9+kzVa|aVrxNd)z2lTgqZ>!bN7bgXMP4(mUszKUb75oW{)A+##f&bi` z<~M=AAYmb;Z2BPiC@FHo1IbHXfj~@2z>w1NcGnB>Uq6B(RqE;l(yF|&M~SxY6X5&> z_S3UT(~nzDjDU9KS(DGGnkPgrF@7q8@g$x`0|iC~fcSg>ty_U-Re5v6b39d)`;z)q znrhqH_!yci7&zK~o!#7%ffk<#nTXh<3yseX_zdKU1$x!vff;Kg7Go-m2xpWffT9cV z#{YJ*>?E1c{dHfmfeB?oYL*NAh8H6zVa;>SUrHYgx#dD5yQ_8}h`~Typu%4_SEafR z9|ZM70#)djqLxV03lvWzx>y|l#+ck7V!L1{H)!Y8&`Eo z9}?{#i&M8;HS9kV;OzWF62M=)h&Plj_LG$D$~0=?)_GGY5Uns$8l|=Ey52DR*>=}- zD|Y#b_UjXN=u7hUx!0Mu$_Bzy(Aol$a#}5WkbK*Se^&Ci;C5a!dF2=~n<{rd=H3oG zF;$vaw`k7nWA@wYX`w3ocq7tz05KL2FNS32OlMLu%<2#^A| zk3mJN{5-P4rmX+Fq}5-Ui)Q3cV;WvCC#i)p=v)jIufRMbc0j!6emWRZMCqI`pcm(! zgM;5~Ri{RFjJ`HkF%%tDN@8EOxO^xPZo@b&9uV{x<4gc5@oL0DTIBb0;Rsy4@4qy( zl0!MpI=XTA6^Dzz_J@`hm~uE_*5C03IqacSnScBFvFIL90qC@L{u0)hIkq+wPsN3K z)<%y2$eR#h#YfxN>n6YQ=mc9Le@UdPaS~DvKWuZhQNrdfE zxhOiYCMC{A_Y>v&A`F>+sO(`*=G<$5j0C!BnszG6^otNDL-AlI9N;op8u%YPiw8BT z5rDos9&n-~c3sDORFBl-0HZJ%5-KZ+Vho2Wx5)g)jS(+ehYpb(l*;j>+^j~bJ7LgJ z$4vZY<%j0K=1AbSst!J=XLQQQJD3G)h|s@SsrCnI#Iu|u&z+o{sTj>Q?0VIx3h*|l zVj&Of_WfLIOkT?7rw-Bqx zPe?I=oO3CYvlwe4uq6h9{nS_$`=mRyk9xE_d75k7_iF!dur+7;jZ&tUa^gA;$gA!e z-PnW?FKIK*3ZTE#Fct7FSDwQaP#XXzZxOIM_|5l6Weq2y0WP>Lbzl=;{8fU5Wm4{; z-oyq`CYXWD&q|%T)kE=8n)GsI^8*hkTjpDXcSw##viPJ__Cevry5!kVmqa{Ff(F6B z5`qAj5~CyV9l79?uJtW3G7FM_^eA9()EjUp+}`T^$WdVg01(d@wtWpD&?=(dA7@se zAYQ;^3`9WSykwMfo8rQ;{AG#s8&)x*(L$mGR*K@Hi>M{oAt(+a1C7WHe-la=9c>zK z?ix!kVI!~l+9_B;ARPcifL%aDQFbb0z(R9#)^%ixj5%K!T%H;xR&vS#%L&Do0t@CPlh;&uVR|7Sas4HENOQfim{YkS>W*GR zrHOM8hYZD#uH4}qY07eTPS<7(*gB|>8dY9~&w6jFYSv96scz>A-K;m;}e|caTkdZ9>xqALgr26lCCr1=c_9)Q`4Nti9 z<~aBNu-g-hSH*<%m2KN};dNhk+2O`z#!Co9T(0YcYh$cT*upDboMegl{h9n&TOu3Z z{n2UjLE22*?iX6-IKj`_G&spRnyC<>rZ2WB*$@ep;6ujoloj7-QOW9xrkb}t2r+vg z&yH&}!jiFctn1pz(bX(XElCL=FhX+;VwlCxdo@>l>e8Cg0E|CjSY zaSAZKL4B?KD%e}u1Ssq^R@+~RT5hk9p}0IGGEDsx>G@*~@;AQ<$PWMN>UNxV+;JDk zQsud<%he#S;?iM=rgP7M8io*%W_^dK_eqD!SE>FlVxwwpx2ddiK#4mgOcq+f16>C( z2bZmj*5C?br1NpMYwxnu?a+dDWerJIE6ReZVAc&waGKbL2FH_bD*XEKYY}T0`N%un zXr|X#R0huWNW{6!Pc%NjMq*sQryRdqW-~xz{acbdu^;)N< z8Yy>IwRCp*6jB>|gvp}Vgl4g*~APB3~r$YGcSzxInHZDF|E3P)#5guIv z^)5}k1!h3a#ze*S8qln9#S3*rY=vZUh6}!l0?|Avuw+=kjDobqhpIxF{3evA;?5uw z`$fRBGdPWrQ&B+sijpW?lA#^L=Sw1^Z$q|8_mTnNYvO1VI5={{9cEs8qeozu^|5^k zcsfjq)cSQ5y4vU^Nf-^UF?qQ)wZ(SL-J!Iv!pS7ax4x`eU`TpLoV{VW*lPuJyO8tUI}s4l6T74cG@g1CLu(dC?hVERAlYIznl8CYpM z$GCF|n|zPMdC+|6Z;lPa(b+a;@)-3!O*3!NJ$zF#(cp|U123DJH;_e{)U$-=ewG7> zd!Kl)rnLK=*|4U=XGGS0h`Z)W(nv%p#u?i<)l&y+=$W4Wzng!S80Qx5|MHUeWIPVh zZl0$e{f+Qeb+1325%|`<-@PkQ0wVS4&$rHDNT#%zXX>^Ka4U_P;41s%(%lEf8XaVI zBUgL|bZuLmlEj|R!)Z!LEHh$*n0U-m5p0iyED-_9v}1*1tXSKgv3df$L&MfuVk7Y< zjB|G%9wirEYm+feJS2;EtME_@oHH7Ai@`WEt50`;plb9eT4TYEAzXnC>G76j*5NVH z0gwu%ce6*#qVYyI5pYUW8HOz<#$ejNW`s%8@Qn7Scc}+})z>%Tb3oJ0CRhkf2#xTm z89}(HaXqYp&WkaqY~ev>G%>Yc+VUgt;HeeRo_rw z-*A#qxN!%gyo|&&@I}`e&r)wmID^?b>bWqCsGWO`T!#`J5c~Wqz90OikVBw#P5m zGLP_NK!K3k2dtFRs)Q%4wO$Dap(zsJc==Xq<(j_Kw*JFFLD=|FoxmV%zyoQa@yy)FV7x zX3R;}O4;^hB`rT!#^kg{l5Gsyv=(`nGNJPnFW#h6jI*>``K1-PWBtDl_Dj$N?Odn* ziuG&Q#E@jlqha6m?fQeCy%9Hjch4mBR^@Gt5h<)V!zG287ThK0*%QjZ^cr{uSmBGJUeg1NO=Sm~ zcUV$acvP<)mi+vSrrT}48j}?bcGwelNP`?(Lj5nv-UN2|mGcWh%61=fU-YTpwxmVh)8LlCy-STdO~BHn0SVvu$fVXP z=1*sE5={BxNC~x^Yct2;))~??x1};_8Ga(*ov&}OpTr}D33q-g1nG>btxx(YF}0>W zY#x$o#;?W3bF^PQC|E#N5>^N^c*Ld5% zEd^D4z)76>JgNbx zF|hexTYj2VZ|x2^5dH}_88@W1|2Q1oyl9=P9<(hG)i)i4Ra|sbWDgOZ1mdpCIh9@f z`Wlgw1OQFeXp$rw^E{sLesb1(f%z1MO#y#N6RE*+1m#MoCQcK>%GE;p{rrrg->KTq z9;7FbYD-U~1{)QQ=ZMJ&ju}F^%Z4uz2+bk-Kx>(z6DlD{NeM>$F%wyEQjb9K9uQpc zr=-nDvm9C$aNmQ1lt!$ZV;WMQ0H(4bmpxXj-qejVwU^~gAqnkVipq%l_MSim4Fr)D z5oHk&1RF(S#UTR)KZ6D#%Y@tkny}X%U`~O`+n?+Z2V4Upgbf#NGN2PADXEEYRzpD6 zNojc<8((+6dh!-#e|Rv{p^1_ab*j+IRm`uJalkl@j26P zhy{sVFv}FKH$h?+5z|Su?-u$1+uvMna|UP9uUH z(g#8ZLONMm<`6g=z34f{+em~LGkqOHj)}%Qp-KA2s89iL?3)dS!dLHIh3iuRDvBzi zpZ+z8G)5FErv`cd2-cP`_JBXqi=Bp1kE~@hO0ryjbVf>}F1`(RSZ|UOCP%0w=P|2{ ztc&Hp+A?7KT9UDNrC-!%Sh48dY>hDkcVjRC4BR>_O0oH@PG`8io6mWiM6m|3ET?$w z?R%7$09^y39rJ_7_uMhKe^kz&Eo=Kw#2}|)e3nZ9XBu#MGeJ`pt{7Pj?5$K!GQ6FB zyWDEIG+QzLewC=i6Ry``)&peYQ%+{p{lju)56$?EJfZ6r?=(!F29DO@ zlI#}0K%LC+4KAz~r&LRH4yANqf0GM+cpS4{r>w9>o@v{9|r>fK*IlzxTXIe zVT9@b&J4TOxVGC6!}!DxrQOM(4+^=VR|AG4alE)z6`jOUwuMNOQr;z;)?3)`Ex)T zt!7VHC{c&mwX8jrE+SNjD<=w55YDl8n{5G11;Tu6(t_#IAObEl%{fHHq9*f5R<#7= zO(ys#FeDarKR}=dECZIiz@QWWQ61XW5)Zhlnz-+YR%*DLn>(mQ*KUfKO*@isr;s~q zG8Iq|*n}kS;SYw0UrBM!AmQw96cU|*D76v*y|r3*#5LmOo-rYTu_9<;sAv$%vYLP5 zToZXwLttp?(^NnB)tmwdVc{Xaj6<7AB;9lmr2}UK7nL3sRVGIhk3rWl=+^y6*d#~4 zU$}hRDi@X}E@52)<@TP)t!l^?2jVE!$&zFma)BJS%l-Yr&9mUS&3g_wcF&EgV>bGW-m)G=R@4CZ(3CjiR4@ln3!PwS6To8lQ!MGP1K_Lg*JJdH)ri0R# zOv?$jc4`>W!Fb2G{sJDCUMDdg!RjO(SP;35P{iaC-cI^!VmZ}y?xCip789Y(lAPnLHoi;Gzy?gNCut4o$fM?uT0inFS7zd)jZ;Bh(7J z^GqjZ_PtZLi08Vqml}UEJWC9WZ2M(V>=`UAO$u}*_WF}-aR*&lW(2A+40dG-d%OCn zuFKS_HJEEs;<8Y_Uc`IFn2iP7Dn6$*m!dw7v<#1OjE+it6JN{14oyqjtaC512}Hb< z;Y+Q;gz>w8Osq)?xat+6FK^PwAM*7l*(fFg`9-Tq9)wHs4(b7DR7zBt6ki2H^^Tc| z+M3JV!0Ob9faN7R#YI4jOU(h4KNf}liY^qarip>)o`O=8HWDLZ7AJ^oHCG;D^}d1e zlqtVXi7TA+Wy*9sth})%uE&j)q&c$^n0<|eEG4WO)h`jq{0NGm`p%TDH;L^}73_qE zv>+RuVZbyEsSVrdnUSN^KnxSvbPU_OD!q45ig_n~`v{p3r6@(lcAA1!!!$_)_ptLp zp1tZDhoj>AF%snwx+w}=6}`W%q|&r%D)IEiX(ks<*Evk+_v1_5Dt@!PeKw5P=ynpE z?XOPV3*`xrqLJ{ZYR@p;XE8K)5wQ*F|MwYR6p@#_4l!Ri( z-CF%ZWd^j205)3O;^I0qp^cNo>L{5EDOSC`vSuQf1I5TCF&%H~hADE6!1$nb6&gOd z1Tk-d1Vht;@Wv>^NPYh)R+fVl+#p7zMo8H$Qn=QU5*-SbOFmB7Ye(H)ykZcow7!<1 zhKgOndYox|8mW((?T7$8ZdZxn+D zjzpPA@a2ZY`3jQs>C;V+#RtNslQM7nBk#tO97k7c#g`d_Fe;v+??eKvn2dDUUYZj? zhZ>Tf@d>cnN-y>8y^2}wN-Ym7;W%uPlkaAgxawS|DkOtYKc+0COKe+`zIIn5RXXmz z{+<~%^G9396zl@(Mil0JY|eI?4BR&wec64)0Q1mY*wWOTULrh=Tx<#=YBR*ws}^Ku zFJlz|ys*x@X{-&D0CmZXE_g@%Y7hrD5)&N|-j9I%VL?8UvG9EG27clvg~m0b#ynCH zN}6@@`n9$%LpT)u;}-yO5vaDR3&4!5q{{$ZdF z8o`n7FSelcz^!jggf!;9^ZLY}TxA!M^Ku!3!N1|^JKk%0=1Wp@@iQh~cx%3XYgD!a z)mi|R6vQi=z$>y{R5u{%x3H8@>MC2HRXgA%k+lQm@VF1({u;@nsZ42QyKp)^X0~xV z@*x(EWLOJddYVrb0jH~QpPMlrKok!Nv3u3bZ((rzzgy0p!A@e=>CD`_(Pazy?bBI^ z&-8LA&0dAcyY&W6ZKs#;&%d8>VN5WKn8kR9(H+l?<_}vR@p%$CleUk1UqA4+oA~{f z_NC%=qf9k7N1OK}EWQ|V3SqlX^t<+}zc-)%uRTHEvR^DslVj21pY|{X?>|a;3pyIR zSlHVAm;TV{f9wjt$<`{M|K9&(LA%z_veRlu^nI}J8NVDs~oY-bQTQ@0a3Rrif z;L)xOL3Q;4GP5^X(W=B#gs-kta=*WNhgP@Vmov#g;_PZxJQg|>f32}+qD*_&;y z!<&Ngri!!t=e9x`udYhoo0_l-PC>6@1tk#*N|8S9Qi&S)>j^JJ-#H>=n`${6dZ1a5 zw(t<5yRnth+Kan8pjBRsin)anB}3}2N7S4|Fej(!P_A95R}@APYCK4@0U#U{`H!q_ z6{Ol~y`!ieoV{!4BBrtqsxK-Eu`N7Co606uGYHRO}VutXGhj32(C{y zP9q7`gK&Uq207T4tXnpf65BgE#MMNnB}9csO2(0JfoOvqPjJ$c%cDrd^cR0^`jA6d zTAX@rq_tl%^@H!(*Ju9PmMv>0h>mN7&$%&w$wepE3Dv`RaUh0!j zkY_yD$@{5XlkiUU_`2!xW-+O>t)z)ZU6pG*vN)LBoH*0n>$2a+ zZlf1BhWvF<(9V||cgnR`LIoi_YS)ZPZO3I{l{{uRqgC;!Nj)?0z02eA>ZoXw_gCdt zq3L4pm79{IcNn9Z>Anv@0L1DClvdM~!+gGIA7VQP&eJFTE>5oms*yV#hB{_DMnwWT zItT>4i>K?*mMarJKcw~Pw&ae!>jvsJ>(Q?J{ab&Ff4HsdL*-Y6!mw^>&jNs|gn4ZS z9O&nTWRD0zMG>lLa@HHfmoFlZUM@e?GG|~m&pyBqN(~2thThb?@hwXxT})UcL6c~k zB%~Qh#Wwo8tga&!N_r8ShGa>k8QPe4p>yoF@JTP>Z2m#_O%O5y-CdYPwBz_8ylB7Z zhoV7<3+8xbM2p$2&(8*WrxM|;ke z+Ly};d^x^o-~e1C^Y>;a4~)2z``!x27`$?^e@010dT9e{(*g6Z-0~Lw)XCyz<-4(` zpG!;;XD2zu0qpON^t@7eeVjpI$EeAi)|A+>VxpwMEyOFZRZKSz&pp96`fIr(U*lA> zGp530zm%RjY{wY-S{K7yRQ0HJg!qwTef~fb*>3;z28XC@9D=_n78Br-lGx$lI=!Ag6H8acwOw}Skx?=9T}Q{&?6Mtt{<*RS zDeyHEb|>xgl|E|7kn~G9kBN6uvD}}*$jU}OI4ZU}?7qJW(nCi33lm!tLaob^3^iS@ zSTZE6nm>Q{sj>e&I|LdfD77T-mY1I$@WcQ`V&O?h@uYFM@*l`VyeDC@9Y3C?ao6ie zzt=Y~Q&mpEW_6xKn%L0njxj(K|8h=-nuk*-iV&5r^O^+>cOYsG1%wKO6oG8A`@-#{ zgE*W($R?IqsZ3{up9Gh*m3@DCMBr6Xz9j6;@GT4!q#1lBx=Hi5d(Tm~AS~j13;+J= z5>PYIv!2HG4a;oj0Jmt}%`2ih8i}azctlyOm#cGy;F02IVExNIw_^F>v`cX)7U4fk zK`jI~&|ZyG`b}0R*WRd396%dI!i%MKRm2ktFsj=VIFo3@ft#?6)x5}0j;R{?SClN2 zH^ivcZm}dQ1zt-tiWKIZpHJ)TO_l5P zw~;ogWfEoHsb;K!ZT4ve%?e++v-*(W;Cpi;lcdf5hYv^2W`aob1~8p`N5~u%m-WdmwwRd zZKHM$5`1Q&xqe3>J2QaRiRxmbq|C6hQ~FC0owc}pfc z0(u)4Ucu*{wl&j7sQS5&gii_XktrsY*c)y9yKicki`FKobt=x`_S6okT4RaYeO66H zLmU6G)d!{}pYK^RmnI%{)$~GV)m;3C4&U?(o~fQ^Dl6|6MR(Q4P~>R1j$ygv)Wg1T zszAMJQMe=I!G59#|FRpHo*Bf^9n_Mel3S#hyS~t@_e{ej{rNp-WvY`{`XVE%R|sA$iG~q zC;|Wg!~fvD^naWhjO^`Ilpz6tGf%ly{y&`V%a~UG3>XhyzM|7ru{;DM>+RSv{zpR% z4A_wA;UKVoJC%;sa@s40|82RepYt~^djm*m-hgk| z8uLcLT=rPYZ|(eV08!#^6TER+R&O|rJuTiMBwHDiM(U1nfIsln5(0G~ z`wdL%Fx-Iip(aBZL;Z?ZRpGe(MsOG6lMC#yhdQxzRE%&%+ z<4GV_l zYQ`Rhi5uimYG&+addPZue*z1stn(zAD_M$B5%O4%9OyED8q za`Ay=FzbiI`9OO&)phr3 zi_%fyLTO^t_P`GS49Vu@wFw9Q>e{t#;?{gk8z5AB<`$y8iVbPh&R+t44f$+ta=^%0 z-(xfgyDiP-7o)2a!BZJ^lQT0}`JDBLM{f5%mG=8MgNpv1nGcIp!v5L-Agu9?ggtwk z{GElu5X#%J@fKj&v}rz1p)W8QgnU|N6Sxjn&v$A`HO~h{N4kVe4?9u902>a_9@-6$ zkUd(Akgp{uM6#o&FTK{B$6M3Xu7^vp)?@;T3Dx94!ZQG^;RZUqiQx=`6PiOOIo`W2v;0s+sBuV<`%xiiWQf@V!~S zND5%a$@C`m4GfmCM9os@@+;=KzWoLFs8iZT*1;DGJ;ZDaUjK6IwIH&}2&4D7)Jk{7 zwkJ1R(F^ReqP>H6MvHilzg$^pRAmG^#+%DL4yjq5iSXB|WxoWC(u@*Ghl2FNqESC53BFLfBu0CyY z>v2yOlMCJg&po3W)wmu}_VUb|f*apCQs2mONbJjnj{g2eqAcpOu&XfY?rvmQN@j1s zvv5BJluH6`9Zy8OAJO$++W6-)^X4d*i5mh~ig>=4z>IoS=qSN|N=T zr>YB^gC@GEMcXRv8Gu{i#n#XUoj00I3&3$}-xYNakI_Ow4iF=2glT!~9RG6kX3bTA zyf(^@k6)WQ`}1}8$m6B11s}dD)qhQ=s)OlQlIsUshi^zL{&U&4^1v4HD7B2}^BbSxgMg5*AngNx$UE)gj4CnWiP<72diOLj}VVFyV#FOf2y>5e> zSmHX3k%lOnn2XVJ1sm-MT~2n?3+D-ZLSc;DF?Yq@I8Y%$TEgTeT(NJfcF0F6-!32- z(d88@mAT-kj0HxUB$R5E6*e767uZDx6|MY&QC^xYpcV$6Nf{F7ymSNy?e8e;^1!S^ zVne)RGBN>GCwWA9N;!3x{KzE_h>KLx+kNGLnw$(0v8&RKHE-;4K|v{^r7%qPy)2jd zT5s7*3H8)D?2=M?(t;X=jG9Dj!4Z*(E7HsH(&?%etGgHuKGsr_Z)|L-N)V^4}ih)R#c0w1L0v5qW?6@%|lol4F2 zh>Z{u7$6!1Y3a+pkB9^zRZipGqb?~R#_;C(>4~jfdO!pvi3eSPZ}uI>8zv^}iR)NB zU!=?EGd*2ge{$vF_A9w$nC)Sn@pZ3(j9(&dF+IW}kRA1@i@@ZM-$?Kgj7A+8+yH>@ z?ljJ`xD+(GE&ejfH@cKGF@k|)Wf^Mk00w$wF4y`HOx;OQD)db0#G{6Jf@bm;`p#;) ztKW$Vkr$+LRMjzx;f+-GkV6Tfu~VEFl zM}gQ$dAnzItHo?@!s-Rzyekq`Rfkx0?Tt;3VQN;I(CD=~a_6vk7Fl%G?;JZhdl5Z# z(em^|{FswQ{X$jYqF?4j^w;-0PRSxyBBdy(y^4ao?409iEDwy9RQvEyFdD_pVN)i( zmRP=avEW}*6RhD=2*xG?%Ta9G*%MTGa{9-GBg+KzZY9;x3L4d9E}VNPX&%-u@PEf= zKp)!bRsU!p?$G}z74)w?^}lXZ|7$w?n)knQh#GdksZDb{8H@icJts~}DYTeJIxCYV zP$foQ$0*UngNX730iXl8Tyec$*T!)=geMz`OR6ZRr~{dLc6fRI*Td@EEIc$h?N{&f zi%8qzN8T(%rN2$u^URIVw35cTy2cN`?{>!xHrS&bsvLqx(*=R8zqZFKGDHjR@%Ky9 zO^k3SYiQR4snnVjUo%L3>ybFraJ?k`Nob2xGdvI_x-S*XB<*)k0o;;tpLb@L8zRaD zV;(@rtu8Fjo0G`MqfunNs=P^YKNj~r2svhOs=-SDpHRE$vl>5N`tf-Eef^FWfso5=(AJ9qAxBq_W%wUo z!DFS9!~S{jP~o?Z-GnU!<1I2N4gg>0F4hQQo&Ax49$ZfJMJrZKEw-DVD8$8wx|a z{f)=C>GLAW0L++4SOqtBXZ~{q{l*;beK~%^mT(6blI@F09&k=XR*+T#V(q5pjVO|2 z&-y&bom$hTR* zH~>^<0^8)b9cPxFS#K<`U!>ieXh9qSm60gRH@V$R_8c;X71x+@O;HPb+!mz=l3cxQ^i>@Ra`5hVk?llrZ~a{B|X zWE|tj&ktRTHt8BaXav&;fk=^aaWw&r|Jtz*Ypm-2(plW$<6vWzzqG5?VUlJ9+m)*# z&N#!ew!7JT3nG%#M=y&b=+kkIfM1923r4 z3j{M-doa-Ll}vFHs5DZNF2&Rc&E?oW7V=(Xv+Kpocm?f4M3?;tWQTXNdwue(N$*|5 zjS~s5P2~mcw?o|g`4tKZBh<_8w#bXsoEFR?#Ah%b+KkiBx>pKNwFJ6?LMoCjhrxL< znA>I(5ECG8icbvE z?W@g5StvlTjd2l=tO^!M5H{J#AA^iBE|jA=EXCE z=0d$e?CDFC8Z}5EA%qA3!#flAPKkY)l zkR05Yp08)@u~jCa_Ue~^yn#CmIR0-SSR98x(_|gQd zbrwb9EHP1{iRGwdH&yJ{p;=W)5s2OV4y62abNVB6M>RRMB*?Y$GTU~&lFeD3C+$aE zQ(c4_q+Ozf7#blQTHNjvQXtLB475bLV#%q*TFsS2V^QQo@X8}Lz}*(vk4SsWQ3r~e z@2h6t+)=UeR{G(~pY=Lk%h%8Dp6Qi9@GNp_PNI;GVQ(n0&&#a6M}M);elT z=q;4*MKL^QPUZ4gzj22`4KV3*F#RE6p1OU(#q46~9*v8tAorB-=<496>i~8pp_0!I zPpJHXsLY4qvGg59Fvkx@;RQCjVdM^xADiL1b7A34D`CwC0vQZt{}6j%pqm&$wZ)B= zYdABKqMq$b2COnsAu@4BTX|ijCvBVHtCj94SR1Is%mCNhkq#KbheJ^{-$*XHRm`^WHq=p2|mp&9m8{{!nd0hm_sBL;ECv z^K|7kglU`N`VwiB*-^oWSV+(2x(cEUUM$$s|0I9n6|KaVDNa`|RX|-y%38l0wQN`) z8TnKekrI1oIlgU?nQ10pXAdF`|Ag1m4r{T#6{Ge|#qCr$n&37nJo-6u)7l=~G1#>k zF97Y5BD(;kj;skcQ>3X3Tl&Lov2t5ICTgyQJV86auguqfqr_x`hEs=cE_K#Md2~r#7$S;LgQR~j zFfSTymJ4D(LLDaSXB1sk=HD0w;kACMr2%Jqs6*_-J;o=qS%&i9aKeLtWQ#>pvxQxe z(sec}}iVlAk&LabBm(ToyBPpJ!=?*ktS1n%`NST32Q8}U!+EV;~SjGXj?cy_2UK%w_vL zy9e&~BB3Mb*SnRC^6S#3YU%sl-A0O;69Ef8FrapXFb*R*p?04E=DJ}zfyb3X-$1v< z&=?ALP$-i)LA@OXCM=F5ZYe|E#+T(RTSz4RgSC>FR0@#16LC^5VO4ndvNx z+0WX4q+N6E2GOx{y}DADfWG__h67t864G$c7=C~VT9O!_I$=Q^p|}I3?kSveLQrj_ zorDl_#9v@qDZSXke$kdy=31XH?{#d{tyr4y_pe#5ICFEgfPsOj2o-wd@{&2B-d6Uz z5H*DBw;KpVxTTp}mQz4VdUzTtRC;D*v5@wL|D^cp^1i%WW4?ueSd7J0U zgOM(`@uBH`<3X zlr6YZKr&2o)gVo`RJsF5J!VzWOP$$m86iZo6hvSsY5Agtgr3Rg;T7_HxRvGxlGqFH zxgJ&VS8J!Yg{LOc4MrI-Vy*Y8mImeV%#>=;`6AIu-yA1oCCz#OVv45OtT0rA{M`RW zXoY71=)8UW1^nIT7cUg)^|_XEN3Z&o3mao-qnI;+-MpZaVbflHYcPx}E~|FbJ+^UV z|8dmiebnCnyJkb>n&M&(ND$`fOapIafqfU%WlL7eN;g3!1k@0bteFw983t(L*eUxsOw-{p*GBdh%Amvp zbealEr%2XV{9AHTybDZ9gYXW#B9y*)ow#*dUE*3T{p^ ze%#p_rM`Ie?3V_)W)2MnwFu+m@mSss1&PD-`T1Ld`n{Xd;^9t>d!bMfY}s+-ltJN| zycbe73Wt_4Q}J963{8WBx*058=Jst{i)wbzE+esN#NZc6f~nK9tC3Oa;<>wvK7s~K zhxu`1w9;oks{0U}2Q2h~9fts-_9UTP2SPe4p4VBk$Rh+d*xH~fLbff5CnF*d#e8^s zg&Uod6h`EfvKCYyp3)D8!3X;N+zl36Q;s2mGk9pD6z_aj?yN2AzwF?!jJS~l98A*h z`|TR!o(YEiykUPibRsSl9p1|I{*-~f)C0Wy*5VfD?R;4WynmSBO|4=RkmLcscpY$W zV}E~pjpcrhk>>N_3{kTDEFM*%GK_Ih2-woiZI|k~OM{8{gr2sl1>UJr$)<_G4%eHr zXy5=qjNj?1B7Ly?YRIHegOp}>b3RHKnt4g0?|A*ev#gV58$mEvwk@REDKwIquxwtK zzxxEC{r$2OLu5H~I|kme$h&M|5S^Zv5r2pz&bJ`-h?A;2$hM)l&d&|+qh9@Eoiudm zIpa%9Wfma|ip)CNn&qO>580istB>4Mg_37Tn=4f_8+%4$9>zfhsf_R53eG>9B_~64 zjJaVkRf6c95~xX#W;^+qq~9rn2S;O1^|4QiWf-<-&Y21@b{`REGMy8r(|&+I?qlB` zXPV$+tVagKOIxugkox=vY{-HQh0SZQEny=A!~kfs2uO>~2ok3Xk-# zQA{P!1bS}J1r*0V{pas6l&zfSK$erSy*6iamRo{v$ zS4d#M)cqsb`!wCnn&Ld>WM8r$7Ot2g(lXt%KYJAR*s|_Nj}7uHLSwN1`*srBbip(c zQ0T813!#uPeRmV*$9|udk#F{~6hck;BzDbSUoaCK zJqW`|n>Trt(7C__1NkgGZjdc~yl2w}YR{-Cbe!hS>^KJFbnF2?PhADG_bf@5%~0|@ zx>w%eIMaHTP2IWLfknB~#qymS<{&?Dk#9?xepOC|0SPH@!sJ*R8=}DnwSf)$PhI2} zJ{Yci#83YHO!f38hJU)N;R*|!nCaR&n1rJSU&+591MY(1R<0~p%Of(+YzDMQkn6=3 zSeNy6qxrgwNKtXQCl+!{(M#n)2@b3)G@h?-X2e#p<9hVW)S*409g)N#sphOkf`)NF z(v)f#dQp)zP*c?DC?bn2!=eixPo5wGb^4c)MPw-n@O)zGu8b|Cn)lX-rj&mxrl*We zFIS&zbqd>E@F9OU##Zsq1fA+Tz)K6iRpokIGWc9zd|S2yd(dH$CQpi~9NqNUEF~_! zRfVeo7FG3f;`Y8UyhkUd8QO87@e!$@g@)YQnVFtNI5@F5Jwhr@Bq z0|rcII*Hg?J`TE-6L}%65p;8im|<(@?M;+DFXRJ3-$fZb$1QyMn#8uttNuPTAPGw{ zBRC;mZ_q>=d_=g;ToDRI=aQ4i4-e!;Pv!-wO5Hq6eMGUIT)hA3rbNb`VEz}yT4LCQ zX;-{#sGI%Xv_XR|G8n`rEr}V*51J6t2#bxN-k$fNT~0lXmI^%}w)@=SIPAo z{)oczdDi-)gN0R>vJqtRy z%w|_JpUMFxWmf7^P~|uwR=vqPu%}bTXy(TS64pa>whEy!yj@eK#jHlIgri&Ohl^jn z1LTE=1XzrvL=3Wl8dT|?4UDY{I%yrvzEQ9t4^qhnpf z4Six&Y5$DvRs$7H<3_ExTZ4VVc{^p=xXkdIv+5>+2;f#?^Qi2-$ZT!Iut_rY-M_vRC}M{C*|A zD_XkJC^;K%f1Bq*27pn=7BxD#tP%%Vbbr6tkV<75Qk{b2JEu(}6s5CK4c>}&J$|3( z_M^=(ywL|sUJaU{I$_&nwt}uRL<~M4R5%`_>I~NmZ_OiJiuDfI_?0GF_`o!cy zpz@uxZBprKwoO7>-rgZdX@Y!$nm!HF*O!Jix&FVWpHaq)CDSp7kd!$thT<;sN&Y(G z4ufuj)46}w|E0&x%3E=r_Vm6Wan)_^BbG3ZOA8o=Ltc(N3ER9fXX|XV{Y_gEYRB9u`0Xmy z!%v0;GH0Lqs6?{x7}KO<*MrRSEThg0KQ5FV>zVN1dvK%ylcx;(!d!7JPqAgKXc|Is z&8eHK3F^bTz{zq=uPOXU!!#9c5!WywsgC+y#(S{iIuYyEsuB@5$IQ^V2^89?=mQ0r z7&SR=jD%^d0`?wRk6i1@=B1_gG#IWT$q_#>I^RT*y6d>}ll<$(Os6g3OLWp&WD(op zs%ZeZMI~zCUPI@NEfz)WSsse| zp@CBo1E{~op~+WOsQyL^V@m7N^#ViorKG-ZV3&J$aLPEzp$A+;C^i5w!#e4Qy^ zk!X>$;$Uky$Yl8V$wjn2QK`f=ritG;>5_1+&@1?Hu7|XZ~C)=1zuucPfDUP_eLfZNA2Q{ zgEZ67S$LSbyu?jGbtpw|na`$$ef^A@FCppQX}*+a=%+8{+ch#;vuPyDpr_sc5(hgj zXwi?BbWIH89%Tu2^OIhrKY!_hEkVSFK6UYYgT>KJ9P=(53`wa-iyg>73adc+hRFb` z_pRqYN?*O_nQX|U2lFeZV0DWf*(;V1t9Di5lgy|O1Qqbnc4RVn2+J6OWh zFe2Vwq4-TiQ~Fg#$Xr}Rn1;MZmGrV3Vp*xsYJ)}S>SzvW@Ye|&$dk3lO^o80JVTi1 zxyV})!c$cxrr3R}x7L>n8@HgkTgtTc!W51h%v&*Obf55?8tP1$Kt+r^Qfv7nlhsp4 z3QZcbvDin7F;0OIjCs$sV7!}?AJfS$xH?@h>YCMO5;oT9PuUHpR$Z?Mi1kw+^V(rk z&I5l2ocC_EwM(Xe3XMM;5@3yzEUqy6IVXBI{CEIA-nvm-_yp+>q}90Os#V2HG4eQ5 zNar{ZNKWJUBnAFNk8BHzS?L7j8nmnNsza*W1ks7=G^pWoMX3wYNebm=fogc8?9$>5 zpwrE#REAL=cAwm3bETg+ zLYHlFklBy54Ibera?rtCK7nozj(dH-{r;Ehg_V46KS#Ub!^Rod3ON@|X2NB7$dl!! z(b~M6ulsFV;;kwz#?Q2zWl*!G{?0A9@35TiXKH)%^(8g{K(tXBpspUu&TMy+tywV> ztX0*7vWV0lJ0+Dz(+Bz~YwIvP=yMJIS&>{|Jg6;4Qu^L6ks`K0xPFK9sJ`02fJQe9 z;^2zC_z;HA&C$4&b4v3{DS1hYlCtR&tu!a1C-@hfy$~uj?4jUXh+Dr`sdYiY_ZS1t zyu>DiZv`#Fs7fsE6B3_J^P>6m{SeN-@Wmd*u?R}ILWFtTez|?~7uUL}wd@#Mx(Elt z^DA|44x-zE#u14mBYoN*lKy4K6#p1Uv(-OwC(Tws%cQAh4#4g)hHI6~Pp}#;&Sc9v z^G_O{5y-|p=$QYQxACbi&!QIb1WH~z9=8r@ij>qZEDN=?M#4HuR%$w{m_}eSsjG)d?;ZiRW29zt zosLoK<+460o}f6r1Z*I)fSQqlQc(5H8p?{%XJiUGoO1fDxBS9^V~M?5O*W7T)ehrN z{^?7C9_$P`64(v<1J9l>sW6yz6phfrbKC!DM*sCVNiz)sTHd0Bf}fQ&TNqJh^WzCV$>+q%j;o>Ah zHN1HQsubz$8Hk2kGADKbNK~QV;v+Ou%ihpwb-J>nPxnsbAFKA7VWr#W((b@GjFs~ks&jPNjFjtn_zD_;j# zMhrMbu#yN-J9sU1GTh9Sbf`%MeX^I=2i~sZ2vd5GCy#_^_*saK6+9H6LUh(W7%Bk= zI+-Dw2aH3FA|1297{9&$8wQPM@ePK11WQjJUqws^$P~f@%u?>L6XF#N$+WUUoAyFo zON^j6g;&{W$vl)uam~_rF{sWK>o{kPqZVdm$zCMHU z>KOV)B*HltB01XAL?#nESRUz{qm#osOc_oOUOw~?z8nMxeymKq2oWbww;wPYUne>& z>{cF*ZtwGJXMwPUt~vGT%(~O@gHD4_QV(C4Q47UNGe1hIFz)qBxE(qLkgV?|Jg$ zb-JOL?3}{Pyj4-5$D9RBu&($90vZuBCl=W8U|Ou*_O$>b)7fB}w)gNeLwGy~MzLWo zF=9li0JNcZ<5Ql{H{>J6fllbKI>SWls}Ym!!xUnk^R=4~va`;20~x$EeG z@d*NwY`dO_ZzB6QV7nDOf+2VnSFE{?K?X<)ldtF9mDU_q^DWtr zsAVsi;Yq}v4Q2NgSx5fSnW+#B|3po`Y#cxsZ2rFa=TICF-@W^frYeFcZ0$K-&4}>2dBFMM|uaCiNY%%9z7DE>tj&(cT^k zY|B08#VK?x-mSScoGMrkvih_>^i$Va_JSko)!C0U5lVctk$!$ij96Pnkt?nFxN!aq@l^5bmcUdrK~GEa(<}IB3|?}z%kq5bwsF? z$Iom#n4ecfvoU};5kpI@Y_|k?(&kGe*{?_9jarJLBCUw=(6;MP^05wlg*k>YLZ zD=<_9^d~7|cMRYU0cXvIbn(Rg<(bjDQVYBLo;B{0Pu%y;&1Re9{`d5C=_7q5G@(`Y zgN+Wefl}t*cKY1o`au2C2!fE!Syb9l*Z@CK0Pn_18 zO%w@x_lgv9v(%o9p)PPZrdOF0qv{h#2^)%p@3reiCY`6!7z~B*rg%>T4jvr^>>w!z}?i_ z?zQIoD4nH=iTlC|u*P))BFsLU!Kk)6_208iD6_>hW%AB;&Yi`s&k&5kW4urQ(LDyA z@Y#&n+sHT5zA_2ZVEcgp4#Jw?k_SBff-UqDIb&aTK?MaC7sG7welq9zDG)HsvY$R# zg#Odb)x*W-fwi|Y2cPF+1srqe5#u=0+AwTG4W!ctq?k!{>}u<$Y#_^~UtgnkoPB7( zJ5(-vVVCTl5^9Ky)mw3Hy5&P$24|VZ*)lO;S0sk{6%%hUYN8);acAqwux}43&2DYG zJP&o$oD0}e_`Dc#-@ycnU9{Gy2G)7FV;b7XU$LDQ%9R+3zrhV6-bA?(ppGtW`34Ta zMuN{|E0CgLJ(Z2@$|GPiv6ZnpTZ%HXIlgOvp=C}Vx~SbGEQuvJqyJJw{0JCpV8WJD2Ac$u`vFE7aw5yPVwLN)l`Of~B z)zEUGRmlr>by-;(29>C66gyRcpXBRrjdcDa<)J@-#J#kVsw}p)yismB{{s%~N3(2^ z4c`%jLgf^=utL!W?Ofa36r?CHs>oOyig?!*r=k-Hl2*6<&<&Gwu!D)3h~gV`UBl#} zMpf#wx*7(nQk5#`C5Iz~<<>Juhq~2Cbta7~?7?wGHh;T5T0@mM{-Txd4IDjVbBY;? zFyUW$)|u(@{onkW00YEXAm9K1a=%Oyv;SP4=Ku9;DmYr$I{!~plVuGryA271U+_4i zO^H5onED6DvEVV7L_AWsKgIO(uav;0x4dTFBhW#;`(^5O4-DLKqT<*oG4OK5rw$A8}(@)ebW3@*Xa$1~v%qLlTx?*|%>n}M z8Dh`HkP$8bc#Aa4(&z?N5`rTd0RlK|mR3woA5q4@_`N?|R(R&jenOERe6md%Fvvk) zS==+cxxx;ajMiar)WGX2bI~%MQF!+Eg2-AR&Z^*&esASIHACfe4B;*t(Fd}|&ejC&sOO~vfZPgUr_O`Pv zN3RHCj(Cuk2!#i*f!Gbwpc%5Q99=Ace{VGOEXOR!Y8t}!E_@F2!*l>5={k>Ho}!_< z-!Iv~R+7QF;n*MF9$1KIeO70NoV;Ygn~$FFW6`i5Pdax2E!A@H7jgjmEWWcuX3y5z zuI+3EdCYoYXQ+q1y=rlg-d1)U(Sa7Eh&e;}!{~>FOa&Rhl|Q`)Lv`GU1lYnutvXS5 zp%^~92cZeo?hNtn_|0O-!xM*>_Qr1@-ojawZC(`V+bKsuZ18@0zaemR)7}X=?!X!} zZhzrjq0%cBPe5*lL6*qaAO9^0Bt8U=DYAbiQIonV>^RyjC$=$#F!%u-;wIW_w|n2w zS<^k{#g2U5<%e8OVNAOqM~X^s#xORyZ;(yHRA9dx0!-m&TR9cZ8e?oZAl{u20Ze`| zGc_5kv_-dMd3xu{90gMA6`*?1QF)Vu?8Sq~&b?rY6dWo7b^C=V^(j0BkaOF^2&LnbIYtlPIUgw9ZkRsvS2Do+jg*E;x-T2JeAxtg5AuVF|b`-0ra zq%?`4$(%qDTQ%U{1~zBYc{rD>qJs}Xc+uRlT*+{0SXv4oy{^)@*KUqFV~g zTi%Tf8E|D-RnG?}fc5@a5COVxNO=^ctz{Oy2qxx54?@4Sqm47`36mrq>6A8$sz$BJ z`2$&onQ_<%iSG;qFLtP(zGi9E!{?9%{Q?-1Ba`6c_J(;v)r#m>wcRs`Hp{!WaWYPl*g^7TOviyO@oq78@0wjPV5jTkJMS z-F^3tQ`;Qe9bH`a$C=YSv*vOj#$*1v90DI0&p&9D81|{YH6POU;J;rlP*4s-A5rIC^aGGlm^a) zh=7#Xj?g(z?l^J}M>9TA7thZK(&X7O9cBBx9YibSJCQsM73e&pWC8j_!Z+;wy-S7x zx*$|LyFJ2iIkK28WQ_QFxXdV7^O=2n-J!6Y@l0#8Q+NLXc0{6#9I}{LMsr2)R|d6Nl8qW5u1SbkzLf4>L_7J@Zf1m)GEN+7AEz#P_S+-%SNP*E&m-ya%RCn@@Z2;H+P}OkYgS-^kitz0%mrz&fzT zvN1a>(x`e{5;KsF#*V2k*#8=;=<`W+5Bdc>ld=K;nEvNJX=P_)3p?firzh}#2)=G> zojYy(Mf$nvD@;-Wb-=vhK#%PawYJxp9YEPTo#u{2G6YZ!E?zKL=^FpH`R5g9K>`Bl zbmVH~FsP>EH&fy3Gc{i>z@0wYdO6Uqle@WZ*4{`SfVp)m2s*>_!&iSA1rgoEgu@0O ztM3Tk)_S;hf8AqY~+ZQ~9|(^J8FSZ%0#C8yb67Ohbav;2wPgWaxA2Q35s zaX;KZn>}l2`?p_2u7XUbo>EH8*<2*e9YYE)|B}#vxskUGY-;oc;6?+%5L2(5lVkwP z9T1UmDx3qp|ItDRbG-+AEPA2fANH_(Np|41;|BDscm$dRl8H{ijlm!R+&Yb`r3euB z(Dm`z(DO9JMvuJxCLYX2&wQED6%H+rwTYWdd}CU#5wS@!HN*B9-a0uHK6g+PJV)`@ z_rrzb6J&`0&2jlECR~9RuRq(cP2(&fbC#*X|pYWo$$6aLDna6ErWGj^A=-Cmh7JZq(*n6u> z6y?1}%&0}{dUo4=7y1NNJRTOiY}nA~Hse}Lj>qKA8AH~_4g+*b=Y~Gl5_a2UDJl&a zO~Iu|@u#AXcQZyHt8+P1GZvkx2*&RUP{9hJ!yahbh-#+ay%A>?#|bYI&Yvpgpg&~B zCC$@2rN@}u9d7&n&NZLQ35b~-4*m8pLs4y+;8)ED!4$oaT#fEDzpqI>qRG(27w$JlW*+A&Q5bVF6k`l zjW8YbTAe6YhFG7nRQ^*bj&~vOmrgGfJ$5twX-dbHkyhlcB}HQqQO|& z3X#D16D#@qIMs45b#iRnnB`ki%sI10tK@^r@szqWBG%6?n02ps%W=WKRh1u6ns9S`nOQ>gD}<{vzIeoonCjc}~>qJO=*=L5JEnjNm*>(BmhJge!2s za$FM!*4ER^gG!mT>8Kn@_)O2=AWX3L>~VD^7u&f!!#b*UY0OU|k#5y9R36`brCjP! zmspevNg>Og>$YN9;??)(tIBX4vEl6ab$fFN%UM!JOy&it+U4Q28VhP{MNTPDCeD!Q zL$(pMJg+uMo<&0|lwp|T!u^^UKzCCv!c9ep7o$j_%yUvbT``PvmO=o27|SJ0T~OCy z7`$FMOCl`;{d~f{yS^InsPd7-=zn5A2Z!x>QiPF79a*7r6X70vpqCi@^#gf_SWHe_ zxm(Z<3<3(bOFR(R904X8Chle6QP#0-sR{&$&TSlDMHGT`ifZsA;SQ(k%FfkVdV)WR zfg#$J6o>lM45AR$u*JPP-jc)*L|e$&cZMOzDvaW-*5jfoFM}AMb~`^B(u(CDD#oOK zXM{+a$%2U+!GjUkm8oKX1u~L38#>h*D4P;^q;4*~^*aQ!P1Rjv(0A_L>0{P3)bR2% z(MWwNDss|6Zd&=UHNFnw#T96XXP2g-uR5;DurYUTyb84X!)z7V-i%Q#pVr+0FkHF( zu=BQIg5}2|5J8&4Ib#b*O;vIjTLLwQ^;H@X>LeKajMGf{J+;2o%O9vNNhs6v~ zpdJhiP&}0CVMQ;P4_{JZ)i}=b|<3pJCdnC!~mL?Bs}ax?l?w(FA@4IfOblavTyQX#K15H>Umf$(g^F z0R9NP)T+~c-+r0C50qu?_8q{<2c4ft@_5b%N`*4g90UCXzKV{|jbEUYYSGKZS>HU> zNU-@jd3-DT(84SX1GH?pb6J#PyKj!}+OO&{Lt}K}PL>&XK796-LdH8!-UA2IB7U#q% z!5Jew61n^l-lD@$p+ZkdL%^XLw2ALg*L3!3z@!d()$dlS()BE}Ha~~ATdiw#-&~(( zgin5Q1fv@NjDUo5F7waP0~&Yp_By-S0N>9djSyj(z4P14*>%&1Bk^9(_>I=?enej$UMGF0~o$WCSM=bxg&GjaX`scz97vZM ziN$hgT(Tr|7rEanzsO@2PJ|TE&BpN_R{0{w$2fpEuY81wZogCy9Yu0x$?qjMWly6n zuvJ1!{}4TpNO;Qzg}BL78PRdc0<;f*0ib{fR;VO5Op5SD;_~^ZRb<4LwFI$iquQi1 zdcETB+wC4IZcItr)PCsSXJ*v`&XFS)-X)u?E|vor)kMM?IIcKoh9>3d5zOTZ9P+en zlp|L9s0A#dGqhrK6CYY%f93DaOmUBZzR8k?J!cYIT|)f3w(MPuYK0K z`jcmN7};l^BwSjmUBlx59>WiQ=1%ylw%gE!EFu!bfH83;PrnXOiStOMpr?9Cej5A> zlVk0;RsvzU{2?h-N_~@y@&{J6-gnGz%pV!v^LhFja289OD zBw^#CCAxx0_)Mk-kvbR8!XwpHCvK6wkH-Z68f&*oUM#OWug)pbuH2j2?HiUPtDY;+ zp7xR5kb#k#Y*C)kfGynp+8|IsTPDT+85g%dmIH;vwlsFWUghx4yf8Xb*&8=Hh#Gy8 zlpM^v5^zF+=e~_3d@(2L#95U2dZMElQ{F&7=dmX6>-ev92cuHg6_crRpX2ghgo2S| zZl=So4vbdZGoT05p!Xjk&IP>}F1oDc7)pD@dkTwU1Hg16mJ>cuxyFkbJabdJRK;aR z?Mp#`yd>bgXLpnIqU^#}%p~+eDS~FXRD|P)HKD!B7S;~fqE8Dp&S--}PX;PCxXT_| zdEF=rvDb@Tn$FYgJyA1f)}P;C;CkOhPBh4J>~r*@?^f^*GxUMQES;Xd?nr$0pWM@p ztY8%(r{#twTJac0qmZ>$L_LPCLAveZ*LO0zfPTPv?KhWiG=t`VO!&z8oD7t6#s$R$ zshSu8l`u#u!Y3>IZ6bz-DGcH29T{EMTX(RF@pwr3k=@bk3t4KB;I=bu=Sk@2XY%fF z;%nz)ijMwP=X9Ra)F|&~ssVAO*h4uz)asN)sS=mt3s5#XUMSf~FumRZEqqyc)03|w z>t3^;*PY$=$rkP1cFCkIoHKo#hlV+c+J|FyUO%A!ZAGfCuwVOKkvwSrqrE`CcT6=q zYZsgUA$i`T_2aZLiuAMXH`41`3eOCO(RKZlLB@;`Gz1a^ZoeS2FpqO!%z}!S80oH2ah{Mzx=>*dv)#b7+X_6O)2S>`G(AM(q*3;p|xD?scAV@8hq zw0>)dn;*ivHNa}%3l`deXj-@W3xkJ$&)=_2h6KSQzWSZenoS#i9!TCE&f$m@Ugi#Z zO`Niw24q0pHygq)gDgA?09yT8qMuCbJ+~NPY{7mcWQ%g&5IM`Hj@-?DT9{4)pzWOL zPIqhe*kCGvFn|TA?i~t~2uG4)o?(@xpFv1J^-a+oXlv{h$W>?f4R>Z559hC!>GiIbJ?oh)>Qy&8yPDX0(oIM3J_dF#l6N4rCe z%z#5n7W9r2x`_F-*UGLP{o!`F17mw@+P3(f56W;Vf=2EyE^;MFTY#a?^UL+a9^EZ6 zG%BXk7|6WlpjtcrhO;o*D{SDc;Q=xbMA?yMqlSTz#PL878;2a$k^Aw;A=!*_{kOkg z;DTRTBeB&69D>&N2hrrZ$j%3T`Y&;Hn_|3edlTOW8u({C`sjx2_^3FO^Lsr?Zx76t z|42h9%r=3p!yBiZ8pN_z-^5t2qR4B}+~ckGrCp@mNrc2UN$I`ozY+8=<7_=yKMz0N zbPlKH{QDGUKjuysv^sGoLqywjYNCo^)IX)KwBvDTW6OIFHya%pda!%RbJc)Rr@0y> zz8I3F(}R;%W^33nIazvsY@)(Qe9&6j`(ctsYxddu<~;V>4 zq>8|!YG1K1bnAAUnw6g9Df=Y4(upqI`&BSu0>y-0XX#e?4A?tuvBg=xEXJ6b<2@@p z>y9&1y4upGRhe#NzES(hZHxF0lvTzVTgIi{{{9sG=9rTGem10tNNN*=w@Zm*yjP$a zi_<8Qk@tolayN#F#pKYaqygU0H2aO39OMuOAeJV`hTM;iEXk>jStM;!_-Ds|gD3u8 zu*3ltW+4tBqJ+kLB?Nh(GDVTr`TtP=&S5Q27~N=PfS_Vr0WwT7Yk(#E%UaOHLQ0^M z6%HsG6wp40N`y$ibSzfy)vE|32M;$X1`$}4_8lB~SPsMIGV62255asv%fSx_GY{Vy zJ^KtNz#HnrpYeUWw}^jif{K4+26gm(DR6pOL?)odS9U})&{P5$bT|;_^FCWj9E6#H zjT--?E20R%bR%w95XdU|RrRnCJR8#kNdtxxX?h4C#8ldJ3y#hP00H3jt)B$pe@AMAtn7>6 zkr#y_3}NC5$WkawGDUie*d9e?h9@M6`_n_VQiFfmhq36V9>yFJxtQ`C?k@OM)oaHp zparriVnL=7`h1y`^S_viIUSzuxHYIKCBiLEBQYanWLk-~IvR@XHIg0MzJM_|%9K2Dz7W8 zs)>@hDSMgVJ;#wKh^D6qdPQ2PW;e|JI>EEi7cD|2#8rVN%u&;jYF_e(WTGyFNcF$Y zjR=eiCZSm!$TqD(XrF*e0**(3q(4U~v93;w5})bkNKh?)MlILy;z-L4(}MrsLSi!TX`GkKO?z#wT3+vKgGldpTd0MCfr1S+vw zBBJJRLa-Oa=3kcpAWtzGPa2T0VGysmVyEfWI8vV2&Jx#xe2$BX^agq!sP=S;FDx%S{LjL_8q@5si>4Cl1Rm`>o9K687`Wr zfGMxU<}SxAFjO!@HQ$SD0+Zd#;R4=oyiyntBh`NKK8H|Mv0KEyZR*Rz9yj`=OsOa{ zi!0|MYvGC>d$^E*x>y8)1m2Wut*(#P(%@iaEmlkGf~p`XXFoTO!B}+Z`6n%7dJLoj z(sR>%^vz2ebT##jQTg0^2gsW* z8Ee>4rZ2ZLa0nhyu90qhXBxt%xl6|{1{$X+_0^jWPtf{T9V#d?)nho65-s9-ghhN^x%@X`u=R27MjN&N?=T>Q@bgfso^wdhZRT29(H6%}s2ZNEbXKJxW(q#yxdHB)GdxjR!EsI;Vm4^N zh35ot7wQzeu0~sa#pBGn*m@b)c1>ZiP9X2k@V&n=i?dUgWY^w4L(?pEXLBQ$8`GnL zP>T;`86(Yk<6qHaGWXb(@1kk%ACUEhG9VxL%AUy?gd@eOV_ww0jM}G!nB1&-YEcy# zyHy^Gz3iNoQS{ryP4PBY?G++;XP|_X2%fL>nF7+atLP&1ptMlB5S0o|_(MQC8aBKx zRC@Ecy1BPDtb5cljPt|47JVPpDmpc^BArO30lSUMPaz@$KN4qh65v_gOSPlpQA*k5~T-}JAy=s7B31F%L=H=kTPZ(O1Rh%nD$jf6`|=Wpf0G;vgOve zsB$;aQmdSJ?prNTe?qa|X`L86u7#8tSLe5or1po+9!2nUmgF4_Dz;kDCNy$(=QQYS zY3Wz$R(c~px-Bx&#!E&;eX%akk{M0IDul)xgB8NR?jRtQV97xvCWaS3s9xPBKhX%) za3N8FpWd6O>%4DIfX(>Yuctku09yue*E?zCUTI$GbCbe&99BaVDA-lmG;WMWz^G1HMd16Nq&R zTKLrw{%FI69$!6ltf*0m5MsXnR1em$MOgRli@xL^A1SI5cXmQMQGiIEGlL|&vSmF8 zwz*xVrgn0B1cmPCop>+Tq)lH7tJO)l!C5x;M!abqha_Ss)51Bi%(PT-FSsJ27|Nv_ z9Z~;N{GC9H;Jq59m6*0l&G1s>%Rh z&~uhNH@S(rC%x@%f+bcx55oeQVj>oF$l7*Ud~L-ZeTHlGc;#AlNKRm$uS1nT-6*&M zuAD1V@bG|5vS00mhw@g)$i{yN5O-Vl39+L zXt9~~kx4;$H|4<4+g&R3bUOdo2+>Yf`N`ULwqnqUPaS!#`y9j;wJHz9$GI5!38B*D z72P46B@PI6DF3E~f9s^j@49@V|JR+Xd$Wv#0|)>h;g?_a=RYS){q9^c7KZ=ls;`>l zUAqkigt6UsYPsVQ(dg=`mj&4*B`6jo(BxpE+<3{E;Y1_iO~B*6Th8M#sKk*;4c_v7ig}z)y<7?+5Np%Kk(h&9sd5#(2#hgdL%J0(Qy>ikBw#o zwDx$2r#_R>fRjC_?%~`@c)~t^Y?1oRE?(w0h?ZIcBPf`YK`!Ez6yjRo(gy)-3Ku%} zqIkoUiFuYBoXiEh%~&!gi~^w{lBvoTlwVY_f+mO>9sH|2-4g;DYDB82?nK?Vd_xV9^GWAiAr8$!qUb~WL^?l(25J@)hcJ8!McWbrrgtWpj?5#k z!ApXhzPZFZN-Xj7M45gDDe@qafPI!w1XF`-v9EWIXalx5vqj@MV2Qa&A^5k+aE~Tw zmQfsB#*hl%t%}dqxgA)f3GJV5J_4#SXt_D7?RN(6xW^l4U|8c z9Bn=@fnUD6o8^^d(`51ZEZCn96M<^l_FQ70{aUCsY(0=6eW1Y;#wo;G!DMy83&LEN zt?FAkrbuS-DS67n_t1$OT-`E?QN3z9)^tpET56)az6}YKM)*9O?y6M1uU`o0JZh+zLbkCMBuob0G5Q{q< zs3H@j0QKg#Pnr>4MwB&9rNOM_6M|eCkxUd*ww{yr7q}rZ?SGfoCHTghO4>I~0oamt z|J{v1W{msNm%^6Y(GYfX-&L02b_8|Pk_?B?o4wX!5eU`9?J%VEjtcSl4kQS%8R^-7s7 zK>ioI4jtiu45CjLW9YZY7*Hw2ex5uxO>1u3-ERdR5xAT zhNg(Gd@gxe3;XAvEN-Q>b@g;~;XdezLs8}vq4YtcO3BFe3mI7%p_JubC6NAuUDuQDp+^qo zP7+k>pG8TLZ;c3x7~pPzw~dm)4g*1jP(l*f7%E8)|6`GA5*3t_)7ja%V$)B4tv;6u#-9Tkkgs* zYh6m+g5s1HR*`=1!P^Xn%xP&IKXfs(G|EfYyYx-&hX`<>&ZynsZ>Of8qO&SgzCGkX zVLRY{5B_v^bqBMm2l2b**NkA(@63q7sHl1SyA|YLu%{xeA0-5tA8h6fLYGf8b3g-3 zZ83ak;F98@<{H=&7LeaA8(rcwl-SWVg13HHPqT3!qej}MaF=r|*Q<89A*DqURa{3r zpw5J(wp#;+>=_gHBgm44D&cjg>4QE7kUqyo%uF{&SEv4o>^6039!A$A-i z<>CK=vzU05i>ZBHh9HT?0{MrH?Ft=1q9ST+E%Z*RY)zAKt2FJ@IzWm0%Om~rNP^n} z24(8&FH$(BZwsuY+Ce+wf=&|%hCU5CY#MTiK8fv_mlO!M)q)#(tGf*+5NZZmXvBXl zFP3lIIXWAha$9(iBjVKz0UpUXf$OoMsRnoxPHlJDjf30;-;cXWP5h##_TMbvRuV_! z#elUngW!Gj`t(g{pO26|Q9R25$=Nx4`uTCHS0n{2_k;@4h6w78 z2!%N+is?n_lJLu)V`EF_U`Tmqxj(2$MNlvSkNRzFy9iiu>nRF>Nk0-a(e}s;zd>2$ zGLkG)Yr;b57~F#&3lG5(6*as%BuZVfJzhGWhvXmsBumM<%;O0PHH(5v;#0ZVMZbYe zzuTo30qbBm5mtLwK?VA~HCdJM5Z@Rr7?0)CVVG+a{2@DTC;y(ZLm}#$XA(>?vPa7b zc=T)*+@i!06dO}TErSb4=?Q}uJZ2G>LU;L@lb+{}30c~@&J%zs5p9kR^L^MVw&G`J1$w|<$SU72AuiQmb21f;}`b5JW zQa6zFQ=iRv`uDAu)S2vt>pk%H& zt6uaD!t|lZKEf3u+VZO|XhiRWa5AwFNkYfOQaPEbDrhBbk_qcagpyEcEYzZO5Pm(` zyZ*Rfg0dW%wF*G0SaE7Q#h^Nh|Gk(7Ywj9Z|o55AMC(-28f~rAu?>Ak$8nP#cK_K z-#YPy7N#!mYkhrODcg0_XMa;um|d)j_CwruXwYqAB#9p4$JNVOY75=5O>miVhoXo$ z9j)hvev4%h21s>=I_;TMOcshK29f+;laG9y^;i2Hd+isfUq%{6#B)vYB=ku{jHBLh zwX&`nsLiIJeM_1~?n368=*Oot=YEZw0N=#`=5>vlz5&h{B$w5i4?3DBm z#T1Aw+fJ1~QYbJ<&@Hr&0wS>*<}_?_i+`wQih;gKUY1>VGl^boP*EIx9M5pwv9vCt zuScL4x=&08owmT6%*K3gLyZt-WQ)(5ui*Y6W6{nlyXG5nCqlnv*yqF<-j}0U= zDISOn6=IyNeBulPa!l?BXgH7Zg)=0YKwL#z`wULMjrFXM+j_^sfJQ6I12LPKZwwAF zCdd;WUTMXjY;^OgXT2x&IFKrgkTNLl{ZjQ`VS+kZkP#rc!evo?vzK0}0{Ljve_v+)~8o1S(dy) za};r_1IHnaL=8vwHlgq*Re!XZoNw_WV5a~FmN!rM&Qqd=vVxuZ5<-DJ_l?b2ZXQV~ z#UiI3Mh9SoF;J^e?cKrl>XXzd60)d{B(Wr+FwK_D+>UBEC1qI)ZWc<)SvYC75M-;y%g}^Wj?E$0 z=Q(#~r`m!P&MtF2bWB`|Di#benm!S3x9Vqm76l=RIqh2{1EQwtmo3A({Jsxvk#;(t6bvvVqVp zmqI^M{JmW zCZ9t(H!JZRE4!ey$gZU5`xx_|@4L*0^djQWwl{M9=f_i2O(UdSUI)_5=;5TiI&PE$ z%y(&XR@v^SEY(kClH8Lnz|lqfDV1iGzL+kqMj&tHbUdZec`F=)+Tu8LBCl=KOv5{e z1;pAFv~16pPWgW4o*)t(%kE9I5_H^kauxx=7P5F1ZmPVeRxMrN7z>DC&Mr4y^E$?0QG_z6CPPHHiQU5i)EC@x{U-*!$fA zWu-;sZ6K>D3gh1f1H~*e2@DE74-juAAIlPV7jUIPg=SCDBS&}{M|ZO(dCsy`|11|4 z?_Z$W=7;XyY{JV{#9Y!aamfa6C5>0QB|MUthY_?$9YhQEe2L{?yuR6@;(6DXKBH5 zjrQ}x-sAUmwgZMO;Y5ij-CrYM?ntl5=F|F__@#0AG4U5gLi+)4gysiNF}`5Mz~c?# zTqEkIIkZHyqqHFzk6xe;V({WYYPIzQjBe~fs%t$Vf{>PSi-}9_!|@7>RQXdua5Uk( zt>;t1?VkU9zg$}xMaq|3Kdbug=(XHzP7&8TKx<$1ALQNo?)CC210cauPqiR-RD$F~ zrU!E1lq7nR`)5Z>zjo?-5*>OkZ`!wATc?d5*mHJa+_^gbp|V=}Z(g=^UQ|EOgKApv zN-cnx+t!@v7#`PJNJUsA80ecVIHzX$G5u~j$VJeJ?He3Pl!AyPT1WbQHnwY(m(`na zezsgZj_)(0eY)dllR2F+K48~8hB!Z+J4#$1Ej8(b%9kAmzqreq-{J%y1KJ7u4`PHR z&qy=_P74(lhx|LW_EI`h&%|g`(wX#|k;8K<%-;%2vz zeUOHSRq&?o{F|2rB-oY0roypmMgY$sc3@}o6y+>w3Yr@!N;I|F)H64Fc=JBoig2cL z*v9w|$J)S|nTKXfb>u|qf5DJd(o(W|bPzqgIk?pKUUspPUwknqyf7wk9d^8UX1v6* z>5F(3jvDbB>|4Y)eygxM(6f9X<;@QLYI8 zv*`Y)iT`A9!pf1Xt7B4LUv}=LC004#E9uqXEwJ8f-L-wGg~|2^F@yTx>9r0$SM^+b zM{7Jo-y(~!NF#JY<)S*+hqSGS5$NVfsiaWd0_I%o7}-CZ*(m!1Q75HU9V&V{wTDnU z6c5{Y?^b=fZ<~gAk5iVrZ5Wt`Fc^-`Y!}b(6j!5Q!g#43ajAs&U7yNWSz&-RKwA;f zrk8>|x1Bp7JzyQlyUC6>XTudmQsk=g@nmyKHhrIj?Y@g7*DzvjT69jAT_+)SY;Fj{ zStVIbaa=|A*!O5WvJ0M4&Ae9b>oy%T z!0&nFHaRQP*F8IAVXjFLD`7HL>V7tt;h-TtZh8+BiUpZ)z?f~8w(%FZufC#o&Gy-# z?@=5}H+ar^gw8Lps|AtY1IA~AfslL7Vx^WHtkf3ZH;m_2a$Bu%sx^I>zeO0|1NA~z zbV-Y+p96wmfF#4n*!wU3qAg%+PtnAHFB&dnG)4b73T=wI)wfTCPi6wP&cz_}T9F(c zCV1+qJ#AK6$X_`49s-fJ@B1F7Jg&3cqn;1KY^rA3R7nJfswox(xqF{tt5VxxY%D&BMz+S~ga^TH z35Zo5GLVP-*+5eLGU=>?u68)n!BN9pRAzm6VE^+;q}gYfnXZ2ds&a@xMgu5@(ys9+ zXG;_0^DV=v_gF8Fj!*%@hvEb%1%42i5lOMjxq9!AdegEkVjzwHErOP|JrP=1_=%~; zYfUuZ-`J#g!(Mh})3{tB+@VS~2L!@m9#y{;zB&dfEftW&0Y@0^$yj1s2&u9}z@z_T z-qz70EVQf^dZ>q*vkrFHRLjd{RUR~Qsd#N&JV^uP$^-4)5aPd7Y&9SpBSG-ho70PR zSaxgT01@U@D)Nip%6q+8AUAi(ZWF^8^8hfS1%|m!SyNEIY@d7>u&`&m%)XfUOA17~ z{l#aeD#=sY&np+PLe@QYC6kBpe6XeOX#IBTCLDg6eq9jKI_EYZK_vVkgf3JEw-;iM z*{|$`m&w(B`jAZ@ygXNoLMWB$oNi8H*3~tTcslreBn7os4Un#7HM}K#I*%f1I6}Us z5bYqi@9YOS=%L3~NKC#DrY$gE-0ceuxYDQZkM5WGjp(~#PdQL8GGr&!x8kmdd_5gJ z;&5^5b8~+*zaB5ugn<6M#EE07PYI|4en8ej(KFIyP17rscH(YJfoZiFL}4s2OcSjB zKG($V!26nHw4hHRt6jH)%zM?11*^VIgHo}s-)Hq6NyWWZ26%Zoe5a~Hz~0#a9%h#% zs-Mg=m@AxHk+QtJ$vUD}N&REwSn~^sE}Y2Jb|N&!J&7L`AWmNgO8U*sfsVUj1jsQa za-2PqqR={taP@QH$n&z zeiKDOtl-5UdJXytvBUTAeboY4+W@WoFtO0Q7pz1^Z)B}z2_>FS{{zOG{j(8ZFV0hL z%+h0ac09j(ku;isc*q6n9F#BPGS87#87_j!<;)$$2Nao8&+A&YfP^_bY}t`OlYH_1=1>VP2)3HOrY#u_fzv3656l z0jf)I{p3gcV|qvZUDtlgWSqBM2qMqTDT)z8`Oxn&`)i;f9D)^xpbBO|SMM#{r`9RX zE%lWvrJR4d>=nifxP*nGo9C9-b4mctJ;(^5fb%}+)SP!g{YDsidvar)=-tv}SzbeIk@=aEo(>r;i`iNDXze?mpV7@(g3(6a_Xx>eR0D3F($xMOLn``~nyUaO^ec=bR# z1@*2)n-GQTj^o~U>dSl!QMiW;3^P_<50GkNw4Ea>#;!PYa4*e<5yHmN3CE2U;;FPT4_1??2Q_S@ZAf zWvDcHW%9V(Yku%|J{Z5J|N8x@o_u-n7HEz`(K|Rfoz|Wp%u?uAPmNK>lkkLupY4W^ zyl$Bt4ZpO(F&J0@8nf6sJzL{PsbR>wbT<|k@1ugK-H1r5^^#M}d2`tRm=f8gq^Roq zob^{K>X0;V*B_uU9T)sJ-w9W)NIa{QByvKEkp-9d^KMe-Qz?zelBN7xT8%bST#ag#=h|$Rl1vbr>kfI_kA^xtl2_eu}i{fuD}C)LFugY)`fR5tpJ6!(n3{Y@2+{126c<(3c7HPV#h~+ zl#bK(RL$+sklLVy%Y!;9)9Ao2Bpj0M36;EXCG(B(hFbDUp&_-J%8uWnGy?K=9|c>Qnv`xOIDcM@EKo+PjRLAOc>ul>2 zR$+^6zF%UyFQz_sg%m4|9M|MtHpj(H$F=hIL) zjfawg%d;awejJOO&F&|>36L7KB_zi{O9;_#;@1Q5ohbL+LMOlkLt2XNKE_jxkX2tw zNfRUGW+F=|7%&K9At5Ao&?zQ9iG(nqA>E_~2iMzYnDvp+A2FnilovSS{Q={AL9`d) zP8kYQTYFgt`hurIq(U01pzaUvz{+YVWUpZlm5&Cl0mq?;gw_R`h-WmAHu3M>pL-97 z#}JgX86uV@O(UYvWQ?;v-9vpU(9}l$mPuw{vbByI0wcxwD;4b!x*jGF!j!LjhS>y- z7CP$r((*PJGVz7Vr?zoD;q!717qTo#lqPRs92r9?ATo)SMy5TD+|y#OZl!MbyZF9- zr_3#n397Be?ba#>L7Q_^F+i<&yIP$PCxxSlV58c!R1NG*5kATi)UIfaRds-^Lk0N+ zlH-n&&f5RX8&lj^y1ox|q9i<~59s4&a(GcZobh!o_|3JJc%uVSy9@+u$vihMIWs#| zx^eyAHO1ifn8A1)9Aq&fjxn|R2CF2ai&oaJ_r%|bx;%x86`S@9Iv4Q8P?RNZ3H3zi zGU;G+7b0nfa&@fv7fF4_kPJU8H%`1$gR#%ie38%M?f9SLTyn}-gs*>P40sVbhTR>S za%fY0Uuy_+;My=zl@*3Zq7kETio}Kz!~&UR!66Dq{TpM76h4zSX6zu~AYj}EVtB4< zb}TMV2Vcol#D>_B_!Q?b2ROTSbRH@o?12dYpq?1mP(Hu1(> zaGLe3V#uvv?K5*aLWANMK@nL{`J_WNAb6Jbl-^~K;;}D#vDO4b#?W6er5tvStDJ6?vX8H-Ctj8bHXvkn6yO&F(y;fSl}sKL{ORdw>Z;GM0lD@%mn3 z)NzMkmbjIpU$1750{VjieMN+Ijo3F(JjPq&R!pw|Cg|{PnzqqUc@)b9`w*4ZquB-( zYnH@Zs=n0k3stRFbcs@uymIp-Q!ODaCe3Ma=}QmgjD>UNMcUkrHePgk%j`9x#0o{n zHj+pzPnHc*;2fC|AAUAZ{(=LW)k|&!fSEDDBZ;X%oMQ{6A*|E^{r0jzoq7SP=gS?t!th!^Ynj?a`BZ8Xa1TFW+BwmuFoJXD|L~%{XZ|@$@`z$rxY=|S?(@1-rS^>s0|4b z@5}!NJEwIAwyp*F>0jyr2Cf#U^TIow%ww0lZ$zuS+`09|zL~45GxZKUGt=wkL1^Xo87a)Ix-;tT*Ry7|Esm^|6->odpJ3p z*!*7;{C`LcY-`%sZMI;1=ju7whHh>MS(aX=_3QAoMJ!^ECHA>uI8P!mq1ZgAq3|a* zoZ5Wd@`e=|OZiUgB!a+ejv|krcJ;=qJOIt4b7Q{v|DY>B@N@a2a%a#o6xqB1+Lj$%9-m&scz9?S=7)haaB)Mtq73zRO&dzvTThYHp#ty!>DDhqu z?>`;lhrR215QlcNSJ2J)lSe0{`f7LOq;Dzk-09H2(g8dTf#yFEv50MYxHHA81Y4E( zO##w~^~8K1FsAZRjFA6K%eFh%07*u4RXQymoW>Obal#1_TkB#kAug*0d)B`J&MdtU zs#0irH0S()@36A>lWs4rtJk|pDPsW^8ft2h<;bcfc%m$|lS&@PSUaZ(jZ20H zAB}Fd6?#Zm?J{u$$7s^-0taeu*{kLMscVMR#|9=_mkUOwL-8|Ara(vY`1wVU9-8GI zMIAca8+pW;W_>2|2P0+(X+p7KJu*v$9Lo)_gid-sMAect1y>M~EW;TG46l8Z?QkW- z`#WCD)1x2BhgUUM8uiz0agiW?L{Vre$L==w%pO+k1sTh?teHXe_k|9U)U?%8>vM)# zt?B8v{#)zrWf{-M=q1nRSL=tTO6?~5`fL;?HkoO35oK{Xwk)Fy&K-<(GaDx**SLHW z+pnZak<)^&?=Gj+n;cy?MuyuNp6h;>+C@rlHt5h~4mHTXeS+*LNvcHixF|`b>*b9n zvK0y-L5|GG({raV)qBZ}#?1yp;u||TH2V9Y_dl|T(pQKk(D!};ds2mBV9hUfNQa$_+ahf1nPd`$CnDWjF; z1%K*L?T9B{p)bPzQpO_>9*$Q(DYhy4gEn2C-iajari8_HInUyWU|_M4sVMZ?sgGfJ zcP$D5E0i%48BwNJ!9pH5s~Hx^%%a?=#|ntW??Y%dw~;G1`SYuan(}Cu>$MWS{Q%}J>z*R676si-%2o-+#$^u>`yzh$JY0cO_n-cL zbd%Es^eXT*$$}?I4O-w}0WqAc5~BbT_)#}yT62cQ1<--1^y&STmtJgI4F}Ou_s&*{ zWUb*-wR#T{FKbj~)2;C@&g1EV)=eky&(j&`EevjXQc@-bgNzXWa>X=E>w;*>;wmEV zGydodNpHu9YjLu_+2<$cCWN-Vh$+`F?abQURt6$?qgXyEzD!u8)tbYN>b7RNBYe6j zvHNK@o^OO}WA|ixH7=#L4$8H@VuS*;7(6mT@eC zhMm)Nl(%!X@-vFwTtc_3=I(#l9Rdbb-e6MS?>k#wmD`UewFeM*sAIPwDi1Kqf)@}F zer&nw621O}m%0QI#2qJp9Gr2`Z)*R;%rfE;RSpoG{4lQtT{SbMH8j{(c6pp0lw#7| zFO}4J-j~z~+rgt_hp2m88m4_r18CrOXQ^Z;wS&^{GQd0cSk2}SbRBTbKwBqgnYJQu zTAIsl!CFgOvV<@~owr5ZW6`f%3d>-W&HMNUVe$O7R)Kh(hzTj6KBL$1%(%!J^d)r< ztpa;X6Qqk#-DC_I+l>9i{w@vw6=A+~{N73EW0~YCzY5unw(z@eqr-R}Q0>p<pjIUt=X_mm}L_lk_@8PIJO+~|Px2bkM z54)Ssa*|EQd*L7j#m^RT^*4ga*qcCM>Jyent*hdun%;56r)=oj9;$xW1#0-WpQbu? z85?xjm%ayyaBIdLP?n;K+)z>i_Qz+E&BXOk#L~0vVmW7{;Z&W}(9h$Hpy^;ZT!0kW z-{1*91r1RZCNCcQ_(zgKS@XPcm|BcARHcY@hN&Atf?**{K{2@57`Z0x!X(p$+CMMk z-t+D<)$P%q5A-c3vHM{sty3a)p4&pF0qgXq6G;pNb&NGR6e!$9oQB4(61R3+U#iKy zVG{(Ki`kmRI)4jubLLiCoVn2#CIU9=Q!TpcB;3VlI1K~q18%~#nAPO|!hhU^SFc1e zGQ37u;+DStUeObnh)Y9P)D#(e_D9=nuS9ZHE z?~1Jmc!v&&>l-TEp=vLkcFmVwbFByJGhla=O#?2_&-tg2mvb46hEy*!bCzs~1`VOD zv6nn6D7wK@8kz*QMcsuVsQpt8*n78qFh+M~NQ{37tQ)i#<^wdwutdM<=Ba)^aOAy6ipV@c!W-;(Ony8b&Urw7f7w3!+N@9rz^#{(huAwo;8 zM@HNuefrO+#&5B=sa3_TaMabdX9pfStik>gjKzRL@#qpt7!2;GF>Fln5+t%`?cyiw z?rOskdYSfe-^7ROuoJ)CY~$8_eNEP31)k7=s0oTssGYk%U{6#)`e!TlWCTdQtiM%0 z%zGJwyq^|wnhg>^GD6ISOy1}_?{s=D&UYglvJ z7Ge3tMaIPQxWT|)X8sMdIngGy!B{i5)>9_{uGikpa^isf*AL~(3pgExL}KpwGDaTl zcj)$Ya#GIns>~#uxvcTWSXPK=@H{sgZQNc??uVux$XdlH^}MDWx>MNIq1UhhD3|Nj z3Y_&O+N{HJ#I}PzpFIE^#;Pnlj@Z_Tm`wwxSPRi@eYv;xcHrje zb!YW;VkXFT$;0)3yE%T{aH}j8ePvy3{guK!KM4r#S(;0rI~<}gbUdO89Qv7bK+^)y z1R}6)IEJL3b}fR~$Z+`F2!;mjm+^MskWB2`HSrn)XogA?$6U)r!{eS%MemRIm-zuc ztBTEvNq^;~d_&JpPlM(^l6{MZ?1U*zg^#pxa6@`RzAs(=@EC*(;4yE$l+4}6q6}qG zdHV=pX~Q86OCGYxVJ(v_H6tcE%bPln3nz=WFEB7s2DRH+D0Je#D(G%Z6cn)!?MEKl z7@M{uf0VeAkjw(=k4Y}mWj$|b29gT~gSufvPKF^PnqK;hdPjx%#%nTyJg>^8@7Ug) zqaF9^!lq!ZhnYsUwmB5Un*t@ELHOG=6jK>FQ$8(x{CcbDAPX5O=tI|-(hJ%15r9&d z44g(En3^VzH4PQB8K?*E@z;TOXCa^bSUsM6(Ta z5#hZC?Pn2~9V6Xn60-@UiDP@@EQ4ou!;nMdUTMBx0#H$TnN#?LOP2z4HxC80=z=k6jn!yIH$f$OSV2fdK+02cATtnweS%8`HTiDM|5ibO@bDd)vvMo1VURNm3#Mk zR=qc@z>~kdFl`6Pim+e3Y1vGlgtW`aFSFT9hmyey%_m1;$SFF)(T_1v5tCw2Xq-+% z$WbX!A>Ld__4wsSN0~x~EH7l@?W!9Fwxl(soG@%yEM%wp(`SA#5c!5XD*RQ)AW2{& zjWWNn7GLe7N>F&t4?pHaagk(UCJ&0qLm62(c5<;!a^V9=uE0fE06HmwnIYfzseNYg zEzFFV|Mx0&ZN(L?u*c-#7sW)a8e3hp5Fr-&U#a7bRDP;|t2*qZ=zJjba zo$)i|lc~_32l{eU1@_yWGFiE{Xx7nZ(O*S$$>YJpK^*2?XKs z^HnLvbsVC^BCe@^tmArGH<2cm-fo7)G;WT9nvxW70o93krNL7i#>lX>E@fo3nRU%K z?_)}Ou6i*er(dFVlye1Tc9aAOGrD*YXXpt@^E~=!t_WHap9%80wSa#%Vdy^PS5?!p zzLJ^{ti6I_HRL!#Ec~Xkt@kyr`~F~gYu*4K#;_z4Lw$9Hgn_{oNU;?Lww~5lJWXfk(3TJqdpI3m0MX?zsl{czrJ_H;HC?cvEIMpLaJbssd7!N__{i}y0D_l zY^0+|n86yBPLMTeOj)0K9m+^i$A-URKmC;~TI|yF8vumAj^-uqsB+1gZn*pP`#76L{!^|QDN@ZMBwU|u&o9YG>0a3~gsR!{Ma(7f`RR zbUX6>V+`U>wQe&3q>u=vFBw0(>a4N^H9X_UQRK+3vd8Kd3wZjiW_5CcaGej_=3-_^kYMApvgAX zJ{6ed`B;>HEKQD@LX`A|;*;@yA?MF*E1kH=pwNxTVykp@<{)f(Q)SO_^RuH|+WPrN z7?d7QqsTDLzbyZJ;UFrLYU+eU;yWLqD1AV+0w!}HRbBUJiob)j|1|IQGWc*%;o}3`4&MfU)bUUel73NMthCBtr<6l} z2X#HegUbH=e5^twlbL4<4PHgpMwuUaZJ|q&0jK--7drUe*VjM3mV2aS&}8YHr*|;D zVB^z}=rH^_7#}Jj{wWM&{6}b{46cHbr9JM+$e{_HME}Ba+yiszSQm?&(qpNL<}0nS zKK#4-n4(4ek;b+E>P+TN9!(n$!HH@Z<`+^S*=^>WbDOYdkJfCmoMG%~_(`}nzvO@m zM2ejX?zjHL+Ndgv_#?C5CP#$hmukgMVQr`b3|0uVXxHJNSnevE zQ%YSfWY4`>a|HFlM!?-w1MgYv%vt7e`bRm)&Saj!4q9A-AtxR^boK0z4?hc2T>+Fw zs5!d+T5h{9Qq`~=Z3DDnMosXLfM4a{tzjP_-Q%LaJbU&rS+XIT;#vD3Pk zn7FO#F7ia7mn%a#)C-w_cFToMhxWf}ZJu&GdLd%yEj~JMs^!aJMpaBclSAi(o zg&PB2vpwEnKsYE1or6bDOMwEP$cetn)5ke=VN^|Qn67j!%MtlJ6p7XNZ3~0C?G@Nf z=FPZhKxML8inVfhd&B`or=+~nsb!LPV&HKhgj4Ko4&D1s|LxdP|(*P9rlN>F|s5l7C zu;Bc3TJP_+^{OR{yL_%AsXs-@V|`Y4#zhw7j6Gz|Na#31^EHQ`7Y3C!O8w+SlGH*K zwtG*d6ot|zX5v`O+4Cw*7_~Xnq`fLW2EhU%c2=jdy@SUP$-`cr8`O7f$U;-{l}Q4o z+E%~C@O$lQgvXZ1#ECgJ^ns7T2-tJ^R%$O@=ohWA&smozw|`dDf!_;9H!_hl)5WMz10OMX@47wPk!q4Uk*Zsl88pfGXg2I+zhv z`)X{jFStEm)0+uglr%t-!;)dnT`VBTh$m5=m=ugZ%!P)y_Q{xy<~*XCIsdr@f&*+_ zJ{QH4tzxwE_bOJD*%8fCxCTz*Vxl&m82F8~VnrxBi85leIAx&s)AM086 zsx%C?f>_8BNaKMfG#rOyypAYrw{{ONka^CBbDAS`!^{v7p@G#6%U%yYtBrBa84 z&haI3?V$IMmQEj8U_9%XS%AZJFJ4*mPS02|7)e@yUwD3|l78BO$-@-$vUY|usDS9a3KGLzI^fGifPAhk+5bT?*6?;aGFPr(vt>94LPW4w$Mr(`G);} ze;H+1tz!*|fPmT({|34P`H2;_Kres6!M=jP(MIYH7Q2VwUYyd3?g$#aw zvV$$>t?eYamQhs<-J29kaO;1dR^4V_Bw1PljLSFRB_Gxo|KYnlp8|8hhsD_R@ANQ? zU*MkubBY!}=sK`5t2`RUpIu#F*7kD0P=+1QWY;>QC6b5&Lf2Y2V;wmn4QKXtE#lGX z@aqkyCI>H8?vY)wOtKsK@X_6bMqbu^c#H;#46qRkyT%IotNa~cG065S*^H9dqQ#qp z-8p20bLVBjXDQkEh8N%9icK5PaYZ#D4HN~|hPKTOkz zqfl_XvgHjVjIdCi-64t0Kxa(338xR}@j!4I^=7<&xd}Y30gfe}CmmY7yw^Y6fnuT@ zVC>%LF-63ZEb#ir>T2mEBfb6z#NPF6^S@zt;PvwNa^3m_%hfeL?3jGKXXdzcT&3&a zyLp{b5;DYgUR{X1R5)$hGP_PYXy8GngB~E~p!hQ%i6ITQZ@fxyt>LL*hFRlnIdbh0 z$JrX#0ONu*@O!&+Ng|bw!`n21^y^2QlBO07V@z_h`>`@ao_|-WyScelXBn?ZH)g5V zW6}G$1k-vgzgi{39cqlN>*+VK_8qLeG9HJmzIgOgzFsU>UQ>Pr0I#d!kcZQXO@z7; z?|}i8N*YMObMq%qeK+*}IyXuZX>s!BR|w=H02@@WW|IjG_XP9n)BUapr|4R4lPip8 z*ZZ>#FhSh0;V@&myovid0C!n4Jh8j#ET`~z{~`!;z5>vtbs~iOHQ@xY#Z0ROG4UbW zWM*B(K^P@{Qz6(oJ|D;DJk8E9ZhS31FnmLfA=a|$PBnmOZkGU_kp(I62YQx}fZ8-D ze%1^xpYyUHV`_IT3*YU*C&79~zSGR8_ZzL(25NNbu?L=hCm)03_W24B=ad1+da)n| z9ni1j3#Y&db8j!Zd+?x%#dQFErGr5bpZGCh-8t6_8JqxM`@^1ET;prqOMH=vxy4 z=RvW}RdOEKh*^spjo|H?%s}adXo5CBSg>}&!0=3rmEVnQB zO$%j4TaO0KJY0C5Ui^)8`q_>JWDsL)hubdpSto@QksqQxywm|wr$D8-x12pC2-dea z95TzY6(y=ha|9Bc zuMC@!Kim4pG81innl9&fo2Y$XZg@Zlrc3IGIm3((`aEL|hX`|)r7sJrn56&PaXR5# zK0##wVZTD}!kWGD?}uo968`}(ufE8jj`L)&AHz^Qii`v&1iFL}0O1dTeV2=Mt4BUJ zYLlmtS{v9QF%?i?VKA5s$6iy|$aW*6p1Fhdbv%2Re^n<&o)fVKQFg>zY!Fp~+>m04 z%r=fprOKu8RS3_*n_Dvci5&X~tjpuWI|Anu$<*xRJ8YoMAU;Va7u{0blijE+f5#YC zr0Y9ZmZl;ELQt=@s`c_)|71xY>6AY$#PHf2vJ^w^5F1!dT|B0JIt6Z@u25GOYMR4T z5^myxA^F`N)Fdi8vxee#V#!9ZwnnMnf(_xz8s=;D*X20)*8=}nac7e^2i(Cv9J+Fw zDg|i1w@fI|=P5BFprdaago1ro90;CceID5n9Tmujt%+EOr_ z_ukM~aFq$FmLcX=4C-&kbFm`QNr->OJMRS9Mh~Jue~H6sVfd)QjG#Bn8-3XzTs6TU zo5*@m@r;zUwZUOwKA!RU~O?d4m=bY_b~IU;LJpT0z53S z7-A_D>-fRySbDBPqY7)QEvceP26fQ7inLJC9GS8l+GH@u8z~+ z&Dsb58?x8t^9AC22koIc$~IpJaFrUC#(!BrSRh=FYz;IS^!tkY`WO!VA|kA}+$f&w zf%jnYfe3C}jAMkzD=D!Gql}GQj5}Uu@!+rY0LQ9aaRVc6&yKRDDufLhcpgz9M)Yf? zD1Q@n{gAjgJ$fWS@3tT3r+;f+k}2TyqvtF0nH92qf;d_De%({;!?E3nhVC((Vx zX?eKz$~L+M8||#h2|e=ULGlYG^4(g3v&&yAfr_wg9b?fxR}M`A$^%cXC{TioSpdm> zk09LBf66@zjHkWZRM?Th9}$8ark`SLAnQ^DiB}N}qG3n%PINtN6pvvdsRrW5URL(t z*E*;+2nXO+bYXTadndCQ+HcHwFtrr2u1=w5>NCYbe^y>E-IQx4lZ|G;;^8kbo#B`@ zxrm-A)$67)v0%85xy(@BcVnXg@x((u6t)zbFOa9KGKyEgY@%u2iQ)O(JA%7K5g&G{!GjC%LMQkOP5+ zu@X&chZ0q5YuN#mSZAF8(XNEct!6uqVA+{keH$`osQ6k`>wP^tSedGT5e%ZaZTf~r zoP>hHSiR{j(7L|wFpO6dCn|k-2JA>Rsy9+jGc;zX_cE^ePO4+B=I9xV zC<&g$sN6Bh4V1Z&1qmR#71GlkZi^r}2#VjKm0PhKwc0&{uo&mP9`z+6tWjp5c9ed^ zbE@mxYRehYRwr!iMZF9A)f7`aX+O}=mwr%%nYqgEj?@4a%-O0__U(WtAGpj~bX2z^aW@Xkh zeowG4eY4}`&dh6kR;4;4*f!*mVeO~1a5>)JcbO4YpbS!cE8a@<*wnOM>9J}s+3Y0k zZZfezKZs*P#gY~ou~XZcBAG{X&ab3d3Ucjpsx#w!&vTf8`WIG&;tlAf&6)x|6Inm* zyO4DG@z3Bv)-SG!NUHYu`BYMJR6CKc}I$l#;fh=Wh71v7Q+#0B|{kZ6+#G)Tk)KccmTRP2$j*_qt&e@ z>kzAYawZ13?s^Q^_~2ww_xX13)m~oTUDxClU2D?LB7aFL*2^5OjtX(!dFc-e6*Zun z(5yzzF)`iq~G{vLOhBzngsKubY1dEFHF3Y3I0XUcH$z z9W6W%{|5O)I51yDxOEPb-TU2mS{$A;wv7O1sqqZf&$nbN*bhX$OB%78z}c|Xw99B2 z;fh=K>6xKbsptT@MwI4+U3OC#S^%20X*k)5$~zhUuQM*d%Y9twG$(2EsG{joz6GRd zE-<2oN_G)*ocmYEJSZS!j#wqsljkjj8BT*wW(M6Sb-&w=7G@NXcFSvLE4_Wb%DPWq zDCMiHzWt6}fvcm#EtvdjZ6HP`(|&Y->Qg_>@sgP?*{FCM$y=hYFuWm5BKZf63?3Ij6igv0NROTiV<*7Xn(-rC)`3Uv zzzcixa;I-PW-fNzclpA%?MH(VP(W6y^hSLA;nlH>;1LV(-UIr>?C$wr~P z3s?XrIOC5!B+(53+`gs2*|+S*$iHsEU=)&bjj(f#G99^+`)r;yMlj0#lxUTY7o$=Axae?%3d5ziZ85^;bBDQ$;87?X$9l&tLw6(?)) z_P?1x702Y}(^t|t&X3M5sSDOvA>G3YdG%g;qI(Ac(bAtZoTh*Sbj&5=R z%ujjzh|F>+eV;t2A(J=%mIawCw)7i6)@n&C|6O-)FZ@%@&2qW-xvd$KzFLq>A% z=N8^cl|os#x13B$5_%zI6PN$OC+~%xzn5+*9O@sNsaD`h3{&T|W+tvDkq8OJ@+p!? z+WZ&Ib*J$l18kUQK&jVv#Y+P0#tBxBrCC3Lgq|63pKANp&(%bRaAb-~U-icBp`d*7b zE$R$J6U-zkQE{nH8a0S7(01%UPKv&%SBuCL)%0!Drq zKJzhM3KO%@?rpxjpvp@5R*5a_Q!6*ST?i+aOv2~l4z+>`+tNkQ+pEB9Q#oA`z$4W=FKtD{Qhp|ic%TG-1Stl4SR!>`NVGMYqD4KG-JejeR4s zndGG!lRDb)rAo???6%z^8T^MceiOOF=gxUiQ7o={u~aH<$h1txHyI*vgAJjd8(%}+ z>hLq@Ha5>czT+C2vci}PvW_2R?yiG`6?lU*Wjp-fbjqe3b=(j zC2=)#$)bZ7uMy7Pp2F(t5ATwH%)kJ%k#@*DOXM+|ay`S90&!v!m-}8q^(~_^48=mS zwZrVCkg%)K8zvQ_cC}WSqI=-nU)ZG8sJ?a|l*)H9&Nu4$d91PMRAXVSYLPJy&mdDF zzL%+%@Ajw_K7*oD1MTWIH5SXlN~{`lH`&cL*Y@$b;Fiv3Q5w1#^e3Tsbp(%FPpUd3szv3 zwW_g(Jt%dpbQdtKa`ppNhT%9lF&SLdNZ7Uw$E*|#KJ2%zd%x}HdH(fwpJshD`t8)G zV>2ic&}{wc?Rel!itTz zwBSFKjXB<@XGtGn$e$bS`BM18EGtm@S4Jmuv`C^Zwtk2yYCHa~zY<_|#lf{*EvCxZ zO=p&nrY#5&-V1^ZbVIl%E)8j9a~MU^(gOb;`3f->q^YsGJ?6*{CGaFwYF6CcuF&IoN0n$=r@rPR1MqiG^`c6`r7fagJ73g6E+$Rxo^#YUWst zXjg{~R<;75ckUvVr5d1*$1HhM!+NZMYUBM*08i={$wTzv4=Nc>{!Zr}rzRefuWL9m zysui*y!x;(Zbr}_zr12TM;Wz>KZ?-LAZ=BUF;L(6O>&Ll<3kHybk*SwN?D+*6{&u^ zgk!{CH%JSD!CTT~dDlu>B3&@=`S5!SW_B+Sk({GR{L}Eyl4LV%=4V>owZO|6m(Yu5 z*_>UrKbQ#=)e1cx&b3&Kfyz)KR*`|!%K^i(p%)BNoT0+{>VCw5oj*^jVNWU=FA=q#YY#UUX(QKe%TQj+U-h;dZ*UqX<6Wo`b=0GV7*7&Q3^gf5 z3f`?4f)%Su#w=YZKDFamjv;6-H~1H(OF)VMNP7$l zYqfIuYy2KRK0G#(rhATU+ZV%~s9#D9`h$sLwWA$h&kZHq!;YMzw^Vg@b-W}Wc$qjB z0WH@rjUPwosAvZTI|aZ^UZjzzgtxQOfX-C)`YzF|H`ng>My_Izn?mpa`6Q{jWIr)F z>QEAeF{F`%(=cd*q#t?3Kpk4Ia4!}kNi}8m(XfJLnSja(hbi+Vy2+1%;fO^uP*o`w zlnIWa=a)g&!(C+?hjuEBoT;%h${C(<8s-nMs4z~`3N++C#UMuoJxax=+MGHACaJghvV7T{NYwdlJd`zO7YYDX^Rp^Nfyg(6d;$)bA$DW1IbCHhKQ`} zg6=<2zlOxrBJ$~rhg1HVwPHl%_|SAl)uAZ8s(WZfY8#|X&nh%a4e7yG?2%hzhXniK zmA5Ej-{y~PNt4vQ1ko6Oe4@`vxdlgU(hmq!20m#uvwWq&96O4D3`JdT*Ajsr0q&(p{LGZEs)^%AES`5k-P zk)$IuFBce?F=LfzCthv&WXL#{NT;S5!)^Bd4s2|(;u{e4JqyQaQU-jw!Bk(@njI=n z-lMC1rKQ@_v1(hKEYrf!nE=?^>*Ywetb1M|VN~=e)ON}yXasyMP6}>PFBL{d% zOvjze(YfO}5n@hP!|ZYd6;{1T3pj(x&s#%XITej1ioNa8&o}aRmW{!TZZwLHomwU6 zomdEVBG42vtJIFO460aSvqLz+bbo9}UphxuW7N0b3T7f!Rb>Ctq^N>34`fYcC=g!P zZZtr4%)(KGgzU3n*pkbEdGsM&0a91=iA!0a6Q@QGEVTm;gTn4T-&7tpe{Ja}>Vi)o zUIlQew`>W&3v#p-(b5JX>i^VXywthxVH8Z$>;n8dQJ5uPHu2*s(zZGd6(Ak^K&x72 zM|-xkDm`qfmm|8H9yg2Cd%<_nS3U*K-Sbo7O9u_*jH`2qIAxr$uun5vV2GN4NLKoh6~pX^oO>Gtq3Gi)ui(2Xyt2+v?VQ0I5v(nP?X?cb zSXpqS4IMF_>y>5NpxI=8cnU)$5#bJXLbWRgTyJ zXQaG;2(qj9ptjb3HZ7r9RBWN;s{KMINIyq7*beA+l?%CEz(1f{bQd$K&-w%v0-Fbw}$GU>j2dBK;%TUJatWb$!4e^uSM^ynadeP7TT(FR4&4jaMb`w zRdyw&)?7_98wn-OB-&K)p@_&4rAC2IpHVOOp(j_juSwn_c!2UZvJRuyG4|zzO)z52 zn$-pLHF~I@O|&TPpHP7hV}c0X#X*UCgi_Cy+*Fq_Rxzh*hgv_+Eh`RiEof(90~)uo zB0B3;9=}~%7&xUgQf6^_QE1ohuiJ5{_qPp{(+WG?5KVm2GH_9{r3IQnxrG<*fjP81T(fihh!7eSZmY4|b z|9oMGFJ-f`5wSB*lHHD3xvi}HlmyZ%EKH_Y4n$0QO#bZZLZeU5&cl8{scy1qU?61$ zccT{^U7j6Lu9C#bQvHGu03{&f<{Ex`sLj)Bj3|5oPXlP*&s8m{Q?=T@Tjb4D2gQIxM zQ8dyON-y~UBI@hcVyf43rCz(f0PkN?=wu+?qXi=vSvg?u)~8YYXJft6P1anZIR==AFb6 z1_;%5Pm|BRDz>zh+OT12c&raq;dUuGWudN<*@T7L7}Ov?$=;wL@MhrttRqKID##6g zqc;v*yLQmP44~DNp9$Y+E@D_Q^12K*4b1}-Ch_sQk(@o!(^eF(vT&9*&d=TP3lKs> zih0I_3JinnlvhM5ee!7OauDlMT0q_3Xy&}RdUf4P*Eu4DPaMxeTBC~|_Se*EHn)s7 z;Ny9}P0woYWc&3x>B`_L9R&=wqN3gv{1Xfc7(re}+5{D_U0m%^YH4;a4QZ zB3-xG50Va!XyfSE2`E|W9IU)lN=3g)K7e9bsTf3a)tDtR(!8Q!;>b4i%ve|z!)A_j zI)e8lIRf=`0*WSNh;F(vmPi{f9U6aO8N7B`n^4u68ZrONHcM z5P`8`{J}Tye^oz()ADV7K>z`XqXGe${ErIee~{iHcDAM#X8-4k#%6V^9|khU=TAlB zJV>K_{Dy7EFkOcjX2sv45pLJL(H39`CiC!yaOr~3qJ-N50pD428_kOBYwt8PD#Q3^ zpIM)}`-qwl+zRsjUSv}*@!GOd4(&oUD~akIE?w8%uHvJVo-#URl2Tk!RR$O&mMiOO zx?-Bd;9gt+-dWO?7C~fnnVZB^91ivP`4S%t>F%OhDq3VXXk1?s=LreU0jO2bvto4pvNh#vsktb)ao7j8Bvd-2!_$C zn&ZYCKK|wwnYgsLXknshia`S`>}=BD$%8jnk*%YYao!ju+VuGwtX|t{YvRYZyxcpH zTJn#+IGQc&z2<<8-@-dw%ITs3XWI54bO*td_~%(t%_wTbDMQ8-ME5IG#@x2IBS+5D zrl|6`sT9UdB2p>843rT`wnF+gk8kXdmPRUh69ys*bWE|QzfGW_|J65TY)F_aChfmt zX#f5pA?Xm;pWQmj?>bl8`<_J)Z*S|`h=%IvibQaWmiu`6i!2vCk9%Jupm#!d7!p4=YJRS}%Ds8WPgGAjEU7qMp92x6Kg zg!`jCo>>&|O<2kHH%f}82=kR``c0eJ79jINwqBnHQC9}67?Gy}iNggYlDug#3stAZ zbP6n@3T>1Z&U)X)-%re0(h~O;e$05Wwiv5H06*pk+jr%nqL*5>41BPt@sl|(oiH6O zOZZxelPox#yJ_~_D0>l|sPqZ+RS0+RqXWd`R4$VS4PX%esiRIewAv74X3Obc5mEJw zPMU3T!u|6t4;L5Y73X~ojND116DPgzj}4O>9r}JIbF(XO7RRb})gz-Lz*a&vvOE7& z79lN77PJ`l4z_Z=i&iEici|91|COU#iIRAC=cyG0xJvb=Zj9Tn|Rotf-h2+Tfo-$k- zFD0#d>M!Vrt2L3x?a#8}Amj#NGF@PK#m%Mm#46YPYy5uJF}4XuHO{dF`u1o(%^a~K zL!x3W?{BFI^81r$OVsMz<)@O^0(b9?-${rvwx2)sYm>{uFL@%k7h7LdFgjSL?Fpg% z7u-fp@6vP(P798kdzB^{BtGmJh=d%p`>k!OjnRil)6ZcSHtmOkofCeeGZ%bW5KstE zl6*HihI(-Wk#I3Q3Q{wys6#OIA8Wyq@KD7b=F{snfg)h|mQv2C3E8ydB8eb|lgvM% zipx4wqi71|##@(98`ke-2C>onQxE{h9QbAw{(X{B{va!W{0DW4ty9aTdq($Ou zzvuEm5MX~U)kD)jueh2JF(sU9AlbZkk;*To8W1VA+F?B@%Ma)>2rP>A#YpSJlZ_C0 zVeIt#mN*s0`xG*pLgQU5QGXZpAYQwp=a7a&A#1iwnq-lyhpLaBvSJr-yj$p)1L-bm zV-x@55#g4Wrx2K&!BqGmQE(FlB-+B0v2@y1K*O4_9>?0i6(9rsO-POjosle?fov|x%?povhg-veoik~7j_J#O_Pr0s6yzplVZ0{m zrfsnp{YCW_3}2-+`ZjOPzfUP-Q*^~Jd-nc(erfsf_*EjnU3>Idls9rLM1ECqA8%lxo74MnGzI|S*jcO0tEpt_MW#Vo6nf`AIGTPocugIzD~DiNFi5429;e2 z2-0%*vcxRss!%p|as0#|k9U{Dxobx+uV)vFk-y8pvaYlzgzPw}%QOr|e6ekyVbM_zuU*GYvdb_Fg{_Ht^?CAH0s1DXe`v?F)$qg2=`G z#g$}HJP6~}>GgY1{ubrtl_Z-ZddhlfQ@e}qb03IHG(3lDe(&GqVGv2!M*uPm>K-Rw z4}B|08qWI@-=M7MTYQZKPNQ2P6OAB8K@vfLB275cuALDs69G8_uMu1sZRO!TLL@j%K`oY1kL?*VEG+A!IB@9$%Gc ztYMU6w#Ws!ijbO!bfS0*@P8Q& zzZ$4yMA2|i9H@`Um6y@g^z|PzJ~#pw$4SCl1&c6SXi0C5Kq0Li6Z8IAT1MOct;#;2 zIE+Ob1$P|SW4-^rR~YjVm5>CtcatWR)cU7i{7%WDx{l=a;E3+P-#_EI1300AYK*T( ze^Xv?+6u^9fgvUu{^h$BJn>+cT3mv36Jr6>2Ig$3LGm$}ZE7n0#CblPoj?g%u5RXP&6D`Z*2O(;lEeYe!f!hpG1_*cs9 zJCgz?Y1IgN`7aCOut}5%-l+f-YsGP28kSxtEbK&=`V!apBh-COUYsU{Zc<1>?5HSF ze*7C$>aBn%cI%On`!PuNhB4EF5vjhQPe=wzmLRIMVFm+k&;;(|KT1PF0_FMG_k?&6 z`E^zvXA3Syhb-Jj7ND<{6U=J$zYNM|C?d`+8Bo@tLw!t59++`jH%HM2Vk_9j2;nw% z%IWCb6y5{|o**zF=-_tbWf)4-9B#dNI^d#u z0cQ;u(mT_OvQZD)aRJ#;-*m7>3Xi+-SsqVU%W$v0w&uQ=4bw!QfNV*aZ!nJ!hd)!x zWvt0o+b&!VYJYF(mELv*EyByOlcq0BndW41LbN6P z>J$^Z=tuo&Cn-3&?nsPi#q^ol)LMR1ONMk%3ev5h4DyYuPZ27&B9>^sHd510A*A2+%=ro#MlXhUYJ@3!c8?N=%fS8yTetCs=H?JfU;2u{l&&ztTKVVte?VQ z*1`kNsJ;Nw0)$dA*@dmu8GuiVr`g$Q6l^z17B?TR^bn3UXE4@j*2aW)zSI`M zgmv;M^BR!gzN11)@oZ~4^W3}kXVT+u3F)`u*s9r4DUMNJzl}~l*hIwpY>5s+wUsk$ zr!R#)p-54PAq!pGhIMy@@BOn(eV4cqICoPIV!mp&waWmAh}A~nEMD7(^q!QJt~W#- zdS2}r&UNDSD8#=$db8b6qC>A)TTvakeQO2`+&N2K z)^^@qSnQh4P)Z729$}C`jCvhE2&#`WiBi!DmlIoT57iM1| zapba#xrAH<1JVM{HA`Za)g)UG?~kPwD{aNJeR#HB+hrhicyGiBS1G+|P<|!bE^?x4 z9jQ`O@dVffgERQ=k>rG3vK2?#<02G(Fr*J7 z20EHYiJdnMtV37~ZO1W4Uke5Kgq6#!DQnmS@g3NX5s>$0`tY8v|A7Ja7U2tYS56-> zbwzb?Z|#Ivg>n~RmwbR!nKSJy-|EvZj>}!_Va;w1AC=wQC*0#GA>_86*~vDxiRJ&h z8!qtN7722sc9!Z!rf(~`jXz@(&J|=Qzh%?RaiB}MYZK}@w43I0SsxD4q_hFyFtlA~ zUU29(3%Is6#{Izd5P{ctf;|6Hi#+Z~cm)M_%3L;;tA72GZrsM{Z5jBM^w~8GzhsEp z)g@@v##>Dp=|mf;-W9UY5%3sa#d(>^t!1XVnxP6@SKE>3hp*}kUvS_$0)J|>rf{Q{ z#Py3NA((z~;!u8DH1o?G$i<(vS#t?7<`i}4tWoN54ERiXZ#k=tOUq)w*u%QUi;s~Y zU=UFK7=HHq!-$3IHva_6J^ZzE`YtgmuOf8`F&QIoeh7g%o~wRFdeI}WvG=bkV2N=u zy=`W4kNWxm9@VXBP@ViEx#!bdAcbmV#*-F75jWKrW8~H{FLYyYKAPuFS-D<|vE!-H zl#Ltowl%2Za%bY z1$_*Kc~mZ`SC+VecpJ(w-`LspZ|(iOdj62?*&@mb=xE*jG6DWV@r2KyqhMqB;ba)& zZcZN@`yMV?!CmfVxwh(<`@!(BQ;@6Hzn>G>9sCIleEz6IWx*8i&j{ly&B?q z*wswiPnW9Vc^s&acfE>BEUb`~*b4}&n8!dwCEW8AIlGn!E@%aicFB^;O4fixde0hu z!((N&HwcLk24BsP(8qNenTG*?{t^+%)zK>EEdcTOY31@ra4xNt%&bEWOphbQoV)^~O@gsnZ>f)EJ_HXqLo* z;DHNgzdCk(`9R_3N!IZveq~=~KN6?-L-Mim-8(IUsjIz7KR~tX1i3e@M(Nw$4sUG!DlYZd+6#i`W3*m^n^&?Bzv;q)EO%Ky3 zpX3M`BKiA#0|SHTr2pU|iMtDgyffkd-Q8>d1rzWiniH2KACsL`mJ~m3ce%VK9THOG z?-+;c#WO)H$WQjkjItMPr9v5f@!tr|M56dxClJmN1qC)ZE1@20wyHkI`w1n$!N`zN zs!q5|#Mvo#W9v?MTu{)dh?j4Sr;Y>HC~?^nf0OSs&pjlO(J4VGp-$+4ROjdHveDBO z{MiU=KHzbGa9-x(v(V*#e-U}#IQc};XJX!gjsqMR@$Q)*{&LSWDI{!ZAs`_5 z1vxlwnt;%9pmXDXk$rZ!vaw>dxtKfE(9*kAq_`IPX^_=Uv4=-lE`aSi%@!M(|G5PF z9>kU&W&ewQ!v9kFIJL045ybcrc=l+2TPa8Ls4c}|!TwB;17SqX=Vr0j`nxCct?l6b zS`%%jUH2WKR&>z**pTgVBvB7a0E1?u%g2m>tYo{rgNMrRe8TlmCM0yMQ%8+4>?v>S8Wr>{_t1)pa8+8%MG;GT`5_ot3hcnBL3*b zCb03~#89k@aSE#au^1NIsp6{^XG{e=QCm_AG5^>SJtUIy zSb$dH*zmLu6!5Ez<;GPajNZ#S++Zx>c71{YqFe)rv>mXDBJ0a8|Iy*KwDi!+wX#8G zQ`~tn;<+u3ai{4c-Ci7@;w8U+cHS2@&b;m%fp;DFqZ(oK&>!yVkM-7`PBwPK>Qpxr zm|=YWld++vUS2Q?Bc3~dRiyG!t5hF1KnlI5b&!IK2uY1S9Y^W5W7{2BX?6=-O>Obr2|;=8oX__!-{7| ziBe$+%XerJc!HCP!s(D1?)?pv!C>{-qS@o`mmCDU4N1`xsZH(aCy%uGf&%_Rjr(kvYaI>U(+b-ps_|6wBZJ zde<1dk9L@^QM+))_U$`wp|>3pB)Htlll}Ou^M1u~eBExpx%g8Jgn?u+DAILEcfN)_ z#xN4&Y&qS5Al~~CK`}ga*Q>YxaAng+n+5TXSb_Ro&2O`&+M^C$cE@yN03&$IbY*}e zc+WK3&kGbA`igK2`oddvY{2f1gILL#J9TD* z`Peczn6=}|UPgoHV?^Jc6YjoW!Q7ArIT@Z?^0;zRQ>al6h z74k2_xPCh(U$p5(;nyV_(y5s|OP4<X{N?$rmuOTTX?Rry=*KNoHZd+L*0=ctDzx|Ts@o&e-G0LgWl&amW}Vw8oh?pO|* zS~u21z~^UlY)%@D{_HXusDO;ncJa)$veCgUqzs&a7Qic3|%ftc3c9?Sv7@~I%G$WNCLFL7D z(9GFe4+DJwn-$+Gr?d|UCf;$zIF7Ek*aUvE2@P%U!Kb>Z?{T=NEp9@e+hm4v zb!X@8fb|Lvv}WvKN-}Anet0@`I3fwk&5ssslK5^|3&# zk!nlJnkR$ndYwvRy1PJbucr?mZ>ZZG)qPyZ&3=lsOP^!-m2zsNSj8WtK~vgH1b`<&9hOpa$%|)g>j?i zASj!d(Kif2Y*~d{x$-xa^Ea#J@WoFND4oq{oI~|L@QTqUsZ|rCp{oonhVLVgBF$0` z%8E5?%M)}W%u)|di#2@96AU8E(hjIfG-ApVj3dm_56nw6a>^6TBg`@m%1Sh9$`h<3 z%rXy7OEh}Q6YL|*vJR+9HD<~aoFmM#56nw7cFGgnBg}G+(@Hgu&k{T`{@FlJ|2Mk4F&+eyytT$TqpY)k(@yHA?xl}C&c`pM@8m?8;0}xp zX5V$lkM_%@T|Te0uQs!~xL{tPDEp0A#`O}iQuVQ+H~rowB-g$Y>42d&{Sut067LNs zI%H=esV`W#7)z=q54+MDAc)b$^%Y?(0B;dWlCX=H^>G*_?dJO-lpbQ`!I(LR=*1{{ z?g{Ei((e0GjzJ5RzupeyB_$Uy-3I=5*L_)Be+$|IkdVJDtd(}?)f|UGv2H|P6e7i- zB|WpK(i@jmTJB5C^;`K<*fFQ%E##0_?h$s}BjbE`A3(OOPjP}-{MKLm#@AeQt1{w# zO~LUrw>nvUlKYw$XuS@8Aw}P5z*la9Sw-1=8TeRKN(y!%^;_aYyK4h&SCTrQ)p(vZ zpfy-ndXJvC2*q9Iv>I#&#V8+aM`@AtCIyG3-xEcESo8M*Wz&sP^b0h7mkOz`Ff4!6 z8+3oDq5$y=(>Wy=q4;Mok`&VJKWL0`&Drjw>Qb}n6B7(LFQJWh3~ygp{$B9h@85yH zJ*y14C@H{m*${MQ!ln8tqZLz~43%!AveMAJ)pTz(>8H&cSl<6lM;0ERsh$kZ_wO%D zbj6oQ!K@A*d}41wTA;zP{s2u?kN^7d+W4{d&WSv*CiEQ8%KX;PeD;kL7z(Up!iymk zvQzv1r{!lE2Hq(GUvEE=ietE+#2EdZ$`cO}xJ^s}l)?i`uKAz%#c%j}CRjE@Ow$1I z%Rs~uw zJUCtUzy%B+5HbsG4n=plKrI9A^!s^vfKI`y>E|wNoHzJE$99xvof=W-e*Rm(g#3I{ z878(RYv@0J(&)$MkQ!BSaMrEQj;2-|b>=3)-?h@f8$6qtV2vLw1OC%68-d$uo@eti zeQ*2ayH7a+DD z{x)s#!1^>6hq^s&QD4(qu&J$UF51-Vzx(OMr56&)K!3$rdlkd;J0vbZphq87zW+qmB$fEAIN>3TCalv&DN0O6 zbQ4S!j5quo^8d78v^_{6adV@X{My>EQhW)3*g*QJ3TG!RHu?3o6{o*F!Wz9JgA9rL{i9* zAkT={R4e{SnO=zH;{*bpRv#Z9(W{_Xi&kvbK1-`{?FomF@s|TZC|}beURls(ZG}&9 zfB|;*s26F66Aj&IwatKul#k-Y_Hy@LUyB(f3~X)YaW=dm>bZpr5Y zmhTs~J21eK&XkaOxDvK7PW43q|J9oK-JQTdLL0@X*9=*NhjaRm-^2Ym&^{jekueF( zwbs#}XO*0aEGOi{CCS+|wUP9CddOpQPxx~(rWE$EWol~O)Q#Xia}|b8ljk#gF?XIm z$J|;LA9gI`;)zo!^A5uJeKq6LA-}~2#Sqh_pme1Kb@~3xlg0GrM)5EI7!mfF&y%GW z3vdX?C<6@!caAT8U@wOJy7+~&C10IG?Utx)-;x|y!%7Q?=~xSsjEyY<PUKj}}&_tzM@?Xk9oennh}8NFY?wO98t{8)>xrc!@B z9-N6RFr;-`tTT1+*@q0Oapz+_KNj|rH5Xe7c$mhf^HuiV`0YHYB0ab8J)Ep z9QJQ~wiDi!*%$|D60W^|WBE~I8h`={*-QabPFV~TTI4ab?h@@EM{Zh0a5^5=)-6g` zO?S9jnFTMGD;cyj7vAWy96wZi>SZ zog&5Z7|Br16>r#L@pd3XSI@nZ%48nIGwOuMg4pFO(p!heUj;&6{|aoFtn?~ zO2{hyZMOS!Y2Bu8l?9?bX6yKm0`4|!Hqnw|K0OXJsd;>`V zNF(TkoEzXi7yEHtWyjgO5`X0$Z_D{uKhDr;W6e0n+acphIYpMCT^MuXzGzcjsdPJ* zIYU#I?#a;Q=-8r#;xjOt9H5D9!8e`d<@xmeU8m#0;`65eU-y?}Xq(fxe^gW&I{%~S z(H{zih24*vyb0jHLBn71{s^hWTXI)>4KqNZv&PgeF(Sn-jrTd#46BTA8=|&$Y>1=A z;>Cgy>A9LNw_OGPoxG#|V{AWRX2nxVIw(p>yxIn;7IQqF^5``k+d*}R3pGhHH6%)0 zRlF6-68)=l+=_b;&N*e;>fy}3T;SA3?V5Y_K{V2O;Da_AFFTZ}BNi?T`0bh7dqajsnF^Mj`Y%JEfB(Vf?akHtkpf=U7u60S90X+PAmOt? zU5@FEiY_e#I(Z`}$e5rygR&3oDQU2qM9^R>)6w4Y?fC7D1d;GVY-p(jCT4-(FC@r= z4+AD%{w`iFtg!pZ{@3;4`4%Khn0X~A1Mo=7A7^=^vZknm0hBLNs1~5h0|nWmW)NUV znhuDqA}GNNeg~~v#qrYjy#jKp3Fh? zo{Y%DJ0q?0U=J1~49-|4nB3|t*m4{_A=-)+IBs6Q!%A`$KF>xuW6zbvkR}V5{1=HB zM9821QiVI$^Z96Qdo87QAS$$!#{Tl`uJ-y2HID$41SE?+xP{O$V6{7NrI&f*HYq|U zpF<4|wnkqT7{5J*Q3TqO4|{SD+brFO*$8dZfe6qh(Xv<_16m%_^OjICnPfnIaGo(WQl1M zJjanm_SCRp4759V6~4T#4w&Sd)1bej5_O)xL&ZMCUi(#!u>R;9Pyw8<`?S=*v-#3O zHVtbC{zW-^^+*=RI_Kq8+~>aik9W4hA+e3Fk|{gJQvGxM=q>?N zZjui9dUHjMQo6hPJ(Y{|$|;DnAZ2%@RoCU?CH#mO)Li6ZW8&Y%d|WNi!bI%$*mIPX zR`sggr}GZt?2D0NO-E2w=6FJ)oD_rkawTH(Tt#syhIF)r_Kw0ve(X&}99xq_dYI$( z1(TczE9}$=*$GcUEIMv&o=n``3ba6``A{Iby2Z&v)Ie7);js)8f8?}kNFc~CvoGh2 zgOBU^d42KFRM0@+`eV>M5MngL;JI|D2|TbOU|VEBSarT>X#_rD2dKIF9*;z6?PjV1 zIwnT`AYFYY5I$h}rk4|^1(cD^SaPy|u#4M@#{2>bMnKW|?(cE})gS0!Y5&_iL6UH# zv2UWZJs?zRYxif$kaQZRk3gImQ_UE^QR1OAL9;r+fHR0;hXoF{jzH2I5TyeyoF{g7 zAHYD-%P54IeZNx}rQ`&$=SP?5nmuHEJ}0R+XSQ4x?uIHJnb zw4Ak441E6viGWU7=8kqvTM*;3fT{jW7LS8Z6-8a31tC5OB2mKm%7KE5#esXDs(U&B zr>je@l>j#4hg-54Nybauu|ls3U9=tiyhcczR}AN;|2G!eS**(^&gCqMzZTfnI#huO zOasOdR)sL*szd4erpv-2-FCxa;Zh@-IeV3Pb}a87!7U;L6bdtZ2***)aAx@1>5i+e z5O9}9TO>bBf+b+Od;-Yo5O$~=BH;VVLJ``?#Y@Q8vUN~*D>?~LLM|lK7!l71FQw9uMXhQl~m*I zjO*xU=xRIZMXIIm+`V%uaOvyd;(;lKW9X~c_?@znkPH_+i5=EAP#F6RhjSGbjSSeM zJQ#8WG43DEw5HRFBc^Glw&MI-;sn^HsJwf|NI6?tZRMr`hJ2>rt(^ASS*F5&h?C*tx;RX{i?!4ua$Y_Rmfws72B|wPoAJK#3 zDwNe5v$5f1zhHLm%!(AUG7VuzK$X+6*TL|}-6Ow4HOcUcBry+&%DLih=gDxZ z!x|Q7;;0qlulANXMB(a)rVHeFz1=AXYF&+JZSN@EUP*ic-+#&R_||XwoF4~EVGNPa zfvCr;HQFG%cnjr_fR`kMlCqH1stBZ^K%npx`WB+rR-pn8?%5 zH2ZjLC6ae3+F1r~Y|1v(v}`g)u``q@$7zhnKMPy`l+!`+h%|39E)Q)jr*t-I=?(Nj ztKnYPK~s5Tx-mOMcF<(-H90i%<@hM=lkQxhk0pj+VYA+hnl!9pqcVN?ykQ0J2;J0# zZL&*co#t-yKbge8BX;eDHh#oKeyA0IK(RaX$>Vu+BmKsz3HUhpYbY;O*O>P^(L{is z2I03)B$rp()UZ7(8y4;en(6**Nk<+cBi!8CK%tNT&Ad}=5dMLTj~t@=<)~Ck@H@(Z zz-RT~e7MK$kN}0zCQ%g<04XUzzi;`)=rZE9mNuYC((YPNOu-aOVNmdon3}egZ}(0p zH{f|;oY)WUGBX|C5JwFBmO>CsmV-HYREvic9?tp(+<>HBO#gG!3OBu%aQjzcEs79_ zrgwrAy=a|Wt2+e51~C(%|6;;QlV**ch_nDsb|=pOb(6aN@EYcVS>}3@#s&h;J{$^H zCq`Ykv6Wf+`d}lDxS#@83h5q0Sxs*-lzNo-y7kn4J-lN0x>d#UuDRs2lTJNP`UCV? z=IH7rwrub2gqAYI82g05cKP}3Hm)fNdUr=bI}lW!L=_!|d+f3PgvP##q`0OrG+^C0 zEa=(lgDyTso^?hw#5bjKYv`g&O)=4>si`3Au6g!=B89C+ZI3ZBWYOU&1tG6fl zJ^fF7?HsGB)(ma&25Ge%iv}l1SX5lF}y~Q_}q1#FTYozn|dbm%}P4oxx(=B*VU z77}na9lZiHb~6B}u^syYbThYg$+eRKSOv`=>{82qv-TB|<*-k|tVmAYol;7qPL+f% zB{;E47@Poie6>R8#q0gS|EPBBvx+wD|n~1C{UX9`R|^+g2|zQ|Ax`_HE=}3Vo9&F zT=2_|@8`_4c(nQ;A!g(76gHB5MWJ7f$bpBwG()I{(_`EMqCNnmaPkqyfGJq=Qtvgq zs)`Xk9uy6&X6$5}1XJHzvc-4M?WxLpLfVDmNSeWz0KL8aAabG7J>42*<964R`K_VdU06J*$!JyV( zcaw2l;ey?LmvEw&84;6(LL^^NqVg$%=ee?l_`h1)s6;-kZRXtHE6qFZsR4MAIw~w* zO=T8N-(N~s-E7n)phR6*1#x=;tZ}GQ{8LJGM)>UNEj~c>}OmH zK)#E8h6(QmE8F{-JMarS$%)e@kG*xSmZmeCZ_b5pJqMQuxpyO;Q<`Unp8F28&8Jq~ zV0O>^MsusJI*otESNs{|f5OyOGze;g^(00b&2^pmdBkn^j(N{cm}bYb!K@;x%_h7g zZZ4SI=FBA3Nq~n2w~TFWR#PGjRnF@uw5c+u5hjYas+MRy;ys1#y%}wo&xvr+8v8X- zW^M;RHMrzb2ol*78(~B++OO)Gm<&=Xe`j&t36LM&7X8BUfyfscW;y~k8S?^X;|*1V z35U5l;p5HD)K`fyjIh*xzJu5QEVv6;mNWn5qEMiR{2O_POr`U(_i&1KO5?`;Vy6^1 zEMw`{pC2DsrwV_l2v>;b_8y6QD01h3M{F~vdX>?aMp`LKk=g3h#!3s5hod;OE^9jH zV3TUyjU>bMmmkiGTJY^1V7EQ67WrdNvNTsllBknX7&_U|^fw1X^FvhqkrO_O? zbyGt>mC`1IZEKc$iBEA0h6NqtA{%hlFGP`Y-D2Es9`vXmnXrPqZgNq#XkU1?$2Sp+ z)t53kw^O~7%8&D=-p51|M(0IV)9?}*P_g!s;*M_AI~L0zI+K1nCwnptCbuBy!cagu zo>E&&iT$PSek7jNqrt_HWy0H@gu$&!k-sWl4b|7ZM~N3;>BM>E_Os>&tD76@Qs)qp zLk|*kh5?<_i)OFf3xHIOWw+BK-o$1CPSqs0hv2Uk*hU3nzS5(WQ@X2lExg3zEldB6 z06-0@+V1!IQfqO2Khr2BY_PW{g=O8PtTAIhqwS0r^aEOoC?0}U8gMaY*!`A-8E9R< z2s$#>>I4`i=@-$d3jd1K4XnfPS(}Z@5xaXG?TCG==-mWeXG2ij)iI*pYZfTC_C4;x z3hB2e!hXF%55eYMfF2*|aIK1;ZS2=Y%o&Ocw4ReD)=>`iNp-t>uM(8mo}%Sy_-lsS zkM9X>9R*4~c{#ZvU%8~`0p=yGU8UOf1_$o`4NUoJ4D-EYXcgDv(LJp5U?s02Q0kgl z{8P;iDT>2s%)~Ndd3;CQ>j%mvFqur1S+H7f!76UE)^|zv@ z>|dsBe}nxMxA}W)z6FD6u4v<1{~gy-w&4uZ4pgZ=uIPvO1JPx*mqeLXnX9FtMLzp@ zX|qjKL&dO4g?&}2WDc@e$&8!doXLMic5aJV`|*(=d`g5xAuu)HCp?@=a4~k=zN7h- zcari|!HbQBTfSI%yMX-)?$64-0jVt9`EFt905H3bZphwhf!1pkP#y>{kIC=H-$VK$ znC@KJKZY)?v%Ux!?j4}Rmk$ragJtnLt78IKWCE77Gt>zSh%~D<>8}6ognR~UI$Dak z#l*=lTwy?O_Vx3y4Q4wz7+(4_WM(nc96LgUclXlewukO2Y)&4(s(<+09P-OdJ_-3c zF}O*C-MsxI#Bk=O?N`?P@lY7nD50c+`hXRej~nWzro|EZA15*+qkRJ~zA@e(bb|!F*g9E_L$#VGNvMcG@3%RA%k^2h(fc>Ym*WjNsVTf2e$v9gZ7(4v;va#qSP22U~@WDH;D53(8@B~tr zthvU3KpeB!e~wZ78U542>a!1O^m{9Zip_>?WPzIU%EjEeJ7EVL4Pz!>rm8i87BjtZP9P zwc<&skVA%~#^Ro##7}_xK)s1&$@c@eOPSAkqS$a}nV?Z+Ft>okbz0Qore3i^H+Wck zNuwU)+U>U6g2%jc0RxzaCw$7wYgZ7-5J8^WI{TSRe4*`8S_FFFz@eGAz#FA~He0PVB zFJ*+q1_N6A2*yA>k-*(ozqYvH5XMj4)sMk|hEd-c8ttVImBwX}PU;Wv)o4?z+h{e0 zr-7PEj{4eMQI#qfj~OE7B)9U!OpWjoC6a*@7Bbb~0hG%Hm4$*9W~&)3NKR17lU1jq zUVwnXb@OuGR@I_0igYDn`@Aa6 zD~hywT;8aGE6+w&K;*tfGcnmbeIK#Evs!imc#OAyculpIl*(3Bx4Dxe<21H(FxTau zuRwOWAYx{Bzz{s6j<3waR#q0h%7X1exbeXE{D--?Q~i?|92fv#=BG2&>>nH*eJ6f9 z^B;4uqm#ak)BoUQs#cb_T^ED*nW;smfJ+rZPGE+U_jFB&jYAIq#TcV-4MOvTSv!4M zu;om?^!f5`Vx1?QeSAci@7Hxd#kS+cw9%30xhHBN{-UPuO6J7x-LR(KM9KXVjeYiZ zcg{oO`cO2k5YED*R=zB7fS)T3c|@*SO#HC}eld1<2=&Tzx#x5r2IN3R!jbr1{pSwo zN=mqV*2uUdtHnayeb)n#^8!QCGO?VSey~BpbUs8%XT52o)Ek{|K5%h9BB5ldUWwwa zSbI@8x0&#|t!lN=)V50PV&Q)p~Gx?I06@BrHS@=0%rPh8VT6H^U_O8oF1)?USL z_6uIuI}OUKk<$Z6%Ze1%cWAi}ffX~T_xYVfeP@qSCn{t4z1r$xXO?Mz=oY38}q0HkBr6d;s?{TTA!Y0QaVpIM=S%J~yc= zw$RFS<4UrQuIV7KOuE59B|7|ov(G1L1+lxz&CSi`bJ8!K8x!PS ztr8?l5RnP{ct*doiENRL4hie|;Ku1GP>JPHI;SCt0U?oiPZuFCamAzp523a6KojBTvqZ!l+P8u~@+vXDN1SmVlOY6dzF?oTtp0 z5WHk$6rZefHIdlzpkSdMmLyZDTp@4@RZL3)fj*kV7>|H$z_BdXyw}<6AL9UyDsto@ zrl8-GC#jyKwt!Syh{|5nsYl>XZ{^Pa8Zz^!cMVhA&n!BkYv1#ik+8V>l6a@L5SVc9 z07XECN?e)ZfD)%3oPMF>;HZ+#Hr2`QE@vAjD;p<^dS|B3DgnFWPJvUNa-#?`VNaEy zvCaRLdM_2tG_=<4aQF4^#lev$JHP12L?YVBiPOVz6zu84u9dsj%hO{YMs_z3m$&1W zfs_;N8ui$(FM`3kE|MUI1d+1FhnSv`p_D(g(c}oJh-lan&JY{G!2laQy0}mX<~1wJ zQ(OR`NU?_VZ5Rp^H19qJlP0!|ZSC!twazTlk&ndA^W$TR%~td7Wlm`-@kQR<;9a<6 zvRLbZ*g_Qb_ICh-=x&i`4_@xe?qRwTk{#eRo=#it=~5!!7rG~mst8Lamsi5C zAdECHKbFZRkp~5c#?LhZtY^Jx%XQHp!bD)64s2*_Aiy_Lsb8MmE17{07r_UA4bqVH+g*T{!rJYo~uwKjVcQ93ONb(Pw z$EL?c;{g)p_lJLj36j8$^S*|W1r6?E^J;`BvXfmDX9F-(E2czH3D{3DoZ;G;3)YgJ z%BVJFpNPjT(ONth!)6^N7ns%6U~J4;f>x*Pvc`J7rq=MH^-!AydI2SJ_D1~L7ibs% z(&-n9s6wn<^@7yJl~6M8ZSwd5>UrgynE&bL(_jHG3mD=e+#>GR<+QE+=qe~}5cV!&@r3qttg39Iwhp?nK#KwGJMqsi7YoI$gNa^~laq=iLKUqaV z8$XaU5IGUF=50ie{GC-uIe}lVt7KXO))V8`3M0|6pM$mtsxckVLFrO@fOpKx(F$ON zR!R9q?|El0!<_ENHDe`im_h)=u3%|APT)MUMIa0G5K8UvU`N#D*WCz-5B5U4gvS^Q zMD3BKp-J;OZvvv04lK>hNgk~tUGo*F0d@YxdNs`zV@VUuGGsA5NamJfNwb2EL~9(a zMccXXcM)i@UU0nZ!qJtVh^GgpHKW>}C*yF5ln%oeD3Z@IB#@FC0tv&XK3`n8uK6Br zm_(PlxrDp;W@G`4uSvo;@z+eO?)==v5i5k&c8gPMM+NKhhJr!K!OQPplEGkb_wl+0 zoiokYP``byoC8Zdv$O@hyiOPyi(CTw`*CI%R2#!>^JH$X+&g@Av~ElRow}X=q2;Kr z3_Wqui~}ocV0sgDQdW*KUT%cXN7atS*0jLF*P2J` zW}=(}&$#FwcD> zw8ZbQ9|jqFGE`#C)FU^0IE@!vV)TuH09w_cK9?UVNzi)VZHCP1AW4bYpQ3&~k@4id z?`}M1*fBnL&ixWx=#^78p6Vwhxq|lMz4wYbZs`c4!-Zc=g7?uqH#-#(!ILA45!{@f zQAyiq8hcLRL~=bTZI9n{wwbjqUR;@GO}xAsqmEy375f}dd#|)MSlMzRF{d{7*s!s- zTI%^O9$fk&s)i7Bu2k$gf$ctg}{Y zdu~@XKw(GIy7@uk`o9K#g*_K|()fHCTsy^FGr!r%0QT^>2-j(h+RtseyM}D2z3y(R znoZj?NSj@PtHoA-L0ELuQP^p2V0BJ>*J{<@AK3o84o2pQGyVDJ=s$q{M^~xI|J^Db zQni*nV2A(O)@8U9j}yqZqso>sR@ZJpE*qSqgsGUV7qHo9MlIJ~gH^uS?b(S+e1L)U zQhTCALG(OMSLMrDcHN6wlVkw?uqZJ_Sq)Cfm~2ERLG4sQ@!{isgC4+u7RrER4RM?r zN)tyWUc*NKHHdfU{YEOGDMPpF&mEX9jwJa>Qa{mCvMQCj2c1*`B}mM3CyrV&NK+qd z>NQeQ#T=$Yth0o~biG%p0G@}CFZXOPUXltY@YEa+eoOV=*LwF37= zFa{RjycCkAF90TB7^Wz}4#8#|IH0aZ0EQgML(+1p1v1mw>diZQpQ_wFMh~_wuuJ8; z#g>R7EB|d2CCOxNdioPqu=S*gRyO~!+;$1fh7O$N98l@f181s@moaPk#$W2}z4nmr zdiC7?`2_eoH&HVSKu6sEvLeVls@0f~#dw!ZO)YS{7=ifG-_T!>7I&5nlz??(V~7Yo zg_6TTzk62i)PM}M+zJNTbzc|Jk}TT8n=>0X%E%?}p)BXvtmG@1yHeE$iBYN{Y@igK zs&DND|5d4cMb_sW4DjMswaf_kGxB=3=EOD7g~}{fC8$xC9)iKi?;$5`yMJWwt>~gw#+kZs#cGi`<1iNboG+(Na0U2>Z zk*13rzaLTGkeUn~%F0$yOqQ#~!4#=qpfjl#wAI#lePiaYSeYClTP&5VTKs43TRAs5 zLUk&FZ2iNZOVG+x`mV?avqX&?l=VVxgwnrD5+f8?7}+yuwE6|OG$#zXB9LpgE=(dryUKv--7E7wweT(UvfH32Klflgbf^V6BHMM zNLg&BliY{x&{(=B@J8-43&pndWzKJ;5BDnwpdoZqZF3nj%_>0aTUEz1ji=7*RqV}F zidQU-BJ@};v;C-dPWV$b9Bgf0|9tE;Roz?*i0&tm+pmWsPth`;&Ye0$1~Oy$qTPYX zi2Pk2Pnz1iWK^Qmz5!`}l^Yni$x#C}5}B}gKq`pcY8N*RrjOj|Y|OpHUr$xTC;pt?M&8uK57_cSr_aHcZ|Af#f`B005JJj)&oQFmg7x`M(k; zcBxqZi-q}`u1&Kn8k7qVzo%h7B`1MUfQ6@vC@2w#>>BoD=`iaGDOCRQG+kyrE`HE) z78`zYJ5D#%v2OY0I>{Y@v74X1os{>>x@psl0S<=!im|g&S9`z;NR}`HShKh5*r1P? zGU1vXnE{w^-|vKE0aOWq^l;>l=9QEXsQ)px0ZJOn!UrfTC19-h>?T^>oIwiuAWLu2 z4J8cJQDiTpkUF7vO*PrTBjNPc_A{y749N<006$}7Q0NyotsyKlL;^8vTPz?#42cA` z2nJZIBKTyKTs@@Lt|JUpjbUf##il5z8b~q3pngc2rJQ6v710)q&?It66Ve`<{2PAJ z5bP2n5hMblp_bve{xCtfdz_GRz;9!>^BBChM21F>ncGE7Sk11#jzG!MWw#W%e~~4q zQ{w*@B(sX;!uwo6Z@`(&zs-7I#^f@9w_e0}X3v3NzX_W4<*{J9ZX}K@!-FR7_ z0*GXp+5dVGj{wpnkt&>lL6Xk``-%#Vj@LdE996-Fy0otouz}{bYUZQE_5UL_)&_GA z1`~qZ0Vrl%0qFqB*g>25w@#IfwY|jK#lSzQeyvpkcl~r*sTv{ z5H&aG1A32hSZAR-`<&g-JumRZ37EZnP)Y3^0rg9a302qqEwno0yf{QdJ&uwUSQ;25e`Y5o_FJZHI$*OxzOVNTAW;k~7sFJV;ON#hp z#BP+t$uVyu8xVm-MKL4Gnw|W~OU_TF?+5kZ9w!Owb=_om+@$+C#F0p5P-}bdk4u@V8swpttD4wfa7uU+vLOO>f5G9Us7zq zDNVcjLGAvfoWius)!hh}Uxy4xC0cssHi$G>U}5SmgBvYLxy;}a4hVWRb-6t&hzwnI zD*})QMHWYmA*)Lo7+GM~rqR*&fpoCpP`8MNMZqE)JuZuJl;AN&md#^E=Fol(eOrFQ z8~{xtQsrSPhiF1}w`mzu3GJMJBJU&VnD-9b#{H;=Z8koIQzTKoVMNNVcHhIbCe%mloKcDQ-QLT$jOFjS*N^MMy_vH!(2}JK)cr-DC(H-3DH8{X6>7 zZ{``j{-CeLKYI`xIREdH*i2ao0stuEgiF~j%u3nW4GI7d_!I~L;J-dYKlz%JZ16w% znhfo)cK+~U9>qSRlEvn@V&(yUfonF6wVDE^nkbekcx$2U;Fe11$$1nWRZ)cvt3kl?k_#Tp8v%qicW`H;={1 zWMGT{497Ml=YS!WR=|)>;1twj;%R(eaeel-*y5cRtlY5PdcupXTN?tcbf9D+XTcFocgs=Xo%< zF{hWa5-p0ZRHXcTN?dLGE8oD8IfW_6V~);cMT()Z&TVKim934EA5Eyl(l0K?;1TWW zqA#aWvzoz@JIut^jt5;8u+cD-s$q4=J7r~J4uu#`Xn-pNHb$J})PGVF8vSBr{$3uV}v{&lj!ZK`3wqb0f>RYL*Xr0eQuR}%5@?=i#XO!ocojB z(H&mJ@Ccku2DRhkhjqNwVaC~sTAVdY;Jk!)?DnI$tluL@Yy1F0Bk$#*u7gXZumzc-YMlv<~!j4$JpSME}{|7NK!m)940$u{~po2AH%aRh>;V7fJbeYB`! zW~E4htv8Po)2DJrnMGM<$N0VNWyqZQ03{Hz*wO9jcI9;QhIaB9xzozi$o28MG$+@N zUqc;%DNi!MH%5*O1q^79RLN8#>oc>xEh(}$81rEf3QjT#2& z2MJtksPLyuUnQvD?i*S+q8P{hO)dDjH!bMsxH7x|lDF0d_Hnp3a&|>dJ?y5_Z#+OdJ`x}3Is-sLY8Tad0`;lIG%$YTd<~qru z``Vc^oXwSXYD2wb|AyybeVk6Y-E9c<*=w7rMLK}t(lO@?^`EE>bm}1I`lATZPrDJ;gF-%?2M#+=3CL(9drOOQB$k`hq9ZzcZ~wh z%l_%?PrFiH@F1*EYtm|fw7NfJx(X&`bOh*#1YbaREt~*F_z@LEMf`LPJj-cOOD13m~ z&d)KpcM_5$)(`4(<oOJ>g zdn+%tZGnN!iN-6J&_P#+%6=HQ9TixlHw-M4j;uVs=b10X_x+_u?{=5xI|!CSJvUyS zy*J508oQT)7=sQBCvk|nSNc3jQ0P zFrJ*pV+R9?@H-458+?R-@I}z>3rA4Ba$M9w=@3DljmHB>pMVf~2w9E?PfAf!h0mffI+C=tQ8Jct9GQ z%}ZXTwfrisVG_U6NWc@%_}3a3)|7Ser-@P`%y~#S?mwvmOf;KAn=YbVWZ?5A#) z>*P%+PexM+n*uHzGmo1qp!jPC-l38X(^1v^wPiOjZNtAw=~g%YGlw1bUj32h4O`&5>^8o%_%G4iZKa2v#v3`tXjgR0X*PcEg;&?9 z@8f?z6>g;NcQJ5jMd8GIJae8-qLUHN_F}x|Hl=k5%Y0WBalNMBLzYC#q$-VDYgC4_ z%kS*euU|bMW!TQvHFx~PqwUZyvQ~MSOn}#%U7}Q_t~wy7F;^NB zxlb%#yrPq@A6aoFu%|3^65YTkz~z1T}pAqd{3nAlD)(u!a<+|7)_E9fj?iCX2+v1wD z_XUg`&jN$WAx{1ng@}D(&2s)oB`K?InR96(lCgqlRV&Xu8`@I>z(cg1rb7<6Cm*gKO7>1MG zJ*!OJ=%6(iD0cFIG>(Zi>}J2)Nsw5Wf&B8Hc(4S9DSyw~LsRAX=0eF}w-JViAv6`r z*2NwMB5$g1^>deC83DXj>e=tk?SFVY>Uec?;NarQ&i+K*b~av=0}uwoLiS{QG~VI4tk~)!F5&BxqC2Y4%c#E*Or>yoq5lt zHilNlKOBLDlxT0bafab~{`o}~;_}^?2;%(xIMzqBh?WYO-Okp7`}rUA*K@lNt?SSG z=NaZ7iBVQG647@O(04SZ{Xc)}@BhD_UQ;TXw)>p$J}0V^E_kRFNlu>It6R9nZOBEm zc|jE$WJU=Pbw-z?F2Bu&eEAOSE@(C!6UhJmyZ^3Yd}II0M%JPXOTcZgn=s8d zbB3ADufA(KzMmB6+VZQMm{FzI9N<9;{pJW@Zh8a3D0ktd(4zF7@h&V zcXTcRxFi>1=X&vRma@$~Ok!7V zcfU#V*wUaoqve?_DH8Iybc(Vg#7GOV;O7eQ_pl?E3($*ZuLuV*%($$a+byKQmb!jj^;B2 zD=;t0K;&fOb(}EX`SHrfG3uW`dSHvpM6rAP>9mrmgpeFGldlMsT5MmwfNYgC8P9-p z>HDZ%1$Y>{R5gH}%Ce z4M#sztuJoNr0y8Y9C?q~n=h~CAhXU?F@o4t*oMn69{C(f%KPwG#FYTm&P&&i*L<$* z^d9-9n;opwO_xgA)`3HDx;Du0*a?Vf-I5P^om|E&_NMPY4%@NOa$SZuADj~A+|frF)V!;Tg#z{98xwA!-Zb8f%MS&&*^?%~}Pzq-BJYym)=Wn@+r!aWZ5IgMTF zr(MTssl4D06Cfncmh)WyNT@v7;4%2B)gX#aO_7VfiZGS~6{Bj&e<8|5XDBbK@D%^V zCxlaM#S>fP!-XlLF7$9rlC_h6Z$$1&6E*b!{5u-XU`@9uvLfDmi8 z9thZ}^s5okr56dMc96IFXF&mbs7h(dajgE*HTDI*5`;~)6r!hW!78Z((^M85CpMdG zt;-;5`WF#8t>!q7eVheoUlPi2DXg;Ub(dS*?GXZ>LUj)40-1!Sm&Fe zth5&H84YNu zq>@~^_$+~>6($D9>_*c}XVT8GnwVjrm0WQ2@-!{QvBvZFEsI@A$JdHu1SXMQ-&8vi zOOdx(NOkiX7da*bDm4RvVlDo}Ei6F=OqncbkF{4mP{MO5AVF*C{<=wmZ39*W8MwY7h0Y-ZkOw};Q}xe|JQh;a-*B9&@?xhIQB3?Vu|BnDNop@;Z6aFPHj zRMNimym?YspfeNgI4IEr(!*_rucy3JY8%~5T7vWz%=AWte;!d_KOWU(wF>4V=(|n0 z4|anN!h#a8TbvQnj5CtdVN&odnpQA8NZ!zm)_7J=aVEr)D(JXccsu-f^sX}*pz#xW zmEYhnD%OlTRm1dcafJ`wjjhEi;t@JJ#^gPnU&M7Zw*TJZSnc+-DO5bB%zbZqy%i$i zs>j+LZu(obZ#s=jh!>{i6IoO2eYf-$qe2<$vNOHZyk&#IlM_5Y9v1eZb$e*VlL=Fbf3{Qv*>mi{5nteveD zjUCMOt^N-={r|^Gu2z!%mz=)qT{Q|>nGj(}+MygjTF6{14l#h9TtFJ7`icQ}Y`bZ> z17G2>$JK=)j$GQ40*pG=bi0#HcMsyh*+QH$Y(AgfPO=Ww1F07RTB&KSaT2Bxbj0rI z>;ZZohFeZPj(kspC|RJs@IL!UNl*mj7avtVOc}IP%uT^fAZB9Z1T*0xC6i@-9Tb)^ z0Rkd(i4vA{9SgMW?@?wYOo?QLbkH=!=Z7;$AvJesb}4_PkOH0j&b(VT*uJBhea77w2-(R8M4nVjcN*BJ| znosK*#!!5RP;Bzcsvr%FmWzX#u}W^>uWL#Iv0%@9akgSipilt^=B&I>gy}nT1@K5e z&#ai!cAiS<(`Ct?=ahdO#iCF+y}A-vueA0Uip&8K9%Np9(behN@dC6eqcAdYDwEQ` z`iQRF8M}}V`kLtlzTzzRDz9*2 zgF@%qOj+`V!fy%#S486H-*MDduRI zAg{@29j)?Cq)#dp(}Kmv1;GegK+H#&-ds2Ac*6JGF7g9F}KnmBF#jRO^(pCD&1D>*0^+ z&{QirW?}{VuC!MubErPfZ%TG$Bjeg{cQT5!Iq29r8N)70uazmGRWPPII~$uy!`wB^ z3$s#EHBmBgp^5yhqF_`U3ur1=p{@BkzU=Zagj77!(q?YhEK#Fl31*TAl;yRTOysAX z--|N5qle)xJ3tI_ww^G^iyC^D(9Rs+>+nEb0S5-Fs1h@RGYGhsNVc5b0PA3*TybV| zc8h(#^ zy)^W4cW!j|<>XaPyREB}B^w(eAq}&}NPLTeGGm;YH$1txeoPDb#l^bp-@&aY>23X| zue@$$SGp3J_4#Uw2q8OlNMNvYXS(-nObf-BM{atwDs`e=2QNw_bIPQZJVRfdMx>4G zT%>k%mt0%~4v!R1bsg2R>y+HL#k!x4Ow?3WG_{tK?v*M1TO8ZCw`b5iAwj76i`3echL@{f9Y0cv0|YV3%r?3aY^Ua6@p zlD(YkfrTI%#o~k9l;c&3h4CL*w%cY(M?scq1`xd0oWxXkxSM6prazfydmG|}L@3&W zEEmq|eI}ve4iCoGlvLC|N?0{O40pQej4sTw*yQxewhP~ezn1;l@uJ3V$mkcfxXXz+mkkSyG87gP1?9fZ z+Q(Dle$5h@75%ss((2yF*G8zg8Uw$%8OZXDY=m7jHM2MPG!m&u#6n0ya1_4~4AG=r zYH)IxYiL!$0hLMnTs-U@CPG5P;z`fM7fSo3o#qrYpTVL#oxfZj@jd16||@allFOF(Onr3tnn1f<&!%>(4LFR$Pd(rL_6R+FK1m0#M+t*l>o zrhd}tDPK05ybz1Gkl#CPxDDtY_h}v5xDxPwh3f z4?{P*v zF`@Teb8m-fN#2N=5x4GsfpPL4f6~RrDZegJ`hrUOCF@Et)cXg=su?XTpWNqyFy1#| za)O(V%>Y7cJr>tRSSV`38o+BS0vIKm4}*2iL`6$8AhM< z0r^Nukoei&^zh{GX4mynX1OoEp#110K29{_^f5268|0%y5mk`#W@J}NFcBo7bL3eb zp!{UiJPB%O;v~Y+Gh}pn`9ZfKftYB!a}S_HPG{R}y=StaMoltqF5B~4dUn~;-Q{y6 zNG2AgeE^g1=V6mXNHV^jgrwMopR?d)Z{ARuxe^1HAS9D6Q7%?g+sK91zqn>;C&;ZSgAnN@~t(8jxJbev)G)JmNk2ngq}BK~9k;u>p=L&TgA)AfhH`yh z{#jy(Rn;ye9YV5g>O%AYJ$-$svMncgcOT^~&dkLfO(2Q(In~+$>yg zPOKiTj0*7SJRZ2i>s?y(feWm(Wi2*$9o{cl zLmW!AqGz#Q3<2WFtihh%?qBuBAwg4*v9u#MA!8iV<`oC9x_~*HL3Cpz&IG2MBQhXx zPpPu7&ebI3E%vz629)-ngvs3K;iA5H#9Uqc0$>-XVj#-0aD0GaUKv@rIJuqfz8u}0 z9DEmNFPNkX`+g+d5L{hQJB@0!aH*Vg8r9Dun}CXAu=LJo!q>p^G(Dr(X@q5CN5GWy z<-1~NQjqm`?thB%{Hl@lLX-8o(&o8g)KEHhdl0ka)|dhnjSayS^#q4)rT;*#YKw@H zL$$`Nim1Ju{y)u~30RF=_rMRLh$adRG@yA@N~K918Z~L4=`^1-snaZDQAvZONM(pn zN*Xjrg(xW*D`iTEC^9wp*6DO~-!3}&&YSCb&UfAW{GaFl+iS0Buf5*2T?g3j>Atn* z2}p_JKi*%$8TMUe>G`xu{JS&WC%R_vh^J-3=NE3Axf+LM51F<|(Hs_1&9pRDJlR1g z-6NipQT{aW*;eJ1@~c`e2ZUx~g9bHt93@U=J~22@T~^8WSZv>E#nuRo`Rqq`ZyUf5 z@Yqk^!y_Ei;DcWjkqxOAH1LL*?wcOQ*IRf<9pg3E+3LM_HbHca*ZPBH4%3$r z?58Ofdd%rI6`v6!JX7HLx5wO;wvQM26fDNgSSOP(XE2GD&xC2woBrnL^bhM}pFi;P zdcV6!t~+^?2`6g`_kyYA2JIJpb-8z)o?8=QcC@NtV}DI`*}Zs9p<=!AtBh&3Z!Go{z=jyI7rdt1Em zI(!{}wGHFnZ8?h}eYL<#k$jCgc_uoc4Hq-3oWAy)d?UtI_tvQ*`f}ObYYFBW8*6pv za1XrRK6CL-)dIIK>-NOPJlJ)9aQ(ybr3d`N(#<;ThkW8@@|C^f)@k{ux+z=p_S(L&F_Sk88; zd@e?m@lqHzp--qHo-e<{bmNy0^-r%8^6GS?glo4b&|RNmflBhunY%Y`poazQgc@#g{ircHX7iyL}ChhuV^o3)>bjrY199G@r&0 zV(6iC)bi{!8vAB}H}GVuj?ZT2N1fasE87=rzooaXByEO5rg9RiX-C77FIq9v^Hw`{ z-wb`YJ=^WuZ9kqKu5e{1W@~zFuLZt`@@}bi)A99`rUvb#yD7A3iE!w4%{vwIbMpHx z=9o2aEsW>fE$zN5H%q&!?D~hRxXd=IMO;;yi$7}d$v1sCo0D&hT~uoL>^;{d0lTay zl@DIhTRV(Wn!Iw}3&zR>%x-g=V|qvSK0e9vTCPOv=Y|_a`*e~y_31V_9&Qxl&kf($ z93a{e!cBWTqNOs^yE4EijpfTW<9BUCQ}SGmOdfISY3xX;7dyX8)8W-gUx%HQ*R3rN z?th%mU2jicl)69cb%vCP3hVBbHa1E-zTaoH%|A1Bg~y>a#u?_?H6j^H*3U2BWos34 z)2YhowW;{ASu8iciNDXAW2CBDb6anj0sj*^-L3vZzP$rId#^b?(QwH)(7$VC67RD2 z`|H-_8i_5pn7{X>*XHHQ4O|0ROOMU|UiG1;<$7GYc)i3Y-ILk4%?)X*F9p&goX2)S zKI(YRr(BC2Zui-X=;;&AmIyJt+tSA!>!0J3d-;53K&wI#bN!pj-h;C@8$N9lN!-_Z zZrMe#bUK}HUG|P*t^HcT9GrBg>6ol!=@%beHnd}ttfL)s)RG%F?zTowQ?=lANPO#W z8c{^|l+F2+&Wqx$y{6C4R}`8T*VG=W-xGRf@UBbdV}|BPlm0FqK~AYdbNq`%zkQ9I z1y8S@Zx3FWb@l@82K!KGXo8{2e2=rT4jYfS#&vvmb^R7_W6P2@pJdEC^)*Lii$3?c z1zxxrHan`GV?alq>Bjmc+_FqHCo*O}-W@p5GPfr2q4E7=7A(6~3w)Hjx5y^of={E6 zr~L^e6Z7YYi%GR1!-imF=cq&8S>_scjlv zHPfk8`lmYk)sFFR=y`v8o>cl4-A_UzAB#9?E6TF-nujNV!^TX z7n3%Zon9S&Jd0UWI(8A4#=2dvBH9$x|6G?R+;1rTa)t)nhC<#H)ncRco(WpkF%Xjv_h`QfbthIXDTE$Lx-S}*G zj%RNaPiH;8)V+Jnt#j9_`r6MLzX;8)^-=DR(HFhwzUV?}dTjOKDqru)N4@#t79R1n zyuG{3zhC;uyKo&pKmQ}v{d;M*F1`NbS$m3-N%YI+H7*M2vt>ApavYm9c0=;+x%srSG;ORtr6}qL9g1$*=5eE$AdYom)M^QP zIG5hfL+NbUAwA{xz;DVf@7QyuWF43$VeGZ`flu_~TP}=rm%?A07Jq9k!*#_^%UwIY zvWnSZwu%(@qJ-S_{OKQ<9-K0kJ{SAqRg#ig>b1OnuOQQ{Z{CHP`q91ZVcXp)zd-dx zj%@3Eekp6uS%sc5cQU85eyX9#ymx{lYcn0IO@J#e)0XImE|c=kfa1buO+DFV=?l z`PCkm*L3ASSFir4wDdx&%zF*d_W`_;7G7G<&quB+_4;IBw0#eo^OvwLCd*p2jit2$ zyt>zT-fqzMOTU+`XZ%P#3gnCiCwFRdo!?A)L zECkuoZ*N^faY#*pRi`4eqIaEs@e%ca&dD=lxx&RkpEwBtivuY{(LLv!y_7i&4W_oAGP1v}m$K3M#gvS$W}ZL?EOXGogjb!auBGn_ z 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 Date: Sun, 14 Jun 2015 10:37:05 -0400 Subject: [PATCH 50/96] update for Stream/Print support under F4 --- STM32F4/cores/maple/Arduino.h | 2 + STM32F4/cores/maple/Print.cpp | 202 +++-- STM32F4/cores/maple/Print.h | 75 +- STM32F4/cores/maple/Stream.cpp | 270 +++++++ STM32F4/cores/maple/Stream.h | 102 +++ STM32F4/cores/maple/WString.cpp | 746 ++++++++++++++++++ STM32F4/cores/maple/WString.h | 224 ++++++ STM32F4/cores/maple/itoa.c | 170 ++++ STM32F4/cores/maple/itoa.h | 42 + .../cores/maple/libmaple/HardwareSerial.cpp | 3 +- STM32F4/cores/maple/libmaple/HardwareSerial.h | 2 +- STM32F4/cores/maple/usb_serial.cpp | 13 +- STM32F4/cores/maple/usb_serial.h | 6 +- STM32F4/cores/maple/wirish.h | 3 +- STM32F4/cores/maple/wirish_constants.h | 17 + 15 files changed, 1762 insertions(+), 115 deletions(-) create mode 100644 STM32F4/cores/maple/Stream.cpp create mode 100644 STM32F4/cores/maple/Stream.h create mode 100644 STM32F4/cores/maple/WString.cpp create mode 100644 STM32F4/cores/maple/WString.h create mode 100644 STM32F4/cores/maple/itoa.c create mode 100644 STM32F4/cores/maple/itoa.h create mode 100644 STM32F4/cores/maple/wirish_constants.h diff --git a/STM32F4/cores/maple/Arduino.h b/STM32F4/cores/maple/Arduino.h index 7278f89..d02a50c 100644 --- a/STM32F4/cores/maple/Arduino.h +++ b/STM32F4/cores/maple/Arduino.h @@ -2,3 +2,5 @@ #define Arduino_h #include "WProgram.h" #endif + +#include "variant.h" diff --git a/STM32F4/cores/maple/Print.cpp b/STM32F4/cores/maple/Print.cpp index 58c7cc7..5334ac6 100644 --- a/STM32F4/cores/maple/Print.cpp +++ b/STM32F4/cores/maple/Print.cpp @@ -1,6 +1,7 @@ /* * Print.cpp - Base class that provides print() and println() * Copyright (c) 2008 David A. Mellis. All right reserved. + * Copyright (c) 2011 LeafLabs, LLC. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -23,7 +24,8 @@ #include "Print.h" -#include +#include "wirish_math.h" +#include "limits.h" #ifndef LLONG_MAX /* @@ -40,143 +42,192 @@ #define LLONG_MAX 9223372036854775807LL #endif -#include "wirish_math.h" - /* * Public methods */ -void Print::write(const char *str) { +size_t Print::write(const char *str) { + size_t n = 0; while (*str) { write(*str++); + n++; } + return n; } -void Print::write(const void *buffer, uint32 size) { +size_t Print::write(const void *buffer, uint32 size) { + size_t n = 0; uint8 *ch = (uint8*)buffer; while (size--) { write(*ch++); + n++; } + return n; } -void Print::print(uint8 b, int base) { +size_t Print::print(uint8 b, int base) { print((uint64)b, base); } -void Print::print(char c) { - write(c); +size_t Print::print(const String &s) +{ + return write(s.c_str(), s.length()); } -void Print::print(const char str[]) { - write(str); +size_t Print::print(char c) { + return write(c); } -void Print::print(int n, int base) { - print((long long)n, base); +size_t Print::print(const char str[]) { + return write(str); } -void Print::print(unsigned int n, int base) { - print((unsigned long long)n, base); +size_t Print::print(int n, int base) { + return print((long long)n, base); } -void Print::print(long n, int base) { - print((long long)n, base); +size_t Print::print(unsigned int n, int base) { + return print((unsigned long long)n, base); } -void Print::print(unsigned long n, int base) { - print((unsigned long long)n, base); +size_t Print::print(long n, int base) { + return print((long long)n, base); } -void Print::print(long long n, int base) { - if (base == BYTE) { - write((uint8)n); - return; +size_t Print::print(unsigned long n, int base) { + return print((unsigned long long)n, base); +} + +size_t Print::print(long long n, int base) { + if (base == BYTE) + { + return write((uint8)n); } if (n < 0) { print('-'); n = -n; } - printNumber(n, base); + return printNumber(n, base); } -void Print::print(unsigned long long n, int base) { +size_t Print::print(unsigned long long n, int base) { +size_t c=0; if (base == BYTE) { - write((uint8)n); + c= write((uint8)n); } else { - printNumber(n, base); + c= printNumber(n, base); } + return c; } -void Print::print(double n, int digits) { - printFloat(n, digits); +size_t Print::print(double n, int digits) { + return printFloat(n, digits); } -void Print::println(void) { - print('\r'); - print('\n'); +size_t Print::println(void) +{ + size_t n = print('\r'); + n += print('\n'); + return n; } -void Print::println(char c) { - print(c); - println(); +size_t Print::println(const String &s) +{ + size_t n = print(s); + n += println(); + return n; } -void Print::println(const char c[]) { - print(c); - println(); +size_t Print::println(char c) { + size_t n = print(c); + n += println(); + return n; } -void Print::println(uint8 b, int base) { - print(b, base); - println(); +size_t Print::println(const char c[]) { + size_t n = print(c); + n += println(); + return n; } -void Print::println(int n, int base) { - print(n, base); - println(); +size_t Print::println(uint8 b, int base) { + size_t n = print(b, base); + n += println(); + return n; } -void Print::println(unsigned int n, int base) { - print(n, base); - println(); +size_t Print::println(int n, int base) { + size_t s = print(n, base); + s += println(); + return s; } -void Print::println(long n, int base) { - print((long long)n, base); - println(); +size_t Print::println(unsigned int n, int base) { + size_t s = print(n, base); + s += println(); + return s; } -void Print::println(unsigned long n, int base) { - print((unsigned long long)n, base); - println(); +size_t Print::println(long n, int base) { + size_t s = print((long long)n, base); + s += println(); + return s; } -void Print::println(long long n, int base) { - print(n, base); - println(); +size_t Print::println(unsigned long n, int base) { + size_t s = print((unsigned long long)n, base); + s += println(); + return s; } -void Print::println(unsigned long long n, int base) { - print(n, base); - println(); +size_t Print::println(long long n, int base) { + size_t s = print(n, base); + s += println(); + return s; } -void Print::println(double n, int digits) { - print(n, digits); - println(); +size_t Print::println(unsigned long long n, int base) { + size_t s = print(n, base); + s += println(); + return s; } +size_t Print::println(double n, int digits) { + size_t s = print(n, digits); + s += println(); + return s; +} + +#ifdef SUPPORTS_PRINTF +#include +#include +// Work in progress to support printf. +// Need to implement stream FILE to write individual chars to chosen serial port +int Print::printf (__const char *__restrict __format, ...) + { +FILE *__restrict __stream; + int ret_status = 0; + + + va_list args; + va_start(args,__format); + ret_status = vfprintf(__stream, __format, args); + va_end(args); + return ret_status; + } + #endif + /* * Private methods */ -void Print::printNumber(unsigned long long n, uint8 base) { +size_t Print::printNumber(unsigned long long n, uint8 base) { unsigned char buf[CHAR_BIT * sizeof(long long)]; unsigned long i = 0; - + size_t s=0; if (n == 0) { print('0'); - return; + return 1; } while (n > 0) { @@ -185,12 +236,14 @@ void Print::printNumber(unsigned long long n, uint8 base) { } for (; i > 0; i--) { - print((char)(buf[i - 1] < 10 ? + s += print((char)(buf[i - 1] < 10 ? '0' + buf[i - 1] : 'A' + buf[i - 1] - 10)); } + return s; } + /* According to snprintf(), * * nextafter((double)numeric_limits::max(), 0.0) ~= 9.22337e+18 @@ -208,19 +261,20 @@ void Print::printNumber(unsigned long long n, uint8 base) { * * http://kurtstephens.com/files/p372-steele.pdf */ -void Print::printFloat(double number, uint8 digits) { +size_t Print::printFloat(double number, uint8 digits) { +size_t s=0; // Hackish fail-fast behavior for large-magnitude doubles if (abs(number) >= LARGE_DOUBLE_TRESHOLD) { if (number < 0.0) { - print('-'); + s=print('-'); } - print(""); - return; + s+=print(""); + return s; } // Handle negative numbers if (number < 0.0) { - print('-'); + s+=print('-'); number = -number; } @@ -235,18 +289,20 @@ void Print::printFloat(double number, uint8 digits) { // Extract the integer part of the number and print it long long int_part = (long long)number; double remainder = number - int_part; - print(int_part); + s+=print(int_part); // Print the decimal point, but only if there are digits beyond if (digits > 0) { - print("."); + s+=print("."); } // Extract digits from the remainder one at a time while (digits-- > 0) { remainder *= 10.0; int to_print = (int)remainder; - print(to_print); + s+=print(to_print); remainder -= to_print; } + return s; } + diff --git a/STM32F4/cores/maple/Print.h b/STM32F4/cores/maple/Print.h index c0c63cb..5961a02 100644 --- a/STM32F4/cores/maple/Print.h +++ b/STM32F4/cores/maple/Print.h @@ -20,10 +20,11 @@ * Modified 12 April 2011 by Marti Bolivar */ -#ifndef _PRINT_H_ -#define _PRINT_H_ +#ifndef _WIRISH_PRINT_H_ +#define _WIRISH_PRINT_H_ -#include "libmaple_types.h" +#include +#include "WString.h" enum { BYTE = 0, @@ -35,33 +36,49 @@ enum { class Print { public: - virtual void write(uint8 ch) = 0; - virtual void write(const char *str); - virtual void write(const void *buf, uint32 len); - void print(char); - void print(const char[]); - void print(uint8, int=DEC); - void print(int, int=DEC); - void print(unsigned int, int=DEC); - void print(long, int=DEC); - void print(unsigned long, int=DEC); - void print(long long, int=DEC); - void print(unsigned long long, int=DEC); - void print(double, int=2); - void println(void); - void println(char); - void println(const char[]); - void println(uint8, int=DEC); - void println(int, int=DEC); - void println(unsigned int, int=DEC); - void println(long, int=DEC); - void println(unsigned long, int=DEC); - void println(long long, int=DEC); - void println(unsigned long long, int=DEC); - void println(double, int=2); + virtual size_t write(uint8 ch) = 0; + virtual size_t write(const char *str); + virtual size_t write(const void *buf, uint32 len); + + size_t print(const String &); + size_t print(char); + size_t print(const char[]); + size_t print(uint8, int=DEC); + size_t print(int, int=DEC); + size_t print(unsigned int, int=DEC); + size_t print(long, int=DEC); + size_t print(unsigned long, int=DEC); + size_t print(long long, int=DEC); + size_t print(unsigned long long, int=DEC); + size_t print(double, int=2); + size_t println(void); + size_t println(const String &s); + size_t println(char); + size_t println(const char[]); + size_t println(uint8, int=DEC); + size_t println(int, int=DEC); + size_t println(unsigned int, int=DEC); + size_t println(long, int=DEC); + size_t println(unsigned long, int=DEC); + size_t println(long long, int=DEC); + size_t println(unsigned long long, int=DEC); + size_t println(double, int=2); +#ifdef SUPPORTS_PRINTF +// Roger Clark. Work in progress to add printf support + int printf(const char * format, ...); +#endif + Print() : write_error(0) {} + + int getWriteError() { return write_error; } + void clearWriteError() { setWriteError(0); } + + protected: + void setWriteError(int err = 1) { write_error = err; } + private: - void printNumber(unsigned long long, uint8); - void printFloat(double, uint8); + int write_error; + size_t printNumber(unsigned long long, uint8); + size_t printFloat(double, uint8); }; #endif diff --git a/STM32F4/cores/maple/Stream.cpp b/STM32F4/cores/maple/Stream.cpp new file mode 100644 index 0000000..9c581be --- /dev/null +++ b/STM32F4/cores/maple/Stream.cpp @@ -0,0 +1,270 @@ +/* + Stream.cpp - adds parsing methods to Stream class + Copyright (c) 2008 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Created July 2011 + parsing functions based on TextFinder library by Michael Margolis + */ + +#include "Arduino.h" +#include "Stream.h" + +#define PARSE_TIMEOUT 1000 // default number of milli-seconds to wait +#define NO_SKIP_CHAR 1 // a magic char not found in a valid ASCII numeric field + +// private method to read stream with timeout +int Stream::timedRead() +{ + int c; + _startMillis = millis(); + do { + c = read(); + if (c >= 0) return c; + } while(millis() - _startMillis < _timeout); + return -1; // -1 indicates timeout +} + +// private method to peek stream with timeout +int Stream::timedPeek() +{ + int c; + _startMillis = millis(); + do { + c = peek(); + if (c >= 0) return c; + } while(millis() - _startMillis < _timeout); + return -1; // -1 indicates timeout +} + +// returns peek of the next digit in the stream or -1 if timeout +// discards non-numeric characters +int Stream::peekNextDigit() +{ + int c; + while (1) { + c = timedPeek(); + if (c < 0) return c; // timeout + if (c == '-') return c; + if (c >= '0' && c <= '9') return c; + read(); // discard non-numeric + } +} + +// Public Methods +////////////////////////////////////////////////////////////// + +void Stream::setTimeout(unsigned long timeout) // sets the maximum number of milliseconds to wait +{ + _timeout = timeout; +} + + // find returns true if the target string is found +bool Stream::find(char *target) +{ + return findUntil(target, (char*)""); +} + +// reads data from the stream until the target string of given length is found +// returns true if target string is found, false if timed out +bool Stream::find(char *target, size_t length) +{ + return findUntil(target, length, NULL, 0); +} + +// as find but search ends if the terminator string is found +bool Stream::findUntil(char *target, char *terminator) +{ + return findUntil(target, strlen(target), terminator, strlen(terminator)); +} + +// reads data from the stream until the target string of the given length is found +// search terminated if the terminator string is found +// returns true if target string is found, false if terminated or timed out +bool Stream::findUntil(char *target, size_t targetLen, char *terminator, size_t termLen) +{ + size_t index = 0; // maximum target string length is 64k bytes! + size_t termIndex = 0; + int c; + + if( *target == 0) + return true; // return true if target is a null string + while( (c = timedRead()) > 0){ + + if(c != target[index]) + index = 0; // reset index if any char does not match + + if( c == target[index]){ + //////Serial.print("found "); Serial.write(c); Serial.print("index now"); Serial.println(index+1); + if(++index >= targetLen){ // return true if all chars in the target match + return true; + } + } + + if(termLen > 0 && c == terminator[termIndex]){ + if(++termIndex >= termLen) + return false; // return false if terminate string found before target string + } + else + termIndex = 0; + } + return false; +} + + +// returns the first valid (long) integer value from the current position. +// initial characters that are not digits (or the minus sign) are skipped +// function is terminated by the first character that is not a digit. +long Stream::parseInt() +{ + return parseInt(NO_SKIP_CHAR); // terminate on first non-digit character (or timeout) +} + +// as above but a given skipChar is ignored +// this allows format characters (typically commas) in values to be ignored +long Stream::parseInt(char skipChar) +{ + boolean isNegative = false; + long value = 0; + int c; + + c = peekNextDigit(); + // ignore non numeric leading characters + if(c < 0) + return 0; // zero returned if timeout + + do{ + if(c == skipChar) + ; // ignore this charactor + else if(c == '-') + isNegative = true; + else if(c >= '0' && c <= '9') // is c a digit? + value = value * 10 + c - '0'; + read(); // consume the character we got with peek + c = timedPeek(); + } + while( (c >= '0' && c <= '9') || c == skipChar ); + + if(isNegative) + value = -value; + return value; +} + + +// as parseInt but returns a floating point value +float Stream::parseFloat() +{ + return parseFloat(NO_SKIP_CHAR); +} + +// as above but the given skipChar is ignored +// this allows format characters (typically commas) in values to be ignored +float Stream::parseFloat(char skipChar){ + boolean isNegative = false; + boolean isFraction = false; + long value = 0; + int c; + float fraction = 1.0; + + c = peekNextDigit(); + // ignore non numeric leading characters + if(c < 0) + return 0; // zero returned if timeout + + do{ + if(c == skipChar) + ; // ignore + else if(c == '-') + isNegative = true; + else if (c == '.') + isFraction = true; + else if(c >= '0' && c <= '9') { // is c a digit? + value = value * 10 + c - '0'; + if(isFraction) + fraction *= 0.1; + } + read(); // consume the character we got with peek + c = timedPeek(); + } + while( (c >= '0' && c <= '9') || c == '.' || c == skipChar ); + + if(isNegative) + value = -value; + if(isFraction) + return value * fraction; + else + return value; +} + +// read characters from stream into buffer +// terminates if length characters have been read, or timeout (see setTimeout) +// returns the number of characters placed in the buffer +// the buffer is NOT null terminated. +// +size_t Stream::readBytes(char *buffer, size_t length) +{ + size_t count = 0; + while (count < length) { + int c = timedRead(); + if (c < 0) break; + *buffer++ = (char)c; + count++; + } + return count; +} + + +// as readBytes with terminator character +// terminates if length characters have been read, timeout, or if the terminator character detected +// returns the number of characters placed in the buffer (0 means no valid data found) + +size_t Stream::readBytesUntil(char terminator, char *buffer, size_t length) +{ + if (length < 1) return 0; + size_t index = 0; + while (index < length) { + int c = timedRead(); + if (c < 0 || c == terminator) break; + *buffer++ = (char)c; + index++; + } + return index; // return number of characters, not including null terminator +} + +String Stream::readString() +{ + String ret; + int c = timedRead(); + while (c >= 0) + { + ret += (char)c; + c = timedRead(); + } + return ret; +} + +String Stream::readStringUntil(char terminator) +{ + String ret; + int c = timedRead(); + while (c >= 0 && c != terminator) + { + ret += (char)c; + c = timedRead(); + } + return ret; +} + diff --git a/STM32F4/cores/maple/Stream.h b/STM32F4/cores/maple/Stream.h new file mode 100644 index 0000000..5cf5ddf --- /dev/null +++ b/STM32F4/cores/maple/Stream.h @@ -0,0 +1,102 @@ +/* + Stream.h - base class for character-based streams. + Copyright (c) 2010 David A. Mellis. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + parsing functions based on TextFinder library by Michael Margolis +*/ + +#ifndef Stream_h +#define Stream_h + +#include +#include "Print.h" + +// compatability macros for testing +/* +#define getInt() parseInt() +#define getInt(skipChar) parseInt(skipchar) +#define getFloat() parseFloat() +#define getFloat(skipChar) parseFloat(skipChar) +#define getString( pre_string, post_string, buffer, length) +readBytesBetween( pre_string, terminator, buffer, length) +*/ + +class Stream : public Print +{ + protected: + unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read + unsigned long _startMillis; // used for timeout measurement + int timedRead(); // private method to read stream with timeout + int timedPeek(); // private method to peek stream with timeout + int peekNextDigit(); // returns the next numeric digit in the stream or -1 if timeout + + public: + virtual int available() = 0; + virtual int read() = 0; + virtual int peek() = 0; + virtual void flush() = 0; + + Stream() {_timeout=1000;} + +// parsing methods + + void setTimeout(unsigned long timeout); // sets maximum milliseconds to wait for stream data, default is 1 second + + bool find(char *target); // reads data from the stream until the target string is found + bool find(uint8_t *target) { return find ((char *)target); } + // returns true if target string is found, false if timed out (see setTimeout) + + bool find(char *target, size_t length); // reads data from the stream until the target string of given length is found + bool find(uint8_t *target, size_t length) { return find ((char *)target, length); } + // returns true if target string is found, false if timed out + + bool findUntil(char *target, char *terminator); // as find but search ends if the terminator string is found + bool findUntil(uint8_t *target, char *terminator) { return findUntil((char *)target, terminator); } + + bool findUntil(char *target, size_t targetLen, char *terminate, size_t termLen); // as above but search ends if the terminate string is found + bool findUntil(uint8_t *target, size_t targetLen, char *terminate, size_t termLen) {return findUntil((char *)target, targetLen, terminate, termLen); } + + + long parseInt(); // returns the first valid (long) integer value from the current position. + // initial characters that are not digits (or the minus sign) are skipped + // integer is terminated by the first character that is not a digit. + + float parseFloat(); // float version of parseInt + + size_t readBytes( char *buffer, size_t length); // read chars from stream into buffer + size_t readBytes( uint8_t *buffer, size_t length) { return readBytes((char *)buffer, length); } + // terminates if length characters have been read or timeout (see setTimeout) + // returns the number of characters placed in the buffer (0 means no valid data found) + + size_t readBytesUntil( char terminator, char *buffer, size_t length); // as readBytes with terminator character + size_t readBytesUntil( char terminator, uint8_t *buffer, size_t length) { return readBytesUntil(terminator, (char *)buffer, length); } + // terminates if length characters have been read, timeout, or if the terminator character detected + // returns the number of characters placed in the buffer (0 means no valid data found) + + // Arduino String functions to be added here + String readString(); + String readStringUntil(char terminator); + + protected: + long parseInt(char skipChar); // as above but the given skipChar is ignored + // as above but the given skipChar is ignored + // this allows format characters (typically commas) in values to be ignored + + float parseFloat(char skipChar); // as above but the given skipChar is ignored +}; + +#endif diff --git a/STM32F4/cores/maple/WString.cpp b/STM32F4/cores/maple/WString.cpp new file mode 100644 index 0000000..939ca0e --- /dev/null +++ b/STM32F4/cores/maple/WString.cpp @@ -0,0 +1,746 @@ +/* + WString.cpp - String library for Wiring & Arduino + ...mostly rewritten by Paul Stoffregen... + Copyright (c) 2009-10 Hernando Barragan. All rights reserved. + Copyright 2011, Paul Stoffregen, paul@pjrc.com + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "WString.h" +#include "itoa.h" +#include "avr/dtostrf.h" + +/*********************************************/ +/* Constructors */ +/*********************************************/ + +String::String(const char *cstr) +{ + init(); + if (cstr) copy(cstr, strlen(cstr)); +} + +String::String(const String &value) +{ + init(); + *this = value; +} + +String::String(const __FlashStringHelper *pstr) +{ + init(); + *this = pstr; +} + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ +String::String(String &&rval) +{ + init(); + move(rval); +} +String::String(StringSumHelper &&rval) +{ + init(); + move(rval); +} +#endif + +String::String(char c) +{ + init(); + char buf[2]; + buf[0] = c; + buf[1] = 0; + *this = buf; +} + +String::String(unsigned char value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned char)]; + utoa(value, buf, base); + *this = buf; +} + +String::String(int value, unsigned char base) +{ + init(); + char buf[2 + 8 * sizeof(int)]; + itoa(value, buf, base); + *this = buf; +} + +String::String(unsigned int value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned int)]; + utoa(value, buf, base); + *this = buf; +} + +String::String(long value, unsigned char base) +{ + init(); + char buf[2 + 8 * sizeof(long)]; + ltoa(value, buf, base); + *this = buf; +} + +String::String(unsigned long value, unsigned char base) +{ + init(); + char buf[1 + 8 * sizeof(unsigned long)]; + ultoa(value, buf, base); + *this = buf; +} + +String::String(float value, unsigned char decimalPlaces) +{ + init(); + char buf[33]; + *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf); +} + +String::String(double value, unsigned char decimalPlaces) +{ + init(); + char buf[33]; + *this = dtostrf(value, (decimalPlaces + 2), decimalPlaces, buf); +} + +String::~String() +{ + free(buffer); +} + +/*********************************************/ +/* Memory Management */ +/*********************************************/ + +inline void String::init(void) +{ + buffer = NULL; + capacity = 0; + len = 0; +} + +void String::invalidate(void) +{ + if (buffer) free(buffer); + buffer = NULL; + capacity = len = 0; +} + +unsigned char String::reserve(unsigned int size) +{ + if (buffer && capacity >= size) return 1; + if (changeBuffer(size)) { + if (len == 0) buffer[0] = 0; + return 1; + } + return 0; +} + +unsigned char String::changeBuffer(unsigned int maxStrLen) +{ + char *newbuffer = (char *)realloc(buffer, maxStrLen + 1); + if (newbuffer) { + buffer = newbuffer; + capacity = maxStrLen; + return 1; + } + return 0; +} + +/*********************************************/ +/* Copy and Move */ +/*********************************************/ + +String & String::copy(const char *cstr, unsigned int length) +{ + if (!reserve(length)) { + invalidate(); + return *this; + } + len = length; + strcpy(buffer, cstr); + return *this; +} + +String & String::copy(const __FlashStringHelper *pstr, unsigned int length) +{ + if (!reserve(length)) { + invalidate(); + return *this; + } + len = length; + strcpy_P(buffer, (PGM_P)pstr); + return *this; +} + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ +void String::move(String &rhs) +{ + if (buffer) { + if (capacity >= rhs.len) { + strcpy(buffer, rhs.buffer); + len = rhs.len; + rhs.len = 0; + return; + } else { + free(buffer); + } + } + buffer = rhs.buffer; + capacity = rhs.capacity; + len = rhs.len; + rhs.buffer = NULL; + rhs.capacity = 0; + rhs.len = 0; +} +#endif + +String & String::operator = (const String &rhs) +{ + if (this == &rhs) return *this; + + if (rhs.buffer) copy(rhs.buffer, rhs.len); + else invalidate(); + + return *this; +} + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ +String & String::operator = (String &&rval) +{ + if (this != &rval) move(rval); + return *this; +} + +String & String::operator = (StringSumHelper &&rval) +{ + if (this != &rval) move(rval); + return *this; +} +#endif + +String & String::operator = (const char *cstr) +{ + if (cstr) copy(cstr, strlen(cstr)); + else invalidate(); + + return *this; +} + +String & String::operator = (const __FlashStringHelper *pstr) +{ + if (pstr) copy(pstr, strlen_P((PGM_P)pstr)); + else invalidate(); + + return *this; +} + +/*********************************************/ +/* concat */ +/*********************************************/ + +unsigned char String::concat(const String &s) +{ + return concat(s.buffer, s.len); +} + +unsigned char String::concat(const char *cstr, unsigned int length) +{ + unsigned int newlen = len + length; + if (!cstr) return 0; + if (length == 0) return 1; + if (!reserve(newlen)) return 0; + strcpy(buffer + len, cstr); + len = newlen; + return 1; +} + +unsigned char String::concat(const char *cstr) +{ + if (!cstr) return 0; + return concat(cstr, strlen(cstr)); +} + +unsigned char String::concat(char c) +{ + char buf[2]; + buf[0] = c; + buf[1] = 0; + return concat(buf, 1); +} + +unsigned char String::concat(unsigned char num) +{ + char buf[1 + 3 * sizeof(unsigned char)]; + itoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(int num) +{ + char buf[2 + 3 * sizeof(int)]; + itoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(unsigned int num) +{ + char buf[1 + 3 * sizeof(unsigned int)]; + utoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(long num) +{ + char buf[2 + 3 * sizeof(long)]; + ltoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(unsigned long num) +{ + char buf[1 + 3 * sizeof(unsigned long)]; + ultoa(num, buf, 10); + return concat(buf, strlen(buf)); +} + +unsigned char String::concat(float num) +{ + char buf[20]; + char* string = dtostrf(num, 4, 2, buf); + return concat(string, strlen(string)); +} + +unsigned char String::concat(double num) +{ + char buf[20]; + char* string = dtostrf(num, 4, 2, buf); + return concat(string, strlen(string)); +} + +unsigned char String::concat(const __FlashStringHelper * str) +{ + if (!str) return 0; + int length = strlen_P((const char *) str); + if (length == 0) return 1; + unsigned int newlen = len + length; + if (!reserve(newlen)) return 0; + strcpy_P(buffer + len, (const char *) str); + len = newlen; + return 1; +} + +/*********************************************/ +/* Concatenate */ +/*********************************************/ + +StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(rhs.buffer, rhs.len)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr) +{ + StringSumHelper &a = const_cast(lhs); + if (!cstr || !a.concat(cstr, strlen(cstr))) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, char c) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(c)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, int num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, long num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, float num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, double num) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(num)) a.invalidate(); + return a; +} + +StringSumHelper & operator + (const StringSumHelper &lhs, const __FlashStringHelper *rhs) +{ + StringSumHelper &a = const_cast(lhs); + if (!a.concat(rhs)) a.invalidate(); + return a; +} + +/*********************************************/ +/* Comparison */ +/*********************************************/ + +int String::compareTo(const String &s) const +{ + if (!buffer || !s.buffer) { + if (s.buffer && s.len > 0) return 0 - *(unsigned char *)s.buffer; + if (buffer && len > 0) return *(unsigned char *)buffer; + return 0; + } + return strcmp(buffer, s.buffer); +} + +unsigned char String::equals(const String &s2) const +{ + return (len == s2.len && compareTo(s2) == 0); +} + +unsigned char String::equals(const char *cstr) const +{ + if (len == 0) return (cstr == NULL || *cstr == 0); + if (cstr == NULL) return buffer[0] == 0; + return strcmp(buffer, cstr) == 0; +} + +unsigned char String::operator<(const String &rhs) const +{ + return compareTo(rhs) < 0; +} + +unsigned char String::operator>(const String &rhs) const +{ + return compareTo(rhs) > 0; +} + +unsigned char String::operator<=(const String &rhs) const +{ + return compareTo(rhs) <= 0; +} + +unsigned char String::operator>=(const String &rhs) const +{ + return compareTo(rhs) >= 0; +} + +unsigned char String::equalsIgnoreCase( const String &s2 ) const +{ + if (this == &s2) return 1; + if (len != s2.len) return 0; + if (len == 0) return 1; + const char *p1 = buffer; + const char *p2 = s2.buffer; + while (*p1) { + if (tolower(*p1++) != tolower(*p2++)) return 0; + } + return 1; +} + +unsigned char String::startsWith( const String &s2 ) const +{ + if (len < s2.len) return 0; + return startsWith(s2, 0); +} + +unsigned char String::startsWith( const String &s2, unsigned int offset ) const +{ + if (offset > len - s2.len || !buffer || !s2.buffer) return 0; + return strncmp( &buffer[offset], s2.buffer, s2.len ) == 0; +} + +unsigned char String::endsWith( const String &s2 ) const +{ + if ( len < s2.len || !buffer || !s2.buffer) return 0; + return strcmp(&buffer[len - s2.len], s2.buffer) == 0; +} + +/*********************************************/ +/* Character Access */ +/*********************************************/ + +char String::charAt(unsigned int loc) const +{ + return operator[](loc); +} + +void String::setCharAt(unsigned int loc, char c) +{ + if (loc < len) buffer[loc] = c; +} + +char & String::operator[](unsigned int index) +{ + static char dummy_writable_char; + if (index >= len || !buffer) { + dummy_writable_char = 0; + return dummy_writable_char; + } + return buffer[index]; +} + +char String::operator[]( unsigned int index ) const +{ + if (index >= len || !buffer) return 0; + return buffer[index]; +} + +void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const +{ + if (!bufsize || !buf) return; + if (index >= len) { + buf[0] = 0; + return; + } + unsigned int n = bufsize - 1; + if (n > len - index) n = len - index; + strncpy((char *)buf, buffer + index, n); + buf[n] = 0; +} + +/*********************************************/ +/* Search */ +/*********************************************/ + +int String::indexOf(char c) const +{ + return indexOf(c, 0); +} + +int String::indexOf( char ch, unsigned int fromIndex ) const +{ + if (fromIndex >= len) return -1; + const char* temp = strchr(buffer + fromIndex, ch); + if (temp == NULL) return -1; + return temp - buffer; +} + +int String::indexOf(const String &s2) const +{ + return indexOf(s2, 0); +} + +int String::indexOf(const String &s2, unsigned int fromIndex) const +{ + if (fromIndex >= len) return -1; + const char *found = strstr(buffer + fromIndex, s2.buffer); + if (found == NULL) return -1; + return found - buffer; +} + +int String::lastIndexOf( char theChar ) const +{ + return lastIndexOf(theChar, len - 1); +} + +int String::lastIndexOf(char ch, unsigned int fromIndex) const +{ + if (fromIndex >= len) return -1; + char tempchar = buffer[fromIndex + 1]; + buffer[fromIndex + 1] = '\0'; + char* temp = strrchr( buffer, ch ); + buffer[fromIndex + 1] = tempchar; + if (temp == NULL) return -1; + return temp - buffer; +} + +int String::lastIndexOf(const String &s2) const +{ + return lastIndexOf(s2, len - s2.len); +} + +int String::lastIndexOf(const String &s2, unsigned int fromIndex) const +{ + if (s2.len == 0 || len == 0 || s2.len > len) return -1; + if (fromIndex >= len) fromIndex = len - 1; + int found = -1; + for (char *p = buffer; p <= buffer + fromIndex; p++) { + p = strstr(p, s2.buffer); + if (!p) break; + if ((unsigned int)(p - buffer) <= fromIndex) found = p - buffer; + } + return found; +} + +String String::substring(unsigned int left, unsigned int right) const +{ + if (left > right) { + unsigned int temp = right; + right = left; + left = temp; + } + String out; + if (left > len) return out; + if (right > len) right = len; + char temp = buffer[right]; // save the replaced character + buffer[right] = '\0'; + out = buffer + left; // pointer arithmetic + buffer[right] = temp; //restore character + return out; +} + +/*********************************************/ +/* Modification */ +/*********************************************/ + +void String::replace(char find, char replace) +{ + if (!buffer) return; + for (char *p = buffer; *p; p++) { + if (*p == find) *p = replace; + } +} + +void String::replace(const String& find, const String& replace) +{ + if (len == 0 || find.len == 0) return; + int diff = replace.len - find.len; + char *readFrom = buffer; + char *foundAt; + if (diff == 0) { + while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { + memcpy(foundAt, replace.buffer, replace.len); + readFrom = foundAt + replace.len; + } + } else if (diff < 0) { + char *writeTo = buffer; + while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { + unsigned int n = foundAt - readFrom; + memcpy(writeTo, readFrom, n); + writeTo += n; + memcpy(writeTo, replace.buffer, replace.len); + writeTo += replace.len; + readFrom = foundAt + find.len; + len += diff; + } + strcpy(writeTo, readFrom); + } else { + unsigned int size = len; // compute size needed for result + while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { + readFrom = foundAt + find.len; + size += diff; + } + if (size == len) return; + if (size > capacity && !changeBuffer(size)) return; // XXX: tell user! + int index = len - 1; + while (index >= 0 && (index = lastIndexOf(find, index)) >= 0) { + readFrom = buffer + index + find.len; + memmove(readFrom + diff, readFrom, len - (readFrom - buffer)); + len += diff; + buffer[len] = 0; + memcpy(buffer + index, replace.buffer, replace.len); + index--; + } + } +} + +void String::remove(unsigned int index){ + if (index >= len) { return; } + int count = len - index; + remove(index, count); +} + +void String::remove(unsigned int index, unsigned int count){ + if (index >= len) { return; } + if (count <= 0) { return; } + if (index + count > len) { count = len - index; } + char *writeTo = buffer + index; + len = len - count; + strncpy(writeTo, buffer + index + count,len - index); + buffer[len] = 0; +} + +void String::toLowerCase(void) +{ + if (!buffer) return; + for (char *p = buffer; *p; p++) { + *p = tolower(*p); + } +} + +void String::toUpperCase(void) +{ + if (!buffer) return; + for (char *p = buffer; *p; p++) { + *p = toupper(*p); + } +} + +void String::trim(void) +{ + if (!buffer || len == 0) return; + char *begin = buffer; + while (isspace(*begin)) begin++; + char *end = buffer + len - 1; + while (isspace(*end) && end >= begin) end--; + len = end + 1 - begin; + if (begin > buffer) memcpy(buffer, begin, len); + buffer[len] = 0; +} + +/*********************************************/ +/* Parsing / Conversion */ +/*********************************************/ + +long String::toInt(void) const +{ + if (buffer) return atol(buffer); + return 0; +} + +float String::toFloat(void) const +{ + if (buffer) return float(atof(buffer)); + return 0; +} diff --git a/STM32F4/cores/maple/WString.h b/STM32F4/cores/maple/WString.h new file mode 100644 index 0000000..7402430 --- /dev/null +++ b/STM32F4/cores/maple/WString.h @@ -0,0 +1,224 @@ +/* + WString.h - String library for Wiring & Arduino + ...mostly rewritten by Paul Stoffregen... + Copyright (c) 2009-10 Hernando Barragan. All right reserved. + Copyright 2011, Paul Stoffregen, paul@pjrc.com + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef String_class_h +#define String_class_h +#ifdef __cplusplus + +#include +#include +#include +#include + +// When compiling programs with this class, the following gcc parameters +// dramatically increase performance and memory (RAM) efficiency, typically +// with little or no increase in code size. +// -felide-constructors +// -std=c++0x + +class __FlashStringHelper; +#define F(string_literal) (reinterpret_cast(PSTR(string_literal))) + +// An inherited class for holding the result of a concatenation. These +// result objects are assumed to be writable by subsequent concatenations. +class StringSumHelper; + +// The string class +class String +{ + // use a function pointer to allow for "if (s)" without the + // complications of an operator bool(). for more information, see: + // http://www.artima.com/cppsource/safebool.html + typedef void (String::*StringIfHelperType)() const; + void StringIfHelper() const {} + +public: + // constructors + // creates a copy of the initial value. + // if the initial value is null or invalid, or if memory allocation + // fails, the string will be marked as invalid (i.e. "if (s)" will + // be false). + String(const char *cstr = ""); + String(const String &str); + String(const __FlashStringHelper *str); + #ifdef __GXX_EXPERIMENTAL_CXX0X__ + String(String &&rval); + String(StringSumHelper &&rval); + #endif + explicit String(char c); + explicit String(unsigned char, unsigned char base=10); + explicit String(int, unsigned char base=10); + explicit String(unsigned int, unsigned char base=10); + explicit String(long, unsigned char base=10); + explicit String(unsigned long, unsigned char base=10); + explicit String(float, unsigned char decimalPlaces=2); + explicit String(double, unsigned char decimalPlaces=2); + ~String(void); + + // memory management + // return true on success, false on failure (in which case, the string + // is left unchanged). reserve(0), if successful, will validate an + // invalid string (i.e., "if (s)" will be true afterwards) + unsigned char reserve(unsigned int size); + inline unsigned int length(void) const {return len;} + + // creates a copy of the assigned value. if the value is null or + // invalid, or if the memory allocation fails, the string will be + // marked as invalid ("if (s)" will be false). + String & operator = (const String &rhs); + String & operator = (const char *cstr); + String & operator = (const __FlashStringHelper *str); + #ifdef __GXX_EXPERIMENTAL_CXX0X__ + String & operator = (String &&rval); + String & operator = (StringSumHelper &&rval); + #endif + + // concatenate (works w/ built-in types) + + // returns true on success, false on failure (in which case, the string + // is left unchanged). if the argument is null or invalid, the + // concatenation is considered unsucessful. + unsigned char concat(const String &str); + unsigned char concat(const char *cstr); + unsigned char concat(char c); + unsigned char concat(unsigned char c); + unsigned char concat(int num); + unsigned char concat(unsigned int num); + unsigned char concat(long num); + unsigned char concat(unsigned long num); + unsigned char concat(float num); + unsigned char concat(double num); + unsigned char concat(const __FlashStringHelper * str); + + // if there's not enough memory for the concatenated value, the string + // will be left unchanged (but this isn't signalled in any way) + String & operator += (const String &rhs) {concat(rhs); return (*this);} + String & operator += (const char *cstr) {concat(cstr); return (*this);} + String & operator += (char c) {concat(c); return (*this);} + String & operator += (unsigned char num) {concat(num); return (*this);} + String & operator += (int num) {concat(num); return (*this);} + String & operator += (unsigned int num) {concat(num); return (*this);} + String & operator += (long num) {concat(num); return (*this);} + String & operator += (unsigned long num) {concat(num); return (*this);} + String & operator += (float num) {concat(num); return (*this);} + String & operator += (double num) {concat(num); return (*this);} + String & operator += (const __FlashStringHelper *str){concat(str); return (*this);} + + friend StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs); + friend StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr); + friend StringSumHelper & operator + (const StringSumHelper &lhs, char c); + friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, int num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, long num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, float num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, double num); + friend StringSumHelper & operator + (const StringSumHelper &lhs, const __FlashStringHelper *rhs); + + // comparison (only works w/ Strings and "strings") + operator StringIfHelperType() const { return buffer ? &String::StringIfHelper : 0; } + int compareTo(const String &s) const; + unsigned char equals(const String &s) const; + unsigned char equals(const char *cstr) const; + unsigned char operator == (const String &rhs) const {return equals(rhs);} + unsigned char operator == (const char *cstr) const {return equals(cstr);} + unsigned char operator != (const String &rhs) const {return !equals(rhs);} + unsigned char operator != (const char *cstr) const {return !equals(cstr);} + unsigned char operator < (const String &rhs) const; + unsigned char operator > (const String &rhs) const; + unsigned char operator <= (const String &rhs) const; + unsigned char operator >= (const String &rhs) const; + unsigned char equalsIgnoreCase(const String &s) const; + unsigned char startsWith( const String &prefix) const; + unsigned char startsWith(const String &prefix, unsigned int offset) const; + unsigned char endsWith(const String &suffix) const; + + // character acccess + char charAt(unsigned int index) const; + void setCharAt(unsigned int index, char c); + char operator [] (unsigned int index) const; + char& operator [] (unsigned int index); + void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const; + void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const + {getBytes((unsigned char *)buf, bufsize, index);} + const char * c_str() const { return buffer; } + + // search + int indexOf( char ch ) const; + int indexOf( char ch, unsigned int fromIndex ) const; + int indexOf( const String &str ) const; + int indexOf( const String &str, unsigned int fromIndex ) const; + int lastIndexOf( char ch ) const; + int lastIndexOf( char ch, unsigned int fromIndex ) const; + int lastIndexOf( const String &str ) const; + int lastIndexOf( const String &str, unsigned int fromIndex ) const; + String substring( unsigned int beginIndex ) const { return substring(beginIndex, len); }; + String substring( unsigned int beginIndex, unsigned int endIndex ) const; + + // modification + void replace(char find, char replace); + void replace(const String& find, const String& replace); + void remove(unsigned int index); + void remove(unsigned int index, unsigned int count); + void toLowerCase(void); + void toUpperCase(void); + void trim(void); + + // parsing/conversion + long toInt(void) const; + float toFloat(void) const; + +protected: + char *buffer; // the actual char array + unsigned int capacity; // the array length minus one (for the '\0') + unsigned int len; // the String length (not counting the '\0') +protected: + void init(void); + void invalidate(void); + unsigned char changeBuffer(unsigned int maxStrLen); + unsigned char concat(const char *cstr, unsigned int length); + + // copy and move + String & copy(const char *cstr, unsigned int length); + String & copy(const __FlashStringHelper *pstr, unsigned int length); + #ifdef __GXX_EXPERIMENTAL_CXX0X__ + void move(String &rhs); + #endif +}; + +class StringSumHelper : public String +{ +public: + StringSumHelper(const String &s) : String(s) {} + StringSumHelper(const char *p) : String(p) {} + StringSumHelper(char c) : String(c) {} + StringSumHelper(unsigned char num) : String(num) {} + StringSumHelper(int num) : String(num) {} + StringSumHelper(unsigned int num) : String(num) {} + StringSumHelper(long num) : String(num) {} + StringSumHelper(unsigned long num) : String(num) {} + StringSumHelper(float num) : String(num) {} + StringSumHelper(double num) : String(num) {} +}; + +#endif // __cplusplus +#endif // String_class_h diff --git a/STM32F4/cores/maple/itoa.c b/STM32F4/cores/maple/itoa.c new file mode 100644 index 0000000..fc35766 --- /dev/null +++ b/STM32F4/cores/maple/itoa.c @@ -0,0 +1,170 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "itoa.h" +#include + +#ifdef __cplusplus +extern "C"{ +#endif // __cplusplus + +#if 0 +/* reverse: reverse string s in place */ +static void reverse( char s[] ) +{ + int i, j ; + char c ; + + for ( i = 0, j = strlen(s)-1 ; i < j ; i++, j-- ) + { + c = s[i] ; + s[i] = s[j] ; + s[j] = c ; + } +} + +/* itoa: convert n to characters in s */ +extern void itoa( int n, char s[] ) +{ + int i, sign ; + + if ( (sign = n) < 0 ) /* record sign */ + { + n = -n; /* make n positive */ + } + + i = 0; + do + { /* generate digits in reverse order */ + s[i++] = n % 10 + '0'; /* get next digit */ + } while ((n /= 10) > 0) ; /* delete it */ + + if (sign < 0 ) + { + s[i++] = '-'; + } + + s[i] = '\0'; + + reverse( s ) ; +} + +#else + +extern char* itoa( int value, char *string, int radix ) +{ + return ltoa( value, string, radix ) ; +} + +extern char* ltoa( long value, char *string, int radix ) +{ + char tmp[33]; + char *tp = tmp; + long i; + unsigned long v; + int sign; + char *sp; + + if ( string == NULL ) + { + return 0 ; + } + + if (radix > 36 || radix <= 1) + { + return 0 ; + } + + sign = (radix == 10 && value < 0); + if (sign) + { + v = -value; + } + else + { + v = (unsigned long)value; + } + + while (v || tp == tmp) + { + i = v % radix; + v = v / radix; + if (i < 10) + *tp++ = i+'0'; + else + *tp++ = i + 'a' - 10; + } + + sp = string; + + if (sign) + *sp++ = '-'; + while (tp > tmp) + *sp++ = *--tp; + *sp = 0; + + return string; +} + +extern char* utoa( unsigned long value, char *string, int radix ) +{ + return ultoa( value, string, radix ) ; +} + +extern char* ultoa( unsigned long value, char *string, int radix ) +{ + char tmp[33]; + char *tp = tmp; + long i; + unsigned long v = value; + char *sp; + + if ( string == NULL ) + { + return 0; + } + + if (radix > 36 || radix <= 1) + { + return 0; + } + + while (v || tp == tmp) + { + i = v % radix; + v = v / radix; + if (i < 10) + *tp++ = i+'0'; + else + *tp++ = i + 'a' - 10; + } + + sp = string; + + + while (tp > tmp) + *sp++ = *--tp; + *sp = 0; + + return string; +} +#endif /* 0 */ + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus diff --git a/STM32F4/cores/maple/itoa.h b/STM32F4/cores/maple/itoa.h new file mode 100644 index 0000000..59af109 --- /dev/null +++ b/STM32F4/cores/maple/itoa.h @@ -0,0 +1,42 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _ITOA_ +#define _ITOA_ + +#ifdef __cplusplus +extern "C"{ +#endif // __cplusplus + +#if 0 + +extern void itoa( int n, char s[] ) ; + +#else + +extern char* itoa( int value, char *string, int radix ) ; +extern char* ltoa( long value, char *string, int radix ) ; +extern char* utoa( unsigned long value, char *string, int radix ) ; +extern char* ultoa( unsigned long value, char *string, int radix ) ; +#endif /* 0 */ + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // _ITOA_ diff --git a/STM32F4/cores/maple/libmaple/HardwareSerial.cpp b/STM32F4/cores/maple/libmaple/HardwareSerial.cpp index a5669c0..a156770 100644 --- a/STM32F4/cores/maple/libmaple/HardwareSerial.cpp +++ b/STM32F4/cores/maple/libmaple/HardwareSerial.cpp @@ -140,8 +140,9 @@ uint32 HardwareSerial::pending(void) { return usart_data_pending(usart_device); } -void HardwareSerial::write(unsigned char ch) { +size_t HardwareSerial::write(unsigned char ch) { usart_putc(usart_device, ch); + return 1; } void HardwareSerial::flush(void) { diff --git a/STM32F4/cores/maple/libmaple/HardwareSerial.h b/STM32F4/cores/maple/libmaple/HardwareSerial.h index baf4a7c..9cad064 100644 --- a/STM32F4/cores/maple/libmaple/HardwareSerial.h +++ b/STM32F4/cores/maple/libmaple/HardwareSerial.h @@ -62,7 +62,7 @@ public: uint32 pending(void); int read(void); void flush(void); - virtual void write(unsigned char); + virtual size_t write(unsigned char); using Print::write; /* Pin accessors */ diff --git a/STM32F4/cores/maple/usb_serial.cpp b/STM32F4/cores/maple/usb_serial.cpp index 873e49d..71d3b37 100644 --- a/STM32F4/cores/maple/usb_serial.cpp +++ b/STM32F4/cores/maple/usb_serial.cpp @@ -50,18 +50,18 @@ void USBSerial::end(void) { disableUSB(); } -void USBSerial::write(uint8 ch) { +size_t USBSerial::write(uint8 ch) { const uint8 buf[] = {ch}; - this->write(buf, 1); + return this->write(buf, 1); } -void USBSerial::write(const char *str) { - this->write(str, strlen(str)); +size_t USBSerial::write(const char *str) { + return this->write(str, strlen(str)); } -void USBSerial::write(const void *buf, uint32 len) { +size_t USBSerial::write(const void *buf, uint32 len) { if (!(usbIsConnected() && usbIsConfigured()) || !buf) { - return; + return 0; } uint32 txed = 0; @@ -75,6 +75,7 @@ void USBSerial::write(const void *buf, uint32 len) { } old_txed = txed; } + return txed; } uint32 USBSerial::available(void) { diff --git a/STM32F4/cores/maple/usb_serial.h b/STM32F4/cores/maple/usb_serial.h index ce33302..44bd1e8 100644 --- a/STM32F4/cores/maple/usb_serial.h +++ b/STM32F4/cores/maple/usb_serial.h @@ -49,9 +49,9 @@ public: uint32 read(void *buf, uint32 len); uint8 read(void); - void write(uint8); - void write(const char *str); - void write(const void*, uint32); + size_t write(uint8); + size_t write(const char *str); + size_t write(const void*, uint32); uint8 getRTS(); uint8 getDTR(); diff --git a/STM32F4/cores/maple/wirish.h b/STM32F4/cores/maple/wirish.h index 6be8423..75d4aec 100644 --- a/STM32F4/cores/maple/wirish.h +++ b/STM32F4/cores/maple/wirish.h @@ -44,6 +44,7 @@ #include "wirish_debug.h" #include "wirish_math.h" #include "wirish_time.h" +#include #include "HardwareSPI.h" #include "HardwareSerial.h" #include "HardwareTimer.h" @@ -56,8 +57,6 @@ #define true 0x1 #define false 0x0 -#define LSBFIRST 0 -#define MSBFIRST 1 #define lowByte(w) ((w) & 0xFF) #define highByte(w) (((w) >> 8) & 0xFF) diff --git a/STM32F4/cores/maple/wirish_constants.h b/STM32F4/cores/maple/wirish_constants.h new file mode 100644 index 0000000..06a85ae --- /dev/null +++ b/STM32F4/cores/maple/wirish_constants.h @@ -0,0 +1,17 @@ +#ifndef _WIRING_CONSTANTS_ +#define _WIRING_CONSTANTS_ + +#ifdef __cplusplus +extern "C"{ +#endif + +enum BitOrder { + LSBFIRST = 0, + MSBFIRST = 1 +}; + +#ifdef __cplusplus +} +#endif + +#endif From a7244e0e89c952b04ade1f86416e6fcb87cc9009 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Tue, 16 Jun 2015 21:23:43 +1000 Subject: [PATCH 51/96] Added upload-reset.c source. Added upload-reset OSX binary, and modified maple-upload script to use upload-reset --- tools/macosx/maple_upload | 27 ++++- tools/src/upload-reset/upload-reset.c | 161 ++++++++++++++++++++++++++ 2 files changed, 182 insertions(+), 6 deletions(-) create mode 100644 tools/src/upload-reset/upload-reset.c diff --git a/tools/macosx/maple_upload b/tools/macosx/maple_upload index e55078d..4b51827 100755 --- a/tools/macosx/maple_upload +++ b/tools/macosx/maple_upload @@ -8,15 +8,30 @@ if [ $# -lt 4 ]; then fi dummy_port=$1; altID=$2; usbID=$3; binfile=$4;dummy_port_fullpath="/dev/$1" -#if we can find the Serial device try resetting it and then sleeping for 1 sec while the board reboots -if [ -e $dummy_port_fullpath ]; then - echo "resetting " $dummy_port_fullpath - stty -f $dummy_port_fullpath 1200 - sleep 1 +# Get the directory where the script is running. +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + + +# ----------------- Old code to reset the USB - which doesn't seem to work -------- +# +#if we can find the Serial device try resetting it and then sleeping for 1 sec while the board reboots +#if [ -e $dummy_port_fullpath ]; then +# echo "resetting " $dummy_port_fullpath # stty -f $dummy_port_fullpath 1200 # sleep 1 -fi +## stty -f $dummy_port_fullpath 1200 +## sleep 1 +#fi +# ------------------ End of old code ----------------- + +# ----------------- IMPORTANT ----------------- +# The 2nd parameter to upload-reset is the delay after resetting before it exits +# This value is in milliseonds +# You may need to tune this to your system +# 750ms to 1500ms seems to work on my Mac + +${DIR}/upload-reset ${dummy_port_fullpath} 750 DFU_UTIL=/usr/local/bin/dfu-util diff --git a/tools/src/upload-reset/upload-reset.c b/tools/src/upload-reset/upload-reset.c new file mode 100644 index 0000000..1d03bff --- /dev/null +++ b/tools/src/upload-reset/upload-reset.c @@ -0,0 +1,161 @@ +/* Copyright (C) 2015 Roger Clark + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * + * Utility to send the reset sequence on RTS and DTR and chars + * which resets the libmaple and causes the bootloader to be run + * + * + * + * Terminal control code by Heiko Noordhof (see copyright below) + */ + + + +/* Copyright (C) 2003 Heiko Noordhof + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Function prototypes (belong in a seperate header file) */ +int openserial(char *devicename); +void closeserial(void); +int setDTR(unsigned short level); +int setRTS(unsigned short level); + + +/* Two globals for use by this module only */ +static int fd; +static struct termios oldterminfo; + + +void closeserial(void) +{ + tcsetattr(fd, TCSANOW, &oldterminfo); + close(fd); +} + + +int openserial(char *devicename) +{ + struct termios attr; + + if ((fd = open(devicename, O_RDWR)) == -1) return 0; /* Error */ + atexit(closeserial); + + if (tcgetattr(fd, &oldterminfo) == -1) return 0; /* Error */ + attr = oldterminfo; + attr.c_cflag |= CRTSCTS | CLOCAL; + attr.c_oflag = 0; + if (tcflush(fd, TCIOFLUSH) == -1) return 0; /* Error */ + if (tcsetattr(fd, TCSANOW, &attr) == -1) return 0; /* Error */ + + /* Set the lines to a known state, and */ + /* finally return non-zero is successful. */ + return setRTS(0) && setDTR(0); +} + + +/* For the two functions below: + * level=0 to set line to LOW + * level=1 to set line to HIGH + */ + +int setRTS(unsigned short level) +{ + int status; + + if (ioctl(fd, TIOCMGET, &status) == -1) { + perror("setRTS(): TIOCMGET"); + return 0; + } + if (level) status |= TIOCM_RTS; + else status &= ~TIOCM_RTS; + if (ioctl(fd, TIOCMSET, &status) == -1) { + perror("setRTS(): TIOCMSET"); + return 0; + } + return 1; +} + + +int setDTR(unsigned short level) +{ + int status; + + if (ioctl(fd, TIOCMGET, &status) == -1) { + perror("setDTR(): TIOCMGET"); + return 0; + } + if (level) status |= TIOCM_DTR; + else status &= ~TIOCM_DTR; + if (ioctl(fd, TIOCMSET, &status) == -1) { + perror("setDTR: TIOCMSET"); + return 0; + } + return 1; +} + +/* This portion of code was written by Roger Clark + * It was informed by various other pieces of code written by Leaflabs to reset their + * Maple and Maple mini boards + */ + +main(int argc, char *argv[]) +{ + + if (argc<2 || argc >3) + { + printf("Usage upload-reset \n\r"); + return; + } + + if (openserial(argv[1])) + { + // Send magic sequence of DTR and RTS followed by the magic word "1EAF" + setRTS(false); + setDTR(false); + setDTR(true); + + usleep(50000L); + + setDTR(false); + setRTS(true); + setDTR(true); + + usleep(50000L); + + setDTR(false); + + usleep(50000L); + + write(fd,"1EAF",4); + + closeserial(); + if (argc==3) + { + usleep(atol(argv[2])*1000L); + } + } + else + { + printf("Failed to open serial device.\n\r"); + } +} From 0ff9438aa1dc59ab74dca3007b553ac4f031feb2 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Tue, 16 Jun 2015 21:25:40 +1000 Subject: [PATCH 52/96] Added osx upload-reset binary omitted from last commit --- tools/macosx/upload-reset | Bin 0 -> 9424 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 tools/macosx/upload-reset diff --git a/tools/macosx/upload-reset b/tools/macosx/upload-reset new file mode 100755 index 0000000000000000000000000000000000000000..29290310bd3bfdfd98133baaec41b04a8bced84a GIT binary patch literal 9424 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 v-n*O5J2OCWTIh4aJt6ej;GPQJdElJ{ Date: Thu, 18 Jun 2015 02:26:02 +1000 Subject: [PATCH 53/96] Added TFT_ILI9163C library from @Victor_pv --- .gitmodules | 3 +++ STM32F1/libraries/TFT_ILI9163C | 1 + 2 files changed, 4 insertions(+) create mode 160000 STM32F1/libraries/TFT_ILI9163C diff --git a/.gitmodules b/.gitmodules index f204a0e..584c53d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,6 @@ [submodule "STM32duino-bootloader"] path = STM32duino-bootloader url = https://github.com/rogerclarkmelbourne/STM32duino-bootloader.git +[submodule "STM32F1/libraries/TFT_ILI9163C"] + path = STM32F1/libraries/TFT_ILI9163C + url = https://github.com/victorpv/TFT_ILI9163C.git diff --git a/STM32F1/libraries/TFT_ILI9163C b/STM32F1/libraries/TFT_ILI9163C new file mode 160000 index 0000000..bbc39bb --- /dev/null +++ b/STM32F1/libraries/TFT_ILI9163C @@ -0,0 +1 @@ +Subproject commit bbc39bbb79edf95996da5733dadf293a0d5984ea From c0fd4e30388436ecd9a3a050676bad4d64bf2ff9 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Thu, 18 Jun 2015 02:29:32 +1000 Subject: [PATCH 54/96] Added Ethernet_STM library provided by Vasillis Serasidis (@Serasidis) --- .gitmodules | 3 +++ STM32F1/libraries/Ethernet_STM | 1 + 2 files changed, 4 insertions(+) create mode 160000 STM32F1/libraries/Ethernet_STM diff --git a/.gitmodules b/.gitmodules index 584c53d..b70d76a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "STM32F1/libraries/TFT_ILI9163C"] path = STM32F1/libraries/TFT_ILI9163C url = https://github.com/victorpv/TFT_ILI9163C.git +[submodule "STM32F1/libraries/Ethernet_STM"] + path = STM32F1/libraries/Ethernet_STM + url = https://github.com/Serasidis/Ethernet_STM diff --git a/STM32F1/libraries/Ethernet_STM b/STM32F1/libraries/Ethernet_STM new file mode 160000 index 0000000..5dd518a --- /dev/null +++ b/STM32F1/libraries/Ethernet_STM @@ -0,0 +1 @@ +Subproject commit 5dd518a193f5879744b1b3f5b112ee03c6ee14b2 From 501da92986e3885ac4c51fb05e4f84e342bed7ea Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Thu, 25 Jun 2015 09:36:23 +1000 Subject: [PATCH 55/96] Added a line in SPI.cpp to default the bitOrder to MSBFIRST --- STM32F1/libraries/SPI/src/SPI.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/STM32F1/libraries/SPI/src/SPI.cpp b/STM32F1/libraries/SPI/src/SPI.cpp index 3d4d0c7..c394c8a 100644 --- a/STM32F1/libraries/SPI/src/SPI.cpp +++ b/STM32F1/libraries/SPI/src/SPI.cpp @@ -110,8 +110,11 @@ SPIClass::SPIClass(uint32 spi_num) { default: ASSERT(0); } + + bitOrder=MSBFIRST; +//pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT); + - //pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT); } /* From 69420b429bbd72d32fd15bc63d14455dbb76ad75 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sat, 27 Jun 2015 21:50:32 +1000 Subject: [PATCH 56/96] Added linux udev rules scripts and rules, taken from the leaflabs Linux IDE install file --- drivers/linux/45-maple.rules | 5 +++++ drivers/linux/install-udev-rules.sh | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 drivers/linux/45-maple.rules create mode 100755 drivers/linux/install-udev-rules.sh diff --git a/drivers/linux/45-maple.rules b/drivers/linux/45-maple.rules new file mode 100644 index 0000000..d1bda5f --- /dev/null +++ b/drivers/linux/45-maple.rules @@ -0,0 +1,5 @@ +ATTRS{idProduct}=="1001", ATTRS{idVendor}=="0110", MODE="664", GROUP="plugdev" +ATTRS{idProduct}=="1002", ATTRS{idVendor}=="0110", MODE="664", GROUP="plugdev" +ATTRS{idProduct}=="0003", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple" +ATTRS{idProduct}=="0004", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple" + diff --git a/drivers/linux/install-udev-rules.sh b/drivers/linux/install-udev-rules.sh new file mode 100755 index 0000000..df4a06d --- /dev/null +++ b/drivers/linux/install-udev-rules.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +if sudo [ -w /etc/udev/rules.d ]; then + echo "Copying Maple-specific udev rules..." + sudo cp -v 45-maple.rules /etc/udev/rules.d/45-maple.rules + sudo chown root:root /etc/udev/rules.d/45-maple.rules + sudo chmod 644 /etc/udev/rules.d/45-maple.rules +else + echo "Couldn't copy to /etc/udev/rules.d/; you probably have to run this script as root? Or your distribution of Linux doesn't include udev; try running the IDE itself as root." +fi From 3b2c87de5af78cc3aa7ee09bd04625fba81bb28f Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sun, 28 Jun 2015 11:06:00 +1000 Subject: [PATCH 57/96] Updated linux tools to contain upload-reset (bin) utility, and modified maple-upload script to use this utility to reset the bootloader prior to upload. Also changed maple-upload so that it uses the pre-compiled dfu-util binary that is now part of the repo --- drivers/linux/install-udev-rules.sh | 3 +++ tools/linux/maple_upload | 21 +++++++++++++++++++-- tools/linux/upload-reset | Bin 0 -> 7946 bytes 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100755 tools/linux/upload-reset diff --git a/drivers/linux/install-udev-rules.sh b/drivers/linux/install-udev-rules.sh index df4a06d..db4c45a 100755 --- a/drivers/linux/install-udev-rules.sh +++ b/drivers/linux/install-udev-rules.sh @@ -5,6 +5,9 @@ if sudo [ -w /etc/udev/rules.d ]; then sudo cp -v 45-maple.rules /etc/udev/rules.d/45-maple.rules sudo chown root:root /etc/udev/rules.d/45-maple.rules sudo chmod 644 /etc/udev/rules.d/45-maple.rules + echo "Reloading udev rules" + sudo udevadm control --reload-rules else echo "Couldn't copy to /etc/udev/rules.d/; you probably have to run this script as root? Or your distribution of Linux doesn't include udev; try running the IDE itself as root." fi + diff --git a/tools/linux/maple_upload b/tools/linux/maple_upload index 598c981..67acdaf 100755 --- a/tools/linux/maple_upload +++ b/tools/linux/maple_upload @@ -1,20 +1,37 @@ #!/bin/bash -set -e +#set -e + + if [ $# -lt 4 ]; then echo "Usage: $0 $# " >&2 exit 1 fi -dummy_port=$1; altID=$2; usbID=$3; binfile=$4; +dummy_port=$1; altID=$2; usbID=$3; binfile=$4; dummy_port_fullpath="/dev/$1" if [ $# -eq 5 ]; then dfuse_addr="--dfuse-address $5" else dfuse_addr="" fi + +# Get the directory where the script is running. +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# ----------------- IMPORTANT ----------------- +# The 2nd parameter to upload-reset is the delay after resetting before it exits +# This value is in milliseonds +# You may need to tune this to your system +# 750ms to 1500ms seems to work on my Mac + + +${DIR}/upload-reset ${dummy_port_fullpath} 750 + + #DFU_UTIL=$(dirname $0)/dfu-util/dfu-util DFU_UTIL=/usr/bin/dfu-util +DFU_UTIL=${DIR}/dfu-util/dfu-util if [ ! -x ${DFU_UTIL} ]; then echo "$0: error: cannot find ${DFU_UTIL}" >&2 exit 2 diff --git a/tools/linux/upload-reset b/tools/linux/upload-reset new file mode 100755 index 0000000000000000000000000000000000000000..26985b857674d0c8d4999d53999a80f988591b96 GIT binary patch literal 7946 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 I$I+hrKXKN%tN;K2 literal 0 HcmV?d00001 From 1e4fdf743a8574dff45b8cba606dfbef72e12a1f Mon Sep 17 00:00:00 2001 From: Teguh Sobirin Date: Wed, 1 Jul 2015 20:16:27 +0700 Subject: [PATCH 58/96] FLAC decoder patch By uncommenting "#define USEFLAC" in VS1003_STM.h the FLAC patch will be loaded at begin time. --- .../Serasidis_VS1003B_STM/src/VS1003_STM.cpp | 8 + .../Serasidis_VS1003B_STM/src/VS1003_STM.h | 3 + .../Serasidis_VS1003B_STM/src/flac.h | 1078 +++++++++++++++++ 3 files changed, 1089 insertions(+) create mode 100644 STM32F1/libraries/Serasidis_VS1003B_STM/src/flac.h diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.cpp b/STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.cpp index 2f80b19..07540d5 100644 --- a/STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.cpp +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/src/VS1003_STM.cpp @@ -10,11 +10,16 @@ email: avrsite@yahoo.gr 29 May 2015 - Added a fix for booting the VS1053B boards into mp3 decoding instead of booting into MID (modeSwitch function). + 01 July 2015 - Added a Flac decoder patch. */ //#include #include +#if defined(USEFLAC) +#include "flac.h" +#endif + #define vs1003_chunk_size 32 /****************************************************************************/ @@ -237,6 +242,9 @@ void VS1003::begin(void) write_register(SCI_MODE, (1< #include /** diff --git a/STM32F1/libraries/Serasidis_VS1003B_STM/src/flac.h b/STM32F1/libraries/Serasidis_VS1003B_STM/src/flac.h new file mode 100644 index 0000000..106483f --- /dev/null +++ b/STM32F1/libraries/Serasidis_VS1003B_STM/src/flac.h @@ -0,0 +1,1078 @@ +#define FLAC_PATCHLEN 8161 + //Taken from FLAC decoder patch 2015-05-25 v2.30 + const unsigned short flac_patch[FLAC_PATCHLEN] = + { + 0x0007,0x0001, /*copy 1*/ + 0x8050, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0xc000, + 0x0006, 0x801e, 0x0000, /*Rle(30)*/ + 0x0006,0x0540, /*copy 1344*/ + 0xf400,0x4095,0x0000,0x02c2,0x6124,0x0024,0x0000,0x0024, + 0x2800,0x1ac5,0x4192,0x4542,0x0000,0x0041,0x2000,0x0015, + 0x0030,0x0317,0x2000,0x0000,0x3f00,0x4024,0x2000,0x0000, + 0x0000,0x0000,0x3e12,0x3800,0x3e00,0xb804,0x0030,0x0015, + 0x0007,0x8257,0x3700,0x984c,0xf224,0x1444,0xf224,0x0024, + 0x0008,0x0002,0x2910,0x0181,0x0000,0x1bc8,0xb428,0x1402, + 0x0000,0x8004,0x2910,0x0195,0x0000,0x1bc8,0xb428,0x0024, + 0x0006,0x0095,0x2800,0x2945,0x3e13,0x780e,0x3e11,0x7803, + 0x3e13,0xf806,0x3e11,0xf801,0x3510,0xb808,0x003f,0xe004, + 0xfec4,0x3800,0x48be,0x17c3,0xfe46,0x41c2,0x48be,0x4497, + 0x4090,0x1c46,0xf06c,0x0024,0x2400,0x2580,0x6090,0x41c3, + 0x6628,0x1c47,0x0000,0x0024,0x2800,0x2449,0xf07e,0x0024, + 0xf400,0x4182,0x673a,0x1c46,0x0000,0x0024,0x2800,0x2589, + 0xf06c,0x0024,0xf400,0x41c3,0x0000,0x0024,0x4224,0x3442, + 0x2903,0xbe80,0x4336,0x37c3,0x0000,0x1805,0x2903,0xbe80, + 0x4508,0x40c2,0x450a,0x9808,0x0000,0x0207,0xa478,0x1bc0, + 0xc45a,0x1807,0x0030,0x03d5,0x3d01,0x5bc1,0x36f3,0xd806, + 0x3601,0x5803,0x36f3,0x0024,0x36f3,0x580e,0x0007,0x8257, + 0x0000,0x6004,0x3730,0x8024,0xb244,0x1c04,0xd428,0x3c02, + 0x0006,0xc717,0x2800,0x2d05,0x4284,0x0024,0x3613,0x3c02, + 0x0006,0xc357,0x2901,0x6780,0x3e11,0x5c05,0x4284,0x1bc5, + 0x0000,0x0024,0x2800,0x2fc5,0x0000,0x0024,0x3613,0x0024, + 0x3e10,0x3813,0x3e14,0x8024,0x3e04,0x8024,0x2900,0x4c00, + 0x0006,0x02d3,0x36e3,0x0024,0x3009,0x1bd3,0x0007,0x8257, + 0x3700,0x8024,0xf224,0x0024,0x0000,0x0024,0x2800,0x31d1, + 0x3600,0x9844,0x2900,0x3780,0x0000,0x3248,0x2911,0xf140, + 0x0000,0x0024,0x0030,0x0057,0x3700,0x0024,0xf200,0x4595, + 0x0fff,0xfe02,0xa024,0x164c,0x8000,0x17cc,0x3f00,0x0024, + 0x3500,0x0024,0x0021,0x6d82,0xd024,0x44c0,0x0006,0xa402, + 0x2800,0x3695,0xd024,0x0024,0x0000,0x0000,0x2800,0x3695, + 0x000b,0x6d57,0x3009,0x3c00,0x36f0,0x8024,0x36f2,0x1800, + 0x2000,0x0000,0x0000,0x0024,0x3e14,0x7810,0x3e13,0xb80d, + 0x3e13,0xf80a,0x3e10,0xb803,0x3e11,0x3805,0x3e11,0xb807, + 0x3e14,0xf801,0x0001,0x000a,0x0006,0xc4d5,0xbf8e,0x9442, + 0x3e01,0x9403,0x0006,0xa017,0x0023,0xffd1,0x0000,0x0053, + 0x3281,0xf806,0x4091,0x2d64,0x2400,0x3d00,0x4efa,0x9c10, + 0xf1eb,0x6061,0xfe55,0x2f66,0x5653,0x2d64,0x48b2,0xa201, + 0x4efa,0xa201,0x36f3,0x3c10,0x36f4,0xd801,0x36f1,0x9807, + 0x36f1,0x1805,0x36f0,0x9803,0x36f3,0xd80a,0x36f3,0x980d, + 0x2000,0x0000,0x36f4,0x5810,0x3e12,0xb817,0x3e14,0xf812, + 0x3e01,0xb811,0x0007,0x9717,0x0020,0xffd2,0x0030,0x11d1, + 0x3111,0x8024,0x3704,0xc024,0x3b81,0x8024,0x3101,0x8024, + 0x3b81,0x8024,0x3f04,0xc024,0x2808,0x4800,0x36f1,0x9811, + 0x36f3,0x0024,0x3009,0x3848,0x3e14,0x3811,0x3e00,0x0024, + 0x0000,0x4000,0x0001,0x0010,0x2915,0x94c0,0x0001,0xcc11, + 0x36f0,0x0024,0x2927,0x9e40,0x3604,0x1811,0x3613,0x0024, + 0x3e14,0x3811,0x3e00,0x0024,0x0000,0x4000,0x0001,0x0010, + 0x2915,0x94c0,0x0001,0xcc11,0x36f0,0x0024,0x36f4,0x1811, + 0x3009,0x1808,0x2000,0x0000,0x0000,0x190d,0x3600,0x3840, + 0x3e13,0x780e,0x3e13,0xf808,0x3e00,0x0024,0x0000,0x430e, + 0x0027,0x9e0f,0x2922,0xb680,0x0000,0x190d,0x36f3,0x0024, + 0x36f3,0xd808,0x36f3,0x580e,0x2000,0x0000,0x3009,0x1800, + 0x3613,0x0024,0x3e22,0xb815,0x3e05,0xb814,0x3615,0x0024, + 0x0000,0x800a,0x3e13,0x7801,0x3e10,0xb803,0x3e11,0x3805, + 0x3e11,0xb807,0x3e14,0x3811,0x3e14,0xb813,0x3e03,0xf80e, + 0xb488,0x44d5,0x3543,0x134c,0x34e5,0xc024,0x3524,0x8024, + 0x35a4,0xc024,0x3710,0x8a0c,0x3540,0x4a0c,0x3d44,0x8024, + 0x3a10,0x8024,0x3590,0x0024,0x4010,0x15c1,0x6010,0x3400, + 0x3710,0x8024,0x2800,0x57c4,0x3af0,0x8024,0x3df0,0x0024, + 0x3591,0x4024,0x3530,0x4024,0x4192,0x4050,0x6100,0x1482, + 0x4020,0x1753,0xbf8e,0x1582,0x4294,0x4011,0xbd86,0x408e, + 0x2400,0x55ce,0xfe6d,0x2819,0x520e,0x0a00,0x5207,0x2819, + 0x4fbe,0x0024,0xad56,0x904c,0xaf5e,0x1010,0xf7d4,0x0024, + 0xf7fc,0x2042,0x6498,0x2046,0x3cf4,0x0024,0x3400,0x170c, + 0x4090,0x1492,0x35a4,0xc024,0x2800,0x5055,0x3c00,0x0024, + 0x4480,0x914c,0x36f3,0xd80e,0x36f4,0x9813,0x36f4,0x1811, + 0x36f1,0x9807,0x36f1,0x1805,0x36f0,0x9803,0x36f3,0x5801, + 0x3405,0x9014,0x36e3,0x0024,0x2000,0x0000,0x36f2,0x9815, + 0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814,0x3625,0x0024, + 0x0000,0x800a,0x3e10,0x3801,0x3e10,0xb803,0x3e11,0x3805, + 0x3e11,0xb807,0x3e14,0x3811,0x0006,0xa090,0x2912,0x0d00, + 0x3e14,0xc024,0x4088,0x8000,0x4080,0x0024,0x0007,0x90d1, + 0x2800,0x61c5,0x0000,0x0024,0x0007,0x9051,0x3100,0x4024, + 0x4100,0x0024,0x3900,0x0024,0x0007,0x90d1,0x0004,0x0000, + 0x31f0,0x4024,0x6014,0x0400,0x0000,0x0024,0x2800,0x6611, + 0x4080,0x0024,0x0000,0x0000,0x2800,0x6585,0x0000,0x0024, + 0x0007,0x9053,0x3300,0x0024,0x4080,0x0024,0x0000,0x0000, + 0x2800,0x6618,0x0000,0x0024,0x0007,0x9051,0x3900,0x0024, + 0x3200,0x504c,0x6410,0x0024,0x3cf0,0x0000,0x4080,0x0024, + 0x0006,0xc691,0x2800,0x7ec5,0x3009,0x0400,0x0007,0x9051, + 0x0000,0x1001,0x3100,0x0024,0x6012,0x0024,0x0006,0xc6d0, + 0x2800,0x7309,0x003f,0xe000,0x0006,0xc693,0x3900,0x0c00, + 0x3009,0x0001,0x6014,0x0024,0x0007,0x1ad0,0x2800,0x7315, + 0x3009,0x0000,0x4080,0x0024,0x0000,0x0301,0x2800,0x6d05, + 0x4090,0x0024,0x0000,0x0024,0x2800,0x6e15,0x0000,0x0024, + 0x3009,0x0000,0xc012,0x0024,0x2800,0x7300,0x3009,0x2001, + 0x3009,0x0000,0x6012,0x0024,0x0000,0x0341,0x2800,0x7015, + 0x0000,0x0024,0x6190,0x0024,0x2800,0x7300,0x3009,0x2000, + 0x6012,0x0024,0x0000,0x0381,0x2800,0x71d5,0x0000,0x0024, + 0x6190,0x0024,0x2800,0x7300,0x3009,0x2000,0x6012,0x0024, + 0x0000,0x00c0,0x2800,0x7315,0x0000,0x0024,0x3009,0x2000, + 0x0006,0xa090,0x3009,0x0000,0x4080,0x0024,0x0000,0x0081, + 0x2800,0x77d5,0x0007,0x8c13,0x3300,0x104c,0xb010,0x0024, + 0x0002,0x8001,0x2800,0x7a45,0x34f0,0x0024,0x2800,0x77c0, + 0x0000,0x0024,0x0006,0xc351,0x3009,0x0000,0x6090,0x0024, + 0x3009,0x2000,0x2900,0x0b80,0x3009,0x0405,0x0006,0xc690, + 0x0006,0xc6d1,0x3009,0x0000,0x3009,0x0401,0x6014,0x0024, + 0x0006,0xa093,0x2800,0x7651,0xb880,0x0024,0x2800,0x8780, + 0x3009,0x2c00,0x4040,0x0024,0x6012,0x0024,0x0006,0xc6d0, + 0x2800,0x8798,0x0000,0x0024,0x0006,0xc693,0x3009,0x0c00, + 0x3009,0x0001,0x6014,0x0024,0x0006,0xc350,0x2800,0x8781, + 0x0000,0x0024,0x6090,0x0024,0x3009,0x2c00,0x3009,0x0005, + 0x2900,0x0b80,0x0000,0x8788,0x3009,0x0400,0x4080,0x0024, + 0x0003,0x8000,0x2800,0x8785,0x0000,0x0024,0x6400,0x0024, + 0x0000,0x0081,0x2800,0x8789,0x0000,0x0024,0x0007,0x8c13, + 0x3300,0x0024,0xb010,0x0024,0x0006,0xc650,0x2800,0x8795, + 0x0000,0x0024,0x0001,0x0002,0x3413,0x0000,0x3009,0x0401, + 0x4010,0x8406,0x0000,0x0281,0xa010,0x13c1,0x4122,0x0024, + 0x0000,0x03c2,0x6122,0x8002,0x462c,0x0024,0x469c,0x0024, + 0xfee2,0x0024,0x48be,0x0024,0x6066,0x8400,0x0006,0xc350, + 0x2800,0x8781,0x0000,0x0024,0x4090,0x0024,0x3009,0x2400, + 0x2900,0x0b80,0x3009,0x0005,0x0007,0x1b50,0x2912,0x0d00, + 0x3613,0x0024,0x3a00,0x0380,0x4080,0x0024,0x0000,0x00c1, + 0x2800,0x9045,0x3009,0x0000,0xb010,0x008c,0x4192,0x0024, + 0x6012,0x0024,0x0006,0xf051,0x2800,0x8e58,0x3009,0x0400, + 0x0007,0x1fd1,0x30e3,0x0400,0x4080,0x0024,0x0000,0x0301, + 0x2800,0x9045,0x3009,0x0000,0xb010,0x0024,0x0000,0x0101, + 0x6012,0x0024,0x0006,0xf051,0x2800,0x9055,0x0000,0x0024, + 0x3023,0x0400,0xf200,0x184c,0xb880,0xa400,0x3009,0x2000, + 0x3009,0x0441,0x3e10,0x4402,0x2909,0xa9c0,0x3e10,0x8024, + 0x36e3,0x0024,0x36f4,0xc024,0x36f4,0x1811,0x36f1,0x9807, + 0x36f1,0x1805,0x36f0,0x9803,0x36f0,0x1801,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, + 0x3615,0x0024,0x0000,0x800a,0x3e10,0xb803,0x0012,0x5103, + 0x3e11,0x3805,0x3e11,0xb807,0x3e14,0x380d,0x0030,0x0250, + 0x3e13,0xf80e,0xbe8b,0x83e0,0x290c,0x4840,0x3613,0x0024, + 0x290c,0x4840,0x4086,0x984c,0x0000,0x00ce,0x2400,0x9a4e, + 0x3009,0x1bc0,0x0000,0x01c3,0xae3a,0x184c,0x0000,0x0043, + 0x3009,0x3842,0x290c,0x4840,0x3009,0x3840,0x4084,0x9bc0, + 0xfe26,0x9bc2,0xceba,0x0024,0x4e8e,0x0024,0x4e9a,0x0024, + 0x4f8e,0x0024,0x0000,0x0102,0x2800,0x9f85,0x0030,0x0010, + 0x0000,0x0206,0x3613,0x0024,0x290c,0x4840,0x3009,0x3840, + 0x3000,0xdbc0,0xb366,0x0024,0x0000,0x0024,0x2800,0x9f95, + 0x4e8e,0x0024,0x4e9a,0x0024,0x4f8e,0x0024,0x0030,0x0010, + 0x2800,0x9c55,0x0000,0x0206,0x36f3,0xd80e,0x36f4,0x180d, + 0x36f1,0x9807,0x36f1,0x1805,0x36f0,0x9803,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, + 0x3635,0x0024,0x0000,0x800a,0x3e10,0x7802,0x3e14,0x0024, + 0x2903,0x5400,0x0000,0x0201,0x0000,0x0601,0x3413,0x184c, + 0x2903,0x5b40,0x3cf0,0x0024,0x3413,0x184c,0x3400,0x3040, + 0x3009,0x33c1,0x0000,0x1fc1,0xb010,0x0024,0x6014,0x9040, + 0x0006,0x8010,0x2800,0xa8d5,0x0000,0x0024,0x34e3,0x1bcc, + 0x6890,0x0024,0x2800,0xaa80,0xb880,0x2000,0x3e10,0x1381, + 0x2903,0x9d80,0x3e00,0x4024,0x003f,0xfe41,0x36e3,0x104c, + 0x34f0,0x0024,0xa010,0x0024,0x36f4,0x0024,0x36f0,0x5802, + 0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000, + 0x36f2,0x9817,0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a,0x3e10,0xb804, + 0x3e01,0x534c,0xbe8a,0x10c0,0x4080,0x0024,0x0000,0x0024, + 0x2800,0xb3c5,0x0000,0x0024,0x2903,0x5b40,0x4082,0x184c, + 0x4c8a,0x134c,0x0000,0x0001,0x6890,0x10c2,0x4294,0x0024, + 0xac22,0x0024,0xbec2,0x0024,0x0000,0x0024,0x2800,0xb3c5, + 0x0000,0x0024,0x6890,0x134c,0xb882,0x10c2,0xac22,0x0024, + 0x4c92,0x0024,0xdc92,0x0024,0xceca,0x0024,0x4e82,0x1bc5, + 0x36f0,0x9804,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, + 0x2000,0x0000,0x36f2,0x9817,0x3613,0x0024,0x3e12,0xb817, + 0x3e12,0x3815,0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a, + 0x3e10,0x3801,0x3e10,0xb804,0x3e11,0xb807,0x3e14,0x3811, + 0x3e04,0x934c,0x3430,0x0024,0x4080,0x0024,0x0000,0x0206, + 0x2800,0xbc05,0x0006,0x8151,0x3101,0x130c,0xff0c,0x1102, + 0x6408,0x0024,0x4204,0x0024,0xb882,0x4092,0x1005,0xfe02, + 0x48be,0x0024,0x4264,0x0024,0x2903,0xaa00,0xf400,0x4090, + 0x36f4,0x8024,0x36f4,0x1811,0x36f1,0x9807,0x36f0,0x9804, + 0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, + 0x2000,0x0000,0x36f2,0x9817,0x2a08,0x1b8e,0x2803,0x7140, + 0x0000,0xbe97,0x0006,0xd397,0x2000,0x0000,0x3f00,0x0024, + 0x0007,0x0001, /*copy 1*/ + 0x8300, + 0x0006,0x1844, /*copy 6212*/ + 0x0030,0x0055,0xb080,0x1402,0x0fdf,0xffc1,0x0007,0x9257, + 0xb212,0x3c00,0x3d00,0x4024,0x0030,0x0297,0x3f00,0x0024, + 0x0007,0x9017,0x3f00,0x0024,0x0007,0x81d7,0x3f10,0x0024, + 0xc090,0x3c00,0x0006,0x0297,0xb080,0x3c00,0x0000,0x0401, + 0x000a,0x1055,0x0006,0x0017,0x3f10,0x3401,0x000a,0x2795, + 0x3f00,0x3401,0x0001,0x6757,0xf400,0x55c0,0x0000,0x0817, + 0xb080,0x57c0,0x0006,0x01d7,0x3f00,0x0024,0x0000,0x190d, + 0x000f,0xf94f,0x0000,0xca0e,0x280f,0xe100,0x0006,0x2016, + 0x0000,0x0080,0x0005,0x4f92,0x2909,0xf840,0x3613,0x2800, + 0x0006,0x0197,0x0006,0xa115,0xb080,0x0024,0x3f00,0x3400, + 0x0007,0x8a57,0x3700,0x0024,0x4080,0x0024,0x0000,0x0040, + 0x2800,0xcbd5,0x0006,0xa2d7,0x3009,0x3c00,0x0006,0xa157, + 0x3009,0x1c00,0x0006,0x01d7,0x0000,0x190d,0x000a,0x708f, + 0x0000,0xd4ce,0x290b,0x1a80,0x3f00,0x184c,0x0030,0x0017, + 0x4080,0x1c01,0x0000,0x0200,0x2800,0xc815,0xb102,0x0024, + 0x0000,0xca08,0x2800,0xc815,0x0000,0xd0ce,0x0011,0x210f, + 0x0000,0x190d,0x280f,0xcb00,0x3613,0x0024,0x0006,0xa115, + 0x0006,0x01d7,0x37f0,0x1401,0x6100,0x1c01,0x4012,0x0024, + 0x0000,0x8000,0x6010,0x0024,0x34f3,0x0400,0x2800,0xd398, + 0x0000,0x0024,0x0000,0x8001,0x6010,0x3c01,0x0000,0x000d, + 0x2811,0x8259,0x0000,0x0024,0x2a11,0x2100,0x0030,0x0257, + 0x3700,0x0024,0x4080,0x0024,0x0000,0x0024,0x2800,0xd6d5, + 0x0006,0x0197,0x0006,0xa115,0x3f00,0x3400,0x003f,0xc000, + 0xb600,0x41c1,0x0012,0x5103,0x000c,0xc002,0xdcd6,0x0024, + 0x0019,0xd4c2,0x2800,0x9305,0x0001,0x0e48,0x0013,0xd9c3, + 0x6fd6,0x0024,0x0000,0x190d,0x2800,0xdc95,0x0014,0x1b01, + 0x0020,0x480f,0x0000,0xdb4e,0x0000,0x190d,0x2820,0x41c0, + 0x0001,0x0e48,0x0039,0x324f,0x0001,0x3b4e,0x2820,0x4a18, + 0xb882,0x0024,0x2a20,0x48c0,0x003f,0xfd00,0xb700,0x0024, + 0x003f,0xf901,0x6010,0x0024,0x0014,0x1b01,0x280a,0xc505, + 0x0000,0x190d,0x0015,0x59c0,0x6fc2,0x0024,0x0019,0x9301, + 0x2800,0xe695,0x0018,0x50c0,0x290c,0x4840,0x3613,0x0024, + 0x290c,0x4840,0x4086,0x184c,0x0000,0x18c2,0x6234,0x0024, + 0x0000,0x1d02,0x2800,0xe295,0x6234,0x0024,0x0030,0x0317, + 0x2800,0xe800,0x3f00,0x0024,0x0000,0x1d82,0x2800,0xe515, + 0x6234,0x0024,0x2912,0x0d00,0x4084,0x184c,0xf200,0x0024, + 0x6200,0x0024,0x0006,0x0017,0x2800,0xe200,0xb080,0x3c40, + 0x0000,0x0202,0x2800,0xe815,0xa024,0x0024,0xc020,0x0024, + 0x2800,0xe200,0x0030,0x02d7,0x6fc2,0x0024,0x0000,0x0024, + 0x2800,0xe815,0x0000,0x0024,0x2802,0xffc0,0x000a,0xcac8, + 0x000a,0x8c8f,0x0000,0xe94e,0x000c,0x0981,0x280a,0x71c0, + 0x002c,0x9d40,0x000a,0x708f,0x0000,0xd4ce,0x280a,0xc0d5, + 0x0012,0x5182,0x6fd6,0x0024,0x003f,0xfd81,0x280a,0x8e45, + 0xb710,0x0024,0xb710,0x0024,0x003f,0xfc01,0x6012,0x0024, + 0x0000,0x0101,0x2801,0x0515,0xffd2,0x0024,0x48b2,0x0024, + 0x4190,0x0024,0x0000,0x190d,0x2801,0x0515,0x0030,0x0250, + 0xb880,0x104c,0x3cf0,0x0024,0x0010,0x5500,0xb880,0x23c0, + 0xb882,0x2000,0x0007,0x8590,0x2914,0xbec0,0x0000,0x0440, + 0x0007,0x8b50,0xb880,0x0024,0x2920,0x0100,0x3800,0x0024, + 0x2920,0x0000,0x0006,0x8a91,0x0000,0x0800,0xb880,0xa440, + 0x003f,0xfd81,0xb710,0xa7c0,0x003f,0xfc01,0x6012,0x0024, + 0x0000,0x0101,0x2801,0x0e55,0x0000,0x0024,0xffe2,0x0024, + 0x48b2,0x0024,0x4190,0x0024,0x0000,0x0024,0x2801,0x0e55, + 0x0000,0x0024,0x2912,0x2d80,0x0000,0x0780,0x4080,0x0024, + 0x0006,0x8a90,0x2801,0x0e55,0x0000,0x01c2,0xb886,0x8040, + 0x3613,0x03c1,0xbcd2,0x0024,0x0030,0x0011,0x2800,0xfad5, + 0x003f,0xff42,0xb886,0x8040,0x3009,0x03c1,0x0000,0x0020, + 0xac22,0x0024,0x0000,0x0102,0x6cd2,0x0024,0x3e10,0x0024, + 0x2909,0x8c80,0x3e00,0x4024,0x36f3,0x0024,0x3e11,0x8024, + 0x3e01,0xc024,0x2901,0x3200,0x0000,0x0201,0xf400,0x4512, + 0x2900,0x0c80,0x3213,0x1b8c,0x3100,0x0024,0xb010,0x0024, + 0x0000,0x0024,0x2801,0x0e55,0x0000,0x0024,0x291a,0x8a40, + 0x0000,0x0100,0x2920,0x0200,0x3633,0x0024,0x2920,0x0280, + 0x0000,0x0401,0x408e,0x0024,0x2920,0x0280,0x0000,0x0401, + 0x003f,0xfd81,0xb710,0x4006,0x003f,0xfc01,0x6012,0x0024, + 0x0000,0x0101,0x2801,0x0e55,0x0000,0x0024,0xffe2,0x0024, + 0x48b2,0x0024,0x4190,0x0024,0x0000,0x0024,0x2801,0x0e55, + 0x0000,0x0024,0x2912,0x2d80,0x0000,0x0780,0x4080,0x0024, + 0x0000,0x01c2,0x2800,0xf6c5,0x0006,0x8a90,0x2a01,0x0e40, + 0x2920,0x0100,0x0000,0x0401,0x0000,0x0180,0x2920,0x0200, + 0x3613,0x0024,0x2920,0x0280,0x3613,0x0024,0x0000,0x0401, + 0x2920,0x0280,0x4084,0x984c,0x0019,0x9d01,0x6212,0x0024, + 0x001e,0x5c01,0x2801,0x0995,0x6012,0x0024,0x0000,0x0024, + 0x2801,0x0b85,0x0000,0x0024,0x001b,0x5bc1,0x6212,0x0024, + 0x001b,0xdd81,0x2801,0x0f55,0x6012,0x0024,0x0000,0x0024, + 0x2801,0x0f55,0x0000,0x0024,0x0000,0x004d,0x000a,0xbf4f, + 0x280a,0xb880,0x0001,0x0c8e,0x0020,0xfb4f,0x0000,0x190d, + 0x0001,0x138e,0x2920,0x0480,0x3009,0x2bc1,0x291a,0x8a40, + 0x36e3,0x0024,0x0000,0x190d,0x000a,0x708f,0x280a,0xcac0, + 0x0000,0xd4ce,0x0030,0x0017,0x3700,0x4024,0x0000,0x0200, + 0xb102,0x0024,0x0000,0x00c0,0x2801,0x1285,0x0005,0x4f92, + 0x2909,0xf840,0x3613,0x2800,0x0006,0x0197,0x0006,0xa115, + 0xb080,0x0024,0x3f00,0x3400,0x0000,0x190d,0x000a,0x708f, + 0x280a,0xc0c0,0x0000,0xd4ce,0x0000,0x004d,0x0020,0xfe0f, + 0x2820,0xfb40,0x0001,0x148e,0x2801,0x1655,0x3009,0x1000, + 0x6012,0x93cc,0x0000,0x0024,0x2801,0x3105,0x0000,0x0024, + 0x3413,0x0024,0x34b0,0x0024,0x4080,0x0024,0x0000,0x0200, + 0x2801,0x1955,0xb882,0x0024,0x3453,0x0024,0x3009,0x13c0, + 0x4080,0x0024,0x0000,0x0200,0x2801,0x3105,0x0000,0x0024, + 0xb882,0x130c,0x0000,0x004d,0x0021,0x058f,0x2821,0x0340, + 0x0001,0x1a4e,0x2801,0x2a95,0x6012,0x0024,0x0000,0x0024, + 0x2801,0x2a95,0x0000,0x0024,0x34c3,0x184c,0x3e13,0xb80f, + 0xf400,0x4500,0x0026,0x9dcf,0x0001,0x1e4e,0x0000,0xfa0d, + 0x2926,0x8e80,0x3e10,0x110c,0x36f3,0x0024,0x2801,0x2a80, + 0x36f3,0x980f,0x001c,0xdd00,0x001c,0xd901,0x6ec2,0x0024, + 0x001c,0xdd00,0x2801,0x2155,0x0018,0xdbc1,0x3413,0x184c, + 0xf400,0x4500,0x2926,0xc640,0x3e00,0x13cc,0x2801,0x2840, + 0x36f3,0x0024,0x6ec2,0x0024,0x003f,0xc000,0x2801,0x23d5, + 0x002a,0x4001,0x3413,0x184c,0xf400,0x4500,0x2926,0xafc0, + 0x3e00,0x13cc,0x2801,0x2840,0x36f3,0x0024,0xb400,0x0024, + 0xd100,0x0024,0x0000,0x0024,0x2801,0x2845,0x0000,0x0024, + 0x3613,0x0024,0x3e11,0x4024,0x2926,0x8540,0x3e01,0x0024, + 0x4080,0x1b8c,0x0000,0x0024,0x2801,0x2845,0x0000,0x0024, + 0x3413,0x184c,0xf400,0x4500,0x2926,0x8e80,0x3e10,0x13cc, + 0x36f3,0x0024,0x3110,0x8024,0x31f0,0xc024,0x0000,0x4000, + 0x0000,0x0021,0x6d06,0x0024,0x3110,0x8024,0x2826,0xa8c4, + 0x31f0,0xc024,0x2a26,0xad00,0x34c3,0x184c,0x3410,0x8024, + 0x3430,0xc024,0x0000,0x4000,0x0000,0x0021,0x6d06,0x0024, + 0x0000,0x0024,0x2801,0x3114,0x4d06,0x0024,0x0000,0x0200, + 0x2922,0x1885,0x0001,0x2f88,0x0000,0x0200,0x3e10,0x8024, + 0x2921,0xca80,0x3e00,0xc024,0x291a,0x8a40,0x0000,0x0024, + 0x2922,0x1880,0x36f3,0x0024,0x0000,0x004d,0x0021,0x0ecf, + 0x2821,0x0bc0,0x0001,0x308e,0x2801,0x1380,0x3c30,0x4024, + 0x0000,0x190d,0x0000,0x430e,0x2821,0x0f80,0x0027,0x9e0f, + 0x0020,0xcd4f,0x2820,0xc780,0x0001,0x32ce,0x0006,0xf017, + 0x0000,0x0015,0xb070,0xbc15,0x0000,0x430e,0x0027,0x9e0f, + 0x2820,0xcd80,0x0000,0x190d,0x3613,0x0024,0x3e10,0xb803, + 0x3e14,0x3811,0x3e11,0x3805,0x3e00,0x3801,0x0007,0xc390, + 0x0006,0xa011,0x3010,0x0444,0x3050,0x4405,0x6458,0x0302, + 0xff94,0x4081,0x0003,0xffc5,0x48b6,0x0024,0xff82,0x0024, + 0x42b2,0x0042,0xb458,0x0003,0x4cd6,0x9801,0xf248,0x1bc0, + 0xb58a,0x0024,0x6de6,0x1804,0x0006,0x0010,0x3810,0x9bc5, + 0x3800,0xc024,0x36f4,0x1811,0x36f0,0x9803,0x283e,0x2d80, + 0x0fff,0xffc3,0x2801,0x4900,0x0000,0x0024,0x3413,0x0024, + 0x2801,0x3d05,0xf400,0x4517,0x2801,0x4100,0x6894,0x13cc, + 0x37b0,0x184c,0x6090,0x1d51,0x0000,0x0910,0x3f00,0x060c, + 0x3100,0x4024,0x6016,0xb812,0x000c,0x8012,0x2801,0x3f91, + 0xb884,0x0024,0x6894,0x3002,0x0000,0x028d,0x003a,0x5e0f, + 0x0001,0x510e,0x2939,0xb0c0,0x3e10,0x93cc,0x4084,0x9bd2, + 0x4282,0x0024,0x0000,0x0040,0x2801,0x4305,0x4292,0x130c, + 0x3443,0x0024,0x2801,0x4445,0x000c,0x8390,0x2a01,0x47c0, + 0x3444,0x0024,0x3073,0x0024,0xc090,0x014c,0x2801,0x47c0, + 0x3800,0x0024,0x000c,0x4113,0xb880,0x2380,0x3304,0x4024, + 0x3800,0x05cc,0xcc92,0x05cc,0x3910,0x0024,0x3910,0x4024, + 0x000c,0x8110,0x3910,0x0024,0x39f0,0x4024,0x3810,0x0024, + 0x38d0,0x4024,0x3810,0x0024,0x38f0,0x4024,0x34c3,0x0024, + 0x3444,0x0024,0x3073,0x0024,0x3063,0x0024,0x3000,0x0024, + 0x4080,0x0024,0x0000,0x0024,0x2839,0x53d5,0x4284,0x0024, + 0x3613,0x0024,0x2801,0x4b05,0x6898,0xb804,0x0000,0x0084, + 0x293b,0x1cc0,0x3613,0x0024,0x000c,0x8117,0x3711,0x0024, + 0x37d1,0x4024,0x4e8a,0x0024,0x0000,0x0015,0x2801,0x4dc5, + 0xce9a,0x0024,0x3f11,0x0024,0x3f01,0x4024,0x000c,0x8197, + 0x408a,0x9bc4,0x3f15,0x4024,0x2801,0x5005,0x4284,0x3c15, + 0x6590,0x0024,0x0000,0x0024,0x2839,0x53d5,0x4284,0x0024, + 0x0000,0x0024,0x2801,0x3bd8,0x458a,0x0024,0x2a39,0x53c0, + 0x003e,0x2d4f,0x283a,0x5ed5,0x0001,0x348e,0x000c,0x4653, + 0x0000,0x0246,0xffac,0x0c01,0x48be,0x0024,0x4162,0x4546, + 0x6642,0x4055,0x3501,0x8024,0x0000,0x0087,0x667c,0x4057, + 0x000c,0x41d5,0x283a,0x62d5,0x3501,0x8024,0x667c,0x1c47, + 0x3701,0x8024,0x283a,0x62d5,0xc67c,0x0024,0x0000,0x0024, + 0x283a,0x62c5,0x0000,0x0024,0x2a3a,0x5ec0,0x3009,0x3851, + 0x3e14,0xf812,0x3e12,0xb817,0x3e11,0x8024,0x0006,0x0293, + 0x3301,0x8024,0x468c,0x3804,0x0006,0xa057,0x2801,0x5d04, + 0x0006,0x0011,0x469c,0x0024,0x3be1,0x8024,0x2801,0x5d15, + 0x0006,0xc392,0x3311,0x0024,0x33f1,0x2844,0x3009,0x2bc4, + 0x0030,0x04d2,0x3311,0x0024,0x3a11,0x0024,0x3201,0x8024, + 0x003f,0xfc04,0xb64c,0x0fc4,0xc648,0x0024,0x3a01,0x0024, + 0x3111,0x1fd3,0x6498,0x07c6,0x868c,0x2444,0x0023,0xffd2, + 0x3901,0x8e06,0x0030,0x0551,0x3911,0x8e06,0x3961,0x9c44, + 0xf400,0x44c6,0xd46c,0x1bc4,0x36f1,0xbc13,0x2801,0x6695, + 0x36f2,0x9817,0x002b,0xffd2,0x3383,0x188c,0x3e01,0x8c06, + 0x0006,0xa097,0x3009,0x1c12,0x3213,0x0024,0x468c,0xbc12, + 0x002b,0xffd2,0xf400,0x4197,0x2801,0x6384,0x3713,0x0024, + 0x2801,0x63c5,0x37e3,0x0024,0x3009,0x2c17,0x3383,0x0024, + 0x3009,0x0c06,0x468c,0x4197,0x0006,0xa052,0x2801,0x65c4, + 0x3713,0x2813,0x2801,0x6605,0x37e3,0x0024,0x3009,0x2c17, + 0x36f1,0x8024,0x36f2,0x9817,0x36f4,0xd812,0x2100,0x0000, + 0x3904,0x5bd1,0x2a01,0x56ce,0x3e11,0x7804,0x0030,0x0257, + 0x3701,0x0024,0x0013,0x4d05,0xd45b,0xe0e1,0x0007,0xc795, + 0x2801,0x6e15,0x0fff,0xff45,0x3511,0x184c,0x4488,0xb808, + 0x0006,0x8a97,0x2801,0x6dc5,0x3009,0x1c40,0x3511,0x1fc1, + 0x0000,0x0020,0xac52,0x1405,0x6ce2,0x0024,0x0000,0x0024, + 0x2801,0x6dc1,0x68c2,0x0024,0x291a,0x8a40,0x3e10,0x0024, + 0x2921,0xca80,0x3e00,0x4024,0x36f3,0x0024,0x3009,0x1bc8, + 0x36f0,0x1801,0x3601,0x5804,0x3e13,0x780f,0x3e13,0xb808, + 0x0008,0x9b0f,0x0001,0x70ce,0x2908,0x9300,0x0000,0x004d, + 0x36f3,0x9808,0x2000,0x0000,0x36f3,0x580f,0x0007,0x81d7, + 0x3711,0x8024,0x3711,0xc024,0x3700,0x0024,0x0000,0x2001, + 0xb012,0x0024,0x0034,0x0000,0x2801,0x7385,0x0000,0x01c1, + 0x0014,0xc000,0x0000,0x01c1,0x4fce,0x0024,0xffea,0x0024, + 0x48b6,0x0024,0x4384,0x4097,0xb886,0x45c6,0xfede,0x0024, + 0x4db6,0x0024,0x466c,0x0024,0x0006,0xc610,0x8dd6,0x8007, + 0x0000,0x00c6,0xff6e,0x0024,0x48b2,0x0024,0x0034,0x2406, + 0xffee,0x0024,0x2914,0xaa80,0x40b2,0x0024,0xf1c6,0x0024, + 0xf1d6,0x0024,0x0000,0x0201,0x8d86,0x0024,0x61de,0x0024, + 0x0006,0xc612,0x2801,0x7a01,0x0006,0xc713,0x4c86,0x0024, + 0x2912,0x1180,0x0006,0xc351,0x0006,0x0210,0x2912,0x0d00, + 0x3810,0x984c,0xf200,0x2043,0x2808,0xa000,0x3800,0x0024, + 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, + 0x3645,0x0024,0x0000,0x800a,0x3e10,0x3801,0x3e10,0xb803, + 0x3e11,0x3805,0x3e11,0xb807,0x3e14,0x104c,0x2903,0x5400, + 0x0000,0x0081,0x4080,0x3040,0x0000,0x0101,0x2801,0x8145, + 0x0000,0x0024,0x4090,0x0024,0x0006,0x8050,0x2801,0x9555, + 0x0000,0x0024,0x2903,0x5400,0x3613,0x0024,0xb880,0x3000, + 0x2801,0x9300,0x3009,0x3380,0x2903,0x5400,0x4122,0x10cc, + 0x3cf0,0x0024,0x3001,0x0024,0x3400,0x0024,0x6800,0x0024, + 0xa408,0x9040,0x4080,0x0024,0x0000,0x07c1,0x2801,0x86d5, + 0x6894,0x1380,0x6894,0x130c,0x3460,0x0024,0x6408,0x4481, + 0x4102,0x1380,0xf400,0x4052,0x0000,0x07c1,0x34f0,0xc024, + 0x6234,0x0024,0x6824,0x0024,0xa122,0x0024,0x6014,0x0024, + 0x0000,0x0141,0x2801,0x8dd5,0x0000,0x0024,0x2903,0x5400, + 0x3613,0x0024,0x2801,0x8c40,0xb88a,0x4002,0x2900,0xac40, + 0x3e00,0x8024,0x4c8e,0xa801,0x0000,0x0201,0x3a10,0x1bcc, + 0x3000,0x0024,0xb010,0x0024,0x0000,0x0024,0x2801,0x91d5, + 0x659a,0x0024,0x6540,0x184c,0x0030,0x0010,0x2801,0x89c8, + 0x0000,0x0024,0x2801,0x91c0,0x36f3,0x0024,0x2801,0x9080, + 0xb88a,0x0024,0x2903,0x1c40,0x34d0,0x4024,0x4c8f,0xa0a1, + 0x0000,0x0201,0x3000,0x084c,0xb010,0x0024,0x0000,0x0024, + 0x2801,0x91d5,0x659a,0x0024,0x6540,0x10cc,0x0030,0x0010, + 0x2801,0x8e48,0x0000,0x0024,0x34d3,0x0024,0x3423,0x0024, + 0xf400,0x4510,0x3009,0x1380,0x6090,0x0024,0x3009,0x2000, + 0x6892,0x108c,0x34f0,0x9000,0xa122,0x984c,0x6016,0x13c1, + 0x0000,0x0102,0x2801,0x8288,0x0006,0x8150,0x2801,0x95c0, + 0x3009,0x1bcc,0x6890,0x938c,0x3800,0x0024,0x36f4,0x0024, + 0x36f1,0x9807,0x36f1,0x1805,0x36f0,0x9803,0x36f0,0x1801, + 0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000, + 0x36f2,0x9817,0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3675,0x0024,0x3643,0x0024,0x0000,0x800a, + 0x3e10,0x3801,0x0000,0x0181,0x3e10,0xb803,0x3e11,0x3806, + 0x3e11,0xf810,0x3e14,0x7812,0x3e13,0xf80e,0x2903,0x2540, + 0x3e03,0x4024,0x2903,0x5400,0x4088,0x184c,0x3413,0x184c, + 0x2903,0x5400,0x6892,0x3040,0x4080,0x3040,0x0000,0x0000, + 0x2801,0xa345,0x0000,0x0024,0x6890,0x0024,0x2903,0x2540, + 0x3cd0,0x0024,0x4080,0x0024,0x0000,0x0024,0x2801,0xa395, + 0x0000,0x0024,0x3433,0x0024,0xf400,0x4510,0x34d0,0x0024, + 0x6090,0x0024,0x2903,0x2540,0x3800,0x0024,0x4080,0x10cc, + 0xf400,0x4510,0x2801,0xa105,0x34d0,0x0024,0x2801,0xa380, + 0x0000,0x0024,0x3cd0,0x0024,0x3433,0x0024,0x34a0,0x0024, + 0xf400,0x4510,0x3430,0x4024,0x6100,0x0024,0x0000,0x0341, + 0x3840,0x0024,0x3000,0x0024,0x6012,0x0024,0x0006,0x0581, + 0x2801,0xc101,0x4012,0x0024,0xf400,0x4057,0x3702,0x0024, + 0x2000,0x0000,0x0000,0x0024,0x34d3,0x184c,0x3430,0x8024, + 0x2900,0xac40,0x3e00,0x8024,0x36f3,0x11cc,0xb888,0x104c, + 0x3c10,0x0024,0x3c90,0x4024,0x2801,0xacc0,0x34e3,0x0024, + 0x3411,0x8024,0x3491,0xc024,0x4f82,0x128c,0x3400,0x4024, + 0x4142,0x0024,0xf400,0x4050,0x3800,0x0024,0x3440,0x4024, + 0x4142,0x0024,0x6498,0x4050,0x3009,0x2007,0x0006,0x8150, + 0x3000,0x11cc,0x6402,0x104c,0x0000,0x0024,0x2801,0xaa08, + 0x0000,0x0024,0x3493,0x0024,0x2801,0xdcc0,0x34f3,0x0024, + 0x2801,0xb440,0xb888,0x0024,0x3430,0x8024,0x2900,0xac40, + 0x3e00,0x8024,0x4c8e,0x130c,0x3400,0x5bcc,0x4142,0x0024, + 0xf400,0x4050,0x3800,0x0024,0x3440,0x4024,0x4142,0x0024, + 0xf400,0x4050,0x0000,0x0201,0x3009,0x2007,0x0030,0x0010, + 0x3000,0x0024,0xb010,0x0024,0x0000,0x0024,0x2801,0xdcd5, + 0x6498,0x0024,0x0006,0x8150,0x3000,0x134c,0x6402,0x984c, + 0x0000,0x0024,0x2801,0xaf88,0x0000,0x0024,0x2801,0xdcc0, + 0x3433,0x1bcc,0x0000,0x0201,0xb888,0x104c,0x3430,0x184c, + 0x6010,0x0024,0x6402,0x3000,0x0000,0x0201,0x2801,0xbcd8, + 0x0030,0x0010,0x4090,0x124c,0x2401,0xbbc0,0x0000,0x0024, + 0x3430,0x8024,0x2900,0xac40,0x3e00,0x8024,0x4c8e,0x130c, + 0x3400,0x4024,0x4142,0x0024,0xf400,0x4050,0x3800,0x0024, + 0x3410,0x4024,0x4142,0x0024,0x6498,0x4050,0x3009,0x2007, + 0x0030,0x0010,0x0000,0x0201,0x3473,0x0024,0x3490,0x0024, + 0x3e00,0x13cc,0x2901,0x7c00,0x3444,0x8024,0x3000,0x1bcc, + 0xb010,0x0024,0x0000,0x0024,0x2801,0xdcd5,0x0000,0x0024, + 0x34c3,0x184c,0x3470,0x0024,0x3e10,0x104c,0x34c0,0x4024, + 0x2900,0xb580,0x3e00,0x4024,0x2801,0xdcc0,0x36e3,0x0024, + 0x0000,0x0801,0x3413,0x0024,0x34f0,0x0024,0x6012,0x0024, + 0x0000,0x07c1,0x2801,0xdc08,0x0000,0x0024,0x6010,0x114c, + 0xb888,0x32c0,0x6402,0x0024,0x0000,0x0101,0x2801,0xc898, + 0x0000,0x0024,0x4090,0x134c,0x2401,0xc7c0,0x3009,0x184c, + 0x3430,0x8024,0x2900,0xac40,0x3e00,0x8024,0x4c8e,0x130c, + 0x3400,0x4024,0x4142,0x0024,0xf400,0x4050,0x3800,0x0024, + 0x3410,0x4024,0x4142,0x0024,0x6498,0x4050,0x3009,0x2007, + 0x0000,0x0101,0x3433,0x1bcc,0x2903,0x5400,0x3613,0x0024, + 0x0000,0x0141,0x6090,0x118c,0x2903,0x5400,0x3ca0,0x184c, + 0x3473,0x184c,0xb888,0x3380,0x3400,0x0024,0x6402,0x0024, + 0x0000,0x0201,0x2801,0xcf58,0x0000,0x0024,0x4090,0x104c, + 0x2401,0xce80,0x0000,0x0024,0x34a0,0x8024,0x2900,0xac40, + 0x3e00,0x8024,0x0006,0x8002,0x4244,0x118c,0x4244,0x0024, + 0x6498,0x4095,0x3009,0x3440,0x3009,0x37c1,0x0000,0x0201, + 0x34f3,0x0024,0x0030,0x0010,0x3490,0x0024,0x3e00,0x138c, + 0x2901,0x7c00,0x3444,0x8024,0x3000,0x1bcc,0xb010,0x0024, + 0x0000,0x0024,0x2801,0xdcd5,0x4112,0x0024,0x3463,0x0024, + 0x34a0,0x0024,0x6012,0x0024,0x0006,0x8111,0x2801,0xd899, + 0x0000,0x0024,0x3100,0x11cc,0x3490,0x4024,0x4010,0x0024, + 0x0000,0x0a01,0x6012,0x0024,0x0006,0x8151,0x2801,0xd898, + 0x0000,0x0024,0x3613,0x114c,0x3101,0x3804,0x3490,0x8024, + 0x6428,0x138c,0x3470,0x8024,0x3423,0x0024,0x3420,0xc024, + 0x4234,0x1241,0x4380,0x4092,0x2903,0xaa00,0x0006,0x8010, + 0x2801,0xdcc0,0x3009,0x1bcc,0x0006,0x8151,0x3613,0x114c, + 0x3101,0x3804,0x3490,0x8024,0x6428,0x138c,0x3470,0x8024, + 0x3423,0x0024,0x3420,0xc024,0x4234,0x1241,0x4380,0x4092, + 0x2903,0xb3c0,0x0006,0x8010,0x2801,0xdcc0,0x3009,0x1bcc, + 0x0006,0x8050,0x6890,0x0024,0x3800,0x0024,0x3433,0x0024, + 0x34d0,0x0024,0x4080,0x0024,0x0006,0x8150,0x2801,0xe245, + 0x0000,0x0024,0x3000,0x11cc,0xb888,0x10cc,0x6402,0x3240, + 0x3493,0x0024,0x3444,0x8024,0x2801,0xe258,0x4090,0x0024, + 0x2401,0xe200,0x0000,0x0024,0x6499,0x2620,0xb78e,0x4001, + 0x0000,0x0000,0x3433,0x0024,0xcfce,0x1340,0xaf0e,0x0024, + 0x3a11,0xa807,0x36f3,0x4024,0x36f3,0xd80e,0x36f4,0x5812, + 0x36f1,0xd810,0x36f1,0x1806,0x36f0,0x9803,0x36f0,0x1801, + 0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000, + 0x36f2,0x9817,0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815, + 0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a,0x3e10,0x7802, + 0x3e10,0xf804,0x0000,0x3fc3,0x3e11,0x7806,0x3e11,0xf810, + 0xbc82,0x12cc,0x3404,0x0024,0x3023,0x0024,0x3810,0x0024, + 0x38f0,0x4024,0x3454,0x0024,0x3810,0x0024,0x38f0,0x4024, + 0x2903,0x5400,0x0000,0x0201,0x0006,0x9301,0x4088,0x134c, + 0x3400,0x8024,0xd204,0x0024,0xb234,0x0024,0x4122,0x0024, + 0xf400,0x4055,0x3500,0x0024,0x3c30,0x0024,0x0000,0x2000, + 0xb400,0x0024,0x0000,0x3001,0x2801,0xefd5,0x0000,0x3800, + 0x0000,0x0041,0xfe42,0x12cc,0x48b2,0x1090,0x3810,0x0024, + 0x38f0,0x4024,0x2802,0x10c0,0x3430,0x0024,0xb400,0x0024, + 0x6012,0x0024,0x0000,0x3801,0x2801,0xf315,0x0000,0x3c00, + 0x0000,0x07c0,0x0000,0x0041,0xb400,0x12cc,0xfe02,0x1150, + 0x48b2,0x0024,0x689a,0x2040,0x2802,0x0f80,0x38f0,0x4024, + 0xb400,0x0024,0x6012,0x0024,0x0000,0x3c01,0x2801,0xf695, + 0x0000,0x3e00,0x0000,0x03c0,0x0000,0x0085,0x4592,0x12cc, + 0xb400,0x1150,0xfe02,0x0024,0x48b2,0x0024,0x3810,0x0024, + 0x2802,0x0f80,0x38f0,0x4024,0xb400,0x0024,0x6012,0x0024, + 0x0000,0x3e01,0x2801,0xfa15,0x0000,0x3f00,0x0000,0x01c0, + 0xf20a,0x12cc,0xb400,0x1150,0xf252,0x0024,0xfe02,0x0024, + 0x48b2,0x0024,0x3810,0x0024,0x2802,0x0f80,0x38f0,0x4024, + 0xb400,0x130c,0x6012,0x0024,0x0000,0x3f01,0x2801,0xfd95, + 0x4390,0x0024,0x0000,0x0041,0x0000,0x0105,0x4590,0x13cc, + 0xb400,0x1150,0xfe02,0x0024,0x48b2,0x0024,0x3810,0x0024, + 0x2802,0x0f80,0x38f0,0x4024,0xb400,0x0024,0x6012,0x1100, + 0x0000,0x01c1,0x2802,0x0115,0x0000,0x0024,0x0000,0x0041, + 0x0000,0x0145,0x6890,0x12cc,0xb400,0x1150,0xfe02,0x0024, + 0x48b2,0x0024,0x3810,0x0024,0x2802,0x0f80,0x38f0,0x4024, + 0x6012,0x0024,0x0000,0x3f81,0x2802,0x0395,0xb430,0x0024, + 0x6012,0x0024,0x0000,0x0024,0x2802,0x0395,0x0000,0x0024, + 0x2802,0x0f80,0x0000,0x0185,0x2802,0x10c0,0xc890,0x0024, + 0x0000,0x3fc3,0x0000,0x0201,0x34d3,0x0024,0x2903,0x5400, + 0x3433,0x184c,0x0006,0x9301,0x4088,0x134c,0x3400,0x8024, + 0xd204,0x0024,0xb234,0x0024,0x4122,0x0024,0xf400,0x4055, + 0x0000,0x2001,0x3500,0x0024,0x3c30,0x0024,0x0000,0x3000, + 0xb400,0x0024,0x6012,0x0024,0x0000,0x0182,0x2802,0x09c5, + 0x0000,0x0024,0x2802,0x10c0,0xc890,0x0024,0x459a,0x12cc, + 0x3404,0x0024,0x3023,0x0024,0x3010,0x0024,0x30d0,0x4024, + 0xac22,0x0046,0x003f,0xf982,0x3011,0xc024,0x0000,0x0023, + 0xaf2e,0x0024,0x0000,0x0182,0xccf2,0x0024,0x0000,0x0fc6, + 0x0000,0x0047,0xb46c,0x2040,0xfe6e,0x23c1,0x3454,0x0024, + 0x3010,0x0024,0x30f0,0x4024,0xac22,0x0024,0xccb2,0x0024, + 0x3810,0x0024,0x38f0,0x4024,0x458a,0x134c,0x0000,0x0201, + 0x2802,0x04d5,0x0000,0x3fc3,0x3430,0x0024,0x36f1,0xd810, + 0x36f1,0x5806,0x36f0,0xd804,0x36f0,0x5802,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, + 0x3675,0x0024,0x3633,0x0024,0x0000,0x800a,0x3e10,0x3801, + 0x3e10,0xb803,0x3e11,0x3805,0x3e11,0xb807,0x3e14,0x3811, + 0x3e14,0xb813,0x3e13,0xf80e,0x3e03,0x4024,0x2903,0x9100, + 0x0000,0x0381,0x000f,0xff81,0x6012,0x184c,0x0000,0x0201, + 0x2802,0x1945,0x0000,0x0024,0x2903,0x5400,0x0002,0xfc88, + 0x3613,0x0024,0x0000,0x0401,0x0006,0x8a10,0x2900,0xbf40, + 0xb880,0x1bcc,0xb880,0x11cc,0x3413,0x184c,0x3c90,0x0024, + 0x2903,0x5400,0x34f3,0x0024,0x3473,0x184c,0x3c00,0x0000, + 0x4080,0x0024,0x0006,0x9301,0x2802,0x1ec5,0x003f,0xfe04, + 0x3490,0x8024,0xa244,0x0024,0x2903,0x7400,0xb880,0x0024, + 0x2900,0xbf40,0x003f,0xfe04,0x3473,0x184c,0x0006,0x8091, + 0x3413,0x0024,0x34f0,0x8024,0x3400,0xc024,0xa346,0x0024, + 0xd234,0x0024,0x0000,0x3fc3,0xb234,0x0024,0x4122,0x1042, + 0xf400,0x4055,0x0006,0x9301,0x3500,0x0024,0xd024,0x3000, + 0xb234,0x0024,0x4122,0x0024,0x6892,0x4055,0x3500,0x0024, + 0x3cf0,0x0024,0x34a0,0x0024,0xf100,0x0024,0xb010,0x0024, + 0x3c60,0x0024,0x34b0,0x0024,0xb010,0x0024,0x0000,0x0201, + 0x2903,0x5400,0x3ce0,0x0024,0x0006,0x9301,0x3473,0x184c, + 0x3c10,0x0024,0x34f0,0x8024,0x3410,0xc024,0xd234,0x0024, + 0x0000,0x3fc3,0xb234,0x0024,0x4122,0x0024,0xf400,0x4055, + 0x003f,0xff01,0x3500,0x0024,0x3cf0,0x0024,0x34c0,0x0024, + 0xa010,0x0024,0x0000,0x03c1,0x3c40,0x0024,0x34d0,0x0024, + 0xb010,0x0024,0x0000,0x0201,0x2903,0x5400,0x3cc0,0x0024, + 0x0006,0x9301,0x3473,0x0024,0x3c10,0x0024,0x34f0,0x8024, + 0x3410,0xc024,0xd234,0x0024,0x0000,0x3fc3,0xb234,0x0024, + 0x4122,0x0024,0xf400,0x4055,0x003f,0xff01,0x3500,0x0024, + 0x3cf0,0x0024,0x3400,0x0024,0xa010,0x0024,0x0000,0x01c1, + 0x3900,0x0024,0x34e0,0x0024,0xf100,0x0024,0xb010,0x0024, + 0x6892,0x3080,0x34f0,0x0024,0xb010,0x0024,0x3cb0,0x0024, + 0x3450,0x0024,0x34a0,0x4024,0xc010,0x0024,0x0000,0x0181, + 0x2802,0x3345,0x3100,0x0024,0x6890,0x07cc,0x2802,0xfc80, + 0x3900,0x0024,0x6012,0x0024,0x0000,0x0201,0x2802,0x34d8, + 0x0000,0x0024,0x2802,0x37c0,0x6090,0x044c,0x6012,0x0024, + 0x0000,0x0281,0x2802,0x3708,0x6012,0x0024,0x0000,0x0080, + 0x2802,0x3719,0x0000,0x0024,0x2802,0x37c0,0x3113,0x0024, + 0x6890,0x07cc,0x2802,0xfc80,0x3900,0x0024,0x0000,0x0201, + 0x3900,0x114c,0x34b0,0x0024,0x6012,0x0024,0x0006,0x08c1, + 0x2802,0x4201,0x4012,0x0024,0xf400,0x4057,0x3702,0x0024, + 0x2000,0x0000,0x0000,0x0024,0x2802,0x4200,0x0000,0x0024, + 0x0000,0x0200,0x0006,0x8110,0x2802,0x4200,0x3800,0x0024, + 0x0000,0x0300,0x0006,0x8110,0x2802,0x4200,0x3800,0x0024, + 0x0006,0x8050,0x6890,0x0024,0x2802,0xfc80,0x3800,0x0024, + 0x0000,0x0400,0x0006,0x8110,0x2802,0x4200,0x3800,0x0024, + 0x0000,0x0500,0x0006,0x8110,0x2802,0x4200,0x3800,0x0024, + 0x0000,0x0600,0x0006,0x8110,0x2802,0x4200,0x3800,0x0024, + 0x0006,0x8050,0x6890,0x0024,0x2802,0xfc80,0x3800,0x0024, + 0x3423,0x184c,0x3460,0x0024,0x4080,0x0024,0x0006,0x8200, + 0x2802,0x4745,0x3e10,0x0024,0x0000,0x01c0,0x3e10,0x0024, + 0x3490,0x0024,0x2901,0xe540,0x3e00,0x13cc,0x36d3,0x11cc, + 0x3413,0x0024,0x4080,0x3240,0x34f3,0x0024,0x2802,0x4b18, + 0x0000,0x0024,0x0006,0x8010,0x6890,0x0024,0x2802,0xfc80, + 0x3800,0x0024,0x0000,0x0180,0x3e10,0x0024,0x3490,0x0024, + 0x2901,0xe540,0x3e00,0x13cc,0x36d3,0x11cc,0x3413,0x0024, + 0x4080,0x3240,0x34f3,0x0024,0x2802,0x4b18,0x0000,0x0024, + 0x0006,0x8010,0x6890,0x0024,0x2802,0xfc80,0x3800,0x0024, + 0x0000,0x0201,0x3433,0x0024,0x34d0,0x0024,0x6012,0x0024, + 0x0006,0x0ac1,0x2802,0x5d01,0x4012,0x0024,0xf400,0x4057, + 0x3702,0x0024,0x2000,0x0000,0x0000,0x0024,0x0006,0x8050, + 0x6890,0x0024,0x2802,0xfc80,0x3800,0x0024,0x0000,0x3000, + 0x2802,0x5ec0,0x0006,0x8150,0x0000,0x9000,0x0006,0x8150, + 0x3433,0x0024,0x34d0,0x4024,0x4192,0x0024,0x4192,0x0024, + 0x2802,0x5ec0,0xa010,0x0024,0x0000,0x0201,0x0006,0x8150, + 0x2903,0x5400,0x3613,0x0024,0x0006,0x9301,0x3473,0x0024, + 0x3c10,0x0024,0x34f0,0x8024,0x3410,0xc024,0xd234,0x0024, + 0x0000,0x3fc3,0xb234,0x0024,0x4122,0x0024,0xf400,0x4055, + 0x3500,0x0024,0x3cf0,0x0024,0x3490,0x0024,0x2802,0x5ec0, + 0x6090,0x0024,0x003f,0xfe04,0x0000,0x0401,0x0006,0x8150, + 0x2903,0x5400,0x3613,0x0024,0x0006,0x9301,0x3473,0x0024, + 0x3c10,0x0024,0x34f0,0x8024,0x3400,0xc024,0xa346,0x0024, + 0xd234,0x0024,0x0000,0x3fc3,0xb234,0x0024,0x4122,0x1042, + 0xf400,0x4055,0x0006,0x9301,0x3500,0x0024,0xd024,0x3000, + 0xb234,0x0024,0x4122,0x0024,0xf400,0x4055,0x3500,0x0024, + 0x3cf0,0x0024,0x3490,0x0024,0x2802,0x5ec0,0x6090,0x0024, + 0x0000,0x4000,0x0000,0x0202,0x0006,0x8150,0x3433,0x0024, + 0x34d0,0x4024,0x6122,0x0024,0xa010,0x0024,0x0004,0x8001, + 0x3800,0x110c,0x0006,0x8150,0x3000,0x0024,0x6012,0x1300, + 0x0000,0x0401,0x2802,0x6189,0x0000,0x0024,0x6890,0x82cc, + 0x2802,0xfc80,0x3800,0x0024,0x6012,0x0024,0x0006,0x0cc1, + 0x2802,0x8901,0x4012,0x0024,0xf400,0x4057,0x3702,0x0024, + 0x2000,0x0000,0x0000,0x0024,0x2802,0x8900,0x0000,0x0024, + 0x0016,0x2200,0x0006,0x8190,0x6892,0x2040,0x2802,0x8900, + 0x38f0,0x4024,0x002c,0x4400,0x0000,0x0081,0x0006,0x8190, + 0x3810,0x0024,0x2802,0x8900,0x38f0,0x4024,0x003b,0x8000, + 0x0000,0x0081,0x0006,0x8190,0x3810,0x0024,0x2802,0x8900, + 0x38f0,0x4024,0x0007,0xd000,0x0006,0x8190,0xb882,0x2040, + 0x2802,0x8900,0x38f0,0x4024,0x000f,0xa000,0x0006,0x8190, + 0xb882,0x2040,0x2802,0x8900,0x38f0,0x4024,0x0015,0x8880, + 0x0006,0x8190,0xb882,0x2040,0x2802,0x8900,0x38f0,0x4024, + 0x0017,0x7000,0x0006,0x8190,0xb882,0x2040,0x2802,0x8900, + 0x38f0,0x4024,0x001f,0x4000,0x0006,0x8190,0xb882,0x2040, + 0x2802,0x8900,0x38f0,0x4024,0x002b,0x1100,0x0006,0x8190, + 0xb882,0x2040,0x2802,0x8900,0x38f0,0x4024,0x002e,0xe000, + 0x0006,0x8190,0xb882,0x2040,0x2802,0x8900,0x38f0,0x4024, + 0x001d,0xc000,0x0006,0x8190,0x6892,0x2040,0x2802,0x8900, + 0x38f0,0x4024,0x0006,0x8190,0x0000,0x0201,0x0000,0xfa04, + 0x2903,0x5400,0x3613,0x0024,0x0006,0x9301,0xb88a,0x11cc, + 0x3c10,0x0024,0x34f0,0x8024,0x3410,0xc024,0xd234,0x0024, + 0x0000,0x3fc3,0xb234,0x0024,0x4122,0x0024,0xf400,0x4055, + 0x3500,0x0024,0x3cf0,0x0024,0x3490,0x0024,0xfe50,0x4005, + 0x48b2,0x0024,0xfeca,0x0024,0x40b2,0x0024,0x3810,0x0024, + 0x2802,0x8900,0x38f0,0x4024,0x003f,0xfe04,0x0000,0x0401, + 0x0006,0x8190,0x2903,0x5400,0x3613,0x0024,0x0006,0x9301, + 0x3473,0x0024,0x3c10,0x0024,0x34f0,0x8024,0x3400,0xc024, + 0xa346,0x0024,0xd234,0x0024,0x0000,0x3fc3,0xb234,0x0024, + 0x4122,0x1042,0xf400,0x4055,0x0006,0x9301,0x3500,0x0024, + 0xd024,0x3000,0xb234,0x0024,0x4122,0x0024,0xf400,0x4055, + 0x0000,0x0041,0x3500,0x0024,0x3cf0,0x0024,0x3490,0x0024, + 0xfe02,0x0024,0x48b2,0x0024,0x3810,0x0024,0x2802,0x8900, + 0x38f0,0x4024,0x003f,0xfe04,0x0000,0x0401,0x0006,0x8190, + 0x2903,0x5400,0x3613,0x0024,0x0006,0x9301,0x3473,0x0024, + 0x3c10,0x0024,0x34f0,0x8024,0x3400,0xc024,0xa346,0x0024, + 0xd234,0x0024,0x0000,0x3fc3,0xb234,0x0024,0x4122,0x1042, + 0xf400,0x4055,0x0006,0x9301,0x3500,0x0024,0xd024,0x3000, + 0xb234,0x0024,0x4122,0x0024,0xf400,0x4055,0x3500,0x0024, + 0x3cf0,0x0024,0x0000,0x0280,0x3490,0x4024,0xfe02,0x0024, + 0x48b2,0x0024,0x3810,0x0024,0x2802,0x8900,0x38f0,0x4024, + 0x0006,0x8010,0x6890,0x0024,0x2802,0xfc80,0x3800,0x0024, + 0x0000,0x0201,0x2903,0x5400,0x3613,0x11cc,0x3c10,0x0024, + 0x3490,0x4024,0x6014,0x13cc,0x0000,0x0081,0x2802,0x8c45, + 0x0006,0x80d0,0x0006,0x8010,0x6890,0x0024,0x2802,0xfc80, + 0x3800,0x0024,0x3010,0x0024,0x6012,0x0024,0x0000,0x0241, + 0x2802,0xabc9,0x0006,0x8112,0x0008,0x0001,0x3009,0x184c, + 0x3e10,0x4024,0x3000,0x8024,0x2901,0x9840,0x3e00,0x8024, + 0x36f3,0x004c,0x3000,0x3844,0x0008,0x0010,0xb884,0x3840, + 0x0000,0x0400,0x3e00,0x8024,0x3201,0x0024,0x2903,0x3400, + 0x6408,0x4091,0x0001,0x0000,0x000b,0x8011,0x0004,0x0010, + 0x36e3,0x0024,0x2915,0x8300,0x3009,0x1bc4,0x000b,0x8000, + 0x3613,0x0024,0x3e10,0x0024,0x3200,0xc024,0x2901,0x9840, + 0x3e00,0xc024,0x36f3,0x084c,0x32f0,0xf844,0x3e10,0xc024, + 0x3e00,0x8024,0x2b01,0x0091,0x0000,0x0400,0xf204,0x0804, + 0x2903,0x3400,0x6408,0x0024,0x000b,0x8011,0x0008,0x0010, + 0x0000,0x0084,0x36d3,0x0024,0x2915,0x8300,0x0003,0x8000, + 0x0005,0x0010,0x0001,0x0000,0x2915,0x8300,0x000f,0x0011, + 0x1006,0x0ac0,0x32f3,0x11cc,0x3200,0xd08c,0xff34,0x0024, + 0x48b6,0x0024,0x4020,0x0024,0x3c90,0x0024,0x2802,0xa800, + 0x34e3,0x0024,0x0006,0x8112,0x3613,0x0024,0x3e10,0x0024, + 0x3000,0x4024,0x2901,0x9840,0x3e00,0x4024,0x36f3,0x004c, + 0x3000,0x7844,0xb884,0x3841,0x2b01,0x0091,0x0000,0x0400, + 0x3e00,0x8024,0x3201,0x0024,0x2903,0x3400,0x6408,0x0024, + 0x0003,0x8000,0x000b,0x8011,0x0008,0x0010,0x36e3,0x11cc, + 0x3423,0x0024,0x3494,0xc024,0x2903,0x5f80,0x3301,0x138c, + 0x0001,0x0000,0x000f,0x0011,0x0004,0x0010,0x2903,0x64c0, + 0x3301,0x0024,0xf400,0x4510,0x000b,0x8011,0x3073,0x0024, + 0x3023,0x0024,0x3000,0x0024,0x6090,0x0024,0x3800,0x0024, + 0x0003,0x8000,0x3004,0xc024,0x0008,0x0010,0x2903,0x64c0, + 0x3301,0x0024,0x0001,0x0000,0x000f,0x0011,0x0005,0x0010, + 0x2903,0x64c0,0x3301,0x0024,0xf400,0x4510,0x3073,0x1bc4, + 0x6498,0x008c,0x3000,0x0024,0x6090,0x0024,0x3800,0x0024, + 0x0006,0x80d0,0x3000,0x0024,0x6402,0x0024,0x0006,0x8110, + 0x2802,0x9b48,0x000b,0x8000,0x000b,0x8010,0x0001,0x0000, + 0x2903,0xc580,0x0004,0x0011,0x0005,0x0011,0x000b,0x8010, + 0x0001,0x0000,0x291f,0xc6c0,0x0002,0xbd08,0x30e1,0x184c, + 0x3000,0x0024,0x6012,0x0024,0x0008,0x0001,0x2802,0xad95, + 0x0000,0x0024,0x6498,0x0024,0x3e10,0x4024,0x0000,0x0081, + 0x2901,0x9840,0x3e01,0x0024,0x36e3,0x004c,0x3000,0x0024, + 0x6012,0x0024,0x000b,0x8011,0x2802,0xb9d5,0x0006,0x8112, + 0x0000,0x0201,0x0004,0x0010,0x2915,0x8300,0x0001,0x0000, + 0x000b,0x8011,0x0005,0x0010,0x291f,0xc6c0,0x0001,0x0000, + 0x0006,0x8110,0x30e1,0x0024,0x3000,0x0024,0x6012,0x0024, + 0x0000,0x0281,0x2802,0xb4c5,0x6012,0x0024,0x000b,0x8001, + 0x2802,0xb555,0x3613,0x0024,0x36f3,0x0024,0x000b,0x8001, + 0x6498,0x184c,0x0006,0x8112,0x0003,0x8000,0x3e10,0x4024, + 0x2901,0x9840,0x3e01,0x0024,0x36f3,0x0024,0x3009,0x3844, + 0x3e10,0x0024,0x0000,0x0400,0x3000,0x8024,0x0008,0x0010, + 0x3e00,0x8024,0x3201,0x0024,0x2903,0x3400,0x6408,0x4051, + 0x36e3,0x0024,0x2802,0xbd00,0x3009,0x1bc4,0x0000,0x0400, + 0x0000,0x0011,0x3613,0x008c,0x30d0,0x7844,0x3e10,0x4024, + 0x3000,0x8024,0x0008,0x0010,0x3e00,0x8024,0x3201,0x0024, + 0x2903,0x3400,0x6408,0x0024,0x36e3,0x0024,0x3009,0x1bc4, + 0x0006,0x8a10,0x0000,0x01c1,0x3009,0x0000,0xb010,0x0024, + 0x0000,0x0024,0x2802,0xc105,0x6192,0x0024,0x2903,0x5400, + 0x6102,0x184c,0x4088,0x0024,0x0000,0x0024,0x2802,0xc105, + 0x0000,0x0024,0x0006,0x8051,0x6890,0x0024,0x3900,0x0024, + 0x3009,0x0000,0x4080,0x0024,0x0000,0x0024,0x2903,0x7345, + 0x0002,0xc5c8,0x0006,0x9f92,0x0000,0x4003,0x3009,0x0811, + 0x3100,0x8024,0xffa6,0x0024,0x48b6,0x0024,0x2903,0x7340, + 0x4384,0x0024,0x2903,0x7400,0x3613,0x0024,0x2900,0xbf40, + 0x0000,0x0024,0x2903,0x7340,0x0000,0x0024,0x0000,0x0401, + 0x3473,0x184c,0x2903,0x5400,0x3c10,0x0024,0x3c90,0x0024, + 0x290b,0x1400,0x34f3,0x0024,0x4080,0x0024,0x0000,0x0024, + 0x2802,0xf915,0x0000,0x0024,0x3473,0x0024,0x3410,0x0024, + 0x34a0,0x4024,0x6014,0x1380,0x0000,0x0024,0x2802,0xcdc5, + 0x4080,0x0024,0x0006,0x8011,0x6890,0x0024,0xb882,0x2400, + 0x0004,0x8000,0x2914,0xbec0,0x0008,0x0010,0x0000,0x0400, + 0x3143,0x108c,0x6890,0x27c0,0x3920,0x0024,0x0004,0x8000, + 0x3900,0x0024,0x34e0,0x0024,0x4080,0x0024,0x0006,0x8150, + 0x2802,0xd1c5,0x0000,0x3200,0x0000,0x0142,0x0006,0x8210, + 0x3613,0x0024,0x3e00,0x7800,0x3011,0x8024,0x30d1,0xc024, + 0xfef4,0x4087,0x48b6,0x0040,0xfeee,0x03c1,0x2914,0xa580, + 0x42b6,0x0024,0x2802,0xd5c0,0x0007,0x89d0,0x0000,0x0142, + 0x3613,0x0024,0x3e00,0x7800,0x3031,0x8024,0x3010,0x0024, + 0x30d0,0x4024,0xfe9c,0x4181,0x48be,0x0024,0xfe82,0x0040, + 0x46be,0x03c1,0xfef4,0x4087,0x48b6,0x0024,0xfeee,0x0024, + 0x2914,0xa580,0x42b6,0x0024,0x0007,0x89d0,0x0006,0x8191, + 0x4c8a,0x9800,0xfed0,0x4005,0x48b2,0x0024,0xfeca,0x0024, + 0x40b2,0x0024,0x3810,0x0024,0x38f0,0x4024,0x3111,0x8024, + 0x468a,0x0707,0x2908,0xbe80,0x3101,0x0024,0x3123,0x11cc, + 0x3100,0x108c,0x3009,0x3000,0x0004,0x8000,0x3009,0x1241, + 0x6014,0x138c,0x000b,0x8011,0x2802,0xdc01,0x0000,0x0024, + 0x3473,0x0024,0x3423,0x0024,0x3009,0x3240,0x34e3,0x0024, + 0x2802,0xf740,0x0008,0x0012,0x0000,0x0081,0x2802,0xdd89, + 0x0006,0x80d0,0xf400,0x4004,0x3000,0x0024,0x6012,0x0024, + 0x0000,0x0005,0x2802,0xe309,0x0000,0x0024,0x6540,0x0024, + 0x0000,0x0024,0x2802,0xf358,0x4490,0x0024,0x2402,0xe240, + 0x0000,0x0024,0x0006,0x8301,0x4554,0x0800,0x4122,0x0024, + 0x659a,0x4055,0x0006,0x8341,0x3d00,0x0840,0x4122,0x0024, + 0xf400,0x4055,0x3d00,0x0024,0x2802,0xf340,0x0000,0x0024, + 0x4090,0x0024,0xf400,0x4480,0x2802,0xe855,0x000b,0x8001, + 0x6540,0x0024,0x0000,0x0024,0x2802,0xf358,0x4490,0x0024, + 0x2402,0xe780,0x0000,0x0024,0x0006,0x8301,0x4554,0x0800, + 0x4122,0x0024,0x659a,0x4055,0x0006,0x8341,0x4122,0x3400, + 0xf400,0x4055,0x3210,0x0024,0x3d00,0x0024,0x2802,0xf340, + 0x0000,0x0024,0x6014,0x0024,0x0001,0x0000,0x2802,0xef95, + 0x0003,0x8001,0x0008,0x0012,0x0008,0x0010,0x0006,0x8153, + 0x3613,0x0024,0x3009,0x3811,0x2903,0xc580,0x0004,0x0011, + 0x0008,0x0010,0x0001,0x0000,0x291f,0xc6c0,0x0005,0x0011, + 0x000f,0x0011,0x0008,0x0010,0x33d0,0x184c,0x6010,0xb844, + 0x3e10,0x0024,0x0000,0x0400,0x3320,0x4024,0x3e00,0x4024, + 0x3301,0x0024,0x2903,0x3400,0x6408,0x0024,0x36e3,0x0024, + 0x3009,0x1bc4,0x3009,0x1bd1,0x6540,0x0024,0x0000,0x0024, + 0x2802,0xf358,0x4490,0x0024,0x2402,0xf300,0x0000,0x0024, + 0x0006,0x8301,0x4554,0x0840,0x4122,0x0024,0x659a,0x4055, + 0x0006,0x8341,0x4122,0x3400,0xf400,0x4055,0x3110,0x0024, + 0x3d00,0x0024,0xf400,0x4510,0x0030,0x0013,0x3073,0x184c, + 0x3e11,0x008c,0x3009,0x0001,0x6140,0x0024,0x0000,0x0201, + 0x3009,0x2000,0x0006,0x8300,0x290c,0x7300,0x3e10,0x0024, + 0x3300,0x1b8c,0xb010,0x0024,0x0000,0x0024,0x2802,0xf915, + 0x0000,0x0024,0x3473,0x0024,0x3423,0x0024,0x3009,0x1240, + 0x4080,0x138c,0x0000,0x0804,0x2802,0xdc95,0x6402,0x0024, + 0x0006,0xd312,0x0006,0xd310,0x0006,0x8191,0x3010,0x984c, + 0x30f0,0xc024,0x0000,0x0021,0xf2d6,0x07c6,0x290a,0xf5c0, + 0x4682,0x0400,0x6894,0x0840,0xb886,0x0bc1,0xbcd6,0x0024, + 0x3a10,0x8024,0x3af0,0xc024,0x36f3,0x4024,0x36f3,0xd80e, + 0x36f4,0x9813,0x36f4,0x1811,0x36f1,0x9807,0x36f1,0x1805, + 0x36f0,0x9803,0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024, + 0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817,0x3613,0x0024, + 0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814,0x3615,0x0024, + 0x0000,0x800a,0x3e10,0x3801,0x0020,0x0001,0x3e14,0x3811, + 0x0030,0x0050,0x0030,0x0251,0x3e04,0xb813,0x3000,0x0024, + 0xc012,0x0024,0x0019,0x9300,0x3800,0x4024,0x2903,0x7100, + 0x3900,0x0024,0x2903,0x8500,0x0000,0x0300,0xb882,0x0024, + 0x2914,0xbec0,0x0006,0x8010,0x0000,0x1540,0x0007,0x8190, + 0x2900,0xa200,0x3800,0x0024,0x4080,0x0024,0x0000,0x0024, + 0x2803,0x0cd5,0x0000,0x0024,0x0006,0x8012,0x3200,0x0024, + 0x4080,0x0024,0x0030,0x0010,0x2803,0x0cd5,0x0000,0x0201, + 0x3000,0x0024,0xb010,0x0024,0x0000,0x0024,0x2803,0x0cd5, + 0x0000,0x0024,0x2900,0xa200,0x0000,0x0024,0x4080,0x0024, + 0x0006,0x8010,0x2803,0x0cd5,0x3000,0x0024,0x4080,0x0024, + 0x0000,0x0201,0x2803,0x0905,0x0030,0x0010,0x0030,0x0050, + 0xf292,0x0000,0xb012,0x0024,0x3800,0x4024,0x0030,0x0010, + 0x0000,0x0201,0x3000,0x0024,0xb010,0x0024,0x0000,0x0024, + 0x2900,0xbed5,0x0003,0x1688,0x0006,0x8011,0x3100,0x0024, + 0x4080,0x0024,0x0000,0x0024,0x2803,0x14c5,0x0000,0x0024, + 0x0007,0x8a52,0x3200,0x0024,0x4080,0x0024,0x0000,0x0024, + 0x2803,0x14c9,0x0000,0x0024,0xf292,0x0800,0x6012,0x0024, + 0x0000,0x0000,0x2803,0x1485,0x0000,0x0024,0x3200,0x0024, + 0x4090,0x0024,0xb880,0x2800,0x3900,0x0024,0x3100,0x0024, + 0x4080,0x0024,0x0000,0x0024,0x2902,0x1305,0x0003,0x0dc8, + 0x2900,0xbec0,0x0000,0x0024,0x0000,0x0010,0x0006,0x9f51, + 0x0006,0x9f92,0x0030,0x0493,0x0000,0x0201,0x6890,0xa410, + 0x3b00,0x2810,0x0006,0x8a10,0x3009,0x0000,0x6012,0x0024, + 0x0006,0x9fd0,0x2803,0x1a08,0xb880,0x0024,0x6890,0x0024, + 0x3009,0x2000,0x36f4,0x9813,0x36f4,0x1811,0x36f0,0x1801, + 0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000, + 0x36f2,0x9817,0x3613,0x0024,0x3e10,0xb810,0x3e11,0x3805, + 0x3e02,0x0024,0x0030,0x0010,0xce9a,0x0002,0x0000,0x0200, + 0x2903,0x2540,0xb024,0x0024,0xc020,0x0024,0x0000,0x0200, + 0x2803,0x1e05,0x6e9a,0x0002,0x4182,0x0024,0x0000,0x0400, + 0x2803,0x23c5,0xae1a,0x0024,0x6104,0x984c,0x0000,0x0024, + 0x2903,0x5409,0x0003,0x2388,0x6103,0xe4e5,0x2903,0x5400, + 0x408a,0x188c,0x2903,0x5400,0x408a,0x4141,0x4583,0x6465, + 0x2803,0x23c0,0xceca,0x1bcc,0xc408,0x0024,0xf2e2,0x1bc8, + 0x36f1,0x1805,0x2000,0x0011,0x36f0,0x9810,0x2000,0x0000, + 0xdc92,0x0024,0x0006,0x8a17,0x3613,0x1c00,0x6093,0xe1e3, + 0x0000,0x03c3,0x0006,0x9f95,0xb132,0x9415,0x3500,0xfc01, + 0x2803,0x3355,0xa306,0x0024,0x0006,0xd397,0x003f,0xc001, + 0x3500,0x184c,0xb011,0xe4e5,0xb182,0x1c04,0xd400,0x184c, + 0x0000,0x0205,0xac52,0x3802,0x0006,0xd3c2,0x4212,0x0024, + 0xf400,0x4057,0xb182,0x1c04,0xd400,0x0024,0xac52,0x1404, + 0xd142,0x0024,0x0000,0x3fc4,0xb142,0x0024,0x4122,0x1bc2, + 0xf400,0x4057,0x3700,0x4024,0xd101,0x6465,0x0006,0xd397, + 0x3f00,0x3814,0x0025,0xffd4,0x0006,0xd317,0x3710,0x160c, + 0x0006,0x9f94,0x37f0,0x73d5,0x6c92,0x3808,0x3f10,0x0024, + 0x3ff0,0x4024,0x3009,0x1040,0x3009,0x13c1,0x6010,0x0024, + 0x0000,0x0024,0x2903,0x8dc5,0x0003,0x2f48,0x2803,0x3194, + 0x0006,0x0001,0x4010,0x0024,0x0005,0xf601,0x6010,0x0024, + 0x0000,0x0040,0x2803,0x3314,0x0030,0x0497,0x3f00,0x0024, + 0x36f2,0x1814,0x4330,0x9803,0x2000,0x0000,0x8880,0x1bc1, + 0x3613,0x0024,0x3e22,0xb806,0x3e05,0xb814,0x3615,0x0024, + 0x0000,0x800a,0x3e10,0x3801,0x3e10,0xb803,0x3e11,0x7807, + 0x6848,0x930c,0x3411,0x780d,0x459a,0x10c0,0x0000,0x0201, + 0x6012,0x384e,0x0000,0x0241,0x2803,0x3a95,0x6012,0x380f, + 0x2403,0x39c5,0x0000,0x0024,0x3000,0x0001,0x3101,0x8407, + 0x6cfe,0x0024,0xac42,0x0024,0xaf4e,0x2040,0x3911,0x8024, + 0x2803,0x4640,0x0000,0x0024,0x0000,0x0281,0x2803,0x3dd5, + 0x6012,0x4455,0x2403,0x3d05,0x0000,0x0024,0x3000,0x0001, + 0x3101,0x8407,0x4cf2,0x0024,0xac42,0x0024,0xaf4e,0x2040, + 0x3911,0x8024,0x2803,0x4640,0x0000,0x0024,0x0000,0x0024, + 0x2803,0x4215,0x4080,0x0024,0x3110,0x0401,0xf20f,0x0203, + 0x2403,0x4145,0x8dd6,0x0024,0x4dce,0x0024,0xf1fe,0x0024, + 0xaf4e,0x0024,0x6dc6,0x2046,0xf1df,0x0203,0xaf4f,0x1011, + 0xf20e,0x07cc,0x8dd6,0x2486,0x2803,0x4640,0x0000,0x0024, + 0x0000,0x0024,0x2803,0x4495,0x0000,0x0024,0x0fff,0xffd1, + 0x2403,0x43c5,0x3010,0x0001,0xac4f,0x0801,0x3821,0x8024, + 0x2803,0x4640,0x0000,0x0024,0x0fff,0xffd1,0x2403,0x4605, + 0x3010,0x0001,0x3501,0x9407,0xac47,0x0801,0xaf4e,0x2082, + 0x3d11,0x8024,0x36f3,0xc024,0x36f3,0x980d,0x36f1,0x5807, + 0x36f0,0x9803,0x36f0,0x1801,0x3405,0x9014,0x36e3,0x0024, + 0x2000,0x0000,0x36f2,0x9806,0x0006,0x9f97,0x3e00,0x5c15, + 0x0006,0xd397,0x003f,0xc001,0x3500,0x3840,0xb011,0xe4e5, + 0xb182,0x1c04,0xd400,0x184c,0x0000,0x0205,0xac52,0x3802, + 0x0006,0xd3c2,0x4212,0x0024,0xb182,0x4057,0x3701,0x0024, + 0xd400,0x0024,0xac52,0x1404,0xd142,0x0024,0x0000,0x3fc4, + 0xb142,0x0024,0x4122,0x1bc2,0xf400,0x4057,0x3700,0x4024, + 0xd101,0x6465,0x0006,0xd397,0x3f00,0x3814,0x0025,0xffd4, + 0x0006,0xd317,0x3710,0x160c,0x0006,0x9f94,0x37f0,0x73d5, + 0x6c92,0x0024,0x3f10,0x1040,0x3ff0,0x53c1,0x6010,0x0024, + 0x0000,0x0024,0x2803,0x5214,0x0006,0x0001,0x4010,0x0024, + 0x0005,0xf601,0x6010,0x9bd4,0x0000,0x0040,0x2803,0x5394, + 0x0030,0x0497,0x3f00,0x0024,0x2000,0x0000,0x36f0,0x5800, + 0x3e10,0xb812,0x3e11,0xb810,0x3e12,0x0024,0x0006,0x9f92, + 0x0025,0xffd0,0x3e04,0x4bd1,0x3181,0xf847,0xb68c,0x4440, + 0x3009,0x0802,0x6024,0x3806,0x0006,0x8a10,0x2903,0x8dc5, + 0x0003,0x5608,0x0000,0x0800,0x6101,0x1602,0xaf2e,0x0024, + 0x4214,0x1be3,0xaf0e,0x1811,0x0fff,0xfc00,0xb200,0x9bc7, + 0x0000,0x03c0,0x2803,0x5a45,0xb204,0xa002,0x2903,0x4880, + 0x3613,0x2002,0x4680,0x1bc8,0x36f1,0x9810,0x2000,0x0000, + 0x36f0,0x9812,0x0000,0x0400,0x6102,0x0024,0x3e11,0x3805, + 0x2803,0x5e49,0x3e02,0x0024,0x2903,0x5400,0x408a,0x188c, + 0x2903,0x5400,0x408a,0x4141,0x4582,0x1bc8,0x2000,0x0000, + 0x36f1,0x1805,0x2903,0x5400,0x4102,0x184c,0xb182,0x1bc8, + 0x2000,0x0000,0x36f1,0x1805,0x3613,0x0024,0x3e12,0xb815, + 0x3e11,0xb807,0x3e13,0xf80e,0x3e03,0x4024,0x680c,0x0024, + 0x0000,0x0024,0x2803,0x6398,0x409c,0x0024,0x2403,0x6346, + 0x0000,0x000a,0x3111,0xc024,0xfe4e,0x0007,0x47be,0x0024, + 0xf6fe,0x0024,0x3811,0xc024,0x36f3,0x4024,0x36f3,0xd80e, + 0x36f1,0x9807,0x2000,0x0000,0x36f2,0x9815,0x3613,0x0024, + 0x3e12,0xb815,0x3e11,0xb807,0x3e13,0xf80e,0x3e03,0x4024, + 0x680c,0x0024,0x0000,0x0024,0x2803,0x68d8,0x409c,0x0024, + 0x2403,0x6886,0x0000,0x000a,0x3111,0xc024,0xfe4e,0x8007, + 0x47be,0x0024,0xf6fe,0x0024,0x3009,0x2047,0x36f3,0x4024, + 0x36f3,0xd80e,0x36f1,0x9807,0x2000,0x0000,0x36f2,0x9815, + 0x2a03,0x6a4e,0x3e12,0xb817,0x3e10,0x3802,0x0000,0x800a, + 0x0006,0x9f97,0x3009,0x1fc2,0x3e04,0x5c00,0x6020,0xb810, + 0x0030,0x0451,0x2803,0x6d14,0x0006,0x0002,0x4020,0x0024, + 0x0005,0xfb02,0x6024,0x0024,0x0025,0xffd0,0x2803,0x6f51, + 0x3100,0x1c11,0xb284,0x0024,0x0030,0x0490,0x3800,0x8024, + 0x0025,0xffd0,0x3980,0x1810,0x36f4,0x7c11,0x36f0,0x1802, + 0x0030,0x0717,0x3602,0x8024,0x2100,0x0000,0x3f05,0xdbd7, + 0x0003,0x6a17,0x3613,0x0024,0x3e00,0x3801,0xf400,0x55c0, + 0x0000,0x0897,0xf400,0x57c0,0x0000,0x0024,0x2000,0x0000, + 0x36f0,0x1801,0x0006,0xd397,0x2000,0x0000,0x3700,0x0024, + 0xb183,0xe1e3,0x0000,0x0203,0xac32,0x40d5,0xd122,0x0024, + 0x0000,0x3fc3,0xb132,0x0024,0x0006,0xd3c3,0x4316,0x0024, + 0xf400,0x40d5,0x3500,0x5803,0x2000,0x0000,0xd010,0x1bc1, + 0x3613,0x0024,0x3e22,0xb815,0x3e05,0xb814,0x3615,0x0024, + 0x0000,0x800a,0x3e10,0x3801,0x3e10,0xb803,0xb884,0xb805, + 0xb888,0x3844,0x3e11,0xb80d,0x3e03,0xf80e,0x0000,0x03ce, + 0xf400,0x4083,0x2403,0x7f8e,0xf400,0x4105,0x0000,0x0206, + 0xa562,0x0024,0x455a,0x0024,0x0020,0x0006,0xd312,0x0024, + 0xb16c,0x0024,0x0020,0x0006,0x2803,0x7e05,0xd342,0x0024, + 0x0000,0x01c6,0xd342,0x0024,0xd56a,0x0024,0x0020,0x0006, + 0x4448,0x0024,0xb16c,0x0024,0x0020,0x0146,0x2803,0x7f85, + 0x0000,0x0024,0xd468,0x0024,0x4336,0x0024,0x0000,0x4000, + 0x0006,0xd3c1,0x0006,0x9306,0x4122,0x0024,0x462c,0x4055, + 0x4092,0x3404,0xb512,0x4195,0x6294,0x3401,0x6200,0x0024, + 0x0000,0x03ce,0x2803,0x7a11,0xb888,0x0024,0x36f3,0xd80e, + 0x36f1,0x980d,0x36f1,0x1805,0x36f0,0x9803,0x36f0,0x1801, + 0x3405,0x9014,0x36e3,0x0024,0x2000,0x0000,0x36f2,0x9815, + 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, + 0x3615,0x0024,0x0000,0x800a,0x3e10,0x3801,0xb880,0xb810, + 0x0006,0x9fd0,0x3e10,0x8001,0x4182,0x3811,0x0006,0xd311, + 0x2803,0x88c5,0x0006,0x8a10,0x0000,0x0200,0xbc82,0xa000, + 0x3910,0x0024,0x2903,0x7700,0x39f0,0x4024,0x0006,0x9f90, + 0x0006,0x9f51,0x3009,0x0000,0x3009,0x0401,0x6014,0x0024, + 0x0000,0x0024,0x2903,0x8dc5,0x0003,0x89c8,0x36f4,0x4024, + 0x36f0,0x9810,0x36f0,0x1801,0x3405,0x9014,0x36f3,0x0024, + 0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817,0x3613,0x0024, + 0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814,0x290a,0xd900, + 0x3605,0x0024,0x2910,0x0180,0x3613,0x0024,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x3613,0x0024,0x3e12,0xb817,0x3e12,0x3815,0x3e05,0xb814, + 0x3615,0x0024,0x0000,0x800a,0x3e10,0xb803,0x0006,0x0002, + 0x3e11,0x3805,0x3e11,0xb807,0x3e14,0x3811,0x0006,0x9f90, + 0x3e04,0xb813,0x3009,0x0012,0x3213,0x0024,0xf400,0x4480, + 0x6026,0x0024,0x0000,0x0024,0x2803,0x9655,0x0000,0x0024, + 0x0000,0x0012,0xf400,0x4480,0x0006,0x9f50,0x3009,0x0002, + 0x6026,0x0024,0x0000,0x0024,0x2903,0x8dc5,0x0003,0x9648, + 0x0006,0x9f93,0x3201,0x0c11,0xb58a,0x0406,0x0006,0x8a11, + 0x468e,0x8400,0xb68c,0x9813,0xcfee,0x1bd2,0x0000,0x0804, + 0xaf0e,0x9811,0x4f86,0x1bd0,0x0000,0x0021,0x6418,0x9807, + 0x6848,0x1bc6,0xad46,0x9805,0xf400,0x4080,0x36f1,0x0024, + 0x36f0,0x9803,0x3405,0x9014,0x36f3,0x0024,0x36f2,0x1815, + 0x2000,0x0000,0x36f2,0x9817,0x3613,0x0024,0x3e12,0xb817, + 0x3e12,0x3815,0x3e05,0xb814,0x3615,0x0024,0x0000,0x800a, + 0x3e10,0x3801,0x3e10,0xb803,0x3e11,0x3805,0x2803,0xa480, + 0x3e04,0x3811,0x0000,0x0401,0x2903,0x5400,0x3613,0x0024, + 0x0000,0x0080,0xb882,0x130c,0xf400,0x4510,0x3010,0x910c, + 0x30f0,0xc024,0x6dc2,0x0024,0x3810,0x0024,0x38f0,0x4024, + 0x0000,0x0201,0x3100,0x0024,0xb010,0x0024,0x0000,0x0024, + 0x2803,0xa7d5,0x0000,0x0024,0x6894,0x130c,0xb886,0x1040, + 0x3430,0x4024,0x6dca,0x0024,0x0030,0x0011,0x2803,0xa051, + 0x0000,0x0024,0xbcd2,0x0024,0x0000,0x0201,0x2803,0xa7c5, + 0x0000,0x0024,0x2903,0x5400,0x3613,0x0024,0x36f4,0x1811, + 0x36f1,0x1805,0x36f0,0x9803,0x36f0,0x1801,0x3405,0x9014, + 0x36f3,0x0024,0x36f2,0x1815,0x2000,0x0000,0x36f2,0x9817, + 0x3613,0x0024,0x3e12,0xb815,0x0000,0x800a,0x3e14,0x7813, + 0x3e10,0xb803,0x3e11,0x3805,0x3e11,0xb807,0x3e13,0xf80e, + 0x6812,0x0024,0x3e03,0x7810,0x0fff,0xffd3,0x0000,0x0091, + 0xbd86,0x9850,0x3e10,0x3804,0x3e00,0x7812,0xbe8a,0x8bcc, + 0x409e,0x8086,0x2403,0xaf07,0xfe49,0x2821,0x526a,0x8801, + 0x5c87,0x280e,0x4eba,0x9812,0x4286,0x40e1,0xb284,0x1bc1, + 0x4de6,0x0024,0xad17,0x2627,0x4fde,0x9804,0x4498,0x1bc0, + 0x0000,0x0024,0x2803,0xad15,0x3a11,0xa807,0x36f3,0x4024, + 0x36f3,0xd80e,0x36f1,0x9807,0x36f1,0x1805,0x36f0,0x9803, + 0x36f4,0x5813,0x2000,0x0000,0x36f2,0x9815,0x3613,0x0024, + 0x3e12,0xb815,0x0000,0x800a,0x3e10,0xb803,0x3e11,0x3805, + 0x3e11,0xb807,0x3e13,0xf80e,0x6812,0x0024,0x3e03,0x7810, + 0x3009,0x1850,0x3e10,0x3804,0x3e10,0x7812,0x32f3,0x0024, + 0xbd86,0x0024,0x4091,0xe2e3,0x3009,0x0046,0x2403,0xba80, + 0x3009,0x0047,0x32f0,0x0801,0xfe1f,0x6465,0x5e8a,0x0024, + 0x44ba,0x0024,0xfee2,0x0024,0x5d8a,0x1800,0x4482,0x4160, + 0x48ba,0x8046,0x4dc6,0x1822,0x4de6,0x8047,0x36f3,0x0024, + 0x36f0,0x5812,0xad17,0x2627,0x4fde,0x9804,0x4498,0x1bc0, + 0x0000,0x0024,0x2803,0xb615,0x3a11,0xa807,0x36f3,0x4024, + 0x36f3,0xd80e,0x36f1,0x9807,0x36f1,0x1805,0x36f0,0x9803, + 0x2000,0x0000,0x36f2,0x9815,0xb386,0x40d7,0x4284,0x184c, + 0x0000,0x05c0,0x2803,0xc015,0xf5d8,0x3804,0x0000,0x0984, + 0x6400,0xb84a,0x3e13,0xf80d,0xa204,0x380e,0x0000,0x800a, + 0x0000,0x00ce,0x2403,0xc34e,0xffa4,0x0024,0x48b6,0x0024, + 0x0000,0x0024,0x2803,0xc344,0x4000,0x40c2,0x4224,0x0024, + 0x6090,0x0024,0xffa4,0x0024,0x0fff,0xfe83,0xfe86,0x1bce, + 0x36f3,0xd80d,0x48b6,0x0024,0x0fff,0xff03,0xa230,0x45c3, + 0x2000,0x0000,0x36f1,0x180a,0x4080,0x184c,0x3e13,0x780f, + 0x2803,0xc785,0x4090,0xb80e,0x2403,0xc700,0x3e04,0x0440, + 0x3810,0x0440,0x3604,0x0024,0x3009,0x1bce,0x3603,0x5bcf, + 0x2000,0x0000,0x0000,0x0024, + 0x0007,0x0001, /*copy 1*/ + 0x802e, + 0x0006,0x0002, /*copy 2*/ + 0x2801,0x6780, + 0x0007,0x0001, /*copy 1*/ + 0x8030, + 0x0006,0x0002, /*copy 2*/ + 0x2800,0x1b40, + 0x0007,0x0001, /*copy 1*/ + 0x8028, + 0x0006,0x0002, /*copy 2*/ + 0x2a00,0x3f8e, + 0x0007,0x0001, /*copy 1*/ + 0x8032, + 0x0006,0x0002, /*copy 2*/ + 0x2800,0x5c00, + 0x0007,0x0001, /*copy 1*/ + 0x3580, + 0x0006, 0x8038, 0x0000, /*Rle(56)*/ + 0x0007,0x0001, /*copy 1*/ + 0xfab3, + 0x0006,0x01a4, /*copy 420*/ + 0x0001,0x0001,0x0001,0x0001,0x0000,0xffff,0xfffe,0xfffb, + 0xfff9,0xfff5,0xfff2,0xffed,0xffe8,0xffe3,0xffde,0xffd8, + 0xffd3,0xffce,0xffca,0xffc7,0xffc4,0xffc4,0xffc5,0xffc7, + 0xffcc,0xffd3,0xffdc,0xffe6,0xfff3,0x0001,0x0010,0x001f, + 0x002f,0x003f,0x004e,0x005b,0x0066,0x006f,0x0074,0x0075, + 0x0072,0x006b,0x005f,0x004f,0x003c,0x0024,0x0009,0xffed, + 0xffcf,0xffb0,0xff93,0xff77,0xff5f,0xff4c,0xff3d,0xff35, + 0xff34,0xff3b,0xff4a,0xff60,0xff7e,0xffa2,0xffcd,0xfffc, + 0x002e,0x0061,0x0094,0x00c4,0x00f0,0x0114,0x0131,0x0144, + 0x014b,0x0146,0x0134,0x0116,0x00eb,0x00b5,0x0075,0x002c, + 0xffde,0xff8e,0xff3d,0xfeef,0xfea8,0xfe6a,0xfe39,0xfe16, + 0xfe05,0xfe06,0xfe1b,0xfe43,0xfe7f,0xfecd,0xff2a,0xff95, + 0x0009,0x0082,0x00fd,0x0173,0x01e1,0x0242,0x0292,0x02cc, + 0x02ec,0x02f2,0x02da,0x02a5,0x0253,0x01e7,0x0162,0x00c9, + 0x0021,0xff70,0xfebc,0xfe0c,0xfd68,0xfcd5,0xfc5b,0xfc00, + 0xfbc9,0xfbb8,0xfbd2,0xfc16,0xfc85,0xfd1b,0xfdd6,0xfeae, + 0xff9e,0x009c,0x01a0,0x02a1,0x0392,0x046c,0x0523,0x05b0, + 0x060a,0x062c,0x0613,0x05bb,0x0526,0x0456,0x0351,0x021f, + 0x00c9,0xff5a,0xfde1,0xfc6a,0xfb05,0xf9c0,0xf8aa,0xf7d0, + 0xf73d,0xf6fa,0xf70f,0xf77e,0xf848,0xf96b,0xfadf,0xfc9a, + 0xfe8f,0x00ad,0x02e3,0x051a,0x073f,0x0939,0x0af4,0x0c5a, + 0x0d59,0x0de1,0x0de5,0x0d5c,0x0c44,0x0a9e,0x0870,0x05c7, + 0x02b4,0xff4e,0xfbaf,0xf7f8,0xf449,0xf0c7,0xed98,0xeae0, + 0xe8c4,0xe765,0xe6e3,0xe756,0xe8d2,0xeb67,0xef19,0xf3e9, + 0xf9cd,0x00b5,0x088a,0x112b,0x1a72,0x2435,0x2e42,0x3866, + 0x426b,0x4c1b,0x553e,0x5da2,0x6516,0x6b6f,0x7087,0x7441, + 0x7686,0x774a,0x7686,0x7441,0x7087,0x6b6f,0x6516,0x5da2, + 0x553e,0x4c1b,0x426b,0x3866,0x2e42,0x2435,0x1a72,0x112b, + 0x088a,0x00b5,0xf9cd,0xf3e9,0xef19,0xeb67,0xe8d2,0xe756, + 0xe6e3,0xe765,0xe8c4,0xeae0,0xed98,0xf0c7,0xf449,0xf7f8, + 0xfbaf,0xff4e,0x02b4,0x05c7,0x0870,0x0a9e,0x0c44,0x0d5c, + 0x0de5,0x0de1,0x0d59,0x0c5a,0x0af4,0x0939,0x073f,0x051a, + 0x02e3,0x00ad,0xfe8f,0xfc9a,0xfadf,0xf96b,0xf848,0xf77e, + 0xf70f,0xf6fa,0xf73d,0xf7d0,0xf8aa,0xf9c0,0xfb05,0xfc6a, + 0xfde1,0xff5a,0x00c9,0x021f,0x0351,0x0456,0x0526,0x05bb, + 0x0613,0x062c,0x060a,0x05b0,0x0523,0x046c,0x0392,0x02a1, + 0x01a0,0x009c,0xff9e,0xfeae,0xfdd6,0xfd1b,0xfc85,0xfc16, + 0xfbd2,0xfbb8,0xfbc9,0xfc00,0xfc5b,0xfcd5,0xfd68,0xfe0c, + 0xfebc,0xff70,0x0021,0x00c9,0x0162,0x01e7,0x0253,0x02a5, + 0x02da,0x02f2,0x02ec,0x02cc,0x0292,0x0242,0x01e1,0x0173, + 0x00fd,0x0082,0x0009,0xff95,0xff2a,0xfecd,0xfe7f,0xfe43, + 0xfe1b,0xfe06,0xfe05,0xfe16,0xfe39,0xfe6a,0xfea8,0xfeef, + 0xff3d,0xff8e,0xffde,0x002c,0x0075,0x00b5,0x00eb,0x0116, + 0x0134,0x0146,0x014b,0x0144,0x0131,0x0114,0x00f0,0x00c4, + 0x0094,0x0061,0x002e,0xfffc,0xffcd,0xffa2,0xff7e,0xff60, + 0xff4a,0xff3b,0xff34,0xff35,0xff3d,0xff4c,0xff5f,0xff77, + 0xff93,0xffb0,0xffcf,0xffed,0x0009,0x0024,0x003c,0x004f, + 0x005f,0x006b,0x0072,0x0075,0x0074,0x006f,0x0066,0x005b, + 0x004e,0x003f,0x002f,0x001f,0x0010,0x0001,0xfff3,0xffe6, + 0xffdc,0xffd3,0xffcc,0xffc7,0xffc5,0xffc4,0xffc4,0xffc7, + 0xffca,0xffce,0xffd3,0xffd8,0xffde,0xffe3,0xffe8,0xffed, + 0xfff2,0xfff5,0xfff9,0xfffb,0xfffe,0xffff,0x0000,0x0001, + 0x0001,0x0001,0x0001,0x0000, + 0x0007,0x0001, /*copy 1*/ + 0x180b, + 0x0006,0x000d, /*copy 13*/ + 0x000f,0x0010,0x001c,0xfab3,0x3580,0x804b,0xa04b,0x0001, + 0x0000,0x3580,0x01a4,0x069e,0x06bc, + 0x0006, 0x8006, 0x0704, /*Rle(6)*/ + 0x0006,0x0027, /*copy 39*/ + 0x06d9,0x06d9,0x06d9,0x06d9,0x06d9,0x0908,0x08ec,0x08f0, + 0x08f4,0x08f8,0x08fc,0x0900,0x0904,0x0937,0x093b,0x093e, + 0x093e,0x093e,0x093e,0x0946,0x0959,0x0a24,0x0990,0x0995, + 0x099b,0x09a1,0x09a6,0x09ab,0x09b0,0x09b5,0x09ba,0x09bf, + 0x09c4,0x09c9,0x09e2,0x0a01,0x0a20,0x5a82,0x5a82, + 0x0006, 0x8006, 0x0000, /*Rle(6)*/ + 0x0006,0x0018, /*copy 24*/ + 0x6fb8,0xc180,0xc180,0x6fb8,0x0000,0x0000,0x0000,0x0000, + 0x5a82,0x5a82,0x6fb8,0xc180,0xc180,0x6fb8,0x0000,0x0000, + 0x5a82,0x5a82,0x5a82,0x5a82,0x6fb8,0xc180,0xc180,0x6fb8, + 0x0007,0x0001, /*copy 1*/ + 0x5800, + 0x0006,0x0001, /*copy 1*/ + 0x0001, + 0x0006, 0x8007, 0x0000, /*Rle(7)*/ + 0x0006,0x0018, /*copy 24*/ + 0x0002,0x0000,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000, + 0x0003,0x0000,0xfffd,0xffff,0x0001,0x0000,0x0000,0x0000, + 0x0004,0x0000,0xfffa,0xffff,0x0004,0x0000,0xffff,0xffff, + 0x000a,0x0001, /*copy 1*/ + 0x0300, + }; + + + + + + + + + + + + + + + + From cfa28a9a7533b6bc4e68b3fee3d8e314631f98d0 Mon Sep 17 00:00:00 2001 From: Martin Ayotte Date: Thu, 2 Jul 2015 13:09:38 -0400 Subject: [PATCH 59/96] add new arduino_uip + tweak variants for Netduino2Plus ENC28J60/SPI networking --- STM32F4/cores/maple/Client.h | 45 + STM32F4/cores/maple/IPAddress.cpp | 89 + STM32F4/cores/maple/IPAddress.h | 76 + STM32F4/cores/maple/Printable.h | 40 + STM32F4/cores/maple/Server.h | 30 + STM32F4/cores/maple/Udp.h | 88 + STM32F4/cores/maple/avr/dtostrf.c | 29 + STM32F4/cores/maple/avr/dtostrf.h | 29 + STM32F4/cores/maple/avr/pgmspace.h | 44 + STM32F4/cores/maple/libmaple/gpioF2.c | 12 + STM32F4/cores/maple/libmaple/rccF2.c | 24 +- STM32F4/cores/maple/libmaple/rccF2.h | 11 + STM32F4/libraries/arduino_uip/Dhcp.cpp | 478 +++++ STM32F4/libraries/arduino_uip/Dhcp.h | 178 ++ STM32F4/libraries/arduino_uip/Dns.cpp | 422 ++++ STM32F4/libraries/arduino_uip/Dns.h | 41 + STM32F4/libraries/arduino_uip/README | 227 ++ STM32F4/libraries/arduino_uip/UIPClient.cpp | 586 +++++ STM32F4/libraries/arduino_uip/UIPClient.h | 112 + STM32F4/libraries/arduino_uip/UIPEthernet.cpp | 486 +++++ STM32F4/libraries/arduino_uip/UIPEthernet.h | 129 ++ STM32F4/libraries/arduino_uip/UIPServer.cpp | 63 + STM32F4/libraries/arduino_uip/UIPServer.h | 40 + STM32F4/libraries/arduino_uip/UIPUdp.cpp | 385 ++++ STM32F4/libraries/arduino_uip/UIPUdp.h | 126 ++ STM32F4/libraries/arduino_uip/ethernet_comp.h | 9 + .../AdvancedChatServer/AdvancedChatServer.ino | 104 + .../examples/EchoServer/EchoServer.ino | 58 + .../examples/TcpClient/TcpClient.ino | 77 + .../examples/TcpServer/TcpServer.ino | 74 + .../examples/UdpClient/UdpClient.ino | 93 + .../examples/UdpServer/UdpServer.ino | 88 + STM32F4/libraries/arduino_uip/keywords.txt | 58 + .../libraries/arduino_uip/library.properties | 10 + .../arduino_uip/tests/perl/tcpclient.pl | 34 + .../arduino_uip/tests/perl/tcpserver.pl | 53 + .../arduino_uip/tests/perl/udpclient.pl | 26 + .../arduino_uip/tests/perl/udpserver.pl | 40 + .../arduino_uip/utility/Enc28J60Network.cpp | 646 ++++++ .../arduino_uip/utility/Enc28J60Network.h | 108 + .../arduino_uip/utility/clock-arch.cpp | 30 + .../arduino_uip/utility/clock-arch.h | 27 + .../libraries/arduino_uip/utility/enc28j60.h | 257 +++ .../libraries/arduino_uip/utility/mempool.cpp | 168 ++ .../libraries/arduino_uip/utility/mempool.h | 54 + .../arduino_uip/utility/mempool_conf.h | 34 + .../libraries/arduino_uip/utility/uip-conf.h | 185 ++ STM32F4/libraries/arduino_uip/utility/uip.c | 1897 +++++++++++++++++ STM32F4/libraries/arduino_uip/utility/uip.h | 1601 ++++++++++++++ .../libraries/arduino_uip/utility/uip_arch.h | 138 ++ .../libraries/arduino_uip/utility/uip_arp.c | 423 ++++ .../libraries/arduino_uip/utility/uip_arp.h | 144 ++ .../libraries/arduino_uip/utility/uip_clock.h | 88 + .../arduino_uip/utility/uip_debug.cpp | 170 ++ .../libraries/arduino_uip/utility/uip_debug.h | 18 + .../libraries/arduino_uip/utility/uip_timer.c | 127 ++ .../libraries/arduino_uip/utility/uip_timer.h | 86 + .../arduino_uip/utility/uipethernet-conf.h | 29 + .../libraries/arduino_uip/utility/uipopt.h | 543 +++++ STM32F4/libraries/arduino_uip/utility/util.h | 13 + .../variants/discovery_f407/discovery_f4.cpp | 12 +- .../variants/discovery_f407/discovery_f4.h | 12 + 62 files changed, 11319 insertions(+), 5 deletions(-) create mode 100644 STM32F4/cores/maple/Client.h create mode 100644 STM32F4/cores/maple/IPAddress.cpp create mode 100644 STM32F4/cores/maple/IPAddress.h create mode 100644 STM32F4/cores/maple/Printable.h create mode 100644 STM32F4/cores/maple/Server.h create mode 100644 STM32F4/cores/maple/Udp.h create mode 100644 STM32F4/cores/maple/avr/dtostrf.c create mode 100644 STM32F4/cores/maple/avr/dtostrf.h create mode 100644 STM32F4/cores/maple/avr/pgmspace.h create mode 100644 STM32F4/libraries/arduino_uip/Dhcp.cpp create mode 100644 STM32F4/libraries/arduino_uip/Dhcp.h create mode 100644 STM32F4/libraries/arduino_uip/Dns.cpp create mode 100644 STM32F4/libraries/arduino_uip/Dns.h create mode 100644 STM32F4/libraries/arduino_uip/README create mode 100644 STM32F4/libraries/arduino_uip/UIPClient.cpp create mode 100644 STM32F4/libraries/arduino_uip/UIPClient.h create mode 100644 STM32F4/libraries/arduino_uip/UIPEthernet.cpp create mode 100644 STM32F4/libraries/arduino_uip/UIPEthernet.h create mode 100644 STM32F4/libraries/arduino_uip/UIPServer.cpp create mode 100644 STM32F4/libraries/arduino_uip/UIPServer.h create mode 100644 STM32F4/libraries/arduino_uip/UIPUdp.cpp create mode 100644 STM32F4/libraries/arduino_uip/UIPUdp.h create mode 100644 STM32F4/libraries/arduino_uip/ethernet_comp.h create mode 100644 STM32F4/libraries/arduino_uip/examples/AdvancedChatServer/AdvancedChatServer.ino create mode 100644 STM32F4/libraries/arduino_uip/examples/EchoServer/EchoServer.ino create mode 100644 STM32F4/libraries/arduino_uip/examples/TcpClient/TcpClient.ino create mode 100644 STM32F4/libraries/arduino_uip/examples/TcpServer/TcpServer.ino create mode 100644 STM32F4/libraries/arduino_uip/examples/UdpClient/UdpClient.ino create mode 100644 STM32F4/libraries/arduino_uip/examples/UdpServer/UdpServer.ino create mode 100644 STM32F4/libraries/arduino_uip/keywords.txt create mode 100644 STM32F4/libraries/arduino_uip/library.properties create mode 100755 STM32F4/libraries/arduino_uip/tests/perl/tcpclient.pl create mode 100755 STM32F4/libraries/arduino_uip/tests/perl/tcpserver.pl create mode 100755 STM32F4/libraries/arduino_uip/tests/perl/udpclient.pl create mode 100755 STM32F4/libraries/arduino_uip/tests/perl/udpserver.pl create mode 100644 STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp create mode 100644 STM32F4/libraries/arduino_uip/utility/Enc28J60Network.h create mode 100644 STM32F4/libraries/arduino_uip/utility/clock-arch.cpp create mode 100644 STM32F4/libraries/arduino_uip/utility/clock-arch.h create mode 100644 STM32F4/libraries/arduino_uip/utility/enc28j60.h create mode 100644 STM32F4/libraries/arduino_uip/utility/mempool.cpp create mode 100644 STM32F4/libraries/arduino_uip/utility/mempool.h create mode 100644 STM32F4/libraries/arduino_uip/utility/mempool_conf.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uip-conf.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uip.c create mode 100644 STM32F4/libraries/arduino_uip/utility/uip.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uip_arch.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uip_arp.c create mode 100644 STM32F4/libraries/arduino_uip/utility/uip_arp.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uip_clock.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uip_debug.cpp create mode 100644 STM32F4/libraries/arduino_uip/utility/uip_debug.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uip_timer.c create mode 100644 STM32F4/libraries/arduino_uip/utility/uip_timer.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uipethernet-conf.h create mode 100644 STM32F4/libraries/arduino_uip/utility/uipopt.h create mode 100644 STM32F4/libraries/arduino_uip/utility/util.h diff --git a/STM32F4/cores/maple/Client.h b/STM32F4/cores/maple/Client.h new file mode 100644 index 0000000..b8e5d93 --- /dev/null +++ b/STM32F4/cores/maple/Client.h @@ -0,0 +1,45 @@ +/* + Client.h - Base class that provides Client + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef client_h +#define client_h +#include "Print.h" +#include "Stream.h" +#include "IPAddress.h" + +class Client : public Stream { + +public: + virtual int connect(IPAddress ip, uint16_t port) =0; + virtual int connect(const char *host, uint16_t port) =0; + virtual size_t write(uint8_t) =0; + virtual size_t write(const uint8_t *buf, size_t size) =0; + virtual int available() = 0; + virtual int read() = 0; + virtual int read(uint8_t *buf, size_t size) = 0; + virtual int peek() = 0; + virtual void flush() = 0; + virtual void stop() = 0; + virtual uint8_t connected() = 0; + virtual operator bool() = 0; +protected: + uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); }; +}; + +#endif diff --git a/STM32F4/cores/maple/IPAddress.cpp b/STM32F4/cores/maple/IPAddress.cpp new file mode 100644 index 0000000..a8ed095 --- /dev/null +++ b/STM32F4/cores/maple/IPAddress.cpp @@ -0,0 +1,89 @@ +/* + IPAddress.cpp - Base class that provides IPAddress + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include +#include +#include + +IPAddress::IPAddress() +{ + _address.dword = 0; +} + +IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) +{ + _address.bytes[0] = first_octet; + _address.bytes[1] = second_octet; + _address.bytes[2] = third_octet; + _address.bytes[3] = fourth_octet; +} + +IPAddress::IPAddress(uint32_t address) +{ + _address.dword = address; +} + +IPAddress::IPAddress(const uint8_t *address) +{ + memcpy(_address.bytes, address, sizeof(_address.bytes)); +} + +IPAddress& IPAddress::operator=(const uint8_t *address) +{ + memcpy(_address.bytes, address, sizeof(_address.bytes)); + return *this; +} + +IPAddress& IPAddress::operator=(uint32_t address) +{ + _address.dword = address; + return *this; +} + +bool IPAddress::operator==(const uint8_t* addr) const +{ + return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0; +} + +size_t IPAddress::printTo(Print& p) const +{ + size_t n = 0; + for (int i =0; i < 3; i++) + { + n += p.print(_address.bytes[i], DEC); + n += p.print('.'); + } + n += p.print(_address.bytes[3], DEC); + return n; +} + +char *IPAddress::toCharArray() +{ + static char szRet[20]; + String str = String(_address.bytes[0]); + str += "."; + str += String(_address.bytes[1]); + str += "."; + str += String(_address.bytes[2]); + str += "."; + str += String(_address.bytes[3]); + str.toCharArray(szRet, 20); + return szRet; +} + diff --git a/STM32F4/cores/maple/IPAddress.h b/STM32F4/cores/maple/IPAddress.h new file mode 100644 index 0000000..eb8a7c0 --- /dev/null +++ b/STM32F4/cores/maple/IPAddress.h @@ -0,0 +1,76 @@ +/* + IPAddress.h - Base class that provides IPAddress + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef IPAddress_h +#define IPAddress_h + +#include +#include + +// A class to make it easier to handle and pass around IP addresses + +class IPAddress : public Printable { +private: + union { + uint8_t bytes[4]; // IPv4 address + uint32_t dword; + } _address; + + // Access the raw byte array containing the address. Because this returns a pointer + // to the internal structure rather than a copy of the address this function should only + // be used when you know that the usage of the returned uint8_t* will be transient and not + // stored. + uint8_t* raw_address() { return _address.bytes; }; + +public: + // Constructors + IPAddress(); + IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet); + IPAddress(uint32_t address); + IPAddress(const uint8_t *address); + + // Overloaded cast operator to allow IPAddress objects to be used where a pointer + // to a four-byte uint8_t array is expected + operator uint32_t() const { return _address.dword; }; + bool operator==(const IPAddress& addr) const { return _address.dword == addr._address.dword; }; + bool operator==(const uint8_t* addr) const; + + // Overloaded index operator to allow getting and setting individual octets of the address + uint8_t operator[](int index) const { return _address.bytes[index]; }; + uint8_t& operator[](int index) { return _address.bytes[index]; }; + + // Overloaded copy operators to allow initialisation of IPAddress objects from other types + IPAddress& operator=(const uint8_t *address); + IPAddress& operator=(uint32_t address); + + virtual size_t printTo(Print& p) const; + char * toCharArray(); + + friend class EthernetClass; + friend class UDP; + friend class Client; + friend class Server; + friend class DhcpClass; + friend class DNSClient; +}; + +const IPAddress INADDR_NONE(0,0,0,0); + + +#endif diff --git a/STM32F4/cores/maple/Printable.h b/STM32F4/cores/maple/Printable.h new file mode 100644 index 0000000..2a1b2e9 --- /dev/null +++ b/STM32F4/cores/maple/Printable.h @@ -0,0 +1,40 @@ +/* + Printable.h - Interface class that allows printing of complex types + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef Printable_h +#define Printable_h + +#include + +class Print; + +/** The Printable class provides a way for new classes to allow themselves to be printed. + By deriving from Printable and implementing the printTo method, it will then be possible + for users to print out instances of this class by passing them into the usual + Print::print and Print::println methods. +*/ + +class Printable +{ + public: + virtual size_t printTo(Print& p) const = 0; +}; + +#endif + diff --git a/STM32F4/cores/maple/Server.h b/STM32F4/cores/maple/Server.h new file mode 100644 index 0000000..69e3e39 --- /dev/null +++ b/STM32F4/cores/maple/Server.h @@ -0,0 +1,30 @@ +/* + Server.h - Base class that provides Server + Copyright (c) 2011 Adrian McEwen. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef server_h +#define server_h + +#include "Print.h" + +class Server : public Print { +public: + virtual void begin() =0; +}; + +#endif diff --git a/STM32F4/cores/maple/Udp.h b/STM32F4/cores/maple/Udp.h new file mode 100644 index 0000000..dc5644b --- /dev/null +++ b/STM32F4/cores/maple/Udp.h @@ -0,0 +1,88 @@ +/* + * Udp.cpp: Library to send/receive UDP packets. + * + * NOTE: UDP is fast, but has some important limitations (thanks to Warren Gray for mentioning these) + * 1) UDP does not guarantee the order in which assembled UDP packets are received. This + * might not happen often in practice, but in larger network topologies, a UDP + * packet can be received out of sequence. + * 2) UDP does not guard against lost packets - so packets *can* disappear without the sender being + * aware of it. Again, this may not be a concern in practice on small local networks. + * For more information, see http://www.cafeaulait.org/course/week12/35.html + * + * MIT License: + * Copyright (c) 2008 Bjoern Hartmann + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * bjoern@cs.stanford.edu 12/30/2008 + */ + +#ifndef udp_h +#define udp_h + +#include +#include + +class UDP : public Stream { + +public: + virtual uint8_t begin(uint16_t) =0; // initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use + virtual void stop() =0; // Finish with the UDP socket + + // Sending UDP packets + + // Start building up a packet to send to the remote host specific in ip and port + // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port + virtual int beginPacket(IPAddress ip, uint16_t port) =0; + // Start building up a packet to send to the remote host specific in host and port + // Returns 1 if successful, 0 if there was a problem resolving the hostname or port + virtual int beginPacket(const char *host, uint16_t port) =0; + // Finish off this packet and send it + // Returns 1 if the packet was sent successfully, 0 if there was an error + virtual int endPacket() =0; + // Write a single byte into the packet + virtual size_t write(uint8_t) =0; + // Write size bytes from buffer into the packet + virtual size_t write(const uint8_t *buffer, size_t size) =0; + + // Start processing the next available incoming packet + // Returns the size of the packet in bytes, or 0 if no packets are available + virtual int parsePacket() =0; + // Number of bytes remaining in the current packet + virtual int available() =0; + // Read a single byte from the current packet + virtual int read() =0; + // Read up to len bytes from the current packet and place them into buffer + // Returns the number of bytes read, or 0 if none are available + virtual int read(unsigned char* buffer, size_t len) =0; + // Read up to len characters from the current packet and place them into buffer + // Returns the number of characters read, or 0 if none are available + virtual int read(char* buffer, size_t len) =0; + // Return the next byte from the current packet without moving on to the next byte + virtual int peek() =0; + virtual void flush() =0; // Finish reading the current packet + + // Return the IP address of the host who sent the current incoming packet + virtual IPAddress remoteIP() =0; + // Return the port of the host who sent the current incoming packet + virtual uint16_t remotePort() =0; +protected: + uint8_t* rawIPAddress(IPAddress& addr) { return addr.raw_address(); }; +}; + +#endif diff --git a/STM32F4/cores/maple/avr/dtostrf.c b/STM32F4/cores/maple/avr/dtostrf.c new file mode 100644 index 0000000..7f90154 --- /dev/null +++ b/STM32F4/cores/maple/avr/dtostrf.c @@ -0,0 +1,29 @@ +/* + dtostrf - Emulation for dtostrf function from avr-libc + Copyright (c) 2013 Arduino. All rights reserved. + Written by Cristian Maglie + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include + +char *dtostrf (double val, signed char width, unsigned char prec, char *sout) { + char fmt[20]; + sprintf(fmt, "%%%d.%df", width, prec); + sprintf(sout, fmt, val); + return sout; +} + diff --git a/STM32F4/cores/maple/avr/dtostrf.h b/STM32F4/cores/maple/avr/dtostrf.h new file mode 100644 index 0000000..0bf9f57 --- /dev/null +++ b/STM32F4/cores/maple/avr/dtostrf.h @@ -0,0 +1,29 @@ +/* + dtostrf - Emulation for dtostrf function from avr-libc + Copyright (c) 2013 Arduino. All rights reserved. + Written by Cristian Maglie + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +char *dtostrf (double val, signed char width, unsigned char prec, char *sout); + +#ifdef __cplusplus +} +#endif diff --git a/STM32F4/cores/maple/avr/pgmspace.h b/STM32F4/cores/maple/avr/pgmspace.h new file mode 100644 index 0000000..9b344c9 --- /dev/null +++ b/STM32F4/cores/maple/avr/pgmspace.h @@ -0,0 +1,44 @@ +#ifndef __PGMSPACE_H_ +#define __PGMSPACE_H_ 1 + +#include + +#define PROGMEM +#define PGM_P const char * +#define PSTR(str) (str) + +#define _SFR_BYTE(n) (n) + +typedef void prog_void; +typedef char prog_char; +typedef unsigned char prog_uchar; +typedef int8_t prog_int8_t; +typedef uint8_t prog_uint8_t; +typedef int16_t prog_int16_t; +typedef uint16_t prog_uint16_t; +typedef int32_t prog_int32_t; +typedef uint32_t prog_uint32_t; + +#define memcpy_P(dest, src, num) memcpy((dest), (src), (num)) +#define strcpy_P(dest, src) strcpy((dest), (src)) +#define strcat_P(dest, src) strcat((dest), (src)) +#define strcmp_P(a, b) strcmp((a), (b)) +#define strstr_P(a, b) strstr((a), (b)) +#define strlen_P(a) strlen((a)) +#define sprintf_P(s, f, ...) sprintf((s), (f), __VA_ARGS__) + +#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) +#define pgm_read_word(addr) (*(const unsigned short *)(addr)) +#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) +#define pgm_read_float(addr) (*(const float *)(addr)) + +#define pgm_read_byte_near(addr) pgm_read_byte(addr) +#define pgm_read_word_near(addr) pgm_read_word(addr) +#define pgm_read_dword_near(addr) pgm_read_dword(addr) +#define pgm_read_float_near(addr) pgm_read_float(addr) +#define pgm_read_byte_far(addr) pgm_read_byte(addr) +#define pgm_read_word_far(addr) pgm_read_word(addr) +#define pgm_read_dword_far(addr) pgm_read_dword(addr) +#define pgm_read_float_far(addr) pgm_read_float(addr) + +#endif diff --git a/STM32F4/cores/maple/libmaple/gpioF2.c b/STM32F4/cores/maple/libmaple/gpioF2.c index 47f3754..b04c7e9 100644 --- a/STM32F4/cores/maple/libmaple/gpioF2.c +++ b/STM32F4/cores/maple/libmaple/gpioF2.c @@ -126,6 +126,18 @@ void gpio_init_all(void) { gpio_init(GPIOF); gpio_init(GPIOG); #endif + +#ifdef ARDUINO_STM32F4_NETDUINO2PLUS + // PA8 Output the Master Clock MCO1 + gpio_set_af_mode(GPIOA, 8, 0); + gpio_set_mode(GPIOA, 8, GPIO_MODE_AF | GPIO_OTYPE_PP | GPIO_OSPEED_100MHZ); + // PB4 as alternate MISO Input + gpio_set_af_mode(GPIOB, 4, 5); + // PA5 as alternate SCK Output + gpio_set_af_mode(GPIOA, 5, 5); + // PA7 as alternate MOSI Output + gpio_set_af_mode(GPIOA, 7, 5); +#endif } /** diff --git a/STM32F4/cores/maple/libmaple/rccF2.c b/STM32F4/cores/maple/libmaple/rccF2.c index 40816c4..5b3b8ec 100644 --- a/STM32F4/cores/maple/libmaple/rccF2.c +++ b/STM32F4/cores/maple/libmaple/rccF2.c @@ -34,6 +34,7 @@ #include "libmaple.h" #include "flash.h" +#include "gpio.h" #include "rcc.h" #include "bitband.h" @@ -167,6 +168,18 @@ typedef struct typedef uint32 uint32_t; +void InitMCO1() +{ + rcc_reg_map *RCC = RCC_BASE; + // Turn MCO1 Master Clock Output mode + RCC->CFGR &= RCC_CFGR_MCO1_RESET_MASK; + RCC->CFGR |= RCC_CFGR_MCO1Source_HSE | RCC_CFGR_MCO1Div_1; + // PA8 Output the Master Clock MCO1 + gpio_set_af_mode(GPIOA, 8, 0); + gpio_set_mode(GPIOA, 8, GPIO_MODE_AF | GPIO_OTYPE_PP | GPIO_OSPEED_100MHZ); +} + + void SetupClock72MHz() { uint32_t SystemCoreClock = 72000000; @@ -377,6 +390,10 @@ void SetupClock168MHz() uint32 StartUpCounter = 0, HSEStatus = 0; rcc_reg_map *RCC = RCC_BASE; +#ifdef ARDUINO_STM32F4_NETDUINO2PLUS + InitMCO1(); +#endif + /* Enable HSE */ RCC->CR |= ((uint32_t)RCC_CR_HSEON); @@ -447,20 +464,19 @@ void SetupClock168MHz() } - void rcc_clk_init(rcc_sysclk_src sysclk_src, rcc_pllsrc pll_src, rcc_pll_multiplier pll_mul) { //SetupClock72MHz(); #if STM32_TICKS_PER_US == 168 - SetupClock168MHz(); + SetupClock168MHz(); #endif #if STM32_TICKS_PER_US == 120 - SetupClock120MHz(); + SetupClock120MHz(); #endif #if STM32_TICKS_PER_US == 72 - SetupClock72MHz(); + SetupClock72MHz(); #endif } diff --git a/STM32F4/cores/maple/libmaple/rccF2.h b/STM32F4/cores/maple/libmaple/rccF2.h index 9982e55..597870b 100644 --- a/STM32F4/cores/maple/libmaple/rccF2.h +++ b/STM32F4/cores/maple/libmaple/rccF2.h @@ -125,6 +125,17 @@ typedef struct #define RCC_CFGR_SW_PLL 0x2 #define RCC_CFGR_SW_HSE 0x1 +#define RCC_CFGR_MCO1Source_HSI ((uint32_t)0x00000000) +#define RCC_CFGR_MCO1Source_LSE ((uint32_t)0x00200000) +#define RCC_CFGR_MCO1Source_HSE ((uint32_t)0x00400000) +#define RCC_CFGR_MCO1Source_PLLCLK ((uint32_t)0x00600000) +#define RCC_CFGR_MCO1Div_1 ((uint32_t)0x00000000) +#define RCC_CFGR_MCO1Div_2 ((uint32_t)0x04000000) +#define RCC_CFGR_MCO1Div_3 ((uint32_t)0x05000000) +#define RCC_CFGR_MCO1Div_4 ((uint32_t)0x06000000) +#define RCC_CFGR_MCO1Div_5 ((uint32_t)0x07000000) +#define RCC_CFGR_MCO1_RESET_MASK ((uint32_t)0xF89FFFFF) + /* Clock interrupt register */ #define RCC_CIR_CSSC_BIT 23 diff --git a/STM32F4/libraries/arduino_uip/Dhcp.cpp b/STM32F4/libraries/arduino_uip/Dhcp.cpp new file mode 100644 index 0000000..c15fe83 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/Dhcp.cpp @@ -0,0 +1,478 @@ +// DHCP Library v0.3 - April 25, 2009 +// Author: Jordan Terrell - blog.jordanterrell.com + +#include +#include +#include "Dhcp.h" +#include "Arduino.h" +#include "utility/util.h" + +int DhcpClass::beginWithDHCP(uint8_t *mac, unsigned long timeout, unsigned long responseTimeout) +{ + _dhcpLeaseTime=0; + _dhcpT1=0; + _dhcpT2=0; + _lastCheck=0; + _timeout = timeout; + _responseTimeout = responseTimeout; + + // zero out _dhcpMacAddr + memset(_dhcpMacAddr, 0, 6); + reset_DHCP_lease(); + + memcpy((void*)_dhcpMacAddr, (void*)mac, 6); + _dhcp_state = STATE_DHCP_START; + return request_DHCP_lease(); +} + +void DhcpClass::reset_DHCP_lease(){ + // zero out _dhcpSubnetMask, _dhcpGatewayIp, _dhcpLocalIp, _dhcpDhcpServerIp, _dhcpDnsServerIp + memset(_dhcpLocalIp, 0, 20); +} + +//return:0 on error, 1 if request is sent and response is received +int DhcpClass::request_DHCP_lease(){ + + uint8_t messageType = 0; + + + + // Pick an initial transaction ID + _dhcpTransactionId = random(1UL, 2000UL); + _dhcpInitialTransactionId = _dhcpTransactionId; + + _dhcpUdpSocket.stop(); + if (_dhcpUdpSocket.begin(DHCP_CLIENT_PORT) == 0) + { + // Couldn't get a socket + return 0; + } + + presend_DHCP(); + + int result = 0; + + unsigned long startTime = millis(); + + while(_dhcp_state != STATE_DHCP_LEASED) + { + if(_dhcp_state == STATE_DHCP_START) + { + _dhcpTransactionId++; + + send_DHCP_MESSAGE(DHCP_DISCOVER, ((millis() - startTime) / 1000)); + _dhcp_state = STATE_DHCP_DISCOVER; + } + else if(_dhcp_state == STATE_DHCP_REREQUEST){ + _dhcpTransactionId++; + send_DHCP_MESSAGE(DHCP_REQUEST, ((millis() - startTime)/1000)); + _dhcp_state = STATE_DHCP_REQUEST; + } + else if(_dhcp_state == STATE_DHCP_DISCOVER) + { + uint32_t respId; + messageType = parseDHCPResponse(_responseTimeout, respId); + if(messageType == DHCP_OFFER) + { + // We'll use the transaction ID that the offer came with, + // rather than the one we were up to + _dhcpTransactionId = respId; + send_DHCP_MESSAGE(DHCP_REQUEST, ((millis() - startTime) / 1000)); + _dhcp_state = STATE_DHCP_REQUEST; + } + } + else if(_dhcp_state == STATE_DHCP_REQUEST) + { + uint32_t respId; + messageType = parseDHCPResponse(_responseTimeout, respId); + if(messageType == DHCP_ACK) + { + _dhcp_state = STATE_DHCP_LEASED; + result = 1; + //use default lease time if we didn't get it + if(_dhcpLeaseTime == 0){ + _dhcpLeaseTime = DEFAULT_LEASE; + } + //calculate T1 & T2 if we didn't get it + if(_dhcpT1 == 0){ + //T1 should be 50% of _dhcpLeaseTime + _dhcpT1 = _dhcpLeaseTime >> 1; + } + if(_dhcpT2 == 0){ + //T2 should be 87.5% (7/8ths) of _dhcpLeaseTime + _dhcpT2 = _dhcpT1 << 1; + } + _renewInSec = _dhcpT1; + _rebindInSec = _dhcpT2; + } + else if(messageType == DHCP_NAK) + _dhcp_state = STATE_DHCP_START; + } + + if(messageType == 255) + { + messageType = 0; + _dhcp_state = STATE_DHCP_START; + } + + if(result != 1 && ((millis() - startTime) > _timeout)) + break; + } + + // We're done with the socket now + _dhcpUdpSocket.stop(); + _dhcpTransactionId++; + + return result; +} + +void DhcpClass::presend_DHCP() +{ +} + +void DhcpClass::send_DHCP_MESSAGE(uint8_t messageType, uint16_t secondsElapsed) +{ + uint8_t buffer[32]; + memset(buffer, 0, 32); + IPAddress dest_addr( 255, 255, 255, 255 ); // Broadcast address + + if (-1 == _dhcpUdpSocket.beginPacket(dest_addr, DHCP_SERVER_PORT)) + { + // FIXME Need to return errors + return; + } + + buffer[0] = DHCP_BOOTREQUEST; // op + buffer[1] = DHCP_HTYPE10MB; // htype + buffer[2] = DHCP_HLENETHERNET; // hlen + buffer[3] = DHCP_HOPS; // hops + + // xid + unsigned long xid = htonl(_dhcpTransactionId); + memcpy(buffer + 4, &(xid), 4); + + // 8, 9 - seconds elapsed + buffer[8] = ((secondsElapsed & 0xff00) >> 8); + buffer[9] = (secondsElapsed & 0x00ff); + + // flags + unsigned short flags = htons(DHCP_FLAGSBROADCAST); + memcpy(buffer + 10, &(flags), 2); + + // ciaddr: already zeroed + // yiaddr: already zeroed + // siaddr: already zeroed + // giaddr: already zeroed + + //put data in W5100 transmit buffer + _dhcpUdpSocket.write(buffer, 28); + + memset(buffer, 0, 32); // clear local buffer + + memcpy(buffer, _dhcpMacAddr, 6); // chaddr + + //put data in W5100 transmit buffer + _dhcpUdpSocket.write(buffer, 16); + + memset(buffer, 0, 32); // clear local buffer + + // leave zeroed out for sname && file + // put in W5100 transmit buffer x 6 (192 bytes) + + for(int i = 0; i < 6; i++) { + _dhcpUdpSocket.write(buffer, 32); + } + + // OPT - Magic Cookie + buffer[0] = (uint8_t)((MAGIC_COOKIE >> 24)& 0xFF); + buffer[1] = (uint8_t)((MAGIC_COOKIE >> 16)& 0xFF); + buffer[2] = (uint8_t)((MAGIC_COOKIE >> 8)& 0xFF); + buffer[3] = (uint8_t)(MAGIC_COOKIE& 0xFF); + + // OPT - message type + buffer[4] = dhcpMessageType; + buffer[5] = 0x01; + buffer[6] = messageType; //DHCP_REQUEST; + + // OPT - client identifier + buffer[7] = dhcpClientIdentifier; + buffer[8] = 0x07; + buffer[9] = 0x01; + memcpy(buffer + 10, _dhcpMacAddr, 6); + + // OPT - host name + buffer[16] = hostName; + buffer[17] = strlen(HOST_NAME) + 6; // length of hostname + last 3 bytes of mac address + strcpy((char*)&(buffer[18]), HOST_NAME); + + printByte((char*)&(buffer[24]), _dhcpMacAddr[3]); + printByte((char*)&(buffer[26]), _dhcpMacAddr[4]); + printByte((char*)&(buffer[28]), _dhcpMacAddr[5]); + + //put data in W5100 transmit buffer + _dhcpUdpSocket.write(buffer, 30); + + if(messageType == DHCP_REQUEST) + { + buffer[0] = dhcpRequestedIPaddr; + buffer[1] = 0x04; + buffer[2] = _dhcpLocalIp[0]; + buffer[3] = _dhcpLocalIp[1]; + buffer[4] = _dhcpLocalIp[2]; + buffer[5] = _dhcpLocalIp[3]; + + buffer[6] = dhcpServerIdentifier; + buffer[7] = 0x04; + buffer[8] = _dhcpDhcpServerIp[0]; + buffer[9] = _dhcpDhcpServerIp[1]; + buffer[10] = _dhcpDhcpServerIp[2]; + buffer[11] = _dhcpDhcpServerIp[3]; + + //put data in W5100 transmit buffer + _dhcpUdpSocket.write(buffer, 12); + } + + buffer[0] = dhcpParamRequest; + buffer[1] = 0x06; + buffer[2] = subnetMask; + buffer[3] = routersOnSubnet; + buffer[4] = dns; + buffer[5] = domainName; + buffer[6] = dhcpT1value; + buffer[7] = dhcpT2value; + buffer[8] = endOption; + + //put data in W5100 transmit buffer + _dhcpUdpSocket.write(buffer, 9); + + _dhcpUdpSocket.endPacket(); +} + +uint8_t DhcpClass::parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId) +{ + uint8_t type = 0; + uint8_t opt_len = 0; + + unsigned long startTime = millis(); + + while(_dhcpUdpSocket.parsePacket() <= 0) + { + if((millis() - startTime) > responseTimeout) + { + return 255; + } + delay(50); + } + // start reading in the packet + RIP_MSG_FIXED fixedMsg; + _dhcpUdpSocket.read((uint8_t*)&fixedMsg, sizeof(RIP_MSG_FIXED)); + + if(fixedMsg.op == DHCP_BOOTREPLY && _dhcpUdpSocket.remotePort() == DHCP_SERVER_PORT) + { + transactionId = ntohl(fixedMsg.xid); + if(memcmp(fixedMsg.chaddr, _dhcpMacAddr, 6) != 0 || (transactionId < _dhcpInitialTransactionId) || (transactionId > _dhcpTransactionId)) + { + // Need to read the rest of the packet here regardless + _dhcpUdpSocket.flush(); + return 0; + } + + memcpy(_dhcpLocalIp, fixedMsg.yiaddr, 4); + + // Skip to the option part + // Doing this a byte at a time so we don't have to put a big buffer + // on the stack (as we don't have lots of memory lying around) + for (int i =0; i < (240 - (int)sizeof(RIP_MSG_FIXED)); i++) + { + _dhcpUdpSocket.read(); // we don't care about the returned byte + } + + while (_dhcpUdpSocket.available() > 0) + { + switch (_dhcpUdpSocket.read()) + { + case endOption : + break; + + case padOption : + break; + + case dhcpMessageType : + opt_len = _dhcpUdpSocket.read(); + type = _dhcpUdpSocket.read(); + break; + + case subnetMask : + opt_len = _dhcpUdpSocket.read(); + _dhcpUdpSocket.read(_dhcpSubnetMask, 4); + break; + + case routersOnSubnet : + opt_len = _dhcpUdpSocket.read(); + _dhcpUdpSocket.read(_dhcpGatewayIp, 4); + for (int i = 0; i < opt_len-4; i++) + { + _dhcpUdpSocket.read(); + } + break; + + case dns : + opt_len = _dhcpUdpSocket.read(); + _dhcpUdpSocket.read(_dhcpDnsServerIp, 4); + for (int i = 0; i < opt_len-4; i++) + { + _dhcpUdpSocket.read(); + } + break; + + case dhcpServerIdentifier : + opt_len = _dhcpUdpSocket.read(); + if( *((uint32_t*)_dhcpDhcpServerIp) == 0 || + IPAddress(_dhcpDhcpServerIp) == _dhcpUdpSocket.remoteIP() ) + { + _dhcpUdpSocket.read(_dhcpDhcpServerIp, sizeof(_dhcpDhcpServerIp)); + } + else + { + // Skip over the rest of this option + while (opt_len--) + { + _dhcpUdpSocket.read(); + } + } + break; + + case dhcpT1value : + opt_len = _dhcpUdpSocket.read(); + _dhcpUdpSocket.read((uint8_t*)&_dhcpT1, sizeof(_dhcpT1)); + _dhcpT1 = ntohl(_dhcpT1); + break; + + case dhcpT2value : + opt_len = _dhcpUdpSocket.read(); + _dhcpUdpSocket.read((uint8_t*)&_dhcpT2, sizeof(_dhcpT2)); + _dhcpT2 = ntohl(_dhcpT2); + break; + + case dhcpIPaddrLeaseTime : + opt_len = _dhcpUdpSocket.read(); + _dhcpUdpSocket.read((uint8_t*)&_dhcpLeaseTime, sizeof(_dhcpLeaseTime)); + _dhcpLeaseTime = ntohl(_dhcpLeaseTime); + _renewInSec = _dhcpLeaseTime; + break; + + default : + opt_len = _dhcpUdpSocket.read(); + // Skip over the rest of this option + while (opt_len--) + { + _dhcpUdpSocket.read(); + } + break; + } + } + } + + // Need to skip to end of the packet regardless here + _dhcpUdpSocket.flush(); + + return type; +} + + +/* + returns: + 0/DHCP_CHECK_NONE: nothing happened + 1/DHCP_CHECK_RENEW_FAIL: renew failed + 2/DHCP_CHECK_RENEW_OK: renew success + 3/DHCP_CHECK_REBIND_FAIL: rebind fail + 4/DHCP_CHECK_REBIND_OK: rebind success +*/ +int DhcpClass::checkLease(){ + //this uses a signed / unsigned trick to deal with millis overflow + unsigned long now = millis(); + signed long snow = (long)now; + int rc=DHCP_CHECK_NONE; + if (_lastCheck != 0){ + signed long factor; + //calc how many ms past the timeout we are + factor = snow - (long)_secTimeout; + //if on or passed the timeout, reduce the counters + if ( factor >= 0 ){ + //next timeout should be now plus 1000 ms minus parts of second in factor + _secTimeout = snow + 1000 - factor % 1000; + //how many seconds late are we, minimum 1 + factor = factor / 1000 +1; + + //reduce the counters by that mouch + //if we can assume that the cycle time (factor) is fairly constant + //and if the remainder is less than cycle time * 2 + //do it early instead of late + if(_renewInSec < factor*2 ) + _renewInSec = 0; + else + _renewInSec -= factor; + + if(_rebindInSec < factor*2 ) + _rebindInSec = 0; + else + _rebindInSec -= factor; + } + + //if we have a lease but should renew, do it + if (_dhcp_state == STATE_DHCP_LEASED && _renewInSec <=0){ + _dhcp_state = STATE_DHCP_REREQUEST; + rc = 1 + request_DHCP_lease(); + } + + //if we have a lease or is renewing but should bind, do it + if( (_dhcp_state == STATE_DHCP_LEASED || _dhcp_state == STATE_DHCP_START) && _rebindInSec <=0){ + //this should basically restart completely + _dhcp_state = STATE_DHCP_START; + reset_DHCP_lease(); + rc = 3 + request_DHCP_lease(); + } + } + else{ + _secTimeout = snow + 1000; + } + + _lastCheck = now; + return rc; +} + +IPAddress DhcpClass::getLocalIp() +{ + return IPAddress(_dhcpLocalIp); +} + +IPAddress DhcpClass::getSubnetMask() +{ + return IPAddress(_dhcpSubnetMask); +} + +IPAddress DhcpClass::getGatewayIp() +{ + return IPAddress(_dhcpGatewayIp); +} + +IPAddress DhcpClass::getDhcpServerIp() +{ + return IPAddress(_dhcpDhcpServerIp); +} + +IPAddress DhcpClass::getDnsServerIp() +{ + return IPAddress(_dhcpDnsServerIp); +} + +void DhcpClass::printByte(char * buf, uint8_t n ) { + char *str = &buf[1]; + buf[0]='0'; + do { + unsigned long m = n; + n /= 16; + char c = m - 16 * n; + *str-- = c < 10 ? c + '0' : c + 'A' - 10; + } while(n); +} diff --git a/STM32F4/libraries/arduino_uip/Dhcp.h b/STM32F4/libraries/arduino_uip/Dhcp.h new file mode 100644 index 0000000..cc3cd35 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/Dhcp.h @@ -0,0 +1,178 @@ +// DHCP Library v0.3 - April 25, 2009 +// Author: Jordan Terrell - blog.jordanterrell.com + +#ifndef Dhcp_h +#define Dhcp_h + +#include "UIPUdp.h" + +/* DHCP state machine. */ +#define STATE_DHCP_START 0 +#define STATE_DHCP_DISCOVER 1 +#define STATE_DHCP_REQUEST 2 +#define STATE_DHCP_LEASED 3 +#define STATE_DHCP_REREQUEST 4 +#define STATE_DHCP_RELEASE 5 + +#define DHCP_FLAGSBROADCAST 0x8000 + +/* UDP port numbers for DHCP */ +#define DHCP_SERVER_PORT 67 /* from server to client */ +#define DHCP_CLIENT_PORT 68 /* from client to server */ + +/* DHCP message OP code */ +#define DHCP_BOOTREQUEST 1 +#define DHCP_BOOTREPLY 2 + +/* DHCP message type */ +#define DHCP_DISCOVER 1 +#define DHCP_OFFER 2 +#define DHCP_REQUEST 3 +#define DHCP_DECLINE 4 +#define DHCP_ACK 5 +#define DHCP_NAK 6 +#define DHCP_RELEASE 7 +#define DHCP_INFORM 8 + +#define DHCP_HTYPE10MB 1 +#define DHCP_HTYPE100MB 2 + +#define DHCP_HLENETHERNET 6 +#define DHCP_HOPS 0 +#define DHCP_SECS 0 + +#define MAGIC_COOKIE 0x63825363 +#define MAX_DHCP_OPT 16 + +#define HOST_NAME "ENC28J" +#define DEFAULT_LEASE (900) //default lease time in seconds + +#define DHCP_CHECK_NONE (0) +#define DHCP_CHECK_RENEW_FAIL (1) +#define DHCP_CHECK_RENEW_OK (2) +#define DHCP_CHECK_REBIND_FAIL (3) +#define DHCP_CHECK_REBIND_OK (4) + +enum +{ + padOption = 0, + subnetMask = 1, + timerOffset = 2, + routersOnSubnet = 3, + /* timeServer = 4, + nameServer = 5,*/ + dns = 6, + /*logServer = 7, + cookieServer = 8, + lprServer = 9, + impressServer = 10, + resourceLocationServer = 11,*/ + hostName = 12, + /*bootFileSize = 13, + meritDumpFile = 14,*/ + domainName = 15, + /*swapServer = 16, + rootPath = 17, + extentionsPath = 18, + IPforwarding = 19, + nonLocalSourceRouting = 20, + policyFilter = 21, + maxDgramReasmSize = 22, + defaultIPTTL = 23, + pathMTUagingTimeout = 24, + pathMTUplateauTable = 25, + ifMTU = 26, + allSubnetsLocal = 27, + broadcastAddr = 28, + performMaskDiscovery = 29, + maskSupplier = 30, + performRouterDiscovery = 31, + routerSolicitationAddr = 32, + staticRoute = 33, + trailerEncapsulation = 34, + arpCacheTimeout = 35, + ethernetEncapsulation = 36, + tcpDefaultTTL = 37, + tcpKeepaliveInterval = 38, + tcpKeepaliveGarbage = 39, + nisDomainName = 40, + nisServers = 41, + ntpServers = 42, + vendorSpecificInfo = 43, + netBIOSnameServer = 44, + netBIOSdgramDistServer = 45, + netBIOSnodeType = 46, + netBIOSscope = 47, + xFontServer = 48, + xDisplayManager = 49,*/ + dhcpRequestedIPaddr = 50, + dhcpIPaddrLeaseTime = 51, + /*dhcpOptionOverload = 52,*/ + dhcpMessageType = 53, + dhcpServerIdentifier = 54, + dhcpParamRequest = 55, + /*dhcpMsg = 56, + dhcpMaxMsgSize = 57,*/ + dhcpT1value = 58, + dhcpT2value = 59, + /*dhcpClassIdentifier = 60,*/ + dhcpClientIdentifier = 61, + endOption = 255 +}; + +typedef struct _RIP_MSG_FIXED +{ + uint8_t op; + uint8_t htype; + uint8_t hlen; + uint8_t hops; + uint32_t xid; + uint16_t secs; + uint16_t flags; + uint8_t ciaddr[4]; + uint8_t yiaddr[4]; + uint8_t siaddr[4]; + uint8_t giaddr[4]; + uint8_t chaddr[6]; +}RIP_MSG_FIXED; + +class DhcpClass { +private: + uint32_t _dhcpInitialTransactionId; + uint32_t _dhcpTransactionId; + uint8_t _dhcpMacAddr[6]; + uint8_t _dhcpLocalIp[4]; + uint8_t _dhcpSubnetMask[4]; + uint8_t _dhcpGatewayIp[4]; + uint8_t _dhcpDhcpServerIp[4]; + uint8_t _dhcpDnsServerIp[4]; + uint32_t _dhcpLeaseTime; + uint32_t _dhcpT1, _dhcpT2; + signed long _renewInSec; + signed long _rebindInSec; + signed long _lastCheck; + unsigned long _timeout; + unsigned long _responseTimeout; + unsigned long _secTimeout; + uint8_t _dhcp_state; + UIPUDP _dhcpUdpSocket; + + int request_DHCP_lease(); + void reset_DHCP_lease(); + void presend_DHCP(); + void send_DHCP_MESSAGE(uint8_t, uint16_t); + void printByte(char *, uint8_t); + + uint8_t parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId); +public: + IPAddress getLocalIp(); + IPAddress getSubnetMask(); + IPAddress getGatewayIp(); + IPAddress getDhcpServerIp(); + IPAddress getDnsServerIp(); + + int beginWithDHCP(uint8_t *, unsigned long timeout = 60000, unsigned long responseTimeout = 4000); + int checkLease(); +}; + +#endif diff --git a/STM32F4/libraries/arduino_uip/Dns.cpp b/STM32F4/libraries/arduino_uip/Dns.cpp new file mode 100644 index 0000000..2b97fb7 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/Dns.cpp @@ -0,0 +1,422 @@ +// Arduino DNS client for Enc28J60-based Ethernet shield +// (c) Copyright 2009-2010 MCQN Ltd. +// Released under Apache License, version 2.0 + +#include "Udp.h" +#include "utility/util.h" + +#include "Dns.h" +#include +//#include +#include "Arduino.h" + + +#define SOCKET_NONE 255 +// Various flags and header field values for a DNS message +#define UDP_HEADER_SIZE 8 +#define DNS_HEADER_SIZE 12 +#define TTL_SIZE 4 +#define QUERY_FLAG (0) +#define RESPONSE_FLAG (1<<15) +#define QUERY_RESPONSE_MASK (1<<15) +#define OPCODE_STANDARD_QUERY (0) +#define OPCODE_INVERSE_QUERY (1<<11) +#define OPCODE_STATUS_REQUEST (2<<11) +#define OPCODE_MASK (15<<11) +#define AUTHORITATIVE_FLAG (1<<10) +#define TRUNCATION_FLAG (1<<9) +#define RECURSION_DESIRED_FLAG (1<<8) +#define RECURSION_AVAILABLE_FLAG (1<<7) +#define RESP_NO_ERROR (0) +#define RESP_FORMAT_ERROR (1) +#define RESP_SERVER_FAILURE (2) +#define RESP_NAME_ERROR (3) +#define RESP_NOT_IMPLEMENTED (4) +#define RESP_REFUSED (5) +#define RESP_MASK (15) +#define TYPE_A (0x0001) +#define CLASS_IN (0x0001) +#define LABEL_COMPRESSION_MASK (0xC0) +// Port number that DNS servers listen on +#define DNS_PORT 53 + +// Possible return codes from ProcessResponse +#define SUCCESS 1 +#define TIMED_OUT -1 +#define INVALID_SERVER -2 +#define TRUNCATED -3 +#define INVALID_RESPONSE -4 + +void DNSClient::begin(const IPAddress& aDNSServer) +{ + iDNSServer = aDNSServer; + iRequestId = 0; +} + + +int DNSClient::inet_aton(const char* aIPAddrString, IPAddress& aResult) +{ + // See if we've been given a valid IP address + const char* p =aIPAddrString; + while (*p && + ( (*p == '.') || (*p >= '0') || (*p <= '9') )) + { + p++; + } + + if (*p == '\0') + { + // It's looking promising, we haven't found any invalid characters + p = aIPAddrString; + int segment =0; + int segmentValue =0; + while (*p && (segment < 4)) + { + if (*p == '.') + { + // We've reached the end of a segment + if (segmentValue > 255) + { + // You can't have IP address segments that don't fit in a byte + return 0; + } + else + { + aResult[segment] = (byte)segmentValue; + segment++; + segmentValue = 0; + } + } + else + { + // Next digit + segmentValue = (segmentValue*10)+(*p - '0'); + } + p++; + } + // We've reached the end of address, but there'll still be the last + // segment to deal with + if ((segmentValue > 255) || (segment > 3)) + { + // You can't have IP address segments that don't fit in a byte, + // or more than four segments + return 0; + } + else + { + aResult[segment] = (byte)segmentValue; + return 1; + } + } + else + { + return 0; + } +} + +int DNSClient::getHostByName(const char* aHostname, IPAddress& aResult) +{ + int ret =0; + + // See if it's a numeric IP address + if (inet_aton(aHostname, aResult)) + { + // It is, our work here is done + return 1; + } + + // Check we've got a valid DNS server to use + if (iDNSServer == INADDR_NONE) + { + return INVALID_SERVER; + } + + // Find a socket to use + if (iUdp.begin(1024+(millis() & 0xF)) == 1) + { + // Try up to three times + int retries = 0; +// while ((retries < 3) && (ret <= 0)) + { + // Send DNS request + ret = iUdp.beginPacket(iDNSServer, DNS_PORT); + if (ret != 0) + { + // Now output the request data + ret = BuildRequest(aHostname); + if (ret != 0) + { + // And finally send the request + ret = iUdp.endPacket(); + if (ret != 0) + { + // Now wait for a response + int wait_retries = 0; + ret = TIMED_OUT; + while ((wait_retries < 3) && (ret == TIMED_OUT)) + { + ret = ProcessResponse(5000, aResult); + wait_retries++; + } + } + } + } + retries++; + } + + // We're done with the socket now + iUdp.stop(); + } + + return ret; +} + +uint16_t DNSClient::BuildRequest(const char* aName) +{ + // Build header + // 1 1 1 1 1 1 + // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + // | ID | + // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + // |QR| Opcode |AA|TC|RD|RA| Z | RCODE | + // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + // | QDCOUNT | + // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + // | ANCOUNT | + // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + // | NSCOUNT | + // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + // | ARCOUNT | + // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + // As we only support one request at a time at present, we can simplify + // some of this header + iRequestId = millis(); // generate a random ID + uint16_t twoByteBuffer; + + // FIXME We should also check that there's enough space available to write to, rather + // FIXME than assume there's enough space (as the code does at present) + iUdp.write((uint8_t*)&iRequestId, sizeof(iRequestId)); + + twoByteBuffer = htons(QUERY_FLAG | OPCODE_STANDARD_QUERY | RECURSION_DESIRED_FLAG); + iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); + + twoByteBuffer = htons(1); // One question record + iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); + + twoByteBuffer = 0; // Zero answer records + iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); + + iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); + // and zero additional records + iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); + + // Build question + const char* start =aName; + const char* end =start; + uint8_t len; + // Run through the name being requested + while (*end) + { + // Find out how long this section of the name is + end = start; + while (*end && (*end != '.') ) + { + end++; + } + + if (end-start > 0) + { + // Write out the size of this section + len = end-start; + iUdp.write(&len, sizeof(len)); + // And then write out the section + iUdp.write((uint8_t*)start, end-start); + } + start = end+1; + } + + // We've got to the end of the question name, so + // terminate it with a zero-length section + len = 0; + iUdp.write(&len, sizeof(len)); + // Finally the type and class of question + twoByteBuffer = htons(TYPE_A); + iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); + + twoByteBuffer = htons(CLASS_IN); // Internet class of question + iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); + // Success! Everything buffered okay + return 1; +} + + +uint16_t DNSClient::ProcessResponse(uint16_t aTimeout, IPAddress& aAddress) +{ + uint32_t startTime = millis(); + + // Wait for a response packet + while(iUdp.parsePacket() <= 0) + { + if((millis() - startTime) > aTimeout) + return TIMED_OUT; + delay(50); + } + + // We've had a reply! + // Read the UDP header + uint8_t header[DNS_HEADER_SIZE]; // Enough space to reuse for the DNS header + // Check that it's a response from the right server and the right port + if ( (iDNSServer != iUdp.remoteIP()) || + (iUdp.remotePort() != DNS_PORT) ) + { + // It's not from who we expected + return INVALID_SERVER; + } + + // Read through the rest of the response + if (iUdp.available() < DNS_HEADER_SIZE) + { + return TRUNCATED; + } + iUdp.read(header, DNS_HEADER_SIZE); + + uint16_t header_flags = htons(*((uint16_t*)&header[2])); + // Check that it's a response to this request + if ( ( iRequestId != (*((uint16_t*)&header[0])) ) || + ((header_flags & QUERY_RESPONSE_MASK) != (uint16_t)RESPONSE_FLAG) ) + { + // Mark the entire packet as read + iUdp.flush(); + return INVALID_RESPONSE; + } + // Check for any errors in the response (or in our request) + // although we don't do anything to get round these + if ( (header_flags & TRUNCATION_FLAG) || (header_flags & RESP_MASK) ) + { + // Mark the entire packet as read + iUdp.flush(); + return -5; //INVALID_RESPONSE; + } + + // And make sure we've got (at least) one answer + uint16_t answerCount = htons(*((uint16_t*)&header[6])); + if (answerCount == 0 ) + { + // Mark the entire packet as read + iUdp.flush(); + return -6; //INVALID_RESPONSE; + } + + // Skip over any questions + for (uint16_t i =0; i < htons(*((uint16_t*)&header[4])); i++) + { + // Skip over the name + uint8_t len; + do + { + iUdp.read(&len, sizeof(len)); + if (len > 0) + { + // Don't need to actually read the data out for the string, just + // advance ptr to beyond it + while(len--) + { + iUdp.read(); // we don't care about the returned byte + } + } + } while (len != 0); + + // Now jump over the type and class + for (int i =0; i < 4; i++) + { + iUdp.read(); // we don't care about the returned byte + } + } + + // Now we're up to the bit we're interested in, the answer + // There might be more than one answer (although we'll just use the first + // type A answer) and some authority and additional resource records but + // we're going to ignore all of them. + + for (uint16_t i =0; i < answerCount; i++) + { + // Skip the name + uint8_t len; + do + { + iUdp.read(&len, sizeof(len)); + if ((len & LABEL_COMPRESSION_MASK) == 0) + { + // It's just a normal label + if (len > 0) + { + // And it's got a length + // Don't need to actually read the data out for the string, + // just advance ptr to beyond it + while(len--) + { + iUdp.read(); // we don't care about the returned byte + } + } + } + else + { + // This is a pointer to a somewhere else in the message for the + // rest of the name. We don't care about the name, and RFC1035 + // says that a name is either a sequence of labels ended with a + // 0 length octet or a pointer or a sequence of labels ending in + // a pointer. Either way, when we get here we're at the end of + // the name + // Skip over the pointer + iUdp.read(); // we don't care about the returned byte + // And set len so that we drop out of the name loop + len = 0; + } + } while (len != 0); + + // Check the type and class + uint16_t answerType; + uint16_t answerClass; + iUdp.read((uint8_t*)&answerType, sizeof(answerType)); + iUdp.read((uint8_t*)&answerClass, sizeof(answerClass)); + + // Ignore the Time-To-Live as we don't do any caching + for (int i =0; i < TTL_SIZE; i++) + { + iUdp.read(); // we don't care about the returned byte + } + + // And read out the length of this answer + // Don't need header_flags anymore, so we can reuse it here + iUdp.read((uint8_t*)&header_flags, sizeof(header_flags)); + + if ( (htons(answerType) == TYPE_A) && (htons(answerClass) == CLASS_IN) ) + { + if (htons(header_flags) != 4) + { + // It's a weird size + // Mark the entire packet as read + iUdp.flush(); + return -9;//INVALID_RESPONSE; + } + iUdp.read(aAddress.raw_address(), 4); + return SUCCESS; + } + else + { + // This isn't an answer type we're after, move onto the next one + for (uint16_t i =0; i < htons(header_flags); i++) + { + iUdp.read(); // we don't care about the returned byte + } + } + } + + // Mark the entire packet as read + iUdp.flush(); + + // If we get here then we haven't found an answer + return -10;//INVALID_RESPONSE; +} + diff --git a/STM32F4/libraries/arduino_uip/Dns.h b/STM32F4/libraries/arduino_uip/Dns.h new file mode 100644 index 0000000..4ccb1e1 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/Dns.h @@ -0,0 +1,41 @@ +// Arduino DNS client for Enc28J60-based Ethernet shield +// (c) Copyright 2009-2010 MCQN Ltd. +// Released under Apache License, version 2.0 + +#ifndef DNSClient_h +#define DNSClient_h + +#include + +class DNSClient +{ +public: + // ctor + void begin(const IPAddress& aDNSServer); + + /** Convert a numeric IP address string into a four-byte IP address. + @param aIPAddrString IP address to convert + @param aResult IPAddress structure to store the returned IP address + @result 1 if aIPAddrString was successfully converted to an IP address, + else error code + */ + int inet_aton(const char *aIPAddrString, IPAddress& aResult); + + /** Resolve the given hostname to an IP address. + @param aHostname Name to be resolved + @param aResult IPAddress structure to store the returned IP address + @result 1 if aIPAddrString was successfully converted to an IP address, + else error code + */ + int getHostByName(const char* aHostname, IPAddress& aResult); + +protected: + uint16_t BuildRequest(const char* aName); + uint16_t ProcessResponse(uint16_t aTimeout, IPAddress& aAddress); + + IPAddress iDNSServer; + uint16_t iRequestId; + UIPUDP iUdp; +}; + +#endif diff --git a/STM32F4/libraries/arduino_uip/README b/STM32F4/libraries/arduino_uip/README new file mode 100644 index 0000000..321b334 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/README @@ -0,0 +1,227 @@ +This is UIPEthernet version 1.09 + +An plugin-replacement of the stock Arduino Ethernet library for ENC28J60 shields and breakout boards. Full support for persistent (streaming) TCP-connections and UDP (Client and Server each), ARP, ICMP, DHCP and DNS. +Just include 'UIPEthernet.h' instead of 'Ethernet.h' and use all your code written for the stock Arduino Ethernet lib! + +UIPEthernet is written as a wrapper around the mature uIP Stack by Adam Dunkels, which provides the low-level implementation for all supported protocols. To overcome the memory-constrains (a 'regular' uIP-application does all processing in RAM) the ENC28J60 internal memory is used for all stream buffers (in and out). Only 400-600 Bytes of Arduinos RAM are used (depending on the number of concurrently open connections). As of Flash-memory a ATmega368-based Arduino is the minimum requirenment. + +This library is written by Norbert Truchsess + +uIP was written by Adam Dunkels of the Networked Embedded Systems group at the Swedish Institute of Computer Science. + +This library was inspired by the SerialIP implementation by Adam Nielsen , actually I took this code as a starting point, but in the latest versions there are very few lines left. + +Installation +------------ + +To install the libraries, you need to place them into your "libraries" folder. You can find it within your Arduino IDE distribution within the "hardware" folder. + + C:\> cd [path to Arduino distribution]\libraries + C:\> git clone https://github.com/ntruchsess/arduino_uip UIPEthernet + +Be sure to restart the IDE if it was running. + +On a Mac, you will want to create a folder named "libraries" in in the "Documents" -> "Arduino" folder within your home directory. Clone the project there (and restart the IDE, if it was running during this process). + + $ cd ~/Documents/Arduino/libraries + $ git clone https://github.com/ntruchsess/arduino_uip UIPEthernet + +Or you download the zipped version of the library from https://github.com/ntruchsess/arduino_uip/releases, and copy the contained directory UIPEthernet to [path to Arduino distribution]\libraries\UIPEthernet. + +If you are running Arduino-IDE 1.5.x use release-version 1.59 or checkout branch 'Arduino_1.5.x' + +Additional information can be found on the Arduino website: http://www.arduino.cc/en/Hacking/Libraries + +Documentation +------------- + +For more information visit: + + - UIPEthernet Repository on github: + https://github.com/ntruchsess/arduino_uip + + - Arduino Ethernet library description + http://arduino.cc/en/Reference/Ethernet + (Arduino_uip uses the same API as that, just include "UIPEthernet.h", "UIPClient.h", "UIPServer.h" and "UIPUDP.h" instead of the stock "Ethernet.h", "EthernetClient.h", "EthernetServer.h " and "EthernetUDP.h") + + - uIP API reference: + http://www.sics.se/~adam/uip/uip-1.0-refman/ + + - Arduino forums + http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl + + - uIP homepage: + http://www.sics.se/~adam/uip/index.php/Main_Page + +Licenses +------------- + +UIPEthernet.h +UIPEthernet.cpp +UIPServer.h +UIPServer.cpp +UIPClient.h +UIPClient.cpp +UIPUdp.h +UIPUdp.cpp +utility/mempool.h +utility/mempool.cpp + +Copyright (c) 2013 Norbert Truchsess +All rights reserved. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +-------------- + +utility/enc28j60.h + +Author : Pascal Stang (c)2005 +Modified by Norbert Truchsess +Copyright: GPL V2 + +-------------- + +utility/Enc28J60Network.h +utility/Enc28J60Network.cpp + +Copyright (c) 2013 Norbert Truchsess +All rights reserved. + +inspired and based on enc28j60.c file from the AVRlib library by Pascal Stang. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +-------------- + +utility/uip.c +utility/uip_arp.h +utility/uip_arp.c +utility/uip_arch.h +utility/uip.h +utility/uipopt.h + +Copyright (c) 2001-2003, Adam Dunkels , . +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the Institute nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +-------------- + +uip-conf.h +utility/uip-neighbor.h +utility/uip-neighbor.c +utility/uip_timer.h +utility/uip_timer.c +utility/uip_clock.h + +Author Adam Dunkels Adam Dunkels , +Copyright (c) 2004,2006, Swedish Institute of Computer Science. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the Institute nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +-------------- + +Dhcp.h +Dhcp.cpp + +DHCP Library v0.3 - April 25, 2009 +Author: Jordan Terrell - blog.jordanterrell.com +- as included in Arduinos stock Ethernet-library, no special licence mentioned here + +-------------- + +Dns.h +Dns.cpp + +(c) Copyright 2009-2010 MCQN Ltd. +Released under Apache License, version 2.0 + +-------------- + +clock-arch.h +clock-arch.c + +Copyright (c) 2010 Adam Nielsen +All rights reserved. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/STM32F4/libraries/arduino_uip/UIPClient.cpp b/STM32F4/libraries/arduino_uip/UIPClient.cpp new file mode 100644 index 0000000..a1c0540 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/UIPClient.cpp @@ -0,0 +1,586 @@ +/* + UIPClient.cpp - Arduino implementation of a uIP wrapper class. + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +extern "C" +{ +#import "utility/uip-conf.h" +#import "utility/uip.h" +#import "utility/uip_arp.h" +#import "string.h" +} +#include "UIPEthernet.h" +#include "UIPClient.h" +#include "Dns.h" + +#ifdef UIPETHERNET_DEBUG_CLIENT +#include "HardwareSerial.h" +#endif + +#define Serial SerialUSB + + +#define UIP_TCP_PHYH_LEN UIP_LLH_LEN+UIP_IPTCPH_LEN + +uip_userdata_t UIPClient::all_data[UIP_CONNS]; + +UIPClient::UIPClient() : + data(NULL) +{ +} + +UIPClient::UIPClient(uip_userdata_t* conn_data) : + data(conn_data) +{ +} + +int +UIPClient::connect(IPAddress ip, uint16_t port) +{ + stop(); + uip_ipaddr_t ipaddr; + uip_ip_addr(ipaddr, ip); + struct uip_conn* conn = uip_connect(&ipaddr, htons(port)); + if (conn) + { +#if UIP_CONNECT_TIMEOUT > 0 + int32_t timeout = millis() + 1000 * UIP_CONNECT_TIMEOUT; +#endif + while((conn->tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) + { + UIPEthernetClass::tick(); + if ((conn->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) + { + data = (uip_userdata_t*) conn->appstate; +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.print(F("connected, state: ")); + Serial.print(data->state); + Serial.print(F(", first packet in: ")); + Serial.println(data->packets_in[0]); +#endif + return 1; + } +#if UIP_CONNECT_TIMEOUT > 0 + if (((int32_t)(millis() - timeout)) > 0) + { + conn->tcpstateflags = UIP_CLOSED; + break; + } +#endif + } + } + return 0; +} + +int +UIPClient::connect(const char *host, uint16_t port) +{ + // Look up the host first + int ret = 0; +#if UIP_UDP + DNSClient dns; + IPAddress remote_addr; + + dns.begin(UIPEthernetClass::_dnsServerAddress); + ret = dns.getHostByName(host, remote_addr); + if (ret == 1) { + return connect(remote_addr, port); + } +#endif + return ret; +} + +void +UIPClient::stop() +{ + if (data && data->state) + { +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("before stop(), with data")); + _dumpAllData(); +#endif + _flushBlocks(&data->packets_in[0]); + if (data->state & UIP_CLIENT_REMOTECLOSED) + { + data->state = 0; + } + else + { + data->state |= UIP_CLIENT_CLOSE; + } +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("after stop()")); + _dumpAllData(); +#endif + } +#ifdef UIPETHERNET_DEBUG_CLIENT + else + { + Serial.println(F("stop(), data: NULL")); + } +#endif + data = NULL; + UIPEthernetClass::tick(); +} + +uint8_t +UIPClient::connected() +{ + return (data && (data->packets_in[0] != NOBLOCK || (data->state & UIP_CLIENT_CONNECTED))) ? 1 : 0; +} + +bool +UIPClient::operator==(const UIPClient& rhs) +{ + return data && rhs.data && (data == rhs.data); +} + +UIPClient::operator bool() +{ + UIPEthernetClass::tick(); + return data && (!(data->state & UIP_CLIENT_REMOTECLOSED) || data->packets_in[0] != NOBLOCK); +} + +size_t +UIPClient::write(uint8_t c) +{ + return _write(data, &c, 1); +} + +size_t +UIPClient::write(const uint8_t *buf, size_t size) +{ + return _write(data, buf, size); +} + +size_t +UIPClient::_write(uip_userdata_t* u, const uint8_t *buf, size_t size) +{ + int remain = size; + uint16_t written; +#if UIP_ATTEMPTS_ON_WRITE > 0 + uint16_t attempts = UIP_ATTEMPTS_ON_WRITE; +#endif + repeat: + UIPEthernetClass::tick(); + if (u && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) + { + uint8_t p = _currentBlock(&u->packets_out[0]); + if (u->packets_out[p] == NOBLOCK) + { +newpacket: + u->packets_out[p] = Enc28J60Network::allocBlock(UIP_SOCKET_DATALEN); + if (u->packets_out[p] == NOBLOCK) + { +#if UIP_ATTEMPTS_ON_WRITE > 0 + if ((--attempts)>0) +#endif +#if UIP_ATTEMPTS_ON_WRITE != 0 + goto repeat; +#endif + goto ready; + } + u->out_pos = 0; + } +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.print(F("UIPClient.write: writePacket(")); + Serial.print(u->packets_out[p]); + Serial.print(F(") pos: ")); + Serial.print(u->out_pos); + Serial.print(F(", buf[")); + Serial.print(size-remain); + Serial.print(F("-")); + Serial.print(remain); + Serial.print(F("]: '")); + Serial.write((uint8_t*)buf+size-remain,remain); + Serial.println(F("'")); +#endif + written = Enc28J60Network::writePacket(u->packets_out[p],u->out_pos,(uint8_t*)buf+size-remain,remain); + remain -= written; + u->out_pos+=written; + if (remain > 0) + { + if (p == UIP_SOCKET_NUMPACKETS-1) + { +#if UIP_ATTEMPTS_ON_WRITE > 0 + if ((--attempts)>0) +#endif +#if UIP_ATTEMPTS_ON_WRITE != 0 + goto repeat; +#endif + goto ready; + } + p++; + goto newpacket; + } +ready: +#if UIP_CLIENT_TIMER >= 0 + u->timer = millis()+UIP_CLIENT_TIMER; +#endif + return size-remain; + } + return -1; +} + +int +UIPClient::available() +{ + if (*this) + return _available(data); + return 0; +} + +int +UIPClient::_available(uip_userdata_t *u) +{ + int len = 0; + for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) + { + len += Enc28J60Network::blockSize(u->packets_in[i]); + } + return len; +} + +int +UIPClient::read(uint8_t *buf, size_t size) +{ + if (*this) + { + uint16_t remain = size; + if (data->packets_in[0] == NOBLOCK) + return 0; + uint16_t read; + do + { + read = Enc28J60Network::readPacket(data->packets_in[0],0,buf+size-remain,remain); + if (read == Enc28J60Network::blockSize(data->packets_in[0])) + { + remain -= read; + _eatBlock(&data->packets_in[0]); + if (uip_stopped(&uip_conns[data->state & UIP_CLIENT_SOCKETS]) && !(data->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) + data->state |= UIP_CLIENT_RESTART; + if (data->packets_in[0] == NOBLOCK) + { + if (data->state & UIP_CLIENT_REMOTECLOSED) + { + data->state = 0; + data = NULL; + } + return size-remain; + } + } + else + { + Enc28J60Network::resizeBlock(data->packets_in[0],read); + break; + } + } + while(remain > 0); + return size; + } + return -1; +} + +int +UIPClient::read() +{ + uint8_t c; + if (read(&c,1) < 0) + return -1; + return c; +} + +int +UIPClient::peek() +{ + if (*this) + { + if (data->packets_in[0] != NOBLOCK) + { + uint8_t c; + Enc28J60Network::readPacket(data->packets_in[0],0,&c,1); + return c; + } + } + return -1; +} + +void +UIPClient::flush() +{ + if (*this) + { + _flushBlocks(&data->packets_in[0]); + } +} + +void +uipclient_appcall(void) +{ + uint16_t send_len = 0; + uip_userdata_t *u = (uip_userdata_t*)uip_conn->appstate; + if (!u && uip_connected()) + { +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("UIPClient uip_connected")); + UIPClient::_dumpAllData(); +#endif + u = (uip_userdata_t*) UIPClient::_allocateData(); + if (u) + { + uip_conn->appstate = u; +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.print(F("UIPClient allocated state: ")); + Serial.println(u->state,BIN); +#endif + } +#ifdef UIPETHERNET_DEBUG_CLIENT + else + Serial.println(F("UIPClient allocation failed")); +#endif + } + if (u) + { + if (uip_newdata()) + { +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.print(F("UIPClient uip_newdata, uip_len:")); + Serial.println(uip_len); +#endif + if (uip_len && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) + { + for (uint8_t i=0; i < UIP_SOCKET_NUMPACKETS; i++) + { + if (u->packets_in[i] == NOBLOCK) + { + u->packets_in[i] = Enc28J60Network::allocBlock(uip_len); + if (u->packets_in[i] != NOBLOCK) + { + Enc28J60Network::copyPacket(u->packets_in[i],0,UIPEthernetClass::in_packet,((uint8_t*)uip_appdata)-uip_buf,uip_len); + if (i == UIP_SOCKET_NUMPACKETS-1) + uip_stop(); + goto finish_newdata; + } + } + } + UIPEthernetClass::packetstate &= ~UIPETHERNET_FREEPACKET; + uip_stop(); + } + } +finish_newdata: + if (u->state & UIP_CLIENT_RESTART) + { + u->state &= ~UIP_CLIENT_RESTART; + uip_restart(); + } + // If the connection has been closed, save received but unread data. + if (uip_closed() || uip_timedout()) + { +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("UIPClient uip_closed")); + UIPClient::_dumpAllData(); +#endif + // drop outgoing packets not sent yet: + UIPClient::_flushBlocks(&u->packets_out[0]); + if (u->packets_in[0] != NOBLOCK) + { + ((uip_userdata_closed_t *)u)->lport = uip_conn->lport; + u->state |= UIP_CLIENT_REMOTECLOSED; + } + else + u->state = 0; + // disassociate appdata. +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("after UIPClient uip_closed")); + UIPClient::_dumpAllData(); +#endif + uip_conn->appstate = NULL; + goto finish; + } + if (uip_acked()) + { +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("UIPClient uip_acked")); +#endif + UIPClient::_eatBlock(&u->packets_out[0]); + } + if (uip_poll() || uip_rexmit()) + { +#ifdef UIPETHERNET_DEBUG_CLIENT + //Serial.println(F("UIPClient uip_poll")); +#endif + if (u->packets_out[0] != NOBLOCK) + { + if (u->packets_out[1] == NOBLOCK) + { + send_len = u->out_pos; + if (send_len > 0) + { + Enc28J60Network::resizeBlock(u->packets_out[0],0,send_len); + } + } + else + send_len = Enc28J60Network::blockSize(u->packets_out[0]); + if (send_len > 0) + { + UIPEthernetClass::uip_hdrlen = ((uint8_t*)uip_appdata)-uip_buf; + UIPEthernetClass::uip_packet = Enc28J60Network::allocBlock(UIPEthernetClass::uip_hdrlen+send_len); + if (UIPEthernetClass::uip_packet != NOBLOCK) + { + Enc28J60Network::copyPacket(UIPEthernetClass::uip_packet,UIPEthernetClass::uip_hdrlen,u->packets_out[0],0,send_len); + UIPEthernetClass::packetstate |= UIPETHERNET_SENDPACKET; + } + } + goto finish; + } + } + // don't close connection unless all outgoing packets are sent + if (u->state & UIP_CLIENT_CLOSE) + { +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("UIPClient state UIP_CLIENT_CLOSE")); + UIPClient::_dumpAllData(); +#endif + if (u->packets_out[0] == NOBLOCK) + { + u->state = 0; + uip_conn->appstate = NULL; + uip_close(); +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("no blocks out -> free userdata")); + UIPClient::_dumpAllData(); +#endif + } + else + { + uip_stop(); +#ifdef UIPETHERNET_DEBUG_CLIENT + Serial.println(F("blocks outstanding transfer -> uip_stop()")); +#endif + } + } + } + finish: + uip_send(uip_appdata,send_len); + uip_len = send_len; +} + +uip_userdata_t * +UIPClient::_allocateData() +{ + for ( uint8_t sock = 0; sock < UIP_CONNS; sock++ ) + { + uip_userdata_t* data = &UIPClient::all_data[sock]; + if (!data->state) + { + data->state = sock | UIP_CLIENT_CONNECTED; + memset(&data->packets_in[0],0,sizeof(uip_userdata_t)-sizeof(data->state)); + return data; + } + } + return NULL; +} + +uint8_t +UIPClient::_currentBlock(memhandle* block) +{ + for (uint8_t i = 1; i < UIP_SOCKET_NUMPACKETS; i++) + { + if (block[i] == NOBLOCK) + return i-1; + } + return UIP_SOCKET_NUMPACKETS-1; +} + +void +UIPClient::_eatBlock(memhandle* block) +{ +#ifdef UIPETHERNET_DEBUG_CLIENT + memhandle* start = block; + Serial.print(F("eatblock(")); + Serial.print(*block); + Serial.print(F("): ")); + for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) + { + Serial.print(start[i]); + Serial.print(F(" ")); + } + Serial.print(F("-> ")); +#endif + Enc28J60Network::freeBlock(block[0]); + for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS-1; i++) + { + block[i] = block[i+1]; + } + block[UIP_SOCKET_NUMPACKETS-1] = NOBLOCK; +#ifdef UIPETHERNET_DEBUG_CLIENT + for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) + { + Serial.print(start[i]); + Serial.print(F(" ")); + } + Serial.println(); +#endif +} + +void +UIPClient::_flushBlocks(memhandle* block) +{ + for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) + { + Enc28J60Network::freeBlock(block[i]); + block[i] = NOBLOCK; + } +} + +#ifdef UIPETHERNET_DEBUG_CLIENT +void +UIPClient::_dumpAllData() { + for (uint8_t i=0; i < UIP_CONNS; i++) + { + Serial.print(F("UIPClient::all_data[")); + Serial.print(i); + Serial.print(F("], state:")); + Serial.println(all_data[i].state, BIN); + Serial.print(F("packets_in: ")); + for (uint8_t j=0; j < UIP_SOCKET_NUMPACKETS; j++) + { + Serial.print(all_data[i].packets_in[j]); + Serial.print(F(" ")); + } + Serial.println(); + if (all_data[i].state & UIP_CLIENT_REMOTECLOSED) + { + Serial.print(F("state remote closed, local port: ")); + Serial.println(htons(((uip_userdata_closed_t *)(&all_data[i]))->lport)); + } + else + { + Serial.print(F("packets_out: ")); + for (uint8_t j=0; j < UIP_SOCKET_NUMPACKETS; j++) + { + Serial.print(all_data[i].packets_out[j]); + Serial.print(F(" ")); + } + Serial.println(); + Serial.print(F("out_pos: ")); + Serial.println(all_data[i].out_pos); + } + } +} +#endif diff --git a/STM32F4/libraries/arduino_uip/UIPClient.h b/STM32F4/libraries/arduino_uip/UIPClient.h new file mode 100644 index 0000000..6c0c006 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/UIPClient.h @@ -0,0 +1,112 @@ +/* + UIPClient.h - Arduino implementation of a uIP wrapper class. + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#ifndef UIPCLIENT_H +#define UIPCLIENT_H + +#include "ethernet_comp.h" +#include "Print.h" +#import "Client.h" +#import "utility/mempool.h" + +extern "C" { + #import "utility/uip.h" +} + +#define UIP_SOCKET_DATALEN UIP_TCP_MSS +//#define UIP_SOCKET_NUMPACKETS UIP_RECEIVE_WINDOW/UIP_TCP_MSS+1 +#ifndef UIP_SOCKET_NUMPACKETS +#define UIP_SOCKET_NUMPACKETS 5 +#endif + +#define UIP_CLIENT_CONNECTED 0x10 +#define UIP_CLIENT_CLOSE 0x20 +#define UIP_CLIENT_REMOTECLOSED 0x40 +#define UIP_CLIENT_RESTART 0x80 +#define UIP_CLIENT_STATEFLAGS (UIP_CLIENT_CONNECTED | UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED | UIP_CLIENT_RESTART) +#define UIP_CLIENT_SOCKETS ~UIP_CLIENT_STATEFLAGS + +typedef uint8_t uip_socket_ptr; + +typedef struct { + uint8_t state; + memhandle packets_in[UIP_SOCKET_NUMPACKETS]; + uint16_t lport; /**< The local TCP port, in network byte order. */ +} uip_userdata_closed_t; + +typedef struct { + uint8_t state; + memhandle packets_in[UIP_SOCKET_NUMPACKETS]; + memhandle packets_out[UIP_SOCKET_NUMPACKETS]; + memaddress out_pos; +#if UIP_CLIENT_TIMER >= 0 + unsigned long timer; +#endif +} uip_userdata_t; + +class UIPClient : public Client { + +public: + UIPClient(); + int connect(IPAddress ip, uint16_t port); + int connect(const char *host, uint16_t port); + int read(uint8_t *buf, size_t size); + void stop(); + uint8_t connected(); + operator bool(); + virtual bool operator==(const EthernetClient&); + virtual bool operator!=(const EthernetClient& rhs) { return !this->operator==(rhs); }; + + size_t write(uint8_t); + size_t write(const uint8_t *buf, size_t size); + int available(); + int read(); + int peek(); + void flush(); + + using Print::write; + +private: + UIPClient(struct uip_conn *_conn); + UIPClient(uip_userdata_t* conn_data); + + uip_userdata_t* data; + + static uip_userdata_t all_data[UIP_CONNS]; + static uip_userdata_t* _allocateData(); + + static size_t _write(uip_userdata_t *,const uint8_t *buf, size_t size); + static int _available(uip_userdata_t *); + + static uint8_t _currentBlock(memhandle* blocks); + static void _eatBlock(memhandle* blocks); + static void _flushBlocks(memhandle* blocks); + +#ifdef UIPETHERNET_DEBUG_CLIENT + static void _dumpAllData(); +#endif + + friend class UIPEthernetClass; + friend class UIPServer; + + friend void uipclient_appcall(void); + +}; + +#endif diff --git a/STM32F4/libraries/arduino_uip/UIPEthernet.cpp b/STM32F4/libraries/arduino_uip/UIPEthernet.cpp new file mode 100644 index 0000000..397209a --- /dev/null +++ b/STM32F4/libraries/arduino_uip/UIPEthernet.cpp @@ -0,0 +1,486 @@ +/* + UIPEthernet.cpp - Arduino implementation of a uIP wrapper class. + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#include +#include "UIPEthernet.h" +#include "utility/Enc28J60Network.h" + +#if(defined UIPETHERNET_DEBUG || defined UIPETHERNET_DEBUG_CHKSUM) +#include "HardwareSerial.h" +#endif + +#define Serial SerialUSB + +#include "UIPUdp.h" + +extern "C" +{ +#include "utility/uip-conf.h" +#include "utility/uip.h" +#include "utility/uip_arp.h" +#include "utility/uip_timer.h" +} + +#define ETH_HDR ((struct uip_eth_hdr *)&uip_buf[0]) + +memhandle UIPEthernetClass::in_packet(NOBLOCK); +memhandle UIPEthernetClass::uip_packet(NOBLOCK); +uint8_t UIPEthernetClass::uip_hdrlen(0); +uint8_t UIPEthernetClass::packetstate(0); + +IPAddress UIPEthernetClass::_dnsServerAddress; +DhcpClass* UIPEthernetClass::_dhcp(NULL); + +unsigned long UIPEthernetClass::periodic_timer; + +// Because uIP isn't encapsulated within a class we have to use global +// variables, so we can only have one TCP/IP stack per program. + +UIPEthernetClass::UIPEthernetClass() +{ +} + +#if UIP_UDP +int +UIPEthernetClass::begin(const uint8_t* mac) +{ + static DhcpClass s_dhcp; + _dhcp = &s_dhcp; + // Initialise the basic info + init(mac); + + // Now try to get our config info from a DHCP server + int ret = _dhcp->beginWithDHCP((uint8_t*)mac); + if(ret == 1) + { + // We've successfully found a DHCP server and got our configuration info, so set things + // accordingly + configure(_dhcp->getLocalIp(),_dhcp->getDnsServerIp(),_dhcp->getGatewayIp(),_dhcp->getSubnetMask()); + } + return ret; +} +#endif + +void +UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip) +{ + IPAddress dns = ip; + dns[3] = 1; + begin(mac, ip, dns); +} + +void +UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns) +{ + IPAddress gateway = ip; + gateway[3] = 1; + begin(mac, ip, dns, gateway); +} + +void +UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway) +{ + IPAddress subnet(255, 255, 255, 0); + begin(mac, ip, dns, gateway, subnet); +} + +void +UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet) +{ + init(mac); + configure(ip,dns,gateway,subnet); +} + +int UIPEthernetClass::maintain(){ + tick(); + int rc = DHCP_CHECK_NONE; +#if UIP_UDP + if(_dhcp != NULL){ + //we have a pointer to dhcp, use it + rc = _dhcp->checkLease(); + switch ( rc ){ + case DHCP_CHECK_NONE: + //nothing done + break; + case DHCP_CHECK_RENEW_OK: + case DHCP_CHECK_REBIND_OK: + //we might have got a new IP. + configure(_dhcp->getLocalIp(),_dhcp->getDnsServerIp(),_dhcp->getGatewayIp(),_dhcp->getSubnetMask()); + break; + default: + //this is actually a error, it will retry though + break; + } + } + return rc; +#endif +} + +IPAddress UIPEthernetClass::localIP() +{ + IPAddress ret; + uip_ipaddr_t a; + uip_gethostaddr(a); + return ip_addr_uip(a); +} + +IPAddress UIPEthernetClass::subnetMask() +{ + IPAddress ret; + uip_ipaddr_t a; + uip_getnetmask(a); + return ip_addr_uip(a); +} + +IPAddress UIPEthernetClass::gatewayIP() +{ + IPAddress ret; + uip_ipaddr_t a; + uip_getdraddr(a); + return ip_addr_uip(a); +} + +IPAddress UIPEthernetClass::dnsServerIP() +{ + return _dnsServerAddress; +} + +void +UIPEthernetClass::tick() +{ + if (in_packet == NOBLOCK) + { + in_packet = Enc28J60Network::receivePacket(); +#ifdef UIPETHERNET_DEBUG + if (in_packet != NOBLOCK) + { + Serial.print(F("--------------\r\nreceivePacket: ")); + Serial.println(in_packet); + } +#endif + } + if (in_packet != NOBLOCK) + { + packetstate = UIPETHERNET_FREEPACKET; + uip_len = Enc28J60Network::blockSize(in_packet); + if (uip_len > 0) + { + Enc28J60Network::readPacket(in_packet,0,(uint8_t*)uip_buf,UIP_BUFSIZE); + if (ETH_HDR ->type == HTONS(UIP_ETHTYPE_IP)) + { + uip_packet = in_packet; //required for upper_layer_checksum of in_packet! +#ifdef UIPETHERNET_DEBUG + Serial.print(F("readPacket type IP, uip_len: ")); + Serial.println(uip_len); +#endif + uip_arp_ipin(); + uip_input(); + if (uip_len > 0) + { + uip_arp_out(); + network_send(); + } + } + else if (ETH_HDR ->type == HTONS(UIP_ETHTYPE_ARP)) + { +#ifdef UIPETHERNET_DEBUG + Serial.print(F("readPacket type ARP, uip_len: ")); + Serial.println(uip_len); +#endif + uip_arp_arpin(); + if (uip_len > 0) + { + network_send(); + } + } + } + if (in_packet != NOBLOCK && (packetstate & UIPETHERNET_FREEPACKET)) + { +#ifdef UIPETHERNET_DEBUG + Serial.print(F("freeing packet: ")); + Serial.println(in_packet); +#endif + Enc28J60Network::freePacket(); + in_packet = NOBLOCK; + } + } + + unsigned long now = millis(); + +#if UIP_CLIENT_TIMER >= 0 + boolean periodic = (long)( now - periodic_timer ) >= 0; + for (int i = 0; i < UIP_CONNS; i++) + { +#else + if ((long)( now - periodic_timer ) >= 0) + { + periodic_timer = now + UIP_PERIODIC_TIMER; + + for (int i = 0; i < UIP_CONNS; i++) + { +#endif + uip_conn = &uip_conns[i]; +#if UIP_CLIENT_TIMER >= 0 + if (periodic) + { +#endif + uip_process(UIP_TIMER); +#if UIP_CLIENT_TIMER >= 0 + } + else + { + if ((long)( now - ((uip_userdata_t*)uip_conn->appstate)->timer) >= 0) + uip_process(UIP_POLL_REQUEST); + else + continue; + } +#endif + // If the above function invocation resulted in data that + // should be sent out on the Enc28J60Network, the global variable + // uip_len is set to a value > 0. + if (uip_len > 0) + { + uip_arp_out(); + network_send(); + } + } +#if UIP_CLIENT_TIMER >= 0 + if (periodic) + { + periodic_timer = now + UIP_PERIODIC_TIMER; +#endif +#if UIP_UDP + for (int i = 0; i < UIP_UDP_CONNS; i++) + { + uip_udp_periodic(i); + // If the above function invocation resulted in data that + // should be sent out on the Enc28J60Network, the global variable + // uip_len is set to a value > 0. */ + if (uip_len > 0) + { + UIPUDP::_send((uip_udp_userdata_t *)(uip_udp_conns[i].appstate)); + } + } +#endif /* UIP_UDP */ + } +} + +boolean UIPEthernetClass::network_send() +{ + if (packetstate & UIPETHERNET_SENDPACKET) + { +#ifdef UIPETHERNET_DEBUG + Serial.print(F("Enc28J60Network_send uip_packet: ")); + Serial.print(uip_packet); + Serial.print(F(", hdrlen: ")); + Serial.println(uip_hdrlen); +#endif + Enc28J60Network::writePacket(uip_packet,0,uip_buf,uip_hdrlen); + packetstate &= ~ UIPETHERNET_SENDPACKET; + goto sendandfree; + } + uip_packet = Enc28J60Network::allocBlock(uip_len); + if (uip_packet != NOBLOCK) + { +#ifdef UIPETHERNET_DEBUG + Serial.print(F("Enc28J60Network_send uip_buf (uip_len): ")); + Serial.print(uip_len); + Serial.print(F(", packet: ")); + Serial.println(uip_packet); +#endif + Enc28J60Network::writePacket(uip_packet,0,uip_buf,uip_len); + goto sendandfree; + } + return false; +sendandfree: + Enc28J60Network::sendPacket(uip_packet); + Enc28J60Network::freeBlock(uip_packet); + uip_packet = NOBLOCK; + return true; +} + +void UIPEthernetClass::init(const uint8_t* mac) { + periodic_timer = millis() + UIP_PERIODIC_TIMER; + + Enc28J60Network::init((uint8_t*)mac); + uip_seteth_addr(mac); + + uip_init(); + uip_arp_init(); +} + +void UIPEthernetClass::configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet) { + uip_ipaddr_t ipaddr; + + uip_ip_addr(ipaddr, ip); + uip_sethostaddr(ipaddr); + + uip_ip_addr(ipaddr, gateway); + uip_setdraddr(ipaddr); + + uip_ip_addr(ipaddr, subnet); + uip_setnetmask(ipaddr); + + _dnsServerAddress = dns; +} + +UIPEthernetClass UIPEthernet; + +/*---------------------------------------------------------------------------*/ +uint16_t +UIPEthernetClass::chksum(uint16_t sum, const uint8_t *data, uint16_t len) +{ + uint16_t t; + const uint8_t *dataptr; + const uint8_t *last_byte; + + dataptr = data; + last_byte = data + len - 1; + + while(dataptr < last_byte) { /* At least two more bytes */ + t = (dataptr[0] << 8) + dataptr[1]; + sum += t; + if(sum < t) { + sum++; /* carry */ + } + dataptr += 2; + } + + if(dataptr == last_byte) { + t = (dataptr[0] << 8) + 0; + sum += t; + if(sum < t) { + sum++; /* carry */ + } + } + + /* Return sum in host byte order. */ + return sum; +} + +/*---------------------------------------------------------------------------*/ + +uint16_t +UIPEthernetClass::ipchksum(void) +{ + uint16_t sum; + + sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN); + return (sum == 0) ? 0xffff : htons(sum); +} + +/*---------------------------------------------------------------------------*/ +uint16_t +#if UIP_UDP +UIPEthernetClass::upper_layer_chksum(uint8_t proto) +#else +uip_tcpchksum(void) +#endif +{ + uint16_t upper_layer_len; + uint16_t sum; + +#if UIP_CONF_IPV6 + upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]); +#else /* UIP_CONF_IPV6 */ + upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN; +#endif /* UIP_CONF_IPV6 */ + + /* First sum pseudoheader. */ + + /* IP protocol and length fields. This addition cannot carry. */ +#if UIP_UDP + sum = upper_layer_len + proto; +#else + sum = upper_layer_len + UIP_PROTO_TCP; +#endif + /* Sum IP source and destination addresses. */ + sum = UIPEthernetClass::chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); + + uint8_t upper_layer_memlen; +#if UIP_UDP + switch(proto) + { +// case UIP_PROTO_ICMP: +// case UIP_PROTO_ICMP6: +// upper_layer_memlen = upper_layer_len; +// break; + case UIP_PROTO_UDP: + upper_layer_memlen = UIP_UDPH_LEN; + break; + default: +// case UIP_PROTO_TCP: +#endif + upper_layer_memlen = (BUF->tcpoffset >> 4) << 2; +#if UIP_UDP + break; + } +#endif + sum = UIPEthernetClass::chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], upper_layer_memlen); +#ifdef UIPETHERNET_DEBUG_CHKSUM + Serial.print(F("chksum uip_buf[")); + Serial.print(UIP_IPH_LEN + UIP_LLH_LEN); + Serial.print(F("-")); + Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen); + Serial.print(F("]: ")); + Serial.println(htons(sum),HEX); +#endif + if (upper_layer_memlen < upper_layer_len) + { + sum = Enc28J60Network::chksum( + sum, + UIPEthernetClass::uip_packet, + UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen, + upper_layer_len - upper_layer_memlen + ); +#ifdef UIPETHERNET_DEBUG_CHKSUM + Serial.print(F("chksum uip_packet(")); + Serial.print(uip_packet); + Serial.print(F(")[")); + Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen); + Serial.print(F("-")); + Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_len); + Serial.print(F("]: ")); + Serial.println(htons(sum),HEX); +#endif + } + return (sum == 0) ? 0xffff : htons(sum); +} + +uint16_t +uip_ipchksum(void) +{ + return UIPEthernet.ipchksum(); +} + +#if UIP_UDP +uint16_t +uip_tcpchksum(void) +{ + uint16_t sum = UIPEthernet.upper_layer_chksum(UIP_PROTO_TCP); + return sum; +} + +uint16_t +uip_udpchksum(void) +{ + uint16_t sum = UIPEthernet.upper_layer_chksum(UIP_PROTO_UDP); + return sum; +} +#endif diff --git a/STM32F4/libraries/arduino_uip/UIPEthernet.h b/STM32F4/libraries/arduino_uip/UIPEthernet.h new file mode 100644 index 0000000..ff49707 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/UIPEthernet.h @@ -0,0 +1,129 @@ +/* + UIPEthernet.h - Arduino implementation of a uIP wrapper class. + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#ifndef UIPETHERNET_H +#define UIPETHERNET_H + +#define UIP_UDP 1 + +//#define UIPETHERNET_DEBUG +//#define UIPETHERNET_DEBUG_CHKSUM +//#define UIPETHERNET_DEBUG_UDP +//#define UIPETHERNET_DEBUG_CLIENT + +#include "ethernet_comp.h" +#include +#include "Dhcp.h" +#include "IPAddress.h" +#include "utility/Enc28J60Network.h" +#include "UIPClient.h" +#include "UIPServer.h" +#include "UIPUdp.h" + +extern "C" +{ +#include "utility/uip_timer.h" +#include "utility/uip.h" +} + +#define UIPETHERNET_FREEPACKET 1 +#define UIPETHERNET_SENDPACKET 2 +#define UIPETHERNET_BUFFERREAD 4 + +#define uip_ip_addr(addr, ip) do { \ + ((u16_t *)(addr))[0] = HTONS(((ip[0]) << 8) | (ip[1])); \ + ((u16_t *)(addr))[1] = HTONS(((ip[2]) << 8) | (ip[3])); \ + } while(0) + +#define ip_addr_uip(a) IPAddress(a[0] & 0xFF, a[0] >> 8 , a[1] & 0xFF, a[1] >> 8) //TODO this is not IPV6 capable + +#define uip_seteth_addr(eaddr) do {uip_ethaddr.addr[0] = eaddr[0]; \ + uip_ethaddr.addr[1] = eaddr[1];\ + uip_ethaddr.addr[2] = eaddr[2];\ + uip_ethaddr.addr[3] = eaddr[3];\ + uip_ethaddr.addr[4] = eaddr[4];\ + uip_ethaddr.addr[5] = eaddr[5];} while(0) + +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +class UIPEthernetClass +{ +public: + UIPEthernetClass(); + + int begin(const uint8_t* mac); + void begin(const uint8_t* mac, IPAddress ip); + void begin(const uint8_t* mac, IPAddress ip, IPAddress dns); + void begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway); + void begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); + + // maintain() must be called at regular intervals to process the incoming serial + // data and issue IP events to the sketch. It does not return until all IP + // events have been processed. Renews dhcp-lease if required. + int maintain(); + + IPAddress localIP(); + IPAddress subnetMask(); + IPAddress gatewayIP(); + IPAddress dnsServerIP(); + +private: + static memhandle in_packet; + static memhandle uip_packet; + static uint8_t uip_hdrlen; + static uint8_t packetstate; + + static IPAddress _dnsServerAddress; + static DhcpClass* _dhcp; + + static unsigned long periodic_timer; + + static void init(const uint8_t* mac); + static void configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); + + static void tick(); + + static boolean network_send(); + + friend class UIPServer; + + friend class UIPClient; + + friend class UIPUDP; + + static uint16_t chksum(uint16_t sum, const uint8_t* data, uint16_t len); + static uint16_t ipchksum(void); +#if UIP_UDP + static uint16_t upper_layer_chksum(uint8_t proto); +#endif + friend uint16_t uip_ipchksum(void); + friend uint16_t uip_tcpchksum(void); + friend uint16_t uip_udpchksum(void); + + friend void uipclient_appcall(void); + friend void uipudp_appcall(void); + +#if UIP_CONF_IPV6 + uint16_t uip_icmp6chksum(void); +#endif /* UIP_CONF_IPV6 */ +}; + +extern UIPEthernetClass UIPEthernet; + +#endif diff --git a/STM32F4/libraries/arduino_uip/UIPServer.cpp b/STM32F4/libraries/arduino_uip/UIPServer.cpp new file mode 100644 index 0000000..21c7ef5 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/UIPServer.cpp @@ -0,0 +1,63 @@ +/* + UIPServer.cpp - Arduino implementation of a uIP wrapper class. + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ +#include "UIPEthernet.h" +#include "UIPServer.h" +extern "C" { + #include "utility/uip-conf.h" +} + +UIPServer::UIPServer(uint16_t port) : _port(htons(port)) +{ +} + +UIPClient UIPServer::available() +{ + UIPEthernetClass::tick(); + for ( uip_userdata_t* data = &UIPClient::all_data[0]; data < &UIPClient::all_data[UIP_CONNS]; data++ ) + { + if (data->packets_in[0] != NOBLOCK + && (((data->state & UIP_CLIENT_CONNECTED) && uip_conns[data->state & UIP_CLIENT_SOCKETS].lport ==_port) + || ((data->state & UIP_CLIENT_REMOTECLOSED) && ((uip_userdata_closed_t *)data)->lport == _port))) + return UIPClient(data); + } + return UIPClient(); +} + +void UIPServer::begin() +{ + uip_listen(_port); + UIPEthernetClass::tick(); +} + +size_t UIPServer::write(uint8_t c) +{ + return write(&c,1); +} + +size_t UIPServer::write(const uint8_t *buf, size_t size) +{ + size_t ret = 0; + for ( uip_userdata_t* data = &UIPClient::all_data[0]; data < &UIPClient::all_data[UIP_CONNS]; data++ ) + { + if ((data->state & UIP_CLIENT_CONNECTED) && uip_conns[data->state & UIP_CLIENT_SOCKETS].lport ==_port) + ret += UIPClient::_write(data,buf,size); + } + return ret; +} + diff --git a/STM32F4/libraries/arduino_uip/UIPServer.h b/STM32F4/libraries/arduino_uip/UIPServer.h new file mode 100644 index 0000000..0cc0619 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/UIPServer.h @@ -0,0 +1,40 @@ +/* + UIPServer.h - Arduino implementation of a uIP wrapper class. + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ +#ifndef UIPSERVER_H +#define UIPSERVER_H + +#include "ethernet_comp.h" +#import "Server.h" +#import "UIPClient.h" + +class UIPServer : public Server { + +public: + UIPServer(uint16_t); + UIPClient available(); + void begin(); + size_t write(uint8_t); + size_t write(const uint8_t *buf, size_t size); + using Print::write; + +private: + uint16_t _port; +}; + +#endif diff --git a/STM32F4/libraries/arduino_uip/UIPUdp.cpp b/STM32F4/libraries/arduino_uip/UIPUdp.cpp new file mode 100644 index 0000000..f9ba4e3 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/UIPUdp.cpp @@ -0,0 +1,385 @@ +/* + UIPUdp.cpp - Arduino implementation of a uIP wrapper class. + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#include "UIPEthernet.h" +#include "UIPUdp.h" +#include "Dns.h" + +#ifdef UIPETHERNET_DEBUG_UDP +#include "HardwareSerial.h" +#endif + +#define Serial SerialUSB + +extern "C" { +#include "utility/uip-conf.h" +#include "utility/uip.h" +#include "utility/uip_arp.h" +} + +#if UIP_UDP +#define UIP_ARPHDRSIZE 42 +#define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN]) + +// Constructor +UIPUDP::UIPUDP() : + _uip_udp_conn(NULL) +{ + memset(&appdata,0,sizeof(appdata)); +} + +// initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use +uint8_t +UIPUDP::begin(uint16_t port) +{ + if (!_uip_udp_conn) + { + _uip_udp_conn = uip_udp_new(NULL, 0); + } + if (_uip_udp_conn) + { + uip_udp_bind(_uip_udp_conn,htons(port)); + _uip_udp_conn->appstate = &appdata; + return 1; + } + return 0; +} + +// Finish with the UDP socket +void +UIPUDP::stop() +{ + if (_uip_udp_conn) + { + uip_udp_remove(_uip_udp_conn); + _uip_udp_conn->appstate = NULL; + _uip_udp_conn=NULL; + Enc28J60Network::freeBlock(appdata.packet_in); + Enc28J60Network::freeBlock(appdata.packet_next); + Enc28J60Network::freeBlock(appdata.packet_out); + memset(&appdata,0,sizeof(appdata)); + } +} + +// Sending UDP packets + +// Start building up a packet to send to the remote host specific in ip and port +// Returns 1 if successful, 0 if there was a problem with the supplied IP address or port +int +UIPUDP::beginPacket(IPAddress ip, uint16_t port) +{ + UIPEthernetClass::tick(); + if (ip && port) + { + uip_ipaddr_t ripaddr; + uip_ip_addr(&ripaddr, ip); +#ifdef UIPETHERNET_DEBUG_UDP + Serial.print(F("udp beginPacket, ")); +#endif + if (_uip_udp_conn) + { + _uip_udp_conn->rport = htons(port); + uip_ipaddr_copy(_uip_udp_conn->ripaddr, &ripaddr); + } + else + { + _uip_udp_conn = uip_udp_new(&ripaddr,htons(port)); + if (_uip_udp_conn) + { +#ifdef UIPETHERNET_DEBUG_UDP + Serial.print(F("new connection, ")); +#endif + _uip_udp_conn->appstate = &appdata; + } + else + { +#ifdef UIPETHERNET_DEBUG_UDP + Serial.println(F("failed to allocate new connection")); +#endif + return 0; + } + } +#ifdef UIPETHERNET_DEBUG_UDP + Serial.print(F("rip: ")); + Serial.print(ip); + Serial.print(F(", port: ")); + Serial.println(port); +#endif + } + if (_uip_udp_conn) + { + if (appdata.packet_out == NOBLOCK) + { + appdata.packet_out = Enc28J60Network::allocBlock(UIP_UDP_MAXPACKETSIZE); + appdata.out_pos = UIP_UDP_PHYH_LEN; + if (appdata.packet_out != NOBLOCK) + return 1; +#ifdef UIPETHERNET_DEBUG_UDP + else + Serial.println(F("failed to allocate memory for packet")); +#endif + } +#ifdef UIPETHERNET_DEBUG_UDP + else + Serial.println(F("previous packet on that connection not sent yet")); +#endif + } + return 0; +} + +// Start building up a packet to send to the remote host specific in host and port +// Returns 1 if successful, 0 if there was a problem resolving the hostname or port +int +UIPUDP::beginPacket(const char *host, uint16_t port) +{ + // Look up the host first + int ret = 0; + DNSClient dns; + IPAddress remote_addr; + + dns.begin(UIPEthernet.dnsServerIP()); + ret = dns.getHostByName(host, remote_addr); + if (ret == 1) { + return beginPacket(remote_addr, port); + } else { + return ret; + } +} + +// Finish off this packet and send it +// Returns 1 if the packet was sent successfully, 0 if there was an error +int +UIPUDP::endPacket() +{ + if (_uip_udp_conn && appdata.packet_out != NOBLOCK) + { + appdata.send = true; + Enc28J60Network::resizeBlock(appdata.packet_out,0,appdata.out_pos); + uip_udp_periodic_conn(_uip_udp_conn); + if (uip_len > 0) + { + _send(&appdata); + return 1; + } + } + return 0; +} + +// Write a single byte into the packet +size_t +UIPUDP::write(uint8_t c) +{ + return write(&c,1); +} + +// Write size bytes from buffer into the packet +size_t +UIPUDP::write(const uint8_t *buffer, size_t size) +{ + if (appdata.packet_out != NOBLOCK) + { + size_t ret = Enc28J60Network::writePacket(appdata.packet_out,appdata.out_pos,(uint8_t*)buffer,size); + appdata.out_pos += ret; + return ret; + } + return 0; +} + +// Start processing the next available incoming packet +// Returns the size of the packet in bytes, or 0 if no packets are available +int +UIPUDP::parsePacket() +{ + UIPEthernetClass::tick(); +#ifdef UIPETHERNET_DEBUG_UDP + if (appdata.packet_in != NOBLOCK) + { + Serial.print(F("udp parsePacket freeing previous packet: ")); + Serial.println(appdata.packet_in); + } +#endif + Enc28J60Network::freeBlock(appdata.packet_in); + + appdata.packet_in = appdata.packet_next; + appdata.packet_next = NOBLOCK; + +#ifdef UIPETHERNET_DEBUG_UDP + if (appdata.packet_in != NOBLOCK) + { + Serial.print(F("udp parsePacket received packet: ")); + Serial.print(appdata.packet_in); + } +#endif + int size = Enc28J60Network::blockSize(appdata.packet_in); +#ifdef UIPETHERNET_DEBUG_UDP + if (appdata.packet_in != NOBLOCK) + { + Serial.print(F(", size: ")); + Serial.println(size); + } +#endif + return size; +} + +// Number of bytes remaining in the current packet +int +UIPUDP::available() +{ + UIPEthernetClass::tick(); + return Enc28J60Network::blockSize(appdata.packet_in); +} + +// Read a single byte from the current packet +int +UIPUDP::read() +{ + unsigned char c; + if (read(&c,1) > 0) + { + return c; + } + return -1; +} + +// Read up to len bytes from the current packet and place them into buffer +// Returns the number of bytes read, or 0 if none are available +int +UIPUDP::read(unsigned char* buffer, size_t len) +{ + UIPEthernetClass::tick(); + if (appdata.packet_in != NOBLOCK) + { + memaddress read = Enc28J60Network::readPacket(appdata.packet_in,0,buffer,len); + if (read == Enc28J60Network::blockSize(appdata.packet_in)) + { + Enc28J60Network::freeBlock(appdata.packet_in); + appdata.packet_in = NOBLOCK; + } + else + Enc28J60Network::resizeBlock(appdata.packet_in,read); + return read; + } + return 0; +} + +// Return the next byte from the current packet without moving on to the next byte +int +UIPUDP::peek() +{ + UIPEthernetClass::tick(); + if (appdata.packet_in != NOBLOCK) + { + unsigned char c; + if (Enc28J60Network::readPacket(appdata.packet_in,0,&c,1) == 1) + return c; + } + return -1; +} + +// Finish reading the current packet +void +UIPUDP::flush() +{ + UIPEthernetClass::tick(); + Enc28J60Network::freeBlock(appdata.packet_in); + appdata.packet_in = NOBLOCK; +} + +// Return the IP address of the host who sent the current incoming packet +IPAddress +UIPUDP::remoteIP() +{ + return _uip_udp_conn ? ip_addr_uip(_uip_udp_conn->ripaddr) : IPAddress(); +} + +// Return the port of the host who sent the current incoming packet +uint16_t +UIPUDP::remotePort() +{ + return _uip_udp_conn ? ntohs(_uip_udp_conn->rport) : 0; +} + +// uIP callback function + +void +uipudp_appcall(void) { + if (uip_udp_userdata_t *data = (uip_udp_userdata_t *)(uip_udp_conn->appstate)) + { + if (uip_newdata()) + { + if (data->packet_next == NOBLOCK) + { + uip_udp_conn->rport = UDPBUF->srcport; + uip_ipaddr_copy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr); + data->packet_next = Enc28J60Network::allocBlock(ntohs(UDPBUF->udplen)-UIP_UDPH_LEN); + //if we are unable to allocate memory the packet is dropped. udp doesn't guarantee packet delivery + if (data->packet_next != NOBLOCK) + { + //discard Linklevel and IP and udp-header and any trailing bytes: + Enc28J60Network::copyPacket(data->packet_next,0,UIPEthernetClass::in_packet,UIP_UDP_PHYH_LEN,Enc28J60Network::blockSize(data->packet_next)); + #ifdef UIPETHERNET_DEBUG_UDP + Serial.print(F("udp, uip_newdata received packet: ")); + Serial.print(data->packet_next); + Serial.print(F(", size: ")); + Serial.println(Enc28J60Network::blockSize(data->packet_next)); + #endif + } + } + } + if (uip_poll() && data->send) + { + //set uip_slen (uip private) by calling uip_udp_send +#ifdef UIPETHERNET_DEBUG_UDP + Serial.print(F("udp, uip_poll preparing packet to send: ")); + Serial.print(data->packet_out); + Serial.print(F(", size: ")); + Serial.println(Enc28J60Network::blockSize(data->packet_out)); +#endif + UIPEthernetClass::uip_packet = data->packet_out; + UIPEthernetClass::uip_hdrlen = UIP_UDP_PHYH_LEN; + uip_udp_send(data->out_pos - (UIP_UDP_PHYH_LEN)); + } + } +} + +void +UIPUDP::_send(uip_udp_userdata_t *data) { + uip_arp_out(); //add arp + if (uip_len == UIP_ARPHDRSIZE) + { + UIPEthernetClass::uip_packet = NOBLOCK; + UIPEthernetClass::packetstate &= ~UIPETHERNET_SENDPACKET; +#ifdef UIPETHERNET_DEBUG_UDP + Serial.println(F("udp, uip_poll results in ARP-packet")); +#endif + } + else + //arp found ethaddr for ip (otherwise packet is replaced by arp-request) + { + data->send = false; + data->packet_out = NOBLOCK; + UIPEthernetClass::packetstate |= UIPETHERNET_SENDPACKET; +#ifdef UIPETHERNET_DEBUG_UDP + Serial.print(F("udp, uip_packet to send: ")); + Serial.println(UIPEthernetClass::uip_packet); +#endif + } + UIPEthernetClass::network_send(); +} +#endif diff --git a/STM32F4/libraries/arduino_uip/UIPUdp.h b/STM32F4/libraries/arduino_uip/UIPUdp.h new file mode 100644 index 0000000..b007a3c --- /dev/null +++ b/STM32F4/libraries/arduino_uip/UIPUdp.h @@ -0,0 +1,126 @@ +/* + UIPUdp.h - Arduino implementation of a uIP wrapper class. + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#ifndef UIPUDP_H +#define UIPUDP_H + +#include "ethernet_comp.h" +#include "Arduino.h" +#include +#include "utility/mempool.h" +extern "C" { + #include "utility/uip.h" +} + +#define UIP_UDP_MAXDATALEN 1500 +#define UIP_UDP_PHYH_LEN UIP_LLH_LEN+UIP_IPUDPH_LEN +#define UIP_UDP_MAXPACKETSIZE UIP_UDP_MAXDATALEN+UIP_UDP_PHYH_LEN + +typedef struct { + memaddress out_pos; + memhandle packet_next; + memhandle packet_in; + memhandle packet_out; + boolean send; +} uip_udp_userdata_t; + +class UIPUDP : public UDP +{ + +private: + struct uip_udp_conn *_uip_udp_conn; + + uip_udp_userdata_t appdata; + +public: + UIPUDP(); // Constructor + uint8_t + begin(uint16_t);// initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use + void + stop(); // Finish with the UDP socket + + // Sending UDP packets + + // Start building up a packet to send to the remote host specific in ip and port + // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port + int + beginPacket(IPAddress ip, uint16_t port); + // Start building up a packet to send to the remote host specific in host and port + // Returns 1 if successful, 0 if there was a problem resolving the hostname or port + int + beginPacket(const char *host, uint16_t port); + // Finish off this packet and send it + // Returns 1 if the packet was sent successfully, 0 if there was an error + int + endPacket(); + // Write a single byte into the packet + size_t + write(uint8_t); + // Write size bytes from buffer into the packet + size_t + write(const uint8_t *buffer, size_t size); + + using Print::write; + + // Start processing the next available incoming packet + // Returns the size of the packet in bytes, or 0 if no packets are available + int + parsePacket(); + // Number of bytes remaining in the current packet + int + available(); + // Read a single byte from the current packet + int + read(); + // Read up to len bytes from the current packet and place them into buffer + // Returns the number of bytes read, or 0 if none are available + int + read(unsigned char* buffer, size_t len); + // Read up to len characters from the current packet and place them into buffer + // Returns the number of characters read, or 0 if none are available + int + read(char* buffer, size_t len) + { + return read((unsigned char*) buffer, len); + } + ; + // Return the next byte from the current packet without moving on to the next byte + int + peek(); + void + flush(); // Finish reading the current packet + + // Return the IP address of the host who sent the current incoming packet + IPAddress + remoteIP(); + + // Return the port of the host who sent the current incoming packet + uint16_t + remotePort(); + +private: + + friend void uipudp_appcall(void); + + friend class UIPEthernetClass; + static void _send(uip_udp_userdata_t *data); + +}; + +#endif diff --git a/STM32F4/libraries/arduino_uip/ethernet_comp.h b/STM32F4/libraries/arduino_uip/ethernet_comp.h new file mode 100644 index 0000000..4cec2ab --- /dev/null +++ b/STM32F4/libraries/arduino_uip/ethernet_comp.h @@ -0,0 +1,9 @@ +#ifndef ETHERNET_COMP_H +#define ETHERNET_COMP_H + +#define Ethernet UIPEthernet +#define EthernetClient UIPClient +#define EthernetServer UIPServer +#define EthernetUDP UIPUDP + +#endif diff --git a/STM32F4/libraries/arduino_uip/examples/AdvancedChatServer/AdvancedChatServer.ino b/STM32F4/libraries/arduino_uip/examples/AdvancedChatServer/AdvancedChatServer.ino new file mode 100644 index 0000000..bc2f094 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/examples/AdvancedChatServer/AdvancedChatServer.ino @@ -0,0 +1,104 @@ +/* + Advanced Chat Server + + A simple server that distributes any incoming messages to all + connected clients but the client the message comes from. + To use telnet to your device's IP address and type. + You can see the client's input in the serial monitor as well. + Using an Arduino Wiznet Ethernet shield. + + Circuit: + * Ethernet shield attached to pins 10, 11, 12, 13 + * Analog inputs attached to pins A0 through A5 (optional) + + created 18 Dec 2009 + by David A. Mellis + modified 9 Apr 2012 + by Tom Igoe + redesigned to make use of operator== 25 Nov 2013 + by Norbert Truchsess + + */ + +#include + +// Enter a MAC address and IP address for your controller below. +// The IP address will be dependent on your local network. + +byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; +IPAddress ip(192,168,0,6); + +// telnet defaults to port 23 +EthernetServer server(23); + +EthernetClient clients[4]; + +void setup() { + // initialize the ethernet device + Ethernet.begin(mac, ip); + // start listening for clients + server.begin(); + // Open serial communications and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for Leonardo only + } + + + Serial.print("Chat server address:"); + Serial.println(Ethernet.localIP()); +} + +void loop() { + // wait for a new client: + EthernetClient client = server.available(); + + if (client) { + + boolean newClient = true; + for (byte i=0;i<4;i++) { + //check whether this client refers to the same socket as one of the existing instances: + if (clients[i]==client) { + newClient = false; + break; + } + } + + if (newClient) { + //check which of the existing clients can be overridden: + for (byte i=0;i<4;i++) { + if (!clients[i] && clients[i]!=client) { + clients[i] = client; + // clead out the input buffer: + client.flush(); + // clead out the input buffer: + client.flush(); + Serial.println("We have a new client"); + client.println("Hello, client!"); + client.print("my IP: "); + client.println(Ethernet.localIP()); + break; + } + } + } + + if (client.available() > 0) { + // read the bytes incoming from the client: + char thisChar = client.read(); + // echo the bytes back to all other connected clients: + for (byte i=0;i<4;i++) { + if (clients[i] && clients[i]!=client) { + clients[i].write(thisChar); + } + } + // echo the bytes to the server as well: + Serial.write(thisChar); + } + } + for (byte i=0;i<4;i++) { + if (!(clients[i].connected())) { + // client.stop() invalidates the internal socket-descriptor, so next use of == will allways return false; + clients[i].stop(); + } + } +} diff --git a/STM32F4/libraries/arduino_uip/examples/EchoServer/EchoServer.ino b/STM32F4/libraries/arduino_uip/examples/EchoServer/EchoServer.ino new file mode 100644 index 0000000..62d66e4 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/examples/EchoServer/EchoServer.ino @@ -0,0 +1,58 @@ +/* + * UIPEthernet EchoServer example. + * + * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based + * Ethernet-shield. + * + * UIPEthernet uses the fine uIP stack by Adam Dunkels + * + * ----------------- + * + * This Hello World example sets up a server at 192.168.1.6 on port 1000. + * Telnet here to access the service. The uIP stack will also respond to + * pings to test if you have successfully established a TCP connection to + * the Arduino. + * + * This example was based upon uIP hello-world by Adam Dunkels + * Ported to the Arduino IDE by Adam Nielsen + * Adaption to Enc28J60 by Norbert Truchsess + */ + +#include +// The connection_data struct needs to be defined in an external file. +#include +#include + +EthernetServer server = EthernetServer(1000); + +void setup() +{ + Serial.begin(9600); + + uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; + IPAddress myIP(192,168,0,6); + + Ethernet.begin(mac,myIP); + + server.begin(); +} + +void loop() +{ + size_t size; + + if (EthernetClient client = server.available()) + { + if (client) + { + while((size = client.available()) > 0) + { + uint8_t* msg = (uint8_t*)malloc(size); + size = client.read(msg,size); + Serial.write(msg,size); + client.write(msg,size); + free(msg); + } + } + } +} diff --git a/STM32F4/libraries/arduino_uip/examples/TcpClient/TcpClient.ino b/STM32F4/libraries/arduino_uip/examples/TcpClient/TcpClient.ino new file mode 100644 index 0000000..444b36a --- /dev/null +++ b/STM32F4/libraries/arduino_uip/examples/TcpClient/TcpClient.ino @@ -0,0 +1,77 @@ +/* + * UIPEthernet TcpClient example. + * + * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based + * Ethernet-shield. + * + * UIPEthernet uses the fine uIP stack by Adam Dunkels + * + * ----------------- + * + * This TcpClient example gets its local ip-address via dhcp and sets + * up a tcp socket-connection to 192.168.0.1 port 5000 every 5 Seconds. + * After sending a message it waits for a response. After receiving the + * response the client disconnects and tries to reconnect after 5 seconds. + * + * Copyright (C) 2013 by Norbert Truchsess + */ + +#include +#include + +EthernetClient client; +signed long next; + +void setup() { + + Serial.begin(9600); + + uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; + Ethernet.begin(mac); + + Serial.print("localIP: "); + Serial.println(Ethernet.localIP()); + Serial.print("subnetMask: "); + Serial.println(Ethernet.subnetMask()); + Serial.print("gatewayIP: "); + Serial.println(Ethernet.gatewayIP()); + Serial.print("dnsServerIP: "); + Serial.println(Ethernet.dnsServerIP()); + + next = 0; +} + +void loop() { + + if (((signed long)(millis() - next)) > 0) + { + next = millis() + 5000; + Serial.println("Client connect"); + // replace hostname with name of machine running tcpserver.pl +// if (client.connect("server.local",5000)) + if (client.connect(IPAddress(192,168,0,1),5000)) + { + Serial.println("Client connected"); + client.println("DATA from Client"); + while(client.available()==0) + { + if (next - millis() < 0) + goto close; + } + int size; + while((size = client.available()) > 0) + { + uint8_t* msg = (uint8_t*)malloc(size); + size = client.read(msg,size); + Serial.write(msg,size); + free(msg); + } +close: + //disconnect client + Serial.println("Client disconnect"); + client.stop(); + } + else + Serial.println("Client connect failed"); + } +} diff --git a/STM32F4/libraries/arduino_uip/examples/TcpServer/TcpServer.ino b/STM32F4/libraries/arduino_uip/examples/TcpServer/TcpServer.ino new file mode 100644 index 0000000..ad91059 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/examples/TcpServer/TcpServer.ino @@ -0,0 +1,74 @@ +/* + * UIPEthernet EchoServer example. + * + * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based + * Ethernet-shield. + * + * UIPEthernet uses the fine uIP stack by Adam Dunkels + * + * ----------------- + * + * This Hello World example sets up a server at 192.168.1.6 on port 1000. + * Telnet here to access the service. The uIP stack will also respond to + * pings to test if you have successfully established a TCP connection to + * the Arduino. + * + * This example was based upon uIP hello-world by Adam Dunkels + * Ported to the Arduino IDE by Adam Nielsen + * Adaption to Enc28J60 by Norbert Truchsess + */ + +#include +#include +#include + + + +EthernetServer server = EthernetServer(23); + + +void setup() +{ + Serial.begin(115200); + delay(3000); + Serial.println("TCP Server starting ..."); + + uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; + IPAddress myIP(10,111,111,5); + + Ethernet.begin(mac, myIP); // Static IP +// Ethernet.begin(mac); // DHCP + Serial.print("localIP: "); + Serial.println(Ethernet.localIP().toCharArray()); + Serial.print("subnetMask: "); + Serial.println(Ethernet.subnetMask().toCharArray()); + Serial.print("gatewayIP: "); + Serial.println(Ethernet.gatewayIP().toCharArray()); + Serial.print("dnsServerIP: "); + Serial.println(Ethernet.dnsServerIP().toCharArray()); + + server.begin(); +} + +void loop() +{ + size_t size; + + if (EthernetClient client = server.available()) + { + Serial.println("Client connected !"); + while((size = client.available()) > 0) + { + uint8_t* msg = (uint8_t*)malloc(size); + size = client.read(msg, size); + Serial.print("Client Data received ! size="); + Serial.println(size); + Serial.write(msg, size); + free(msg); + } + client.println("DATA from Server!"); + client.stop(); + } + +} + diff --git a/STM32F4/libraries/arduino_uip/examples/UdpClient/UdpClient.ino b/STM32F4/libraries/arduino_uip/examples/UdpClient/UdpClient.ino new file mode 100644 index 0000000..aad56b4 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/examples/UdpClient/UdpClient.ino @@ -0,0 +1,93 @@ +/* + * UIPEthernet UdpClient example. + * + * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based + * Ethernet-shield. + * + * UIPEthernet uses the fine uIP stack by Adam Dunkels + * + * ----------------- + * + * This UdpClient example tries to send a packet via udp to 192.168.0.1 + * on port 5000 every 5 seconds. After successfully sending the packet it + * waits for up to 5 seconds for a response on the local port that has been + * implicitly opened when sending the packet. + * + * Copyright (C) 2013 by Norbert Truchsess (norbert.truchsess@t-online.de) + */ + +#include + +EthernetUDP udp; +unsigned long next; + +void setup() { + + Serial.begin(9600); + + uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; + + Ethernet.begin(mac,IPAddress(192,168,0,6)); + + next = millis()+5000; +} + +void loop() { + + int success; + int len = 0; + + if (((signed long)(millis()-next))>0) + { + do + { + success = udp.beginPacket(IPAddress(192,168,0,1),5000); + Serial.print("beginPacket: "); + Serial.println(success ? "success" : "failed"); + //beginPacket fails if remote ethaddr is unknown. In this case an + //arp-request is send out first and beginPacket succeeds as soon + //the arp-response is received. + } + while (!success && ((signed long)(millis()-next))<0); + if (!success ) + goto stop; + + success = udp.write("hello world from arduino"); + + Serial.print("bytes written: "); + Serial.println(success); + + success = udp.endPacket(); + + Serial.print("endPacket: "); + Serial.println(success ? "success" : "failed"); + + do + { + //check for new udp-packet: + success = udp.parsePacket(); + } + while (!success && ((signed long)(millis()-next))<0); + if (!success ) + goto stop; + + Serial.print("received: '"); + do + { + int c = udp.read(); + Serial.write(c); + len++; + } + while ((success = udp.available())>0); + Serial.print("', "); + Serial.print(len); + Serial.println(" bytes"); + + //finish reading this packet: + udp.flush(); + + stop: + udp.stop(); + next = millis()+5000; + } +} diff --git a/STM32F4/libraries/arduino_uip/examples/UdpServer/UdpServer.ino b/STM32F4/libraries/arduino_uip/examples/UdpServer/UdpServer.ino new file mode 100644 index 0000000..3b12d75 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/examples/UdpServer/UdpServer.ino @@ -0,0 +1,88 @@ +/* + * UIPEthernet UdpServer example. + * + * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based + * Ethernet-shield. + * + * UIPEthernet uses the fine uIP stack by Adam Dunkels + * + * ----------------- + * + * This UdpServer example sets up a udp-server at 192.168.0.6 on port 5000. + * send packet via upd to test + * + * Copyright (C) 2013 by Norbert Truchsess (norbert.truchsess@t-online.de) + */ + +#include + +EthernetUDP udp; + +void setup() { + + Serial.begin(9600); + + uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; + + Ethernet.begin(mac,IPAddress(192,168,0,6)); + + int success = udp.begin(5000); + + Serial.print("initialize: "); + Serial.println(success ? "success" : "failed"); + +} + +void loop() { + + //check for new udp-packet: + int size = udp.parsePacket(); + if (size > 0) { + do + { + char* msg = (char*)malloc(size+1); + int len = udp.read(msg,size+1); + msg[len]=0; + Serial.print("received: '"); + Serial.print(msg); + free(msg); + } + while ((size = udp.available())>0); + //finish reading this packet: + udp.flush(); + Serial.println("'"); + int success; + do + { + Serial.print("remote ip: "); + Serial.println(udp.remoteIP()); + Serial.print("remote port: "); + Serial.println(udp.remotePort()); + //send new packet back to ip/port of client. This also + //configures the current connection to ignore packets from + //other clients! + success = udp.beginPacket(udp.remoteIP(),udp.remotePort()); + Serial.print("beginPacket: "); + Serial.println(success ? "success" : "failed"); + //beginPacket fails if remote ethaddr is unknown. In this case an + //arp-request is send out first and beginPacket succeeds as soon + //the arp-response is received. + } + while (!success); + + success = udp.println("hello world from arduino"); + + Serial.print("bytes written: "); + Serial.println(success); + + success = udp.endPacket(); + + Serial.print("endPacket: "); + Serial.println(success ? "success" : "failed"); + + udp.stop(); + //restart with new connection to receive packets from other clients + Serial.print("restart connection: "); + Serial.println (udp.begin(5000) ? "success" : "failed"); + } +} diff --git a/STM32F4/libraries/arduino_uip/keywords.txt b/STM32F4/libraries/arduino_uip/keywords.txt new file mode 100644 index 0000000..83ff854 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/keywords.txt @@ -0,0 +1,58 @@ +####################################### +# Syntax Coloring Map for SerialIP +####################################### + +####################################### +# Datatypes (KEYWORD1) +####################################### + +UIPEthernet KEYWORD1 +UIPServer KEYWORD1 +UIPClient KEYWORD1 + +####################################### +# Methods and Functions (KEYWORD2) +####################################### +PSOCK_BEGIN KEYWORD2 +PSOCK_CLOSE KEYWORD2 +PSOCK_END KEYWORD2 +PSOCK_EXIT KEYWORD2 +PSOCK_INIT KEYWORD2 +PSOCK_READBUF KEYWORD2 +PSOCK_READTO KEYWORD2 +PSOCK_SEND KEYWORD2 +PSOCK_SEND_STR KEYWORD2 + +uip_listen KEYWORD2 +uip_unlisten KEYWORD2 +uip_connect KEYWORD2 +uip_outstanding KEYWORD2 +uip_send KEYWORD2 +uip_datalen KEYWORD2 +uip_close KEYWORD2 +uip_abort KEYWORD2 +uip_stop KEYWORD2 +uip_stopped KEYWORD2 +uip_restart KEYWORD2 +uip_acked KEYWORD2 +uip_connected KEYWORD2 +uip_closed KEYWORD2 +uip_aborted KEYWORD2 +uip_timedout KEYWORD2 +uip_rexmit KEYWORD2 +uip_poll KEYWORD2 +uip_initialmss KEYWORD2 +uip_mss KEYWORD2 +uip_ipaddr KEYWORD2 +uip_ipaddr_maskcmp KEYWORD2 +uip_ipaddr_mask KEYWORD2 +HTONS KEYWORD2 +htons KEYWORD2 + +use_device KEYWORD2 +set_uip_callback KEYWORD2 +set_gateway KEYWORD2 + +####################################### +# Constants (LITERAL1) +####################################### diff --git a/STM32F4/libraries/arduino_uip/library.properties b/STM32F4/libraries/arduino_uip/library.properties new file mode 100644 index 0000000..8ee6394 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/library.properties @@ -0,0 +1,10 @@ +name=UIPEthernet +author=ntruchsess +email=Norbert Truchsess +sentence=Ethernet library for ENC28J60 +paragraph=implements the same API as stock Ethernet-lib. Just replace the include of Ethernet.h with UIPEthernet.h +url=https://github.com/ntruchsess/arduino_uip +architectures=STM32F1 +version=1.04 +dependencies= +core-dependencies=arduino (>=1.5.0) diff --git a/STM32F4/libraries/arduino_uip/tests/perl/tcpclient.pl b/STM32F4/libraries/arduino_uip/tests/perl/tcpclient.pl new file mode 100755 index 0000000..e6884dc --- /dev/null +++ b/STM32F4/libraries/arduino_uip/tests/perl/tcpclient.pl @@ -0,0 +1,34 @@ +#!/usr/bin/perl +#tcpclient.pl + +use IO::Socket::INET; + +# flush after every write +$| = 1; + +my ($socket,$client_socket); + +# creating object interface of IO::Socket::INET modules which internally creates +# socket, binds and connects to the TCP server running on the specific port. +$socket = new IO::Socket::INET ( +PeerHost => '192.168.0.6', +PeerPort => '1000', +Proto => 'tcp', +) or die "ERROR in Socket Creation : $!\n"; + +print "TCP Connection Success.\n"; + +# write on the socket to server. +$data = "DATA from Client"; +print $socket "$data\n"; +# we can also send the data through IO::Socket::INET module, +# $socket->send($data); + +# read the socket data sent by server. +$data = <$socket>; +# we can also read from socket through recv() in IO::Socket::INET +# $socket->recv($data,1024); +print "Received from Server : $data\n"; + +sleep (10); +$socket->close(); \ No newline at end of file diff --git a/STM32F4/libraries/arduino_uip/tests/perl/tcpserver.pl b/STM32F4/libraries/arduino_uip/tests/perl/tcpserver.pl new file mode 100755 index 0000000..17405a3 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/tests/perl/tcpserver.pl @@ -0,0 +1,53 @@ +#!/usr/bin/perl +#tcpserver.pl + +use IO::Socket::INET; + +# flush after every write +$| = 1; + +my ($socket,$client_socket); +my ($peeraddress,$peerport); + +# creating object interface of IO::Socket::INET modules which internally does +# socket creation, binding and listening at the specified port address. +$socket = new IO::Socket::INET ( +LocalHost => '192.168.0.1', +LocalPort => '5000', +Proto => 'tcp', +Listen => 5, +Reuse => 1 +) or die "ERROR in Socket Creation : $!\n"; + +print "SERVER Waiting for client connection on port 5000\n"; + +while(1) +{ + # waiting for new client connection. + $client_socket = $socket->accept(); + + # get the host and port number of newly connected client. + $peer_address = $client_socket->peerhost(); + $peer_port = $client_socket->peerport(); + + print "Accepted New Client Connection From : $peer_address, $peer_port\n "; + + # read operation on the newly accepted client + $data = <$client_socket>; + # we can also read from socket through recv() in IO::Socket::INET + # $client_socket->recv($data,1024); + print "Received from Client : $data\n"; + + # write operation on the newly accepted client. + $data = "DATA from Server"; + print $client_socket "$data\n"; + # we can also send the data through IO::Socket::INET module, + # $client_socket->send($data); + + sleep(1); + + $client_socket->close(); +} + +$socket->close(); + diff --git a/STM32F4/libraries/arduino_uip/tests/perl/udpclient.pl b/STM32F4/libraries/arduino_uip/tests/perl/udpclient.pl new file mode 100755 index 0000000..bc9e6a2 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/tests/perl/udpclient.pl @@ -0,0 +1,26 @@ +#!/usr/bin/perl +#udpclient.pl + +use IO::Socket::INET; + +# flush after every write +$| = 1; + +my ($socket,$data); + +# We call IO::Socket::INET->new() to create the UDP Socket +# and bind with the PeerAddr. +$socket = new IO::Socket::INET ( +PeerAddr => '192.168.0.6:5000', +Proto => 'udp' +) or die "ERROR in Socket Creation : $!\n"; +#send operation +$data = "data from client"; +$socket->send($data); + +#read operation +$data = <$socket>; +print "Data received from socket : $data\n "; + +sleep(10); +$socket->close(); diff --git a/STM32F4/libraries/arduino_uip/tests/perl/udpserver.pl b/STM32F4/libraries/arduino_uip/tests/perl/udpserver.pl new file mode 100755 index 0000000..e728a46 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/tests/perl/udpserver.pl @@ -0,0 +1,40 @@ +#!/usr/bin/perl +#udpserver.pl + +use IO::Socket::INET; + +# flush after every write +$| = 1; + +my ($socket,$received_data); +my ($peeraddress,$peerport); + +# we call IO::Socket::INET->new() to create the UDP Socket and bound +# to specific port number mentioned in LocalPort and there is no need to provide +# LocalAddr explicitly as in TCPServer. +$socket = new IO::Socket::INET ( +LocalPort => '5000', +Proto => 'udp', +) or die "ERROR in Socket Creation : $!\n"; + +while(1) +{ +# read operation on the socket +$socket->recv($recieved_data,1024); + +#get the peerhost and peerport at which the recent data received. +$peer_address = $socket->peerhost(); +$peer_port = $socket->peerport(); +print "($peer_address , $peer_port) said : $recieved_data\n"; + +#send the data to the client at which the read/write operations done recently. +$data = "data from server\n"; + +$socket->send($data); + +print $socket "$data"; + +} + +$socket->close(); + diff --git a/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp b/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp new file mode 100644 index 0000000..557e5a0 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp @@ -0,0 +1,646 @@ +/* + Enc28J60NetworkClass.h + UIPEthernet network driver for Microchip ENC28J60 Ethernet Interface. + + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + based on enc28j60.c file from the AVRlib library by Pascal Stang. + For AVRlib See http://www.procyonengineering.com/ + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#include "Enc28J60Network.h" +#include "Arduino.h" + +extern "C" { +//#include +#include "enc28j60.h" +#include "uip.h" +} + +#ifdef ENC28J60DEBUG +#include "HardwareSerial.h" +#endif + +//#define Serial SerialUSB +//#define SPI SPIEth +extern SPIClass SPI; + +// set CS to 0 = active +#define CSACTIVE digitalWrite(ENC28J60_CONTROL_CS, LOW) +// set CS to 1 = passive +#define CSPASSIVE digitalWrite(ENC28J60_CONTROL_CS, HIGH) +// +#define waitspi() while(!(SPSR&(1< ip checksum for theses bytes=f7f9 + // in binary these poitions are:11 0000 0011 1111 + // This is hex 303F->EPMM0=0x3f,EPMM1=0x30 + //TODO define specific pattern to receive dhcp-broadcast packages instead of setting ERFCON_BCEN! +// enableBroadcast(); // change to add ERXFCON_BCEN recommended by epam + writeReg(ERXFCON, ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN|ERXFCON_BCEN); + writeRegPair(EPMM0, 0x303f); + writeRegPair(EPMCSL, 0xf7f9); + // + // + // do bank 2 stuff + // enable MAC receive + // and bring MAC out of reset (writes 0x00 to MACON2) + writeRegPair(MACON1, MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS); + //----------------writeRegPair(MACON2, 0x00); + // enable automatic padding to 60bytes and CRC operations + writeOp(ENC28J60_BIT_FIELD_SET, MACON3, MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN); + // set inter-frame gap (non-back-to-back) + writeRegPair(MAIPGL, 0x0C12); + // set inter-frame gap (back-to-back) + writeReg(MABBIPG, 0x12); + // Set the maximum packet size which the controller will accept + // Do not send packets longer than MAX_FRAMELEN: + writeRegPair(MAMXFLL, MAX_FRAMELEN); + // do bank 3 stuff + // write MAC address + // NOTE: MAC address in ENC28J60 is byte-backward + writeReg(MAADR5, macaddr[0]); + writeReg(MAADR4, macaddr[1]); + writeReg(MAADR3, macaddr[2]); + writeReg(MAADR2, macaddr[3]); + writeReg(MAADR1, macaddr[4]); + writeReg(MAADR0, macaddr[5]); + // no loopback of transmitted frames + phyWrite(PHCON2, PHCON2_HDLDIS); + // switch to bank 0 + setBank(ECON1); + // enable interrutps + writeOp(ENC28J60_BIT_FIELD_SET, EIE, EIE_INTIE|EIE_PKTIE); + // enable packet reception + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); + //Configure leds + phyWrite(PHLCON,0x476); + + byte rev = readReg(EREVID); + // microchip forgot to step the number on the silcon when they + // released the revision B7. 6 is now rev B7. We still have + // to see what they do when they release B8. At the moment + // there is no B8 out yet + if (rev > 5) ++rev; +#ifdef ENC28J60DEBUG + Serial.print("ENC28J60::initialize returns "); + Serial.println(rev); +#endif +// return rev; +} + + +memhandle +Enc28J60Network::receivePacket() +{ + uint8_t rxstat; + uint16_t len; + // check if a packet has been received and buffered + //if( !(readReg(EIR) & EIR_PKTIF) ){ + // The above does not work. See Rev. B4 Silicon Errata point 6. + if (readReg(EPKTCNT) != 0) + { + uint16_t readPtr = nextPacketPtr+6 > RXSTOP_INIT ? nextPacketPtr+6-RXSTOP_INIT+RXSTART_INIT : nextPacketPtr+6; + // Set the read pointer to the start of the received packet + writeRegPair(ERDPTL, nextPacketPtr); + // read the next packet pointer + nextPacketPtr = readOp(ENC28J60_READ_BUF_MEM, 0); + nextPacketPtr |= readOp(ENC28J60_READ_BUF_MEM, 0) << 8; + // read the packet length (see datasheet page 43) + len = readOp(ENC28J60_READ_BUF_MEM, 0); + len |= readOp(ENC28J60_READ_BUF_MEM, 0) << 8; + len -= 4; //remove the CRC count + // read the receive status (see datasheet page 43) + rxstat = readOp(ENC28J60_READ_BUF_MEM, 0); + //rxstat |= readOp(ENC28J60_READ_BUF_MEM, 0) << 8; +#ifdef ENC28J60DEBUG + Serial.print("receivePacket ["); + Serial.print(readPtr,HEX); + Serial.print("-"); + Serial.print((readPtr+len) % (RXSTOP_INIT+1),HEX); + Serial.print("], next: "); + Serial.print(nextPacketPtr,HEX); + Serial.print(", stat: "); + Serial.print(rxstat,HEX); + Serial.print(", count: "); + Serial.print(readReg(EPKTCNT)); + Serial.print(" -> "); + Serial.println((rxstat & 0x80)!=0 ? "OK" : "failed"); +#endif + // decrement the packet counter indicate we are done with this packet + writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PKTDEC); + // check CRC and symbol errors (see datasheet page 44, table 7-3): + // The ERXFCON.CRCEN is set by default. Normally we should not + // need to check this. + if ((rxstat & 0x80) != 0) + { + receivePkt.begin = readPtr; + receivePkt.size = len; +#ifdef ENC28J60DEBUG + Serial.print("receivePkt.size="); + Serial.println(len); +#endif + return UIP_RECEIVEBUFFERHANDLE; + } + // Move the RX read pointer to the start of the next received packet + // This frees the memory we just read out + setERXRDPT(); + } + return (NOBLOCK); +} + +void +Enc28J60Network::setERXRDPT() +{ + writeRegPair(ERXRDPTL, nextPacketPtr == RXSTART_INIT ? RXSTOP_INIT : nextPacketPtr-1); +} + +memaddress +Enc28J60Network::blockSize(memhandle handle) +{ + return handle == NOBLOCK ? 0 : handle == UIP_RECEIVEBUFFERHANDLE ? receivePkt.size : blocks[handle].size; +} + +void +Enc28J60Network::sendPacket(memhandle handle) +{ + memblock *packet = &blocks[handle]; + uint16_t start = packet->begin-1; + uint16_t end = start + packet->size; + + // backup data at control-byte position + uint8_t data = readByte(start); + // write control-byte (if not 0 anyway) + if (data) + writeByte(start, 0); + +#ifdef ENC28J60DEBUG + Serial.print("sendPacket("); + Serial.print(handle); + Serial.print(") ["); + Serial.print(start,HEX); + Serial.print("-"); + Serial.print(end,HEX); + Serial.print("]: "); + for (uint16_t i=start; i<=end; i++) + { + Serial.print(readByte(i),HEX); + Serial.print(" "); + } + Serial.println(); +#endif + + // TX start + writeRegPair(ETXSTL, start); + // Set the TXND pointer to correspond to the packet size given + writeRegPair(ETXNDL, end); + // send the contents of the transmit buffer onto the network + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS); + // Reset the transmit logic problem. See Rev. B4 Silicon Errata point 12. + if( (readReg(EIR) & EIR_TXERIF) ) + { + writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_TXRTS); + } + + //restore data on control-byte position + if (data) + writeByte(start, data); +} + +uint16_t +Enc28J60Network::setReadPtr(memhandle handle, memaddress position, uint16_t len) +{ + memblock *packet = handle == UIP_RECEIVEBUFFERHANDLE ? &receivePkt : &blocks[handle]; + memaddress start = handle == UIP_RECEIVEBUFFERHANDLE && packet->begin + position > RXSTOP_INIT ? packet->begin + position-RXSTOP_INIT+RXSTART_INIT : packet->begin + position; + + writeRegPair(ERDPTL, start); + + if (len > packet->size - position) + len = packet->size - position; + return len; +} + +uint16_t +Enc28J60Network::readPacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len) +{ + len = setReadPtr(handle, position, len); + readBuffer(len, buffer); + return len; +} + +uint16_t +Enc28J60Network::writePacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len) +{ + memblock *packet = &blocks[handle]; + uint16_t start = packet->begin + position; + + writeRegPair(EWRPTL, start); + + if (len > packet->size - position) + len = packet->size - position; + writeBuffer(len, buffer); + return len; +} + + +void Enc28J60Network::enableBroadcast (bool temporary) { + writeRegByte(ERXFCON, readRegByte(ERXFCON) | ERXFCON_BCEN); + if(!temporary) + broadcast_enabled = true; +} + +void Enc28J60Network::disableBroadcast (bool temporary) { + if(!temporary) + broadcast_enabled = false; + if(!broadcast_enabled) + writeRegByte(ERXFCON, readRegByte(ERXFCON) & ~ERXFCON_BCEN); +} + +void Enc28J60Network::enableMulticast () { + writeRegByte(ERXFCON, readRegByte(ERXFCON) | ERXFCON_MCEN); +} + +void Enc28J60Network::disableMulticast () { + writeRegByte(ERXFCON, readRegByte(ERXFCON) & ~ERXFCON_MCEN); +} + +byte Enc28J60Network::readRegByte (uint8_t address) { + setBank(address); + return readOp(ENC28J60_READ_CTRL_REG, address); +} + +void Enc28J60Network::writeRegByte (uint8_t address, uint8_t data) { + setBank(address); + writeOp(ENC28J60_WRITE_CTRL_REG, address, data); +} + + +uint8_t Enc28J60Network::readByte(uint16_t addr) +{ + writeRegPair(ERDPTL, addr); + + CSACTIVE; + SPI.transfer(ENC28J60_READ_BUF_MEM); + uint8_t data = SPI.transfer(0x00); + CSPASSIVE; + return data; +} + +void Enc28J60Network::writeByte(uint16_t addr, uint8_t data) +{ + writeRegPair(EWRPTL, addr); + + CSACTIVE; + SPI.transfer(ENC28J60_WRITE_BUF_MEM); + SPI.transfer(data); + CSPASSIVE; +} + +void +Enc28J60Network::copyPacket(memhandle dest_pkt, memaddress dest_pos, memhandle src_pkt, memaddress src_pos, uint16_t len) +{ + memblock *dest = &blocks[dest_pkt]; + memblock *src = src_pkt == UIP_RECEIVEBUFFERHANDLE ? &receivePkt : &blocks[src_pkt]; + memaddress start = src_pkt == UIP_RECEIVEBUFFERHANDLE && src->begin + src_pos > RXSTOP_INIT ? src->begin + src_pos-RXSTOP_INIT+RXSTART_INIT : src->begin + src_pos; + enc28J60_mempool_block_move_callback(dest->begin+dest_pos,start,len); + // Move the RX read pointer to the start of the next received packet + // This frees the memory we just read out + setERXRDPT(); +} + +void +enc28J60_mempool_block_move_callback(memaddress dest, memaddress src, memaddress len) +{ +//void +//Enc28J60Network::memblock_mv_cb(uint16_t dest, uint16_t src, uint16_t len) +//{ + //as ENC28J60 DMA is unable to copy single bytes: + if (len == 1) + { + Enc28J60Network::writeByte(dest,Enc28J60Network::readByte(src)); + } + else + { + // calculate address of last byte + len += src - 1; + + /* 1. Appropriately program the EDMAST, EDMAND + and EDMADST register pairs. The EDMAST + registers should point to the first byte to copy + from, the EDMAND registers should point to the + last byte to copy and the EDMADST registers + should point to the first byte in the destination + range. The destination range will always be + linear, never wrapping at any values except from + 8191 to 0 (the 8-Kbyte memory boundary). + Extreme care should be taken when + programming the start and end pointers to + prevent a never ending DMA operation which + would overwrite the entire 8-Kbyte buffer. + */ + Enc28J60Network::writeRegPair(EDMASTL, src); + Enc28J60Network::writeRegPair(EDMADSTL, dest); + + if ((src <= RXSTOP_INIT)&& (len > RXSTOP_INIT))len -= (RXSTOP_INIT-RXSTART_INIT); + Enc28J60Network::writeRegPair(EDMANDL, len); + + /* + 2. If an interrupt at the end of the copy process is + desired, set EIE.DMAIE and EIE.INTIE and + clear EIR.DMAIF. + + 3. Verify that ECON1.CSUMEN is clear. */ + Enc28J60Network::writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_CSUMEN); + + /* 4. Start the DMA copy by setting ECON1.DMAST. */ + Enc28J60Network::writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_DMAST); + + // wait until runnig DMA is completed + while (Enc28J60Network::readOp(ENC28J60_READ_CTRL_REG, ECON1) & ECON1_DMAST); + } +} + +void +Enc28J60Network::freePacket() +{ + setERXRDPT(); +} + +uint8_t +Enc28J60Network::readOp(uint8_t op, uint8_t address) +{ + CSACTIVE; + // issue read command + SPI.transfer(op | (address & ADDR_MASK)); + byte result = SPI.transfer(0x00); + if (address & 0x80) + result = SPI.transfer(0x00); + CSPASSIVE; + return result; +} + +void +Enc28J60Network::writeOp(uint8_t op, uint8_t address, uint8_t data) +{ + CSACTIVE; + // issue write command + SPI.transfer(op | (address & ADDR_MASK)); + SPI.transfer(data); + CSPASSIVE; +} + +void +Enc28J60Network::readBuffer(uint16_t len, uint8_t* data) +{ + CSACTIVE; + // issue read command + SPI.transfer(ENC28J60_READ_BUF_MEM); + while (len--) { + *data++ = SPI.transfer(0x00); + } + CSPASSIVE; +} + +void +Enc28J60Network::writeBuffer(uint16_t len, uint8_t* data) +{ + CSACTIVE; + // issue write command + SPI.transfer(ENC28J60_WRITE_BUF_MEM); + while (len--) { + SPI.transfer(*data++); + } + CSPASSIVE; +} + +void +Enc28J60Network::setBank(uint8_t address) +{ + // set the bank (if needed) + if((address & BANK_MASK) != bank) + { + // set the bank + writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, (ECON1_BSEL1|ECON1_BSEL0)); + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, (address & BANK_MASK)>>5); + bank = (address & BANK_MASK); + } +} + +uint8_t +Enc28J60Network::readReg(uint8_t address) +{ + // set the bank + setBank(address); + // do the read + return readOp(ENC28J60_READ_CTRL_REG, address); +} + +void +Enc28J60Network::writeReg(uint8_t address, uint8_t data) +{ + // set the bank + setBank(address); + // do the write + writeOp(ENC28J60_WRITE_CTRL_REG, address, data); +} + +void +Enc28J60Network::writeRegPair(uint8_t address, uint16_t data) +{ + // set the bank + setBank(address); + // do the write + writeOp(ENC28J60_WRITE_CTRL_REG, address, (data&0xFF)); + writeOp(ENC28J60_WRITE_CTRL_REG, address+1, (data) >> 8); +} + +void +Enc28J60Network::phyWrite(uint8_t address, uint16_t data) +{ + // set the PHY register address + writeReg(MIREGADR, address); + // write the PHY data + writeRegPair(MIWRL, data); + // wait until the PHY write completes + while(readReg(MISTAT) & MISTAT_BUSY){ + delayMicroseconds(15); + } +} + +uint16_t +Enc28J60Network::phyRead(uint8_t address) +{ + writeReg(MIREGADR,address); + writeReg(MICMD, MICMD_MIIRD); + // wait until the PHY read completes + while(readReg(MISTAT) & MISTAT_BUSY){ + delayMicroseconds(15); + } //and MIRDH + writeReg(MICMD, 0); + return (readReg(MIRDL) | readReg(MIRDH) << 8); +} + +void +Enc28J60Network::clkout(uint8_t clk) +{ + //setup clkout: 2 is 12.5MHz: + writeReg(ECOCON, clk & 0x7); +} + +// read the revision of the chip: +uint8_t +Enc28J60Network::getrev(void) +{ + return(readReg(EREVID)); +} + +uint16_t +Enc28J60Network::chksum(uint16_t sum, memhandle handle, memaddress pos, uint16_t len) +{ + uint16_t t; + len = setReadPtr(handle, pos, len)-1; + CSACTIVE; + // issue read command + SPI.transfer(ENC28J60_READ_BUF_MEM); + uint16_t i; + for (i = 0; i < len; i+=2) + { + // read data + t = SPI.transfer(0x00) << 8; + t += SPI.transfer(0x00); + sum += t; + if(sum < t) { + sum++; // carry + } + } + if(i == len) { + t = (SPI.transfer(0x00) << 8) + 0; + sum += t; + if(sum < t) { + sum++; // carry + } + } + CSPASSIVE; + + // Return sum in host byte order. + + return sum; +} + +void +Enc28J60Network::powerOff() +{ + writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_RXEN); + delay(50); + writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_VRPS); + delay(50); + writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PWRSV); +} + +void +Enc28J60Network::powerOn() +{ + writeOp(ENC28J60_BIT_FIELD_CLR, ECON2, ECON2_PWRSV); + delay(50); + writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); + delay(50); +} + +bool +Enc28J60Network::linkStatus() +{ + return (phyRead(PHSTAT2) & 0x0400) > 0; +} + +Enc28J60Network Enc28J60; diff --git a/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.h b/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.h new file mode 100644 index 0000000..4aee588 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.h @@ -0,0 +1,108 @@ +/* + Enc28J60NetworkClass.h + UIPEthernet network driver for Microchip ENC28J60 Ethernet Interface. + + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + inspired by enc28j60.c file from the AVRlib library by Pascal Stang. + For AVRlib See http://www.procyonengineering.com/ + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#ifndef Enc28J60Network_H_ +#define Enc28J60Network_H_ + +#include +#include "mempool.h" + +//#define ENC28J60_CONTROL_CS SS +//#define SPI_MOSI MOSI +//#define SPI_MISO MISO +//#define SPI_SCK SCK +//#define SPI_SS SS + +#define ENC28J60_CONTROL_CS PC8 +//#define SPI_MOSI PA7 +//#define SPI_MISO PA6 +//#define SPI_SCK PA5 +//#define SPI_SS PA8 + +#define UIP_RECEIVEBUFFERHANDLE 0xff + +//#define ENC28J60DEBUG + +/* + * Empfangen von ip-header, arp etc... + * wenn tcp/udp -> tcp/udp-callback -> assign new packet to connection + */ + +class Enc28J60Network : public MemoryPool +{ + +private: + static uint16_t nextPacketPtr; + static uint8_t bank; + + static struct memblock receivePkt; + + static bool broadcast_enabled; //!< True if broadcasts enabled (used to allow temporary disable of broadcast for DHCP or other internal functions) + + static uint8_t readOp(uint8_t op, uint8_t address); + static void writeOp(uint8_t op, uint8_t address, uint8_t data); + static uint16_t setReadPtr(memhandle handle, memaddress position, uint16_t len); + static void setERXRDPT(); + static void readBuffer(uint16_t len, uint8_t* data); + static void writeBuffer(uint16_t len, uint8_t* data); + static uint8_t readByte(uint16_t addr); + static void writeByte(uint16_t addr, uint8_t data); + static void setBank(uint8_t address); + static uint8_t readReg(uint8_t address); + static void writeReg(uint8_t address, uint8_t data); + static void writeRegPair(uint8_t address, uint16_t data); + static void phyWrite(uint8_t address, uint16_t data); + static uint16_t phyRead(uint8_t address); + static void clkout(uint8_t clk); + + static void enableBroadcast (bool temporary); + static void disableBroadcast (bool temporary); + static void enableMulticast (); + static void disableMulticast (); + + static uint8_t readRegByte (uint8_t address); + static void writeRegByte (uint8_t address, uint8_t data); + + friend void enc28J60_mempool_block_move_callback(memaddress,memaddress,memaddress); + +public: + + uint8_t getrev(void); + void powerOn(); + void powerOff(); + bool linkStatus(); + + static void init(uint8_t* macaddr); + static memhandle receivePacket(); + static void freePacket(); + static memaddress blockSize(memhandle handle); + static void sendPacket(memhandle handle); + static uint16_t readPacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len); + static uint16_t writePacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len); + static void copyPacket(memhandle dest, memaddress dest_pos, memhandle src, memaddress src_pos, uint16_t len); + static uint16_t chksum(uint16_t sum, memhandle handle, memaddress pos, uint16_t len); +}; + +extern Enc28J60Network Enc28J60; +#endif /* Enc28J60NetworkClass_H_ */ diff --git a/STM32F4/libraries/arduino_uip/utility/clock-arch.cpp b/STM32F4/libraries/arduino_uip/utility/clock-arch.cpp new file mode 100644 index 0000000..5f020ba --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/clock-arch.cpp @@ -0,0 +1,30 @@ +/* + clock-arch.c - Arduino implementation of uIP clock device. + Copyright (c) 2010 Adam Nielsen + All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include "clock-arch.h" + +extern "C" { +clock_time_t +clock_time(void) +{ + return (clock_time_t) millis(); +} +} diff --git a/STM32F4/libraries/arduino_uip/utility/clock-arch.h b/STM32F4/libraries/arduino_uip/utility/clock-arch.h new file mode 100644 index 0000000..d7a828b --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/clock-arch.h @@ -0,0 +1,27 @@ +/* + clock-arch.h - Arduino implementation of uIP clock device. + Copyright (c) 2010 Adam Nielsen + All rights reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef clock_h_ +#define clock_h_ + +typedef unsigned long clock_time_t; +#define CLOCK_CONF_SECOND 1000 + +#endif diff --git a/STM32F4/libraries/arduino_uip/utility/enc28j60.h b/STM32F4/libraries/arduino_uip/utility/enc28j60.h new file mode 100644 index 0000000..3a45c59 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/enc28j60.h @@ -0,0 +1,257 @@ +/***************************************************************************** +* +* Title : Microchip ENC28J60 Ethernet Interface Driver +* Author : Pascal Stang (c)2005 +* Modified by Norbert Truchsess +* Copyright: GPL V2 +* +*This driver provides initialization and transmit/receive +*functions for the Microchip ENC28J60 10Mb Ethernet Controller and PHY. +*This chip is novel in that it is a full MAC+PHY interface all in a 28-pin +*chip, using an SPI interface to the host processor. +* +* +*****************************************************************************/ + +#ifndef ENC28J60_H +#define ENC28J60_H +#include + +// ENC28J60 Control Registers +// Control register definitions are a combination of address, +// bank number, and Ethernet/MAC/PHY indicator bits. +// - Register address (bits 0-4) +// - Bank number (bits 5-6) +// - MAC/PHY indicator (bit 7) +#define ADDR_MASK 0x1F +#define BANK_MASK 0x60 +#define SPRD_MASK 0x80 +// All-bank registers +#define EIE 0x1B +#define EIR 0x1C +#define ESTAT 0x1D +#define ECON2 0x1E +#define ECON1 0x1F +// Bank 0 registers +#define ERDPTL (0x00|0x00) +#define ERDPTH (0x01|0x00) +#define EWRPTL (0x02|0x00) +#define EWRPTH (0x03|0x00) +#define ETXSTL (0x04|0x00) +#define ETXSTH (0x05|0x00) +#define ETXNDL (0x06|0x00) +#define ETXNDH (0x07|0x00) +#define ERXSTL (0x08|0x00) +#define ERXSTH (0x09|0x00) +#define ERXNDL (0x0A|0x00) +#define ERXNDH (0x0B|0x00) +#define ERXRDPTL (0x0C|0x00) +#define ERXRDPTH (0x0D|0x00) +#define ERXWRPTL (0x0E|0x00) +#define ERXWRPTH (0x0F|0x00) +#define EDMASTL (0x10|0x00) +#define EDMASTH (0x11|0x00) +#define EDMANDL (0x12|0x00) +#define EDMANDH (0x13|0x00) +#define EDMADSTL (0x14|0x00) +#define EDMADSTH (0x15|0x00) +#define EDMACSL (0x16|0x00) +#define EDMACSH (0x17|0x00) +// Bank 1 registers +#define EHT0 (0x00|0x20) +#define EHT1 (0x01|0x20) +#define EHT2 (0x02|0x20) +#define EHT3 (0x03|0x20) +#define EHT4 (0x04|0x20) +#define EHT5 (0x05|0x20) +#define EHT6 (0x06|0x20) +#define EHT7 (0x07|0x20) +#define EPMM0 (0x08|0x20) +#define EPMM1 (0x09|0x20) +#define EPMM2 (0x0A|0x20) +#define EPMM3 (0x0B|0x20) +#define EPMM4 (0x0C|0x20) +#define EPMM5 (0x0D|0x20) +#define EPMM6 (0x0E|0x20) +#define EPMM7 (0x0F|0x20) +#define EPMCSL (0x10|0x20) +#define EPMCSH (0x11|0x20) +#define EPMOL (0x14|0x20) +#define EPMOH (0x15|0x20) +#define EWOLIE (0x16|0x20) +#define EWOLIR (0x17|0x20) +#define ERXFCON (0x18|0x20) +#define EPKTCNT (0x19|0x20) +// Bank 2 registers +#define MACON1 (0x00|0x40|0x80) +#define MACON2 (0x01|0x40|0x80) +#define MACON3 (0x02|0x40|0x80) +#define MACON4 (0x03|0x40|0x80) +#define MABBIPG (0x04|0x40|0x80) +#define MAIPGL (0x06|0x40|0x80) +#define MAIPGH (0x07|0x40|0x80) +#define MACLCON1 (0x08|0x40|0x80) +#define MACLCON2 (0x09|0x40|0x80) +#define MAMXFLL (0x0A|0x40|0x80) +#define MAMXFLH (0x0B|0x40|0x80) +#define MAPHSUP (0x0D|0x40|0x80) +#define MICON (0x11|0x40|0x80) +#define MICMD (0x12|0x40|0x80) +#define MIREGADR (0x14|0x40|0x80) +#define MIWRL (0x16|0x40|0x80) +#define MIWRH (0x17|0x40|0x80) +#define MIRDL (0x18|0x40|0x80) +#define MIRDH (0x19|0x40|0x80) +// Bank 3 registers +#define MAADR1 (0x00|0x60|0x80) +#define MAADR0 (0x01|0x60|0x80) +#define MAADR3 (0x02|0x60|0x80) +#define MAADR2 (0x03|0x60|0x80) +#define MAADR5 (0x04|0x60|0x80) +#define MAADR4 (0x05|0x60|0x80) +#define EBSTSD (0x06|0x60) +#define EBSTCON (0x07|0x60) +#define EBSTCSL (0x08|0x60) +#define EBSTCSH (0x09|0x60) +#define MISTAT (0x0A|0x60|0x80) +#define EREVID (0x12|0x60) +#define ECOCON (0x15|0x60) +#define EFLOCON (0x17|0x60) +#define EPAUSL (0x18|0x60) +#define EPAUSH (0x19|0x60) +// PHY registers +#define PHCON1 0x00 +#define PHSTAT1 0x01 +#define PHHID1 0x02 +#define PHHID2 0x03 +#define PHCON2 0x10 +#define PHSTAT2 0x11 +#define PHIE 0x12 +#define PHIR 0x13 +#define PHLCON 0x14 + +// ENC28J60 ERXFCON Register Bit Definitions +#define ERXFCON_UCEN 0x80 +#define ERXFCON_ANDOR 0x40 +#define ERXFCON_CRCEN 0x20 +#define ERXFCON_PMEN 0x10 +#define ERXFCON_MPEN 0x08 +#define ERXFCON_HTEN 0x04 +#define ERXFCON_MCEN 0x02 +#define ERXFCON_BCEN 0x01 +// ENC28J60 EIE Register Bit Definitions +#define EIE_INTIE 0x80 +#define EIE_PKTIE 0x40 +#define EIE_DMAIE 0x20 +#define EIE_LINKIE 0x10 +#define EIE_TXIE 0x08 +#define EIE_WOLIE 0x04 +#define EIE_TXERIE 0x02 +#define EIE_RXERIE 0x01 +// ENC28J60 EIR Register Bit Definitions +#define EIR_PKTIF 0x40 +#define EIR_DMAIF 0x20 +#define EIR_LINKIF 0x10 +#define EIR_TXIF 0x08 +#define EIR_WOLIF 0x04 +#define EIR_TXERIF 0x02 +#define EIR_RXERIF 0x01 +// ENC28J60 ESTAT Register Bit Definitions +#define ESTAT_INT 0x80 +#define ESTAT_LATECOL 0x10 +#define ESTAT_RXBUSY 0x04 +#define ESTAT_TXABRT 0x02 +#define ESTAT_CLKRDY 0x01 +// ENC28J60 ECON2 Register Bit Definitions +#define ECON2_AUTOINC 0x80 +#define ECON2_PKTDEC 0x40 +#define ECON2_PWRSV 0x20 +#define ECON2_VRPS 0x08 +// ENC28J60 ECON1 Register Bit Definitions +#define ECON1_TXRST 0x80 +#define ECON1_RXRST 0x40 +#define ECON1_DMAST 0x20 +#define ECON1_CSUMEN 0x10 +#define ECON1_TXRTS 0x08 +#define ECON1_RXEN 0x04 +#define ECON1_BSEL1 0x02 +#define ECON1_BSEL0 0x01 +// ENC28J60 MACON1 Register Bit Definitions +#define MACON1_LOOPBK 0x10 +#define MACON1_TXPAUS 0x08 +#define MACON1_RXPAUS 0x04 +#define MACON1_PASSALL 0x02 +#define MACON1_MARXEN 0x01 +// ENC28J60 MACON2 Register Bit Definitions +#define MACON2_MARST 0x80 +#define MACON2_RNDRST 0x40 +#define MACON2_MARXRST 0x08 +#define MACON2_RFUNRST 0x04 +#define MACON2_MATXRST 0x02 +#define MACON2_TFUNRST 0x01 +// ENC28J60 MACON3 Register Bit Definitions +#define MACON3_PADCFG2 0x80 +#define MACON3_PADCFG1 0x40 +#define MACON3_PADCFG0 0x20 +#define MACON3_TXCRCEN 0x10 +#define MACON3_PHDRLEN 0x08 +#define MACON3_HFRMLEN 0x04 +#define MACON3_FRMLNEN 0x02 +#define MACON3_FULDPX 0x01 +// ENC28J60 MICMD Register Bit Definitions +#define MICMD_MIISCAN 0x02 +#define MICMD_MIIRD 0x01 +// ENC28J60 MISTAT Register Bit Definitions +#define MISTAT_NVALID 0x04 +#define MISTAT_SCAN 0x02 +#define MISTAT_BUSY 0x01 +// ENC28J60 PHY PHCON1 Register Bit Definitions +#define PHCON1_PRST 0x8000 +#define PHCON1_PLOOPBK 0x4000 +#define PHCON1_PPWRSV 0x0800 +#define PHCON1_PDPXMD 0x0100 +// ENC28J60 PHY PHSTAT1 Register Bit Definitions +#define PHSTAT1_PFDPX 0x1000 +#define PHSTAT1_PHDPX 0x0800 +#define PHSTAT1_LLSTAT 0x0004 +#define PHSTAT1_JBSTAT 0x0002 +// ENC28J60 PHY PHCON2 Register Bit Definitions +#define PHCON2_FRCLINK 0x4000 +#define PHCON2_TXDIS 0x2000 +#define PHCON2_JABBER 0x0400 +#define PHCON2_HDLDIS 0x0100 + +// ENC28J60 Packet Control Byte Bit Definitions +#define PKTCTRL_PHUGEEN 0x08 +#define PKTCTRL_PPADEN 0x04 +#define PKTCTRL_PCRCEN 0x02 +#define PKTCTRL_POVERRIDE 0x01 + +// SPI operation codes +#define ENC28J60_READ_CTRL_REG 0x00 +#define ENC28J60_READ_BUF_MEM 0x3A +#define ENC28J60_WRITE_CTRL_REG 0x40 +#define ENC28J60_WRITE_BUF_MEM 0x7A +#define ENC28J60_BIT_FIELD_SET 0x80 +#define ENC28J60_BIT_FIELD_CLR 0xA0 +#define ENC28J60_SOFT_RESET 0xFF + + +// The RXSTART_INIT should be zero. See Rev. B4 Silicon Errata +// buffer boundaries applied to internal 8K ram +// the entire available packet buffer space is allocated +// +// start with recbuf at 0/ +#define RXSTART_INIT 0x0 +// receive buffer end. make sure this is an odd value ( See Rev. B1,B4,B5,B7 Silicon Errata 'Memory (Ethernet Buffer)') +#define RXSTOP_INIT (0x1FFF-0x1800) +// start TX buffer RXSTOP_INIT+1 +#define TXSTART_INIT (RXSTOP_INIT+1) +// stp TX buffer at end of mem +#define TXSTOP_INIT 0x1FFF +// +// max frame length which the conroller will accept: +#define MAX_FRAMELEN 1500 // (note: maximum ethernet frame length would be 1518) +//#define MAX_FRAMELEN 600 + +#endif diff --git a/STM32F4/libraries/arduino_uip/utility/mempool.cpp b/STM32F4/libraries/arduino_uip/utility/mempool.cpp new file mode 100644 index 0000000..c2f7abf --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/mempool.cpp @@ -0,0 +1,168 @@ +/* + mempool.cpp - sleek implementation of a memory pool + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#include "mempool.h" +#include + +#define POOLOFFSET 1 + +struct memblock MemoryPool::blocks[MEMPOOL_NUM_MEMBLOCKS+1]; + +void +MemoryPool::init() +{ + memset(&blocks[0], 0, sizeof(blocks)); + blocks[POOLSTART].begin = MEMPOOL_STARTADDRESS; + blocks[POOLSTART].size = 0; + blocks[POOLSTART].nextblock = NOBLOCK; +} + +memhandle +MemoryPool::allocBlock(memaddress size) +{ + memblock* best = NULL; + memhandle cur = POOLSTART; + memblock* block = &blocks[POOLSTART]; + memaddress bestsize = MEMPOOL_SIZE + 1; + + do + { + memhandle next = block->nextblock; + memaddress freesize = ( next == NOBLOCK ? blocks[POOLSTART].begin + MEMPOOL_SIZE : blocks[next].begin) - block->begin - block->size; + if (freesize == size) + { + best = &blocks[cur]; + goto found; + } + if (freesize > size && freesize < bestsize) + { + bestsize = freesize; + best = &blocks[cur]; + } + if (next == NOBLOCK) + { + if (best) + goto found; + else + goto collect; + } + block = &blocks[next]; + cur = next; + } + while (true); + + collect: + { + cur = POOLSTART; + block = &blocks[POOLSTART]; + memhandle next; + while ((next = block->nextblock) != NOBLOCK) + { + memaddress dest = block->begin + block->size; + memblock* nextblock = &blocks[next]; + memaddress* src = &nextblock->begin; + if (dest != *src) + { +#ifdef MEMPOOL_MEMBLOCK_MV + MEMPOOL_MEMBLOCK_MV(dest,*src,nextblock->size); +#endif + *src = dest; + } + block = nextblock; + } + if (blocks[POOLSTART].begin + MEMPOOL_SIZE - block->begin - block->size >= size) + best = block; + else + goto notfound; + } + + found: + { + block = &blocks[POOLOFFSET]; + for (cur = POOLOFFSET; cur < MEMPOOL_NUM_MEMBLOCKS + POOLOFFSET; cur++) + { + if (block->size) + { + block++; + continue; + } + memaddress address = best->begin + best->size; +#ifdef MEMBLOCK_ALLOC + MEMBLOCK_ALLOC(address,size); +#endif + block->begin = address; + block->size = size; + block->nextblock = best->nextblock; + best->nextblock = cur; + return cur; + } + } + + notfound: return NOBLOCK; +} + +void +MemoryPool::freeBlock(memhandle handle) +{ + if (handle == NOBLOCK) + return; + memblock *b = &blocks[POOLSTART]; + + do + { + memhandle next = b->nextblock; + if (next == handle) + { + memblock *f = &blocks[next]; +#ifdef MEMBLOCK_FREE + MEMBLOCK_FREE(f->begin,f->size); +#endif + b->nextblock = f->nextblock; + f->size = 0; + f->nextblock = NOBLOCK; + return; + } + if (next == NOBLOCK) + return; + b = &blocks[next]; + } + while (true); +} + +void +MemoryPool::resizeBlock(memhandle handle, memaddress position) +{ + memblock * block = &blocks[handle]; + block->begin += position; + block->size -= position; +} + +void +MemoryPool::resizeBlock(memhandle handle, memaddress position, memaddress size) +{ + memblock * block = &blocks[handle]; + block->begin += position; + block->size = size; +} + +memaddress +MemoryPool::blockSize(memhandle handle) +{ + return blocks[handle].size; +} diff --git a/STM32F4/libraries/arduino_uip/utility/mempool.h b/STM32F4/libraries/arduino_uip/utility/mempool.h new file mode 100644 index 0000000..2a1db21 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/mempool.h @@ -0,0 +1,54 @@ +/* + mempool.h - sleek implementation of a memory pool + Copyright (c) 2013 Norbert Truchsess + All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#ifndef MEMPOOL_H +#define MEMPOOL_H + +#include + +#define POOLSTART 0 +#define NOBLOCK 0 + +#include "mempool_conf.h" + +struct memblock +{ + memaddress begin; + memaddress size; + memhandle nextblock; +}; + +class MemoryPool +{ +#ifdef MEMPOOLTEST_H + friend class MemoryPoolTest; +#endif + +protected: + static struct memblock blocks[MEMPOOL_NUM_MEMBLOCKS+1]; + +public: + static void init(); + static memhandle allocBlock(memaddress); + static void freeBlock(memhandle); + static void resizeBlock(memhandle handle, memaddress position); + static void resizeBlock(memhandle handle, memaddress position, memaddress size); + static memaddress blockSize(memhandle); +}; +#endif diff --git a/STM32F4/libraries/arduino_uip/utility/mempool_conf.h b/STM32F4/libraries/arduino_uip/utility/mempool_conf.h new file mode 100644 index 0000000..9615f92 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/mempool_conf.h @@ -0,0 +1,34 @@ +#ifndef MEMPOOLCONF_H +#define MEMPOOLCONF_H +#include "uipethernet-conf.h" +extern "C" { + #include "uipopt.h" + #include "enc28j60.h" +} +#include + +typedef uint16_t memaddress; +typedef uint8_t memhandle; + +#if UIP_SOCKET_NUMPACKETS and UIP_CONNS +#define NUM_TCP_MEMBLOCKS (UIP_SOCKET_NUMPACKETS*2)*UIP_CONNS +#else +#define NUM_TCP_MEMBLOCKS 0 +#endif + +#if UIP_UDP and UIP_UDP_CONNS +#define NUM_UDP_MEMBLOCKS 3*UIP_UDP_CONNS +#else +#define NUM_UDP_MEMBLOCKS 0 +#endif + +#define MEMPOOL_NUM_MEMBLOCKS (NUM_TCP_MEMBLOCKS+NUM_UDP_MEMBLOCKS) + +#define MEMPOOL_STARTADDRESS TXSTART_INIT+1 +#define MEMPOOL_SIZE TXSTOP_INIT-TXSTART_INIT + +void enc28J60_mempool_block_move_callback(memaddress,memaddress,memaddress); + +#define MEMPOOL_MEMBLOCK_MV(dest,src,size) enc28J60_mempool_block_move_callback(dest,src,size) + +#endif diff --git a/STM32F4/libraries/arduino_uip/utility/uip-conf.h b/STM32F4/libraries/arduino_uip/utility/uip-conf.h new file mode 100644 index 0000000..814aeb9 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip-conf.h @@ -0,0 +1,185 @@ +/** + * UIPEthernet Project-specific configuration options + * Copyright (c) 2013 Norbert Truchsess + * @{ + * + * uIP has a number of configuration options that can be overridden + * for each project. These are kept in a project-specific uip-conf.h + * file and all configuration names have the prefix UIP_CONF. + */ + +/* + * Copyright (c) 2006, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + */ + +#ifndef __UIP_CONF_H__ +#define __UIP_CONF_H__ + +#include +#include "uipethernet-conf.h" + +/** + * 8 bit datatype + * + * This typedef defines the 8-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint8_t u8_t; + +/** + * 16 bit datatype + * + * This typedef defines the 16-bit type used throughout uIP. + * + * \hideinitializer + */ +typedef uint16_t u16_t; + +/** + * Statistics datatype + * + * This typedef defines the dataype used for keeping statistics in + * uIP. + * + * \hideinitializer + */ +typedef unsigned short uip_stats_t; + +/** + * Maximum number of TCP connections. + * (see uipethernet-conf.h) + * \hideinitializer + * + * #define UIP_CONF_MAX_CONNECTIONS 4 + */ + +/** + * Maximum number of listening TCP ports. + * + * \hideinitializer + */ +#define UIP_CONF_MAX_LISTENPORTS 4 + +/** + * uIP buffer size. + * + * \hideinitializer + */ +#define UIP_CONF_BUFFER_SIZE 98 +//#define UIP_CONF_BUFFER_SIZE 118 + +/** + * The TCP maximum segment size. + * + * This is should not be to set to more than + * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. + */ + +#define UIP_CONF_TCP_MSS 512 + +/** + * The size of the advertised receiver's window. + * + * Should be set low (i.e., to the size of the uip_buf buffer) is the + * application is slow to process incoming data, or high (32768 bytes) + * if the application processes data quickly. + * + * \hideinitializer + */ +#define UIP_CONF_RECEIVE_WINDOW 512 + +/** + * CPU byte order. + * + * \hideinitializer + */ +#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN + +/** + * Logging on or off + * + * \hideinitializer + */ +#define UIP_CONF_LOGGING 0 + +/** + * UDP support on or off + * (see uipethernet-conf.h) + * \hideinitializer + * + * #define UIP_CONF_UDP 1 + * + * #define UIP_CONF_UDP_CONNS 4 + */ + +/** + * UDP checksums on or off + * + * \hideinitializer + */ +#define UIP_CONF_UDP_CHECKSUMS 1 + +/** + * UDP Broadcast (receive) on or off + * (see uipethernet-conf.h) + * \hideinitializer + * #define UIP_CONF_BROADCAST 1 + */ + + +/** + * uIP statistics on or off + * + * \hideinitializer + */ +#define UIP_CONF_STATISTICS 0 + +// SLIP +//#define UIP_CONF_LLH_LEN 0 + +typedef void* uip_tcp_appstate_t; + +void uipclient_appcall(void); + +#define UIP_APPCALL uipclient_appcall + +typedef void* uip_udp_appstate_t; + +void uipudp_appcall(void); + +#define UIP_UDP_APPCALL uipudp_appcall + +#define CC_REGISTER_ARG register + +#define UIP_ARCH_CHKSUM 1 + +#endif /* __UIP_CONF_H__ */ diff --git a/STM32F4/libraries/arduino_uip/utility/uip.c b/STM32F4/libraries/arduino_uip/utility/uip.c new file mode 100644 index 0000000..84ea8c3 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip.c @@ -0,0 +1,1897 @@ +#define DEBUG_PRINTF(...) /*printf(__VA_ARGS__)*/ + +/** + * \defgroup uip The uIP TCP/IP stack + * @{ + * + * uIP is an implementation of the TCP/IP protocol stack intended for + * small 8-bit and 16-bit microcontrollers. + * + * uIP provides the necessary protocols for Internet communication, + * with a very small code footprint and RAM requirements - the uIP + * code size is on the order of a few kilobytes and RAM usage is on + * the order of a few hundred bytes. + */ + +/** + * \file + * The uIP TCP/IP stack code. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip.c,v 1.65 2006/06/11 21:46:39 adam Exp $ + * + */ + +/* + * uIP is a small implementation of the IP, UDP and TCP protocols (as + * well as some basic ICMP stuff). The implementation couples the IP, + * UDP, TCP and the application layers very tightly. To keep the size + * of the compiled code down, this code frequently uses the goto + * statement. While it would be possible to break the uip_process() + * function into many smaller functions, this would increase the code + * size because of the overhead of parameter passing and the fact that + * the optimier would not be as efficient. + * + * The principle is that we have a small buffer, called the uip_buf, + * in which the device driver puts an incoming packet. The TCP/IP + * stack parses the headers in the packet, and calls the + * application. If the remote host has sent data to the application, + * this data is present in the uip_buf and the application read the + * data from there. It is up to the application to put this data into + * a byte stream if needed. The application will not be fed with data + * that is out of sequence. + * + * If the application whishes to send data to the peer, it should put + * its data into the uip_buf. The uip_appdata pointer points to the + * first available byte. The TCP/IP stack will calculate the + * checksums, and fill in the necessary header fields and finally send + * the packet back to the peer. +*/ + +#include "uip.h" +#include "uipopt.h" +#include "uip_arch.h" + +#if UIP_CONF_IPV6 +#include "uip-neighbor.h" +#endif /* UIP_CONF_IPV6 */ + +#include + +/*---------------------------------------------------------------------------*/ +/* Variable definitions. */ + + +/* The IP address of this host. If it is defined to be fixed (by + setting UIP_FIXEDADDR to 1 in uipopt.h), the address is set + here. Otherwise, the address */ +#if UIP_FIXEDADDR > 0 +const uip_ipaddr_t uip_hostaddr = + {HTONS((UIP_IPADDR0 << 8) | UIP_IPADDR1), + HTONS((UIP_IPADDR2 << 8) | UIP_IPADDR3)}; +const uip_ipaddr_t uip_draddr = + {HTONS((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1), + HTONS((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3)}; +const uip_ipaddr_t uip_netmask = + {HTONS((UIP_NETMASK0 << 8) | UIP_NETMASK1), + HTONS((UIP_NETMASK2 << 8) | UIP_NETMASK3)}; +#else +uip_ipaddr_t uip_hostaddr, uip_draddr, uip_netmask; +#endif /* UIP_FIXEDADDR */ + +static const uip_ipaddr_t all_ones_addr = +#if UIP_CONF_IPV6 + {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; +#else /* UIP_CONF_IPV6 */ + {0xffff,0xffff}; +#endif /* UIP_CONF_IPV6 */ +static const uip_ipaddr_t all_zeroes_addr = +#if UIP_CONF_IPV6 + {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000}; +#else /* UIP_CONF_IPV6 */ + {0x0000,0x0000}; +#endif /* UIP_CONF_IPV6 */ + + +#if UIP_FIXEDETHADDR +const struct uip_eth_addr uip_ethaddr = {{UIP_ETHADDR0, + UIP_ETHADDR1, + UIP_ETHADDR2, + UIP_ETHADDR3, + UIP_ETHADDR4, + UIP_ETHADDR5}}; +#else +struct uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}}; +#endif + +#ifndef UIP_CONF_EXTERNAL_BUFFER +u8_t uip_buf[UIP_BUFSIZE + 2]; /* The packet buffer that contains + incoming packets. */ +#endif /* UIP_CONF_EXTERNAL_BUFFER */ + +void *uip_appdata; /* The uip_appdata pointer points to + application data. */ +void *uip_sappdata; /* The uip_appdata pointer points to + the application data which is to + be sent. */ +#if UIP_URGDATA > 0 +void *uip_urgdata; /* The uip_urgdata pointer points to + urgent data (out-of-band data), if + present. */ +u16_t uip_urglen, uip_surglen; +#endif /* UIP_URGDATA > 0 */ + +u16_t uip_len, uip_slen; + /* The uip_len is either 8 or 16 bits, + depending on the maximum packet + size. */ + +u8_t uip_flags; /* The uip_flags variable is used for + communication between the TCP/IP stack + and the application program. */ +struct uip_conn *uip_conn; /* uip_conn always points to the current + connection. */ + +struct uip_conn uip_conns[UIP_CONNS]; + /* The uip_conns array holds all TCP + connections. */ +u16_t uip_listenports[UIP_LISTENPORTS]; + /* The uip_listenports list all currently + listning ports. */ +#if UIP_UDP +struct uip_udp_conn *uip_udp_conn; +struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; +#endif /* UIP_UDP */ + +static u16_t ipid; /* Ths ipid variable is an increasing + number that is used for the IP ID + field. */ + +void uip_setipid(u16_t id) { ipid = id; } + +static u8_t iss[4]; /* The iss variable is used for the TCP + initial sequence number. */ + +#if UIP_ACTIVE_OPEN +static u16_t lastport; /* Keeps track of the last port used for + a new connection. */ +#endif /* UIP_ACTIVE_OPEN */ + +/* Temporary variables. */ +u8_t uip_acc32[4]; +static u8_t c, opt; +static u16_t tmp16; + +/* Structures and definitions. */ +#define TCP_FIN 0x01 +#define TCP_SYN 0x02 +#define TCP_RST 0x04 +#define TCP_PSH 0x08 +#define TCP_ACK 0x10 +#define TCP_URG 0x20 +#define TCP_CTL 0x3f + +#define TCP_OPT_END 0 /* End of TCP options list */ +#define TCP_OPT_NOOP 1 /* "No-operation" TCP option */ +#define TCP_OPT_MSS 2 /* Maximum segment size TCP option */ + +#define TCP_OPT_MSS_LEN 4 /* Length of TCP MSS option. */ + +#define ICMP_ECHO_REPLY 0 +#define ICMP_ECHO 8 + +#define ICMP6_ECHO_REPLY 129 +#define ICMP6_ECHO 128 +#define ICMP6_NEIGHBOR_SOLICITATION 135 +#define ICMP6_NEIGHBOR_ADVERTISEMENT 136 + +#define ICMP6_FLAG_S (1 << 6) + +#define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1 +#define ICMP6_OPTION_TARGET_LINK_ADDRESS 2 + + +/* Macros. */ +#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0]) +#define ICMPBUF ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN]) +#define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN]) + + +#if UIP_STATISTICS == 1 +struct uip_stats uip_stat; +#define UIP_STAT(s) s +#else +#define UIP_STAT(s) +#endif /* UIP_STATISTICS == 1 */ + +#if UIP_LOGGING == 1 +#include +void uip_log(char *msg); +#define UIP_LOG(m) uip_log(m) +#else +#define UIP_LOG(m) +#endif /* UIP_LOGGING == 1 */ + +#if ! UIP_ARCH_ADD32 +void +uip_add32(u8_t *op32, u16_t op16) +{ + uip_acc32[3] = op32[3] + (op16 & 0xff); + uip_acc32[2] = op32[2] + (op16 >> 8); + uip_acc32[1] = op32[1]; + uip_acc32[0] = op32[0]; + + if(uip_acc32[2] < (op16 >> 8)) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + + + if(uip_acc32[3] < (op16 & 0xff)) { + ++uip_acc32[2]; + if(uip_acc32[2] == 0) { + ++uip_acc32[1]; + if(uip_acc32[1] == 0) { + ++uip_acc32[0]; + } + } + } +} + +#endif /* UIP_ARCH_ADD32 */ + +#if ! UIP_ARCH_CHKSUM +/*---------------------------------------------------------------------------*/ +static u16_t +chksum(u16_t sum, const u8_t *data, u16_t len) +{ + u16_t t; + const u8_t *dataptr; + const u8_t *last_byte; + + dataptr = data; + last_byte = data + len - 1; + + while(dataptr < last_byte) { /* At least two more bytes */ + t = (dataptr[0] << 8) + dataptr[1]; + sum += t; + if(sum < t) { + sum++; /* carry */ + } + dataptr += 2; + } + + if(dataptr == last_byte) { + t = (dataptr[0] << 8) + 0; + sum += t; + if(sum < t) { + sum++; /* carry */ + } + } + + /* Return sum in host byte order. */ + return sum; +} +/*---------------------------------------------------------------------------*/ +u16_t +uip_chksum(u16_t *data, u16_t len) +{ + return htons(chksum(0, (u8_t *)data, len)); +} +/*---------------------------------------------------------------------------*/ +#ifndef UIP_ARCH_IPCHKSUM +u16_t +uip_ipchksum(void) +{ + u16_t sum; + + sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN); + DEBUG_PRINTF("uip_ipchksum: sum 0x%04x\n", sum); + return (sum == 0) ? 0xffff : htons(sum); +} +#endif +/*---------------------------------------------------------------------------*/ +static u16_t +upper_layer_chksum(u8_t proto) +{ + u16_t upper_layer_len; + u16_t sum; + +#if UIP_CONF_IPV6 + upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]); +#else /* UIP_CONF_IPV6 */ + upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN; +#endif /* UIP_CONF_IPV6 */ + + /* First sum pseudoheader. */ + + /* IP protocol and length fields. This addition cannot carry. */ + sum = upper_layer_len + proto; + /* Sum IP source and destination addresses. */ + sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); + + /* Sum TCP header and data. */ + sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], + upper_layer_len); + + return (sum == 0) ? 0xffff : htons(sum); +} +/*---------------------------------------------------------------------------*/ +#if UIP_CONF_IPV6 +u16_t +uip_icmp6chksum(void) +{ + return upper_layer_chksum(UIP_PROTO_ICMP6); + +} +#endif /* UIP_CONF_IPV6 */ +/*---------------------------------------------------------------------------*/ +u16_t +uip_tcpchksum(void) +{ + return upper_layer_chksum(UIP_PROTO_TCP); +} +/*---------------------------------------------------------------------------*/ +#if UIP_UDP_CHECKSUMS +u16_t +uip_udpchksum(void) +{ + return upper_layer_chksum(UIP_PROTO_UDP); +} +#endif /* UIP_UDP_CHECKSUMS */ +#endif /* UIP_ARCH_CHKSUM */ +/*---------------------------------------------------------------------------*/ +void +uip_init(void) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + uip_listenports[c] = 0; + } + for(c = 0; c < UIP_CONNS; ++c) { + uip_conns[c].tcpstateflags = UIP_CLOSED; + } +#if UIP_ACTIVE_OPEN + lastport = 1024; +#endif /* UIP_ACTIVE_OPEN */ + +#if UIP_UDP + for(c = 0; c < UIP_UDP_CONNS; ++c) { + uip_udp_conns[c].lport = 0; + } +#endif /* UIP_UDP */ + + + /* IPv4 initialization. */ +#if UIP_FIXEDADDR == 0 + /* uip_hostaddr[0] = uip_hostaddr[1] = 0;*/ +#endif /* UIP_FIXEDADDR */ + +} +/*---------------------------------------------------------------------------*/ +#if UIP_ACTIVE_OPEN +struct uip_conn * +uip_connect(uip_ipaddr_t *ripaddr, u16_t rport) +{ + register struct uip_conn *conn, *cconn; + + /* Find an unused local port. */ + again: + ++lastport; + + if(lastport >= 32000) { + lastport = 4096; + } + + /* Check if this port is already in use, and if so try to find + another one. */ + for(c = 0; c < UIP_CONNS; ++c) { + conn = &uip_conns[c]; + if(conn->tcpstateflags != UIP_CLOSED && + conn->lport == htons(lastport)) { + goto again; + } + } + + conn = 0; + for(c = 0; c < UIP_CONNS; ++c) { + cconn = &uip_conns[c]; + if(cconn->tcpstateflags == UIP_CLOSED) { + conn = cconn; + break; + } + if(cconn->tcpstateflags == UIP_TIME_WAIT) { + if(conn == 0 || + cconn->timer > conn->timer) { + conn = cconn; + } + } + } + + if(conn == 0) { + return 0; + } + + conn->tcpstateflags = UIP_SYN_SENT; + + conn->snd_nxt[0] = iss[0]; + conn->snd_nxt[1] = iss[1]; + conn->snd_nxt[2] = iss[2]; + conn->snd_nxt[3] = iss[3]; + + conn->initialmss = conn->mss = UIP_TCP_MSS; + + conn->len = 1; /* TCP length of the SYN is one. */ + conn->nrtx = 0; + conn->timer = 1; /* Send the SYN next time around. */ + conn->rto = UIP_RTO; + conn->sa = 0; + conn->sv = 16; /* Initial value of the RTT variance. */ + conn->lport = htons(lastport); + conn->rport = rport; + uip_ipaddr_copy(&conn->ripaddr, ripaddr); + + return conn; +} +#endif /* UIP_ACTIVE_OPEN */ +/*---------------------------------------------------------------------------*/ +#if UIP_UDP +struct uip_udp_conn * +uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport) +{ + register struct uip_udp_conn *conn; + + /* Find an unused local port. */ + again: + ++lastport; + + if(lastport >= 32000) { + lastport = 4096; + } + + for(c = 0; c < UIP_UDP_CONNS; ++c) { + if(uip_udp_conns[c].lport == htons(lastport)) { + goto again; + } + } + + + conn = 0; + for(c = 0; c < UIP_UDP_CONNS; ++c) { + if(uip_udp_conns[c].lport == 0) { + conn = &uip_udp_conns[c]; + break; + } + } + + if(conn == 0) { + return 0; + } + + conn->lport = HTONS(lastport); + conn->rport = rport; + if(ripaddr == NULL) { + memset(conn->ripaddr, 0, sizeof(uip_ipaddr_t)); + } else { + uip_ipaddr_copy(&conn->ripaddr, ripaddr); + } + conn->ttl = UIP_TTL; + + return conn; +} +#endif /* UIP_UDP */ +/*---------------------------------------------------------------------------*/ +void +uip_unlisten(u16_t port) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(uip_listenports[c] == port) { + uip_listenports[c] = 0; + return; + } + } +} +/*---------------------------------------------------------------------------*/ +void +uip_listen(u16_t port) +{ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(uip_listenports[c] == 0) { + uip_listenports[c] = port; + return; + } + } +} +/*---------------------------------------------------------------------------*/ +/* XXX: IP fragment reassembly: not well-tested. */ + +#if UIP_REASSEMBLY && !UIP_CONF_IPV6 +#define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN) +static u8_t uip_reassbuf[UIP_REASS_BUFSIZE]; +static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)]; +static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f, + 0x0f, 0x07, 0x03, 0x01}; +static u16_t uip_reasslen; +static u8_t uip_reassflags; +#define UIP_REASS_FLAG_LASTFRAG 0x01 +static u8_t uip_reasstmr; + +#define IP_MF 0x20 + +static u8_t +uip_reass(void) +{ + u16_t offset, len; + u16_t i; + + /* If ip_reasstmr is zero, no packet is present in the buffer, so we + write the IP header of the fragment into the reassembly + buffer. The timer is updated with the maximum age. */ + if(uip_reasstmr == 0) { + memcpy(uip_reassbuf, &BUF->vhl, UIP_IPH_LEN); + uip_reasstmr = UIP_REASS_MAXAGE; + uip_reassflags = 0; + /* Clear the bitmap. */ + memset(uip_reassbitmap, 0, sizeof(uip_reassbitmap)); + } + + /* Check if the incoming fragment matches the one currently present + in the reasembly buffer. If so, we proceed with copying the + fragment into the buffer. */ + if(BUF->srcipaddr[0] == FBUF->srcipaddr[0] && + BUF->srcipaddr[1] == FBUF->srcipaddr[1] && + BUF->destipaddr[0] == FBUF->destipaddr[0] && + BUF->destipaddr[1] == FBUF->destipaddr[1] && + BUF->ipid[0] == FBUF->ipid[0] && + BUF->ipid[1] == FBUF->ipid[1]) { + + len = (BUF->len[0] << 8) + BUF->len[1] - (BUF->vhl & 0x0f) * 4; + offset = (((BUF->ipoffset[0] & 0x3f) << 8) + BUF->ipoffset[1]) * 8; + + /* If the offset or the offset + fragment length overflows the + reassembly buffer, we discard the entire packet. */ + if(offset > UIP_REASS_BUFSIZE || + offset + len > UIP_REASS_BUFSIZE) { + uip_reasstmr = 0; + goto nullreturn; + } + + /* Copy the fragment into the reassembly buffer, at the right + offset. */ + memcpy(&uip_reassbuf[UIP_IPH_LEN + offset], + (char *)BUF + (int)((BUF->vhl & 0x0f) * 4), + len); + + /* Update the bitmap. */ + if(offset / (8 * 8) == (offset + len) / (8 * 8)) { + /* If the two endpoints are in the same byte, we only update + that byte. */ + + uip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8 ) & 7] & + ~bitmap_bits[((offset + len) / 8 ) & 7]; + } else { + /* If the two endpoints are in different bytes, we update the + bytes in the endpoints and fill the stuff inbetween with + 0xff. */ + uip_reassbitmap[offset / (8 * 8)] |= + bitmap_bits[(offset / 8 ) & 7]; + for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) { + uip_reassbitmap[i] = 0xff; + } + uip_reassbitmap[(offset + len) / (8 * 8)] |= + ~bitmap_bits[((offset + len) / 8 ) & 7]; + } + + /* If this fragment has the More Fragments flag set to zero, we + know that this is the last fragment, so we can calculate the + size of the entire packet. We also set the + IP_REASS_FLAG_LASTFRAG flag to indicate that we have received + the final fragment. */ + + if((BUF->ipoffset[0] & IP_MF) == 0) { + uip_reassflags |= UIP_REASS_FLAG_LASTFRAG; + uip_reasslen = offset + len; + } + + /* Finally, we check if we have a full packet in the buffer. We do + this by checking if we have the last fragment and if all bits + in the bitmap are set. */ + if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) { + /* Check all bytes up to and including all but the last byte in + the bitmap. */ + for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) { + if(uip_reassbitmap[i] != 0xff) { + goto nullreturn; + } + } + /* Check the last byte in the bitmap. It should contain just the + right amount of bits. */ + if(uip_reassbitmap[uip_reasslen / (8 * 8)] != + (u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) { + goto nullreturn; + } + + /* If we have come this far, we have a full packet in the + buffer, so we allocate a pbuf and copy the packet into it. We + also reset the timer. */ + uip_reasstmr = 0; + memcpy(BUF, FBUF, uip_reasslen); + + /* Pretend to be a "normal" (i.e., not fragmented) IP packet + from now on. */ + BUF->ipoffset[0] = BUF->ipoffset[1] = 0; + BUF->len[0] = uip_reasslen >> 8; + BUF->len[1] = uip_reasslen & 0xff; + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); + + return uip_reasslen; + } + } + + nullreturn: + return 0; +} +#endif /* UIP_REASSEMBLY */ +/*---------------------------------------------------------------------------*/ +static void +uip_add_rcv_nxt(u16_t n) +{ + uip_add32(uip_conn->rcv_nxt, n); + uip_conn->rcv_nxt[0] = uip_acc32[0]; + uip_conn->rcv_nxt[1] = uip_acc32[1]; + uip_conn->rcv_nxt[2] = uip_acc32[2]; + uip_conn->rcv_nxt[3] = uip_acc32[3]; +} +/*---------------------------------------------------------------------------*/ +void +uip_process(u8_t flag) +{ + register struct uip_conn *uip_connr = uip_conn; + +#if UIP_UDP + if(flag == UIP_UDP_SEND_CONN) { + goto udp_send; + } +#endif /* UIP_UDP */ + + uip_sappdata = uip_appdata = &uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN]; + + /* Check if we were invoked because of a poll request for a + particular connection. */ + if(flag == UIP_POLL_REQUEST) { + if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED && + !uip_outstanding(uip_connr)) { + uip_flags = UIP_POLL; + UIP_APPCALL(); + goto appsend; + } + goto drop; + + /* Check if we were invoked because of the perodic timer fireing. */ + } else if(flag == UIP_TIMER) { +#if UIP_REASSEMBLY + if(uip_reasstmr != 0) { + --uip_reasstmr; + } +#endif /* UIP_REASSEMBLY */ + /* Increase the initial sequence number. */ + if(++iss[3] == 0) { + if(++iss[2] == 0) { + if(++iss[1] == 0) { + ++iss[0]; + } + } + } + + /* Reset the length variables. */ + uip_len = 0; + uip_slen = 0; + + /* Check if the connection is in a state in which we simply wait + for the connection to time out. If so, we increase the + connection's timer and remove the connection if it times + out. */ + if(uip_connr->tcpstateflags == UIP_TIME_WAIT || + uip_connr->tcpstateflags == UIP_FIN_WAIT_2) { + ++(uip_connr->timer); + if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) { + uip_connr->tcpstateflags = UIP_CLOSED; + } + } else if(uip_connr->tcpstateflags != UIP_CLOSED) { + /* If the connection has outstanding data, we increase the + connection's timer and see if it has reached the RTO value + in which case we retransmit. */ + if(uip_outstanding(uip_connr)) { + if(uip_connr->timer-- == 0) { + if(uip_connr->nrtx == UIP_MAXRTX || + ((uip_connr->tcpstateflags == UIP_SYN_SENT || + uip_connr->tcpstateflags == UIP_SYN_RCVD) && + uip_connr->nrtx == UIP_MAXSYNRTX)) { + uip_connr->tcpstateflags = UIP_CLOSED; + + /* We call UIP_APPCALL() with uip_flags set to + UIP_TIMEDOUT to inform the application that the + connection has timed out. */ + uip_flags = UIP_TIMEDOUT; + UIP_APPCALL(); + + /* We also send a reset packet to the remote host. */ + BUF->flags = TCP_RST | TCP_ACK; + goto tcp_send_nodata; + } + + /* Exponential backoff. */ + uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4? + 4: + uip_connr->nrtx); + ++(uip_connr->nrtx); + + /* Ok, so we need to retransmit. We do this differently + depending on which state we are in. In ESTABLISHED, we + call upon the application so that it may prepare the + data for the retransmit. In SYN_RCVD, we resend the + SYNACK that we sent earlier and in LAST_ACK we have to + retransmit our FINACK. */ + UIP_STAT(++uip_stat.tcp.rexmit); + switch(uip_connr->tcpstateflags & UIP_TS_MASK) { + case UIP_SYN_RCVD: + /* In the SYN_RCVD state, we should retransmit our + SYNACK. */ + goto tcp_send_synack; + +#if UIP_ACTIVE_OPEN + case UIP_SYN_SENT: + /* In the SYN_SENT state, we retransmit out SYN. */ + BUF->flags = 0; + goto tcp_send_syn; +#endif /* UIP_ACTIVE_OPEN */ + + case UIP_ESTABLISHED: + /* In the ESTABLISHED state, we call upon the application + to do the actual retransmit after which we jump into + the code for sending out the packet (the apprexmit + label). */ + uip_flags = UIP_REXMIT; + UIP_APPCALL(); + goto apprexmit; + + case UIP_FIN_WAIT_1: + case UIP_CLOSING: + case UIP_LAST_ACK: + /* In all these states we should retransmit a FINACK. */ + goto tcp_send_finack; + + } + } + } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) { + /* If there was no need for a retransmission, we poll the + application for new data. */ + uip_flags = UIP_POLL; + UIP_APPCALL(); + goto appsend; + } + } + goto drop; + } +#if UIP_UDP + if(flag == UIP_UDP_TIMER) { + if(uip_udp_conn->lport != 0) { + uip_conn = NULL; + uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + uip_len = uip_slen = 0; + uip_flags = UIP_POLL; + UIP_UDP_APPCALL(); + goto udp_send; + } else { + goto drop; + } + } +#endif + + /* This is where the input processing starts. */ + UIP_STAT(++uip_stat.ip.recv); + + /* Start of IP input header processing code. */ + +#if UIP_CONF_IPV6 + /* Check validity of the IP header. */ + if((BUF->vtc & 0xf0) != 0x60) { /* IP version and header length. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.vhlerr); + UIP_LOG("ipv6: invalid version."); + goto drop; + } +#else /* UIP_CONF_IPV6 */ + /* Check validity of the IP header. */ + if(BUF->vhl != 0x45) { /* IP version and header length. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.vhlerr); + UIP_LOG("ip: invalid version or header length."); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + + /* Check the size of the packet. If the size reported to us in + uip_len is smaller the size reported in the IP header, we assume + that the packet has been corrupted in transit. If the size of + uip_len is larger than the size reported in the IP packet header, + the packet has been padded and we set uip_len to the correct + value.. */ + + if((BUF->len[0] << 8) + BUF->len[1] <= uip_len) { + uip_len = (BUF->len[0] << 8) + BUF->len[1]; +#if UIP_CONF_IPV6 + uip_len += 40; /* The length reported in the IPv6 header is the + length of the payload that follows the + header. However, uIP uses the uip_len variable + for holding the size of the entire packet, + including the IP header. For IPv4 this is not a + problem as the length field in the IPv4 header + contains the length of the entire packet. But + for IPv6 we need to add the size of the IPv6 + header (40 bytes). */ +#endif /* UIP_CONF_IPV6 */ + } else { + UIP_LOG("ip: packet shorter than reported in IP header."); + goto drop; + } + +#if !UIP_CONF_IPV6 + /* Check the fragment flag. */ + if((BUF->ipoffset[0] & 0x3f) != 0 || + BUF->ipoffset[1] != 0) { +#if UIP_REASSEMBLY + uip_len = uip_reass(); + if(uip_len == 0) { + goto drop; + } +#else /* UIP_REASSEMBLY */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.fragerr); + UIP_LOG("ip: fragment dropped."); + goto drop; +#endif /* UIP_REASSEMBLY */ + } +#endif /* UIP_CONF_IPV6 */ + + if(uip_ipaddr_cmp(uip_hostaddr, all_zeroes_addr)) { + /* If we are configured to use ping IP address configuration and + hasn't been assigned an IP address yet, we accept all ICMP + packets. */ +#if UIP_PINGADDRCONF && !UIP_CONF_IPV6 + if(BUF->proto == UIP_PROTO_ICMP) { + UIP_LOG("ip: possible ping config packet received."); + goto icmp_input; + } else { + UIP_LOG("ip: packet dropped since no address assigned."); + goto drop; + } +#endif /* UIP_PINGADDRCONF */ + + } else { + /* If IP broadcast support is configured, we check for a broadcast + UDP packet, which may be destined to us. */ +#if UIP_BROADCAST + DEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum()); + if(BUF->proto == UIP_PROTO_UDP && + uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr) + /*&& + uip_ipchksum() == 0xffff*/) { + goto udp_input; + } +#endif /* UIP_BROADCAST */ + + /* Check if the packet is destined for our IP address. */ +#if !UIP_CONF_IPV6 + if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr)) { + UIP_STAT(++uip_stat.ip.drop); + goto drop; + } +#else /* UIP_CONF_IPV6 */ + /* For IPv6, packet reception is a little trickier as we need to + make sure that we listen to certain multicast addresses (all + hosts multicast address, and the solicited-node multicast + address) as well. However, we will cheat here and accept all + multicast packets that are sent to the ff02::/16 addresses. */ + if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr) && + BUF->destipaddr[0] != HTONS(0xff02)) { + UIP_STAT(++uip_stat.ip.drop); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + } + +#if !UIP_CONF_IPV6 + if(uip_ipchksum() != 0xffff) { /* Compute and check the IP header + checksum. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.chkerr); + UIP_LOG("ip: bad checksum."); + goto drop; + } +#endif /* UIP_CONF_IPV6 */ + + if(BUF->proto == UIP_PROTO_TCP) { /* Check for TCP packet. If so, + proceed with TCP input + processing. */ + goto tcp_input; + } + +#if UIP_UDP + if(BUF->proto == UIP_PROTO_UDP) { + goto udp_input; + } +#endif /* UIP_UDP */ + +#if !UIP_CONF_IPV6 + /* ICMPv4 processing code follows. */ + if(BUF->proto != UIP_PROTO_ICMP) { /* We only allow ICMP packets from + here. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.protoerr); + UIP_LOG("ip: neither tcp nor icmp."); + goto drop; + } + +#if UIP_PINGADDRCONF + icmp_input: +#endif /* UIP_PINGADDRCONF */ + UIP_STAT(++uip_stat.icmp.recv); + + /* ICMP echo (i.e., ping) processing. This is simple, we only change + the ICMP type from ECHO to ECHO_REPLY and adjust the ICMP + checksum before we return the packet. */ + if(ICMPBUF->type != ICMP_ECHO) { + UIP_STAT(++uip_stat.icmp.drop); + UIP_STAT(++uip_stat.icmp.typeerr); + UIP_LOG("icmp: not icmp echo."); + goto drop; + } + + /* If we are configured to use ping IP address assignment, we use + the destination IP address of this ping packet and assign it to + ourself. */ +#if UIP_PINGADDRCONF + if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) { + uip_hostaddr[0] = BUF->destipaddr[0]; + uip_hostaddr[1] = BUF->destipaddr[1]; + } +#endif /* UIP_PINGADDRCONF */ + + ICMPBUF->type = ICMP_ECHO_REPLY; + + if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) { + ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1; + } else { + ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8); + } + + /* Swap IP addresses. */ + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + + UIP_STAT(++uip_stat.icmp.sent); + goto send; + + /* End of IPv4 input header processing code. */ +#else /* !UIP_CONF_IPV6 */ + + /* This is IPv6 ICMPv6 processing code. */ + DEBUG_PRINTF("icmp6_input: length %d\n", uip_len); + + if(BUF->proto != UIP_PROTO_ICMP6) { /* We only allow ICMPv6 packets from + here. */ + UIP_STAT(++uip_stat.ip.drop); + UIP_STAT(++uip_stat.ip.protoerr); + UIP_LOG("ip: neither tcp nor icmp6."); + goto drop; + } + + UIP_STAT(++uip_stat.icmp.recv); + + /* If we get a neighbor solicitation for our address we should send + a neighbor advertisement message back. */ + if(ICMPBUF->type == ICMP6_NEIGHBOR_SOLICITATION) { + if(uip_ipaddr_cmp(ICMPBUF->icmp6data, uip_hostaddr)) { + + if(ICMPBUF->options[0] == ICMP6_OPTION_SOURCE_LINK_ADDRESS) { + /* Save the sender's address in our neighbor list. */ + uip_neighbor_add(ICMPBUF->srcipaddr, &(ICMPBUF->options[2])); + } + + /* We should now send a neighbor advertisement back to where the + neighbor solicication came from. */ + ICMPBUF->type = ICMP6_NEIGHBOR_ADVERTISEMENT; + ICMPBUF->flags = ICMP6_FLAG_S; /* Solicited flag. */ + + ICMPBUF->reserved1 = ICMPBUF->reserved2 = ICMPBUF->reserved3 = 0; + + uip_ipaddr_copy(ICMPBUF->destipaddr, ICMPBUF->srcipaddr); + uip_ipaddr_copy(ICMPBUF->srcipaddr, uip_hostaddr); + ICMPBUF->options[0] = ICMP6_OPTION_TARGET_LINK_ADDRESS; + ICMPBUF->options[1] = 1; /* Options length, 1 = 8 bytes. */ + memcpy(&(ICMPBUF->options[2]), &uip_ethaddr, sizeof(uip_ethaddr)); + ICMPBUF->icmpchksum = 0; + ICMPBUF->icmpchksum = ~uip_icmp6chksum(); + goto send; + + } + goto drop; + } else if(ICMPBUF->type == ICMP6_ECHO) { + /* ICMP echo (i.e., ping) processing. This is simple, we only + change the ICMP type from ECHO to ECHO_REPLY and update the + ICMP checksum before we return the packet. */ + + ICMPBUF->type = ICMP6_ECHO_REPLY; + + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + ICMPBUF->icmpchksum = 0; + ICMPBUF->icmpchksum = ~uip_icmp6chksum(); + + UIP_STAT(++uip_stat.icmp.sent); + goto send; + } else { + DEBUG_PRINTF("Unknown icmp6 message type %d\n", ICMPBUF->type); + UIP_STAT(++uip_stat.icmp.drop); + UIP_STAT(++uip_stat.icmp.typeerr); + UIP_LOG("icmp: unknown ICMP message."); + goto drop; + } + + /* End of IPv6 ICMP processing. */ + +#endif /* !UIP_CONF_IPV6 */ + +#if UIP_UDP + /* UDP input processing. */ + udp_input: + /* UDP processing is really just a hack. We don't do anything to the + UDP/IP headers, but let the UDP application do all the hard + work. If the application sets uip_slen, it has a packet to + send. */ +#if UIP_UDP_CHECKSUMS + uip_len = uip_len - UIP_IPUDPH_LEN; + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + if(UDPBUF->udpchksum != 0 && uip_udpchksum() != 0xffff) { + UIP_STAT(++uip_stat.udp.drop); + UIP_STAT(++uip_stat.udp.chkerr); + UIP_LOG("udp: bad checksum."); + goto drop; + } +#else /* UIP_UDP_CHECKSUMS */ + uip_len = uip_len - UIP_IPUDPH_LEN; +#endif /* UIP_UDP_CHECKSUMS */ + + /* Demultiplex this UDP packet between the UDP "connections". */ + for(uip_udp_conn = &uip_udp_conns[0]; + uip_udp_conn < &uip_udp_conns[UIP_UDP_CONNS]; + ++uip_udp_conn) { + /* If the local UDP port is non-zero, the connection is considered + to be used. If so, the local port number is checked against the + destination port number in the received packet. If the two port + numbers match, the remote port number is checked if the + connection is bound to a remote port. Finally, if the + connection is bound to a remote IP address, the source IP + address of the packet is checked. */ + if(uip_udp_conn->lport != 0 && + UDPBUF->destport == uip_udp_conn->lport && + (uip_udp_conn->rport == 0 || + UDPBUF->srcport == uip_udp_conn->rport) && + (uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) || + uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) || + uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) { + goto udp_found; + } + } + UIP_LOG("udp: no matching connection found"); + goto drop; + + udp_found: + uip_conn = NULL; + uip_flags = UIP_NEWDATA; + uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; + uip_slen = 0; + UIP_UDP_APPCALL(); + udp_send: + if(uip_slen == 0) { + goto drop; + } + uip_len = uip_slen + UIP_IPUDPH_LEN; + +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = (uip_len >> 8); + BUF->len[1] = (uip_len & 0xff); +#endif /* UIP_CONF_IPV6 */ + + BUF->ttl = uip_udp_conn->ttl; + BUF->proto = UIP_PROTO_UDP; + + UDPBUF->udplen = HTONS(uip_slen + UIP_UDPH_LEN); + UDPBUF->udpchksum = 0; + + BUF->srcport = uip_udp_conn->lport; + BUF->destport = uip_udp_conn->rport; + + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr); + + uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN]; + +#if UIP_UDP_CHECKSUMS + /* Calculate UDP checksum. */ + UDPBUF->udpchksum = ~(uip_udpchksum()); + if(UDPBUF->udpchksum == 0) { + UDPBUF->udpchksum = 0xffff; + } +#endif /* UIP_UDP_CHECKSUMS */ + + goto ip_send_nolen; +#endif /* UIP_UDP */ + + /* TCP input processing. */ + tcp_input: + UIP_STAT(++uip_stat.tcp.recv); + + /* Start of TCP input header processing code. */ + + if(uip_tcpchksum() != 0xffff) { /* Compute and check the TCP + checksum. */ + UIP_STAT(++uip_stat.tcp.drop); + UIP_STAT(++uip_stat.tcp.chkerr); + UIP_LOG("tcp: bad checksum."); + goto drop; + } + + + /* Demultiplex this segment. */ + /* First check any active connections. */ + for(uip_connr = &uip_conns[0]; uip_connr <= &uip_conns[UIP_CONNS - 1]; + ++uip_connr) { + if(uip_connr->tcpstateflags != UIP_CLOSED && + BUF->destport == uip_connr->lport && + BUF->srcport == uip_connr->rport && + uip_ipaddr_cmp(BUF->srcipaddr, uip_connr->ripaddr)) { + goto found; + } + } + + /* If we didn't find and active connection that expected the packet, + either this packet is an old duplicate, or this is a SYN packet + destined for a connection in LISTEN. If the SYN flag isn't set, + it is an old packet and we send a RST. */ + if((BUF->flags & TCP_CTL) != TCP_SYN) { + goto reset; + } + + tmp16 = BUF->destport; + /* Next, check listening connections. */ + for(c = 0; c < UIP_LISTENPORTS; ++c) { + if(tmp16 == uip_listenports[c]) + goto found_listen; + } + + /* No matching connection found, so we send a RST packet. */ + UIP_STAT(++uip_stat.tcp.synrst); + reset: + + /* We do not send resets in response to resets. */ + if(BUF->flags & TCP_RST) { + goto drop; + } + + UIP_STAT(++uip_stat.tcp.rst); + + BUF->flags = TCP_RST | TCP_ACK; + uip_len = UIP_IPTCPH_LEN; + BUF->tcpoffset = 5 << 4; + + /* Flip the seqno and ackno fields in the TCP header. */ + c = BUF->seqno[3]; + BUF->seqno[3] = BUF->ackno[3]; + BUF->ackno[3] = c; + + c = BUF->seqno[2]; + BUF->seqno[2] = BUF->ackno[2]; + BUF->ackno[2] = c; + + c = BUF->seqno[1]; + BUF->seqno[1] = BUF->ackno[1]; + BUF->ackno[1] = c; + + c = BUF->seqno[0]; + BUF->seqno[0] = BUF->ackno[0]; + BUF->ackno[0] = c; + + /* We also have to increase the sequence number we are + acknowledging. If the least significant byte overflowed, we need + to propagate the carry to the other bytes as well. */ + if(++BUF->ackno[3] == 0) { + if(++BUF->ackno[2] == 0) { + if(++BUF->ackno[1] == 0) { + ++BUF->ackno[0]; + } + } + } + + /* Swap port numbers. */ + tmp16 = BUF->srcport; + BUF->srcport = BUF->destport; + BUF->destport = tmp16; + + /* Swap IP addresses. */ + uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + + /* And send out the RST packet! */ + goto tcp_send_noconn; + + /* This label will be jumped to if we matched the incoming packet + with a connection in LISTEN. In that case, we should create a new + connection and send a SYNACK in return. */ + found_listen: + /* First we check if there are any connections avaliable. Unused + connections are kept in the same table as used connections, but + unused ones have the tcpstate set to CLOSED. Also, connections in + TIME_WAIT are kept track of and we'll use the oldest one if no + CLOSED connections are found. Thanks to Eddie C. Dost for a very + nice algorithm for the TIME_WAIT search. */ + uip_connr = 0; + for(c = 0; c < UIP_CONNS; ++c) { + if(uip_conns[c].tcpstateflags == UIP_CLOSED) { + uip_connr = &uip_conns[c]; + break; + } + if(uip_conns[c].tcpstateflags == UIP_TIME_WAIT) { + if(uip_connr == 0 || + uip_conns[c].timer > uip_connr->timer) { + uip_connr = &uip_conns[c]; + } + } + } + + if(uip_connr == 0) { + /* All connections are used already, we drop packet and hope that + the remote end will retransmit the packet at a time when we + have more spare connections. */ + UIP_STAT(++uip_stat.tcp.syndrop); + UIP_LOG("tcp: found no unused connections."); + goto drop; + } + uip_conn = uip_connr; + + /* Fill in the necessary fields for the new connection. */ + uip_connr->rto = uip_connr->timer = UIP_RTO; + uip_connr->sa = 0; + uip_connr->sv = 4; + uip_connr->nrtx = 0; + uip_connr->lport = BUF->destport; + uip_connr->rport = BUF->srcport; + uip_ipaddr_copy(uip_connr->ripaddr, BUF->srcipaddr); + uip_connr->tcpstateflags = UIP_SYN_RCVD; + + uip_connr->snd_nxt[0] = iss[0]; + uip_connr->snd_nxt[1] = iss[1]; + uip_connr->snd_nxt[2] = iss[2]; + uip_connr->snd_nxt[3] = iss[3]; + uip_connr->len = 1; + + /* rcv_nxt should be the seqno from the incoming packet + 1. */ + uip_connr->rcv_nxt[3] = BUF->seqno[3]; + uip_connr->rcv_nxt[2] = BUF->seqno[2]; + uip_connr->rcv_nxt[1] = BUF->seqno[1]; + uip_connr->rcv_nxt[0] = BUF->seqno[0]; + uip_add_rcv_nxt(1); + + /* Parse the TCP MSS option, if present. */ + if((BUF->tcpoffset & 0xf0) > 0x50) { + for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) { + opt = uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + c]; + if(opt == TCP_OPT_END) { + /* End of options. */ + break; + } else if(opt == TCP_OPT_NOOP) { + ++c; + /* NOP option. */ + } else if(opt == TCP_OPT_MSS && + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) { + /* An MSS option with the right option length. */ + tmp16 = ((u16_t)uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) | + (u16_t)uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + 3 + c]; + uip_connr->initialmss = uip_connr->mss = + tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16; + + /* And we are done processing options. */ + break; + } else { + /* All other options have a length field, so that we easily + can skip past them. */ + if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) { + /* If the length field is zero, the options are malformed + and we don't process them further. */ + break; + } + c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c]; + } + } + } + + /* Our response will be a SYNACK. */ +#if UIP_ACTIVE_OPEN + tcp_send_synack: + BUF->flags = TCP_ACK; + + tcp_send_syn: + BUF->flags |= TCP_SYN; +#else /* UIP_ACTIVE_OPEN */ + tcp_send_synack: + BUF->flags = TCP_SYN | TCP_ACK; +#endif /* UIP_ACTIVE_OPEN */ + + /* We send out the TCP Maximum Segment Size option with our + SYNACK. */ + BUF->optdata[0] = TCP_OPT_MSS; + BUF->optdata[1] = TCP_OPT_MSS_LEN; + BUF->optdata[2] = (UIP_TCP_MSS) / 256; + BUF->optdata[3] = (UIP_TCP_MSS) & 255; + uip_len = UIP_IPTCPH_LEN + TCP_OPT_MSS_LEN; + BUF->tcpoffset = ((UIP_TCPH_LEN + TCP_OPT_MSS_LEN) / 4) << 4; + goto tcp_send; + + /* This label will be jumped to if we found an active connection. */ + found: + uip_conn = uip_connr; + uip_flags = 0; + /* We do a very naive form of TCP reset processing; we just accept + any RST and kill our connection. We should in fact check if the + sequence number of this reset is wihtin our advertised window + before we accept the reset. */ + if(BUF->flags & TCP_RST) { + uip_connr->tcpstateflags = UIP_CLOSED; + UIP_LOG("tcp: got reset, aborting connection."); + uip_flags = UIP_ABORT; + UIP_APPCALL(); + goto drop; + } + /* Calculated the length of the data, if the application has sent + any data to us. */ + c = (BUF->tcpoffset >> 4) << 2; + /* uip_len will contain the length of the actual TCP data. This is + calculated by subtracing the length of the TCP header (in + c) and the length of the IP header (20 bytes). */ + uip_len = uip_len - c - UIP_IPH_LEN; + + /* First, check if the sequence number of the incoming packet is + what we're expecting next. If not, we send out an ACK with the + correct numbers in. */ + if(!(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) && + ((BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)))) { + if((uip_len > 0 || ((BUF->flags & (TCP_SYN | TCP_FIN)) != 0)) && + (BUF->seqno[0] != uip_connr->rcv_nxt[0] || + BUF->seqno[1] != uip_connr->rcv_nxt[1] || + BUF->seqno[2] != uip_connr->rcv_nxt[2] || + BUF->seqno[3] != uip_connr->rcv_nxt[3])) { + goto tcp_send_ack; + } + } + + /* Next, check if the incoming segment acknowledges any outstanding + data. If so, we update the sequence number, reset the length of + the outstanding data, calculate RTT estimations, and reset the + retransmission timer. */ + if((BUF->flags & TCP_ACK) && uip_outstanding(uip_connr)) { + uip_add32(uip_connr->snd_nxt, uip_connr->len); + + if(BUF->ackno[0] == uip_acc32[0] && + BUF->ackno[1] == uip_acc32[1] && + BUF->ackno[2] == uip_acc32[2] && + BUF->ackno[3] == uip_acc32[3]) { + /* Update sequence number. */ + uip_connr->snd_nxt[0] = uip_acc32[0]; + uip_connr->snd_nxt[1] = uip_acc32[1]; + uip_connr->snd_nxt[2] = uip_acc32[2]; + uip_connr->snd_nxt[3] = uip_acc32[3]; + + + /* Do RTT estimation, unless we have done retransmissions. */ + if(uip_connr->nrtx == 0) { + signed char m; + m = uip_connr->rto - uip_connr->timer; + /* This is taken directly from VJs original code in his paper */ + m = m - (uip_connr->sa >> 3); + uip_connr->sa += m; + if(m < 0) { + m = -m; + } + m = m - (uip_connr->sv >> 2); + uip_connr->sv += m; + uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv; + + } + /* Set the acknowledged flag. */ + uip_flags = UIP_ACKDATA; + /* Reset the retransmission timer. */ + uip_connr->timer = uip_connr->rto; + + /* Reset length of outstanding data. */ + uip_connr->len = 0; + } + + } + + /* Do different things depending on in what state the connection is. */ + switch(uip_connr->tcpstateflags & UIP_TS_MASK) { + /* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not + implemented, since we force the application to close when the + peer sends a FIN (hence the application goes directly from + ESTABLISHED to LAST_ACK). */ + case UIP_SYN_RCVD: + /* In SYN_RCVD we have sent out a SYNACK in response to a SYN, and + we are waiting for an ACK that acknowledges the data we sent + out the last time. Therefore, we want to have the UIP_ACKDATA + flag set. If so, we enter the ESTABLISHED state. */ + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_ESTABLISHED; + uip_flags = UIP_CONNECTED; + uip_connr->len = 0; + if(uip_len > 0) { + uip_flags |= UIP_NEWDATA; + uip_add_rcv_nxt(uip_len); + } + uip_slen = 0; + UIP_APPCALL(); + goto appsend; + } + goto drop; +#if UIP_ACTIVE_OPEN + case UIP_SYN_SENT: + /* In SYN_SENT, we wait for a SYNACK that is sent in response to + our SYN. The rcv_nxt is set to sequence number in the SYNACK + plus one, and we send an ACK. We move into the ESTABLISHED + state. */ + if((uip_flags & UIP_ACKDATA) && + (BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)) { + + /* Parse the TCP MSS option, if present. */ + if((BUF->tcpoffset & 0xf0) > 0x50) { + for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) { + opt = uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + c]; + if(opt == TCP_OPT_END) { + /* End of options. */ + break; + } else if(opt == TCP_OPT_NOOP) { + ++c; + /* NOP option. */ + } else if(opt == TCP_OPT_MSS && + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) { + /* An MSS option with the right option length. */ + tmp16 = (uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) | + uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 3 + c]; + uip_connr->initialmss = + uip_connr->mss = tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16; + + /* And we are done processing options. */ + break; + } else { + /* All other options have a length field, so that we easily + can skip past them. */ + if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) { + /* If the length field is zero, the options are malformed + and we don't process them further. */ + break; + } + c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c]; + } + } + } + uip_connr->tcpstateflags = UIP_ESTABLISHED; + uip_connr->rcv_nxt[0] = BUF->seqno[0]; + uip_connr->rcv_nxt[1] = BUF->seqno[1]; + uip_connr->rcv_nxt[2] = BUF->seqno[2]; + uip_connr->rcv_nxt[3] = BUF->seqno[3]; + uip_add_rcv_nxt(1); + uip_flags = UIP_CONNECTED | UIP_NEWDATA; + uip_connr->len = 0; + uip_len = 0; + uip_slen = 0; + UIP_APPCALL(); + goto appsend; + } + /* Inform the application that the connection failed */ + uip_flags = UIP_ABORT; + UIP_APPCALL(); + /* The connection is closed after we send the RST */ + uip_conn->tcpstateflags = UIP_CLOSED; + goto reset; +#endif /* UIP_ACTIVE_OPEN */ + + case UIP_ESTABLISHED: + /* In the ESTABLISHED state, we call upon the application to feed + data into the uip_buf. If the UIP_ACKDATA flag is set, the + application should put new data into the buffer, otherwise we are + retransmitting an old segment, and the application should put that + data into the buffer. + + If the incoming packet is a FIN, we should close the connection on + this side as well, and we send out a FIN and enter the LAST_ACK + state. We require that there is no outstanding data; otherwise the + sequence numbers will be screwed up. */ + + if(BUF->flags & TCP_FIN && !(uip_connr->tcpstateflags & UIP_STOPPED)) { + if(uip_outstanding(uip_connr)) { + goto drop; + } + uip_add_rcv_nxt(1 + uip_len); + uip_flags |= UIP_CLOSE; + if(uip_len > 0) { + uip_flags |= UIP_NEWDATA; + } + UIP_APPCALL(); + uip_connr->len = 1; + uip_connr->tcpstateflags = UIP_LAST_ACK; + uip_connr->nrtx = 0; + tcp_send_finack: + BUF->flags = TCP_FIN | TCP_ACK; + goto tcp_send_nodata; + } + + /* Check the URG flag. If this is set, the segment carries urgent + data that we must pass to the application. */ + if((BUF->flags & TCP_URG) != 0) { +#if UIP_URGDATA > 0 + uip_urglen = (BUF->urgp[0] << 8) | BUF->urgp[1]; + if(uip_urglen > uip_len) { + /* There is more urgent data in the next segment to come. */ + uip_urglen = uip_len; + } + uip_add_rcv_nxt(uip_urglen); + uip_len -= uip_urglen; + uip_urgdata = uip_appdata; + uip_appdata += uip_urglen; + } else { + uip_urglen = 0; +#else /* UIP_URGDATA > 0 */ + uip_appdata = ((char *)uip_appdata) + ((BUF->urgp[0] << 8) | BUF->urgp[1]); + uip_len -= (BUF->urgp[0] << 8) | BUF->urgp[1]; +#endif /* UIP_URGDATA > 0 */ + } + + /* If uip_len > 0 we have TCP data in the packet, and we flag this + by setting the UIP_NEWDATA flag and update the sequence number + we acknowledge. If the application has stopped the dataflow + using uip_stop(), we must not accept any data packets from the + remote host. */ + if(uip_len > 0 && !(uip_connr->tcpstateflags & UIP_STOPPED)) { + uip_flags |= UIP_NEWDATA; + uip_add_rcv_nxt(uip_len); + } + + /* Check if the available buffer space advertised by the other end + is smaller than the initial MSS for this connection. If so, we + set the current MSS to the window size to ensure that the + application does not send more data than the other end can + handle. + + If the remote host advertises a zero window, we set the MSS to + the initial MSS so that the application will send an entire MSS + of data. This data will not be acknowledged by the receiver, + and the application will retransmit it. This is called the + "persistent timer" and uses the retransmission mechanim. + */ + tmp16 = ((u16_t)BUF->wnd[0] << 8) + (u16_t)BUF->wnd[1]; + if(tmp16 > uip_connr->initialmss || + tmp16 == 0) { + tmp16 = uip_connr->initialmss; + } + uip_connr->mss = tmp16; + + /* If this packet constitutes an ACK for outstanding data (flagged + by the UIP_ACKDATA flag, we should call the application since it + might want to send more data. If the incoming packet had data + from the peer (as flagged by the UIP_NEWDATA flag), the + application must also be notified. + + When the application is called, the global variable uip_len + contains the length of the incoming data. The application can + access the incoming data through the global pointer + uip_appdata, which usually points UIP_IPTCPH_LEN + UIP_LLH_LEN + bytes into the uip_buf array. + + If the application wishes to send any data, this data should be + put into the uip_appdata and the length of the data should be + put into uip_len. If the application don't have any data to + send, uip_len must be set to 0. */ + if(uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) { + uip_slen = 0; + UIP_APPCALL(); + + appsend: + + if(uip_flags & UIP_ABORT) { + uip_slen = 0; + uip_connr->tcpstateflags = UIP_CLOSED; + BUF->flags = TCP_RST | TCP_ACK; + goto tcp_send_nodata; + } + + if(uip_flags & UIP_CLOSE) { + uip_slen = 0; + uip_connr->len = 1; + uip_connr->tcpstateflags = UIP_FIN_WAIT_1; + uip_connr->nrtx = 0; + BUF->flags = TCP_FIN | TCP_ACK; + goto tcp_send_nodata; + } + + /* If uip_slen > 0, the application has data to be sent. */ + if(uip_slen > 0) { + + /* If the connection has acknowledged data, the contents of + the ->len variable should be discarded. */ + if((uip_flags & UIP_ACKDATA) != 0) { + uip_connr->len = 0; + } + + /* If the ->len variable is non-zero the connection has + already data in transit and cannot send anymore right + now. */ + if(uip_connr->len == 0) { + + /* The application cannot send more than what is allowed by + the mss (the minumum of the MSS and the available + window). */ + if(uip_slen > uip_connr->mss) { + uip_slen = uip_connr->mss; + } + + /* Remember how much data we send out now so that we know + when everything has been acknowledged. */ + uip_connr->len = uip_slen; + } else { + + /* If the application already had unacknowledged data, we + make sure that the application does not send (i.e., + retransmit) out more than it previously sent out. */ + uip_slen = uip_connr->len; + } + } + uip_connr->nrtx = 0; + apprexmit: + uip_appdata = uip_sappdata; + + /* If the application has data to be sent, or if the incoming + packet had new data in it, we must send out a packet. */ + if(uip_slen > 0 && uip_connr->len > 0) { + /* Add the length of the IP and TCP headers. */ + uip_len = uip_connr->len + UIP_TCPIP_HLEN; + /* We always set the ACK flag in response packets. */ + BUF->flags = TCP_ACK | TCP_PSH; + /* Send the packet. */ + goto tcp_send_noopts; + } + /* If there is no data to send, just send out a pure ACK if + there is newdata. */ + if(uip_flags & UIP_NEWDATA) { + uip_len = UIP_TCPIP_HLEN; + BUF->flags = TCP_ACK; + goto tcp_send_noopts; + } + } + goto drop; + case UIP_LAST_ACK: + /* We can close this connection if the peer has acknowledged our + FIN. This is indicated by the UIP_ACKDATA flag. */ + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_CLOSED; + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + } + break; + + case UIP_FIN_WAIT_1: + /* The application has closed the connection, but the remote host + hasn't closed its end yet. Thus we do nothing but wait for a + FIN from the other side. */ + if(uip_len > 0) { + uip_add_rcv_nxt(uip_len); + } + if(BUF->flags & TCP_FIN) { + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + uip_connr->len = 0; + } else { + uip_connr->tcpstateflags = UIP_CLOSING; + } + uip_add_rcv_nxt(1); + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + goto tcp_send_ack; + } else if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_FIN_WAIT_2; + uip_connr->len = 0; + goto drop; + } + if(uip_len > 0) { + goto tcp_send_ack; + } + goto drop; + + case UIP_FIN_WAIT_2: + if(uip_len > 0) { + uip_add_rcv_nxt(uip_len); + } + if(BUF->flags & TCP_FIN) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + uip_add_rcv_nxt(1); + uip_flags = UIP_CLOSE; + UIP_APPCALL(); + goto tcp_send_ack; + } + if(uip_len > 0) { + goto tcp_send_ack; + } + goto drop; + + case UIP_TIME_WAIT: + goto tcp_send_ack; + + case UIP_CLOSING: + if(uip_flags & UIP_ACKDATA) { + uip_connr->tcpstateflags = UIP_TIME_WAIT; + uip_connr->timer = 0; + } + } + goto drop; + + + /* We jump here when we are ready to send the packet, and just want + to set the appropriate TCP sequence numbers in the TCP header. */ + tcp_send_ack: + BUF->flags = TCP_ACK; + tcp_send_nodata: + uip_len = UIP_IPTCPH_LEN; + tcp_send_noopts: + BUF->tcpoffset = (UIP_TCPH_LEN / 4) << 4; + tcp_send: + /* We're done with the input processing. We are now ready to send a + reply. Our job is to fill in all the fields of the TCP and IP + headers before calculating the checksum and finally send the + packet. */ + BUF->ackno[0] = uip_connr->rcv_nxt[0]; + BUF->ackno[1] = uip_connr->rcv_nxt[1]; + BUF->ackno[2] = uip_connr->rcv_nxt[2]; + BUF->ackno[3] = uip_connr->rcv_nxt[3]; + + BUF->seqno[0] = uip_connr->snd_nxt[0]; + BUF->seqno[1] = uip_connr->snd_nxt[1]; + BUF->seqno[2] = uip_connr->snd_nxt[2]; + BUF->seqno[3] = uip_connr->snd_nxt[3]; + + BUF->proto = UIP_PROTO_TCP; + + BUF->srcport = uip_connr->lport; + BUF->destport = uip_connr->rport; + + uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); + uip_ipaddr_copy(BUF->destipaddr, uip_connr->ripaddr); + + if(uip_connr->tcpstateflags & UIP_STOPPED) { + /* If the connection has issued uip_stop(), we advertise a zero + window so that the remote host will stop sending data. */ + BUF->wnd[0] = BUF->wnd[1] = 0; + } else { + BUF->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8); + BUF->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff); + } + + tcp_send_noconn: + BUF->ttl = UIP_TTL; +#if UIP_CONF_IPV6 + /* For IPv6, the IP length field does not include the IPv6 IP header + length. */ + BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); + BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); +#else /* UIP_CONF_IPV6 */ + BUF->len[0] = (uip_len >> 8); + BUF->len[1] = (uip_len & 0xff); +#endif /* UIP_CONF_IPV6 */ + + BUF->urgp[0] = BUF->urgp[1] = 0; + + /* Calculate TCP checksum. */ + BUF->tcpchksum = 0; + BUF->tcpchksum = ~(uip_tcpchksum()); + + ip_send_nolen: + +#if UIP_CONF_IPV6 + BUF->vtc = 0x60; + BUF->tcflow = 0x00; + BUF->flow = 0x00; +#else /* UIP_CONF_IPV6 */ + BUF->vhl = 0x45; + BUF->tos = 0; + BUF->ipoffset[0] = BUF->ipoffset[1] = 0; + ++ipid; + BUF->ipid[0] = ipid >> 8; + BUF->ipid[1] = ipid & 0xff; + /* Calculate IP checksum. */ + BUF->ipchksum = 0; + BUF->ipchksum = ~(uip_ipchksum()); + DEBUG_PRINTF("uip ip_send_nolen: chkecum 0x%04x\n", uip_ipchksum()); +#endif /* UIP_CONF_IPV6 */ + + UIP_STAT(++uip_stat.tcp.sent); + send: + DEBUG_PRINTF("Sending packet with length %d (%d)\n", uip_len, + (BUF->len[0] << 8) | BUF->len[1]); + + UIP_STAT(++uip_stat.ip.sent); + /* Return and let the caller do the actual transmission. */ + uip_flags = 0; + return; + drop: + uip_len = 0; + uip_flags = 0; + return; +} +/*---------------------------------------------------------------------------*/ +u16_t +htons(u16_t val) +{ + return HTONS(val); +} +/*---------------------------------------------------------------------------*/ +void +uip_send(const void *data, int len) +{ + uip_slen = len; + if(len > 0) { + if(data != uip_sappdata) { + memcpy(uip_sappdata, (data), uip_slen); + } + } +} +/** @} */ diff --git a/STM32F4/libraries/arduino_uip/utility/uip.h b/STM32F4/libraries/arduino_uip/utility/uip.h new file mode 100644 index 0000000..4fc0452 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip.h @@ -0,0 +1,1601 @@ + +/** + * \addtogroup uip + * @{ + */ + +/** + * \file + * Header file for the uIP TCP/IP stack. + * \author Adam Dunkels + * + * The uIP TCP/IP stack header file contains definitions for a number + * of C macros that are used by uIP programs as well as internal uIP + * structures, TCP/IP header structures and function declarations. + * + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip.h,v 1.40 2006/06/08 07:12:07 adam Exp $ + * + */ + +#ifndef __UIP_H__ +#define __UIP_H__ + +#include "uipopt.h" + +/** + * Repressentation of an IP address. + * + */ +typedef u16_t uip_ip4addr_t[2]; +typedef u16_t uip_ip6addr_t[8]; +#if UIP_CONF_IPV6 +typedef uip_ip6addr_t uip_ipaddr_t; +#else /* UIP_CONF_IPV6 */ +typedef uip_ip4addr_t uip_ipaddr_t; +#endif /* UIP_CONF_IPV6 */ + +/*---------------------------------------------------------------------------*/ +/* First, the functions that should be called from the + * system. Initialization, the periodic timer and incoming packets are + * handled by the following three functions. + */ + +/** + * \defgroup uipconffunc uIP configuration functions + * @{ + * + * The uIP configuration functions are used for setting run-time + * parameters in uIP such as IP addresses. + */ + +/** + * Set the IP address of this host. + * + * The IP address is represented as a 4-byte array where the first + * octet of the IP address is put in the first member of the 4-byte + * array. + * + * Example: + \code + + uip_ipaddr_t addr; + + uip_ipaddr(&addr, 192,168,1,2); + uip_sethostaddr(&addr); + + \endcode + * \param addr A pointer to an IP address of type uip_ipaddr_t; + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_sethostaddr(addr) uip_ipaddr_copy(uip_hostaddr, (addr)) + +/** + * Get the IP address of this host. + * + * The IP address is represented as a 4-byte array where the first + * octet of the IP address is put in the first member of the 4-byte + * array. + * + * Example: + \code + uip_ipaddr_t hostaddr; + + uip_gethostaddr(&hostaddr); + \endcode + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the currently configured IP address. + * + * \hideinitializer + */ +#define uip_gethostaddr(addr) uip_ipaddr_copy((addr), uip_hostaddr) + +/** + * Set the default router's IP address. + * + * \param addr A pointer to a uip_ipaddr_t variable containing the IP + * address of the default router. + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_setdraddr(addr) uip_ipaddr_copy(uip_draddr, (addr)) + +/** + * Set the netmask. + * + * \param addr A pointer to a uip_ipaddr_t variable containing the IP + * address of the netmask. + * + * \sa uip_ipaddr() + * + * \hideinitializer + */ +#define uip_setnetmask(addr) uip_ipaddr_copy(uip_netmask, (addr)) + + +/** + * Get the default router's IP address. + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the IP address of the default router. + * + * \hideinitializer + */ +#define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr) + +/** + * Get the netmask. + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the value of the netmask. + * + * \hideinitializer + */ +#define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask) + +/** @} */ + +/** + * \defgroup uipinit uIP initialization functions + * @{ + * + * The uIP initialization functions are used for booting uIP. + */ + +/** + * uIP initialization function. + * + * This function should be called at boot up to initilize the uIP + * TCP/IP stack. + */ +void uip_init(void); + +/** + * uIP initialization function. + * + * This function may be used at boot time to set the initial ip_id. + */ +void uip_setipid(u16_t id); + +/** @} */ + +/** + * \defgroup uipdevfunc uIP device driver functions + * @{ + * + * These functions are used by a network device driver for interacting + * with uIP. + */ + +/** + * Process an incoming packet. + * + * This function should be called when the device driver has received + * a packet from the network. The packet from the device driver must + * be present in the uip_buf buffer, and the length of the packet + * should be placed in the uip_len variable. + * + * When the function returns, there may be an outbound packet placed + * in the uip_buf packet buffer. If so, the uip_len variable is set to + * the length of the packet. If no packet is to be sent out, the + * uip_len variable is set to 0. + * + * The usual way of calling the function is presented by the source + * code below. + \code + uip_len = devicedriver_poll(); + if(uip_len > 0) { + uip_input(); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note If you are writing a uIP device driver that needs ARP + * (Address Resolution Protocol), e.g., when running uIP over + * Ethernet, you will need to call the uIP ARP code before calling + * this function: + \code + #define BUF ((struct uip_eth_hdr *)&uip_buf[0]) + uip_len = ethernet_devicedrver_poll(); + if(uip_len > 0) { + if(BUF->type == HTONS(UIP_ETHTYPE_IP)) { + uip_arp_ipin(); + uip_input(); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) { + uip_arp_arpin(); + if(uip_len > 0) { + ethernet_devicedriver_send(); + } + } + \endcode + * + * \hideinitializer + */ +#define uip_input() uip_process(UIP_DATA) + +/** + * Periodic processing for a connection identified by its number. + * + * This function does the necessary periodic processing (timers, + * polling) for a uIP TCP conneciton, and should be called when the + * periodic uIP timer goes off. It should be called for every + * connection, regardless of whether they are open of closed. + * + * When the function returns, it may have an outbound packet waiting + * for service in the uIP packet buffer, and if so the uip_len + * variable is set to a value larger than zero. The device driver + * should be called to send out the packet. + * + * The ususal way of calling the function is through a for() loop like + * this: + \code + for(i = 0; i < UIP_CONNS; ++i) { + uip_periodic(i); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note If you are writing a uIP device driver that needs ARP + * (Address Resolution Protocol), e.g., when running uIP over + * Ethernet, you will need to call the uip_arp_out() function before + * calling the device driver: + \code + for(i = 0; i < UIP_CONNS; ++i) { + uip_periodic(i); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } + \endcode + * + * \param conn The number of the connection which is to be periodically polled. + * + * \hideinitializer + */ +#define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \ + uip_process(UIP_TIMER); } while (0) + +/** + * + * + */ +#define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED) + +/** + * Perform periodic processing for a connection identified by a pointer + * to its structure. + * + * Same as uip_periodic() but takes a pointer to the actual uip_conn + * struct instead of an integer as its argument. This function can be + * used to force periodic processing of a specific connection. + * + * \param conn A pointer to the uip_conn struct for the connection to + * be processed. + * + * \hideinitializer + */ +#define uip_periodic_conn(conn) do { uip_conn = conn; \ + uip_process(UIP_TIMER); } while (0) + +/** + * Reuqest that a particular connection should be polled. + * + * Similar to uip_periodic_conn() but does not perform any timer + * processing. The application is polled for new data. + * + * \param conn A pointer to the uip_conn struct for the connection to + * be processed. + * + * \hideinitializer + */ +#define uip_poll_conn(conn) do { uip_conn = conn; \ + uip_process(UIP_POLL_REQUEST); } while (0) + + +#if UIP_UDP +/** + * Periodic processing for a UDP connection identified by its number. + * + * This function is essentially the same as uip_periodic(), but for + * UDP connections. It is called in a similar fashion as the + * uip_periodic() function: + \code + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + if(uip_len > 0) { + devicedriver_send(); + } + } + \endcode + * + * \note As for the uip_periodic() function, special care has to be + * taken when using uIP together with ARP and Ethernet: + \code + for(i = 0; i < UIP_UDP_CONNS; i++) { + uip_udp_periodic(i); + if(uip_len > 0) { + uip_arp_out(); + ethernet_devicedriver_send(); + } + } + \endcode + * + * \param conn The number of the UDP connection to be processed. + * + * \hideinitializer + */ +#define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \ + uip_process(UIP_UDP_TIMER); } while (0) + +/** + * Periodic processing for a UDP connection identified by a pointer to + * its structure. + * + * Same as uip_udp_periodic() but takes a pointer to the actual + * uip_conn struct instead of an integer as its argument. This + * function can be used to force periodic processing of a specific + * connection. + * + * \param conn A pointer to the uip_udp_conn struct for the connection + * to be processed. + * + * \hideinitializer + */ +#define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \ + uip_process(UIP_UDP_TIMER); } while (0) + + +#endif /* UIP_UDP */ + +/** + * The uIP packet buffer. + * + * The uip_buf array is used to hold incoming and outgoing + * packets. The device driver should place incoming data into this + * buffer. When sending data, the device driver should read the link + * level headers and the TCP/IP headers from this buffer. The size of + * the link level headers is configured by the UIP_LLH_LEN define. + * + * \note The application data need not be placed in this buffer, so + * the device driver must read it from the place pointed to by the + * uip_appdata pointer as illustrated by the following example: + \code + void + devicedriver_send(void) + { + hwsend(&uip_buf[0], UIP_LLH_LEN); + if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) { + hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN); + } else { + hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN); + hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN); + } + } + \endcode + */ +extern u8_t uip_buf[UIP_BUFSIZE+2]; + +/** @} */ + +/*---------------------------------------------------------------------------*/ +/* Functions that are used by the uIP application program. Opening and + * closing connections, sending and receiving data, etc. is all + * handled by the functions below. +*/ +/** + * \defgroup uipappfunc uIP application functions + * @{ + * + * Functions used by an application running of top of uIP. + */ + +/** + * Start listening to the specified port. + * + * \note Since this function expects the port number in network byte + * order, a conversion using HTONS() or htons() is necessary. + * + \code + uip_listen(HTONS(80)); + \endcode + * + * \param port A 16-bit port number in network byte order. + */ +void uip_listen(u16_t port); + +/** + * Stop listening to the specified port. + * + * \note Since this function expects the port number in network byte + * order, a conversion using HTONS() or htons() is necessary. + * + \code + uip_unlisten(HTONS(80)); + \endcode + * + * \param port A 16-bit port number in network byte order. + */ +void uip_unlisten(u16_t port); + +/** + * Connect to a remote host using TCP. + * + * This function is used to start a new connection to the specified + * port on the specied host. It allocates a new connection identifier, + * sets the connection to the SYN_SENT state and sets the + * retransmission timer to 0. This will cause a TCP SYN segment to be + * sent out the next time this connection is periodically processed, + * which usually is done within 0.5 seconds after the call to + * uip_connect(). + * + * \note This function is avaliable only if support for active open + * has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h. + * + * \note Since this function requires the port number to be in network + * byte order, a conversion using HTONS() or htons() is necessary. + * + \code + uip_ipaddr_t ipaddr; + + uip_ipaddr(&ipaddr, 192,168,1,2); + uip_connect(&ipaddr, HTONS(80)); + \endcode + * + * \param ripaddr The IP address of the remote hot. + * + * \param port A 16-bit port number in network byte order. + * + * \return A pointer to the uIP connection identifier for the new connection, + * or NULL if no connection could be allocated. + * + */ +struct uip_conn *uip_connect(uip_ipaddr_t *ripaddr, u16_t port); + + + +/** + * \internal + * + * Check if a connection has outstanding (i.e., unacknowledged) data. + * + * \param conn A pointer to the uip_conn structure for the connection. + * + * \hideinitializer + */ +#define uip_outstanding(conn) ((conn)->len) + +/** + * Send data on the current connection. + * + * This function is used to send out a single segment of TCP + * data. Only applications that have been invoked by uIP for event + * processing can send data. + * + * The amount of data that actually is sent out after a call to this + * funcion is determined by the maximum amount of data TCP allows. uIP + * will automatically crop the data so that only the appropriate + * amount of data is sent. The function uip_mss() can be used to query + * uIP for the amount of data that actually will be sent. + * + * \note This function does not guarantee that the sent data will + * arrive at the destination. If the data is lost in the network, the + * application will be invoked with the uip_rexmit() event being + * set. The application will then have to resend the data using this + * function. + * + * \param data A pointer to the data which is to be sent. + * + * \param len The maximum amount of data bytes to be sent. + * + * \hideinitializer + */ +void uip_send(const void *data, int len); + +/** + * The length of any incoming data that is currently avaliable (if avaliable) + * in the uip_appdata buffer. + * + * The test function uip_data() must first be used to check if there + * is any data available at all. + * + * \hideinitializer + */ +/*void uip_datalen(void);*/ +#define uip_datalen() uip_len + +/** + * The length of any out-of-band data (urgent data) that has arrived + * on the connection. + * + * \note The configuration parameter UIP_URGDATA must be set for this + * function to be enabled. + * + * \hideinitializer + */ +#define uip_urgdatalen() uip_urglen + +/** + * Close the current connection. + * + * This function will close the current connection in a nice way. + * + * \hideinitializer + */ +#define uip_close() (uip_flags = UIP_CLOSE) + +/** + * Abort the current connection. + * + * This function will abort (reset) the current connection, and is + * usually used when an error has occured that prevents using the + * uip_close() function. + * + * \hideinitializer + */ +#define uip_abort() (uip_flags = UIP_ABORT) + +/** + * Tell the sending host to stop sending data. + * + * This function will close our receiver's window so that we stop + * receiving data for the current connection. + * + * \hideinitializer + */ +#define uip_stop() (uip_conn->tcpstateflags |= UIP_STOPPED) + +/** + * Find out if the current connection has been previously stopped with + * uip_stop(). + * + * \hideinitializer + */ +#define uip_stopped(conn) ((conn)->tcpstateflags & UIP_STOPPED) + +/** + * Restart the current connection, if is has previously been stopped + * with uip_stop(). + * + * This function will open the receiver's window again so that we + * start receiving data for the current connection. + * + * \hideinitializer + */ +#define uip_restart() do { uip_flags |= UIP_NEWDATA; \ + uip_conn->tcpstateflags &= ~UIP_STOPPED; \ + } while(0) + + +/* uIP tests that can be made to determine in what state the current + connection is, and what the application function should do. */ + +/** + * Is the current connection a UDP connection? + * + * This function checks whether the current connection is a UDP connection. + * + * \hideinitializer + * + */ +#define uip_udpconnection() (uip_conn == NULL) + +/** + * Is new incoming data available? + * + * Will reduce to non-zero if there is new data for the application + * present at the uip_appdata pointer. The size of the data is + * avaliable through the uip_len variable. + * + * \hideinitializer + */ +#define uip_newdata() (uip_flags & UIP_NEWDATA) + +/** + * Has previously sent data been acknowledged? + * + * Will reduce to non-zero if the previously sent data has been + * acknowledged by the remote host. This means that the application + * can send new data. + * + * \hideinitializer + */ +#define uip_acked() (uip_flags & UIP_ACKDATA) + +/** + * Has the connection just been connected? + * + * Reduces to non-zero if the current connection has been connected to + * a remote host. This will happen both if the connection has been + * actively opened (with uip_connect()) or passively opened (with + * uip_listen()). + * + * \hideinitializer + */ +#define uip_connected() (uip_flags & UIP_CONNECTED) + +/** + * Has the connection been closed by the other end? + * + * Is non-zero if the connection has been closed by the remote + * host. The application may then do the necessary clean-ups. + * + * \hideinitializer + */ +#define uip_closed() (uip_flags & UIP_CLOSE) + +/** + * Has the connection been aborted by the other end? + * + * Non-zero if the current connection has been aborted (reset) by the + * remote host. + * + * \hideinitializer + */ +#define uip_aborted() (uip_flags & UIP_ABORT) + +/** + * Has the connection timed out? + * + * Non-zero if the current connection has been aborted due to too many + * retransmissions. + * + * \hideinitializer + */ +#define uip_timedout() (uip_flags & UIP_TIMEDOUT) + +/** + * Do we need to retransmit previously data? + * + * Reduces to non-zero if the previously sent data has been lost in + * the network, and the application should retransmit it. The + * application should send the exact same data as it did the last + * time, using the uip_send() function. + * + * \hideinitializer + */ +#define uip_rexmit() (uip_flags & UIP_REXMIT) + +/** + * Is the connection being polled by uIP? + * + * Is non-zero if the reason the application is invoked is that the + * current connection has been idle for a while and should be + * polled. + * + * The polling event can be used for sending data without having to + * wait for the remote host to send data. + * + * \hideinitializer + */ +#define uip_poll() (uip_flags & UIP_POLL) + +/** + * Get the initial maxium segment size (MSS) of the current + * connection. + * + * \hideinitializer + */ +#define uip_initialmss() (uip_conn->initialmss) + +/** + * Get the current maxium segment size that can be sent on the current + * connection. + * + * The current maxiumum segment size that can be sent on the + * connection is computed from the receiver's window and the MSS of + * the connection (which also is available by calling + * uip_initialmss()). + * + * \hideinitializer + */ +#define uip_mss() (uip_conn->mss) + +/** + * Set up a new UDP connection. + * + * This function sets up a new UDP connection. The function will + * automatically allocate an unused local port for the new + * connection. However, another port can be chosen by using the + * uip_udp_bind() call, after the uip_udp_new() function has been + * called. + * + * Example: + \code + uip_ipaddr_t addr; + struct uip_udp_conn *c; + + uip_ipaddr(&addr, 192,168,2,1); + c = uip_udp_new(&addr, HTONS(12345)); + if(c != NULL) { + uip_udp_bind(c, HTONS(12344)); + } + \endcode + * \param ripaddr The IP address of the remote host. + * + * \param rport The remote port number in network byte order. + * + * \return The uip_udp_conn structure for the new connection or NULL + * if no connection could be allocated. + */ +struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport); + +/** + * Removed a UDP connection. + * + * \param conn A pointer to the uip_udp_conn structure for the connection. + * + * \hideinitializer + */ +#define uip_udp_remove(conn) (conn)->lport = 0 + +/** + * Bind a UDP connection to a local port. + * + * \param conn A pointer to the uip_udp_conn structure for the + * connection. + * + * \param port The local port number, in network byte order. + * + * \hideinitializer + */ +#define uip_udp_bind(conn, port) (conn)->lport = port + +/** + * Send a UDP datagram of length len on the current connection. + * + * This function can only be called in response to a UDP event (poll + * or newdata). The data must be present in the uip_buf buffer, at the + * place pointed to by the uip_appdata pointer. + * + * \param len The length of the data in the uip_buf buffer. + * + * \hideinitializer + */ +#define uip_udp_send(len) uip_send((char *)uip_appdata, len) + +/** @} */ + +/* uIP convenience and converting functions. */ + +/** + * \defgroup uipconvfunc uIP conversion functions + * @{ + * + * These functions can be used for converting between different data + * formats used by uIP. + */ + +/** + * Construct an IP address from four bytes. + * + * This function constructs an IP address of the type that uIP handles + * internally from four bytes. The function is handy for specifying IP + * addresses to use with e.g. the uip_connect() function. + * + * Example: + \code + uip_ipaddr_t ipaddr; + struct uip_conn *c; + + uip_ipaddr(&ipaddr, 192,168,1,2); + c = uip_connect(&ipaddr, HTONS(80)); + \endcode + * + * \param addr A pointer to a uip_ipaddr_t variable that will be + * filled in with the IP address. + * + * \param addr0 The first octet of the IP address. + * \param addr1 The second octet of the IP address. + * \param addr2 The third octet of the IP address. + * \param addr3 The forth octet of the IP address. + * + * \hideinitializer + */ +#define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \ + ((u16_t *)(addr))[0] = HTONS(((addr0) << 8) | (addr1)); \ + ((u16_t *)(addr))[1] = HTONS(((addr2) << 8) | (addr3)); \ + } while(0) + +/** + * Construct an IPv6 address from eight 16-bit words. + * + * This function constructs an IPv6 address. + * + * \hideinitializer + */ +#define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do { \ + ((u16_t *)(addr))[0] = HTONS((addr0)); \ + ((u16_t *)(addr))[1] = HTONS((addr1)); \ + ((u16_t *)(addr))[2] = HTONS((addr2)); \ + ((u16_t *)(addr))[3] = HTONS((addr3)); \ + ((u16_t *)(addr))[4] = HTONS((addr4)); \ + ((u16_t *)(addr))[5] = HTONS((addr5)); \ + ((u16_t *)(addr))[6] = HTONS((addr6)); \ + ((u16_t *)(addr))[7] = HTONS((addr7)); \ + } while(0) + +/** + * Copy an IP address to another IP address. + * + * Copies an IP address from one place to another. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr_copy(&ipaddr2, &ipaddr1); + \endcode + * + * \param dest The destination for the copy. + * \param src The source from where to copy. + * + * \hideinitializer + */ +#if !UIP_CONF_IPV6 +#define uip_ipaddr_copy(dest, src) do { \ + ((u16_t *)dest)[0] = ((u16_t *)src)[0]; \ + ((u16_t *)dest)[1] = ((u16_t *)src)[1]; \ + } while(0) +#else /* !UIP_CONF_IPV6 */ +#define uip_ipaddr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t)) +#endif /* !UIP_CONF_IPV6 */ + +/** + * Compare two IP addresses + * + * Compares two IP addresses. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) { + printf("They are the same"); + } + \endcode + * + * \param addr1 The first IP address. + * \param addr2 The second IP address. + * + * \hideinitializer + */ +#if !UIP_CONF_IPV6 +#define uip_ipaddr_cmp(addr1, addr2) (((u16_t *)addr1)[0] == ((u16_t *)addr2)[0] && \ + ((u16_t *)addr1)[1] == ((u16_t *)addr2)[1]) +#else /* !UIP_CONF_IPV6 */ +#define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0) +#endif /* !UIP_CONF_IPV6 */ + +/** + * Compare two IP addresses with netmasks + * + * Compares two IP addresses with netmasks. The masks are used to mask + * out the bits that are to be compared. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2, mask; + + uip_ipaddr(&mask, 255,255,255,0); + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr(&ipaddr2, 192,16,1,3); + if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) { + printf("They are the same"); + } + \endcode + * + * \param addr1 The first IP address. + * \param addr2 The second IP address. + * \param mask The netmask. + * + * \hideinitializer + */ +#define uip_ipaddr_maskcmp(addr1, addr2, mask) \ + (((((u16_t *)addr1)[0] & ((u16_t *)mask)[0]) == \ + (((u16_t *)addr2)[0] & ((u16_t *)mask)[0])) && \ + ((((u16_t *)addr1)[1] & ((u16_t *)mask)[1]) == \ + (((u16_t *)addr2)[1] & ((u16_t *)mask)[1]))) + + +/** + * Mask out the network part of an IP address. + * + * Masks out the network part of an IP address, given the address and + * the netmask. + * + * Example: + \code + uip_ipaddr_t ipaddr1, ipaddr2, netmask; + + uip_ipaddr(&ipaddr1, 192,16,1,2); + uip_ipaddr(&netmask, 255,255,255,0); + uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask); + \endcode + * + * In the example above, the variable "ipaddr2" will contain the IP + * address 192.168.1.0. + * + * \param dest Where the result is to be placed. + * \param src The IP address. + * \param mask The netmask. + * + * \hideinitializer + */ +#define uip_ipaddr_mask(dest, src, mask) do { \ + ((u16_t *)dest)[0] = ((u16_t *)src)[0] & ((u16_t *)mask)[0]; \ + ((u16_t *)dest)[1] = ((u16_t *)src)[1] & ((u16_t *)mask)[1]; \ + } while(0) + +/** + * Pick the first octet of an IP address. + * + * Picks out the first octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr1(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 1. + * + * \hideinitializer + */ +#define uip_ipaddr1(addr) (htons(((u16_t *)(addr))[0]) >> 8) + +/** + * Pick the second octet of an IP address. + * + * Picks out the second octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr2(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 2. + * + * \hideinitializer + */ +#define uip_ipaddr2(addr) (htons(((u16_t *)(addr))[0]) & 0xff) + +/** + * Pick the third octet of an IP address. + * + * Picks out the third octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr3(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 3. + * + * \hideinitializer + */ +#define uip_ipaddr3(addr) (htons(((u16_t *)(addr))[1]) >> 8) + +/** + * Pick the fourth octet of an IP address. + * + * Picks out the fourth octet of an IP address. + * + * Example: + \code + uip_ipaddr_t ipaddr; + u8_t octet; + + uip_ipaddr(&ipaddr, 1,2,3,4); + octet = uip_ipaddr4(&ipaddr); + \endcode + * + * In the example above, the variable "octet" will contain the value 4. + * + * \hideinitializer + */ +#define uip_ipaddr4(addr) (htons(((u16_t *)(addr))[1]) & 0xff) + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This macro is primarily used for converting constants from host + * byte order to network byte order. For converting variables to + * network byte order, use the htons() function instead. + * + * \hideinitializer + */ +#ifndef HTONS +# if UIP_BYTE_ORDER == UIP_BIG_ENDIAN +# define HTONS(n) (n) +# else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ +# define HTONS(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8)) +# endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ +#else +#error "HTONS already defined!" +#endif /* HTONS */ + +/** + * Convert 16-bit quantity from host byte order to network byte order. + * + * This function is primarily used for converting variables from host + * byte order to network byte order. For converting constants to + * network byte order, use the HTONS() macro instead. + */ +#ifndef htons +u16_t htons(u16_t val); +#endif /* htons */ +#ifndef ntohs +#define ntohs htons +#endif + +/** @} */ + +/** + * Pointer to the application data in the packet buffer. + * + * This pointer points to the application data when the application is + * called. If the application wishes to send data, the application may + * use this space to write the data into before calling uip_send(). + */ +extern void *uip_appdata; + +#if UIP_URGDATA > 0 +/* u8_t *uip_urgdata: + * + * This pointer points to any urgent data that has been received. Only + * present if compiled with support for urgent data (UIP_URGDATA). + */ +extern void *uip_urgdata; +#endif /* UIP_URGDATA > 0 */ + + +/** + * \defgroup uipdrivervars Variables used in uIP device drivers + * @{ + * + * uIP has a few global variables that are used in device drivers for + * uIP. + */ + +/** + * The length of the packet in the uip_buf buffer. + * + * The global variable uip_len holds the length of the packet in the + * uip_buf buffer. + * + * When the network device driver calls the uIP input function, + * uip_len should be set to the length of the packet in the uip_buf + * buffer. + * + * When sending packets, the device driver should use the contents of + * the uip_len variable to determine the length of the outgoing + * packet. + * + */ +extern u16_t uip_len; + +/** @} */ + +#if UIP_URGDATA > 0 +extern u16_t uip_urglen, uip_surglen; +#endif /* UIP_URGDATA > 0 */ + + +/** + * Representation of a uIP TCP connection. + * + * The uip_conn structure is used for identifying a connection. All + * but one field in the structure are to be considered read-only by an + * application. The only exception is the appstate field whos purpose + * is to let the application store application-specific state (e.g., + * file pointers) for the connection. The type of this field is + * configured in the "uipopt.h" header file. + */ +struct uip_conn { + uip_ipaddr_t ripaddr; /**< The IP address of the remote host. */ + + u16_t lport; /**< The local TCP port, in network byte order. */ + u16_t rport; /**< The local remote TCP port, in network byte + order. */ + + u8_t rcv_nxt[4]; /**< The sequence number that we expect to + receive next. */ + u8_t snd_nxt[4]; /**< The sequence number that was last sent by + us. */ + u16_t len; /**< Length of the data that was previously sent. */ + u16_t mss; /**< Current maximum segment size for the + connection. */ + u16_t initialmss; /**< Initial maximum segment size for the + connection. */ + u8_t sa; /**< Retransmission time-out calculation state + variable. */ + u8_t sv; /**< Retransmission time-out calculation state + variable. */ + u8_t rto; /**< Retransmission time-out. */ + u8_t tcpstateflags; /**< TCP state and flags. */ + u8_t timer; /**< The retransmission timer. */ + u8_t nrtx; /**< The number of retransmissions for the last + segment sent. */ + + /** The application state. */ + uip_tcp_appstate_t appstate; +}; + + +/** + * Pointer to the current TCP connection. + * + * The uip_conn pointer can be used to access the current TCP + * connection. + */ +extern struct uip_conn *uip_conn; +/* The array containing all uIP connections. */ +extern struct uip_conn uip_conns[UIP_CONNS]; +/** + * \addtogroup uiparch + * @{ + */ + +/** + * 4-byte array used for the 32-bit sequence number calculations. + */ +extern u8_t uip_acc32[4]; + +/** @} */ + + +#if UIP_UDP +/** + * Representation of a uIP UDP connection. + */ +struct uip_udp_conn { + uip_ipaddr_t ripaddr; /**< The IP address of the remote peer. */ + u16_t lport; /**< The local port number in network byte order. */ + u16_t rport; /**< The remote port number in network byte order. */ + u8_t ttl; /**< Default time-to-live. */ + + /** The application state. */ + uip_udp_appstate_t appstate; +}; + +/** + * The current UDP connection. + */ +extern struct uip_udp_conn *uip_udp_conn; +extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; +#endif /* UIP_UDP */ + +/** + * The structure holding the TCP/IP statistics that are gathered if + * UIP_STATISTICS is set to 1. + * + */ +struct uip_stats { + struct { + uip_stats_t drop; /**< Number of dropped packets at the IP + layer. */ + uip_stats_t recv; /**< Number of received packets at the IP + layer. */ + uip_stats_t sent; /**< Number of sent packets at the IP + layer. */ + uip_stats_t vhlerr; /**< Number of packets dropped due to wrong + IP version or header length. */ + uip_stats_t hblenerr; /**< Number of packets dropped due to wrong + IP length, high byte. */ + uip_stats_t lblenerr; /**< Number of packets dropped due to wrong + IP length, low byte. */ + uip_stats_t fragerr; /**< Number of packets dropped since they + were IP fragments. */ + uip_stats_t chkerr; /**< Number of packets dropped due to IP + checksum errors. */ + uip_stats_t protoerr; /**< Number of packets dropped since they + were neither ICMP, UDP nor TCP. */ + } ip; /**< IP statistics. */ + struct { + uip_stats_t drop; /**< Number of dropped ICMP packets. */ + uip_stats_t recv; /**< Number of received ICMP packets. */ + uip_stats_t sent; /**< Number of sent ICMP packets. */ + uip_stats_t typeerr; /**< Number of ICMP packets with a wrong + type. */ + } icmp; /**< ICMP statistics. */ + struct { + uip_stats_t drop; /**< Number of dropped TCP segments. */ + uip_stats_t recv; /**< Number of recived TCP segments. */ + uip_stats_t sent; /**< Number of sent TCP segments. */ + uip_stats_t chkerr; /**< Number of TCP segments with a bad + checksum. */ + uip_stats_t ackerr; /**< Number of TCP segments with a bad ACK + number. */ + uip_stats_t rst; /**< Number of recevied TCP RST (reset) segments. */ + uip_stats_t rexmit; /**< Number of retransmitted TCP segments. */ + uip_stats_t syndrop; /**< Number of dropped SYNs due to too few + connections was avaliable. */ + uip_stats_t synrst; /**< Number of SYNs for closed ports, + triggering a RST. */ + } tcp; /**< TCP statistics. */ +#if UIP_UDP + struct { + uip_stats_t drop; /**< Number of dropped UDP segments. */ + uip_stats_t recv; /**< Number of recived UDP segments. */ + uip_stats_t sent; /**< Number of sent UDP segments. */ + uip_stats_t chkerr; /**< Number of UDP segments with a bad + checksum. */ + } udp; /**< UDP statistics. */ +#endif /* UIP_UDP */ +}; + +/** + * The uIP TCP/IP statistics. + * + * This is the variable in which the uIP TCP/IP statistics are gathered. + */ +extern struct uip_stats uip_stat; + + +/*---------------------------------------------------------------------------*/ +/* All the stuff below this point is internal to uIP and should not be + * used directly by an application or by a device driver. + */ +/*---------------------------------------------------------------------------*/ +/* u8_t uip_flags: + * + * When the application is called, uip_flags will contain the flags + * that are defined in this file. Please read below for more + * infomation. + */ +extern u8_t uip_flags; + +/* The following flags may be set in the global variable uip_flags + before calling the application callback. The UIP_ACKDATA, + UIP_NEWDATA, and UIP_CLOSE flags may both be set at the same time, + whereas the others are mutualy exclusive. Note that these flags + should *NOT* be accessed directly, but only through the uIP + functions/macros. */ + +#define UIP_ACKDATA 1 /* Signifies that the outstanding data was + acked and the application should send + out new data instead of retransmitting + the last data. */ +#define UIP_NEWDATA 2 /* Flags the fact that the peer has sent + us new data. */ +#define UIP_REXMIT 4 /* Tells the application to retransmit the + data that was last sent. */ +#define UIP_POLL 8 /* Used for polling the application, to + check if the application has data that + it wants to send. */ +#define UIP_CLOSE 16 /* The remote host has closed the + connection, thus the connection has + gone away. Or the application signals + that it wants to close the + connection. */ +#define UIP_ABORT 32 /* The remote host has aborted the + connection, thus the connection has + gone away. Or the application signals + that it wants to abort the + connection. */ +#define UIP_CONNECTED 64 /* We have got a connection from a remote + host and have set up a new connection + for it, or an active connection has + been successfully established. */ + +#define UIP_TIMEDOUT 128 /* The connection has been aborted due to + too many retransmissions. */ + +/* uip_process(flag): + * + * The actual uIP function which does all the work. + */ +void uip_process(u8_t flag); + +/* The following flags are passed as an argument to the uip_process() + function. They are used to distinguish between the two cases where + uip_process() is called. It can be called either because we have + incoming data that should be processed, or because the periodic + timer has fired. These values are never used directly, but only in + the macrose defined in this file. */ + +#define UIP_DATA 1 /* Tells uIP that there is incoming + data in the uip_buf buffer. The + length of the data is stored in the + global variable uip_len. */ +#define UIP_TIMER 2 /* Tells uIP that the periodic timer + has fired. */ +#define UIP_POLL_REQUEST 3 /* Tells uIP that a connection should + be polled. */ +#define UIP_UDP_SEND_CONN 4 /* Tells uIP that a UDP datagram + should be constructed in the + uip_buf buffer. */ +#if UIP_UDP +#define UIP_UDP_TIMER 5 +#endif /* UIP_UDP */ + +/* The TCP states used in the uip_conn->tcpstateflags. */ +#define UIP_CLOSED 0 +#define UIP_SYN_RCVD 1 +#define UIP_SYN_SENT 2 +#define UIP_ESTABLISHED 3 +#define UIP_FIN_WAIT_1 4 +#define UIP_FIN_WAIT_2 5 +#define UIP_CLOSING 6 +#define UIP_TIME_WAIT 7 +#define UIP_LAST_ACK 8 +#define UIP_TS_MASK 15 + +#define UIP_STOPPED 16 + +/* The TCP and IP headers. */ +struct uip_tcpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcflow; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IPv4 header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* TCP header. */ + u16_t srcport, + destport; + u8_t seqno[4], + ackno[4], + tcpoffset, + flags, + wnd[2]; + u16_t tcpchksum; + u8_t urgp[2]; + u8_t optdata[4]; +}; + +/* The ICMP and IP headers. */ +struct uip_icmpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcf; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IPv4 header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* ICMP (echo) header. */ + u8_t type, icode; + u16_t icmpchksum; +#if !UIP_CONF_IPV6 + u16_t id, seqno; +#else /* !UIP_CONF_IPV6 */ + u8_t flags, reserved1, reserved2, reserved3; + u8_t icmp6data[16]; + u8_t options[1]; +#endif /* !UIP_CONF_IPV6 */ +}; + + +/* The UDP and IP headers. */ +struct uip_udpip_hdr { +#if UIP_CONF_IPV6 + /* IPv6 header. */ + u8_t vtc, + tcf; + u16_t flow; + u8_t len[2]; + u8_t proto, ttl; + uip_ip6addr_t srcipaddr, destipaddr; +#else /* UIP_CONF_IPV6 */ + /* IP header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +#endif /* UIP_CONF_IPV6 */ + + /* UDP header. */ + u16_t srcport, + destport; + u16_t udplen; + u16_t udpchksum; +}; + + + +/** + * The buffer size available for user data in the \ref uip_buf buffer. + * + * This macro holds the available size for user data in the \ref + * uip_buf buffer. The macro is intended to be used for checking + * bounds of available user data. + * + * Example: + \code + snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i); + \endcode + * + * \hideinitializer + */ +#define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) + + +#define UIP_PROTO_ICMP 1 +#define UIP_PROTO_TCP 6 +#define UIP_PROTO_UDP 17 +#define UIP_PROTO_ICMP6 58 + +/* Header sizes. */ +#if UIP_CONF_IPV6 +#define UIP_IPH_LEN 40 +#else /* UIP_CONF_IPV6 */ +#define UIP_IPH_LEN 20 /* Size of IP header */ +#endif /* UIP_CONF_IPV6 */ +#define UIP_UDPH_LEN 8 /* Size of UDP header */ +#define UIP_TCPH_LEN 20 /* Size of TCP header */ +#define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN) /* Size of IP + + UDP + header */ +#define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN) /* Size of IP + + TCP + header */ +#define UIP_TCPIP_HLEN UIP_IPTCPH_LEN + + +#if UIP_FIXEDADDR +extern const uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; +#else /* UIP_FIXEDADDR */ +extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; +#endif /* UIP_FIXEDADDR */ + + + +/** + * Representation of a 48-bit Ethernet address. + */ +struct uip_eth_addr { + u8_t addr[6]; +}; + +/** + * Calculate the Internet checksum over a buffer. + * + * The Internet checksum is the one's complement of the one's + * complement sum of all 16-bit words in the buffer. + * + * See RFC1071. + * + * \param buf A pointer to the buffer over which the checksum is to be + * computed. + * + * \param len The length of the buffer over which the checksum is to + * be computed. + * + * \return The Internet checksum of the buffer. + */ +u16_t uip_chksum(u16_t *buf, u16_t len); + +/** + * Calculate the IP header checksum of the packet header in uip_buf. + * + * The IP header checksum is the Internet checksum of the 20 bytes of + * the IP header. + * + * \return The IP header checksum of the IP header in the uip_buf + * buffer. + */ +u16_t uip_ipchksum(void); + +/** + * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. + * + * The TCP checksum is the Internet checksum of data contents of the + * TCP segment, and a pseudo-header as defined in RFC793. + * + * \return The TCP checksum of the TCP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_tcpchksum(void); + +/** + * Calculate the UDP checksum of the packet in uip_buf and uip_appdata. + * + * The UDP checksum is the Internet checksum of data contents of the + * UDP segment, and a pseudo-header as defined in RFC768. + * + * \return The UDP checksum of the UDP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_udpchksum(void); + + +#endif /* __UIP_H__ */ + + +/** @} */ diff --git a/STM32F4/libraries/arduino_uip/utility/uip_arch.h b/STM32F4/libraries/arduino_uip/utility/uip_arch.h new file mode 100644 index 0000000..71fd84b --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip_arch.h @@ -0,0 +1,138 @@ +/** + * \addtogroup uip + * {@ + */ + +/** + * \defgroup uiparch Architecture specific uIP functions + * @{ + * + * The functions in the architecture specific module implement the IP + * check sum and 32-bit additions. + * + * The IP checksum calculation is the most computationally expensive + * operation in the TCP/IP stack and it therefore pays off to + * implement this in efficient assembler. The purpose of the uip-arch + * module is to let the checksum functions to be implemented in + * architecture specific assembler. + * + */ + +/** + * \file + * Declarations of architecture specific functions. + * \author Adam Dunkels + */ + +/* + * Copyright (c) 2001, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $ + * + */ + +#ifndef __UIP_ARCH_H__ +#define __UIP_ARCH_H__ + +#include "uip.h" + +/** + * Carry out a 32-bit addition. + * + * Because not all architectures for which uIP is intended has native + * 32-bit arithmetic, uIP uses an external C function for doing the + * required 32-bit additions in the TCP protocol processing. This + * function should add the two arguments and place the result in the + * global variable uip_acc32. + * + * \note The 32-bit integer pointed to by the op32 parameter and the + * result in the uip_acc32 variable are in network byte order (big + * endian). + * + * \param op32 A pointer to a 4-byte array representing a 32-bit + * integer in network byte order (big endian). + * + * \param op16 A 16-bit integer in host byte order. + */ +void uip_add32(u8_t *op32, u16_t op16); + +/** + * Calculate the Internet checksum over a buffer. + * + * The Internet checksum is the one's complement of the one's + * complement sum of all 16-bit words in the buffer. + * + * See RFC1071. + * + * \note This function is not called in the current version of uIP, + * but future versions might make use of it. + * + * \param buf A pointer to the buffer over which the checksum is to be + * computed. + * + * \param len The length of the buffer over which the checksum is to + * be computed. + * + * \return The Internet checksum of the buffer. + */ +u16_t uip_chksum(u16_t *buf, u16_t len); + +/** + * Calculate the IP header checksum of the packet header in uip_buf. + * + * The IP header checksum is the Internet checksum of the 20 bytes of + * the IP header. + * + * \return The IP header checksum of the IP header in the uip_buf + * buffer. + */ +u16_t uip_ipchksum(void); + +/** + * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. + * + * The TCP checksum is the Internet checksum of data contents of the + * TCP segment, and a pseudo-header as defined in RFC793. + * + * \note The uip_appdata pointer that points to the packet data may + * point anywhere in memory, so it is not possible to simply calculate + * the Internet checksum of the contents of the uip_buf buffer. + * + * \return The TCP checksum of the TCP segment in uip_buf and pointed + * to by uip_appdata. + */ +u16_t uip_tcpchksum(void); + +u16_t uip_udpchksum(void); + +/** @} */ +/** @} */ + +#endif /* __UIP_ARCH_H__ */ diff --git a/STM32F4/libraries/arduino_uip/utility/uip_arp.c b/STM32F4/libraries/arduino_uip/utility/uip_arp.c new file mode 100644 index 0000000..44ca7c4 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip_arp.c @@ -0,0 +1,423 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \defgroup uiparp uIP Address Resolution Protocol + * @{ + * + * The Address Resolution Protocol ARP is used for mapping between IP + * addresses and link level addresses such as the Ethernet MAC + * addresses. ARP uses broadcast queries to ask for the link level + * address of a known IP address and the host which is configured with + * the IP address for which the query was meant, will respond with its + * link level address. + * + * \note This ARP implementation only supports Ethernet. + */ + +/** + * \file + * Implementation of the ARP Address Resolution Protocol. + * \author Adam Dunkels + * + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip_arp.c,v 1.8 2006/06/02 23:36:21 adam Exp $ + * + */ + + +#include "uip_arp.h" + +#include + +struct arp_hdr { + struct uip_eth_hdr ethhdr; + u16_t hwtype; + u16_t protocol; + u8_t hwlen; + u8_t protolen; + u16_t opcode; + struct uip_eth_addr shwaddr; + u16_t sipaddr[2]; + struct uip_eth_addr dhwaddr; + u16_t dipaddr[2]; +}; + +struct ethip_hdr { + struct uip_eth_hdr ethhdr; + /* IP header. */ + u8_t vhl, + tos, + len[2], + ipid[2], + ipoffset[2], + ttl, + proto; + u16_t ipchksum; + u16_t srcipaddr[2], + destipaddr[2]; +}; + +#define ARP_REQUEST 1 +#define ARP_REPLY 2 + +#define ARP_HWTYPE_ETH 1 + +struct arp_entry { + u16_t ipaddr[2]; + struct uip_eth_addr ethaddr; + u8_t time; +}; + +static const struct uip_eth_addr broadcast_ethaddr = + {{0xff,0xff,0xff,0xff,0xff,0xff}}; +static const u16_t broadcast_ipaddr[2] = {0xffff,0xffff}; + +static struct arp_entry arp_table[UIP_ARPTAB_SIZE]; +static u16_t ipaddr[2]; +static u8_t i, c; + +static u8_t arptime; +static u8_t tmpage; + +#define BUF ((struct arp_hdr *)&uip_buf[0]) +#define IPBUF ((struct ethip_hdr *)&uip_buf[0]) +/*-----------------------------------------------------------------------------------*/ +/** + * Initialize the ARP module. + * + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_init(void) +{ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + memset(arp_table[i].ipaddr, 0, 4); + } +} +/*-----------------------------------------------------------------------------------*/ +/** + * Periodic ARP processing function. + * + * This function performs periodic timer processing in the ARP module + * and should be called at regular intervals. The recommended interval + * is 10 seconds between the calls. + * + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_timer(void) +{ + struct arp_entry *tabptr; + + ++arptime; + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 && + arptime - tabptr->time >= UIP_ARP_MAXAGE) { + memset(tabptr->ipaddr, 0, 4); + } + } + +} +/*-----------------------------------------------------------------------------------*/ +static void +uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr) +{ + register struct arp_entry *tabptr; + /* Walk through the ARP mapping table and try to find an entry to + update. If none is found, the IP -> MAC address mapping is + inserted in the ARP table. */ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + + tabptr = &arp_table[i]; + /* Only check those entries that are actually in use. */ + if(tabptr->ipaddr[0] != 0 && + tabptr->ipaddr[1] != 0) { + + /* Check if the source IP address of the incoming packet matches + the IP address in this ARP table entry. */ + if(ipaddr[0] == tabptr->ipaddr[0] && + ipaddr[1] == tabptr->ipaddr[1]) { + + /* An old entry found, update this and return. */ + memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); + tabptr->time = arptime; + + return; + } + } + } + + /* If we get here, no existing ARP table entry was found, so we + create one. */ + + /* First, we try to find an unused entry in the ARP table. */ + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(tabptr->ipaddr[0] == 0 && + tabptr->ipaddr[1] == 0) { + break; + } + } + + /* If no unused entry is found, we try to find the oldest entry and + throw it away. */ + if(i == UIP_ARPTAB_SIZE) { + tmpage = 0; + c = 0; + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(arptime - tabptr->time > tmpage) { + tmpage = arptime - tabptr->time; + c = i; + } + } + i = c; + tabptr = &arp_table[i]; + } + + /* Now, i is the ARP table entry which we will fill with the new + information. */ + memcpy(tabptr->ipaddr, ipaddr, 4); + memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); + tabptr->time = arptime; +} +/*-----------------------------------------------------------------------------------*/ +/** + * ARP processing for incoming IP packets + * + * This function should be called by the device driver when an IP + * packet has been received. The function will check if the address is + * in the ARP cache, and if so the ARP cache entry will be + * refreshed. If no ARP cache entry was found, a new one is created. + * + * This function expects an IP packet with a prepended Ethernet header + * in the uip_buf[] buffer, and the length of the packet in the global + * variable uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +//#if 0 +void +uip_arp_ipin(void) +{ + uip_len -= sizeof(struct uip_eth_hdr); + + /* Only insert/update an entry if the source IP address of the + incoming IP packet comes from a host on the local network. */ + if((IPBUF->srcipaddr[0] & uip_netmask[0]) != + (uip_hostaddr[0] & uip_netmask[0])) { + return; + } + if((IPBUF->srcipaddr[1] & uip_netmask[1]) != + (uip_hostaddr[1] & uip_netmask[1])) { + return; + } + uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src)); + + return; +} +//#endif /* 0 */ +/*-----------------------------------------------------------------------------------*/ +/** + * ARP processing for incoming ARP packets. + * + * This function should be called by the device driver when an ARP + * packet has been received. The function will act differently + * depending on the ARP packet type: if it is a reply for a request + * that we previously sent out, the ARP cache will be filled in with + * the values from the ARP reply. If the incoming ARP packet is an ARP + * request for our IP address, an ARP reply packet is created and put + * into the uip_buf[] buffer. + * + * When the function returns, the value of the global variable uip_len + * indicates whether the device driver should send out a packet or + * not. If uip_len is zero, no packet should be sent. If uip_len is + * non-zero, it contains the length of the outbound packet that is + * present in the uip_buf[] buffer. + * + * This function expects an ARP packet with a prepended Ethernet + * header in the uip_buf[] buffer, and the length of the packet in the + * global variable uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_arpin(void) +{ + + if(uip_len < sizeof(struct arp_hdr)) { + uip_len = 0; + return; + } + uip_len = 0; + + switch(BUF->opcode) { + case HTONS(ARP_REQUEST): + /* ARP request. If it asked for our address, we send out a + reply. */ + if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { + /* First, we register the one who made the request in our ARP + table, since it is likely that we will do more communication + with this host in the future. */ + uip_arp_update(BUF->sipaddr, &BUF->shwaddr); + + /* The reply opcode is 2. */ + BUF->opcode = HTONS(2); + + memcpy(BUF->dhwaddr.addr, BUF->shwaddr.addr, 6); + memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); + memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6); + + BUF->dipaddr[0] = BUF->sipaddr[0]; + BUF->dipaddr[1] = BUF->sipaddr[1]; + BUF->sipaddr[0] = uip_hostaddr[0]; + BUF->sipaddr[1] = uip_hostaddr[1]; + + BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); + uip_len = sizeof(struct arp_hdr); + } + break; + case HTONS(ARP_REPLY): + /* ARP reply. We insert or update the ARP table if it was meant + for us. */ + if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { + uip_arp_update(BUF->sipaddr, &BUF->shwaddr); + } + break; + } + + return; +} +/*-----------------------------------------------------------------------------------*/ +/** + * Prepend Ethernet header to an outbound IP packet and see if we need + * to send out an ARP request. + * + * This function should be called before sending out an IP packet. The + * function checks the destination IP address of the IP packet to see + * what Ethernet MAC address that should be used as a destination MAC + * address on the Ethernet. + * + * If the destination IP address is in the local network (determined + * by logical ANDing of netmask and our IP address), the function + * checks the ARP cache to see if an entry for the destination IP + * address is found. If so, an Ethernet header is prepended and the + * function returns. If no ARP cache entry is found for the + * destination IP address, the packet in the uip_buf[] is replaced by + * an ARP request packet for the IP address. The IP packet is dropped + * and it is assumed that they higher level protocols (e.g., TCP) + * eventually will retransmit the dropped packet. + * + * If the destination IP address is not on the local network, the IP + * address of the default router is used instead. + * + * When the function returns, a packet is present in the uip_buf[] + * buffer, and the length of the packet is in the global variable + * uip_len. + */ +/*-----------------------------------------------------------------------------------*/ +void +uip_arp_out(void) +{ + struct arp_entry *tabptr; + + /* Find the destination IP address in the ARP table and construct + the Ethernet header. If the destination IP addres isn't on the + local network, we use the default router's IP address instead. + + If not ARP table entry is found, we overwrite the original IP + packet with an ARP request for the IP address. */ + + /* First check if destination is a local broadcast. */ + if(uip_ipaddr_cmp(IPBUF->destipaddr, broadcast_ipaddr)) { + memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6); + } else { + /* Check if the destination address is on the local network. */ + if(!uip_ipaddr_maskcmp(IPBUF->destipaddr, uip_hostaddr, uip_netmask)) { + /* Destination address was not on the local network, so we need to + use the default router's IP address instead of the destination + address when determining the MAC address. */ + uip_ipaddr_copy(ipaddr, uip_draddr); + } else { + /* Else, we use the destination IP address. */ + uip_ipaddr_copy(ipaddr, IPBUF->destipaddr); + } + + for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { + tabptr = &arp_table[i]; + if(uip_ipaddr_cmp(ipaddr, tabptr->ipaddr)) { + break; + } + } + + if(i == UIP_ARPTAB_SIZE) { + /* The destination address was not in our ARP table, so we + overwrite the IP packet with an ARP request. */ + + memset(BUF->ethhdr.dest.addr, 0xff, 6); + memset(BUF->dhwaddr.addr, 0x00, 6); + memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); + + uip_ipaddr_copy(BUF->dipaddr, ipaddr); + uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr); + BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */ + BUF->hwtype = HTONS(ARP_HWTYPE_ETH); + BUF->protocol = HTONS(UIP_ETHTYPE_IP); + BUF->hwlen = 6; + BUF->protolen = 4; + BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); + + uip_appdata = &uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN]; + + uip_len = sizeof(struct arp_hdr); + return; + } + + /* Build an ethernet header. */ + memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6); + } + memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6); + + IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP); + + uip_len += sizeof(struct uip_eth_hdr); +} +/*-----------------------------------------------------------------------------------*/ + +/** @} */ +/** @} */ diff --git a/STM32F4/libraries/arduino_uip/utility/uip_arp.h b/STM32F4/libraries/arduino_uip/utility/uip_arp.h new file mode 100644 index 0000000..ef93054 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip_arp.h @@ -0,0 +1,144 @@ +/** + * \addtogroup uip + * @{ + */ + +/** + * \addtogroup uiparp + * @{ + */ + +/** + * \file + * Macros and definitions for the ARP module. + * \author Adam Dunkels + */ + + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $ + * + */ + +#ifndef __UIP_ARP_H__ +#define __UIP_ARP_H__ + +#include "uip.h" + + +extern struct uip_eth_addr uip_ethaddr; + +/** + * The Ethernet header. + */ +struct uip_eth_hdr { + struct uip_eth_addr dest; + struct uip_eth_addr src; + u16_t type; +}; + +#define UIP_ETHTYPE_ARP 0x0806 +#define UIP_ETHTYPE_IP 0x0800 +#define UIP_ETHTYPE_IP6 0x86dd + + +/* The uip_arp_init() function must be called before any of the other + ARP functions. */ +void uip_arp_init(void); + +/* The uip_arp_ipin() function should be called whenever an IP packet + arrives from the Ethernet. This function refreshes the ARP table or + inserts a new mapping if none exists. The function assumes that an + IP packet with an Ethernet header is present in the uip_buf buffer + and that the length of the packet is in the uip_len variable. */ +void uip_arp_ipin(void); +//#define uip_arp_ipin() + +/* The uip_arp_arpin() should be called when an ARP packet is received + by the Ethernet driver. This function also assumes that the + Ethernet frame is present in the uip_buf buffer. When the + uip_arp_arpin() function returns, the contents of the uip_buf + buffer should be sent out on the Ethernet if the uip_len variable + is > 0. */ +void uip_arp_arpin(void); + +/* The uip_arp_out() function should be called when an IP packet + should be sent out on the Ethernet. This function creates an + Ethernet header before the IP header in the uip_buf buffer. The + Ethernet header will have the correct Ethernet MAC destination + address filled in if an ARP table entry for the destination IP + address (or the IP address of the default router) is present. If no + such table entry is found, the IP packet is overwritten with an ARP + request and we rely on TCP to retransmit the packet that was + overwritten. In any case, the uip_len variable holds the length of + the Ethernet frame that should be transmitted. */ +void uip_arp_out(void); + +/* The uip_arp_timer() function should be called every ten seconds. It + is responsible for flushing old entries in the ARP table. */ +void uip_arp_timer(void); + +/** @} */ + +/** + * \addtogroup uipconffunc + * @{ + */ + + +/** + * Specifiy the Ethernet MAC address. + * + * The ARP code needs to know the MAC address of the Ethernet card in + * order to be able to respond to ARP queries and to generate working + * Ethernet headers. + * + * \note This macro only specifies the Ethernet MAC address to the ARP + * code. It cannot be used to change the MAC address of the Ethernet + * card. + * + * \param eaddr A pointer to a struct uip_eth_addr containing the + * Ethernet MAC address of the Ethernet card. + * + * \hideinitializer + */ +#define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \ + uip_ethaddr.addr[1] = eaddr.addr[1];\ + uip_ethaddr.addr[2] = eaddr.addr[2];\ + uip_ethaddr.addr[3] = eaddr.addr[3];\ + uip_ethaddr.addr[4] = eaddr.addr[4];\ + uip_ethaddr.addr[5] = eaddr.addr[5];} while(0) + +/** @} */ +/** @} */ + +#endif /* __UIP_ARP_H__ */ diff --git a/STM32F4/libraries/arduino_uip/utility/uip_clock.h b/STM32F4/libraries/arduino_uip/utility/uip_clock.h new file mode 100644 index 0000000..6dd72be --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip_clock.h @@ -0,0 +1,88 @@ +/** + * \defgroup clock Clock interface + * + * The clock interface is the interface between the \ref timer "timer library" + * and the platform specific clock functionality. The clock + * interface must be implemented for each platform that uses the \ref + * timer "timer library". + * + * The clock interface does only one this: it measures time. The clock + * interface provides a macro, CLOCK_SECOND, which corresponds to one + * second of system time. + * + * \sa \ref timer "Timer library" + * + * @{ + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $ + */ +#ifndef __UIP_CLOCK_H__ +#define __UIP_CLOCK_H__ + +#include "clock-arch.h" + +/** + * Initialize the clock library. + * + * This function initializes the clock library and should be called + * from the main() function of the system. + * + */ +void uip_clock_init(void); + +/** + * Get the current clock time. + * + * This function returns the current system clock time. + * + * \return The current clock time, measured in system ticks. + */ +clock_time_t clock_time(void); + +/** + * A second, measured in system clock time. + * + * \hideinitializer + */ +#ifdef CLOCK_CONF_SECOND +#define CLOCK_SECOND CLOCK_CONF_SECOND +#else +#define CLOCK_SECOND (clock_time_t)32 +#endif + +#endif /* __CLOCK_H__ */ + +/** @} */ diff --git a/STM32F4/libraries/arduino_uip/utility/uip_debug.cpp b/STM32F4/libraries/arduino_uip/utility/uip_debug.cpp new file mode 100644 index 0000000..444bd0e --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip_debug.cpp @@ -0,0 +1,170 @@ +#include +#include +#include +#include +extern "C" { + #import "utility/uip.h" +} + +struct uip_conn con[UIP_CONNS]; + +void +UIPDebug::uip_debug_printconns() +{ + for(uint8_t i=0;iripaddr,rhs->ripaddr)) + { + Serial.print(" ripaddr: "); + uip_debug_printbytes((const uint8_t *)lhs->ripaddr,4); + Serial.print(" -> "); + uip_debug_printbytes((const uint8_t *)rhs->ripaddr,4); + Serial.println(); + uip_ipaddr_copy(lhs->ripaddr,rhs->ripaddr); + changed = true; + } + if (lhs->lport != rhs->lport) + { + Serial.print(" lport: "); + Serial.print(htons(lhs->lport)); + Serial.print(" -> "); + Serial.println(htons(rhs->lport)); + lhs->lport = rhs->lport; + changed = true; + } + if (lhs->rport != rhs->rport) + { + Serial.print(" rport: "); + Serial.print(htons(lhs->rport)); + Serial.print(" -> "); + Serial.println(htons(rhs->rport)); + lhs->rport = rhs->rport; + changed = true; + } + if ((uint32_t)lhs->rcv_nxt[0] != (uint32_t)rhs->rcv_nxt[0]) + { + Serial.print(" rcv_nxt: "); + uip_debug_printbytes(lhs->rcv_nxt,4); + Serial.print(" -> "); + uip_debug_printbytes(rhs->rcv_nxt,4); + *((uint32_t *)&lhs->rcv_nxt[0]) = (uint32_t)rhs->rcv_nxt[0]; + Serial.println(); + changed = true; + } + if ((uint32_t)lhs->snd_nxt[0] != (uint32_t)rhs->snd_nxt[0]) + { + Serial.print(" snd_nxt: "); + uip_debug_printbytes(lhs->snd_nxt,4); + Serial.print(" -> "); + uip_debug_printbytes(rhs->snd_nxt,4); + *((uint32_t *)&lhs->snd_nxt[0]) = (uint32_t)rhs->snd_nxt[0]; + Serial.println(); + changed = true; + } + if (lhs->len != rhs->len) + { + Serial.print(" len: "); + Serial.print(lhs->len); + Serial.print(" -> "); + Serial.println(rhs->len); + lhs->len = rhs->len; + changed = true; + } + if (lhs->mss != rhs->mss) + { + Serial.print(" mss: "); + Serial.print(lhs->mss); + Serial.print(" -> "); + Serial.println(rhs->mss); + lhs->mss = rhs->mss; + changed = true; + } + if (lhs->initialmss != rhs->initialmss) + { + Serial.print(" initialmss: "); + Serial.print(lhs->initialmss); + Serial.print(" -> "); + Serial.println(rhs->initialmss); + lhs->initialmss = rhs->initialmss; + changed = true; + } + if (lhs->sa != rhs->sa) + { + Serial.print(" sa: "); + Serial.print(lhs->sa); + Serial.print(" -> "); + Serial.println(rhs->sa); + lhs->sa = rhs->sa; + changed = true; + } + if (lhs->sv != rhs->sv) + { + Serial.print(" sv: "); + Serial.print(lhs->sv); + Serial.print(" -> "); + Serial.println(rhs->sv); + lhs->sv = rhs->sv; + changed = true; + } + if (lhs->rto != rhs->rto) + { + Serial.print(" rto: "); + Serial.print(lhs->rto); + Serial.print(" -> "); + Serial.println(rhs->rto); + lhs->rto = rhs->rto; + changed = true; + } + if (lhs->tcpstateflags != rhs->tcpstateflags) + { + Serial.print(" tcpstateflags: "); + Serial.print(lhs->tcpstateflags); + Serial.print(" -> "); + Serial.println(rhs->tcpstateflags); + lhs->tcpstateflags = rhs->tcpstateflags; + changed = true; + } + if (lhs->timer != rhs->timer) + { + Serial.print(" timer: "); + Serial.print(lhs->timer); + Serial.print(" -> "); + Serial.println(rhs->timer); + lhs->timer = rhs->timer; + changed = true; + } + if (lhs->nrtx != rhs->nrtx) + { + Serial.print(" nrtx: "); + Serial.print(lhs->nrtx); + Serial.print(" -> "); + Serial.println(rhs->nrtx); + lhs->nrtx = rhs->nrtx; + changed = true; + } + return changed; +} + +void +UIPDebug::uip_debug_printbytes(const uint8_t *data, uint8_t len) +{ + for(uint8_t i=0;i + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $ + */ + +#include "uip_clock.h" +#include "uip_timer.h" + +/*---------------------------------------------------------------------------*/ +/** + * Set a timer. + * + * This function is used to set a timer for a time sometime in the + * future. The function timer_expired() will evaluate to true after + * the timer has expired. + * + * \param t A pointer to the timer + * \param interval The interval before the timer expires. + * + */ +void +uip_timer_set(struct uip_timer *t, clock_time_t interval) +{ + t->interval = interval; + t->start = clock_time(); +} +/*---------------------------------------------------------------------------*/ +/** + * Reset the timer with the same interval. + * + * This function resets the timer with the same interval that was + * given to the timer_set() function. The start point of the interval + * is the exact time that the timer last expired. Therefore, this + * function will cause the timer to be stable over time, unlike the + * timer_rester() function. + * + * \param t A pointer to the timer. + * + * \sa timer_restart() + */ +void +uip_timer_reset(struct uip_timer *t) +{ + t->start += t->interval; +} +/*---------------------------------------------------------------------------*/ +/** + * Restart the timer from the current point in time + * + * This function restarts a timer with the same interval that was + * given to the timer_set() function. The timer will start at the + * current time. + * + * \note A periodic timer will drift if this function is used to reset + * it. For preioric timers, use the timer_reset() function instead. + * + * \param t A pointer to the timer. + * + * \sa timer_reset() + */ +void +uip_timer_restart(struct uip_timer *t) +{ + t->start = clock_time(); +} +/*---------------------------------------------------------------------------*/ +/** + * Check if a timer has expired. + * + * This function tests if a timer has expired and returns true or + * false depending on its status. + * + * \param t A pointer to the timer + * + * \return Non-zero if the timer has expired, zero otherwise. + * + */ +int +uip_timer_expired(struct uip_timer *t) +{ + return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval; +} +/*---------------------------------------------------------------------------*/ + +/** @} */ diff --git a/STM32F4/libraries/arduino_uip/utility/uip_timer.h b/STM32F4/libraries/arduino_uip/utility/uip_timer.h new file mode 100644 index 0000000..f260349 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uip_timer.h @@ -0,0 +1,86 @@ +/** + * \defgroup timer Timer library + * + * The timer library provides functions for setting, resetting and + * restarting timers, and for checking if a timer has expired. An + * application must "manually" check if its timers have expired; this + * is not done automatically. + * + * A timer is declared as a \c struct \c timer and all access to the + * timer is made by a pointer to the declared timer. + * + * \note The timer library uses the \ref clock "Clock library" to + * measure time. Intervals should be specified in the format used by + * the clock library. + * + * @{ + */ + + +/** + * \file + * Timer library header file. + * \author + * Adam Dunkels + */ + +/* + * Copyright (c) 2004, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack + * + * Author: Adam Dunkels + * + * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $ + */ +#ifndef __UIP_TIMER_H__ +#define __UIP_TIMER_H__ + +#include "uip_clock.h" + +/** + * A timer. + * + * This structure is used for declaring a timer. The timer must be set + * with timer_set() before it can be used. + * + * \hideinitializer + */ +struct uip_timer { + clock_time_t start; + clock_time_t interval; +}; + +void uip_timer_set(struct uip_timer *t, clock_time_t interval); +void uip_timer_reset(struct uip_timer *t); +void uip_timer_restart(struct uip_timer *t); +int uip_timer_expired(struct uip_timer *t); + +#endif /* __UIP_TIMER_H__ */ + +/** @} */ diff --git a/STM32F4/libraries/arduino_uip/utility/uipethernet-conf.h b/STM32F4/libraries/arduino_uip/utility/uipethernet-conf.h new file mode 100644 index 0000000..9dd8b27 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uipethernet-conf.h @@ -0,0 +1,29 @@ +#ifndef UIPETHERNET_CONF_H +#define UIPETHERNET_CONF_H + +/* for TCP */ +#define UIP_SOCKET_NUMPACKETS 5 +#define UIP_CONF_MAX_CONNECTIONS 4 + +/* for UDP + * set UIP_CONF_UDP to 0 to disable UDP (saves aprox. 5kb flash) */ +#define UIP_CONF_UDP 1 +#define UIP_CONF_BROADCAST 1 +#define UIP_CONF_UDP_CONNS 4 + +/* number of attempts on write before returning number of bytes sent so far + * set to -1 to block until connection is closed by timeout */ +#define UIP_ATTEMPTS_ON_WRITE -1 + +/* timeout after which UIPClient::connect gives up. The timeout is specified in seconds. + * if set to a number <= 0 connect will timeout when uIP does (which might be longer than you expect...) */ +#define UIP_CONNECT_TIMEOUT -1 + +/* periodic timer for uip (in ms) */ +#define UIP_PERIODIC_TIMER 250 + +/* timer to poll client for data after last write (in ms) + * set to -1 to disable fast polling and rely on periodic only (saves 100 bytes flash) */ +#define UIP_CLIENT_TIMER 10 + +#endif diff --git a/STM32F4/libraries/arduino_uip/utility/uipopt.h b/STM32F4/libraries/arduino_uip/utility/uipopt.h new file mode 100644 index 0000000..42badf8 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/uipopt.h @@ -0,0 +1,543 @@ +/** + * \defgroup uipopt Configuration options for uIP + * @{ + * + * uIP is configured using the per-project configuration file + * uipopt.h. This file contains all compile-time options for uIP and + * should be tweaked to match each specific project. The uIP + * distribution contains a documented example "uipopt.h" that can be + * copied and modified for each project. + * + * \note Most of the configuration options in the uipopt.h should not + * be changed, but rather the per-project uip-conf.h file. + */ + +/** + * \file + * Configuration options for uIP. + * \author Adam Dunkels + * + * This file is used for tweaking various configuration options for + * uIP. You should make a copy of this file into one of your project's + * directories instead of editing this example "uipopt.h" file that + * comes with the uIP distribution. + */ + +/* + * Copyright (c) 2001-2003, Adam Dunkels. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This file is part of the uIP TCP/IP stack. + * + * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $ + * + */ + +#ifndef __UIPOPT_H__ +#define __UIPOPT_H__ + +#ifndef UIP_LITTLE_ENDIAN +#define UIP_LITTLE_ENDIAN 3412 +#endif /* UIP_LITTLE_ENDIAN */ +#ifndef UIP_BIG_ENDIAN +#define UIP_BIG_ENDIAN 1234 +#endif /* UIP_BIG_ENDIAN */ + +#include "uip-conf.h" + +/*------------------------------------------------------------------------------*/ + +/** + * \name Static configuration options + * @{ + * + * These configuration options can be used for setting the IP address + * settings statically, but only if UIP_FIXEDADDR is set to 1. The + * configuration options for a specific node includes IP address, + * netmask and default router as well as the Ethernet address. The + * netmask, default router and Ethernet address are appliciable only + * if uIP should be run over Ethernet. + * + * All of these should be changed to suit your project. +*/ + +/** + * Determines if uIP should use a fixed IP address or not. + * + * If uIP should use a fixed IP address, the settings are set in the + * uipopt.h file. If not, the macros uip_sethostaddr(), + * uip_setdraddr() and uip_setnetmask() should be used instead. + * + * \hideinitializer + */ +#define UIP_FIXEDADDR 0 + +/** + * Ping IP address asignment. + * + * uIP uses a "ping" packets for setting its own IP address if this + * option is set. If so, uIP will start with an empty IP address and + * the destination IP address of the first incoming "ping" (ICMP echo) + * packet will be used for setting the hosts IP address. + * + * \note This works only if UIP_FIXEDADDR is 0. + * + * \hideinitializer + */ +#ifdef UIP_CONF_PINGADDRCONF +#define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF +#else /* UIP_CONF_PINGADDRCONF */ +#define UIP_PINGADDRCONF 0 +#endif /* UIP_CONF_PINGADDRCONF */ + + +/** + * Specifies if the uIP ARP module should be compiled with a fixed + * Ethernet MAC address or not. + * + * If this configuration option is 0, the macro uip_setethaddr() can + * be used to specify the Ethernet address at run-time. + * + * \hideinitializer + */ +#define UIP_FIXEDETHADDR 0 + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name IP configuration options + * @{ + * + */ +/** + * The IP TTL (time to live) of IP packets sent by uIP. + * + * This should normally not be changed. + */ +#define UIP_TTL 64 + +/** + * Turn on support for IP packet reassembly. + * + * uIP supports reassembly of fragmented IP packets. This features + * requires an additonal amount of RAM to hold the reassembly buffer + * and the reassembly code size is approximately 700 bytes. The + * reassembly buffer is of the same size as the uip_buf buffer + * (configured by UIP_BUFSIZE). + * + * \note IP packet reassembly is not heavily tested. + * + * \hideinitializer + */ +#define UIP_REASSEMBLY 0 + +/** + * The maximum time an IP fragment should wait in the reassembly + * buffer before it is dropped. + * + */ +#define UIP_REASS_MAXAGE 40 + +/** @} */ + +/*------------------------------------------------------------------------------*/ +/** + * \name UDP configuration options + * @{ + */ + +/** + * Toggles wether UDP support should be compiled in or not. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP +#define UIP_UDP UIP_CONF_UDP +#else /* UIP_CONF_UDP */ +#define UIP_UDP 0 +#endif /* UIP_CONF_UDP */ + +/** + * Toggles if UDP checksums should be used or not. + * + * \note Support for UDP checksums is currently not included in uIP, + * so this option has no function. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP_CHECKSUMS +#define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS +#else +#define UIP_UDP_CHECKSUMS 0 +#endif + +/** + * The maximum amount of concurrent UDP connections. + * + * \hideinitializer + */ +#ifdef UIP_CONF_UDP_CONNS +#define UIP_UDP_CONNS UIP_CONF_UDP_CONNS +#else /* UIP_CONF_UDP_CONNS */ +#define UIP_UDP_CONNS 10 +#endif /* UIP_CONF_UDP_CONNS */ + +/** + * The name of the function that should be called when UDP datagrams arrive. + * + * \hideinitializer + */ + + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name TCP configuration options + * @{ + */ + +/** + * Determines if support for opening connections from uIP should be + * compiled in. + * + * If the applications that are running on top of uIP for this project + * do not need to open outgoing TCP connections, this configration + * option can be turned off to reduce the code size of uIP. + * + * \hideinitializer + */ +#define UIP_ACTIVE_OPEN 1 + +/** + * The maximum number of simultaneously open TCP connections. + * + * Since the TCP connections are statically allocated, turning this + * configuration knob down results in less RAM used. Each TCP + * connection requires approximatly 30 bytes of memory. + * + * \hideinitializer + */ +#ifndef UIP_CONF_MAX_CONNECTIONS +#define UIP_CONNS 10 +#else /* UIP_CONF_MAX_CONNECTIONS */ +#define UIP_CONNS UIP_CONF_MAX_CONNECTIONS +#endif /* UIP_CONF_MAX_CONNECTIONS */ + + +/** + * The maximum number of simultaneously listening TCP ports. + * + * Each listening TCP port requires 2 bytes of memory. + * + * \hideinitializer + */ +#ifndef UIP_CONF_MAX_LISTENPORTS +#define UIP_LISTENPORTS 20 +#else /* UIP_CONF_MAX_LISTENPORTS */ +#define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS +#endif /* UIP_CONF_MAX_LISTENPORTS */ + +/** + * Determines if support for TCP urgent data notification should be + * compiled in. + * + * Urgent data (out-of-band data) is a rarely used TCP feature that + * very seldom would be required. + * + * \hideinitializer + */ +#define UIP_URGDATA 0 + +/** + * The initial retransmission timeout counted in timer pulses. + * + * This should not be changed. + */ +#define UIP_RTO 3 + +/** + * The maximum number of times a segment should be retransmitted + * before the connection should be aborted. + * + * This should not be changed. + */ +#define UIP_MAXRTX 8 + +/** + * The maximum number of times a SYN segment should be retransmitted + * before a connection request should be deemed to have been + * unsuccessful. + * + * This should not need to be changed. + */ +#define UIP_MAXSYNRTX 5 + +/** + * The TCP maximum segment size. + * + * This is should not be to set to more than + * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. + */ +#ifndef UIP_CONF_TCP_MSS +#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) +#else +#define UIP_TCP_MSS UIP_CONF_TCP_MSS +#endif + +/** + * The size of the advertised receiver's window. + * + * Should be set low (i.e., to the size of the uip_buf buffer) is the + * application is slow to process incoming data, or high (32768 bytes) + * if the application processes data quickly. + * + * \hideinitializer + */ +#ifndef UIP_CONF_RECEIVE_WINDOW +#define UIP_RECEIVE_WINDOW UIP_TCP_MSS +#else +#define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW +#endif + +/** + * How long a connection should stay in the TIME_WAIT state. + * + * This configiration option has no real implication, and it should be + * left untouched. + */ +#define UIP_TIME_WAIT_TIMEOUT 120 + + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name ARP configuration options + * @{ + */ + +/** + * The size of the ARP table. + * + * This option should be set to a larger value if this uIP node will + * have many connections from the local network. + * + * \hideinitializer + */ +#ifdef UIP_CONF_ARPTAB_SIZE +#define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE +#else +#define UIP_ARPTAB_SIZE 8 +#endif + +/** + * The maxium age of ARP table entries measured in 10ths of seconds. + * + * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD + * default). + */ +#define UIP_ARP_MAXAGE 120 + +/** @} */ + +/*------------------------------------------------------------------------------*/ + +/** + * \name General configuration options + * @{ + */ + +/** + * The size of the uIP packet buffer. + * + * The uIP packet buffer should not be smaller than 60 bytes, and does + * not need to be larger than 1500 bytes. Lower size results in lower + * TCP throughput, larger size results in higher TCP throughput. + * + * \hideinitializer + */ +#ifndef UIP_CONF_BUFFER_SIZE +#define UIP_BUFSIZE 400 +#else /* UIP_CONF_BUFFER_SIZE */ +#define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE +#endif /* UIP_CONF_BUFFER_SIZE */ + + +/** + * Determines if statistics support should be compiled in. + * + * The statistics is useful for debugging and to show the user. + * + * \hideinitializer + */ +#ifndef UIP_CONF_STATISTICS +#define UIP_STATISTICS 0 +#else /* UIP_CONF_STATISTICS */ +#define UIP_STATISTICS UIP_CONF_STATISTICS +#endif /* UIP_CONF_STATISTICS */ + +/** + * Determines if logging of certain events should be compiled in. + * + * This is useful mostly for debugging. The function uip_log() + * must be implemented to suit the architecture of the project, if + * logging is turned on. + * + * \hideinitializer + */ +#ifndef UIP_CONF_LOGGING +#define UIP_LOGGING 0 +#else /* UIP_CONF_LOGGING */ +#define UIP_LOGGING UIP_CONF_LOGGING +#endif /* UIP_CONF_LOGGING */ + +/** + * Broadcast support. + * + * This flag configures IP broadcast support. This is useful only + * together with UDP. + * + * \hideinitializer + * + */ +#if UIP_UDP && UIP_CONF_BROADCAST +#define UIP_BROADCAST UIP_CONF_BROADCAST +#else /* UIP_CONF_BROADCAST */ +#define UIP_BROADCAST 0 +#endif /* UIP_CONF_BROADCAST */ + +/** + * Print out a uIP log message. + * + * This function must be implemented by the module that uses uIP, and + * is called by uIP whenever a log message is generated. + */ +void uip_log(char *msg); + +/** + * The link level header length. + * + * This is the offset into the uip_buf where the IP header can be + * found. For Ethernet, this should be set to 14. For SLIP, this + * should be set to 0. + * + * \hideinitializer + */ +#ifdef UIP_CONF_LLH_LEN +#define UIP_LLH_LEN UIP_CONF_LLH_LEN +#else /* UIP_CONF_LLH_LEN */ +#define UIP_LLH_LEN 14 +#endif /* UIP_CONF_LLH_LEN */ + +/** @} */ +/*------------------------------------------------------------------------------*/ +/** + * \name CPU architecture configuration + * @{ + * + * The CPU architecture configuration is where the endianess of the + * CPU on which uIP is to be run is specified. Most CPUs today are + * little endian, and the most notable exception are the Motorolas + * which are big endian. The BYTE_ORDER macro should be changed to + * reflect the CPU architecture on which uIP is to be run. + */ + +/** + * The byte order of the CPU architecture on which uIP is to be run. + * + * This option can be either BIG_ENDIAN (Motorola byte order) or + * LITTLE_ENDIAN (Intel byte order). + * + * \hideinitializer + */ +#ifdef UIP_CONF_BYTE_ORDER +#define UIP_BYTE_ORDER UIP_CONF_BYTE_ORDER +#else /* UIP_CONF_BYTE_ORDER */ +#define UIP_BYTE_ORDER UIP_LITTLE_ENDIAN +#endif /* UIP_CONF_BYTE_ORDER */ + +/** @} */ +/*------------------------------------------------------------------------------*/ + +/** + * \name Appication specific configurations + * @{ + * + * An uIP application is implemented using a single application + * function that is called by uIP whenever a TCP/IP event occurs. The + * name of this function must be registered with uIP at compile time + * using the UIP_APPCALL definition. + * + * uIP applications can store the application state within the + * uip_conn structure by specifying the type of the application + * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t. + * + * The file containing the definitions must be included in the + * uipopt.h file. + * + * The following example illustrates how this can look. + \code + +void httpd_appcall(void); +#define UIP_APPCALL httpd_appcall + +struct httpd_state { + u8_t state; + u16_t count; + char *dataptr; + char *script; +}; +typedef struct httpd_state uip_tcp_appstate_t + \endcode + */ + +/** + * \var #define UIP_APPCALL + * + * The name of the application function that uIP should call in + * response to TCP/IP events. + * + */ + +/** + * \var typedef uip_tcp_appstate_t + * + * The type of the application state that is to be stored in the + * uip_conn structure. This usually is typedef:ed to a struct holding + * application state information. + */ + +/** + * \var typedef uip_udp_appstate_t + * + * The type of the application state that is to be stored in the + * uip_conn structure. This usually is typedef:ed to a struct holding + * application state information. + */ +/** @} */ +/** @} */ + +#endif /* __UIPOPT_H__ */ diff --git a/STM32F4/libraries/arduino_uip/utility/util.h b/STM32F4/libraries/arduino_uip/utility/util.h new file mode 100644 index 0000000..5042e82 --- /dev/null +++ b/STM32F4/libraries/arduino_uip/utility/util.h @@ -0,0 +1,13 @@ +#ifndef UTIL_H +#define UTIL_H + +#define htons(x) ( ((x)<<8) | (((x)>>8)&0xFF) ) +#define ntohs(x) htons(x) + +#define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \ + ((x)<< 8 & 0x00FF0000UL) | \ + ((x)>> 8 & 0x0000FF00UL) | \ + ((x)>>24 & 0x000000FFUL) ) +#define ntohl(x) htonl(x) + +#endif diff --git a/STM32F4/variants/discovery_f407/discovery_f4.cpp b/STM32F4/variants/discovery_f407/discovery_f4.cpp index c508fa3..6f1b453 100644 --- a/STM32F4/variants/discovery_f407/discovery_f4.cpp +++ b/STM32F4/variants/discovery_f407/discovery_f4.cpp @@ -61,9 +61,19 @@ void boardInit(void) { gpio_set_af_mode(GPIOB, 0, 2); gpio_set_af_mode(GPIOB, 1, 2); - //gpio_set_af_mode(GPIOA, 2, 7); //gpio_set_af_mode(GPIOA, 3, 7); + +#ifdef ARDUINO_STM32F4_NETDUINO2PLUS + // PA8 Output the Master Clock MCO1 + gpio_set_af_mode(GPIOA, 8, 0); + // PB4 as alternate MISO Input + gpio_set_af_mode(GPIOB, 4, 5); + // PA5 as alternate SCK Output + gpio_set_af_mode(GPIOA, 5, 5); + // PA7 as alternate MOSI Output + gpio_set_af_mode(GPIOA, 7, 5); +#endif return; } diff --git a/STM32F4/variants/discovery_f407/discovery_f4.h b/STM32F4/variants/discovery_f407/discovery_f4.h index c1f2384..d7bb679 100644 --- a/STM32F4/variants/discovery_f407/discovery_f4.h +++ b/STM32F4/variants/discovery_f407/discovery_f4.h @@ -63,9 +63,17 @@ #define BOARD_UART5_RX_PIN Port2Pin('D', 2) #define BOARD_NR_SPI 3 +#ifdef ARDUINO_STM32F4_NETDUINO2PLUS +#define BOARD_SPI1_NSS_PIN Port2Pin('C', 8) +#else #define BOARD_SPI1_NSS_PIN Port2Pin('A', 4) +#endif #define BOARD_SPI1_MOSI_PIN Port2Pin('A', 7) +#ifdef ARDUINO_STM32F4_NETDUINO2PLUS +#define BOARD_SPI1_MISO_PIN Port2Pin('B', 4) +#else #define BOARD_SPI1_MISO_PIN Port2Pin('A', 6) +#endif #define BOARD_SPI1_SCK_PIN Port2Pin('A', 5) #define BOARD_SPI2_NSS_PIN Port2Pin('B',12) #define BOARD_SPI2_MOSI_PIN Port2Pin('B',15) @@ -76,7 +84,11 @@ #define BOARD_SPI3_MISO_PIN Port2Pin('B', 4) #define BOARD_SPI3_SCK_PIN Port2Pin('B', 3) +#ifdef ARDUINO_STM32F4_NETDUINO2PLUS +#define BOARD_SPI3B_NSS_PIN Port2Pin('B', 0) +#else #define BOARD_SPI3B_NSS_PIN Port2Pin('B', 8) +#endif #define BOARD_SPI3B_MOSI_PIN Port2Pin('C',12) #define BOARD_SPI3B_MISO_PIN Port2Pin('C',11) #define BOARD_SPI3B_SCK_PIN Port2Pin('C',10) From 70403109c50c495b41686bb55f504448056c5962 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Fri, 3 Jul 2015 21:31:50 +1000 Subject: [PATCH 60/96] Updated Linux install script so that it also adds the current user to the dialout group. Also removed duplicate copy of the Linux install script from drivers/linux --- drivers/linux/45-maple.rules | 5 ----- drivers/linux/install-udev-rules.sh | 13 ------------- tools/linux/install-udev-rules.sh | 10 ---------- 3 files changed, 28 deletions(-) delete mode 100644 drivers/linux/45-maple.rules delete mode 100755 drivers/linux/install-udev-rules.sh delete mode 100755 tools/linux/install-udev-rules.sh diff --git a/drivers/linux/45-maple.rules b/drivers/linux/45-maple.rules deleted file mode 100644 index d1bda5f..0000000 --- a/drivers/linux/45-maple.rules +++ /dev/null @@ -1,5 +0,0 @@ -ATTRS{idProduct}=="1001", ATTRS{idVendor}=="0110", MODE="664", GROUP="plugdev" -ATTRS{idProduct}=="1002", ATTRS{idVendor}=="0110", MODE="664", GROUP="plugdev" -ATTRS{idProduct}=="0003", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple" -ATTRS{idProduct}=="0004", ATTRS{idVendor}=="1eaf", MODE="664", GROUP="plugdev" SYMLINK+="maple" - diff --git a/drivers/linux/install-udev-rules.sh b/drivers/linux/install-udev-rules.sh deleted file mode 100755 index db4c45a..0000000 --- a/drivers/linux/install-udev-rules.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -if sudo [ -w /etc/udev/rules.d ]; then - echo "Copying Maple-specific udev rules..." - sudo cp -v 45-maple.rules /etc/udev/rules.d/45-maple.rules - sudo chown root:root /etc/udev/rules.d/45-maple.rules - sudo chmod 644 /etc/udev/rules.d/45-maple.rules - echo "Reloading udev rules" - sudo udevadm control --reload-rules -else - echo "Couldn't copy to /etc/udev/rules.d/; you probably have to run this script as root? Or your distribution of Linux doesn't include udev; try running the IDE itself as root." -fi - diff --git a/tools/linux/install-udev-rules.sh b/tools/linux/install-udev-rules.sh deleted file mode 100755 index df4a06d..0000000 --- a/tools/linux/install-udev-rules.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -if sudo [ -w /etc/udev/rules.d ]; then - echo "Copying Maple-specific udev rules..." - sudo cp -v 45-maple.rules /etc/udev/rules.d/45-maple.rules - sudo chown root:root /etc/udev/rules.d/45-maple.rules - sudo chmod 644 /etc/udev/rules.d/45-maple.rules -else - echo "Couldn't copy to /etc/udev/rules.d/; you probably have to run this script as root? Or your distribution of Linux doesn't include udev; try running the IDE itself as root." -fi From 8c327aca05d7bfac4835466084b217e8edc60029 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sat, 4 Jul 2015 10:15:44 +1000 Subject: [PATCH 61/96] Added OSX DFU binaries and changed the OSX maple-upload script to use them. (This saves users having to install dfu-util themselves, e.g. via Homebrew --- tools/macosx/dfu-util/dfu-prefix | Bin 0 -> 22756 bytes tools/macosx/dfu-util/dfu-suffix | Bin 0 -> 22756 bytes tools/macosx/dfu-util/dfu-util | Bin 0 -> 48052 bytes tools/macosx/maple_upload | 3 ++- 4 files changed, 2 insertions(+), 1 deletion(-) create mode 100755 tools/macosx/dfu-util/dfu-prefix create mode 100755 tools/macosx/dfu-util/dfu-suffix create mode 100755 tools/macosx/dfu-util/dfu-util diff --git a/tools/macosx/dfu-util/dfu-prefix b/tools/macosx/dfu-util/dfu-prefix new file mode 100755 index 0000000000000000000000000000000000000000..5cbb2354ad3f8aa36c2a826ffb09c2b33e69caa2 GIT binary patch literal 22756 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 E1aYHwl>h($ literal 0 HcmV?d00001 diff --git a/tools/macosx/dfu-util/dfu-suffix b/tools/macosx/dfu-util/dfu-suffix new file mode 100755 index 0000000000000000000000000000000000000000..d10eb1026fda012691839b52fc685429c6fafa1a GIT binary patch literal 22756 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 literal 0 HcmV?d00001 diff --git a/tools/macosx/maple_upload b/tools/macosx/maple_upload index 50d849d..e198adb 100755 --- a/tools/macosx/maple_upload +++ b/tools/macosx/maple_upload @@ -39,7 +39,8 @@ else dfuse_addr="" fi -DFU_UTIL=/usr/local/bin/dfu-util +#DFU_UTIL=/usr/local/bin/dfu-util +DFU_UTIL=${DIR}/dfu-util/dfu-util if [ ! -x ${DFU_UTIL} ]; then DFU_UTIL=/opt/local/bin/dfu-util fi From 25e81d7cf1ca92af770ae315999921a00de38304 Mon Sep 17 00:00:00 2001 From: Martin Ayotte Date: Fri, 3 Jul 2015 23:04:22 -0400 Subject: [PATCH 62/96] fix DNS issue caused by HTON macro weirdness on 32bits + fix inet_aton() --- STM32F4/libraries/arduino_uip/Dns.cpp | 3 +-- STM32F4/libraries/arduino_uip/utility/util.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/STM32F4/libraries/arduino_uip/Dns.cpp b/STM32F4/libraries/arduino_uip/Dns.cpp index 2b97fb7..d6d31bd 100644 --- a/STM32F4/libraries/arduino_uip/Dns.cpp +++ b/STM32F4/libraries/arduino_uip/Dns.cpp @@ -58,8 +58,7 @@ int DNSClient::inet_aton(const char* aIPAddrString, IPAddress& aResult) { // See if we've been given a valid IP address const char* p =aIPAddrString; - while (*p && - ( (*p == '.') || (*p >= '0') || (*p <= '9') )) + while (*p && ( (*p == '.') || ((*p >= '0') && (*p <= '9')) )) { p++; } diff --git a/STM32F4/libraries/arduino_uip/utility/util.h b/STM32F4/libraries/arduino_uip/utility/util.h index 5042e82..06f3cee 100644 --- a/STM32F4/libraries/arduino_uip/utility/util.h +++ b/STM32F4/libraries/arduino_uip/utility/util.h @@ -1,7 +1,7 @@ #ifndef UTIL_H #define UTIL_H -#define htons(x) ( ((x)<<8) | (((x)>>8)&0xFF) ) +#define htons(x) ( ((x)<< 8 & 0xFF00) | ((x)>> 8 & 0x00FF) ) #define ntohs(x) htons(x) #define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \ From 1d7a0bc21be0df9e3d8feeaee2bfa5b28f4f7b08 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sun, 5 Jul 2015 03:08:34 +1000 Subject: [PATCH 63/96] Fix issue with default SPI pin definitions in wirish.h being incorrect (as they were the pin definitions for AVR boards). wirish.h now uses the pin definitions defined in board.h for whatever variant is selected --- STM32F1/cores/maple/wirish.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/STM32F1/cores/maple/wirish.h b/STM32F1/cores/maple/wirish.h index c074528..a8264f2 100644 --- a/STM32F1/cores/maple/wirish.h +++ b/STM32F1/cores/maple/wirish.h @@ -74,11 +74,12 @@ #include -#warning these are just here to get SPI to compile they need to be changed and moved! -#define SS (1) -#define MOSI 2 -#define MISO 3 -#define SCK 4 + +#define SS BOARD_SPI1_NSS_PIN +#define MOSI BOARD_SPI1_MOSI_PIN +#define MISO BOARD_SPI1_MISO_PIN +#define SCK BOARD_SPI1_SCK_PIN + typedef unsigned int word; // typedef uint16 word;// definition from Arduino website, now appears to be incorrect for 32 bit devices From 3d51e8c5305ebe8f3bc532beb1ccf8ca4cdd68bf Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sun, 5 Jul 2015 11:06:32 +1000 Subject: [PATCH 64/96] Tidied up names of Maple boards in boards.txt menu names --- STM32F1/boards.txt | 6 +++--- STM32F1/platform.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/STM32F1/boards.txt b/STM32F1/boards.txt index 59e476e..77ff7ba 100644 --- a/STM32F1/boards.txt +++ b/STM32F1/boards.txt @@ -6,7 +6,7 @@ menu.bootloader_version=Bootloader version menu.upload_method=Upload method ############################################################## -mapleMini.name=LeafLabs Maple Mini Rev 2 to Flash +mapleMini.name=Maple Mini mapleMini.build.board=MAPLE_MINI mapleMini.build.core=maple @@ -37,7 +37,7 @@ mapleMini.menu.bootloader_version.bootloader20.upload.maximum_size=122880 mapleMini.menu.bootloader_version.bootloader20.upload.altID=2 ############################################################## -maple.name=LeafLabs Maple Rev 3+ to Flash +maple.name=Maple (Rev 3) maple.upload.tool=maple_upload maple.upload.protocol=maple_dfu @@ -60,7 +60,7 @@ maple.build.vect=VECT_TAB_ADDR=0x8005000 ############################################################## -mapleRET6.name=LeafLabs Maple RET6 to Flash +mapleRET6.name=Maple (RET6) mapleRET6.build.board=MAPLE_RET6 mapleRET6.build.core=maple diff --git a/STM32F1/platform.txt b/STM32F1/platform.txt index f9979c9..e9c518c 100644 --- a/STM32F1/platform.txt +++ b/STM32F1/platform.txt @@ -3,7 +3,7 @@ # For more info: # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification -name=STM32 Boards (stm32duino) +name=STM32 Boards (STM32duino.com) version=0.1.2 compiler.warning_flags=-w -DDEBUG_LEVEL=DEBUG_NONE From 6d18be66adccefea654060afa1fc46c7f468813e Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Sun, 5 Jul 2015 22:38:47 +1000 Subject: [PATCH 65/96] Move Timer ISR handlers from timer_f1.c to timer.c to resolve linker issue in which some ISR's were not being linked even though they were being used --- STM32F1/cores/maple/libmaple/timer.c | 100 ++++++++++++++++++++++++ STM32F1/cores/maple/libmaple/timer_f1.c | 95 ++-------------------- 2 files changed, 106 insertions(+), 89 deletions(-) diff --git a/STM32F1/cores/maple/libmaple/timer.c b/STM32F1/cores/maple/libmaple/timer.c index 3eb3bbd..3c01474 100644 --- a/STM32F1/cores/maple/libmaple/timer.c +++ b/STM32F1/cores/maple/libmaple/timer.c @@ -1,3 +1,4 @@ + /****************************************************************************** * The MIT License * @@ -410,3 +411,102 @@ static void enable_bas_gen_irq(timer_dev *dev) { } nvic_irq_enable(irq_num); } + + +/* Note. + * + * 2015/07/06 Roger Clark + * + * The IRQ handlers were initially in timer_f1.c however this seems to cause problems + * in which the compiler / linker doesn't always link all the required handlers. + * The work around was to move the handlers into this file + */ + +/* + * IRQ handlers + * + * Defer to the timer_private dispatch API. + * + * FIXME: The names of these handlers are inaccurate since XL-density + * devices came out. Update these to match the STM32F2 names, maybe + * using some weak symbol magic to preserve backwards compatibility if + * possible. Once that's done, we can just move the IRQ handlers into + * the top-level libmaple/timer.c, and there will be no need for this + * file. + */ + +void __irq_tim1_brk(void) { + dispatch_adv_brk(TIMER1); +#if STM32_HAVE_TIMER(9) + dispatch_tim_9_12(TIMER9); +#endif +} + +void __irq_tim1_up(void) { + dispatch_adv_up(TIMER1); +#if STM32_HAVE_TIMER(10) + dispatch_tim_10_11_13_14(TIMER10); +#endif +} + +void __irq_tim1_trg_com(void) { + dispatch_adv_trg_com(TIMER1); +#if STM32_HAVE_TIMER(11) + dispatch_tim_10_11_13_14(TIMER11); +#endif +} + +void __irq_tim1_cc(void) { + dispatch_adv_cc(TIMER1); +} + +void __irq_tim2(void) { + dispatch_general(TIMER2); +} + +void __irq_tim3(void) { + dispatch_general(TIMER3); +} + +void __irq_tim4(void) { + dispatch_general(TIMER4); +} + +#if defined(STM32_HIGH_DENSITY) || defined(STM32_XL_DENSITY) +void __irq_tim5(void) { + dispatch_general(TIMER5); +} + +void __irq_tim6(void) { + dispatch_basic(TIMER6); +} + +void __irq_tim7(void) { + dispatch_basic(TIMER7); +} + +void __irq_tim8_brk(void) { + dispatch_adv_brk(TIMER8); +#if STM32_HAVE_TIMER(12) + dispatch_tim_9_12(TIMER12); +#endif +} + +void __irq_tim8_up(void) { + dispatch_adv_up(TIMER8); +#if STM32_HAVE_TIMER(13) + dispatch_tim_10_11_13_14(TIMER13); +#endif +} + +void __irq_tim8_trg_com(void) { + dispatch_adv_trg_com(TIMER8); +#if STM32_HAVE_TIMER(14) + dispatch_tim_10_11_13_14(TIMER14); +#endif +} + +void __irq_tim8_cc(void) { + dispatch_adv_cc(TIMER8); +} +#endif /* defined(STM32_HIGH_DENSITY) || defined(STM32_XL_DENSITY) */ \ No newline at end of file diff --git a/STM32F1/cores/maple/libmaple/timer_f1.c b/STM32F1/cores/maple/libmaple/timer_f1.c index 8b9e976..d67cf3f 100644 --- a/STM32F1/cores/maple/libmaple/timer_f1.c +++ b/STM32F1/cores/maple/libmaple/timer_f1.c @@ -30,95 +30,12 @@ * @brief STM32F1 timer. */ -#include -#include -#include "timer_private.h" - /* - * IRQ handlers - * - * Defer to the timer_private dispatch API. - * - * FIXME: The names of these handlers are inaccurate since XL-density - * devices came out. Update these to match the STM32F2 names, maybe - * using some weak symbol magic to preserve backwards compatibility if - * possible. Once that's done, we can just move the IRQ handlers into - * the top-level libmaple/timer.c, and there will be no need for this - * file. + * 2015/07/06 + * Note. The IRQ handlers which were initially in this file have been moved to timer.c + * to resolve a linker issue in where some IRQ handlers were not being linked even though + * they were being used. + * This file has been retains for historical reasons, but can be moved at some time in the future + * when full testing of the code in the new location has been completed. */ -void __irq_tim1_brk(void) { - dispatch_adv_brk(TIMER1); -#if STM32_HAVE_TIMER(9) - dispatch_tim_9_12(TIMER9); -#endif -} - -void __irq_tim1_up(void) { - dispatch_adv_up(TIMER1); -#if STM32_HAVE_TIMER(10) - dispatch_tim_10_11_13_14(TIMER10); -#endif -} - -void __irq_tim1_trg_com(void) { - dispatch_adv_trg_com(TIMER1); -#if STM32_HAVE_TIMER(11) - dispatch_tim_10_11_13_14(TIMER11); -#endif -} - -void __irq_tim1_cc(void) { - dispatch_adv_cc(TIMER1); -} - -void __irq_tim2(void) { - dispatch_general(TIMER2); -} - -void __irq_tim3(void) { - dispatch_general(TIMER3); -} - -void __irq_tim4(void) { - dispatch_general(TIMER4); -} - -#if defined(STM32_HIGH_DENSITY) || defined(STM32_XL_DENSITY) -void __irq_tim5(void) { - dispatch_general(TIMER5); -} - -void __irq_tim6(void) { - dispatch_basic(TIMER6); -} - -void __irq_tim7(void) { - dispatch_basic(TIMER7); -} - -void __irq_tim8_brk(void) { - dispatch_adv_brk(TIMER8); -#if STM32_HAVE_TIMER(12) - dispatch_tim_9_12(TIMER12); -#endif -} - -void __irq_tim8_up(void) { - dispatch_adv_up(TIMER8); -#if STM32_HAVE_TIMER(13) - dispatch_tim_10_11_13_14(TIMER13); -#endif -} - -void __irq_tim8_trg_com(void) { - dispatch_adv_trg_com(TIMER8); -#if STM32_HAVE_TIMER(14) - dispatch_tim_10_11_13_14(TIMER14); -#endif -} - -void __irq_tim8_cc(void) { - dispatch_adv_cc(TIMER8); -} -#endif /* defined(STM32_HIGH_DENSITY) || defined(STM32_XL_DENSITY) */ From d5dbdb685cd21518a98eba4dd131f25adda25e83 Mon Sep 17 00:00:00 2001 From: Martin Ayotte Date: Sun, 5 Jul 2015 10:15:33 -0400 Subject: [PATCH 66/96] fix HardwareSerial::begin by doing gpio_set_af_mode AF8 when devices are UART4 or UART5 --- STM32F4/cores/maple/libmaple/HardwareSerial.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/STM32F4/cores/maple/libmaple/HardwareSerial.cpp b/STM32F4/cores/maple/libmaple/HardwareSerial.cpp index a156770..f6fdcbb 100644 --- a/STM32F4/cores/maple/libmaple/HardwareSerial.cpp +++ b/STM32F4/cores/maple/libmaple/HardwareSerial.cpp @@ -94,8 +94,14 @@ void HardwareSerial::begin(uint32 baud) { const stm32_pin_info *rxi = &PIN_MAP[rx_pin]; #ifdef STM32F2 // int af = 7<<8; - gpio_set_af_mode(txi->gpio_device, txi->gpio_bit, 7); - gpio_set_af_mode(rxi->gpio_device, rxi->gpio_bit, 7); + if (usart_device == UART4 || usart_device == UART5) { + gpio_set_af_mode(txi->gpio_device, txi->gpio_bit, 8); + gpio_set_af_mode(rxi->gpio_device, rxi->gpio_bit, 8); + } + else { + gpio_set_af_mode(txi->gpio_device, txi->gpio_bit, 7); + gpio_set_af_mode(rxi->gpio_device, rxi->gpio_bit, 7); + } gpio_set_mode(txi->gpio_device, txi->gpio_bit, (gpio_pin_mode)(GPIO_AF_OUTPUT_PP | GPIO_PUPD_INPUT_PU | 0x700)); gpio_set_mode(rxi->gpio_device, rxi->gpio_bit, (gpio_pin_mode)(GPIO_MODE_AF | GPIO_PUPD_INPUT_PU | 0x700)); //gpio_set_mode(txi->gpio_device, txi->gpio_bit, (gpio_pin_mode)(GPIO_PUPD_INPUT_PU)); From 09fbe056625f1d015ff434474187fca8b6c0cc48 Mon Sep 17 00:00:00 2001 From: Martin Ayotte Date: Sun, 5 Jul 2015 17:13:01 -0400 Subject: [PATCH 67/96] fix Debugging print when different SPI is used --- STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp b/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp index 557e5a0..1b6b189 100644 --- a/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp +++ b/STM32F4/libraries/arduino_uip/utility/Enc28J60Network.cpp @@ -74,13 +74,13 @@ void Enc28J60Network::init(uint8_t* macaddr) #ifdef ENC28J60DEBUG Serial.println("ENC28J60::initialize / after initSPI()"); Serial.print("ENC28J60::initialize / csPin = "); - Serial.println(ENC28J60_CONTROL_CS); + Serial.println(SPI.nssPin()); Serial.print("ENC28J60::initialize / miso = "); - Serial.println(BOARD_SPI1_MISO_PIN); + Serial.println(SPI.misoPin()); Serial.print("ENC28J60::initialize / mosi = "); - Serial.println(BOARD_SPI1_MOSI_PIN); + Serial.println(SPI.mosiPin()); Serial.print("ENC28J60::initialize / sck = "); - Serial.println(BOARD_SPI1_SCK_PIN); + Serial.println(SPI.sckPin()); #endif selectPin = ENC28J60_CONTROL_CS; pinMode(selectPin, OUTPUT); From 58a5799ace056f78fb007413be3bb9cc11b5e1e0 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Mon, 6 Jul 2015 09:23:01 +1000 Subject: [PATCH 68/96] Added linux install file missing after previous name change to this file --- tools/linux/install.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 tools/linux/install.sh diff --git a/tools/linux/install.sh b/tools/linux/install.sh new file mode 100755 index 0000000..32870a1 --- /dev/null +++ b/tools/linux/install.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +if sudo [ -w /etc/udev/rules.d ]; then + echo "Copying Maple-specific udev rules..." + sudo cp -v 45-maple.rules /etc/udev/rules.d/45-maple.rules + sudo chown root:root /etc/udev/rules.d/45-maple.rules + sudo chmod 644 /etc/udev/rules.d/45-maple.rules + echo "Reloading udev rules" + sudo udevadm control --reload-rules + echo "Adding current user to dialout group" + sudo adduser $USER dialout +else + echo "Couldn't copy to /etc/udev/rules.d/; you probably have to run this script as root? Or your distribution of Linux doesn't include udev; try running the IDE itself as root." +fi + From 2e13a1d57eb2b40e949e2fbbf7c769ad4c2a9ac1 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Tue, 7 Jul 2015 07:27:09 +1000 Subject: [PATCH 69/96] Initial attempt at SPI setModule - but it doesn't seem to work for SPI2 etc, even when not using setModule to select the SPI channel, when I tested with a VS1053 board attached to SPI2 and SD on SPI1 --- STM32F1/libraries/SPI/src/SPI.cpp | 143 +++++++++++++----------------- STM32F1/libraries/SPI/src/SPI.h | 15 +++- 2 files changed, 74 insertions(+), 84 deletions(-) diff --git a/STM32F1/libraries/SPI/src/SPI.cpp b/STM32F1/libraries/SPI/src/SPI.cpp index c394c8a..ef07963 100644 --- a/STM32F1/libraries/SPI/src/SPI.cpp +++ b/STM32F1/libraries/SPI/src/SPI.cpp @@ -91,30 +91,29 @@ static const spi_pins board_spi_pins[] __FLASH__ = { */ SPIClass::SPIClass(uint32 spi_num) { + + _currentSetting=&_settings[spi_num]; switch (spi_num) { #if BOARD_NR_SPI >= 1 case 1: - this->spi_d = SPI1; + _currentSetting->spi_d = SPI1; break; #endif #if BOARD_NR_SPI >= 2 case 2: - this->spi_d = SPI2; + _currentSetting->spi_d = SPI2; break; #endif #if BOARD_NR_SPI >= 3 case 3: - this->spi_d = SPI3; + _currentSetting->spi_d = SPI3; break; #endif default: ASSERT(0); } - - bitOrder=MSBFIRST; -//pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT); - + //pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT); } /* @@ -123,45 +122,45 @@ SPIClass::SPIClass(uint32 spi_num) { void SPIClass::begin(void) { - uint32 flags = ((bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE | SPI_SOFT_SS); - spi_init(spi_d); - configure_gpios(spi_d, 1); + uint32 flags = ((_currentSetting->bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE | SPI_SOFT_SS); + spi_init(_currentSetting->spi_d); + configure_gpios(_currentSetting->spi_d, 1); #ifdef SPI_DEBUG - Serial.print("spi_master_enable("); Serial.print(clockDivider); Serial.print(","); Serial.print(dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); + Serial.print("spi_master_enable("); Serial.print(_currentSetting->clock); Serial.print(","); Serial.print(_currentSetting->dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); #endif - spi_master_enable(spi_d, (spi_baud_rate)clockDivider, (spi_mode)dataMode, flags); + spi_master_enable(_currentSetting->spi_d, (spi_baud_rate)_currentSetting->clock, (spi_mode)_currentSetting->dataMode, flags); } void SPIClass::beginSlave(void) { - if (dataMode >= 4) { + if (_currentSetting->dataMode >= 4) { ASSERT(0); return; } - uint32 flags = ((bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE); - spi_init(spi_d); - configure_gpios(spi_d, 0); + uint32 flags = ((_currentSetting->bitOrder == MSBFIRST ? SPI_FRAME_MSB : SPI_FRAME_LSB) | SPI_DFF_8_BIT | SPI_SW_SLAVE); + spi_init(_currentSetting->spi_d); + configure_gpios(_currentSetting->spi_d, 0); #ifdef SPI_DEBUG - Serial.print("spi_slave_enable("); Serial.print(dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); + Serial.print("spi_slave_enable("); Serial.print(_currentSetting->dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); #endif - spi_slave_enable(spi_d, (spi_mode)dataMode, flags); + spi_slave_enable(_currentSetting->spi_d, (spi_mode)_currentSetting->dataMode, flags); } void SPIClass::end(void) { - if (!spi_is_enabled(this->spi_d)) { + if (!spi_is_enabled(_currentSetting->spi_d)) { return; } // Follows RM0008's sequence for disabling a SPI in master/slave // full duplex mode. - while (spi_is_rx_nonempty(this->spi_d)) { + while (spi_is_rx_nonempty(_currentSetting->spi_d)) { // FIXME [0.1.0] remove this once you have an interrupt based driver - volatile uint16 rx __attribute__((unused)) = spi_rx_reg(this->spi_d); + volatile uint16 rx __attribute__((unused)) = spi_rx_reg(_currentSetting->spi_d); } - while (!spi_is_tx_empty(this->spi_d)) + while (!spi_is_tx_empty(_currentSetting->spi_d)) ; - while (spi_is_busy(this->spi_d)) + while (spi_is_busy(_currentSetting->spi_d)) ; - spi_peripheral_disable(this->spi_d); + spi_peripheral_disable(_currentSetting->spi_d); } /* Roger Clark added 3 functions */ @@ -170,7 +169,7 @@ void SPIClass::setClockDivider(uint32_t clockDivider) #ifdef SPI_DEBUG Serial.print("Clock divider set to "); Serial.println(clockDivider); #endif - this->clockDivider = clockDivider; + _currentSetting->clock = clockDivider; this->begin(); } @@ -179,7 +178,7 @@ void SPIClass::setBitOrder(BitOrder bitOrder) #ifdef SPI_DEBUG Serial.print("Bit order set to "); Serial.println(bitOrder); #endif - this->bitOrder = bitOrder; + _currentSetting->bitOrder = bitOrder; this->begin(); } @@ -189,11 +188,11 @@ void SPIClass::setBitOrder(BitOrder bitOrder) */ void SPIClass::setDataSize(uint32 datasize) { - uint32 cr1 = this->spi_d->regs->CR1; + uint32 cr1 = _currentSetting->spi_d->regs->CR1; datasize &= SPI_CR1_DFF; cr1 &= ~(SPI_CR1_DFF); cr1 |= datasize; - this->spi_d->regs->CR1 = cr1; + _currentSetting->spi_d->regs->CR1 = cr1; } void SPIClass::setDataMode(uint8_t dataMode) @@ -228,7 +227,7 @@ If someone finds this is not the case or sees a logic error with this let me kno #ifdef SPI_DEBUG Serial.print("Data mode set to "); Serial.println(dataMode); #endif - this->dataMode = dataMode; + _currentSetting->dataMode = dataMode; this->begin(); } @@ -243,29 +242,9 @@ void SPIClass::beginTransaction(uint8_t pin, SPISettings settings) //digitalWrite(_SSPin,LOW); setBitOrder(settings.bitOrder); setDataMode(settings.dataMode); - setClockDivider(determine_baud_rate(spi_d, settings.clock)); + setClockDivider(determine_baud_rate(_currentSetting->spi_d, settings.clock)); begin(); -#if 0 -// code from SAM core - uint8_t mode = interruptMode; - if (mode > 0) { - if (mode < 16) { - if (mode & 1) PIOA->PIO_IDR = interruptMask[0]; - if (mode & 2) PIOB->PIO_IDR = interruptMask[1]; - if (mode & 4) PIOC->PIO_IDR = interruptMask[2]; - if (mode & 8) PIOD->PIO_IDR = interruptMask[3]; - } else { - interruptSave = interruptsStatus(); - noInterrupts(); - } - } - uint32_t ch = BOARD_PIN_TO_SPI_CHANNEL(pin); - bitOrder[ch] = settings.border; - SPI_ConfigureNPCS(spi, ch, settings.config); - //setBitOrder(pin, settings.border); - //setDataMode(pin, settings.datamode); - //setClockDivider(pin, settings.clockdiv); -#endif + } void SPIClass::endTransaction(void) @@ -304,9 +283,9 @@ uint8 SPIClass::read(void) { void SPIClass::read(uint8 *buf, uint32 len) { uint32 rxed = 0; while (rxed < len) { - while (!spi_is_rx_nonempty(this->spi_d)) + while (!spi_is_rx_nonempty(_currentSetting->spi_d)) ; - buf[rxed++] = (uint8)spi_rx_reg(this->spi_d); + buf[rxed++] = (uint8)spi_rx_reg(_currentSetting->spi_d); } } @@ -319,9 +298,9 @@ void SPIClass::write(uint16 data) { * This almost doubles the speed of this function. */ - spi_tx_reg(this->spi_d, data); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." - while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." - while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + spi_tx_reg(_currentSetting->spi_d, data); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." + while (spi_is_tx_empty(_currentSetting->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(_currentSetting->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." } //void SPIClass::write(uint8 byte) { @@ -333,27 +312,27 @@ void SPIClass::write(uint16 data) { * This almost doubles the speed of this function. */ -// spi_tx_reg(this->spi_d, byte); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." -// while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." -// while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." +// spi_tx_reg(_currentSetting->spi_d, byte); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." +// while (spi_is_tx_empty(_currentSetting->spi_d) == 0); // "5. Wait until TXE=1 ..." +// while (spi_is_busy(_currentSetting->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." //} void SPIClass::write(const uint8 *data, uint32 length) { uint32 txed = 0; while (txed < length) { - txed += spi_tx(this->spi_d, data + txed, length - txed); + txed += spi_tx(_currentSetting->spi_d, data + txed, length - txed); } - while (spi_is_tx_empty(this->spi_d) == 0); // "4. After writing the last data item into the SPI_DR register, wait until TXE=1 ..." - while (spi_is_busy(this->spi_d) != 0); // "... then wait until BSY=0, this indicates that the transmission of the last data is complete." + while (spi_is_tx_empty(_currentSetting->spi_d) == 0); // "4. After writing the last data item into the SPI_DR register, wait until TXE=1 ..." + while (spi_is_busy(_currentSetting->spi_d) != 0); // "... then wait until BSY=0, this indicates that the transmission of the last data is complete." } uint8 SPIClass::transfer(uint8 byte) const { uint8 b; - spi_tx_reg(this->spi_d, byte); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." - while (spi_is_rx_nonempty(this->spi_d) == 0); // "4. Wait until RXNE=1 ..." - b = spi_rx_reg(this->spi_d); // "... and read the last received data." - while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." - while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + spi_tx_reg(_currentSetting->spi_d, byte); // "2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE flag)." + while (spi_is_rx_nonempty(_currentSetting->spi_d) == 0); // "4. Wait until RXNE=1 ..." + b = spi_rx_reg(_currentSetting->spi_d); // "... and read the last received data." + while (spi_is_tx_empty(_currentSetting->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(_currentSetting->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." return b; } /* Roger Clark and Victor Perez, 2015 @@ -365,7 +344,7 @@ uint8 SPIClass::transfer(uint8 byte) const { uint8 SPIClass::dmaTransfer(uint8 *transmitBuf, uint8 *receiveBuf, uint16 length) { if (length == 0) return 0; uint8 b; - if (spi_is_rx_nonempty(this->spi_d) == 1) b = spi_rx_reg(this->spi_d); //Clear the RX buffer in case a byte is waiting on it. + if (spi_is_rx_nonempty(_currentSetting->spi_d) == 1) b = spi_rx_reg(_currentSetting->spi_d); //Clear the RX buffer in case a byte is waiting on it. dma1_ch3_Active=true; dma_init(DMA1); dma_attach_interrupt(DMA1, DMA_CH3, &SPIClass::DMA1_CH3_Event); @@ -405,8 +384,8 @@ uint8 SPIClass::dmaTransfer(uint8 *transmitBuf, uint8 *receiveBuf, uint16 length } // } - while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." - while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + while (spi_is_tx_empty(_currentSetting->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(_currentSetting->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." dma_disable(DMA1, DMA_CH3); dma_disable(DMA1, DMA_CH2); spi_rx_dma_disable(SPI1); @@ -435,10 +414,10 @@ uint8 SPIClass::dmaSend(uint8 *transmitBuf, uint16 length, bool minc) { dma_enable(DMA1, DMA_CH3);// enable transmit while (dma1_ch3_Active); - while (spi_is_rx_nonempty(this->spi_d) == 0); // "4. Wait until RXNE=1 ..." - b = spi_rx_reg(this->spi_d); // "... and read the last received data." - while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." - while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + while (spi_is_rx_nonempty(_currentSetting->spi_d) == 0); // "4. Wait until RXNE=1 ..." + b = spi_rx_reg(_currentSetting->spi_d); // "... and read the last received data." + while (spi_is_tx_empty(_currentSetting->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(_currentSetting->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." dma_disable(DMA1, DMA_CH3); spi_tx_dma_disable(SPI1); return b; @@ -460,10 +439,10 @@ uint8 SPIClass::dmaSend(uint16 *transmitBuf, uint16 length, bool minc) { dma_enable(DMA1, DMA_CH3);// enable transmit while (dma1_ch3_Active); - while (spi_is_rx_nonempty(this->spi_d) == 0); // "4. Wait until RXNE=1 ..." - b = spi_rx_reg(this->spi_d); // "... and read the last received data." - while (spi_is_tx_empty(this->spi_d) == 0); // "5. Wait until TXE=1 ..." - while (spi_is_busy(this->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." + while (spi_is_rx_nonempty(_currentSetting->spi_d) == 0); // "4. Wait until RXNE=1 ..." + b = spi_rx_reg(_currentSetting->spi_d); // "... and read the last received data." + while (spi_is_tx_empty(_currentSetting->spi_d) == 0); // "5. Wait until TXE=1 ..." + while (spi_is_busy(_currentSetting->spi_d) != 0); // "... and then wait until BSY=0 before disabling the SPI." dma_disable(DMA1, DMA_CH3); spi_tx_dma_disable(SPI1); return b; @@ -483,19 +462,19 @@ void SPIClass::detachInterrupt(void) { */ uint8 SPIClass::misoPin(void) { - return dev_to_spi_pins(this->spi_d)->miso; + return dev_to_spi_pins(_currentSetting->spi_d)->miso; } uint8 SPIClass::mosiPin(void) { - return dev_to_spi_pins(this->spi_d)->mosi; + return dev_to_spi_pins(_currentSetting->spi_d)->mosi; } uint8 SPIClass::sckPin(void) { - return dev_to_spi_pins(this->spi_d)->sck; + return dev_to_spi_pins(_currentSetting->spi_d)->sck; } uint8 SPIClass::nssPin(void) { - return dev_to_spi_pins(this->spi_d)->nss; + return dev_to_spi_pins(_currentSetting->spi_d)->nss; } /* diff --git a/STM32F1/libraries/SPI/src/SPI.h b/STM32F1/libraries/SPI/src/SPI.h index 490d58b..0c05b62 100644 --- a/STM32F1/libraries/SPI/src/SPI.h +++ b/STM32F1/libraries/SPI/src/SPI.h @@ -118,6 +118,11 @@ private: uint32_t clock; BitOrder bitOrder; uint8_t dataMode; + + spi_dev *spi_d; + uint8_t _SSPin; + //uint32_t clockDivider; + friend class SPIClass; }; @@ -304,7 +309,7 @@ public: * @brief Get a pointer to the underlying libmaple spi_dev for * this HardwareSPI instance. */ - spi_dev* c_dev(void) { return this->spi_d; } + spi_dev* c_dev(void) { return _currentSetting->spi_d; } /* -- The following methods are deprecated --------------------------- */ @@ -338,7 +343,7 @@ public: */ uint8 recv(void); - spi_dev *dev(){ return spi_d;} + spi_dev *dev(){ return _currentSetting->spi_d;} @@ -351,11 +356,17 @@ private: // To Do. Need to wait for } + + SPISettings _settings[BOARD_NR_SPI]; + SPISettings *_currentSetting; + + /* spi_dev *spi_d; uint8_t _SSPin; uint32_t clockDivider; uint8_t dataMode; BitOrder bitOrder; + */ }; From 20a921429189da4c22dc400ebb258eff3c0c5494 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Tue, 7 Jul 2015 20:59:33 +1000 Subject: [PATCH 70/96] Some fixes. Works for SD example SPI 1, not tested with anything else. setModule not tested --- STM32F1/libraries/SPI/src/SPI.cpp | 18 ++++++++++++++---- STM32F1/libraries/SPI/src/SPI.h | 7 +++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/STM32F1/libraries/SPI/src/SPI.cpp b/STM32F1/libraries/SPI/src/SPI.cpp index ef07963..e098d43 100644 --- a/STM32F1/libraries/SPI/src/SPI.cpp +++ b/STM32F1/libraries/SPI/src/SPI.cpp @@ -92,7 +92,9 @@ static const spi_pins board_spi_pins[] __FLASH__ = { SPIClass::SPIClass(uint32 spi_num) { - _currentSetting=&_settings[spi_num]; + _currentSetting=&_settings[spi_num-1];// SPI channels are called 1 2 and 3 but the array is zero indexed + + switch (spi_num) { #if BOARD_NR_SPI >= 1 case 1: @@ -113,6 +115,14 @@ SPIClass::SPIClass(uint32 spi_num) { ASSERT(0); } + // Hack to set the clock divider. + // This should really be done in the SPISetting + _settings[0].clockDivider = determine_baud_rate(_settings[0].spi_d, _settings[0].clock); + _settings[1].clockDivider = determine_baud_rate(_settings[1].spi_d, _settings[1].clock); +#if BOARD_NR_SPI >= 3 + _settings[2].clockDivider = determine_baud_rate(_settings[2].spi_d, _settings[2].clock); +#endif + //pinMode(BOARD_SPI_DEFAULT_SS,OUTPUT); } @@ -126,9 +136,9 @@ void SPIClass::begin(void) { spi_init(_currentSetting->spi_d); configure_gpios(_currentSetting->spi_d, 1); #ifdef SPI_DEBUG - Serial.print("spi_master_enable("); Serial.print(_currentSetting->clock); Serial.print(","); Serial.print(_currentSetting->dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); + Serial.print("spi_master_enable("); Serial.print(_currentSetting->clockDivider); Serial.print(","); Serial.print(_currentSetting->dataMode); Serial.print(","); Serial.print(flags); Serial.println(")"); #endif - spi_master_enable(_currentSetting->spi_d, (spi_baud_rate)_currentSetting->clock, (spi_mode)_currentSetting->dataMode, flags); + spi_master_enable(_currentSetting->spi_d, (spi_baud_rate)_currentSetting->clockDivider, (spi_mode)_currentSetting->dataMode, flags); } void SPIClass::beginSlave(void) { @@ -169,7 +179,7 @@ void SPIClass::setClockDivider(uint32_t clockDivider) #ifdef SPI_DEBUG Serial.print("Clock divider set to "); Serial.println(clockDivider); #endif - _currentSetting->clock = clockDivider; + _currentSetting->clockDivider = clockDivider; this->begin(); } diff --git a/STM32F1/libraries/SPI/src/SPI.h b/STM32F1/libraries/SPI/src/SPI.h index 0c05b62..0e69989 100644 --- a/STM32F1/libraries/SPI/src/SPI.h +++ b/STM32F1/libraries/SPI/src/SPI.h @@ -121,7 +121,7 @@ private: spi_dev *spi_d; uint8_t _SSPin; - //uint32_t clockDivider; + uint32_t clockDivider; friend class SPIClass; }; @@ -345,7 +345,10 @@ public: spi_dev *dev(){ return _currentSetting->spi_d;} - + void setModule(int spi_num) + { + _currentSetting=&_settings[spi_num-1];// SPI channels are called 1 2 and 3 but the array is zero indexed + } private: From fc50831843c3dcc928023bd4747f882ee08f7d7c Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Wed, 8 Jul 2015 11:14:57 +1000 Subject: [PATCH 71/96] Continued with SPI setModule - still doesnt work when I tried setModule(2); --- STM32F1/libraries/SPI/src/SPI.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/STM32F1/libraries/SPI/src/SPI.cpp b/STM32F1/libraries/SPI/src/SPI.cpp index e098d43..bb45682 100644 --- a/STM32F1/libraries/SPI/src/SPI.cpp +++ b/STM32F1/libraries/SPI/src/SPI.cpp @@ -115,11 +115,14 @@ SPIClass::SPIClass(uint32 spi_num) { ASSERT(0); } - // Hack to set the clock divider. - // This should really be done in the SPISetting + // Init things specific to each SPI device + // clock divider setup is a bit of hack, and needs to be improved at a later date. + _settings[0].spi_d = SPI1; _settings[0].clockDivider = determine_baud_rate(_settings[0].spi_d, _settings[0].clock); + _settings[1].spi_d = SPI2; _settings[1].clockDivider = determine_baud_rate(_settings[1].spi_d, _settings[1].clock); #if BOARD_NR_SPI >= 3 + _settings[2].spi_d = SPI3; _settings[2].clockDivider = determine_baud_rate(_settings[2].spi_d, _settings[2].clock); #endif From 176db5f9d047d625e3688a5421ef08550e3afe01 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Wed, 8 Jul 2015 15:14:25 +1000 Subject: [PATCH 72/96] Fix issue on OSX (and other platforms) where stm32flash only works if the serial device name starts with /dev/tty, as on OSX some serial devices start with /dev/cu. Also corrected mistake about .a file in stm32 parsers folder, and hopefully removed the .a file from source control --- .gitignore | 2 +- tools/macosx/stm32flash/stm32flash | Bin 69824 -> 70448 bytes .../stm32flash_serial/src/parsers/parsers.a | Bin 13844 -> 0 bytes .../src/stm32flash_serial/src/serial_posix.c | 18 +++++++++++++++++- 4 files changed, 18 insertions(+), 2 deletions(-) delete mode 100644 tools/src/stm32flash_serial/src/parsers/parsers.a diff --git a/.gitignore b/.gitignore index f685d48..05bb0a5 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,4 @@ other/maple-bootloader/cscope.out other/maple-bootloader/build other/maple-bootloader/*~ *.o -tools/src/stm32flash/src/parsers/parsers.a +tools/src/stm32flash_serial/src/parsers/parsers.a diff --git a/tools/macosx/stm32flash/stm32flash b/tools/macosx/stm32flash/stm32flash index 92fb6ba57874c5961afc9a392dd33570a0dbb4ae..ac8636e50e8f83effd39d4582dfb025de35cb30c 100755 GIT binary patch delta 17234 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 b`)TEU_3)wgP2^^(LumWOMjLk+Was|@hZMyr diff --git a/tools/src/stm32flash_serial/src/parsers/parsers.a b/tools/src/stm32flash_serial/src/parsers/parsers.a deleted file mode 100644 index ac1b71587ca3b139cc60022629ef526c53e98e5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13844 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 diff --git a/tools/src/stm32flash_serial/src/serial_posix.c b/tools/src/stm32flash_serial/src/serial_posix.c index 30b5ff8..7013436 100644 --- a/tools/src/stm32flash_serial/src/serial_posix.c +++ b/tools/src/stm32flash_serial/src/serial_posix.c @@ -198,18 +198,34 @@ static port_err_t serial_setup(serial_t *h, const serial_baud_t baud, return PORT_ERR_OK; } +/* + * Roger clark. + * This function is no longer used. But has just been commented out in case it needs + * to be reinstated in the future + static int startswith(const char *haystack, const char *needle) { return strncmp(haystack, needle, strlen(needle)) == 0; } +*/ static int is_tty(const char *path) { char resolved[PATH_MAX]; if(!realpath(path, resolved)) return 0; + + /* + * Roger Clark + * Commented out this check, because on OSX some devices are /dev/cu + * and some users use symbolic links to devices, hence the name may not even start + * with /dev + if(startswith(resolved, "/dev/tty")) return 1; - + return 0; + */ + + return 1; } static port_err_t serial_posix_open(struct port_interface *port, From e0d6307685ba70366919d91e8407a1100db635a8 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Wed, 8 Jul 2015 19:48:57 +1000 Subject: [PATCH 73/96] Built Linux binary and also changed printed message to indicate this is a special version built for Arduino STM32 --- tools/linux/stm32flash/stm32flash | Bin 89096 -> 88981 bytes tools/src/stm32flash_serial/src/main.c | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/linux/stm32flash/stm32flash b/tools/linux/stm32flash/stm32flash index 5370150ea1c51116d3d3f4504df53ace0854a8d5..16872bba61573f09112823df05c9f4bc61d2dabd 100755 GIT binary patch delta 11748 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 Date: Thu, 9 Jul 2015 12:47:33 +1200 Subject: [PATCH 74/96] Update PIN_MAP to allow PWM on PB9 --- STM32F1/variants/generic_stm32f103c/board.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/STM32F1/variants/generic_stm32f103c/board.cpp b/STM32F1/variants/generic_stm32f103c/board.cpp index d19d965..95ea65b 100644 --- a/STM32F1/variants/generic_stm32f103c/board.cpp +++ b/STM32F1/variants/generic_stm32f103c/board.cpp @@ -56,13 +56,13 @@ extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = { {GPIOA, TIMER2, ADC1, 0, 1, 0}, /* PA0 */ - {GPIOA, TIMER2, ADC1, 1, 2, 1}, /* PA1 */ + {GPIOA, TIMER2, ADC1, 1, 2, 1}, /* PA1 */ {GPIOA, TIMER2, ADC1, 2, 3, 2}, /* PA2 */ {GPIOA, TIMER2, ADC1, 3, 4, 3}, /* PA3 */ - {GPIOA, NULL, ADC1, 4, 0, 4}, /* PA4 */ - {GPIOA, NULL, ADC1, 5, 0, 5}, /* PA5 */ - {GPIOA, TIMER3, ADC1, 6, 1, 6}, /* PA6 */ - {GPIOA, TIMER3, ADC1, 7, 2, 7}, /* PA7 */ + {GPIOA, NULL, ADC1, 4, 0, 4}, /* PA4 */ + {GPIOA, NULL, ADC1, 5, 0, 5}, /* PA5 */ + {GPIOA, TIMER3, ADC1, 6, 1, 6}, /* PA6 */ + {GPIOA, TIMER3, ADC1, 7, 2, 7}, /* PA7 */ {GPIOA, TIMER1, NULL, 8, 1, ADCx}, /* PA8 */ {GPIOA, TIMER1, NULL, 9, 2, ADCx}, /* PA9 */ {GPIOA, TIMER1, NULL, 10, 3, ADCx}, /* PA10 */ @@ -81,7 +81,7 @@ extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] = { {GPIOB, TIMER4, NULL, 6, 1, ADCx}, /* PB6 */ {GPIOB, TIMER4, NULL, 7, 2, ADCx}, /* PB7 */ {GPIOB, TIMER4, NULL, 8, 3, ADCx}, /* PB8 */ - {GPIOB, NULL, NULL, 9, 0, ADCx}, /* PB9 */ + {GPIOB, TIMER4, NULL, 9, 4, ADCx}, /* PB9 */ {GPIOB, NULL, NULL, 10, 0, ADCx}, /* PB10 */ {GPIOB, NULL, NULL, 11, 0, ADCx}, /* PB11 */ {GPIOB, NULL, NULL, 12, 0, ADCx}, /* PB12 */ From 9056c639776d47067b6c8e6be861342ae02ed503 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Thu, 9 Jul 2015 20:09:11 +1000 Subject: [PATCH 75/96] Removed submodule dfu-util --- .gitmodules | 3 --- tools/src/dfu-util | 1 - 2 files changed, 4 deletions(-) delete mode 160000 tools/src/dfu-util diff --git a/.gitmodules b/.gitmodules index b70d76a..8376e59 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,9 +7,6 @@ [submodule "tools/src/texane-stlink"] path = tools/src/texane-stlink url = https://github.com/texane/stlink -[submodule "tools/src/dfu-util"] - path = tools/src/dfu-util - url = https://gitorious.org/dfu-util/dfu-util.git [submodule "STM32duino-bootloader"] path = STM32duino-bootloader url = https://github.com/rogerclarkmelbourne/STM32duino-bootloader.git diff --git a/tools/src/dfu-util b/tools/src/dfu-util deleted file mode 160000 index 604de4b..0000000 --- a/tools/src/dfu-util +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 604de4b1b39a16dbd57da5786d85ebd734cec339 From 8ab473457348990e7b72d9639712a2e0f763c321 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Thu, 9 Jul 2015 20:15:54 +1000 Subject: [PATCH 76/96] Add cached dfu-util sources, as the original remote repo is no longer available for use as the source to the dfu-util folder as a submodule --- tools/src/dfu-util/AUTHORS | 30 + tools/src/dfu-util/COPYING | 340 +++++++++ tools/src/dfu-util/ChangeLog | 93 +++ tools/src/dfu-util/DEVICES.txt | 20 + tools/src/dfu-util/Makefile.am | 3 + tools/src/dfu-util/README | 20 + tools/src/dfu-util/TODO | 14 + tools/src/dfu-util/autogen.sh | 2 + tools/src/dfu-util/configure.ac | 41 + tools/src/dfu-util/device-logs/README | 77 ++ tools/src/dfu-util/device-logs/dsonano.lsusb | 60 ++ tools/src/dfu-util/device-logs/lpclink.log | 59 ++ tools/src/dfu-util/device-logs/lpclink.lsusb | 58 ++ tools/src/dfu-util/device-logs/lpclink2.log | 59 ++ tools/src/dfu-util/device-logs/lpclink2.lsusb | 203 +++++ tools/src/dfu-util/device-logs/opc-20.lsusb | 60 ++ .../openmoko-freerunner-dfumode.lsusb | 109 +++ .../device-logs/openmoko-freerunner.lsusb | 179 +++++ .../device-logs/openmoko-neo1973.lsusb | 182 +++++ tools/src/dfu-util/device-logs/openpcd.lsusb | 60 ++ .../device-logs/qi-hardware-atusb.lsusb | 59 ++ tools/src/dfu-util/device-logs/simtrace.lsusb | 70 ++ .../src/dfu-util/device-logs/sparkcore.lsusb | 60 ++ .../device-logs/stm32f107.bin-download | 48 ++ .../src/dfu-util/device-logs/stm32f107.lsusb | 60 ++ .../device-logs/stm32f4discovery.bin-download | 36 + .../device-logs/stm32f4discovery.lsusb | 80 ++ .../dfu-util/device-logs/tdk-bluetooth.lsusb | 269 +++++++ tools/src/dfu-util/dfuse-pack.py | 121 +++ tools/src/dfu-util/doc/40-dfuse.rules | 4 + tools/src/dfu-util/doc/Makefile.am | 2 + tools/src/dfu-util/doc/SPEC-differences.txt | 21 + tools/src/dfu-util/doc/dfu-util.1 | 248 +++++++ tools/src/dfu-util/msvc/README_msvc.txt | 10 + .../src/dfu-util/msvc/dfu-suffix_2010.vcxproj | 100 +++ tools/src/dfu-util/msvc/dfu-util_2010.sln | 54 ++ tools/src/dfu-util/msvc/dfu-util_2010.vcxproj | 120 +++ tools/src/dfu-util/src/Makefile.am | 28 + tools/src/dfu-util/src/dfu.c | 357 +++++++++ tools/src/dfu-util/src/dfu.h | 133 ++++ tools/src/dfu-util/src/dfu_file.c | 444 +++++++++++ tools/src/dfu-util/src/dfu_file.h | 60 ++ tools/src/dfu-util/src/dfu_load.c | 196 +++++ tools/src/dfu-util/src/dfu_load.h | 7 + tools/src/dfu-util/src/dfu_util.c | 346 +++++++++ tools/src/dfu-util/src/dfu_util.h | 36 + tools/src/dfu-util/src/dfuse.c | 652 ++++++++++++++++ tools/src/dfu-util/src/dfuse.h | 35 + tools/src/dfu-util/src/dfuse_mem.c | 198 +++++ tools/src/dfu-util/src/dfuse_mem.h | 44 ++ tools/src/dfu-util/src/main.c | 699 ++++++++++++++++++ tools/src/dfu-util/src/portable.h | 72 ++ tools/src/dfu-util/src/prefix.c | 176 +++++ tools/src/dfu-util/src/quirks.c | 56 ++ tools/src/dfu-util/src/quirks.h | 27 + tools/src/dfu-util/src/suffix.c | 176 +++++ tools/src/dfu-util/src/usb_dfu.h | 99 +++ tools/src/dfu-util/www/build.html | 147 ++++ tools/src/dfu-util/www/dfu-util.1.html | 411 ++++++++++ tools/src/dfu-util/www/dfuse.html | 135 ++++ tools/src/dfu-util/www/index.html | 119 +++ tools/src/dfu-util/www/simple.css | 56 ++ 62 files changed, 7740 insertions(+) create mode 100755 tools/src/dfu-util/AUTHORS create mode 100755 tools/src/dfu-util/COPYING create mode 100755 tools/src/dfu-util/ChangeLog create mode 100755 tools/src/dfu-util/DEVICES.txt create mode 100755 tools/src/dfu-util/Makefile.am create mode 100755 tools/src/dfu-util/README create mode 100755 tools/src/dfu-util/TODO create mode 100755 tools/src/dfu-util/autogen.sh create mode 100755 tools/src/dfu-util/configure.ac create mode 100755 tools/src/dfu-util/device-logs/README create mode 100755 tools/src/dfu-util/device-logs/dsonano.lsusb create mode 100755 tools/src/dfu-util/device-logs/lpclink.log create mode 100755 tools/src/dfu-util/device-logs/lpclink.lsusb create mode 100755 tools/src/dfu-util/device-logs/lpclink2.log create mode 100755 tools/src/dfu-util/device-logs/lpclink2.lsusb create mode 100755 tools/src/dfu-util/device-logs/opc-20.lsusb create mode 100755 tools/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb create mode 100755 tools/src/dfu-util/device-logs/openmoko-freerunner.lsusb create mode 100755 tools/src/dfu-util/device-logs/openmoko-neo1973.lsusb create mode 100755 tools/src/dfu-util/device-logs/openpcd.lsusb create mode 100755 tools/src/dfu-util/device-logs/qi-hardware-atusb.lsusb create mode 100755 tools/src/dfu-util/device-logs/simtrace.lsusb create mode 100755 tools/src/dfu-util/device-logs/sparkcore.lsusb create mode 100755 tools/src/dfu-util/device-logs/stm32f107.bin-download create mode 100755 tools/src/dfu-util/device-logs/stm32f107.lsusb create mode 100755 tools/src/dfu-util/device-logs/stm32f4discovery.bin-download create mode 100755 tools/src/dfu-util/device-logs/stm32f4discovery.lsusb create mode 100755 tools/src/dfu-util/device-logs/tdk-bluetooth.lsusb create mode 100755 tools/src/dfu-util/dfuse-pack.py create mode 100755 tools/src/dfu-util/doc/40-dfuse.rules create mode 100755 tools/src/dfu-util/doc/Makefile.am create mode 100755 tools/src/dfu-util/doc/SPEC-differences.txt create mode 100755 tools/src/dfu-util/doc/dfu-util.1 create mode 100755 tools/src/dfu-util/msvc/README_msvc.txt create mode 100755 tools/src/dfu-util/msvc/dfu-suffix_2010.vcxproj create mode 100755 tools/src/dfu-util/msvc/dfu-util_2010.sln create mode 100755 tools/src/dfu-util/msvc/dfu-util_2010.vcxproj create mode 100755 tools/src/dfu-util/src/Makefile.am create mode 100755 tools/src/dfu-util/src/dfu.c create mode 100755 tools/src/dfu-util/src/dfu.h create mode 100755 tools/src/dfu-util/src/dfu_file.c create mode 100755 tools/src/dfu-util/src/dfu_file.h create mode 100755 tools/src/dfu-util/src/dfu_load.c create mode 100755 tools/src/dfu-util/src/dfu_load.h create mode 100755 tools/src/dfu-util/src/dfu_util.c create mode 100755 tools/src/dfu-util/src/dfu_util.h create mode 100755 tools/src/dfu-util/src/dfuse.c create mode 100755 tools/src/dfu-util/src/dfuse.h create mode 100755 tools/src/dfu-util/src/dfuse_mem.c create mode 100755 tools/src/dfu-util/src/dfuse_mem.h create mode 100755 tools/src/dfu-util/src/main.c create mode 100755 tools/src/dfu-util/src/portable.h create mode 100755 tools/src/dfu-util/src/prefix.c create mode 100755 tools/src/dfu-util/src/quirks.c create mode 100755 tools/src/dfu-util/src/quirks.h create mode 100755 tools/src/dfu-util/src/suffix.c create mode 100755 tools/src/dfu-util/src/usb_dfu.h create mode 100755 tools/src/dfu-util/www/build.html create mode 100755 tools/src/dfu-util/www/dfu-util.1.html create mode 100755 tools/src/dfu-util/www/dfuse.html create mode 100755 tools/src/dfu-util/www/index.html create mode 100755 tools/src/dfu-util/www/simple.css diff --git a/tools/src/dfu-util/AUTHORS b/tools/src/dfu-util/AUTHORS new file mode 100755 index 0000000..bc16c9c --- /dev/null +++ b/tools/src/dfu-util/AUTHORS @@ -0,0 +1,30 @@ +Authors ordered by first contribution. + +Harald Welte +Werner Almesberger +Michael Lauer +Jim Huang +Stefan Schmidt +Daniel Willmann +Mike Frysinger +Uwe Hermann +C. Scott Ananian +Bernard Blackham +Holger Freyther +Marc Singer +James Perkins +Tommi Keisala +Pascal Schweizer +Bradley Scott +Uwe Bonnes +Andrey Smirnov +Jussi Timperi +Hans Petter Selasky +Bo Shen +Henrique de Almeida Mendonca +Bernd Krumboeck +Dennis Meier +Veli-Pekka Peltola +Dave Hylands +Michael Grzeschik +Paul Fertser diff --git a/tools/src/dfu-util/COPYING b/tools/src/dfu-util/COPYING new file mode 100755 index 0000000..fbdd65f --- /dev/null +++ b/tools/src/dfu-util/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/tools/src/dfu-util/ChangeLog b/tools/src/dfu-util/ChangeLog new file mode 100755 index 0000000..35a1da7 --- /dev/null +++ b/tools/src/dfu-util/ChangeLog @@ -0,0 +1,93 @@ +0.8: + o New, separate dfu-prefix tool (Uwe Bonnes) + o Allow filtering on serial number (Uwe Bonnes) + o Improved VID/PID/serial filtering (Bradley Scott) + o Support reading firmware from stdin (Tormod Volden) + o Warn if missing DFU suffix (Tormod Volden) + o Improved progress bar (Hans Petter Selasky) + o Fix dfuse leave option (Uwe Bonnes) + o Major code rework (Hans Petter Selasky) + o MS Visual Studio build support (Henrique Mendonca) + o dfuse-pack.py tool for .dfu files (Antonio Galeo) + o Many other fixes from many people + +2014-09-13: Tormod Volden + +0.7: + o Support for TI Stellaris devices (Tommi Keisala) + o Fix libusb detection on MacOSX (Marc Singer) + o Fix libusb detection on FreeBSD (Tormod Volden) + o Improved DfuSe support (Tormod Volden) + o Support all special commands (leave, unprotect, mass-erase) + o Arbitrary upload lengths + o "force" option for various possible (dangerous) overrides + +2012-10-07: Tormod Volden + +0.6: + o Add detach mode (Stefan Schmidt) + o Check return value on all libusb calls (Tormod Volden) + o Fix segmentation fault with -s option (Tormod Volden) + o Add DFU suffix manipulation tool (Stefan Schmidt) + o Port to Windows: (Tormod Volden, some parts based on work from Satz + Klauer) + o Port file handling to stdio streams + o Sleep() macros + o C99 types + o Pack structs + o Detect DfuSe device correctly on big-endian architectures (Tormod + Volden) + o Add dfuse progress indication on download (Tormod Volden) + o Cleanup: gcc pedantic, gcc extension, ... (Tormod Volden) + o Rely on page size from functional descriptor. Please report if you get + an error about it. (Tormod Volden) + o Add quirk for Maple since it reports wrong DFU version (Tormod Volden) + +2012-04-22: Stefan Schmidt + +0.5: + o DfuSe extension support for ST devices (Tormod Volden) + o Add initial support for bitWillDetach flag from DFU 1.1 (Tormod + Volden) + o Internal cleanup and some manual page fixes (Tormod Volden) + +2011-11-02: Stefan Schmidt + +0.4: + o Rework to use libusb-1.0 (Stefan Schmidt) + o DFU suffix support (Tormod Volden, Stefan Schmidt) + o Sspeed up DFU downloads directly into memory (Bernard Blackham) + o More flexible -d vid:pid parsing (Tormod Volden) + o Many bug fixes and cleanups + +2011-07-20: Stefan Schmidt + +0.3: + o quirks: Add OpenOCD to the poll timeout quirk table. + +2010-12-22: Stefan Schmidt + +0.2: + o Fix some typos on the website and the README (Antonio Ospite, Uwe + Hermann) + o Remove build rule for a static binary. We can use autotools for this. + (Mike Frysinger) + o Fix infinite loop in download error path (C. Scott Ananian) + o Break out to show the 'finished' in upload (C. Scott Ananian) + o Add GPLv2+ headers (Harald Welte) + o Remove dead code (commands.[ch]) remnescent of dfu-programmer (Harald + Welte) + o Simple quirk system with Openmoko quirk for missing bwPollTimeout (Tormod Volden) + o New default (1024) and clamping of transfer size (Tormod Volden) + o Verify sending of completion packet (Tormod Volden) + o Look for DFU functional descriptor among all descriptors (Tormod + Volden) + o Print out in which direction we are transferring data + o Abort in upload if the file already exists + +2010-11-17 Stefan Schmidt + +0.1: + Initial release + +2010-05-23 Stefan Schmidt diff --git a/tools/src/dfu-util/DEVICES.txt b/tools/src/dfu-util/DEVICES.txt new file mode 100755 index 0000000..682e62c --- /dev/null +++ b/tools/src/dfu-util/DEVICES.txt @@ -0,0 +1,20 @@ +List of supported software and hardware products: + +Software user (bootloader, etc) +------------------------------- +- Sam7DFU: http://www.openpcd.org/Sam7dfu +- U-boot: DFU patches +- Barebox: http://www.barebox.org/ +- Leaflabs: http://code.google.com/p/leaflabs/ +- Blackmagic DFU + +Products using DFU +------------------ +- OpenPCD (sam7dfu) +- Openmoko Neo 1973 and Freerunner (u-boot with DFU patches) +- Leaflabs Maple +- ATUSB from Qi Hardware +- STM32F105/7, STM32F2/F3/F4 in System Bootloader +- Blackmagic debug probe +- NXP LPC31xx/LPC43XX, e.g. LPC-Link and LPC-Link2, need binaries + with LPC prefix and encoding (LPC-Link) diff --git a/tools/src/dfu-util/Makefile.am b/tools/src/dfu-util/Makefile.am new file mode 100755 index 0000000..7318dd8 --- /dev/null +++ b/tools/src/dfu-util/Makefile.am @@ -0,0 +1,3 @@ +SUBDIRS = src doc + +EXTRA_DIST = autogen.sh TODO DEVICES.txt dfuse-pack.py diff --git a/tools/src/dfu-util/README b/tools/src/dfu-util/README new file mode 100755 index 0000000..acda06a --- /dev/null +++ b/tools/src/dfu-util/README @@ -0,0 +1,20 @@ +Dfu-util - Device Firmware Upgrade Utilities + +Dfu-util is the host side implementation of the DFU 1.0 [1] and DFU 1.1 [2] +specification of the USB forum. + +DFU is intended to download and upload firmware to devices connected over +USB. It ranges from small devices like micro-controller boards up to mobile +phones. With dfu-util you are able to download firmware to your device or +upload firmware from it. + +dfu-util has been tested with Openmoko Neo1973 and Freerunner and many +other devices. + +[1] DFU 1.0 spec: http://www.usb.org/developers/devclass_docs/usbdfu10.pdf +[2] DFU 1.1 spec: http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf + +The official website is: + + http://dfu-util.gnumonks.org/ + diff --git a/tools/src/dfu-util/TODO b/tools/src/dfu-util/TODO new file mode 100755 index 0000000..7574512 --- /dev/null +++ b/tools/src/dfu-util/TODO @@ -0,0 +1,14 @@ +DfuSe: +- Do erase and write in two separate passes when downloading +- Skip "Set Address" command when downloading contiguous blocks +- Implement "Get Commands" command + +Devices: +- Research iPhone/iPod/iPad support + Heavily modified dfu-util fork here: + https://github.com/planetbeing/xpwn/tree/master/dfu-util +- Test against Niftylights + +Non-Code: +- Logo +- Re-License as LGPL for usage as library? diff --git a/tools/src/dfu-util/autogen.sh b/tools/src/dfu-util/autogen.sh new file mode 100755 index 0000000..5959508 --- /dev/null +++ b/tools/src/dfu-util/autogen.sh @@ -0,0 +1,2 @@ +#! /bin/sh +autoreconf -v -i diff --git a/tools/src/dfu-util/configure.ac b/tools/src/dfu-util/configure.ac new file mode 100755 index 0000000..8810f56 --- /dev/null +++ b/tools/src/dfu-util/configure.ac @@ -0,0 +1,41 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) +AC_INIT([dfu-util],[0.8],[dfu-util@lists.gnumonks.org],,[http://dfu-util.gnumonks.org]) +AC_CONFIG_AUX_DIR(m4) +AM_INIT_AUTOMAKE([foreign]) +AC_CONFIG_HEADERS([config.h]) + +# Test for new silent rules and enable only if they are available +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +# Checks for programs. +AC_PROG_CC + +# Checks for libraries. +# On FreeBSD the libusb-1.0 is called libusb and resides in system location +AC_CHECK_LIB([usb], [libusb_init],, [native_libusb=no],) +AS_IF([test x$native_libusb = xno], [ + PKG_CHECK_MODULES([USB], [libusb-1.0 >= 1.0.0],, + AC_MSG_ERROR([*** Required libusb-1.0 >= 1.0.0 not installed ***])) +]) +AC_CHECK_LIB([usbpath],[usb_path2devnum],,,-lusb) + +LIBS="$LIBS $USB_LIBS" +CFLAGS="$CFLAGS $USB_CFLAGS" + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([usbpath.h windows.h sysexits.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T + +# Checks for library functions. +AC_FUNC_MEMCMP +AC_CHECK_FUNCS([ftruncate getpagesize nanosleep err]) + +AC_CONFIG_FILES(Makefile src/Makefile doc/Makefile) +AC_OUTPUT diff --git a/tools/src/dfu-util/device-logs/README b/tools/src/dfu-util/device-logs/README new file mode 100755 index 0000000..c1de3e7 --- /dev/null +++ b/tools/src/dfu-util/device-logs/README @@ -0,0 +1,77 @@ +Device: +------- +qi-hardware-atusb: +- Qi Hardware ben-wpan +- DFU implementation: + http://projects.qi-hardware.com/index.php/p/ben-wpan/source/tree/master/atusb/fw/usb +- Tester: Stefan Schmidt + +openpcd: +- OpenPCD RFID reader +- DFU implementation: SAM7DFU + http://www.openpcd.org/Sam7dfu, git://git.gnumonks.org/openpcd.git +- Tester: Stefan Schmidt + +simtrace: +- Sysmocom SimTrace +- DFU implementation: SAM7DFU + http://www.openpcd.org/Sam7dfu, git://git.gnumonks.org/openpcd.git +- Tester: Stefan Schmidt + +openmoko-freerunner: +- Openmoko Freerunner +- DFU implementation: Old U-Boot + http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/mokopatches +- Tester: Stefan Schmidt + +openmoko-neo1973: +- Openmoko Neo1073 +- DFU implementation: Old U-Boot + http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=refs/heads/mokopatches +- Tester: Stefan Schmidt + +tdk-bluetooth: +- TDK Corp. Bluetooth Adapter +- DFU implementation: closed soure +- Only upload has been tested +- Tester: Stefan Schmidt + +stm32f107: +- STM32 microcontrollers with built-in (ROM) DFU loader +- DFU implementation: Closed source but probably similar to the one + in their USB device libraries. Some relevant application notes: + http://www.st.com -> AN3156 and AN2606 +- Tested by Uwe Bonnes + +stm32f4discovery: +- STM32 microcontroller board with built-in (ROM) DFU loader +- DFU implementation: Closed source, probably similar to stm32f107. +- Tested by Joe Rothweiler + +dso-nano: +- DSO Nano pocket oscilloscope +- DFU implementation: Based on ST Microelectronics USB FS Library 1.0 + http://dsonano.googlecode.com/files/DS0201_OpenSource.rar +- Tester: Tormod Volden + +opc-20: +- Custom devices based on STM32F1xx +- DFU implementation: ST Microelectronics USB FS Device Library 3.1.0 + http://www.st.com -> um0424.zip +- Tester: Tormod Volden + +lpc-link, lpclink2: +- NXP LPCXpresso debug adapters +- Proprietary DFU implementation, uses special download files with + LPC prefix and encoding of the target firmware code +- Tested by Uwe Bonnes + +Adding the lsusb output and a download log of your device here helps +us to avoid regressions for hardware we cannot test while working on +the code. To extract the lsusb output use this command: +sudo lsusb -v -d $USBID > $DEVICE.lsusb +Prepare a description snippet as above, and send it to us. A log +(copy-paste of the command window) of a firmware download is also +nice, please use the double verbose option -v -v and include the +command line in the log file. + diff --git a/tools/src/dfu-util/device-logs/dsonano.lsusb b/tools/src/dfu-util/device-logs/dsonano.lsusb new file mode 100755 index 0000000..44a5d28 --- /dev/null +++ b/tools/src/dfu-util/device-logs/dsonano.lsusb @@ -0,0 +1,60 @@ + +Bus 002 Device 004: ID 0483:df11 SGS Thomson Microelectronics +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x0483 SGS Thomson Microelectronics + idProduct 0xdf11 + bcdDevice 1.1a + iManufacturer 1 STMicroelectronics + iProduct 2 STM32 DFU + iSerial 3 001 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 36 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 64mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 0 + iInterface 4 @Internal Flash /0x08000000/12*001Ka,116*001Kg + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 1 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 0 + iInterface 5 @SPI Flash : M25P64/0x00000000/64*064Kg,64*064Kg + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 11 + Will Detach + Manifestation Intolerant + Upload Supported + Download Supported + wDetachTimeout 255 milliseconds + wTransferSize 1024 bytes + bcdDFUVersion 1.1a +Device Status: 0x0000 + (Bus Powered) diff --git a/tools/src/dfu-util/device-logs/lpclink.log b/tools/src/dfu-util/device-logs/lpclink.log new file mode 100755 index 0000000..f2a04f7 --- /dev/null +++ b/tools/src/dfu-util/device-logs/lpclink.log @@ -0,0 +1,59 @@ +(The on-board LPC3154 has some encryption key set and LPCXpressoWIN.enc +is encrypted.) + +$ lsusb | grep NXP +Bus 003 Device 011: ID 0471:df55 Philips (or NXP) LPCXpresso LPC-Link + +$ dfu-util -v -v -v -R -D /opt/lpc/lpcxpresso/bin/LPCXpressoWIN.enc + +dfu-util 0.7 + +Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. +Copyright 2010-2012 Tormod Volden and Stefan Schmidt +This program is Free Software and has ABSOLUTELY NO WARRANTY +Please report bugs to dfu-util@lists.gnumonks.org + +dfu-util: Invalid DFU suffix signature +dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! +Deducing device DFU version from functional descriptor length +Opening DFU capable USB device... +ID 0471:df55 +Run-time device DFU version 0100 +Claiming USB DFU Runtime Interface... +Determining device status: +state = dfuIDLE, status = 0 +dfu-util: WARNING: Runtime device already in DFU state ?!? +Claiming USB DFU Interface... +Setting Alternate Setting #0 ... +Determining device status: +state = dfuIDLE, status = 0 +dfuIDLE, continuing +DFU mode device DFU version 0100 +Device returned transfer size 2048 +Copying data from PC to DFU device +Download [ ] 0% 0 bytes +Download [= ] 6% 2048 bytes +Download [=== ] 13% 4096 bytes +Download [==== ] 19% 6144 bytes +Download [====== ] 26% 8192 bytes +Download [======== ] 32% 10240 bytes +Download [========= ] 39% 12288 bytes +Download [=========== ] 45% 14336 bytes +Download [============= ] 52% 16384 bytes +Download [============== ] 59% 18432 bytes +Download [================ ] 65% 20480 bytes +Download [================== ] 72% 22528 bytes +Download [=================== ] 78% 24576 bytes +Download [===================== ] 85% 26624 bytes +Download [====================== ] 91% 28672 bytes +Download [======================== ] 98% 29192 bytes +Download [=========================] 100% 29192 bytes +Download done. +Sent a total of 29192 bytes +state(8) = dfuMANIFEST-WAIT-RESET, status(0) = No error condition is present +Done! +dfu-util: can't detach +Resetting USB to switch back to runtime mode + +$ lsusb | grep NXP +Bus 003 Device 012: ID 1fc9:0009 NXP Semiconductors diff --git a/tools/src/dfu-util/device-logs/lpclink.lsusb b/tools/src/dfu-util/device-logs/lpclink.lsusb new file mode 100755 index 0000000..c80d2b7 --- /dev/null +++ b/tools/src/dfu-util/device-logs/lpclink.lsusb @@ -0,0 +1,58 @@ + +Bus 003 Device 008: ID 0471:df55 Philips (or NXP) LPCXpresso LPC-Link +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 2.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x0471 Philips (or NXP) + idProduct 0xdf55 LPCXpresso LPC-Link + bcdDevice 0.01 + iManufacturer 0 + iProduct 0 + iSerial 0 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 25 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 100mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 0 + iInterface 0 + Device Firmware Upgrade Interface Descriptor: + bLength 7 + bDescriptorType 33 + bmAttributes 1 + Will Not Detach + Manifestation Intolerant + Upload Unsupported + Download Supported + wDetachTimeout 65535 milliseconds + wTransferSize 2048 bytes +Device Qualifier (for other device speed): + bLength 10 + bDescriptorType 6 + bcdUSB 2.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + bNumConfigurations 1 +Device Status: 0x0000 + (Bus Powered) diff --git a/tools/src/dfu-util/device-logs/lpclink2.log b/tools/src/dfu-util/device-logs/lpclink2.log new file mode 100755 index 0000000..f33e671 --- /dev/null +++ b/tools/src/dfu-util/device-logs/lpclink2.log @@ -0,0 +1,59 @@ +$ lsusb | grep NXP +Bus 003 Device 013: ID 1fc9:000c NXP Semiconductors + +$ dfu-util -D ~/devel/dfu-util/firmware.bin.qthdr + +dfu-util 0.7 + +Copyright 2005-2008 Weston Schmidt, Harald Welte and OpenMoko Inc. +Copyright 2010-2012 Tormod Volden and Stefan Schmidt +This program is Free Software and has ABSOLUTELY NO WARRANTY +Please report bugs to dfu-util@lists.gnumonks.org + +dfu-util: Invalid DFU suffix signature +dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! +Possible unencryptes NXP LPC DFU prefix with the following properties +Payload length: 39 kiByte +Opening DFU capable USB device... +ID 1fc9:000c +Run-time device DFU version 0100 +Claiming USB DFU Runtime Interface... +Determining device status: +state = dfuIDLE, status = 0 +dfu-util: WARNING: Runtime device already in DFU state ?!? +Claiming USB DFU Interface... +Setting Alternate Setting #0 ... +Determining device status: +state = dfuIDLE, status = 0 +dfuIDLE, continuing +DFU mode device DFU version 0100 +Device returned transfer size 2048 +Copying data from PC to DFU device +Download [ ] 0% 0 bytes +Download [= ] 4% 2048 bytes +Download [== ] 9% 4096 bytes +Download [=== ] 14% 6144 bytes +Download [==== ] 19% 8192 bytes +Download [====== ] 24% 10240 bytes +Download [======= ] 28% 12288 bytes +Download [======== ] 33% 14336 bytes +Download [========= ] 38% 16384 bytes +Download [========== ] 43% 18432 bytes +Download [============ ] 48% 20480 bytes +Download [============= ] 53% 22528 bytes +Download [============== ] 57% 24576 bytes +Download [=============== ] 62% 26624 bytes +Download [================ ] 67% 28672 bytes +Download [================== ] 72% 30720 bytes +Download [=================== ] 77% 32768 bytes +Download [==================== ] 82% 34816 bytes +Download [===================== ] 86% 36864 bytes +Download [====================== ] 91% 38912 bytes +Download [======================== ] 96% 40356 bytes +Download [=========================] 100% 40356 bytes +Download done. +Sent a total of 40356 bytes +dfu-util: unable to read DFU status + +$ lsusb | grep NXP +Bus 003 Device 014: ID 1fc9:0018 NXP Semiconductors diff --git a/tools/src/dfu-util/device-logs/lpclink2.lsusb b/tools/src/dfu-util/device-logs/lpclink2.lsusb new file mode 100755 index 0000000..d8d6e0c --- /dev/null +++ b/tools/src/dfu-util/device-logs/lpclink2.lsusb @@ -0,0 +1,203 @@ + +Bus 003 Device 007: ID 0c72:000c PEAK System PCAN-USB +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 16 + idVendor 0x0c72 PEAK System + idProduct 0x000c PCAN-USB + bcdDevice 1c.ff + iManufacturer 0 + iProduct 3 VER1:PEAK +VER2:02.8.01 +DAT :06.05.2004 +TIME:09:35:37 + ... + iSerial 0 + bNumConfigurations 3 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 46 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 200mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 4 + bInterfaceClass 0 (Defined at Interface level) + bInterfaceSubClass 0 + bInterfaceProtocol 0 + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 20 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x01 EP 1 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 20 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x82 EP 2 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 46 + bNumInterfaces 1 + bConfigurationValue 2 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 394mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 4 + bInterfaceClass 0 (Defined at Interface level) + bInterfaceSubClass 0 + bInterfaceProtocol 0 + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 20 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x01 EP 1 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 20 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x82 EP 2 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 46 + bNumInterfaces 1 + bConfigurationValue 3 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 200mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 4 + bInterfaceClass 0 (Defined at Interface level) + bInterfaceSubClass 0 + bInterfaceProtocol 0 + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x01 EP 1 OUT + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x82 EP 2 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 1 +Device Status: 0x0001 + Self Powered diff --git a/tools/src/dfu-util/device-logs/opc-20.lsusb b/tools/src/dfu-util/device-logs/opc-20.lsusb new file mode 100755 index 0000000..25ad12f --- /dev/null +++ b/tools/src/dfu-util/device-logs/opc-20.lsusb @@ -0,0 +1,60 @@ + +Bus 001 Device 004: ID 0483:df11 SGS Thomson Microelectronics +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x0483 SGS Thomson Microelectronics + idProduct 0xdf11 + bcdDevice 2.00 + iManufacturer 1 STMicroelectronics + iProduct 2 STM32 DFU + iSerial 3 ÿÿÿÿÿÿÿÿÿÿÿÿ + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 36 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0xc0 + Self Powered + MaxPower 100mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 4 @Internal Flash /0x08000000/12*001Ka,116*001Kg + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 1 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 5 @SPI Flash : M25P64/0x00000000/128*64Kg + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 11 + Will Detach + Manifestation Intolerant + Upload Supported + Download Supported + wDetachTimeout 255 milliseconds + wTransferSize 1024 bytes + bcdDFUVersion 1a.01 +Device Status: 0x0001 + Self Powered diff --git a/tools/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb b/tools/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb new file mode 100755 index 0000000..64bd018 --- /dev/null +++ b/tools/src/dfu-util/device-logs/openmoko-freerunner-dfumode.lsusb @@ -0,0 +1,109 @@ +Bus 003 Device 017: ID 1d50:5119 OpenMoko, Inc. GTA01/GTA02 U-Boot Bootloader +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 16 + idVendor 0x1d50 OpenMoko, Inc. + idProduct 0x5119 GTA01/GTA02 U-Boot Bootloader + bcdDevice 0.00 + iManufacturer 1 OpenMoko, Inc + iProduct 2 Neo1973 Bootloader U-Boot 1.3.2-moko12 + iSerial 3 0000000 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 81 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 7 USB Device Firmware Upgrade + bmAttributes 0x80 + (Bus Powered) + MaxPower 100mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 8 RAM 0x32000000 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 1 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 9 u-boot + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 2 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 10 u-boot_env + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 3 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 11 kernel + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 4 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 12 splash + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 5 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 13 factory + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 6 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 14 rootfs + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 7 + Will Not Detach + Manifestation Tolerant + Upload Supported + Download Supported + wDetachTimeout 65280 milliseconds + wTransferSize 4096 bytes + bcdDFUVersion 1.00 +Device Status: 0x0a00 + (Bus Powered) diff --git a/tools/src/dfu-util/device-logs/openmoko-freerunner.lsusb b/tools/src/dfu-util/device-logs/openmoko-freerunner.lsusb new file mode 100755 index 0000000..cf148e5 --- /dev/null +++ b/tools/src/dfu-util/device-logs/openmoko-freerunner.lsusb @@ -0,0 +1,179 @@ +Bus 005 Device 033: ID 1d50:5119 OpenMoko, Inc. GTA01/GTA02 U-Boot Bootloader +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.10 + bDeviceClass 2 Communications + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 16 + idVendor 0x1d50 OpenMoko, Inc. + idProduct 0x5119 GTA01/GTA02 U-Boot Bootloader + bcdDevice 0.00 + iManufacturer 1 OpenMoko, Inc + iProduct 2 Neo1973 Bootloader U-Boot 1.3.2-moko12 + iSerial 3 0000000 + bNumConfigurations 2 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 85 + bNumInterfaces 3 + bConfigurationValue 1 + iConfiguration 4 TTY via USB + bmAttributes 0x80 + (Bus Powered) + MaxPower 500mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 1 + bInterfaceClass 2 Communications + bInterfaceSubClass 2 Abstract (modem) + bInterfaceProtocol 1 AT-commands (v.25ter) + iInterface 6 Control Interface + CDC Header: + bcdCDC 0.6e + CDC Call Management: + bmCapabilities 0x00 + bDataInterface 1 + CDC ACM: + bmCapabilities 0x00 + CDC Union: + bMasterInterface 0 + bSlaveInterface 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 10 CDC Data + bInterfaceSubClass 0 Unused + bInterfaceProtocol 0 + iInterface 5 Bulk Data Interface + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 2 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 1 + iInterface 7 USB Device Firmware Upgrade + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 7 + Will Not Detach + Manifestation Tolerant + Upload Supported + Download Supported + wDetachTimeout 65280 milliseconds + wTransferSize 4096 bytes + bcdDFUVersion 1.00 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 67 + bNumInterfaces 2 + bConfigurationValue 2 + iConfiguration 4 TTY via USB + bmAttributes 0x80 + (Bus Powered) + MaxPower 100mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 1 + bInterfaceClass 2 Communications + bInterfaceSubClass 2 Abstract (modem) + bInterfaceProtocol 1 AT-commands (v.25ter) + iInterface 6 Control Interface + CDC Header: + bcdCDC 0.6e + CDC Call Management: + bmCapabilities 0x00 + bDataInterface 1 + CDC ACM: + bmCapabilities 0x00 + CDC Union: + bMasterInterface 0 + bSlaveInterface 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 10 CDC Data + bInterfaceSubClass 0 Unused + bInterfaceProtocol 0 + iInterface 5 Bulk Data Interface + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 +Device Status: 0x9a00 + (Bus Powered) diff --git a/tools/src/dfu-util/device-logs/openmoko-neo1973.lsusb b/tools/src/dfu-util/device-logs/openmoko-neo1973.lsusb new file mode 100755 index 0000000..dc1fe7c --- /dev/null +++ b/tools/src/dfu-util/device-logs/openmoko-neo1973.lsusb @@ -0,0 +1,182 @@ + +Bus 006 Device 020: ID 1457:5119 First International Computer, Inc. OpenMoko Neo1973 u-boot cdc_acm serial port +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.10 + bDeviceClass 2 Communications + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 16 + idVendor 0x1457 First International Computer, Inc. + idProduct 0x5119 OpenMoko Neo1973 u-boot cdc_acm serial port + bcdDevice 0.00 + iManufacturer 1 + iProduct 2 + iSerial 3 + bNumConfigurations 2 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 85 + bNumInterfaces 3 + bConfigurationValue 1 + iConfiguration 4 + bmAttributes 0x80 + (Bus Powered) + MaxPower 500mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 1 + bInterfaceClass 2 Communications + bInterfaceSubClass 2 Abstract (modem) + bInterfaceProtocol 1 AT-commands (v.25ter) + iInterface 6 + CDC Header: + bcdCDC 0.6e + CDC Call Management: + bmCapabilities 0x00 + bDataInterface 1 + CDC ACM: + bmCapabilities 0x00 + CDC Union: + bMasterInterface 0 + bSlaveInterface 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 10 CDC Data + bInterfaceSubClass 0 Unused + bInterfaceProtocol 0 + iInterface 5 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 2 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 1 + iInterface 7 + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 7 + Will Not Detach + Manifestation Tolerant + Upload Supported + Download Supported + wDetachTimeout 65280 milliseconds + wTransferSize 4096 bytes + bcdDFUVersion 1.00 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 67 + bNumInterfaces 2 + bConfigurationValue 2 + iConfiguration 4 + bmAttributes 0x80 + (Bus Powered) + MaxPower 100mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 1 + bInterfaceClass 2 Communications + bInterfaceSubClass 2 Abstract (modem) + bInterfaceProtocol 1 AT-commands (v.25ter) + iInterface 6 + CDC Header: + bcdCDC 0.6e + CDC Call Management: + bmCapabilities 0x00 + bDataInterface 1 + CDC ACM: + bmCapabilities 0x00 + CDC Union: + bMasterInterface 0 + bSlaveInterface 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 10 CDC Data + bInterfaceSubClass 0 Unused + bInterfaceProtocol 0 + iInterface 5 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 255 +Device Status: 0x0006 + (Bus Powered) + Remote Wakeup Enabled + Test Mode diff --git a/tools/src/dfu-util/device-logs/openpcd.lsusb b/tools/src/dfu-util/device-logs/openpcd.lsusb new file mode 100755 index 0000000..8618647 --- /dev/null +++ b/tools/src/dfu-util/device-logs/openpcd.lsusb @@ -0,0 +1,60 @@ + +Bus 006 Device 016: ID 16c0:076b VOTI OpenPCD 13.56MHz RFID Reader +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 8 + idVendor 0x16c0 VOTI + idProduct 0x076b OpenPCD 13.56MHz RFID Reader + bcdDevice 0.00 + iManufacturer 1 + iProduct 2 OpenPCD RFID Simulator - DFU Mode + iSerial 0 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 36 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 200mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 0 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 1 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 0 + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 3 + Will Not Detach + Manifestation Intolerant + Upload Supported + Download Supported + wDetachTimeout 65280 milliseconds + wTransferSize 256 bytes + bcdDFUVersion 1.00 +Device Status: 0x0000 + (Bus Powered) diff --git a/tools/src/dfu-util/device-logs/qi-hardware-atusb.lsusb b/tools/src/dfu-util/device-logs/qi-hardware-atusb.lsusb new file mode 100755 index 0000000..d1da57a --- /dev/null +++ b/tools/src/dfu-util/device-logs/qi-hardware-atusb.lsusb @@ -0,0 +1,59 @@ + +Bus 006 Device 013: ID 20b7:1540 Qi Hardware ben-wpan, AT86RF230-based +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 2.00 + bDeviceClass 255 Vendor Specific Class + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x20b7 Qi Hardware + idProduct 0x1540 ben-wpan, AT86RF230-based + bcdDevice 0.01 + iManufacturer 0 + iProduct 0 + iSerial 1 4630333438371508231a + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 34 + bNumInterfaces 2 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 40mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 1 + bInterfaceClass 255 Vendor Specific Class + bInterfaceSubClass 0 + bInterfaceProtocol 0 + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 0 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 1 + iInterface 0 +Device Status: 0x0000 + (Bus Powered) diff --git a/tools/src/dfu-util/device-logs/simtrace.lsusb b/tools/src/dfu-util/device-logs/simtrace.lsusb new file mode 100755 index 0000000..fd51539 --- /dev/null +++ b/tools/src/dfu-util/device-logs/simtrace.lsusb @@ -0,0 +1,70 @@ + +Bus 006 Device 017: ID 16c0:0762 VOTI +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 8 + idVendor 0x16c0 VOTI + idProduct 0x0762 + bcdDevice 0.00 + iManufacturer 1 sysmocom - systems for mobile communications GmbH + iProduct 2 SimTrace SIM Sniffer - DFU Mode + iSerial 0 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 45 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 3 SimTrace DFU Configuration + bmAttributes 0x80 + (Bus Powered) + MaxPower 200mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 4 SimTrace DFU Interface - Application Partition + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 1 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 5 SimTrace DFU Interface - Bootloader Partition + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 2 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 6 SimTrace DFU Interface - RAM + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 3 + Will Not Detach + Manifestation Intolerant + Upload Supported + Download Supported + wDetachTimeout 65280 milliseconds + wTransferSize 256 bytes + bcdDFUVersion 1.00 +Device Status: 0x0000 + (Bus Powered) diff --git a/tools/src/dfu-util/device-logs/sparkcore.lsusb b/tools/src/dfu-util/device-logs/sparkcore.lsusb new file mode 100755 index 0000000..79c529b --- /dev/null +++ b/tools/src/dfu-util/device-logs/sparkcore.lsusb @@ -0,0 +1,60 @@ + +Bus 001 Device 008: ID 1d50:607f OpenMoko, Inc. +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x1d50 OpenMoko, Inc. + idProduct 0x607f + bcdDevice 2.00 + iManufacturer 1 Spark Devices + iProduct 2 CORE DFU + iSerial 3 8D80527B5055 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 36 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0xc0 + Self Powered + MaxPower 100mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 4 @Internal Flash /0x08000000/20*001Ka,108*001Kg + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 1 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 5 @SPI Flash : SST25x/0x00000000/512*04Kg + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 11 + Will Detach + Manifestation Intolerant + Upload Supported + Download Supported + wDetachTimeout 255 milliseconds + wTransferSize 1024 bytes + bcdDFUVersion 1.1a +Device Status: 0x0001 + Self Powered diff --git a/tools/src/dfu-util/device-logs/stm32f107.bin-download b/tools/src/dfu-util/device-logs/stm32f107.bin-download new file mode 100755 index 0000000..4d803fb --- /dev/null +++ b/tools/src/dfu-util/device-logs/stm32f107.bin-download @@ -0,0 +1,48 @@ +> src/dfu-util --intf 0 --alt 0 -v -v -v -s 0x8000000 -D test3 +dfu-util 0.4 + +(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. +(C) 2010-2011 Tormod Volden (DfuSe support) +This program is Free Software and has ABSOLUTELY NO WARRANTY + +dfu-util does currently only support DFU version 1.0 + +Opening DFU USB device... ID 0483:df11 +Run-time device DFU version 011a +Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/128*002Kg" +Claiming USB DFU Interface... +Setting Alternate Setting #0 ... +Determining device status: state = dfuIDLE, status = 0 +dfuIDLE, continuing +DFU mode device DFU version 011a +Device returned transfer size 2048 +No valid DFU suffix signature +Warning: File has no DFU suffix +DfuSe interface name: "Internal Flash " +Memory segment at 0x08000000 128 x 2048 = 262144 (rew) +Uploading to address = 0x08000000, size = 16384 +Erasing page size 2048 at address 0x08000000, page starting at 0x08000000 + Download from image offset 00000000 to memory 08000000-080007ff, size 2048 + Setting address pointer to 0x08000000 +Erasing page size 2048 at address 0x08000800, page starting at 0x08000800 + Download from image offset 00000800 to memory 08000800-08000fff, size 2048 + Setting address pointer to 0x08000800 +Erasing page size 2048 at address 0x08001000, page starting at 0x08001000 + Download from image offset 00001000 to memory 08001000-080017ff, size 2048 + Setting address pointer to 0x08001000 +Erasing page size 2048 at address 0x08001800, page starting at 0x08001800 + Download from image offset 00001800 to memory 08001800-08001fff, size 2048 + Setting address pointer to 0x08001800 +Erasing page size 2048 at address 0x08002000, page starting at 0x08002000 + Download from image offset 00002000 to memory 08002000-080027ff, size 2048 + Setting address pointer to 0x08002000 +Erasing page size 2048 at address 0x08002800, page starting at 0x08002800 + Download from image offset 00002800 to memory 08002800-08002fff, size 2048 + Setting address pointer to 0x08002800 +Erasing page size 2048 at address 0x08003000, page starting at 0x08003000 + Download from image offset 00003000 to memory 08003000-080037ff, size 2048 + Setting address pointer to 0x08003000 +Erasing page size 2048 at address 0x08003800, page starting at 0x08003800 + Download from image offset 00003800 to memory 08003800-08003fff, size 2048 + Setting address pointer to 0x08003800 + diff --git a/tools/src/dfu-util/device-logs/stm32f107.lsusb b/tools/src/dfu-util/device-logs/stm32f107.lsusb new file mode 100755 index 0000000..89d8d38 --- /dev/null +++ b/tools/src/dfu-util/device-logs/stm32f107.lsusb @@ -0,0 +1,60 @@ + +Bus 001 Device 028: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x0483 SGS Thomson Microelectronics + idProduct 0xdf11 STM Device in DFU Mode + bcdDevice 20.00 + iManufacturer 1 STMicroelectronics + iProduct 2 STM32 0x418 DFU Bootloader + iSerial 3 STM32 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 36 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0xc0 + Self Powered + MaxPower 100mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 4 @Internal Flash /0x08000000/128*002Kg + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 1 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 5 @Option Bytes /0x1FFFF800/01*016 g + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 11 + Will Detach + Manifestation Intolerant + Upload Supported + Download Supported + wDetachTimeout 255 milliseconds + wTransferSize 2048 bytes + bcdDFUVersion 1.1a +Device Status: 0x0000 + (Bus Powered) diff --git a/tools/src/dfu-util/device-logs/stm32f4discovery.bin-download b/tools/src/dfu-util/device-logs/stm32f4discovery.bin-download new file mode 100755 index 0000000..d5a2679 --- /dev/null +++ b/tools/src/dfu-util/device-logs/stm32f4discovery.bin-download @@ -0,0 +1,36 @@ +dfu-util --device 0483:df11 --alt 0 \ + --dfuse-address 0x08000000 \ + -v -v -v \ + --download arm/iotoggle.bin +No valid DFU suffix signature +Warning: File has no DFU suffix +dfu-util 0.5 + +(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc. +(C) 2010-2011 Tormod Volden (DfuSe support) +This program is Free Software and has ABSOLUTELY NO WARRANTY + +dfu-util does currently only support DFU version 1.0 + +Filter on vendor = 0x0483 product = 0xdf11 +Opening DFU capable USB device... ID 0483:df11 +Run-time device DFU version 011a +Found DFU: [0483:df11] devnum=0, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg" +Claiming USB DFU Interface... +Setting Alternate Setting #0 ... +Determining device status: state = dfuERROR, status = 10 +dfuERROR, clearing status +Determining device status: state = dfuIDLE, status = 0 +dfuIDLE, continuing +DFU mode device DFU version 011a +Device returned transfer size 2048 +DfuSe interface name: "Internal Flash " +Memory segment at 0x08000000 4 x 16384 = 65536 (rew) +Memory segment at 0x08010000 1 x 65536 = 65536 (rew) +Memory segment at 0x08020000 7 x 131072 = 917504 (rew) +Uploading to address = 0x08000000, size = 2308 +Erasing page size 16384 at address 0x08000000, page starting at 0x08000000 + Download from image offset 00000000 to memory 08000000-080007ff, size 2048 + Setting address pointer to 0x08000000 + Download from image offset 00000800 to memory 08000800-08000903, size 260 + Setting address pointer to 0x08000800 diff --git a/tools/src/dfu-util/device-logs/stm32f4discovery.lsusb b/tools/src/dfu-util/device-logs/stm32f4discovery.lsusb new file mode 100755 index 0000000..c78530c --- /dev/null +++ b/tools/src/dfu-util/device-logs/stm32f4discovery.lsusb @@ -0,0 +1,80 @@ + +Bus 001 Device 010: ID 0483:df11 SGS Thomson Microelectronics STM Device in DFU Mode +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 1.00 + bDeviceClass 0 (Defined at Interface level) + bDeviceSubClass 0 + bDeviceProtocol 0 + bMaxPacketSize0 64 + idVendor 0x0483 SGS Thomson Microelectronics + idProduct 0xdf11 STM Device in DFU Mode + bcdDevice 21.00 + iManufacturer 1 STMicroelectronics + iProduct 2 STM32 BOOTLOADER + iSerial 3 315A28A0B956 + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 54 + bNumInterfaces 1 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0xc0 + Self Powered + MaxPower 100mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 4 @Internal Flash /0x08000000/04*016Kg,01*064Kg,07*128Kg + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 1 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 5 @Option Bytes /0x1FFFC000/01*016 g + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 2 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 6 @OTP Memory /0x1FFF7800/01*512 g,01*016 g + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 3 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 2 + iInterface 7 @Device Feature/0xFFFF0000/01*004 g + Device Firmware Upgrade Interface Descriptor: + bLength 9 + bDescriptorType 33 + bmAttributes 11 + Will Detach + Manifestation Intolerant + Upload Supported + Download Supported + wDetachTimeout 255 milliseconds + wTransferSize 2048 bytes + bcdDFUVersion 1.1a +Device Status: 0x0001 + Self Powered diff --git a/tools/src/dfu-util/device-logs/tdk-bluetooth.lsusb b/tools/src/dfu-util/device-logs/tdk-bluetooth.lsusb new file mode 100755 index 0000000..ac07bb7 --- /dev/null +++ b/tools/src/dfu-util/device-logs/tdk-bluetooth.lsusb @@ -0,0 +1,269 @@ + +Bus 006 Device 014: ID 04bf:0320 TDK Corp. Bluetooth Adapter +Device Descriptor: + bLength 18 + bDescriptorType 1 + bcdUSB 2.00 + bDeviceClass 224 Wireless + bDeviceSubClass 1 Radio Frequency + bDeviceProtocol 1 Bluetooth + bMaxPacketSize0 64 + idVendor 0x04bf TDK Corp. + idProduct 0x0320 Bluetooth Adapter + bcdDevice 26.52 + iManufacturer 1 Ezurio + iProduct 2 Turbo Bluetooth Adapter + iSerial 3 008098D4FFBD + bNumConfigurations 1 + Configuration Descriptor: + bLength 9 + bDescriptorType 2 + wTotalLength 193 + bNumInterfaces 3 + bConfigurationValue 1 + iConfiguration 0 + bmAttributes 0x80 + (Bus Powered) + MaxPower 64mA + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 0 + bAlternateSetting 0 + bNumEndpoints 3 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x81 EP 1 IN + bmAttributes 3 + Transfer Type Interrupt + Synch Type None + Usage Type Data + wMaxPacketSize 0x0010 1x 16 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x02 EP 2 OUT + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x82 EP 2 IN + bmAttributes 2 + Transfer Type Bulk + Synch Type None + Usage Type Data + wMaxPacketSize 0x0040 1x 64 bytes + bInterval 1 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 0 + bNumEndpoints 2 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x03 EP 3 OUT + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0000 1x 0 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0000 1x 0 bytes + bInterval 1 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 1 + bNumEndpoints 2 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x03 EP 3 OUT + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0009 1x 9 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0009 1x 9 bytes + bInterval 1 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 2 + bNumEndpoints 2 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x03 EP 3 OUT + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0011 1x 17 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0011 1x 17 bytes + bInterval 1 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 3 + bNumEndpoints 2 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x03 EP 3 OUT + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0019 1x 25 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0019 1x 25 bytes + bInterval 1 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 4 + bNumEndpoints 2 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x03 EP 3 OUT + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0021 1x 33 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0021 1x 33 bytes + bInterval 1 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 1 + bAlternateSetting 5 + bNumEndpoints 2 + bInterfaceClass 224 Wireless + bInterfaceSubClass 1 Radio Frequency + bInterfaceProtocol 1 Bluetooth + iInterface 0 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x03 EP 3 OUT + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0031 1x 49 bytes + bInterval 1 + Endpoint Descriptor: + bLength 7 + bDescriptorType 5 + bEndpointAddress 0x83 EP 3 IN + bmAttributes 1 + Transfer Type Isochronous + Synch Type None + Usage Type Data + wMaxPacketSize 0x0031 1x 49 bytes + bInterval 1 + Interface Descriptor: + bLength 9 + bDescriptorType 4 + bInterfaceNumber 2 + bAlternateSetting 0 + bNumEndpoints 0 + bInterfaceClass 254 Application Specific Interface + bInterfaceSubClass 1 Device Firmware Update + bInterfaceProtocol 0 + iInterface 0 + Device Firmware Upgrade Interface Descriptor: + bLength 7 + bDescriptorType 33 + bmAttributes 7 + Will Not Detach + Manifestation Tolerant + Upload Supported + Download Supported + wDetachTimeout 5000 milliseconds + wTransferSize 1023 bytes +Device Status: 0x0000 + (Bus Powered) diff --git a/tools/src/dfu-util/dfuse-pack.py b/tools/src/dfu-util/dfuse-pack.py new file mode 100755 index 0000000..022df6a --- /dev/null +++ b/tools/src/dfu-util/dfuse-pack.py @@ -0,0 +1,121 @@ +#!/usr/bin/python + +# Written by Antonio Galea - 2010/11/18 +# Distributed under Gnu LGPL 3.0 +# see http://www.gnu.org/licenses/lgpl-3.0.txt + +import sys,struct,zlib,os +from optparse import OptionParser + +DEFAULT_DEVICE="0x0483:0xdf11" + +def named(tuple,names): + return dict(zip(names.split(),tuple)) +def consume(fmt,data,names): + n = struct.calcsize(fmt) + return named(struct.unpack(fmt,data[:n]),names),data[n:] +def cstring(string): + return string.split('\0',1)[0] +def compute_crc(data): + return 0xFFFFFFFF & -zlib.crc32(data) -1 + +def parse(file,dump_images=False): + print 'File: "%s"' % file + data = open(file,'rb').read() + crc = compute_crc(data[:-4]) + prefix, data = consume('<5sBIB',data,'signature version size targets') + print '%(signature)s v%(version)d, image size: %(size)d, targets: %(targets)d' % prefix + for t in range(prefix['targets']): + tprefix, data = consume('<6sBI255s2I',data,'signature altsetting named name size elements') + tprefix['num'] = t + if tprefix['named']: + tprefix['name'] = cstring(tprefix['name']) + else: + tprefix['name'] = '' + print '%(signature)s %(num)d, alt setting: %(altsetting)s, name: "%(name)s", size: %(size)d, elements: %(elements)d' % tprefix + tsize = tprefix['size'] + target, data = data[:tsize], data[tsize:] + for e in range(tprefix['elements']): + eprefix, target = consume('<2I',target,'address size') + eprefix['num'] = e + print ' %(num)d, address: 0x%(address)08x, size: %(size)d' % eprefix + esize = eprefix['size'] + image, target = target[:esize], target[esize:] + if dump_images: + out = '%s.target%d.image%d.bin' % (file,t,e) + open(out,'wb').write(image) + print ' DUMPED IMAGE TO "%s"' % out + if len(target): + print "target %d: PARSE ERROR" % t + suffix = named(struct.unpack('<4H3sBI',data[:16]),'device product vendor dfu ufd len crc') + print 'usb: %(vendor)04x:%(product)04x, device: 0x%(device)04x, dfu: 0x%(dfu)04x, %(ufd)s, %(len)d, 0x%(crc)08x' % suffix + if crc != suffix['crc']: + print "CRC ERROR: computed crc32 is 0x%08x" % crc + data = data[16:] + if data: + print "PARSE ERROR" + +def build(file,targets,device=DEFAULT_DEVICE): + data = '' + for t,target in enumerate(targets): + tdata = '' + for image in target: + tdata += struct.pack('<2I',image['address'],len(image['data']))+image['data'] + tdata = struct.pack('<6sBI255s2I','Target',0,1,'ST...',len(tdata),len(target)) + tdata + data += tdata + data = struct.pack('<5sBIB','DfuSe',1,len(data)+11,len(targets)) + data + v,d=map(lambda x: int(x,0) & 0xFFFF, device.split(':',1)) + data += struct.pack('<4H3sB',0,d,v,0x011a,'UFD',16) + crc = compute_crc(data) + data += struct.pack(' and +Harald Welte . Over time, nearly complete +support of DFU 1.0, DFU 1.1 and DfuSe ("1.1a") has been added. +.SH LICENCE +.B dfu-util +is covered by the GNU General Public License (GPL), version 2 or later. +.SH COPYRIGHT +This manual page was originally written by Uwe Hermann , +and is now part of the dfu-util project. diff --git a/tools/src/dfu-util/msvc/README_msvc.txt b/tools/src/dfu-util/msvc/README_msvc.txt new file mode 100755 index 0000000..25aeeed --- /dev/null +++ b/tools/src/dfu-util/msvc/README_msvc.txt @@ -0,0 +1,10 @@ +# (C) Roger Meier +# (C) Pascal Schweizer +# msvc folder is GPL-2.0+, LGPL-2.1+, BSD-3-Clause or MIT license(SPDX) + +Building dfu-util native on Windows with Visual Studio + +3rd party dependencies: +- libusbx ( git clone https://github.com/libusbx/libusbx.git ) + - getopt (part of libusbx: libusbx/examples/getopt) + diff --git a/tools/src/dfu-util/msvc/dfu-suffix_2010.vcxproj b/tools/src/dfu-util/msvc/dfu-suffix_2010.vcxproj new file mode 100755 index 0000000..87b7ead --- /dev/null +++ b/tools/src/dfu-util/msvc/dfu-suffix_2010.vcxproj @@ -0,0 +1,100 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {8F7600A2-3B37-4956-B39B-A1D43EF29EDA} + dfusuffix + dfu-suffix + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\dll;$(LibraryPath) + $(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib + $(ExecutablePath) + + + $(ExecutablePath) + $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\dll;$(LibraryPath) + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + + + + Level3 + Disabled + HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDebug + + + true + + + + + Level3 + MaxSpeed + true + true + HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + + + + + + + + + + + {a2169bc8-cf99-40bf-83f3-b0e38f7067bd} + + + {349ee8f9-7d25-4909-aaf5-ff3fade72187} + + + + + + \ No newline at end of file diff --git a/tools/src/dfu-util/msvc/dfu-util_2010.sln b/tools/src/dfu-util/msvc/dfu-util_2010.sln new file mode 100755 index 0000000..e6c932c --- /dev/null +++ b/tools/src/dfu-util/msvc/dfu-util_2010.sln @@ -0,0 +1,54 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dfu-util", "dfu-util_2010.vcxproj", "{0E071A60-7EF2-4427-BAA8-9143CACB5BCB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C4F8746D-B27E-4806-95E5-2052174E923B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dfu-suffix", "dfu-suffix_2010.vcxproj", "{8F7600A2-3B37-4956-B39B-A1D43EF29EDA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "getopt_2010", "..\..\libusbx\msvc\getopt_2010.vcxproj", "{AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libusb-1.0 (static)", "..\..\libusbx\msvc\libusb_static_2010.vcxproj", "{349EE8F9-7D25-4909-AAF5-FF3FADE72187}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|Win32.ActiveCfg = Debug|Win32 + {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|Win32.Build.0 = Debug|Win32 + {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Debug|x64.ActiveCfg = Debug|Win32 + {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|Win32.ActiveCfg = Release|Win32 + {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|Win32.Build.0 = Release|Win32 + {0E071A60-7EF2-4427-BAA8-9143CACB5BCB}.Release|x64.ActiveCfg = Release|Win32 + {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|Win32.ActiveCfg = Debug|Win32 + {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|Win32.Build.0 = Debug|Win32 + {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Debug|x64.ActiveCfg = Debug|Win32 + {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|Win32.ActiveCfg = Release|Win32 + {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|Win32.Build.0 = Release|Win32 + {8F7600A2-3B37-4956-B39B-A1D43EF29EDA}.Release|x64.ActiveCfg = Release|Win32 + {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.ActiveCfg = Debug|Win32 + {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|Win32.Build.0 = Debug|Win32 + {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.ActiveCfg = Debug|x64 + {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Debug|x64.Build.0 = Debug|x64 + {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.ActiveCfg = Release|Win32 + {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|Win32.Build.0 = Release|Win32 + {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.ActiveCfg = Release|x64 + {AE83E1B4-CE06-47EE-B7A3-C3A1D7C2D71E}.Release|x64.Build.0 = Release|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.ActiveCfg = Debug|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|Win32.Build.0 = Debug|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.ActiveCfg = Debug|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Debug|x64.Build.0 = Debug|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.ActiveCfg = Release|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|Win32.Build.0 = Release|Win32 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.ActiveCfg = Release|x64 + {349EE8F9-7D25-4909-AAF5-FF3FADE72187}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/tools/src/dfu-util/msvc/dfu-util_2010.vcxproj b/tools/src/dfu-util/msvc/dfu-util_2010.vcxproj new file mode 100755 index 0000000..cb07b64 --- /dev/null +++ b/tools/src/dfu-util/msvc/dfu-util_2010.vcxproj @@ -0,0 +1,120 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {0E071A60-7EF2-4427-BAA8-9143CACB5BCB} + dfuutil + dfu-util + + + + Application + true + MultiByte + + + Application + false + true + MultiByte + + + + + + + + + + + + + $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + $(SolutionDir)..\$(Platform)\getopt\$(Configuration);$(LibraryPath) + $(VCInstallDir)atlmfc\lib;$(VCInstallDir)lib + $(ExecutablePath) + + + $(ExecutablePath) + $(SolutionDir)..\..\libusbx\examples\getopt;$(SolutionDir)..\..\libusbx\libusb;$(IncludePath) + $(SolutionDir)..\$(Platform)\getopt\$(Configuration);$(LibraryPath) + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + + + + Level3 + Disabled + HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDebug + + + true + + + + + + + + + Level3 + MaxSpeed + true + true + HAVE_WINDOWS_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreaded + + + true + true + true + + + copy $(SolutionDir)..\$(Platform)\$(Configuration)\dll\libusb-1.0.dll $(SolutionDir)..\$(Platform)\$(ProjectName)\$(Configuration)\ + + + + + + + + + + + + + + + + + + + + + + + + + + {a2169bc8-cf99-40bf-83f3-b0e38f7067bd} + + + {349ee8f9-7d25-4909-aaf5-ff3fade72187} + + + + + + \ No newline at end of file diff --git a/tools/src/dfu-util/src/Makefile.am b/tools/src/dfu-util/src/Makefile.am new file mode 100755 index 0000000..b1f810a --- /dev/null +++ b/tools/src/dfu-util/src/Makefile.am @@ -0,0 +1,28 @@ +AM_CFLAGS = -Wall -Wextra + +bin_PROGRAMS = dfu-util dfu-suffix dfu-prefix +dfu_util_SOURCES = main.c \ + portable.h \ + dfu_load.c \ + dfu_load.h \ + dfu_util.c \ + dfu_util.h \ + dfuse.c \ + dfuse.h \ + dfuse_mem.c \ + dfuse_mem.h \ + dfu.c \ + dfu.h \ + usb_dfu.h \ + dfu_file.c \ + dfu_file.h \ + quirks.c \ + quirks.h + +dfu_suffix_SOURCES = suffix.c \ + dfu_file.h \ + dfu_file.c + +dfu_prefix_SOURCES = prefix.c \ + dfu_file.h \ + dfu_file.c diff --git a/tools/src/dfu-util/src/dfu.c b/tools/src/dfu-util/src/dfu.c new file mode 100755 index 0000000..050ad50 --- /dev/null +++ b/tools/src/dfu-util/src/dfu.c @@ -0,0 +1,357 @@ +/* + * Low-level DFU communication routines, originally taken from + * $Id: dfu.c,v 1.3 2006/06/20 06:28:04 schmidtw Exp $ + * (part of dfu-programmer). + * + * Copyright 2005-2006 Weston Schmidt + * Copyright 2011-2014 Tormod Volden + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include + +#include "portable.h" +#include "dfu.h" +#include "quirks.h" + +static int dfu_timeout = 5000; /* 5 seconds - default */ + +/* + * DFU_DETACH Request (DFU Spec 1.0, Section 5.1) + * + * device - the usb_dev_handle to communicate with + * interface - the interface to communicate with + * timeout - the timeout in ms the USB device should wait for a pending + * USB reset before giving up and terminating the operation + * + * returns 0 or < 0 on error + */ +int dfu_detach( libusb_device_handle *device, + const unsigned short interface, + const unsigned short timeout ) +{ + return libusb_control_transfer( device, + /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_DETACH, + /* wValue */ timeout, + /* wIndex */ interface, + /* Data */ NULL, + /* wLength */ 0, + dfu_timeout ); +} + + +/* + * DFU_DNLOAD Request (DFU Spec 1.0, Section 6.1.1) + * + * device - the usb_dev_handle to communicate with + * interface - the interface to communicate with + * length - the total number of bytes to transfer to the USB + * device - must be less than wTransferSize + * data - the data to transfer + * + * returns the number of bytes written or < 0 on error + */ +int dfu_download( libusb_device_handle *device, + const unsigned short interface, + const unsigned short length, + const unsigned short transaction, + unsigned char* data ) +{ + int status; + + status = libusb_control_transfer( device, + /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_DNLOAD, + /* wValue */ transaction, + /* wIndex */ interface, + /* Data */ data, + /* wLength */ length, + dfu_timeout ); + return status; +} + + +/* + * DFU_UPLOAD Request (DFU Spec 1.0, Section 6.2) + * + * device - the usb_dev_handle to communicate with + * interface - the interface to communicate with + * length - the maximum number of bytes to receive from the USB + * device - must be less than wTransferSize + * data - the buffer to put the received data in + * + * returns the number of bytes received or < 0 on error + */ +int dfu_upload( libusb_device_handle *device, + const unsigned short interface, + const unsigned short length, + const unsigned short transaction, + unsigned char* data ) +{ + int status; + + status = libusb_control_transfer( device, + /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_UPLOAD, + /* wValue */ transaction, + /* wIndex */ interface, + /* Data */ data, + /* wLength */ length, + dfu_timeout ); + return status; +} + + +/* + * DFU_GETSTATUS Request (DFU Spec 1.0, Section 6.1.2) + * + * device - the usb_dev_handle to communicate with + * interface - the interface to communicate with + * status - the data structure to be populated with the results + * + * return the number of bytes read in or < 0 on an error + */ +int dfu_get_status( struct dfu_if *dif, struct dfu_status *status ) +{ + unsigned char buffer[6]; + int result; + + /* Initialize the status data structure */ + status->bStatus = DFU_STATUS_ERROR_UNKNOWN; + status->bwPollTimeout = 0; + status->bState = STATE_DFU_ERROR; + status->iString = 0; + + result = libusb_control_transfer( dif->dev_handle, + /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_GETSTATUS, + /* wValue */ 0, + /* wIndex */ dif->interface, + /* Data */ buffer, + /* wLength */ 6, + dfu_timeout ); + + if( 6 == result ) { + status->bStatus = buffer[0]; + if (dif->quirks & QUIRK_POLLTIMEOUT) + status->bwPollTimeout = DEFAULT_POLLTIMEOUT; + else + status->bwPollTimeout = ((0xff & buffer[3]) << 16) | + ((0xff & buffer[2]) << 8) | + (0xff & buffer[1]); + status->bState = buffer[4]; + status->iString = buffer[5]; + } + + return result; +} + + +/* + * DFU_CLRSTATUS Request (DFU Spec 1.0, Section 6.1.3) + * + * device - the usb_dev_handle to communicate with + * interface - the interface to communicate with + * + * return 0 or < 0 on an error + */ +int dfu_clear_status( libusb_device_handle *device, + const unsigned short interface ) +{ + return libusb_control_transfer( device, + /* bmRequestType */ LIBUSB_ENDPOINT_OUT| LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_CLRSTATUS, + /* wValue */ 0, + /* wIndex */ interface, + /* Data */ NULL, + /* wLength */ 0, + dfu_timeout ); +} + + +/* + * DFU_GETSTATE Request (DFU Spec 1.0, Section 6.1.5) + * + * device - the usb_dev_handle to communicate with + * interface - the interface to communicate with + * length - the maximum number of bytes to receive from the USB + * device - must be less than wTransferSize + * data - the buffer to put the received data in + * + * returns the state or < 0 on error + */ +int dfu_get_state( libusb_device_handle *device, + const unsigned short interface ) +{ + int result; + unsigned char buffer[1]; + + result = libusb_control_transfer( device, + /* bmRequestType */ LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_GETSTATE, + /* wValue */ 0, + /* wIndex */ interface, + /* Data */ buffer, + /* wLength */ 1, + dfu_timeout ); + + /* Return the error if there is one. */ + if (result < 1) + return -1; + + /* Return the state. */ + return buffer[0]; +} + + +/* + * DFU_ABORT Request (DFU Spec 1.0, Section 6.1.4) + * + * device - the usb_dev_handle to communicate with + * interface - the interface to communicate with + * + * returns 0 or < 0 on an error + */ +int dfu_abort( libusb_device_handle *device, + const unsigned short interface ) +{ + return libusb_control_transfer( device, + /* bmRequestType */ LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_ABORT, + /* wValue */ 0, + /* wIndex */ interface, + /* Data */ NULL, + /* wLength */ 0, + dfu_timeout ); +} + + +const char* dfu_state_to_string( int state ) +{ + const char *message; + + switch (state) { + case STATE_APP_IDLE: + message = "appIDLE"; + break; + case STATE_APP_DETACH: + message = "appDETACH"; + break; + case STATE_DFU_IDLE: + message = "dfuIDLE"; + break; + case STATE_DFU_DOWNLOAD_SYNC: + message = "dfuDNLOAD-SYNC"; + break; + case STATE_DFU_DOWNLOAD_BUSY: + message = "dfuDNBUSY"; + break; + case STATE_DFU_DOWNLOAD_IDLE: + message = "dfuDNLOAD-IDLE"; + break; + case STATE_DFU_MANIFEST_SYNC: + message = "dfuMANIFEST-SYNC"; + break; + case STATE_DFU_MANIFEST: + message = "dfuMANIFEST"; + break; + case STATE_DFU_MANIFEST_WAIT_RESET: + message = "dfuMANIFEST-WAIT-RESET"; + break; + case STATE_DFU_UPLOAD_IDLE: + message = "dfuUPLOAD-IDLE"; + break; + case STATE_DFU_ERROR: + message = "dfuERROR"; + break; + default: + message = NULL; + break; + } + + return message; +} + +/* Chapter 6.1.2 */ +static const char *dfu_status_names[] = { + /* DFU_STATUS_OK */ + "No error condition is present", + /* DFU_STATUS_errTARGET */ + "File is not targeted for use by this device", + /* DFU_STATUS_errFILE */ + "File is for this device but fails some vendor-specific test", + /* DFU_STATUS_errWRITE */ + "Device is unable to write memory", + /* DFU_STATUS_errERASE */ + "Memory erase function failed", + /* DFU_STATUS_errCHECK_ERASED */ + "Memory erase check failed", + /* DFU_STATUS_errPROG */ + "Program memory function failed", + /* DFU_STATUS_errVERIFY */ + "Programmed memory failed verification", + /* DFU_STATUS_errADDRESS */ + "Cannot program memory due to received address that is out of range", + /* DFU_STATUS_errNOTDONE */ + "Received DFU_DNLOAD with wLength = 0, but device does not think that it has all data yet", + /* DFU_STATUS_errFIRMWARE */ + "Device's firmware is corrupt. It cannot return to run-time (non-DFU) operations", + /* DFU_STATUS_errVENDOR */ + "iString indicates a vendor specific error", + /* DFU_STATUS_errUSBR */ + "Device detected unexpected USB reset signalling", + /* DFU_STATUS_errPOR */ + "Device detected unexpected power on reset", + /* DFU_STATUS_errUNKNOWN */ + "Something went wrong, but the device does not know what it was", + /* DFU_STATUS_errSTALLEDPKT */ + "Device stalled an unexpected request" +}; + + +const char *dfu_status_to_string(int status) +{ + if (status > DFU_STATUS_errSTALLEDPKT) + return "INVALID"; + return dfu_status_names[status]; +} + +int dfu_abort_to_idle(struct dfu_if *dif) +{ + int ret; + struct dfu_status dst; + + ret = dfu_abort(dif->dev_handle, dif->interface); + if (ret < 0) { + errx(EX_IOERR, "Error sending dfu abort request"); + exit(1); + } + ret = dfu_get_status(dif, &dst); + if (ret < 0) { + errx(EX_IOERR, "Error during abort get_status"); + exit(1); + } + if (dst.bState != DFU_STATE_dfuIDLE) { + errx(EX_IOERR, "Failed to enter idle state on abort"); + exit(1); + } + milli_sleep(dst.bwPollTimeout); + return ret; +} diff --git a/tools/src/dfu-util/src/dfu.h b/tools/src/dfu-util/src/dfu.h new file mode 100755 index 0000000..39f18c3 --- /dev/null +++ b/tools/src/dfu-util/src/dfu.h @@ -0,0 +1,133 @@ +/* + * dfu-programmer + * + * $Id: dfu.h,v 1.2 2005/09/25 01:27:42 schmidtw Exp $ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef DFU_H +#define DFU_H + +#include +#include "usb_dfu.h" + +/* DFU states */ +#define STATE_APP_IDLE 0x00 +#define STATE_APP_DETACH 0x01 +#define STATE_DFU_IDLE 0x02 +#define STATE_DFU_DOWNLOAD_SYNC 0x03 +#define STATE_DFU_DOWNLOAD_BUSY 0x04 +#define STATE_DFU_DOWNLOAD_IDLE 0x05 +#define STATE_DFU_MANIFEST_SYNC 0x06 +#define STATE_DFU_MANIFEST 0x07 +#define STATE_DFU_MANIFEST_WAIT_RESET 0x08 +#define STATE_DFU_UPLOAD_IDLE 0x09 +#define STATE_DFU_ERROR 0x0a + + +/* DFU status */ +#define DFU_STATUS_OK 0x00 +#define DFU_STATUS_ERROR_TARGET 0x01 +#define DFU_STATUS_ERROR_FILE 0x02 +#define DFU_STATUS_ERROR_WRITE 0x03 +#define DFU_STATUS_ERROR_ERASE 0x04 +#define DFU_STATUS_ERROR_CHECK_ERASED 0x05 +#define DFU_STATUS_ERROR_PROG 0x06 +#define DFU_STATUS_ERROR_VERIFY 0x07 +#define DFU_STATUS_ERROR_ADDRESS 0x08 +#define DFU_STATUS_ERROR_NOTDONE 0x09 +#define DFU_STATUS_ERROR_FIRMWARE 0x0a +#define DFU_STATUS_ERROR_VENDOR 0x0b +#define DFU_STATUS_ERROR_USBR 0x0c +#define DFU_STATUS_ERROR_POR 0x0d +#define DFU_STATUS_ERROR_UNKNOWN 0x0e +#define DFU_STATUS_ERROR_STALLEDPKT 0x0f + +/* DFU commands */ +#define DFU_DETACH 0 +#define DFU_DNLOAD 1 +#define DFU_UPLOAD 2 +#define DFU_GETSTATUS 3 +#define DFU_CLRSTATUS 4 +#define DFU_GETSTATE 5 +#define DFU_ABORT 6 + +/* DFU interface */ +#define DFU_IFF_DFU 0x0001 /* DFU Mode, (not Runtime) */ + +/* This is based off of DFU_GETSTATUS + * + * 1 unsigned byte bStatus + * 3 unsigned byte bwPollTimeout + * 1 unsigned byte bState + * 1 unsigned byte iString +*/ + +struct dfu_status { + unsigned char bStatus; + unsigned int bwPollTimeout; + unsigned char bState; + unsigned char iString; +}; + +struct dfu_if { + struct usb_dfu_func_descriptor func_dfu; + uint16_t quirks; + uint16_t busnum; + uint16_t devnum; + uint16_t vendor; + uint16_t product; + uint16_t bcdDevice; + uint8_t configuration; + uint8_t interface; + uint8_t altsetting; + uint8_t flags; + uint8_t bMaxPacketSize0; + char *alt_name; + char *serial_name; + libusb_device *dev; + libusb_device_handle *dev_handle; + struct dfu_if *next; +}; + +int dfu_detach( libusb_device_handle *device, + const unsigned short interface, + const unsigned short timeout ); +int dfu_download( libusb_device_handle *device, + const unsigned short interface, + const unsigned short length, + const unsigned short transaction, + unsigned char* data ); +int dfu_upload( libusb_device_handle *device, + const unsigned short interface, + const unsigned short length, + const unsigned short transaction, + unsigned char* data ); +int dfu_get_status( struct dfu_if *dif, + struct dfu_status *status ); +int dfu_clear_status( libusb_device_handle *device, + const unsigned short interface ); +int dfu_get_state( libusb_device_handle *device, + const unsigned short interface ); +int dfu_abort( libusb_device_handle *device, + const unsigned short interface ); +int dfu_abort_to_idle( struct dfu_if *dif); + +const char *dfu_state_to_string( int state ); + +const char *dfu_status_to_string( int status ); + +#endif /* DFU_H */ diff --git a/tools/src/dfu-util/src/dfu_file.c b/tools/src/dfu-util/src/dfu_file.c new file mode 100755 index 0000000..2f5a585 --- /dev/null +++ b/tools/src/dfu-util/src/dfu_file.c @@ -0,0 +1,444 @@ +/* + * Load or store DFU files including suffix and prefix + * + * Copyright 2014 Tormod Volden + * Copyright 2012 Stefan Schmidt + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "portable.h" +#include "dfu_file.h" + +#define DFU_SUFFIX_LENGTH 16 +#define LMDFU_PREFIX_LENGTH 8 +#define LPCDFU_PREFIX_LENGTH 16 +#define PROGRESS_BAR_WIDTH 25 +#define STDIN_CHUNK_SIZE 65536 + +static const unsigned long crc32_table[] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; + +static uint32_t crc32_byte(uint32_t accum, uint8_t delta) +{ + return crc32_table[(accum ^ delta) & 0xff] ^ (accum >> 8); +} + +static int probe_prefix(struct dfu_file *file) +{ + uint8_t *prefix = file->firmware; + + if (file->size.total < LMDFU_PREFIX_LENGTH) + return 1; + if ((prefix[0] == 0x01) && (prefix[1] == 0x00)) { + file->prefix_type = LMDFU_PREFIX; + file->size.prefix = LMDFU_PREFIX_LENGTH; + file->lmdfu_address = 1024 * ((prefix[3] << 8) | prefix[2]); + } + else if (((prefix[0] & 0x3f) == 0x1a) && ((prefix[1] & 0x3f)== 0x3f)) { + file->prefix_type = LPCDFU_UNENCRYPTED_PREFIX; + file->size.prefix = LPCDFU_PREFIX_LENGTH; + } + + if (file->size.prefix + file->size.suffix > file->size.total) + return 1; + return 0; +} + +void dfu_progress_bar(const char *desc, unsigned long long curr, + unsigned long long max) +{ + static char buf[PROGRESS_BAR_WIDTH + 1]; + static unsigned long long last_progress = -1; + static time_t last_time; + time_t curr_time = time(NULL); + unsigned long long progress; + unsigned long long x; + + /* check for not known maximum */ + if (max < curr) + max = curr + 1; + /* make none out of none give zero */ + if (max == 0 && curr == 0) + max = 1; + + /* compute completion */ + progress = (PROGRESS_BAR_WIDTH * curr) / max; + if (progress > PROGRESS_BAR_WIDTH) + progress = PROGRESS_BAR_WIDTH; + if (progress == last_progress && + curr_time == last_time) + return; + last_progress = progress; + last_time = curr_time; + + for (x = 0; x != PROGRESS_BAR_WIDTH; x++) { + if (x < progress) + buf[x] = '='; + else + buf[x] = ' '; + } + buf[x] = 0; + + printf("\r%s\t[%s] %3lld%% %12lld bytes", desc, buf, + (100ULL * curr) / max, curr); + + if (progress == PROGRESS_BAR_WIDTH) + printf("\n%s done.\n", desc); +} + +void *dfu_malloc(size_t size) +{ + void *ptr = malloc(size); + if (ptr == NULL) + errx(EX_SOFTWARE, "Cannot allocate memory of size %d bytes", (int)size); + return (ptr); +} + +uint32_t dfu_file_write_crc(int f, uint32_t crc, const void *buf, int size) +{ + int x; + + /* compute CRC */ + for (x = 0; x != size; x++) + crc = crc32_byte(crc, ((uint8_t *)buf)[x]); + + /* write data */ + if (write(f, buf, size) != size) + err(EX_IOERR, "Could not write %d bytes to file %d", size, f); + + return (crc); +} + +void dfu_load_file(struct dfu_file *file, enum suffix_req check_suffix, enum prefix_req check_prefix) +{ + off_t offset; + int f; + int i; + int res; + + file->size.prefix = 0; + file->size.suffix = 0; + + /* default values, if no valid suffix is found */ + file->bcdDFU = 0; + file->idVendor = 0xffff; /* wildcard value */ + file->idProduct = 0xffff; /* wildcard value */ + file->bcdDevice = 0xffff; /* wildcard value */ + + /* default values, if no valid prefix is found */ + file->lmdfu_address = 0; + + free(file->firmware); + + if (!strcmp(file->name, "-")) { + int read_bytes; + +#ifdef WIN32 + _setmode( _fileno( stdin ), _O_BINARY ); +#endif + file->firmware = (uint8_t*) dfu_malloc(STDIN_CHUNK_SIZE); + read_bytes = fread(file->firmware, 1, STDIN_CHUNK_SIZE, stdin); + file->size.total = read_bytes; + while (read_bytes == STDIN_CHUNK_SIZE) { + file->firmware = (uint8_t*) realloc(file->firmware, file->size.total + STDIN_CHUNK_SIZE); + if (!file->firmware) + err(EX_IOERR, "Could not allocate firmware buffer"); + read_bytes = fread(file->firmware + file->size.total, 1, STDIN_CHUNK_SIZE, stdin); + file->size.total += read_bytes; + } + if (verbose) + printf("Read %i bytes from stdin\n", file->size.total); + /* Never require suffix when reading from stdin */ + check_suffix = MAYBE_SUFFIX; + } else { + f = open(file->name, O_RDONLY | O_BINARY); + if (f < 0) + err(EX_IOERR, "Could not open file %s for reading", file->name); + + offset = lseek(f, 0, SEEK_END); + + if ((int)offset < 0 || (int)offset != offset) + err(EX_IOERR, "File size is too big"); + + if (lseek(f, 0, SEEK_SET) != 0) + err(EX_IOERR, "Could not seek to beginning"); + + file->size.total = offset; + file->firmware = dfu_malloc(file->size.total); + + if (read(f, file->firmware, file->size.total) != file->size.total) { + err(EX_IOERR, "Could not read %d bytes from %s", + file->size.total, file->name); + } + close(f); + } + + /* Check for possible DFU file suffix by trying to parse one */ + { + uint32_t crc = 0xffffffff; + const uint8_t *dfusuffix; + int missing_suffix = 0; + const char *reason; + + if (file->size.total < DFU_SUFFIX_LENGTH) { + reason = "File too short for DFU suffix"; + missing_suffix = 1; + goto checked; + } + + dfusuffix = file->firmware + file->size.total - + DFU_SUFFIX_LENGTH; + + for (i = 0; i < file->size.total - 4; i++) + crc = crc32_byte(crc, file->firmware[i]); + + if (dfusuffix[10] != 'D' || + dfusuffix[9] != 'F' || + dfusuffix[8] != 'U') { + reason = "Invalid DFU suffix signature"; + missing_suffix = 1; + goto checked; + } + + file->dwCRC = (dfusuffix[15] << 24) + + (dfusuffix[14] << 16) + + (dfusuffix[13] << 8) + + dfusuffix[12]; + + if (file->dwCRC != crc) { + reason = "DFU suffix CRC does not match"; + missing_suffix = 1; + goto checked; + } + + /* At this point we believe we have a DFU suffix + so we require further checks to succeed */ + + file->bcdDFU = (dfusuffix[7] << 8) + dfusuffix[6]; + + if (verbose) + printf("DFU suffix version %x\n", file->bcdDFU); + + file->size.suffix = dfusuffix[11]; + + if (file->size.suffix < DFU_SUFFIX_LENGTH) { + errx(EX_IOERR, "Unsupported DFU suffix length %d", + file->size.suffix); + } + + if (file->size.suffix > file->size.total) { + errx(EX_IOERR, "Invalid DFU suffix length %d", + file->size.suffix); + } + + file->idVendor = (dfusuffix[5] << 8) + dfusuffix[4]; + file->idProduct = (dfusuffix[3] << 8) + dfusuffix[2]; + file->bcdDevice = (dfusuffix[1] << 8) + dfusuffix[0]; + +checked: + if (missing_suffix) { + if (check_suffix == NEEDS_SUFFIX) { + warnx("%s", reason); + errx(EX_IOERR, "Valid DFU suffix needed"); + } else if (check_suffix == MAYBE_SUFFIX) { + warnx("%s", reason); + warnx("A valid DFU suffix will be required in " + "a future dfu-util release!!!"); + } + } else { + if (check_suffix == NO_SUFFIX) { + errx(EX_SOFTWARE, "Please remove existing DFU suffix before adding a new one.\n"); + } + } + } + res = probe_prefix(file); + if ((res || file->size.prefix == 0) && check_prefix == NEEDS_PREFIX) + errx(EX_IOERR, "Valid DFU prefix needed"); + if (file->size.prefix && check_prefix == NO_PREFIX) + errx(EX_IOERR, "A prefix already exists, please delete it first"); + if (file->size.prefix && verbose) { + uint8_t *data = file->firmware; + if (file->prefix_type == LMDFU_PREFIX) + printf("Possible TI Stellaris DFU prefix with " + "the following properties\n" + "Address: 0x%08x\n" + "Payload length: %d\n", + file->lmdfu_address, + data[4] | (data[5] << 8) | + (data[6] << 16) | (data[7] << 14)); + else if (file->prefix_type == LPCDFU_UNENCRYPTED_PREFIX) + printf("Possible unencrypted NXP LPC DFU prefix with " + "the following properties\n" + "Payload length: %d kiByte\n", + data[2] >>1 | (data[3] << 7) ); + else + errx(EX_IOERR, "Unknown DFU prefix type"); + } +} + +void dfu_store_file(struct dfu_file *file, int write_suffix, int write_prefix) +{ + uint32_t crc = 0xffffffff; + int f; + + f = open(file->name, O_WRONLY | O_BINARY | O_TRUNC | O_CREAT, 0666); + if (f < 0) + err(EX_IOERR, "Could not open file %s for writing", file->name); + + /* write prefix, if any */ + if (write_prefix) { + if (file->prefix_type == LMDFU_PREFIX) { + uint8_t lmdfu_prefix[LMDFU_PREFIX_LENGTH]; + uint32_t addr = file->lmdfu_address / 1024; + + /* lmdfu_dfu_prefix payload length excludes prefix and suffix */ + uint32_t len = file->size.total - + file->size.prefix - file->size.suffix; + + lmdfu_prefix[0] = 0x01; /* STELLARIS_DFU_PROG */ + lmdfu_prefix[1] = 0x00; /* Reserved */ + lmdfu_prefix[2] = (uint8_t)(addr & 0xff); + lmdfu_prefix[3] = (uint8_t)(addr >> 8); + lmdfu_prefix[4] = (uint8_t)(len & 0xff); + lmdfu_prefix[5] = (uint8_t)(len >> 8) & 0xff; + lmdfu_prefix[6] = (uint8_t)(len >> 16) & 0xff; + lmdfu_prefix[7] = (uint8_t)(len >> 24); + + crc = dfu_file_write_crc(f, crc, lmdfu_prefix, LMDFU_PREFIX_LENGTH); + } + if (file->prefix_type == LPCDFU_UNENCRYPTED_PREFIX) { + uint8_t lpcdfu_prefix[LPCDFU_PREFIX_LENGTH] = {0}; + int i; + + /* Payload is firmware and prefix rounded to 512 bytes */ + uint32_t len = (file->size.total - file->size.suffix + 511) /512; + + lpcdfu_prefix[0] = 0x1a; /* Unencypted*/ + lpcdfu_prefix[1] = 0x3f; /* Reserved */ + lpcdfu_prefix[2] = (uint8_t)(len & 0xff); + lpcdfu_prefix[3] = (uint8_t)((len >> 8) & 0xff); + for (i = 12; i < LPCDFU_PREFIX_LENGTH; i++) + lpcdfu_prefix[i] = 0xff; + + crc = dfu_file_write_crc(f, crc, lpcdfu_prefix, LPCDFU_PREFIX_LENGTH); + } + } + /* write firmware binary */ + crc = dfu_file_write_crc(f, crc, file->firmware + file->size.prefix, + file->size.total - file->size.prefix - file->size.suffix); + + /* write suffix, if any */ + if (write_suffix) { + uint8_t dfusuffix[DFU_SUFFIX_LENGTH]; + + dfusuffix[0] = file->bcdDevice & 0xff; + dfusuffix[1] = file->bcdDevice >> 8; + dfusuffix[2] = file->idProduct & 0xff; + dfusuffix[3] = file->idProduct >> 8; + dfusuffix[4] = file->idVendor & 0xff; + dfusuffix[5] = file->idVendor >> 8; + dfusuffix[6] = file->bcdDFU & 0xff; + dfusuffix[7] = file->bcdDFU >> 8; + dfusuffix[8] = 'U'; + dfusuffix[9] = 'F'; + dfusuffix[10] = 'D'; + dfusuffix[11] = DFU_SUFFIX_LENGTH; + + crc = dfu_file_write_crc(f, crc, dfusuffix, + DFU_SUFFIX_LENGTH - 4); + + dfusuffix[12] = crc; + dfusuffix[13] = crc >> 8; + dfusuffix[14] = crc >> 16; + dfusuffix[15] = crc >> 24; + + crc = dfu_file_write_crc(f, crc, dfusuffix + 12, 4); + } + close(f); +} + +void show_suffix_and_prefix(struct dfu_file *file) +{ + if (file->size.prefix == LMDFU_PREFIX_LENGTH) { + printf("The file %s contains a TI Stellaris DFU prefix with the following properties:\n", file->name); + printf("Address:\t0x%08x\n", file->lmdfu_address); + } else if (file->size.prefix == LPCDFU_PREFIX_LENGTH) { + uint8_t * prefix = file->firmware; + printf("The file %s contains a NXP unencrypted LPC DFU prefix with the following properties:\n", file->name); + printf("Size:\t%5d kiB\n", prefix[2]>>1|prefix[3]<<7); + } else if (file->size.prefix != 0) { + printf("The file %s contains an unknown prefix\n", file->name); + } + if (file->size.suffix > 0) { + printf("The file %s contains a DFU suffix with the following properties:\n", file->name); + printf("BCD device:\t0x%04X\n", file->bcdDevice); + printf("Product ID:\t0x%04X\n",file->idProduct); + printf("Vendor ID:\t0x%04X\n", file->idVendor); + printf("BCD DFU:\t0x%04X\n", file->bcdDFU); + printf("Length:\t\t%i\n", file->size.suffix); + printf("CRC:\t\t0x%08X\n", file->dwCRC); + } +} diff --git a/tools/src/dfu-util/src/dfu_file.h b/tools/src/dfu-util/src/dfu_file.h new file mode 100755 index 0000000..31c90b8 --- /dev/null +++ b/tools/src/dfu-util/src/dfu_file.h @@ -0,0 +1,60 @@ + +#ifndef DFU_FILE_H +#define DFU_FILE_H + +#include + +struct dfu_file { + /* File name */ + const char *name; + /* Pointer to file loaded into memory */ + uint8_t *firmware; + /* Different sizes */ + struct { + int total; + int prefix; + int suffix; + } size; + /* From prefix fields */ + uint32_t lmdfu_address; + /* From prefix fields */ + uint32_t prefix_type; + + /* From DFU suffix fields */ + uint32_t dwCRC; + uint16_t bcdDFU; + uint16_t idVendor; + uint16_t idProduct; + uint16_t bcdDevice; +}; + +enum suffix_req { + NO_SUFFIX, + NEEDS_SUFFIX, + MAYBE_SUFFIX +}; + +enum prefix_req { + NO_PREFIX, + NEEDS_PREFIX, + MAYBE_PREFIX +}; + +enum prefix_type { + ZERO_PREFIX, + LMDFU_PREFIX, + LPCDFU_UNENCRYPTED_PREFIX +}; + +extern int verbose; + +void dfu_load_file(struct dfu_file *file, enum suffix_req check_suffix, enum prefix_req check_prefix); +void dfu_store_file(struct dfu_file *file, int write_suffix, int write_prefix); + +void dfu_progress_bar(const char *desc, unsigned long long curr, + unsigned long long max); +void *dfu_malloc(size_t size); +uint32_t dfu_file_write_crc(int f, uint32_t crc, const void *buf, int size); +void show_suffix_and_prefix(struct dfu_file *file); + +#endif /* DFU_FILE_H */ diff --git a/tools/src/dfu-util/src/dfu_load.c b/tools/src/dfu-util/src/dfu_load.c new file mode 100755 index 0000000..d4ff51c --- /dev/null +++ b/tools/src/dfu-util/src/dfu_load.c @@ -0,0 +1,196 @@ +/* + * DFU transfer routines + * + * This is supposed to be a general DFU implementation, as specified in the + * USB DFU 1.0 and 1.1 specification. + * + * The code was originally intended to interface with a USB device running the + * "sam7dfu" firmware (see http://www.openpcd.org/) on an AT91SAM7 processor. + * + * Copyright 2007-2008 Harald Welte + * Copyright 2013 Hans Petter Selasky + * Copyright 2014 Tormod Volden + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include + +#include + +#include "portable.h" +#include "dfu.h" +#include "usb_dfu.h" +#include "dfu_file.h" +#include "dfu_load.h" +#include "quirks.h" + +int dfuload_do_upload(struct dfu_if *dif, int xfer_size, + int expected_size, int fd) +{ + int total_bytes = 0; + unsigned short transaction = 0; + unsigned char *buf; + int ret; + + buf = dfu_malloc(xfer_size); + + printf("Copying data from DFU device to PC\n"); + dfu_progress_bar("Upload", 0, 1); + + while (1) { + int rc; + rc = dfu_upload(dif->dev_handle, dif->interface, + xfer_size, transaction++, buf); + if (rc < 0) { + warnx("Error during upload"); + ret = rc; + goto out_free; + } + + dfu_file_write_crc(fd, 0, buf, rc); + total_bytes += rc; + + if (total_bytes < 0) + errx(EX_SOFTWARE, "Received too many bytes (wraparound)"); + + if (rc < xfer_size) { + /* last block, return */ + ret = total_bytes; + break; + } + dfu_progress_bar("Upload", total_bytes, expected_size); + } + ret = 0; + +out_free: + dfu_progress_bar("Upload", total_bytes, total_bytes); + if (total_bytes == 0) + printf("\nFailed.\n"); + free(buf); + if (verbose) + printf("Received a total of %i bytes\n", total_bytes); + if (expected_size != 0 && total_bytes != expected_size) + errx(EX_SOFTWARE, "Unexpected number of bytes uploaded from device"); + return ret; +} + +int dfuload_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file) +{ + int bytes_sent; + int expected_size; + unsigned char *buf; + unsigned short transaction = 0; + struct dfu_status dst; + int ret; + + printf("Copying data from PC to DFU device\n"); + + buf = file->firmware; + expected_size = file->size.total - file->size.suffix; + bytes_sent = 0; + + dfu_progress_bar("Download", 0, 1); + while (bytes_sent < expected_size) { + int bytes_left; + int chunk_size; + + bytes_left = expected_size - bytes_sent; + if (bytes_left < xfer_size) + chunk_size = bytes_left; + else + chunk_size = xfer_size; + + ret = dfu_download(dif->dev_handle, dif->interface, + chunk_size, transaction++, chunk_size ? buf : NULL); + if (ret < 0) { + warnx("Error during download"); + goto out; + } + bytes_sent += chunk_size; + buf += chunk_size; + + do { + ret = dfu_get_status(dif, &dst); + if (ret < 0) { + errx(EX_IOERR, "Error during download get_status"); + goto out; + } + + if (dst.bState == DFU_STATE_dfuDNLOAD_IDLE || + dst.bState == DFU_STATE_dfuERROR) + break; + + /* Wait while device executes flashing */ + milli_sleep(dst.bwPollTimeout); + + } while (1); + if (dst.bStatus != DFU_STATUS_OK) { + printf(" failed!\n"); + printf("state(%u) = %s, status(%u) = %s\n", dst.bState, + dfu_state_to_string(dst.bState), dst.bStatus, + dfu_status_to_string(dst.bStatus)); + ret = -1; + goto out; + } + dfu_progress_bar("Download", bytes_sent, bytes_sent + bytes_left); + } + + /* send one zero sized download request to signalize end */ + ret = dfu_download(dif->dev_handle, dif->interface, + 0, transaction, NULL); + if (ret < 0) { + errx(EX_IOERR, "Error sending completion packet"); + goto out; + } + + dfu_progress_bar("Download", bytes_sent, bytes_sent); + + if (verbose) + printf("Sent a total of %i bytes\n", bytes_sent); + +get_status: + /* Transition to MANIFEST_SYNC state */ + ret = dfu_get_status(dif, &dst); + if (ret < 0) { + warnx("unable to read DFU status after completion"); + goto out; + } + printf("state(%u) = %s, status(%u) = %s\n", dst.bState, + dfu_state_to_string(dst.bState), dst.bStatus, + dfu_status_to_string(dst.bStatus)); + + milli_sleep(dst.bwPollTimeout); + + /* FIXME: deal correctly with ManifestationTolerant=0 / WillDetach bits */ + switch (dst.bState) { + case DFU_STATE_dfuMANIFEST_SYNC: + case DFU_STATE_dfuMANIFEST: + /* some devices (e.g. TAS1020b) need some time before we + * can obtain the status */ + milli_sleep(1000); + goto get_status; + break; + case DFU_STATE_dfuIDLE: + break; + } + printf("Done!\n"); + +out: + return bytes_sent; +} diff --git a/tools/src/dfu-util/src/dfu_load.h b/tools/src/dfu-util/src/dfu_load.h new file mode 100755 index 0000000..fe363aa --- /dev/null +++ b/tools/src/dfu-util/src/dfu_load.h @@ -0,0 +1,7 @@ +#ifndef DFU_LOAD_H +#define DFU_LOAD_H + +int dfuload_do_upload(struct dfu_if *dif, int xfer_size, int expected_size, int fd); +int dfuload_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file); + +#endif /* DFU_LOAD_H */ diff --git a/tools/src/dfu-util/src/dfu_util.c b/tools/src/dfu-util/src/dfu_util.c new file mode 100755 index 0000000..d9ad2d0 --- /dev/null +++ b/tools/src/dfu-util/src/dfu_util.c @@ -0,0 +1,346 @@ +/* + * Functions for detecting DFU USB entities + * + * Written by Harald Welte + * Copyright 2007-2008 by OpenMoko, Inc. + * Copyright 2013 Hans Petter Selasky + * + * Based on existing code of dfu-programmer-0.4 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include + +#include "portable.h" +#include "dfu.h" +#include "usb_dfu.h" +#include "dfu_file.h" +#include "dfu_load.h" +#include "dfu_util.h" +#include "dfuse.h" +#include "quirks.h" + +#ifdef HAVE_USBPATH_H +#include +#endif + +/* + * Look for a descriptor in a concatenated descriptor list. Will + * return upon the first match of the given descriptor type. Returns length of + * found descriptor, limited to res_size + */ +static int find_descriptor(const uint8_t *desc_list, int list_len, + uint8_t desc_type, void *res_buf, int res_size) +{ + int p = 0; + + if (list_len < 2) + return (-1); + + while (p + 1 < list_len) { + int desclen; + + desclen = (int) desc_list[p]; + if (desclen == 0) { + warnx("Invalid descriptor list"); + return -1; + } + if (desc_list[p + 1] == desc_type) { + if (desclen > res_size) + desclen = res_size; + if (p + desclen > list_len) + desclen = list_len - p; + memcpy(res_buf, &desc_list[p], desclen); + return desclen; + } + p += (int) desc_list[p]; + } + return -1; +} + +static void probe_configuration(libusb_device *dev, struct libusb_device_descriptor *desc) +{ + struct usb_dfu_func_descriptor func_dfu; + libusb_device_handle *devh; + struct dfu_if *pdfu; + struct libusb_config_descriptor *cfg; + const struct libusb_interface_descriptor *intf; + const struct libusb_interface *uif; + char alt_name[MAX_DESC_STR_LEN + 1]; + char serial_name[MAX_DESC_STR_LEN + 1]; + int cfg_idx; + int intf_idx; + int alt_idx; + int ret; + int has_dfu; + + for (cfg_idx = 0; cfg_idx != desc->bNumConfigurations; cfg_idx++) { + memset(&func_dfu, 0, sizeof(func_dfu)); + has_dfu = 0; + + ret = libusb_get_config_descriptor(dev, cfg_idx, &cfg); + if (ret != 0) + return; + if (match_config_index > -1 && match_config_index != cfg->bConfigurationValue) { + libusb_free_config_descriptor(cfg); + continue; + } + + /* + * In some cases, noticably FreeBSD if uid != 0, + * the configuration descriptors are empty + */ + if (!cfg) + return; + + ret = find_descriptor(cfg->extra, cfg->extra_length, + USB_DT_DFU, &func_dfu, sizeof(func_dfu)); + if (ret > -1) + goto found_dfu; + + for (intf_idx = 0; intf_idx < cfg->bNumInterfaces; + intf_idx++) { + uif = &cfg->interface[intf_idx]; + if (!uif) + break; + + for (alt_idx = 0; alt_idx < cfg->interface[intf_idx].num_altsetting; + alt_idx++) { + intf = &uif->altsetting[alt_idx]; + + ret = find_descriptor(intf->extra, intf->extra_length, USB_DT_DFU, + &func_dfu, sizeof(func_dfu)); + if (ret > -1) + goto found_dfu; + + if (intf->bInterfaceClass != 0xfe || + intf->bInterfaceSubClass != 1) + continue; + + has_dfu = 1; + } + } + if (has_dfu) { + /* + * Finally try to retrieve it requesting the + * device directly This is not supported on + * all devices for non-standard types + */ + if (libusb_open(dev, &devh) == 0) { + ret = libusb_get_descriptor(devh, USB_DT_DFU, 0, + (void *)&func_dfu, sizeof(func_dfu)); + libusb_close(devh); + if (ret > -1) + goto found_dfu; + } + warnx("Device has DFU interface, " + "but has no DFU functional descriptor"); + + /* fake version 1.0 */ + func_dfu.bLength = 7; + func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); + goto found_dfu; + } + libusb_free_config_descriptor(cfg); + continue; + +found_dfu: + if (func_dfu.bLength == 7) { + printf("Deducing device DFU version from functional descriptor " + "length\n"); + func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); + } else if (func_dfu.bLength < 9) { + printf("Error obtaining DFU functional descriptor\n"); + printf("Please report this as a bug!\n"); + printf("Warning: Assuming DFU version 1.0\n"); + func_dfu.bcdDFUVersion = libusb_cpu_to_le16(0x0100); + printf("Warning: Transfer size can not be detected\n"); + func_dfu.wTransferSize = 0; + } + + for (intf_idx = 0; intf_idx < cfg->bNumInterfaces; + intf_idx++) { + if (match_iface_index > -1 && match_iface_index != intf_idx) + continue; + + uif = &cfg->interface[intf_idx]; + if (!uif) + break; + + for (alt_idx = 0; + alt_idx < uif->num_altsetting; alt_idx++) { + int dfu_mode; + + intf = &uif->altsetting[alt_idx]; + + if (intf->bInterfaceClass != 0xfe || + intf->bInterfaceSubClass != 1) + continue; + + dfu_mode = (intf->bInterfaceProtocol == 2); + /* e.g. DSO Nano has bInterfaceProtocol 0 instead of 2 */ + if (func_dfu.bcdDFUVersion == 0x011a && intf->bInterfaceProtocol == 0) + dfu_mode = 1; + + if (dfu_mode && + match_iface_alt_index > -1 && match_iface_alt_index != alt_idx) + continue; + + if (dfu_mode) { + if ((match_vendor_dfu >= 0 && match_vendor_dfu != desc->idVendor) || + (match_product_dfu >= 0 && match_product_dfu != desc->idProduct)) { + continue; + } + } else { + if ((match_vendor >= 0 && match_vendor != desc->idVendor) || + (match_product >= 0 && match_product != desc->idProduct)) { + continue; + } + } + + if (libusb_open(dev, &devh)) { + warnx("Cannot open DFU device %04x:%04x", desc->idVendor, desc->idProduct); + break; + } + if (intf->iInterface != 0) + ret = libusb_get_string_descriptor_ascii(devh, + intf->iInterface, (void *)alt_name, MAX_DESC_STR_LEN); + else + ret = -1; + if (ret < 1) + strcpy(alt_name, "UNKNOWN"); + if (desc->iSerialNumber != 0) + ret = libusb_get_string_descriptor_ascii(devh, + desc->iSerialNumber, (void *)serial_name, MAX_DESC_STR_LEN); + else + ret = -1; + if (ret < 1) + strcpy(serial_name, "UNKNOWN"); + libusb_close(devh); + + if (dfu_mode && + match_iface_alt_name != NULL && strcmp(alt_name, match_iface_alt_name)) + continue; + + if (dfu_mode) { + if (match_serial_dfu != NULL && strcmp(match_serial_dfu, serial_name)) + continue; + } else { + if (match_serial != NULL && strcmp(match_serial, serial_name)) + continue; + } + + pdfu = dfu_malloc(sizeof(*pdfu)); + + memset(pdfu, 0, sizeof(*pdfu)); + + pdfu->func_dfu = func_dfu; + pdfu->dev = libusb_ref_device(dev); + pdfu->quirks = get_quirks(desc->idVendor, + desc->idProduct, desc->bcdDevice); + pdfu->vendor = desc->idVendor; + pdfu->product = desc->idProduct; + pdfu->bcdDevice = desc->bcdDevice; + pdfu->configuration = cfg->bConfigurationValue; + pdfu->interface = intf->bInterfaceNumber; + pdfu->altsetting = intf->bAlternateSetting; + pdfu->devnum = libusb_get_device_address(dev); + pdfu->busnum = libusb_get_bus_number(dev); + pdfu->alt_name = strdup(alt_name); + if (pdfu->alt_name == NULL) + errx(EX_SOFTWARE, "Out of memory"); + pdfu->serial_name = strdup(serial_name); + if (pdfu->serial_name == NULL) + errx(EX_SOFTWARE, "Out of memory"); + if (dfu_mode) + pdfu->flags |= DFU_IFF_DFU; + if (pdfu->quirks & QUIRK_FORCE_DFU11) { + pdfu->func_dfu.bcdDFUVersion = + libusb_cpu_to_le16(0x0110); + } + pdfu->bMaxPacketSize0 = desc->bMaxPacketSize0; + + /* queue into list */ + pdfu->next = dfu_root; + dfu_root = pdfu; + } + } + libusb_free_config_descriptor(cfg); + } +} + +void probe_devices(libusb_context *ctx) +{ + libusb_device **list; + ssize_t num_devs; + ssize_t i; + + num_devs = libusb_get_device_list(ctx, &list); + for (i = 0; i < num_devs; ++i) { + struct libusb_device_descriptor desc; + struct libusb_device *dev = list[i]; + + if (match_bus > -1 && match_bus != libusb_get_bus_number(dev)) + continue; + if (match_device > -1 && match_device != libusb_get_device_address(dev)) + continue; + if (libusb_get_device_descriptor(dev, &desc)) + continue; + probe_configuration(dev, &desc); + } + libusb_free_device_list(list, 0); +} + +void disconnect_devices(void) +{ + struct dfu_if *pdfu; + struct dfu_if *prev = NULL; + + for (pdfu = dfu_root; pdfu != NULL; pdfu = pdfu->next) { + free(prev); + libusb_unref_device(pdfu->dev); + free(pdfu->alt_name); + free(pdfu->serial_name); + prev = pdfu; + } + free(prev); + dfu_root = NULL; +} + +void print_dfu_if(struct dfu_if *dfu_if) +{ + printf("Found %s: [%04x:%04x] ver=%04x, devnum=%u, cfg=%u, intf=%u, " + "alt=%u, name=\"%s\", serial=\"%s\"\n", + dfu_if->flags & DFU_IFF_DFU ? "DFU" : "Runtime", + dfu_if->vendor, dfu_if->product, + dfu_if->bcdDevice, dfu_if->devnum, + dfu_if->configuration, dfu_if->interface, + dfu_if->altsetting, dfu_if->alt_name, + dfu_if->serial_name); +} + +/* Walk the device tree and print out DFU devices */ +void list_dfu_interfaces(void) +{ + struct dfu_if *pdfu; + + for (pdfu = dfu_root; pdfu != NULL; pdfu = pdfu->next) + print_dfu_if(pdfu); +} diff --git a/tools/src/dfu-util/src/dfu_util.h b/tools/src/dfu-util/src/dfu_util.h new file mode 100755 index 0000000..24e50c1 --- /dev/null +++ b/tools/src/dfu-util/src/dfu_util.h @@ -0,0 +1,36 @@ +#ifndef DFU_UTIL_H +#define DFU_UTIL_H + +/* USB string descriptor should contain max 126 UTF-16 characters + * but 253 would even accomodate any UTF-8 encoding */ +#define MAX_DESC_STR_LEN 253 + +enum mode { + MODE_NONE, + MODE_VERSION, + MODE_LIST, + MODE_DETACH, + MODE_UPLOAD, + MODE_DOWNLOAD +}; + +extern struct dfu_if *dfu_root; +extern int match_bus; +extern int match_device; +extern int match_vendor; +extern int match_product; +extern int match_vendor_dfu; +extern int match_product_dfu; +extern int match_config_index; +extern int match_iface_index; +extern int match_iface_alt_index; +extern const char *match_iface_alt_name; +extern const char *match_serial; +extern const char *match_serial_dfu; + +void probe_devices(libusb_context *); +void disconnect_devices(void); +void print_dfu_if(struct dfu_if *); +void list_dfu_interfaces(void); + +#endif /* DFU_UTIL_H */ diff --git a/tools/src/dfu-util/src/dfuse.c b/tools/src/dfu-util/src/dfuse.c new file mode 100755 index 0000000..39bc72d --- /dev/null +++ b/tools/src/dfu-util/src/dfuse.c @@ -0,0 +1,652 @@ +/* + * DfuSe specific functions + * + * This implements the ST Microsystems DFU extensions (DfuSe) + * as per the DfuSe 1.1a specification (ST documents AN3156, AN2606) + * The DfuSe file format is described in ST document UM0391. + * + * Copyright 2010-2014 Tormod Volden + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include + +#include "portable.h" +#include "dfu.h" +#include "usb_dfu.h" +#include "dfu_file.h" +#include "dfuse.h" +#include "dfuse_mem.h" + +#define DFU_TIMEOUT 5000 + +extern int verbose; +static unsigned int last_erased_page = 1; /* non-aligned value, won't match */ +static struct memsegment *mem_layout; +static unsigned int dfuse_address = 0; +static unsigned int dfuse_length = 0; +static int dfuse_force = 0; +static int dfuse_leave = 0; +static int dfuse_unprotect = 0; +static int dfuse_mass_erase = 0; + +unsigned int quad2uint(unsigned char *p) +{ + return (*p + (*(p + 1) << 8) + (*(p + 2) << 16) + (*(p + 3) << 24)); +} + +void dfuse_parse_options(const char *options) +{ + char *end; + const char *endword; + unsigned int number; + + /* address, possibly empty, must be first */ + if (*options != ':') { + endword = strchr(options, ':'); + if (!endword) + endword = options + strlen(options); /* GNU strchrnul */ + + number = strtoul(options, &end, 0); + if (end == endword) { + dfuse_address = number; + } else { + errx(EX_IOERR, "Invalid dfuse address: %s", options); + } + options = endword; + } + + while (*options) { + if (*options == ':') { + options++; + continue; + } + endword = strchr(options, ':'); + if (!endword) + endword = options + strlen(options); + + if (!strncmp(options, "force", endword - options)) { + dfuse_force++; + options += 5; + continue; + } + if (!strncmp(options, "leave", endword - options)) { + dfuse_leave = 1; + options += 5; + continue; + } + if (!strncmp(options, "unprotect", endword - options)) { + dfuse_unprotect = 1; + options += 9; + continue; + } + if (!strncmp(options, "mass-erase", endword - options)) { + dfuse_mass_erase = 1; + options += 10; + continue; + } + + /* any valid number is interpreted as upload length */ + number = strtoul(options, &end, 0); + if (end == endword) { + dfuse_length = number; + } else { + errx(EX_IOERR, "Invalid dfuse modifier: %s", options); + } + options = endword; + } +} + +/* DFU_UPLOAD request for DfuSe 1.1a */ +int dfuse_upload(struct dfu_if *dif, const unsigned short length, + unsigned char *data, unsigned short transaction) +{ + int status; + + status = libusb_control_transfer(dif->dev_handle, + /* bmRequestType */ LIBUSB_ENDPOINT_IN | + LIBUSB_REQUEST_TYPE_CLASS | + LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_UPLOAD, + /* wValue */ transaction, + /* wIndex */ dif->interface, + /* Data */ data, + /* wLength */ length, + DFU_TIMEOUT); + if (status < 0) { + errx(EX_IOERR, "%s: libusb_control_msg returned %d", + __FUNCTION__, status); + } + return status; +} + +/* DFU_DNLOAD request for DfuSe 1.1a */ +int dfuse_download(struct dfu_if *dif, const unsigned short length, + unsigned char *data, unsigned short transaction) +{ + int status; + + status = libusb_control_transfer(dif->dev_handle, + /* bmRequestType */ LIBUSB_ENDPOINT_OUT | + LIBUSB_REQUEST_TYPE_CLASS | + LIBUSB_RECIPIENT_INTERFACE, + /* bRequest */ DFU_DNLOAD, + /* wValue */ transaction, + /* wIndex */ dif->interface, + /* Data */ data, + /* wLength */ length, + DFU_TIMEOUT); + if (status < 0) { + errx(EX_IOERR, "%s: libusb_control_transfer returned %d", + __FUNCTION__, status); + } + return status; +} + +/* DfuSe only commands */ +/* Leaves the device in dfuDNLOAD-IDLE state */ +int dfuse_special_command(struct dfu_if *dif, unsigned int address, + enum dfuse_command command) +{ + const char* dfuse_command_name[] = { "SET_ADDRESS" , "ERASE_PAGE", + "MASS_ERASE", "READ_UNPROTECT"}; + unsigned char buf[5]; + int length; + int ret; + struct dfu_status dst; + int firstpoll = 1; + + if (command == ERASE_PAGE) { + struct memsegment *segment; + int page_size; + + segment = find_segment(mem_layout, address); + if (!segment || !(segment->memtype & DFUSE_ERASABLE)) { + errx(EX_IOERR, "Page at 0x%08x can not be erased", + address); + } + page_size = segment->pagesize; + if (verbose > 1) + printf("Erasing page size %i at address 0x%08x, page " + "starting at 0x%08x\n", page_size, address, + address & ~(page_size - 1)); + buf[0] = 0x41; /* Erase command */ + length = 5; + last_erased_page = address & ~(page_size - 1); + } else if (command == SET_ADDRESS) { + if (verbose > 2) + printf(" Setting address pointer to 0x%08x\n", + address); + buf[0] = 0x21; /* Set Address Pointer command */ + length = 5; + } else if (command == MASS_ERASE) { + buf[0] = 0x41; /* Mass erase command when length = 1 */ + length = 1; + } else if (command == READ_UNPROTECT) { + buf[0] = 0x92; + length = 1; + } else { + errx(EX_IOERR, "Non-supported special command %d", command); + } + buf[1] = address & 0xff; + buf[2] = (address >> 8) & 0xff; + buf[3] = (address >> 16) & 0xff; + buf[4] = (address >> 24) & 0xff; + + ret = dfuse_download(dif, length, buf, 0); + if (ret < 0) { + errx(EX_IOERR, "Error during special command \"%s\" download", + dfuse_command_name[command]); + } + do { + ret = dfu_get_status(dif, &dst); + if (ret < 0) { + errx(EX_IOERR, "Error during special command \"%s\" get_status", + dfuse_command_name[command]); + } + if (firstpoll) { + firstpoll = 0; + if (dst.bState != DFU_STATE_dfuDNBUSY) { + printf("state(%u) = %s, status(%u) = %s\n", dst.bState, + dfu_state_to_string(dst.bState), dst.bStatus, + dfu_status_to_string(dst.bStatus)); + errx(EX_IOERR, "Wrong state after command \"%s\" download", + dfuse_command_name[command]); + } + } + /* wait while command is executed */ + if (verbose) + printf(" Poll timeout %i ms\n", dst.bwPollTimeout); + milli_sleep(dst.bwPollTimeout); + if (command == READ_UNPROTECT) + return ret; + } while (dst.bState == DFU_STATE_dfuDNBUSY); + + if (dst.bStatus != DFU_STATUS_OK) { + errx(EX_IOERR, "%s not correctly executed", + dfuse_command_name[command]); + } + return ret; +} + +int dfuse_dnload_chunk(struct dfu_if *dif, unsigned char *data, int size, + int transaction) +{ + int bytes_sent; + struct dfu_status dst; + int ret; + + ret = dfuse_download(dif, size, size ? data : NULL, transaction); + if (ret < 0) { + errx(EX_IOERR, "Error during download"); + return ret; + } + bytes_sent = ret; + + do { + ret = dfu_get_status(dif, &dst); + if (ret < 0) { + errx(EX_IOERR, "Error during download get_status"); + return ret; + } + milli_sleep(dst.bwPollTimeout); + } while (dst.bState != DFU_STATE_dfuDNLOAD_IDLE && + dst.bState != DFU_STATE_dfuERROR && + dst.bState != DFU_STATE_dfuMANIFEST); + + if (dst.bState == DFU_STATE_dfuMANIFEST) + printf("Transitioning to dfuMANIFEST state\n"); + + if (dst.bStatus != DFU_STATUS_OK) { + printf(" failed!\n"); + printf("state(%u) = %s, status(%u) = %s\n", dst.bState, + dfu_state_to_string(dst.bState), dst.bStatus, + dfu_status_to_string(dst.bStatus)); + return -1; + } + return bytes_sent; +} + +int dfuse_do_upload(struct dfu_if *dif, int xfer_size, int fd, + const char *dfuse_options) +{ + int total_bytes = 0; + int upload_limit = 0; + unsigned char *buf; + int transaction; + int ret; + + buf = dfu_malloc(xfer_size); + + if (dfuse_options) + dfuse_parse_options(dfuse_options); + if (dfuse_length) + upload_limit = dfuse_length; + if (dfuse_address) { + struct memsegment *segment; + + mem_layout = parse_memory_layout((char *)dif->alt_name); + if (!mem_layout) + errx(EX_IOERR, "Failed to parse memory layout"); + + segment = find_segment(mem_layout, dfuse_address); + if (!dfuse_force && + (!segment || !(segment->memtype & DFUSE_READABLE))) + errx(EX_IOERR, "Page at 0x%08x is not readable", + dfuse_address); + + if (!upload_limit) { + upload_limit = segment->end - dfuse_address + 1; + printf("Limiting upload to end of memory segment, " + "%i bytes\n", upload_limit); + } + dfuse_special_command(dif, dfuse_address, SET_ADDRESS); + dfu_abort_to_idle(dif); + } else { + /* Boot loader decides the start address, unknown to us */ + /* Use a short length to lower risk of running out of bounds */ + if (!upload_limit) + upload_limit = 0x4000; + printf("Limiting default upload to %i bytes\n", upload_limit); + } + + dfu_progress_bar("Upload", 0, 1); + + transaction = 2; + while (1) { + int rc; + + /* last chunk can be smaller than original xfer_size */ + if (upload_limit - total_bytes < xfer_size) + xfer_size = upload_limit - total_bytes; + rc = dfuse_upload(dif, xfer_size, buf, transaction++); + if (rc < 0) { + ret = rc; + goto out_free; + } + + dfu_file_write_crc(fd, 0, buf, rc); + total_bytes += rc; + + if (total_bytes < 0) + errx(EX_SOFTWARE, "Received too many bytes"); + + if (rc < xfer_size || total_bytes >= upload_limit) { + /* last block, return successfully */ + ret = total_bytes; + break; + } + dfu_progress_bar("Upload", total_bytes, upload_limit); + } + + dfu_progress_bar("Upload", total_bytes, total_bytes); + + dfu_abort_to_idle(dif); + if (dfuse_leave) { + dfuse_special_command(dif, dfuse_address, SET_ADDRESS); + dfuse_dnload_chunk(dif, NULL, 0, 2); /* Zero-size */ + } + + out_free: + free(buf); + + return ret; +} + +/* Writes an element of any size to the device, taking care of page erases */ +/* returns 0 on success, otherwise -EINVAL */ +int dfuse_dnload_element(struct dfu_if *dif, unsigned int dwElementAddress, + unsigned int dwElementSize, unsigned char *data, + int xfer_size) +{ + int p; + int ret; + struct memsegment *segment; + + /* Check at least that we can write to the last address */ + segment = + find_segment(mem_layout, dwElementAddress + dwElementSize - 1); + if (!segment || !(segment->memtype & DFUSE_WRITEABLE)) { + errx(EX_IOERR, "Last page at 0x%08x is not writeable", + dwElementAddress + dwElementSize - 1); + } + + dfu_progress_bar("Download", 0, 1); + + for (p = 0; p < (int)dwElementSize; p += xfer_size) { + int page_size; + unsigned int erase_address; + unsigned int address = dwElementAddress + p; + int chunk_size = xfer_size; + + segment = find_segment(mem_layout, address); + if (!segment || !(segment->memtype & DFUSE_WRITEABLE)) { + errx(EX_IOERR, "Page at 0x%08x is not writeable", + address); + } + page_size = segment->pagesize; + + /* check if this is the last chunk */ + if (p + chunk_size > (int)dwElementSize) + chunk_size = dwElementSize - p; + + /* Erase only for flash memory downloads */ + if ((segment->memtype & DFUSE_ERASABLE) && !dfuse_mass_erase) { + /* erase all involved pages */ + for (erase_address = address; + erase_address < address + chunk_size; + erase_address += page_size) + if ((erase_address & ~(page_size - 1)) != + last_erased_page) + dfuse_special_command(dif, + erase_address, + ERASE_PAGE); + + if (((address + chunk_size - 1) & ~(page_size - 1)) != + last_erased_page) { + if (verbose > 2) + printf(" Chunk extends into next page," + " erase it as well\n"); + dfuse_special_command(dif, + address + chunk_size - 1, + ERASE_PAGE); + } + } + + if (verbose) { + printf(" Download from image offset " + "%08x to memory %08x-%08x, size %i\n", + p, address, address + chunk_size - 1, + chunk_size); + } else { + dfu_progress_bar("Download", p, dwElementSize); + } + + dfuse_special_command(dif, address, SET_ADDRESS); + + /* transaction = 2 for no address offset */ + ret = dfuse_dnload_chunk(dif, data + p, chunk_size, 2); + if (ret != chunk_size) { + errx(EX_IOERR, "Failed to write whole chunk: " + "%i of %i bytes", ret, chunk_size); + return -EINVAL; + } + } + if (!verbose) + dfu_progress_bar("Download", dwElementSize, dwElementSize); + return 0; +} + +static void +dfuse_memcpy(unsigned char *dst, unsigned char **src, int *rem, int size) +{ + if (size > *rem) { + errx(EX_IOERR, "Corrupt DfuSe file: " + "Cannot read %d bytes from %d bytes", size, *rem); + } + if (dst != NULL) + memcpy(dst, *src, size); + (*src) += size; + (*rem) -= size; +} + +/* Download raw binary file to DfuSe device */ +int dfuse_do_bin_dnload(struct dfu_if *dif, int xfer_size, + struct dfu_file *file, unsigned int start_address) +{ + unsigned int dwElementAddress; + unsigned int dwElementSize; + unsigned char *data; + int ret; + + dwElementAddress = start_address; + dwElementSize = file->size.total - + file->size.suffix - file->size.prefix; + + printf("Downloading to address = 0x%08x, size = %i\n", + dwElementAddress, dwElementSize); + + data = file->firmware + file->size.prefix; + + ret = dfuse_dnload_element(dif, dwElementAddress, dwElementSize, data, + xfer_size); + if (ret != 0) + goto out_free; + + printf("File downloaded successfully\n"); + ret = dwElementSize; + + out_free: + return ret; +} + +/* Parse a DfuSe file and download contents to device */ +int dfuse_do_dfuse_dnload(struct dfu_if *dif, int xfer_size, + struct dfu_file *file) +{ + uint8_t dfuprefix[11]; + uint8_t targetprefix[274]; + uint8_t elementheader[8]; + int image; + int element; + int bTargets; + int bAlternateSetting; + int dwNbElements; + unsigned int dwElementAddress; + unsigned int dwElementSize; + uint8_t *data; + int ret; + int rem; + int bFirstAddressSaved = 0; + + rem = file->size.total - file->size.prefix - file->size.suffix; + data = file->firmware + file->size.prefix; + + /* Must be larger than a minimal DfuSe header and suffix */ + if (rem < (int)(sizeof(dfuprefix) + + sizeof(targetprefix) + sizeof(elementheader))) { + errx(EX_SOFTWARE, "File too small for a DfuSe file"); + } + + dfuse_memcpy(dfuprefix, &data, &rem, sizeof(dfuprefix)); + + if (strncmp((char *)dfuprefix, "DfuSe", 5)) { + errx(EX_IOERR, "No valid DfuSe signature"); + return -EINVAL; + } + if (dfuprefix[5] != 0x01) { + errx(EX_IOERR, "DFU format revision %i not supported", + dfuprefix[5]); + return -EINVAL; + } + bTargets = dfuprefix[10]; + printf("file contains %i DFU images\n", bTargets); + + for (image = 1; image <= bTargets; image++) { + printf("parsing DFU image %i\n", image); + dfuse_memcpy(targetprefix, &data, &rem, sizeof(targetprefix)); + if (strncmp((char *)targetprefix, "Target", 6)) { + errx(EX_IOERR, "No valid target signature"); + return -EINVAL; + } + bAlternateSetting = targetprefix[6]; + dwNbElements = quad2uint((unsigned char *)targetprefix + 270); + printf("image for alternate setting %i, ", bAlternateSetting); + printf("(%i elements, ", dwNbElements); + printf("total size = %i)\n", + quad2uint((unsigned char *)targetprefix + 266)); + if (bAlternateSetting != dif->altsetting) + printf("Warning: Image does not match current alternate" + " setting.\n" + "Please rerun with the correct -a option setting" + " to download this image!\n"); + for (element = 1; element <= dwNbElements; element++) { + printf("parsing element %i, ", element); + dfuse_memcpy(elementheader, &data, &rem, sizeof(elementheader)); + dwElementAddress = + quad2uint((unsigned char *)elementheader); + dwElementSize = + quad2uint((unsigned char *)elementheader + 4); + printf("address = 0x%08x, ", dwElementAddress); + printf("size = %i\n", dwElementSize); + + if (!bFirstAddressSaved) { + bFirstAddressSaved = 1; + dfuse_address = dwElementAddress; + } + /* sanity check */ + if ((int)dwElementSize > rem) + errx(EX_SOFTWARE, "File too small for element size"); + + if (bAlternateSetting == dif->altsetting) { + ret = dfuse_dnload_element(dif, dwElementAddress, + dwElementSize, data, xfer_size); + } else { + ret = 0; + } + + /* advance read pointer */ + dfuse_memcpy(NULL, &data, &rem, dwElementSize); + + if (ret != 0) + return ret; + } + } + + if (rem != 0) + warnx("%d bytes leftover", rem); + + printf("done parsing DfuSe file\n"); + + return 0; +} + +int dfuse_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file, + const char *dfuse_options) +{ + int ret; + + if (dfuse_options) + dfuse_parse_options(dfuse_options); + mem_layout = parse_memory_layout((char *)dif->alt_name); + if (!mem_layout) { + errx(EX_IOERR, "Failed to parse memory layout"); + } + if (dfuse_unprotect) { + if (!dfuse_force) { + errx(EX_IOERR, "The read unprotect command " + "will erase the flash memory" + "and can only be used with force\n"); + } + dfuse_special_command(dif, 0, READ_UNPROTECT); + printf("Device disconnects, erases flash and resets now\n"); + exit(0); + } + if (dfuse_mass_erase) { + if (!dfuse_force) { + errx(EX_IOERR, "The mass erase command " + "can only be used with force"); + } + printf("Performing mass erase, this can take a moment\n"); + dfuse_special_command(dif, 0, MASS_ERASE); + } + if (dfuse_address) { + if (file->bcdDFU == 0x11a) { + errx(EX_IOERR, "This is a DfuSe file, not " + "meant for raw download"); + } + ret = dfuse_do_bin_dnload(dif, xfer_size, file, dfuse_address); + } else { + if (file->bcdDFU != 0x11a) { + warnx("Only DfuSe file version 1.1a is supported"); + errx(EX_IOERR, "(for raw binary download, use the " + "--dfuse-address option)"); + } + ret = dfuse_do_dfuse_dnload(dif, xfer_size, file); + } + free_segment_list(mem_layout); + + dfu_abort_to_idle(dif); + + if (dfuse_leave) { + dfuse_special_command(dif, dfuse_address, SET_ADDRESS); + dfuse_dnload_chunk(dif, NULL, 0, 2); /* Zero-size */ + } + return ret; +} diff --git a/tools/src/dfu-util/src/dfuse.h b/tools/src/dfu-util/src/dfuse.h new file mode 100755 index 0000000..e82f058 --- /dev/null +++ b/tools/src/dfu-util/src/dfuse.h @@ -0,0 +1,35 @@ +/* This implements the ST Microsystems DFU extensions (DfuSe) + * as per the DfuSe 1.1a specification (Document UM0391) + * + * (C) 2010-2012 Tormod Volden + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef DFUSE_H +#define DFUSE_H + +#include "dfu.h" + +enum dfuse_command { SET_ADDRESS, ERASE_PAGE, MASS_ERASE, READ_UNPROTECT }; + +int dfuse_special_command(struct dfu_if *dif, unsigned int address, + enum dfuse_command command); +int dfuse_do_upload(struct dfu_if *dif, int xfer_size, int fd, + const char *dfuse_options); +int dfuse_do_dnload(struct dfu_if *dif, int xfer_size, struct dfu_file *file, + const char *dfuse_options); + +#endif /* DFUSE_H */ diff --git a/tools/src/dfu-util/src/dfuse_mem.c b/tools/src/dfu-util/src/dfuse_mem.c new file mode 100755 index 0000000..ae339fb --- /dev/null +++ b/tools/src/dfu-util/src/dfuse_mem.c @@ -0,0 +1,198 @@ +/* + * Helper functions for reading the memory map of a device + * following the ST DfuSe 1.1a specification. + * + * Copyright 2011-2014 Tormod Volden + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include + +#include "portable.h" +#include "dfu_file.h" +#include "dfuse_mem.h" + +int add_segment(struct memsegment **segment_list, struct memsegment segment) +{ + struct memsegment *new_element; + + new_element = dfu_malloc(sizeof(struct memsegment)); + *new_element = segment; + new_element->next = NULL; + + if (*segment_list == NULL) + /* list can be empty on first call */ + *segment_list = new_element; + else { + struct memsegment *next_element; + + /* find last element in list */ + next_element = *segment_list; + while (next_element->next != NULL) + next_element = next_element->next; + next_element->next = new_element; + } + return 0; +} + +struct memsegment *find_segment(struct memsegment *segment_list, + unsigned int address) +{ + while (segment_list != NULL) { + if (segment_list->start <= address && + segment_list->end >= address) + return segment_list; + segment_list = segment_list->next; + } + return NULL; +} + +void free_segment_list(struct memsegment *segment_list) +{ + struct memsegment *next_element; + + while (segment_list->next != NULL) { + next_element = segment_list->next; + free(segment_list); + segment_list = next_element; + } + free(segment_list); +} + +/* Parse memory map from interface descriptor string + * encoded as per ST document UM0424 section 4.3.2. + */ +struct memsegment *parse_memory_layout(char *intf_desc) +{ + + char multiplier, memtype; + unsigned int address; + int sectors, size; + char *name, *typestring; + int ret; + int count = 0; + char separator; + int scanned; + struct memsegment *segment_list = NULL; + struct memsegment segment; + + name = dfu_malloc(strlen(intf_desc)); + + ret = sscanf(intf_desc, "@%[^/]%n", name, &scanned); + if (ret < 1) { + free(name); + warnx("Could not read name, sscanf returned %d", ret); + return NULL; + } + printf("DfuSe interface name: \"%s\"\n", name); + + intf_desc += scanned; + typestring = dfu_malloc(strlen(intf_desc)); + + while (ret = sscanf(intf_desc, "/0x%x/%n", &address, &scanned), + ret > 0) { + + intf_desc += scanned; + while (ret = sscanf(intf_desc, "%d*%d%c%[^,/]%n", + §ors, &size, &multiplier, typestring, + &scanned), ret > 2) { + intf_desc += scanned; + + count++; + memtype = 0; + if (ret == 4) { + if (strlen(typestring) == 1 + && typestring[0] != '/') + memtype = typestring[0]; + else { + warnx("Parsing type identifier '%s' " + "failed for segment %i", + typestring, count); + continue; + } + } + + /* Quirk for STM32F4 devices */ + if (strcmp(name, "Device Feature") == 0) + memtype = 'e'; + + switch (multiplier) { + case 'B': + break; + case 'K': + size *= 1024; + break; + case 'M': + size *= 1024 * 1024; + break; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + if (!memtype) { + warnx("Non-valid multiplier '%c', " + "interpreted as type " + "identifier instead", + multiplier); + memtype = multiplier; + break; + } + /* fallthrough if memtype was already set */ + default: + warnx("Non-valid multiplier '%c', " + "assuming bytes", multiplier); + } + + if (!memtype) { + warnx("No valid type for segment %d\n", count); + continue; + } + + segment.start = address; + segment.end = address + sectors * size - 1; + segment.pagesize = size; + segment.memtype = memtype & 7; + add_segment(&segment_list, segment); + + if (verbose) + printf("Memory segment at 0x%08x %3d x %4d = " + "%5d (%s%s%s)\n", + address, sectors, size, sectors * size, + memtype & DFUSE_READABLE ? "r" : "", + memtype & DFUSE_ERASABLE ? "e" : "", + memtype & DFUSE_WRITEABLE ? "w" : ""); + + address += sectors * size; + + separator = *intf_desc; + if (separator == ',') + intf_desc += 1; + else + break; + } /* while per segment */ + + } /* while per address */ + free(name); + free(typestring); + + return segment_list; +} diff --git a/tools/src/dfu-util/src/dfuse_mem.h b/tools/src/dfu-util/src/dfuse_mem.h new file mode 100755 index 0000000..8fe7cc4 --- /dev/null +++ b/tools/src/dfu-util/src/dfuse_mem.h @@ -0,0 +1,44 @@ +/* Helper functions for reading the memory map in a device + * following the ST DfuSe 1.1a specification. + * + * (C) 2011 Tormod Volden + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef DFUSE_MEM_H +#define DFUSE_MEM_H + +#define DFUSE_READABLE 1 +#define DFUSE_ERASABLE 2 +#define DFUSE_WRITEABLE 4 + +struct memsegment { + unsigned int start; + unsigned int end; + int pagesize; + int memtype; + struct memsegment *next; +}; + +int add_segment(struct memsegment **list, struct memsegment new_element); + +struct memsegment *find_segment(struct memsegment *list, unsigned int address); + +void free_segment_list(struct memsegment *list); + +struct memsegment *parse_memory_layout(char *intf_desc_str); + +#endif /* DFUSE_MEM_H */ diff --git a/tools/src/dfu-util/src/main.c b/tools/src/dfu-util/src/main.c new file mode 100755 index 0000000..f59d27d --- /dev/null +++ b/tools/src/dfu-util/src/main.c @@ -0,0 +1,699 @@ +/* + * dfu-util + * + * Copyright 2007-2008 by OpenMoko, Inc. + * Copyright 2013-2014 Hans Petter Selasky + * + * Written by Harald Welte + * + * Based on existing code of dfu-programmer-0.4 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "portable.h" +#include "dfu.h" +#include "usb_dfu.h" +#include "dfu_file.h" +#include "dfu_load.h" +#include "dfu_util.h" +#include "dfuse.h" +#include "quirks.h" + +#ifdef HAVE_USBPATH_H +#include +#endif + +int verbose = 0; + +struct dfu_if *dfu_root = NULL; + +int match_bus = -1; +int match_device = -1; +int match_vendor = -1; +int match_product = -1; +int match_vendor_dfu = -1; +int match_product_dfu = -1; +int match_config_index = -1; +int match_iface_index = -1; +int match_iface_alt_index = -1; +const char *match_iface_alt_name = NULL; +const char *match_serial = NULL; +const char *match_serial_dfu = NULL; + +static int parse_match_value(const char *str, int default_value) +{ + char *remainder; + int value; + + if (str == NULL) { + value = default_value; + } else if (*str == '*') { + value = -1; /* Match anything */ + } else if (*str == '-') { + value = 0x10000; /* Impossible vendor/product ID */ + } else { + value = strtoul(str, &remainder, 16); + if (remainder == str) { + value = default_value; + } + } + return value; +} + +static void parse_vendprod(const char *str) +{ + const char *comma; + const char *colon; + + /* Default to match any DFU device in runtime or DFU mode */ + match_vendor = -1; + match_product = -1; + match_vendor_dfu = -1; + match_product_dfu = -1; + + comma = strchr(str, ','); + if (comma == str) { + /* DFU mode vendor/product being specified without any runtime + * vendor/product specification, so don't match any runtime device */ + match_vendor = match_product = 0x10000; + } else { + colon = strchr(str, ':'); + if (colon != NULL) { + ++colon; + if ((comma != NULL) && (colon > comma)) { + colon = NULL; + } + } + match_vendor = parse_match_value(str, match_vendor); + match_product = parse_match_value(colon, match_product); + if (comma != NULL) { + /* Both runtime and DFU mode vendor/product specifications are + * available, so default DFU mode match components to the given + * runtime match components */ + match_vendor_dfu = match_vendor; + match_product_dfu = match_product; + } + } + if (comma != NULL) { + ++comma; + colon = strchr(comma, ':'); + if (colon != NULL) { + ++colon; + } + match_vendor_dfu = parse_match_value(comma, match_vendor_dfu); + match_product_dfu = parse_match_value(colon, match_product_dfu); + } +} + +static void parse_serial(char *str) +{ + char *comma; + + match_serial = str; + comma = strchr(str, ','); + if (comma == NULL) { + match_serial_dfu = match_serial; + } else { + *comma++ = 0; + match_serial_dfu = comma; + } + if (*match_serial == 0) match_serial = NULL; + if (*match_serial_dfu == 0) match_serial_dfu = NULL; +} + +#ifdef HAVE_USBPATH_H + +static int resolve_device_path(char *path) +{ + int res; + + res = usb_path2devnum(path); + if (res < 0) + return -EINVAL; + if (!res) + return 0; + + match_bus = atoi(path); + match_device = res; + + return 0; +} + +#else /* HAVE_USBPATH_H */ + +static int resolve_device_path(char *path) +{ + (void)path; /* Eliminate unused variable warning */ + errx(EX_SOFTWARE, "USB device paths are not supported by this dfu-util.\n"); +} + +#endif /* !HAVE_USBPATH_H */ + +static void help(void) +{ + fprintf(stderr, "Usage: dfu-util [options] ...\n" + " -h --help\t\t\tPrint this help message\n" + " -V --version\t\t\tPrint the version number\n" + " -v --verbose\t\t\tPrint verbose debug statements\n" + " -l --list\t\t\tList currently attached DFU capable devices\n"); + fprintf(stderr, " -e --detach\t\t\tDetach currently attached DFU capable devices\n" + " -E --detach-delay seconds\tTime to wait before reopening a device after detach\n" + " -d --device :[,:]\n" + "\t\t\t\tSpecify Vendor/Product ID(s) of DFU device\n" + " -p --path \tSpecify path to DFU device\n" + " -c --cfg \t\tSpecify the Configuration of DFU device\n" + " -i --intf \t\tSpecify the DFU Interface number\n" + " -S --serial [,]\n" + "\t\t\t\tSpecify Serial String of DFU device\n" + " -a --alt \t\tSpecify the Altsetting of the DFU Interface\n" + "\t\t\t\tby name or by number\n"); + fprintf(stderr, " -t --transfer-size \tSpecify the number of bytes per USB Transfer\n" + " -U --upload \t\tRead firmware from device into \n" + " -Z --upload-size \tSpecify the expected upload size in bytes\n" + " -D --download \t\tWrite firmware from into device\n" + " -R --reset\t\t\tIssue USB Reset signalling once we're finished\n" + " -s --dfuse-address

    \tST DfuSe mode, specify target address for\n" + "\t\t\t\traw file download or upload. Not applicable for\n" + "\t\t\t\tDfuSe file (.dfu) downloads\n" + ); + exit(EX_USAGE); +} + +static void print_version(void) +{ + printf(PACKAGE_STRING "\n\n"); + printf("Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.\n" + "Copyright 2010-2014 Tormod Volden and Stefan Schmidt\n" + "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" + "Please report bugs to " PACKAGE_BUGREPORT "\n\n"); +} + +static struct option opts[] = { + { "help", 0, 0, 'h' }, + { "version", 0, 0, 'V' }, + { "verbose", 0, 0, 'v' }, + { "list", 0, 0, 'l' }, + { "detach", 0, 0, 'e' }, + { "detach-delay", 1, 0, 'E' }, + { "device", 1, 0, 'd' }, + { "path", 1, 0, 'p' }, + { "configuration", 1, 0, 'c' }, + { "cfg", 1, 0, 'c' }, + { "interface", 1, 0, 'i' }, + { "intf", 1, 0, 'i' }, + { "altsetting", 1, 0, 'a' }, + { "alt", 1, 0, 'a' }, + { "serial", 1, 0, 'S' }, + { "transfer-size", 1, 0, 't' }, + { "upload", 1, 0, 'U' }, + { "upload-size", 1, 0, 'Z' }, + { "download", 1, 0, 'D' }, + { "reset", 0, 0, 'R' }, + { "dfuse-address", 1, 0, 's' }, + { 0, 0, 0, 0 } +}; + +int main(int argc, char **argv) +{ + int expected_size = 0; + unsigned int transfer_size = 0; + enum mode mode = MODE_NONE; + struct dfu_status status; + libusb_context *ctx; + struct dfu_file file; + char *end; + int final_reset = 0; + int ret; + int dfuse_device = 0; + int fd; + const char *dfuse_options = NULL; + int detach_delay = 5; + uint16_t runtime_vendor; + uint16_t runtime_product; + + memset(&file, 0, sizeof(file)); + + /* make sure all prints are flushed */ + setvbuf(stdout, NULL, _IONBF, 0); + + while (1) { + int c, option_index = 0; + c = getopt_long(argc, argv, "hVvleE:d:p:c:i:a:S:t:U:D:Rs:Z:", opts, + &option_index); + if (c == -1) + break; + + switch (c) { + case 'h': + help(); + break; + case 'V': + mode = MODE_VERSION; + break; + case 'v': + verbose++; + break; + case 'l': + mode = MODE_LIST; + break; + case 'e': + mode = MODE_DETACH; + match_iface_alt_index = 0; + match_iface_index = 0; + break; + case 'E': + detach_delay = atoi(optarg); + break; + case 'd': + parse_vendprod(optarg); + break; + case 'p': + /* Parse device path */ + ret = resolve_device_path(optarg); + if (ret < 0) + errx(EX_SOFTWARE, "Unable to parse '%s'", optarg); + if (!ret) + errx(EX_SOFTWARE, "Cannot find '%s'", optarg); + break; + case 'c': + /* Configuration */ + match_config_index = atoi(optarg); + break; + case 'i': + /* Interface */ + match_iface_index = atoi(optarg); + break; + case 'a': + /* Interface Alternate Setting */ + match_iface_alt_index = strtoul(optarg, &end, 0); + if (*end) { + match_iface_alt_name = optarg; + match_iface_alt_index = -1; + } + break; + case 'S': + parse_serial(optarg); + break; + case 't': + transfer_size = atoi(optarg); + break; + case 'U': + mode = MODE_UPLOAD; + file.name = optarg; + break; + case 'Z': + expected_size = atoi(optarg); + break; + case 'D': + mode = MODE_DOWNLOAD; + file.name = optarg; + break; + case 'R': + final_reset = 1; + break; + case 's': + dfuse_options = optarg; + break; + default: + help(); + break; + } + } + + print_version(); + if (mode == MODE_VERSION) { + exit(0); + } + + if (mode == MODE_NONE) { + fprintf(stderr, "You need to specify one of -D or -U\n"); + help(); + } + + if (match_config_index == 0) { + /* Handle "-c 0" (unconfigured device) as don't care */ + match_config_index = -1; + } + + if (mode == MODE_DOWNLOAD) { + dfu_load_file(&file, MAYBE_SUFFIX, MAYBE_PREFIX); + /* If the user didn't specify product and/or vendor IDs to match, + * use any IDs from the file suffix for device matching */ + if (match_vendor < 0 && file.idVendor != 0xffff) { + match_vendor = file.idVendor; + printf("Match vendor ID from file: %04x\n", match_vendor); + } + if (match_product < 0 && file.idProduct != 0xffff) { + match_product = file.idProduct; + printf("Match product ID from file: %04x\n", match_product); + } + } + + ret = libusb_init(&ctx); + if (ret) + errx(EX_IOERR, "unable to initialize libusb: %i", ret); + + if (verbose > 2) { + libusb_set_debug(ctx, 255); + } + + probe_devices(ctx); + + if (mode == MODE_LIST) { + list_dfu_interfaces(); + exit(0); + } + + if (dfu_root == NULL) { + errx(EX_IOERR, "No DFU capable USB device available"); + } else if (dfu_root->next != NULL) { + /* We cannot safely support more than one DFU capable device + * with same vendor/product ID, since during DFU we need to do + * a USB bus reset, after which the target device will get a + * new address */ + errx(EX_IOERR, "More than one DFU capable USB device found! " + "Try `--list' and specify the serial number " + "or disconnect all but one device\n"); + } + + /* We have exactly one device. Its libusb_device is now in dfu_root->dev */ + + printf("Opening DFU capable USB device...\n"); + ret = libusb_open(dfu_root->dev, &dfu_root->dev_handle); + if (ret || !dfu_root->dev_handle) + errx(EX_IOERR, "Cannot open device"); + + printf("ID %04x:%04x\n", dfu_root->vendor, dfu_root->product); + + printf("Run-time device DFU version %04x\n", + libusb_le16_to_cpu(dfu_root->func_dfu.bcdDFUVersion)); + + /* Transition from run-Time mode to DFU mode */ + if (!(dfu_root->flags & DFU_IFF_DFU)) { + int err; + /* In the 'first round' during runtime mode, there can only be one + * DFU Interface descriptor according to the DFU Spec. */ + + /* FIXME: check if the selected device really has only one */ + + runtime_vendor = dfu_root->vendor; + runtime_product = dfu_root->product; + + printf("Claiming USB DFU Runtime Interface...\n"); + if (libusb_claim_interface(dfu_root->dev_handle, dfu_root->interface) < 0) { + errx(EX_IOERR, "Cannot claim interface %d", + dfu_root->interface); + } + + if (libusb_set_interface_alt_setting(dfu_root->dev_handle, dfu_root->interface, 0) < 0) { + errx(EX_IOERR, "Cannot set alt interface zero"); + } + + printf("Determining device status: "); + + err = dfu_get_status(dfu_root, &status); + if (err == LIBUSB_ERROR_PIPE) { + printf("Device does not implement get_status, assuming appIDLE\n"); + status.bStatus = DFU_STATUS_OK; + status.bwPollTimeout = 0; + status.bState = DFU_STATE_appIDLE; + status.iString = 0; + } else if (err < 0) { + errx(EX_IOERR, "error get_status"); + } else { + printf("state = %s, status = %d\n", + dfu_state_to_string(status.bState), status.bStatus); + } + milli_sleep(status.bwPollTimeout); + + switch (status.bState) { + case DFU_STATE_appIDLE: + case DFU_STATE_appDETACH: + printf("Device really in Runtime Mode, send DFU " + "detach request...\n"); + if (dfu_detach(dfu_root->dev_handle, + dfu_root->interface, 1000) < 0) { + warnx("error detaching"); + } + if (dfu_root->func_dfu.bmAttributes & USB_DFU_WILL_DETACH) { + printf("Device will detach and reattach...\n"); + } else { + printf("Resetting USB...\n"); + ret = libusb_reset_device(dfu_root->dev_handle); + if (ret < 0 && ret != LIBUSB_ERROR_NOT_FOUND) + errx(EX_IOERR, "error resetting " + "after detach"); + } + break; + case DFU_STATE_dfuERROR: + printf("dfuERROR, clearing status\n"); + if (dfu_clear_status(dfu_root->dev_handle, + dfu_root->interface) < 0) { + errx(EX_IOERR, "error clear_status"); + } + /* fall through */ + default: + warnx("WARNING: Runtime device already in DFU state ?!?"); + libusb_release_interface(dfu_root->dev_handle, + dfu_root->interface); + goto dfustate; + } + libusb_release_interface(dfu_root->dev_handle, + dfu_root->interface); + libusb_close(dfu_root->dev_handle); + dfu_root->dev_handle = NULL; + + if (mode == MODE_DETACH) { + libusb_exit(ctx); + exit(0); + } + + /* keeping handles open might prevent re-enumeration */ + disconnect_devices(); + + milli_sleep(detach_delay * 1000); + + /* Change match vendor and product to impossible values to force + * only DFU mode matches in the following probe */ + match_vendor = match_product = 0x10000; + + probe_devices(ctx); + + if (dfu_root == NULL) { + errx(EX_IOERR, "Lost device after RESET?"); + } else if (dfu_root->next != NULL) { + errx(EX_IOERR, "More than one DFU capable USB device found! " + "Try `--list' and specify the serial number " + "or disconnect all but one device"); + } + + /* Check for DFU mode device */ + if (!(dfu_root->flags | DFU_IFF_DFU)) + errx(EX_SOFTWARE, "Device is not in DFU mode"); + + printf("Opening DFU USB Device...\n"); + ret = libusb_open(dfu_root->dev, &dfu_root->dev_handle); + if (ret || !dfu_root->dev_handle) { + errx(EX_IOERR, "Cannot open device"); + } + } else { + /* we're already in DFU mode, so we can skip the detach/reset + * procedure */ + /* If a match vendor/product was specified, use that as the runtime + * vendor/product, otherwise use the DFU mode vendor/product */ + runtime_vendor = match_vendor < 0 ? dfu_root->vendor : match_vendor; + runtime_product = match_product < 0 ? dfu_root->product : match_product; + } + +dfustate: +#if 0 + printf("Setting Configuration %u...\n", dfu_root->configuration); + if (libusb_set_configuration(dfu_root->dev_handle, dfu_root->configuration) < 0) { + errx(EX_IOERR, "Cannot set configuration"); + } +#endif + printf("Claiming USB DFU Interface...\n"); + if (libusb_claim_interface(dfu_root->dev_handle, dfu_root->interface) < 0) { + errx(EX_IOERR, "Cannot claim interface"); + } + + printf("Setting Alternate Setting #%d ...\n", dfu_root->altsetting); + if (libusb_set_interface_alt_setting(dfu_root->dev_handle, dfu_root->interface, dfu_root->altsetting) < 0) { + errx(EX_IOERR, "Cannot set alternate interface"); + } + +status_again: + printf("Determining device status: "); + if (dfu_get_status(dfu_root, &status ) < 0) { + errx(EX_IOERR, "error get_status"); + } + printf("state = %s, status = %d\n", + dfu_state_to_string(status.bState), status.bStatus); + + milli_sleep(status.bwPollTimeout); + + switch (status.bState) { + case DFU_STATE_appIDLE: + case DFU_STATE_appDETACH: + errx(EX_IOERR, "Device still in Runtime Mode!"); + break; + case DFU_STATE_dfuERROR: + printf("dfuERROR, clearing status\n"); + if (dfu_clear_status(dfu_root->dev_handle, dfu_root->interface) < 0) { + errx(EX_IOERR, "error clear_status"); + } + goto status_again; + break; + case DFU_STATE_dfuDNLOAD_IDLE: + case DFU_STATE_dfuUPLOAD_IDLE: + printf("aborting previous incomplete transfer\n"); + if (dfu_abort(dfu_root->dev_handle, dfu_root->interface) < 0) { + errx(EX_IOERR, "can't send DFU_ABORT"); + } + goto status_again; + break; + case DFU_STATE_dfuIDLE: + printf("dfuIDLE, continuing\n"); + break; + default: + break; + } + + if (DFU_STATUS_OK != status.bStatus ) { + printf("WARNING: DFU Status: '%s'\n", + dfu_status_to_string(status.bStatus)); + /* Clear our status & try again. */ + if (dfu_clear_status(dfu_root->dev_handle, dfu_root->interface) < 0) + errx(EX_IOERR, "USB communication error"); + if (dfu_get_status(dfu_root, &status) < 0) + errx(EX_IOERR, "USB communication error"); + if (DFU_STATUS_OK != status.bStatus) + errx(EX_SOFTWARE, "Status is not OK: %d", status.bStatus); + + milli_sleep(status.bwPollTimeout); + } + + printf("DFU mode device DFU version %04x\n", + libusb_le16_to_cpu(dfu_root->func_dfu.bcdDFUVersion)); + + if (dfu_root->func_dfu.bcdDFUVersion == libusb_cpu_to_le16(0x11a)) + dfuse_device = 1; + + /* If not overridden by the user */ + if (!transfer_size) { + transfer_size = libusb_le16_to_cpu( + dfu_root->func_dfu.wTransferSize); + if (transfer_size) { + printf("Device returned transfer size %i\n", + transfer_size); + } else { + errx(EX_IOERR, "Transfer size must be specified"); + } + } + +#ifdef HAVE_GETPAGESIZE +/* autotools lie when cross-compiling for Windows using mingw32/64 */ +#ifndef __MINGW32__ + /* limitation of Linux usbdevio */ + if ((int)transfer_size > getpagesize()) { + transfer_size = getpagesize(); + printf("Limited transfer size to %i\n", transfer_size); + } +#endif /* __MINGW32__ */ +#endif /* HAVE_GETPAGESIZE */ + + if (transfer_size < dfu_root->bMaxPacketSize0) { + transfer_size = dfu_root->bMaxPacketSize0; + printf("Adjusted transfer size to %i\n", transfer_size); + } + + switch (mode) { + case MODE_UPLOAD: + /* open for "exclusive" writing */ + fd = open(file.name, O_WRONLY | O_BINARY | O_CREAT | O_EXCL | O_TRUNC, 0666); + if (fd < 0) + err(EX_IOERR, "Cannot open file %s for writing", file.name); + + if (dfuse_device || dfuse_options) { + if (dfuse_do_upload(dfu_root, transfer_size, fd, + dfuse_options) < 0) + exit(1); + } else { + if (dfuload_do_upload(dfu_root, transfer_size, + expected_size, fd) < 0) { + exit(1); + } + } + close(fd); + break; + + case MODE_DOWNLOAD: + if (((file.idVendor != 0xffff && file.idVendor != runtime_vendor) || + (file.idProduct != 0xffff && file.idProduct != runtime_product)) && + ((file.idVendor != 0xffff && file.idVendor != dfu_root->vendor) || + (file.idProduct != 0xffff && file.idProduct != dfu_root->product))) { + errx(EX_IOERR, "Error: File ID %04x:%04x does " + "not match device (%04x:%04x or %04x:%04x)", + file.idVendor, file.idProduct, + runtime_vendor, runtime_product, + dfu_root->vendor, dfu_root->product); + } + if (dfuse_device || dfuse_options || file.bcdDFU == 0x11a) { + if (dfuse_do_dnload(dfu_root, transfer_size, &file, + dfuse_options) < 0) + exit(1); + } else { + if (dfuload_do_dnload(dfu_root, transfer_size, &file) < 0) + exit(1); + } + break; + case MODE_DETACH: + if (dfu_detach(dfu_root->dev_handle, dfu_root->interface, 1000) < 0) { + warnx("can't detach"); + } + break; + default: + errx(EX_IOERR, "Unsupported mode: %u", mode); + break; + } + + if (final_reset) { + if (dfu_detach(dfu_root->dev_handle, dfu_root->interface, 1000) < 0) { + /* Even if detach failed, just carry on to leave the + device in a known state */ + warnx("can't detach"); + } + printf("Resetting USB to switch back to runtime mode\n"); + ret = libusb_reset_device(dfu_root->dev_handle); + if (ret < 0 && ret != LIBUSB_ERROR_NOT_FOUND) { + errx(EX_IOERR, "error resetting after download"); + } + } + + libusb_close(dfu_root->dev_handle); + dfu_root->dev_handle = NULL; + libusb_exit(ctx); + + return (0); +} diff --git a/tools/src/dfu-util/src/portable.h b/tools/src/dfu-util/src/portable.h new file mode 100755 index 0000000..2609232 --- /dev/null +++ b/tools/src/dfu-util/src/portable.h @@ -0,0 +1,72 @@ + +#ifndef PORTABLE_H +#define PORTABLE_H + +#ifdef HAVE_CONFIG_H +# include "config.h" +#else +# define PACKAGE "dfu-util" +# define PACKAGE_VERSION "0.8-msvc" +# define PACKAGE_STRING "dfu-util 0.8-msvc" +# define PACKAGE_BUGREPORT "dfu-util@lists.gnumonks.org" +#endif /* HAVE_CONFIG_H */ + +#ifdef HAVE_FTRUNCATE +# include +#else +# include +#endif /* HAVE_FTRUNCATE */ + +#ifdef HAVE_NANOSLEEP +# include +# define milli_sleep(msec) do {\ + if (msec) {\ + struct timespec nanosleepDelay = { (msec) / 1000, ((msec) % 1000) * 1000000 };\ + nanosleep(&nanosleepDelay, NULL);\ + } } while (0) +#elif defined HAVE_WINDOWS_H +# define milli_sleep(msec) do {\ + if (msec) {\ + Sleep(msec);\ + } } while (0) +#else +# error "Can't get no sleep! Please report" +#endif /* HAVE_NANOSLEEP */ + +#ifdef HAVE_ERR +# include +#else +# include +# include +# define warnx(...) do {\ + fprintf(stderr, __VA_ARGS__);\ + fprintf(stderr, "\n"); } while (0) +# define errx(eval, ...) do {\ + warnx(__VA_ARGS__);\ + exit(eval); } while (0) +# define warn(...) do {\ + fprintf(stderr, "%s: ", strerror(errno));\ + warnx(__VA_ARGS__); } while (0) +# define err(eval, ...) do {\ + warn(__VA_ARGS__);\ + exit(eval); } while (0) +#endif /* HAVE_ERR */ + +#ifdef HAVE_SYSEXITS_H +# include +#else +# define EX_OK 0 /* successful termination */ +# define EX_USAGE 64 /* command line usage error */ +# define EX_SOFTWARE 70 /* internal software error */ +# define EX_IOERR 74 /* input/output error */ +#endif /* HAVE_SYSEXITS_H */ + +#ifndef O_BINARY +# define O_BINARY 0 +#endif + +#ifndef off_t +# define off_t long int +#endif + +#endif /* PORTABLE_H */ diff --git a/tools/src/dfu-util/src/prefix.c b/tools/src/dfu-util/src/prefix.c new file mode 100755 index 0000000..05692f9 --- /dev/null +++ b/tools/src/dfu-util/src/prefix.c @@ -0,0 +1,176 @@ +/* + * dfu-prefix + * + * Copyright 2011-2012 Stefan Schmidt + * Copyright 2013 Hans Petter Selasky + * Copyright 2014 Uwe Bonnes + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include + +#include "portable.h" +#include "dfu_file.h" + +enum mode { + MODE_NONE, + MODE_ADD, + MODE_DEL, + MODE_CHECK +}; + +int verbose; + +static void help(void) +{ + fprintf(stderr, "Usage: dfu-prefix [options] ...\n" + " -h --help\t\t\tPrint this help message\n" + " -V --version\t\t\tPrint the version number\n" + " -c --check \t\tCheck DFU prefix of \n" + " -D --delete \t\tDelete DFU prefix from \n" + " -a --add \t\tAdd DFU prefix to \n" + "In combination with -a:\n" + ); + fprintf(stderr, " -s --stellaris-address
    Add TI Stellaris address prefix to \n" + "In combination with -D or -c:\n" + " -T --stellaris\t\tAct on TI Stellaris address prefix of \n" + "In combination with -a or -D or -c:\n" + " -L --lpc-prefix\t\tUse NXP LPC DFU prefix format\n" + ); + exit(EX_USAGE); +} + +static void print_version(void) +{ + printf("dfu-prefix (%s) %s\n\n", PACKAGE, PACKAGE_VERSION); + printf("Copyright 2011-2012 Stefan Schmidt, 2014 Uwe Bonnes\n" + "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" + "Please report bugs to %s\n\n", PACKAGE_BUGREPORT); + +} + +static struct option opts[] = { + { "help", 0, 0, 'h' }, + { "version", 0, 0, 'V' }, + { "check", 1, 0, 'c' }, + { "add", 1, 0, 'a' }, + { "delete", 1, 0, 'D' }, + { "stellaris-address", 1, 0, 's' }, + { "stellaris", 0, 0, 'T' }, + { "LPC", 0, 0, 'L' }, +}; +int main(int argc, char **argv) +{ + struct dfu_file file; + enum mode mode = MODE_NONE; + enum prefix_type type = ZERO_PREFIX; + uint32_t lmdfu_flash_address = 0; + char *end; + + /* make sure all prints are flushed */ + setvbuf(stdout, NULL, _IONBF, 0); + + print_version(); + + memset(&file, 0, sizeof(file)); + + while (1) { + int c, option_index = 0; + c = getopt_long(argc, argv, "hVc:a:D:p:v:d:s:TL", opts, + &option_index); + if (c == -1) + break; + + switch (c) { + case 'h': + help(); + break; + case 'V': + exit(0); + break; + case 'D': + file.name = optarg; + mode = MODE_DEL; + break; + case 'c': + file.name = optarg; + mode = MODE_CHECK; + break; + case 'a': + file.name = optarg; + mode = MODE_ADD; + break; + case 's': + lmdfu_flash_address = strtoul(optarg, &end, 0); + if (*end) { + errx(EX_IOERR, "Invalid lmdfu " + "address: %s", optarg); + } + /* fall-through */ + case 'T': + type = LMDFU_PREFIX; + break; + case 'L': + type = LPCDFU_UNENCRYPTED_PREFIX; + break; + default: + help(); + break; + } + } + + if (!file.name) { + fprintf(stderr, "You need to specify a filename\n"); + help(); + } + + switch(mode) { + case MODE_ADD: + if (type == ZERO_PREFIX) + errx(EX_IOERR, "Prefix type must be specified"); + dfu_load_file(&file, MAYBE_SUFFIX, NO_PREFIX); + file.lmdfu_address = lmdfu_flash_address; + file.prefix_type = type; + printf("Adding prefix to file\n"); + dfu_store_file(&file, file.size.suffix != 0, 1); + break; + + case MODE_CHECK: + dfu_load_file(&file, MAYBE_SUFFIX, MAYBE_PREFIX); + show_suffix_and_prefix(&file); + if (type > ZERO_PREFIX && file.prefix_type != type) + errx(EX_IOERR, "No prefix of requested type"); + break; + + case MODE_DEL: + dfu_load_file(&file, MAYBE_SUFFIX, NEEDS_PREFIX); + if (type > ZERO_PREFIX && file.prefix_type != type) + errx(EX_IOERR, "No prefix of requested type"); + printf("Removing prefix from file\n"); + /* if there was a suffix, rewrite it */ + dfu_store_file(&file, file.size.suffix != 0, 0); + break; + + default: + help(); + break; + } + return (0); +} diff --git a/tools/src/dfu-util/src/quirks.c b/tools/src/dfu-util/src/quirks.c new file mode 100755 index 0000000..c90e585 --- /dev/null +++ b/tools/src/dfu-util/src/quirks.c @@ -0,0 +1,56 @@ +/* + * Simple quirk system for dfu-util + * + * Copyright 2010-2014 Tormod Volden + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include "quirks.h" + +uint16_t get_quirks(uint16_t vendor, uint16_t product, uint16_t bcdDevice) +{ + uint16_t quirks = 0; + + /* Device returns bogus bwPollTimeout values */ + if ((vendor == VENDOR_OPENMOKO || vendor == VENDOR_FIC) && + product >= PRODUCT_FREERUNNER_FIRST && + product <= PRODUCT_FREERUNNER_LAST) + quirks |= QUIRK_POLLTIMEOUT; + + if (vendor == VENDOR_VOTI && + product == PRODUCT_OPENPCD) + quirks |= QUIRK_POLLTIMEOUT; + + /* Reports wrong DFU version in DFU descriptor */ + if (vendor == VENDOR_LEAFLABS && + product == PRODUCT_MAPLE3 && + bcdDevice == 0x0200) + quirks |= QUIRK_FORCE_DFU11; + + /* old devices(bcdDevice == 0) return bogus bwPollTimeout values */ + if (vendor == VENDOR_SIEMENS && + (product == PRODUCT_PXM40 || product == PRODUCT_PXM50) && + bcdDevice == 0) + quirks |= QUIRK_POLLTIMEOUT; + + /* M-Audio Transit returns bogus bwPollTimeout values */ + if (vendor == VENDOR_MIDIMAN && + product == PRODUCT_TRANSIT) + quirks |= QUIRK_POLLTIMEOUT; + + return (quirks); +} diff --git a/tools/src/dfu-util/src/quirks.h b/tools/src/dfu-util/src/quirks.h new file mode 100755 index 0000000..3193f25 --- /dev/null +++ b/tools/src/dfu-util/src/quirks.h @@ -0,0 +1,27 @@ +#ifndef DFU_QUIRKS_H +#define DFU_QUIRKS_H + +#define VENDOR_OPENMOKO 0x1d50 /* Openmoko Freerunner / GTA02 */ +#define VENDOR_FIC 0x1457 /* Openmoko Freerunner / GTA02 */ +#define VENDOR_VOTI 0x16c0 /* OpenPCD Reader */ +#define VENDOR_LEAFLABS 0x1eaf /* Maple */ +#define VENDOR_SIEMENS 0x0908 /* Siemens AG */ +#define VENDOR_MIDIMAN 0x0763 /* Midiman */ + +#define PRODUCT_FREERUNNER_FIRST 0x5117 +#define PRODUCT_FREERUNNER_LAST 0x5126 +#define PRODUCT_OPENPCD 0x076b +#define PRODUCT_MAPLE3 0x0003 /* rev 3 and 5 */ +#define PRODUCT_PXM40 0x02c4 /* Siemens AG, PXM 40 */ +#define PRODUCT_PXM50 0x02c5 /* Siemens AG, PXM 50 */ +#define PRODUCT_TRANSIT 0x2806 /* M-Audio Transit (Midiman) */ + +#define QUIRK_POLLTIMEOUT (1<<0) +#define QUIRK_FORCE_DFU11 (1<<1) + +/* Fallback value, works for OpenMoko */ +#define DEFAULT_POLLTIMEOUT 5 + +uint16_t get_quirks(uint16_t vendor, uint16_t product, uint16_t bcdDevice); + +#endif /* DFU_QUIRKS_H */ diff --git a/tools/src/dfu-util/src/suffix.c b/tools/src/dfu-util/src/suffix.c new file mode 100755 index 0000000..ba02a01 --- /dev/null +++ b/tools/src/dfu-util/src/suffix.c @@ -0,0 +1,176 @@ +/* + * dfu-suffix + * + * Copyright 2011-2012 Stefan Schmidt + * Copyright 2013 Hans Petter Selasky + * Copyright 2014 Tormod Volden + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include + +#include "portable.h" +#include "dfu_file.h" + +enum mode { + MODE_NONE, + MODE_ADD, + MODE_DEL, + MODE_CHECK +}; + +int verbose; + +static void help(void) +{ + fprintf(stderr, "Usage: dfu-suffix [options] ...\n" + " -h --help\t\t\tPrint this help message\n" + " -V --version\t\t\tPrint the version number\n" + " -c --check \t\tCheck DFU suffix of \n" + " -a --add \t\tAdd DFU suffix to \n" + " -D --delete \t\tDelete DFU suffix from \n" + " -p --pid \t\tAdd product ID into DFU suffix in \n" + " -v --vid \t\tAdd vendor ID into DFU suffix in \n" + " -d --did \t\tAdd device ID into DFU suffix in \n" + " -S --spec \t\tAdd DFU specification ID into DFU suffix in \n" + ); + exit(EX_USAGE); +} + +static void print_version(void) +{ + printf("dfu-suffix (%s) %s\n\n", PACKAGE, PACKAGE_VERSION); + printf("Copyright 2011-2012 Stefan Schmidt, 2013-2014 Tormod Volden\n" + "This program is Free Software and has ABSOLUTELY NO WARRANTY\n" + "Please report bugs to %s\n\n", PACKAGE_BUGREPORT); + +} + +static struct option opts[] = { + { "help", 0, 0, 'h' }, + { "version", 0, 0, 'V' }, + { "check", 1, 0, 'c' }, + { "add", 1, 0, 'a' }, + { "delete", 1, 0, 'D' }, + { "pid", 1, 0, 'p' }, + { "vid", 1, 0, 'v' }, + { "did", 1, 0, 'd' }, + { "spec", 1, 0, 'S' }, +}; + +int main(int argc, char **argv) +{ + struct dfu_file file; + int pid, vid, did, spec; + enum mode mode = MODE_NONE; + + /* make sure all prints are flushed */ + setvbuf(stdout, NULL, _IONBF, 0); + + print_version(); + + pid = vid = did = 0xffff; + spec = 0x0100; /* Default to bcdDFU version 1.0 */ + memset(&file, 0, sizeof(file)); + + while (1) { + int c, option_index = 0; + c = getopt_long(argc, argv, "hVc:a:D:p:v:d:S:s:T", opts, + &option_index); + if (c == -1) + break; + + switch (c) { + case 'h': + help(); + break; + case 'V': + exit(0); + break; + case 'D': + file.name = optarg; + mode = MODE_DEL; + break; + case 'p': + pid = strtol(optarg, NULL, 16); + break; + case 'v': + vid = strtol(optarg, NULL, 16); + break; + case 'd': + did = strtol(optarg, NULL, 16); + break; + case 'S': + spec = strtol(optarg, NULL, 16); + break; + case 'c': + file.name = optarg; + mode = MODE_CHECK; + break; + case 'a': + file.name = optarg; + mode = MODE_ADD; + break; + default: + help(); + break; + } + } + + if (!file.name) { + fprintf(stderr, "You need to specify a filename\n"); + help(); + } + + if (spec != 0x0100 && spec != 0x011a) { + fprintf(stderr, "Only DFU specification 0x0100 and 0x011a supported\n"); + help(); + } + + switch(mode) { + case MODE_ADD: + dfu_load_file(&file, NO_SUFFIX, MAYBE_PREFIX); + file.idVendor = vid; + file.idProduct = pid; + file.bcdDevice = did; + file.bcdDFU = spec; + /* always write suffix, rewrite prefix if there was one */ + dfu_store_file(&file, 1, file.size.prefix != 0); + printf("Suffix successfully added to file\n"); + break; + + case MODE_CHECK: + dfu_load_file(&file, NEEDS_SUFFIX, MAYBE_PREFIX); + show_suffix_and_prefix(&file); + break; + + case MODE_DEL: + dfu_load_file(&file, NEEDS_SUFFIX, MAYBE_PREFIX); + dfu_store_file(&file, 0, file.size.prefix != 0); + if (file.size.suffix) /* had a suffix */ + printf("Suffix successfully removed from file\n"); + break; + + default: + help(); + break; + } + return (0); +} diff --git a/tools/src/dfu-util/src/usb_dfu.h b/tools/src/dfu-util/src/usb_dfu.h new file mode 100755 index 0000000..f6fe270 --- /dev/null +++ b/tools/src/dfu-util/src/usb_dfu.h @@ -0,0 +1,99 @@ +#ifndef USB_DFU_H +#define USB_DFU_H +/* USB Device Firmware Update Implementation for OpenPCD + * (C) 2006 by Harald Welte + * + * Protocol definitions for USB DFU + * + * This ought to be compliant to the USB DFU Spec 1.0 as available from + * http://www.usb.org/developers/devclass_docs/usbdfu10.pdf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include + +#define USB_DT_DFU 0x21 + +#ifdef _MSC_VER +# pragma pack(push) +# pragma pack(1) +#endif /* _MSC_VER */ +struct usb_dfu_func_descriptor { + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bmAttributes; +#define USB_DFU_CAN_DOWNLOAD (1 << 0) +#define USB_DFU_CAN_UPLOAD (1 << 1) +#define USB_DFU_MANIFEST_TOL (1 << 2) +#define USB_DFU_WILL_DETACH (1 << 3) + uint16_t wDetachTimeOut; + uint16_t wTransferSize; + uint16_t bcdDFUVersion; +#ifdef _MSC_VER +}; +# pragma pack(pop) +#elif defined __GNUC__ +} __attribute__ ((packed)); +#else + #warning "No way to pack struct on this compiler? This will break!" +#endif /* _MSC_VER */ + +#define USB_DT_DFU_SIZE 9 + +#define USB_TYPE_DFU (LIBUSB_REQUEST_TYPE_CLASS|LIBUSB_RECIPIENT_INTERFACE) + +/* DFU class-specific requests (Section 3, DFU Rev 1.1) */ +#define USB_REQ_DFU_DETACH 0x00 +#define USB_REQ_DFU_DNLOAD 0x01 +#define USB_REQ_DFU_UPLOAD 0x02 +#define USB_REQ_DFU_GETSTATUS 0x03 +#define USB_REQ_DFU_CLRSTATUS 0x04 +#define USB_REQ_DFU_GETSTATE 0x05 +#define USB_REQ_DFU_ABORT 0x06 + +/* DFU_GETSTATUS bStatus values (Section 6.1.2, DFU Rev 1.1) */ +#define DFU_STATUS_OK 0x00 +#define DFU_STATUS_errTARGET 0x01 +#define DFU_STATUS_errFILE 0x02 +#define DFU_STATUS_errWRITE 0x03 +#define DFU_STATUS_errERASE 0x04 +#define DFU_STATUS_errCHECK_ERASED 0x05 +#define DFU_STATUS_errPROG 0x06 +#define DFU_STATUS_errVERIFY 0x07 +#define DFU_STATUS_errADDRESS 0x08 +#define DFU_STATUS_errNOTDONE 0x09 +#define DFU_STATUS_errFIRMWARE 0x0a +#define DFU_STATUS_errVENDOR 0x0b +#define DFU_STATUS_errUSBR 0x0c +#define DFU_STATUS_errPOR 0x0d +#define DFU_STATUS_errUNKNOWN 0x0e +#define DFU_STATUS_errSTALLEDPKT 0x0f + +enum dfu_state { + DFU_STATE_appIDLE = 0, + DFU_STATE_appDETACH = 1, + DFU_STATE_dfuIDLE = 2, + DFU_STATE_dfuDNLOAD_SYNC = 3, + DFU_STATE_dfuDNBUSY = 4, + DFU_STATE_dfuDNLOAD_IDLE = 5, + DFU_STATE_dfuMANIFEST_SYNC = 6, + DFU_STATE_dfuMANIFEST = 7, + DFU_STATE_dfuMANIFEST_WAIT_RST = 8, + DFU_STATE_dfuUPLOAD_IDLE = 9, + DFU_STATE_dfuERROR = 10 +}; + +#endif /* USB_DFU_H */ diff --git a/tools/src/dfu-util/www/build.html b/tools/src/dfu-util/www/build.html new file mode 100755 index 0000000..2e6de0c --- /dev/null +++ b/tools/src/dfu-util/www/build.html @@ -0,0 +1,147 @@ + + + + + + + Building dfu-util from source + + + + + + + + + +
    +

    How to build dfu-util from source

    + +

    Prerequisites for building from git

    +

    Mac OS X

    +

    +First install MacPorts (and if you are on 10.6 or older, the Java Developer Package) and then run: +

    +
    +	sudo port install libusb-devel git-core
    +
    + +

    FreeBSD

    +
    +	sudo pkg_add -r git pkgconf
    +
    + +

    Ubuntu and Debian and derivatives

    +
    +	sudo apt-get build-dep dfu-util
    +	sudo apt-get install libusb-1.0-0-dev
    +
    + +

    Get the source code and build it

    +

    +The first time you will have to clone the git repository: +

    +
    +	git clone git://gitorious.org/dfu-util/dfu-util.git
    +	cd dfu-util
    +
    +

    +If you later want to update to latest git version, just run this: +

    +
    +	make maintainer-clean
    +	git pull
    +
    +

    +To build the source: +

    +
    +	./autogen.sh
    +	./configure  # on most systems
    +	make
    +
    + +

    +If you are building on Mac OS X, replace the ./configure command with: +

    +
    +	./configure --libdir=/opt/local/lib --includedir=/opt/local/include  # on MacOSX only
    +
    + +

    +Your dfu-util binary will be inside the src folder. Use it from there, or install it to /usr/local/bin by running "sudo make install". +

    + +

    Cross-building for Windows

    + +

    +Windows binaries can be built in a MinGW +environment, on a Windows computer or cross-hosted in another OS. +To build it on a Debian or Ubuntu host, first install build dependencies: +

    +
    +	sudo apt-get build-dep libusb-1.0-0 dfu-util
    +	sudo apt-get install mingw32
    +
    + +

    +The below example builds dfu-util 0.8 and libusb 1.0.19 from unpacked release +tarballs. If you instead build from git, you will have to run "./autogen.sh" +before running the "./configure" steps. +

    + +
    +mkdir -p build
    +cd libusb-1.0.19
    +PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig ./configure \
    +    --host=i586-mingw32msvc --prefix=$PWD/../build
    +# WINVER workaround needed for 1.0.19 only
    +make CFLAGS="-DWINVER=0x0501"
    +make install
    +cd ..
    +
    +cd dfu-util-0.8
    +PKG_CONFIG_PATH=$PWD/../build/lib/pkgconfig ./configure \
    +    --host=i586-mingw32msvc --prefix=$PWD/../build
    +make
    +make install
    +cd ..
    +
    +The build files will now be in build/bin. +

    + +

    Building on Windows using MinGW

    +This assumes using release tarballs or having run ./autogen.sh on +the git sources. +
    +cd libusb-1.0.19
    +./configure --prefix=$HOME
    +# WINVER workaround needed for 1.0.19 only
    +# MKDIR_P setting should not really be needed...
    +make CFLAGS="-DWINVER=0x0501" MKDIR_P="mkdir -p"
    +make install
    +cd ..
    +
    +cd dfu-util-0.8
    +./configure USB_CFLAGS="-I$HOME/include/libusb-1.0" \
    +            USB_LIBS="-L $HOME/lib -lusb-1.0" PKG_CONFIG=true
    +make
    +make install
    +cd ..
    +
    +To link libusb statically into dfu-util.exe use instead of "make": +
    +make LDFLAGS=-static
    +
    +The built executables (and DLL) will now be under $HOME/bin. + +

    +[Back to dfu-util main page] +

    + +
    + + diff --git a/tools/src/dfu-util/www/dfu-util.1.html b/tools/src/dfu-util/www/dfu-util.1.html new file mode 100755 index 0000000..667a369 --- /dev/null +++ b/tools/src/dfu-util/www/dfu-util.1.html @@ -0,0 +1,411 @@ + + +Man page of DFU-UTIL + + +

    DFU-UTIL(1)

    + +  +

    NAME

    + +dfu-util - Device firmware update (DFU) USB programmer +  +

    SYNOPSIS

    + + +
    +
    +dfu-util + +-l + +[-v] + +[-d + +vid:pid[,vid:pid]] + +[-p + +path] + +[-c + +configuration] + +[-i + +interface] + +[-a + +alt-intf] + +[-S + +serial[,serial]] + + +
    +dfu-util + +[-v] + +[-d + +vid:pid[,vid:pid]] + +[-p + +path] + +[-c + +configuration] + +[-i + +interface] + +[-a + +alt-intf] + +[-S + +serial[,serial]] + +[-t + +size] + +[-Z + +size] + +[-s + +address] + +[-R] + +[-D|-U + +file] + + +
    +dfu-util + +[-hV] + +
    +  +

    DESCRIPTION

    + +dfu-util + +is a program that implements the host (computer) side of the USB DFU +(Universal Serial Bus Device Firmware Upgrade) protocol. +

    +dfu-util communicates with devices that implement the device side of the +USB DFU protocol, and is often used to upgrade the firmware of such +devices. +  +

    OPTIONS

    + +
    +
    -l, --list + +
    +List the currently attached DFU capable USB devices. +
    -d, --device [Run-Time VENDOR]:[Run-Time PRODUCT][,[DFU Mode VENDOR]:[DFU Mode PRODUCT]] + +
    +
    +Specify run-time and/or DFU mode vendor and/or product IDs of the DFU device +to work with. VENDOR and PRODUCT are hexadecimal numbers (no prefix +needed), "*" (match any), or "-" (match nothing). By default, any DFU capable +device in either run-time or DFU mode will be considered. +

    +If you only have one standards-compliant DFU device attached to your computer, +this parameter is optional. However, as soon as you have multiple DFU devices +connected, dfu-util will detect this and abort, asking you to specify which +device to use. +

    +If only run-time IDs are specified (e.g. "--device 1457:51ab"), then in +addition to the specified run-time IDs, any DFU mode devices will also be +considered. This is beneficial to allow a DFU capable device to be found +again after a switch to DFU mode, since the vendor and/or product ID of a +device usually changes in DFU mode. +

    +If only DFU mode IDs are specified (e.g. "--device ,951:26"), then all +run-time devices will be ignored, making it easy to target a specific device in +DFU mode. +

    +If both run-time and DFU mode IDs are specified (e.g. "--device +1457:51ab,:2bc"), then unspecified DFU mode components will use the run-time +value specified. +

    +Examples: +

    +
    --device 1457:51ab,951:26 + +
    +
    + +Work with a device in run-time mode with +vendor ID 0x1457 and product ID 0x51ab, or in DFU mode with vendor ID 0x0951 +and product ID 0x0026 +

    +

    --device 1457:51ab,:2bc + +
    +
    + +Work with a device in run-time mode with vendor ID 0x1457 and product ID +0x51ab, or in DFU mode with vendor ID 0x1457 and product ID 0x02bc +

    +

    --device 1457:51ab + +
    +
    + +Work with a device in run-time mode with vendor ID 0x1457 and product ID +0x51ab, or in DFU mode with any vendor and product ID +

    +

    --device ,951:26 + +
    +
    + +Work with a device in DFU mode with vendor ID 0x0951 and product ID 0x0026 +

    +

    --device *,- + +
    +
    + +Work with any device in run-time mode, and ignore any device in DFU mode +

    +

    --device , + +
    +
    + +Ignore any device in run-time mode, and Work with any device in DFU mode +
    +
    + +
    -p, --path BUS-PORT. ... .PORT + +
    +Specify the path to the DFU device. +
    -c, --cfg CONFIG-NR + +
    +Specify the configuration of the DFU device. Note that this is only used for matching, the configuration is not set by dfu-util. +
    -i, --intf INTF-NR + +
    +Specify the DFU interface number. +
    -a, --alt ALT + +
    +Specify the altsetting of the DFU interface by name or by number. +
    -S, --serial [Run-Time SERIAL][,[DFU Mode SERIAL]] + +
    +Specify the run-time and DFU mode serial numbers used to further restrict +device matches. If multiple, identical DFU devices are simultaneously +connected to a system then vendor and product ID will be insufficient for +targeting a single device. In this situation, it may be possible to use this +parameter to specify a serial number which also must match. +

    +If only a single serial number is specified, then the same serial number is +used in both run-time and DFU mode. An empty serial number will match any +serial number in the corresponding mode. +

    -t, --transfer-size SIZE + +
    +Specify the number of bytes per USB transfer. The optimal value is +usually determined automatically so this option is rarely useful. If +you need to use this option for a device, please report it as a bug. +
    -Z, --upload-size SIZE + +
    +Specify the expected upload size, in bytes. +
    -U, --upload FILE + +
    +Read firmware from device into +FILE. + +
    -D, --download FILE + +
    +Write firmware from +FILE + +into device. +
    -R, --reset + +
    +Issue USB reset signalling after upload or download has finished. +
    -s, --dfuse-address address + +
    +Specify target address for raw binary download/upload on DfuSe devices. Do +not + +use this for downloading DfuSe (.dfu) files. Modifiers can be added +to the address, separated by a colon, to perform special DfuSE commands such +as "leave" DFU mode, "unprotect" and "mass-erase" flash memory. +
    -v, --verbose + +
    +Print more information about dfu-util's operation. A second +-v + +will turn on verbose logging of USB requests. Repeat this option to further +increase verbosity. +
    -h, --help + +
    +Show a help text and exit. +
    -V, --version + +
    +Show version information and exit. +
    +  +

    EXAMPLES

    + +  +

    Using dfu-util in the OpenMoko project

    + +(with the Neo1973 hardware) +

    + +Flashing the rootfs: +
    + + $ dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2 + +

    + +Flashing the kernel: +
    + + $ dfu-util -a kernel -R -D /path/to/uImage + +

    + +Flashing the bootloader: +
    + + $ dfu-util -a u-boot -R -D /path/to/u-boot.bin + +

    + +Copying a kernel into RAM: +
    + + $ dfu-util -a 0 -R -D /path/to/uImage + +

    +Once this has finished, the kernel will be available at the default load +address of 0x32000000 in Neo1973 RAM. +Note: + +You cannot transfer more than 2MB of data into RAM using this method. +

    +  +

    Using dfu-util with a DfuSe device

    + +

    + +Flashing a +.dfu + +(special DfuSe format) file to the device: +
    + + $ dfu-util -a 0 -D /path/to/dfuse-image.dfu + +

    + +Reading out 1 KB of flash starting at address 0x8000000: +
    + + $ dfu-util -a 0 -s 0x08000000:1024 -U newfile.bin + +

    + +Flashing a binary file to address 0x8004000 of device memory and +ask the device to leave DFU mode: +
    + + $ dfu-util -a 0 -s 0x08004000:leave -D /path/to/image.bin + + +  +

    BUGS

    + +Please report any bugs to the dfu-util mailing list at +dfu-util@lists.gnumonks.org. + +Please use the +--verbose option (repeated as necessary) to provide more + +information in your bug report. +  +

    SEE ALSO

    + +The dfu-util home page is +http://dfu-util.gnumonks.org + +  +

    HISTORY

    + +dfu-util was originally written for the OpenMoko project by +Weston Schmidt <weston_schmidt@yahoo.com> and +Harald Welte <hwelte@hmw-consulting.de>. Over time, nearly complete +support of DFU 1.0, DFU 1.1 and DfuSe ("1.1a") has been added. +  +

    LICENCE

    + +dfu-util + +is covered by the GNU General Public License (GPL), version 2 or later. +  +

    COPYRIGHT

    + +This manual page was originally written by Uwe Hermann <uwe@hermann-uwe.de>, +and is now part of the dfu-util project. +

    + +


    + 

    Index

    +
    +
    NAME
    +
    SYNOPSIS
    +
    DESCRIPTION
    +
    OPTIONS
    +
    EXAMPLES
    +
    +
    Using dfu-util in the OpenMoko project
    +
    Using dfu-util with a DfuSe device
    +
    +
    BUGS
    +
    SEE ALSO
    +
    HISTORY
    +
    LICENCE
    +
    COPYRIGHT
    +
    +
    +This document was created by man2html, +using the doc/dfu-util.1 manual page from dfu-util 0.8.
    +Time: 14:40:57 GMT, September 13, 2014 + + diff --git a/tools/src/dfu-util/www/dfuse.html b/tools/src/dfu-util/www/dfuse.html new file mode 100755 index 0000000..ebb9784 --- /dev/null +++ b/tools/src/dfu-util/www/dfuse.html @@ -0,0 +1,135 @@ + + + + + + DfuSe and dfu-util + + + + + + + + + +
    +

    Using dfu-util with DfuSe devices

    +

    DfuSe

    +

    + DfuSe (DFU with ST Microsystems extensions) is a protocol based on + DFU 1.1. However, in expanding the functionality of the DFU protocol, + ST Microsystems broke all compatibility with the DFU 1.1 standard. + DfuSe devices report the DFU version as "1.1a". +

    +

    + DfuSe can be used to download firmware and other data + from a host computer to a conforming device (or upload in the + opposite direction) over USB similar to standard DFU. +

    +

    + The main difference from standard DFU is that the target address in + the device (flash) memory is specified by the host, so that a + download can be performed to parts of the device memory. The host + program is also responsible for erasing flash pages before they + are written to. +

    +

    .dfu files

    +

    + A special file format is defined by ST Microsystems to carry firmware + for DfuSe devices. The file contains target information such as address + and alternate interface information in addition to the binary data. + Several blocks of binary data can be combined in one .dfu file. +

    +

    Alternate interfaces

    +

    + Different memory locations of the device may have different + characteristics that the host program (dfu-util) has to take + into considerations, such as flash memory page size, read-only + versus read-write segments, the need to erase, and so on. + These parameters are reported by the device in the string + descriptors meant for describing the USB interfaces. + The host program decodes these strings to build a memory map of + the device. Different memory units or address spaces are listed + in separate alternate interface settings that must be selected + according to the memory unit to access. +

    +

    + Note that dfu-util leaves it to the user to select alternate + interface. When parsing a .dfu file it will skip file segments + not matching the selected alternate interface. Also, some + DfuSe device firmware implementations ignore the setting of + alternate interface and deduct the memory unit from the + address, since they have no address space overlap. +

    +

    DfuSe special commands

    +

    + DfuSe special commands are used by the host program during normal + downloads or uploads, such as SET_ADDRESS and ERASE_PAGE. Also + the normal DFU_DNLOAD and DFU_UPLOAD commands have special + implementations in DfuSe. + Many DfuSe devices also support commands to leave DFU mode, + read unprotect the flash memory or mass erase the flash memory. + dfu-util (from version 0.7) + supports adding "leave", "unprotect", or "mass-erase" + to the -s option argument to send such requests in combination + with a download request. These modifiers are separated with a colon. +

    +

    + Some DfuSe devices have their DfuSe bootloader running from flash + memory. Erasing the whole flash memory would therefore destroy + the DfuSe bootloader itself and practically brick the device + for most users. Any use of modifiers such as "unprotect" + and "mass-erase" therefore needs to be combined with the "force" + modifer. This is not included in the examples, to not encourage + ignorant users to copy and paste such instructions and shoot + themselves in the foot. +

    +

    + Devices based on for instance STM32F103 all run the bootloader + from flash, since there is no USB bootloader in ROM. +

    +

    + For instance STM32F107, STM32F2xx and STM32F4xx devices have a + DfuSe bootloader in ROM, so the flash can be erased while + keeping the device available for USB DFU transfers as long + as the device designers use this built-in bootloader and have + not implemented another DfuSe bootloader in flash that the user is + dependent upon. +

    +

    + Well-written bootloaders running from flash will report their + own memory region as read-only and not eraseable, but this does + not prevent dfu-util from sending a "unprotect" or "mass-erase" + request which overrides this, if the user insists. +

    +

    Example usage

    +

    + Flashing a .dfu (special DfuSe format) file to the device: +

    +
    +         $ dfu-util -a 0 -D /path/to/dfuse-image.dfu
    +	
    +

    + Reading out 1 KB of flash starting at address 0x8000000: +

    +
    +         $ dfu-util -a 0 -s 0x08000000:1024 -U newfile.bin
    +	
    +

    + Flashing a binary file to address 0x8004000 of device memory and ask + the device to leave DFU mode: +

    +
    +         $ dfu-util -a 0 -s 0x08004000:leave -D /path/to/image.bin
    +	
    +

    + [Back to dfu-util main page] +

    + +
    + + diff --git a/tools/src/dfu-util/www/index.html b/tools/src/dfu-util/www/index.html new file mode 100755 index 0000000..9bb3223 --- /dev/null +++ b/tools/src/dfu-util/www/index.html @@ -0,0 +1,119 @@ + + + + + + dfu-util Homepage + + + + + + + + + +
    +

    dfu-util - Device Firmware Upgrade Utilities

    +

    Description

    +

    + dfu-util is a host side implementation of the DFU 1.0 and DFU 1.1 specifications of the USB forum. + + DFU is intended to download and upload firmware to/from devices connected + over USB. It ranges from small devices like micro-controller boards + to mobile phones. Using dfu-util you can download firmware to your + DFU-enabled device or upload firmware from it. dfu-util has been + tested with the Openmoko Neo1973 and Freerunner and many other devices. +

    +

    + See the manual page for examples of use. +

    +

    Supported Devices

    + +

    Releases

    +

    + Releases of the dfu-util software can be found in the + releases folder. + The current release is 0.8. +

    +

    + We offer binaries for Microsoft Windows and some other platforms. + dfu-util uses libusb 1.0 to access your device, so + on Windows you have to register the device with the WinUSB driver + (alternatively libusb-win32 or libusbK), please see the libusbx wiki + for more details. +

    +

    + Mac OS X users can also get dfu-util from Homebrew with "brew install dfu-util" or from MacPorts. +

    +

    + Most Linux distributions ship dfu-util in binary packages for those + who do not want to compile dfu-util from source. + On Debian, Ubuntu, Fedora and Gentoo you can install it through the + normal software package tools. For other distributions +(namely OpenSuSe, Mandriva, and CentOS) Holger Freyther was kind enough to +provide binary packages through the Open Build Service. +

    +

    Development

    +

    + Development happens in a GIT repository. Browse it via the web +interface or clone it with: +

    +
    +	git clone git://gitorious.org/dfu-util/dfu-util.git
    +	
    +

    + See our build instructions for how to + build the source on different platforms. +

    +

    License

    +

    + This software is licensed under the GPL version 2. +

    +

    Contact

    +

    + If you have questions about the development or use of dfu-util please + send an e-mail to our dedicated +mailing list for dfu-util. +

    +

    People

    +

    + dfu-util was originally written by + Harald Welte partially based on code from + dfu-programmer 0.4 and is currently maintained by Stefan Schmidt and + Tormod Volden. +

    + +
    + + diff --git a/tools/src/dfu-util/www/simple.css b/tools/src/dfu-util/www/simple.css new file mode 100755 index 0000000..10b7c1d --- /dev/null +++ b/tools/src/dfu-util/www/simple.css @@ -0,0 +1,56 @@ +body { + margin: 10px; + font-size: 0.82em; + background-color: #EEE; +} + +h1 { + clear: both; + padding: 0 0 12px 0; + margin: 0; + font-size: 2em; + font-weight: bold; +} + +h2 { + clear: both; + margin: 0; + font-size: 1.5em; + font-weight: normal; +} + +h3 { + clear: both; + margin: 15px 0 0 0; + font-size: 1.0em; + font-weight: bold; +} + +p { + line-height: 20px; + padding: 8px 0 8px 0; + margin: 0; + font-size: 1.1em; +} + +pre { + white-space: pre-wrap; + background-color: #CCC; + padding: 3px; +} + +a:hover { + background-color: #DDD; +} + +#middlebox { + width: 600px; + margin: 0px auto; + text-align: left; +} + +#footer { + height: 100px; + padding: 28px 3px 0 0; + margin: 20px 0 20px 0; +} From ce70ae4fcee762c94c6e80c3d63481f739897ff6 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Mon, 20 Jul 2015 06:38:38 +1000 Subject: [PATCH 77/96] Added source to maple_loader.jar --- tools/src/maple_loader/README.md | 5 + tools/src/maple_loader/build.xml | 73 + .../maple_loader/build/built-jar.properties | 4 + .../build/classes/CliTemplate/CliMain.class | Bin 0 -> 1753 bytes .../classes/CliTemplate/DFUUploader.class | Bin 0 -> 7476 bytes .../classes/CliTemplate/ExecCommand.class | Bin 0 -> 3243 bytes .../build/classes/processing/app/Base.class | Bin 0 -> 639 bytes .../classes/processing/app/Preferences.class | Bin 0 -> 2215 bytes .../build/classes/processing/app/Serial.class | Bin 0 -> 7732 bytes .../processing/app/SerialException.class | Bin 0 -> 735 bytes .../app/debug/MessageConsumer.class | Bin 0 -> 174 bytes .../processing/app/debug/MessageSiphon.class | Bin 0 -> 2325 bytes .../app/debug/RunnerException.class | Bin 0 -> 2509 bytes .../processing/app/helpers/ProcessUtils.class | Bin 0 -> 1399 bytes tools/src/maple_loader/dist/README.TXT | 32 + tools/src/maple_loader/dist/lib/jssc.jar | Bin 0 -> 152418 bytes tools/src/maple_loader/dist/maple_loader.jar | Bin 0 -> 32791 bytes tools/src/maple_loader/jars/jssc.jar | Bin 0 -> 152418 bytes tools/src/maple_loader/manifest.mf | 3 + .../src/maple_loader/nbproject/build-impl.xml | 1413 +++++++++++++++++ .../nbproject/genfiles.properties | 8 + .../nbproject/private/config.properties | 0 .../nbproject/private/private.properties | 6 + .../nbproject/private/private.xml | 10 + .../maple_loader/nbproject/project.properties | 79 + tools/src/maple_loader/nbproject/project.xml | 15 + .../maple_loader/src/CliTemplate/CliMain.java | 60 + .../src/CliTemplate/DFUUploader.java | 345 ++++ .../src/CliTemplate/ExecCommand.java | 119 ++ .../maple_loader/src/processing/app/Base.java | 53 + .../src/processing/app/Preferences.java | 157 ++ .../src/processing/app/Serial.java | 527 ++++++ .../src/processing/app/SerialException.java | 39 + .../processing/app/debug/MessageConsumer.java | 42 + .../processing/app/debug/MessageSiphon.java | 104 ++ .../processing/app/debug/RunnerException.java | 161 ++ .../processing/app/helpers/ProcessUtils.java | 32 + 37 files changed, 3287 insertions(+) create mode 100644 tools/src/maple_loader/README.md create mode 100644 tools/src/maple_loader/build.xml create mode 100644 tools/src/maple_loader/build/built-jar.properties create mode 100644 tools/src/maple_loader/build/classes/CliTemplate/CliMain.class create mode 100644 tools/src/maple_loader/build/classes/CliTemplate/DFUUploader.class create mode 100644 tools/src/maple_loader/build/classes/CliTemplate/ExecCommand.class create mode 100644 tools/src/maple_loader/build/classes/processing/app/Base.class create mode 100644 tools/src/maple_loader/build/classes/processing/app/Preferences.class create mode 100644 tools/src/maple_loader/build/classes/processing/app/Serial.class create mode 100644 tools/src/maple_loader/build/classes/processing/app/SerialException.class create mode 100644 tools/src/maple_loader/build/classes/processing/app/debug/MessageConsumer.class create mode 100644 tools/src/maple_loader/build/classes/processing/app/debug/MessageSiphon.class create mode 100644 tools/src/maple_loader/build/classes/processing/app/debug/RunnerException.class create mode 100644 tools/src/maple_loader/build/classes/processing/app/helpers/ProcessUtils.class create mode 100644 tools/src/maple_loader/dist/README.TXT create mode 100644 tools/src/maple_loader/dist/lib/jssc.jar create mode 100644 tools/src/maple_loader/dist/maple_loader.jar create mode 100644 tools/src/maple_loader/jars/jssc.jar create mode 100644 tools/src/maple_loader/manifest.mf create mode 100644 tools/src/maple_loader/nbproject/build-impl.xml create mode 100644 tools/src/maple_loader/nbproject/genfiles.properties create mode 100644 tools/src/maple_loader/nbproject/private/config.properties create mode 100644 tools/src/maple_loader/nbproject/private/private.properties create mode 100644 tools/src/maple_loader/nbproject/private/private.xml create mode 100644 tools/src/maple_loader/nbproject/project.properties create mode 100644 tools/src/maple_loader/nbproject/project.xml create mode 100644 tools/src/maple_loader/src/CliTemplate/CliMain.java create mode 100644 tools/src/maple_loader/src/CliTemplate/DFUUploader.java create mode 100644 tools/src/maple_loader/src/CliTemplate/ExecCommand.java create mode 100644 tools/src/maple_loader/src/processing/app/Base.java create mode 100644 tools/src/maple_loader/src/processing/app/Preferences.java create mode 100644 tools/src/maple_loader/src/processing/app/Serial.java create mode 100644 tools/src/maple_loader/src/processing/app/SerialException.java create mode 100644 tools/src/maple_loader/src/processing/app/debug/MessageConsumer.java create mode 100644 tools/src/maple_loader/src/processing/app/debug/MessageSiphon.java create mode 100644 tools/src/maple_loader/src/processing/app/debug/RunnerException.java create mode 100644 tools/src/maple_loader/src/processing/app/helpers/ProcessUtils.java diff --git a/tools/src/maple_loader/README.md b/tools/src/maple_loader/README.md new file mode 100644 index 0000000..c6c9379 --- /dev/null +++ b/tools/src/maple_loader/README.md @@ -0,0 +1,5 @@ +These files build the maple_loader.jar file used on Windows to reset the Sketch via USB Serial, so that the bootloader will run in dfu upload mode, ready for a new sketch to be uploaded + +The files were written by @bobC (github) and have been slightly modified by me (Roger Clark), so that dfu-util no longer attempts to reset the board after upload. +This change to dfu-util's reset command line argument, was required because dfu-util was showing errors on some Windows systems, because the bootloader had reset its self after upload, +before dfu-util had chance to tell it to reset. \ No newline at end of file diff --git a/tools/src/maple_loader/build.xml b/tools/src/maple_loader/build.xml new file mode 100644 index 0000000..63ae9c2 --- /dev/null +++ b/tools/src/maple_loader/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project maple_loader. + + + diff --git a/tools/src/maple_loader/build/built-jar.properties b/tools/src/maple_loader/build/built-jar.properties new file mode 100644 index 0000000..94002ae --- /dev/null +++ b/tools/src/maple_loader/build/built-jar.properties @@ -0,0 +1,4 @@ +#Mon, 20 Jul 2015 11:21:26 +1000 + + +C\:\\Users\\rclark\\Desktop\\maple-asp-master\\installer\\maple_loader= diff --git a/tools/src/maple_loader/build/classes/CliTemplate/CliMain.class b/tools/src/maple_loader/build/classes/CliTemplate/CliMain.class new file mode 100644 index 0000000000000000000000000000000000000000..37ee63000b20df7528829288b7f0fbeb28eb3b98 GIT binary patch literal 1753 zcmZ`(?^7F96g^8e*(Ke!Bot_BEkSJ?Qc5V;R-jfb6dMgcG>{5a@g;erOE=l=X2Z~N zI-?()v44qQZ9mYCj{X7uQR;cgB4LP`%)9&UJMY|k&%L{U{r%gY0A}FDk-}_0<}h#K zP8=WNu8EK0_!ysNj62~BB)v{_}O_60{U^nDSt6rA=x+pvJBnxgu zI3?lRY9BiF;IZA*FjQD@>~&f991+MIpO=N*m?v4CR>N@SQDIl?iJT)EwOldq?M7{0 z1=Gko)OB=!zaqWBcH4J_UnBKkkE}dUI6;1gw$&`>7YQ%hjU`)E zajLr0+VC7#RHd&Wbu912rH#WQ=6<>uh{}^?;k8ROkTtMLX(_0Nc+qY771^P*!g?oF zA{H)T)WDX7NBCMpqAol~Zg=9P_ogOq82HA*x7cPXO-U`CNso0H_|AernPCsT6gqfD ziB{N*&{q|KDBD5PLIqWlAG&3^RonI{{SmYoxSoP)usq+b`J%ok9YH>;)vkUrROWE2 z1fx)i@Km${ciWdu8CZ~@l4rt$J?WR-CIgLhcf3nE3pG4u+m5>OUsEmEN|O=MNK4;$ z{j^)Dw0vJy$I{IU`M8_2<0+8CF&@gCoHaGY7pQPWHk+L4obWud${p#; z27L@k4K-ZtakV#DocMerkTo@*!#%F$RY--p=emv*?bquh)s{kq%`Mr24f>z_x0oWk zLCTs8mRW_UvAgFo<0m=Ux^{yCxgX?0=#uN#1q+Prgb%YlQtp0*JB^+1Ngr)XjWN8< zkD&VXK~wJ&*EDxIT8%cEeGTnp`*@6NtnD1eJAAe}0KAL$xa-GdT%jioXby1(eJ`?+ z=|WbYUd~3RSF*9`IsFy-l92=G$>_B=h$W4rsZ9R>O+0xjarp;jEnTgr6Z)^pp1H0d zXD8G;z>`EW8R7an1~*^h+*~vjP3Z?1diV=2&c$9~Bza!{1F6kODt3Si#W#5C02f~} zu__!6^)Mo=87N_h>m}%{*ksZcy$P0*Vi}_>IX literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/build/classes/CliTemplate/DFUUploader.class b/tools/src/maple_loader/build/classes/CliTemplate/DFUUploader.class new file mode 100644 index 0000000000000000000000000000000000000000..77087b052fbd03f77b9e1417f2754196beaf1844 GIT binary patch literal 7476 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 literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/build/classes/CliTemplate/ExecCommand.class b/tools/src/maple_loader/build/classes/CliTemplate/ExecCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..ad95f79845d3d1b0c1d2245d06800c06c37e8c08 GIT binary patch literal 3243 zcma)8TW}NS75;u{rC%0{F$RGJfhdV%e8DI8>iD5`@f$5 zobR0TowIuL-k)v*cpTT`Xu((=I*^sf#Sz9>9Ca|&Fun>Cm{fx$aYoHgOYE&f9t8WB885cO{+|kW;2R=9EkUaYA6t zxaF3-gRbkihn%vV6KE)zS;x-R9@UxCS+nR_jxEqKP;{NFSt?ofMA|48(>ZgjJdr+9 zwr$frxFEMnAiCSKEw5J~+}d_bK6Ts5zpt3hVZm@qR|ani9V8zv@!I)W%#c?OJOT$+=a;zC}UmqFTH zV?2m#49>}jGqW>Tz-F`Y~^#NtK+Bm8Ih%QT*6BdKiBapPV4xEf|14!9gks$#A`a{ z@XG~EOL@W!{XfN|<5vp$<4XIl@r1y`E52HiR*4sN{06^O&o1luom%}~A^U^!dF!H2 zD^XI%PIT$`gmS;(++*icuIZIs+sviT?L5CEVnbtR%&aGIMaNbAQQ~zS*HBSGI4w|b zPFr3o%ewDLQ42%)KGpnwaR@x>bL>*NV3MQti;1n4$l66m0`9Y3S?L9V^{s99bBPti zYM$^W{kFu44jVbv=n~phecIK=?x>ZlXGk{bIX;gBT9@>f1N} z$}HW*mNCrshI|tYLYF9FnPqJE{mK z6v5<_kuRG=8sTcI_HMSA5xSb;dhj19djx zgIwuVNxpfKJAoeTq6D>sPebyj48*Bh2#;QeHrR2v^LDou?v5lP3GEWLbtWQRJ<(*e zf=G3W&O+awjNXI{;rNA!n4AB{_U$(j6Lz106kD zQoG$933o>m(M04D+LKx$+SMbkLcfL8v|OK*6|8A&;84NZ3K}m&srv7{uV7t!_!`!$ zA<=OI8+x=kZ0?ENLepq6QbF=MHdUc*PDbzC!ULm8t%5BK%T^^+-9G4VqguC2$XRSv z?^4RCl#+d@H{31f=Ks|bo16b95kK-*#ME?Wi}orWyo%<=MqhnX3br`OQNu>~<~ z!&bE7QSLj@&bw{cO->APH$n~^B_ocrNuMSU&XNPqbG}F>yu$2WVpiuUeHr^{VGsLq zFEg+gf5ATd4SjeEAI97GDBeLo-o?l9Zw%lr25}EVLSR_bVN^8Wgh=3&*u*y84MX%` zOk|K1Pa!8xV%+D@n^;ebO|-NJQ8KKHcJ`8!^~AT2wl%CJmk)3iA;wL#yocN}=!=rm zsAZ=w7lFkWN-j#AF{10@>MGfK5Qh*EQAXq=#2X`m>TOK%GvKaT^-~|apcui&=nq*a zBJ^oLv0UaiZxDxR?JYdV=nWIg+nC~)ZJ0LRK?z4_TOvanswS#BMyTT`PmW;CJe`P2 z9FtfjahxMVgyy@5G|gijx0-$0j#Q*>R literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/build/classes/processing/app/Base.class b/tools/src/maple_loader/build/classes/processing/app/Base.class new file mode 100644 index 0000000000000000000000000000000000000000..4aa0bde02049fbb6c4e035d952edc3f002cba1e1 GIT binary patch literal 639 zcmaKp%TB^T6o&tSLZKAVg7^Ck!G)N(aDg#K6B84>Bp6NH4Q13pXq&cpc^a2)+_+KW z!Uyo7jHgH%(vSU{TL#iY#anNj3gnP^@bs|Q|HhKMoyE2H|Q1LIN$1qrOT-y|$C#{PD zcbvjD_e7B)F1=G}RqY$fA^jOcvg~v7YM(o8fhs+!)VyWT%68K=#jXsB#RI`gjbC#e zacB&x?X6h6Aymxhn8h5Cwpqozjs+|-MB1iwk7gM916!fasl&rcO_+WcD&Kj&XfPx$ zgn#7Pj&S`uhHS3%^Q!E-G+r_P8+DsnY1AJLE^ZIc>Fe~e?9mh|{hDBfK@&rxJwZ`{ zPDW>B`33BWE+Oc&M_X_PNxJLb3Ft$LqB#07KqPp)PT9fA7@=2$4doe;&^=V;0ZRCh ec&BR#29XFt##T^2{g)*ApJcUD!jNgz82kc&eSc^G literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/build/classes/processing/app/Preferences.class b/tools/src/maple_loader/build/classes/processing/app/Preferences.class new file mode 100644 index 0000000000000000000000000000000000000000..89cf0100455af1f41500150e545c8bbd12583674 GIT binary patch literal 2215 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 L#S!xqDulu}Wzd50 literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/build/classes/processing/app/debug/MessageConsumer.class b/tools/src/maple_loader/build/classes/processing/app/debug/MessageConsumer.class new file mode 100644 index 0000000000000000000000000000000000000000..37250e7704487822639cf03f4e4a333da994be50 GIT binary patch literal 174 zcmX^0Z`VEs1_omWPId-%b_Nbc2KL<4;^M^gR7M6-4WF#UvPAuy#JqI<;F6-uymV{L zFh&Nh;QZ2}36TD<=a zee$u-T}#4J*3vf~eDmkHmbdTB3`x3-T|Q)=efH(-y}z^fnf&_KPd@_~$Jc3`K|#YE z4ezEAM=^~U<~s2b<`r2`3FpOF@DY|1aeE`vQp>rz{0}ik26Y+<5P_3@WA4aH*G_Nr)yS)eXYYsjn$=fJOWF4tYZhC37l!#w}YMI5E!%pT%fP% z+dxal=PHf9X`?)_MwAB1vTAyk>pLES*6{_t)bW){_Z9doX zp*cQw*xW5Rg|$DEB4^Hd92&M1T~J--)m&ee8#S=#_5-Loy058<-UTH+9!Y~sI?QMy zn1HJE?|PQwSw7)TWD82zQS}XvWu(;85YEQY?D>`vXiP_vZ;Q0~d|YUa5UKy|5#2V& zD&;$eAPhYZ*KvUzx$BPrxE*8^HuS-Abd74{xS?(;X{fBvh&yULy=i|kxTlNf7 z;w+!=GZ1(g31n24^DB^1jm|Zu+BsO+^IQ|O%i=s~j=OJ>nhpw19x}OH;50efeMVe!jVSW-ua2gkw zO`dcdm+%Iz;Y~`x9D}Hok8;QOw0WI5DNf}bBYzQNVV2?>S|_O6VZ79L80C_z<4CD^ zfI;%wK6*-f=pC-(g-nK|j=mppG=?XC|CSTX_X(zo5p(&F87o^tr z9?2)rD19-q?V1mm3%@)Ksv5%;9Ag$^m_dKA7Fna(JET`I5v((~5v)b52P@x^V2u+I z;12HvxQ;$d({BZrQKIK8eOE9=eg?Pczk&k!BCY2zk3}rN#66z3f(qph*T;Ae;5fm_32#8&VW5Z_DWZjif-x5zCr=eMcl9{`-9>GD2Q?oaJ}>;w=qVZ)>>5-{ha@ zC)IHMcf={5(&)lhg-58CS>Z0m^@zIs;_yKL*=f}RVTnhAt9^(L80hAo19jc~p+^+7 zg8`@6lwrath(FM+v2>NRYR{Ye%`#rtqAGQjaxxcZ8#Y@_{ZRoV0mQotV5n6@E2k~%3N36at+NEB6-iZpQsd%&@c zA5A4Tuz*j%h6Rru8x|m8Sz^Hl;6tJQ&z#FqWkoT zMK-PSux61%52o=};bEPJ4IUoy@DZt?IbKWPfebnC6t{hn9-@}T2Yu_~Sl zGS`A;(5nc_7S3xI4+ZI)kPtM>f{*(rM}FtPJ8DRlR@G}9dYyph>Z9JP2VFsL?zKCu zDyTtN_S)_8v47OBl|St_n|^2OMb&Tjf>smk3khDIvfC>O3%k1#=<|Tx>kS#<)kHgK zXjWC=*OG0dpELW%Wb8=5OE#92@hTEq^Lvj*RhcgoV`foZtZvN4!3NHxs#B^^M5P>9 z#6Ic;$!!E-EuFg8jjdt}>NO(^_{eLkgxg9tthcQM)l3P5vl+EEYKIxMb2NuOg3i=~ zV?W*`vu(6lFaE{aZ}mG>e_NJeexjyJ+@KC+DaXSt9#$Nhp^QVbbjhJtc(}~N9L@9U zjzjO$ilE#7r(*=ojSoOn4?$!Z7 z;WTsKk=&3Rg9MWTqKiRx`z2eXhyHnb=qBD$(nntT@ZiJ1n(dZyi&;I%$qF{UC!H*ZrjZjn!nbMU#8yrqi8@^Z z7ANbLa`yv3Ot{OtLrS@&0qJgTK!&?GAk)q21C%6d3}|Yc!W&3B(JFM-5bOg~yMk1$ zgJ%Pt9!joCs2OqPBd&bJm5;dciVGAn>4qeHT@mhpkduXk3~Aa0QVb>|>$in8Y$GW< z(s|e;cI4cq+w=y+aADG0O0+EJXju0z(*J;Z*ls316FrtPj(j(ijG#i)trbON%6yG8 z6E^EUU=Cs+W&~nJ&00h|hn*h>F@B!_d6EcHqPNxNG01h)Y!c)dKt8(wXIWW>;Zp|t)R=_w{k$&(nS<|sy#QGvY!8-p}wg9Yy*v>)mJ{n9+<-P@KEO7OK70uz15(}q literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/build/classes/processing/app/helpers/ProcessUtils.class b/tools/src/maple_loader/build/classes/processing/app/helpers/ProcessUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..27eca62622c61bc21ae557714ca4fa2d4c1eb22b GIT binary patch literal 1399 zcmah}Sy$6Q7`@XLQbO2@A}XTd)|Mr1C|W=TH?$PBD#zs|q@zUJBqpiLyT8ImUwqXU z+>ZPJe~HJR;5jZgC15~3=A6vTcjucs_gj+BKRzr2ID)Gxx-g_-7$Yil91Mp;3J#}n zB#omgnlP&1n2Hu04~MZdPNZ?N6$Olk_Jo2-1*Zg>$1U3mCIyn&+)aVhv{R7+9YxEQ zrFv~ade@DGDv?alF^%d?!?Qv=0#m`F^CTYS6zNcsy3f#h~aIPY8?ejDTV~wVGj91iJrnHr%gOLdgON zcR^s=pJY>Yt6GsBIg`?U97foXP^UC~)^LgUtdH=SyBg)_de`w7c_jW%WRiq!<-jl> zlDv^E1^oi*xu>Rd1Iw{}1*d73ow{er^H!MRu6VjeLU|f8=vHt>!xW|!oYim+=QV7_ zHi6EKDP*Pw82{Y?4Hs}xp!c^!L>%QHWS!A)371*^>01}(XG)~Aor>e%qmUrTHOw;8oku}GFUSD$z#b&AmmXn=E66?~`-!w6+5R1hf&=0k Rugelj(J99_&vgQWzW|+SRY?E< literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/dist/README.TXT b/tools/src/maple_loader/dist/README.TXT new file mode 100644 index 0000000..795e0cf --- /dev/null +++ b/tools/src/maple_loader/dist/README.TXT @@ -0,0 +1,32 @@ +======================== +BUILD OUTPUT DESCRIPTION +======================== + +When you build an Java application project that has a main class, the IDE +automatically copies all of the JAR +files on the projects classpath to your projects dist/lib folder. The IDE +also adds each of the JAR files to the Class-Path element in the application +JAR files manifest file (MANIFEST.MF). + +To run the project from the command line, go to the dist folder and +type the following: + +java -jar "maple_loader.jar" + +To distribute this project, zip up the dist folder (including the lib folder) +and distribute the ZIP file. + +Notes: + +* If two JAR files on the project classpath have the same name, only the first +JAR file is copied to the lib folder. +* Only JAR files are copied to the lib folder. +If the classpath contains other types of files or folders, these files (folders) +are not copied. +* If a library on the projects classpath also has a Class-Path element +specified in the manifest,the content of the Class-Path element has to be on +the projects runtime path. +* To set a main class in a standard Java project, right-click the project node +in the Projects window and choose Properties. Then click Run and enter the +class name in the Main Class field. Alternatively, you can manually type the +class name in the manifest Main-Class element. diff --git a/tools/src/maple_loader/dist/lib/jssc.jar b/tools/src/maple_loader/dist/lib/jssc.jar new file mode 100644 index 0000000000000000000000000000000000000000..eb74f154a01c8c16712233cca36b65120ea47986 GIT binary patch literal 152418 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 @v>QJza{i z9+?V`_nojqxJp>3y-v8&YTelt zhE&r2BXt@UMxMnbZqC_j5#~H48{9O30Qw?gOwPvL?bDHQ>5Mi5S17P4t{MshaIpj0v6B5&f;p zqzz`NNbbitZ>d5DLH2BCfHa= zvqtjtn7zP0B_CH_3*JF@1Qn)?KP<2CD>Bm;o&O*%h=8SzdHHXGC|qU!@XjBWUb` zG2G>^!d_vjfPMs0WgdH6# zE_cT^n&OS@Mq65A*EN3hg;U|w>#?bucyok-U^wt*?LVGkCYYE+Uk@ej(wZvCbl`)% zxis#EBQV1vh=A55c*ZDyb^_OITI@PvufO$8u1sq-Qf$f2rXdUML}7kgW8DHLeh_a2 z6d@s?;nXvQPOOooxqubwoQT7C^PC`mMb`cNR))bCIU6L$)t@WJHU96GKT2aZ)&rdJ z=+TA_y}Aw$vdcHLQ2V@tr-8o`@6qs=-`ORN#6-IKIJ+yk$ULEWFRpw+J6;M|8o2@6 zoZN}!fxsh?Wf4)>k!5@0s@MqCDY*gNcp$X5Ai1?UF$yjbounMGYn@@W8 zz^*5VD<(aiZF~DR0SY!Rdua5x@tDMuky-yPF@D=<$CIB9DKra2VFEUrnAMLlV}@H{ z!LSS#SRNW65PH6{TRDcl7BX4@a+hKvJcD%d8$|T|bS?9+k#A7-pKmN{j~}8hslwZs z{xqInogpmQNXxu{cN1#MFjpaF|MzL?3zbHA{f2XX;NY8yuPIU(7r^p%i1Kh0KM0sB zEa-m8pUZS1bVh6`aYq>0ehTAIB^=IxZdz+H;14u+C3-X+1zgdrf8f(Pud6=AV80{apIoUvA%YBYK;bX}B4Av;y`1*Tgc1TYH3P<|F2t+2pZU+L$NGSu zPe5*#5JKG^y5`2oqbLS?G_t&3>pb!?_)9;HG772mpuENJnxg6H5!5#nJH|?poqzge zz;_30g!;#{#36k1>|0FL9$IZOztS?zm?B7?kfFT7dJ7l3#+~U1DH{)jQ}FJ>_JTAt zKha8w`cWjR)Lj=0eV4r3a(B|psGymc`Plbn zVDDj>=iCsXbScDq5E?E!XbnUOS_=Jq5j+Nm`o3)C$X80iIrnf3iFF#9oTH~1uTkdb zXdHE`gOC)w$n54rQlgN?isi`)9?$oL8W$nyrV8%ePZQzveG~NE$9Pfe8(CJL0j%^X z$yK^2YBF|&vm;brTgrZF0?=;X@F7L~XWfWMg`wl%`my~D=to2`9{@?QSq9yxQ?lGI2pxn902oNUD+?U3wp-u__N2Yi8ZRa90bZRM4rK=e< z-XZV!@8a7y4>NQf%r|hc-I=QWLXD+4&8wR&L2R z5^Hr7m89IV3-x+2)d3k9dk<#PMD$CXZg~nBa!;C+;i#G1UdSo*?!Dm{02X#@_t;B%faeWBweS0MnT*zj0r9ZkcJzxpE-rxW@nM_qJ0@UD$&Xw>RQ-M-o^} z?Zrh&%N@bQP4%-hi#mPKf7eA*RTqjF_%=Jdzj)is#`ny{>0D zTU`Z3a4xL+!e+v~ccb$=-m-iu#m#VJmkLUopuAZzj7v62X}q&m zcO|+m+cpJAW?Q#6EcqCiKw`~;adBlmTX;9#apqee#?Jw-t-8{djdg@X&XIL$OCMo$ zgrv_EbUfyGMa}_pKpLIT+~q8*cf@!2L4qD+huS`yo?xz+7q^BwyM+x8la0cbbYq_v zD7zjM8xBuBhhs87VTY``uiJh#%b(>9O%lKGpzbMQKw-8aC=xR-qWTs&+5geas*vZ2eCdYNoXc?XWg`rdas zZLSSFIpq-$8{TQ^f3%O?u{pns!uZqeGyR!#m_7tRpr@``=1k_z9KOtf?4U5q$wUKiXa15=5Oj#FiP0}hkU)*97^3A2HX$krOv2NjZqy*ZhGs;)cNcaGpJ ztL$X2UAPgS=M0*?2|1p?$$bw9*2TUu;+{5bHs5=G<|ZNpw$!7LhiGTN6ZQA7g3!-} z25&B||3%C5ZW|Wvd$9SkB|8{c~hGmo*1ZkD)oc9u1dGKL4xyUttfE`d)hAgp=&xvcUlg4M>1^X->gJLYAj5hU z7AT}e=W{rVeuN0}hMj&ha7Ye-XPsjB=v_=Jr&w%vj-p$K$CF*T+t3dA5Z)r)$?Hdj zdH-j6`mVb7#>j^TBDz2vUG&uLl2^^l_x+q-cR2Q0+~}Rmg>bM5xv)f_e_!vu5tXzq z8swX;?kZ@1>l*cTC@VM4zPK6RmOyfz6|R9|T>{|#N_-@n)e!4A!?n>ML-fp|_CybY zikb2hE>5+xL(N_?a_QYzC9X}>&~!|yC8XT?ZhQN7jy<0(aiiv}(#1r~<*XvsfFhFI z1E8J<%zbjoehC+a-FZw+*Cm0yfe<@uq4z|Y5)-L}I$@5=XuYRtoBdJ6<#t61``G4KM zG5q?4iW*}IS!|1{5~L~ktx=ncm8SVap8vj;;WgjDyaTEaxD;&dcDeT5 zYI~l}@hb8HxGpbg(WmJlpv@qH*ybz2glM_ukuA(+*N)dn-FZ^syCAmd{$=Y2tIz-R z+xN202+UwzNji#5s-%awGxJCOAWRfi%&=viS?nIjweA6{dr%lY`X1zd3~?yqHLWY& zb8N}NiO0>adlZzxbeKD`Y5^U34EY@NiDOjJ0oIBTU=JY(bT{$g2lnOnZXDlV7nnP5tw^lxuK-V63ha1^ zxS?NriE&Z@CA<|p0q7EtXxcIX5tTq*BDUCZ`=~!AtKiR<1W!yz`_xk==}ssxjDZF0 z4zatd6zmdnia?cK{Xo`0SH))38}r^@(g6~C93>yuFq@EC2(5~Dv|#G2`bdrtzsS1? zcOVuaIKj@q9s^-iv)IUUt@qaCPJJWCxQ_po=RuG92k)UYezi33>XCHvoo*{9_aEn@rv8(;_U6YbT$Xcj^qIazqP!Bw zo&O+OC&XJUQUkc7uciwd4%aMXk{w3=oqW&(;R1a!{s`S09lrNc?T&s<-`}rY{~I3x zkE0-USNdR3>OJBc^d)Ntf8bU1>B?XEb5bhY^5-N^hq6T|TjG;6+8_1-JDZ01t;2S_ zlt%!q&!|eA`Pi5eEAUE}@`&(JGn=igi_eAi_SZHdUu8aMV<-;P1}T<~W&(mhjC7 zZU|rNQy+oN;hxAlJ5P(T`+`5HB!j~Lt$z}nI6<+8ODyJv1nZaFQKV>59zFVshhZ#_ zJ+1^2{sg;BeC*2C%s9IiErduu@Xz?vpLIX!pp={)(7x<~^G+`R;6|mO^u|PN!il;Y zzfGIU)(haU3NQCfrpbH2gZO&cpBYs^p;6kNc%T^ATS&@hPSqC^VlG`IPkcyUrMp-w zn==cji{g#{^3kg?U&)Bjjp7ntK`>>_LEn54x7(xAAUL;4ofQ;=2et56_YfTk1cHu+PdDl zdQ^JLwJ;>#xwN~X4Z7@JCpJ5KatHD&8`f3Q?%fMQjE(bY^8ah6?A&VDavAW}^^=iz zu#$A6E)y5+dMscBxK>0UdQca#d$zn5YQ`5f7YwZ}E}q%nHoEFDt>~|*ZQS)fHq9>1 z>ut?nSlikei#RZ&Uw#QLN;HEvv@%fpk1wQ&Mkis;;iiezf=M{)?GPK9wI+my>6*6& zTOAG^Ol7^^T?J+FUdt;S8tThm`H2=(!>Zcq#}AGSTw+k$zT}u1g-ZomO4|AjZ1}`o zik9Nc=jub7)$->#xg~LDyq4x@Sr@*Y3y*|~ZseG@=kQK>_pbeBxx%w(w=gZh(X+!v z0q#xd2|j&lqE*bRt%Tc^C60xMn0Db=EW5BwQ{^M|)@Tn8m{fyNjEi<-NIgFlz+n#F z+%~UO2W`H1r8~!9b9D`zCq%;H)}q#>-pcyH!{QRBZQ0;Saa8SmY{S%o+DhkiRoGk4 zSDZAn7KMyhZO(LSp{5UrqiS|uS$k=9vA=bGHBL&n?e^eXsGo@7QTgBSxrO$!yW#fC z{KZDbUk>y@WCvjD~qeAuMdf4NF@=ALeCFVD`{wvj{`T5-{ z4^w2tUE71-{cAO75V#xEbAdPn92V@If|vJPNhmC}mA}%1i3f{pgvB+JqZjX&(F4dE z2kuWE^zyQF*uCXfzN5L~uDke}l zHVW8$g4w}AuXrZ|2}@+oPPX|qg`hzMa(5{`dZ*CAb8>fSJu0W@K>}1Ji01rc*8a)@ zvVNs$m40k-IOA`7lrhhOe2$DTE@0Q2Uf7c){YtaU#?+VJc1?!kehdpMerFuvgEywW zK{xK)k3kLVS40b&AO5yaaEEA2&7**QZDk23mbm}BAmaXaIvb}5_VDX(<}OIF8h-2z znbyGiMa7d?vd3U2!Zhz7h41evaxuj>ox*94s_uK_rDLT2CX``3@`QV(LXq#;C0rIl z8PxUZ3n>rD)~I6HCCSV}ZDNJ-3n_as6jz0S>(APja?9%W z;_zaVr`YlWEMuL=2z{5ha!b1py|OI=lzi=*2dDROsbBRU!$ZlyEG)n{Q6$GOQAriY zQ@=oM!ES4oD$n@5Cz9fnGCWFhgixsyrGErzI8&)KZV*lS^u%HVw7}49Xd&N}7cS`o zddEH&0!*3Og=VtNMvn!`k)9ZOtP?wKkM9m@GHWkJV$`p}o;cFfrzGPE&j+dRSt!7W%Kz!WSY(B3WV_Q78C>@7c<$E_M59q7uihn$SH&l%W*d ztIPrW=sBNM*M<|@`{?p(2VFL6HkgIf)0DC+{{+|~3VCu|tIWScpc52P9M_sZwOxSW zoD#n)DYe=kyqvEr)bg^hS?Kd*>s2Tm;BGOfP~9bzd{1bsMB|*(TjR*u7%=nk?M}hI zKP0+fH&pnA5_>vLx>~=3bZkvnz+21`**CRDJ|&I#Wj?i5GI2~!E0&j`w_lvmMJz(K zu~@$uLB!;`7-}?*9Fq5;w9_$h+V4)~WUO!XLMfe+rMKVdQN;VBwK+IbEH6jT>Kr`X z{5!`oXo!ITEsZjBW1Y%Yp1sArvW|0Z6HLL_p|EYJhn`-6z2z0v*rl*-$)SDy>>E_O zOJdy>wDr~it1=-)tO0o;N zzwpl&6dgHDZHYvA%>NMb7NPL&b6EvP&3@DD!_(SJhy56(!d2H}oZp9LjJu}G z-CGnp<)-Nz#~Efd-t@4mRwf0uCZSd)W+wH#wn3`o_XqR`PA@5mhA*mGH&T%?3sjHc z!)718iA09niIEFiq0uXmuW{QkYl3=4LD11pbG|B=7ezEOJ-Brt>;(upWMdH1s`k4- z^tdAh1P8Ec5g{wQfNNr zd~#c>pU>#ViXwP@O)USh9bPiZ6TP_j=;l=qplbkjOukKIYyvhVaE z)PCp8{?U6Hsc$^t6g-Zu!}E-6KzN9J;`|46o+}WHQW21AX^K=~m+0+2);FeAyOFbI zy!T!Rc%q>6ef@DZWK;s^`X;&?_;py6!$o`h z$`RB%PV}&qAkEsVV^K)vCxBKKP3bkv9J>P&`j3WW*M$*I4)|^V;LGFfcg&?4A?Z>3 zp3z602o)K?RvXU2@Rl8cEtTSM*F`3)xjW7T3Q1sCk8BFCkCvy7aAY0*`^5-inALNi zY7%zAu&$BFoG56E;#g6cQZH;9XJ4V6YWnH2RoO<%zQQ|oIIriHIZ@rF!>$>AwEnk^ z)24=T>TpG`E0eCO4L#~o&gJs25Fl{fs|QFN>zOA1aHY^Cb2o&NL$$^5%SN$FC%u3r zk}#{wR__xB$$AYV=COA9eohH(6@WZn*4=8EphNmL614+n$7=yx7}x}_0*aq4F(xAT zqu5AlK(_!P5`P4IDE4z~p9qPD<*b8KzM6Um_~%WLE(>1_{D8A|30a~Ge-7xsnGjho z(%k~ucYJ1TEk`}Q@NXM~qhu<}g+F|V}G2I3|ID|phqigAj#_xLU8b39I~O#wCI z0Jcd07_u{0Il-KzA$|b~9b26aX=Ea;m)2V{4_!E$14Sv4*T~+G%68J}=-ZJTe5(Ze z;j@crq$c&}N*fjdzT&lWu893-DmVGta0TS`qC>qQ$l;wjIQk3ofT12bSshw^tNZ$`iv5qf0jkUP zCkNx)<$ejXBJBtlzcf{pzVNyJXdC#qVSHK}O!xKE#F2(|A>m?|=2X+v&WCFXs z|BO2+Cc66clB2Q+6a#v2CO0`hM5wzEE|^d~&}I?R%w|(Htl*V9 zW_v~ixk0hbh=}VqDn?}pL=OJL=4#+Q(KQ>se;x$}cVpN;W7Mjl~ z%Dkr#u)wn=FnDzk?crU8o-q!<>wqJh&(JWJ$LFecIHRz+z(kZi0CA(ekoS|vZQa=& zqt%gOct+ub$sTW*z5?6@Y3`EaE7I}Bh3KpuJ}Gbs>chw@!Rfsj`Z-;g=AMI^;ekAb zvLYK$?~sK(VC#%0SdqC1xaX#b8w=^eHVqP>DLYxD9Ok{xe3w;u{z3n`SkKIj?d+&a z*!{pd&c(mo_R2!jOunEMO{=!mTEf$ugR(7G!3JmU0qmqVl5lT}&6~O;e9zU$tNsL? zn1UMoD@Kr}tjF$g9Rg8(<$wmgWk5>h@1;f=^jX@(Cubi}NW-QZvdUm+<#iE5AgdT1 z^|mCuT9uA|y&F+^HkI8QZHyVX5YC+94acDO5-#gWR{jr>tEXlQu>*Zf1Uy_B-te&b zD*HOuoaz3D7T~AR;r*8pKGtw1r94wDY+FqAp2$~Vpg_OPn@cs#4&9AN3B^Q>ri6Y` zGHqckuRV;$<*_uft)9lblvHho@q8=pR~cGfg~Fzqsz+`4L7)K~vtV#SEjI5m-h3%np61kHK zbn0abJO=;#=81H}x#QOx9*Ey*J_EZ6uLWKP!4BRGMjAK*J_D8ud!aYH>hDGMOJ4d& z6nm?Z?P^{A@j`M-o?7v_!GLwC=uJI(+CX|vy8l`JPiDwN1f$6r9)GclIgWnF1Hb2+#lE?_7Ke8f9&hbL)DSzH@x7wX7Ib*VC>Y(ek zqPL^$`sN4R^uJqB&izwWtlOxL4-WBJswnXV0Q8#~Vj&&PdiQaG=u@7nJK$%* zvHOAO53X=Gk|!rUVDUy5g1s2MP{b$Sd$2nZUKogjyS>3l9)5uR1xp9}Vk&!pZ9{`F zZ)9U`k$O!=9oh1U`~u$N@ZOSh?%}cD|LrH;lYWN_P3<6rM?RisOiL$%(JLBCxDaB&M2QIpKcPLRTR$tuw z^o@J$&S%BVxRm-MgYLXF@(gXojQpRNf+jS_BUN>58?Vq(&-H<8CN zEuN}Iy3AE@_><~>3Gdwk&8uAwzt0Xuh3f*C1upWG(_F!CQ*^c9F1yso`Eh zt8Oapa7D)N$I7WaiHpojox2Ah`(b?VHL?bfYM?{A1^N+Lap`oG*r+b96!>m z8naTvAanjTv13_(tl*{CtF6PS1A|YjxWt~zunX16|s#{5rp;e$!mM(DM}4zy_BjwZI{ zz+H(r(#@B7XeFt-9+JcXu(K_AP{#XWP-)tRr&#SS{|tc|Av@R;z7s~HnskTx&JT7l zec!YAk#QX==_LVBvn}{gKIUy}CC(^PI8yfQcyc?O)z-t@gq*2G9KBkwF(Y;I>E-xC zi2L0QZ35oja)&SRXA`Ud*gq4Y+D9G8?H#f=f6KFPvo5CPcsg!#;$FW%3QP;bEi`I1 zT$P5w4jJPZBp(>5avv}Q3D?%DJUU!k6vE24%T z@t1^KZ0`>$Ri5>tm{d7|?L7I0%{e)qx5x4KB)A+vSyv0&Va>)i^-dwkKjM}XXT!7| z%i-kOPnE#C{mP_jdyqLvnkGwZo=MCrAh!_k`TxlHG;$>EW;kGAW#V99r2mVI|DQ3o zdPuIiL#h5r=DO0hvg8G=@={RL6cmyBd4sL9b!m1yim{-OfL?w0s04HRItq2~aX<+% z*?g?mZ;lRztOnSpzYIRjYnP`MYlOJX?4#0FNzIMc`TD9)bqe{qJjjdW%(rS?MDe)81VQ>7~ghsbpIew?3T}IQnfO(dyD| zHy#Is_`1tDm#CTGUQw#xEWh~Vivjf>}n-D)y)Rc5aUw$oblMWxV{4#Q- z&Qsa;mT0HPtvCbn?_9WcWX+vVN=Rpua;EI2^Bs~!1!{t*25%wUBL#)@s zgNS(l{o;rr%ij_X5pDtBLRxIaJOkJ1bobWNZu{WN%wb5f&*BM)#L}}LOA7Yg51iIA zqG!j%kx%+P02P%u+$+QxXdfoTv>@F~>LTYrNBg0pAfI?hBPKsLF3`pyQLK2pgs%QB z(cRrymhqxb1&Z0RyliLxOmpvdV0-w1EFEVmU>FXt?=^%XK*Fn4SB$HmtDt;!`~yPt zx3E$|U{W;H7#sjE$qO-TNNvveo9tZrNCWoHse7umd}b|?^^H627P>dY(ZxZ>OI-0i zsc=3;k7|@4TLSs*iN@9MCX#^d@VEPdzc=(F^y^gn+CjNMRP=C#a$fu_Y+p<6qzcMr zTH&V32_DEYzu5nry8lITW|RfMd?$l;hPyL^0Yf< z#;rkDn0uKPR>XGEU?mcfKM5Mr3r|{*J*Y3KzsBh;{UWdwURwrgqi*voACP}KMF!u# zDU!F_mm7QLlyt_%jNiEQUPs@!z+YN@_e7M30cV5fpFR$qpF}7t7%64dLpHjYpnCe3d+nQdD5eyd z3@1a&7d-6)MYh*n=kd}b6oR4WR3(4D0j@L0?5yIGc2_T~uPQH``bXYGGyex_K$X9O zt6A`G=w?0};PuZ;&*0}M-@@>>nLgVDeLiCNQv!a2p5iANzMA1{3H~X`a(nvvu9C?g z6v}DWXV(8deP;b1X5}0e%6U3VInOcq0YUypM7}8XobV*Wk7TKLSWo+HjM+WTa8nK~ z|2d)jDu#bu!0*Y)tml_=GS}D2%E9U@6lUD@!9ZdefZIr*4 z;or>7+}^)uePa9}xPHdI!W1jV%6({LKCKCe!EpLc1>T@&!NnjFHNJSCIdL zF?0F0EV$I^3oC1Td=Ea{+FHA&yrj~#t*X*hxvnG}kUSy9R}z+LYbkZPyxUxz-jMep z$l?vT+zJ3b1#nNWClYpb`TV{V_;5JvDe(k@B)1=Odni#nT_D>ng}psq59TfNY;?J5 zLlOTMcX&eqm(Q<+E9-+>oUSb{$+O`j=-%RXVX3ZGZ^-BFX>=>TEnbHo zH0g4Cysog<-&qs#x*s8BmOp}pU>URJd&sNMgyuj|8`!*j_}-xJtc8}KWkKu<%U z(<_y9*sL`+Tg{ektGC7O+f-t|$5q$bk`ZrlG;V}`fKuFw5(0Hy-cZONko<0cAl&2i z1_5eqZ@kxKt8tV=-v(VlZzvq_yL)`f_F0t+MnVsHu`QYFcDB~dOmH-|*;`uLo7-GX z_ux(AOcC!EFIYx$c{|;TduDQTd&@?-f7$D za%^k_mYU9AS?_d#@vfz3J!G{@;4MDtLo)b~uQ%AUY1$Pl>*r{Gr_b*Vw}LSu;h9y| zJDcvUZE9?5X>z(cni@Nr>g!!i?QPf6t*t}q^7xe=$*r*QQRcZD>ZyaCtMMt}n(d8| z-pYEP%Qw4vq$i0rUEtr@``uR4)Y2xonp>J`?RD)fc9+x9xXA`dZMGVxJwsQ5FSK>o z8=Bj`bnP~`w6)f@wUQ>!J_2V93t|XqYsjZ~XU!f6di|OGR_iEm-_WvYPC7d>xbd`= zpdbe{o*Spe9qDWVgQbk)$lPgA@T@J_>h>viI$ko4!H!xPe0>hxS=ZJg`2rqrrE4^# zrp0dClxYy);Gly*@q~G>fiamHk+W$4(X_K>yW$ON!*l~FLFoS1>xDd5M74WJ%@g3c8A=(a~!sB9nwm&g7X)+Cvf4nzPoqOCq!6)CB&bjv^a%Rq7{D|tpvkh^fJTWq zGzv!0wR^L%snIUsh@~OBk%#R6zy6P3xSxkx8@MdReL`He;$9!_x8V{W_x76M*DBFH zFWe8reL~zT#r-ne>%{#}+|$B6RNPy{=LUQXz`ZDZti~-E+%v=dJKWpDbuI2i;@%|g zf8rV+_d0Pe68AlEpAnbmxcAm3(S0=B&%pgYT+ZXZrbVLrrhI?G!rnXaeMUr9 z+IIzeHTZ2Be4hr_?z?|SgKLf+NCz~y_LcoX4K8c&xCYnm&nMT`K#f@#mC(r`4fglk-_?Y1^syX_v^ zy>jeav8?`wQ_XRzXJqxVTyd)3X)SQ5AITMQTXI0o#kvx*ItBcpJg7QxD=6mlBpk7+ zr0I#LQI})KaDOea3=`Bbhk8{$_G5x91*E|<woW}yOt ziy(>d=nNI764wC|8@{ZbL_O5xA@qsFm8oQMG~aRTwJXq9P*37A0vqw}L%1X9iG0ji zWmZZPQ&V`SSC%I(kh?+Kx0WkD`5cB_sJ2@ew=*5KERv<{u;;|9Qf00+u-ZZG`m$ zOZRe1Z_~f1V(l=MjYXzeSo6 zLZ*H;Eq{WHhgdQ6;{01c;dNMgl#{AY#Y)1Uk;3 zyp(Ati6H?ZmVA#u#F79JQ~r`b#FPLLTOJ}1u_ZvnnEyy1VoZRDHTM#TSQ8);&~_1s zSk!1cL`)j#n@WiewfJeImPYioK z@L*WmA+*Iov}~QJZp;>&K=Zvlx(e>Vem^8-F9QY)_(NjA>wq!-kmRBk9O6OdCWP#31uNj9Z&JMbaV2l-gofAv`^=!x4PNrd~=&A7g^)sVAqQsYwcLMWbE@ zaX;MH)Hj7{mb=EiGS__`|3I;NRb%g};pRM0uwZ%HEhO4U6+A%(e9;M{RjvFu`c3K~s)JK3d61gAO zSr<$A_j;-VWT{?}yz={GY*MG(4Wi1OvB?}|MQqZbm~8zZvFn6s*DKgtHHDJSED_8W zE3leJ%L=8OG{91b>kAEFD#QiWGyq-aP~SXM1S{*rr3uo7o${VGYXJ$rQ-^NEDBVjE zc5Z?IF6)$epk)Ds=+S&~bKC%MGr+OoDJZsJ6k4Xo8*MS4!D2oO#SBg?-_xNR)mOX? zwn(f4#Pre;2(;!@m_>Xk;E7w|Pul418h~+Y93R9HqFg^dh@%cig+$`4$v!q(NI_*W z8N{;Z<3u@8-SqYNXrVe78`j58>lO@}z7aRQ6o*=kN7Bo0l|8=!jn&JCicsOmcrvM8 zPFx*lWk9C%X@JE0%mIrK5{s^p-r7#);XT+}p0nzd`j$*4KHBYC{+UN1IeE%v4>b<#ltc?`zunrf7Y7u|D@FtB=K7w$d1Js^{rq z!=YZJ3ynBmXe)>dZLWfG%TyY!?FQS!^pQBmOaOT zAx@EK@+mPh&yk=7`j=$r`IV!^dusA{YJt3VlXTsUv zX*D}NXXO6XR@w7GU4IV_kGh|gqTEV(&rWNpeC#kj(p6kaym}FrB#6%|hMtluPBdWm z%X<`SY2w9;7-z0H)NzOU>%{j_)Dzzoe{@mZs)S8_ZG6b-nSkavb9P!Spx9&Imeti( zrwY~AsaUCcL>@mWLyRewZ^HW328pimY}oHnVvHdtK`%f;gL;&tyTChJE3K(`sXiyjMWoMksugPcjGCu%!Gd6hMBeh;R^jMdn zI`P2;s4f*ut{e)ZAHH<~?X&!XY;*uEj`E!MuTAmW(cv`yWV@WIF+#KL*FILuOguiPz-^^K&yc+1?t4m3A7m~M6NYK zsMrayuc{(Wri7!gO4=pGCUlYOX?lossuK|PApAp0gZg7gBoU8< zXN-BoH7?6!c6F$~u&Hl?V+0|iEp}7~ohQd87MLD?=_-Z+jE>z|qBrdiC?pMK@!SHQ zi9rQA+AQzM%>xT{nF3Npyvy`!U6<(wn^BGpnqzSTOibsdTVc?&Vweq+snjqregKbc z7(j8X?8m18#Q@W*c|Z0yxm~V6ICp#QbZj305U3^Bw9dRD%I=Z(`_J|SS3<~MfZc}@VJin3QJncRQ z6X1uhjjTM&^sU6s8tSC#AZfAT*Nax-C@mRXt8C_<%s_}HW z?`A1)Opt5MBA3i?U8_BAe?W07-qfBuf1gp9C4E4XzMIt>m8Rc&@Qc5f5#Pt8&NEl0 z%NqsWEbzqw&)?(l@ zU--rV&4K>Q-$U~EkG@bKsN7*`jrc9Kf!?66#~Z?%-hkgyR$fwp2~DjoUqw}=rM$GP zY%Tt)gk0s_U7t8t;MSzgECjbQlahC*p03~N& zO2{F*5^|EOBov_M{~iheY>E#XP#E#fnN3cq5N<+D66<1l>Qqo^v;XPWPp!X@q1~DAkXI+er6dTkZ=s} z{Ni`a{QG5|Pt3oV>Ja4l#qXK<_se4a{JL4lKVV3wvhZEBm>kNlz(^4 zFL7CkXHGuU=+D2S=9GU&Ev_?o``yy?S{N_>T{NfNtU|H>xck>|zuanX)@vQz=h5S6ui{HhF_46wxPwI{)>>GpXV84`AY?PvHdR#`T2K0mfNL_mstO+e`J1qgK7LD^1nWv-~5N< ze`6X;>zcXd|96Jz{=oe2!f#yoKM=I}56%+5-_KAcUPJ8AQA3vJH-24`Xy01|dKvAiS&rB)pRz&43 z%QI+YHFRc_!)dxxX^(q*+3WVOvX}WvK@7C4(8^3q(X`HZ)O;d>FyC5h?=ufX%6@*o z?~jk)k2&Y;v-VnRuf6tKYd_B3*G={rq74Rv3H}2CgJG$G{bd>c_|FCZ-3Ki1Zulhb z>+_cy3%)*oe94_NlV;q1?;ZEw@~@;@Z@K55d&Q)G-kx;7^PZ$T?@7x2$GD__-Fw^Z zgS&N$w{skYc?Ls)G2U=&<=bO)ybXr#7j`v9^)Xc9lMw(6hG|x~#s4}?TUSE&QH*aR z=b!!-8|h)d^+qa}!H~rA;g6Mp&}Ev@P>%pJjE3jBbW+GyjE1_doxJxM4GA42&%V!S zuo+LEZLoOzY!T6~;tW-W7lQpwGZao6eA_MJEpTtf1S~t0*|0VeF3XTwIrx4CnAG2Z z0yG%Tga4ZLaMQ8|-(E7c7;0xe35Utbu=^BzS%d#Mb0*$@KMMKlxF9aWw93J^GrA

    mhFsmsX9d$a>MaXRsrgg-tG*VvIe!0O=8-t06q1HrgSsf0k(%OV6)!rre>|J>YUZi~~a*;hrDYB=_qTQ~D_EdR} zJz1G!&yZS-VlF(G0l*}u+ttcf5#Hjdcb==WB)AnoBInu@)v8zvT0ojl*NX`YIE%-)D<8Yr~_*1m#;zAi{6A3 z{?^Fes%e~^O2PdQ(AMU9#fuGTm41AX8+rNEsX(-rvjb`aDGC@s!~c|SraCCxdNE^yya(zMYolRZiJA|{ z$3mGeL=4>_1u+aoiu=rv90zciF;KU@+DA5D^ZNk9O^6+?H%tV@C{S)P*XI3FR5ZA# zChs?c5{+CTtTMqWkB2%-vHpkN{55IqWqjyYzo|T8cr^noQ zL25XtHiM`KuJuAq%6WBit-SHb>&k@h37^BRCIK@*hMGTIZE(qgt2LTETX?#eU(woB zDu4${cl%NjpIoCvGlb@FKHp+|N^JpgDil5u>+Sux4Y# z7^x{r?7cLgV+cX}mbU4M+KLGz?G#Yz{E8y`w2EB&ZRNT40Xmm)$mJK|Tux_P&iPEQ z&U-;;3gtW#T*jB@^@Pi$@;n<{ipukPwS6Vbude#VRB>ILwA1C9V;^7?=C7&RWva+C zOAS(7owUwXo@b8xsr#vh@_DO4$Q|xL!GIkK! zAQdVF+acDMI!Pe0+D;McFH1NEVL_!_1M*a30EPB3$c*WIDztPgL^9Ur=V8#G_iJp1 zARN7aV+pA^e+x400EgT$jucWq2A6?wcj|CrJlYtvD^>$loOXocO$N!O8pZQa>rm}5 z+mKVx<6G2Kt)aMse6c)VREPOucs`~N4$y}}Wx9QmE>>grpjgu?t=W0=Kue~N%sImfERMqpS(7|Syronmqt6n$q@b zi;!0`9xSK-6J7Uq>9o99#kt&j09W4-h?ObV7ydi2y_Fh5w#-T9U_zZP&W|kZ#hI5N zRg#Ii;Z-tGbL=({%!GtsX)3u~^1lBg(GL7X7cB`fZ#QsiVW>!q%7i-fq!)a`CF#6Z zUGlLmfD3t{*Fwrf6xR+5+MDln^MUeeC!h5n>+-1%$|tWu7Z0bl=wmJ+@g<)U3v5^! zN0yLX|2|mOEUG!1e+HK$m!fE&1{I8cDFeyF)j@2;hWS;%krME2;KKR>WP%K-*V@m~DeAg8f&O08S#@nq}*r>32;I=B@ zD`4!Sk`?GSSIIFczRK4FwE8^+RHJ7=?lD9F!RDI(s#TD)kXx28>Dqf z`IW+w%ElbCNsN}(MK!L8!mCNzWyGr){T*_B3&@2T#U$Vw z1PQc%LDDuLoebevs;B;u%aO{hKxK@l@{tR$qHczVLQK8sLuRL622*F7ax=5RX~73( z@5=VQfC~76eKB6<+c74A3QmWLox~eh5sx;h^&T}-SZL?%7lJ`Mv|x--Om>WRz~vVv zp!$J={!wF{vzQsF0=r$#wt}@ot(-(!IUTeUD)ZIF!BFt>Xp+XHx3UD!iYP*sVrED) zy0B|%dl>jBki=tx6FdOh7f!*9TCWz?L3nhJ`H*JQY+ z!Zib~$#6}9Yeo%_G`?jOFUPFbKb4hbaS86-(Tt+2(`*2qY;0U>6bB$Ib`wv9Whj%x zz6g>OfsVa0ioNiaG5CtGz7-|*z~m^N%o0tafQjT+H&YUL%@l*+K{Eu;sU%-sdHMXB z%dc5@1^8ruFJCqO8K2 z1ugarX$=HO=KeccIo{jQZ2Ny}Bj2IcFXFCEaQ`c+qbdk?yCSLq`9nPFe;1L!W^^oM z4EVtxOz+Si=yj`$I2uxd{!SOMkBb;o+pgr1L(K=0peTV7|RcYdjrWDGF5M5PClIkq8#Kl3Ek2UxRd+{dP) zkKOie(4YO!K-O%U{6*D%leEW(4O?DQwKoQwfQ%?1J(i{CUxdZRwrHeYYZiKB*6Q39 zKu34;lcTA-!rlDu)Lk*RXCdufZcxP$%5^3vXtFZF3t zNDEM*^Wi@i{5~S(mpMka$>K8w6C8bD#FnugEs=vfP%Ty*WTvg zp5Pge=B3^X{>3ZWv#4IvQJ>(N$g_s`f$?hP0geS!n1yvn7Roc8&?bQ}2YKq9gRnUp zSiREghvD@^ct|N*i#(GOo6!g7XtGb~f=rG;m+9axQ|TKF=k@R!UOlBZOF)#?=v`#b zf@dvec;Dm43(w)EnXJq8%h_7=76^E z1#V9Jl5vFMV{yoYIzk4LLRG!+{;n);r5Gs-f|NpVOq0-}ab|SqpgR>u$cmdzF)-c` zIrXKt^iXOj2Ca>2tRmX4RJ31>Ym(?8ojqjHLk2#S?INRr&kpJ{p~*_sO_r$>lZ8F( zEEag-*o?FfOOc+OypDqKrC+Zr@nYwn#W`8UcBskQ?77sz1$kPZXAK+#3clQqBeVvs zcd>7w8OPTu#lJyf5+(-fsOdo#&zn>&3GntO9nH@SO@g#`(oNMkc7!ect?oGVRds)KEm)h>al2=Eu!AjKHBN9p-KAYwVjT4pzS|YIS-u(sRn6jJ zxkmm@{#G%fA}Uex#z3Lj&AaysjVQA2Gx7*kk;n&%P#{SD+B;mz7NJ}UA$_4zikjEUMx9KTwZwkd7B z{4=^p8T?K~LYBN$+Vv<(7G+*Pd%t{G)*$M)XpaNDuo{p>X=TD^c=eY;CHTDA(Ne=n z#VS>rPN6Ly_hVe()5}*2@n3;G5&h5?1~xD<0rd>hWMf62;jZR@;GPF>ge80BW?5C| zac-qGCXknWNL~Yp-=GVvspx~*%E#Ee!;Nig#Jkf1Y3sxI|B>@=tR?IZSSqXxzIPTv zMwGQZtW_@pJ!YFCNjVqbQ*AaGOzo|-No>l%_1bzS(?pQz4>(+dWK8?93iSX6ZKa3{cMx%qN34n;YLbc$HS#D^Yc6%sL^OwMz#!jHwHl^(kAs zh(}@7_=u_yWBB3wm1Ub&zVqQyaQIglrDnsdc!*DC#o#02#L2Q)!M)l@Jb#Z&+0Y1O zQE0j487f0ED&Y*)oue1t$L-}TKuv}MV=gtXm14C7VTs%Rf+2`aJ=6l}Zo7{;w>cE% zuq;^85lEm0jNcriwA~=J8HC3vZg+1ovO+;$et(3n{=oGQ6|*C~yx#eZtmVkq?}qkK z8bwv|98u3e2JN1D!Tq`s=RyScKck3I6oRx1BdiR;b3-(Bm#%`~^~Pw*jT4KF2I$sI z#OJI!z%pCOT8zFP#CSFI(V;$FET*ulw>2|CK$;r`Fdm*2_8!D9xO1_5PuvW@;N($? z>H$zLu_bxF9S3xF0lQZ=s`HBfNJvl6+ub}dCs@K+gvJYUsD(cmrjyV&qYBtK@6pK>Be-D;-$ynq1ZQ}Y+pH3k6dn6 z^S7Z{4YrE{NGePjOlEaF#ixMnf`3!}`gleDw>v3{FW5Hh{3UBQNx^s9c)OveVMnR2 zJ!}gL)+n%58!S|z>1gY*x}ZK{^2J+)t_qJ3FUNv(hY(*ecnb>=tT8LqD8{l_3-O>- zp|O{sCZtuWjmP-c3({ z&Ipb@7r-;g3a;bfY6F#?gq@6QdKe62faw(ZZ`h3FaVF3H*|!=Gq*Z2$b{pugH`is9 zb1dki*;sO-!8a6MiPr=3RwdsIfiK{K%r?L~USSb#A%u1XGSVJTZabF-{j&4{=|F=| zYHf4AQ=4OtV7kH8`BbiMl;)}2kT8bbYb z#R$QQl_s5gVOK)I-kpv0s4Y+>HmM<2YKj%RVvQwFfev^v_Ia#wG?thW@Y$RRX>42` zYZ&`{#UxkYA(=N5HHq;n4nS`#M?-DVs9g?CFCw~xDImRK>aWnP59>*7fqMG1`>FL* zc9_=_jp@tZpjjOXMHc_Y+kt#YeXl#yM;nbOCNN`es?8!j(Z})=S(&IGKc_q6aV3qr zV5UMdj%9^tBq8ky46idCdxz1b-E>qI>^~{dM2F2t$v*`OZP4!ydyhqB570&*pN#!k zXLL2qyFyz}f~KlI`7~cMG2sSj-}vy3^S*W+=WEg>XLZBk1T1uW;*U`I=e3ZQS~m0gO+b6-)isFm&Vtik@QVhNID~ ze~v|i6g(B!lRWFin2}U4@AH-TA?hoy*kg$>I$52G5w52*BJ~tOye7G-!4xwMp+glR&TB8jyL?QBcZbRF`jef> za2wE3zl-irN0Dv zqP?7>xMc1Llk>05oyl1={E@D1o_~t2eg~~ky%xeBAM;xUH1d~ZoOP~}{k``_9Hlma zEw95>f#`Moze3ooWN$-)?;5F2xxY)Q&3VPhS&(xUlQYWsWMK&_Uls(GIZGE#XHVDS z)5_YM2E%2S<<#cv&Y5uih}s;r2x?2x$kTM4M}xZRJkT5U8PuTbz-zvS*tAd7`|uud zX-k;DRWAn{s92$acs7Zt%BWOja(Y=64K{p-gAG!Pq4Yeq#?U)C6%j9y8G(zDz?B%$ zoG{M%`S@g;wjE+f@V_AC>ac5F3%e%M^U{4Rrd-;>uIR()6&k`Fd(lIK7vt%e71L|m zrK=qNgVUrxtEc<)m?8=KPsIHUnwL|?nZgECa4e-4j-_;0a;ScA4K2>+-C!_uG!~uG zuC0^}i8Mv-$0%N6!_DLE)6}6pUc2z}cSzOtpMulT4yV=*XDZ;-l^|ZBzUl338h~l& zbFq5G?mEpN^aY?8s`oI?+wHReTUK>8&ZzE7)HRKx-HsNeU#zY(dr!3$1?_lUGBnaw zxXVJkUZ_~9AApOcta@Q)Jr*{~PIE%65Z}e{La8;zMW`aI9a+YQk}Ph}Ny@TGTzO_mMiKyK=Ls zT`QXv1MR5P;@RX(lQYsParj-iez#}+?0()Gjq=UA1No-RAH^7XVuPHa3~$2sE0D2) zUuiql_h~+w+Ve~tG_gWsPVTrd_hF4$T7zM``qNy#m>C=K9%Ymb2wF#q{iG8C@nU(D zjoxKDk13O_a)NdM;<`~**~~M)0GYKaHLaEDl)4*9gCSw7{VX_kX=2oBX=#X|n#aW; zjU-Q_c$pFlwb0wAOtMOq6itr;jPe#wy>lP*Xp$)E^?&m?juX&*HIBrQPjvY>6LvCKy_w3dAzh%D)-{j3!u&OnfMhqoC5YEBmp~m1lij*=U5UD}g2&Vx zW?dxAxd`)~4%1!_r?=C?%l;nOo~JzmdN_^g;Vjo|lR>;ve;lvqzJ?UPxIf;7E^Sj*t;G> zUvdEFHQJSRPP?*tvLf4@_;9eSg8N$>;KcG~>gAmjS>8+M27|Y;I)>qo{BfDDXgh70 zhqmcuo(~m=^{19s1gT6437(A>m?9Zk@1YPR4H<|~Xa7xX?lok;T6H;|gL5NlUkE$Y zReGZK%4sB9UWWaZeP}YkPnuiNPo`Ds|JY;Z{taKDfBWp0aKDG$<;->BKxK@{HRMt; z0h*vI<5KZ_n#cv=eIe7ZVjRtLtT7pUH1+^DSvtgP1mWDS?a}d}qAdjO#v-JJ&s)|S zd_#~o-X5~DS$iZ=J1>KEns z%|jFUDug+Y!%Po@S%@%i0SxG7Nw{u4&UAB{uA38bBHQ7X2SFXLnE};f5IlzfRZR>& z7}XtoV&NKQ)Nt7YNR$^Y33@BGIZ6 zo1QP#5V2Tq5lW_SIqy)`fP+GFEp)dbgKAhBz{O+PH(=QC zBhc{Qip`UJRw_p2*gX2+Fs{?A7|?TppEF2mp>_z@pB}*RHyrqonupKo6|gTz+C^WY zn3Wl}p)(TZSkmg{E&BYSH>DKZnK$v>;qnX{1f9Rgz2wm*`5`k0fqZqIfVhF>eR!?* zO)<^?SM!8^UPq~tW%Zht4wq-*2#gtAxyiHM8Ove?!96Q_L{k#;VnElF#X4^E~M75h8^=V8Zi=Yh-v&O}WGo7B`#yhLj1>+DjSXE+Cg zjW0}@2gGlbe;JfKgVdA&Ry)stO|I}q}ne{OM3ahNZSzH$5OFU2B!XQiGy4uy!Z`KnG ze!cb$u1E3@r*(;G_5R7Ih)SUitS}C4%|*j8J3*dfwmV_43o#$K!JMIcIkt_>2`S*F5k7t_nPGgaGEGnnPCAHG~SpxbiCaxc&%up9AlMi zR4U31R;`6b#}I=&!z52K``6$s5a_`qv-U+=K>I|wFM-w{jj?I(V$48pR;2GP_RPBc`PVyxCAWvoe%E!$9=VwoEQ>Zg!pAM_3g<%zGmVSOZx^9p6Ih zR!~jgUA}QOjp|oH+ub=%$+r#7Pk8teZ{kR$5E|xxvgLeim_2Hv9i$T$)r~D7#{?}D z{4KU+j5DD{7FsHz98<+a$33Fen`2SY-YerQt|3!JE3MZ@_{w4OILnmkEbX|DnlWnd zc+rfl6?HgE&apsadk;xec`9fB7RX6f#@U9BOL%x2R%#B^%3?r)P5rA{11>+6^Gz%- zFo3koG~NU}4U-Ek$nW=1SI6tB)B!vmmaDy47Ijq{BOyFN6Sw0mN{(q@U1pW=Z;=E)-xAPX6blP$j!E z?9LTfFzr)c#W1sDuxJJ`nH+ZKX4ivp*E{Q!oK&f@&%kwZPU^DWKx26x64;{l0wmfp zw5gxL|6-IE^ml9^GipH0##Q?ewbWb!Hl(@Kxz9V(A|F&6aDhk;$abo8E6Mbr`ZXlc z*c{ePW$68Kd`~jdKJ+Q&_)#xd-K&(IN;Y)Ia6#JzQpRP@{?P4zw3}uFdj(Gdm|0;I zy>|XyEt)X)0=HjX>q;=PFRz(RnmBF@F1P~d{?gFA(j;Y^30V0xfb;%Ni!#LwotIx} z-T%$hUs2Fu6hZNkPlCORV8!i7^(O=h&hONuRk9BYf5h(yM~ZhVFVT|pAH6B@TEAkS zyfvrX)JLYo^10aNMr8gj=2dhlYrz)g+)*=^HNIy~X?*GQVMgE?YCOa=028n5#pky2R0&M_@ zcb&*{)?%`r6?i|WUWqG=YoX|iq>Kv%_cI0teU7W;9#Q=KYDCwPC%B)58+W}p&pXPf z#rv||^@1A*D&*@e75xCfxqskBK(-FtIGU6b@?LnFjDZ8EEO{wcb67kN^$rFUSC>$W&oT`hp6VZi2-a(E zeXV5@wDs93O1`DSD5)bI##yCc62TNyWE&k&idPMxIWw;aGEN5>Y*Eup6pN4Ij##c* zei>f2sLvhe-uQCw3^O!dusnI<^^TEqzI2RwWU!+^yvi}jxe9F!0AFsU2JRY?$Lfa` z>!E!ZXTiBlfVdGw@C^FYE$Top3|a-;Q|^aSl;Afm)lyZIJlYbB3Up?=0yElMA-%-N z!Yb`8a5Z-?y#U1hEPYa@3S#vlsXzfj5>(M!C*i?<|Kn zhh$vuk0;*`ERLb?#6kk_VPG>HE!)-X3o`lwK>{&C(w1ZF!`v!zn2>M>CR9tqQ=@r3 zcxHomXh{^h^5IEChua13b9g^7QBHge1eE0etc}zD0Rm#+awNk>?dYItLzJ~pO7UXC znI~rB%B$=^2;Y?fhR;FxNVNVpaJ|1=tJPFw86D%n4~Whe0o!mK==|@;dH$#HJtAtt z`a7t8elifC8r0?%`}E=%puYTfvG&K?-&`9wxPol9vKmat+l=+9quWBqw3F;Y%ohvnFq3kyeAX5mp%; z_lxI4h~M8aTI}a71T7vV%!3X*Z+07YldnlzPYq#+F+bLbpz|>P2ZK>#i(Qh`G z5?6Dcm>yiLQH@Cee#3E^is3ly49A-s2lO8*p+7V(Y3Mln!)uWb)01GSh!1TE06JS3 zp!TEpKBGL7EG+n+H^7}pYN{hnn70gWz1dN66*&H^iXPJ5RA}0z2L~RK4@3SJ53`CA zXDKr+u4|_{?}e@vvh_N*CnuI)%vkCLklK9C^xU>^rq5>(hYm4b{Q0P=*|;>t^?>n4 z!F^c_k7WT!44P-bJv@pwOu)6W9Pi)=yce)6&+B*(w&{4Gn7B&t156kb1*Th4hdWY* zc`vo$$~{~c-Lz+22}k-9wFvJVdm|3PRCC2henO>PY@QxXIE;vg?mVhAuT0`NQr_<|02 zq%{a=jsP6M0B7oeU&33E4{3i~sQ}SuS4quw^b_W-ize@}Mg4$Flqv$O*XMSfi&dNMX*jU1gmnpo$KS&#f-6lFZYmQ^#&M~L*}n)-q4)M5 zg&WrcQK0?D+t2g~4s0thOrW0#p@zczT>?mfp zp24xiVtKf^7#AH}Lt&IE;3C}NCR#B#!-N(49;9Fw=jVge{j7*WvtR^h)QGfA;3R2Q zBe7U6jQ2m*94b+Tp@R~|hL=di65)^E-lpe!c;YE}HW|Y5SW$ZT<3HHSMiz3|$O41? zZxB|VVe)4HNLs*;i%6B;Os)OP&^c4!>Ho5sTHI9LGY~wJn=wrHcWb6NWsCa2G2PLC z!9M}{GWrOfI=Jya4?k&}{L$!p8~tb$QAW!^xfPJK|08tORne?j228j%-M<-?mKvA; zm6JL{{!3fgdXunNHvuBWyLbRsXe=LZ9{~O>mW5}omQulk(LMB>22efD$_0-uq7kW5 zCfbHhOnA81n>bb(4pMmzIzia8p8y@uF|~%l=%rTyI`B|z2v56)t^XZhSe?n@-llm1b!dg z0nBULTrIac-@<)RN}UUV#ZM!=@Z~JrNz%aOEroW?IA4TyKb+M)asJ<00}j~AB_{1D z_N_;Ca48^;H@Yju0_dsaI|hrn)X(`_u`fjAQr1pa?B!v{`PjJu*M_5I{V`TZa5WDW zdjUwoaq2;@#WLY1APS2v4l0E>02<2^3r*6H3!R6-2uTlGQFX2p5ad6FEn(Elt`q%Ahj>SQ?mA%<=DverdozUgdoZ+bp5W{Ob?s`NF1QW! zMilQ&+mHJy1iuXdHh<6~&)rhSAm>hCNXbc!9%hy*yU01I$`z|u{<^M&0{0_tI@dsk zq65tQ`j@9MS$yC}4BDH#??cG_R~?}5R|~NNiM=4F2bGQN_ssp|eadHqnJWCc2nUZw zTfHeCQp4NN7r*5haECA4A%{EiOziAp3>_MaTECx_L2xIsxL`gb;Smtl%wuq!m+6A% z7`7#yp8#Ayqrc;=dQ`E!jSq)G(7LIOIVb>FvyU;nx-G=;$8F3~Aj8XahOx~8!&%6% z(5l!U^;GVT&td)j4{=L?gJJ!B$Gw6Z=l&gc3hs{) zo9Gf3V&Kg~#IJY*IwmKSa^6zEeqbn0kwfyr6so5yF zpTOM!o_HTWux*ZF;~r9TG#jH@{grMkz-1*Ic~fw&k7847u8eyG4^GfvmwJ|HcHAO( z`eKz%WlYb-;IBrH@oUMXf;ko3-{TNO^9;d#jBf4}JPp7XYsQ<~sI?z%)q6cx@%VR- z9wA=I5-fXko0ZNIT6U9+x*)0tjlkL@-Vug~^as{9f*of6a*g?J{rOiFpFu84yj);U zP)3<0f0S`_>gv_)O8;z?@Dx~maA1jo8&||BV=Xjdk=DrLTK5{p&*iKLPys!lBLBt` zC+==%Y4aG@V_JDEk+)ATClCDX3?Q|YiUkrXYo%b~AFX=n0O-+!6w+@|Up+yhW}O0> z7G}tJr|-vK2-zf?RW|jUgTHEV{KRLi6b6x#bLUw;@fXh&waFWG4tJkzw4O~XO z`isa^vCryt?ch9X8Q!DV&#BRyERJ45SA=>!TwIs@qKoSame7Y4-~#qd5_AYXZ=4LZ z7yt592KM_d0&8g@WxC~e!s5ryvR))VUTU;|qn@^K;XRBuwb(a?8~?+sqxH#NT@!hQ zJiUuydy{EuKIQi3aFKyPb6LiR_O`3Z$&9If0n&BQ`n@f>%hI_ThtfAu1xvUNUBnM# z6DoQ@YZ3dnn*SyCK)d332_XDlUT**}WQUu&7}}w0sXC{T|%<7?i=bmY0rv5A!h$nK>JNUF59f=-e_*uMm}55L&=QLe9S|R8$Ojdx)NB&mINo}{ zMcR7~+QYeT8+dmezdK|6MKk{9H6T`B$gqPADK#mv-ojrYXXz2CDayG^8Eyu&glkrJ zoUhTJN{>LdN?QYYMyGnm*kp9uuIBM#fvb6hD75nzEY_)@+2!5deC(M>d$Yl-&)Uq! z)arhvF*UZf&GR=5lSW{Z4a>KPX`8ecJon#by~Of8_gg5R7$ap|UTPt8L7O%JZ&rXQ zQ8^6GJZ;l<@cFERyKuJ~qwqu_#(fW2D*C$d15bDuAwPtZ%!21CWT7OW>mBp~x?s<6 z038+Z&oyvjZUOvJe4!e}yX zWG;rV>S)>?>WJYtlAisK>Ty1SWiqgh+o>TAZ{s$1*>B-4w-*Ci#DLCct^AqaxQ!UI zOIHCKgL5;u6WC}`N2W)N3H4?`QyI|rI3iRS1vMc^mC@+No9_|aIJ7}oBgdU`xcz5Y zpJztpnZ4m4-5H3Hfs`_knP_)vuzJSqWI^snt@@O(;CZt(7z2;O1;{z6F>Ls!E5r5a z&x8y6o6AdCQu8i0v~;&#MEPVm6IKQ_hh@Y;;^ieQsfuU3LeE$jkx^h!IV>Z7mPtSg z&vjByc#tP(dO}7E(n|c{fN>1)I|i6ffbk6Q?-79U4DcNW zIN&6SH8BFD8*l#%pB|fcV{bwle(h;=c3TxiL331T9Dc|0D6zJXp|G&b{kO$W00nxkn zY|>lY8NDi^cgxvq4{JK3w~gp+J)7;}=g#QuBYNY`CcXWg(KC>L*l;%6gRwLJ(1+-K zdp7Cy?~LAHqL+Vm=wV26pILc;CMQ$zdjcW`@y~h19n#O-F1Yc#g9_UKMttjECH^{# z2$ArwI5T)y>xO;jo*13|013({vuC~YcV(1GiSyp*ms+BPd7ndi<~rwAoEB8B*Tcgs zNcGQzpT=B!Qj*~L&p9kulO8Y`#IBf_CAd@0t%()M(m}k>c}f_=dK#w<1)ssu9-F@5R ztmw%C64iKnMy*FbA&7M6MiZ`5GbPaiN&G4w7f9lcEh#dK_lr7+?vp9PkCxPPa7(Fq z=h^9V^JxHQN8B{5LfdrDv8O0gh{CG_aID=VxQBvWR=kATEN`sZX)>OW+2bTrZ5G>% za)xD?RB2VZO8#@C6H%orW!%mqT55vqU!2djM)rJ!G;+*RMz-Mo@uVW!$)W-ioZd6XqDeE91Xg%PyN$Cz4} zxmx7oCMZLJa{T%1n`G?mjOb4r3)x4>byW?xpJ9r($Y_=~D?>d2v8SY2QJF6QpzATk zd4TB^DTv_y<$T;NH^z{Z#gwVWgUXboj6TUpP5@D9%as?A>vpP;Z6f6qtx78NRO6-D z=2*eK@jUE7^UTj33ItrABSr_K3TCW-koJIn1{}RZ@(y`Hh`NLI1@%IY3nIBzN79fO zMDk`r5XrUSNUoKMW&d@DLc1}l>bo1+kjWQdOtFLL{x94pFQS?%z2pU?t~&GeICns= z{N_Wvqj{f+u>d0VWMY&29u0R=$L(C%Vz|1bE&(SX$d$bQ}uv(a2O#|Z8l63|f$5Zt4z ztYR~J2<~gGm>0_O;Z< z9us?3d@I~`>U+UZBa?ers&9J=pVP&mN^-WAZH0lJUP51$&ng; z)Zb15{|X6hV0gZP(zO|ayI&uqXodi-w{Gh6!oLHU{67cLtyt2DZ(K|IH>=CpXdhv! zF*QWJ45?qxai6BFrGn^pKP&XZ37*a#FnXV!9ecndkw?s&^6buigNtZKMV&R;*ew4h zxYhWGX88-w7KR?b|Bb6Jw1Sal9BRjie30P2v>RUqbPR5S4RON2i1GIA@aTW?x1h1t zdHe{<;)MtZcLUm*k1JByM|V5uqdUQU^KZHW$UD60UC~Fa$to}E9WgdPBJ;T5P6x;e z?xO0?Y+Qbm_8yn~7oFAlwx+{Ne*L-j37HqyZg*V@u z{KF9RW>ZBkY40uc#ndOg?FI0O7UH{z@$cLP%YOMBYe!tt0qZ%=zid<`bg*c0*uEcs$gzVQ@jVNcL5+=`v( z(~NbLwcG)3#bJ7Vb*dMg)z=%5mE_wETvhLG&+G%3yl8j(68{sE7wit|epW}y|8rhD zvY6~WJ-NiIfs?wp~J0Fbm(Vgw}_8o-&d1rgvPh)b;&i1M? z2a`WI1uE*rEQ;=MZ$#(NdD~Pj7-8PWfKA$a zwYE9Zg7x{Cnsqws@=J4|t1oyme-2qReM*4Cf7urrNbcgjrOQ9 zOGB;_Jf9s5#pJXr7TOy+*KDkr#>{g}N@{3fJF++gO0)bqTa4h>6I)kIwk~bo zSs72mO=N$0S)YpvPC{)3L9FSkn|2ef-F$f~G%!rR8E*VfZpBX$O>{VceYFzQoth(W zI=c}%)VI62!bq9WC##DO>r)vML$d_091a9lKe0Eo-rSD0n+Tngh^73P>JbmO3nhNy z@=T79XL4A7?fswHWtqjZ42;M!(EoXRz<0WIh}%0_cZ7e(5$Et6BfFdi^&vdrv440K z@pEoj)zlI+{;^5|pSJ}n_|MvMw%Jjo|LVpw&vVb=GtV>dw=>VP_}4Sf(_{ac=XvKZ z$nC2mXP)P4?acFZJ$B}KN@!U3OeP8-h~l%#prVU6lb6vm@rjE~kg8k8(odj0--9vc zbbD%;(RzRLpJ%ov&oGebFlOai&su(l;JITT|AY@ca`Jm%qo{$d^k1 z)2Bb6U*f(x6Jyc86M_uE{Zwqwf!^=~#j{e2Nth?WeZc-=(Y|#h%U@xbT!`szNMHUU zOSl&kCS$^MCik|FAYmjXI9bAeOvu25*H{(@X1U}C_RR<$0l_AAdSgl<&Kb`7ls>?? z4Cfmz6Fk1(f^MlB^FpE(eN$K5k?MfpR%0SY#lHR?%6W$2qJRIMpeyTT>d=+>TSNWE zs_2eE7PRjX#>X(gDG`8EA|s~V-?hv22It_Wh+H@Mk9-%=yTE*WR?G81>z`LQDDEg+ zR6m8)&vhRL$Nod%Pa)u5eiH*o0RaEOzhHx3$KYp_NqPXa)qyKtMw(oi5HsN_nB~a~ z`!|b&u^w>X@7>7sVuoq;Wq$CIu`DX`oD=Ls>MXvu36NajCzbMl3@l>*_DosaeT2S4 z=ly&eNcAv=D>&YIkr*EmHa9*1v;={kKLd*gRCeKN9t>==j-FAz@}@HazoaR`e&BRO zFfzfZkg!1UAUrOg&)Vank0K()AK;b0d?R)I@qFQYFCMJR%y5ytz+b% zc$|FvjKG^vYcK={4SELe$3R?t5m>=SzLiB;WBb8{-dMCcR@UxRD)Q`;L!rcCc@zdq0g2x6oZ2L%Io*C}TzbgA2xu@9pia*BR zKKNoL2Is=E!n@h>5&u(%Xd_x$mEgZ>8?{q?{eO=z9l8)6{P%oIeINheZD&--lrxh_ zZ8J3PLCiudS_BlYH~S}_Aj%k9LV~r^~N&c9euEctgqL`D3^c)H3oVS88a|1zlMuOhcez7BbPgLv(6ws_U4A6>6g=j?uF z(Di0uxZVt;gD8uA5wI;m*h|AU+ErSO~xr4zMVyJ%F-`*7nT}E(|4Kjj%7&0!@0W%tg&;gowiA{O4+1#0-&J zg4UnSrzCcl>3#W2G|XNWz-7$h4f;^~Hho*%xu?iD-5$OruKvl~`;<={Pih%ESbm1o zk~Z8OteF&`j6-UZ%(xmM+ZnG-#kMfTq_0jcJwgEnmSAg*E;YThf0h@$zH#e5R{GV2 z`=Mo@OAT8u@H4!?H|?jnj=q1Qz|g2|9TXZGwM}~ybR}}$bG-c$wlTC#egBf+oQHy^ zZPF&i@;c=Sj^Hpf%5T%& zM(MA<86`2G10rRCTlS-gy9Z62PVC3ON^D_7jI~+*7EgMIwuU?CX3_rKX8iB~_oTri z1f0KzK8VkvohQegY-bn;8g*lr6mIO2^tGI?8rfP-Q?Dt^bhGzU6amNzgmd27b~uLw zao!Y;^QN$U6SAPcak1c@jV+0?e*Vw>r}f);Wv#cNI^|VNFz9n#CT5*=RLV|*?F7ViJ<&6;f+3a z^~PV&5%Di5{OrGwXT%@GD;@E6YcS?u`uU9#CuN#MtJ<;}_mBzJuksd&(G~RMEk;c>J;JygBb2@~>4d4DW-@36| zihE6-Vcp|K@>1p?v5UX^s<3@Bad7iNvvL>2l;RA9P60`)r!xvR4=cB%@^eAT`Lw@y zT}45EeTM(%KR6;Jp}ZjMn2?0K3YI%VRH_-9U!C1#o?wJQy+!uQ@yj_hadMu+I47VS7(|K-1j@dC-a6gSL2S60O z+Ces0ZHpA>52hTPYq?3r!gDk5*yox)wE1nm^1mgM}f59d{4siHUAZ{aHn}?gE z8EW#@!R`0NUfvdVX<(P#R97AnaNY*RGly>KYV)>H5k6gu&p)yKaSp0SmxCVVt*vp# zV7ft>P={I#m5k?k2PSNQYMihQBE|WY-rJ9Io0ArHUy&2%$Q9hlxL@H&!E;v|9aZsA z{8Y#x*KGXNKbh?<=z7RFS@0ym18IjpheQ!A%)`@syyLpc3$W;}hq_L6#=9P}Ocvb# zGlteFu|q|?pQEhgCUxEd9HdR#B(+5e3)V<$uGO7hlWJK&f+TDaxxKmZPy-#xHw8Dv z`Y-2`5~qr`wEEzC3%-AdcIh>86gft&w3D5irRpfIU&J5VRIf>W@MGkpk#x}L>=jwJ z{sB0)M_g7!u_SprsJRFCDXbV~^ycG+ufkm18y~g4%n;l#{(ZQuh?2i^40a}={EciQ zUz>MyR7FmdcM=^flq-Mb7%c9Re;T-v@dgZynXm6rHJowS@HFkS$GHIbxtxq^vlE$n+oJa~+6$~%?R4|-yBMhc$guFL@v0m1#0q20PTZ#H%o^M^*w9EC7o zjb6v~bIl2qKNkYmF8pMSuyZhQD?{y-Vjq9oO2;dNzt06sCcFAc0?qQ~%U5Vi0Ji>m zF%!Vs+JQs-R{#ZHFFr++JgHiRevY09`91rcUxDXZ2pN%UzZ3o4KHPxMioIMYZ9mT@ zu{YXbbxt$w$=0t@YG}h#;+7(3+A;is(ZJ44wBvcEQd6{OCI86}PxOix8))u{olloU z)&b~e#Bx8&;Jiyn@+)zVeFN>~CtZUFoJJvHF}^m29t`v`ve*+C5r;`@ZG>RT&5(bU z&9%Oy>;V2&wMBUvAK95!ub5uMXJ9KTP$yLzGmkj;MPvfp$+i4EJ#$>b6NZ2fqh`C(*dKouOW0&pH!VC7uj*+!nIB7@aWD&^=iIs z3H=|Vn~L&L{{iW0Jp6b+xj0N7(!L^`tdpw&JszrPPGk(5Fh71izFD4QA1{9^Pq$A} zwZ53af@-^*scnYTWO7~xAZFb93RUp;KBR&LplpSpn&Y9xOp?|XRdcd$&%=+$;W|Kd_rZ@O>;nwq6L2}tAkHHx|x8qa2^C6{MGTg05!N>K?fUH1B{P4ZW zD0oI-=v-|nYr#Z8!thF1GR~~bG$~!7bLyRIFaYo}{1x0!7}!UY?t^q=7Tlj0DCWa6 z8FNq25uIdr)RoYdhz>(MbFebbL|+1XA0vcM;cs*=sTx-qCgRy9svoj2==(R}0y$iJ z1~r)s4ZqsQc<$xd^Hv<)DuSQ{s)xAkrau~9FgO)-*%%CAF$~i34Sj@B)DygiB0KTPSL}%bj z5Pt&gMd)AFM)SQW2P?=yU3rp@e+~XEG}Q49{s7SAVqc(+QoMzYEl=C4~Rcxq1i{Mt;X9CiLz~<6Mau4Fi zh5Jl$jau1@Mx$vTJE#y0jOy5FX+P*#CNN;ODJh;y?!#k#!55@8g8G6fc6OH!LPg{8 z(Fu5HEVc{_YZ=IxY9|_UwKxLX7e^~cQ^U$Jse9n{LS#}VR%KA=eI}jwmR=ajK|(lz zRp=753SGX$5FI98>Ffd`Oskwyt>-Vt8t$1L{1i{%Uh){qqxPv0)ZQB z>LR8|O=jmMpnaDsv5Hyl?pg1AJFRj#9={lYSo|Nfou%Y-*%rL&y;e3~%FZI@F_V6# z@eFLr&v%bJ)3_bXg9zi)VNkE+>V+$rbO+*UQ#yTGo!SEhi)+Ko)LLndHerf?7Nf7e z46=C*vuR&(Ixj4XIA6I8>2%ZSuyfb@FGV`_;w{RRM6ppEp|)YwGzG+q=q^q zrT-_4#fdEVF^Ev#UBM2Wvv4UtK^)_Fw2ZS0NHE1dFW3{{_!=n4SWx*M+KAw|vswx4 zjzK>l?$1rrI@l|F$|4j~B=6r)Fix=c2(1$`1E$Rx%(|FUMmRgUN4Vaw@39c&>?pyP6d+1UUC9|foD$Q zjsFd(f1mp8NnM{mRPh`rihn@n16p-C=c1fdA^1F+o@buq52i_Qh>jDvGd<-pl(ag4Oq zp^y1;+ZcRC`>h}_NZDs*_M9Xdt7Ik9xQCtwT`KI7f{_lvL2Q#n_h!}#gSpN0hV~^7 z!b09ra-k`dH<9BH|0nUMLRgp;RQ7X>OxcC<3=A)HGBBJFF3u z|IM!04r;Iu@m*JJ2ckU%TFz+skhchGH#-5?Wwq1Z73sa9Fi#XKUV*i9I}{;BL7)`y zL@SoYkWf?GwV#+aH~ajA-l9-D)c1prKjLGr6MFkf_4i=={xW|Ib|p0^ycfA$nf;L7 zjvgUiueWC&*E-|hR6n{RZ3O z-$54Z(Vjosq}z=b)fIR!)I-c}{MMuwV&AA`^1=^4*v!r17%cU|E+3o#dP075))75aJzrg+HVusK3Qh@j;T_ zE?E3(EdKH?So|U={v0U&bh`->A!C2&$883|Uq#<*q1g?+bnc;7=c0Ax<6OFoMk@() zK00r|?5+CJF}<**SlO%b098CJK;3^#m(tbvxIOszcYMq_rpqjWoj&hlaTj)L>cv7n zh?TE^gAn8KQG>UeClB@}NJ0>D_xykDzAp8M#*R58S$g$jBZ zu#IYYEQ>mO$+2WB!6i?caV8j7o(4<(Qwp#u@u|kx$0PT7&|2TrvuDHX zE3P`Kp@9^DjX@r9=Y3SARCt)kj?+lS^SF7xDL51d@W*2Gm?f5BN8DCO)a6o(XDH!< zVha!D%{Y~z2g`cNHxn8w^fZI_BEaKo^GMTpW-Ar74eLL2DN-YMK_JgE*PI zO*(Ho5c)xYF68|(MgtVwL}$^btv@Jy7|)J{hxBk7xiM5}vo8zpjgU`gL{eh(;WCQq z+28=X_}a-Jay$4xkjPpSmxzVoVto)mrmmp_`KbIRR2B{VagA`m{>Or`6zkCYnP8tEVsJdf0sUefi7do4msUa$bXXSa&&Zn|IjXaYioV zU?4DXEkrezRnI|3jZQF@cN}@WCf9z>ATZSD%C(BqtX$V{Uyxj<8>NQBOc`Wg6qptKI3=l4^85~1rWX?s2 z=8;4(K!i3wp+Q<>l_xaFb;d2rP%yZr>F{@ZrCmlby2g;5HPU$yam)Z5V*!Ua48#h# za8=t0d8>+RDCFwQgW?E^O9=mN#6JQu6!QBEjcD1o=reX3v=u&v1!;3cmlGnbDy>pJ zu3Tq1@{V$y6}qh-;;~D4)|EIm{0gIzN^B)8i z2~xDFPg*&hD9NFcI6MD$XJ!`yq$DK?0!CVCmdWnGESde|?kph@Et*`UeK?QWXk$$+ zy{2unJeKC7avt@t65ZISY2@0}%jKv>4=tDG54ET~a_=`Y8zv-}c<23hp6AE+zVG*a z@AvP0zkjoty#15k!yd<2lzzW~&pdd2GrtjMpL3j#c~A7q7cx30Q`+da^(p+H!H@p* zR{JWqyW5I+`%c|Dh@Dl!FF-zeD8j(?*}0Fn{otqM-aY%5b>_xHT~M zK+Q&7i zBmat4e~sE4N*HRqOji;KH34aETaHj=X-)a9r8N}|#e;^tOB;#>45>WjRyWX$HohAYFdPl zs`;Ds=sHDDpim@afbL{OZHuV^Lk;>hB@)!txIdwR9J(kRiYSKa6r)%&t`e=GxRF$J zBCHx(G)M%XEov|a1yx-IHM2#d(;96N5m%upiBPMmZ^XBkXT>W`AR-Jc9^C+aPACx~ z6iFBgG@Xbx5r2;UJm>5@8$wWM(!hz8fC0LR)6LI81hGL=jH2s31Yz4pLwQQ;oPmZJ zsJ7ARpw9=KuWlC1rYBt%PSfS6OQ$1m*DUp#iRyFEGxJrKpSzvu^!_hatzKGMp=?J%9ji8g?eG@{s6`)^KZ7Xtkwu-6W6tVwCTH5Oe5 z;pUoir$1C<>AbZzrFGO=vPU622q>xp8>u@x&qvkan{^k4bEQ3(p4M4(YHL2aA7%sh z@5oc*DC-MA7v7rE#%x*VEh(+`mb3G`Zp(h|i2Lj<)8+pXw>Jc~g917V8YpI<+wpfu z{$5RKmj(Z0__nR%s2v)gfXFF+1HCFChI)pmXGT zq3Pr6!MG3dbwb!OJjp(+oqEjI$G)|y3b#)d2 z8xNS+k^#Ju63!HhLy^VE*cekok*266I?dtbVuq+GVhLbLS)AS}7+Ny2o-m>WI$IKm zwkq+E5;0)AU?k%aM-<+b5#~P5QrVnT;;{X|$xqiVt~ROWZiz6|a4Z^E;v0$UkQJwe zf;ZCRQi zkP<}AuVsaZ`g<@Q`+4dQkt&~)_K79?o4S<0=^SYX*rRUwh8bK;49IT_9DO& zOKFb*zHoa=`v%~BKubKOy#`p30Dp7fiO|`|YqyZ*BX^{sb%%xb?y~UHucfrFL%1980i?PA9;oAb zsH2|Jo(9|vW#0g8e7^kPR{hdz^9iVR#5ZiGkeH1Y7 zyReP}ssV!l=8?1W@3LiCknfJ5+N30P*k8w+uS0jjv_Y74-tuFx2^+&dng-^_95`2+ zbh<>SIRYja(3Ch@7me!XA61DUOR~{WQ81bW&qiRJ&4f)i=}`rrW6aP+2`CwHDhfr6 zX^E3Dl}tyOoZk;A&d_mMlF*`YhbD_{jfR3~11`sJSd}_ksU-pzhB4P^Dot@rn!?&O zMQ<{j>Eb{WCTI$XwBr{=V3LR#@$1hz-}e4%N}KBl&3z)!_-60t5MBZy#$H?Yq8;Mr z6`(J6g!l!4&w?WCQt z5_XDW!jxMM7gs_?!W4UL`RS4@DdDx$gg}F;gq=EV(MKwU>}Mpl@<(k3A*a6R$I%yc z>I+RPbk^@O zPgwIqKZMI1aUsBzP3N9WX)Xx8CoNyahuEr>#5QTuy%16m{_{zzPRc5@ zNJdI6fvm?5j4RqU%v0jEZ4>MR%d#8g!G4f{J|~b=z0*1`6GP zg1RjMK7p3pfR>czuoA&Mt} zMv2fS6?a5p6YL<7d0mE#4HiM1!zP^1&?(q|0q`7*@gmSKowDAyVEz@L@yDLh@%U51 z2km%_;ZxH*j{gnNubr~y2P}JI29Lj0{g$J=w}BpWrq{~pkjrz{)A z@fVK+JwBa&F3@@7*4&EuD}ny}_;migP=3Mqba__;y}-d=2lOIG`s;x%cEm3M+U1C6 zfaV=M{!TLfPEDp=z6auDM}GVnZ|d#o^gf7NI&S$T=9dAz+@Ws(>RUB#`5M+y5A6XZ#eo7^BaKPG(KJbJAv*Px7Ivd$E`qr-J!3`p%3G) zfWF_sZv*<__yj`-a`KjDaf3h1XD{r3#e&pPTq z(~$UD~|YsK>ve7|8Idl>?r>T(7$t}$6v%g>af4D@iX~9 z0DW?NdJi!H^atbC{_FIMN5|8*JEg6JrRHJ-qNg~25`=gG4!WDt1%NvCbX>or6LFa>8#luW38n@qImE&eDR#UWjDAh0;0 zh1Kw4BN&Fse)I!4JH4OMDkoD~353}IEbFjkgAn$;XVD1cD4o_pcR1*6HjQ=c{J;wL zd~o)=z*R2Nk6*1Q>q4zA7YoOTC>*(i{$ylBC=#rg5zhmSuN(Y$Q|`yt85QRkv)T2# zP5mk?T+=UQK3c;W`6-|ip^sICRqoSok0@rgH%uR)!I__%{q57N8fpy}J@Xw@t>JdO z0W*1LH0Dn?&Z%n`jDMRO>;TYHIz5)yE=FA`Z5+^70^w06DvU{8I}2vx-4LrQ?0{VUXtnKL+w@hkO*| zF{sN3pxZqy$G?M+psY#&bCaVyuyYO4r2w7ov+IF2# z#-LgB6mPeLv&Z^uxr}Ey+FXt5k8_9X$c}QF~cazDkHUHu=+Wa5#3#D_-KEU7c zAAvLl=jj8%E@v3hHl8&uRe1%=^N8xa0-#&Wzh!y3rS{O6^}yv!K;ABU%$IM?T()`6 z%{kATRY~L(+-z#8$Roa#^W5`h^~}D-wpIPa)Ks^#4b{+wGBcx9aKtL|wDc<`kFcE{ z0Q5lq?RL5KU~3gH3OIq^q#I27e0EZ>Z)z&Nzriv*_VYpZS@hrY{BhvXn{jxs(fX;_ zIB)yl`yVffOG5Tz~6u$hqPOuL509? z0r@rv-vB+ADH&)fAO`pW;2_|lbs1<0pdN4!pcn8eAR~~07{FSM} z*~9XPp~jmOSf>MeG@(}G>&o+`Y*vk>$)+aQ{Vm12$FeAFIWHtrMXMSy5-XL&`U^?D zOpk6Ti$;uiR9_i|llcW?sR~8ZL@n$qlZgvSZbjfGufji9IBym>*hem?gJQ{e^M!R~ zTvdW*C!RNDLX8BMLh|$XT|za=>uN3}*~b`=#K#{H$WpDumGFhM&8VrXJ#VrNO31GA z`IE*&hH7=}1wFyo^rxHl%@FL(a;2psGfb2vDnhz)jlmi+7all=G`v5xty8*ud90H62CIMF%P&Ysc zpdJtdbON>kdH{WZA;2);b-+nLRx$(40~7#?02H7EunN!!hygkP4<@ZT|Fs?VLijXb z2(TY83^)Q91sn%V;B?T3Ie>Y9s{us-3LpWN0jgUwKJAlP`ea*1joMrhNru-bdQvS# z-^KiDn0vmYZmei4g;~Ee7%VlS;ZlTFqcUAp;$_ir*qR(r^|YkI`oUifNMLHOG=H9l z?nY&h&`?cB0uA@t{IZY^WqrryRwfMuB+EyV&Aq32BAJaig$8lG2|2NC)ZORJQGVfV%5nZSddq;B^Il*VA$>Q*(b zE3udwtWgt5-9V*SS{;uDO0A0#gpOn`k3iEDJ+$epw*O0}Irrd`t{N;?193GB^+4$N zPWkf4Y59^lRjSf@mKt>5oNByw;C7+EnNtI;z~h3@%Rs}hCai&hJxZECJunEJoKtJ{ zh;0euY2NI`Kc+dmzuryrb)m2tO~Ra7mQ{O3Uv*^F>Z%$;-^!}f6Q$NEd>f{h#Z?tO zfGOxA(@4>Sn5#{5KhLsnoS^> zbuBpCsjOS^JZ^SD7+I4#-h=!7u%U@Y)V7d;o<#U+AreI>C&M3#u0!aHnaVo6_SR+w z?7M??nN3Z468|n$&uoe%jQ|RpVFKNr*@PQ|HfA>2+IMD#?Ocy$hShK&97E_alZrvT zpU#B7HKX@tCSvhW#Argl%uE<@Gu=xjh0~2?wl>+(2;p@EP+GpGw0b#BEh(?6!hSvv zWdED+rHYzW6;)7wyqm=PVvvOst%0~2;sY)i^+U)A?YC>B3~s($T!LLu7vAh*AHC3aJ}k! z)AfPtRSz;R1@S$K;<}jXrw8c+^n3JDW(8Bj46s!~ozN`Q%8l|5_ZJw;!_T*DYlJJZGN zVs}y+;6(e zJyo6t&vs9br_Zz3^QNajWW;i@N^B5s7atQx#8GiVyi8gq{aPNEukkMNmU(Nunm6X{ z@IK((>HV$uPu@J=wZ1xEgHQL}?c3&i$@hC7GA~E#Ajl;DjBFvlMm|RFC6~EsUF%$} zuFbCdT|b4sJ?@%tWm8vEH&WlAdZ}Mgf1s|S-Si#wL-Z5$Z|ExKT{fHhGxuHYJ3Vpv zZ@ma_bItp+d&#%SVd`Ne7 z%ZC~f!i#So`8;`ul$j*+5c9D6Tb?I98RFH@%KOCMi64qLOA+Z=>4@Z#SIOUpQM?@5 zdbjrx?+Iw1;=9ZDE8j8Pu9$W2TS~4ae@4DcE^v8W-*i3h%7Avku9hTHIURuewjVmwLV{?URm55xGNNTlQ`tXGwuEz^>E^|3^EprRAh1Ig;A zFVUm)XV}H;0qzgj(EAV?!S!@KMGa9$sduRNsV2IU-pl+7Eb}eq56oxT1?-J1$;xaE z+rq}!Z?QjQf5QG9*ywNB6YN}W5myHm`Y`u1u+LYxx43t?i}-7JieJjt^8x-5eh>dg zK3m8Wt`aJQ+k__Je(153a6))rxEL&Tf%`^xsk_$Q_M>1J>qj>zVtciT4{x}Mrx5ZO5c;7mkz=RPDxkF*UPuacgjD4aeP@mA|IDOlt1ge z)+>9z;%$OHgoX_wgufF#hx`KRB7aW4PZF-1U@UHRwYWCA_PLI@-UUy;lA@^<)K{q= zQhTX?gg$tWT1X4@m*{WOPtz~buhH+&g^b9oVxC}r!yE^1&0~G;t)BZl4|*Q){K)e- zSlBb3=RGe&{f~Iw@*MNL>-o@gv6v@b33j(gTq1I!S6n8p64!`p#U?Q#wu*O&TfrV5 z6dw_PBt9-aDLx}UFTO1PT0A1YB_0#s1v|Z1%9E~?u9g-_OC(P6f@iLR_OF$iz53K@YfOx4c}wS^lc5$%cHtyi?vK56L^c_%hf0NCUong+U(3La3f>AREab zsgXJvBMq{RY$rR&Eo3K2P=!q9ewby4=|l8kdW1d-mOe%wr^o3DdXh#= z7L(27GWpCrWFjsdo z+nDXl4yK3M3G;R@)5q*#`k4V{klD{1V1}7P%wcAPIm(POV_+fU%mg#ZAU2E5W^>tm zb{;#QEno?@kS$`1!Iv0TU?sMMEoUp)Dz=)fgPFep=Kdhe{yO-W!M3sOYzMoA?PR;y zZgv~Ho!!CqushjZY%kl#?qU1c0d^2(krcb1J-`mLhuFjH2z!(rWyjd#>^M8YPO^y0 z;JV)Dxn%y^Ln8{XcU5iCg?&;FoZUt zUFZy#2#^{xJ&F6`(XC#7YD>aaY#&w`^5v|uy{y346F4~Sg*&#>N%N%wiI57VBB@v+B}Nh?Nh*=brAnzvs+Q`cdZ|Hbl!B5b>Czsl zUmB1Gr6HJ2_Dct(Vd;=`SQ>#G&iAx%n1&XTj`TsdE!C(oA)WI`^Ki{xS% zmRMPkCAmZ{mn-Een0<6P1~X8b+zxBl7P(XIlDp+?@^*QL++)s4Bi>Q(xOdW@0Tp27E)l1HMDPqrNfUgby8ueHFewBP+>jn7@KB zUv-h&$sV$o+(QnMDRP)ROpcPr$w@NHmG7GGDs&aQ1Xqcx%2nrTbZM?Em}dx>T}WD@ z%jqh*9%dH}=9PAsQ@UX`>4AA<56mIhL$P;a&%|DdJra8(_C)N3*aNZmVb8-}hdmB^ z8}>BpW!S^8cVW-MUWGjhdlU8~>_ymvu=fmdL#F>=-@$%^eFpmr_7&_W*hjE`VBf%g zfqeq|1NH^%2iOO&{bSq5c8_fy+dH;(Z0Fd2L++G&zx#lD*nP--*gfJt>K=8ExsSWY-4pIfH}Yh8vOT$;wC$bC?$Wk)E*sk- zbxK`Qx3oj*k#dr9VAtDlUx#Y*){{I_LO9KQ7 z000OG0C{o2LXqUV)sVRW007E;e6yI5uB4 zG%jRpY}9=Tcoanz@N|+16Cm_(3C00RrMSJU84Tq|NZ$s znC_}qRj*#XdRJ9fm0VY8Nw!!lDe%uQESA+4_UE+x@4pK8*QMXuE|&kKy>r28!S~Ju z6KCBrH*?NicmDRS8*k4nyYY@Y?vyicnwfc*|BlRC?#OgsGa>W#J8zyjI6b{%7O$h! zW3k-4w3EfP{`qlcy@xG>FYJ_*)YCFpuvqrOzaAD#Cj7J5Df?FXAD@#L-uP$57pjmY zroWd&{eqH~D17`w^xb?+vV4pM>`9i-)8jf>C0GW=zdMsG3zB|>D7i_N?6V}x-IFZ# zn zL^3ho{Hs9xX0rN-=H@_dI7@xEFgO|$7#qTG(;0A8gNw&c#OEpaUuF_jY1!2l&RI2B zo=x~k_+KuE+kH0r&76H_nT3tDljFDdjCMz#wS)g3{Y{VpUuUkdK*zKrF#RQ^R#K|9 zo_~PH&^}4AcK%F&L~AC;@-*9KYyO7cf$ zN@_~~T+CJH*jT&6J*+;tKq{ycgSi4`_Wdw9$&zP8(y@P(o&o7mM4G8!XO74xdHYoB z@lO#IK@4UBpla1VrQQY)TkvhKnb{38L;L(4vFT;jt&l9K)@=n0f%Fn(|61fVNzsjl zfVJ#h!6LNni`Wn7rS~%oqg?D4r16u~^jn}NZDJTltV&YqWG|#m!!&1@4QL=@lL|hb z-(6C>OQA;jTTCz-A!*(rNjajWwE|eZb-<^LyWz1rf2_Cm=1&agUhviyr#JCkZ*DaV z8h0k72s zP9}@Ne_L<_#Na=X{SMb#e+>nJmvbKp(>@$zYGBU_vbZ24yK=e6)G@aEU(4A)Sfa7 zL^3oLhc{Y(w8ovU#$J>*Iz&Q z`Z~`BizlzjryP)!lSZXv#eQvc1N#PQQ#|1ZjMmmx*YQTr1v^|zKCOU1`7^h&$*1Vm zn%#B0x&knFi|$QQxHw4?-Mc-O%~D`rvXpaDD>{iR>Q1&xf&GWI?T^D-&IYftTT)tl zVL8j`!}$O(-f-t%`ILj26`nnLn*o`%(0#z@h*a;+%B9Hx9fThz{AQw1G#od#qO7c! z)YKA1Bjk@5m8DiBqG8B0*Yu&;RR@GOv}Z+u3ELA=J)d??8~-JHL{e(%ov5^-;;B^e z9+=*u=eXvjqKBpM%m!du*Y&Pxt{bM+^6@epSGS_PvC17lIF?t+U7$te@yIqdKkMsS z@ogQ4kI8F7Ph9m<)^hrNE2|QIeM+52*`_sh!6uI&!v7oFf1Rdjco%TM9C6izG-t(W zL0nPoR?1S!>x;WsY}KFQgWZx;SM2Dzyto?xE(jc`a8?*XU2)IuE^$Rw+7@VTd2tUl zn1yJ%s`sZXpO7XgdzTk?7grVA0{a8*w5q_Sisi*N!_lb~TlDt=4WjJPasXK%PfSFu zLEBLq(uIudE^&@;a8IF)A9QB1~qfkC! zR93{1km%=CHW-fooDeL&aLG0#qYGvVlFo-DJ7PE%5bFL}h9foF?@Jk}{3jTxHg|;L zK&rFKpE&A#!K$hu>UcI0aiE2DCumS!H7&m?&EH=lMQ=FL ziJ%~)Hsa`93QYl{n--0;sZNm70{gcGHf1g^PJ`DZIW@2aq^S*_Q{7N`e(kjFoCSYgli_&ncno!=CU79Pq9s#YQ6sKuRCWd4O=>E(rHJmM%27aI zWs>NjC)-K^o)GmpHZHgUb(5bMKAzBKz{ag?U3?iyqK-tO#TP1j49DPRLeX$+Y$EaW zL{+o~HyW;q^|^k-W*?2ylCL*W7q;^0w*mNR2C<4eYa#w>r#oQf8-IK{h8?T!7hVoa((ugR0QZ>3Gnt`GhP6*rY7+gvI;s%&v9)gEP&N7>;~ zj(U`DJj&^ncDX-?wf{J5-l3Hh@`W6hwDH?#g>Bj($o)7N+Wcp$a%HC6hl6CEt<{x+ z+?(eMXSB33N$$xrlM*vmrpVoSPD(UK+2slD6GLN@aqgn1aPpz`@n4Dmx=9BG4~e0L z09)tI8i}c;Ja;1hE#!ksnxt7ljx{Q0z=(vJK&pa!mxS$r1u{EpiZA?9Rs~I=?{)Ae zEOGt0a^{dgp^Xg4K&-uU`I$1m)?v{LbFp0 zzC*Y@ijI17W_hI;x(RZCFP#cQ%@Z`l;8IJh7KXS!fjkiG0Hz|TUF*|mEQl4?5gU_@ z;aWp%yc$Pp4RSGca2@%PSAe4h4nv``f*Pw>2xCF&M0D4fE$OXs{%<`?L=e3J-AQ$L z$uaQic9H55gCmpT293`|K5iUUgS?^*#xAITg(ZRFjN0H+`4Aq^cvGMV-(WkdknNqXNTky^)` zx)MEso%PFE$btO(iCJ?o{^@XbRE79X}Tn_kx9KgmDBpG%T=Dwaxxfzg4GapN0P4KTU@)iys zH)nbtrT&Iq2EuWJZy_0)fX~6hEU&Ny*f4xLjz1H$%?uJnRjxI?Eg11|EL(^jg$5<% z9jU$=7^?zt$}}9Ge#qKMS+E%2JR5A7imSC|M7`Pcv&yzZz|DsivWg6Pe_Hx#oL zuoS=*FEw@n(FTD)5AE|`%2FIpe2Xlp0ZSrwF_z@^OrTbXsFLbIbdTRlT%2d1tL*cI zpUs*9D1)Z+sgrPMfGTK`=q}^o8O&vmbO_W71)s=|khB%J^c5J^l24H_Zg6u}t}h(S znjyrYAH%#Qin;%F#DgZ6ZdB%z9K?33NzNT)4da}PJP?z&&{@4Ni6-_Qi#l+B2^_+$ zak|0XMmLbI;Bp{Lv5q=2x~jfmt_2{M+f;3rZCD3RfTrq9dU3NCC%s7cvgA{myZG)C zn4sb2Wy%jp6tad&VNhx-`Cp)A%={Tr*ct@ZaVd>gm-VRh2@S@6vwtO_&9c+2j>~qB z95-;$<=(OySD;4lh5I-q)s^X1#$}HUr|iav<9UkRr#NjsMY6}mv!J}cQ(jeV?7d1p z9Ifxm$jfc~8Mo?%EbqWY1H5I`u0XXQg&KX~9=tU#w$>nb#P+Nn7{X+zn%h!Jsm-l8 zq3yHA_n>?RjEtnb@5Uk8C9bkXJRq-vReoQ^iL1mAsvs#)oFN1Zp?71TxD*7-=|D{% zW_6)CxdX))hD1~4tEKQ9o1_+JKs6O7?h;p2Rh*a%hN=G*sv=k=_cE(VqiW8JyutWC z*eL%!G3)%u%5aJ6 zoQU{bZ=fp42MO-5v%yu-oHoA{tHb0bBTz$exJOlZVr7G?pke-EtPDy58RgDU zP$-;^MdjOEN<+A`p`s;i9{jGaXz4wF0x!2YQdc-#e#sq{)}!dEIMI9F`)<``cU5c2 zuE2gF)aVgcZSr3U@}c2;^ee67`U;k4e?}z9J}FR>?<=VBAIqzP4gfoj9G5@$7>sak zzy+OAQyOCSxd#ULKax5w1IAHY)h%$axS~aHiH}uB{!ZiJQ?JV|!5FSe%;(Am-W-@$ zrCyioDQH-f<1MRlLARvvFwTLlY$=>_m?G@;mYy`@r`VJ!b|9eyUWGi)r;g1~$7c%T zO7p6q3NidAjES;pVvOt}MwU?DEkK>htCDO=sa-FJ6hs5jiM#+6+SKv($iE0*lbe^2 z&{no8yQCrm#lQe5Tq-!14+Cf65zKQgf88cfWF5VgDE-zVaNQDvWV*TpS0ao@>}Z_@ z^5K8Bl#*8!`ES(!7Cd>4ZWvdt-OdJpO2Q;h zSOU&Dkv8u$rRMlvPpDD!)I|Mxz|!>^a9me6GF;@}(AJ)~`AVTf==Vt1z(vEQvIe4B z%6J&TOd?vJ8Y#3-?pB{%NOPb%L%R;7u~KZ4l-+FEC~sf%5#~45hvN^l5?3Vw>s?TI zhulpHdo#354ArX>GAc$)m(O3#1NT@1bxcwwWUzO@A##Z0&+8*$QjtGV7Re!`wpjm= zTVM)k0Tv9XUhr|C*eR$JvPVuBxTsMot0D230(?-MsZ2mNs6uX9U2j1v7C6AHE*6hN z^l6y{5$)18{)d=C_mC9V0OK5QsMh)s4DkyO#-ixME)QxYtm?!EU#G#nHv{mnNoBjF zoMs8Q_4iL=ve430Y)?S~_CgXkcK|!pxSy*6y(dW1tAm>rIrv;^BF_74F?!3Y}^cR?k zxJZXX=#x~ZP3;E%+wpaHApcT-ZlJ|-Uyn#;bi6R}{7|EO9)bl93b^JMIaVuoZNvfAeZNl)kWdN_ zOpRP(w&zo7P%lVGeGc z0?I`*A+Is=5|1}?t;y+U(#M>kJ~=(sWsnC_Sb~we3KVy#P|-3S*9IzDuJdQ3p2*I_ zXL(pfiwC=0O@M9q8Q|o>P)QQ6B#FxSw;?z#gh2tA40Y$T$fdZdYvff-=$~pXr;5SZ z=o;r=BnB&K3Qovae+B9uaaBhUns>-I!T%mH7^cQHi@_oQ_l3s_k*=u!z0i&)*eC`E zU@|lZ+On$)G5*4%Y;xr^U~6wQfk?zz3C65fIjr?+LjEOmXth@gj~1M7 z7J3(MEF8PIsL&^S3#a(kFsZT!ThlzN?Zl-da9F5Tkxt36JMUI|Mxq-Udrc3K4ZXl#Z@rLeHATT z<_$oR)7pitpsQm5O)m?MFm093*Ndfa`i*l1m<^yRdORcvJB&}U2gq6=oW^8mxAn$B znhce1tQY|VR>5U5RUWIPVu2uw!HWc(CA1!oqaSV5{|8JPP7AfWfj`J?!K9Of*xVw@;%_d$PozA%zUN zJMuANB(Ay+c{sSwAC$o0B{{cG*KmCpkzJn7H=@K5I<9|7CTVA+Q}Fe}-_eo@i-=#M=i-zd zf#%V&9rHRJr`5?|HcZL@(OvGOj>#T5X5hk$*rFScrXA6oN7x|5jcX+{8KrP%Fc~Lj zDr2&J;m%voiLG_j3oa<=Qtq~Um1}L0|H3S1Lq9n~d;fc~i|R$?dcYKz=fzWOKSDgv zoF;}^_!Mn3`Ny4Tu5{tZ6dyrktM#d*I03Ik7BN^xh6Bz!j~JSaFNmCaJ%|{fkuIEK zyHU>cSMyEbx=tvZEMHc5mwajARr1B;Q;nV1iNqW0F*r!_og^^4;JbT;2A8p)CM@?_ zPafv9u9G+8`(KTyfL$Z00Eb(6{;d}0k1Q@+^iR+dxxTV0z;dk8qgpA>=kky@7FCK+ z(bL~k+zMw!78lxBG~6M$V^#ID#1TEb(Mlxk{1nUEiA1*-Z_ z3$H5jc7jToE(TAh;-;@$kS5D6=|E0EQvCjwO-yT7gO|68!Oc6!_2LuXnzRsu4|3%T z7M&Pc61Ak6I+;h}@i2~?iQ{U zgJV;p6KIb%q`Qd#$hDOy#jEs=ZR-E#bhQ2pd9kaa^*_}bs~>3-1WJE~Hf?xZQa~G1 zm`g-k)<8*)d+$IdsRC>7eo3e?4p1}Ug~*Alt@{Da6!I-Zh>hC1Z(;mF@IwDyA>?6o6pD`;S1Q4IDy6`L4`lQO2kc5t4|{L9>LD_<;^>y&EJOm!n7NKBgUl)7PnfQE&WNV z-fsn_aE~k=DE=P9wvyVTzm0nf)q*L0blYFU@`W3>!swPYpK5?O5)Uh<=bk0epyf7;>;>kIfy z$!&=;nTK~Ve9#<+&*Cub^P`RYo;C7xVk6y+SosfyA1m);cROpZm}QF*xr;)U7~|9PtsI37JZ9_So>S8c6}SpguL5yg*kHlkJaHfwU?QRh27a>|$t|z!3PT8F3q9 z<7#Pv4V3J+n1*h8=^=(sUL*J<;HQbqDJz^y=&Y!rLgh+nH+@}mjCfC2evEh`d9;q1 zsR_h;?6g^aQP~fd-AOKwn&l7`h)it8Y6_FqPW*F;6sf3UZ*%6(#{iloBcohF-}eak435 zzF_N?`h{`W=#}v=J5SR3U!wmF-eradT!OnX?1y10an&5b8Elem%T3eI(s zC%@Le&4c!=JHJl8#+85gz8dHal=j!ehZdOq;jCz#=l?zQs?5I>yE3pTDg!Qyx{O#t zzyC{If8|`X>IeJxc)ev1>y|C@aCv2%cNz7nF|vsf`0?N+UtKs@9?Sgfp=iINZ+!`$ zz4kAorr*WrSF;5S3zW)%(*2?21qgOGbHM>+f3<07#^RAQ@c^$cVD{N9{{50#Y730G z$p3)^qBn3)pEUnF@Q?%gg0Hbg-ah+!j2V&*OAQq#z%#^k->`%ZFtUWg1Gb> zn0e{Swak4t>=APc3Cfp-r$-Jv;T zzoEy#l-y#SJci{{;)JyiVam3!(e{G8Vxv8Xm6a4n8&5W`G`ZZVY1ecQr3w&g|q!(PnE6+?Q=l!d;6_5s~P#&CE$_Lu9R z&M_S{a0{XQDp6xInB(vO=pz5RVKgMA#7;6F=Bvvt6qf?q>c2C1^F!F4h5P0e=HdR9 z*+1C$_#bV2nA!NHtnm)Mq6Ww<$Cc>9q4N2d{M{)tIkMEXn!a{u zZN(&HcO5yCr_MB@sUPvrA!740ZvSoE9K|_^p_jsmV(>-$1L<}`UQsQEdV!uHP7Utl8vn%;(aAgj zV+Di6AbuVZXdWyE=hBX+%UBJR^%43}O>J9(8t3?5gPA}or{bO@=*BYuseSwf=*TKT z-p0l7hO@BqFkt5<`Gxva+-n4;hdwO+dl}+@yTo7*?86)}di_ShqK>uu)C&W8l5kb2Px+GM(y`~nU^DKi8s8((B8b86Freatb=bd_Br%vy z56M6%axRM&+{on_l*gj!@a(E6%(_DieUF1Lu5xDyg*S?!nUJw|I#&d}QkWpa{lVWd zn@LjY!HfgbO$=TFpcO51#9$dc+#-fvXhlOG<;Rm;%)Cz_(`wuUbvdu}wNIi3{cxW2 z#3xaKIt=-8V0mR;Q*g5wx;)8Zi4#La9c@W6y6;rMz(nzjgQ$=H1m_G{>8-xpj=ZDORJf&+R|V)(!ZZ=(QSlb$%lo1h<^a>ebmr�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 literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/dist/maple_loader.jar b/tools/src/maple_loader/dist/maple_loader.jar new file mode 100644 index 0000000000000000000000000000000000000000..e1f9965c1ff0fe14384717ea4559c7f59e9a1ca6 GIT binary patch literal 32791 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 VEwG5^!#_X%TL6{zhrDw%{eMvMy}$qf literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/jars/jssc.jar b/tools/src/maple_loader/jars/jssc.jar new file mode 100644 index 0000000000000000000000000000000000000000..eb74f154a01c8c16712233cca36b65120ea47986 GIT binary patch literal 152418 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 @v>QJza{i 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�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 literal 0 HcmV?d00001 diff --git a/tools/src/maple_loader/manifest.mf b/tools/src/maple_loader/manifest.mf new file mode 100644 index 0000000..328e8e5 --- /dev/null +++ b/tools/src/maple_loader/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/tools/src/maple_loader/nbproject/build-impl.xml b/tools/src/maple_loader/nbproject/build-impl.xml new file mode 100644 index 0000000..080006a --- /dev/null +++ b/tools/src/maple_loader/nbproject/build-impl.xml @@ -0,0 +1,1413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/src/maple_loader/nbproject/genfiles.properties b/tools/src/maple_loader/nbproject/genfiles.properties new file mode 100644 index 0000000..1007bfc --- /dev/null +++ b/tools/src/maple_loader/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=2e6a03ba +build.xml.script.CRC32=4676ee6b +build.xml.stylesheet.CRC32=8064a381@1.75.2.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=2e6a03ba +nbproject/build-impl.xml.script.CRC32=392b3f79 +nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48 diff --git a/tools/src/maple_loader/nbproject/private/config.properties b/tools/src/maple_loader/nbproject/private/config.properties new file mode 100644 index 0000000..e69de29 diff --git a/tools/src/maple_loader/nbproject/private/private.properties b/tools/src/maple_loader/nbproject/private/private.properties new file mode 100644 index 0000000..ab05185 --- /dev/null +++ b/tools/src/maple_loader/nbproject/private/private.properties @@ -0,0 +1,6 @@ +compile.on.save=true +do.depend=false +do.jar=true +javac.debug=true +javadoc.preview=true +user.properties.file=C:\\Users\\rclark\\AppData\\Roaming\\NetBeans\\8.0.2\\build.properties diff --git a/tools/src/maple_loader/nbproject/private/private.xml b/tools/src/maple_loader/nbproject/private/private.xml new file mode 100644 index 0000000..9feb3fe --- /dev/null +++ b/tools/src/maple_loader/nbproject/private/private.xml @@ -0,0 +1,10 @@ + + + + + + file:/C:/Users/rclark/Desktop/maple-asp-master/installer/maple_loader/src/CliTemplate/CliMain.java + file:/C:/Users/rclark/Desktop/maple-asp-master/installer/maple_loader/src/CliTemplate/DFUUploader.java + + + diff --git a/tools/src/maple_loader/nbproject/project.properties b/tools/src/maple_loader/nbproject/project.properties new file mode 100644 index 0000000..984cc6a --- /dev/null +++ b/tools/src/maple_loader/nbproject/project.properties @@ -0,0 +1,79 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=maple_loader +application.vendor=bob +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/maple_loader.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +file.reference.jssc.jar=dist/lib/jssc.jar +file.reference.jssc.jar-1=jars/jssc.jar +includes=** +jar.compress=false +javac.classpath=\ + ${file.reference.jssc.jar}:\ + ${file.reference.jssc.jar-1} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.7 +javac.target=1.7 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=CliTemplate.CliMain +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/tools/src/maple_loader/nbproject/project.xml b/tools/src/maple_loader/nbproject/project.xml new file mode 100644 index 0000000..076fe22 --- /dev/null +++ b/tools/src/maple_loader/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + maple_loader + + + + + + + + + diff --git a/tools/src/maple_loader/src/CliTemplate/CliMain.java b/tools/src/maple_loader/src/CliTemplate/CliMain.java new file mode 100644 index 0000000..c7dc9f0 --- /dev/null +++ b/tools/src/maple_loader/src/CliTemplate/CliMain.java @@ -0,0 +1,60 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package CliTemplate; + +import java.io.IOException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import processing.app.Preferences; + +//import processing.app.I18n; +import processing.app.helpers.ProcessUtils; + +/** + * + * @author cousinr + */ +public class CliMain { + + + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + + String comPort = args[0]; // + String altIf = args[1]; // + String usbID = args[2]; // "1EAF:0003"; + String binFile = args[3]; // bin file + + System.out.println("maple_loader v0.1"); + + Preferences.set ("serial.port",comPort); + Preferences.set ("serial.parity","N"); + Preferences.setInteger ("serial.databits", 8); + Preferences.setInteger ("serial.debug_rate",9600); + Preferences.setInteger ("serial.stopbits",1); + + Preferences.setInteger ("programDelay",1200); + + Preferences.set ("upload.usbID", usbID); + Preferences.set ("upload.altID", altIf); + Preferences.setBoolean ("upload.auto_reset", true); + Preferences.setBoolean ("upload.verbose", false); + + // + DFUUploader dfuUploader = new DFUUploader(); + try { + //dfuUploader.uploadViaDFU(binFile); + dfuUploader.uploadViaDFU(binFile); + } catch (Exception e) + { + System.err.print (MessageFormat.format("an error occurred! {0}\n", e.getMessage())); + } + } +} diff --git a/tools/src/maple_loader/src/CliTemplate/DFUUploader.java b/tools/src/maple_loader/src/CliTemplate/DFUUploader.java new file mode 100644 index 0000000..3dee0b4 --- /dev/null +++ b/tools/src/maple_loader/src/CliTemplate/DFUUploader.java @@ -0,0 +1,345 @@ +/* + DFUUploader - uploader implementation using DFU + + Copyright (c) 2010 + Andrew Meyer + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +package CliTemplate; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import processing.app.Preferences; +import processing.app.Serial; +import processing.app.debug.MessageConsumer; +import processing.app.debug.MessageSiphon; +import processing.app.debug.RunnerException; + +/** + * + * @author bob + */ +public class DFUUploader implements MessageConsumer { + + boolean firstErrorFound; + boolean secondErrorFound; + // part of the PdeMessageConsumer interface + boolean notFoundError; + boolean verbose; + RunnerException exception; + + static final String SUPER_BADNESS = + "Compiler error!"; + + public boolean uploadUsingPreferences(String binPath, boolean verbose) + throws RunnerException { + + this.verbose = verbose; + + return uploadViaDFU(binPath); + } + + // works with old and new versions of dfu-util + private boolean found_device (String dfuData, String usbID) + { + return dfuData.contains(("Found DFU: [0x"+usbID.substring(0,4)).toUpperCase()) || + dfuData.contains(("Found DFU: ["+usbID.substring(0,4)).toUpperCase()); + } + + public boolean uploadViaDFU (String binPath) + throws RunnerException { + + this.verbose = Preferences.getBoolean ("upload.verbose"); + + /* todo, check for size overruns! */ + String fileType="bin"; + + if (fileType.equals("bin")) { + String usbID = Preferences.get("upload.usbID"); + if (usbID == null) { + /* fall back on default */ + /* this isnt great because is default Avrdude or dfu-util? */ + usbID = Preferences.get("upload.usbID"); + } + + /* if auto-reset, then emit the reset pulse on dtr/rts */ + if (Preferences.get("upload.auto_reset") != null) { + if (Preferences.get("upload.auto_reset").toLowerCase().equals("true")) { + System.out.println("Resetting to bootloader via DTR pulse"); + emitResetPulse(); + } + } else { + System.out.println("Resetting to bootloader via DTR pulse"); + emitResetPulse(); + } + + String dfuList = new String(); + List commandCheck = new ArrayList(); + commandCheck.add("dfu-util"); + commandCheck.add("-l"); + long startChecking = System.currentTimeMillis(); + System.out.println("Searching for DFU device [" + usbID + "]..."); + do { + try { + Thread.sleep(100); + } catch (InterruptedException e) {} + dfuList = executeCheckCommand(commandCheck); + //System.out.println(dfuList); + } + while ( !found_device (dfuList.toUpperCase(), usbID) && (System.currentTimeMillis() - startChecking < 7000)); + + if ( !found_device (dfuList.toUpperCase(), usbID) ) + { + System.out.println(dfuList); + System.err.println("Couldn't find the DFU device: [" + usbID + "]"); + return false; + } + System.out.println("Found it!"); + + /* todo, add handle to let user choose altIf at upload time! */ + String altIf = Preferences.get("upload.altID"); + + List commandDownloader = new ArrayList(); + commandDownloader.add("dfu-util"); + commandDownloader.add("-a "+altIf); + commandDownloader.add("-R"); + commandDownloader.add("-d "+usbID); + commandDownloader.add("-D"+ binPath); //"./thisbin.bin"); + + return executeUploadCommand(commandDownloader); + } + + System.err.println("Only .bin files are supported at this time"); + return false; + } + + /* we need to ensure both RTS and DTR are low to start, + then pulse DTR on its own. This is the reset signal + maple responds to + */ + private void emitResetPulse() throws RunnerException { + + /* wait a while for the device to reboot */ + int programDelay = Preferences.getInteger("programDelay"); + + try { + Serial serialPort = new Serial(); + + // try to toggle DTR/RTS (old scheme) + serialPort.setRTS(false); + serialPort.setDTR(false); + serialPort.setDTR(true); + try { + Thread.sleep(50); + } catch (InterruptedException e) {} + serialPort.setDTR(false); + + // try magic number + serialPort.setRTS(true); + serialPort.setDTR(true); + try { + Thread.sleep(50); + } catch (InterruptedException e) {} + serialPort.setDTR(false); + try { + Thread.sleep(50); + } catch (InterruptedException e) {} + serialPort.write("1EAF"); + try { + Thread.sleep(50); + } catch (InterruptedException e) {} + serialPort.dispose(); + + } catch(Exception e) { + System.err.println("Reset via USB Serial Failed! Did you select the right serial port?\nAssuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...\n"); + } + } + + protected String executeCheckCommand(Collection commandDownloader) + throws RunnerException + { + firstErrorFound = false; // haven't found any errors yet + secondErrorFound = false; + notFoundError = false; + int result=0; // pre-initialized to quiet a bogus warning from jikes + + String userdir = System.getProperty("user.dir") + File.separator; + String returnStr = new String(); + + try { + String[] commandArray = new String[commandDownloader.size()]; + commandDownloader.toArray(commandArray); + + String armBasePath; + + //armBasePath = new String(Base.getHardwarePath() + "/tools/arm/bin/"); + armBasePath = ""; + + commandArray[0] = armBasePath + commandArray[0]; + + if (verbose || Preferences.getBoolean("upload.verbose")) { + for(int i = 0; i < commandArray.length; i++) { + System.out.print(commandArray[i] + " "); + } + System.out.println(); + } + + Process process = Runtime.getRuntime().exec(commandArray); + BufferedReader stdInput = new BufferedReader(new + InputStreamReader(process.getInputStream())); + BufferedReader stdError = new BufferedReader(new + InputStreamReader(process.getErrorStream())); + + // wait for the process to finish. if interrupted + // before waitFor returns, continue waiting + // + boolean busy = true; + while (busy) { + try { + result = process.waitFor(); + busy = false; + } catch (InterruptedException intExc) { + } + } + + String s; + while ((s = stdInput.readLine()) != null) { + returnStr += s + "\n"; + } + + process.destroy(); + + if(exception!=null) { + exception.hideStackTrace(); + throw exception; + } + if(result!=0) return "Error!"; + } catch (Exception e) { + e.printStackTrace(); + } + //System.out.println("result2 is "+result); + // if the result isn't a known, expected value it means that something + // is fairly wrong, one possibility is that jikes has crashed. + // + if (exception != null) throw exception; + + if ((result != 0) && (result != 1 )) { + exception = new RunnerException(SUPER_BADNESS); + } + + return returnStr; // ? true : false; + + } + + // Need to overload this from Uploader to use the system-wide dfu-util + protected boolean executeUploadCommand(Collection commandDownloader) + throws RunnerException + { + firstErrorFound = false; // haven't found any errors yet + secondErrorFound = false; + notFoundError = false; + int result=0; // pre-initialized to quiet a bogus warning from jikes + + String userdir = System.getProperty("user.dir") + File.separator; + + try { + String[] commandArray = new String[commandDownloader.size()]; + commandDownloader.toArray(commandArray); + + String armBasePath; + + //armBasePath = new String(Base.getHardwarePath() + "/tools/arm/bin/"); + armBasePath = ""; + + commandArray[0] = armBasePath + commandArray[0]; + + if (verbose || Preferences.getBoolean("upload.verbose")) { + for(int i = 0; i < commandArray.length; i++) { + System.out.print(commandArray[i] + " "); + } + System.out.println(); + } + + Process process = Runtime.getRuntime().exec(commandArray); + new MessageSiphon(process.getInputStream(), this); + new MessageSiphon(process.getErrorStream(), this); + + // wait for the process to finish. if interrupted + // before waitFor returns, continue waiting + // + boolean compiling = true; + while (compiling) { + try { + result = process.waitFor(); + compiling = false; + } catch (InterruptedException intExc) { + } + } + if(exception!=null) { + exception.hideStackTrace(); + throw exception; + } + if(result!=0) + return false; + } catch (Exception e) { + e.printStackTrace(); + } + //System.out.println("result2 is "+result); + // if the result isn't a known, expected value it means that something + // is fairly wrong, one possibility is that jikes has crashed. + // + if (exception != null) throw exception; + + if ((result != 0) && (result != 1 )) { + exception = new RunnerException(SUPER_BADNESS); + //editor.error(exception); + //PdeBase.openURL(BUGS_URL); + //throw new PdeException(SUPER_BADNESS); + } + + return (result == 0); // ? true : false; + + } + + // deal with messages from dfu-util... + public void message(String s) { + + if(s.indexOf("dfu-util - (C) ") != -1) { return; } + if(s.indexOf("This program is Free Software and has ABSOLUTELY NO WARRANTY") != -1) { return; } + + if(s.indexOf("No DFU capable USB device found") != -1) { + System.err.print(s); + exception = new RunnerException("Problem uploading via dfu-util: No Maple found"); + return; + } + + if(s.indexOf("Operation not perimitted") != -1) { + System.err.print(s); + exception = new RunnerException("Problem uploading via dfu-util: Insufficient privilages"); + return; + } + + // else just print everything... + System.out.print(s); + } + +} diff --git a/tools/src/maple_loader/src/CliTemplate/ExecCommand.java b/tools/src/maple_loader/src/CliTemplate/ExecCommand.java new file mode 100644 index 0000000..3d6c106 --- /dev/null +++ b/tools/src/maple_loader/src/CliTemplate/ExecCommand.java @@ -0,0 +1,119 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package CliTemplate; + +import java.io.IOException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; + +import processing.app.debug.MessageConsumer; +import processing.app.debug.MessageSiphon; +import processing.app.debug.RunnerException; +import processing.app.helpers.ProcessUtils; + +/** + * + * @author cousinr + */ +public class ExecCommand implements MessageConsumer { + + private boolean verbose = true; + private boolean firstErrorFound; + private boolean secondErrorFound; + private RunnerException exception; + + /** + * Either succeeds or throws a RunnerException fit for public consumption. + * + * @param command + * @throws RunnerException + */ + public void execAsynchronously(String[] command) throws RunnerException { + + // eliminate any empty array entries + List stringList = new ArrayList<>(); + for (String string : command) { + string = string.trim(); + if (string.length() != 0) + stringList.add(string); + } + command = stringList.toArray(new String[stringList.size()]); + if (command.length == 0) + return; + int result = 0; + + if (verbose) { + for (String c : command) + System.out.print(c + " "); + System.out.println(); + } + + firstErrorFound = false; // haven't found any errors yet + secondErrorFound = false; + + Process process; + try { + process = ProcessUtils.exec(command); + } catch (IOException e) { + RunnerException re = new RunnerException(e.getMessage()); + re.hideStackTrace(); + throw re; + } + + MessageSiphon in = new MessageSiphon(process.getInputStream(), this); + MessageSiphon err = new MessageSiphon(process.getErrorStream(), this); + + // wait for the process to finish. if interrupted + // before waitFor returns, continue waiting + boolean compiling = true; + while (compiling) { + try { + in.join(); + err.join(); + result = process.waitFor(); + //System.out.println("result is " + result); + compiling = false; + } catch (InterruptedException ignored) { } + } + + // an error was queued up by message(), barf this back to compile(), + // which will barf it back to Editor. if you're having trouble + // discerning the imagery, consider how cows regurgitate their food + // to digest it, and the fact that they have five stomaches. + // + //System.out.println("throwing up " + exception); + if (exception != null) + throw exception; + + if (result > 1) { + // a failure in the tool (e.g. unable to locate a sub-executable) + System.err.println(MessageFormat.format("{0} returned {1}", command[0], result)); + } + + if (result != 0) { + RunnerException re = new RunnerException(MessageFormat.format("exit code: {0}", result)); + re.hideStackTrace(); + throw re; + } + } + + /** + * Part of the MessageConsumer interface, this is called + * whenever a piece (usually a line) of error message is spewed + * out from the compiler. The errors are parsed for their contents + * and line number, which is then reported back to Editor. + * @param s + */ + @Override + public void message(String s) { + int i; + + + System.err.print(s); + } + +} diff --git a/tools/src/maple_loader/src/processing/app/Base.java b/tools/src/maple_loader/src/processing/app/Base.java new file mode 100644 index 0000000..c3a174d --- /dev/null +++ b/tools/src/maple_loader/src/processing/app/Base.java @@ -0,0 +1,53 @@ +/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Processing project - http://processing.org + + Copyright (c) 2004-10 Ben Fry and Casey Reas + Copyright (c) 2001-04 Massachusetts Institute of Technology + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +package processing.app; + + +/** + * The base class for the main processing application. + * Primary role of this class is for platform identification and + * general interaction with the system (launching URLs, loading + * files and images, etc) that comes from that. + */ +public class Base { + + /** + * returns true if running on windows. + */ + static public boolean isWindows() { + //return PApplet.platform == PConstants.WINDOWS; + return System.getProperty("os.name").indexOf("Windows") != -1; + } + + + /** + * true if running on linux. + */ + static public boolean isLinux() { + //return PApplet.platform == PConstants.LINUX; + return System.getProperty("os.name").indexOf("Linux") != -1; + } + + + +} diff --git a/tools/src/maple_loader/src/processing/app/Preferences.java b/tools/src/maple_loader/src/processing/app/Preferences.java new file mode 100644 index 0000000..6368e38 --- /dev/null +++ b/tools/src/maple_loader/src/processing/app/Preferences.java @@ -0,0 +1,157 @@ +/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Processing project - http://processing.org + + Copyright (c) 2004-09 Ben Fry and Casey Reas + Copyright (c) 2001-04 Massachusetts Institute of Technology + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +package processing.app; + +import java.io.*; +import java.util.*; + + +/** + * Storage class for user preferences and environment settings. + *

    + * This class no longer uses the Properties class, since + * properties files are iso8859-1, which is highly likely to + * be a problem when trying to save sketch folders and locations. + *

    + * The GUI portion in here is really ugly, as it uses exact layout. This was + * done in frustration one evening (and pre-Swing), but that's long since past, + * and it should all be moved to a proper swing layout like BoxLayout. + *

    + * This is very poorly put together, that the preferences panel and the actual + * preferences i/o is part of the same code. But there hasn't yet been a + * compelling reason to bother with the separation aside from concern about + * being lectured by strangers who feel that it doesn't look like what they + * learned in CS class. + *

    + * Would also be possible to change this to use the Java Preferences API. + * Some useful articles + * here and + * here. + * However, haven't implemented this yet for lack of time, but more + * importantly, because it would entail writing to the registry (on Windows), + * or an obscure file location (on Mac OS X) and make it far more difficult to + * find the preferences to tweak them by hand (no! stay out of regedit!) + * or to reset the preferences by simply deleting the preferences.txt file. + */ +public class Preferences { + + // what to call the feller + + static final String PREFS_FILE = "preferences.txt"; + + + // prompt text stuff + + static final String PROMPT_YES = "Yes"; + static final String PROMPT_NO = "No"; + static final String PROMPT_CANCEL = "Cancel"; + static final String PROMPT_OK = "OK"; + static final String PROMPT_BROWSE = "Browse"; + + /** + * Standardized width for buttons. Mac OS X 10.3 wants 70 as its default, + * Windows XP needs 66, and my Ubuntu machine needs 80+, so 80 seems proper. + */ + static public int BUTTON_WIDTH = 80; + + /** + * Standardized button height. Mac OS X 10.3 (Java 1.4) wants 29, + * presumably because it now includes the blue border, where it didn't + * in Java 1.3. Windows XP only wants 23 (not sure what default Linux + * would be). Because of the disparity, on Mac OS X, it will be set + * inside a static block. + */ + static public int BUTTON_HEIGHT = 24; + + // value for the size bars, buttons, etc + + static final int GRID_SIZE = 33; + + + // indents and spacing standards. these probably need to be modified + // per platform as well, since macosx is so huge, windows is smaller, + // and linux is all over the map + + static final int GUI_BIG = 13; + static final int GUI_BETWEEN = 10; + static final int GUI_SMALL = 6; + + + + // data model + + static Hashtable table = new Hashtable();; + static File preferencesFile; + + + static protected void init(String commandLinePrefs) { + + + } + + + public Preferences() { + + } + + // ................................................................. + + // ................................................................. + + // ................................................................. + + // ................................................................. + + + + static public String get(String attribute) { + return (String) table.get(attribute); + } + + static public void set(String attribute, String value) { + table.put(attribute, value); + } + + + static public boolean getBoolean(String attribute) { + String value = get(attribute); + return (new Boolean(value)).booleanValue(); + } + + + static public void setBoolean(String attribute, boolean value) { + set(attribute, value ? "true" : "false"); + } + + + static public int getInteger(String attribute) { + return Integer.parseInt(get(attribute)); + } + + + static public void setInteger(String key, int value) { + set(key, String.valueOf(value)); + } + +} diff --git a/tools/src/maple_loader/src/processing/app/Serial.java b/tools/src/maple_loader/src/processing/app/Serial.java new file mode 100644 index 0000000..04566a7 --- /dev/null +++ b/tools/src/maple_loader/src/processing/app/Serial.java @@ -0,0 +1,527 @@ +/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + PSerial - class for serial port goodness + Part of the Processing project - http://processing.org + + Copyright (c) 2004 Ben Fry & Casey Reas + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +package processing.app; +//import processing.core.*; + + +import java.io.*; +import java.text.MessageFormat; +import java.util.*; +import jssc.SerialPort; +import jssc.SerialPortEvent; +import jssc.SerialPortEventListener; +import jssc.SerialPortException; +import jssc.SerialPortList; +import processing.app.debug.MessageConsumer; + + +public class Serial implements SerialPortEventListener { + + //PApplet parent; + + // properties can be passed in for default values + // otherwise defaults to 9600 N81 + + // these could be made static, which might be a solution + // for the classloading problem.. because if code ran again, + // the static class would have an object that could be closed + + SerialPort port; + + int rate; + int parity; + int databits; + int stopbits; + boolean monitor = false; + + // read buffer and streams + + InputStream input; + OutputStream output; + + byte buffer[] = new byte[32768]; + int bufferIndex; + int bufferLast; + + MessageConsumer consumer; + + public Serial(boolean monitor) throws SerialException { + this(Preferences.get("serial.port"), + Preferences.getInteger("serial.debug_rate"), + Preferences.get("serial.parity").charAt(0), + Preferences.getInteger("serial.databits"), + new Float(Preferences.get("serial.stopbits")).floatValue()); + this.monitor = monitor; + } + + public Serial() throws SerialException { + this(Preferences.get("serial.port"), + Preferences.getInteger("serial.debug_rate"), + Preferences.get("serial.parity").charAt(0), + Preferences.getInteger("serial.databits"), + new Float(Preferences.get("serial.stopbits")).floatValue()); + } + + public Serial(int irate) throws SerialException { + this(Preferences.get("serial.port"), irate, + Preferences.get("serial.parity").charAt(0), + Preferences.getInteger("serial.databits"), + new Float(Preferences.get("serial.stopbits")).floatValue()); + } + + public Serial(String iname, int irate) throws SerialException { + this(iname, irate, Preferences.get("serial.parity").charAt(0), + Preferences.getInteger("serial.databits"), + new Float(Preferences.get("serial.stopbits")).floatValue()); + } + + public Serial(String iname) throws SerialException { + this(iname, Preferences.getInteger("serial.debug_rate"), + Preferences.get("serial.parity").charAt(0), + Preferences.getInteger("serial.databits"), + new Float(Preferences.get("serial.stopbits")).floatValue()); + } + + public Serial(String iname, int irate, + char iparity, int idatabits, float istopbits) + throws SerialException { + //if (port != null) port.close(); + //this.parent = parent; + //parent.attach(this); + + this.rate = irate; + + parity = SerialPort.PARITY_NONE; + if (iparity == 'E') parity = SerialPort.PARITY_EVEN; + if (iparity == 'O') parity = SerialPort.PARITY_ODD; + + this.databits = idatabits; + + stopbits = SerialPort.STOPBITS_1; + if (istopbits == 1.5f) stopbits = SerialPort.STOPBITS_1_5; + if (istopbits == 2) stopbits = SerialPort.STOPBITS_2; + + try { + port = new SerialPort(iname); + port.openPort(); + port.setParams(rate, databits, stopbits, parity, true, true); + port.addEventListener(this); + } catch (Exception e) { + throw new SerialException(MessageFormat.format("Error opening serial port ''{0}''.", iname), e); + } + + if (port == null) { + throw new SerialException("Serial port '" + iname + "' not found. Did you select the right one from the Tools > Serial Port menu?"); + } + } + + + public void setup() { + //parent.registerCall(this, DISPOSE); + } + + public void dispose() throws IOException { + if (port != null) { + try { + if (port.isOpened()) { + port.closePort(); // close the port + } + } catch (SerialPortException e) { + throw new IOException(e); + } finally { + port = null; + } + } + } + + public void addListener(MessageConsumer consumer) { + this.consumer = consumer; + } + + public synchronized void serialEvent(SerialPortEvent serialEvent) { + if (serialEvent.isRXCHAR()) { + try { + byte[] buf = port.readBytes(serialEvent.getEventValue()); + if (buf.length > 0) { + if (bufferLast == buffer.length) { + byte temp[] = new byte[bufferLast << 1]; + System.arraycopy(buffer, 0, temp, 0, bufferLast); + buffer = temp; + } + if (monitor) { + System.out.print(new String(buf)); + } + if (this.consumer != null) { + this.consumer.message(new String(buf)); + } + } + } catch (SerialPortException e) { + errorMessage("serialEvent", e); + } + } + } + + + /** + * Returns the number of bytes that have been read from serial + * and are waiting to be dealt with by the user. + */ + public synchronized int available() { + return (bufferLast - bufferIndex); + } + + + /** + * Ignore all the bytes read so far and empty the buffer. + */ + public synchronized void clear() { + bufferLast = 0; + bufferIndex = 0; + } + + + /** + * Returns a number between 0 and 255 for the next byte that's + * waiting in the buffer. + * Returns -1 if there was no byte (although the user should + * first check available() to see if things are ready to avoid this) + */ + public synchronized int read() { + if (bufferIndex == bufferLast) return -1; + + int outgoing = buffer[bufferIndex++] & 0xff; + if (bufferIndex == bufferLast) { // rewind + bufferIndex = 0; + bufferLast = 0; + } + return outgoing; + } + + + /** + * Returns the next byte in the buffer as a char. + * Returns -1, or 0xffff, if nothing is there. + */ + public synchronized char readChar() { + if (bufferIndex == bufferLast) return (char)(-1); + return (char) read(); + } + + + /** + * Return a byte array of anything that's in the serial buffer. + * Not particularly memory/speed efficient, because it creates + * a byte array on each read, but it's easier to use than + * readBytes(byte b[]) (see below). + */ + public synchronized byte[] readBytes() { + if (bufferIndex == bufferLast) return null; + + int length = bufferLast - bufferIndex; + byte outgoing[] = new byte[length]; + System.arraycopy(buffer, bufferIndex, outgoing, 0, length); + + bufferIndex = 0; // rewind + bufferLast = 0; + return outgoing; + } + + + /** + * Grab whatever is in the serial buffer, and stuff it into a + * byte buffer passed in by the user. This is more memory/time + * efficient than readBytes() returning a byte[] array. + *

    + * Returns an int for how many bytes were read. If more bytes + * are available than can fit into the byte array, only those + * that will fit are read. + */ + public synchronized int readBytes(byte outgoing[]) { + if (bufferIndex == bufferLast) return 0; + + int length = bufferLast - bufferIndex; + if (length > outgoing.length) length = outgoing.length; + System.arraycopy(buffer, bufferIndex, outgoing, 0, length); + + bufferIndex += length; + if (bufferIndex == bufferLast) { + bufferIndex = 0; // rewind + bufferLast = 0; + } + return length; + } + + + /** + * Reads from the serial port into a buffer of bytes up to and + * including a particular character. If the character isn't in + * the serial buffer, then 'null' is returned. + */ + public synchronized byte[] readBytesUntil(int interesting) { + if (bufferIndex == bufferLast) return null; + byte what = (byte)interesting; + + int found = -1; + for (int k = bufferIndex; k < bufferLast; k++) { + if (buffer[k] == what) { + found = k; + break; + } + } + if (found == -1) return null; + + int length = found - bufferIndex + 1; + byte outgoing[] = new byte[length]; + System.arraycopy(buffer, bufferIndex, outgoing, 0, length); + + bufferIndex = 0; // rewind + bufferLast = 0; + return outgoing; + } + + + /** + * Reads from the serial port into a buffer of bytes until a + * particular character. If the character isn't in the serial + * buffer, then 'null' is returned. + *

    + * If outgoing[] is not big enough, then -1 is returned, + * and an error message is printed on the console. + * If nothing is in the buffer, zero is returned. + * If 'interesting' byte is not in the buffer, then 0 is returned. + */ + public synchronized int readBytesUntil(int interesting, byte outgoing[]) { + if (bufferIndex == bufferLast) return 0; + byte what = (byte)interesting; + + int found = -1; + for (int k = bufferIndex; k < bufferLast; k++) { + if (buffer[k] == what) { + found = k; + break; + } + } + if (found == -1) return 0; + + int length = found - bufferIndex + 1; + if (length > outgoing.length) { + System.err.println("readBytesUntil() byte buffer is" + + " too small for the " + length + + " bytes up to and including char " + interesting); + return -1; + } + //byte outgoing[] = new byte[length]; + System.arraycopy(buffer, bufferIndex, outgoing, 0, length); + + bufferIndex += length; + if (bufferIndex == bufferLast) { + bufferIndex = 0; // rewind + bufferLast = 0; + } + return length; + } + + + /** + * Return whatever has been read from the serial port so far + * as a String. It assumes that the incoming characters are ASCII. + *

    + * If you want to move Unicode data, you can first convert the + * String to a byte stream in the representation of your choice + * (i.e. UTF8 or two-byte Unicode data), and send it as a byte array. + */ + public synchronized String readString() { + if (bufferIndex == bufferLast) return null; + return new String(readBytes()); + } + + + /** + * Combination of readBytesUntil and readString. See caveats in + * each function. Returns null if it still hasn't found what + * you're looking for. + *

    + * If you want to move Unicode data, you can first convert the + * String to a byte stream in the representation of your choice + * (i.e. UTF8 or two-byte Unicode data), and send it as a byte array. + */ + public synchronized String readStringUntil(int interesting) { + byte b[] = readBytesUntil(interesting); + if (b == null) return null; + return new String(b); + } + + + /** + * This will handle both ints, bytes and chars transparently. + */ + public void write(int what) { // will also cover char + try { + port.writeInt(what & 0xff); + } catch (SerialPortException e) { + errorMessage("write", e); + } + } + + + public void write(byte bytes[]) { + try { + port.writeBytes(bytes); + } catch (SerialPortException e) { + errorMessage("write", e); + } + } + + + /** + * Write a String to the output. Note that this doesn't account + * for Unicode (two bytes per char), nor will it send UTF8 + * characters.. It assumes that you mean to send a byte buffer + * (most often the case for networking and serial i/o) and + * will only use the bottom 8 bits of each char in the string. + * (Meaning that internally it uses String.getBytes) + *

    + * If you want to move Unicode data, you can first convert the + * String to a byte stream in the representation of your choice + * (i.e. UTF8 or two-byte Unicode data), and send it as a byte array. + */ + public void write(String what) { + write(what.getBytes()); + } + + public void setDTR(boolean state) { + try { + port.setDTR(state); + } catch (SerialPortException e) { + errorMessage("setDTR", e); + } + } + + public void setRTS(boolean state) { + try { + port.setRTS(state); + } catch (SerialPortException e) { + errorMessage("setRTS", e); + } + } + + static public List list() { + return Arrays.asList(SerialPortList.getPortNames()); + } + + + /** + * General error reporting, all corraled here just in case + * I think of something slightly more intelligent to do. + */ + static public void errorMessage(String where, Throwable e) { + System.err.println("Error inside Serial." + where + "()"); + e.printStackTrace(); + } +} + + + /* + class SerialMenuListener implements ItemListener { + //public SerialMenuListener() { } + + public void itemStateChanged(ItemEvent e) { + int count = serialMenu.getItemCount(); + for (int i = 0; i < count; i++) { + ((CheckboxMenuItem)serialMenu.getItem(i)).setState(false); + } + CheckboxMenuItem item = (CheckboxMenuItem)e.getSource(); + item.setState(true); + String name = item.getLabel(); + //System.out.println(item.getLabel()); + PdeBase.properties.put("serial.port", name); + //System.out.println("set to " + get("serial.port")); + } + } + */ + + + /* + protected Vector buildPortList() { + // get list of names for serial ports + // have the default port checked (if present) + Vector list = new Vector(); + + //SerialMenuListener listener = new SerialMenuListener(); + boolean problem = false; + + // if this is failing, it may be because + // lib/javax.comm.properties is missing. + // java is weird about how it searches for java.comm.properties + // so it tends to be very fragile. i.e. quotes in the CLASSPATH + // environment variable will hose things. + try { + //System.out.println("building port list"); + Enumeration portList = CommPortIdentifier.getPortIdentifiers(); + while (portList.hasMoreElements()) { + CommPortIdentifier portId = + (CommPortIdentifier) portList.nextElement(); + //System.out.println(portId); + + if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { + //if (portId.getName().equals(port)) { + String name = portId.getName(); + //CheckboxMenuItem mi = + //new CheckboxMenuItem(name, name.equals(defaultName)); + + //mi.addItemListener(listener); + //serialMenu.add(mi); + list.addElement(name); + } + } + } catch (UnsatisfiedLinkError e) { + e.printStackTrace(); + problem = true; + + } catch (Exception e) { + System.out.println("exception building serial menu"); + e.printStackTrace(); + } + + //if (serialMenu.getItemCount() == 0) { + //System.out.println("dimming serial menu"); + //serialMenu.setEnabled(false); + //} + + // only warn them if this is the first time + if (problem && PdeBase.firstTime) { + JOptionPane.showMessageDialog(this, //frame, + "Serial port support not installed.\n" + + "Check the readme for instructions\n" + + "if you need to use the serial port. ", + "Serial Port Warning", + JOptionPane.WARNING_MESSAGE); + } + return list; + } + */ + + + diff --git a/tools/src/maple_loader/src/processing/app/SerialException.java b/tools/src/maple_loader/src/processing/app/SerialException.java new file mode 100644 index 0000000..525c240 --- /dev/null +++ b/tools/src/maple_loader/src/processing/app/SerialException.java @@ -0,0 +1,39 @@ +/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Copyright (c) 2007 David A. Mellis + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +package processing.app; + +public class SerialException extends Exception { + public SerialException() { + super(); + } + + public SerialException(String message) { + super(message); + } + + public SerialException(String message, Throwable cause) { + super(message, cause); + } + + public SerialException(Throwable cause) { + super(cause); + } +} diff --git a/tools/src/maple_loader/src/processing/app/debug/MessageConsumer.java b/tools/src/maple_loader/src/processing/app/debug/MessageConsumer.java new file mode 100644 index 0000000..5e20429 --- /dev/null +++ b/tools/src/maple_loader/src/processing/app/debug/MessageConsumer.java @@ -0,0 +1,42 @@ +/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Processing project - http://processing.org + + Copyright (c) 2004-06 Ben Fry and Casey Reas + Copyright (c) 2001-04 Massachusetts Institute of Technology + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +package processing.app.debug; + + +/** + * Interface for dealing with parser/compiler output. + *

    + * Different instances of MessageStream need to do different things with + * messages. In particular, a stream instance used for parsing output from + * the compiler compiler has to interpret its messages differently than one + * parsing output from the runtime. + *

    + * Classes which consume messages and do something with them + * should implement this interface. + */ +public interface MessageConsumer { + + public void message(String s); + +} diff --git a/tools/src/maple_loader/src/processing/app/debug/MessageSiphon.java b/tools/src/maple_loader/src/processing/app/debug/MessageSiphon.java new file mode 100644 index 0000000..26901c3 --- /dev/null +++ b/tools/src/maple_loader/src/processing/app/debug/MessageSiphon.java @@ -0,0 +1,104 @@ +/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Processing project - http://processing.org + + Copyright (c) 2004-06 Ben Fry and Casey Reas + Copyright (c) 2001-04 Massachusetts Institute of Technology + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +package processing.app.debug; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.SocketException; + +/** + * Slurps up messages from compiler. + */ +public class MessageSiphon implements Runnable { + + private final BufferedReader streamReader; + private final MessageConsumer consumer; + + private Thread thread; + private boolean canRun; + + public MessageSiphon(InputStream stream, MessageConsumer consumer) { + this.streamReader = new BufferedReader(new InputStreamReader(stream)); + this.consumer = consumer; + this.canRun = true; + + thread = new Thread(this); + // don't set priority too low, otherwise exceptions won't + // bubble up in time (i.e. compile errors have a weird delay) + //thread.setPriority(Thread.MIN_PRIORITY); + thread.setPriority(Thread.MAX_PRIORITY - 1); + thread.start(); + } + + + public void run() { + try { + // process data until we hit EOF; this will happily block + // (effectively sleeping the thread) until new data comes in. + // when the program is finally done, null will come through. + // + String currentLine; + while (canRun && (currentLine = streamReader.readLine()) != null) { + // \n is added again because readLine() strips it out + //EditorConsole.systemOut.println("messaging in"); + consumer.message(currentLine + "\n"); + //EditorConsole.systemOut.println("messaging out"); + } + //EditorConsole.systemOut.println("messaging thread done"); + } catch (NullPointerException npe) { + // Fairly common exception during shutdown + } catch (SocketException e) { + // socket has been close while we were wainting for data. nothing to see here, move along + } catch (Exception e) { + // On Linux and sometimes on Mac OS X, a "bad file descriptor" + // message comes up when closing an applet that's run externally. + // That message just gets supressed here.. + String mess = e.getMessage(); + if ((mess != null) && + (mess.indexOf("Bad file descriptor") != -1)) { + //if (e.getMessage().indexOf("Bad file descriptor") == -1) { + //System.err.println("MessageSiphon err " + e); + //e.printStackTrace(); + } else { + e.printStackTrace(); + } + } finally { + thread = null; + } + } + + // Wait until the MessageSiphon thread is complete. + public void join() throws java.lang.InterruptedException { + // Grab a temp copy in case another thread nulls the "thread" + // member variable + Thread t = thread; + if (t != null) t.join(); + } + + public void stop() { + this.canRun = false; + } + +} diff --git a/tools/src/maple_loader/src/processing/app/debug/RunnerException.java b/tools/src/maple_loader/src/processing/app/debug/RunnerException.java new file mode 100644 index 0000000..0a67d1e --- /dev/null +++ b/tools/src/maple_loader/src/processing/app/debug/RunnerException.java @@ -0,0 +1,161 @@ +/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Processing project - http://processing.org + + Copyright (c) 2004-08 Ben Fry and Casey Reas + Copyright (c) 2001-04 Massachusetts Institute of Technology + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +package processing.app.debug; + + +/** + * An exception with a line number attached that occurs + * during either compile time or run time. + */ +@SuppressWarnings("serial") +public class RunnerException extends Exception { + protected String message; + protected int codeIndex; + protected int codeLine; + protected int codeColumn; + protected boolean showStackTrace; + + + public RunnerException(String message) { + this(message, true); + } + + public RunnerException(String message, boolean showStackTrace) { + this(message, -1, -1, -1, showStackTrace); + } + + public RunnerException(String message, int file, int line) { + this(message, file, line, -1, true); + } + + + public RunnerException(String message, int file, int line, int column) { + this(message, file, line, column, true); + } + + + public RunnerException(String message, int file, int line, int column, + boolean showStackTrace) { + this.message = message; + this.codeIndex = file; + this.codeLine = line; + this.codeColumn = column; + this.showStackTrace = showStackTrace; + } + + + public RunnerException(Exception e) { + super(e); + this.showStackTrace = true; + } + + /** + * Override getMessage() in Throwable, so that I can set + * the message text outside the constructor. + */ + public String getMessage() { + return message; + } + + + public void setMessage(String message) { + this.message = message; + } + + + public int getCodeIndex() { + return codeIndex; + } + + + public void setCodeIndex(int index) { + codeIndex = index; + } + + + public boolean hasCodeIndex() { + return codeIndex != -1; + } + + + public int getCodeLine() { + return codeLine; + } + + + public void setCodeLine(int line) { + this.codeLine = line; + } + + + public boolean hasCodeLine() { + return codeLine != -1; + } + + + public void setCodeColumn(int column) { + this.codeColumn = column; + } + + + public int getCodeColumn() { + return codeColumn; + } + + + public void showStackTrace() { + showStackTrace = true; + } + + + public void hideStackTrace() { + showStackTrace = false; + } + + + /** + * Nix the java.lang crap out of an exception message + * because it scares the children. + *

    + * This function must be static to be used with super() + * in each of the constructors above. + */ + /* + static public final String massage(String msg) { + if (msg.indexOf("java.lang.") == 0) { + //int dot = msg.lastIndexOf('.'); + msg = msg.substring("java.lang.".length()); + } + return msg; + //return (dot == -1) ? msg : msg.substring(dot+1); + } + */ + + + public void printStackTrace() { + if (showStackTrace) { + super.printStackTrace(); + } + } +} diff --git a/tools/src/maple_loader/src/processing/app/helpers/ProcessUtils.java b/tools/src/maple_loader/src/processing/app/helpers/ProcessUtils.java new file mode 100644 index 0000000..c023f58 --- /dev/null +++ b/tools/src/maple_loader/src/processing/app/helpers/ProcessUtils.java @@ -0,0 +1,32 @@ +package processing.app.helpers; + +//import processing.app.Base; + +import java.io.IOException; +import java.util.Map; + +import processing.app.Base; + +public class ProcessUtils { + + public static Process exec(String[] command) throws IOException { + // No problems on linux and mac + if (!Base.isWindows()) { + return Runtime.getRuntime().exec(command); + } + + // Brutal hack to workaround windows command line parsing. + // http://stackoverflow.com/questions/5969724/java-runtime-exec-fails-to-escape-characters-properly + // http://msdn.microsoft.com/en-us/library/a1y7w461.aspx + // http://bugs.sun.com/view_bug.do?bug_id=6468220 + // http://bugs.sun.com/view_bug.do?bug_id=6518827 + String[] cmdLine = new String[command.length]; + for (int i = 0; i < command.length; i++) + cmdLine[i] = command[i].replace("\"", "\\\""); + + ProcessBuilder pb = new ProcessBuilder(cmdLine); + Map env = pb.environment(); + env.put("CYGWIN", "nodosfilewarning"); + return pb.start(); + } +} From d5986cce76f42c927dcd0bee4204fa6839a386a9 Mon Sep 17 00:00:00 2001 From: Roger Clark Date: Mon, 20 Jul 2015 10:20:04 +1000 Subject: [PATCH 78/96] Added lagacy windows xp drivers --- .../maple-dfu/amd64/WdfCoInstaller01011.dll | Bin 0 -> 1795952 bytes .../maple-dfu/amd64/install-filter.exe | Bin 0 -> 44544 bytes .../win_xp_legacy/maple-dfu/amd64/libusb0.dll | Bin 0 -> 76384 bytes .../win_xp_legacy/maple-dfu/amd64/libusb0.sys | Bin 0 -> 52832 bytes .../maple-dfu/amd64/libusb0_x86.dll | Bin 0 -> 46592 bytes .../win_xp_legacy/maple-dfu/amd64/libusbK.dll | Bin 0 -> 99128 bytes .../win_xp_legacy/maple-dfu/amd64/libusbK.sys | Bin 0 -> 47928 bytes .../maple-dfu/amd64/libusbK_x86.dll | Bin 0 -> 84280 bytes .../maple-dfu/amd64/winusbcoinstaller2.dll | Bin 0 -> 1002728 bytes .../win_xp_legacy/maple-dfu/installer_x64.exe | Bin 0 -> 106496 bytes .../win_xp_legacy/maple-dfu/installer_x86.exe | Bin 0 -> 92672 bytes .../license/libusb0/installer_license.txt | 851 ++++++++++++++++++ .../win_xp_legacy/maple-dfu/usb_device.cat | Bin 0 -> 5943 bytes .../win_xp_legacy/maple-dfu/usb_device.inf | Bin 0 -> 8422 bytes .../maple-dfu/x86/WdfCoInstaller01011.dll | Bin 0 -> 1629040 bytes .../maple-dfu/x86/install-filter.exe | Bin 0 -> 46592 bytes .../win_xp_legacy/maple-dfu/x86/libusb0.dll | Bin 0 -> 46592 bytes .../win_xp_legacy/maple-dfu/x86/libusb0.sys | Bin 0 -> 42592 bytes .../maple-dfu/x86/libusb0_x86.dll | Bin 0 -> 67680 bytes .../win_xp_legacy/maple-dfu/x86/libusbK.dll | Bin 0 -> 84280 bytes .../win_xp_legacy/maple-dfu/x86/libusbK.sys | Bin 0 -> 42552 bytes .../maple-dfu/x86/winusbcoinstaller2.dll | Bin 0 -> 851176 bytes .../amd64/WdfCoInstaller01011.dll | Bin 0 -> 1795952 bytes .../maple-serial/amd64/install-filter.exe | Bin 0 -> 44544 bytes .../maple-serial/amd64/libusb0.dll | Bin 0 -> 76384 bytes .../maple-serial/amd64/libusb0.sys | Bin 0 -> 52832 bytes .../maple-serial/amd64/libusb0_x86.dll | Bin 0 -> 46592 bytes .../maple-serial/amd64/libusbK.dll | Bin 0 -> 99128 bytes .../maple-serial/amd64/libusbK.sys | Bin 0 -> 47928 bytes .../maple-serial/amd64/libusbK_x86.dll | Bin 0 -> 84280 bytes .../maple-serial/amd64/winusbcoinstaller2.dll | Bin 0 -> 1002728 bytes .../maple-serial/installer_x64.exe | Bin 0 -> 106496 bytes .../maple-serial/installer_x86.exe | Bin 0 -> 92672 bytes .../license/libusb0/installer_license.txt | 851 ++++++++++++++++++ .../win_xp_legacy/maple-serial/usb_device.cat | Bin 0 -> 1896 bytes .../win_xp_legacy/maple-serial/usb_device.inf | Bin 0 -> 2486 bytes .../maple-serial/x86/WdfCoInstaller01011.dll | Bin 0 -> 1629040 bytes .../maple-serial/x86/install-filter.exe | Bin 0 -> 46592 bytes .../maple-serial/x86/libusb0.dll | Bin 0 -> 46592 bytes .../maple-serial/x86/libusb0.sys | Bin 0 -> 42592 bytes .../maple-serial/x86/libusb0_x86.dll | Bin 0 -> 67680 bytes .../maple-serial/x86/libusbK.dll | Bin 0 -> 84280 bytes .../maple-serial/x86/libusbK.sys | Bin 0 -> 42552 bytes .../maple-serial/x86/winusbcoinstaller2.dll | Bin 0 -> 851176 bytes 44 files changed, 1702 insertions(+) create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/WdfCoInstaller01011.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/install-filter.exe create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/libusb0.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/libusb0.sys create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/libusb0_x86.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/libusbK.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/libusbK.sys create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/libusbK_x86.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/amd64/winusbcoinstaller2.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/installer_x64.exe create mode 100644 drivers/win/win_xp_legacy/maple-dfu/installer_x86.exe create mode 100644 drivers/win/win_xp_legacy/maple-dfu/license/libusb0/installer_license.txt create mode 100644 drivers/win/win_xp_legacy/maple-dfu/usb_device.cat create mode 100644 drivers/win/win_xp_legacy/maple-dfu/usb_device.inf create mode 100644 drivers/win/win_xp_legacy/maple-dfu/x86/WdfCoInstaller01011.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/x86/install-filter.exe create mode 100644 drivers/win/win_xp_legacy/maple-dfu/x86/libusb0.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/x86/libusb0.sys create mode 100644 drivers/win/win_xp_legacy/maple-dfu/x86/libusb0_x86.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/x86/libusbK.dll create mode 100644 drivers/win/win_xp_legacy/maple-dfu/x86/libusbK.sys create mode 100644 drivers/win/win_xp_legacy/maple-dfu/x86/winusbcoinstaller2.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/WdfCoInstaller01011.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/install-filter.exe create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/libusb0.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/libusb0.sys create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/libusb0_x86.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/libusbK.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/libusbK.sys create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/libusbK_x86.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/amd64/winusbcoinstaller2.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/installer_x64.exe create mode 100644 drivers/win/win_xp_legacy/maple-serial/installer_x86.exe create mode 100644 drivers/win/win_xp_legacy/maple-serial/license/libusb0/installer_license.txt create mode 100644 drivers/win/win_xp_legacy/maple-serial/usb_device.cat create mode 100644 drivers/win/win_xp_legacy/maple-serial/usb_device.inf create mode 100644 drivers/win/win_xp_legacy/maple-serial/x86/WdfCoInstaller01011.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/x86/install-filter.exe create mode 100644 drivers/win/win_xp_legacy/maple-serial/x86/libusb0.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/x86/libusb0.sys create mode 100644 drivers/win/win_xp_legacy/maple-serial/x86/libusb0_x86.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/x86/libusbK.dll create mode 100644 drivers/win/win_xp_legacy/maple-serial/x86/libusbK.sys create mode 100644 drivers/win/win_xp_legacy/maple-serial/x86/winusbcoinstaller2.dll diff --git a/drivers/win/win_xp_legacy/maple-dfu/amd64/WdfCoInstaller01011.dll b/drivers/win/win_xp_legacy/maple-dfu/amd64/WdfCoInstaller01011.dll new file mode 100644 index 0000000000000000000000000000000000000000..d49d29132e86b6f3374739df5764f66afa1a0765 GIT binary patch literal 1795952 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%0AB`TAEn=^N+|+!hd-aKmz372LTrXc{O? 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

    0WL&5HWr1{=}=jAod<%;$Yio@AsTnF@Q9X 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̱h&WQ3m~90FGR$FaM{?^vx`?NC?PY%y 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≪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ξr# ze!qsFR&54aE;+jZ<$1&V%+q3PH%A`FB@2ZJY&ZTl{&)U$+1?ddp80O=3>FpceTJ$$ zx?8BgIXLx6_J@|Ijig^v;0^DGT*pDKzyxTAF4xkXAMC^IU4CRQ8+RRgS$|5Z0A~SI z=Yid$KdaX8_v~}Ceh=d{n906 zAo#B35%#cw)E)5%dqn<)^39xBQ7q~n@re4t$x4P6t2vu~z~3b;nf7f{({_o3Kn6_{ z!GA48FES`eZ;8H3dT+`k-5_d?k-vQnr7s(Jne(^jx~Av&NoiagKreB7a@M5)=Vv= zL&T(!_l-Y#=AUWN82Nj4PaZIn^KG$iw*r;K(q49fJwqg7kpuV#vL;XthG|Ckr;Yj z(z;!h0uvMOaZQPI3dQt8C(dK;!4aYk{2k-5_I$+EKsfg>{^7KlaBvN~ZwQ*rwJT6y z3nLYFS4%_}>ILsI(sDQI_{TeuNCx85v=FdL6O5UlX_#0sW&&)mP%Mb5`C;)h8#??o zM3m>y)FC2|2ta+%O%v=OfO_a-xdga+NB4T4pCAx?v?^cqgnJKNo55U#dNwo(kdHSI zFh|i_dw|AE?AI^}`@P2UTP|5YWA|K+*oiyreqzAv2PS$So$z{p@xqc92J}^crc8TT z#z^e9mWc#%J1?ID&a-Om-|oDekgTHNamsA%NRV(&aq z8z#S)N|M4M!`9)=c&M2I?bH6Xg0aI6ODjN??pI-QXaP-bVzpo&N(+7*i1X6bkV?Si zu7gzwbVbfE#Lk$<-rQII&SGzq;FIwHy|Q~0?ee#-^mo`8@@EF+56uXo-*Za;Ju)3d zDi~G$gcjNLTgrt_w>m+YiUtRTsgf%g#T90`wWkSzbg%IkqB0<&(_U}Npd`gqgljWJ z^#)Xw{RinI^e>f_2AY$(VW{vriD}C|8`I`I^(i-~_OnM(3>x!MJdOrx>S%nglwivv z42qs0x<+#VNtx4Tck1-!{BerW#>7{**gc{X=eVS(D=b*O3En*>4fcEcmce1@XACB) zzkw`tQ(obf_$*WAz(I!Op=ECvz|`HjuuO}3r#nU-DQG#6Q2wA<=y}Z0BRwKjrhk|_!Ag~^pdctt(O{IHLlu4G=g3@V&NCU>r z^irbDg@^~3W;apU4fF;h-3M(WVWhE-7UW&z`r;_QlW{s?%2Wg0u%)!Atz^vIk%RS_ zC3U28?TN!31$PIf=7m)rX)i+hvlXWOPJ3b2(7T-YvHRf)B;~?|j!Vn6(N?4Pv@7y+ zP+`%z`j(4iK zr*#xN#ElH~R<~o^mq6O1b?1758p$`^A<5OB=Cs=xqPJ{-M;LOqQvoEl2b2)>rbUl0 zWasv#l`P!zQvG&eb7DPDY~JfE4*{}tx?gGJxA+CU*7YytEqtxWde?c!bTCoVaYx?- zB1qG^zQJ8gP?<^rtb^jfyNaV&3CKYUkPAvgn?MD^_4BE|&>W-$M>I+!N;R{ag@DRW z^~#Eta^rNSPT4hH1;`A0*>pcXt%ClWx(xZtSlc@V%pKvYs7($#K&7Z0{nQ^=rEvT!IMPxY3ZK+(^qg?hY3?M< zI-n$hDac|2axyS*O)r6opU*#+h~P^Uu1^Xbc$|o28zcr}@V%kC`x~AG9lEozPyxNy zo-6RB1gK@31N9*->@rR!r0@l%!cZBPzWCJ zfri(!G)^fFmx8!0bMM4!i^|Xj6#?s{bwi6hLoL@9b0}0zctlJ?6(Dx7GZX8Z^lu!Z zLlQaJO#q`0x?0s7Gzt9@=Dk6oKZ}Kaqf(`oZqw!@a1HqUObLbcg;MAqGNP61q`Wro zmH`@ZME51a*_`_Rg9Wx~81{}HUUF@EK3KIoh44vJ^$}qa`ZaFce;2D? z{{kW;2RQ3phfg1fBk&RS8TmNJexi`iYZLktn!$iD?0t{z>F+BLdFq=sBH z5`rCOBIjN&0(NFS7F=IK zCXY;?u`R}=--xa6u!ODp^$zm-0SU;P@flc2KXUr4mFE9k6{V$$)@s*h?dwWyAPvFY zcTF~YqM+|uIDb|2G@pj*?|T_A;2ADY=y0dW`Qz^C1)w5h89_XKL`oEM$m4IPZ!f`b zeT)6ie9>WK;*49xy`tJnY75>GRhf{}Ivk>Ul((?dH3??(PcZsPmGD79{f%-+Yei!H zD*8v3AKka|jq>|b0A+V8wL!3rrqwc;RJa1Nht8iSXfq;>0s)GPxu?67_Y{kBT9_IV znXn@nIJTa3=^07J!kGidxj5Kv^V6Qbe3OWC(20SfAFO+4X;HSB&8_&C8IdIX=Q z8cq^#i@B+{eu{`hwmA>ff3!`%6f`h&*>%()dYa;`pT;4+kNCYzFAVOt#jc-<@j#QQ zbp+S1ljzld7FHyF=cjzA?0*{nDGGs)j44X=x&e#D*%fUc_8??x(WZipn=ILsw`Ydv^d%CwFTB>t?oT_o3U%N*y0h*_{9 zNHXQTpW#FPDaFAf4S7KL=JIfeoqVD3J#0DmT|^|v%f!cQWPONJA<#lQ2a>|HsX}%M zE-BBWY4yKro%_pM2*6c66*TB0@Db8Dvl-BFT?S(u0|CCb=(_!_z)44JDB;(?Xaopd zenTVH#QKdEFkfrt#e+Zb7x|A)CGty-&yL^B$g%e}c#2+2gE&Zy1I|17GzX(2m@}yi zH4Kf|p_71|8~6^>YM4Ha>BqwSDa=o-6s@bV{1~Y`y`fg-{8pp<1v?f1b}HYwQ>Ntn zR3c9UAQ}8>W$SrcYw>iV{mG|AYq0|7LHmwkPYuz~K7?Q)SHR$eb&HsaNFYSz{5$(f z4sHn~L1f?NDVM{h>)(WElgkpI7@eB)4l{6&bZ%k&$_6=2m>DbklHiRIo(&xQZ-ty!7iwGf<0_1d519BEuyyI&bN)~j_cjyisyIbRE zdBpCrHTafDU^={3kfG|DT0Dxz-V4{Y$OlO^q8mG~vti}Ik+uNH_=y%McK~f7P?L@m zg8=JreZAd7@%GlLm+K2!<->z3Xg4CLnUAuPeP?iC`f&#_@SDvFb^A(-4`pGt%1f0R z^HTz;Npq1Jav9i3k}VVbW?46Wq_H4oYD=J##{)XtL}!_z&|JtpqM7>>(JO2${U+q~ z%`Ys$Vk4H=?9n>G{0c()4WOgr>jov$olQx524Jm<(}Gk%NzyXCOeBlI6@G4=gjA~X zjqqA0m`Le_40riirk^BZOlhRfj<68YQHZeuUO8dta+-QzY_h<&7F4msDmgq{O5e7S z;KtEefy&$tM!rZor^Cd>Z~b_i2V4YklR@vmh`Q|qcA$HNKFj$Roynr~l9NXp>-}Q! zlPyxugwe*eO4bB;1msES(*R^=sVA07U*DpUI4uNc;FB<%!TM0I z`|s44hKKhl(ikOkTri(SSV%(i+4K)~m9mG2%g>aDUxQ(JJ$?w%_-g@E+OVXaU5kO# zzRh-Bbk-E{$d7c1)*0SPnRq404N&Zv;Qa))!9O4!Hf1zb(#w3 zjlfo?@ez=88_23L)If0#sOJR@lE0{V>(#>iFOA37Kw|S-G3tBNPN+fjmTzUC{!%Qe zm6}Is{Z1gy-`PKu=%aCNMSj=urnAy5H+wjFpba<%&kk``HBK_2TK&s-&%qBokGx&> z_r&eIVywDZPosm17jzK~!y#ryVkD0SH{uK(Knl3liPA~q$?SAz5jgDAd)zA&ff3>8 zm^b?FpLm8@{!@39%pP^+fHU2gf*$$IBc>N}Arp!Rd@w#R%l=z26yJeLRqrhV~1bpv}7DT`{8T zwa_zNN=*P%=Tr;fn01rlh+ubc47L{d>;?NiY`aIHuftZ6(Vn_ZNjYxPAERU5D~(1% zCZ;V(gi7Mk8->XLHcHu7($UnXw!Llxvjqbxm;sOH0HVh9)#LvYOgtpAFFnNzygZ>B zYujZojPCzXAw;lAE>_R1j<_1+qsW1hDnH zk`Lty_VnDmxj^K>6%1Vzg0hIAp9rN2^Oi)U1ZJVph&s4|rfcuOV(ar9bz9DE@O#0(cV1#r1MYPy=%6gqk z|7hXDR|zq`Rhtu7Kwzmc>kvxZBYxtC{2t>IbnFl8>peh%q3^ko1do+qafRU5l{Q;E zFt1hL14Dg~j+Xb;)eFojY^LXNAZtamZbon~$~LikeRO3nCjPFKBkIPbZKi4hZg6 zV!0jloq%DyzlhKV0)5Ts&5&3|0s27N?ax6I_jia2DOP)p=SAk57VzQm)VANvrT_FH z_tR_X=xqAwo>kRo2PW8VWIp@KqibR~g*Q6(I~lD%rzcD%006uEjVc>|xZ=;qT41X= z6X>_Jb+bcg^4_6CHXYBrmGm*h-ycFFIU}4;N_HZJ&~fN(?^IwGwE+XNHUq! zO@5H5phIePZjPr0&;)Kd!Z7sHVH!1(-gmW!`l)q!caZ3xNskm@~-+`%GU2#zXI zpSgX}#Pf<+gBdFPxxW+AL(kDm+hbo}3%Qin*chWF!8V_00WE4J_}#HDXyt6-L>!QY z+}t58TY5QzO|dCy`2y{(z`oR->6Ga)?7aj{n)<7dMjDL=PwE8DIZdqt+b~G>rB-kQ zl3@^9P%-9yBu*O4MLrP_aFcIX@JlVJ?QteCb~cE|nql-s>EFW3FH}k46IR!DR3E-0%=Mb55A@s%q3(}h z0)zkBmAd{n{65ami0PoqoW)-M*JX@>aTxrs&Ix8|{U(@&*5e%f%us);fp^x_S_zC{ zR59x<717p=0)M8y-F#aM;Ts$gPvA+Z7)zQhDs77-XZzm+5-DTH0Lsk-y!CGr>G%3k z>94(xBP(zZCtctUQHWiyR*fmbUixf26W$tB>phHYaFe1IH&h(}J&Vql&-BCuBP1A< zRz=Abav>Nxeo>pznH135Gn5lIYVzGJDY!FXB&sfi@AaYc>s&qIvP>!c8K@`CT*PZBdy%r%?d;H?FfRaRA}RaPZ^&e0&D1+1MBcE_ZNbL zACC2TT%Z(@XU%m55pi)I1|n*1)4xe3#P1;QPJu#&O5#?zx%Bqp5!0Fhp$?*G5v+U2 z-Ut%|dyc+nM#VLwa;ya#MU$aMcenRR^3_r8ZbMY5w8Fk8$YwvGgaDRLhn&G$SJ*+f z5W!V!ByER77;>uVwx7HBt(1a_1sF%&YNFAzfeF#{U|LidZ?oNrO-%HrS(}z}C}sig zGv3^{zagJ7CUoP$a4>$r(mN$KLOU-2c`6rv<8vsPMDRvT=u(X@xF@bdnk(0Qam>A4?PQdgRP=7?d z68DmszM-O=-b<{RaN0>w^eqx<;FEU0p9lpqwg(;1c0!|P!oXkCsR=Zo=Ohca;$S*q zx5YpU6-xNP{Kr|Ve6*S91SP|mUf3V(zsVWZ|zbgZ2^azcxCQCK}XC-~5H zz$alA=12p@I&(1REh`yn#!AOlEBt;YPA<&PfH%?sxGu!Ej*Rgt?3j93fxSO*ZNi)m zPDdrS)UR7=;+Qdvrihs=HLczwY(O&mRDL_41i3{VgE3GWgL9kQ>As!xnCy>uy#^A$1%LEJa>ie45s`U;NwB>kwbsZmenaY5y1#YD z4F@B5x}6bR1`h@wI1RqIy+)2kjz+)Bs;+?QKj)+Q#T^ZT{laT4@`X}>G8T*WS!aMB zEc>~i)U6(kpmW8dX$|8t@bVaZO|bLFIT2H_{-tSsP@)2qoT#rqe#7vW-k;?_{2W~0 zK=yfT7<3N;i4q|-b!J!3O{$U8z~msYYq`e3vgDO?kL9B27$HJjZ=#BqG2ytGK4!Ol z)*1PHk!GW?h#@*%*f(L~ud+89mZ-ed+qh0O8GeX8b;=@6_lRqA}{IaxWygkr2f9rH`As&#Q6y7Aw+1 zFQ37WM`tV@A%gucQkrw?c8fL|=Be-^yFn#ow~Ab&f(KK;iY=G{g7V4H?Mxk9nNpR+ zmZcUy@1-m>^WjLWnkIzy?-rSnIq<$MX`Cm~EF6Q*GayT114HZ_Mxp%r>$fMQ0?ZEI z2?Bbs>r{}|H&KIy$S35!(b?o|3n;9dcJ+m#-MKqpA(PHn5^31d4w6l>$I@=rLA&EU z0C&d+pLFH)cMLW{uni`#tXriGywC>)?Z=PbmJ^&6W6=kWWINyX1PvMKLb%G-v18}o zNGo?Z`oTdmVS2a7_@uLD3OU>`q8nO}puqNms&M$pP6F@K_B6?-Pu)et`lJ2tZFe+g zRLTd3H*M(rzcN3iG6Vm?GZ28^Bl2~!x zZF*KD2CGZz13c$iwFJdM-_&|a-lo<*BP?0ZY-SY4o6vc0VGy?nGe>UUK3!X)g_t|_ zQxtY^ZJ)$@NwZ!g#}L}y7ek6~y-E(r`t?);0kv8u@$QA;zXvkjw#IkfmyMbM;cfdw zpdpiU&NGXr*|=Yx3-lsoLJakPR)=&|U_d27J6~bOHshI4Z3TeJKwv9MakspT{1V6#J8%mZ&Ic>m-bmdRKk*>ZT0r*Gi88W48K7ubYI~MedRj)F&a$Ycc3S0A&5+V zLv1GR3rr?CAt-rb)?ZX_I<9(h6TJ9HZ3n*$`g7=L6k9Puy*Fj_z;TsX6!S9EF+&xb zH5YMXp_Kg!m_4}t2p8qgH4m!t)Pn6U49FV96N zh^S>^-&Aff%?+#w(*sQb{(~umn787+ZAWQc($>GQF%|bhMtj^}IwP4aD-`b>7H$q> zVj<{{tW(KB*KK}((mlQtqVQkNXFiuH4@ed&PMY@{zo3j)+DIuG017aAthcDULcCZDE}2&DWnHyd%>%{x~|-y zD0xYeXuW_<%d71-#gtS-l-fi{mF{EU;d>nFw&Etbg!D&SrvVu3=Bw?>nqi<4WDNZS zFg6QtpD4>_SBK@KM}v!^*|jOFc-yBB1hqFhL}L`1^(5V6G!h(lDpCO3oO|-%BPU@@ zQbv2NPHljy+7qMcOZ4}nJ_SX;tKCWReCkBg|E3w$F6H$jV#^%5-^q;_;i(&ncyt)c z7;waWkm8C#0LFbK9SRD-r-R3|iEIN1Llf!XQg~yUP7$z$7Iy=f+np+qreFyH@~r@3 zvXV#<^fXYO^D_TNzhO3~BEj)M(v z(Jk0yN$cNc35+}0Ek}NpFICg=B$b2saxcyC+pqB(J{>8iz zY61vtc87+%jqrG&{SaFdM%)8pSJkA#G`oxU2C`z&f@=L!J^rB{*85`&pLFxDLE{(m z4%XXVv_zM*ng#wROJ^Pkp+K%7418n-r9jAP&IHBy)!FA=anyT3xrCAcT+&J61-|P1 zz3BabdhAnfWKb^Y@sbXbY9*Z^Vsn5)*iX#=Vu&xH-Cc^oTYNR+qxMFu?MQy+BU(mI zyG`~p(1qxpdR9j;GuuLCwxIF$0R8$F5KyCo#_%&Z6~9%6+(W_y2aoj0sK;@Y-HGbV zU$$kIzuW=W*S6J_BjEuXHLqO-bqnw~{BL@RZl#sJmh0lBD zw2JeDN-d)!vW@IXp6nLUE8&8=bh^vHLWvP!{Fus{VFE4Om8~Txns6vD=w`!bw0mz_ zC(WzwRMQhll1+~!_xG)2vWPdh{&s4k1j}HnE9*$l=FGEs;2^z`1xDz`h&lmprW=^W#agh}W61x); z%I;W@!X}8QJHXqlvNN$)nfpdSO6TlK_p7hi9AUyz~n^NmhXWK z-VARTZpd_E0d#E^?uz(|>4Syzsms4cLB2$kHL1)ET@ zHq2!^eOv6iU@g--25APq6<0I|azeDie-(2jU^T6e*TeoY0zlMroq%#buo$M0RE zckxP=w0=c}(l%-NcH(Y;Ns|^E8SM@Vfd|Y`^muO@#br{lcPnsJ{%nP_^jykU#o+dc$Q(Tbp1pY6bxoboF>+-#h zQ*cv*@ay-qLW^-N#=6|hj_zO(Xey+yFT^wMRm?VmRJ=f%_xM8Rlcp3a2@;i@4_U-w zgrIsC;P2gnDyEme^ycp8>CTeM57_ZGm^MCev02P03Xw^>BtRWe`{_bMXsHzHy-Kmo zqY{tj0u1tdm1at62jRnF)^v4%w(?~uGynWM(~$9D$3>4M))h%=yyhe3uXssws@&5RyWS-*GDa zB;L8jgY+gbh6y^$45-tdE0x~(AcUHn%@`byru%mZS(~_DKf5Kx!qzRNmw=>pN6gB{ zv&=7MmCmG1;Wzdq7s2u?8K6ZP^XDha4xQ6lmh%uFh%1o~QBf_Sx z`t=!otSc+6_qEH*lwKo#rZ>Jvwn7OE(D%iPQ&J*w(k5-h_TNG>7lLEZIb{qoApEnQ z5={;(86mN`If5Z;uEQmo;B6z27r)ix@`c4m!G_QG9B}!5vV?(V$d%p)*!919_N$Lw z@6&w_{=9uNVZBSs5oypbH01&3u^O1|eLd6#rbdGlipCBJO~BH- z%zXnB4Q#5_xs`?YVJ+;Lay|&98+9ynTH@eFHk{$uRcLG0wgi!f1M2{V?IKMw!V@=$ zoof3!9-gYo6186;4I;&G-gbpy@EbLpC<+o7^p!Hq8L~E>-!mkwA>325OeZylLG0Qc z2lyoV%{L`@a;mv&RZ-&tn6 zG8A*uZO9$UAyJQiwjW0nr#m1H=iWpYGQNT6P>SQb9Sg*iw?jtSIo>BFb&Aq!VIH@* zeZYG~Umu129OpcTQv7c=)Wisu#jYWjplKtpLC2r=28#n@^qOpczgFhS!a*^;gd=fW z=ao~2j}kQDN_7ypx&@7ZllE0-k~B<$I-MkJzJ9H{p#YEoRunUIIz257uJ8Kn!-mWy z{`RCKolxQTh7A!%+Jwl+HVZ0%>CoCpe>}aE*J#vn_TeTCk-pzLq4W1Hs`cV6SaXZw!nwJ;Zk}Z6F85F`3>?%!noe z!Jum0&#q{%Mno7++JgmojxsPzfqO4vq!W_vl~bl;H*Xz5d`GB#f-3s^op)MtA12|k;`8bh&UW#exFMHMqDq>=5RvXO zAkjtssbDt9gcMhH@0G|_NQ*tCb97^MM4K$WSrVCo?VZf)Z+9|q*iYzKG^_*LMcpCs z_7?3lb96>2?V_mS`Gkh@!#2rvc34QLZItXIPL!n60VR|mppDk#KP+W_w1#R67y`(W z9<}f2v~2yt7w(o9@lzT0E}`Z#YpkC>^V~bEz!}d8|Him~ahS<=-LwT7&PL+CO(TeS zKZ|M_?>w5c$9}1>LCzd<$R1$&fQl8T@7WoO`xxlCf1Opoy6)NU;BhKCSJFwFQ%(); zZ%zQRWE*sL(8drnY9m%a-T;$i>=38IvmorcTQi;f@!hS(r?aW9{6irhb*bPW{vUP? z5D^YcQA48%m8(M@hQYXy zG=)aOW%NSU_!{=`?)|MTpP#=f?Qm|fwd{qC_IyX z6V6}aQQ%JW%BMpv=@c6HS`S(s%_9i0Q>bKnFVLaL6$Jms@+E+Fr>p78rQ(# zBw_v8%b5eVq+NbY-{+H9XA?(~&&08XN68YhclF}xX2jI`ME{YTRx#BwiHeWt&l1Rj zV?rtB4SBDIrj)Z^e^I~QxTl#L@pB?=EIo}1XzkPzH(A3OHF`TwMA!tu^yyJi5Nc%B z<~HN&0EH@eDGy>C<8_+Yoodc#dLSt6J6bMHW?Pfh(3PriuyoOs7(_ksW?d5sl5fVu zoAEbGh|V$b7h38TFT})6gK2qNXT)Wf6acF6e^tL;zhQEq0JeQ>AbhSTmG=2jb%aEpF;*N%?5~qoY zw-!RP&Kh!(C{D^9I(oV8mCr>v$w{%U`PfKc6z!zF1u3A~#~5JB;7TO9i8Ecx8us2R z%u|fYb&9Jf*)uiV<@oR7e4?WqAA3MP^U$C~BxIHO0XeRMRWGos@^q6B<8t|WWhor# zDB*}kyIBp}E8_wMf@&$x2)R=Mq?UF9=r>hFEJot(AAjY*`Rz&!_#O`Bk2(lRNR(f< ztDo5nudmCD3y?eDm?a603?gmsHMeDO)&@J`{jPg}D~`5|6-~+yoF$>rc12vFthSsb zI*IhIi;Wq_W?0BSsmS!?A9yB*q6Pw!p};ej_>^=@A_VTr<^0^ALdn?z9IXy+X2qVHc+Fr6{tOnIe5 zKsbe`EdJ)go2C&>rh5RZR37wE{)3=I_8y{Yt&l#~zfdvDEQ*!~sIi&^BQRf0Ts{&m)&TCt!6a*Ti}RBZMfx^O6n004&RL ztp*CJ`X3F9B0C;18F8U>x$%LTg-LC*t07Sfq!_+{4e9Nne0G?P{Z9DVEi-%WpjH45 zbiifo*wOS{v)H@gQP}w50puN09fwcOXHERlEnpVn5GVxw6fuh?NQIOf0wPZ0SE_t} zoY?gk!lNDo;DS@s^bL=>14UiKgS?_$ImLf!8GWhy4LVoBGY?AA1If657sxR%EHQ*3 z0-o-@P>kK+fcW)e5#nLWS^?=r@mrhtbo8<1+)9igCL9$F-h@>!D5jeb%YOrf~B zY53AL=TL#6btF&yJ9Xt}6W4$i*yp{1feD@sS6lMZNbgEZPD-_^`XO1n-;Ka8`5D=4 ztM+_=Xf~8wQ8GEnSKW<1DcT{2}r045O(g8>IOoaM}>p-#BZ1uJKU}t(l|e+9;e+TIPpiMwxCZ zux=upZy5n&0jr2NC~+n{2fGfY$8dZyjHE9%g%JY5GNv5QA*y9xHClkUSP>1o&d@d; zu9fF*mL)6xVLKNetPy;B6CGE7WX)IH76Xm5>oL>UV$L)-^5pHxLEK{iDfW@GYFH>5 zo65naqc3L7&Q`t78^{wnUZ>DxZ-;r^E3j?iH$SSX_{ZgEv34!9!D}kv2;CANxLhSpg*CnbmXTThd1G@ISy#9iKVa2)k6M2 z@cLLG8VHEp`Uf_L7V-=zsR`dJ)f9KS^?MNkh(7_@aiFv*pbuIt{`fud`4{*%!jS{!V-EzcFi}@;h>>xHCTgjNyq{U7BCADUi|PQ8xg`1YE2v zVi~1dEAB0j+5Jc0i`%B3Wh{EXQGon67MRBE%OO8$_xw!(_4gRh=^D}=7gcXS>?`ss z*nkv5?89%#@SELZ;MmC77s|_+y2hrLD-aq$BSvC@iIWg<6?6>X*F+jdOh5~1{m~>w zV0&3+2 zhC)!L_Iz5`nW(+q$uZcY`0Ef-Bi)14BZaiZu%yLaLn=e>*xtQlWBxjn)DB8o#2H%B zd&c0R;h^XxZe+=*Fik#%fbmh~#Djs}Ep<*)i76#>DOwNS?+02#@K^;PMoEgwDp!*1 z-UvxfO?MPj-sq1Bq=Pc|KrX29CTS9u*W3Kjh%opbC-rriZVH@lDWa=n=5PCcG6L*W zy^jp`S*1cbr=@E2SALAbf1aAZMg#5NqJ{1?p5&-MAYgzxzXAXNJxT!p0ssI22&f?x zm3OXX!@)Bvi^@7@b6Q5aHJR57aa?E#dkOzzU16 z3J%M8iPsc{B&`5N4BrN1F2%t9c6)^~pCHCcdU(?WS}$m@1bzl8OrM^i*zGPAijrR#zR_AO z{Wn^BVV?@%1{z(1xkvl)C_x>jo)VJ`00j3zd6@n!v*^lXhyxOc*32X-D@)mzgz|6u!s{eU0r= zY8s^N3||nFq&>D%_BL5{A$qoMdE)$s4b$MPKwNvDqYtVv<=>7|FkqBTiGg#xtr*&R z60c_?%M@k4fSz<7dWp6FcHX*Bc8~ePDJjIMkTT0(BiUxP1ZNlj65G(t>yw`bp3vt9qtSZ(L;$U6dEg-0Y8+~c<42OzAoLLbwt$fB zIMN8T^&<`w_t5-+ym^Rv{eCIQQHp$L^Z9V~?j408dj@J~C;+7{wwlO5Bn zi8~tc&nBxBc>rO#j_YjE_d^9_*K0B8UxXwPAT`>5ETt5I4}TM6x7jxWy~u{4wU#!8 zw!krzt|Yuv0Cd!f$=|ZL{s1vR&cDruVCpgU5g4Ks_W?9}GpjGcf@a(okz1WS`Xg#V z_iJIu{l=N+Z+d7Rbn`snM0;k^>E2x;4Xn3l0;b85N8;}WpVI=P^a7}j>qAaf@6Yst zXNP!W(Hh&-96Rb;*A9*gGu>d$0+JmNy}vl{TD?QqCJb(nD#NGTcu%w`AU!f|0sZ`T z%+3RnPo;|Ys&YR{gr@>Q(wltMh8D)5N1bff(3{sF*3@>?isUwJ{? zLel+%P@poo`XX|ue!&34H~nRBM5~d*df&r6wSkTCFL@2q7YFI?tFggTq(1;&CtZmP zDyLh}-a>M6(v~%r&P3CM)SL+-Q0cyELOz2p#i4SrnT!opxu}tKL*or&e|oQ?Ifk!A ziwscNoA4el#reGycqA3@)iX%dKQ0~9dDx|k>Vz0m@v1&nVt%4GRq6{4UU1DAKV#CW zCL;(y!M>KnJ*wtb&*&zMR`3gVHEf^MgGSs}BAeGa@rL+!BFb@lL-o$Q^8W&1l)^Gi zaj*9eO@yh+psfu6P^^Hp3Cr81AUM9=!Xy`Wtg$UXsgq+;|F?aeDTUYSDrX57zI40B zjyjEce{!Jrr-=w)enoMnR^x><4ixS%9O3Xe7+rf^FZQp2XZ0HJEBS`&km;0c3R;3z zUqlH-i+&V{jgwT0v4f#*Uz2BB>>uw~ACI`zVIlVzUKFXbsC^9 zi?BR#_&`oPH~{1N%ZMpZT#amXCdhA<&_^)e+K}Wz&#kNm`XvJE3Nz7 zH}@+}y)|hOjWzIgMF4)FLZT8Z!n8*)%@T!E-FeS2zzl-%53lB}yJZtxf#<^fIa#1! zYV|~QqUks)bFi}pNQd|B%aaJGp+cDEjOcG25S$x-3mrj2Duf0*(-&`UB^^fuGr;`q5%P z89pH3k2l>90EBUQ*Y9NbM0=nx89oqY;k5iJ{10R@e1gA5cZ@+u%pIhC=kb8?*Cb>{ zS=fw;dhgxxs@5M-0q_$1R$nxP%x^IkX;Bj_O{^Yp#jEWzK!71$sJ*-9CZDu*Ffj6J{*l-p@Z0=XQ zz{^mG3p{bW+?KGyY@Rk!5XQwG&3Hdzis+=#E>(?&fcpkrt5>)DK^M$T^6W9Qi5ljl zez>KFmYlMmxqx0QZWcndvDCfP%FhjdH*&|P!Z%XrbNg$9Jo!slvop?L#;U&Kwb#W2A zOB0p5kd`)1ym~O}9&T!@+!!6?l0g6#6(a|tm@qD>Xh@*NFs4)?$JVMG-gIVfHkQAgp#90XNKW)K+8@NaOAoz+*n96eohs9OJEY+66s);hdbXIn&&OgFLYEI{K@7-}eKOLjgLIb~A z5D0YMuUv%DLo{jwe-Nr+$L z%;_7>0t|mJKS26xi&Wg+aJ7M-=0eBcB+m+$IX0o#ejVq|+F#)_hYftDQ;+Z><--wK zqwoYzBfE*+!l23g1eBiA^tDD6QJuMr<#$(M1vaBS;^W$mPo2^qdGVZ#Goav<^f&_xU;aC*CgSchU6kc{gW zA{DlRod8=l%O3?N#1KB&$C+!BT3aGY?B~WJX*VChiFJNR21E}$NCroUD^=7WH+JhU z;4?wYY#|sOasOEXT`&zR=OrtF4+|idie}$kmFH>}03At$;yxS-Z|;PDOJ@;!{YL0%e9lEKYuPYMps{~KrrqX9zXb0tU6~99F&NCZK(LS zY-YcaM(_YVvlEI}Nd(X=5s&+{R7m@z4hrgy8^T&%5zz2kSU~H<tTgo8qP;@b+ajZlj6LS-h`;U*-|cPo{UnPv@_C5=NX?7SB9dDqYT9 zqlJxT0n<=1Oz42`Wwso3bRMfREhw({`Fw45{`iKWR`WK7HHw^`Vrnolq8pnBx`wk* zAZ&b4Jr;5hBFbn1AD`yjj*V5)op(nW9SzpC6rl!Xsy3BXS-`?!5wPev&kS%GmAe~V zx$o43=ul3doiHBKr+HG9Ao6k|m?+uw*;iSYZt z1P-%0IJ_xK5?ANm5tL|mvcsIEPrpIRdf{|)F=rN3L&xtX_#w}1ACl|l_LCv zCx8?1-tbwQgcl%@k}&jR14$B#e1SwxoB^!`|JERB34ZxD1wvWu`6{NQQEoZZ>tJnN zVFr=ol%x?;{IgJ)S}!I1YZy8G6!HXUxHN6KbbEE&ZbcMb0PQ-hOfgepFfdPCw#^(D z`-9yb#ySw9rNeoB@%C9N(L<}-(d;cmg;RB`K$C7Y$IyQGET2kx1RqI8Sw(tDhVHJW zc9`Kk6&^ss6=E-f2k(YqfYNYe&lKCh4q%KjpbL4V{cO&d=*)*v0FTqPEkVvYkxV7J z!1=I9{fKG(JTJTg43a%;f9)Xj8Kj$tlEm&sO+vdR^z4esv=T+SBG+BO+n6+(dq8nc zM8V{v@sL!VxL1K6@nJ#EVm!t@8wWP9901~yMnTu3{JjF9<&|MV;kak5So8!`1yaym zg935S4`6!((XXva3Ck!Sno|@CA(c@+G*XXbxM(R~*WeTydyJpGP@pB_7KA?ANTn)b z2Ll{Nwk0W)ex3nBPnaf%oy>!N=3eJkJhGpey-+rRN8OGISs|OLou%8waIxb#Lq^Nx zcAfF}Trr>*Tkf5ALOvhr{J1L6aGnS3v)fZue4~#T}#~JsnXO^_{g%Ww459z}spWlF3>>+$^~DIhp&D(7H#DJipB-TEQGPHt*9h#fNT+#q zRC1E-%-0$u%#joFShTJU2M53oXh0zh-BR6SN<)ZLN%^V4{{j5HUO~(YCbHVd0>mu7 zk~wJs3f_3RFND736;3#gvm;Ih7th~ zBr|FBdZ90YD0w<&Ui!4n7tU}TOTetsHUFW<5)|jjbzTbqa@*Dc9m8|9ZA?`m{wkh8 zH%E*zdoeR1tsM41cxT>Ypc1!nc(2}$xrNI=iF<*h)WvgKTW|0GSO?Y#45y996972n z$c0Oq_6tC##0b>pPp-e{D6fPh#aby;IiP19%ge5v)fCLQQ9bAG&a9_FYwWtOO&XT1* zM}KV5f2>PVXOc8)x44t zze8M@G1H!z2J+E}Ms6m=G~J+4#d9_5o>~Snb$6OPRJ69A?1qd$(xHSw9Enuok*}vp zTw$+Jx!HXd%Y9-sxMHG)mIHYGS|1`Malt@P%bh?f3o)sb>37H88I1n0t$YWR{*`?5 zNxM5wJMt3w1)z;mtYz`af*GtC8Rs}6GoxTJ!mf#anea3dMBqblXc7>{)YwvJ+eYi| z6>_o^KVkXl3)&I@b+{FPj+~;n4@bSe)fbm7&AB-h$NggUv+^fAIGQ^_C#kQR$i_dh z9&TmYIQuZQ3ymj^`B&`HJGK@N?*B;$h3=|&B=GdcDdaxSFqOIlAQDjv@Z?@<9!N!YgJ8;|Dy8~Wp6bUy;jTH*g>-7KP-t;m`_i=AA$ zK!4NsnNl1)hs65dNLu{JZ#!9WJPuD{k!e=4p&>GODM@SC6^OHU3+GblHj#5W4OlR- zh7#_ofGW;XCsIPA43EUOBNXzVo42s+qE%tedpqEYqUl~lFg|BqgouGOD03nrNg8Cw zxAlO-PX^7NWMH9tsS#%%fxndZ0tYk}{#PjwO2x!d7?61OKqK-Bqy8;{%tsZO1fgmV#BFRe>IaBh*kI8l^)!g* zFGnj3O$tEGu1Sw6CICVkQ;nvFk_2E$n3R9m{#16rOWr@$M}mLKIB5HU?lG3vkL&|- zKgwTE!nT|owHzD4Qh~gG7=dS*|D<;i{{yl*$bluf!)(v%2iv2Vp9T)}f0!sd!1@z| z1DCuu z;eqiF)A9~xeiDG`zM|kCyCZAfKd?UN_<{Zr!k?HNQ22qskt64$w7@zND2O*?DF@Yn z{IaX1JyH*hivSS@8$%wqW18({HyD6gkOeAHg1bTCtpFY-7hd-T=IjcPpj^NKX}*(J&2&?Mrm*-UQ|J zBAy6ggB&De-XkUdXk#&Q-*9RXoTpcpKx)DoQkIj!`_R&G&AjvlWXI&y6(`%~3?gP5 z+K|h%sjjqf25YU9x6K&dlt|kuBZkMUH{hbDyK7kP)KQO3xrs3zLPcjbZqD!|L1sm3}M0n|C zhMRQSq>QEIq0n_8s+6T3qkqTER_?^DK8cJ=zo z!8-u?2ulJY-D$dZ%pAIicTEa;sIf1dL6dS?6;;5&u)d>v%aI?29wxJUqQSztEjV&S zk0j^NKMkU((n-TChCCa_=zth65VwQ zFhAK&F)Zq}6GGegC6!G0j(1ZNaDwj0;-CrU1D9%aZSLouTnSl(ODq+JjV%roQqeko zZaE7RK6I-pBoy{#jb;nJYml5CnpvO(805XOss_xK-kvOX-F1}o>{!Xh|Dame4P65y zSf69s@*VeF6mS6sK0U7kW~y(2M36u@&}dyL6BUtMjsR>R21Lb@!5VMs(*$f=(Ye?g zeJeN&t@lbOu?__45gV!|9o(5VqZUw}Z!8YiIbsb$3PczPA@Beq=`fLo3x4oGeXnJ4 zpm)?#W#)zb?Yhh=5Yh?`Q0);0ltZIl%?4rJta=NSTGy# z(V)$R=aYBHJ|ZIHkbN-GAU2cLv??$MH4jQ8v&;X1e(`7WkK7&x2fShrypDL8->W*p z_U>S?Q#B;xv-%<7FViER2Q}38#YZe)Jro~!9i@{wO}5!iT4-lpmiOM+Ik?bf;6Vn4 zhms26nSv-N$`{%rUY3JsI5T=&fh9+i1CA0uA zB>;MP)p;*XWiV&7Hpz5pX)j}V>7H_nh3Q9?E~U1SNO1U5A6_DWqAK>WHsoSae*%v< zzBa}87+eq5V*J{tN#t)kMxiqfS=1ZNRYuD+?g{km2}-?N&*6#&DsMjTmeC+Ahf=e9 z{;z+^=iFfBEZGt*IBj4;#?D6Cn;fEh+>-ed>nyVee;$$>4e`_@3Fc-b4L}Ox%V2zI zCORpDs;X^C%bW62MGnQk#!4Ay*257X5`a;?XN=sdGIL9ngdLlv00o#54Zx&Y5H879 z*}b+Im-J>6BP_tIJOD;1aIs;OYn@(dn-Eq+w?AUv!WF5B`Fa>6t*f+Q<$=IAezC{* z%>y{%^=7{Iys@|0;|E-cH?endv<)=?7ZhJrFQAX4#U7ux1mK9rn|Q$aO$LzS^rjpj zcu^-UWB(Sujsy8N)_zX{podI=Y_Cv~hwB2$O)2oDMfN(4dCezV^7GAgZZ|8p{$$r4%8(P=R5I z{h@wI$9~;>8>S-yOE3;LBgI3X9V0)D(q&SK?`=hn>LV!Yp{~I-;`HCdO7}~c631kHo-)zFltnyf`Kbg5*Q$W zl01H^)_sW8TtCszN^5=1Ex%RwwbP9RC`DvYnn~q4BYWH}H+4)>+=0;WQ&J?nGdk>F zix^iAq=o5kQaxHdU<^qo2(<#v-c#cFBge9RDGm_dA`7?AM~6Z=tFijm0NeuL4Z{l( zQ23K>f6RU`%Iw%K;FlZQ5k zc&CY1bQ_;r+-nOZdja!rl)*>;)JbO~p;0t`CMK$yaYS{2+JR)jmm(U{`j|scv#@*O zcua>u37KoEjvB=wPYp-(M9k-9y@H&Vow6XG@c3wTKb3+%_JCtS6r?(EAYxoa7dqIz zRiR->gEG_s;)Ie)*J=Tj$Wd#Xx;yZ_pfY2l-s?rwZO6%+L8Lrh?+vwfIYaA2eCgpF z|8))EBk`p3K?rmoZ4kO@4HU{b*HI{}5t^rCQVNSZBC;qb@ZNF;S-RE%p>HP?xZSy~ z3H#I$@(nXVc~uurtB-S|Jp*TRc1(@H^j6<2|(0tMWBf^57&C^mDt>mslGnupRIw@Jop-7y$ln|XnJp&-r zHmiG>W7ku>C%@cKF|NVf_bv`=+)QG%;lx7qjx`|6Zs^<2rem7iGge(*q-zv4WJI=# zT{^&RQ!1O{-4fYcv#gT{3`qgfj(f9936M5aYRy9{l09Z*rHwyUS}Wr=E3MfuX^DVM zT5d~ya_wflv=>~Wfz0}|q$3E<;##_C57vSuHXdKX(- z3f*9zeG98-O1MTZ<(mJ}#uLOc`w;w2;ErX#53tF7n8AgqBPUuq&H;`6zkHaE(--(XO78WNblCinudx$i9AQKZaz&(|I%7z++ zn5gp|yoxfz`Zn^$o?l_)v&^DtcI7CT6zOZ6zHh2r!?`thPQHx?(nRQgSn6Pkrdqs@ zdbgSSf`k)dV4s*CmCz%kEj|d;}|A`B_Pm|3l#}lwQ z4CEGU@Xu<2CQQw0k~A7yaau^$i67|v&lTQ)>_7}$k5?F9u5c#PnBPIaaHAu%0Fc35 zScfOlvWb)na*4=5qgA%6u1yFjHF8%^G&uS{ly<2-@-g`hU+&Xe1=vhUGY}6IJYz|F zMM1X%9OCy-865NzIs`JVeaFOg5XJWSIZoOH2#%0KeZcppGIXA6vZ|`|=V$l~x|_st zVr>U6TAE!j>WqQkR1+Ho69x`E%)Vmd0ko3e$g+XVtpRp5v%h_e0DG%?BjYHuNHN@v zC~~?os|>1VMDtm9x3Q~;AaNy$b;X6aXGgEWV1C2qv}q(xmh+7&x=BnS@VI^Cypfgk zH;7h4ts5YU$$D84_4WXGi~t}Wj6E4*-*&l-^wG|}${nO2PZH07#c=ekfrHvuDZMb8 zfUB6Ity~2CymOH&KE3o?5B1a_0xp;sWSQ=wRS*DNuVGzutayq>)D=uHWYHc;jOB&tx>hLWp?W@t#TO*dP=8 zCA|`}?_`U_+|*C$w1DqiS~4CrD5qmUpdu(3O>zC1e7cSuUqDUAke()`g%U3t^lD>x zIk5(8L=7JRoYIbz6lt_b)H;nxb;(B(QhH754ZzsWE}oQr3H7V>RdZmA2;C?7(R5P$ z%7tL=F*q$%pqVZ}kX;yc@d78Co>QN=xCiQQ75ulQR&`rEvEfcAHkC;0oD1NxS;@&vNM6J$$HMj=8HEMi7 zW^R2I+H`hs#yvW4x_M31{Ea*m1e)>5K}h4@tA$2pRl$_#>UwfA!flUZk+_<0xIb~g zy-Xr4X6JPMH&x=}gGtWBBE@rLJ~^lR^UmHh6)b-o1D|q1!7^te28(;_P;uO|J<(aM z2v6QuILm^qc|p*m6!4v96V_yTornYR5#fC^F@^{G%RA!Bhfz|x4Kz4}L4WIwLRLn!L;uNXx0JKO-lHGqoz4)`{Sn0Y$=fek)F zmZ66pj)hhT9OCI&+MLoF8&`Ro(CVz(z@LP>jgt4AhVCo#8G9wqM6)?90Wlr6itD>u zrD3!PCE>t*ogGnk5%!TMmbON0LD61n^IyML5WW-@l-J*N&uKo*3(Ih|7AjA`5Bn#a z_}rILLD_?#?kJldNJNZ40~?=$I545(1TfN5wWsF~RnP1c?2eECrSi5Oj1#Q%*_hBt zIbsKM3)zj-^|j1yE8xJvZeD*o7Nju~kU&v;3&}Spzm!XG;t+gIQ{Idff!L2NBrV^y z0>Pkar1rd54@Vg*GTZ;vGcYvK^LRAG-4Dr}u=P?`^`g_wCrTxPx{0&6k2B;NcQ{hVWe8d;8suH@^ z<71sw>EqNP7ou{Ogw!hmT|=2Gd%=d@aV$jplr^6_cxg}><5WM{ICjuPs*OUE2M#z) z8dE@W_d=)QL!2}_pYGP#3puY4({kW+zJNnds=cl|nyIMNF^(D!T@*gBoq9I}yM?J+ zjec4!j&mat@2uXjtbzAiMo3_@qzgO_F-df)a9yR#`*_nAMGmeIVR(1Bu^jr1hnJ0Z zIQyQ0+Q2ZHeTzza;2#16GDl)H+}*8@OqgO}1S+E&S%~gO!oU}ct=z}%LHm{&q|PC$aBD+PV&ZIYN;B}Uk zRkvj**}@L|>mB0fha&{IBCX9MDN8DO?&Qa`c;}e98ze*vhR5uC8=#S388psU4Ak~# z7IW=0a4b)Zj`*Ok>Sr8}h0sGvw?n*T*sBv!SdiE)>y81cOIzkwb$3BzU`B}~caFTK zG={)p6i&yo6@vKC=X+D1u-W%l;U>eff}Dmxn)|W}SQbj;UNGAB9X)`@SNLT#kk7v| zjX3B}2oSfrI=I9}dMQuEJLUk0fO51O_eig7fm=X1<2nI1os0nJNSPCgldvp$K`+=? z+5rv2dkI1gLXGT20!%Ec-j1ef>CythF8r`01JFq$7Q)&h z;Rb?N?US@G&l!91+7yB}z%F195N=A)uhkLee;j_}0Z{&}0k}=fq@*-Zu)Q1EQ(*5RJxCFZ>XKj%(dhb*u4?Nft3;(kwX~d2NT%3kf{-55t=PPhsc}C zL8sD&OsX&D@J=A1{nsleAx{YhAllJZan_1d6kVmqgz1Ats+&CyNE1u@3TC3)RQXF3 zMBaQTn>)lbPHd>Oq2U44>I74*iW4*D;uw8L7Y0qv^|7Oe0zO14=i$e$`p|jo7Bxj!t|nojE>SkMQzE@dsQ7U zFM89e6EN|Rg5pvxb8Jj<*ZHs%2}7}gma?G-M=6VK-joREGA8Sb=H<{9!+WXfZ$ZgE z*#ER3Z=Z9NwfF8>@1>)WAd?+{cnftaIb>JMJISioIox~*Zo#gj_Ev5n z5Ob@VL@@=|ugR8>BLK=x-Qj2`agsJ&L*y(&0o^)ZlGC&bC3|rv8A^^b0y2c6BIE>z z+WK>~U=uZOvIQF?dA}vKxhdIl$|nma>5%(0M>2uenANrXQuno58l^#q6Ra%M|J=}h zrTZaH5bn0`kWl|ZQn9nZx#V@lt1$}E^PzW&g-7vT!U;N?-`{1^7*JFTe&+VwsYB{b z-yN&}kSK?oU~LUxJF+7R-&?*b79zpkh9L9wy=N)qy(V6DsTgOG-qWwKn6g;+v0(e(Hbo|xCmr&Yq z6vDo?Z)yfyS@$SJP%mf5sQi)k+B&T?Kd4SnDKH7ruq9ZC87q@^8%!EOW{l^X z_=9Y{JD(1k58rOC^*&;~n&SJDu{L@z`Y1Bme;NV?n?sJ$)ep@7BA#+IN()SKyg~@c z6Sb+0X_>Yn)2sQ2O`+?FVxR`!HqBjIw6QN#-qC)JBc_27m|*3?0Sw}!bTf)x1UBZ* zwiEX@atH*Q@j^u}FnDO?Ck!9%ElEZ2PQKmxe9juNI*yITPj3tZU8Dnk7L}!jL?*FPH=BmK1_0VgXE3yN@m6A|u)3cwaXw(XumqLjqEY zV26uo^F3?Z>=OzTnb%=g8fee&4;J`w6h~klNM~$VE`cYd+j3SClCxLA)MbENq)p$T z@M6SIyrr1%pld2)_%$p;HAebg+`4Tji+R1pxX}ytRSBII@6I#p2KO*AnROa{ID{^F zr~Yr;*3_LD4JO~N>UAW>^KDv+7xp=2WSYc4~UiZZE+GFXVMUEi8u1!q8AP+=Q z+gm=~r^?|OY(xxnyzPpta>!E&F_i$X5bDLHl2N?vcHLo4ZcaVPP+S08{kokQLmH8L zwthM3J%jQgu8y$XD6Bo>%Xk13SuKYRSv@fn-AK-F^2>f;I_L6el{+^~Z`fBK2%%&< zpqV?GdA5-cb!_pd%o<5mB^^;oIhZ6jptPDWU%QL`93Q^Q zRM+n)ANG`ksY5fhgnnpiKWwcdqwf;9t3U*aqDdo~`+Mda>5L3BJgYCF&8@qp*4RdQ zCIxGiFRS0Iur1`Rom|S|6SrUVCr+6H-n-4=hE8R}lrRM&jz9IEXv3W}_L4-M>+kSyaQ2}_<5PyG0W+CtFCAYN0Dvv{1$?6FdlGKT8;GRjl3FYwjmKkVH z7Frubr}Lgy;fI1#!S@hB^l6!j56fd#q`eR1Ub+^XY`}nz^M|V@|N9CEKb@lJu=-68 zvQKoo0tqSzKWd(w@6|)lM^4hnU$;v@7YV_KD^2$IXmC2slGF&1kt?SKMoY^rm2X{& zz~Ia2qh`bXJz~i}X{e-8^TRz~)7uZ5XX_CFSjiu5-iPOSntHKNM6pgVuofIYDtlSq z!vg;B0x@YftV-W6LwL&7Y~5Moz~TEdGQn_uFO0(v5rcqN`7Abgv}9GNf@|emux`WV zhzA*!ynl;9?sq=BgFxh}Q;%ui-+*v1l;1(bg6;QbWISL$dtPkGg}}2r zBFFJS@K+k}{H+U_Jtik(Y+lA&^pJV!I{mEQK8LqgZ3U7?5J)!PpTWq3?F^sv5-Ntw z3w5l@7cz{B%j;dddL97yLlc0LuhJv;*@bGMgF6c9S;YLIH?tWK|BeiOHM!KXj>FL~ zhXa8mDn$_PF2ryPi`$oEj}F%bn3Wn>(|ROC}pfaT$Ew`9zRwmFAjxxiC?%G zVtBV@2yn6ba7(0rZ;0i|rH6u{|06T5J;6VwvO5_6%BUQd`3-|=x5m1R<;!drxb?pe?UF0Se zy@IM=x)G-wa~o$)=?L`eU9NqCT&WaX_7(cr|B$*{!0!#N5|VGEp5u!#T-Y24=mfE2 zhepj#<;>Y!u{mE5;&l6HtVSXv>45(`OsR&NMvLy%L_0Lv4-Jk|nJ?`$&(JX12VX83 za*x|UqI?AsvdliJIvBrSF#C#JMo8U5yN7B|g?Vs?zYNv~{LV@lkbWbC=x+^7UkO_U z_1c7-nZ%a;tnC0YBSUG^5hBaz`q5id+D{h5mf@+P0yua7w0)i>1=zb{B|IGa$ z4cmcHBzk#O?m!=$?(sp{>{YqpC%ppT^h4SGYlvs0y7R)4wfw;2gp%36ef)#L_0{rH z_97H#Q!!WaKZ%4E;bIVXYXAR6fQOg*2276vskb78?L(fdDrmpQp8iql5Wt)^IRv-; zWKBYs@J#rju8I4e*$qBt0sL*x&VgJru9aHvI>W0VsI3W%RKcNM%dOh>CI&er06hx( z)=l*7qtxwkphOD6w^x3s0(T~lrUcscXPzNOd5)`z*>viVbJ%Ij@HiAxYoBvftRK_r zhrCU3evbmyU4j3Pgmt!YW57|=^J;$Ry}Di-8>kcG_b4T!>-%Um#YWwmz`9Gu=kpAp z@ry+1)26-iN{>In`bvYP+G79+a)EE&$SAm0I4~R|+Ab4Tq(&e-| z21P~%;^_8IucO6={pohfd?lzb`&-`pFvrc>|BN;7{Zj4@p)M?db;exU4M|v}ItvFg zA*B%n4|xz8ueeZ3q)!Rsz`&uLc&0OfvOR7vk30ZeH1~TSK@P()R||w4gRRV=IVkZ0 z^9Jj27bvm6A&UD#>_ig35sk~UX50|eK3~V;*k17Dl?-i|n6fXXD(gF0?-wakC zANx@_OZXnn<#0<@*SaBm1--bhq?_=@!KSDDJx9v27SgS8WzR09%R@#CWDMx-bC`z7 zttZVgdcaTg?ythX+yG1*tJWWm331;;-qM^I=0}{?Kg@oG#PYXMrN8Mny;>}k zelG2>{bE0hAoho2W69svkQ?*s@4clL+Sx!S_Is4gt%vh^DZx38_!*kUL#3W9h$J$h z-!PMM!FRi&#T9uwXBRe=T0unz_3wnclE!%&)=3M`<-v4y@`=O1WV=H)d!`bYe`hyc z-LjvX4O2JT6%sAo?WwjqR@I>SRuBt({FzS-$3I-J^so! zp%rA%{QwpJ;n)9+1us7){$tjAg@~H{d+im>-KC1jc_{yez{1S>CzgM2`j~E*>V+gw z%<7AZO|LB#B)VQ==+m8_qNG}`d8t1kY*oeZjIgS-Xx1Hq90mAO~=Vkz%OTD2r-|IPhk zvWMxI_6Fa9=WE2G8lq_NT7$x-fhchFTdbjV*`JyJs-b-Q6OkRRWT3J5rInEN7g&5S zamw%q0Pro%@TcLOAV5}6@JGca{d*3CTPpkj2zms4R4he&&$8}jsp5S!#DVkkwWfuf zA(W>hMkPj29*Pw5;2Y;?r4r+QU-PM_5^#Q&O6$OaL6HwxI|NgXseoD636`z(0c*D^ z_tD6`%Zzl88xUh&grATgHrxX9YVhkBcaAE-bPtOk$e3KeNx$NM>E^TidhwOSCVH;; zJ!EBO|J+^y2#~diXMk$SC9U7vD~JxMMsKeGNNDq3eihV6-`@jPXJh?!q8 zX~E8I3cl~1NOUBo4fv2cOOX>LQ_y>d>D52Z;<n+C}8=)S`i)Kj4R@$t^Bvo!Pz5aa|S@l#F_e9L)p?~@Rf(+xeQ8<9!o zkQ}?A`|zSLu2SF=_XB&IXVqSAh+PMO0DwbF0RVvie@SYE!$aT`6gq=EHus#FM+N&d zLR0He6vX+A>^I!IRh5$TJGVQLcIGMVcj{}*`1%iy%HE)e_PT8$gN8`3OGXxM#Mg2f zS_nJ_My?edi%u>#QVl8QJ@FiBc`^>%W>NJ2(%WFq>PO4!nq$L~{Hj*p1 z(bkQ!A; zbdb|)2F6;%1Uz$iRa2-e!ol4~x_X+EKll%#qkdF(RC`o&GzNb53J+M`Ad^x>KhANO-pBOy$P>?6>8oJNWvTek-0*!-nWUb!dp0W10* zE9#jm1N_(BiYma2MKEX;KDz@&pCg>V!mwRGG0#eL z(Iw6zuw}a&R0s(E)CfFh9NzrD${mP5(UX`K+rcHN*$s$EbCS4@S4QSqJ%t3JQGd8OP#;qJ;8gJwHwLI4N6DC z?~I04lKPe$LTG_f1u|W}y!cqG``DzzMk>V`f;<7h2?da52kL0l6Q?3GjFilR#3|JZ zID3Ufa7I!_t--U>rr*Jv_>ht=sBcLd+Fc_(xpy(b(s9VLJs&v%1f}6-V)MoY6zfpRq#ls zBNx##HgfOp&pwAKPQOJ1%;om_pSduKqexHn1MA!GLr&0+uu)6AQj9D{M(`D+!(~jA zAioCz*=gMrR|Ui6M4REJUlbeJCuJ`%01##I&^ZGiY(qOT z`1Uo_Z$h=wT1NhAh(oJc2Iq{^NTMtNO>%+h_yL33G91PPQx|g{Hz6lg0Du611YwTx zP*`ir5#pSPu*s~fG_$vRy_K4Z_1;_`F;5uKt*vpLOBvg4DM4~)_a#)tUs6Goyj4qG z2Bb|ewFgRh)~8@jTzeGhNgl?-5xL8*<65ClhV1+-_ne(iG%0+1->J;&h`33wKp0Kz zNm=i1^>L)zxVefPx)4`4Jcp5hj(MM<^>fc_%2Bc`zs=YlO#h^d&gU6^Hs@oF;CdV? zlbzq`QI2}3`0au!$U`DtzofAtmnF-U{_#kBsPRZZtMy2D8wHEd=hAW_Y=(a~!tnQ? zr$&z^90?v826%Xxdsz1{-U-mzA)z4;8Huub}*q&9G;s2Rid|Fuf!*(^Uy|& zrmTzAC`H$nHyyl8pr(I2=PvrrfCKq*F|i~bp>e3Mw2|;yw~ST>g&59A5UD$3r9EAU zcG+0lRYq)y|SC1Gf8hiZ%h<!Ab;>*6+ZvT@Dq`^qzQAp2OKTlB%Ez<0(|WfJmtz!0!1` z-7Vlg6$1!Mf|?*rz1~F%^%~DC2&o$WV=~lQI$7?o;Y!ugdJ5UR;49nNW!Ptg+#71l_=mJP>dRTQz$TXfs9+Mm% zcqb?izA&PDd*Aq^+wLGloDAAuVNgU$#^$Q2{P?!MEylYZrs6$_JE?Bd$p-Cyz=5FA zb#AJ2}GyJ&KfZylD4bm`neKF`Dlt;AP zcz(NGBcMn4XYnx9re?Ir!8~i#BiD#auy42HWN*1sO61XWTtnM6EaVWF320otw@on9 zP!96jId^s;4oeE^byJ8vY6_wdEyKPU6b`^FaENT}*FlR-%{IW~mD};guj__>3bqb>lY4OHyS|{goBb9InG8rR3&TpPK#p|H% z)RMduV#l8Q*SY~#hXbN#;sklGTE9Q-ty>VxQA24KwIq9iw1c`60E8MICkP@vI`V0I zl8uoF2G;j>^Ve{kraERIZU^Jd&aIYw_IdN|OX8fD>4@%3OPNG)vFOSurxiMQ8gAuRJu> z_P`PZZ^DVl=xMu0@4Xwc*{<4oToN;K5zzw?iih*n@+ZblXpalPWIfm$jtd_fIB! zuT?_;X{J$BsOgA>INYBLv`1PmvTzt;^?Dr}#=YddBwB$lDboZ9CJRs_XP#sZDQBPU z7g;xgSVy}%gP3HXDvnsCnER0MGxWN+4CECZ&{kTl^rZCEhECCDYPb%rEQENSL|1!6 z{iyC}@TmLsib8rROfow-WDQeMyg^4LC`Z_4-l7n)#5^#62_p!awTCAK4Bg*y$R^Cf zhI+u34(^&PS3~Ee0uJGj)^AN3pQ*^2VAKn4lsWYF1^(neb{XEREi{;os78oseWzFd zv;gj1Fs8c21ix`iig>We+yFrWD@r8*{0PWd%Ee3Vnt%M4Qu6+UO;7oSRU)`uy^80L z-5Lyc=3r8c`>UwCzl|}rRLlV!wWRO{@fv;br6dkXT6WKk@vD8?UFcMGa+_L5kIfHQPf{KpKk=wm_!7+X0W_xs&GmzZkfT>Wt;Btv z10&+QI6VCn9Ku5;33Pox-<9KD!>t$P2oXMjALFMK&viSB-oc1}Xw@4gPZLbqS=2-% zw=)ADIW%kl1g0z`&3l7G=lVnHU|6f~i9VFFg~?7TBJL{@@dfReDWm0du>RVzsl+oY zLAb$U1u~Xxm^;aCxWlg10JISQVR2I7~pzkhxTfiNp8x7GVgoPNKDX8$=r>*nM zB+r$cwbCXGq_Wzr6Pm@!IrdlfeF4DrqSu$)i6i4-sf+ng-3J|_}4S^x5UBczw1)Qe2 zIXqnq3sS&B9}Ta+J1LmirvvBzz}3UxPKFOezSRSr%92rA2IMBOry#jl#|lIpq$l29 z^lw))X&|RcB{~iCH_#GNjU+#uXN`kH^wG8+-o`*XS5T+i8y*Nw1`3lt)!@C0tLAb; zihPy-bHQam^Sp<9fAwTpZ$>p zWq4c6=Sh1EpQK{ZmfeEk&{bt(6q{6sEP3Xn{ie($;5A_<0T2J*I31P0JJx+G`3`6r z#tSO{y%wq&%u-gru+X!@#jXRgetALF`D)X%pRI6)fSNdgkaHz&=6&3gQ|_zN;Z#RHiEPaXrfM# z-2-0jOuK>%GhPt}%@j+R0D3acfmz=WbphKVj?+MbGpK{@yzwT$l?+{l96h%D!(?A(3Cv!%@ zHjb$(K+N;C4wVOaFN`;fBr$qpK-0fg`7V&+4rg{_ooF~51u!zHW9-yN-cPV( z&*|9Y)7+mWLmf1Zbcpm|J#!pGJS(m~kuuv!-VD8j#3H8-`nn}Emdx@ex+E78dg z1c->$p`>X#K;b*oX|07Un{jSnsK?8EzrT#6hhszF(pd4hbhZ9%8f*gSOJ$k##Kr@N4G z)M7k^)!bb@b&iAQr{VkOg!Kl&WcG6c>}l{isdjBB%y56otg}l1su3OQ$6y<>B8_Yo z(W&(@AIhG~0~0Cg4%np9O8^=BBe;>v^9OuDaTa#F!kn!ui?kstBK6e}hKcOca>3Ow z6~GLi`f;%#J(S%4(EE|JFJKgmue7{2Yq7&|88>BB_Y!atH6E*fOfX+RGxqYF$Gak6 z01F2ePfO_*UQAFZNZ*RvDVYw0GTqxvZY29o8x$rGj3heB;W7vuplxO{u=$%N$aYQz z2JXk#@UeGOM19?KfIT}m+rT>{cmY$&N>xQqgzoStN6@|z36LU@>&(ce=Ea`DRID+f zl!m*(alrak7n@DptyAsu%Pxrm5~_j;?KDcB%(dv$a2f^OG}Y+D&f;9qB5=LvHLMw{ zU#hgN_u}h4iRd&y^8p+M)i-LXs}*E#<*94SEMRuh@#s8(6L>7fPnemcwH4c?2(w{h z-8A4@U=GkHWW?^M4LE^{>h6FEgJ+gK0;M4l-8!lJ2{-w)$y?A-v99$$cE9y)VaF{5 zrk>!VUDrHShZ16DKBJmr05raR0$RzZP5{u8Cx*MK;|iYK;tmTYZ(0;7HnEY%w;4A- zT1V;ql*L}~@2N6@&h;MK$e~j-6WwA{#hphMUNiq))#Wx+B25XSq@rTne3vOIP|v+O^J_B8EJDB1x8V#e;RtTI{j#T zmK7nA>g?PK@tGwPoUxCh@1{H2wcAk4HYtPP$n(kf&ES>+Av@v0C-|t96QKY4*CMiy z6s3?OFCFVWHb3z%>l|R6(?<%i6`H7n3IB18bPz+*wd-JECTm};fMQcex}yTj202Ge zc6&}G(=MLmjjSOgFqI1jRESXQ0g-JbeH1H4oeIe-182)I&>h1^3I>gyPw%j)#0-0m zYmN}C<;CUjz+t!9w5Mx5tbI~a2zIVy+tI;l4BLv_YtS1pxc>fHtaF zj0P~BzS0VGM>r1xU4+tSMuXa2ML9qWgo2lBHDk8Gbd^yG{$vem-5#(sWNa)KV^{N> zXG7%!-U+6VMn>}g_wdJndQnUw|vU7f|AgBdWW!eGNDDW6T+ zpXX56L^egiPIeC1!13$SU<+X`5A@bWsniLjp@gE!rmr%ldle}^m{1>eIt%>Zjtn+Fp55(E~TD-0q3V&8BmKC6$-148c{)U*vxhmA_sYi_kNOvEK-yJc-Rm{l?gXnb5$|; zq8&@{-LU#Hu{z%NIgmxY&%{?YOyXovbdQEzGyp)84+; z0#V26>-c;bMZ(Zt1u#mfuaP|hHov2qNQRE%v+Zl0h>%t;?x+U7&$WBSn%93yq4?`0 zgNVlR>$p8ab`WLfv$)_(~D$Ij$?f7S430*sozgj4+Ir%O}-`2F{d7rXdi z2PNXeYJzBhkOg5#-9=^yi||->h&Xf%dTDrh{FMx_<@qPI?)$Mg=rnoO~S<~ zWkf3ofgnam9dvHxm_Q=8O9oUD^ht)~1j}dl=YkwKzbrwmm*{Ko3aZ4sDWUcToH2BV ztN^C$fy{$c2r}Y(`^G5E&Fb20DjL#@#%CF%J1Kl3^&h95Yt%NxGvYg8jZt|hJ47S) z-(p$OE)PLF2;I3(Z>dNejc&!hrLhdAx=v&ILR$|QucrbGg57p%-~^c)Y9q$z0R1td zSQR9)SaXxry6Ldy1uAB9t~zy++JHmTeB6`vwfIMs9r>?5puuhPv#p=O$!U+km!QSp zdeux$J3uJSG5gn_VW_!>J(_O`LvwKl%$U(!_=-&A=Q^5^HMbW9`X`EQZh;J@wo3gA z6&o;tsdtjaK-j5veIjFmoWNt|tI*%At->$cSRmC*@6Co9h3p|?PwLPg@2wCR^eP9H zZNDyDAaNe6oXUyys2wTk2Tcc8 z&@3ju*E2?C*OVh+j0W0mVGBh!(@`d5OdU|uLFw-YM?4AMh`|-Qz1_P3>zT0) ztyE&5jX;0xOFmR{MJ4i}58_6F+9^5J`;wbi-@y5cK!*a1H64>HnZ}@iGI#Fu1}PjI z@#NQtuPvS08?DC8t0G$79VFCDN$f+Fkt?yuB@IU+uasB9o3jF(!nFx_pB7bSM&~Vv zZ@FE&I;C~n9!OyH?gXzeMej2$g%(1|P8GmRc5Gw?>&i(0TEm+rkNX99QN0oyxM0_TC3Q%}yMWKTFYwbn9Wl~;|8+WpWa>SWH-xHTcI z|2=~0*YzyTa-4A+;ykqjIYu{O0Kw`mK{_;XPE#aqo2|iy?&_>WkA`@BD&sz4{BLPL zp!)b>c!7wYM+0{F-63Kl%Isg-T?Xn%8nsd+xy~ zF~%L=*!1ZNc^rv+S0`$Ms05uuTKz|48}B)~LQb7O{ppN1mrb4@6SBoyVO+l+8Uzq%9DrY-3Qv~&r#ALmoT7}H|M%; zCzQ}g1VqhO_{)?VT%w5OP2kO`vB1!ZRo5qm5U1k!sH1 z^Z&?1?@LkXe?5*u=RR@?{!Y*XJ;4;dr&tn3@ITjIREA^F!j@%4U64Cf;K541w@s4t2(HDw~!Z@85cZic}HG_dK4pA zNPY5(P?JgY8Q^^_HXu$x_S8&8DSH5bcSdV&3&0Hkd>V*U5cQ;$q{IP2M0(>9J*@;2 z6yGfd`DXh2wY*Wsb$?pG#34`6y8k!$5Dh+HKk*73t|fF$mX>+0jWO#Fb0P=t9iPZ3Ha04`08&D%fK)6D!csHJTjo@V-o!z~c{=MD&9nJ{<)E%X4T*o;GUtJ%+{ ztHEe*&MvrTE8mA;po7rGKh#Wso0%dk5=(%)G!*&a z`1%1n(q0hvtLhRs^$zG6MAuD*1>X1R8C5yV{d&w!ls%cWV+M>4OC1Z~p&d_Rj!(k` zz!;jx(+dnbb{y*0M0F6GU19_8umtEy+73{tlE7&SE3}@{;(V`>*-BbQsH=d@3$pUM zK*ZoDkkOh8F@9h+S>-R56x>{&3v`DiQmCw-)mWE9lI_eNS3~ zxT-EIwk5g|)wQ-=EX;U)mI)NAPb99>z-xzAl|dvtd_vkB37ugbJjozjpz4t%hX<)a z&<8D$kz*`;?Ii!jGFU9N20%H$i}@l+;`wQgKFq1?(1a26SHVe8{F8L^E;)6MS^$sX zr8*iEFvt=QPuiF_c-{_|41&PE!gchn$wj7RmlMgO~zQ-Ba{RRRL(#OoX0QLZu~V z;XErj{QaeG=5EQD8Ldm1N`GBiC2jG5O6qro2VR)K}FzxZCA{T4({n zE}+6liUQ8C0D1mqtkVN_i01t>@^{d*YyTnPURX0;T!7-nT@8EN3ULlmopxdEq7ED)2Snm zrkgYX!}N$HYMtkP^XHZar~erf4zfow=wi{PWS429Em6?2?b@=@`IFNhTmR?mJQ%{v z09@!7VX*{VQVNt^hTa=th=KY`sWW@mD`xoOJ}6>bMV1Orw!mgqMP%Xv$acbW*gJ0w$dI&*Veh^*^qI%T+~ky%d|8D5Jr%k52lkyWAjn_Fj3( zT-FSD{l*NHB9iA$MD+}S6zAbz7% zv|4_^G|K%0f*knNXahC0dVgR`e5q%5j27TEGmzfMWRj z0HmTl#h4tfY?nYK5=pkCAt@mU#)7o1(d;b<+Q_ei*O`FnCn}9Xu8i(CXP8CeHMl?N zCy1lUS>OCks<#jV5%#C2F$;4En)z`0w@mLR9)Ba!=;5L=H(GIJL?(eI!j<7iJYgXD zC~6nM7{LfOcyJDM!khhvznlOLNczF&|}41H7pk<29gHWDomRT*v`iKtejF zZW_EXa}R)$<0No?2ui5JEC&PyD6C21&U$3Wx*l@TjT;)&HDq@$zPu#u3FA>g4Y_2Al3Zu(exU zaPVda5a2=a^#W662z*Dl-2OkqMInw^ve=VFGqo)k2-zr1L!P8M0?H97?=2kpWN#Mw zifZGi${0bsAFqc}l|gxN-b)rY$m#Qf)C|Kl9ida6^Ky+WuSY0~#9|2mzkU61sT;zv zZo20mQg1pNYl$Yrh_O|Wiq7P|5T2Xh__S?)CIf4l*@va2a%>ebarfh`@eRzy5-5&pvoQX|%=*N<*$8jJoyuvJp;9Xn6}jY17Z zfS=9Snm;h098Fe^_C*Hy9~|b6B<l(MLPm6mKknY6hu<@c zh!_mKt+e$%tZ7mhuwO;W+o5H~38PiB`>j>=0p5DgdpR(6{>TG{!f^}mwOj1_wG_=$ z%Y+4;ac{~Ec&tla{aLo_<{MZkxW+xnzv8RY?I`XX5ZSz&D-U(C>E=7O!xW&h!4F%? z9$n8+)6I7P6SAG8crzu}uX60YR;FYdjjQzrT?KKzoJXS3J?y7cqyL1{N4D;~{VI!6 zaIck^{*+B(ht1*)$vb`TwIWjCADEEwCQS)GpSRAE6O99>S@ND-T;Ajtq7&}kh*kp;{D7_uf-`U-Oe>`vsIP89u`(O>nZ7LC=T+-+Jb~7rsP8o0 z^_{f7-hCr)UvC+MU+ey*r7yKwqU*CV39m;GhUr^p5rH@LsrQbr zzcaa0%Z_tDyn0ld%3Xmq6rN!1k$QbM!IQgyW?JQk%L3=`C9C|CFW3gPP2Zw+XFjN211a^U}{ zGI07Hz4B9lB<oFj=bF3{fS=O+M?*)Nr)>n||-V4{xw@{7hx)|1zRaV^gM zVR>92SZ(T%e}WBf8aw_1sRrf`9?Y;Zw)WM$hW1vc?2;9Mwidz%6MR`U#;dF90);0+cm=ES^>F} zMumQ#+G_pq9T2Sd#7kc6Q=T-Rc+sK}Q@LnvWUKc@Vb9ZkPcW!%A?P%>@@C87+a>kk-d zCuv6jWMA_q0)bGWq1V!x)lqb4Ublmi?)u!Q2c=_eu^Rlc&FtaBa{aoR33WO|Jt(tz z3tt$XE#D{xfx*aY^xeM3ZV0vIo2!$$uz>AWH|j2Q0^x>l{CGf1yhy+pa|&FIgl65s zJ?yVe!<)yu>Sj=kFjXu#OAh&ccd<1sf8(v>fO@@w%IK)-q~X&#o7EYE=D-_r1_#X% ziti*h%k#hyVd-Nrh~A`{OZ@upz&4J2&8)|0wj-)2%6*Ec5j_>%sDSW)5sjmFT-m6d^P7kuly(&c9~_;O04k?=Df1cFKG+ zNiX+IVS6B0@3J3l6opO4$-@5sBui71Verlok5|!b&jf?;&?Xa2CvD*w$VGPoqKdLIo}nhxh*;hB7L6n2^k|)$@#Hxfg{#Xvt9Uy@!AnzgEBq)i zenP@f=r=`X*9A!p)L=+@CCJ8U1L4QIcE{e1R|Tm}f+W%u#@WDjyo!m@H#b~9{X%zK z(0}OJBxM&j?LfIhHJ+Ad$mIW8KF)`)WRT$Zo6~hajhFatyJz1&_`Q>Edsa zHDzpq$8WvuKJPW^bB9JY=&iQ-ZGQWcz5*U>IKVjSS~ryZhZ|aw5Ngf*A^AXBZ!1lF zq#6O|0U)>00vL-ePHoleNG!1Py*IS(dZ{6LBLo3Hc^|GCUEf#8ea}2Z2A3a0*Y?lg zcqm+dg*xos3e#DpmcL}nJ@BtLP?f*;sIw^G6=oP{s-a;fp+wp+34a*v??n}M8}kol z*Gf?%-?YzK*m2dAEgAaCG>6HAh`(|zpt&SgA_`7*XY3g)D0M8qh;07)i`eN~eh8KF z*IyOL@Tf<#GPyh#kU-&zth6q>;cjLxt_1Z!F8oM`FqijJ;MJ7XV`Npg8W6| znzbXfBVqm<$d4#BElUQzLW-TE{)~4_-jq#A=|S+g+k5urGBbwctbb_vjWaM;hp_&#Dzv6m{OA>%IYIOk(d5#^=*b>zB*@*5Y6v zgu4N=(`GhW_&Mut7uwMes4B2ukhln3zc#4<@zv=Hv_JxLd2^~EJRx%wA@_sh_BE{f z57LhIGKM5_k^9%l?+qUCFj4Ycfg1=8BsBhjBd=QLvAp1eaZugz)9QjS33 zmw%!u>y`YJ_fr;4SqSSf|AZr2{=!Xh?6mq;VyT~jz@aMV{5rmLI~~_`n~d#`@Ix4P zjN?v&ELf*ic_e_WvS1yUg~3Hx4k2Au3gcedUWi4??pxyG78_0B)OqdH64GcMCB1I1 zfNz551^Eg=>!23C`{S+?&Qk7N3d0dYCwyp>yB=rdy1Mg?o~Lt7ykq;kPOJq98kD=% zMmyI4sVSeAth>S$<*wVwYXL|<3gOE!=)`<7-a?-3olCsU&k04|2MBYhEk3BaWqm1O z`L|E~@P0pKJd8nAdX*uM=P)UrlC>>qvxrgf0ggR~61YyZs1E2o-qvb%zxBvClu93oFd@ch`+MoPQz>+TopqT?b?u!r3KZ-3*q) zV1INAO(AXLlvv`NqY?mPdu?>*!XSc|M`Fc0=;aUg()*ruaTaH74Yr-s=zyB?dnw(C z#!sGzklABgcjjS%Wqqo(!0@mIq9#ffXJGZ>^Z8tJJ=33(29$^Os~C=F%T3atg1{ae zuTA$^;@00)%60V}x%akc{;o&?mDw)@U|xSbvkxZf7%snP94051sUb8KvpwsF#h&3; zEPkwB2C%;vL4EK)=$OByq7tpA<-n+h&Np4u+G)Jg?Dxv@fX?g}TbP_&1kLZ2<%TQ( zgSs=X2*&kats0k;bro=UwY@k?n4E*oxyEz(i&yj5aoOUJ$Fe5bd05(kt_@`zM1~G! z1AdZp>nD;cTenH@_w{Fi*)LfztiPM=U3DY(n|H`1=q z`t`9$3X$G9{#qTBzoEf>S*z&;Z*#8|QE!Vo2|4rDx*-UQW(dcnxtYryB>w%MSh;d_ z)h>D|Jve&Md|26n)-h;B@a|sTQz&}QBcPTTyS^!9Lcw}J^8rNT2XdVvd{W;t-$-Xz z*dElNOHqoikaFrp_}~J-1n}&9b>94lC>rLkbwTl42Clyml5&8e-gVgSC&Jw{QM{1f z@?iePz)$GtKI-=4MX}Bb5(FLjea8^ye*;H01V@77@Ax=<(8f}g`E|tZi(NN``%6DS zuCO0IBV2DL8vvZ|+fvfE45VGbNi?%x^d)x|J-(49A<}M`s`ehk8}4X-F9-U!t{=CQ z>M`=YI%6TrQr^>6cE=W<&K`o-55w1Da)0BC^YRx<=nvT849XjG@3p!Y$T2f}z#FXW z!IDRwGe-vX=kx`hF#{tVZzET)iwAcT@B~dm7`()zPrcY|@Sh&zzY!@8b(G`A7k4zm z65z;{7E-+P8m(-$w!;aX}>RdHg53A<4LS_2#chEqp(~LK+X>iPUlpXNNU_Gsi7-S$x-;ud2>Cq?W%W zLih^#*ou&H;B%C|dv@r*|CJn&9$jY!8}HU;fbXmmWxowqmk6 zS=P$^ErYnK#k(49m>+w+rMs>J=$@#w;c|5-HikJ3>ZDIyIoiw}d)Hv$it>A*Fm%gGWYs ziEP=@t&?|OnmIK;2_(#nn$@O}1u?`{0js&~r3;&s7m#0=k=CTveJxPs1a>JVx} z9&7S}(tmjYud0;`HRXu~u)J|5ad-_L4IT=Ne0$|v2NI}SI%ADOMQC;;HkQRPF&ME5RqB%GSC#b9M4U?v;iG!K(rAGW*6B@FHTL9&B{+F zY9XUd+B&KVKIB+E3qI0gvh`S5BucdFtG)<6)`pd%@Y|Y z)QwATD(k?7<5Lmaq|3y`3#I@(n?ys0HZFm#Cv0vrG4)_|gc}+Vi!X-7ZB*_Op8($k(v1*@$r{vpjy#8#*m9w~$N$VC8kX{8H~1Cv2M6aUF_B-Uf{z(5 zRKw+!$=NqUYv8>xwX*KgL%^M7z923 zxaPm^R+Z`Y?N^gt0A&vu5>BLSdv@L{uL_IsL!&99zzBX1Wkis==yFE9Uz47(r)cpj zS5V_I{!U7Hi&AI!Bm%{sy8gm1{t(?`{W^NTTet%oaZGw0qGdn3cpHYc89Z%Lu5-ud zmc4#tC9eB#{hOyOU{Go?Zh6RX*S!<5gnk$Su*`nvemt{}qGtJh?umjbJ^pfMonT<2 zBJQJVLH>LC;!aaR=*93(fZ_yi5f|%`M^6~CTI7~rG?lX+{tBox)Rs?hz(k`2jI|A@ z*otjeM8pM_>%%?KUTX=Y?qlk40asjg@&qkY%^Q%2hNZOjK*^VI{SkHgZ7+K-qgqCF-gjBmf{^{s`Dl2vt0xrRDpigrjgdj#gBs;F8Ale6b^qFL z#xCF78;33w?ipdq#9xRfr)m83+{)3s$b!EUFC}Q2quTn!nmGZ7DY*=6v5f!Ta(MJXLv7IKAoWosDsy<)ADp(>pg+mKJEIK%T?3BwV#GAG2_VADKWX z7CnX_j`g=wESuN)hUT5dGB<#^-g@vY2L8XawkRAaE3F!c0)oSJz%#tS`am3fO{`_6 z{h)RkZ8;B6l^{NO{CBA45Z7j53nkla}=M)+XIj5W2_V^Y8+Zi z?@jPJ2Suwm*t7hp#Cmg#gLNEx593Ogju zKVvwaYL$E|=Qk|G6~OAmJ;Nu#w`i?`>yO^?Gxqyv;6(!jc-CP+D{1w_jB?gtG3x8i zs4+yXW?ZrsQ3E;W1LlI0V{+VgBf&RfQNTtFPNQxOO#`|$nEJQO)xU!QL-6oS9R#Pk z)VhQ-O0zLhVIC4LgFUxW7-fJ1@{k^3ew>wtN2*J9kF?&dmyLg=c8K7h4l-^*4dosj z*Q1dmC+R0G2edP(CI^+=CFsNu_&@P~1w*gW_G53$=-~>VE z7U5WYg3zPD@8HU!+?!H}{iAtb;UYiYsG);F%6Vo9AqvcS-*KQ@#OI~lN@WxGIh5q{ zlNS_xA?ESg%%Qv&A2HD^%#{049{L5icglND%qa*pHPP3@3^WwwUaW4O`>}5XCrUmN zALVL7SRT%sQbwG2j5B%&6L4PD+tScZ$|dg=R^v}{9_$%|@jp+Q4_MAYH0|*Ww3ce* zc^r&~Cs7sKxd8v?a79?8;vxa2{)HOw873!k4 z{~OA+gu*?igUkbd&$V(s%n`DXDF`ZA1#;W)iSsT5AxKd|1E%YfLx{Cl^eJu#eJ?xh zrN(4<#-2O|?tOYTW-}ov!uohLTdwMRY#={M1QTtD_a1hvv^hw{2F5!-`21U-iAwLo?> zTr0~{P}!ur5i19b+Bv)psMO-ju6QO@aw(D+o4>Zl3T14-q=A1^ra|%D1om3f{n<+3 z>rz{>$e}z>T|@$AE>L6Oy(td873OWTz!V+}_l1OkutMPMvxQX`(xOW{Z-|lkuSfWM zg)>OLwdd4q0p0VPi3QC-13#n(qaHsJ$HTUaO|&PwRIg<`i=p*`HFmCh8US|rTe8qE zEI&#i{NHO8av~Rv2-)UqjeLGXuj#jPAqSC~PQLPmmc-$hWSu-<;3@c{#+HAdCHMoY z6Y{S`@cxYlroR~rKIq5vx75FrZwos2dnX?Wo1o6H^}`ypRdlZ?K`JX=ld;<1!6=)4q2T|#@pkPB6OuN9Kh70la`w(+W#&%jNT_J#pl zSek6(7DNw6>Nae4w||Z*k~ru}v6=>r4_CX5fUGY#x%kb8fRDfrcMae7IRa1QXi3s{ zgV=;00Vf}+K**l+Pker@p+2w+3ggl(g*^(k+{poN|rE?}_^DUuUN1?Fd{DVX8ueE<~2@BN1b@9pAc34-^i0%C!3VLmjTAZ}$&^ zrwhr~#hib0#^85O%7F<6CoVCBPZOsb#KU}yO8l{YB|>r}0D@;E6r<8`VuuV~X8cIK z;aERQGM+$F?l)=S*lRvu68nQQd62wi0r*`>lPWtY6HJalPJ|sgPen=8rKZWj94dZC0L$=VSmo;6$G9*dKQ&A=1+0EIvesH7n56EQLWXq0&XvAbSE*a+b zC^2Rvl46Orcb{HCuY^tsfV}>#oc9;jA4QGg?<;t9icG*8`}fR`{hR%1F}waPkJqqC zA~a&1+gn|G{?+h7L|9SXna7c*rF6m5UBuv1K}2B>MAL5_M!M6=tewMD(^jS-E64OE;rhJa~H%p*;gyC}i5uisNBEn=o^n=oW+aC=~-2NUscs!vP zAV-+nUkzuHzu0cbQ2z}pL4EmaNdOj95PZ};+25<@^aYa!9S&j5;0qSV zKy?zC4X4w2>&~D<4|m;}MNvsZ5A4}gmY=vD?y*%5H;gHc?f86UGa9~OULQuvT5 zk7+~dM2|xl-p@N3!1LbQd0jwHndUyYCMnkqLX|XG0Gwp&ov2jIEHK*I3&o_Ad+oPC zqew{>vp=1;?hHC|GV9Jf-t5-@(ET2TI}|LRFuG`Fe(De-L>;l_P((88xV}{{2MAu8 z@FtgW2l3Hr7PGOAiPZfh@tqy<3nw(QZ-AMe)z7p-%3^N5Vhlv8C5-u`(RN>VgUa5@1EHEqhdon)0y$r;7(bYb~+NuE>rA0tL znM`+}##TPIHxw~%Dl#_2Uoq(nB|z6ZbZ#}hQnoxTDEZrHxpkn|@fZ>C>C=5!|} zZ#B(DBmJ9K z(gA;@XySF~P8j{C{$>vT=S*ro`qL>9%45!VXma>U9oi3NVv}xw`$?9R9j;FWvVQ4b znx9$QDlDcMN2HQtN}F<-Ub#OE8{ie+y4;!j+5r+&Py^VPrd$@d*aP!cvx)R(X4hN04l~OG*_K^AABwz?od&SXpuEo}X5Y!K+=sf8Dq9|q9`w;Tk?0zN26F#mATgXw$I%)X6-^&9a*4x-t7GU3}? zxIZ|ElfFiY?(cNOe#6P^z`NdcFn*kbq|ZUB;lsd(^;eas{e%BCbU3~!|Hes4we;^f zeqO$;7r2uhT1%37xZ`fVK4+c$DO7PfRSK>)0LzzfnKu1*xK+8r_YBG=@k4;?O?iQ# zFu>v~V>MzG(HinNg*|O8;&*LLO)6ZJaYpF9Vn_uv6F|o`&L-9P%` zo%2^ecvN_QuvWjdGyeG1M*))L?;&RV$uw!7gh${(4)f2l{1!quzDbb&5d|>&8ok)x zP$2kQ0i%OZ1V17S%s!Wa;fGPl^eeh3{?aY*BdR)Vf!wZ5Yyj^ zX8I4&r*y+nZ9u@6VhJ|=_kuMDj6ZwgD!=yvfMjqMRv&b((0&g${ht$!gfY58f zw*zR>#Bw5%NcvqK<8N6e7aDNeJLhhL@V2pDjI~P#-rxN}gyX}feF_3-ezhcC0C4d~ zsUese71l|IHZA^8Mfg?w#l-){We1nP`(BHLrhl#L1f8T4={Ooydj9T{g8VW4nEqY) zf#vc^3>Y8q{z{09SM5LQUm9ip3-ssDBvSIfK>yp+FS#DqjDO(el1)RxGUzJbb|bv? zAsSew;yx-1sK1vS_oFzkThpwM0Z0Xjq2d&3^KCLtzSxja2*h#^isR)Xo>3$W2C=~% zz0h~N7cREnC4SgtR|&%>xD$waot_vGzc5CxGQVXaVlljI>Gi4WdWAQx<0T}Mq~mQ% z+{1^gnUlg}NKSU`1R%=KiTePCcAxFq3E6&dAUE%|6F?ju{H>ZkacLn##tdO%|G{F1 z`JLdM9ru9~a%!dW*{9UGh6u|q4DZVpr?ka^tLJ9&hLG#C)upF(Wg(m80MENJJ<_TKzmtZxw)#h{~wy-AZTxyNPO&JEb-#ijAQFUqGP0 z)sVX;j?+SR!Dztr#0YbPxIdlzhEd_iRF^RdXJ^0mckxZYMzn|aksqp85eC*B^nSKr zgd=X|)3lE%2sP8`y@I%PRJP{%hdZUDaY78{GYTie+UDT63Uh#yme~NL9n?~u8(Q;_ z42)Hw0U@y^`;$o=z9rFcvouJXB%%|g5DW~tmWq%Dn0hBE;Z<&=Ij`&5P+?#L^Xjl^ z`lb81`GSq6l8KatPf@fs6<}%FXETv&fM`gAMba}$6}XQCA6aXtb16(4-#w&kv0pkn zA`VPNv*8iVnMlH0-`cot31s43lJo#eWW@wfMF5};-5GEWR+HhY7hsJ6O=sNoMGw5Q z6AS^K#hJ;ABFuEp<0}EDLcHJ1*I8f(Xpv68Fxk$N!dY(s+}*2Axh9TK3);h=sTlBhA!sT!7a$4{ z$;DSpVkT4RWtNdj!U}wiZ;C2MTfWUYD#K!NVM?q*cx-*UOfT8ArWqYf)iCxKK-Tn5*L9D^0T**WDl{>X<+oAQ#H zDsigwk+9rhKMLAGh8Bu`i#&0T!Nj*bZ9Qr1;OsiJo}6)<$QGhS-VBMhU(}p|*ixCd z?6E&WGv265l98(NO-j4tHg^o&2jcPUNcnfh3PD%#l4~5gskU+?*zdG zy0x2-T9MKo#f78GhY0oZS+&A4gERSt5%nsP>Pvazb;+anL-S0w7ZP(<_ZB&(n)!?> z1kHR0CLrQN^{vz0a81}e6Dd3*7hX51CxtM95+&rf^&ky)Maxha25O?7+c`%>_HxWR zx5_lVngcn8E-9)`^&A*7(Z{2RHF*HqqIa;vOfN;gEk~X8b6=usc^xx0%mlD00pL{~ zRUaiC3y*2<6}CeU+z%rA(VcL`N)n7=N?b}(sWM23Pkloy??SgDFARZ0A%IWrKj$N{ znY+u)68dquNqr=X41LK5g3dKRfMT23ocgFBdi*VR9ARZiEO45ro+Cfc0 za*;52A&cu3&e8tk%mN<77Ffgbq??h7nLC1VdHV8wMxJ-M%m!gH zTF(i6wn9BrxwW;e`dYYzS#GK2w>b1cPRjBp5KX#( zN;XCY5#7=Ptw7zwbuzC(NK$S3g)+)t1$WpyEyE75WP!#D;)Z5EG#A_rD_9RO9P1e! zyDnF?T}Db3jYO*?ppCK%<0v5E0LwVWXe7FTZ+sS@wwdI68L;bfwd4K*#3Y+CcF*$N zMqWSO#`)LtnTd>O*D@OClZGH^&E2plk~$D%)|;@KF|qn;GG0j+ZlQy2IV-?XXbFB%QZV)}2E;PZZT3%j$u3f;()qv|T_hAOe#F;NzhqO+r9&b%BqDyt- zBdb-^GNL(a48HWYaw|Y_a`DXk<3QKuhH5U^~_aNvof8zCnF{$71dva2o>v~;xV0(U*4%b~< z*{F~&X8)A$!#%U$PU`6!ElpbvqFt~jMogy2$GC)zg4`{>$K_9MgnUv+z0b#=;J;V; zjuHpW@-286A9*x(jWK5mvKR^Qp+Pl!c)5fRMhC?Mk6lhCIlR0d;&f)D#WvkEw`pq* z-=Qr%aS;%mKt7a{OC(~ua3wn+aJC7e)Rdj_-6D^i^MZX01cAWtIlej9$VM0lgKp1d z0=&?+CwNbbqf?+={t`yeYL2x{HOls}%lDLaD6Xb=5Oi`m;z8+9cUCC5;J6$kvkBTm zLbThdCqwxfGj}dXKVSIu#E_W>;opuv_3K7YoZ(N5Ch#_W&_sEHDSjzi=2C}?J{m?x zb8Zd6r?XwH1zuBwv=17N^^018bdO&k(B*!FDirG!68Mu3fxokek29UNRR#5v_N1L; z8h_HBj3@n6{^tD7-b>q1$dHy^Eq+hIW~N;vzsDo%bt6cjl5^XfYOG^{8fCj{M%&8K zr4ud{o^?oj(a&(H=n6lT_97_pl(t94*dD6f=^hom4(^d2g}CxbbWTz zK(1_mxm1PViH%&?Y>^bVK=%YG$1o5|BQTX+si1Cbk1)|L;9#|rA&@OHe<)fW=qAQh zdrJ3C$ayzOAdlYS!J0;k3uSq$rdkY*rU%7PfCzrKDE5gQ7-ImH%^Q!5{D!k^Z1aT8 z>5())9j;gfSy4O!OE(e}oLEMoZBpbh35|@BFm{-Yo5h{h`$neH_!OINY)nVWnPCzK z5E9d#Y{VV2ic5wd_(Qq4#K>?on5>N1YZWEYONbe_*u_Ehpt-UYEiLMPi)UV=%v5`S zPbQHARi>_bCW5CRXOEbYMG0}{wip@#K_EYVbTCx`anyKX@^vu;W=O#!U1c8q7}Uch z%4Lu?*$e~)smb&Ps6ZLvr0PEDK)?zl3aJY3B>)bHO&|~=D3z4^AUdL>zksNq?^DOC z3YDSQMnSMBD_|Bvz}Z$H0;?!6@B5=M^1WoC%MLmG0K9=9mjWJ5Gy3;vi#Qm!=fC+c z^hV7;0@kgAGJ?Gfm2uk@yszsZNFvSAL<04xexHi3S6)S0!k^f z1xVf;?~>dSfN{+>_|VNlKU6E_qbLJ{}1>)aeuP$`F`;`0iRFt!R9C*{0In& zgtn==-w3qi3Pgr8saKSn9$zA-f%RX@*b=5p3n;bMcEokg|EpNby)hzfIjIY#itdiV zRZh*opi15erg?<wLED$~m*dD3@R6&B-vzb$f zusPYVNVobJH;C%+2b0TiRt21%3JjONR17-zA~D<}zxQx8G$XwBaHHxip}NN{=LSk2 z3q1@_ty${cDXf!}})={@ir;~r&4x)FNK3X+If`Fxp2 zF=++{Ll2akJYXoah5{-fwY|@FQRxG%O3iqOC__TsR2s(s6BuZX`Vf<~3QDch%#S7- z+3U`*zW=L4!daoq$U~Eo&hDb2tsb>7JCt8jYMHgg`Cu2+Ki-a>7Itr^qNSso4!j%+$vx{gJgj& z2|H)Ck+wLR({K9VYP@(>`Op*5E-37=VoTG;?qQ?v|rwY8;C{ zBR^<4dngGp&{5Ii3$oTR^4i>Jb>(qHFjTklEY-9;aw_cr!89_VdCcaWdoV&w1_2mj zBZWwX>7gA$An--6J!&4>U4?A%6^!rOrJ`rV4qPePJvZYvp^i)gS+td^$_bd++B z$#2`NyA=R4g_YTwKO{C3SjX$NUn&)kvX*paP`v7S-vav*U35tr5-8M3=QBhdd5th8 zrETsExl@Y>Jz19mwZNe6)$;0o4ZcR-?Q2Z>Q<+v$V0v4|kW7oSEiF%<-oXWX@&%vs zkYiT{d=i_vDFYnoJg?Y~k8s$%!1FOameEk;yIe^%w)$NZX5&s2G8lTT6Hk*2q1Te5 zcA|k+jLv@&?+;T7gReM#z(~g77i+d(DN^{4BEwTI{qMac#LQ&2R2`QGV+sccc042xwo_>9` zKy*2fE@ca!!gP%4xFQ@>or!tPrjd6U$2&Z7yRRELU^}q@j4F-f0Ro-}lfy7<;{ade-y!Q^AgY6L z1T?819TFZG%(y`<%dpNUo8~vpBo__94rztYXSs68^DG?hFu#5{HLrSL(s1vCtpQ!e>D0sb| zD+P)k^Z?pS4*CUS-ZLSbMy#y}!q44=i zP;2B<|JVm|608t$44UZAZWu>1N)*u}j)b&poF^AUD0r6Jz@c z#fsMR91WhDjPOFBHreyQ-x|rv(Mz|VupsZJOLR{`PcK6flr~Z_I1S5UgD`K3QG3Lh+oKQbt&MZij+6!GZIxYz!)ZIZ6~B}QSjkvrn^vmotoGy@&mGFvG186r7-A3pLpWOH|WjslJD7dyS1EuCD*AcAROy8Qs@~u>uW%0E!jwehSj_4PCiu1O2qC*L13%@m3KF zhK%Dr z&ExU}7FKjD010|~wo1k{6|TW(e*@YScA?j{ET_Ten4#!V6NnwVX(3P4qaB@ob##E* zHv%Wcs~$`kw1Ia(x#9#fo9JjeRxS>0NN%B_&a^*v3Rgy!}758!+WgCT?8? z$$D0xdulCE22R##i5H?*Hol?pS|QrWbDFR3$XqlMLPyJcR1xHE$0_3!NA${wOjVkA zAWJ0_-kE2KU>F|2{{%(ZzhocWCg8jZ+x&=RGAXJoMyAZYBPJjfDV2Gx3G|C0LHTK! z*t8C)_Lna80i8ROPaN}a;ny4N=sk0-`?Ia;`hrmD?JApc(V_9ct}i*>!k};80URS+ z@iJTH8DSS2ROD4fVz>;;lqThNF=MBCGuEIU=b#hC5VbIR8X{qr^;+^%cjJcfNW2)x<-tK`beFSLIQfUiT4ympN$>ZvXN6eUom2RI-ut%W{5Y(+U zA;uGm4SEozR7s*cE)*OU+jK;kL1UE^#k?g@?6wbMlqKRCz7grRHBm9Mi$IZMVZ_-$Eis8Jy`$RA2MplZJJ^Oi*5 zRYoLaH9XuW9)WY=88p)CqQRoBk4TV2oTCJBWC^E=sBL}iH9L6IyI^%OUI0r%44rm@ zTF$v;VaK84z|(idj_dd;cQex?IHlm70~~67Webv+m(PSctuSZk8nXRvdJ!+9>9J&D zvR9SaLS`nl+CauI>f6x`d1{&-{Hed*W7xs@E-QG82%)6rf z(2|xZ&pwComk`pfck-oA!QtT|;a!yrWB=F+k6kNThbJ$l_;cy2Ek## zq02_pSrF#9cQAkPdcjs;I@Q&wy3M*};KqQdYfzAnn5X6iq8tjrCr}9H3fcueF<3s+ z%fv26*1sh{S;2%9H!D$tapS4N8W&2arj@VQl_*s@VFrsv&Yx4tDx(zY_$}i$ey+wn zudcnsD{aoYRIc0WsM@CS0XkiZD+$P4bwMQ|3B}?;cXIX@-ZY3({=aoUi+@HxHY=>{ zNi*(93Na`f$DGC&1a+c)Q5p#uDXH;R9cY@ne7g~pZX#Z;f3>S5&1-rlMBApIeCAXoA!sX<_ZT3Yy$O4) zjXKBl)y{WIWeAZ;Jj=#5L^dY@wsHYSG+n0=du>zN6w{ZurVB=i>f{gzUeTd!AP;!9 zXqhtGj%l>v)kXK4+5VGfyvHPSQZL<@5U{RR^ZF%NQ#U8Z+#+sr`evWv;&0w3qxhSk zMp4qoxf>Cr%_^lxYGLQS@3w-FHVr7-Wdgthy>O_sK++cJw19(~0#5xTS0^`d8+eg`BvBqY3XtrApWQY-8A|h_7 zO*)V`aXliB&8lxT9I4!+8y+$h%xF}#ofa8T!&(=CXe3X)sZ|jkCJMon{Cg zoqXu)BF9T4Al zI6dv9c?(^M_`m4r47CP@wM`v9W_XYf+`vs>e(yVkS!|QLEZga&vGf7UWKaf0KruDL3|nijkY{m>+=H z523K`3UEcw<*UHsh^C<*xc^S%c_{vd`Si@|On{UAmxV9p%>N35@;CUpzcU_t6jj|5 zn+V+^qXv{uq>2=-xPG1`6Tku#jV}35J%2>h+a)J{y5X_RpTeIPK>k3LNT((18ab^* zVW^4(fh2GU#XaoEEH!F0P8MIOkzR~l2N6&NL7Pp$~f4*#+ou_kg7i(Tm`cHIq zKj|+8oHd&L@U6(MH=-#q8#&X@{dq;2#zgl$JDrI%H2GO)z87Ylu}ZV!^P8*g&O^De zEh5+kZXPs6KE(WSB$Xf%qg5y28=a4KKdq0Gg~jHv73oQYlP!d+X%R)zOH-?X$%{Wo z!8t`we`D19Q_!UGaRj`IUx8%mH66GGco(sRb9?B&+_qd`Shkq(9d$iA$P8f*7C8Jk zetl5CVEQ4t0(WUWUE;n_}?oH)OC?4bIte zvP%V29Z^eX=E>-m7I|BuON0W5`he}xgTVYOps*{01_Q~zg%Y{d{bOC2hzJHX6E0ay zOio%?%&tb;;D<l?yN z@D$;&04IaEx#UO@D%UWpWTaem$Y@L(J*jsKg-+M}F1c9eQbHLb{!`kA$D8A~Wk{b; z{|lxO*TaaK_dLuFPQ?kxd~Q3Zlz~0#*9Z)zUz`|4MPAtQ>jHbs;uF2KHt$!5KAt4SPb^0g`(#@dDCrg}yhlM{);21S#BX zBPF1`s6#B{6LHfH{rGL1%80IWS=TWsHIXOG_xgZTdvlISHMgr8=WkVVO#9lcKxVky za5+EN(tneGdAhhRcM22`ANPo=tBpTvZaP=rg;AR0->~HlvgTqxaC&vDZbNrwDap*R zxv>4Wf*v+EYB*~+1*iS=o|HwO3{M#2-}uuT7H=Bz7G{WECd`oG4rdL8uG!cRJPw$z ze#h^bdad{TtIWnTYkAJV%l-lDJ$%MrWfsttn~A-LPx!0M1hSD1znsDM$16?A^}x{u zdR)DezYWjq$|nYK)0H?%@ef8<+a^+yrL@xPJMuV%j?orxsjzp9`Je8Sgi&TTIWe@Y z9p|}x=dBDtMW#P7Wc&`jtfG=>FfrIkgWj_e5_|f2%!d3y37_LOvnv*T4;8VufuzNe z1n51;&=|D+3%mkbYS`T&{wT|P*bWV=9$XLAhMA=DZOowp~6@WDAy&j2?c}&_? z8)9v%`vawdqsQu(>i|RJv08>BnIOkes*MwEkdjIPCw1YZ__EN|E3&jRp87I-jRH$J zF&zt>i)(=uZ6o2u-AGfJ%;Jt3S_HsOwQ9mUKtJ0Q8rFpm7;HId_A~>HPdM^Dj`2^! zu=2@R$y7h4BkxUsf9hXqpZ4?H*p8%bpG{?JAn5|Oi9>{bMKt5O8@&Qz3drlmq(JIY zeASZ%^A_Z%LL;R>)?IYmQ6@?t1#@Kk*8K?gQAv76Xf&s6R&mcP?SPJLf{s}V&Ul@o zq%1ldDk3D3Ctn&I2m*Q|Rs1^lHRoIIMvc8wTNP5$ofcB)EK<~(er{;8(i-Y@P4)=P z1&~Fk=|oQN>1@Rh@;ea_S=)3^p8^VQNP`av8}Q)Q1XD@AVd= zX{m5X$%jVsm_3LjeXo$zBI7X&l*Gc|(foktM$t{TJ9KWui=Qwv{T4xb(ZWNWP z=0!kXCPs1@Q3Pu(h)K*LzoW-H*%U{$0g-TDDy)Ih6zJgLfuTr)ax9uA58d|h$mHy< zO|t=9iG$RxjpRcjHh^q_M3T%Iu<;b2ky>FI6@;gCPHy|GPK-BY*tn=c^@5C7p9l*C zO#IPGY)T;ygF<>7$GP3peW|l@LZ`??f_oGILHwjq!lbzEi}7rqaVj&DP6>Y)8A2tm ze9TtvKnH7H3%esWRBAsUeNhW$DB5laPqabkCWlqjf6z#jL{6<7d(>z}7*k7_3uA(^ zF@XA&3u-}bnC-gmM$FVP{)N^jv)gzbPJ8|y;K}a=@kvAVUM9O`q*D16wwQ2pz|@HO~` zhSz#^9HUXHOtGG21ihDCrW=8)7_F$nwl46fO~U4!ZAm_c6H>u3z(K4#(9{FdU92q^ z%uQDTbU{?A-=Ptm9JnSD179~S$oiC!*$w z%%5q<+58ZPel>P&=fhaqeMV&Ol09^JgbnU&>z;A{qcv>HbtVmj&JJ?T9m;}W$fcg} zS>Dsz4nFZ7#^mtaX@(YH=#a5>l00ExeT_sRb_Tb}^nK@n*yM&z0gh+3i|D)pUsTyj z_w=OYQpqaj^`jxX@}*HtC%xHK8P;H}wThWv9QDaHIg0j8(JI7cOB;C>a#V^8V6#TH zTg(8bBsu3A843xh-xI2A!ioM^I3iJX@Cu-EV7DR@W@=0U-|5Zg-T5Tw{%54zc*~Sk z__##Wm6#(a`d?}k&c9p8CBD1dxG*Xh5A;^G^@{83Via^`iE9OA#!&+ud8KQ9Zg+j(!p4z_WD zH*nAt^F3APHU}Qlk!cMSN0mz71Qw_&Kq5#CB60^#sgy0+?fb-(Kql15rXzU>1X0svLXD(1nooOcN)+!{fjJLP@N9I=G{g= zBEI|HIG4{c``Yd5f$6`Q!lTrGQAbfn91HiTff6b@G(ZH3Nz|kC22TUzbLBg1uaID) zXWoQ*<#1@JFW8A-Rf^AjdtC#;j=ccX9px&;8vK_r)wr0nEg51!fwa5=3I9#feHP%E z{jUl?hr7H3NDoX+Q{<4K?RDc#QRldmS7)R1Qq*Aue2p9A-vJPcP?Xvzvlpf*auIM< zc4)+N<3sOb8~%(f2kdrU3KeYsyggwri0`6tm0P3idQ(&>@<$ak7>)x{m8)KYeg7Ii zEd!J2gcjCGJ4$+`>k3Tprqiow0QMy#QLo;2-VxZDtt3iogRbt2fnnGDyNOCls?N?H zMGJ;HRUuBm7$K#upITL;MX4#cl+%wD41yXsOG5vCS;ZZ`m~lFqi&iWX?R~z+))$x; zkj$lY3oKTbu0Re8wa?@yW z-`sCxhRM{f%ct1fBNf%4k$;n1VkzI$p5RKJY|eDVxi~|>1enqSnh)*+`{M-_nAQg# zHf6$px@FAWxAF~%oTzzA2LCkZM3M5;qWN5!JJxB?~dGP%prTKYlvXppPZTo(fxsuTXnKSl4_e(t6smcMe=2$AD#f zD$1k~DmTtAzcOR91ib7Wr}ltS@0s*ooc4TVSV4>d$ez>!n4-t1$%_ZHjq^MuO!^{F zMjd1B%NL>cw)BC)y~B4SIjg;2A=?D_q3-|&V3;FV>cZ9MMaYJkptbJy5W!rVvajn9 zQ$%ca2~6?nss2AJpC{O#y?}hCQo?ZgFBR3*!BOTqKcDN!-gQM$HRc*vQZ17H@pT1W z&vY6oXHasAq^f|~yAXIR#}wnzsPH=fP1eFnwFcHePFk5826a{r-;Ju9z5w%R^8q3? z$gJ#7%9H)NCcLXG<4VJ)8{mRH=i2wt*#XdUP+9Gn)SDEUE?|8@f~Xk~#%t-zUT<{L zTaaV9fO`gwyTx-5fbwK)hIHYEe)yrGp}M2x#mL3GFbjfZ^C!cb1nHqQNm2dN}Tb>Dtuc-j1|TIryOti!3JM?K&T{C7m60$ z(k~SK)RzpYbGQc7Wr1Sy@<~~_z~+bt>MNQzw+@?FYPy}6ai^Qc(0?+%HNrVm&UpT! z#jDj;@2Gb}T@)1&l}2kRnj^zRS3=Dw3D@=2%0<>$`iwy;{x@nU{O6yp>Vl2=Ankz; zFFf647NmYp7RMSI(uCMl*Htyi_DVQ!f~gH2a#d!)?sZ3#5(j3(g%E%|j_m1>Yt zhyJ_-jB_Q2`g57>B1x=27 zELlpm8uTR7f?Lo)ou8goB13Yzrzosf2)$34rU3&0R8mg+Q8vhxP9!O{$-ZbpV|BSY zoAvnOx)lY7=~=vj8^TKd-hBI`x4adC_uE9(v+l1E83G?F#Pt1AZQ={ekz3I&r=JBOZ`+^IVR%eQ2YwJgL(WGef?e()hzo#JaEEa|L<5J&(B#05AS`y z1VQ#IF+_KxbrzEzb4d3+TZ%{B8JCYtE$uuy$#VO99TszZ7hh!D%q`T^^|C7`H-Bs(o8jTCE%vqhM@ z$X=>l(cCZNH_UtRkGQqHvSjR?>_;@7XuSQs|Mo=&OzKhhF-PONT5ZJdTgq~eQR;Fy zMZHhq*820ypuJVf>!LJ@)C4$@dWXK8^Y*j4pcy`t;IrtndZHmDS7&E@R5*5SeR~MC znGMkvCWJdF@fpKsbCUFdfJ@tz z^Wew(WI9GDBZt78K63Qa=>kVAqJF{~dDG_^()&}@Nq@Fx{dz5a%_!tj3mCkLX;rx* z`crKJtufP={=-X7VkAyvm@wNHlSs(meVUuRcUD`p*DxqoO*^W~r1{ZGIZ4bzYh}fp zq$3$7b0K5CTCHaLPo1mTI;B}uTMeO7(|g_D-LN`1Pm2us@Uy;|_It&HPj=5c!1L(` z0=2|yMtcJ`8|&07_UwfD>Jnu4och7<^ys+8?^O&5*xbbxn++%@Y zcn9X0K_kHbt{^~r5v{$NojSV9mWS<28xv3vACfBVP{<6_blQDt##ihGxG8QfaJ^UO z(QnkcL)ugEYB2Fs1W2DY=^nsPIL>h6ze*FII8e1s3t8LY_E$B**1uJq&$zdQvxwj& zpt&l=9%Q_5;Jp4a`Gg1fzjN?x0W4%cIX`&ST9EQ+3T(V;CXm5`^I3atrOOQh5|Qt= zO|*=t8Uc=z3mhvdoJ{%7Q=;|X%}X;N3hpbUpOa)q0j~h-`bODx&mzobmtu5WbM|+I z7vsV*C$?|jI>!XOnt)g86cj`KI7elmKSfMyc7GspupWRVZL_n zY_MJy7@C*LNCtS#?lns4A^^kz1rQ($Lk(WQou$afoo+(ud!?rkXjWb7{UldDC}<(^ zr^f;Dk@eJ7gwX9?<_S)M&FzsSZPip)^(v9X>{)m3<|uMS>zaTcjx|LA^x_=YZFL#? z&pBki;N$d_y4Y$Y*#F+*btR!RC}`rUrMmL4(2-g?1_{BjprG}s-l)4dKoMB=wjywl zaelzP!{mq(!YA-F0>a@#_yzag8u;4bPgb}bK^h8&Y+m5Z#FbWY(1Tih`9847v6pcO z7H;{^kLm@CT>!N&{ZRl%RFD8*&e%G$?(#lV5cFREd|dK^QbfUOf4ki9E(P#V%ln4Q z(IgT-@cx}c;0FaY1K*m*{;xc?zjfpBLDwMtyJA(}N>}xvLk9gX6Cd#L-$1wco(7pD zU=o9742M$T>!DhrM0mXQ;5g9Fgh?sw6$PV*CFVd{JuKjznz)ooU=-x?P=y~jOSHw0 zd83M8(040L;?phio`-HXIlHj~_Px$DWwGB9)B(`>PHAQJBjbqlV-$=@J7Znv8S`iY zd~=UyY*VQ7oZlSafwQd-(Q1fwq!loc7ML!V+cDessHkfSz#m&Uaj&996&tH&Sa?k8 zc9?P17p!~iNS1`8mV@(9xw;_Ru&mM=YVCA1VVec5>6mPQ6a!j@t;J0+x8sx#L66=v zQ^0hiH2UlAlCB#ep9_%=! z;2?IdOz&-;dlVA9co?0^8s*+t(aHBb5%2i%InD0WVC7~-d+S~v=Dg$ zR>W1ce7EHjfBX&+!-dG#MZn+{DUif8A5OPo%Mi9-m7GMgIx==A8f{$mMqV7fohGv` zsJ3~%-y(lpQJcEj*{_eO-f78=9dPW?X>5}*p*?&B~DG~F5Y_dkU8A!6z9^yYclfNm(_ zLVfm#Zlkh*OE2@0Ztv^s6}3Hj)FDO$RLl}pzjPt`Wi!nh1y9(Hb3SkY@?AU2V7rI} z_oNeIL;E1E2(4&GsD}zI-^D4D)5s;PJAe{Pdci_=GB%IBhJUvy?XK<%YAO(8(T&`r z^v;n{j3kR_g4YEj&Y$=0`R2bHB*>@fC zC{ED2L=prX%2)*#`bj;sUg0*{T73^1h@MuqB2OWRO9A4<2Y>&M3e&O+(8k`I-5iwj z=QAE+tk)lL{h@OCAR?*j0}Q^Lz6W<0P^aB+Vs14D##jL*xt2lL3(s_|o7ORN1ObL@ zdwC9nHYb$JyFqaEK+Wl=lB0sXyrY7>te>!+q^AFYOK0qtTz)I5R(OzCt?(f01nY09 zFVYAEDEo6_oNVTaj3%CV1$nPwr^k>|4L^M$B{riT`65r)P9t>F%Sr;|BR@U8Zk8ESR_BhZLLt};C&toNHWRpP`H=T1_~3d zz5y~jwljp&X9~MshBsEv?A$rKqnK*$M$BIw6u|*=(|=VqtMg1|Ffbv2o(vyCKRcS1 zotXs-+IC=&krH*s208d@=3FHdJdW))$Aj)M;Cr3SL8s%l_z6W5@dPV({w8{$Eqg!n zDP%f!L!$@>+3-RLk&U;95gI+QGx@>U$rFo9DHFbmptf)0U81y?&IZ{)q)G|!VHCqJ zKOQPiWiMa=i)N9PRi2JrQoGu7q95?dc!^!IP4cRJ78SlCKziYO!D-k;4Pw(T z9_u}JPvV1WlOV2;0}$LT-3hP&7gZd$CQT4;Y36mM3D!v33a^-|JIU@S47oP$&Hyeq z-0*r1Ek;!kvWCTu>!wW1GPN9DuSL)`ACfjSP_Pcf&^s0ZwQ^Qt(_7)oZ9(Oo58^rj z1t`hsL5xK~fD*j=JQ5#T@m_f&mixz;?1NfWKDgBM|3$jy&r9Zsjr&|Z@ zH4UZ4`N8rms6Yzn@gLHJDJWG>8Zgl#349g3+h-z*0Ojm?Im&w1v2J2~IX4u==Kr3Z zPx96SCPXkbDVEWodNZXoX81!p{JAb*Sml+s3A*R7O z*sN=UWWB)df)==8WNVPsb3dRGJ=U|dzXl-?hEsSx^NlM&CxFD}t>3Z?A!l~M+VVyD zAalDC20B(lpqeH+6GEXSs}M^le2vmscra83gBd1r!equfC9dXj*KW>Qcha$Vq*r0# zL~+kJJ5z#o(3#fR)Y;I@)K)hG3)`POTm2%}y#|5oF$$}GtiAYjuazUq^0|$(dTZcF z;iIdRs@I)!@Vtu-wR-)A)?2tm-E42s5Tw9qiRohxLzr4z99ZHMc>QEnwnbA?*i@M| zEQ;7V64so1tcFfGeCIS_M4GTAEt<)0;tpTPNZCj2o=#SwhGSEs!f1}Ptx;HLRikw0 z(k0!AREHLt06-fa14{y~&QDod@n6pgE-+VgFlw>Zy&hLyOwYNTox98c z2ysE+0{wmEo{zeNvA%qnsV(+kO?&|xvV>ku2ifHGMYuv(%tPLYfDq8ibB7^o5lNz) zrT7-8n@c?CR+H{A+TaxnR!mt^-LpHFO-Tzj?phl4E>^r97dmoEIqUK@Hc78D(d;%p z6q2@h8#GI{lo=iTuY)RLcO|UC2HwhN@Uy4+ptIrud8%r0a*Fp)G0{;$mwa9LIQ3wq1{7KqGTJ(?eSDPmn^06EA) z47`!^eoM9n?^SdIbrQLyl&;L}E(Jew&I<*tICB5;2ETj$jeOsaE9gkT%ooe32P-8~)Y#k$`hm(7wn`Ku7 zth4O3be-7%qD^tO&dlH!K)PL&jZ41^x^C~V8QwXxrQmzKJ~NSKv<1@{WjK&m3h)de z1zekwnl59kf&J0`7RW2*R-22pUT}R*g zwJ!TuSO4qSrj=+fz|A0>j6vq(Y@6f`NAd*;7%Z65JH)||dIysSWLG;|JBG9FBCnF- zLDvXoPQ}=pxv~nCT62pFqzM-G@T~So)tlcvuxk1d8IPj&^#|DXe{S32GrQgciP_&9 zjnruefB=9)O923Y|9@Krj}V9T;wgeBX;i1+Oobi9)8^}~6edmCJ63L93cOCN7PHVb zv8Njd1C9icuB#CjfJuNh<=TMt2G)JpE-}P|-$DsE3EtWM`_0@B_Z$Q~NxoBV_%3bS zJU0akXU@=K&-P|ESWe-16YB&Ggd`McyrBn+@rpYmOe>f98)7qy8jb(r3N0oA<+d>q zDwPM1G{u#IDdriZ2q05+Wwh?8reI-)Ph2dk9e0%~=L0V&?x;Z!5IGfG3&yre`G!(a zSRTXY?MjXb_%{!2;1Q-iB7txMI0DGJls!7(ej($&K64y5xKm0WvK9mc%sw^Kde; z_*R6R)o(L|G`HKC1r%PSF6T|K?YdcY3trbhz*Wd6o9UP5Z&>tQjEFP(PS}mi$nfoQ zhFS zxZ30MEf0jvJ$lHtmlzD$BsNq19`#M_I=z`&Vgo?{7Kd<8;%|R45p4E+W=+;&^6_@}Jp{L;wG1m{yjgP>Q~9Y81Yb!H z-^}jHRgv6jaoT`G8>1xql%>C`EQHSO{Um+~p)%9&a4rBf@fTFGR$oZ`VCHFFd{I4I zt51X^fAtjxFq;1brSZitMa`rZvU+#aLgRZIQ&;)H1QqXNQo(b}-qi#_>MB}0m`d=) z)lFKpQ8NjYu?XNau-R)#9*PNLW7hjOyhk2LQ}C-EJ1&OL4#CXnE5a;tEB@kwHR^EHLnE_?M=8VnTOHLe7l zEHZ#|wbu)jI`OkGk9?j@6m0|drNWOn!>XW$hSxIi&=7zCfTk^URECY1+3SQ?85z5m zqLVx#*oy@{GSVMjosRbg-GhijTl=#l&q2D`mH7XF9BAxhu1;j=e5nrScIbT_WbF+8 z!~*^{i)et_7uBZZNP=(mlAe$$|EVWDFekSlQ}_CbbqlZ@YjcVK8vua24gBOH&@Aae zaeXQOp~b-QXVsvaj=#_At#W+Q{c6h&?hpm$hAw)EQz9W0vrFNPUg;iRb|48|4H$e_ z{DC2c>nHJAE!MC+#xYpG(4VlfdAR*~+P!a{N)2BtT^v&;cS(A}TCc{!Rx#?a*9C;q zeVQCY>bpduzv`h2^=~m-d^!o&V*S+ z8{no$DE-(16O%Teu)|xu(R*fBLWb6fJkkwq@_|fjJ~f6htEM=Kq@4(|AGknV=)3vy zlenQ0J4pk>IaopW`ZNvvIiANfK5@T zQhjY7cFnap0K1mBpIUEGFbIRMIBQG`*yN~=-x-VXGVipEu8i>-4h9G7Mv&A z_oF>j9tLb#86BWVVQ~e65l|AI3wWFY1=?XnfaRR%VDA{xCI_v$%51K-rtH9M?qhN*NLCz4X1)px`y7}I&#cA*=>pz+ zhS4L|v1W1ILvJzERTOA}!=C~)7uMR11Y0oh+UE$u{1Ou$uf{~ur_MQuj`0PM_0v(@ zUU^c6&t8pUS)4L1=)HuqiuyBJFX+91#;fh!xkT!ib!EJu^G=9;xxw7JQyUn6YRZkm zF-14nu20(014#i=K3|w)u^=^Dh&;>az3dxVQ4q8|<8UMCi+gK&;A2_E>}=4?byTWY z%jms?>kn8PdV|q|IAZ4iKriUMgv%M!cHk2n92;t}0@3Ri^j^W}{2(en7};ZaP;qP- z=vaJ6h2)PEu0eWQv9RR@y_bX8+hPR3I;%jtI`^>Zv_j8%Ti}M`x$sgPFX+8`T0uMp z7P%^SWL4-1$CsdZ0fA>izS90z-UYqa6~1k-&uS)^qhZPYg~*o&jL%Mf%jFP-h3bz* z1``=+iNq-JCDpv3_hyLrV=%PEBJ!sBH@ZpquA8J|;V%twmD{)1tn!)7EU$=$S=)r2 zWx3<;h;uQGFq@`|3sNyYVd&yu0Fff4(^dw?Mi3aeTW~YN4djps{v-QZz}{MFxHf(* zg8ylB*Ci^kVa8}XXG`^oZhOS=c}U_RZFMt$O5LB-_})^B%3Zg#W^}_fNqR>EkK}y| zf1{ft4Ih^1Eq>_wD~7ak7BxyqPlr>%br0bTOU?p~^$Q2;>uT{fY)-@n#it~|ts1{p zpWR7a_17z@`%|mm26uA8x?GbKm96X3K@45Bi!X|kdNfEzFj<&-R&br5ZV`e;Nee7i z7@8Lgdgbae!Z8{kp7X5hUNBFvF9F-7yO#Apz&bwT$IdFe<;n%k9DY)s9>O&^ ziOt%Z2~uJ3Er7BH@%uB5;Ub4p)#)W7R-{llM7Pc<-NaZ6awTiyqQizOh?u}{e=G+U zJ|xm(U1TJUaXQc)$6_kg;WtahOIcIe+>A1#UE^mJ6c|JtDu0-2c`V|%N90SVIH)aI zUu6`g4>iL;PxU1-=T60 z%dhVxZwwz$Tjsg&DpFB+f=4OJLNH4WFaeZZWd5&YYM(m&DmQc>FJx2zPHRpyak6`Y8M%F!u=*wO}^4`4dERpgscepHy%e2=!cA6otnQxki$#_`MF zLc}@2`3tD_f&n%1XOFzt_nJ7OaYtmHo|W{hVmy9-sn`Pd9$$$Bjx8 zlN*fYZfNmKLUY-%+OnwkE&;5Kjx=}>7S;^&(%ij*gue+cVwb;B%US(2aI-EUl>C<* zf^^kMg)s=~kX?Ln0RpZ0&RM_RJic4sRyeAQ2V??B{)E*SBoJz>;j_8B} zO4#loi)`?Z#l+`h;i&w+q!E+M11UF9edPen{^Cd1{#t9{)V4KhNgk7FFL0ExN8Ld4hCfGn6Qqo zTUXoO1^zrSgs5G7r9VQv+-?BGiLhv-X|>kBvkTKo(O>*Tu+irr>c^}9QH5&MpGtq_ zLopyKWIr)2!r3CTdLTTyg16+tj2dn?!ihGjZ}E$Ma~p#v)O+|@*h#C2;FgJ(C;Gj4 z5CAYs2qX2@oiR9O{eT0=O3lx%D=V>4@MWJbmomfte=)i@OzKQ+rNlB{qJuiT-y;t3 zT&i8fey`6h>*U=-vIAb;j{D78_ps-JrrZdyW|sS2IUbGn`D%H)(1r^?D#wAuuLxp6 zBaXX$xgJ@-mwj;PXMVU?s{Wp3=1=kmJ~QBdY)eASNqW{RdcAFOU3#oXUx)~Z`hM71 zK}H>kvo|jCwWu>wxtWZjiv}sla~T+TenC!p=a`I72l8{pu@Z)!5HxBtkG> z`~ttFti`3?=Yo`xnI8-qWLQQ)aXWyPzWM%)T!hfs>q&dhWFk^NNHIcT{_BG@$dIIc zxVfsnM-uW+8&&;V^;e0!{(7SfOmmQZ)FcGIhXJw^Si$iiiX4g1-UYGM)x#op2|bi- zNV(Lz#hJ${xE5C(@EwT_t~?*&y4OM(CR{)OTpHHY_x{CTZqqD@#@^k%!aGhIt-M<1 z9wlLJJwkWV1|Bn&-_sRliGn*ubec1T;oy8I4sa#SkgMN%%{pQ$;-F`*?}&xuUUIc# zd(WUa;~N|8+&Z@Rwt>Ne9zYqcA#o7(%8PKP_jXCoTd0pH0Z{A?;^6mYNv~Q6q1msW zIMDcBaGix;eAuX$FTQA8@am^Z@G#nx9sSS>{w&5OB%vL!0s?CY$?nmS0pP5kk31_x z7jKlG3J$kY(iS(%h92tW6#MSj+(hY903ht*Zc_IF$7Xfg?S0ndAhaQ(+wOhS&5#j= zl**M;aOh0!OK^C?EWJLQu{YZm*m?x5J{&ws7hmMn(pV}EGQZMhp^~`H8|Y`|2B?R$ z17_&2y5)VMgoGJ4{P%KmPdNhEic&wS>XPqqh4e@9ksNpe#+I=|z*}E{0xP5+6xJaA393ATn1axtdSGZY1}S#psUQizFuw|QgS4lFFTM4<#i{>Y*u1CU2=%Vn$@ewb z%&80x6mLH^uOJi_uqm|AN%dsjep8MGmtd?1sc~*!G|=Ihx6DKuDNe#$;U^euIq4tD z{pO{f;Ds>!z11Rc!|Xt)SG@jEME`_rpY|hlU-D;?df4717Es8Eot)l|Kc|yL-|E+A z`nHO_*XE1AdKVUTMeC2au9hRq2`XV4=BErLu;jq6-zy}4J3kQ0e#7$Pw+}eTle$A1 z9xP2?y|=#m>U7R620$XIaQzg04dD-Y4HS0{Nj5)AmhS(Yjhrvx_-6`t?1z;94YGn( zKV-f#^qT&AE8hWp{O>q^t1mRt)egcCMuZsN#TRAqUDcfxv(E@4{ETBp*q(_}lrFxA zTFUAiH0G)bR*#ne*IO-inEI=UDDLp(?a1v(E-CK?oznbp^#GdiqQw`>`K+qXIu`f! zLE5oUY@b9fJ{O#ot;uXih1;}K{5+i9BRSRTdm|JKa0!sMG_4Lf$oO)62?KD7XADIYy@_0uDI&O)a*2vs3jVkb$l z@xLYW_k2=jz;whDy#kd*~QlCc3dArl04 zt;&4%vr$fi?q}z^%r)CxETO)f6X)C9XN=li21P^ro^? zOWVjYD0EdI+;ywtJfbHqm1zCX)(ca>K1t#}?#=$egb<$>i*E!9x(e8m$R+@g#n?+y zN5M}4boQ$ijA#wy$;6nL)uU4;*@aKiz;SNCJgT_u?7d2`tv4s1j2Z~`cJSBaH|RD2 z%b@5m8{|q!hJa16dd#h0Q>yL7le800nEAyylzQxB9$*8V4Z73R>2*hh&vS#ZlcXC1 zF~N^Zu;h={Z|J!mIMln-eFchCkkxbfKs6%odrn+F18dQTE|2He1hf5(7#hDdL3~gG zlsaTS0i*Ii2toWQVO%~uFO|OqL;TO^i|Yc8f3Rzi@Q2M1ahM`RgTaCG9>-VwsQ^yU z2yvz8HX!J4sC%f(>ZTld7>kY1aVp9u4X+%!S$u`M&|4ZVMJg z=A+rzLlKeS%@t7Me=Fhqh4_zxRQ~t4LwIUW@|>QM;-cuyy1;H4yGcd!#O;U?caOfEpa$3-aznB+*{UZ9}7wJc?1bg`2-= zB18~YBZ$QGRCUxO1~waU+Dp3$bTjS0)MPvij$80o7wBCPkyXC3< zA`|dG@x0zb1%WGE-^0z}haAFUHpc`bxwYl=MkstCI`T6^Q-}mj$qd|69P@5P)CtgW z2;hAk1T`Zyi)+9C3?G5bB>HF8mLTL?e+qBzKFM_6K`q|*NlE8RRg6-*>+$i1kj7-D z>rWQ~uWsZ2 z?NS;hyxKeC2xqgjsQ1wC283)N--coK9^rvWyYou76^u?VfZ$wRBudLLq6rL`zwM`3 zL+RA+XictuP13ntZLP(+o1PAX4@`?M@+UQ`^+^eNZ&fdpmUu0ea$6tc4mauriD(wby8@}=7KoX$@tOk&Lk>2Tutz|1`2*GX|eYzbgp9o z^Q@wWYhkpDl^DGvST<_N!FWgT;Swod!_7_an3ri zg{CVOT<&az)>q(z&VhAxG3GDeGxKX`guICtB$Ns!+U>sW+||SR3r3ZIf+v&JhZ8Gx z@x`o`=4@E~jLu;zyH!I3L{;V-`LkU8YyYH9?0uM^v9=LmX_hfSVpea$c2eu&J-**Wexdpi|I-!OmI?5N^g|H^Hc{d)ihDa;cZaW#yt&T<2Ko$6o^K3s5&Ko3LzVd6 z^I%3Btdtya17wdZf1V>!0FSX_?7Cp_U!_F5Vz5nnzq`K$?pc2x7muBS@*gMQd)Q2WV@7-K*R=s8H zy{UVg06d;(eT&++(yB|pjA@^lPd2=qo-?GNLjfL6zy&S6hm1Xt?K?w}@qz!1*2l0D zpf?UoIy?*)U^r6H+{17pw_VZAMeX4!XS zhGepYp!p3(sC)xwHHUgyD3ccF?^0X)7HNV=Ekm9n% z%Jd(;&8oJ+2o*r^@{fwHv>=7~1xHixY42=Tf@j0~IPiTC{JOVrNqMaYZDN=VTqR@3 z-A~uxnme?}DY4viFXmZ1bkOJw-YcrG^rlKmWt<^jZAFTt36`%ZiYBBd_u{n zm<@ejed0Rtko?kV*4YjbS`;;rENtMD)_0C9HzLcyUE4XVRN4}GdbhU5+2&RD97-tO zXqJNsBd`pupJ0>o-pKM76P0!6;`G4q!thhgmza+z63(^!LUPth&{c_?c3`mTdxi!v z&gLdy=sJr?vWs5L1OKfo`$AuPDP0iEl}Y&tZXAY3#qZDrDJ3uaPkR+0#f`!L5VH}I zNIUSA$p9i(@3lUQln6p)v@pTMGRAL3Uc6HO0lBP6C@IOCQkiCE$x>VkFiHcSmI>rZ z7!wQDV{a8H(&eqn+#83knnF7nps;ae(O*L@jxe+v3oT-z7+h750xk;M+R8$Hf3rMr6d zzDvJ-qwER|?HqXfvPsLWTJ9mOcVFsSmn?d2oR?f$>)*mG=^(gkPKB5ceia7IXmW`P z{FW}tjR&)RWZ?-GUa)P{l|C2T2nnprFCXZ)h$!`Xzpb<13k0Vld2ynu%f4->xUGFS zLZeDxs|i_>4trQG;K_c+aUm5?UH4qTYtjwF4>>vg@Hh5u0Vi|Iv(QLqnC5a8UliGr z)zP*dbL}L#Rsr=pU44$S$t-=ndKe!WemSyLa4=^9T9UG(`wBZh?M?^a(9DhNr?V%2CFIF@N%LLIuFP9G3$~v_{@ez1l&UT`+c?4G zrUh?B03qo&Vy2fLm-JE8ivHe|sbwEiu(GOQ{iHh_XGsu#=6)fn@CSznvu1KL52d%T zHS`X*u=6YSwyZ_c4qGg5g)gw#G@mn|2*_G|k>c{DC9(ml^0eFwHXQIp@{x-T-lJtS z?gd#0T*|yGYQ(;QH0u~~^y=K8w#b29NXd>LZKJc--`M7;&!b$9| zJUN6u+HOf8!n|2(ua>zHrzS+*T3{{!YHHwhAX{scX}U9-a6YJRt|5FPN+K6u#Fvm| z-2lC-&zBsm;uL$I;cZ(M{8Ddv2&lJOQz2cUkZW>2ti=0}{r%1Fm9Qf0J6deN0@?;jrbg8UUO?*eblgynDi z30i((`78O5{3gFxyjqT0j=DcKA${>hNg&AVTf%)-R^NU@ODt9AI%Vn*#YZ#O7~^>J zm)me_HuaR31A*3HghNOKoE5!6+JRvQxJ7#d(0c+L47q>>P|t;H1)lij z|{_bR$? z`uU4r{EU;oAV^Md>V56uc#0}OLfqH~8CwLLhB=)Xtmft1{thM#fGQ4RZ<)LoM|>Ebo+`o zv3$+{H1=IwGd+Jep_pbrtdBSoge?0h(}7!s51mZ%saxE5nn=e&rppA8F8*(~xIj5C z7s$TP!|ym~ENnC}u!ivmgTGREE0xIQqkmEipzso7W(+@jowtN?k&9y{z`A7ZvnS@g z*SNOoJgq{a&3ZHQwmzMJtB+u`T3Js&vXj{3yWAsHZ*>-_NAVmd{Cv^~c4lLgrt$Kj zjN?bpa=&;<51Zv1{3Ku$dsXx&Nt8WGrY#}^p0FP<-*bso*}=J_>r_Kw{b8Jl%%Nhn z57s60X|r-<(jF2fCmfmCZ-V4%F%`KbN)|#~OGkyYsPj%hH87&M6Te&DqOG@MMk*0Q zi)(T0Mi>5qp9o;^-z`6Y$`G>nA_DjU ziZpY`n>On>2e69P*Tb!2FD_wvNXEd!3fx}IFH;)F!MQn==3FyNZm}Uaa*Ju8j(ek? zQvn9#mVRDu&*0O3c(i1>{pN?aw;-PPJhg3H%1t53*>JjNZYGasZX_ zkYH9}$8Xl=3ZW)FPeNRe_#OZiT@1EZzO4Y6X~A0OhO3RRm~u1k+$)VeEO%^!0RI`c zo@FTaIdz$Dx6^XpDbqy(t|KlwNS3QEqPCi`H(g~7S+5hC7of^k43KOCq##7YRq7#f zoV$j?^+a2)knV`M;L6e7ycqn|`@_2g8QyrF>dreE5M2yE@Yo(87wAPwUxEkaz%)d7 z>|V|91+j0VMqIQ9rO3Qq(AJt3PC3xHr`C=tVT*_n7_RvV#KI`S(W!Xwic$ZSX%!hc zc+ypz3P@29G!zBd0a) zBoa`kn|m(+h|Rk-qoA6cL)Kl0ble_-*Mi#zyqC_1xbpj+J8qV!G@z{F-28uHPdT`f4aY zDFx53am4z!LKsi;01VB^$O%|+#s|u?wP}Ixjie8rW1HHuM8+UR z^DRv3b57|vS>#f0pz^w5_I?mxL6};>vL3&M2!p6UMu`n(^LXhxCjP)T?6_hk*>u<% z9A|#wu+Lvw?iB) z>unqIl;Z7wxKozzp=TLZsT)J8@QBeMDCUAcLpj^mfMmG;D?hL)3{@Giq2tWDKYlFn5Q!E9lcZcn%RpAfFYJ~TYM2~Bg?v8 zap5P$H;O$q#}WrcL{%0|MA48H09F*-kPetD4QZqzTTV*NT<44HZ%Qa>_b3V^e$B(u zjh035^32{fe>eYAIxUId+U-R>{Dzm;$O=YZN+2q*m{%?1XZ}BdZN$$~mR@te61z03 z$0>_xUbay`fSBS7ZPBp zClpi`njp1`kYH;M3W<5$QY~o!NF19+A}KQjU8CDH?n73N?5Zj&fT;{a6@W0FVS);Y zuiAw*C=egs1bi-e(b+TmS@@eaR5$p0&e3l2yw>3E;jC3Em`nA&VE1q_UmR=bFHRTu z_e;62{(nQ*E)O+|-|b(KzZ4&Io^(B8KhGA|<;hzGa+E{R!i*?*n-<~%|K6pCjp5@;eQ_9CU_n-0|eQ5q%_ExD?;Av zUc?7f3?W>6(HvIGkAaNm;wv8YJEMiRiq0g;t(@B1_g{%GHT^NH(*E{A6A)ScHf3n} zaV)Fzy(|e5I|z>HpM%-Z$&1pdQiMNFA14slgc$tZ3nySCa{3+`gQuCLPCAz)L|X-3 zxZ1w00hQ%%oDD3$!1AM1a{PYN($)pvDzIPh&H}u;w##QJP`gK!8awgtIjZzq)KYJt zaBu;)RRRq@Wkwuq2EklU7v@(OsE@zvTbCN3=IH;ZGQj^HJ$?UzW_iN$Biq0GYKiw& z6Q~gV=BDop5Pg(%4&ST9@{2bq$b(}@mS@d%}KNe zD&GR^Fjl=qK%+U5SYY8NZ7`=p(0i#@O=M0>;|B5JxHhpSM0h0j9Q3d7CQ~uOeb*$v z`Dk5W1AvQeIxu(i;RmS{y-^Ll=>3SEvDXI{Z zk>`=33$>z1k6v3#zec0}iQA}--<=4Brlm&c*!t|y)q$$|Z6D8?aiO>WMCgQ8~=PQ|!LWQTC zrMg6KNDVj1Tpgd0G@UXh=#ZmedWh+Snp9+lE>dtDG(It2_ySTC-cGixVuzvjfB{$* zs(z!M=e$F^fV9~uheL{1*~-T)WO?o+cXgykZV-B1qC z8=8`eWc^edL+=)5eB}ARBBNKpp~B8-iAU0{g$tR?o3u8 zFslKy06BUfb!74yQPqUI0kD74OEpH3306z3H`E>ENV5LQ3W^s6z!PuX4fhBf7a7vB z?voBx$i=suTu@p@>Oj)e?c_N!57cZGGYH=ch<$FKG+}So*5!3B@6_-3h>INLkgUSoF1cFC24A7s;sXat@&Kg$!_GYD81^7#6&NQiAhIXTC7eLhFev z4>YRZC?sP!FOwaBD0M4-Xr}C2Cb)p9p8aN9Cpmo#H9#+7t_lU%>rb+;BNU3lp_E1QR2`FL+M^8)08CMj66S1A!Ys(P277{-8DXHZ-OY*U-iwsrAt zNkZa5T(aE{#FkkQ0ISU6sd%wIj!EQ&$G2MSu6VBBEFXM;*NF@IN1lIy|9KO)437Lh zhH!>QNIs6yQSiqxK0@|!Opd}oE}@k!vW>SB7M-~tw0yEdS?<|;=}y5TF=XN}`I6FS zg)MstJx$Q!T0{F2G|=5YTrdQNy3$#)hr@eaGq>{~f&P;~%M&I41bc10LtqXk%vDo1 zNxxn5naC`RfjM1s4=Db^V=v(80|6tbOjrFGZY2m)H2`L-F%4;W(is9azfqwm-Y1BT z8XQZb$@*C;`$mN)%GXT=^RBJya||g5e6u$yd||8@ z?9MPi8P&Wzq%CJL0ku-xU=5d=7F{12>S#1MFDx0^(Hcls1u#ytL zHz!=V9Ebz_dj=1@R14e^}>#eAIkKCF@Vh_NSAWWur96XxMmTFq~#}MIOxCxHf_un!mwdaqcRl&}w zckBYND}hi{S03%iLhSNo@gP_PhBo<{o*}WFq+$?+F*CBtJsW-z^*g4K65lN!TL_#gba;Xa?gbq{O>&rqO9c4l z#;&@0Vqf9Z@q@%_=X>aHj=9}_LlX>}IGEuuQW+tK(x3Z*wc`v$I zMjTm5A~6J}uV)WYYaBPwLALMMm8P;meQ<-o)p1p@h_oCSw?2=idrHB48CzjjuO}hAkGmz$SUSn#%MY(R-d~B7}Xz( z0EuWt2~7%l>?Uuj*^ja~s5N_`N@I=o?|h-ptp_!cRlnRzsW)hJ$QqPjpq~aDIL79g zOexC|8#qdUGj|5m1twOcp2jvr0H+_-!f+C2y3=Xb2X(M>3Zm($WF{iM@Y_<7d_oz_ z&+RzV`>+;hjz&v3$9@4;bsyl>YX253`9BO}@<*y!Q=e1^&t9+R3_9#UA2g@L`z;M{ zZ&V-~>De-3F~<<4$VULfaO*AYbbiPU3?(aoo_)m4K5 zz)27WMWBkZ5tw#qJVLrR@Q6~kFF!~SbF_v8b*{P7Qe8jHViq{t(4Dz|aDYhKB(%pt zf_W3Tpb(k1iyi?;(S+6&A8u9P&Q)*bsX|^=FZsG)1^_J4N5r%(_u5W)j$PExmKU7n zz6KzqI0nH4>z}=ZpZq_gj?s}Dw$H?%hcsL8Va$VXOD#UB_7)1P&5)uGDF6?p6OCtl zL<5^c)k!@wQa}?Y)7;661CS}kKf7C8LQ>$fBGhI&^Uq|_f!4M*|36okuGW~TmoVjh2`%t_BqNhSH(F^E49*2w+^Z9AGfe+++rq}+ zV^V5*TsBHiBi*IK$CPqSq0?LsX+#JgtvZhwv!4N4zY3roUQ;gT}X1PfI zzJeZ{*If?X@Jq3v8L$j^gTsyDZ3lud0}zOR5iF=y4|jCmE~VfI-t&`m3JkbXP{P^v zlBy)6T$52bPg`lwUCJb0o~l7YHJ#pP=#3@;vzgDi&4`r(A-37=ty&Y{(aj3GY?!n) z=2o$CQ#37$tOr3rKZ%r-Pu)a`06Q-o(aU9+t2e#pN^i9{)Hc-bGFpaqz6wE(ZNgoyV6;@D!S_3y7k^zYU{G6pCj*^# z-Uws7j#i#Farvl!qY966$$o~r&ngi9UAN6~pll*Aa_xZ(n*sMQpffdTguPq^DA<*n zczwk6woX`59Se0ULI>>!*z%m;^KUJ8pyr6Qdm&!n*=xUltstfNtOlu&FGmtc!8{Ak zo)QQ|P(Dh0MLpskQIEu5XrF??gIUeZ=`9HG5YV^5C`A*cvnzp^M4vL={7dhN9Cf;u{u?_GJqUv~mxKEbOe{=tlKwIY*Gkub^i zk2?osHa{o27%U&C!2iAq0IoVi7TrwG8U_)j|K3IdGLvex#{SXMXPXOP*C~bnI@++^ z^2{eB3~g~XQ^miSwMb0_IIjhb=av>{y;)|4Z42wj2eDh&fzU4+Lg#C- z$o?jP$L}OG4%pYb#hH&-)qIy&k*m|HVJ`sTC8h46JpuC1Xea<@vR?|sFCeMWwvgn2 zZ_2PHsf~S6IzEB=Lu{=|pbYY+Z;r&_MCh!ld;!EkBAcP{0kEWlwA)gmyFl6ucR|?9 zn+gH!_0MK<;2R<4L0Sg2?^gAH?pxJ8`g227-izpM)Pf|XhNjGyvlQcis#{3V4pJN$ z+HPWgPk@yXZF-W_kJzSzd)S0nFE=@O0_S%D=A2}ENAgw|V9qtVHJb95-p@zvb%(B0 z%6teNWeRi*i)p8hSKdCdq~Fr#$&FdWCjx<>>4MHO89NH7jv0w(QJDd3x8lY$hvO#$ zCVOEZ4Fo*JCpI^w(Eup|xdpF&ADDs|e`mn020I9% z;FOktsICE8pxL_GcX~!Ocqg1==juIji;c31{K9N2_y`yyjbikaEax~3s%JHcOQQ~HB7-kk0@4Rf<7U@sr|Lht6J&|r|ht>?4mcQJXKwu3$ za0S%OFY$+{XJc$nmw3ubbO3YTdz!(VkKIA{BkAjnRd6pC5&=#@c|#Qzx^+1=_u(0? zSJVzfHlUmh=|r~kJ(nKl5<>?pP=08Bk1}IhXhv(cHlE|yw~W5iqkWj03paC{kWvnl5L0pFhRK{ovzM{RYShoh-BNLrA)+S^)c9ZOdp}Oo2 z@tO$8EJT+Tpy6Ohr>!rwk(`K+9pX+l0WnHHVLe`+_-($MkK@UQlR;-X#iaZhK6PvWm zhWGFxDccHevxP*XZY4>Jx`Uyi^dTaraefMY6 zXSZ}j5|upm$ti%4WX;9+(acE%LWZado~QG)=P9g@rcqn&3Avz;ehVVN)0fI)U#q}K z6`EE|y#O`=HzpQkF#25?M2j$9^Z{XM55W2c1EQNUos*3WOZ?7qunFfHZI@V}PT{$+ z0Nth;IoP5fmE$6&JByHv+m!3Mvk3eG;|4ocyDCphZ7VYaqMaV?5{U@p+}v=zJvbD^ zdrsB!T5v$e0-Pe=N}l`q=L(imNVwakdS&iK{Mi&~fQU-DLu;q0aiBZdrj+Tkc@r;y zo1XEH{Yo;ZYyV}V2GV#a%HIT-%2Q!#8?y}_s_LBAA4jAy6rT(H7?*(%q#SmHJo?fM zlb?GVObS5OA|V{#-bzE9)(S*+kMxnD&zaQd9V3nkvek`|P0u8Aien6JfZY~afy#8d zY^DH6RP7z)FSFip+)T8ks4&B1T(&cdNoveouSRB;EyQpEP9)MxRTcaUbKEi8P({_c zptV9lM#MA)JG+TXL4`G-bVdXjDiWvd^&`@cm}s|CAmrY5iGHPe+hO=9`5n<~Cvvb_ zTLV?8X$M!q1d?ik zlarycDuxI?y2cN@t*i?!CTU5CBYJcyMQ=MAdf}z&@y( z?B@|iX*uV!ihZY*rJ?b28OJ6^359|OswcG|*DCn=QfXKW2A7^8fz-$=oYvJDdShRo z>!vq`ADJc41*a>vJW(+-Px+5X!#P$ecwH1tDL{IIWcCaVeFQu*8_*!-aw-u;=((V& zJm;F^0-_t8^g;Ht8?CcF8qjLFQcn<-Xv|@2vU9b0d{)oN{q~7RZ0(+_zf^HZ2oYBZu;wvo)fKJ|XwIT{*DQ_z1r*VYE zR8_tGe|>Ghk5X5Ew312vN8To>*UHY0RjBp_ z?Pe|l7#Lo#)OSjuspp(SiH{3xko{v#VSvWlNcfqIQ-mu?coAG&sZ`V^6Bb66C1x0@ zy)bEZx=w&sC7nz=qiFP1(L3%E=T_G0Nq;1;_UiIj5J9-(A;zLpm-=uewu}|L0n66G z$-D}iV(Eka!5D9&tA6Y99W^ge^JMgZ>0yD2REKR9;1JeML2x`PyCwwqNdzhQO>K^G z(gpD#HXJJ77C7v}Uz@s5*?Y5PG6md@dE~uZ%K+2{9Y{YuSviYJPV?=?)$@P@%#-a}gWK3vUIAzo8jL zW{(O8xMd6CU9j#rYu*LClNmT$2uq4apPyEs+84j4&}PwI#X2-vj87c34DE7J9yTkO zLD&G4Y`I0%`hglOXeqOr3{Ws-89@gx_~{z(Tp&oO#9Xg27Bl*Rld)snDgyJ~qC*0C zHEx`87SZ$xJf54Xp$_)y;~L`vpsu_+`rWx8fbbNvgn2)0|u^q2}Tu8zULfB}1A z+%W-IM83Y~0`U%Z%8FZHs&(MhVi77tpH0b{bE`E$IlSgCsH5wBUgg%Pfn(N;EfI*w z@^E8R`;2MltzwieYhbHt0O51!Q5m(YsmOquCUySRFR+~rv!=Lwcfq(2t9iS;NMF!1 z1NZSM+WcZoiU?PKdSv#cl6rw z7+^8>u9yPVXef~K-aP?jY-KeBW5l>CC{;>o+6roOwOPy`UyfKbruIF;6=sft|NZOW*(yMCd7Pvo1bgVs*6t+U zw}uGj1ext6S@gIKdO++SJ+d`EHH)K5mJ;lYSo z35y`kdpV~I%EDJZ7N$-v78lqB;h`qb!>L+EM}8`OU-PWyO5Qid2#WoWZK#VJOyumx zl;5QnYeSH(>_<>1kcXiP=^oRs5CphuJFg&Mz#u^k002V)000XE002LFvDQFpQde3$ z5t^^)kY)GMU>ucx8t|IDOlv68(Lht9Z|vc>juow;D1dI}Y(v)VO=xsnfHbcJwp3l! zQT|Y+Mq^O@3yC{vMiia!*D3zbN9}^6S?kip3H>bJMqs6hlz&S84(7`pz8?0O#84JEMeK8C`x7%F=_{ zFIko!csDAcCUtxkRt|rME1&Jr6Mmz{?;m<4O?DWIhbF0ZBZSL3HfBnZjz9xMVVBC_ zi5rImc-?^;C|~`ckDlm)bKq4gjH5m=8mTO9r=(MA&dJc*D@Qu5aHBd1j|+Fk1wpPT zN@%irKpz^d6tFNYIH^+$3a`?qV#dCmqN^)Ju+Q1Y1@cP=_RwaZ#cL@5N^&;X^zZ=H zo%xEn_)35@RO=t}1po!P18`AI<+Ffqzuhw@QD{2|GVSTkoiO@U z8>Qo@2nt)|*jd1kfz*3l8?Ja_U;IdBFD9;-O>H3PZ`t+5NdJch2;)&*g{OYmOc7nPGAkxSLn<4unp z6Hwy$&0CuC3TkEVEwF^)Yo}LE(Y9WNbd&Jj^cap^utImHZN>DNxuvhz@ox@G{3^_)f8kj*!aP<)+or!l94<2s;6nvIBx3!JZ7 z3wAV!AF6EdQF$JJpD+QL%Ki0Cn)@kJ&0^h+(*r})9HQXM?;xej3SGCZk5JhUpSX7G zZWN+)@;Lpvb%9m$%lI)*?3dYZ)|>Uh_cjtbr23WxrVf0)D;seIo!hpTp8Z$Qtl*%` zB~y4G=gW)0)ZsH1vM!MM3;}(m?p$PlXANLdv)s7_+U=&pWOacvN6cS$iBe}>>l7;O zJQcJ=rQh8NZ5mA0u-^iy%+I(HXasZth)$SidxC}lP(ZK0=P!!iY;bp#pjB>?uX6|| z&%q8_K-k)BJoTjY&+2l6%|cMMq@t&{&b#AY9)N7E6fN9R*3fN07Ym6v&=ktpG*T zE9*D3N|vw0SKh~p`W4iI)zzIjl**R>3Qx$Tnf}K@@$%o<4hrq2YT12YW;Cfcoj8=b z?{o>R)H@F^y0PH`HjPqnCkB$o)f*kTK}mN33XRPEklT^=F{8ylX+cxZT#lioeKg3$ zh-@n>;t>ZNzo>+a*N({gv&gyXu%uYg@-w-6F<(-gd{d?`4ks36Bu&P6JlA+h-s~45 zv6=1g1VTjT9B{!-E`6OVU%(#Jdv4ouG39Q`mypVGr^EJTi=mwy!P2H-!L^~i@g{Rv zsr#IvaVDjjYtGxj42z{2T+K|{0g038ZmH&5Tq*9JtiuX7>klLCi4sp@=++iI!5pD> z%vVp{M$=@#6A@7X5tyJB?GscUDl zhr9r*UXY;U@v|SRi&U18TSj`#U88YPg|VqenaO5ay^&)*4n%mz(ycs z1wYrYZ!Y>6>dIxi*Iy`!NSXb4!g)KLme4NtTtHz~UEuh0EW-}Y*@oUm&Y`+}EsuUl zYe<2cas^^&(198MgM@ZiQTQiF>*~k=JZU)t(hzAW19EBgA*v`z@3=r-TrQm>qn1X# zm7OIDHg7tFL+X=mC@Ouf0{Mabr>LLe_7rB;qbPlHf{}<+z;t+d{mkjicLMTb2XqGht4l`AP z(6R~(-4}ry>kCT$1m~_6zgJ97cUu8<^;>cN$FDw$YRqH5h^w3v4cnx;)WC|OX)~S+ z^E0?*EoRYR{k6B)?HRn2DIrVFSy+7(n6<}#5pCI@gtHo!PjWB(8a3&^GYN_PXZOI} zO#104iep3W@Bo>@4BrEGCs|pqOBNt&fcwM6M(g(+;QljLUX3n~^GL}2-sKL+D)T-n z>RP@xF6#peSHagin0~`g;BSm%eFi21_aGBM&gVQBh>QJS+}=qL+pKC-~pE{N}Lt&>v<@og8EcPT+kd5wM% zOPL>R{4o6<5}BV-sN+xkUjpIy`1lW-Ii}x3564dmMLI-4g+o@UF2z8cG&y)$UG`uN z6D2ERAlJdurL2fN?7#GV4uaR{To13Jw)lA=qE&uO7b^_4J7?S{=|#+jK?Pbv?Dw!O zAFm1X35gHyX_Bml_=AK;#G5(Nku#f&^dH#4j;^Kq!?734io_Us`_-@H8~OQ4Fm>6Cz)Xa!>R7PXCQG!ukOslEp7Q1BlWTGaFXV6 zXrq6Y5}`Ers}i@^U!0@`0SWa6Dju(0kW-is)vZDO0^17GjvJe~ZKq1|;AYQ-6p3%N zOFbxiYfInxCxcq%r~8wUvI=EdTG}Zi z0dxHu73h~AxBe(vfEfEl`Yp{3E@y5f{C@JI;y05Jgmor5H+0L7tE(f-*VdgEt=R9O zT@o5>SurM3L1J2&MyH5jsx;KUM?>N-XF)_d9DQCV0U!#L_)&9F z`yNTCe~2i&@o|8e@z;r1GK2d6yp425=80IaDY2Sd}p;DESOZYMR6 z6D@=#RPjc-Qk2|Y{zBCch=2oJ-t$%c768bIe+%I1tSd~*i(&?E*)r;OXcfDt6Yua? z4XI=>m$;w}Y>*Rk_1HT^`ZtIkZO^6_sV6gAz+;rCLaMGapph*`uWO(LRmqa`&}IpE zBSez`)UUa~n})M0mp0`We9UH3wz?fc+x40q+nHWZKJK zeRq#+ZVlbZJye=ifD+ZPz915ILDOnY53fHG5dz4EW5%Y>eL*nVgGLJ*=-%4eA%KCy zL#_)eq=g$&SZ}sIjA?(py$Ue?BT@Xm$~{_@;$+;FUrYF2*vT(s-LROo!W>DJ?G8K-Irw~*;D8`t5T%=oN6AJ9En>YZ?pkV|5+!&GVr7Y zxyK0I#Ii5(VDe!4NjNfUyX2xb*OSrd-l>8edBy1u1c4QJt%LAGO2C2Cz71ekVaLw; zsGgCK81@gl@nyGJduJ=KDK%lFUXmsy4?Lqmr)?r0E3|gWX`>6+jL)&MB0P(G<}D68 zy1`jWIgVl4GKkiX%1oifri97{2-987;7wNvcQkYq0DyD|jin1QzDW=ckOZurj0qbx zdASTBCgt^XbDcSD%YY4q3tQr~kB4=8qQb8vWPS#}vt9I%Yk}>W8ea zU5~wm9al{-J6k0%h93U_S;r6-^Ht4OmByoJ52als6QWXd0))E3JButDOu_oWs-AOT-9W_Wim=%NUE6^Y)Wk%9Cn#u(u%1Xl)--lA6n( z(Gv9vq_}BTO}rmi98rUMxsUXiWdqrueJaS+MLt8aK$&|N`cP~u>VU4oD=Yo~D3a@k z{Bff5Lo^F1E8^o(z$q|tFK*n3gP_b!1Y;n)V_^nB!F)Jc?GQXrzS8zGHZv(00@=6F zJn~X_P#l5?}XQHngMM#7-=mqR@NOGUDugWDA)>nq?X*406S`s6UPX zvhIut!8+|LK0ZHRCiN>wfVo%$)-V0!5{|bFtr8u`- zq$~_6L%L^WQPOd0HfKKuH{GOo!41g%T{^fSp8*MWSm=G|l}kts5uatKCp95Wu!0JA zE!D&^=c3IOZU>~6%wOd2b0y?iV<#2ajWaubUJOrCikwJlZoT6!3(iXP@T>H>op z7?{5CT_;k3&U8ys=WgZGQ<~;u1&gTx1up>S@?s2WRk(JjWlpOmVfs=Sxa`j9oe2sN zz4EzSG%CHvqT*BWdu*D*dWUzPIcJKc&3GpvYch~+srtMYfT%~Jd;k;})> ze1WR=00|^z{%X1vTU+QD38)`{f1~QwLRluP}ofqLT*PVm1KYgZ-GR0)+z( zSiuql=Y1+kXCHQPsT<*GAjk>q78^4iK$l3^4ctl)bh=Nv(wg@wsTt$y-{mI+)oa zScS;e@&iYLs;&+k{$`gg$xgR5t96o4R3GEunMDKa$CH&Xl5U|L%#tYM<~`pD&~b+D zU4Qh2zbfq;Ax5S;QwTbM_bzoBj@FYU1x*#yt=g}APEBrSjaO53Y%TfiD+0 z2dn)I+iVaGv%=Q&i#Takw5Wi}D+g==LC&7TO|xKc5C@+LCBG@v`93~kS>>ESqksaA53PKF^v2!x zWSoI=kf=9Z;bHU`gK!VcgLVVeSUR_;8RiwFj(9$^YIqB_+L@gt@xV z;@4>ih^2dYKnbX_bT4P0@FF1kh5Du~!YepUL%96GdOFtXZfn&HyBSuRTTP)&INjLl z*ODcLU+4e9JZt$!oDoxdwO?QREtcRr637AxYg6BKFOZtYq{5{#gkmnFs;ZLRGYg$1 zAn3Xds?Bbw5{TNeBcjL28)2g2$uw!CJrZ`F(%f_$wmfZ0U65uOt!UwgY#DM7R1P(Q zw3Ney#9rAwmO4vIqM>340n$WEy1;VHwWhgBD1}^?D4t~_82tJIVR@f36cd$5LXA&R zO63W)>#1o60imv=v7>XEUxD4iHrjLxoTDT`{*)WLD6B_{6V~w}$mW8K`|7y7U?W;N zg)O57nZ*BwiT(}Ra(W!-1h*%zj{<3`yVTmu#2;d?d}jyfjgT{jn5%H5xv8IO4A;awm6W22PB$Bj zF0_}hpF^$yVHCWGXv=cm&gyM;6a6HTH0es0`~jXY)GDOHLzX1K=2$suQ6z3jF4&AO zReh(LbUtqee);@xu>uiG~RyNY3~DQ&O+Kd zT-G4LP#*h5GzBm31E|B_L`Co^KGiwL-;cak+y^j2z^`B|BGf%5@70p>=)5!i+-jE0`DdL87ucg64LC> z&0rMYT}Qw{y3*Bm`6nQovdE+wNG8neeRCnNXww41m-hk0X7m-Vk~*@ebcpFOb{{~I z92l88LO+&*h&g}(s+S>eBJ#pEo~h~nZZM1;E`W3qcyE?52~Y_61#9!Nq#ZG0=r7vw z7X$-WhqG1@`^B7==4!YB1`8p}uSB^bKIc|l>@TLxq!uf6;F3$PoRHB2HUvJ_ z5VEQRJtKTW$}nKN!`co&(ESZ{^S=MN;OTx8xRl3!5fcH+(;Sp^r>+zD3;v=1sFv#< z@soH=_86bw5pWQK$qD1PhP7KYSaX7ZdE}==;ZzIb-Ot6}4>ZB4YPJ_lGHa<2g@>Fo z4(vHRxyYaYl?1r=st&NgZ?%HObrO}9C@SG9wKJ7xKKcaCphqTByy5D_kl{UVNh zJaU_apUR+E&M5}{*kAcAe67HG*FnCFIO3*xe9YoWC0AUR zZsX#O3jC$_CwIf2ll2W`pO+(WulI-W+P>M5qOb;OI#L0xIxgRjP_C+rf}Vah2-h6p3yuW{k{y9k}% zXz)0|j?PKK(#v(Ym@w!N^ILvXfb|)hbKgdBcNjELo#V<9{Om!yhRUHJn)Kn^R&a!- ztxt&FW00_$mlVMmrd)>8dXGUsH@RBq-VQVxbqDwYm|$HVR<4LH`jj?=4`ARH*ab!) zTT&tbw}2;R8V0KlM?_4x%KSIrlcVSnGL^Hk3MUkv%W)1Yq`FUpC&`X_j(cW$c=; z+_OZD>tBjI=5ECgQ)gk_nNMgb?warvR7zuq_eBdiu^u+r;9=&q{0dig=6=EJGYIEI zi_3B^6DW0%EIp!v=gs>wg$7P{KXX`Gd7Y)Iq}O8Ed)HFoE&x+^nC@?R-rKF1EJE>= zdw$Lt%^Tw7DJIvNhiy!|{;~>+csr5dU%uo;x+yBGc5js{gCCPgbC8yNjc=f30E@*!CMPCnxHg3oLD4V?I!xmL)x|8@~3cTI9m9!$|i zQ;iksDkZL6Dkumb_@(bWE)|d2@g@((0P#ahksbSKjX&Yxw7j6%Bt|1VUQGkoHR^jW zCcx{1_-oNDfA3KG&4SYbTa->f0%w4o&J24@l}CunFW@_)x@%!Rv_9_HI3!#j1PGda zGY3c$Ou>|j_uG!9ePiH^&3Q>lEOwO3b6Py2CBPaPonXrqUeK&!9m`Q#E2V4o9&*qy z74yZNA=pvmw1d(b_#1fb1|R-UJ;3i0yevbzA?8=Qs8XKLN7aXM-Uq`dFb=^7{HN=g z$}6|A7@DG9@I1q7ix?wFiI-P}zz&+iKiJ^&+^6#V4YUWb@=le2sH|l>`(b>`cVPlr^z}QD6u-~8EWKl0<}M#B|Mv^~UL(C@ zU}&uUpiSm$QSTYUko_CpJ=Wx<1y98uo^LcQ16>^v=o~)~Y*n@5{N?boyzje+9T;D7 zA=}Rf;%6G$Wj{n_HN$+8hquS9G2Qq8H~gTrm#ZM~VmDlyZsY<|XMif|EL3ahPM{@% z$w@XG?{$lYM~v#5i92#A0`$FJdF@|zK|vA+beJ(xfSXvlqn zy5!F+wS7+dha@KXOSTM81pdPEJIt6I;plvTcHX&5s8Dcz*Dc~N3$|m<=hP*=7Sc;# zNedOg1%JGQZ+M&jffJd%=JAnlptTqUze8dbG^;od|Mud&rQO!OWquFS+K=N`8B~<=Xff*&#;1FqB_`700g+2ApLEE)$$9Few0L5yTJiGtCLk#4P`X(?;lEpO6z$g!>khlOzc>G zxW-`lUJ%P4@PAAA8Jjd5e{dN=!IBe|2t*dYu>3oWlEKgibL1XT#yeYBK2n@x;!F_RlAS{k@}PpJ`6vbYMD4~e*CUMpHRkeeniOlQshyKr0s!s@ zA?{Ly8gCf>dD^EdaP%+90EQ_uR)yYr^w|jSQi4;)?BC=6ETnxl3I$mhzsHN|>AsY) ztmVc2Ca94wc=Nymu`u?hhDJQ^ebmJ}F>w$ub-Tn9hAb3@vsa$@o;i#QV*eo2C})W? z4rV@9uyg4-MKz%_@K?YA6iELhkQ?!5Fr}WoaVFlTR6)Xs@seqv0klsGLM0C6nZeal zI-6(256OOL*t3BflxdT=%m} zFHcUrPS?u(xO+ivcNRJBtb+_eF9(h}IQkFh<_(m4i*QP8DiuYGT9&G;LWCjZZl^nA z(Iy$4%fR2eiW7_^$!8A(qvLrIg*)~a+>KDTDXW@3_c`7BmkoU4r^*u%ut+U~pk;vM zfg&E@U4Z|N9R;(Vr6Iwiw>TQc%*>(Jk6px+hQVES>`&ti1Mj)$!?T&EzEtOKtR;wd zO@MXTEg@t0{TW#jbg^GVfk9`eRgM0Of?Xw^FvZ>%iw7L8fkKsrzHf1cVtIC%cv2$cf@>)qSJCFiU zmZ-P@eC{vE^qXAA|9q}=Z{Wqn3FpcS^Z+J=GR$_)q1fpO-X#E9;2-)QFYto}&4-VF zuR;hKPZ(-xLpMzXo+OI`3H`{@@n-hU_X+5B`!-`?{mr-hNBjeAJQ#|wtG7A`yh~oa zYbsIVkBd_jF!s9aIcc2I+DI(@)~*It7aUHA6j!FTc=nW5cg9BgmgJ#NcALiDHv2tU zCF+SHHEjZMI*B~SbV%*K#aGvkOQu!us2CGr5CpGhJ($;%1o51sPIxIz;F1zofq}<7 zBuejX=*N5ML=^bj2;GktcmaT5*ruR9d*O7CXHz0I_PH{|sg$i$I9!c+7zR*6=u%ml zhvDUhEtVMk93C=%8;?8W^CKy`cLH+3Ed*>`O||qJFZkVQDBNWRj7N6R5=(2+OiE=H z_$C~x_O6t!aBzhX+P`_1cxzruj5{RNyH5~!FWVpr{H=Ta2?9R~u26o@efcE}|(FL`N z*U_N1n@#0l<&K*dPS*=3p4>Z5J_`GzYSfKG6z2e_E#2%0?{_E`seuV5M7mWaUEafS|mX`ZH8dZy5RX+%j^m_58 z5{@S6AI$w>D&@Cuc=xEC;AmzQyYWAZo%m62${#Z_VSYyUQs-wjHc-4eW?8mSpvkk0 z>UPDu_$(q&`_Wc}fV$MDPll#ClZ|NmmC5cRLl@sDfI0=(?08Yp9BZ9Llsk1^s!YXd zkJrE;3qLHezmPQF+~#tRtO`JdH|6flW`b{bu1~@B1yOPb8i}#*y_@ln{PrS88!)$U zd9e3DMJ3r#WTF#&jk$*?(QVPkJ?>!kGubHpu2A%wS+lOiT9I2GC{Erh z&-AJ8yk}5Vi~b&0Q=j1?;Y+4RKI?;-KUtD~!=vywN~T`y_b@1Y4SY1pQvMW~`k0&p zi(h<9A6R_L?kmc+=|=P8u#@_myy+RSn+-6rrpqVpx5e-7#@)tK8w-_F41Y>Tj{z z>X00JqA(CE6MG!=&H| z7w6TL9s55dT+#?rHyiv-#KJSMUH7ZUsI_(+nH1LW2c8 z1+Uu3WeW8C`BkKTHzgS`wdkBf+7MFyaz$KFDT;=mnV!c0P%Civ*nCw$*zS7F zZ0%taG%z%~*b@@Akw<1S(em5N>0vG?*AaAcmSG~`N$7bhr5A`A2bs5h}qdxG^DKT2#AQ9S*01QyP zo0sVz{6GX~ni3&vHOc}}L6cb$OB*NpqDk~rBDrw`3-XT3MGT>12Q>-Xpkqzz-C*Sa z7}*$`(#0+n&?XT8jcLs`V3$frjE+ZR75K?A$M@cX?ZZ{(in~3;yOdtHQ`&B^66DQC zQ5cO&P3f5UR0H`rh{V=AY?5`G*5O$Y*RhKl1}F1-bE&o-cMhCweok4Y7cZwTpfvER zo*^@7hUcbVV(QOD+CvD?B&@1AI?aWt%_H8cPyjj_(ust&jnRA5znHx$Y7u?fOQlh4?v>}3`op?+SeL>3UGPx&VC4Z zO%jLnw(CN$%U_U^k&4+6(2MvoA^@N*lvR94WNH~r8KPvbM8JMWkHDVxLq>`vXKSeR zNa$7Opc`x>7+cs7D$6*dYZ*P_HPmPNVN)ACM?#BV13F4ki+0&9jAhm!VHgV2i7$xg zH4+iPujV)~C=kq@?^y*FPJAhIT^X8fpGEJ;q32v~7%7Kn)7RWOX%9_#{9?A-nFW#3 z61O}ejFar^S|-F1sUY_FKE2o5?vOYY*BAw7adMlYD>a};!(%|A6%;D)b+x<|A8IzT zC0!z@K}=2Rv_}Bb7+70iP}>gjY*$ZxaM6%Z4bf4BhD9}teYs==DX4`?g>*ys1XOXo zQxPyybrpMl?=CYKgjwbLPotjq8G(7IICVpsTwIx^2!b}G?t!$QxzZyn%Je53k1h}sw1e3~8>!oE} zEMg>m6WXR3NR=h4+cBK7LWo>?V5iQP{(6$WS`GAC;XO3iYewYd)w=e|&<*q+;%bE9 zJO6J-6r)@2HnoOom{4F-IaCo(`gnNDVh&Q8OH15O8SpR}#thhK|9-MWI>r_cO$26& zj_pE@srG#-3k6|}A9s45T2(26sYeMD4-DGC@>v|4xJAe@eljVJiC@2Tx_a#Dk(3ze zvBBn-rG5Yl%qq<6HGkJ=jW0dO45;^+1~h_)zkTFq;Xky+b&AQ*4@JLNWXl zayqKaPV{p1Mx$_Xzae5OyzO%)!BhP^yDexDy010Vkc{@Wk-M&^Wf83o{<974n6#u$ z6H9l#lo8z;(hvyZnMrX-!?D;za22au=eQ7BKaKr{2<^kulCrT3zR6k>(}h6aBEt*2 zpY~)76TcNn0{S=5arkC;S{lL*9W%1;+On{5Wn#`)c=flQmVW0fYZdILHi({zagcw zY=G8jhQtZWj8ug7`HUhYwrnyTegJgPqSYvU{@Ng#Hil@k`>}f_8*6Y|OIi$Q!NB1Z zYd6==hOadsnsh1y!>|Z9cr_q|v1$j_J+A@1B%VkW^c|iK=an9Z6M!8(>)Q$d9^GGY zzt;cO6NGM}g9P3#7dx>JMj?~*imF`1u-!NXlel8}Z$0S_4}fN>=L_)0SQ`ME(*;A~ zP0u7!o^0h_kW50^8C0GOM&ng`G(q93$-PgvDT6g`n zTTTp+JFMf(6nmh+QY|7xbw5&s^&3`Y4(n;bu{vvVxuYw?WDMU;E)B?qnCVfR5^o`4 zGwvkpr~#f&JNaod7l&>@mNAbPkPgkoMCk*j7e!Yl2k(eOIoe#)48!e%m;`k7{{p6n z`*>RNnB0al{0EnpUN!!j4h$crRs~&7jN_Sr=YpZDZ`iK4n*Hze8~C$S2ks-@rw^r3 zJQjP1Ll)|ZBq-QKjx+X5$|8#HLy`xNzQd$3NmBvzs2}mJM)D}i9aok5-wV5j$eamH zv=?54IZ%gjN^APSRqF5vmV`qdv+!*OMphMok$S?4rm;qZ-}xmB^P@ll7FX45WOYfneZ5lB&{i#Q)I{Q|_-R_%Um|uroWcAD_UF z1^)Q=XO4vpPJcvsChn!NB-QX0S!B~4kd|ohhV#x>5QPwfY{ef$#BJZ?IW1fuurqu0 z937e#))Uc83!fbaQkm?~yrE?TkPy417|tM3S!Ei+r+pfsP~XyN{2fmRBYCwt*;I)t zH}_C=G{RK9=)DDR`*m)}h$-)l7N%Rn+EbfT`5VteMSnPjrM;S^6*2}TKG-dBQ$E0JnZiQI`m2wuY&MLKr&@X2OzJV&^8URjQiDZ7) z!5G=*H(jxDVb(Ag_n3IiA6J#OWun6iBoF~Mz*V|Wfe8aoc3?x>ju8nxKrx7`3Z^d^ zFoDv|KbecC2{bX1aDhhKA$W(eqmMIW5oXhP%U<)xamO%_Tw+?)A_ikMj3O#tJ!IXX z?X`-IR^XHcN{o#w%yerI3EE8Oh6P~vOgbfDn?bUH70qpx#*Wn53ha%!e}996yfCyq zfuYEN^AS}6L}T%3QlTLXdameUU2frn(X0!9L=L~7y~)63F*=Fry+i;YI2CZQC0wmA zYdCX1wx5OkHPDzAxV{8bv;K1C3pSWU#pA-PVJX(`)@@@8KkE5;POSA* z-v3m^$>xFsio4a@5Eh7&pb&qIz!}06PVOCrE`^taB@?#Up(-wy;R48aJ>@J^C7#D(`M$Yb(KvXU+-cys&=#vsjvc*~mcDT!n8}RbUonHQA zF*Q`S+uxsP#|4#D<%OHTV2b1maK}Sf?^O2G+rk>MeNeoM*=kTXfjnRS9mFFFWDrHt z1LH-WqDBxL$pw%BC9%&=m7u+VKQok(Q>lY;@GwYd{{c~cw`B)^2aWY{0|2d3O45$| zaDx^Fse{7_zhMS%Y&R@K*; zqCpPcp(LN+0G2R4<;&}>0)YkgR@bu9AYMI1FZd^X_F45`o`bv1&$+{U@iP8?$F{2K zLx!)Jo^_6!{<^zpg;xp@8T}a}wSmr=X7jT&hu7jmG{wg8bOu>@^Eh{IzNxN(rIQ>?O`{HH) zje;-b{6L-62VUVfe4D?edBA|Y^IjBYLNuPd`hYC+>--N71It$W8KTU;`Cnlu%hdO@ z!jfBy4_Y5b*VX4@w8zK}7Uw|R=I4}%>*Atw63qHNd&pU|iq3PVh}E7l@6E$A6&VazFCGgqt$RGqji{vhNvmb1Gk z(1B$7rdJoTpvpx^F9LK*U=3g8$>^So$k@FdnN$8+QF|)fYcC3Po{8^dW`Qus?p0mn z(rnUFXG4Grc!Yft=DE4G?+f3;uSLA8JF2~umO=_NcOVxbtreC%_s8Fg^+}uiyMt4b z8hgk)L5uZbKWe<;v=<-#c$z@lIS(1OPLo&T?d9|96zQ`%F%EvRj0uXi^y%uWPyXLD zRtsB_{W_$=fj|(P=dLX>%_Kn?x208mAWL3a69(E6%x6`aO)VpSh;o7%2fMV&k0bIx zGG7i`dM?Eq3p*y#3Tk&7Bhq_chCc-U zDhJPkvq*57Abc-?p6R&XJK}~HZa6LWc+r-A%6yBF?KqjnE|qTORA69(X1JKU+$No{ zq}$53gMy<4R)PHj@QmCeow`db^lc z5Fxgj7dfg;E838%+d4>ABlMCRuvRsM5VoKCG;o;^OGmnk1Z%pHC6v4bwluX{CyK-k z$;ag+x(brtj10bsd!-AI?@+Kb!Rs;l20!0MZjq1K7DS+{ViFI7(jT=39{v%(9-z&I zAX4r^UsU#o2?0_>lX_};M6daz8PbXT; z_D7o`R9;67Wx3KHxdxY5HL>}r(BP@0BDIPlL#$zezwyxjfQrQTEGFGX8B|35@Q$s2 z&=CR%G<-m7PZadM8TD$Z!diOe z2vJ&RIjU4u_!d&MVnd5}bJ^>+J%kFMM8zeV_=1tet8WV%OlF)Hd0$}u^Jhs{z;EXI zK>3N`Nb4({BCVUQ)_KU6ZWHC^7ZmA%7w}#QeivY@Hl}p93d0t0e1HXkcuj>!U&`LJ z>7z@bYo=ShEdM`o0u6(*fW(s6AYtZ#g);q;UlLE^`&oYP4n;>X3fyt5S+%kW|)C@rM`A|kM{%vkyb?Sa2hrZqox z#10pbL4-o>3Bi%5=^aC3))WgcYPwEkmIbknBpv77Uq$_LYf|}=a7RWj(AaSyaob@& zsM**}tuI()gjnG-5IQ6XxxlJ=@SiOUL-v_i5SX=#J5^Zr{SG?B*0v^>#rYQ{N7*%R zTB9S=I$U%wXghXO0Q0PYq^52xR{fd8D&zB;dOI1bD#r4n<4AiUjW8YK^c~BCe3~CF*gJ{yy3nDkT8GR6N*2)Le7m7Q825OhA;+7J5waCvw#dM~BTv5v1{ngcy)`i9~o{X;;mCG6%S8TyX#NPv=! zldF?+!}2P6kTUgTQP3Rgay@ZRu4bV9)%44LMm+U=9JL)T*fId#3be#T_*Y4vs{d^{ zHg8{1-U+^q`>ZwOiDUUA*kTx3*FDUY>h&f|{`Xh}QMp8*n7pBbJaw*QjIrtANut;c$j|NLafJhTt7A*Q4Y zqIxP^^ae`F3+@yIM~BrpWr>JAxlvcG1q@Z7skgc~3Qzb3B9uvolWJ#hC=%@eF=zsy zf1>MY3@3qt75z@pLK4ljEJ>u(!{d1`z#0A%+D7@D?3KZ2kpQ9ah}nbSRyZKbfIV4D zcaW2;vHy8!soD6|8#|MSXLi%E$K|QFPol3UaOiqfYr=Kx%?QruKNl;CYo+dB4TLd} z6&QQKQ?sWVHNG)B!lV-;4gfqBN1bolgulPG=$$V?!$*RtS0f2BMiR8KDnMb(_jIs? zw^EM-Cy1g2PzXrx@G-wvD2R47aKTo5?Nj3TxbNSdLcktsXrtD^!7s!bW#)ni)Mh6(V|-d7)R*D{`&=)t4J90C^<35kXc3Edm!?c&eq){x zGDropq9Qdng_Y#O@iAtV-vTNmkraR0!XsYi0W59SmxW1`i5ue)>mjOS1TNXp zq*+Of#m+C@0RIID9zailqouSoenXw8BVssBdfI=a;!Fkn?jc<`E{JnxwZ4mbv^UnU zzbQ0y-grro}S=LHH&}7FwQ&9B#nDemxF( z@eko1Ul>~Ji|R+~70Vkd*)RxQ%VlI4ExsgX1@Ku34Z?L!>|eY=M?K~dCq;MwgVCpe zf0k`sR5H0BdP?F}p8-;f9e^s&r}BHNeA1BXRX1rxzo$YZy0L?v}C zYd$mIzufT#dGveAmv%4!BT=N%FhKZ4g(g&DJ+}%81fycgMgR*GBZA(=*DfF>fS*j5 zI_8MrZP5YA@V2Y>*8LrVbwfd7B>=zcEP z?R^J=YzH|-06xbB2vyced}m?9F+IP!?JvT5eAFvg#>^rz$?LRuhM?xyh(XIT==hI5|n&kYphNk4;m1=e)1 zA^o{^Lh_)gexep1GcPuB&CJ8$tWdWBpE}tM5&7a7wkKh*Rn?&jYiN%c>i`f>AW0E< z$$+=`6H?jF+pLtF>fAZkdebwbCikBn0<4BZMx@z$sjcgnf*w2 z>J&1UF5H%}e;J@9?Xx)?B%QdrlB@~mN9dRAGeNmYKWSwn{NIZx0ZTED5Q181#nR)$ zsLd^SpvSkOBtm6agzUOh5gtwxLM|ss6Z@ZGsu27iC73L%034bwQI^5O_|A*ih_uH6 zh9I>0l=N;r(Otljj+AmT9wzY@6nhbryJpplY7N()wl|nyj62YqJ$$3YuwDZkY+_6e zTR%K%td>7SvjXK>U34BCY%y94OD_RGL6z??7P1!wxh;cM5FBMg1o%WvH&3F4tZYI* zqD(Bqu|Vh~nUEP7M<%V<4*P8(!+17TkYazPRm=VoRL#MI-RA(lg9J2h5njA5bg+eI zj?;nqWl;t|^Fb%ey#h%`88+SVAwdOvC-d#`GYHi-oZxo^k#jfRo#3qBB4`c#xxF29 z<4IP7KAq7zum)A!v+ZumnESs@eWCt2D{w3w_4$NaU=1UypQ8^bhxtAXS}yb#Q9Iyo z{*27I5yEisahhTea=yO^Gc7+=H9Zr|V6Xt1oWy3I<^TX+k8dj~S1b={&2DaBBBxy< zvQCtJAH5R>7?qR}V>36gx8$dnK*#l>=rwr(4~Ed>Pk(-H&df}EV_-oA$sXgAVhli) z0eQVc!hTv*p?HRqP1@m220Ph)aOBPbhXeW_@w&Ys&qOoJ@6$=k2nQ4~dY^P}S&8IMTaAF_PNv6FOUTxLSqo5#ZB8iH7kQ0)PKTKGL$@p+kw5-U{by|ahnUoYpSw8I)VH0N zA*iif4gn<$Po`?j?Gd-5bIP;%IaO=eCx3`3_?iDO*=QmyX-5En0D$;XnW)c><95qK zz1CK-aZyqV^|5kwn#*;-z{+v;zs`vyR+JVgwvy81sRrW)^TX$c36S-ZuIAabAT>Dsk zGRDOOF**+=SzPW}h%_~9 z5wceWfJ>jWon)SS(N569Y~?jzG*n}0|p zR{qEk#P`6jz9A$Xsi&lI91l(5+QJRj`j`?zmIpOQ^_aLm(0`8gKQ#E5KW4jEcczen zy7JH)K>3sDQw=p~RV4CxZS6%;Ha>i-t(qeb5O6a)yoAMiuPB|SNSV~#_zPbL(OUH` zt69I9v$Vp3rq3EI7Jf8JsMB;7!4EaOoBCp=phe-k2Wd#Ssl`ruG34CSsrii0w(IaI z2FT?FpbaU@A?{wKbUq!sXTGzCtf&@Rsfb`Akkvgm`crMAcw0sy#^eSF1j)K+q46rFv9^*C4BUZoXWSARex_5X{^dTkPA^|n?}Q9tu?azg%$a25 z8%ISjs7?!x6Q@#W7qIAB1|tLxw4MOo(xc!K3UrRXWOwnT9W8My-md9P@+sGKHV?cK zlnV{HZIH00>2tdL3+ElTeD4G^o8D1_R-4l*!2~|;acfXVr35WDn8C=f2A>L^cq6dg z$r%Q~#eVLQ0Ng`SDs?J(06sv$zcQyPJhLGK%&npZ6b_#zdjTVb1s5YZAYh!-im?)+ z&q8yzi`c&OB73^|PsJJ5K8YCI-l$!*JR*Vkmd1%|gdInpvamVf(`8^_YvE?*y*gsJ zG$IM3+a#iEX^5akfHT4@;DmTOP|NpG2-F8 z^$osZNL8qMr3huWp-c+8BY}1?qL=ksZ5GF+fgXrR}*05SYHUtz~ zQ8FV`L;)M?nLi}bXu+6~Kdsy`9r=hI2nuaAa(rSK_!gl`DzD3$SjnTODp2g-3HfH`I`s z`b$kzCZ8k8pde0AE( z0A9od-`nEIl1kJb3Qq~4e1J<10ku5dX!u*Y8rpF8g^zk^eiMdd`vOb`J|h<7g$(p& zV4~te3x>vm0%00uqr`$C*;G*sxNsCKCXYrqV$lRm;Gi}<7dVi#J!kgte z`4}}{^?B5f>f4dFlzB+=5^3KXNm&Jgy+GO0z=ELLId(imsm<3fM9uk3YX^>|hEq)0 z+woKBr!b(Rmgwq%LYDa)h_;xwUY;2Q(6+Xw0lB#H3zIUJr7K->o^o|7ya0f}@mWqr z(xS_OPQ1lkF#y8v5{Mmm_>*wMF&{@EgoPTQ)&R4f

    P6tx%?`e8A_kD_-#6ui*Ku zEgV-`@h9fo_D0??m5%d#9yMg~D*i>}Jl@7XIm~2&^Qc-VCCB@ftqLBwp9Ghb875z{ z2CMf3Bfof*YF88SMUePNXbNns$eumhKfMcAe*o@P*C-e4W!Y{7(_m;56D(l6d;p-B zF`}aRjb<`sq`fK?RR-X;;s!q_%r=jCQtQ=UO5~ZM==_1mbA^p!$d@sGSBw?AGNSS8wE1=O1KM=O1A8 zhsZ6}BOxvEB(CAkA?k$`ji321Gf4VJTz7$Z9zK^2Dz_Y7_&u{F+Gikz%Wwvm8!!Q! zZ~dZ|LXuv=U;`~g&9^=j(jx9cM(i#HN&Z!2^gA8QbRf3~gQeyYi5DVWc4w8lML`-y zahdzjPB@54o2>VRU&y>B@t%jT*($5rc!6b8>$w3<*)w~xkpb?BZ>nRV91=(QZcv)5 zEHUbf%aX(~Nk2yl@1~UWj=2nYdh<$R3jT99?@Bz8wuoxI)wLh!CqahIcdXn* zgv1gL>U_ffw6%ay{m+TG&Ce+jwS9s&XH37JK}*EmJYjohFj%1BkLu!&dj9{nw**`S zfujIA??pkqgE-I)mYK~K1h=#TC1cx&YX;1M#yU^)lwFVo3h>Gg@+_ZJEX0 z#z)T(Fa_FO7J$SjJM!XpYoZ0FqYyqKWDrTL4CzGZmXQa%QPZ*sp*M$3ZFlSynDPLd zC-}@z{K)T@)dKAp*u2G5)B^Y2(DjEpvXfn;bB54rr-?FrW^WASOUsuMN^+qR9(TZq zBt~71tBa}U0Lq>NrRztxEaN;RT3fR|CQ&lj`G%8l7fELt1XVv3Qatd_v9k&&N0LQU zD}($zpYTvUQgut4C_0pYEWFjmDtH_$YmE*gmaNORytx;8AbV zDJ9j;X4hs~=)?!D*nQ%W$8q`7h_pS^--|y2|6t7KH!g@D)Uf#m8=yF0Ul-y(6)%pe zjy9;3I>%2UaVDlD!q=~W!Mp-tM*I#c|IeMbW0c)xAxyG@k4?F=@p=U8l8NI%KXH?n zHL|PZITV(W)~T4iS5Dt|FgNwYJ^Sj!#sEx#_nl@*lPnqb-{u?(Bn3%Vz38mLq_sM< zqwr9{D3#2blfs~Zr`cc9lYS$J*daIR8)b-rTs5B==#=wx?k0+P5-`Py<5Cg(FJSA; zqPki&WoztmzUrs*zt>-W$c?1zUfYL#FEuGr0EY*VuwbrNXFs zX>C^%yPnIb-a1ld)}fw`#n6kycJLsgr=^tZF4tm%#7zELi;Y6wd!w>eU5F9C3vCIA-;Om{=#Twv z2+SCZ9o#g^&$%U@J~vF33nelHn(9=h(#Prtlg9)iZ+mE)?JjGJo*hO^Cl;gVSIVqY za!^?Y@>b!6Ii-mg-L~SokOw6HRX;$bd8+K9RTiiE3ksWOcxW>0nsnj^91g=hfxNYB(D!B)l#GLrCapl-8yw?|;C23gA4taowx4G;@P|Q`MA14xw@MG)atgzrx+EG;c zTGgOM|A&aGyDDA}cr4J)UKB~9 zGC`-$n+j13#glU}%>)D1AqZmcCxkA~_fqS*gCA7ejO(~J5L4wk8EWP(#m&_u;>N$o zvmuq`rY~ZZSLmPQ{L#N}sV>@UWN|}!@f{9b&w5>gvkIT7wXGEu%vEr(3iv~LJBAk- z%*ea1g{)v<%KR|E!UPx$YcM2{w^w&BEn+1>(f1v zPQ(%HoEpe~+9z5O@_zCWMp+$47D zrE@4JTftwQE}>2Lwz3{eyIK>oZTg{e{^SaMbW|=}AF(Rk5tEn#&;prN@FyZK#n$<} z)4l;Kxc0@>=C$r`v9U`#Mt%~4u`4R8sI*SNZvKLQ0lY#W{BQkXG*)ciRLO_QLAHX8 zyb5orccDY|;!5)DTLEYxi<3ua8rp;z79Y?DR0jW>u+6CN1muVvr&j22?8INN;)F2p z*$A37jJM4+E%>j}itt+G^Lyl{#7@ORlP{1f5e$!O$6z=l_(k9Xj!z5aC}{P@aJ*)K>DJJciUW$F-LAPGw2L4D<&pOWl@BbIf>A1 zg(}8Ta|xIz9KjJ(TWVBO^E9WvP@^4|{C#c&uQIRhZhccYhvMjNF^My$0vLdGbnq#Z z-vZEl24uu81w#qzXQ~EOgY8pR=0mE_yBUBV72g?J3ch{ld;A2YhE7Ozx|fwyY(6nU z^d}2Ma%OKd6lMFOzKwe`_+sd7dwX+x2@l~^#ZSC_>Z4&rp?-dXI zpp*ZW7dRJwA%J(rp+S$~Rs>ksTkPKot>nxBkcIIbv2JctNN-0%mp+s}{x7q2pD#TC zK{&Jo@ylmByGZD0F!g4W#mGABaB$>L6(7imK}-VBiB;ufa0P6$gy53Ta*m0KhOhRd z0IF!PIW=oVuvvG=1f&~Rn~&MeZp9IWCByz`rwM87T8!&W5$aqt0^eN_?10a-hCP3X zzZv{YOkF+aO5ig)c!60W9nkx%fw-V?w4lg%nzJx$>3X${lx##7H;)xPH3anyl2!T& zFtTN&TV6_4tC{-xa3)<#ycl>yv=U1WhU)9ql;95o8kg6|i zo5udTZl6F0zSQ9-isf-g7+lT?2pj3tf^Ws!sK>GY+JxW*<=0^!mZV&N%p* z<1;B?-Tr~Zl_?FhZ?g^T*elakprE@%Fs?H1+>eS4!WNe?l1{{5g}_=yeC$8F2O;Iw z<993MB)5<^XdXRuUJ2oCL?ivEC{Dl4m;QY2&K;qEtqi=S~eu>M@zT7cyOX}#+b4$25Udk3B z#hKqLV&%>l6e*(|9p0yV{}09lnYKkRe>4HPD}b9Y<{~|B2E$hFFgsk8;+)v^g5Hn# zhr2RRx$WrEJ_Ja!6LLCES{CApeg4bzxKOq?R+2vPMzw~LDcE7T{4VJ&CtxdvG1x^9 zNpChYyfz|0mKT&S*t0RPO|4P zgFgUB!1+kX8&3_|)A4N-+_#BuCoSghQ%))W3yi+H3&A`q&>h6YP9J7sMMV z!mPqM`;FU_#-denPQ&mndZM-b5RY<&YtIMJFr_O9WyC zP8`lAW}x5&Ake$)|AI`P?XHy7DW6|7prfOL^nZ=IT!?t?Ug0a;LO1XzZNUC&%)}9=(LI_BJH`+#uRmD`i z;Qnl>1~$u8&vm_#x$}X51czJp2_NmxpeF-i6$TQ--tnfOstd{(6^-4Xg2CBP*uy5+ zo8N@N1}j3#21-3nb|^ezc+NSGE>VnZ3jmHnQ(nrkJQyO7#iCSPqSrol976b3eboMR z%!as4MvQo|GgtdMSP*GvS(OKHxIpT&?M4tZI7dq}X6rr@_!M;Db!_B;Db1EW){)ba z;nO35>wvng_yxKBLsoywkae9i6bitFU*)Ud74cIBu8Z2@lg8uf0?Lg+P*h`VeCCu1 zlQ$G|X3p7`S-}=w_yJ^$9uj(#aLqmeKFuM%m!6j0!t!VZfS>vg=|VYnU%AgB)fMM@2wVF8PLjT4TOPXNJ5BX6&>Y|$J_^W-p+mDWdzmXW~F6RFldE`35Ck$ z)4fL(pPmY6xB%x(N1Zja)Q+KbQJ9CUM}sA(VAxP9J78`qlX$CgN3D@;Gwwh@?8`o0 z2==yz$LpWq&d25zV#GGEd^5VFk%y5WjBxCSjb-^Rw4|Uo=(G)aH9!mC2+Qjzi0IxX zfjs=K|D>$T5%dK&@Jk0qXGa}T*pH!LXVzgDZgkOgBRM--suDICW5(1{k!HJi6jWlY zT>-l*3Q(pI+AE1~xa1lFUURRT@esKe7plG}*Li_tKfZsKI@+a+i7K4MfK?!J+%~MK z&!<#o?Op68t{xc~t=Ml~+QxbYw?gr$w1!E-N^xFXkYf)R0}2-(FB=($;#plVn_%xb z1&QX(T7?%>Y#)Lh*AYfds{&~kiK9vpz=t;hvZ8>>?=xi&c&fpsQh7#-Cq;dP z{Jszpldcs(oXk`OnZ*GfZ=2sz?qpvik9S0e6IS0q$L0z}nTw7w9Yn7@><>nU%enxP zg2iJQ*HVy%r1GWvhF1kn`eE-cj=H;M=!tZhpCMBzVe1n+*A=atz?RWEIR=t^xXrd; zmeq#*3c3mreW53f+*b5XPsJkY9v6k|&|eV{7is1y7yOXzenGB?%Xzbo1YltD6u=ct&&d1^Hm`8c z+jO*562zY>8+?JR-ZRvS07T?Jsr`LNxg8mm7Tq;t2T zf#k5S%{@WfBJ?CYvVoIpTGHqYTm1R>%UisYdfVW8K`j=|{K!k$!Wt4{x@-@w*iqZ$ z%uYbq+q7t<-P5`QpE+Ey8bVI0Z@7}^#4SuXftBGxOOVO4=$bRSv_o;7a0*$3QOGB} zn4 z;gbJxtd8I-t*-pZ2J6@Tk*J(}chixkl29-iqvBv&@I){k^7?L;&!*?p-ma~t~tUI*@i$JdGmJ$JQX7*{%{oE0VXkQY4}sVI^O zk#N1_+KX!QHLQOyr*RRvP-Ltk4a`t7WP0pD8G+z#6;Nwgz896{D7i+Qhik>XP|H~y zQQDg+D+WL|sulSSVH95iaOuV+XZm%s0zPMPvZAl-MzD9l>KrIMWIxj$0Ss<51O+5g zI&H-84|TGSbjAl4xn&-Rz{V&+?cLHSpi1Qje)3&(*Og5h%W}(ckulMeBB<0a(_fN0 z49-PBm`=Y)G%Mxnw$`MXyK9x;RvhF%l8^Hxw(KFq!rDN~j&!f3AUdFf$M^3TfU#E+BlN^%%;Cxrj0&+sr(MX%+5C`cmE+ z&^Oi%x7+lQ_I6j4>8>t&5$(}7{r05@hc~v~W-qnn{a?hG4Z)ZUr;Q+krTzMgX5X3| zSHM-CA+a5YsVc_(xw+F?F3`Y`YYL4=di@K!uJiaeqfp;Ifl$0;g*CZ7 z_P5@&uooTX_(if=E=_??Rh#oFb#EQjmgs${ddoI^lg`o|_< z`ulnTc6hhLc%iKT@GY9% zvoZ(g=O#bXopok__XNG?Knc!arBCP<3D&zI(o52A&4dP@U^A6}K->zYfOdt$)^l%} z9X;Mc2?Z@=BcWvBM;d1ZrPEcyx|mI`NKch6=`nMWYLZ7~WQ>Cnqvb`aDHwf(RMJGj z`E||8qQg#_q%CBrb{?*>d(k+ivW%^YM3P}eOLSESx>1cpYN$DT z4eFjr(S&Ag)b@&tRudfj!o@3=|0D8WbcB;v9ix|cR2fyhn#Df;?K#Xd5E2+2>3Wa| zwmp!&h#VsYE2Nb#O8cm#lEG@G@{3ASD*Ml>N>f>HyGhkd(l20iQEBSeH`AJy+y+BH z>YNVI@m-u-h=V0{zcFW7kLgPgcWljK(KJ%JLrv_E{9&EEuEMkm<-+Y@TdySIV;l)V z3oFuC7QX~QX{xpP=^HD8(ztPRL9e4p9-26tPrkR0tK7vucJJ+0B?b0WHtkKpia1k= zEljsBC~y-bh>f1bPW|Lr~bV*}>sbLjuv^dQoOt$CcuY z^SM_Gc#RcMS`G(LN+t7utim}4c67?Oo~UraOao~`yiX5izpM5+Ls zv%>yJVChrVger89s+G;5lQ<1mMYjlUveXNOwF^V&8fYs_QM=Rh{VZLtvG;n*CZFdM zpfAKqYqZsjN{UlX&xa&4Q37B1F$Jt!@#Y!_kfi|tDLeRD`AIu5qpp|KIHD?ih&dxDUbmtw zENPM6_KM0fs>clQ!-!@v)aQNhwY3)ThIJ7cZm9B*^E2lk8U5}Lb0L8VN3&6PY`T<{ z@vJW$|6m!&8MZg}AkqHL=At-N{8c!!NcI|y5lphoMU223grzaGW!6GjGW2k4p?#`W zwe*XYwGL3g@I=JVxpg|d;BrrnoG1L$K)ep>X)RR-b>5tue&+@Ah*q24R%UIjMdYN{ z6rtv!zqv`mDJ`k>eGci30A|3b_+}MOaeXE}^;(=HD+qzEmtgygA9>NCt#rDevV{;$ z_o74FmTAja$M}dZEQ`H2hh;8U&A@=ob9eQm(_U3rdOSXAk!|Al>Pnq{tbltlaka$a zUR^r4_86VCRL251V1_BH=c3d3eL*4yY|oMnTG*%IW%&}L07dvwLjYRqHW~GG0rX+b z+>}?s6KqmrJ#+3qsV{jJ+@19udM+wF@Rl~TpDAFyWAB%mQlcV_+Cad~1?a8Ak$4}> zo9Gw&Tp{|~$q8h}y=Nxi4NmS8&$X_WVMohzWZC?#i(>uB-tRp#BvTa4R}pr9bmj?T zSjI?4DYL_+MI(DSY(5+y=k`@6Yw@x=09DK4 zL`EwBg=1arVg0M{mD5Dewb-L+rt*;YN_($~lqtFBzl22NA3L9L-hVtiKlf_vE(ZyPhn=kylPn;~gj?I0dP zfy$-}CIgqx+<@dD48CKa$r@_j5ghzR$Cc$svRN6HJ%LrmLGV;}Nz~Ys*-q0AmNDJv@Bxbd_cmXe+WylYuTRp8D}e zs8Smr>#o3*8@#_pU!?LGR*bl}heI(0Oyq4>da?z6M6t0LU$K**DNK!bP z$-XEyM6o?tRR%*2+I&T^PV8F=y~Wu8Ss|5HRMUZ!UIkAKEma`3>EqJ_t|Spm=5Grb zS0HEo5JQSF`OqH(zNCm}bz)4tu|;ZsLafx5mImYHHp;9>vgmU7%?E{Eu6T4)Oz4EB z*URKRVlrN~-@4O znY0*XMhKr>S?+%%PVqty!?^%R5{rRWd;A<)p{0&Q6{vtAF~+JW(ROJ^%h;l;`52w% z&q5irhdRaZj4F|5uiY!;`h_GF5dr$QTE9SCOif#`2-=%D!wQ_i~mt^El=;ceyt*4jTC$7PQN z$wbhvjjJ^IqIJLmg+2102TF{WOrXVxNp>Y2113HFJw~+7z z1vO*j|6x87p5c1vu34yt!`Q?Mk=E2LB)~V;xj`w^x0RZu2^iiW#mWw9IpJUVw~qr5 z(Wt2W4tNCWa72sD#Ze3xm)AvXjpyj2}=p5T&ps{rc;EH1?6ODNn7-qK*%HwRFx9y ziY2Yy>nicJdJc<6%X?jA&Mm&4Ozx@`ODRqDqCTd@ zLf%gRN8!Zh8WX;UyotYA0p67_9C=T9%Iey-k!aN`TD4Cq(R&LXdd=Ty)0-+A>=Jbs z0!);kIts3kX_!@De-|}_E&4+#9KD48`qJvibp_p07ITQa;2f;6>wrON`4BU(=lNPdMV!r3{USud2qjwZdbv}zDO3kdcx6OeK z&&(JE1rwv8TY~pRt7zZZm@sSDZdbK8u}A5<&b*XK>V8Ai+=#zIdDKW3q@fgVTUcfo z|G_`^x#;;&EWK@!L=BT)80GGRj^CsUV4Vp4eukr3HW)72HxW07d)q$*DX18|RuJAC z#<*HS+Cz${OvVvqAYYVwmqF)%o?LsoONPKo#85OaY(bK ze}flwn=c$rhQ7WQVM(}KotBg~4Xa4LgRsv)f-~i&YBv*#mn72R%9rdnW^R#c7D^0# zds*gdk*_!^)kvqW*~QMI>LflG{i+oEj$@nXGIYYfnz!}>Q)S~st+B`8$moc%*u5(U zzt-RkZ8t7DRxSf;G^cAPxywDlxr5=RR%ro;%YMO;FDROcbL>SH7i3}!M(2dhmtDs} zxL<(af;QHwIj6atkaPEfOCB@`=ew*6u1uW-YeHEo-kNw$kKhFr`HXX>0o&U=$*aKS zH0srlZEBj_=oJ#jxr=bMFjQK>d1kBP&u(6vh!Nr*P|XT7p*PigT;+vx1r)#zz*8rD z5`siavGvur^_qpxA#?J%5=j7-zP4(9OGq#h9C;En@gmFOd2H!C2-ta!la~zsVgZuh$hn!8s3p)4Q`f2N!ns3 zeQ5koC`Aqon{0Oz@~sER=6tEvM1WY|1?yNfvTB`T&m~_BMH{No&chG=Uulg;;H{i^%m)7LN#D1J*5u_Ny*J`}00`r+Z+7L;8k~yQeAjk zoi%W064k$X=$xIKZb7$iu{tpH&WHV8#BwGQ7n36NZ%=)cycVp?{9@uWc+ClDkcvK3 zV(Hzb*JG5sNHY@;K3%siu8tm|8Z?4wv>N1|i{6hc-ssqMOS-Za$Lr2qN62q2z|4h0 z8(kE3n{*slQ)pmWe{@{by>W1bYO%-Lg8n*9sF|v|Xy`GTL4xVyCoP2o{)~^-08^Yg` zFb&T|vH1(xgxJqXLz`T9q-7p2Ld}@GSXPGl5R97Zdx!TIE(_)}FB&{_Do+ixOr6ft zf{#!@>G8C|dav(i2J<~)Cn&IZ(r!3#p+MAPFSOn*B3AyCXIP#X9pM2Y=~_T5>LATB z#ues6a>22BCc%}$x!5(jI;h=|w+42T6EX*Ddh>zWoe9}R&i@n#urCmM7vQ>jYPW{# zbO}#C7M+NpM*7oG>-nuj)+$Og;|)A>(H_b{6|LrW4h+&QKjnXF@y6YWsHC zXMaOH6L2TCey1<_o~X#zoSrJHaCDYnMRYN@cIrY4Fk8WY+bxdnonPcGm(FvcIftSy zvnTDqh{8?~n5_Z)#XW!xFJeTgq@!*R4UT<@Kou^+qVub#r_<&7(p?KaAq&<)8()o&Hx4Yr2z{h|(8=X`}ai(D6jU3(uC zk+M+#rKriyfEhW_@^G2^*Z)r+gNJNo8KYNd)fa^S*82|^^8cjxQVVLo^rtz0_z2*Rd)%e~)Yr}olgDhGz)D>smNyqrpz|Cje0x7HBmAbYXLf+i^8D#C14 z&)#Tm7m@bV3|nBnX35je(;rS7B1|<5#Bao>wa(6~<@OK7uX<-!{k9V{cgn#T zktiPnLIUJ~~Zna;Oh+_g}R%D;n&3S^JHH&zn$ zRXNzkVmZsB7*cSTu}?f26Mdi@+~_8SNj}J1D$mFrv!zm7wxn0XGF;piCIK@8+< zxHABs_(tG@oj}d_WhlF&CQ`lwNrE}bzYPg{S~@7+GVCgPGOv=B5j+&r*)!cP-CT4dlpKm=$VrU)AJ3OKFcjZLRnhET&ZgX6kAx?PYCwmw zYgFFDX6T3EA_YAJNZ0zKbV?3Nzl(%E&U022^t1gDCu}Akg}tKx zT%r5QqrtscS^fb2@KAQYKN)2RaGp4)St0KY*I2u~+r~})W0i1%AMH2Dc3}Kgq*>ta zWXxy&*6~jOlHZZ)r~S!!(^C}`=5vkwDrkdZsfC?>6+_=4huLQw+&TCQZI+{&-)03< zreRt^L(fv~2OfL3`4Zts3G6hV7aJ4lFpa&yk$`8@Fu~}cFEpP6O#vKlM zUcL|Ur&hXeE&#`fDq(1@am-)PZ;~r)udapaXWexIP|!7Ta{S^`Xdz$l=ShD&;)1Fj zpNJw$D95@6n)f?@vr@-0-<}%1brG0LVgk;Z!cfa7oy(clpHVUB{~uE62_t^ zvuGYF$1vJcS8(AskEIm-BX5fUvi6TPh|m=M!k)S~TojXb<~)|p$q{)Uh$vo-dQs*a zNMeqK>5IL#i}FNe+<;O)gdFV%atrLc#3y3jMc12s(FeL`3&O-Gh|MYxZy4lGZhQlD zwL}HGCH9GCX>*fh7t}qD;(azXp-nv7R^mm$mPgl@g2$ zB=JJ_7r~G`HBsh{CRiHX&jCwT6gvW6YH7iUDcGm2=(XfGo~?VlL*^m-TTyer$aikb zIbaqrI4;sB519b&<_ELR8u=%o1TX?`!2EXi4|UP~5q>nl zW84ZPkxQ!bEyyx1(j0+iePUtU|k&{LVcze-QrG`3+I?y#DQ~= zu|{ftog@Y>{BMPKxQ68xS?dD(9?cdWRhamW^XP3{?4(yz)t5)10esr+mb{ywEL1pCfa%gU@N z%`eW(wIfP9BwEGM&EBSLr;Oh+fWRatZacNVTO(nq2SV_DHYIdhS$D9(b;1$imxrWp z6PJgi&k0feLk!>VbC0M9J7D$`UIafNszdCD>XZ*sGTGGDLdr|n9nL5~zi>junn3&q z-4=>0h}aLk;P*~CO%^Sg+!QPR$WZ73(~C|kl**cOvO(Xk$`dM_&tku-w-XPYjpz@a ze7?UZ^8%SR!RogP`2Ovj7gxqj*k__+EXD%J7|zA1Oc?&HD!RF?VGmX=eZaEyoV5H@ zsoGfEGH}Mgo2sW@$Y(CdOj%GI;&cgK>@`wzyl^rA_)Sv-Q}!2edl0}!q?L(i9rL3} zUVc1^3jU2lBMhWZX>iiB?;b)9t!hlR&KQvlR3g($ ztZLnc6|^g*8}%0*+~HN+;B#&kz`-hm#AV`J))1#8Dzi(i@VN5hnOpMKCpy&C!3bd= zga~|jQb<4#2%5^dn;*N3Otym0Pm9N7ls{J4WY;w=tJ(QElWHzxbiy zfX8n%PbmCS_lF`hRST<^;0DWcNjSopdeHEA0s5v(A8T4ke$i_$CU2`-m8&uvfg^t? z^Kf14l?hQVg8MX=k{Visf51)xiEv%u@?7yp_=kuF_xE7REgMS&I3I;O`j$JZr8cDcboBN=sa&6WM;p+`$^ z1*CRZDVsPfowHjD2pkvE5KL!rT|5^gQ4lV230>Gn9n>BBepOM&T}d%QS953ZfKZfahwr4t;&yFfh#=WbUDSBkQ*GnX$3u}rzIjVy7Z^v9)4s7{9l(hlG)H@Xbdoq9aP&P>bf^0>~0%7TMP8^+dv3oDX-u2htnCu*y%G@UA- z0GS2(EwP)c=_^4{r_D%{XZ(mIMI9TuNYK+{z85%$t2wdhc)+<4fG;v%>fVY1$v+vq zZTzeQ#Y|v9VVAQK;7YdKyiFvMgtAnsOre(XDbA?WG@$hz8VBG@9b<^IO%>+pLXs2U z4OZ2pc|82hX6+noUg`(-wKR$FAV?? ze8C_`O;#VEYjm;n_xGKR+OtX3bSmI{fTZ4(*rD_eex=Q)Af4o{;R2lo>{Ff#Mt!H> zn?wE~c?@&q&r}9DhY~oglEw%Cix7Nz_NOb8YiNkV8U-6>)9XAbIA|wQ&H-8*!sd~v zY@|WL+>MD+?S4>DWe}SPN@8y@(~)VyorCk{y&Rest>}K_dN@fy?fJ-n~+_SX+DJ46-7eu*KOLed0~2HL3k#{1hF8JOx}YqWW`4_x!5) zgQ&_wE#P)mvde+g>@k}*?X~~YjK8fINT1E*PAWoco$$r;^kr-qLxM%V9 zUFO8V+qwdnw`mM*TzeCfes>N#Oiz-y06S3YY$cs70J-ic7PfF5 zjv~yc1s)8Y{r{wQk~EP-$csx%p)Jv`j@IUjskDX(o}xutg^6cSpZm=QikwI!j!+y+e{g-% z-?Uf4Aud%^S^?}7Iku>SsFRJ)T2Os!imhlM=oWn8q4>D4qq06+|FonO29OpSH^VJ-#^xv16Cgyo1D6zDX+(ze?0 zGFjC-F6o3R4cjDnXf7QP#oIltWw*439K1S$J!M<43X{B&H3uU`Nd5tX51^3vm@qo>R_bl*YW2yO;2Ly6q zalXi}>FvA|O6pdO;=R-pS2h7lFue>D-TuIW#!bmDV@V-k%%Xt(tinLZ8hC?0ez5CV z0r?!6q1V1FBWFV}!_OKG)2zYjj&B$RC=})l55dINxMrFGHlQluD;Y3Z;%@p*?(h3c6X3c0 z#+KC=xLgegD8{5a6wd@fElu4;jT@tFnC;}TzEwf5lLSo6SbkI^uzb&n<;jZ5t;l8R zL?Cln^`0c}TaH11qHhucf0oHNN%6hVq6k<@Su8#rWMFo(@pv+SuO^C_tev}a!q_(L zEODV{_E(WlVp(GNpwUd`FkxV|liK@2N|YC-XeEHL`|@}%I=R-|vUIeFJX%;~WNyqw z3zQovDCuyog8nhyFgZ;9WPpFJz|X-$LDMAT!jtO(JYvi~s#+MoH^uY=E0^`x1jYSE z6w%+9F+C|j^aFv_Uv!{2m^cZCq1w^p!oAq)Ak4ds0v(OSkBYgp?-?h)_b3mfpeJmS zYH14N@9MtJNmL@5@SgcbIwPYKy2CpYOfp%VZs6l3V=qL8JzT3fH6l@hzUDLlS%J?u zMlarLcAn-I0O1o_Acn$)(#5tfj~@)dr4O^6VDFjS2#%dDsJni$lF9KYM$DGz=#9g6ae|{!4WSF2DITmotvb6*GsD zJ&GSa6A)vts4l1LLK24Poh>0t{!cmzVZAsKJUnO(66l+$QR!g<)a%f4LQj9QM@};B=z^+B+}gMX>~f5M%v8luCfr z)Qx-AL0V3IP*tC##UD7;o1YfXmc__f7Y$}kg#Up4AAQC@^dI?{?H+M$ui;FDmz1)#0zM;n&(pJmm`r8T3A? zG>PA%LH9JFxLxLx}gWDuBP_Bk3H9#TbmSa z{!sW{V+YU_{(-VZNk13l$X4F>F}6P%X(yV;fYX6JhioyFC$;%$kA(WKWJ6lJ-3!P$ z7>xk|g>9k*!!fztoo$1{)NLF{rkD_r{jil$ok+?fi;;P~p6CU`xw9&8=x395oD=Ki zPekneoVK<+E2b^@87F8%26HB2lCb!LBGQ$AF9KlE!5heMU14;IA;YeXKbd+V8wnEP=g5gmp<(mYF$ zd-r*Kzm412ih44-E5~RO+8tN;z_XC0m}YzdVmrBh`)vfrE;JH(t8ZH;y6KJ^z#)Y2 z->WczL~k2K-9TDUxyT>Coe*15Y;dM}s&r}tD$XhlGeg?6EQorWyC7K>#k~S!LlOj* z4dh)DVU$kYt7-FgSfh(IaZn2W&^V7@k6X7x;<%wypG$fGNkF#0H5Nz0YgPRcQH|QM zb{cuQJ|SoawbB4KSA3N559cv)b!4=K9(cOenzRx+aL(GH^8pTk>r;<*YC+xV$RQ#{ z6b=n0Uj~a)L#jJ!`6K+0@Jq`vmK5&%Dot9yma+E5&1b&_bLM7aFIf9ca<2dR zhRwu&gNc@iH4~y=u=ZbL+=xU`^I8VLB_po18i;Fbkph19BKr$6C?8<1DMGOFP>3MN zbM-wc(%wklLjn5-e*wWV159g=Y(JuU`Rv{%azsmsKrS{B4}9QshO1=DuU)-<;AMdUN_I z1JE&2`*K38LhXWmucyl~Ox>FO3Xu>TP1=H_kX&9Nh@o7zq2lQtvNaHEG?e{=Z{`d) z0}t8w60hm8utHJ}f~!agBr76hDS5Q3O7I3#D=@q)>H-u_syyWKO`juCV}ECAsp-=J z*mD`C8qWd+GY=B6H#C%FqQm6amu95pvCROPkYS8T=o{pEfQn)0>I35ph7b z{cxe`!=>6}?D#W-Ifd{pY*t~VGs!ejE-C~O@lKI2q!4{GQ{M-7>Mk+TKWW+IreRDs z_Xp+zA2^uu<-{@7;7fFHe!%A-x^kj2)+$7?mmBdMysfD?SVi1L;n|+=^-2gWo=4ht z38iDJ!|642H&&p=Ws{I$rnIm=Osw*(fz;_2jld?g+gL^4UZ@{>R&mE+7M$m9M_OiA z3tCS%lm}~)z&|UI`x1?wM{e~*fq{g|4&#UQ2&);}1U&}0edY+1qw z&C+Z1qG}%B0XrP#``E>ipxBQH|2`4;LE{-bl>4;m;_rqP08j)s>fm6{&W!_@O z^*v1Rjw~Tfa02iJ&?E5jj~3YvRU2nz6f_k?LZrY`^Wm?)1<7oD5d z*%Ru62$Q^EN&xuf0%1%NpZeFJ4B%_svO~mFmV+<*1I_v8_GA=_J+z;K;{ee=!=su- zH9_co2oU|m`vk)QM}oh@m*73B1VydT2 z8Ud(MrKCmg8nVm-33`+aNCsApXYdFRW(b?C>QcLlHri)c6G&+#|opGCn%hz&vy(aeXHa93uc$4<8>Bc32Tph`jrxv?+P*;i`7__Z~Wy260M}! zRgmoh+WCu=kqiW7djnr`H6B|{_qY6Nz*coATGq9-TT98MqTj=$pwsAmI1zZVfmnxc zOEK|VE2Nu<^n-`cP1?h zh?|>|#q>>17pYFiSm z*gF^SU$E5KsPjFQ6+{{vDbtLXTuS=1V^b$B>^>iL!KBNg4BTf);VgrI-qQXZYfF1$k z?@b5igKwCv&fx8B&4iW0U70r6$ZQb@wS)hkr4!nq-% z6C0__83<3x3Gk3kvSAHNrZ(as*??6*V@|M&87X2f+5}c~Ed!)B{Y*gt!!p0%YSOtr z{37nXhv@GD=o{lA25|I-)JI(}X!49-RJ+7<8(q`@q{Z&xs*K%tltzhVsHd(#iNP3l z(H#iRNWyY&-o!#O_u&{BHlC82lW*G^=U9K$J}!VyC97z19_^B zB4(EO9>OppC9}6Zj)MXFJJkL(1^u?`=x$*|b!0WziF47o$oISeNE9R5a;`-P(cab*TuLiL#{PUJ0!D1d-wm1tk#T zuJ2b#2?50xRC}Z@Ej-dB{Z_5qPWi&{f;*{ z-2(C;sM^5h*q%xvxeB8LMG%9s>+p&DuVKLFw{Umm51mG-rd@!J1Mq<6%?4{5_Er~} zb8{Xc@w=#F`S_wVd-%K4)Y63D57^TsbLx&>8);dAZR*I>xy3WZ7ueG8pWC4`L)O9_ zs@C2t+gYCT8(k~#-2^C^UglKli!i|5G8dGR3h7JIQ{ltc-ACm)0G*I3P*;Q-@yvb< zlWbmUXyJB{mUNNcrO5H}$GG3I1?f0Zh6kxj;osJb|AYp0Fw+K~CVi0sllqP;?f^O} ziMdE&kJ-FvBUuHS)L7|wHiT!*f|+Es2q`d zDO%+z((i0R6ocnWrRd<c<8!uRsTd z5G|c+uwu{KN=9Pi*okl>1P11B{8PY;0*4**5Q}@qXpm^LswRq{LD>A%-8L|fx}wLo z?W{7`^nsT+zARq)FLRaR*G>5&7FIJjxVoFuymVGX-zAC>^CRsml=1v%d1_87@qE#% zzQDJ!6Jg5LdDR;Mit748rNjj&u5C%amVGlY>GGz^RfGIO9UfodCi36pAH7d0o+k(& zo;D-SZolhNSpB~|Dmv+0e+e&J7a*1i6b%Bbdk!J>pj z5|%0wf~Ks~hFkFCzAdhIO-pjKFD&e+vY-qqSjnKehJv`H=S8Wtaa*Dy@%_b|8 z1CllC%{st~+g{eQA$8H#eD8c-s|G*O0gG!jIFXSe=aY2iW zT~^is{f2U%MGpP}&=5{c@)M~vmWmn5(X${na?UVJaj-dfhN2dn;1;$tQ$?k-6c$&( z8;p%rUQnMmSi2IqDD7w_wXSMW12EHnM{^T09EdSRsur;54Drp&;@IJLB{kmQb1wu- zbJ*A)W1zb_6?-Ejt3(Ia-^klM`gW<2Uq08_KPdQ(B=3-n9!9AeRGYKESp&DaPtenj zkBe%zu&fA+izHe)gFZ2x-maFz0si93u;TemujiKGs(c=?0~agOl)<61i7R(UcQZP5#V16Bah**c}RxXUIfF`?{mf(E!#81Do% zJ{J3wbSqRNu7Hb;%>^^MI1-bl%TO$KY79H-V{4Lq1Tg5hJhp|#T zy|$L0NQAKK%4VQpuw~0cI#hKs<^3eqau`3<5s8nT%p~FapxhZ4eKywQ^Elg%26ky^ z4$%ida;QM$E=w2blp{Ki*A4E-HZ>quUbr*?_5#5U=t0yuBENpTiIv(kZ4U^bDs_7oUeccE{a0#NrV zh0QbY`i}+*MF?1AST8Lrl!=lPri4e@!4G2sWq_?~5f||FvSQx!y}}>D@QK~)J}n~5 zamQ&5-Sms*mi`+OAjMjfx;J@qBbrGN_fNT0{yQ&^Be~KVIzx)E2J%TN^qg=0IxS1i zk@jk;qORVuGh^yHElT5p&Afe&WXV0?RDZmj&6i?vI;sASEku72f#nkyX`fa75i-8a z*&cMAn47b1Agm2P-J9pb!kM8L6iYrx0!f&S zd&e~j89&$c%WO}8^ZErH7(*x3`Yvvak%SAnI!y6MBh`@&5`MaEhcC5#EWSu5gl5oM z3;+91U0-z%Pgz^V_i>0GBpUeI`**0?NsTlkzHrx^qJw(-Dil{O0Lx#{Z0MxLR)E#V z|AHoZs6|>=tj5nwUZB;jM`=GT&}8*xY_W82S!gqx84&V~8xH%T-Su7sB?xWv!T_s0Nv=-S4eOMQ)+sI~DLxf6`qo^kOpRFMVAi)>P~7FfO(3ZdFQzQi6}3 zL>cA#N4j;n*3mHE0HbSr@%#8g%0BT2qdlWnDQ@l*0ix4>B<>RrE-?1174cUA76yww z3nJtal#!h?-gK;QJqy2S+q!Kh$?w5kgD$*Pxl$Zg`a-hfOkNWk%W8?O?oHbYM!{s2 zE|DF>n`L>cj4icotIUSb@S{>UjdPQ0Sq`m5qTnGavcxvawQ$c?D7MdnJ6CJkf5-w5 zv!e@eW^ke)(<}UVl0-tWYsjNqdC|*cjLVIkOodF4)0!=aSK+7^HFVz$bo@edz87_{ zn&IYSe1t=bJK}A$8nYv${2qsM6k$!_N#h`$O+%W6bC0xlu@Rto3QSn9bdq{%0W+B*GGISLGu~57hG-jEo(FwRj z-Qws3f(v*mSjD&tE@xcTb7$w}nJcjJwuVC)c&U+`&?Fn(Ex7|;pwy}dynrzOR|C}v z5|X_#Mo0cem*|O)$aothy@_w~oAh#hli!q=>zn$fylHQ0PBabdRN8ILtQD5FDzU9RG)sECOS$dH@((V zt9xdC%D0&g&b|B%)!Yzwd_O#ZErua+8oy&13XFMt)DgU}zf50bz;tGkn0iP6k+i9DCDjj+4N8QtE?~oy(SJ2{W4# zn)yxIeaR(L_c?(WKBby#&g)Yi0T~W1ChvVi+24orLBvo-<=J0k3Wt_h{8dWv?~A-B z7}Vd}!iS|sixeuTW4LN6>>^GTF-r7=)sPOx)F$fauV_*;5($=3@ejCv>PvVT6#u!% zWD1-AEktN5skz8xn!G5N07s5 zGfio$vJYnsXY0C)ShT}xs+ZN$QUc6YX;_mjM5AN7AWD=!ncu2;N#UTf_+;gO^1Gqa zwdoOgU=Iut-E%SyT@#S&20S68n`hwS!}9eA5;-KxxvX*g{{RcLfZ|VX`P-p2oeKjW z&=^>ddKorO+Uj&sUev6D@(ij4d zI79!QNjOn=Se+qbgIMJ+*2^4|&3`jxsB{sGoQ788{7kV-NVCUHP%`#ec{F zWL@-DcQ~Ta_5VVgC=aZ`5`_9I)NKF?iTI25>dZx90#L#KOsKe{7XPh&Xd>XwBo$kP zr1*1ye__8R#61YB3KN`K`~h(CXEe8~R*UbJu4AH3aPfEKW=1N5SJ>&IbO5CIU@UTS z-7&OPb>Q;cMUv|W60E6iW_L0%t;pAF9s0nRL*?>C)pQ27R)z(LIE*Hr;#`v7rG(wW z$Psk>T*_Lv9L^{(f^}jZF@$yDPhHgzT(H1B-OebOu{z*$L{;LW4$_sA_K;#&4d8#E zK=^4)4IL_u=AnLFrJgOAxai(P=8*)}9f6MESL`G5PPe-0ftLHCjRB0~7}PNkq4;PB z8XQaLdPWE^gJeTD(;y;52VIi6b-jQtsbIQWGTat24o*Hm;r!_|gNN-AUZ~#9>aW{5 z5)+hO;j2I7DpbZFasrT&)AXnX25MjdPmE{MPtI;Nq0rK1oe1m29-TF5;MtO2b6y4n z4fy&}d{&zA_c&$F8fwQ0cQS-Qy11w;;?;-mvgMHd(@j;&43bW<& zHgA_Uj=9?bOSu>#L`Met4tSri;P8Omk~tRgv=(bJ=wjv)J&nYYdE}QN)$X+SOze))|&J}uz@^ggwv4fP(Uw`N9%u>Y7TMu-RO;EC9BM-S6#Mc zy%-W{4gLq{Xs~eBGzf_Hj&EA-SI4kZVv4|%iP>V+yWp;!0NFoJ_%wegaO3H|K|~+_ z;I|`i%S0{^N>ut{!0rv+<3#L<87IGAet}~C@e7J70?}|R&B~*oi~K67FSu+!GpAnb zE65L$=1c4JPPR+W9lQWt+MV;Q*gZ$Rv3tBuC^3Gr9j;BQcMw$W(@W*FD&Qm2s#Lpo zPfTi9IU;FlZlP2>Yf5A^Os+p9L=H8 zJ`4c7(ccf6>`pM?z^$AToA3ta+7Q`VLnWkBdPaGJS(B@K#{WB=9-t4`LfeWUrCa!~?9&mXQjlB#$>zYAE-C7V-I;33PHjQLPak;a)K8%v6!oFX{~Gcp+K&_Pq!O z`>@+H#;wNeL9^>kS)y6r+>`h@cFu z_$CH!Wb2C&vH~`_EyhLuRR)*eMWw_tQQh)q7vNu{xO6TGkN_=g=mFM&mOx_>x|6g7 zM1__AjQ%e|Trv=RjTwOBMQ1M*N=*)>J*Mgw$K(@8hlM((z#b>|)STkZ<8g^;h!fq< z&H(~y)c^*@OaL8CzEq>Yo|ML*0BBf8qOk>E#vM6+O?j6BtZ@A~2-m~{#wN5S=lhgDF46Dh0w%69J^B1d z)j-r2d~6hHvJ_xbiTFH|_k#E><0z#8${;Bgtj#=~%A4GZo*OXU&0$7y1eNOoM}@uVv(Uo;!dJ2JDK$FxOcZMDRHsiiVh?DJf=f zm9*4j$|`oABjL;EF}TITpaNTrh0Kn?sEi)Mqh;Lk0afM1TUxJ+=LK%QQUS6iZ%cdR z@Nz(3M8*DF)&ntLr%?_H7*taxK>tigN1Sh=(PXzfi{6RCaCZ2mL2E4oZmUhx)~^+i z%?&{-pnQ8x0x0t*RRBCVkWt%7&8oe?i*kWf<=*^EM?K?^LS+uC9`?*u^5D|0o3T~s zJFl0Biv(cso(yMlsu7rP2n-R-zcg4S(R7Vy5(WCA9NjX3M3Y=!zeiffb-21km!kgJH1E%zQh!L>fKZuTp?L^`40QB=@3EL zAa!mq(_%)ArNGKjqO>YN%oo5x+(wS*W&oarT){KP@QT6d=8)tXfH2KmKvk6;SQ3g} z?A{zz(#%Za(G+&k=|IaVBph1+fG5C|>*&-3I?(mFutyA#!$H?PHA{+Pxd4N877K5T zFlnCa$&0Jr!pe_$nN56PF(I1*vr3u$`dV>$m|sxJL&0Pqc5mv0(sU)KoFuR{+(NXe zvPq3Pfs0%5rkbsXzv2U|`bM-S_ZPhhYUX&c((|7Xt9|REQcsjzr(HF z5=$59Iq@S^^QJ5}-iLIxiugEhaZfE)rKDZU(_xX3>mV<6Xe0B;ief7MB?VX{L81~;WoSSp~eNL>$jcvj(w{)sbutxwT1q=Xy4oUS7DM(y+E&TLr4LI67 zRx)3)Jq1@iw>Vl@G_j+zi$ikyH6Fi9I-I7_=ICmD-K_QRo=%~20#Y*hsMMhHrVdx986F$t2#P0uey^gjrfSw zeGH>KQyof+juAJeJDDUF1(PG5I%_PNKccP6bPd+j6wAI8o-a@{G~<)6bYh^=&6pYi z(H;&OJ6gHIEwlCVku>ul5F=c)aJ<66U(bXFKl&GV7kmlP>hnN$VuiIu+Ht)tSVv18 z*M{()>7|GmTY2T*kxFzs%@<4z#cuAhZ7ZJW!AvS-cN(H69@&DFHtR3N0%x73J^z+j zHGu8-_3V4@^z>&27A#KdUV&^l9sF)8`iu?ec{4? z@m<=x#gjJ`gHqic9odVd>q-+4Edv~qP?#s}va5}gPSK-jBD5S_$=1Y^un=3P*umsK zoXL|OTH(m>Wif9wixcGzk1NW~G8csub{E;U@Tz~S{wYR^`Kn*4zmuP5au3hItXzvc z(Jf(M6H5$@$9@9=Co@(5s{hDEtMa@4g<`TK1)2X=d0B8ME!wKK@j@V%Qgg|!DX24C z1awJ`DQlualyX=BGSEDY;G-1&Nz!c^_*}3W8REsE9&t$s05wL-g|ivx{9c66{!42D zXj!({ln7T>pB@GsKMcrzk)=|!7CTYDg&q@k#aDyNPFiaFJwc2zM{kSB;8oR%7)i2= zGxY_HD0LIDlwvc&9GrGi!-Z&rtV~WkNPwUyq*&WU$y{9pIv6|ju7#It}`fB$ZGvwrY|0p59g<&PvU=28&ZE0@9r%LD`);!7f83 z&4e&<1s$0JXUI~h=R62gl(l#|T68oN3r67Lj2bNt%Z(Lf{z6pqSFDaEPNHRez=6-{w%a*#ddAz-g zO0ZDk=qTa0^c7TwN>WE9<65>8mt`uK6z46$C28@bm%)4#_wq;P8T0f``GT8B$e5>GhSzW4B-RD^>^N8f0`i0McQzMQGVh)us-c2RWoIBW;Ei(cUH_qu~Qep3!>!(9H~?M3Wa$V7R4z^+QH$ zD@TAPY@{D7sV%qoZCi#Qn5LI=UL{Q{DAxWs7t5B=iU`=QK5d}2cn%=7hcYYTBUVy^ z24nPzw2dz%<}Je5Ib4b5HjbTn09iyS(~$d>++AI>0%gfDjjXJZ*&6MjVf6wE9Vu0> z){Q!jdzdaFzi>4J7S~1Uw{Z+kjXNvEsS=68iJa*u`ovrWl%b}J(yu9eV6)eX^#lMP z1RKh#xPw9xeRV-)E&)_2FHRekoB7)sS@cg;uzCA@dODRB+h_p>^CZAU#AWP72d!+e z?&{?;yc)FiwlJgF-Y`pVg_iwW1(jk|4edimNY>CP8O3z()zCEY*inyU?0bQug1DXy zt{cg|5|av${8H45-1ZGEQW|@AY^(=I*M`ASX+_#)J$Wt{>4#9aLfHd-fysON|+AKy_hp^G4I4x^%ppwE-J&=@?fS6 zTwUF{3~Zr<8T0`yAaisZgi>VQ{I4=3el4rb!t*mh!iN;U#U78n{;j?t$i;?ewWtx$ zFv+VId=0a{5cP)Bh-Cp657e^6hNlE-bz6A%E_6OXkXzj71#e+i^tDjJa{;B;%zQkE znf!bt+aq+CfDLz=b(#x|rmaGC#2C^nfN%gzs-SU*xEY_6-6%>$1K`(o?uvmLFzall zjW?)j2&mEtW$xSiaw(5vl3OHf3K@q%W9}3J=5wB%$|!5%uBat0H=-z zU`vnoAb3}x#~aq89*A*YQf8;*LWpuk)t0Il?TGd7% zjSX4Ll)@XArx%83i^SVy2#mm803{#;FS?9bt0XXHiw3Ydxptz75v*a(o)=!?JdVU9 zNl|7CfqrVExjp-QqlmSn3zyJhNlQM{O?G##m79L8=HlFa;>{0pFTIVLYWDuj~c_qAe)8iJkZ z3S1@@0Mf$MvHdPduX`0YET|IqE8c{8@5`wZ_u{U~q8}GVP}N0ktJ|tz3)Hv2ICV74 zOo>VJb#?GJTx;21;h*5HhVRVnOzfSI5!KJOiMsnJU^DEZRTrlQnwCWd`~prQWZ@sG zKer|Y>K3`Km-d3jcHa6$m~>2uiZ~+NySgGD6Ub6w-TCBQ6*+;Zw%eSF1qFZtCWRtg|lS zC1_Nr{mQCl3CIEKymT_t!qAP4Y4B;0rKBf#YT2ZsOBXl|=L%+nD{xq4Qm<0`zo04SQ&P1J{e}Qd!V2cu{6u?@IAf$W1`gYw^4&0}Ml| z6-9}FSI1Wwl6~}7USv-~aG0xmtr9VTEU(#HkzIknb}%Jm!bK7zb0228SXZFuAq>Cjh!&5Su7Ba*0fLUo=6nQi5%`|a{_*%__}o9!lF`gOM^qc08$`+7*A*@p9+Oz z?K_onr1dny{P5Mzwp2JY-SKKGFVbUyo>fR@<~lwI)gcXdY|hO;^ydNCQs5WXoI_TL z*@w0*S0f7q+#kf;3WRjc zXT!}ys?87#6pfmtWw*@MAcLhFm@6mT4XZ=Oe$Xi~bsDCu@W4b|iBbQLKdmiKFg zwL}SLx9+|c#>pvo)iDMEfJ@AW;d`UUv7fQAsJiLwthXqTBYygnCs&X_ zCI%MHlXR&-q%OUjY5M4h4#;Ve>=kVtQrkeNy&WB%HiJ-`^=7)_u-<`BWGw2lVW`*G zCILPA`HV~$OwgnSLW2+1ZT_$uE74(WRXaJ*Ipiw>1_m0(4ms4Ac`o+CNEQ|FF5)t* zE}HWsv#rVNfG*dzlb82{1 zH$o{lECXO1)>hD6zs-`Qo`;nEY~u6b0o+~rl)W7-YrfDP2s~g-u05F?HR*gV7_k5T z`adDrn*L>y{*#IRQOndZvoQdAw5(+VRX%eO8j&Hlv_~;X$%wIzd8Si zf5gJ)T{7E*`tEp;TyP2Ru1qt9hBKG}j$t$R)cn12P8_Y+fXM?@=@4jA+lLLyj)cH> zsI@Q_1@UuF9R2#gFYgsKa0s}-_O;uD*A^Rjt>~{qap6=7acpJXbB^1aR=Lgsx{l=7 zaAye~(N%4O89~&P0S-y5X8-2CF1(Ch{{)zOFu;ad0O_*99Y_F|62&7rAWNwut?|=9 zSie>eNlb2ek-^f@&G86NgYPla$m z;KWs9_WGeqFBnKKK1@;U%RBA8$n60ZTqEBSK$W2AErTh5;-}rec$$AU7Xee2rBB#M z{mJ|Q&tH`d_9ANc%_)wmH>Hz253E>I>lcoXH?)`X@2?FcND(ALW4agNJ}gMFw}p#} zb2-7Y*1C>ebe*Ih(>hqJ2j@tv{y zbS>0Dn4rNJM7e11$`I#EmmXP?;E5NlOBvNmr!#qgqSg?3@Sa< zGW?)Ne%*o1NlddJdzTQfPu=0p+PniK)r#L6>sndm5%E$k3YgVAi(-Ep-LX3*R0l^^ z1zIi&m~o>IHirr&v5$h+3#LkoxEG|G0bNDbG!h1+YYFO=?{>i^@MK~M;O@vE_*KU> z?kNDx^gXaf@Ft5yKM8pLB7pgCazJ5ux?rh*_ko2p<(%UZJz4)?WKE1Gw9uj{$UOsH zj=D3vQga|X>i80)U#S1mEBZs0u+LVh@ggV(q4=!Wo|sfe2%sp}MDF3ZzQ8F{ifR>p zYcS`(+t)~PKa4tvfB;V}U%G7p;Mji22h*>mWxni`f0*pPMJ)C60K}~mMD|B%8mo;R zP{{Z|H6rSRnyKJ>gfxB=r{L2#iT<7giw`9I%)jIC9k3%2|5UQ_?||l31|Ssva$6CA zz?1Po#i#I#0@Qzldf}&)WPVuPKL9IAKIjM;#;u!3kto3XcvkI#vM!7@)y61S?KQP6 zl1?K5e2ETADqer(MX_-uqF+;aOSF%H6%AT4lW@_VJ_Y^}yEdT~@jpVQx~&>lkGAYZ zqc1?n#cXl(nKI-r8hs`&`h0*fVxaPZZW+h_^?@5jHp!|&pDpP+_18fY zCz#|zrF0{d8)D)_r8pjeh*33uM;1uDg1)P z3AwaFM+xzLoOuK?XLjfi%|%2I3Kn?)$@&oy-^W=F_dmcsb^4cB0PNJYF~}vly9vN5 zbtm?j{s5s(;;3S6iH~?AfQD`40ZpwTO%N20VF(Xknn+FtOw-8qEZ55CB1affsR{QO z_>yao-7doeJ{Yz-T32B;2fO8p8q&Q&j{{3+e~9}M@@_gVfQ!^+7=S_u-=ikTpB;i8 ziMyzj-%i2@`#NG62lX4!#ihpmc5UH=Ko>>tDVkkRFD(M?v1JYM5uOjYlPy!go|58( zIN?bW1JDG@IbxA`ijOP*(pw;0jthqJvvdi;z)$f1R;F-of*wYCo{Mzhtha>Fgft%! z|D-QO^RizMayW0AG~_SIh1nVr6Vz^Nj#F}GwlFgEIEdTCom@URCmNFAg9u81Jqod| zdFotqP$Wf5qx@fxsq@Ao0}?}PkPf7!uV|Yhz*2cXGcFQ_vXLMhq?}*~`jT7^FwEfo zK_KMRHW6ovQV&Jk#-)$jB0?X~I4e#xMH^DgM=HxZ!pQgpQ5;;K-7=%^vcTnh7hc@q zd!o0P>Y%6~D^4vRxdVW|h#m5I@odBv*gM+`e;}(u(PR2kocGjFU(- zifSwSH@TqST!9_h$zs$=wsUWE;LyeJh>6UR2L)`VrkBA>5-c+^Ybv~PHGma_23HZz zE^?`@yHc6`de}jH^jKsOc2c*RNgH~JUIGNvhd4ZM)`_sL0je0p=-S9S<#Y(-Ox^w%g%YU)N z_obWxNeWD21DoSM;m8$O!=t_z{NWYuOHLlmSlD(i!vDaEMZ4mS`!>w8wYH**=qO;- zAaH(bRUeOl8wc!2rQR1@EZB+;GC3}GYa$I*_B=GaR{wscEOgW*un9K|??n#+X@9D^RIRV{vi zoyOM@;FXeKklPDo0nr;|@rP7-J7~>-lB4Zni{Pd73aPlH9qw!iVp=!iIrjP7G(Yc@@5#HhJB$=5HBB+F<{ag+WXc5mN z;+WIo?aaw|he?OwI$>ucla+EoqOoTl;N@!?^yNt79Stg!CN2jjg&qwqG9@a>{TADH zHFvx&Fvudg9fX-eIcfqc=)N%Zt^c=OJdR_m5Wa4 z6g}y@o@Pz^$Wpts{+jle!la-a(R)q1I*ouFGgX45q$rd_rdG{6xcE_rE7f}dV=BOu zFZv>O6qx*r?7%F1Xmv-ufgQv76LA%Tys%}ojt{wwC!nBYUB_DAyu;_^K<4H7+i3Oy z4Q-D`R)e4vux@z##`UP+1+gbu`g74-1Oq)R-5~>=``pA-WbO=$a{CbF!fDhR$9+_u z(y@L`$Y(3YAUG?CGm12Exi17I$Tkx|Kqt;&@IhS5%9=RIQEp-l@Oy?_3NX3j8wca5 zZ;7Z_FOWp&C~*2p6H$+INN z9%gNvqk}vrz>Izxg}xfER3=)BC;oz2vd!2E2HvEl3gc;~3FEK>+V3m+_3Eebk~>PV zL+1Ti(rN$q*GM?Rug1$%_?^O2De~q%QCIo{B9itT>uS6O+L9%~6s8bXsF*T&FnA1i zJiSQb1Die;jJdPjR8-nft#1>xrf50Qm`8`!Gt|&n90t@Qxq-@m9vOS#GK{GPP+=UAFOY}Sw`Jy zh(tn^>=^FSO<5rI&;NuJuh^0I*3`C26_>z&iQJ6{smkqZfr5h$gVLBGw5~98ly_1Ky8F zE7DiqAVyx2yfG^pHRIJ}o9+O;2za+JaSPVhS7{eCe2zvd1YD5`LMCqk$PYaL58GQ` zX?2ob$7JEF6nGcPg=HbQAoyJ#tbr14{CqWi5%4&H{px9`V|G!b;Yp>{FWf)|fHQ9L zqoInKCg~>)v_D}JM_wwC9plJeHI)w!y9)dn3_)}q4Ql;e_HY48$ua?5>>iW)+xrS6 zHRsuL69cCOCIUt((?I+PBSEx{Jvi24?AcSWxq>VyvBNnV~ zaRZU5d!oHy6{JVl;AHZU7;e2|%D-`3;O4vd1pkg*nx2J>RY8RdthVmEBTD~P5yYlv zwgKV1t2SLZe!b2zA)NrnP^j>rD5my&S}^v0QNk*TC2x~Y*2;zz`jU z1#WwQ9zG}L-MZ>a<;NKBRiu}8)Iu?LjDA5Gf1YO^ULQ6N%O(PaG z0Cm|Cmc7H7KtsQmSZxn#Dzt(OvE`bej8TSxoV!@Tna4ODfV0~tFGdxRyR;z#u5UM8 zRRrT_w*kNL#u_s)ctAr(OLGCTGi_vFH0EsgYDai54?wW0y;G@0YuIzi&ME`5>owUp zv)-#+|5(*q_iGsiNhplOIEcuZytDYIgEH0tp||Cp`H-h8mtR^cFTtUu?*eY2!MV0% z2%Yf5{!K;WB5(+A-^oI~t>80+HJU?~V?vaFmlFjx#6_vzi!__z29r*BC)w>IjSz4T zS|<%q9~8U;CC7aExO8h0S0;+loB5WBT9g!fINcyi2(^I_uuW;i4r5X4fyypJUrG7M zW+HBBumS=sh)Kq*IR1cx;mG7r?)qURDtmoV@&!cI^*fV(mmWI$M~ci@-V zcP0!f(?)C~e5L5CBKEs@K!qhaa7KY{p1xWJ)-w;|2&0nyA(0*tGIwAFRGS21h>Ufnlv-AJ zBYYoJlRAq%3AgAU4P~cZxNewvxD%}*0)EAQ6iC6#AW{qKNsUQW2(_Kz3vw21@z%g4 zh0^kNV*IrtqJ8|w`jJ%MP!^ZaqFRB>vQ?E<=c53BY$V6ds}PP|Tg8l(#>EfZ5F&2z z2tq@WGlX&bbP=Q>ZpAZ*G4JZv!W>?CuEIP`TUJg$NaBWw=Ziow?ez)@GR8&*EKK$; zObCdc8K#fc-d>BAB8{*uM%?%GCmrO+ww`VT6lIw~GLdI(=FVxM@1N{q=2(7CjPN+xvqO%1b@4f*|0GK9rMA&QJG?t zbU`RcTExf~#m+{-jJ#FG2%U<8>v6m&KAA0!H}14#134K7yt^X zkrk0%Cf=>8PJFaTyNsqDVX2;NZzsLu?)kjA(SDXf$eh6jl{Va&D`5PCPY#Nkm zN5=O`$`~7NB{?;jz@B#7iyc;BNd0UZ7UQ<6(pC!9D9RY2z*j>|6JHc$@2wyoVbR=> z!Pp`TFt035g=#k#nZ!pWXmI9JO`DjiN@|SMk^r#A-)4N7vlmRr4@hX1ad~}Sgd*BEQS*~EA~vApmpuLG zqT!{T5`o>A`fW59#GNh#_W_hvL={ks+6KmN1ny3%f7(ZHv14W952AF7lAAQ^p%Tc5M)FYQo_p}Bzp@`}U@n`A+)axput9k7u!M|gH3nbK zHmnh_?7_m(uOXp`qI6gSebi2(St~NP^SuKG7+(gMm9*mt?7^$3vxf~{-Jh;|E7(a7 zNk9`~v>A`Is2syEP*S9JE0bjy0)vCFu|a-4!1MlARa%NPc`mUuLv6UH%RFRihB_kj zcp?GO4BTv@B><1$;@*^HlnfPFXagf<@DX4|pxdm_#aLUynGWH{Nli@Z{x@^ zH^diK8IqZ*7QeZEuh`tF{hf1YA29YTxl|wsP_;)6!ILrsKkSqbCFR3k6e#im)gH{< z5`p2QD7^!vooBM3iJmkfAxqE*a6SP?r_D?^sUidiU@}P{h6rcxPixnf#y?adoDZFAoLD z@Aqa3nI6G{IxlqS)1wSSSbW1))Hy0SWI7g+8Wo}v(xzeGL=o1@;L_k;q<}>=U8BE(NO4)&k3o&SlPd;iQ z{oMpQF^-xgmG);5&axhn^e}9=gO~h^Ui^y%$nx0xp63-VK znBJEFOs@Qam*M@Ubl)WdcOoGT^rEE3Av@W*KPA8kAS`Qv@~|x-ts!!PRji^gc9bh^ zF^MKfb+My}S*HwzicK)eKvLmqk^&_u9UPr(UdMn2JNCWh-Ou`oqTFx71t8rQLoFMyaR237^h zq`p?w+8XaI-)#s(Cty$4Az6SLf6JuB5b=n$9(z-eWL*mR`VRo%@7R%thu&aUdxoMw zsi|0835iq0vfQ4GklijNO6YH2u0ShbLIw?)0xL+RWO%N?-l|G|#h)DLF6t2WSO(ff zZh%3kO*$EpRH4yn^9@x4Y7>_UNNOkBkFYQ&zb>|UnfAzWiUKYs55|rcWX*QnWI*C? z%H$*ebP=Wn!!Og+0~4@-ij9Am?GgD@asZeSMIt~aKUj(SuJa)#cj#;A^KxlMXh1@l z^Z;f>u@#9KVR)c5y)U*(>6!xfuF*^@2EaY3L$v+MAyVb)hNUE7l$)es6}IOD%tHwL zb`i4DGa}h%xz;W7W_K@ScRmJVsl+In4iz`$3+j&>bP;4u2&}0GRQDn+By^aZESEk% zx(xNE3*W~=#8c=M>)Kd^Wg#P|Uv0Uvi|h(K%8mCHPkJWjP;XIwFFHnjt3q5IZig#j zwJA}SL>$h9R9?Z~m#BFkymfZ_w7%%EvcBl+&O0Z2po6!1dE|kNX&M0O9%|A>hzH)9 zZU;cfkh>M;5s0TnjKC9#gDjR5ka$fY9|xti7kJSOw2(GEHZCfK%jbH)x2&8ay$3co z3QP%{6xOvi0tSQur;`f+5$pw8X)v1@!gekGeCkbZ;usE~g`izbhm00dbD`HWRQms2 zzVvZdt^IkZHubc05Uwvu;dGdYpi&|ElBt!T_(YOvZu%Y@_6opCpqTlo6N$aJ)bwb` zrd1NT?id9i;pij_N*3=0UdiYS0L=&lPKfAz&bW(rH!Y>JO!xtWFelOK&KlB5B$*ve zA14YfE&eR{!>T{qyyO|`=P~YvI5Hz7lUwT7Th{xta$HN^Jf_7am_#)LXWuagu3 z{YAx$2V|#1$iZWFYc}TdEtqkZ*;KHsrRZSqX)e-Psg-F}J}7ZkM9~ScFA(H8FhTSf z5nBYmHE{eUQ${Sp(=thdghv58vXI=|QoAs=ypp1PCH%Rl@8~ahP@&whzNKFk>zA}3 zxSjw(f;-}-F9=v+uasL2IwV>ya-!A|DrR(q!5eU!vBN^C5zlU2IJkhj$o%)YjxI3< z;st?ENB+3#6lq0KG~pHqR>mv~JQ<>Z*n!?<{Q||EPYVSRHDdriTLi8~_a%9tnf{2~ zn-cJoeRceiSG73-r}#aqzgJd-ykPu!#b8t#r1JEq&o1Ol(GQwdx(BMjuy80;5;ejY zIKtqH2r00m%E)qU0HSmu+6tJ?2Y3-rS+8Z}Te2+pyD-0n9)3^=o_)F?B;nXAF<)Zh zeOWVPrHI;XbD@|)y;k5)fd=JKDZoy7JLII|B@!0)0EV6ew+4FnnDQrc8$}j>H23EL z{}wk@CavMDt2G%gz~f)93`P5yw2auHTQ_McGsPe+pq-x{%1KRb{p(Njg3s&hxpW?4B zF`_?#pGWjUT#`q00|z^}2oyuu?A)TPF?FZ_4Pr$*NgEF^TGo33B_fkm@AGe~HUenC zI!5H0R~g>`HX~wTMg2?DQ&&Etvalk(4uwMnL!sARJeyt)#OPcr7fu0i=F>VP!6YHu zN4jXj46&*5>1+d8Fby!s>oig2*_bDeYqPy0UtD=Q=3^>OK^IN|YV-kT71k72#oOJG zf|FOJyhwu}N*(4>R44dGVnzT;Yhu7gk#R&VC$%h30R)<~tOfjFo=?R7q6O^bnHEgh zy^-M|*2I95{zVK}BK{EnNID41lGlsuY?MaI0c=a^HmJLhGpR3VE(7BxkNWrolw#*g z=Og9NkF5p7WKP*@c#r1dvI@8YGXGwKT`Tfm<8BedH_fvAmnlfIq8)q} z?Jp3ZZuVy~t5Cy}24a}Zin@4jr8=;}6dfV{SSuRf3~|9?Bx?kgj8z4&Ot}CQa;*2l z%qy9JsT(`yXwjaz(h{l{m0r3aLY;z%x>@e%r4v)O^{%GcfTfILJ7s=6!#^H`U<7u9 zX^Gt`5x*kYTzdT(tFr>jsS$}m9hlX{&kanhc3{c2s4IMy^0Vt)W#0JUInvjG5M zCYJ#dm(wumO>$#j%BE`t1@#9sPtlG=hnw(|qe)O~K~lqUe9Ocy1t-d3P$Yk4i)-Rb zoA%bJH(F#*7vTG}7Q1zTvm&Tex;lImdTI0Si-H8AF)E<{GVwiM3#!(gKx7OCef;%= zh1k69glsj>bZE%uOYX&n{PG0?h-UBeuC3v^ADcs1r35gW#;CLN>0U(h7V!F$1?3bV z_7uN z$7umIRs>DH7zQJ~p30zQeHCiKVG9=9=vsl<6x~yC^qx_~tu49DvB;hcj_)32#fR4+ z>7q$fndTUaPPyluze7TRE)mrIFPEpcJ_P%V+?P1I4FnE8ENya;_}cd~sq2K|armQ~ z`zz*v3Xgqdwa~n3>~__9_sM)7jR&OOX6|?_a>96R7^P^{Hiyje1eChl7CcQ|g03`! zqoKrDvZtnboK$>z!s7=)LzEkFqQe;B{z`ofJlJqQY5#jsr;#1~FGi%xxiNyMD|`6M zdh(h1jsOa2#pO6~YdPaeRl>s_-}_j=e6f2CEGqi2PM(} z8PRCKbV3W7>`ul^Z^)RtBH9iR>?h%z%&KPw{q&2FJgaSp2t92sTNI0d& z35E;sPdxB>#bC7O#0v=iyM)Qa#Ze*H_DN%43PpE76%LYcPv}X_|9HW<_}5fn;x%x< z!j*#sQ73VGiLY~h0hjq~%QX>dKXo%NeVPx(=C#PuS(+vge5Kc;(VYvw+MxqPwKz%tPaNszl;|sqfsOMb;xiwwX(sjg$z_+EdbVunyn}FjS`tjb^;lRE2%qWNG+~E2_ z_IpvUp_Y2O@PY$bz&(|v;^rAd>o>3btqWN51ji(yYyN=V6hg5~Wh@SmU&RrkcV`V7 z;{)4O$6GC<2+>;`I%jZxNZ*v$6Za?fAoO4auM^;1oVlHx02t2xzDZ6&+r}S@9cigfK^?{cGP=a(T)bqv&cWy=&5^dl+L#b`)BW z$Xd+QxD?o(kNr$wheNDL7Ek{Mx0|WZ@9b{mwk-iUb~fh zp$q4s+M;d%X6R}~df&)qkLr$4zFLk353!4V;^JWR$Yy&mc9is19%I;|X8{UuT^yh% z{!@WVGhbg5Xi`ZF;9v>>pB6C(00E#v7e8>eCM4Od-kI?P_&5&>wz*N6wWu-}jg75H z7#cDtE$+IU)7Bj@-3OH}$W+J>4Z$_aE?lz^T=Gmo{&Y^F(*7>!$O&$n@_|uDPO3bv z>8ZT9wm={RjZ(yyjA}!I5lPf4Da|>Z06<2awhc9e4-p*aT613!byFzd1%cE6Oqm&D8)~iY!j%GB&$k~HJnAoZ9lNX zRaoWXx9O$a-ekue&eETJwq&v(dDE-4LG(C8h8U)VHcnJPNcJkXxxOcy6OsZVz?h>u zdAPgig{e9&4iIe?r`Y3SZ>pV|!I;zf_(VfsBZhz>L#Li@J;vOngHZs6c)el|Oj|~c znPZa+*1bfMF}(&UaHKO9-^GZUSw!4ssv3er6}LwQ(3UDv)x`oFL!Q;bq+&&g(hUtM zC0a-IQZ@r!am*Vlb{T$>6o)Y^i&;|s7645fTTFi`?NEadXRug=#Bz?wovGbay03VJ zygO`_npx7Fx&hgajJ-iJZ@GB=aHQ3$_YWc@Z2BIEuav#&0g~Op;e7y3Nq;S}{8t|% znJsn110S7h_|Ls^#yK)vF{$%hb%q&pj5T{`L51L$3gur+8LgdHr8D!^fE$j_+;QJ8bgYv#oW?%P$#icty7 zXwX^F-_8ezC;G#N+UhKNfe(c4`^SPBG6bP20+5ubAnrpM@|38fRb-iuUMF~5S2iPy z>e$cIUYFEx<{Z0Iisc399oDMU3ab#d_!$I6SwZRA%`TblubDjx z_0K1P+3t~hIpg`3g+#=~l~o0#hUQ?X7WD&<l%L;3VS9JwL})yvbURFX9dh0SQj6Sc8Hju5mre&C zk$Hm-hl86fQ7KWJk`ods6iLk{4k_uI;G|9H(Yex4Wbez~@-s%E(?zdy6799gs*5U! ztd|z<)p)I`2yt-}yza5Xa7>8;+D?_n+eRiZNTMFdNi*p%u9GO?7 zre26G|z}c}ZmY94Ph|xlnILN4e5sqe{G3)SqfP+-w?C+#O_ej@INSTR=E1bu+j< zo>dD3c;6=zk{*DY{Y6ZWu%^>K_Ae?(YMG2~$P4bJ5Xuy`S}ZU+N@s0>tYMMkc=oin zyNC}*#l*8^6@Cu)muRF4ZGjn#k$r)osLTU8i;2ymAe~&%;G*aU0jwV93f5pRwB9nj z%{)+GJqREWZ3jMyWRU)e);o-Xk09WLkaw;KfkNa` z9RQLQaC}zG7b;^Bw;53$wsUMAUUfq{L2Fa++W?FAj^ds|ekLgQO1pJ8ucr5o;@=VI zlvTNR6VKLh_0v+xTNU!n?~_k3H5ZG?nU;0+x9S09Hw?j&d{NYrHVhi#n$bX4!ejnd z91EA|3b<6$TLI(s6BJJ3G+HFuQO7*80$pyq6jn9gVzel?4ElpSgoQB4HAtt|bT_rl z3L<2TV3<{Kvr~6CxI4&+mQ@5Z;!iZ?d-V%yCuCGfU{y63()VDK3(QiOQUq1U+`>gZ zkQi&GgCoM9IZYgK-S*3Vy=Igs0i5X&BRpu<;>SFsOVcUN&tpD@lg2LfcPfRRQVg+dP z#GEeh235&df}m`-VT=zcT$)wNGU6~<10GKyvH&LxAi#P9H>SYkb&hO6Ujq|-!3{BB zBLe`-NI-~gArNF52;4t-4w(JJpb|1%IZePmbgmGXd;o6H!l2I~Sm5TPBWb=Pi0Tbf z#s}DyoU28M5$yIrTM>moM@c>u%|ip{;98`}GzvICWrX+xv~^ITGm^QHM&phR1TJKE zaHFeWn-Aev4q)Cm`6&W-g9Ni+WOxTNI*dos85-;$MF#>Gtp}b5s1g^0KmIVqhY0}354r`{a>m!J0+`K5d%zxwQ8&6Xh6OzTJexS#T~ zfALrKYyUv~h5M8I;h*haeHeetK_ztjLo}c_@{1d)_U-%V%tzZAg z0{b=lB!1+N`>PM*&;N2h?0=x~!uEZCzz_eifA#tOg0Jvv{f;##+)VvP{+QEHvyfl( zm46Li$9IO~!v7biq2`1y;OG3JulzK$2UJF_i>2wefg_r{0LZFYPGxUvhaAde!(Ek{o1~kjcb$-GW%@)nmP45v zX(KkBoIkYr2}-o!(@T~MRcMRdrB=YoKDWRrl!CvM5MG}0@Rm!9)b1=O)j*O$evXPb zj`6YN8>CGt)Y|E!sU}rWuC`*rgBLSA33fFaagt!5E{_MDAPp7b@p@;-EL6pj*qptt z2z5NAYRZ#d;NQn|FSWPw-7tW2D69GxWc|`gauVfRZFPC*;Id_V(Va#5*#No5k z7|e;Ce(fMi#4Cgr45e`4sVAmJvL81O9NNfxiB%yz$(|({o>=V#N=s7#6B*ion86Xy z$+Bgv5ql2O>ALUx) z=9bIUInT+-&{>i;BS<}m64x3K(ZTD(f!SC_U6N)Tl{lbZ@$h0nlAi+mbrOA^)VyZ) zsglJ6(N;}Tr+%HaZso+?NwSWrEU$N}m#U4O0M!OCORG`g&s_#Rsbn)&&WTK_GgmCg zMCQXnkKJ~nk?c@PQk{7DBqpp=M1gStxEf8(fh$o>Lkt$mQKA%-dsH?;?>t_+&?{ht z*NKcmZ1{8(NmD3T5iF$qaBbt5DEEg6vsS6na#`Y4u8gh@AAc?sVn`|XO63kIW3G~2 zLSdW);e^hOT6zc>_=dv)fNVE%aIhPUfDniVU`89FvjmV5aUdE{eGiZTAh?U&#(e#? z)%h|?&GOR$8(rR{s_3{%kfl-|#7yneC2Jp$%dG~!t25>_xal>(Y(h8_S ziu2)S!9boq1tMxVR-_QY#(<}vdzFrA4U&B2t%v36n7Vq%fJ{Dj#%$n(gao#Aonlv4 zS&Ky0f+gm0H9Q(ka^RXPzEb;HAzNfi~%6SM`eCBu^Dn73kYH{U!FV&URX zS*y~VDJ0s}>SGI?k57KF24_BEsS?JcP#KO14*LGO*)mmD7OyE#n5}qHgt-WT8Dxs&^cB(4w0p9ZWz;dJ86XwcMy`9^Cq3N6QGdu zf+=sz^k9Qrkm}qi#|S7#nu5d;cF%4aLbD2s)Q1516euVBKWWu#V^r7ayHsZdO#eh8pgFp zsSLJK<|`a({Y0r32EAsoG|?thZHhk+!7#uX#wc2s*l5*)HIP){9j=8PGlp1#nCmI! zlP_f^)7=;Em}}Ou(M|&FtU&}9LF(e9(0A3#uS60E#OP2oxdoWusl3jU+t^6qYf|bj2e8-s}or`uM2B zlpZZR26~aHFu4`y!$gqQoSis8@2>9H3o@~BUD$c347?;p8;)Yx|Glq$yh+b3@1&!dJ+iGkjh-9L|E#AHR0z{ z>$8ow-5#1?*QK7f zyXf+bX4O2^DD=_-d=Z3Q*tzPWTrEf!9bY0GeAI>73c{_Ed9gqba4l2k88nARl#frG zA}`L+#L5I=C{x<}xK&D|MuxhuL}uZ(pvMSu(aV)T+DmA#rJo==R$Ad!I66-dO9szx zjM-nER8IpyNPi4!xQ&6;r>;AsFg$7868SOjc1GFl!T)n-6dFE$q9L3HkHjRhZ6z0j}5GTV|#P_$yLEB{pe~zPTBjII(;45Nu zpoa9UZl^K2wda}B4!Tk25#9Z*fbnxV0$;Ppd|i7keBng(Q^Z7udBO!;rpt%wX@&zpc*xShjT)A zn7j=vlbib`KkajMTbujwC9ktCVDKs2a%gyemyPr;doKNTNbBq0XEI(d-lN|W-m~9J z3|dnmX`UOtmldw;@(rEuCi8Xdd%^qm9TYcB+8Y1)`mX)`u=nMA!F$HL1F&U52n4ZQ zMgeN?G`7yypaR_|7bgMhdux|$(87~@!O5)xa90l4)%jqYxE351kRSoOgA!EXZb0L@ zW1wO~PdQd3ZWN3xF-;1lU?2tshv)3{G@~5~+qO>u6jOn@jhvR~U^YZP3zkB}q#0s!f)v?KCV_2;syO~3 zz-lrGrON~O(nBcFv@M#(O<6)P9%f~gRf4D-3$$ixmRC`;-FLw9$eY)iYx5;_YrVVp zSfMWyTJQ61e`$AZ$+HXjH&qBe*qaDphy=n=J90!(?&u~XyS1^1!ERb@hS|0Zs_s&C zh{1~PB7NKXXF(ArwD+c8>Ew|M!>xAK+qW|Ng+g8yJUinvZd&q2dNyBU& z3sT_Sj|fUJF&G3}Dq4Lj>jqa1#z`A1%RcsjmshRiD+G*73>3>D75Sx(eZN+TL-% znPS~4<{@FixkpfgB6T5s$%XR}7z{>Y2M`;AcTqPKi2ZTv^0YO90i3I0(u7<@Xq1i; zVYSS-F1-cR?Z9y8R@UGFUgPJoyM0mT z$5)@INwMtG`j{)+cUf`T{uDkO@QX#ALjWJP1HmB98Q49iH5VFRduzIT(fM`njTayc zItHsnTp|V+Zq2VNwOr^Mb?t1HS`8wAbGJS+-*0%2PfXr-i}R=vrS;YA6Lj=&`Tzpn zoYCdwm{1PzV&7BhdJxL@tj@Vmk!{*Rmvo=V_uK0(XYIXM_&-yi{fO6bRNsR7JF1sBaOZ=QYK5X*SY1QWZ=KH12yEC>o*)3mfTf404L=EbEn@rd{i|I1~ zJ$mqehdn4zj2HzRq4q-zme#r>WQ|+E%EgLNA+8hrotDInLJ7c+cnI!HbD!Plgv`1T ziHv?`Bz)+7ttUbtkB@Elz+)OmKBHj*b9oZQ8SYTNQ7mlJneXYnvAq|1BFhsHgGA@@ zv?O$wQTC|_I-Fe`+Yi-~$fFE9HHSvD*_)-BK;pR7V92k#g&05pPHfTCh|l;tp6CpB zw4C#?eH`7EOE*X7S=K-1G73-Yj}3)9^~mSYobY`}D@Gtqak1>4j>b)<38$Th_-?a&cw}L7t`FQ==Mg&#UI;Y`EIXg` z=*qTRf&UCUa0C65+s!&Z_yXitcMgV~uWSPs`q}3!>cMTbT@I()x&1@ZtERA_W0&0h z%(2X699?2Rm)$PSyp~!0Z|BjA*Da3o%*uaRX!m+Hc04MFBo)4x^~;rw<5Mw~JreEc zr+Chcbr1WalXz1tF1`gLzg-J3F01oz1f-@$wb(p>yi%W>KJC2=E4Z2U$STcEmz&nz z9jo1RObvHS@qHq~4|!Wg*V5tOn~IWz&iK|jPuhU<8brs+vMLdTZ#m?!pN{*`y5U4m zAA?7>^S3CA_Td2XI!g^glH61>IclR3@)jh{oHx>rPmnwd-_lJ*T}phnMa{!s>tq!R za=TbrFH4+zT97vVz*X)ovuby!NXg!YH0CGx80@t+0IWuZc2^=QXf8IO}4u^0}ZQkdRVT^Ax z!+unOqJ^ls#cahN><%o-InsbAfFTgi5`A6JKD`>MMi!D7xu=$-O>#7ZKM(s6p={0> zT6{;B(D-lDU=UGtCP?GxmW}E1d3$t;KugzXGFDupVQXOgB|3vxd&IkW+`V`&a2da9 zxq&G;_%V2TtzdSC^Oe;q18-Aw%f$-}`CHPyO~Wlix-=e;JVEz1k^O@AbJ+uv$n18p zedK2FVyu4am+x^scoq|bU^KC_Vf{GJp-!*UFn4YnEU#1CUQgXGK*5eHgqK8*@wuFN!PjA8~H4io}$Ai??Dn}m~@fa%C_`vgEx z;{=0nT7z^($(e~WeISGiDcE!crM*emot>k1$ymS&;Uu#}n9UJ z;o&o9A#ssqqoc?sQ4yRT#69^YltMnH4)htEVL%(MmXGl#MOtp(nM>MNUMW(zGpl(7 z8kk$#?be6`5#+jcv%asiJ*NN}1nsPz5;QExxO0*sUBHI0AaZuhDoNr{V}zOE9PL*Kbsh~Oa-1j&9j^In zmFS@=Ex0sN*$|Qt8LE8zvbW;1Wpd3J?${>t;>U9DzIzrN+@)GnJZ6i`1Ho=;_CB>oUb{y%nAJD~ zVrQoYH}^eKuwRf-w577aTF8G8Bgoa30z1cqq(c1w1=8^k@&{5S`l9kVfe#=&gY6ym$LJM5BJM~Z#n(0M^4ZN6+- zvk6XWtZ;`%+R_e=j3kMh01$)CLX^t6S%r8RPrK*lVBsB{paZhgG-GUeU5$J$ zALohXyAV`;*THx~>gy7|qo>NvElk>{KzsIva-MXBB_n}ZiZN<=m`w#Fwr$QkFq{FS z0`zcEuj<%Lj_R|Q)-BR1+HBN*byrKKdSlG1?hIB5lv3ppQfcce0Ohq>iQsZ1kZv60 z&fAyDE@$OeRQo{1wffm-j}z4mXP*kQ_PP)^z*UoIGv9XSzx`7PJ5#=Q`_u1Xu-nbv z=5LF)u-zRoyE~R2_s{sVU--R$j_09S*xs_<-Lcu-QN6okyKCvm2r09FE`-DAsd>IV zhIjACO<;(@x73KUun(JYQ#@~*gH@c&*YjT}*NpP_X~NpJq}oyx+PBF^0y!ozSF{f? zPT4Po61Z_xGj77IxGfGc;Fi%OJe0I;1b{bf7wtQ4%8-oalrrj6`6xZDc_9Zq%c4(j zAWS_}#VCJewHGK+j;2(xuTyrFmR~4YsPtjHH&@QC<=8|DMcd~*RN6mP=x_bWE-EZs zt;rZu%~wl~w&8P`$k->7#KvH<7W=2-$h_W|I}Na8kY%&D1G-Ef?YkQ~2hM$qv#!TP z!S!-m|ClK}9|Mad7^M}-BDWV)MU9t-#*x)g#eug54PyR`{}l$eF+vbW?m zh7&=(cUJ4Oe`?d%ExL~dJOXi<@a&XQUv$Ow|*ozw)&wLnS6Df{)`LEh!}1Ag?? zKUx`(gEy&SA1%Y7Nlv?;sjU$}qAgxlm#iGw4ox9)_VFL}7Mesuy91K&*`wb6$(kp< zbS@Yhq9n7|`@`YAy83dDu4rur*I$Tg>4iHc+JoQ7a+Oc1!&3?9oi}PBe}B^s7I_mZ zQ8q^hx&W>2d6X5sfhtm9J;+*?Sd5t&&kkX_&zS!cwy)ajbMvOZY1jD%&}lqPw6NVN4Pp2BY5;=J59B8hc4P_j|1 zH$fd=mL}Ttg{;D!Wxc&Iph9HPMlJgiCy207DSBElri`0?C6bt_zLvj6(dCD!+b{}O zt$s^1i5la~bRYrI1ZRk98_31UHRS$t%k@OvrIi^c&mEsis+RSZ5&nCROs09 zm0R=tBZYvomq!6amRLPTGZ$C%!uo4xs_5mpP;87SOExygW0dJ!0cL`14k80AIr9*>=wQP!lNas+oE2SmS8d$v_43&5z zJPX;tB#h841n$B2;|LR4BRX@Cb8h1;fNa2TPK_Plk^~CHExStK5`o2T*$i0BO<{Vr$zPVAm`(@vk0ebF#=l1 zaEK8)Y%GM8DIh{2p`kPaBP@pZ2(vT8t$;v?CS{tT;TDsqCx<2KaexXs9DxFQ940y_ zqA37y2Lm=>m>Cor5`r*wGG@pKKQj~n&~;;=0>bPIIl@fQ0?aP07y;YCC37^5g$1Fc z5zcN18gBv_1l2`_6&R8SD=O3wI0$lN$1w#%%EA)J3L?y(3<*OS2;>~hD2txSnX=*p zCb2Jj6oY_U!jT=3xN;=8`3x(*BUjBdN)K_4ThOz1W*|{h*$** z3k_*>DYAhPN1hgUGjO+bWa+fvHm*L;5VRlHVMLXbKcM zfKcVQP^f^g90Y)_Oa~;CpcdeOCge6Vog5VqDRjvh0%A%eX%R?6D(G?#jlO|Bq{YB2 zkP$>#v^roX9IKMxL)MRV?sp1 z0ZRa29KKgNgaRA9%JDJqD#gbDMU&j4k(MHQ)Eyc4@P|Iw79S({cSi|J1o7lNQ6<2Q zsBD0?VwI?)Ec%hhLRCFR!5ASR>!U^1adAds6i#@=l~OKo*(7ahGrS`}Q zdVmz9E+dM)g^bzg5qC_!6%kMYu!k6{z!VEbTErYps>hXMiczd7gLzm3$2~GCahHrz zj5gV5TdeYW+~rs{Q>Lo49huN%V5c-xq(NMkQA*2KSv*!*kfW3*E1PgtX+OplpCuAw z1nVU~@$pvE!c!}UKKOxWLmEP#$Kn?AnmS4lGPE1)$kti9s$EKYJ{Qx84p5&tTM$KB&S3}(z4 zrMcFF#W|&fE2j{r&2)2Ww8%e>8;x5J1JaMiKlag9m1==m1zBQ2)yk-zR8A{URc&GZQ2WS-Kh$4F;6tsdM-c-6d3RBZh(MJI`TD3X8|!ChVImaUlu z;-MmiLtrrb=(FoM=nqH*n)v}gx zm66G`j4Ka9>Azf4OB-yAI?~J?I+48*I!92HFzL?QYX(cpb z>JjCzVhHC@z6Uq)=_PQhVytnIWhwgddMJ8Ld zp(yxRf|`qE1uXYsNWf~%eI*102t#DCrr&h46lijXM3f_nVYv_)JVxR|q;jJXmrc2d zQ_gCql~eq%*n?%p%rZq>>2j9YgsF!3_DUJz!iLyk&Q%xrfUwZh%kN5FavJ7pjkoaDeQY1~6t>I^hkAJLH)$O)|iKaejUQ3ecYqNU6W{ZcO zHEcVoZIx-H6#gf*1wJEVx)s}jEH=~fB8zKMcRZJ2MzCJ|V;}uUt9rU5O@89zA7e~C z7%sYD`Hg91HJ*JB*UNL3Y8vW27SYilA`Spx000001^`+Bs;a7Y2LW-l4sz zL)9GB_4GM)Q@tI(|4?zbtjB}zM2w1N&dlJ>vCKsPXr@W1lBwcF!N2$J0A!$akS)al z^AyI6*+^X!TwGSZzmY+#h@X3m*@o?#E3-O2$JLLIys9qst|{E4IyX|1nO;J_U3D|; zs;DYGoYrmf%n0!5_EBk$2W%l5+CrHU4LLLrdjsXN59FoH%PwG7HG)4$v_*JA)_O_DJH>khmn`l!J&#;ZzJ!1HJpXcjvNi=VQvuqVS!sZvqQEWX#+lx-lb`Wy! zb;Zr>3}@4o+O7KHTFy@XdYSGf)9PljP)o3LB|MV{>PuM4D|bz9r_q>Q-3swHy;2j) ziRpy4*QJksIKREC90Iu0*w+$n(>QrViz}m5vXwC{y;P@l!nJU~64*a$_ww*&_tLl7 z;Eh+9FXb6w$t`;vJl0E3bcOVShvJM>`J0}pL{AlVMP)=6N%1*zUf7`j)syVIiWqV@ z*a?!7%BIAxY;P25_u6{K z3CG#`{z6DZVfjz&V0KdFn|r;RpAdV$hj=?1`bs9xP2EG#yC>BoVCqgS#Lh&edRl{W zbqsbUUEobYKYZT)=V5&HdUshYPp{UJyO0^8mP9b?9daW`Tj2UvB8+o>pH=c3 zO$8I?-&2xb%>K=MvM$W!Qgh{8Q@ijvz2^~cAFlS$w~_Cb(B#TA^(e3O?@16kw~G^L z!s1Dqleh71*P-{FyB=)a3e$tYujEcHX`cdKA}J7~0rsUco?Tx@{y;YlL!$r3E+3Ee z&#mn#-`sV(ikyyYI@R#XMd&to*JyX_C6Y|@)>_Q^#vo^=1kw5>*$du{t3j9i?ha5G z|CoR-x`O~oK(@aJomhGze}rtv^F5Omfo+XE@O5*BrDLM#jEMTfu@s6NMtFwIyQPP* z#XY%Wy^@>#V7Al)uL{;&8f%ysQTdv4&%8IsiL@YrEyymWC=GY=%us61Kv|;>H2*o9 zVW)TuP3B6JbfSs;db?xFqH5Q6?vnh3iN75cOU=8I5!WxKt2Bh_Om@zs)1uJAsi~j*;aqHe6(b4G@Rlo_C$4|90ke zKT$_i-p(H4UN>g#n)bf;;J=`>)Ql;lJ}}CB?fL{v)LWfuZL%7in!z^lQJYcO)RH&C zX4#YJ?tvXA)CJ|%};T|f&afT5XElS#P_ElGN!@|2l zOkDWum}lPJuVGeM2{NBi%ZwA0o&@yNSm3bnLBjQg5!!LB$?;$ zg7lF+7?wIlyABVx3{;}BuF8YMK<02scnKDK1UHgPnYgYuItZ()TwP5a z+f^w3I(q4Y|JJtitSUo<{f~B(o+<7#KlI~l;R;vyp3gJ=-jW{AadRI{7^{J46sM2p z4I)r8Qb0|YrO_}Lxb3z%9g?^n5SpO*Hvu61^%HqaUW=9lDujUqwK8n1+UAo6vtkLf z2U_En&c9Ute>-Gr;Y+Kq(?V_NZ~wvA%r(+j<;xinmSo&9^mVPS1v|!3{_eE#x%_z~ zTX-p`n;~!2mN(&om|0LCt$oeve7)DDci~xA*hKSYdei;dGLV0ee(b%s4EW*qP_dT@ zI5eu$PaBi2H!LI11Sr@CW#n3)gJC^Q^Sj+txBQ+y`2}(S3Gz@TTJGdr`eLfR?S5W}zc$wi>!B<~1U$+_py$n@qjh20*{gLIK;US7E1R)7R4sL07}sfAI<6btFrJxu zfcIXuIA@M{9Mlnc#9y89-x34KeRS_j)nwvzf_Nvdr-Gi@$I zmi&{c#@OB!pAn)n1{(>8ne^sNo-X@AG3xqoQY^J@&mEWR=IH>KsYzW?nlvtm2r!>Y zKFT~z=8r9r8?7u#r|XGC+tASI)(`3mOx5ghDMd6Hz#CziVVp7alcYP8FSV1<%pI2g z#CeUP{+JhvRa2c&PA5Ac-Lkc29oMgzMCq+l*li)sN98tyJ9+QJb4|)Z^@44HkH>No$7ABno8lFP49lJxH>mwsgC!hn7+Fe>S z;kGz`FW#pHT-!>pO{MgynrrfHsN+GHJOf3GHOUDiN4ZUdF3 z46D1x+Ttf)alk`&>tc#6dZfbI?W_xGHhWka&da?j&DMxjS(@{>+>1^3Jq67fB{L_f zDgQQ9GVxZvWtbWpvYB*U2h$C=yHD7Qk+9pfAU%xCl=PU!+?|L;?0R{YrroEhDO4o-QHL>(*A&VVpB z?jUEMYVdsX=(3HHSVu`2(b|W(l0NHPdY2233Ono9kmnD*IqVgtMI%zyD#Q`{3ps}Q zPFM$s#kVe%hvH%^R^qPN9t*p;$Sx<}IiitWv(rDY8L3m=-KSBfvKx3(!pJ+>rk8WD zK7_YB#PdU7-gKs>tIW$XELk9uxtViOn&kHkU!^+l%_N?!3Y%1ISl4u4=KfTmKJ>~S zYKf|T0hKb?!8-ceg)Vr2UYb>OV#&H_d6ito8Oi$ceXF#xdjpD_)PMJ}r=FA#;X|yU zSg)d~9_+y|*e%yzH?&2K;`(4XtTc;Nf4mR2o(uy(Aoqo>i^{ zJ=JkzPiSmy8WGRht{HFI*I6Z-cZ>{`F*3nZvBuE|>N@&#$yI{*KzPyH7@A%OtSxB- z9x+ywIK`YYd@TZX81NTHs#$H^VS@(?3`xs|W_*y_sorBERFpCU0f0?xO0s*B{%*^m z%T?!AsTw9(lQoD@o-gPv*S%L+vZJ$ePH*aT(Vmu<4uZK@MX7AVdfC!wHDsm`h(d3? z)`Ad_wG`h>(lK%>&|DUj%+S718OOv2Nh5bpfl$KKX1gNV*D5e7eR)zNg_P+Pcyz}w zyQ=H#vdc?dl9o!BhD`KW=pFH5#whq3sj7P3#JL^V+d%H&_?E zXV?6!x+t$AbhjGBTqeGBih$r%r)i8yv_<+*(PLUxG|toiim-x3U2>?^ReSKowR@fi zv%A~6Ww|IF+q%XQrHF-^3sBow{*Pz@ApyBVGFDAdFWd~eOCvSq!)701!cByo7r_ed zBP0+Ty;tP?D_Jr!m7Mwl4(nJ*XX95!f^@Rzei5(wxo-D|WtXv*Y4fH!TpMy?PH2%? zjr8oh!&^R(VHnY0F?OCk3mr%CAZNebxv}kEGB6x~qw_WE*)&1$5^=Wd;dfyr=l$@V zyhS_1j;?kM8}7za1J}cYTa>=<4w%urKc>;eUxqn6~Xh z3Xj{qf`$LQ<>^r6wa%RbwcI0C{*;^-A}V{q)RKGBUvtL940M@Sk_SX?y}*{BNiz+EF#s(Ye%TUKi3ZzL)I{};dU=yW%sCQ z=^9B(Wg=!xx?L-0&s47L;T`cuiM-G*g<fv3H!jm1GFp}Z+;@@yG zwca{b6mu1~-YO!vOK-rhNrzi=m%od4WE~6Dvl)Dubl<5B=_aB0Imfn##L#bmJO!I+ zap`7TCFxV)COfXrhkKZ?qX*oV{2fYLewY4Xy78FSE-}5PtGxSCIkH?IC1*kDx$Qcv za#|>kV`?}^b~;C8L4AcV+NP{}w#Ntkf5oqGzWn$^^REkzNfI4C*MUegMI@e~-Pz-u zA!~WQvB%vsmRIHOUXI>j;-H^i_u6X5E+198O?^Z+0Lv6Pq_0yo9H8z5Ozs=rjL~<} zcK0;6dVH2C`BZBj7n9xaY>L}4e}9jw7&}!zl*L=~-ukAz!~9)5B*u5ybI7R|O(7>4%Cs)I ztBjHJ882SKhYjN@+_)LL-HhAD;Z<&Q73VMBsqGXt-t&zwE_<*jqdbuf-dMXn)L{MB zd*E&3Dybu9=7Q{ymNE_#Dd5uzAyqIqe55o*ghi*|9}WsLNaF0Jz!(^8OSLq0-P&T{ zMBQigilP_#yD~molFSVxb2{5W84r?+F<>vdz(l~|GsqJK809&#oL78s3bI?hG!Gm$ zO74#?IEEKCGW@>zdvbba7 zNEK;6u}pVTO~sXT*q4>@6YEed*TGOOY$L_Fzlc<3@cZLN;pIH?^u59DL_fFN0t^wV zZr?-ai7=WCNuiqBL{)z)n02W3+W8C*rfLZxw*u#_g%ltVhZK*>`}ph9DVN*sc)BZF zFiGU(XAJ%gm1?2Z!O91=PG{9erKN>QfNLXLGYJRI=cHd*mE~oqop0=*n>r$t|LbN^ z=V*BL;7E>scdr(U-l$+iJ#|0KVw(HY@Ra?{Yr9H^)Y-6iL}esX$BhTxsQw_b7)myh z9>5-7(${n65BEIU6o(&I<ol{SQn17$Gswho#&!_ozV`3hWDY))D=kJEcYZB&|tW3Q}00% zdhdhu@rSngeRvrb{=r;bzfQbBSAJP};n-Y>@FO`D$1bO3)89l_7C}$lqLMOV)e#6CR@suU5&>5I2q*XJapLosu6y7ka>(Y?K${>_BL8w&i0pO7(yEqW=3;jcs7 zYP;dbgHxvw3*l3$?!d(e(H-`Z7!MVY-APc0EH2$KVAjZ~K_+}^mt-@;#hF9s+*+CS zuDhh22H_PZY<+L7JBH;>9uH}ug?>kIlBEQeT_*Wobhk(JC~D%9Y#!ElyfjF0P+gp9 zaAj1?TH1j%ct3Q1ez}}^OE}%v*kX>6dOkP1u+bV_n`gMYlvZ}ZtgqDUOl|cHJhtXg zqQ~;A=*-ylYkLsY%R12ga$ML$Gpp56pI_92RSZ5}wF6zC!nIxF`K%yt=P%umUgBrbjh^$#jTpkgKn`c)y$7ft$G9#WHk=khsz>n+C z`NmtN4|;T4G8JgDotfpxW;h>2=W=&X0LA|p(=fc0TK6E`7AhrRTds;TCrZZCQl%a} zoWcp72#)#hn_Z&bIm)awYh|%lFObfGs3h%}&)#@zTvA_SyQR&|!FOts7n~IHOF3SS zCmYV37vgj*mL&AEuu`Xp`YUgKVVEIg20^)olKj)rX)sE&)O|_4{EQ66)T;b{{0<|H zC+(8N5_Bp6=74M@Pg$j^y;A1iFZEWxr~8n{Y4+}I!XNP@OqI0;l0wvR&Con>J{rZCP0?(Ko0jum_@TN2uQ#+E*5A;&q9ITcQrHL z>FgtN=ff*1K_UF5)pa*l^2=laQT<(XyB3&?Dbmg#b@Ic-KXhGOM>A3kMn<4nv*isD zZ1ScEa{UU+wO#}DQ?zRAQMc`Nge^`E|CMyOud6Ga74C<5@J$_sE>~oAFP3kalcnTc z13XNg$$=(V6tZ`odi~(g!Z&802#2xXyvhrn!R_Nqx7?fiMtgMc8xjqFj}_ zN|uMK)2kITxZ?B<)M$FKDOL3}iSJ844V!7)`|qwL&1Za#X{w%yhVP!JSMSL&^t-dh zjnriw()RJ)brR2VJ$6tUatZn^Tk;5#=bN(U()8( zTEeZ>wZ6OWL{IuT{4ZzA5W0klC0PCGQ1+a1R900E>|XAis%#rUexw)rIV1(9@pHEX=FCsdmec{&OM*ONVU5Tw~UUR(3+66C+$SMw=xAUn|t`zuD<^ zDO|6>r+TWhRa*q=%x`=~wD*j@Y%;#+#iX2B_U%0Ns#*kBzgeGo%A4_2(qpigQw5Jj zBitNsPBx5-oM9KK&b>FCu8{22G}1_xztPq> z0gs!#3|ZDK{g>8~5#En=C-UcVEukxNaXME^a$DdwCwzBVx2Ti(hdP}?&*`>H#DW*; z-ZxwbR@r2}Omy@pliVnu>8Vd(S|NB1!bGmNeYhFK^B$$7co%9x zM~eA7o%oVc|1c9I7P9k+OaQkDovw3TzvscSzioNx=pV;8D9NQXO2lH z%yho@kxXV}naR<%qE2Be<7>UoaaXSEb`}<;Cp6PXYdvMuxsqx70uK2U2$?RH~jGHn*$?X!Ei zU1+SHqMx6E9>1mC(wK{wuX|bH#ZZFVK$$c=LeE5bc7At_F2AwMCF+-^VAwIa*%o^p z8L`UDaD@b5yRx22DIKc|5Mpa{o9ie@n$e0VNsgdf)~0J5*|q2HH0^zfAOr;*&blCn zt1)RkGdl8ar({t#Qd9B=LfANmo5TUFwR4Pnfwej_QpUO{1_Yi+7_?WKccYrVY83{C zereKDKZgUap?ZQAK~LHa&AEuTG0F_Yrq}3dCY^m8kjPk^rck0cs%}^$R@3lSFdbTK z4u@XlL%bnJ+JH8BMuS#tniZ)SL+?#d7Fa{^-8W5~LJD^JQaEUswD9|3P6uW< zy^pG~ zNknt$`e~`Hc|MGGrS$}cFEDMsgwgO-KLNI}^Cv7B)DQD@M1GCw?`4(~?z!5J`SaN3(Qz5t_FCwJo=K1w@(mRou;SXz5U=UdVCO zdP;g}7Is|Cw6f8UvqgDBSGEnuCi#Utgw2Fco#y`32lcjfxQ|!^FVDr;uafGeMZDLE zzLM<+wAUp|$(Ah_^K|20pNzQS;I!2f;XaB5lUwX-4HTSi+NDQXQ}5@ zJ~KovztC7zs?R?4<|bc{lP)C<9Z93R&qS}XN7~sYBI3Z1i?km)hwv`vg-SgCvk`eQ+-186EF+`h8T4 zgB?6#4^6$;&}x;Hi{ZA7{(4KgdX~U?c(~wh$Rfaz!pU{q;A0e^f%(=LIuw{R`y!a| z5CLADIVB@%mFl_SRa6HD>4T@`Li$bsIo; zHcMZi00BWz1yV0Q44SZ|z^>bR3n)Aoe>S9epe{r*`FB zthhWBoE)y2lo-c-NvsnwP$m)!CU#PJ6D}Hr2u5*CC2^}3VMGCXI54^LTzWFF2%wZy zTf|`0tEDdJ092?)S^yKW3=5{V#I)4tXp(G*f6aW<@yMS(9W2c_vcLx;kdC(iVV8u zlp-S)?of5ZJU$e4!fHno%yo$Dfcj1yCPyTy3ehfEMOcEQVqDlb)H<43NO~+l!6bds zN&}|^A*c^HpuE|^I4;Re0?$ZB6dmp_WR$8HOOid$GBZFGKa9AI9UMU1fjN%f8&(7= z8Z00!3A{vAIdlZwp;Htbel%B~U9eBZA3g?few`_C1}mByXh?-f6P`q#@~D>WB+M|Bk%0)n?gXL>`oCX- zt^+6c2G_Vc4+|WqZpjgx={0cNL{o&U*YTUHh&f2)dwpeu=y>9)M8xr>`);&=hXi|x zF*zt+0{RPIR{!PGGz0+jH;%zFurgvJRTcLr(+j_6~9;ziaW zpkbdFC@hSDl`1El2lSs_r}iQWqeKJFtm^{-GJ+0!$SRTRB@>thLMm{xf*ueUSdSB} zK?slB4R+K(Zd)yN}#gExQLUIr_p4JDWt%R2dk1b z2Z@!^cjjC}Cj{ds=m)*nXpH)FY_$nkuA%FT?Uvs2z9n8_^gb$P1*!$fbauk5vY3x! zMvB|^V!R!8*Pl;#fRJOx!-zXPhOUs%j7mME;5PN68c{0B_KwAvIF7QXbuG;(aWWY@ z21dQLo!V>0|XeHw{q&SN!_(eYf;1u`YH5^CksEuZ5xX$uYpX>i%?W zlmhGd1PAKQtka*QHDTV#Aw0lW8}hJdz;{DL>TVa%JS6gd*$WeC$RNC@sI1W70vEU3 z-0#SlU5)U!Abq9P1Hxqsw=1~*xBg{u5DKN0tOtEiL6&#&DbaEVFD!$m26{$ONBH^& z898~_a6PBoaAjvYPs>~xF*};7q2_FU$IzslF3_g-9*Yn~@|+Fh%$q`*VXP00R3d-> zz}yn4l1HF(yl!{rM5^1vdByA|X5HV&`EoeZ!@@-*^25fBUeUxQ{d5k8;3P*0r_H

    uo>w{TrWoMT_K0l=dHXGz<=@xkKHcXY#`BIL0O$KMd% zQ;5(aI9^8*PJ)|mk4DTLw3AU1JHp{KV?mPUp9)(X1}KUJvOP$Tb-*Y}#uyT2xXBBS zBA*%EgHG=cE-RIKz5A(eyA7Z2Nyp%OOSEcKzIi&)J5c7-Vq307x+lD3!2TrJ(?lh-`2+mt~Q;*qiIplq-tyf=xD7Q8D zAfum*0@CvgjIQ-t`}9rz7bfN9&;KVo#o5tSgRT(dH_|D>R%P;b4@+*tNVzISqVujgoIh(3%x=-VV@*ElvT#O9p zHc$spP%o@?2y)B%hND&vFwo+)GzSVd<)Kmg&F2wXCNWPP{Y+U8Ho^!=nLrw3{XqeG zlnVwa&1;qrWb>fO0;hXWZXQ*;Kx+sL()r9Dqw!Gjv0x<6niNCSwYD#eG*7ZasZKl5 zWLhwDlpjG}Lc^Skahu;ElUdbHN7Za zL_gcu6`;TB!O=ygOul#x1F=8}M3t}D0^iM}?0bce)B-IYByE6H+5PrC_Q`YPE*--u zTyyMZMNIoXm|>#x%v}o>mCCVV;+bIFQP>0A)D#)!14d`2)Ss#NE&NvB{|9vjACel< zZ|yUh*)UZty%8meMOCJ^p4E0Pe1$#ZFH0g%4Gd z%K(3DM1#o@(K}ItfCPgBeZ+30(bjbk7OusOR1+%v1_9BgRgl~Z59Tp?s}RJOV{4EW z);nDZxDLYu!jxfmFy?w}hhjevByZ6?zCuBUJf^j~u+MOlKO!nYoe-W-V9yyc0j9sFi7$0Fc&rXqWz2!yza) z+-EiTCq#YtL4Zg74^e{gPO=lu_%;;YtFWoYc>nQ zi77WlgF8ra?9=Vj%PhPcvF#EulYj{HZ(UADIr*~)|6yuAq0$+!xTB#SFVXdD%2e)I z)g&9Bc*u1d`r)pvn8P|I?l1SXB1+j2tJ@m%E9%C^d5eyskCJZlAag{w*nn)K+{eRi z?164!Bjx0R(~)N1xPecZ_lyme`t$9t@&&E~yp~Ard52tMH$Ki%v9u~vh*UzvVo^Si z<*|gCKawZ(DpS0YDkQK zxXvRhUMz`-k*l9>=+G{WrJ7P1b(*qBp-Rf=8OVrh==dQ;4X~9s==3gO7(t(sx|laH zOdW1sh${l0TCNv$c~?Rz(P?^W(ATANjJHwa7k+0_>f$q>5&Q^-5?D?VYSd&(gfG2Z zN`|RpgLZHom-?|rM*p2yTo2x1B3)%xB68E&G{a?E1CBk*@o7}j8&jif*fKkvVNH5h zL7$DmkD)%q6u(>UBWIMqD-Jj253;UHqZ+2k=m*QFUd^n}nx$3|*Thp(y@+1;lPPt( ziy~(AOWr->Cb9eB{~qLtrcyxrKPapNFt>UGH#p?u8wS`_wMk;7X@OJhVI}0( z>;T?)#FZ<2IW-Q;kO%17`1U@d{E21@8~sp>Ugwu4`<`bas|H#d`=?l#xlU58IJu*k z=(*OcnNh?SJPn1$e|>}N3zu6B5_|ITY@_|g*Dqq*y4|Jz2k8EmmN8^@x{ax$zoLb$ zW+U&!F*?9g^d+?a%ry&vN7s$RJQH!b4@qUU;)#=eVGUBT4-c!jRoXiaQE`Ns$>8m( zCs=kYk7D^e$t$PU_{Ax#ver)?VgrK3fuSpM63ngUodt-tzmk~fwBEwnW#3$XAk}H3 z`>Il?%r}sMyL0W9y(%oo%RJwLOX89nc3qJbZAF|sejLe4;M|An&4yd@g(Hu$vDn;; z2(h+eAXRLZDu|=GT&akR9*y257Bq)0#Fi;29kNEP*LH|1i%BdMG5pGNy$H`B{Zdg3 zwL?T)5*ssc0ZWv;}uT~^eGt1al% z+h65KJ--Hp)Q_y_)Sjd^p%{Wi(%PKaWvbHzq#j^Xq;uJ+S?fQ*M=d;Vu$<6k{EQDm;b{PNoj2K)Wy)Z?U*DR@NS9^bEGz5 zizK%zAS&jKPOA5^#<{QT6H+RV#a{`^rhF4&YawZSTnEr>`Y}d3^bh_nQ^FdWD6wT~ z6I+XHKSz)FQ)=`%c`cATK4p^+LAhC6%y5F9X92m&WF{hT z=_f~u{#mdNzsM6Z2!hKJq6z&EVKFZsl*N00R*Bnl5O+V<++{rOiQR z$i=GmVvmK1wxc}!&2&UntEm-`2th0zMpD17+G|f$1?cT`5!Z0Dt&C7iGJfegG{2k6 z%IoH?mMSb&KBdtVH%=6tVN-fy(BouHk8m;1)7k|||KP0uoSy<)tfvlFToso8o%Cc^&+gZA965c!4$mLtUa2MJx1t?$;PAU!D_~hP}USz!?yI1T_uXr4;9b#3q<`38dBn21%;I^+RV6mL-<~_&L9C{ zm=A4mV+E$Bfk39WEviz>1p0ZI*#}p7(C@TDmdn=1@Ry*b%JYdr$g_Q13?rCvzl_zM zn8?69sJiS>%=RVh9GJ41@l{KyZKNR}{(*W5>uMYg#s8J5V8Rk=lF{~CL#}j{N;M*(n^>8L->R3@gGtpvLyvA2n5gjS z3o6u8(6L|d(4?o$7A+Oi5BPTxPghNz+iQHpOfDYCLq02p-d|t=wzmE+1wpb64IA1c zPTlHM1)IxsI|FR22H51;VoKz#mNK!9ue(Z3sR(JTZbJ0?B#RgU>5f&oPxeb27&Zb* ztTbfmI{N~Cm$8Mqq&i;G>u}3jNhr(bim!~(sgqmQ*pA0q{z3IzV~0P>G}Rzlov?w* zwaLRacT5#7daHty+H=VAO_zCuDp)_{PXAn+kJ2lLPe^c8;c82zRPpr0mMdqtUzM`fy{9*<*icUXN<#VWs}aK`^RnMfosQ%u zeS26nA^5VR3O& zJb=|vM==?}QY>@A1quVLdC(%{Hle-vm5-ew?lj8xg}CUk1hS1)cq*SPLDc^}W9tq8izZ@v!&PS?C%VA9cZ2%)tG~m7^zuP1fKKAw+HeQ$m);iL`QZRzl&6 zR_xpfXjR`l^t7ulv#BpZuy8mt~!N3#y#_tW|QWlHK$ z6x3Xo26}JW+`X@wjxoYaN4m7X9lv4IS+Xu=n3hXs))?k#kBJ+uLMdgjEf9vV+`aI$wqar56zHmDz)jsMC_jH zjMEoX$j20iNfa!*LcB@<@se5D+$aO1EPtXm1Kg|{S;B)BcVE zt29)h4fAX|I<^t#q?jv}IHl#}E%eR%i3(lsyV=o+oNM<~EC|0`H5o9idUe^VKxGGx3xy&A>PZp`M8 z6Qys+2C+a)bEs+#kw5x0Qs38+|Eue|voQag4(LuorvFQQIg+Fl=S*uWQpI zzw2{%*U>{*>XBnX*U;qG65k%$Ohw;$kA3K8qVdXWw8*VYu^n3r#*=zO&u5IEwtycP zjhD1vlXgU`>a)wlB~m=pQ5<4jfxw`S+E6PUKg4lj-?LTr4VSEet?=x=m7V3hjP z^WWvn3|#i)s~56ENbTDxg3{jyoueq_)-uCn@B-FXFNUm5E5aZd)^M_gVON7LI>#%0r@4x zs_rc}nEu368{%DBjw`W^(klAhz%irwP+k-})@pF^zFk%~`C6{7STnx^22`U~ZpnXZ z&Bb+gSA<8=Z;`W6_i<_n=2y3T zC_&gnimr3rjt-k?KXHh@)^6vUq#=V@_Jeu1#Iy}hR;a(%6&CJl)%R4;jtQPxt>vfxBbbjGq z*TATe#&tY2sw-D-^Ee)v-YeV^=x(nt?d8~*!3mPpbrQZ}i)^ZwK_M4X%*Hp~`AFt% zMxaV%X6?Gu&GFjikIW0o(3j*cGWQ~L)qSoYmcHPMM*KazaU#}a1YsMgD#+v)yT#Q` zj&U?(GLsiHr1gQHn}QgK#$)scgtc?Pxo!R*+m)uiJqDU~OH@g4En7<)7=+D(n^x`} zoWFe*5@MC%GPDk&t8Rr6Klm$BW;YYg+~qro%kp&VmT=Z{fsjW}1&bwA0%Oz&9?5!t z0DwbFUA6;^u0gl0yH?w_ZQHhu)wXThwr$(}wQbwB&HLZIbI;!AzDXr-QdMI-bIeMr z)>4rI;A%)=@eg~cU1`#W+oPwRpCaLTqK0B{7zdc{esXyY{(J~|Jk1?!3X?~o)$Rf)Fh-iB~!exZ<@4pdPbm?yXM9>n} zt?(>Otfrot16EeRAYRZ)#wN#PE+j!QM;V=z-VBTNKJ4INaNNp;1Ju@iIltQfc2O`E zZ{Dq2y-oLRr$@nSKY7ZPB@o_}W|)=s&So1vi zEsBW?R`b;K?37nL#Tn#l7ceZ~nzeO)Wri1l19!>faxz{ell>d6)NxdQ7^Kxd*2&fgz&x})c?J>mgb&AFdYs9_P^N|0OJs}Oa*#5&BF(`e3$ z>W(5rMRT|*C#PO!ZxVi;v0P#J7WS|yLNWge%qu4By=7$*3gg-9REr(5Y5O9l)U>EO z{&h`|WXu|m@8M|D1)s8Z_Rv8Gu(gyC~i;lA4!>}QGDw3 zSL7!}GRC!)Q(M_iQ9r(X-!%=SC$l!iWMhvY8Li@kai6WGp4=c*@7sPr&uiHZ&Vs%X zK;lW+AG0*4cDzk*%4QTBg`ovF!okizl!eoROU*;{BG4YD`Cz{(WZ4NwKdKtOiFG)}|`1m3Xj9K&x@!jHtM+2Y8m^Ui&Af7BiVK2BIcVd+yQ2JhO&2A#66rjor*pleXE)T zlQksG!fcS%Z8Gr9!xiGydmQJYStkvrc>6(kbQN8S&z?fm3RO8WVU2y8r+1QBBZ>T% z)3(gk6zjC)zw3VlrRA($$1x6e9pci_1=ZUq+!Rr#PPP1rRN!lZTC*2e+r)X6_fzK{ z@oV-6QxF*`d&@b7j&|F|6DX)58h#zSNYip5I>t+OgSMjK1IDl3`39MJr5Bhq+Rm*Q zv0HXPLD^)u3HkYAY|78aTM{uNnCeP>Vlix%?I!Yby9*IJ0LA; zg}b+bX6MCEa?kE#K6mzQPweEcxkYJmzJ%Xsu-3-#L7SZ5?e3cQi#vQwNnS$1Y5-7d zv4mi2anV~2D`I09Oi7W52g>AiG-zJ37BJ=v?$YDDKC%;(FjHJ{+KG1>cvEl+Zlh8U zAo>yuBraK27PRG-trR?Zg|n4+hjA4wIOA2#HRM)4;f7HJB(A&lw(u|BSRZysbF$gc zRTe9_Mq)|R2nkAAO#t*YCPBN%Ki-Ak|oj-dr*)n z9hzaSON>>E;6Xs&izjVox)lyXtJr*brL`j`8!&WwfCHZo(k^A4TQMY@v`V#IaEF6Y zG|97Uke8Lf380(qC7q1?`f_Ws!nvrz3lN+;Q21B1G484Cka$-bnJ8x4p6aXo^B%>J zvJhQ?_e>$^cwSkdCAerJNmpSi{8a%6SqS4#m0+PA@5phLCH-m3WN<=+(D8}#B^A~g z(AETHA_7=YT^%mfg5ZGaK7GhruV}W}JGL8gex;fxs>nK?j}3_LKmPqlviQUD=Z_|Nu zF=j)TIptaA#;+BPSw&yYbWAjev<5qB8)xMBR^v~#8i?xF@7+3NdnxpFH-Qb9%iJ zHM4d1Ts11h^66r>*|zLlRj%vAr5;#5Cb3+2gC-NR#J-XBDKX>o9-_oHZ*Htk?o%_K zqcplDgd8m!DPt@4Z5Hw!_0ck(NCCI~gvQbsFEV6n(CU&uyv|J}>hNnYTI=vb8SPv`Lgs_2+0=?rz~|oNNiE04@=0raG(f8LHXyW<~xhaoN3 zqqJrWmK3#g4vNYo=lPz*ktyO0F`*MNXlB1DhavcZ;dbn@p=YuIMr(C0o#T8Jcu}<( z^H!KG9+vY|yLj=N10?ztZM{s+o!XZO+xAxkJE)C|-p|g_zUGwTs@8QW?dNeKIA&$> z-vxMLCG2*e)pgJjZcY9M0GUoiv?H;Hd8rm4Rz%N1Z{Nh*dH_>(oI zRtPgKZ2uZT)($FG&%jWF8@-^6 zUb`=g=O>a^3W>+}s5r*AB@x>g)c5))l(>sxY*yl6UGK-nY^)1eFrNlxSmAN1hwViZ z7-;c>Gk9Aq8X(S_8)QL4HL@o(5=Se^@_q!C3Pd@0y9BX6wrdKtKluJFtJWFLdOeV~ zW;Adg3-f3xjZ!CEvz&4+v*Tky3k>Jp0e~2<8{ofR&X%CJL#+5q^8#?tjgaSVz2)1@AGel#az3VCEu)z}nD5w|^!X+yWwQyux_576ntM zl8Jn^Rnxl^p3X>=RBVZ*Vt7SII{@tshEImlwI!DumachBh~Q60sHZYK#>wHtph;F8 z;7;@xhE^5xkvu@7%g9?kf9hCE+{NRI%^YL2?s^f^Kgn zUvfg0&#ZGDt2O4u*jO^#Qfe&Ur^EG17*E<8BT5LYi|x|r_0z&18F6>*RPwRl#fr9e zhU0hJ#j-}KuRu5>HEFz%4^3M(+`kRx?G&Ud-kt|BiHcIk8#sR3lP7Rb{gf43RX;hT|rXcQds1Bhf zgR^`6NWq3ui<(DuxpzHCH-b=7Ik|>>EYpZ*w&;4z>uV><6m4j<5uR)*qtIv3*SDWx zlw^7PooO6t>PUj1>P_!i#m@~v1W`(&*L@m^6nhHZ$vE)Iz3 zQOd=qEfAHBo>!A9Er)r!`sDKSB;ogNkz-40CB#zVaDN(*W&LtylT=Y@%=T&1jvX(F z&|`IhwJxv7euUcMY(B#!mDWHrU#q(Suf&=!|?B+&L?Tox~b5rw(q4#Be|#qA_o|71-Kt>%mG_@Z_S} z7%r1=ob9EuY03%;H(29x^_d)~V6!ydbS#$Q=|IyQL;{xfy7Xcm9x?=OBkMY(7-IBN z8vEBITt(Q!Y|iu^s%(iefxE%Xd~16z6?rXjRhOlEjco=V(nna7 zmrzf0(EwUeHGNLTQOS(_UBQ#h(Mo!w6g1KnlgX^MBnk&X;Xa1E)?&MxC)BhMRX@ndeFv? z^(g}J6gBu!*oircljS9N!M2Sd_?h$d*r{62@{VI+G~aIUhaLAjxx5e4hRmKP4j~Hp``WCar>bU`FBc9`QwJ6!6mLjy=!N-IIHdbmv(V(>` zO4iWNU6|yPT6-@|#FU@huLNCANwJ}Uaxd>5#doM2lS|N(G$r=%xd}14PJADO=g=^!UR(wXD>o`0m?o$LE)Nw z?SF1W2i!5b$SF((tGA;8cqb{gc*H8^^V_oMcJ-3H&%Lu$E%Z}kgHT|)-ur_rRD#sV zt2r+siFK$H-W&r;#s>|$_lic?%&fq{JlyvXWhkJSgU;-uRab9o3h#F&8xvRi5L(^O zU8`XMsIumidZDqmEbV%^@Jfaop`sJB?ra^ZMtRJ_G?%)iJy>+J(M)Ev9hPzc@*#B8 zda~|gt^B9O`i48I^>DC!A)$31QI$9GC1%wJ-vJJ(Dg6$kLnI|6?F!n(0~JZBEdQbI zgr{s`@+6EbgMGlPAJBz^SH_5w8J7B_EfjKbc;bO{*dR|&2P z$=dU3tqI-VmhKIkspU#cDpBCAdE?v2&)fq|nr5k7!)tr?uB~Q@5d}Kl*}l*}+Q-9< zW!w?;VvZi4OIaeqXwRb*_DdcP*80h=#ZS#vYSOcabuT(ekC$gp>x7dAZ<$W!0VIwZUXPuif`^{~F1tH&sw=GuAQO(qi14vkZ0e6zH2=%F*L6H>@V6??cId zrC1|UvYB~>Y!EfEj$^tJMNWCLgK}J=b8GwVuqM)Cade78VL-vdlu?K++*egfVzyTf zA1P*ALTV=uYP>$Jc!NYrX@$LAvR=OhE*=l_}I}VTY6G#Il|GAZiIo7P--A7gN z#N^T`UOe-{RutemIvW72-28`2#s*TNBJERaR7E;9kYkIIxj}B}*rzBVV)lslLZ}7k zaKp3cF)Kis|4O$DBx|$H_Hb=J&&xlpV?j@I_3NkMmF|G=hi^K(J@$^L-4WIV?{rAyLG#dF8EqYdQ@x}|Z`lU*L$$@q+7|S`-CDQ}p!ACR)isra7s$PE# z-fnT6*`XMezCSTxsczKJT1i7&6j7P8XcGj6R$@S5SbW@hjWh?h>1i7%7N=885jn zFe@jM@gA~;Y;bK8KPgoT73*6g z;Q<7aLR%vZNq9RcSN>+C)iG`jn&PQBYP%~xF(Sp0c9&=vrPv$;C??ml(!QH|dM64a zQ2la=?w5{AVP1Jgk2f7@MgOWyHBK6C4PlN)n6}W(Ww}2`X4S@aeFQJ^j5<(`V{O_o zltY}JWO1+%6OJ+8HeGddpj4>nQ9u>4Xl0Xx#ZtdU z9&;G|jsJj0kT;N|<-}FQqHnPOwOL#LEb&#_PSQdeaHrQ*RvLW>rZ#w=mZ24Y>oU^$ zBAp&Jmpm_WXOOEr#RMNWt22{U{*(ZJM;>%tBa~k_oNN+C%a+m$OPBcZJckh5%PS?fki~nE|;yAO`M5*`#6!3sw zsGM_xU8)tekujBK$ao~Q7S^UJ=?!1aJ50@ue(Xjtx|jH+)*TAr7XoXv=TuGtaO z44pQ~t)a_n`()mpI*LV?wCDl*64|MF0A?=}Tk3&td(+bOQ3-*oEj6p;5X@s8*Ooh~uw7Isw(Z>w zt zdW!5yppyNqriZ8QO-ZO&ub9q?X4tkvgU6k6u{rwkdx*-Nol-u4`wm!V7K=_19$j_e zA;nmKg)viDTcXcODw^gs^?3t!GShVnMrxmI$2_W7EDbU zcy84}jnhU`^$Z4N4QlOHmNW1%hep5?S&?BU~(jTQ8`n$s={vkYE0Nj#2f5q4q3cb<3@t*qx^tuG{&u zmc3=);hspNpQv*X%+Y!vss|WMbdGTo7%QO(2YHnS1o7xzR!lN9(OkWW zzQw9QhmUh`Lqipm$ zmW(~mOI*B9kYycU1e-NJR{Pv^Is&7OBK>?0K!(kOoEMKuXjKSQ^8MT&nr<%u@D}W2 zkSL=x6h$fXmJc}?jQJ%LiL$U0DMDJ}-0uDicMSNs{p!nuc6grC4inRWR;<4pZtjm` zs%&8GT*=|tV_9Rjt|nCVpn;ahy3t&d|WrFUiNvJSJ^|m?CCrDlLe2pqP?Q>4?)A%nue{&tdGeXt^|0$W=X{AuhdLDhR ztK*p&K%nc$H3>qa>4`t#rlKG{7tFWd-#E4%GqTY<-e7Xr>+S++vS=3AE686K6zpV1 zD3(4wz@R|(^GJk!$LyL?z#5W-zGeixU+2o@45Az7$|`R$Ltwy>i^I}{upDK92hkuBSgO3?X=)9e^j=MqsMT#rp5CdPoY1zvn&UV;b z87e(#qP0AuRPJ}?te9ss!_-IyYzUO5rhQ77`RtIKpurevtz#g)f%;}unLkn7<6*Ye zK@uvr%Iqu#=Ix(%&WKn)i07dY$`8V?s)Biws(+P|lWx27J=u=+W>Z5yHPI;AQ0}cg ze^na81FW@)d_n)=TWhvE9F0k;q5JT!iH?R4w`Lzi*u_(xnU+mIm1hljVu3hBjj+_( z>@$hI%iu(7ww3XwE=HkwnX{#+nzoaD1Dp>X{k>1;psjB&BpU zi~nOmo-GrgSWI6bu7hVA(AXyc>cOfzyHdxLq&d`wkU>qXyQVWlj}pM-ly-F}w3t2b z96OsQ;kku-+U~C7$;pvW<8AqKAj!~;Gs98;~vA~wos>(QfS^cKMt>zi_or-bV0Ur`e$sF zC~s%5F?gCJl@P6$mxyjrOL$Uki#wWEX_#H&Jn8tbS(I zH%B#_0+WooU!>~7mT`P5u|KIjBpR$ad3TM6r#ILlpsdz+C<{!zQqq^-*YSFo=e+(I z_kD&G0e|xzwI(wb4tH`=y(OX0Wz|@}v(-wC8@bVbgY1UOk55q(%<8U0>UFULzwnCA z(o5$&(>MovmTNImeY^x_dY{pWU{AJi;%J65dO_7TR$RiP>QRDQgY-2L@?~4-&Y1+m zQ4wNnYkVpdf8$JjxH=D;0G_#+i!1`3Y<6evb#l{^K($!r2-s3RKkazP9IX$%WdxufT@!Pt7MlQ_cKI9k4scH3%sl1q{`ZGL)C z$| zSt6}y3Zrwa`o5GGf*l&x8{K;17$J2l>A*A)^FDobz`m)LlL_*1yeD5-O#>8c-Wh+K z04eboA#h|_CM6cHu2j-t^T*I3q)XDTLW}6m(y)bze@g`3WJc@Z3i`;Fak%3DkGDyBbec%_|}|{F)d* z>0{_q&j%|ieoDCEL0d!X4?W>Qy)nR`Lr6Jr2&d_tHP)5Jb_dlv??T~e+r}?Zey6)E z5!Fek^nA!2*hO>b`wd|Nrmnxh@*82Ns{Po1QLd)`hw+7Nkh;Z5a6Wxz-RUAxATnH3 z=n}5{_*7^w$a7Cn7;dIq-gDCEQxvO(LNxPfDe9#Q&?sDahF3cJ?}ISZm!WfEwvV0- zDGq6dZq+m(64Mr}X`E7Un_a`|Of|IfdFUi}SQD!~&lYK5E5`9 zPXl?^rm|ThN?(aO16lO67+otV1=GrmYnL=zMKP3oOzFc3%*sEbpik`lK~FQw?<*7* zBxGs&McDD4vSGY1K)(XYukE%OPGsVU8PyHcgb?%4q83*;k_~m#0+AeNW1@ZM6=HIy z(zGyuGtYTD&;{|JLN7jd?#qA{IMQS=S9o_n%|Fx^IfqXXa6>9vs z#%#{v?V8rSgw&F)RP$LJ$e%y2H~;lPoKT6T=Cr!M!_qGTK=8Vq<>3%A`d z{~Rvb^TKo`8rq2v&8|bAa@2{U+J-W#q&>hzy(}gx4FVJ2BgaO4dw1}~aB z2%swoV&>9n#ZfHkNV^@HvntAS&fy@r#@)zvi95>QDk^8S&6UpdoahNR4>~l@JNferxkDRA>N&OzY4rl&)S@&Ck_vHPk&Ah!NcU zBkkd)$Luul?17%E=Y5~{l+je%PX9ZhtUmP~vr|0gtm9!tsi4rnezY|M5{*KNx!>Q3 zCS=i=v0{&g=UdZ?DrI%Oa6NI?AVyYl1p>s08}R{5F7FYg_l2Gj=b%+*^yj7`Pny#f zrq&AY-hXd(nwhQwt3pQt($i=L=vruZ2Z}Avag4Ru@ zK04V5A6EwkXJkNC<&UoC04@66H+a*gfpJn$AyIO?!oq$-tAhKbvP6*$21cKoGy7A4 z4`d2QD}p)hpaDl!q*R&wm;w>8cDXcz97RW~W)YKE@T)M;Oat|h!YmiLHK;u`x{lAe z?qEQn^X7qa+rY?(s4cR@F~4i=y`_ z-TnAk8(s)De0Qs81ZCBDU5$~XsFAK4Z%&1N ziMagd$WXgD?eo*-IbERZ^3W zpF_To1bet5v$ILvP6i@t`vwDl*j(Pa9RJ@hULFN^_Sr*619BkvvwS+ z6^U_IahnD`wT;2NNXLYrjVG8O5_2pV&mejekAQ?4IEHDBnLC&}x|tHPcMe+G;P-*) zUzHOi-7kk-HOvNBP_o?=!J6!>7V@i9v#q%FjX_Wc5~{i^ic5hwEN#EZ9I51u=yvsK z;mj$ytiskLdm3h#>%(4knz}SQoQ$D@e2ORB?)6!7rzqRvbI*oIhAXQhqs1ZbkI)`+ z+vkXhmNM6w*t=ur0??|d&iweiV2{!Cw8lNZQ8KqC>4R>rI&0i8qhx{HSHP0_gGsf4 zs$$h-{_G(Z4}e``wJ85eM*--zi8xvYUV`uVJDAxUT$k?tI#;0TjY_Xs4QtSc zKhaRJm%1k6$3vu-q@QyDpHGh!w%Hf#w|onzg6f3m)qNSuX*v(BG%V%HO!TeOO(l%u z-}bTq7?ETipj^%VOQ$=!&VoXBE=b#c#%(va0CqzMBZM(hne*Y9dS51?LKNqBHU0Pj z26*|{FrCLfTS6dd^S(4*2&(DVT(+W~9uyMq&!3swV`h{`7>?k%b070cJ>xpD1TlFC zT_Hbo)B<}u3UY|*D!Rz~D0SWZ>sc*Io293Wex!*gZRRRAcb0AqlGf9i7-xTYz?1m3 zKU-TCxO6`NqLE+Zx^H@65dxAf{C5$3+|M5 zxs5antBqyIDXZquMWW^!Mc+8qhr}CPyl><&s(mPU-NNT^pjYy#fV)~Rc7q-YRn~oL zg~_52v$m1GP2Y%EZw7f7@>%LCLc*m{%xx=fb|BVc+B=lTEVfm{sAeLhTKU|UhNM}~ zLEUxC?NtVG8;%wGK=D`H<=iIcPL6MTwf0}I8oZt}+XAE_dSlxd*&lm;77VJQf_wvJ z>5=`M8b3J?y2%5mxMWk89cH_#eugVlunL!IQpu%Y35BOwZZ|yQU26~>o$uv8@8xqf z*FIn;DVz#V($3cm=}U&qHM^dP)tcbCg05u*2Sc7T8qg)vQmL}u;(|h{c@FapY>8(c zmHLuX>x;Z3*q&ZAL}-+Spk+Of(7GM#$ZD4gPRDa_Qwh=8lbU>xW28qm!k}2SfgTrI ztbcgh+DAnkjpf<#-vPoZFqy%M-A3Xh>vr*LbkomhmsMk`DJ%;YauM&w_8};!OK4q^ zClH{cNtuXE4KBnZ+cu9AuUoAIzX}#Khp>sVm)_#hP$l}{ly(o*W<}V<32Bw?9$?AI zWee+J3lX;}2nJn<8Eyq=3o|>_H6o8y(KzS4;?c+*->!(_5Bl_~)d-C+J6saEuLn-K@SX&*gv*xzEmnMh?#HL=8tuzZzrfDW@(v;fzqy zwk21&1LqgTODfW#*F&!`iM6RST4UaRNj&1_Z8#9R@k|mld>ap$EO1Nr^I?qy2dQ9P zZsYK|BcgA%1zfsjsW7rY%(5E}L{vr>EMXG%yp~0<%aWN7U-h1ZC52@n{#(6@1h;aO zL^nH$(D+@laih1xW*2xLo)35~;<>N-`Z-O*DJG<n0Is5B>6qQ1 z>?kGU{9Kt0+C$z|gyGHJZg^WWYOPu>rOeAe@XKZSHS%@t{UIKCz0 zaW4T!5*iA+(|mm`r^D4FhkgFWy)Z`xqC{?FHO1h+K1sL(osL0}{&5uG0GUx} z>NA;^F(gkJHmzN**MDFIqK+P`&~Mt}tz#2$;}mHkOl~C*<v-dZJdukkA47zu;u*?&Ynobu2V&}8Y(QQ37zW=Sk%qRn8Z z=P}rQ|6> z@w1FIay`W0j=Sc3Vdl!Kwo8X6@vt<<)QSD5ggn#*+xwu7x{^nkK6s0kg*jFmU%n9?LNZCz|R3JF4I1C#1=hHiq-g_*U%m_p(y@foRvH(G<0x zP}ut)_}Svp08Wq2=!pXK(WL%sje(73;Q}sJtLHRlZa|fpl5RVt@j#(Y@w58pW5h+m zY6v8FuJBQMOWZjxux~I@x0DqY9`S0_*Sl*>y$uA-Y9ZqrHW0Eh1`Y#_XIW8#WjkX62t%y?3YQ}y7j8!4Mk z*zBN?ZrI&uk0J-o>2p$L<-7@(n_R;J5q8_p?C3nYMX63q+&x&8i(SSmF{jy= z#Y5lHL%FWyRnmqncMoK*;`DkGR;6B48-*McFy0Lr@o$b?-JUHqJGK5alJu?gn|bdc zJxF^JFzf!k_oKc`4!1}y)m~;HSa5fY8cBB|Sjy7(38pa7--VaC6Ciop>DOxTj;g!aPH2CzS>th(9lx-icu}B1&h>E+0c$rdv@l) zA-?u9!b81WaWH{0CUZyLPfY84O57~DP@}uR8D^d*r>RH~h?l}2{ttrh+9Anbh{d0l z?_J&(7)ol?(B{O^)p4W9tkoEr9z|8N{}EU#B=!J zu}Ezrn>WD`$Zj9H?qRw(k3gE3){nK7J4ItKnoq$F!*+dLU)cJPzl)|urweIkD7nXi z2Aj}Vw0SNnV00O_HHFf*rR*{Og#cyv3tdbTlWxr-+G~1$iJOw-AFeA@<$Cwv?ofrQ zqfn%aa<;RW<1ay}v8wK@($y~a9AV580u~+7j#41{JQCz1Xon61AId#ZR^Ds7@Os*bguT|iqf@t7f{%O0AJ4QgDW2Ba6y|PSg$esfX{q*X;iiFR##MFooP8P zMJ^_;oZVZfxq{BK_=p&*|wn-&8pU(v2rHxXg}Z38?p_ch=`3|<;)Y9 zt3eH^1kaa#SHRNPg(nB>>boq?W01v7_&f($6>x?E z3nJoNOsHR{-CB?$`z8gMOK@gB}hy@tazcwQ{?$J1)!QV||G+0WJyU zjGngHCAOe2w%pjZ$_rr@-DBaGB~8kc$40wWKnB#8xc=jX8ZPKqQb4f0H` zaV|XW03r*nZKDnGM@tSNF`DuzcaM~JLp0^8Q6Ud*ADvja{Iuuxuod}pzU1sAWVi6( zHsq0Ad9|w=4_4)H0FwAa$l&-Imrw4eRONc1!}&k?g^&u6KohZ1*P-O<{XElb9C6G( zd@2PO1@>UYkEv4&*jvVdyHl`(ov9Cj41}8T5l=V?1q#YE3QQr<*!vsg+9Y@fBq7vU z_3-_5(Jo1@@w&sHq?gh5S>QJ*xkLE-r#qP0X4}u`)w<;*+|UKuTCLD_e-6#KqFKq} z6XFHROH$rwXZ&-~D+3(7C10?YX{AaBbUAh8Jr5i&Tk3+N7A5?xTp4Zg9IB&U5Tf5h*@CH`LtFeDzI2_trK*o|SCfl6$lBTqBZ`dLv~#0J={ zLcECQ_Jha>FEuZP+hpmSbjOuWPjrOC!;Z`wVWP5iQk0G^LY8WN0r4k&L`Yz}&DI?6z4 zB!ClaiaQaUNd5=*f|7_U-FzfseXY1ncZtz$u~7$3SH{orX=~b9hpTvcUXE}v_fu&E z)e$^-xZT?$Q;188-hw}$t;kEsSGe}lEk!<0<;HHNBnp9c8=2k*c^h} z;0=^#K`0+4pnWMdjWHHQOgq4J-8mOG?de00;Sf!+S(z<=jZ6KS5)ft-H8B#+nOK zJ2S2hJ*&pOB`5XXXc0KA#=civm$-1kN$`wqZ5R(;f&?ZGE|QSw{y)D33;cc@duCtR zYa(g_>(#YWc)}t;pJ?h!bB3c`TP0da5baphw#}lCcoO;t*^))2@EeyhD#w2YP za<;ZqCIm&=r}VCHEy=LZvxK23aQg1MuQw ze#BrCLO27Lf_?b3Ae!W4=@#>*N1J6BdzD-xO3{r-Qaem)&CoKpg)!P3XB~@6^jIM7 z%+)^?bhv6nbt=OfZce@d9+Zvc+z89&!OC!H6Z0;`vDER#>hoqxwCp+2JJ1^}^|IV3 zjmS3@jfDfdWtOGQRUyjZP3|zm{2?+2`1dG3|8M|)(+k`bp!(DV1L4VKPu(Kkk>2TQg3`R%`E@q83c%uo+t$)u9X9hhaN(%+JJ=#f5Na_ro>1@|~_ zk*yQCp?S!wg`dN$@CxwSBm_J~)pTHIUNrek-rgxO<=!{-BD;eaI+mr~Fv;3_BrxqE z%CRqX&6oWRMx@~cujTw$0fMfmcHiibmJupWNbw0ZA90JD$63Fwx!~i5$5hH-ean_aEJG$ zjScsSKrmzyU8vgZBjtfn4lWc$@gRYnTu5329`(#2snZfL71&BOj-5oFkliveP$q*J zXL0jotqsYXEOM}80o=2~3?4%2C!6-sh0$z5@FRaAxE zRlzpu(tyv{l}ln{U={PRvc4yqDptT9H!PV1>8?mJlH6mYLSSBVOH|SzREkKeH%S?@zN}xn3{*3 zi5E?yv!Mn1N(K|u~YDOuNYH8%vG&fKq)TzJlA#u%)G1%4J7NCU= z6+Co?Hkn-!w_&hxl7R_0RbwLGCeFUV43t5uIqT);UNRcP<`d0N$F{ksz6C?OKxTeR z)-Ee1L=_Bca)~H|T?$oaO^O|bn$T4q1F$;~uWOo(R3lMhUqED=lY<*gp4%kunD7Wc ziC;wTxDx?+m|;K0p!!|7C$<-XZ&|`*WtwkyCenSu-P}}`-1CN==~Ls(*n1T>AnxkE zx1N0)6UeHg6vI(D7(l!YRE2|n&11gE0bwCmJnTZ#`uj=XU zLx-EDa4_P#P7lx<=+gdC8srurzAxM>ZzUR7%g`(Yt_|2G*{X+qS_#!BXC5yJ8ZW6~ zt^-FKbOf7tUHICEp}OF#TI|g#ytZq&@8@wCF4cFRf#K`K0=rfaQFhLgQZ!ynQgH7G z*Sft8URsK!f^5xj6;%tbYVQCk`x19@-yJvY#}w>@*F6BFZp`sM0`|N#G;g6G-3l3R z$CPz7kifvYA*xpmj-z9b`^S$jDMQ5_ey&L)I`9xe^1{|>>fFX@Wk^Z^vDGZ!h)EH1 zDqv)#NWb!WPb)K<=)^c7I(kJ>PP7pCgb6U6w!4HFR$doou!?9rXMasHkt#u}$u0IV zorO#n$*hGPNxYimcn4Jxc}XpODAlr@V-`A5DH8Z-VsGVf5Lrw4pT$~wsLwC$F>Fpn z(Zh^mN~+|yBslfnWie6sKxC&Tk{!#~GO;)KsH8M}77NlY-tQwp+~5VtYX~U+sU7>s zHc3>%Jzm!oK^GJd*MU@%Ukrw`-{=W;MJ%1UDVm!~?KBf6Jk8UjMx~Gvo&$!}S6 zH@fO-i}{eou*6a`XyzmW+1Tq8h62K#iqh-C8ZjNwdodb~~r=y6WvA08; zX}V^YeoXagvB;o%%$-$nMbNOeNN3Wa^DZ8>FyOl$)x7l2?O`!?28Zprnr%6CR4iRwerxs79J4{NWXY zWjd5o2J+G!y=R1WwNV5-`^Y()gBXpu0I* z0377Rp+2frB5lBl15@q9WVwUgl#pWCDAHuUl8WxxCW;8I6B0{H+lA~qr3?*M*KEZf zG&x?WI$oPi3|Vr*UzSg4jK(=%J+-QM^k1s1JCP90P=28siU#~7aKWW-)(xBFU`|3V zU$J0kTgxb>6~c(pd08d9I;70D%~R>_2f+mV#Te6sl5pi&NahpZB)e!%92*tsuMAOT zfHm1PTk^KnKhv;J@svz-jAzl^6eN(LK9D%GKd+23l{oa|Becf~M6#ZYU0d-${=)Ia z*(F5xD2EvCP6(-zZ=Y<%Mt8)^OziFI(2mq_TI`320t17l1-sIP z`fJ86A})rGqxotZ6q4iD-h=WX#abXC_5T&@iyQSr9Q&6pcydZqE!uNZG7ja6j4|u` z#SP)CWGgTxfny`#=X(;#i%SQ@t8phDUEZ9*!ihlV49l6p><}6i-nTk1eVU` zG66xs2oOKwL`F9pIj!)Io8r==6}AJh8v=oEJzuVAsGilCo(*^%dDT>V-s*_AiBjS) zW$^gMZkSJ>_uQvGx$jnY>RI;ABzgiiC{37D#U(7vh7+ms0px|Q&N0ulC_Gprh+ban zU)%|AI2SjONo|M#ihcO%356WgW#ft~WaHTACBg{F_^l^=(+ORQQutQh979c*=|L^> z`QRYXf`-14;L6n&)6_&amAD}2FNJd-Igxljr}|i~Uc`<*TpS3zyYam$^w!+vaF|+g zlqpH`w1~kdTOxJ*l*{9Zs+F5&0jp9BRTR5h`_TI+CKv%F4DYq0!Q-VwSNe_bpOJ`$jYl$NVbtd<`Su;huxu&z2F}lbT?+V9=TEN}FKAZN@ z{ZKiIH4=i=z-bA6#fdZM-jQ%$0PQiw!}4o98AIpR(28Gfo7qAg_Wdv<`P;ush3PND z&>bOU9eBVeq7^6!`Ut7`NY`C(i{R{@P?JC3W~J;KW)uxLV!v!r!Av46%o?ye!Prf- z^MxCR4dhn{>;R-B+wnPLiN(|ZoP<(k`IC~=T z%#89htx?G=XE)}_*%RX(9F0nAU1=5XMp-Q4a$%K7(R8?S(Zz^vc_TZ-WRY~E+0xoG z-Qal&VC~3Lv(NVV<0)`!!cTsC0pH4{9idq1?(p@v6z_Zg!wIIhNi=EFWw)7FH|mr8 zpca0&kACKoVsOK1H(GB)q2<7{XlBi$z3f%ZjAQcB-SWL+vx9nj+ZE8UIO=(9a0~CH z@4iOUW}#jz10d%(q8VsG7?a3EzTjA~scLa{0(V$vu^puiF`eCmh;J z4$0h`Dj>l&V&31$;kkdy?V!)Ts;GBorW+J1TvimrPfI zu|BrS-}240vZGl)9cjfwjYMTm|C5U1pl-%ubK7XHp(P!ONy4aD*}@LV^n6Rr()t-I zXF|ooH7ifP#{kk;1jDrynbiex_H1XL$QRi3kY7??qD_cq!<_ctLG+oMPf!yt7_xTF zr3u{u5I5nkVBg2Uz>9a8mRGwB=XrgIDby%pHk;cpLQJP{MKx}fr7fLGR|+jCy-K|V z^Vz-Y$PEksE2|b>F`2e)^C-WZ^zx)1?hhjUV2csoX=MiVT!!7W6#wd56~r6}iEYsC z79Gqgr}?qH$-h(cVMd`|b4?^Vn`S%5xyF|RtEe8*;POi)`evGH)!~rcAj5tu!-?x* zjtZKr=0+|=$YEUZzA-}}1hSmec&IdZKQYp3>7qxpdItOTbk!zbLmR)_9D~I^i1z84(xum$akjSl%$QhoHSp-x3CV{IaoDdI<>AUWv~+o zFf7#B+$0)_O12>VGfUJ{^+?wnGdV)t%uZHkZRnol_;gay74tfLPJB&K+6p=UX7Y_CWo1an!U^mD%wY zj={RjZf*VfZCbA@TlTp8`FPE~Hd>X-Fmg?cs#}Dz3xkrsDPdZysG|rEuFjAibwt^4 zwSQEydtklpW#X}?{&EO*A+(?~X@}vF*O?7Az?;4vRL|QyRxdljeqLU3R>5ZK?ceYH zjsywv(pqY{I`X{jOm$Ml3{NGYhiY3v=PYMqPc!GyY9ch_nTL`?JZ<&WxG8m~mBN3W zuu)0eT>yq({LzD~Z7sWW%4}H*Y_8li^%tvjz74M?bm?rj7OP~R6f$>d|4xa(28@%P zfMe%9=C>l;n6wfv&=Er7FX-vC23k!M$VaZIM*CqNEuQNweqKL#ACdp43g_RbmHk$3 zb%y2i8fDYNFJSj?0`34pK)t_W++`{pI~P$o#pxZgYEoHq{b3G;&CLaggKII16%X;p7^p)XE~)MgGr`dg59F|0k8NB` z*=s9XJ=R|xrY)sCx;kFdyvcfIy%$qvQ266U^IER%J|4IeW^`ou>cmi4P2-?GM)-+6 z{PCMo9%Jp-JBUZ1G8&^AN9I`WEZ|U|a;`p_s9Y>glt4H=lkesG!&u-^xSYjFL$ZAv)0h4h&Q|2z1%M>QJ7wC7Y)ARZAh`jeRisVT?^|= zpa2dN-)Kszd>`&x>rsc4?W#jgF;qscVk!ZDbawVwAF7R~7;+ z`{kPUt#9@%&#AtEEJNA~&9zg{vC5*iS=B;N)!k+?WmCIC@dQg9|LJD1>&jqvnvgBw zOXf0_s&f8Ys*1Ww)O|vYs|9pxz%>k{;{nQQb;)6VUW_9bVj_&oF;6a`;%COmw3>?d z-IoX&am2L@?eM$MqX<`rDd>}Qv=H`3ylA(b;hu%j#Cg?~`-R=3yASPt5V^D2Tk~5) z%!fCYjn}xBSdo+a=~tXa29Y~<`x+7i_0AM;tv)CnUCc@8>p!zB?O8$}KH)<5McaWi zvIxB(uyC0N5?mdy>2^2f@(&pwR{%9cKOU`j>gw~wd8kgiGz&HQs5BKXVNN72qaZp(qKM6JAo zqwHNz@$yikR9p?#U?r#L<@WbCO_ed~n-X=&yN>?qRW31%b6wuHi;1;W#|vrMb7zF1 z_5 zp7D-;wP`?3>qQPGxVGWEXXc-m-@@)KB*H$^W@02sz=^pwUXVnfd#Uk_xU$bvFP085 zOV#|Xk1ZeSSTqn zs@U7<*i;0d+f<#7#wsHtg*Hkp#i+jEvE4Z&xJJ>*#d3b*Zdo>VoDRx9L#{T|)H(Uh zrm!WyArKrh&)}Lkb_6qZL7+8q>a!p7=K4^su7sBqXB%TRNcy8Qh7xqy6ozIaebH4` zOjBC`Cc&rvUQQ=_kEDtux!EG&?0#sJQ6UMj;kw}iD0-^0g(}5efga#wg|huuowy^9 z#a742#CN<7X=_U)AKV<%&r4eEO5WwwFSrP1+q-aeO?6|u4Qs-vNJRjgBAH=knkLU4 znWv}C%eI?lPWs%>7FO-pBDWHMzozI~L?X?ZwaFWsbS!EXjr(MdPUw-SlSKKqVrC+< zJ!ei8h2p_w-)?=fwIFe}F}WVm!bqxA9bJhJyqYOzf^sgLdK`nqv#uzW_DQiZX);e- zNxHzy1xF{P95~^i3?-2+oai=4+5S|*NiawNU@a>_pevT?79zDOs=o7|$H!|GvRtLT za~f&+$!j2%BBXRMGM#$Xc=?&y>1>c1Y@sJ|sRN?#)E+_9GYt;J;Eu;eMTrp62}D}M z81(wlL}e5s;1*F&dL_VU&J@6=$dA_Kk_M0!jrDMDEUK*D=gUK~t-RQgW!m_FGtUhX z(t<+2Fc8K77HZI(#>BsJ>*}uQfV6Uj4qXsJ<1NGhN5|)j8yWS~#L8JDqP4M7tx3dk zJLF}Ntyfhomi(7|t#cT)Jz4e8`D`A)>Lb2v$xIr;tKqCBR6-yIr~PQLGF&g-*rm>N zXz9EQT7%J|m=FM6t(iEY|BpG)Jf+xXmJS@6S)sljD{NeX@j^50LUsh#WfWKg^v5$; z74oDu$SzOcS$IgMPUjYbZ-s=6aeT~3zkB{Mp-ywU>+cMwZCv)8i@zlw=jZE=C06Hs(rPTTZ$oEyo)-O&xIkHnsF~Mr>af9$1IWH138DD*_|V z7(XA2p3b{1syaFoRt$ZiZLnw&vm&IY*|q679PHK4otXA=t5{N3a5h~41bF31$fZUE z1ji#-qFn5#4qmuq`P!yn=K&@}hLNETVX_LN^|nRBS8J-S6wCg*LAyhVzG0!TD?aBq zgFt35Re!ucjPikr6B)Xr-OLKI;)uP5q_@k70={V=EfIZ%N%p;tJVX}f}! z5Cf4kWY%%Lg3htrH4=If|F?RBDaI*XXlwXmcSl~~X0@m`$nY2fbSM2K${K3F1Ifa=Hu|IVu%vDTd(hGagHAY6^NxNSR?%n5Ts>aq6Y7G2R zseeV!7_EQ$>qgyEH5Ri(^$L`n+7ra#rL|ipz#5`KCC`*y%bRZs(}e0TtqBcvnu)Kp z#tun!Z~EDQryj5fkmYMdqKd>9+{Rn7xCgNX9|=W=eZNE%!>|`Zh-grt+NE9gh=AU= z{OO)G1J@T9iLH0|rx6|fUF|v(NljHmSm@(#GWIH3e5Ga7F6;&IHLty>3Z`-uuV@k~dNrn>=*9yARcREZ>(wDods zmata_Y7dMheE?hzB16~u4gDG8TFp3Xth zl1vRDEVqCsiR;vjjX)@W(~36jx^#kP|A!Vr)h!q4VWF&&;lzTgDgR{ETeg;F4nd_; zJmV!4vpoif5B-t7$Zuk8KXYl632-c^lSWcen1rIuIkAZu8jIe-+6FkULWr~TT+Lzb@hXulZBcEAV?k^~mM^rhp1eWtc(*k0jhlJHk z?WOf;Uo@0?AF>I1JJCgZb7qM-B$u011o!({Y5yit=??J)le~c1M0`2wNgO3 zis->B-bxLUL$G((=Yp#q*u$eHMz3)YBA}qNXlEXnc;@Kn zk*pJF{Qfb+WlL1SLMxePwwI%6=O;YP1eu&;Z0!5)={l4Or3_uT4N9sv+B*}*18o+O zF1bxJhL`+HF+LZeDIHeD%6_h#e6jc_GD-FR0}+t`c!Axk3V6>J@b1eY;UArl4ngvr zCJ4C7^dLmkRgOBP%z*rk%=5XZ_+hxD!?mNl<{1j%5g>G*9B|d_uo7Dl=H8EszrAzx zBG4D38SOelHX_3j_2w^U|1NMU7~zwhd0?qOnqv&K8@6&r$4wy7^;$#d;dm$DcSMRS z0dUVb+q>ISBvqUDt`CUD@-0E1!a3ylh*hR2lEG{B53-p!f~L%_hnlFD6wNOOS4{(S zNLb3F$u3m&T$&Z{-=x9~JB4UI!!X6m@p#)syjjJ`#QA8(whHV*vNYD0_L7Y)dOY!G z%-lP#G2N0<&O_|lBgb@3T06X zAkBB7Yo#%5JrYM#j17gcWG9<$sIufY-LP7(R57y8Pm7c6!$k=il9_bb=k7DWf>}o< zS3S31Cq&p!?sjoR=7+MC@c`hOE)glk{HPZ~;f_d;%M$}{Ha5P3zR$3hR9P$9u+^3kNc+v+;14s)y9DS1N(IN)q5148d&)Mb9V8Hm26SoOiitQ6SpEyL&N zvaY0LxIad8kV+i2csP#+zGA<7CSxoJwD&Sxj7p1(Pq_2k;87hhYonK z7G%!kiDR2b2s&sH6M@3fUcxpzooyXY0*r?gN<~46fmwgc7bO!^h4>xf{IeZN3^}3z zbe>}D?55LY6$xlzv`B4Fvax5FgBTut9rgk_ZFQt9_OzOQ#asj;YBif13^=#mQ> zzwPSfNF@sT=8Pmadck!O!o+Vof7pZ5{;6*JM|;#%L?P~*Pb@)Ef+BC7VM^FlL9V(& z#j(&qe_aUu*`~ab-7xcwvK7+g`3sRG6N45OksGcStSJCqWT4d7piwMI!}E&0&PNS0 znBUgB`PK6ym$x2Lwp{%Z8;cvGrdId*_-x%7ZEG{FhdbR|=Z7OaO>nW&nD4@sBO5ux zA6akEqJs3ho_7Dc|K!rkk3zJR3FcBU*CR=>`$5u6TaYw8SGjU;>va9)Y;EV@Y5b{7 zMkAc@(#sA7CJF)d`-@kCloVH(zB_jCyhk1@}tc($U$O-=39q@oTr(*12oCtG!jcHZec@_Oq)ujrdulk$z!K z-Q3uz?Xu*@NRf$ypB2NkNyT*lGd z$_3ym^?P0aRf*7r|Dn09VkkKN_DWOwLT}gPW(D}{|6pb3;I3;=VBx3W;s@MgL2XWDhWKNrQc_Wp);?tC8(pXI@_th2O! zbN=)q!{TK4X)AY86Z;vx-~LFMH@yvJq+)IO;&iOBH#0S}aQV_$b$yBF5#4k|=Y5^h zshaVMiR+EzwLxaV>{lJvytV&|nW2Tf%KwVLQqF7sH1RXY_nH2__7Dk8 zr75+3?80ik#uXw}D&EKWVhZ~n=zUr&tZ(2cP5+?yzO2pCIQnMa?)GS2P3)}w%*G*- z9vu9Bo@V(WE%9)l{0gA<{j@8;9e%Rdo8|#|-C^_GeACwcJu{e1*uRb@x`;A7vrz8vuSHtC1|;aD|S;(KuUYk1<uupdGjfA(7*IXTw!#A%P5 zfXoJ+|!T&kqH5zl=L! zemU06^&C0JS#3r#`ms28PfkMvFmC4!F(^{ z=pS5x1pdt~PzNwz|MA}jhX3a1H~-;V{qIbi#GO^y^V9he+kZat|9>9SI?HSCTC($* zdwqVh*X_^J0>6((|EIQfP}mJWB{DhD_&@RARo1tDzhJ??U!48seE*-e9y(gHEs&@m zj&TgZAhLUQU>m;XOn^Fks0Lo{Ybk=@_l?2G#q^0#UH zQ!Kd&nVu;TC1@OZ)OxulJAsH_b9ItNo`Y);(_ku)3YP-w82+-~*ytv;Wn8yj} z-EQkx%xYkJbSt^l`@DYcX!Qg06_>{P`e{{+gDru- zkP)Mj3jU9XR{&VAzQbnbFJ@ho=jR*jKHqOu$tnXL_E$UD;qP}r-o+Z#0RJl`2|!=m z&-%3bQ$b|MAKcFxwg$40_XrqxhkfSl($CMVcS`Qf^IHV}cv2(SUbzcJ^Q=nfao)%F zGtvmtpZw20P^rI3DEqe5jKIE)3@f32Irmds=!m|%K}#BkSnL4^`29vH18 zwNzuFx73d&$1~?C)WFLiM4daEbwwczlFh;~Luew;IYY-XX=>`PqWqRB#*fB@rY4Rs zWvu1rOr(qJT8xs_h})0Zy9<^gdr}7$G3gW~V6DPHL59HOuCRvoJD_k5a5V2*CEyd>^gssD5)#pymKm#!3rk8w2>7Yu2rF$BAB%s?YPgF2IHI19~UHFh_ zc=jbd)P0$0ukYo-Cj@86&6D{PdBqCinevzHe+uz%7kFG0vSY9)@R$*wdliFhSqZPk zrXZPp4xX2?q_FBbhp#R`mHD)@3xhG~;@KAO%Ktc`L`=J>8602cVqMzNOAMb1EU60b z#+O<}!d9yw-ia_KTSj9(NhREp=0i64uDl9K#*mMGH2ZyE!u*)#HjVz;mJ`lZ4s|;H zY7`6lj!MI<8O=oP!o*Kaz+i+zL8Bm`w%m7smg|}soA?$lT&6EH48C}eG-C!>0}6tG z=Nr6La5b`TNF0LbyCg?Y74pLo&eCpc5IzNFg;GE?@L~O4rkn&Ohm~ZxmGY%l#))lT zne!px-U;M5G?8lk(LFzPx=skLttx@6qT&#g1wH0ST~>g>n8-k52)gE)jrlHkFZz-FP{AVB3nlLUUY&9PC?U{LfGxW}hE=(l5Np1P?^ zTzZ9Jf`tf%K;rv^ROyfMbJWA5{vr>1^awExWY43aOUphFGwiEr3{b@}av^Cvoe&E(AvM(+cIbL@N?i$q<~FaJTEft73FhbS5^gUl!V z+xFY<9LNOf46*{bgPea{$B&4!_KiY#Ar745U85X2I7O2o9itfldBtb*s7J8he3Pay zM?=$()i4mwG)sQ6`<+tu7U2K=)9X~Z`)Q^0I??kbfIruBgtLC>>q~-f@8mNc=Sy<6 zriaA2>hihu{+=>NzS)}-$f3lc@F}O7jPeppYyh;YS9i1j`NK6O$v}fn!M|bt+FLr< zzH2v!@PqD@9RK_5h5h^ZB3w`WO%SfP3A}Ym4kX+=AWJ|O&o4Um22Q#Q)XyZiKfHS{ zrvEkUKNsJ3pVDGv4;*%*huFZ{FW%ZKwsH)J{bNRM^b2&*5ePgD^$pXc%MoP6Bp=wn z)z8>}TRFpI9+-6P#}FQDj}NtYvf6y{h2lm+g+uIz{Dd)z8TS$N2Xv_MHdd|=?m(j# zjO`6=3xy;8doMrDQc)IDqu=Alj#*MTFv>_+ODLmLN=UI&2`cl0Q&4HXf^nc?{pIzY ztPIo-RAB%v{?~0x{cE1yP8e`aj`0h@WJDqGldiC$2MRSEe&f}UHzOl(pq^w~?s^rs z<2I3fPt0{VYWtcL8iyO``-AlntrN}T5~}0(u;8gI*@XeOsZn?RB6CH6VaaU9((s)0 z!E(4plxhc`B@^!%^f#DY1HckH#rqus0#8z0wq><2?a}iDauDG5_MKq_%4}B~czztQ z9gwN#<|#2T0q6QUHLR0B+412$CYFVDjlXz`qoKLhRPLF9y^<#SX$5cZ+iHZ++|SC&H(C_G;#0%I>V@;f~y$_FfOx zl(QFIZU}f#Cia(*PyPd$^)YxixcrrF4<6I|7vB!DZ7%=!R2sP~HV@c%2kW0b)i1e1 z2Y!FqJSG|APlb>k*;Dppn)P3CbjASu)3|Y9b8~P+D|2K ziH9XJMmMVfpOC~#EIL!=8W8-a7#&VvV6v0) zk);R4JUq^KoeSJl->cYOlCmo4VKMqNA&7>CT@0x^a=;~0mDY^toz;>FG6&+aMwb&FrN#xMUCSXpnfti9N`aL|pDfV`jd;L0n5CG+wWsvs?zPge+L z=Y>|f%w9+1FVUE2RfqFhcpEqi16{(vHx`6OBP$E2Rb(7>#U&fg-}ipUGmX8d-$510 z{LZb9@{9Owg$kppSE1(H2}pwEhbwi;so~(3CSkwHG!**j)GRDC48TI?Plt>n2ifJ$ zt`!`Wwq79IE2?*H<)`O)@Gi|x91a}zId(bRp%uW|Ux&TDY2y3MU-EnV+D}?tXETX% zNPUQ&g-zgyzg$+iKe9n&i(VImlp@FL*#@p1Y_%g!Z^mQOA`pG+PF@6f=L=}YOn0a{ z?$B;PMc0Yu7ObSm$8$KG&!ipK0MDXx*$k!}DKf&6bu%(*8FIZgSw~&Z%y@k>0VO3! zc=SjWZ`X;3T+dQ^m$Jo<)fay^x{BcLNrIh^>epAT6r`CWRI_38`xfy>x>-6`5-P6D z9dToLLjk@D{kkkl$iJ-IG>vhw43%cLhkcjIilC=tGf%MCsZwu~1-PIcItl=$9`#N9mt<_}kga4?E0d#DE84a2uKCNs4JCiP$HoPWeEnh5b%rcNjp;F$(Q;~@jF%Nr)Rl7c2o1?RNrGXWM37j1 z_`3F%LM@E?JxO~mv&n-RJB(F^LoP!iS1M2x=;U|NX#3Tc_n|pD{!QgA{Ns=*|B>w9 zC-3({-3Rpb>${_f_mi<-W&UR+Y3O?k$|^1`gk1HUN@Bfve7Vw(lWJeyyIu3jIBPb> zWyD%@U?uque1Z&hhuLS|2fAe=aU4muTp`wS=2G`*fKCmeaJBvrmkcZDEK7ZB7H{$V ze5}aRQHw60bdf0|VorWh*9CmZKWJ`;?2X8?XbMi{DLE8E^FJ1e^c{Gr_Bdqqzr zMW;B3o?j8|X#o-9K0C<3O@1ESiMb!eVfFDWLdYW)xaP^i+tvZj5yZJc1~h=TWS zQ5%4e-Z*=WF&&nJ*!|i_@}aa%>n_({c0c5%moQxRS$}R+T)^X^+~nAcP3=Y}j1sM; z>nI`Jid$EwRNZe$d@b;Z!YkK@1AoC1Q zlGeK7`x#*Y)cX$}WM>Ir#j|B`QVL}WxSB9*Ye6o$;n5%G+27r7FUl zy(Lc%Tq;WB10@XR`1hH`+h~*}9?hhlL|8~P!v+ls%JTNYdZEZdM>L&<$ft92Pl8$j zSt6zGC!jxJ+>o^B@<>$%RW;5>Il8a8+?Muh9;c)NiDA3~@SiugKSgLxmF}WL1x!jI z>GHk=-}%jHG@f2vFOq-F>X&Z=^ZFFke`;9rzko3W?)>^F8a-j%Ib1o+-`NSQI4n4# zf9n}SnoJHP`>OD9D0l^(fYw0DA@z`ZFZ>;QRlt)~e}3W6vixR-PG*ymn>c%WGq|`P zcbiOKj1@nVx7&J(f*9clr#OJ#@*gMve6wz`64Db*|aEyj#UY^y{X%RZfYBK%_i_U>!- zUD5`^h+iYE=Oy92?sM-=R}lnT-CCU{ZIIFJd?v?w*FcI7pq7G`H7A9s*F{LiL>A!d zrr1hsufjaEvfrM*t5&xScB&yIG0DJ z+Ef~Ln1bWli5+zfh%~{!3WX@iYv&RCaTOrFdD+m!709#oE&F*jI4Zr+R;Nc z^RA>3&aT{%JXoC}d~Tg~e8etO3d3z)o|K&QQ7@`m(JB_q65X4b49m+rtane@3UKyx z`Ieb8G+E^CQbVStN3_$>vn_qv zaHNphiwaeT4edfJZYwBO`I&(bNcTeJh_`__y^#6W`n}xW2me($7mqpP-(e4_co=N0 z_x($WkU7vmY^q(GaLJmAwz;q$t5Zz*Em-p^X_rakW>FBAAd6}&dV1Ty?$Pa$;!BUe zl`*eOa)sgy6UcqF0+k_$Z@W0UhASvLEG$h(Jz@cxQ|l?d%6MA7aV{(ybAvjuOZ}N} z*@Db~cT885YTCYd3*g101Yfmh)!?zFRf^r0RujO1=ghZxFbJCNZ$ECB5~XrrIzRG~ z$)eAr=bW4^!+{ZZzN@eZ!m^SUecu2D7MIrJ&*MUa>Mz4D zDQu_O5~Ft0#9@)?PR!aw^7(T9Og8f|k){WA*wx)rh_RbkxKF-T%pGfAt=6_#XS(S4 z#LYJw4@~?$n`-t3hx-cB3lM3F@q@;m{VEJ}`H3M?e7p$U^2T4o`MwvX8NeYif?0aE z!|ZsDT4dh^Wn-E9Jpv=_bueo=@-&Wb=NayELv#MveMCA`*$6DnCheYVVnp6`t5nk7 zY$as$(bE?&G9J<{${DrsZQnK8#3`4MNR#rN)F z4dB|+^TG{lfu3;;Nupy}wxM`#1JCs=z>C*BtR$Ea$rZ+c=Z0Qzx83BtHHb_2Gl0I( zMXr;JPu(Dop)u%&UyqfUu4ldE#Sunva*L))sr>KIMt{Sq=qAT4=`M+RPw~i z6QbfAZ-L}#aLW~x4$x$uWPYA-Kh}IKVd$9M! z5FVB~aQ|8B!9PLznzWl72+@0k**mr+jp8tjHi@zcI_n&xx=DMChRQ)hQAv|g3?rt8 zo5@H$9TrPJ0CM~DJQ@ZGLI1f*0IoE9klr@ltvnnaiNT{vz7x4Y(roUxit+z0im$A;6*(uFRK>$^i&@h-93lli~Y?&1x3ElMVK#edyDHofs9|9dt)gGajb21%E@twUluSmg1c zfIbO6$$}?1Zl=lTg4&?j=`C_b{?7ztd=nBD{2%`g;Qv|k8#2o@wJu;+?y!3v0dsNf}FU;(dc{5YY7keK~&JJp0P5A9Jxt!k7cBF`GkVR+O!INer zr+XiI@Jpw@*Lo?rK~Cmq2^X6V6u!SJq)CR2v*iBPel_8u%}A?Vkp8;be#U1(Mw}cA z>yhD+Ex3P{dB3>L6e(#z7Uv9bzMCo({&yC|ESdxVaiQo)5#At^`5%{GNxsh|pMl&{ zHE4^BJM$jCWD_NWhnUk|vh}lA#{amRd4k_(nt1;!TR-2o)QTTY$%__$3V-mK@IUVPxy3}^mYupet}Z$M9`v3nb1X{N)BjfHkw^FK z#Yq$1-~E1){}vr60D5T_fc?*Y?}-{;c~SmyJpEcD51_%wyz@`kCau=BJ2mi>cF z!qQmXU7wv~jA+&HSP)lk4T4i%Y2(>{4^|YIWVCxunCS!Ffhfo$^7l#d)W=kh0ikt> z7j4N9+-Z#*hoq1=CoGx>8iWe=38vIVr)G$-N4bVQCoyEY7y*X3qFHdrx`vJBOp$UD z8tSrnD0dxUP_!E3EP^PaA3lfLaB#sa9IljAv8E1b0Kc|0cWtxmgo0wqF(XrDZQina z-6qn}qQ=DYY)!*S!4p3hqR>&CvE!BSXXBy1;vzY<_*J8n5JI7xLaT|Gi$)FEswXO> z!}y1V$-~(p=giT*|J4$Q)hWhgJNU;nnwWV36`snxA8arogT~r6)qqa5Zkwfv}+;;L;kquF*qQ%#elESRqawuaX?HD79h$KACfOT>IMF9 z|LGJrF_GmD@VAr?%e!V?H>E%1yasqoV)BuSC3CqkqGMM=##<&vv;5P?Q*~vd4V1@0 ztep@%k|tv3M9bi_fxvw1t?~@wYYwrx{k?cl#7@3qCeD+~rM)sg%ZsmadZ;JV$&L=x_ z#PVZkRR2A&c5FN&5Z3w+I^9cPTGjJ#sE=!%VuH|tbctzG#b-P+FSs2DPr|0=KSPke zs7Nan-#|y2&{tPDBH=8D*5*;?lu0Ws@k@P2e~^OzfN?A z{Q@=jI$hVHUAlScncwI&Ik3%(+kiFt`RyfODC^7Ja!S$n0Ot*}zTxVp{TRW&(z{IG zn=${an0;S|S+IC*PVGw^1w-sR!LQ^cG=*9JUhIRd>wTN}Y@hJ)Ofo1JAd~r3`c%2o zT!~%D#nEt><>hpP*6Ta2&w9A0Ah@t|1pEv`i~!D_`eaL2tf%lQKK+F!(77 zG1Edgw32@|zb=wzY~~lNEhh88Pgqb22wHo}?=#sDDF!j!LQwgCU(bHlWp9Hjr}*cj z1;P0Eaojv5p12NG*w^48xMtvKUnUF9unbF0 zkGV}#(%upT{ieqM845Z5&R#EWCC4jl-AO)~w;D6gs}a*K_+$6|2be@w(mp_dFEH~5 z+$vV@B}rTfd_7*jls_|hL;M#1cHi%aLN-sO?A!yT;C+1+KU}PJ?Y9>gZ*%i8Q8r-j zFx+=qI{V72+cNACfSSwu(s|G)9-Hxv&9PUOXZ8^=nGdkC@Ux2!(6j3 z@uapH%FH&g89Fa0_vA!U&Zs6=qWyAjJFBwafNyS!Ftx^yP?eu~XIC>-?3%3(gAYVj zF!QMef`{|9#Y`e+Dc`Y)uD;qPBLOc3Xh0=@THLU?T|ZvJJK%k0K7`w<AHVpP$>FVyTzo|%1rf7<<^RYbfvZaqhBINy3eBIGP<$1_3KaoQZ8ok3Lr9$V8 za=Q2k8$l8NTA11#^PCZxzErL?D`(7#5~$nqI2pXp@Pa0)j%7erBL^p%j_$xk`G#Fr zdj5BZ^WegTF>Kz$n=-w$S-b~$YB~#rL*bs(tnhrP{Z)?X}9zs_lPh8GFVm+c6wc1`ZiE1*A#%y zSc4EM;5G$^tLb4LngNI>Sv$xUCR6a1?@FiO2CeE{IHg6G?>?KJmtBIDeb|JUY76CR zEtbeJSX8+66Eq^<;B?-fXvx4`5GB2v6OQT+L@&!6_sAMF4B{r8_S@#l~EpE_`J7-^Fpcm0t} z=90IGSbSq>dB{Vbzz|= zTs7kHKATCFCL&u3s=kgY!m;wvNM=x-h4*cv>8>+eN?(DAY9JUgtL=d}4&c_IuBsG4 z-=Nk3*;?R?pXQZ@VCXFxS;C)^_cg}Ga-L==xxU%aprn0M7?u;V&}QWm4Wfo7Wm*%y zOJP>(c6}@4)~W@DJ@-EEX1501$9-*&kPp3~ai{|A^FCb^A$0DwbF zh5Q3_rNI_8itgC9jgD>Gwr$(C(Ve7Y+qOID*mfr!+upCc&pH2i@7{Oc%g8Q_S!>o9 zN!9w+npOMju(l2um5HGJS=k~$sX}9Kxe&+M+*J<4NepMYGQH@>E4Xv@lZrV-i#3(} zK3X_7&6}We`7n~Ko;62v{*ds6BXui`t;aVKkFHdZa{d!7F6SzTFgVxcSgXQRh?1KYkquxT|^#NptZG4K$`rr)J5-M1$O%>_ z_uAXIc}A(GCjuZiNYNa@kGkqXkciC)4l$D_S&Oi4HDZ*aDAh4_hvHhE=-F#8i9-WU z6pQxxo^U25(hw>H!Cou~^A!Y?9Uqt075tF&MBZUP0+sh^03iv?6%SRW!072E07hJW z_9$`IoO|y8gh>oyGUP&p=i}*mrdwzVHS99z3wv|ED2`Fr1*%JatsrGkZ8#a(!pyC3 zpKMAJYhf(3zEJ<%mefREjT0)@m(Zn$89l9wEuyQ3tFWJYK3lcd0F@er;Dz>Ex$GaY zSoPf?if~9s^M>O$u)h0EDm^pg5QJ6a2V>BrVRo_!`r5OFKcy-FW1UXe6SH3RKl67u zoK#-WC9PRZrG!MJSaIf_7mZL2uOTu$2nkQck6WTMF?CFt?;XHn5!MO#olK7fCN(gn zI=ti@+J_GvF$k(-xx7TuaHotk;+`ap{``f)1HJ(bPt08xf@H_=IEsZDn#59n*Rlzz zNvnj+GrF4hfF=rcJ``FM>x10VwCg=)JI{4I=`&a1&4Ds;@w=*71ib*yO&xUZ)zD3C5XsQ{szQ0={vg(9~_^e zn}riHdkqtE?cKD{ZB+LLkQ6&=@1mm5ph>yt=U@0_Bda9uaCIBrD%nOu+w5u*3b?YA zM8^t4W4cA)F&9vqL%v23{H`Z=VMS-PFuEW@0a-;vja#)bSNb#W0kvN$f8``9q!8)8Ll=|&Q`%&9THvUVI*n?!OwOgsIu z{JkE!Ej1ekhB969BFZ`VPk_{4GfH(=q)r^{OmGq7 ziXV~xVVj$FPjzy)1A_`Ed^%d_Bzcn|eKG(xSY%6uje}KLSQI&3ZX)%o>{(iPHc7!5@=nKEUji>352;cxv=rLwQdF=Qopu%)aFyRNHQ zqa(T~mk7z@G`{9``O!u{28zYreAM0+aLqb-1!Qn{%F`iQvBl*4sPMZV3Q&DQc0NB> zv?c50&TlBcYD8p*xFV@h$DI_NDv-os0lD+1}BMFmE3FA@Vlw5Db9^NY%h=c8(%gI2s4viS=#W@Nb)cC3+2Y^cXv zbR8`&X!ef6<3&hlxY7|Vi*f{ksS#$xkg$te%6KSh)nCg>B2ec19m>>VLM(;1`@Sz@ z;^xZD+u+F3&E^nHy3K;0s2E{a?Pf{a(sO4B>p6}cP@fy6$Z?rttFLxZ;=#>fAU5}n zYtU&u*B*AQ0CoVdJJPj%)fjIu(@0v0EOFX-Y=bIFaIlg0R9TElX4Xli&8(_PH~f~M zvl=^E?{#}wH?XB_lORA$#to*;Yl#-S&X%>A#~0S<`vJ4$!+}8 z1P)A}Kw8u1KCCm(KQewnQu6y3=k->79o*O{+4l8CldSGu= zK{$Td3y4m&R&8h%x?LdIlPk=M36uJ%!X|<&Do5hUrFKm?HgFtZV-?FyqtPbRz8zZp z+93cNtvU69kY<|z5s??{bg)7}zoNXRa6|n5qXCquuK!D~%x9Kpm{L>u=YyQh_=~oo z1MH3B&DZ4AmVmd+yyh?2c4~(@Sp$aXVWmy_kJ`a}Z0^&fK@}awHyTRPE}fV*Pwi+D z0~&T@`v(F8#>%%R6bCb+ZKzI_o~1Szgy=Z4j6|W^dD-41+3MG@p-{MnkYJ)=spub5 z7E9*XTl+0PbcZo@EGTsDH*oqu34_@vduV3Q}K?mg#Jk{WToEUz&gT;&+E$8Ke6uzZA`5B&{G1~o=a=?;RxV}Fe zB0CFHgEYc%z%qK$$KfYRL9A4ap)?qWOsr@Vl$0fe40KQMpABhQJa1DA&0(Dxz#(xz zM#cq$Fny*p_OZrWB!=?^9ACDGeLy*=^q!RMu#H6WhsxJYCP-E#JEFnEG(^znqfgHi z%fnvS3H}!1uQNey9=XRnah`*+9R_@{VB>PM{gB%M8igcS&RP;q454r2Sf z2qk%HAz?wCH1nv9cZgPw1W>nSUlj)WFyQgyQoro<+BOsFJWD(q>0}9e_$wM+H5HU*|-w?@CG7ARP7SpMG`i^^)Dy?sD zCjgLScurQX$EH#`hp9#iEx768p3SVWl+79UW06(nP=}uCxtGhQ%xz3LkBUc+K}=-S z9glgr(BkOWrjqLD2t|L@4DioQn_5*&XllKX4qjhcO4Qw`nDMG(=F`2M*f0Q5l*4_g zns{-%TjYCGva2Tix$`PMJZRX~IWr;?;`oJN zAWBb-)L8%#zSiI*KD**N497VPF2smY^}_?SNJ~>fvFv*7rb<8i8h$7o6^UmuZgxfL zRP5_Lg2&!*BiW>SIk%t$N`e|+dVI;-WWw_ zWNy~a)u7bd^k3$73@`!&uMSsC&JwKGp4qu{;@!tnfpHhbqU9NY|TyXY-+r^KD6jOC9+=ZT5w&mkuS zFV8#FV~IsLliz1zyNYYYqD)9g5#L0YA|*l3lsGOu;KE=D$q~2+(q`|^vB95SmQMWw zvxW+pvR!0V93p<4ur%oxf!pSZJS=!;>5Ff7DP5lk|GM|#)*x?-I7Ye^LVuWdhe8z? z3aixj0eCs`CnH`7U`12a{_tgcz7mC3uWE5 zK6`A@S~`oRH>M8GC;zFSk!+1hZ^S(&1>di01QPi`r6lxj8FsaE%&~zD z!D{VZXHUb5XuXTBJp3&oQdpeMpmiJ~>5wzlfN1YA@~VSy8->L-wxBO5WxK|qk@&et zO~g(({SWXEIf@9R3B=@7@ic}Jcn}*F#lkuLQSMMkOFK%CvBUOa294khMtot4kS2Bm znQ0P_O8#@@0_W6e0+YSLpa!F?_y?#W^vGIzN=ljjakIp{G^gibtUxvW;0l>?^`P<2^aN&-00a z)IkJs!uBjd+GZFTq%bMM>-2A_)%e~BCpiiN#Gz z)CJ(i)!q0+_qquUq(Lkz>TSB2*W|;eSv;_WK?YUZzq3dPLDSXvZ2C2|L}N9HE+w8< zgMSLNf7OUp}ssAYB4qjSYCsCA|B3lUiZ6QXigiFcLnb#&(^nTChCC z6^=p|ekQlw@-*n7moGsDd~!=*!(l4b9fg<+b`lxNB7~A%kmltCXJT~|y*w`{{^eX` z)x-eTRs>n_v*6Q7eUlbrwobE{LrlFmxm_nRX;XZY7yNC-MfYdu))W%_${R9|py$zG z?(OE2<(ho-&r^6hai9d+^GR(FLt2f$?nmehBG9RP7Vi@$ToS#vJOoIQDAmvxeqIz5 zes|A+Jxn=6JeT`uH*3oHVckk?lc&!gx13>i&G}aDl0co6Y_o&nj}q^3jk#^6O0p4z zW_9q6sMeYB=Hn@OuCDCrlz1V0uJ3GyMnq8mMXt)}LU`rwUf(yLVPqJiE7=%Nq^pbI zHlyE5RDn?G$=GYJ+;8+-;dikl=AohwC9&4VCAw-bd1WpFM^R0oBQF+L5KOZJVu?y8 zrakuEhRuq220CXF`*X$;*wj1}htgBEP!(}>t>TFLbL9h!G?$oD?r=2Bi*S{2I8Bc5 z1E|MtnM-IR$I#>$>0~_~0{=Q8mma7&x|_21r)Vt>r9$@N_2w@SX3C|fc^mpt33qGX z`>2Eb-eCg^Xnxa4RR`8Q03TqNgoe%84~3x1VXSVaT6oHHySI1Jt8*N9_j$?BoFQ2y z4!7QHZIXOAF$@-&DN!zcjdRf<)f@PXueiD~N`Q9#%4W4I6ldj9#h~9o%|9!Gk zuOZw~D=*=NsArfr=EP1U&9jc3_WPiBY@^~*iayFk^2=}`;clee;BClL0m%vz_q+&* zAH9n+g!r)(hFdony$xr$Uqcqv*SV7*-nJ#JdEp;to`dWVZ4UzE!!rcJv)#9sjP-Wz zSyfK(Mzp|)k2*)?T?jbk3m(ovL(qP%F3WFPCq>NaNi!gW-jZdcAIWc;QM!`dLdF`) z-=w_ad!!|0-gID(%X z597TO77~-o;%knJ1;|qpR$BAYag!I3@rs}tw|H;-py-GtO9VL+_8^|@@%#@>_2X=j zNP?#<`OWQJTktSySSn`mV4~P1RxUjoL%0OPXJ->^s4_G23CJ z1>&36(hyF1`D3|Lkp^*oCi#RhG=T5Z=Qsy3^(<^9C?Xj(rGh5tmKdP)qAW^Fqj=Z;r*4V+;{KG&4S-(@Jn1RHsfimXG|@=UWSTEa+Y1MCn6htCcc{b zLpEn|s9W~l@o_q0q*El~3&!1|TNswX-l9?tOVo`YBW*4b#>&^ocj1++h99yNi2Yj2 z8E6GxX2NW^>$gWhvqIE4GJ$7CLieMzYavq8Z>j1FddOAmBM4f2 zOnSkrc6cwLloVgD#MEye3};0Ukdd`dS|+Yo%7qWAF-a{GKLeyT>IuW?SnEywH5FYIV)W&ha(k!Zi1XeFCeiGV`hL*V+?i#| z9_K+UX@7YQi^vxrc?0hgUJ}9{FK~q($hF}xoIq|C*=7-j@imo_kJd9%Ky)3Y>J;_` zkHiu3xQf6Pk1(Yq+qC(D0p-NNCL=`VN9)2`i@^+YcXdb{&1_rPv%~D{3Wa)K_x^^A znfu|FP?pdk#HhYP$$%;0{#sv86Isyz39JMwhWYT1qx#4TbVHf2>wENF)dZr7ZVM$* z3`hoK-zNtdJ#GmChqy)^fbT+@g+%LN-L-*t$zB_SXXw8SHP%#BE$|u@!=UjEqzbyg zejmpQq5y)N{-Z_%AOV2-KffRV00aP#5C7)_00cpX`?O`Sc&oz-LWaz&DKbuA?>*l`o9S{{`|p30B5OiL4jnWGN~;B9(O;S@1Qy#PN?McwfC^ zF(n&%EBO$JGP38fCqsV+ef9Thd@v5wRbC%s(=p+pbA;c)=F1hY+?pwDrN1feVk? zI?9)jA2GW(Y2cdtUisA@#~Rh6*v2lDl@UFe9w5-W92(-#p`d+BXkFeY>O}T)k*Q%F8Xv5B2s3&r2*QgBHL`(ABRJIZxC;s1?Iqy%)1RswYzVZgCxNK|WR0`am z*7#KC`#g_ZTsP4-&eA1_-eNoG&WFP~B^uN0@X^d@I&)hxCEusoZWhGoceLWlUw+A$ zl(Rc~@ce%2-AZtns2$&=OD7e)-|M-=>!D#)^wfOpVb2+64bs?o$F54JzgcSAx`|d* zd!P;Kdm$<|VO&O9Ua0>_TfCktqm!Q96-X&aSDrdQD4fCUY9?blPAVP_uye)-ty8WI zVJKJaq9b*d5}$zH9T#1Op+~n0)`-A9(TB~kCTPt6AnDON|edP1-kwVCOb6}hLqEpid9sV)9kmQ8&fXf8)E3b_}HK4Ec+B4NG>4`Z! z^wPRg;p%<$Erx{nF@yl4_JWO4pN7lNd-MSgXVTEWWggixA?mw%Q-^N*ruh+2o%teN>gd^&yIMAWl>O=u5 z5zzrkWG5?u=;$yWk6=WW>xVCAlNS$(pVNXrvEJ_A-n;|N_TKM~=(f+^I{p2C_AIPp*h@bM;9_ZsLee6uj2H~@b%FrTV1L})f6wOF0RV*m^yvS5 z%mDy4zzA6Q?QeEjg7cXBZe6L`_z)r~cjPiYY@Oeo>*Oi$@J??Lc(Uep>I>w-<5p3V zVuffHoFZ(^PU|1Cj{%`q&j>_vRMERGB|;o3bGqKKeBdmBE$4moYLb=MWzxAjX_9W& z4r@oA6DpyoowDz>kOW+d+O#XTzP!c{yLB+FR-5?Lzdept$IRp&E9JkmbTvY91C7Zv zn^}(@6s)jr&PT%~C4T9Jc#VHZ9HD69uD7hUsZp?vFy7PR`~1>8%VdS&cZ94tRbo|^!WWdb(fqz+y*m|BUCG2G8*DUyoWd+xd#F~xLC9RGE& zno*$mvC;9OP4f$uf4%D-EL?GlUbmXt!s3(lDfh9`Q`g5zbt8Aw&e|Czt#lT9ob(%P zi{);ru#-mvX(^kA#|$Gz{H{YUillL!7q1_`b&SjT(?V3eHdh^q?{V?->V%XV9U)gB zb!uQakB##)h(lSM>X0MrR>xBsU3fWB6+$1UJ-yII-`>MQxaf`^R=Dqy0D`B+x5i3h z;aJzyfHD*K0kTP<0QexOvxUNDF0>TrJb7g-^oV6S!Q^<-Nk#!$e&HhBod(|Tu8A^a zrx7r4UAO(6d;_DHZOV^EjiA2VNzG6QvGdC0Z2_`2iE9|{?-Y%j*Qm)Zc?=rnHoDfI zf!M(hAaYL4p*~43K=D4`Ho=`q_}urw?l-rY5BJGeo;^t*VoX`$pz>Vg-0f2`qI7^8 zid^B&Av#t_$ZQDJ3@-4fK$zq;gO8mG@Kw4u|5^_M5OfWO{Ncyhi!2p}JR8<4 zrP7NG5r!=Hwf7an6(;CpHjPMjWG=7gJoGteKrm=a@Va&A>c`nh^v^f$g)L&qdqvC4 z*}YF`xm4bJK^W`#(HyE^$oGb7>Eoc8yi0Bng6Hc6A*xO=s386uFfRDct9?g>+^e^{ z?YsO)BJA89{)c|R`)9)w^T_!C~@HE2ut{44#5c1^2}!oxnzT3 zN_S})v<4X2a7T#^O#TKe4p;`Z;Jwm%DSk?$eEl3ak}`g}V|-&w;^>=uES|cW5d`hu z5PVX6+vp>E8@)m?TyN*^Cn0xVWFM*XkDF_57Mad{IPTYB8u}9v_5bq=5P!?0KatTN zUtt6Q2*LgN;QaL!PkJd4^JWn>27XozvoWAdgEVlY@Po`!1(~l(Ww71nK}OqGu4eAW+psaeiu894Qbf zn;Mdso3q9Ivj%z7#Ie=n=GAn0I0vaGCgeeuXU6jJkXgTBhZ1o%j)px@Pbx#Pn@a^j{#DqZjkyKJs7d+wv}7Q-i?)D{?93MzPXrEkZ*Nz>!5elCSY64aO4vWm7a~D zE-ws3>HB(+)f23LY0}bYwjSRoE9FMpmw*!452d9DL0G=TXRm0_nBLflm}_AjO@dB= zA0q8SkX|0XivXsi=}JDHXbbY}Lh)SkThn${K#aMCP8PZ~TLf(mf6yO##o)Bpjp_Rv z)+urbHYpygpom>vdTp~@Hg_*lF+tewtKLm^&9}X59Y?mCVx=xS~+FPtd_t zcrv@)xbZ?>?`E`n$iaB39eca!q-jQNl4yt;WoOu7IR4UokjqLz?nYI2Su2_aRpW{Q zA20T0n4pZA;OYe%53nAXEo>Op^~C>d*8%-0O2qfP;c^Eg4gt!<2ns?6h<`?*2L>Qn zoE`i94BkG`g-ID9)U+P_c9C8mxG-f27lxT zA;u|Ect-;If(Mw3pFMt;3i@Xca>ohyXaB)?1PwML@_EPkS%6nC`+^L7j}JVSuyXq> z7R)0<;)D5pWcWD}NZ7#@AGkR~jkQ3;@%nKPLC1adCNQu?JbEur*M9tShde|!VLWiK z4s4(#(u^|L>BzJ`bv77ZVAB+oH-9(ML(Ulr1^`F|yL{t9TKN6;!C&^0KLmw;_@t2M z6tqJWkO{&Q*l!(h{tg25@&Q(kU;hM^f7q`;jc*Ey zUk}P%Z~A{}^@DNe_;x>;8;^8;X0?3$WMEkLC}M6v_sZ#QVF|2=c#x4xc|Vi{LQx)&-k-^qwlC$Z$lpJ=Cz8L zJbxgrw7`mrcLua@{5MYm(EalXe-b1?K>ZgJq=&f-nEyr)9DiKIR{&rZpn*i{g@5NM z90m6A-pf-zm1ANQ%(YE|jlEVzJB2Yujfo)(E=lPXK_BICBKGhh3e%&C;SDU{sl;)1 z8;Yz7@oLB*h!8xTuaYn$@=%4R!Avm;Yr`=kK3GQpDG16fmZq7~&&B#HnHwx(j_ zEDCcng6?fiEd(3^g0F&L%&=d53ah&qpARMZ{0P{mt1_P})tPTFoR~4cE>|pwGWd7n zcPF$Vs0fY)yCjY}4CiT=t?93r?Ca|W*zB<0m)@t_=NDc;Lv`1e5#|u?2;FHQu81k{ zt?AC->okgtXYY68T;Dd^RN!tOp>~Z;P!}qkW=JILc`Mj!@<*X+E;0(3!Efr~Fw+Y? zE4N{iLBWpom*|oNDF}~F>IvT z>!PA-CCe+{>RIdmoNXJ|e~|3e3s}pD~oI31y|K8?x>9w{y81U^D{)@2$ZD z%sqlwQZa*L>-i`l^2d;l!9%iNr5}JjBJVu-4VPGwDwc0$mr?6oJ4P^piQ%WfNSy^B z5tNH=U)XsK(k0Lb>p)O2Ww?DA$-A{G0?E2PV${>`D+O{bGRslM+nR=RKd66y$)9zO z_@9li{GaO2#%TUieFgd3L7J^)g*kkyboVdwUlEh>hZ5%oamHoJKlO&Jx?N8f4|BIG zb*gY^q?+sTEY7jP#V_@{>REzcOeE@{9YF5437(D>hr^#6hLo)S*fg}n%%DZMB9kd^|nIYvhy=Fw+SH>!M){+OQ)zoVKZ2QF%8(x#3^wREvZX# z5K$g`t&bdsk%#wM1DztSw*^}{mi+c~QqX|(nS&qGTXx&_d7Bj2`%7^3^YVS4!|gs0 zDFiC8m5P_g>4i^!bDI(K2>7zKclLWiq=X~6w6Zb>+TYdS8#R+@pjML<+RK^F5wy$u z(|F^%(CdV%B+47v>Mc-f;)qBP^kZ4DKKE$!d(pmRK;h+spfXngVSxJ#^XBZhy zTm^0{*V|r^bLFlrU7|!F4A>b+&0lrwPx$w5m7D!%<*)wn^`HQN66D{=kY8wp^_o)( z1?8YC-{a|~noXT-m)>RokYZ5BKvr+R!7Zh{y0A{m-*D>x@~X0Gchw!r-@ z<5s>ZZh%KwNzMQwxJtoOhBxYoz~;x(^?C5od7Z~uoF0Klvq9r4{qSKl@te$tG+(y1 z{Dp9BO8YHbY7ckvyDCZ@U5pK&GAf8`dCIQiDco7J6?4jNGMS$iDju|eOSe>-3No_0aK(AM!S|(f^^88(M#ecZQc4s!}*U;U? zu3LF~X|d?XJMC3s6Jx02OpuJO1QMu0u(-jV>cZ{}V&?;aN6tyYm1akFN%zOFWG@K< zXUYqm0-q$~fe{H-!<^~$cd)M%UscsnLger{WxBT?FZ@c%u-hfQ@*(b-L=sl0`R;zA zyanh3Gj5YtNWz_)0?y-g7IXc(wLQgRAQEgy=PA3q9CgQOf^5Mxb)m$yzokYtml}SE z$SMjI{{(ijAd0W~QMQsiY>I;DPcRA!FHon8OUqK*vneit!**^GF~EKM0t#nBRAnvA;C?_<9K45f zHh%FNO^s8;)41WnGGv^P{zkhXKTC`=NrgNX*egQUGrT0G_xYXV7L-O9uD8CT&VEmT zgM-^XBTk|WZ^$^!mf|XYZuxK5T|&jDsdg7Hy0ih2+=wm0Mo1nVxT^=-zabs-iXQ>Wj6xuuI%Hp@OS{vd=k=4p^o2p#^ME$C zaZRG?PzygtYH9WL(LSZY+s(OSIM}11mPvPqr2(fV_#J#U^YF2YVV@%2f@WE?giC(s zRgU#FK*JhYoi@BA+iIz`vkrfY!qKp+(5S>JiM?#!xAwsY9^sC@r^t@OeFHSo@!3IO zjgk#W)#eNCZT&=#o1JZ@+$BN_4##2{OI!%?4Vlbdm(qk@d~RMy^E_@7+E;1sdJk5V z7hoX7?NPa%e6J~npFsRP(yTy}68HSU@6=97Gsoyl8d3LJ%|VF9>`-vAJTylK(FfI| z{`|OT>se z1S)C_IVOi=PiYL-mRyGBt7nG1;s zD106-=ReHIv)Mppb2NOqLNDQKkJ_6qZBrZX1Q9~!#JU}P{N*x9R8@~p?_n+9Ti){^A$xtOr^j8&zz%-sb~a8Gy% zm{dBS|D5sV38C`&r%-1}hI2?qf@wB!z)2lx1!!h{|X#f*d!!KM`U znIz8j@nu6r!tYS!@j@!ixI%JJm0fP0svp7I6>zW2?mbYa=U|a%uqoCsfL0>507}jvr<`IKGBzR&rs|X z6*gb+msfBe1%S|EzB`FVG~mZUc|wx!? z^&C1MToOQG1PTD*1yHY|2*Lar(hm**_mCV#0pRTh?`Xg0tYTn35K4dKs$mpQm&+%h zw+AZ(=Xe$;e!{%Z3M$sbzm-wM8xp^)1qNilsy1UhdjgLU7Lls8o}S*2!o=?092w$w zjw!PC0`NXUJS)mheuEwy5Oia-Nn)67xoclrDgFos+yh|$>_D#nY(_1x|NE1aPiTnj z0&A;2U%jla1~WhFQJGmMSQZPsvD!(tlaa9eBPjCZWRyqIqM_reC7vcTTAX&IC)b%; z?S#1T@}ZM)v%HY{ygVTplp1pLGFBWka9RPJ{04_cUBGoWyui}TeTZOckjrDI-I8U* zbKo0q0%&7+n=R>Ye1E5w=(4;0_-g{EGJC$x!WdLPui+M+X^gdMW-i6WiTlQFBy?B_ zY6(#unHrpN&^?KyP|z`~qOW-N*DnxY5E4U=r>_lrxb3ewE`rG!Hx6o1ucYociFW!d^irBZw`!n+GeoNbvi$)kWez(wqR9CB%*l(X>+=owA2l%F>B|;e^G(B*T>zY1Qj4s}45K7??#%$x6xnbeiO#NuGyH-1H%3 z=765!qls|!@Zvkoy!l$Bl@&X{E%|M8s|4qomSVqaQrekIM_=2rf#cCsWKvQr!DFF! zRWG7T#XZ<2`i)@HltZslOAw(}QpcPYx3hrCpH5QI`}Xkl5i&4Q#$N+w#dV?Huu&H5=kaDI_WOL2d`r|ptx`|L z&CGhZVLi9yDc%xmw@SUZ%V62)*HA2{`mqm6(T!R)xN188pJ0-)k|6fmWzWveU{h1t~Us<3w^2dAT#ubAMH)WcXAspWk^7_Q)f;hmrw5zwZgmmo<_D0>}+Om0p#E zfE1{uAP^snNlY+&C%zEE>41z+7O5Wa{QLe;pe(r@DA}ulh!RCm$rU~LUkhT?T377Xp;9xWwnie=WC!yw>+o=s&1gLSF5ET51V-rT=M(#U*+* z5|NqVNX)Vb7>&Kh9e7G4u?Xz`{M(XON>n77VGc>V0T@f(WP$H9(4}1bBvk>exfV+S6fSL%b z2mqf1>L-+N&CCru3NY=zI${*7KywC7af~0Ykd9d_^}aDB3a~QWbxtH70vh%WpZG$~ zJxupW(bfvSr6<=*eOOfhyZr61(xra{%y|zY{Cq{ZH4y{96b?{@>4lhQYQEP;p$y)IAFUb)QFeN?#~H`~cYS zGi>Jv53;ErvS>Jsd%vKV`8-L&@HE#z^`?Q==Q&LdH6f=t<;kfBZFcH7%x1vGO~epNqy$wB{50*td%;$u>>ErWnX)X#I#k| z#nEr%s@pEcVmbV%biY!6jpZ>f z!F~qw(Alp7{y^+X$92e3r+wVH&SdvVs!32$;HeJ5iqXkUeh3Qv!TLi6-pUi4qkU2e;lDj{13AwkcB1@d+r2BMh#1p6e1qn zBSS%sx^{yhA%`YP4-ygSMFaeQAUiNnFuDs=-5m{ zo}K?#x&OyX$RRhl6ZNwg1JVcoI`BF?EZ6$}V`nZrjL_ykb?$#_LfilL|63E<{kQ+$ zn$Z5g{r}cP4)^|l>%9NgM2`RM|FG$N}H1 zzJI{*_VeC~BiL$*3a84c5ai)Qx00h>;fGp>)(h=(JD+o4Vh0OJ?gksKFxAx0vA}kD zwNvY+3?EGU^J$#8M@e65!@?=69)912p+$q3NP%^@_mUl&KUA|5+X;MkEVlvh1I4j&vgq2y}d&@fWHgn2{)(uIT>#cEj zP5r^1C|fp&221GLw$pEgxVtvn;S&%IHz=>wbbp-RZK9rkt2SveJ=^Nj#@s*>q=g4Rp{V|A_4i z9ks1Ntg&QssEtn}?Gt5xW{Lo|--4&ybxCp+Y3nV&;Ko{qr>UXCRL8y??C$j8wci6w z4&9#g(nc%zPQ=aS!5rR40esKFs*V-eF{`aDk$E zrvv?t3_S$}?JEq#636;pO;19 zzTwfHmsBro5?gR!rUT0aZ`#l&6GX8sVeGCnP{rbskky6s65RD&F;wxcZRb7J(%}tI zI))u=MsPjN{lbh++(a)w5T>F~cEEmzLZ~&~h$HhYP!JmwIknFM7r;O*8)ql+0Fi;T z-KUW){r9rp9G-1|`2@D5Vr>d6Q{8)m=E@}P*g=Z90;3-INEBW@pIxu~ktCUpCW=4a zP!cp?NY~LTQtKVVFGO+xGknuv-1|~TFTPU7KrE%i3v$7C_r|+-!7EqWH5=3UZ>+2fz!!@qdn1 z0Pz2L{^I?gRQ=Bnl+|k<368{gyvy&HZ4C(beVE*Xk!);g4u1Fh?t~Ai9r^&{SsQ)Q z63l`olN!pRL9G{IIf0)pp{;0L0*U#$%MI;>^NIE{YoNql9zb!&1i z^14{PKXs&4o^N?S6K+y1E;qITQ~RjRH0Pg#vP>*)zwdvOrtAORBlXtizg|bf60g2~ zK5@>8EUWdf!%C%HQxH)tem=?!^B_ck$uYu$(-s9DGBgUDkmgNA5(VE_!e-A z;x}9R!da2Fe#Q?cpM-Dt#y4`0nHj(+Mcm$OG|kzv?Xf&X%1n%@&9H{JgP0x{kZ8+K zM+#wR9+fimBz7uFKorcY87~`j*LA3reP|ZN{Gxx5yynyO`XUU+z+3T3<~|Z@=PFw> z%W{xt%%J4$H-w9vs z9B=#RvWeZ7=35ny(|W+~GKU(`0RLbveiE(-ainvDBzt>?Njz-yt$bO7DDJ-cEUMX} zTgfM)3VO%NJ6;^rOpiU>V{KW6t%$HfU9tiLj_MS%4(shxeOmjPn%lmu9jCj=-BLK& zZ!$|=m!3Q%A(=?qkTvke{gZt3MAEBi*mgUr1b=;GSPJ zc-H1lrjH7KJ$3 zZhge((zv2saP_E87=>a%QO*aQ{aN7uy@px;C;kNacM~)Jzt=D!0lq=BxEo)yinlar z-KeM@+b86D%@W&!Kt!z-8e`@hTIVfw(;foZ!7#dqe^t1(PI?wQA)4+UQ=%0v#>raI zl1?1RUfX5}lRj5cM|pHX-5vX?AZm!_jzC?c@bKOZmKXMO24ER>7$CVzLF2c|NCfNB zR`aZ2yz2|}qqB!fp%HZ2gI_~t;a<#Qly-V}s7<=|UisX!!OUO^E6$AKKp?>-Mug!l z2{1{|gi!zRy!O6gzT3w1BE;=L!C6JiRzP7t3x_{8&9>(A2Q^XjuLtxIpY!hbTVQve z=JJ-;vdeUtixT=FVlgM{`g0tt0&>2?)R;&40wjY8gR-|JGmX34ci&de>$0A(y;L5Y zVJje972|v&HWjsuI>Aiu8hDnXpZQrEAqE^}=&I$G&Ia*LU+8&3JxdGuomRfzJU`7@ zCbR6jp9h<8Rxw{iAPH`$@&$O4FOPzu(uB6y{FlX;`9zWA9 z&{-qL)$=TYjD;?~WMTz%a$OIi!)9xL%tZfwME+fcTz&kW=0h|qheVTkks*gqZ_2F_ zw~5+-GWYqVGQoHU`D0_wR?-)MLFEGcrXH)by5aKVZF%jm*@m2N0x~#07FkTef`SS0 zgfjDM%Oj*%=Y?$h{{G-m`qxEds2YZnw}ykB)j6KO07{Co*so!Os6qq)QU31B5mx66 zkq5+Jun8gbQL@kM00r!aQ6bp%Yp58;?idsl&3#ccV*fD`ntG5W5q{+?5)~JqKu|#q zkQ?Y!F2a|)3kd%dPzLe(7$}6j4hjXsc!d#%+P#O0q3I_>LR3GtM8^-BCHhhcKoaCq zE67!G0*C~bmIL@cca_7v6b3+GKl1<0CXTTy{cpCIzq4WdZ#LS$vuXTqw%Wh58T^~= zk_avqz?3D6JIw_`U&5^8Eb0U&_h0}m@+nm|+{eE1KbbWV|Bv``A(>p)?>#)eLN%>@}lQ-0!2jba!&;;|;jjU$=MlU0F9z(t9E6^;HS2~jD%${o; z;oU0njS~k@$xL65e1*7bR==2JoLQ$gqJH6#MP#>`FYC>RZ>r}LbHu(c@)-M`h>yoF zURflIL8w!Lv=21atg!`$tLEoNeaULP6(5GvuC{Iu;XU(?ajklk`YVVqyE07eZ5UvN!+HHKU8A9E=SVduq69!t<+S z(C2nmm!-}-yX`K??X4}zmQ-D#`~8!eF;_2T_7z*(S2yX24#BtF^5f%6xw&Gb!aAJK zyWafgxZ7B$W{A;qK53{z(wx$rh|e{i6BH&1Ap*@)=D=GY~RsFaNn8J}0^ zH|P9+o9_RoCakZ{AX*09(~RSjmQL_%7*6MG*Z~}J@2p<|-SgM@h#f6TL}}gIQ0mIu z_=BEDyS_wXSO&WfWK}J1%b3Jm0S((|y!1@Odz?$%g~paPxqbZ`xQWhcrGxsr+Q+g@DYa+8}Et*iw2ebxKSBKYuBc4%o8 zcj(Gh1w$@%qp~x|{gAfBe1j06*ro+(z|mlsCuNlMm#+_v)*(| z77-oDB_iz8Lvs0Y$Tlk48b#zC47|GRce4U2ai`#?Iuk!fCF5*7s|1k%D2MB92}bPo*a@Z6@xJx8B`XS{xi`bfba9@xKjvhO+N6Z4 z7*CvjW;Jf@4MtJk3Ii9Y^=?L=X>({;&SKox2zB&?fz`chI5jb>DSpI!f z&|j@r1oG8DNQok>6bOOJNW%2Noa755e3AtAnJ$$PMtt8Bk}oSI2Sg_~5K($H6aK69 zieSGQ2rE$(mt5h48;Tge-V#5dhRl;7|I?GB?;Aw=Da1;yD8c_)go*sKp!usOQw}eT z!hvKa$>y1XvwU7n4t3(>DOm_eOtQoodA=hb3P?<_#O->%&;AaOxaB2V#UV;E|JQ2A zAyWEJD+7lJ*<3(k?9VuJKjGA8Y>ElikewUhlxJ+RKdrZ$FY|zmgs6iGWC%b|-`mmW z(da(Eg1eIM*hCPfLFm^Y0sV;p6(L9|5S+i?HX;U?1)(Q_sQig_ zL4*KO032cnGXOdOBnXi7zfmxNglQ%~B5Pvb5tP_f8cA)n$e30oRoTIA8MeJXsNHik z8Npp2ZX7Up+nZ51@>bVS_KECb>?+^?F>pmV^lk8y$a3Y~^dZrVEHLS<>%H|AK%e%h zFpymM;UjjOC`~nMv;TPtsz=rZD$4br{1g8_-l+QDjSqkw0ATf}MGf{hJ}1oA9ro!8 zQ2xT|iNV-p%T5(%mH8bO3QWy|0ACwYZ zhYBoDSgYTv^H1vyM>p@h?V&n9GI(TtU^=rvsVrD&8pd3f_&a74cKR?uc+$eGMmU_t zP9N1CZa8KtO`>Tn0fTpS}#}2T*pbk67{|>dglt>K3nvkGsR>jp-9NV_NNI$29=C4ok zl~hQ#+4Glj{D8nTVl};CAxZN;Q?swpBTK+4mXH-`RZfF_*xPysUr!ElXGmqXU{wx` zuUPkT!ONp&C}aAHyV%N&cPC@V`}yicuY!FrUaL)48}oRDJU5DgA+4&Iuzr0^-`ztV zLeO#}?@M_!rIwrOD40c5py59Mhz@Pdns(*nI?cPeTU<+LL#h2>R_4P^_#8wWN;Gb_ z-Up)i_wKL33=#=aVaOVh|9GgN`DaPq0U6H|l#?MSDT)9CNLbh&87i{WvAzg2%%CI% zanh_`*#C6m|7gC?(BNYKQ;T6pV0I({|L;iH)k$c#?+DbEl-AR}sm*^>;K_u%VW~uv zJLQvZ@G zRwosR$vR4^jS4jR)}eTINR&_UD^$z-^QiL~N+TMG?~ohZLHZe?ek53%6{z$rO40c6 zCF$%h)2HYkrv2z=c#S+@t#1!w(y`b(c-2#&;oNN~Pre=lJ2?M;C33-l*kfQcE}agWsU z_U5C_c%ZJcs~vq_HrMbr@%|Iz#8oSCm<1iqMwh?_nz>%en_ zI_AhwPWblA?o_h=L6N7=v}@0!_7*+Emg-Yex|fT;p4~L{4mdB1Nvt3LAb43JnPFZ2 zNB+eSwsMN-?UkkER{^=27Z0e8R>>ka{WN)L5@c4MQ*77c6RVLn^7m4dg4}X}w3*-?j~nWt6>J<=(m$PA zS8~2MeM|ag3Gc~+;390XFBJ9b`*jM!Lvr(rU3VByN(9}Mz_U-RDSVHpF3Ulq2rWakKlW8`7E(!uEpi z6NH9MsM&E+KE{Vc)JuauSWfcO5D)Is?zh|MJq8t;-C$UBx+^OwD277?p#o02%f)X6 zY|+I-PBK8oDwc8QNp-#kT}cb7rY0?v)4kkdzt4ebFjhyp=}^%_Xb0KfA-pI zrVQtMn=?O9^L7Om%O5n)@+GRTJiq8Z3wI!|O}P4qTi{oj*3mXM=|0%ikv4Ms>iohP za;a0%MjWU>vj-0s*!eLz!do82(Lo;3yhLj^FwW&Oc}g1;|6LNQFmf$>=XK}hB^wI) z%$F(s1@X5>Utcm6LCo8Sq^0fQcWUB`{kvTlSXB1aW8@50wsTvMz55?|aDe{*rT~9e zzSh4K;O||o**_aV=}#68rp(7nNwUY%c|7ATYP&L|u;{hs)t~3z@B3|ZYdgtv;&!TZ zf80C?Zs%0KGc?=t86`C8BY@V>{ujPq7ah7*_LuS3R^-j6>je-?cq&oe4Z4&=$M{~B zDR&i0x=V_yIV45L21>XSVVgwlta0;F-m)bh^M*o)AM>+UDg~HCdeb|1KmDv5INK%2 zQSE7FR}EHz#xw?&Ue5dkmD7aWU$5rHY*+hOGBz9hA}l%5v`zYUf+Xa#<}^g}p(a*X zT*wEC$21(2PlLIX%dd0l4b&*ud2i%aHClDr^-JbMktPWJ@ziW=h z58+pBw6{II(eH0#)Un>rztOz_>>6jgQLqU+t9b+KmQ+cr){36ssXdGk1htf_Pqcf3 zd<=WOLQR|6O-7^t{t+Sxs#RE0#F=RiGR^MMj5OrLbD)~`#L3~%Wl$MD*1wz4^Ms(( z{veRcgTST;ojMaFEz!AJv%_&Yy-rOUI^ec}gZ+zH)YjZ_n)9VPwp>{L}Akb~SO79u+*ds(8aUWd&_LFcCvgI33VZVR2L0u|7+P zXh1dy-`tUBFyN0>fo=zE_NO8dnUzT>+XZU&IH3ENRY8s`;i#8s>WTx&QqKTi`Q60V zWVMO<(Z!6*p9s9TBN~_`$Z3GxAdb(K?!F7}n>+CUpnB>H@X4 zb+|~{J%@K6pL>@K;QW8m-v5U+Z^?he5lh{xlh^ukHnFfz>GUV?}qN-ZZ`z zFRKc2wwP~AFp^sL!#%%nY6YygYuxt8&Xo0)kV97FNJ^QwC~Fi*T59^X?0s)#58}D3 zP9>f*ve|H>3<GUb?b zCPr#wO>h!RR(YgQ7rwlprl4VW4tvJSG|>mwh~-9JeK0$aI+l@#&XuxkdCGBtT4WK+w*c+xsVpTS<}jQ17nEWU&JY#FdE7NbdOVFM2%JHl19qPR6$QS3 zN$&lk}fE$p00Mh5kSY<8<1bT?-l-W+WW zOk7vb_m=N*jG%W0@#2a0_mGU>A6`V21^L`Rjkd(pnJ27H^JgEozq6a(euzPVVv|C5k=BJKk%b~?z}9fHgnp0C8mf?Iwbwt4 zotZ_*2V>#NrYz@hZ$Gn?dr@x@msYnR_IPvs7Z!A9ineh4Al*`Ct(mtHJ+DhDi?-86 zZ_O095k#P((qSCOLT)bP#1btYnYI!tOMw)^b9s>IJVAV!mpm~n&1eF0%7lnoO9`<- zx6f8v_Ro#)#%lS^JoiJw$X_6zDV%ajlp7Fx#2|qhiUZ#*G3G5JXHmgmow!isQ_7?^ z(^%T#^nyP8f2@AL?QN2JLtt>mkwIH3P45ZB+lRWto+#HD-hp{i{Pq~>OW0Pb%tYGI zJX+$22EmIq!>5iK!b};m^!w{Z9kH3kZr%evM8nFxhKgxRIsx_i0S_%4^z#|0=++Pa zT^Jq{$c%QM3WxWPOES9b{8k}*qaQ$3M4VpF_kk1b{NX_-{ou7PEM{Z@TLsdrrxdx5 zI4)WS6)czxYt(F=xaeh8D=rpJbz1WoJ^1o#rXm1OVY#IY}suHf2F)Y$ zqV^AI`HSfNLt6ibnEgXq{~~t(khcFJZvT+Bzlh%-qAglI8T8NaXNI@Xbp2BT${-WQK`A@EifD`f+H2n!!uN%SJQBsGr#ijfkb7Rgz#e z;bCM@?diC1P}JyI+;vjv9V66~wl#s=H95zmdet2E;7F3od$alr((Iu>wWFtIl+uB*m1@xm8LYvf>=e@}D6EM%~5f*~JG3mNCSHK zfdRN3r<8!^_d_6RfkHr2=MAPmGm3$#yQ!;-X*jWkgVVTIYs+C2Z~9;46mMM+VlOd& zITh8RKTD`ubCUOs7_f;Ldsn_>wiFQEt0h|c3RhL--StE;)0pNH6>2Mf6fn6J5thT4 zeTw%aFmBX6Yv<^*4%lgJ$wn)Zdf)hrHDH-JgyLLj!9gG#4G4|`y!}Ah`ChZgjOIv7 z;!X7V0|l`AHwc0Kd-??m`qyhwqX25dqJD`@9WlM>k0-cz<7JhVKUyVCUooz-9)*}~ zQKjb@h`^>(#zL5Dv~+ym|78z}RtKJu3rX|!Ilin+R!3BzH>Ks%kNgdHy5i{PtT~SM z?6vdnCPrJ+g%L^ri7?-9+?)8;8q&xMKElD5g}BTngdG@D0(Phe!H12xg0x!rO$KyYBbJ zLOlhlRY%2oq4@OJJHAdtCWHy^>F)w9C+^h}?&eofSYY2I^NOdpYQ7{At!zu*A)}Ep zq-!8}>Ar6$Xe2|%r2A=S&IU}aY_a?_e&R}C70^T3a${gCfK9}_jcE>{bBKZ)6z0b* zD^YOY@#E;f+-oKfSR4=Z~p$tVkT}jj4KTZ89?y$PU+01 zw0RInH=;h>N@pDlZQa`BoW}E^i!?2am8BA#GPX0m3Q&XRWKSrSSQ?-O`ijXC62E<* zXaHR|PlqfLAN)0KfkX)tRf@Jcq?J{IemZ2O4=rOhVyh35(zap{50Y}WV#E)U`nJPQ z50W~zVl2HL+BH!(pHVh7Tuq-*b~Qw(L`(b7%cnzi>A*bv7LBmJK(Q8$;kmyh_`%;2 zT{}>$S%Yf&^>mO|lPEvoGtWg&$6si*D)8vo|B2VY5$S$O(WkDri{RJQ&p}YyH%bUi$_AdBkwo^(;>c@u`|1jBX6%91XjMp+B@UJqXzff$<;@G zKoXF%{Kq*IAgBc?_h`|bWAe{`YB~bv9}DY0mV>`6a(aJRg8#8N{$r`RGamWJ(#*#( zeTUOJ8sVMWw7kkRbGOKYXW>n#b2KD3V|vDyA?$6JbHr+yh;YX@Qr%#zaP-=^l0)$; z6&L*#Mf)>GKan5timj%B@vJByJ|bRENyS~WqpUqhKlQ2+d`-e3J&Na}Bd z17HHJ`}$&R-tOpDpvd01H;?A#llhK*V>^t+{Q%KBlI`hP-J{81^DSh6G_H~OY;!>m z7c$N+B5pg1n{wKh?7^LK-2=SCd@|+T#hb=_g{!nd{qTMqUBSF)Bcts{pf}14fsC(m zHLZCS_>5IUW*cA)$GbdUl+rHS<;Vx+DNQBR+`l(O?0ab~94opptHyDIT*0f;x9k>z z_e}d&lu{k2dw>0B2GBi*MmI*NG?*ZtCcva^+TQuyp|i` zl%LXrD&s7p(MC#1H)^HU4^1+r>0hjK%pF{GA{blVN>_5of;*ZsHf0;2IiCAqF~(P8 z{b*zBDXZRftrzIf{LQf1Yxu=VbhENxteAm=Q+mk16C)G2H6RBzZ|EAOFIlhNY`rN) zX;J+x_n=krq&R11I+2QQCNC1X6?)SI5e$yvl;Xx9RNI+Y6| ze6$CY9zxBP6Ss$;;?ja)IoEZKsp19t0xjYarJP1IEMJ#ZRI)tY<)%b%dGL8u7i!t~ z9!Hkr>F;s&85jA6BsXN!u;_)EvRUOsc?YFvxy-4~(HIO`RO3vfixY)ztNNsV3mH|b zBHmz8l`T#vG>a4hsF(MSZ{xt&9f8IRM|yk7@`E{}jU`L_g4WPmnXNG9L)#9z$F@E>;n4@*jo^wZWLx(**Z>Z!h+A-=c0 zHDZjE&`u5U;bWV~M43G(Fj$T^qC~oFtP@CIxD8(M`V0;;kSE+WH}ppRP_cS$F}UYPw(9$2Q>P6!n7 zP>)A^J{Uni9G{EEEYoFH$L3$eNZNAKI(gfN-u0zH0f-Cn(++Lj0E8NXTkLR-3l6U<95HfAxAzjg`!m7Og`}Eo+Xy z*QbU|jVKdHhD%CKT0y9bX6B&4!rW1Prn9vh;?@ri8A*QyDBrdXbEKne8?68;<}Y%WZsF0@_Cg zhaB%8=*u<+0`>IcJnJ6!I+glxQ<dUaymqv3kR`WX?K<7&nG6zVKW2e=`62e{Klln}PD>;#S{1WXS%`JA_Rh(U zo|t)ZP|;i9}*TYIY@hXNY=a-iBTaD@saJAo+9bn{tD0h zy*v($_#KbnAP%+;nPJtU-pNd;o zOu)A~R%{&Ss{s8qw-@X6?{7f7;8Op~z*Om$fNIgB4=B;2z*@s^OD%!U<~LY-)BFe_ z0Ad0k6O>C>K#(p{?eCeD#>W{wvx_(LenYUJLS*|2eN14q z``UlDB31ZuPef9h;=fI`fpo!ry%<=h`D?7dpQtXSbo~fvl=*sDL@ogMuIk?podoxO z4HR?1p~azrz=v)H3tT=RZ)0@Bo11uzae zR>~d&+kVX42!pQw7W6|&9?KgcV*1P*t3C)69L&#;v@?1GK3sSM!*)dlys~E7R8MIL zn-GiOIDrmA*&?->nm_vtsLO-e27rwv$Fo>t-ygUF z5V$srp8ODZsQXrfXD&2>k%}+fpMlwvuc%aeUX9flXPtHHq2BhrD0*Bao*bT?BU&tSddN4jv&I#IjPtv)o4!xO`r z=D2h(_m5WNVKs!|M(REb`g}nE0O#M0Mb5u@F}Tv75{Ash&gT`*ekC z{CgDy>%yy?pC-ze6kXaHC_cJ9)QOY^BWLU4w6#wyGL0Ayx*bs*heM8nLOThgV%L%l zQv`D~yk$@%SIY>&c8^Nwy8Cqpltd2foOt1LQ<)C^5N%OZe{ImB5!PNQT)G4O`u48g z0z0d2&eC0MctK^Np~09faUV}wu2httrmf&MuTYd{=~(HQ5lL_Ye{c|DhD#<6-HeHfQ5&j8H6Ya9) zt!&;!ZjSR9RnVil;$Cnbg%z$P=N-;zYSLvGUrFN*O-xfYxnw!;Y{owjrwVjKmrd#{ zm?j!aF#`(wuybuBQm7253@+YmH-71nApCIRSo2CRNN$2AUq6JEm|y4?{PIg&=OvsX zFuJ_kbGBFFR72V(8I7rs>Kut9ue{wcwC9~1N3+XVi$G&&GRA#+pFDXB|<4jH7^7k<8imafu_K1#riJacK zxu<0DU0zwH?Ut`}qHmr#qW1Mj8nb~Xr&35&E}F30*8I1tx7ZE-%-EgHbk$|=vobeN zO*2td_egCYeGPlgAX5zqOMBtK9t)w`_EeX7-=lNU9*$`g$IcaTb|M$&;Z%;9y30FG z?U1b@tL=@T2Lt`}SR!L{Or1uT;zhM7g*B(-TQx^rv+8HHL7d53a3hNyGP}>J4~?qC z4F5N0PeVhgmljF3*W03Y0oOytx{n=}JB1km;H7Wh()WV-x4;>E>-#rO>vYDAi<@{R{ZBek}ooWhbxXnV52a~SUSB{W#MAJg8Wux9p|(T zUb$9@zqh{+AH`0>oBZGnng?l_6h!K32QdA8rx7Rs(EjhsS4jX^Z~%j`IaUgXiW`#WS+YWl}SeB)KIyTFv>syrjVd+TVQr;jj}8 zp=o*vKk8{@Ot@BLT29b*y#q?M2B(N&8jrR207TPeBC?N*h^@|{Yd$!~Gn#-qj%Kcl z(^)*1suQ8+K(66EPNtLSlatOMRHBY|ek@?wc|(=@WFZVT%YvgS4z*z6{73e7iggH% z#&Rt?*4$P~zlRcOvqxm>QyG`5rn1DujoHfes9$9*s1JcpStOQb#r79N=Xn%KpADB* z(G3Ld$Gzc_8t07y1?!p+{0=P#SLc~#fTgu)mgSl+LAP#uLvPMh0%7Jdp|4kA8P_>; zyD^he2l0;_Qdf5Nr=L0x&O8wd-wEgrquchQcFvY&rhN=3x;#R=Mq{My&wpR2r2hy? zF*f%-uim-AM3-lMmO;z3zAcQ>u~^wt_x?mQ84hma`KfxSOW@fV(^7;(FH6(q5+}$4 z#i*^M2U+?^eBmdM&MT>1BFP(xesG=db)5F-bJNU!l)GW{t!?6~?LH1&cXOyDcs8D3(cKC1JH;OUDaRJ?OI{Npqu?GP~D@x6W&ZI*3_AmT>jP<2xaC^3?E0ey}F8W2X zCLbMFB+ko*@8X9$mU}-R18^0h)&s7&0*kLT-=~RaxtaGI8NnXB&R1Fk*COpT#JjNx_Th_FrAnx8WG8zTibw9~&O7 zbF)s#u}b`O&+$-bA5=Xc6s=fobg|ffU$>9X5J`0q>r(_D4HJUIa3nptd4HC z*X#}(;g4xC5Lp_eN_vX%)So6>Y#>=#wN?lsY*rj))ePBemHYi_*(ISH2QYGXh$TIS z0R**I#aeV(cbr;Mv(MqOiL8SnjMZ9XJ9`Cm6_jafD7x-an3R#;{osw|dMNUyd%)e) z5WE}};;X5aVr*GaK^-R)x80>7ia~Hvkjj^JJ5m*9nZJIi)J>f=N#J-?! z8tXTe%=XX~qKTlKcF_-302h3|CtAShv?h8u=Y8a&f`NQ%nW`#D*oyd?U|}1p-9wBd zJ4x?TgH=V{Y=1UAw~lGj70Ma%jQ<5)?Ta%zz0CcF7-!v^-{I;c8@T*WSzXau{%Y8w zp_*;KNp9mWGy~yz#P!JzNj&^DYZDx%d$yc5%9Pn1BVmgA8T4SGG8n(ddh3YMAivtk zndG(kSw|9Ta`vq>TAOzMq(C{=JBwFm;5Vat{ek$+j=z?KBjDKNp`y;1f*zgHTWY~t zjocxItD!?N5#nNPrH~(^;P_}-b4tfs7=&=D?F7=>{h^^Kp+Z)xBSre_ck)6)Bhki^ zZ}<@+^PE$RFzf8jO}K5az1z32MkJC==4O31t>4Zu;I6_Rj&Wnm_|7lFZe108`*Xkb zG|_!+TZ@g^C1yM7nwog)NLVB*s&Lo<)Ko0%6>W&=ZP-MY@U{e>Mw(ijEe`_tU-;ER zkFJc%uY~&Epo=s?ey2K)zxFADJs)FA*7fv{FD1r5NblNqUd=2w*J zS{*&l;!|F9*{*QjbJnIS_$#p zLAd?@xrM8V{I^6E`qQI`qdJ;mo#8^PtQ1EdUk;rUY>7|PkFR#@s&Ys+vkwpPVz(0y~Sz6 zRPpeBlwd{FO`0xs)%}%94x06YkN(~nBF_asD^!(aqt1m!fj1S7dZXP~i=v#_w-&98 zBerF56memIEX~W^cN!J4xI?ZrZ4D*8GIC4gR^*9~ch($FtKKZti~PsQT}Pscwe-5l zhW3T0eLIEg?YA17wu>C|W*1*eD!j4Su6YE;7&Vj|`@D8$3#>zmoA)MtfSchcd#-wb zPqq7k?`)?@#e_A7y#{M*sjP@vR_lYxHeSlirI9)(ic`BS>Sm5`$Nu-ZXa>yN(7x14 zQhO2O?9q1p`XRhD>2D2Z7+-0Xl$7bEWONa4lQ=E6iVjXKB=J&7^=$2y`ZB8m`-GGB zZisW9=0^^_4rLyqv7);aYCWdKT&}VJY>N@FhIvEBl!RGi{m10-N2IJR+##WIuX8)G zZdiRhS2`01XEv44Ll~1{g!~v+2YK8Rua=@qn8Ri_=Rfno-LZ9@1h$AbC12Ta^?HGdqGXGz^I(y_Gul`2(peYCiB)9&B9C5QsYqwvo-hp|bbLNrdveDToSJ$V_eJ#I0`N z@5}vJB%}Ir`K&?0*c&i|&GG0-v>0g16m{FX4dhAGeiQ^sWjDOBy=Fz)LI>{LEjPUJ znrTq-6w_%IwQCfPDI0kXuF+g$Wq&7dI1<^f=zCRxZ58b2eaB;bg!))Z%zS)iR3sNP z7Vn9DOM3uDotf)j&H4i+uLcZW)79+lQP3Xwbc_cHKckHMhStludxqhj%0REXKNE}V zXYnKww;oY^@{V!Rot_^9@+3yHU5P$%NW8Iq&uxiBj87_nuhh8(Ljnr>+ z^H+L@p3;J|9+R5PVvGNVqXKtHaCM!8Qb6tkTGv5IUgNBdH@$jF?s^aLr<0pw!^2M0 zh)m3PDzYUthps(4wK@oMr6w*}#ErJ7-_Pvyk%laSS3cgX;bHv@rsjir-pvzCt%gq7 z7_5g(SC<}W8>qL1V%#vO#?oJfpGQ9salzAAPhJoG$8ADh*;um+szhd@(D>`D|YzPUSK=*?Vgez-yohQx=n(0HCA>I zY`u@~Ke(qRd1E~kyl9ms0QwatL4wh^#%&XxoIX`=m$xz;RH|LIi^D&Vsd_F$*s9_c zE$O9Sf`S%KwsRJ%T=JYuV$fneR3@i+Qv*!;RgXWv*d{df*&5-YPE{RH^6kP>)k^ie zIKzCEXN=cZ2M=h;f)CUb;mVB0t}$Py3>tYg9_@L0h>r`fr)4%VvPcHLq1x#lKqIlU z)Iqg1K~GwzC@!WM*ybLy3Gd z2=d{%=Dnf8ViZ0BJr5;X0m(S|G>y}ih)~4rGCopH21@M^EXtd^%eNA)AJT!furp2!3;LX$ zO1#$1G!{Kcn$e-7nhcjEgq=M)GuK|JBn?=V52oflv}6vD0A4trA^RHXRez^lkI25+!MgL-hXqhfzlZf>6K!|it^8-2sCB0 z7bT8cJTWhBbE$HQc@UMm)0w~NE0S@LCP}cU5KL)n@==(H-s+dPn|j?~n#ZL4br}Fw zDwk<2J9do`hE zX+zcWc=874FL{N6+pTZb8&`OD26$0)Eg;J%ZEKs7EEo($2dYi#Kh9=J_GvK0Pu)1i zxK9VN-fFDBR`CX$-~S3Fw7E*Ul3`Wcskb_5L5Y_t&@<3ky=h%fqo;Ui@C=;6KhiMz zRY`?pOo?L+Po0gIGsdrI<~>#55D(fHJESgvsJUw z<4f&CV3?Dg)b9Zav` zN<+aQ=i6Xu`AkaRZ+IdC3e*W^DH?8b;Fu(Iu5cKflm4jH%%S;F-EdR*We z3+mOpE@#_#Free~D9p~8J!kyRZQZ$7?chg9r8V;Q!>1*;{cWU&65)gmwwiMZ`5X1- ziRHqQj}W0|)aUBj7jzg%v(1{=_98OmyXP$6T0)n~jIjay@Y=%@|5PcxN(D!Emwh_u zbi4iB-uc`ZzA)OROWs-bz?!*P{ufmqC3XTfp7;y;uZ~kupxp>uWv`a!f*K5&FLG^;3%mwV0s+~@ z{7+Y6`yc+R3+*24vTT+qlF@1W+HV=;#q=8%syjxP+8X^zoqH!VAp#g5rmI`6he7;(UIL^W~-fL7P1Z8i5W|C7> zf5LO=Zw2w5*@3&OqNe(l;e9%Vk(4X*E8NoM$Hul@t~Prgn;~0ezMI)JhlTW@gpEg) zA)1hnb5VBSTZxXxZZPjOya=`niA?V%MQikOrSk&z6xi{k*pr-k`en^|gLA?b6)N|Y z@Uyq<;`~!`vj|QwLye1JH=zNdHg2+MZRNy?z!~7P!bXKlPkMnY~@t46)7sl&st=15o_Z9505ExMKLKy$Lfvd@CTJ-`<3K`jt7r$&VCNUknHSGMqS)X zz%TfLKyxA7uImlyX8Zx+U$ltN_B&?!j48V_=I^JXR0^eVcVZ5s4U*gmv;m0|c9mV3 z@;}h+hrX0P!IpMrU85(XXUj*;$8t4Wc+`!O6P;psH%?I5yp*e@bh8qYDp6>|3cX))o}sjpghqny*cUmeNV-8P0Tl2G!N+b({>tCZQ}>?Ki_k zbTHs8OUT9!gT%2@cAwi|v-zC=bRuk#K8wcRzVzXv)!tw&SPmA| z+s36EU8|$SHI|jf@LK#Vi(<#K<43HxAJKmiVh4W2pwqdjKmkW)@IZ5@=x%q(SkaHH z{d!hrx`$7=UfHSjWSTzjP(r+_c~!QUooglXPL6Zo0#Xc@{e1pnO~MHb*+7&VzZfuQ z{P>S!vFg7y{tNkE9r52NkWrG^0Jy3LbEmcs3VoLJFP|Ehin_uX4AgCx5D6|SFSUZ# zfan(vSR3VblpHuJTTSno*n(oN4UUM%=k=GB8f{0uDXFauu>z-#665OVW)j?k0tT7TD!l(u@aiwSRKb)M_Yxe#OngFH9Yayijr{8ti3Stk4=T7$0z2_ z#Sd$X7Sfz4>skk;O{e2HNanq-meyMZuR!M>Wml&Bte! zSw1$cwv=PBBu*?wp4hsO(|mo2%*10um(8jPb%0Clb2#M{DwXz(3TK#GKp(bZtpZ8? ziOFo_Ack;54VQ>k`%;d;vos|t=?-!&w+Du@hoSD?FGNY7O}nKM1Xo8~&T$(#eBA<1 z+o@u#fx5>t;JceyC2?`{=!RqDxL30I$Cez#m&hwW1s$xjbaSgXnU~kD>(ljMw-o6`jZ(zDrn>Ib#Il^_%J{ESD z{i0CBp~QL#b-{MIHTeh!veONcd~B<-V$&v0#a|(|#W^}$Va|X5kWi5rwwO`D?(%?g z>G~`-R(5KFf<`o&HV1ryWY_GG^CL z(d{8fHQ0P?$21kGok}S@#A9@uhmR_CY&EdrF)Xxz=9HtEBZY$Qo1 zM!PQm7A@qQgk{maq*HEKTqd)8^Zq(;M|DJ@%TGUf*)TG_UmIQc%Riz^4&2spmv0KV zRe;ZFY_eSTYPNs-8KJz^kULsu=Svx{YrtFU48oFxPh>=%E9MWrBh^;;fwSf4^Ge9+ z_{DU8UJLqA4N~Gxu(2n$+c?b@76u_Cs~9{!lt*Z{;RMMs$B^2~_LP`w2DN)&jZ)vB z`zXlPPv(!=3WU`mel@QZJosr?E7$X;Ic%BlGdB|YQ+r>cdQPyq3i9%W`h4~(i}jwD z_NrCf%NyxEKKv)(k=FY@m<8od;5PZ~09v=T&+tCbmX9E4;YN^EDDTCesgyB>RjJak zHN;|t6Svq)f;dfxm+o1R_~1q0J^yQm;rq__FM&PLhxd~4==*^!Q&tf8H6M`?KHS%F za-2Kw`?Sow*fdTEg`@MDi2eLZX9dh(#u@MrMZ~8Q5&Yoix0^29ScMl~1pcb8vTKy< zS@K=yud{jEe_m3CX zGtbh`c|Ea@pnQg$r)TeK>R%Z%>k7o{`YRo@Ar=+$v3|mCNg2CEAv^a zu`x9}M)+6)=V`AikQ6FN@#Hy=R`i*jzkTwOy6W>}=4IMpaYm?b!9ewFTwG2Iyd`Ro z{o#bodbbuk$H=8sD91#{jSCVnerrw!n`IcO`%hQ@ZLUaeeQnd-!|y%;bWc-5eGJ^i zS`i#XToT(^Q%luYr055np{ao?ihfPFo|s7`77L@0oR)M;r+UY>^avlq?p2guI$c?_ zY*ux+&k~2QW>@e6*>VG`o*PA79W+;p_Ad0dT}4k)DeBK`wGGNeW*dIZrUQpZMzpE$ z8|X1&p}ZDC~PRi~` zpZBg%OFv7xeXpIYXFZvc7JC<4`OrH$jN1!M3z;(&Ge&g8W9G;Focag5KwlF%X6cpj8jyq#H)J7#R-mvdq6SGe%r zKjyCm`*?$>2}70N7kZ&rs%5TSRpEa}dhO&%t0QF!IB^~e z=>5Gc$iDh5Oc=iPkmEJqp{$q=YY|%+p&+jt(Wlvd25VfNR2wVAWIsP-Q)Ih`9Ot@E zoRKjBfBc=?wA1c!F4%j)4sY$pxQUm#-m?{D|9d;K*VB-fyYkm&`||EBIIOASYmSdX zFFG>0g!-~lsCcRI;v@UGHS8sZhvtJ4$n*=@5o8bqs}cVMp#-3|ZZ)%~JX4Qh6;J zr1fD5VGoZQdZ{X1Fm|3v0x(Rnm4jIM=jdkKJ&BTBazsP{)Dq)*Scf|~Ug+zfh}1_% zu=ORJ(}2BT+G?TPvfouU5o1IA?+W(B5N4j)fV`n2$J{J;k`N9K2{uK&mTL#Q%Jbr+ zL%BLQ+T+mV({r|+r^nP9F{yp0Wrf*>#}$UBv^yvQ!!%|ir$7_2vAlA**tppPuE7nyvn3#gkf+4iAENw;7`ug>wr&GQXMSB#O zJ65MHv0y3N^whfP#A@Zg`bZk(j`Uj9j3#YeK-`L5EyM?SpxHhoJx3XeqRq!@2p8K~KE6^&|J?hAm%E8E4XFXmijqo_o9@h=n zZ#w`p&lcI2+?J;~urlMX>}IcL{~9GPMB?de_0peE;+F8Th-A?o+Ms7wg6$aol+RvG z|1a9|nq>i4)_3o#RUMJi*Kzv#N^VY|YGD@=dz|SA>oo zc4Ptj6U@;me11O@?m6bb`^z#n#kmgki@%(^ zW~45=!O=$O_bk%spD!fd=(VXEe7b_5DZ@xC=4z2J*p_1DN>`Po1UX`+M;-tejQX$0 z5gD+Zk1$@^o`Ju7_aPf2*L({YIH+H?Mm<+w!g!F0w0F!>Vd;^%M-6B(v@pta`Ti88 zA0zyvWQ`efho12M!Q+YqA{V9bB=BC}NS}FwTU`+svsIUg1TZ~i>JTmv9_ zfMPjuYu?NEtr4?_K7a`e0^*0xcTGbJABu5RKIiH*N$L4GPm}vKXmXw;X&)v?Yz%tPRf0} zaa@13VVc}}^7)nLFBB^>MI+TzVAq0UdHtKM4KnkeeZjW>!Bz{&if!FVLGT6)n^xrf zbO#aqP(4_U^+P42EStMA@vo2xrt$Txs77+L`cH>_JCZ;l$PZ@m=v^y|z7Oj}-hd>Peo z_DQRF?SeLrrYlNi1gMm5!K7stJP;Cr`&kwOW=I!#^~TsFl3)|8(nV`U^HB^`Nwf?b z!uGEDDIE{;4&2w_7GLkIFZ=2$ zEUuc?)Lo>nH+Q0qFIA2bT10=GGC2OoNK5})<_Jm6@bC7k{B)H8G9d!&zuU3jARuN{ z|F1e+;&;^>@@0_lVo#C9Ipzd3#D(QF717(z{rsJFc?Q25Rj+d&?W%pTCOfn&Tvu-- z_?3Nduz2)65ow6|VDG?hxrwA=L#oHs83=hhAkC&Rmzn)xt+h7*{PYDF_}J#Dojzyb z7>m)Oy&45^Q2(Tr0pX0OitcJXmxc6L?MgB^EDC3HGk-H(Yb25M0BEp>SBuedzoDsj zIXx{iD(p-1uvBK0;<-0bGOa%#I(8a@N2wCSVedB!d78>$c=)HVJhzM)uLLXCma*?R zwmC^!+q5!FVH00cz9LFHS`6*x3W)cU4m#3zTHA)(+j+`p6XD5+`mcE1W=MxQNkq>} zrE|mt3_JIZI-L2&*k%t(F>J(7!E3J@nB=j~GyO%VxFL#Lcc8ZI+vZ(6Teiv87(s-ZU!H(eu%CO)P1jWqKiN9Otw`u9K-d zRyw3&Vk}GJ$f9_(@&=`%c?GiaG_wA<{I%Mkx5{=jExg@!W^4gXTxem_v<883~Bg_dHjmX+_f@PIh2zA!vmxxgt zg3wz-so4rw#-p$}Ryw?It2tKN?uto=qy-j-FLBh|mb|q!b*%xGqJ%j) zzl$#ZupVEWwdY_1EdH=c`{AAmg4fm#9LKyo5k0+DSLp<`JRxn~PlOztfqvw#bP@ji zqOF!9BRrgeUo$&@`S9BVy#I^5xc&bkuY+b@dm%;YvO}>U(ws!$j-bK!JQC{5;w=BI zi280{siO+EEVdEShYq7A}QO!@2QiZ;Mk za|fgP+8n<|Z`D`kOTo*Im(kNM-#++a_D@-y+E>{%4&7eJk7O|^)B1q{-<&tgu){X-FGH#qZO@$XY!jDwt4b%d%8kF zu$LY@E3E!a@8b8Cw;mC^e?B)geRSB(-@CvI5;s{4$i$BR1iM04K=;v1Z~VtM3tV>4 z_ez-l#_B;2lOn!b=F#IUc0$qc`%5-+=kWpU!LLppIqRP(oeV;yfd$^jqFM__MW0r^ z{YT}N%ZN9^Q*z(Lkt=jKe~CZ5RmkoW@4mYR=zCXgB|&whPHjZaYBcMc3(|{TwgMq>3X0Lra%BaaRY7}x;bGX z(7$zNZTTp%U-23BOsl)aQ4OTmUUR0m#un8O8yOwFug4}nkOBs`OI&Y0=P%~yG=x%X z1JyrnK1D8DZ@vfyPug&!T_mgB> zXv*S46e>8+Yio*6iSH~^HwR|&x)+R3gr9fC3QnlUijlu#JVf;IJzQm`s3Y3-JlHQ_ z52BTt7F=8;H;c4hFuT#Fzg{6?%@_2~yPOr>b_GN(JejnKQ^{v6H3nF$maJ!ng0(Db zW`WkOH}64gKMzn?{T5==3c%%??n$MWvnAxHH{Xuq=KXCcWTaJPQzQ$GjO_$T~a zZRR-?RiK-1+WIxdY~_l*C@f;*Fyy{#8|ns@r%I7E<7aY-OMOa!X>#AZE-_*KW#kO{ zI`>#eNmQnnvigv7TRc1(`RA#rw$qpON^Y-oI+Mnp2)EW*>pbFe80>Fm>jg?3;_?*Z zZCm0g2h4ssie=XdB`!J@Q*hSLpW>?3eO&6@I&dBmH7r+Bn@@Hd7t&xC_tUXUVn5*o z{ZBX1nX-4;=O-!1FkKN1j|3v^hR9Zki*G5LI6q0l2Lc{8IVXX42k0?;1(xQ2M#GLM zR{q>uuY^#UT@tEdB%2CS2e6$@zcvOHaYMqU$#4j7;q3()nZ!CM};028NEY9p-%lplGiJX}&x$A;6CX=dq_-&z8??rs( z)Vtb4`zPwS;ccYtRo=XxU&mDTi2&J)m-pB)JUNU6_F8}=TOaL&z@7u1>sHJ4{Npa| zUYJsvKSg39UghUE2JTW za!K%mB(7doX}D6chn&t3W?prj%*tQrj&Iylb+V#}*Y~ea#CYYZs0K)R2sK4y36^cR zA@`piy=j$7uQ+6Xe&J0WiW-*E`&2W{S`vn2z~E*+VGv54hX5GFoErnwv5Iu^y?rd! zAv1)t4x7hs;8!POQ-x-x9A(x_Nw;JBT~f-*%LmU-GdWr&4w+>n3@}@&^~U`ikbq7g zVfWj^*)-Q&OYPRR4Qi28;Tzf%3@zwN?gPDFWgS@a{^()4!Ylln%JGGL)7*Er%|S!; zcMWVbo>Q&i#1xmo_YcEJyo{jl@|Ha`VJ2r9+e5B@W}CR|PcP_V+9X#Z1hoAha!vOW z3}#l++3fUj@^7)p)=8%_F|K65sWiPUL3qf{;}*J&=>ap0ky(8#+qo zU|%BtwAgJ1gk`zANP>GgNsT(LX~l)q$}cPs9c(>VT~#u9g23bT$+IdPZNf_xNk~?p zX59($t@K!KOrG9kcd>}&t6@jx(AH`r(j(Z<=C7Fnol;mcSUo|}wcOLYNI$TErR7DI zE6j+eudNyiYSGX$N7fH1XDP{aq~u$<6vn@?Mf!)%ZI{s*v4qji#oTOdWHx-An{<*( zAtaX;80iF-?JH+q^0gs0m(?#s>^W9DLTtR=J3WkJrVLi-u2)zdCQI#KvVk(ZYd%x0 zO0f4UbYR<4+2psJ96S-JGF+qFzCDZ+thXcitTA8GW@`yv79Wi z!==s-rIOLW#Q@9AsS(rG11agLBi`UaHQ(?f z(AXKGUj{;-GrCcMv@^w6^zr%YlyDdOV^_Zto@$VVJ{{-~)Y>lacW-;bqfYNlQP6`v zTgdhdJ?E@%o|JajaW4|xr~Od@Ur{O?pVEXgfBLQnk7%1WH8JF2`Dmupi_ajWm^ zs-A*rpE4hPe*T^*MN3>zYMP*P$nT@OZw~Y!3)Jd?7nG6f8M)@2OMM{T1#&rfeRD#_ zzB%TRmIgMz;wq44oAbJ+O&9-lM{?hAJQwdtl!p$g#g|`r>V-k zN%8h9fK2Z};1z%{j&(d$CHj=PdEs!(t9TrZyI;P7YXSYUb8b}*>9B^4(67HTX(-Os>(EHhy7_HIkON%Z zlV~)OJ0N|fO_#jMQp>Icp36r)M}jA-{FHGwkJDW7>=IIX19g9G1Ml`+MKon&2zsl0 zG=FB^3^s#Qf?afR@k1iU$`L(LUz@}r^p9p)=&Vt@Iq;Q#4e> zK*~J6G{>`}lOnwExsZ38F}rOxRj5OY4enOc!EMy}w&~O8Tfcla#lWTS5y*IOkHFbH z9e}??#n0U7SGU?fIIp%l@ohGs zuS65G0r6~TsW1UCJ05>)+Bn}{d+X2~L4FH9r4@q&5u9UvFoPR^2OQ)M+`4~Z&p^^m z<7(x9ZMGWWU7xV`KY6d*uK)Apfu@+=K3bPx+CQB()64^3v?sVgW+z z{Q_fwD}A1Q;O(r(NH5NteaPJXc<2fMp?SeHYuO%6PElR^e{<7MxCVJaFx;?fFH?8gIl9|1e)9SJ- zr0l!}C2;1t!KliT)P#wagy;3{mwv?GwuiIZmyq znr;u?Cf>Qj@gTYA`-DVQM2w&3a<-J4pV*bY6ELDdOKfv~gmKNs0ZhZ(yx)54Wqjvd z0L1s$+%R5&i>bH2`MT#e|ja()nz4IEQcwMycUWy;gYs)1e@pyIh@Xo5- z_D>2gA5yg~v%Vetfp_oO=1i8~ZdlZ16AQQMX|-vlgB!UUU^5YP?!Q?r47-fAR5ef~ zWJJ|%=whbsbx8=r?pA!G=Xip>Zv|xc(pn~ud2gSCTiIrQ{T}Hl3!Ub`6MbC01HRs1 zzPwJ2!soJE%0yasCcv5S=v6ybu^5&Ep7}sw9~PZx(s>b)q0!;KhG#l*=APy}t#f>7 zk9I7rw04h-4d)jIMDCfR^jKmFOsF1GCS z`bsLVrQ@?qa56Te^r|xc_JV!$QwuMna<;B?@vju*nw9nndTUWRt0p{(1P#Y zo@lQfX?%~7HZ@_mTl_Zsutm12gjU27jeCU4=(h+YDGK|c`7s!kp{^3`CM(8ABjh}v zM<1qTQm)rYG~oLpsWwx2h>Y zBPGr;L0R+tK3pzBzU!0GblnyP4Na7)dhKgef~&lkjx!Pa#_vO@>gy^zGANfON$z*R z8r(bcT6I!=_z^@Yu~g1&niR{`R=Zczborl22B_&Ga|_lIXV?9!4oHZrRznXk9|b(V zKeHKErhUzeksdZYGfX5|$K+~~?_d%v(z8knc(r%tds_-*Ma?KG!yOm?gmfYRG&Fr# z+?0j|SRR6fLQX%cLD4?;j)<)pKZME8dzdXeZ4RL{TR_EAXhe^lleSixCNr}{9SqJE zs5$-wTb#~d9*^GZmk!ZT+*_cs{ya~e5x3HQ>dS0#9 zR$mX1W;6eiYLc_R*+(5xw%nejSuxWXc?^>tR}0Y$#}#HO6ZTpW??;*_h;09sU7(ok zc-#~+?z_!)9Om>JW@cGi$+a{K=W^%TNQ4Jk8nm}DRB`VOmr*tc2bRNX5Yk^yok##V zhe9Bs?cqFgKPY~>HOd=rd8)Ha30;;>mFDOmi8T=rR?IBM#<=2EUGaaHK(@T99yI*5 zyw$q&6z-bZ;EtcTEo!G6Bce5m&g)zAKEIs)>*9{W%yMjrdJ9FBKJ*nRDP(;~RCgFh z$_wJBWArzk@t@gM7XH=u<7ck0oexr7+XodC=kuLTBK4--!@+5$lh_#_oiJT@VfzmM zKeJ4C&NP%YpWq2Hzx%Cj-+0~3KMkWaOl@zaa4>t&F_*yo&hn8umY@kyL&n-_v&-rh z9_|8-!PQbfgW(wj%h$jKG(WBKPfF}}VLXW3|LIj$7o^=P)^<83K3B4oL`11GebFUe zTIypFs6!`w+2c9@KI8OT)D;40C1I|FM|qveyBhRexV6nUQL157N9CHFEiu_d#&YPs zWD05ubXYyD>C0)6q*0V#qd~VAJr*P=W5AGMyg8Gs>9u!AfIdKq_o*o%VYd!;2wgD z0!*Lt6H0yv6^*{ z99XtHRa{_)fEmAuE&410k2c%sAEfeKOq7jdpC=@hoWZP`kr_!q+}-3N*D;BbEPSzx zf(f3vTOX6g-Dx5=4hu!RM<>cSD`&(a)ZQP+J1=YXsTv`Wx ziHy{I_r+M{S_Ch31tQ1dN8{n0N4>~)gMGsPj`j@Uo#THL1Z^w=w%v|7?pc0terG}^ zfa%J_#qhTCd82$pdP}_1I0k32=1GotDyUs=d$0BOzn^zo*s+U#iKrC!1dMEBoZp;H zemL&-hyyO%j=Aeca!Mk39+^t_j@k>=>iCZu7i|$dj>_T=-!(Lh2iNOp7C|4$;CbKw zAea^byzYOiyL}T7+JEFnB)ob*>$KoQD_4%+zV4LTBg{m2Rn&9R8W~_sceRYsYL4sX zRkl(%>%wx33q8n$6!u_zzlyktN<1Cems9s68mASWGxda@UF^hBcL98`z^BW;A_-G8 zx1R0$p5jf*e^mUi0TB(Cq}qHQC8lHlZvAl?%Pp@~^i4Mh@~{(bn24k2Og zS+F>-J-*|*?z=j}Tng*fjutCpFFKaF`l6N|x?T-Vr#nowBJ>B)Stm_CPx&&-9EBn= zOkg-1?C{~^Un?1Jxa~eW))K(J`tK_Q6X717YLi4%Jwek9jKr+?jq5midtLE~%kE$H zDCR^d=zZJXV0@cjtbI)2_Z^;$T=U@c*IY5V6VVSnwr1wXGTck zmBuTHzyA2oP3_u0$U6PM@BQ?X`|Hl0>gdi}na(#v3DFQLxpPRaxEG1N6z)RW5SZO3vuZj{35MZvS$1~yBP=XOz>;lB> z_tw;3xH}h`ArUwYOkd{PP7|`larIPb>c>U1?Gs#7`Ag8HX_yrZ`BADWy4x&j_s{bS z&$9Iz!i{8_Jo4kKLFV|l7)TIsThl!*9S zCzdA{320QTyVwTUI&3zBYK?Y%!qFY}+3y1L?wbgL=V=W5EHINC32nBlMqQkf-!~SB zmc_N8AIwwkk`)93#TMZNTf7gZL6R0TVc5Py&UDxN?-(__Ct1F)BS%+s{QX05W`10! z+ui*4wnb6GhCT8%`WPbcou&~)UMX53Vz?WLf#TnRmyJDC&X z!Dq-Oph;0qtQoPnk>GCrh-Sy8%T<3{M6_Pe^Txh=m30}l%Xa?|?aippwszLb@5306pJ zp&J3Nk91s(o8z4Oz>YmLBFDwmYXfPCM8<|GF5X-s_}D4)rNn&)3R6uSsPb}AtpWO;-a2yYT>97)XyaVv0wvt_zDKyz8ocAcVVEjm__JxG|zH>sryY5_xBb z`55+?2W2L^!KCMU8*t$o@(RCBWzC1%!xAIGu<4P@rpZ5Ttxt7?boE-nHq0DT;`vrS zzEJ~duH>wtWJ1ttI5pxQ)#Zz6HM65Vg}6g!(s2`%kQ~hYl6s5`<(j=sy*V5ZhqmIeBtMBs_g^5`-g7_5tMVk zXf;#u<+m{DEPHL5)c0aGm?~0H{bPr(pdK(&T-|)6|bqH%x8cg3DFmC~=IcD@LS@0QhD16ZwBRt>E zy-nvz~GUA;B+oXAzU|uk*H4OYem3^{uu= z7;4W{)3&ppj?Cy|>f76F@znV8@5^=U??r-mUkWf0b3GvMHx`j!OtldB@cGT=ADow~ z-Ek---dUxHy+^&X5{9I&Kkis8b2FqyZJDaFR|le{yHfpb@+Jn(?^kkK_cs z{=^yN(;fD)O2m>aJj4IW_YPqSD1QbZF_gFw5>gYqa>v8cM&dweKM(T!xcwE1;K9#6 zFwe&O97^25NA-C=v2)utAA3{!))Pjs{LV*52sR(OeSIG2G1&iXX**>wql@~4dLpH9 zh3@TL>F$|o)dpZz0MY*I0|Mgm&qUAkFO&U$oi03}D0emOeu$~057dp*=(}5dMaA-7%`{O$7fh}3 zm0avQc6StL(SBQ!hPIq zhbh*0N76?wA=|hwcAjbY09a>ad>YfKNmb^u3hbYch2QMpG((|Z`b<64xHfgT)t*1Y zqLctqdfn~}Clm$CF^Q41O=V~}_)94kidEWgK*du%CbSV1q~9E)_)K_cb+QEbMK-#& zLzkqYBds2u@7}l?6m-5W`7ES`ord?o!e}a7oshjU6iITiGP)FZ@=wKt1NqkqZit%S z(7NtF=B8Cm=JE&YC1}-^x2e|hWypAsJNJZUE?2um1hvLJW}7 z0Ne1g+9IM^nd>m|sqGV1x+5X#3qYJFNZD=mR_u|ujFm9}$?a!S|rJaMgWk@9f&u8Xz-o9~PL(n1A zztT>8+ZY?OKMQD%+y)i#hDV@FeM|E(5*SX^7325+ARY0Jmos8MD@ZYzE6kg;Od|>)U4(=I*Y| z5XSHEt!5EJ$n1Us#()xcRV{s|0Z)Dr!)6q|u$s;;Hn}RvgB0U^f|(ezzZB2m3iCUh zM+uWF*h&SbQb=3L$;|chu98z2%Tl@SUf~U!_-))*jE;>1To|C_`v#UH`a!J){IhX zPBYz{thj~2ZV9T^dFz4)4>$jjQ621KZ5Pgd9^oUOXPov&Q*azNBzB5Vm*q0e<1?eW zuvPeN3J0X0jSCJmT*EJ@8XFF^2vVP1;DnH?IUwOLT&S4VujqzUWHBB3405_4J&@+I2hQiTGJ}?S3A@ zHGj}t9y{y_oAqB!5jME#-0syDlzl8!*H)?4eDa&w^9oM|aU#R8 z$IeG?C7g{XWe6H;tifI8uD>z4Bz+rgW!vT}57raARHLR&v6s}GG+fWJ_EH*F7#I$> zFsVkgPLiGTI?7u%EgHeK1^g+EogWJdQ%x3hp$`bm-qNEIwJ!L7qGq1ozW?4BB_zEH zSXlRHv@GQ^2cT~?{@!fqgu7E1%`r)al+E$r_gos)7d@es_ZDz5ZqjA&aLVvdu$BHF0pdx8yM>IFH^Te_6TW zl6mU?fOlo>Jy?WGQS~V&`ndwn|1ozXbr_s5ia}`8#|OF|uoL1I@=`l0}7_$fch7yi@-d#-o4sZw=@?{sONvc*ABC6x5h!ldttCl&e)lBTO` z&p!D=_NnmsYrCmTUiag+*lqOMkw9qX1EBpw_2R&`P%S9sTYb1?Yb_-Hm;FtqxitqX z6@$w5C?=U_DDTaav8#i_Yb;&2PL=2lA8#^_8BVTFd@Ksx9D3e46HIKW{f`NR&HJrV zK#nJNOU=QHU5c4gq~h`1K%}uF2}B=6?R{@dNPQzZIDCKp zqJ+#r!P5m(9(WGiApq3&Kw@XeynMw=y@mPsP7%r1ojhJ>?+{wg2b4Y$Ay^N z4VGj5WSq~$MtdiP3 z(B-4Pua?NkVe7QQLwR;&4lAp31SO=JXN>iT$4|RXtk`T@Srd$Ink3(OwYJh+${RnL zDp~pPm9j`u1o(zCRmXRFC^&Ssf4k`PV8ahR-?f^*iU^WklxJxm@wRWGOy=O6Cqzi7 zsZ14NqY#hN>=A2ihq=I~)0F8bIu$~8Ey4jW&a2C{tX6kOe)@3baES%CiWB%h>+Ovd zwHR{6&+Wv?rHeCSo|mLA z#dg?!HwZ8DNZdZiG*($OeVwsc&8{6x@4nqfgvD^Wx|7NLX)4<pyEQo$8Q?GoR z;hHFJtb`tetoYI6^m@3y^kwG&AAM*tYf)9$0z_aay8)9v zwC#FI+!Qw5j>>cES@Ocl2yeTc%GfB7g$QT493f_{$?ZzOBy)oH!}UffOP`7IF)STX z^*-ctcukM>y-Q>ZnM%cH%QYS*u{K5WWkeb-?1+W5fGbeUl$J7Ti4+upsVEWQHo9!^Otda@*tc5;C*?<2?)-m#%E6SW$I8 zkM}Xg8U2=lhT8lI^vJ?9p?RicV#wDIP5U>4$ItXXV7vK0yR=s%SHJYa7%lV;oBOCt()6fp922JBxt#WHfo;fy zYf4V%B8HLvHfh6!r+*yx=2n87%L{`@thmMb;YxG1DI(9ttG$z9c@R~h*;d8YcH8515q&7pBj+%L^o&R#Ysj zp4o-Jyk-&`2vm+8Q#GBVs&ynPE}lF78H_g;Gt*yqUxj1EPFc2;(wKWDVv|UeN|W=A z0m7F&`E2ZFX26Q)38b3xbTxOKH2qdb_X!@MQenNPg=p#caft=MOAB7pGs>S34>|wy z1@5nT0v!2Og1WajCoQm&CsDh{g{W>zL$qzIJy(6k*N{<40lQ%4Sva<9pIkKKJ6(T^ z&;5LJSjP2eXc|gY7&$6*meg4@6;jN_{14T}jS23M<1v=+G#k$oA##kpJXnS&e4CYZmR?8o4Z|{~f)7;WK1)rF& z3qCk6gt*u%pQJCY52`maa=Mp%Zc**JU6E)dZ&~dYZlTl7%o{m|C=~ttDZj!6hIim` z*MdD2{e_-i(6N8Ke$4;sk$Igu#mL@uynVg)jJ<)j-~M|I;bFp!vvVv>t&4`sB!)n7 zecB!}KSn!$BE*hr#)3`TJ}b8S7AiX`_zzPQ$(H|uw`cS5Zp==N@%ftbg6(kYZN=|% zI%aY`6x#Z4v=QhoR=e{kRvx+~>7j2OD+EdkW-Z+!!kW`5Gi zf}Jbzk4Lh76@9>XVFO~l5rA25YE>L2Y1XhJ*lZ29p7tox*_s1gEzbxn{jEsq`=1%y zbkSh@ypN*Z(l3da=oaq~J#@N%SjYnvQvN$vrv=no&f<|B7INpv*` z{d{*vvEI@}zy;l%8_dH{Ubs8PuJjvsLa(L|gb`|3ooPJ4G!jZIuhjJz1(VrPg{M^) zV7aV7BK9laWg^O768*{+0>1m-yuSZ$-;p92m_>pyijc?{oUcYA>{uJ#dJ-Uu{S2Zk zo(ft6-DwEi@|>}CQcQu5o&pZVT$sHGwS!~bY~6ifllDN($`|Ue<0z~xc5z7X6sjUe zMLDr5(yrlehK;H_v4s!;IE1g`idqYqDgvCpqkjs(8eg;)l-tkdBlX2yBnpxJO z!_%}i&dn&>&(w2Rq;5mEs%^0?LZXg)=onZ-CUIqZaXz=ike>e|7Z~IV&E*E#`Ao#D z1LrQmC{#BO{9BWrbCz-5@m)G9bw5Ue-W&NoG)ICXG+eL+a%f*H^l zo(m$i!&f#@@g3=YaxkvVrhFjnZQYEEr$~Evo(Xf zo~f7zV!ZN@d6P}5UW%_&0L87w6eN-&+hZ}_h_RNwGL`l@Z+o6uXXmm=-AH`Xkw zuXwwrCzO@$=Zq#`CcQIIQ$6VT`3G!0wvR_(-_r>}eEuZ4O>AMOmB}rM@vo=oAP28c zVU#SdXm>HAn^V;_8SJN7pmRycLGA#Oo}Krnqla4Xq=f)-v{mqejO650))SIctT}cJ zg%8)U@g$y~NfYQ09E6Cei&_9__g@9O{}g#I8rVNi;kSP%t&Ge85EjHQ55@-sWcK%u zKa#GiEI)^l$`*!XB(v=&i|;$U>jY`L9T*We(nh2R(ljh=I0>V@Emzw_xqs2bTOOU2 zqr@ZfN{KW^o>sS>@kH_zk{$QdhW=@DAR(8rHtOv+ZC}A|pH5jEO%ju^Q?D*d!-LHU zj;D5RGBiq1tLbnd>gt`S-b`e&-_qr%yt%Q<{1{*yIesG1U1A#FUmbho z!*z31h%VGNnEpA9*;|fWYsniUC2LgoV{_g1rgji}-eWTQSmOv<@QQ?V!TNn~c0jz{ zYO<@Svxu-d^#?9%Jz8bucxNm7Z~i?jwUQ`OD|RZ6v@VS)nglVBcC1twYc^LyAB;NL z*0Oz$3+I^ym(9>CvSqG_Rwbca!FH-8DVQ=grJIl&%cob^>;;+!XY88slwjox1(@PI z_&rE6;(>Y~BFmg4ub)&qQgC3{wdTlNFP_G;rXK6-jg1Sk)(W z_XaDGkHVqZw+}qG9#Y{>jJ5SsboR6uSy^7x{>>*SK5jG&03c6_xVjUmgr~wA-qDK` zWeXZZKYy0m-bM;#i?u9l1RyDFU2upaY`Ag4=F6Y7uAx~Ms**UX+YvS_?4@;D zsy=MxK2=2XAOCr@t(U#_H1y#bD4hP{0{7LgfRq#D%AFxGW#v#cL(g_{uerzUkmr@XFs{{K4eyrnzKjiAr`ajNRK4(<3?R`6s?N^U z#t*dNC~UN+JxMU@=PB>KdH>jfE;#i5f?E>N4IPf?4aK-c`tV;_7(vmGe?9F1#`}wK ze)2{eg;_YYQiCf=ivm9oIz5WW4$@HUE;Xe*(x*n*e8pZFgH&(x@JVo%_I3E^Jc;fL z7P>rR!Sm33GiJ6Aem?WPgkSYA%6=I~f~P2Y`qJgAhgR=U&bFU#hwJUVE3M;Q#tM4@ zq|I3GeOiAc_@(1p6Rl#`5)p?k;eTYrapH#}vdI<(^8{rw4G9l^n(^y!ldaw^olq{h zYO#WSig(L?VO^sHJYBFw;raB~@+~FV8iInB)LtyiE}UAvGVz$RkB3h7ZnZa}08K!$ zzfcG@-1n}Ru!(o1g?pb1(QV-SM2U~WL4U~vY0Oy!C4Zr6eZ+>xDr>J}y!7%WQbg3$)QYIb{tgCUjE^CA^A+-T(5;#Z;6n@ca;ydK z9OMZsVSRq*+sPlE(@gWB#tzx5MHI)(FZ^b*5Nx;C8xumqPL@7@Q~iK4A{;Vn9s2`X#^ z((@Z$8>X$p60Ke&r8V?DV?|lQ5mN;&mpg6lJ1+}Uywnbgb1P;Uw6|Av6|uLX*KDoT zQp-wJ8pyUH$2{5bOhP;$`jr5l#vLMa!n|uGLPQ~of`6F~PKcWbceJRD|iF=f-)If%j(8ANqOT7Sy- zD`X`Ll;;?;ClL3kPj7%axc*DY}`9E2BN} zN&4(|u#1tyT+6KBsf2^;p#U4Sco`3+o%L0jhN?^RzMUc$$FXq?X-;zfgNq^vK}_t% zS5_L70b$W4?>rd{92{~w0b}{Awc1XTH<77!hR9?A2WGknxsA{~#LB zr9^dltMUksofO34ZpF-WpAckH>keO+(ApBm-zVqDdwdgTbB2(;2TJW?%Q~s`>@J~I zBR0keyNS+mmUw`3G0Gioc4!ksAeW1CeBlH7B7aAQ8t8oKI`W9{*b`@|40VaEOWxnn zGxK+Iw^p2b|4!Lb(BsN{wD7q(JU*4y@R>SI>LVv$215d^F&#SPAdIdI2j@TKZ3q6p ztBeN~Lq1=6BNQec&sigWa;|v@_cmZ$RSy|;pmT@7R`Y&Y2S1N?(I5+wJTAdSvhU|h<-(QgHrp|u zIOgFZ?8VfTRcOt%8$T(6gAk~qyS)Le1(dq>d^q#tw|mJAHni-O3=mqwH`B>++K_uK zIfel1QLNZy!*ufMIx&ngd~<~djt*!DbT)@g7U6^!r^-ob?!>2?)b|Pw-c^U~<*|cx zj}erJb`M8Yw=)4X+M`>Cz0Z(CucUC(?a7OHw?H2*4+#&J{pidIKu*U_|h%Q%#|j;jYm$O^@<11+s5&qbK< zi-AhFYEJN+Ir?eplX29Q#>hF?72em=PnJ&>N#az9X>(f#9Uk#(f*Z!V<;Hg}+$>eN zXk=lS>y&*R&%nPQA;Tf2F=`^t{3f+u-*307=6kO@O&l+lgf~H`Pg-^*X`&|^tix|z z+mUBJwwbQgJg*CEOR{u#Jjf*$v3>vQpGu^B_28<8r)ezETbfy|8Jh)F+T_-QH4=&J z40GRoLQsAL985SdegN5gM3K1egn7b3U)dtQq%jTnN^Sd?fZuO!?++Vr{DWZ0d8F&@ zWO=;^XOfBNG5cR=YDzrM^-pt(nAy6=?p zb`G5h>$P1jbyCw=Gx|6=2In~vF>H3LFL(OglLF{?&E6?bKi(LvzGBa!+ou7(nA=%V zMiclYJ-77&efNab4HF`RuXY{fH-6I#MYurGQUJ2fzB>f-_EzR_e$8V^u|z^Y^n6jeV_;3czBYpV&M@4FqrVtY zKyedcea25XqFa>dBk#Bfa59B7;Az`2$n3L|bPobS++!y-N8ar2Su#c^7vE?3@_NKQ zYA+%lBXo;qCMUWtkHggu#_|-F9Q8EN&z!TKYr?GT`zFU`xge=Gci?7yUM*O#KtX=^ zt$%>fyW@sGvBUhk*#ijzQgs3OzZ6kcqt>TbA@32|m0KOI8*%Os-H7QJVQ_OAx$kIA z!--umk3!-Dg_zl4+*l7Ljjs51ToIqp=2pu2&*Ggqf@8*QhmKWo(x}M4IEbnzzv=3r7iwqjaK7w26Av}V%NB`-QPTM|~%tEhbLAHifdO4ivt#zWmD*Y5k} z*t(>bOpeK;>*F6azgxWxNA`x8ADh4{#?1ByGMyB;KY5Fbdll}I=Tk*`>UJ;)Yzm84 zRv%>=xSpz$oVb?0z8ahSvr*bvvD2o^A^e{Xe_coY@y4#I z=?kh|{Oe)aoCV-wlHHv7HOXWxXOGdRP3BhHyIHj#(Kj zaSCqH*_E@spWc^pxo7@c+3cq{;Y^0llu&>*Btt6MRaXv9)4^N^d(BP?jZ1$g>Q)WU z)MV}#rBz*8X6HPL^f3g)j1;x`bX8TO*ObS|JAvdo3OvtS(lAH)>+PeP{z#hx|Gc3H z(ISVv>!t(QYtcJaQe?m)E40%Uf^#a7z^5_+BRD3jQjS{)R?L#WX?J{RKac(ZpvJ1I zQhk&zv431pWEI~vb8Np(Y&^Rr>orL`dVn=J&n&YD7{I9A@TQ)X&qhOo84!_eld&j& zN7Wg7W)M@U*0oPIt?tFLp=hyY5@C=SNb=+H2k>ie@db<0_cM5elndwX(31P>SI?D#EwUGEgzVd9gc{_;~<)wT|j9_w>b2Hi=_m0mQL`KQT>hOHAnk>~m=Xw~+Qp#PxI%XlF`?L~ee)R2p37Q? z>4=#Zkq#2Y!>Q+{*~W%Gi)w1%|0zHr^)Pfc)bFad)eu7&2WmV-1pLmohSWIL|w3 zN7EURW(e8siPJR!_>P-2rWq~Il`v;P2L2|Jpah)vFk|kF@g;7j;HVt5+FKs&TtS98 zVJqnt8|~5C+!|h~^e3eP44x0m<(*S+(n0$X&?k5VsZ4OD;Fr*D8O-LfXr*}eW-hf- zoJyB8ixP%J8kut}qRjROOr{D}lB&$c{Gq^X7K{(OF9YA>ax})(`%DpSCDk*=5Mejv zBDpnmh%3%73;g7+aV`NPWHm>ohfC&*S`&-UX(*o9dcjK7rTME&_aV;>R_VnWo`I=M zv$0j?DU{rx7xZoiZ|NJXjr$lw?5c3|$u+@fn=<;MC#Ax@L?{wVWCQ22qqxltWBmTB4*gC3!1{_OM8vCWk=jq6=nd9xA+=&-KE}X@&fhL}KwJqDRtyv38=&vO^ z63Vr^gYgS8Fv=?JmEud1DbhU);_5wSjoB2d<}F8fXPWs`OEIWOssBh@!~w3N?8fQa7?e2FhZ^8h zvOUfxe#%-$Bm_*}CrZ_$8(H(R+nrE_8sOxsHD$!>S!t=>U^gDO%kdW+bH`O#DugQ^hFH7nJnoxPV=UpzA8tfo%?^<=auz z{d2&fqvRlYBa}$?Vm_%5M)mTE{rwmwYF|I;PP$BsRZZ7J+^}sXdX_NrstG>5@sno1 zDSE^RXVvF^Et0>^_Ry&UY<>El^`Z*fwUF4Q7));@fqU8F*-lUhdSf@+@_5;U|()22awZ+4k& zK#quA&5V&XZKOGazz%vkJ6tL$U3P&dE-o0w8}fjNVX^gWe!X1fT$gy>CbP6?8jo-p z>Pb)BW=a#U)+NdjGcGNkt1!MvZESYPfn+nv6*GWk1nc~8%?G>Cm}oQvReGphC{=m2 zxhv(dH1SdxH}Ac0F1j`AAV4V1HZ#jfIM1+RJM@m6`9!d`#gIM}*!`*TwJn`3(mBJb&EC96bO}|J89>6-UR1dzQCN$DNPuTi|E{VKFkFV7Z<21~Kcp6K za0!xt$Pcv#nMvOL->BxUO0^kbm5J?_l|=(n{0a=Ve)7YJ|K|Ao>CSgB{RYXa^aG0u zfCBkX)E*)Th}VBL2_WDj3iaS?750% zV_gXy&F1rlEZNBdI@z!l<~VPyGS@w(tCxV@2hs={M4g3p($?~dQ;v4UMI1vOBgTv$ zyaV@Pc${AbXb<#);;wPbR`nlU4cAN=zl=1~rW1}j6I@GMJ>bdePl~7--&#-^2^rI? z3ze=4e|D!tzfXG0(_V4@K39SiWUT@qRlK}V45@8= zQ<;=jZ`0t*dQ1L8Viq-T>v>!Wa6!9snG#_x*@tHQ#F!T!DP18YDTd06FMo^^0S;RW zOU+f$!8=O@r5;fcuJ}Eq9ajnA>!FIw%7zgj(2Nq=Dw)|Q46+S@pcttiULc+M{p{xh z=jVP;Fv%a%N+y8nniu5!y zR9yEr3wu@U1bZgBiioy!yYkIMn4Jyago-iqG@KKqOe~QXJqts+{eW^xc>LFsd-|`Z z8ORTiMa_GmLijI2ytoGaZd+f|<6@q#YTd`~uMzDIzB?8R(ofkQTf+d6`<3HLmC&Z~ zRvj0TCmWX1&X)NO`~wlVzf$0AKD8FJSg#-~exUyuD{KDuq-?KpeM+BnpP5~&wYBF; zy31S?pV4X>YOI2UGb0m2f{`;4^75KhrUF%S(bWAlW%DD)R7hnOqN^+C(Q+jdfNs`$ z=vztFjuM$w{rfu7B#Gs*rb@d=mx}a8qyC?9=ETw!n5`??RGXT7BgmoW*J73XMw=nL zZ##f$O)Zb+pxK<-C@QyFxdfHNN+Z|I?*J&~zAZYODzdmDj+xb&y8Evlqwcy7$Q%C|lLEIS1k zq9{cKO{FnuQ9gy*q~tg`s`Wup3}2YdJ@`$6@-8Z|BH0D`OjNCbN*oy5KNn{OED@ij z4rr1-2PxAoEOax&&k(iM1w-0?A$|LsZA0j05HFA)(r>_1!lVVpWNFcEdX-YKg%}oA zrOWL}a#p~n%OUS^jW>g_KNg;V!}w7cq>Wn<)40`JsMEZT8Km=ySiFF)QF5`mpjzEE z=hafDDNi$awutWRq`>oVZiuqGIq2svyNp!BO~N)x_hVG1#mFRj>GzWHdDyg$kEe!+ zkP;qQ`bL$Q0;`Bi`>iw&i-p*IjUb+Ox*dLDnt1IFtllEAzkmQfFFDE0I196EKS&Q0|BwZ_uX7e| zdHw(8X7BFs{OXu$M-^%J!K=6DM5N}KtJtF|C_u4)TmOns`dLih_*8DIl|O=D`l*w4 zPzSxy|3FmA@!^#Sj`_rVB3p{>hBI*mf5VXqygS)bp+on616PAvSL+;?xLT_XIF*90 z(F)u1>j%;ZGMSx$s`}k>^VSdk*T)_l1Vj#m{D1DjwMfj!Xx*dS548dX5C!P+yapgeeS%MrRmPXdu{myNXUL++|fr^tsn z55dFWgC4mdwz_@nh-@N5&zcAoS?XjO#2=UzDOZn(J5nKhvLP@9xJ3*6gQ-*86HPp% z5B`|npy8CZ2bOK9G>0ijX972V^15IuAAeKD8;9%Skm$l~UN$z@KxaRAi}Ou{@i<90 zhp$lBA#Tu!bVOg!(X7p~R&`YH`N7H73Tjr&GwTld0I@?oF{^vb6)Le-0hy7`UbitN-bS&X0fG`PIQ9C~#lW zKqhLVxu}z*L?^;S5{I=;ctqOEeoC<5WUY+^Yvmx78g)R7gi@1lCD@#;sX~Q(fYR-c z9YjslJ~CJ$7`G>t%jqV)2F3_7jpubxrs3HhS*v3(8}r}} z>|iNM1p;bO_VS{!sBff_aE|fPhBn9XI_A?apC;2ka|DPaw>6i#Tg)oBv2n%U#cYKg zjyPhFYJ6S#G<}8D{gSmb?OC45r*uhbuV@mdoliNzu1p~zE%iqPLG~X>1rTQPKUTcl z`kTJFefiY1a-;1nar$_B^w@d$VytQR?>|B={q1f)%_aAfute+nse+jeYjefy^_ptRt_gbI(wmV^<3wSl$J9-ksS|WJG^u>V1B-2MaFTWLMd8{5}Wa|>T7Xxe_ zCpI{MzUha9T>RhixhGvK=PeV!@2_2$hN$Ni1ID~1+j?e8^6B~ZMsUyTC4!W39yC3t z1=nCO+CMn5d!_E8C(P!H$Ca3t?BASimN2akS6be@e`DgwRB{UxkNf`c<76~uswfv4 zH(@#{Qi)SvX^#9Gr$SC2`lsuVGwM>*3i7Ur-i3PYltV2wJ)oX7`i12SAWWBZWJBqz zsBD>0iyOoAG}QwC^pZUWiFM*-G{uukwfr|9$&z*4pvV3=h7FTOviKDr)FCxQKr?kI z)BI5P?Q#y`Sfkj6O+1M{x15Bfw}5xE$>qAx3;iw?5-&nYHT=-bI?mzekJf#Ge$y>o zl%ce%m*7#tWy@*J)10jwYd3Y|b||M>s=Zq1Gv%ln5uK(lFE6Axl+&(SQ1FPszh;~BE?Ec-B3PbF)WN6HG@(J>x;j^B;!rX74{T&s6V=IebJUH;F_{LTaCjunC~O9sVjG&{ z0f~|P;C<92Si*F(i*DLTJaVC2xDm&xUF^*7;Y)nooK%e0ln#lx0+jCZ6kBvzn+}w< zk}LZ(^Vizg=D@|~!1@NR`93GA(fVnA&x;cc%#0#*ujfl0YJpnM<4vK$+=s)cnxwRA zVv6>X)1T2BnfBiThY$AF%}t> zuc?#>ySd{dLNt{>)vkobTdhv{a-+S)ywoEi#gl(n2yHN!Cn|f2X=}uuN;+{NEvpq* zW`Cz$I-^V^Z6m5xnUS5qnciaU1wUwc~V9! z8qt{|d`6|P@rYfyC*zJO~hWi zC&535Gf`>lpgh*wn%S>|gg*)fe-io#3O(c9`03DzdTA!opl# zdK_2$nF#myYZHwgx3ZmpB-kN)VRwPSYR?_Ajgo6^GSJf*+Ut*WGSm-_q*7a)4b<;^ zv{EY{qS#j3k6*J3J7K$;Yhe|o@2)}{e;SJ)j>&(L6;(GUNpK{h;LaV4IP?G2dDWnT z82pe|^Y*o(CuV&nBrdvy;^ePLp# zB8V1Ne5NE4!esLRm(3wTa8s?-4xYQ{;obt80}8}mM3Z%u)Yx`cD#=M;-2+g>pnseE)v=b`-g z@>QuwijLcBHa>*MPfV|UFNjv+4$df|FBXuve$#(+WUKbhQTLed%GF0jZ{8zPA1DgP z0TDac?!ws~+_*hK;2jS5qF6<{#YXykUWvp*+qu1oG486~u!)i1ouYBzI0e8RyMEA? zLdzx`H+T8M9uh&x(h*Vwui<~#BAL|Irgg{mf6&tvSWfOD*6x@3=>naN#&!#z_;d$w zQSoFhXo>Hk;fnE?e)11v*SCl1Q~C!j+FPD5VtgQjlcB@1e{-pqvt97(fxWD81T|*g>pAm%W+97n3iBE*=`67|mx&bPLHM6ZEpZfmu%-IC^dpcb-97%o=UCl(%1oqzGg) znE6b_RWcMi{AyLyR)AbcLcAsOt>UljvCC8AqN?y zcHqD%i<{2+iq;w{bQi|AHPjaY&V9Z$P6uHV7VfGwx>g-pZk&@|Bi5t0O*#THZg{L6 z4tnutg(EXFm&C~qsRP>l0n zQKAzJ^KGNjbixK9IPJUp+Cheb&CC^WI*#i#DUv4o+ASaSAf;^Y_f@3Y@)#8acgqql zzn2xljWo{+A?Eh_il$}ub}aX7O_IYQ^BOv!+nn~|Pc^?GKsf%4lWA?`c+7K=JM!gj zLL`bX2P%vHj{VZ9Gg&lLn8mTAkOPZM{lKtzEb0$I8@%(di#wfDKW+}%7p$+(nrELI z7eTac2Xb;4X#1m zGV*zyUb*P`9-*7r4jFGgSR0j1b(ll+eW`nxUwtj;jxRp+UVYxRTWe{%AqwcttwI$7 zd)7xZ49|Nuc-F@L>o9loe>lvQYcTwdV!YD%jw%jx$lKL9d(LgnKbXdNexonsT1ax- zL{LIvlBFow5~9$;>s(RVi|41d#GJgAvC+MR*}OrHcvzN-*8)5$FZ)(sAh`{ks5J=% zdo*ZoGa_6+vY($=-SXJYnZPe@g-}z9t>Hx4m-2J>XIn2M>a^c*(O1|cm`8cFi#^Ys zD?|O%-zYA-?n)f9pf)FGl?5D)WS5Xb@TYgn+AdgTADnN^A3D+eu0YLN$sZy*&fXwk zsk_)HGI=}tou;`(e)@juj<@_`|2$$!$*Ev+zje>D3gdOaPM+k@JjFP{N2X}nOLx(q zVu5Ce%2i>8I-dTE@nErw^=zKD%-Q>>+}ld$k8fR2dJo-7ftx8+?osaMiD^rGWWMZJ zwFp56(;WwDs^-O4tdX%~DN>32y0%7;rwMP0dIrUmVk$@vr3h`FQEiZgs-sqSC@Wb@ znq6CrmwTWcVICdN_MwCL9W#w$el_&Y=en?P-@~MSy{ft428|?% zS_EF9oo@97pXTGB)^j!2o5Buqq2yBJvc_#zf}}%w6+{_SU?*3yEP|u;w?M>5?tp}4 zw#EWJoTz1+O*41s9_tK^BH0$^jB5{>d3Iv>>@%e$HwG0_JS`CSQX%gT-gO}aCSpfd zaE7EpLUE+-0Hv#|aDnYA!zH<=hT47$WjLsdbo#cxZ+n(CuQSX^lUP%OX@xQTn>liG zGK{qiwx&)7&By zYPXX1ueS}xqfM9g$@UkahVVs=oHUx1_qC7d4B(TlsCtH5$(r96(l`06vN-PjR;xtA z4BCPBn!u`5zH%P8weq(6!d&^|p?lKHfZ6u}J6e}{o>BLVG@lI0`8|~KkoHTS;W@JP zs*Tp4bDz*-qI3#dej&@6=DG4G>`iHC1S|jypv%MCyP^ByUZ}t=z3=!C%ID-Is^D^N z+;e~v!?*Bp)FU_kw;|2-=_-hu*ga-wbA;0y6Xg`VQgLSFg8~4W6Q0YY)OCU1m>gr( zJ-Yw}-}v!1Wf^mFk{-4AdGaLZ)!wlM6KpCZRH9>F(J zFA^aVMd!*<40v-u(gUQ~Bf#tTL2)Sci}6};4*fg(BVrJ zwZ|=PU*cP36dasNDN_@;EIK}Mdd*4Ab;+|uGd^RX-h6&u?>lX>(dN8oPI)TJ<)4jx zZokn9{pRxoV@nvaV8q<|TN$gkVaU_cBcdX@82o*f;`DIHUw(^Tlpl583 zi$hfJ>)Z4<)~#vmoZ#Ij9xpM3=X=AWSTo=F~8Q5~fdpxakf;wF8LH)T`OM4RnFy6s5W-PmF8a4V%LC9|Br zr{<7+en28E(L@@)t|2nN?HTb^KJ8ZzG{RO)_~+5wG#9XiM_Cc!0h zEp}R9vCi>;tZkL|#B+R4z!kR{l|3s*X~PAyq7t0bvlMXLZLMPV`hSeCX5hJWd#&BP|F zG-IKS%JHowRlHlKrkvRM6NfN8tQq8fWbRrrXgD7vEx>bma&>1grx;OfBx||;(^FV5 z@=q;SYk)c$4e+Oh8u8fY*~xNZ&9VcCM`G!o%V7l*V$ft{hJ)jnSOV>RuFR*s-{s+9 zhJ7qrD|oBe5W@~p_l|t0rQt0U{G!M;Gg;hiJwQidHJ@#VIL>-qvMkqeqo~0)uQU{T zOf%=$g%-OOXOd+@n3Uuw?!d20_^cgy`T*jf$qM~=FyCCawc_0A!p`7GicqmKGA?Jc zu-FcXij%`%%Y^ng*N#r~wh1t(qLU~_ZlzQ#4{WM?KwmBzYy0 zOJ%nNYeI3kYFW%A$o7^JDMikKLajh?LE?jxW3Y~_<*JzKm|w$pkT9`co1!6H6I1&p zK+{s&VYG;J;lLg@E^D6@HAc-j~&MPAtU!G58!63tnFV~UA|hx~GBDd|99QA0{3)M^n7h@T$f z4qxe^N+A_GdZ0cFx5{(`?7?-j(~rBLwCLZ2wgv|09j7!*o0N?RG?;i%1x{YaJzQ#$ ztlXmf`j=-?sHK{d%@=*^+QfvZ1jjFckuGS)8Z&0~1%c)@e}eqB#Q{pdn2KO~2CW=4IhR+b#V} zZG|MuBr1kcWOs!E@|rW=*Z{q4K3#4a=ilSHyBuB6dV#s*CuqIyIi&U_F-O8@)y!?#;>nx~2b5F3I=?jji+tD3&2Zwt(|IBSSoY-wxYw z{d7oyu0Gl|GxW^ux~*??GzfW5P6cjg#PJj*h&Px)iLV>v{m%LBukn$3q5Dd@k*Ey8 z)kVByjr>NW^zfrrvUt-2geO_d%y?5W}k*lt$dm>P}3)#;drjxf& z%I+724(7*j2DOYu!GyD-HyI>3(k*BQALu_p@i(sIgV9|v9R7PRf~ET}pO-b+RG;|p z9(EHayFlwY(>umNu3n3DUbNM->tHnWvGS~W!P3pr8rb%^sPDt z7FjtP3VW@;h+TWWckl#9F6_Yj=QX6!m#ADceb0@cFf-jd zV4~+o=l(h%q;M$b6*EirQxs7^?C$njcy%Skm8>R#I*t9ecj;+3gL2T#}>r#CYzAcQBAZE%b^S(6_^rcbwA(j ze9@;8BRMH2MLA!G-G;ubg^<4=yc-)<{TtbFnUQWpJx00w0HaNgQ%Hhxx1CH%Z4K4L z_N&pz3~{Io;_Xgm2YtKRu7SgXNCEZgMtu8+n5SG;UI3hSs|#@lODURyjcXOwj-mrxv=DoSS(GKg^VzmgHSp#!EO|_5a1%|9ajmMk}ULqr==*x3Eq->UmTRG;_XP)I`04 z%rdzSBKzV(c0CmCM+$CP*`^*JsDj4o64eDpe~F@;2ft5!f(r`M`ijP(>H=74Pq0_+ zNm*lB46;W@iPEH;?H8oA{vRO=$qX!h0DwbFeZ6CNW$n5&n(lOxjytw(TOHfBZCf4N zwr$(CIb&nS)_HraZ=Jo*xA%4C&+&KO;~rJ@)KirzISKL$1O)i)|6GRse^ucP#P%D9 z5zfjVN-V{=I!VOPTA#sgYB6+2oo(@;F!RX!#6aZ7T0zLc)V3OC;tJXjur6|_c6p96!gor6s-?fdgkqLap!?An~ zvCBL|6C9?l>$vgs`sjpd|IhXfc3ni-e-pV{B?l4688Orug)5Y;n&@p-mxv&qJGl5>q0Xf)WDl_7l*2`Zf!L!X~6Ja@@TQ-mvSRabiwLG&glUZ(pd zMm*t#NU>2vTTxmy`<)07Th;%J5}n73!K!D?DF}7j&8vz=%v0AgKwh_GzNR8Lw&t91SR3SEtD--IO*{kC^Y zQ1E;%%$)+cPmUwKFjTq&97Jk}%8US(x$kOV!4P3?eRB2mppfW8VzrBCH^vw*S135q z-V!Ms(-cUKLWOL;!9Yd2U3%E>kF(~h<#^H-qTonu8#gLsjb4Bss$Oxne}h0*>xXhV z{ZX5@rBwRLlKDx)f}NMSrTz;Ip^WD?^TgqJ1!m*{q6f_h4_ZR|eCyL*OSrQ}ZtkFT z&LMi|(GsYq*(jyA!wV@M6{3Yww)5+wcV$E%ghl zt`qHv|2uSN$&sNc)K3_reAD>b@upQQ;8lMo%;cu@x8T;$xzN0nNJ(f86 z^g~;XmehgeNaOiW32-y@+m{zQZ4f)^7xI&t@T$IiCp6r+n%L{=1TlzaDNr zdcN9xxX&E(m+CD_7j_)NTY1iaZ^bY-SsZ(J2RJ&u2SbGqAqen6AJ^} z=R7_fs!DeRG}vy>SiXpbAjgKbY+CAYti-1?1ShbJ9zH#x)gtf!U0+VF=(rBWv zj8J@m{}V+Pq{#7flDqJMptGldi|zC$}==u*|}xO5n49nz9BFJ`5)bvJr$c5P+= z@xYibZHZf!$XJE1ZT zfAnDIK9z3rp6cO9bP5G)j6StkghS!6$Hx~nInxVSA{v3%@g=|s4^v1G1*O#~2LP|3 z(1E7TO`&mmD~qAHI&8h~K8hm4;9_rU;ci6!fJiIF3I|Ix$f>b?OYR9~zFMx%Ec7wx z41Gg=RnY3gck8^-4Z{31EpOk+PPB0u<;_j_VF}}i*IPW})&taaVF-UDQ@}wIAwz3s z$8ydTfWtxm(`q$PXOqb$E~8=DmU#i3e6BS|!p?Gg@yPH99UK91z448GXa!uyy5E)W zyxRF@@kL#y*&vQ-P4Och{uqa&!~X74+r_Ic3PJmA7}P%#tt~b&zJG#Gjy0WTSI2Ds zw+J{=R!Mv35#qm_tKF@bInFJQ9CuVucVE1F`>#Y=*d_A5-9>@xp$-BFJXVuMgP*>B zhRcffFu?s*>~*;3#?~!($qII!`Z`BTt%;9~W{WjQ`Z9V*753qKA$%w?G{JiyU`mnK z{GbWLf!yowab*8ufsH)S_hge6h8ddtx#9x;$Fy55QUzq^e@j8PZfaS(|E|bgsy|gl zO+|4#0z8cgTc0jklO_R{Lqp?eH8v-2rX!y^VcJkVx|D2+L3>) zG3~=x>}~KjgclO7MXfuW6yC1$BNGJ@it2#%8UWP?N zPdh{e@L!N27lpZSC)7_7ZLgVEs<6+;G0@@+BA@Mw#%%l9UVy&Qb!``uq_^M$P2!@_W;@c3rFn#4>8%WS$hV&SO`9@&+fefwVVUI`?~ z4f^)im-#P`8OX2y_{*qBE~k(lFx1`*Hml4H-27`kt39`UUcp2js^3juzU}$Ic!Jc1 z#3iomL0jqEth>BVLBI77^qHt!&BXLAC$}AxCxoxxO(e6mq}zEPe*2-@;iaoTwQfF5 zX};dPMI{OJ=E+G;$c|z^5fh%P2>RnuSdEM@w+;>&f#MK95q1BYVbE~l z{JJx8O)iY>A*1-qaEUvsNIqpZ-?Lw}aVp!t$o zxJc+6I#cn}HDmo4-5<#f@Z-QrBk}dVj9-$XPQ}Wd8dVg&?zDZa)k5Xbn6g6J2&1-Q znC%bLRCBMvib=7iUXD(Ed(qr=NtC>pRD$Y|QeAL{L`3q94PmQoEBj5x^y>$S{4wb% zwWe$(xv1Prd?i=+QBPqy+0r1Tu-Rj9zA|`NAUkZ3_5yPzDdYmfQ{IW-SEuVn^(N^_ z$puE`TpOogJI)!j>Ou1$)2_hv^mg1U9eLoB7HlQgKn-bs*$5ro1zZy@X-8={dmHcr z3Q2Rao641;lGEi&Vq95qGio1!V0NLMzcx2L=~kzmSsXdB;N~+go0V?8%|PdDm8&Qw z?Cj%qpg;{35^f125DZCyUol9|k)YyxE}v~@-+c!av-ppIw7{2c_gmcvjH@*AQ;vww zgeZEQRVssI>NPJ#@U!av^$|y?mSB+{6E-T3-pK$-K(@b~?n$~kVh|8p*#S`6nXUK9 zXgKK4kAiyuvNn&eD)+_R{tCV2!xa-=KEVigwWou*6a`TtG_{Okk_(Ov94;+4l?fB_ zFD8)Nf1PN9bbkXmC{KdkynqJr^ZWaoV zG`G9Gh^zOJhDWKnXvd|`!j(ok<0c3H=@vVSCP2p;hnZs=H8g;>2`O)th4qZogf875 zZhlf)i(|IQ5{LP^%A*KoTcz%wNtq|;7;|)Pu(-2g^IENHjtdNocZg9Nsj~OBizgM3 zD%uJ_v7T=PK+D%Fad~4rASkO~6AAM$`yzWcoC)R^z=hcu@bLH-@ zgL%?n{rWKYzS1Ztyx~(sIi=7(ygB9^8@zYXX0Wl(Td@0+MW~tn&zcxmSDB+D*=Ra* zpuD{Q&h+{bbI&#AW96@LoJMt%#@!;`4v=0MN{NymBlR|QM-;d6IKOV;88a&xQ12U& zm$XUsw5k4bl&Y&KoTk z}ON+V=3t-`4$UGvBL2(GF=R#p_ok+P6Wf; z_VeOk7_JM?Y?3E=ANXpiI@xpaZnpR$9f|Gi8fEd++{Y;z7nN>|%qO5C9j;L&hS_j- z%t!xTAou`+$IVWz=WEPcgfE4uC0(DrEZ*yK6oXq$plXo$<+ke~-*OzDc#YXPCMI8S zxa-@Dm;2X8sm33-gN<;QqQ_k?S7?o#&aAKqs2UN`ZzJrBa`%&jiXS_+D;DqA`z(lF zq8H#A;f7WwwYZTGGZNJg_g#lbt=JQT}}jCW``e8z5SWz zP|xoed4E1+DxiA|ORV$#Ht4#4Vr%iiX*>DD&*X7s^g^#8%|XNrFDj6|mbKb!aRRPm zkI2OURVGA9&^^?fIZ!DbQyKN|C$^V`?->X~y54Q%J;MuH8aJ=t)iAzhT`qK|xBb>G z!3Qk`uc|gS3#2Q^tN1@Xwj4ffAalsoy=dpLZ5ui zZycu?-63%IQ)~{tU+_u&tNEt9BeRKE5vLUA>FS)D3GWVHLbttq(60=Sx+Csh!C#h6 zQoC(mIuP;twm%Zwv3EDrqF#MR$BAqM!NO$+y5aPiyCRvkJEdHE6w&MAE={_s#wK8R zY~@M>kL@D+pKZ5%2fTt43UYK4@*Znv-0(!VXU;9QD&G!VbAln-&r8B<9x#zK<&lge zCu~+8^8$fjVmhx;@b}zH`PUy9yEl@LsBgYTu`MuNg_y;Bhnq*x{0Fi}A5$+NeY=i^ zMWe_7;L6GdXYJVrYM|%ZhuTl#Cynwx5D*v;kZTYSED#XC|Lh>#E#1CKCs*kh z!a}xJ(Sh+0#dh|=HR#MY5)JvMiawi6Gpib`g!mtF67CU_ZoH*Q(IvLagRa|;@QY<4 zNr}XY?p7J;yj-uqpT0}8Kf!Y5SEISRE#`m~=iT_s3frRnaVw^S;-&zV4o$W&ln5o! z7086Sn?5SCeWIHVCV=w&V{ST8^*8?zR;M}b_CpEjfeP$h8%)=E>pi{kHaJ;7XYb37 z()jpc*3z5t=(n#Iw*h!|ZMTQ6_P*YS=mIEcb+Dj`5u_-9*ooM(BdLsWaf>JI0||JR zO}UM72vHFs#a1b)nSqevt*RSfgPM7xQlk$LSfVpE>1duDV?PU zn?FcUUI1CLszfQe-H{h--GO*I{-;xin|6AYWm=u*v9=217VQPY)|S!VL^J)8zlmnM z_wOgX?!{VPZ_K$=pW^B|o7MTVz zOW=98Py_3QW0LmyOVYZ#IG1bV@zfiR$9An$aL91`Cy_PKZKn5VX9h#55Gw_}M05<3wOmlT=B~;CFx*O`#Ns-~V*6o*^ca%Dg}voETh#QY>(rZ~)># zo*P+oSEOS~Tx(41Fx|b5()gj@+{)_qAgrIb zqXNM{C}mH_lP}noV7Wq&>j?rbIir1sH`3H1(*J-3Q2&8-blWAL z(O7rBZrRlmOqxoY^e3s;>Ah^X_AvK)ovqLv+%?4N% z*WFxFxm%3Y-1I!--ZqWITPChzAeAnJVbVxt+ zI8}Dzg&3aks*c6yp-`HRBR`uy4&~y&ssuB!caM1Ck$=jjp0hgB7?5xEfF1B_5i_VY z(Pf&CSDjk44wXc8kg>i(#31;I93J9Qggwh226@NIKL-mu>2#t~q0rA@9OM@#C(l#5 zP)$j@V2MBv8;_b;=b0NuNPBmfHRcc4ZL*$4wKZ5mlW4?#i)QOx(q2G`h&a;5MV8KP zQ27`Pxg=~r;+Lm{qaSIwbuxrgfNOo4^(+$Unh?Hx@Pi{f90~FXXFS%wbzS5+GZ9tK zdz7G8gyk+4M=J1$@Fmt+aiRt;IhNmvbd6L@g`v76w({H#wlVRIhrQ0iWnTM#Au#=& zcgH!wHd^b_I z&F_{Ay)VPt#q&Rh@Q#h=*SzgI%=uTWQc4(7DxrUxvwbTcw+&(HsWp5Qs*%+Xc`8_3 z_;9%QMd{|qi?>Cxd=kF*icwK}kGSexz2QSBx6-k2w(jQ?U6dd1Z|qv!WBt|rPBT83 z_O6S3!P>sDaH=9Q-&-q&xu(<6nyBVBMwCBgs4Y#vN%lXa2 z71N>Y6z`O0!4}U0W4ne^o0${#=i|kgF6;SXt+-*a2z z%$beq%q?mbhc!J5OOb76iK>vc6OQBHCN+8?QQxco>=JT3hRd3AWb9ON&1dX19$emy z!kCXA7g$=1Mm}yyWb$bUgWGYii8V>|>&(})O-IBj}R1PPHu%zI|cqrwan>ahsqBMLjwJdf# zK#=ADf7xn-Qi1FGDsbI_^5&7aHqRM0E1({L0t`csj=r+zvd^=q%)MTT`;z~ERf zAjo@T?qY#Hax7n>vlwfm_I2VWA zF198b(TZg+ra0ETxY+>L&1sXQ&9eOa>sMEUVU)T!(i|sCQ8pCM>_)ZX$qP)(eBee) z_al!5pQvWefS}ySwDBg%jeF}xrL?7udq|#ZYrG#~bdx zcbCpt=pDndCHLv!&X!a&wNr7)?D7!;ss&d$s_KE&Vrli-`@| zynm;vj5H@Cbc^t|{8y?96jDS#9wYc=H~H|{EVj9_Qf;|r%U*en%8SAUff#G zwv(W@YKf2CS&9pCc1YkW`j1xLrQ>n4kiZ+toNQfTl@!LW z!I#sKNr!v(hMFdhB(2uq$v%cIi5M}wd7gA9ZoB-ZgfaaZJfTuKAxshaeJ+Msr?&15V zWF6RmKdvfsD;>G1Y$$cM!{zC^1fs&5h5ANhi6%FD;ze+^LvA&iZg3dBZTIM@b2>6? z7+n1Y$>dZ==$kZn+7IF?0NCjyby9q*(8rtDgIs-a>Q}i6?8AD0$#whj8(bDk8sm2n z#W6A{H*kH^*gP`4>m4fnnfh>}&6m!N+jdJ;%OznR-Vs~qNAx}{q8bm|9E=F5rSoc{()i6}E zXX(YsH)6+ykuNncwn~~!csEW>j08-I#0gydcjV2b1X*h#Jo6$(_NE+9a9V6Kq;;Lm zjv(ov_g$7|6Q-OwG@INtLRPEDwV~@rzwUKWipt^>;~B>=+h&Z)7PD@0f<_I~Zh#2W zG?Aw;j;IG(eFAEv(r_LrtT7?ARP809WB?a=&Q@~XlL}xJ35-m5aj`P0p_8^OQH00v zq8`b83owSB&>QE6ZbgvvEvp()+WQ6rpN%j^l=5N1T^<`-1QrQO7Uxs8lV7&jV3%I8 z^cC@*UHm?)Z0m`%X|ms47bL!*ap~6sRD|0-o2cGRAX{6g)Md<03B%t^(0?~LQaFAq zI7stNEz>Z}b$j}%g#O}}Tb9*;@GelSv7Qj9y$FS@UDPx zXg*C)WxmqO4G43btIe0M%W?p6_s|sv>d3|W{WUvLxrF=IHCXYpkq_5J(D)aF)%yx* zYLpt6cHb`U{`Wwi<1X&mY^K-JcGSnWt_ps$1CT|Kf7Z=EtETl|ffN77&uRgR>|48L z>*iES+tBO3>Xk#>ZsSc5&{Gt=B!aFRGFpYax`HaVNBq=vy=X-p*0v1T%Ur=2VwB>W zPpj;kCaV-QJX8s@N0DE56fYSc8mZ4OM;3LHsZhf+4QClAL>Hcptp$3& zfXvZv3cWYSO)*`ZQ7iwHSpLl1rLKx8II-?VLiSdQNfmqY+2w-UzSFong7XB{WYMizchAW34Gj|?<9nPs`>V^c22Ll97l@Jq6 zSB1#+N<*+x;ldL-q2cM$utEmCl7^gOFn$^F=ApfPZYZUqB+8c8Rvaph@afyjMH}A#c*TFcK>3hVE64=#2Z=(p%d7!3z`4o{3C2?!@6DIfa~#Z;dC-3DhHg5sIwZe`{VAAZY_ zWN~u$22T=ga+2xu^?sK1bA~V_EtNKmz0u)SF3nx7WZZ6T{4h1ox{f1q9UHVFspQ&Y zN~(JZE-h<;>A2x>sAGrbDp+B<5?B?bnk(Z0r$L!cFL|M)*>(PR?TFRe(;BC695v-jJ-KCP<%y{B|8ins)C z@k$j?i_@kH`FLDiBw9j9&h!!#!SbgWIv?L6A5-+JU)MKrf?07jY!s%-=os4hqS6kb z-Nqj-DLD~-t~i1;GHhzR?;7jixCB2pn4VZwyh$XmBEeay-8q~Y^^`@r-XLGlS|KMd z?Y!AV09I74YE?oZuRpUB(}Jy;<3$jsA?s6%4{?q(O!jq4S;VxsN zbvZM7A}KyL#(oLtbyV)IIEY>pVC&Pp(KMlpaw~R>{iZ4@()J_9ESA`r)|z^{kyRW9 zKzU9ac&@#$jyzYO?Esc#HE~eq5#axHv?3IXl@qk59r1|O5$ynRiO*5i1V1hmF|S&v zOq&AG)|c9ky=qWW!3zBuZJ|ccgxSgU7L*NVO}t&L#b|L-S7pprz~J<=2{kNVtK!AU z5_?H~#Hw4{<$D4&o`zgReB#P#G2(FL7CF~e=BpW2nyW@sm)%(la59i(#4K~ur+gZ& zS%2yVI~<6AkfPyEh_KGj>x3bw9yi>z;xJaATN0MTz3KvEigy*j<@hRB`@B+O~$1A`mg!(;%~lOyA!imK=(hEc-|O0=(F zPs8$6eNyE|=V~tml@RI151?1}jL!^_?yM~V@Powa=B36F} zHuO6{9wRU)m{o)aD;{Mw(906@_^`Vb!hLkUXc#N>?tvOQicUB~*x@PP?Ixl3Wc!DF zf@zM<`v7^B?)Jya(Cmh+j`8P-?cAqS>B)?)+XjiRJcXmF)63ly1oKOYgYW%B*6OU~Za995 zXDsX=SjB?ld@qa-As=}oal<>;Z-+i`&iPy4#IFdZlVY~AA0+Hg7rqe zSB#KpWYEe7Dz01h%3M5dlXG1912=8qiC?z$T58=6p5C2z?C-w)u@bqL|0VDx{~2d0 z`|&LB9I?kRq5H=EkO$&T?b0;6P$-F$JcvlDQfXPV_!(Gt~|5eeakm`_i-0^CkdnD!EyveJH{&f4j#G za6Kaa&5_h7A1C${1PXmw^IrZU#MUz-cBCpB#_)8S6Vprl5rs=e6!?JVeZLsakidiO zydQQt@*W3S5rkTH0^2TKi`oi+a`ks+OGVC?=-H`Vr z3H)m+7stCnAk|kE5CfRAj_>itJlfvQz8RH5n}Dxhk_KYEa=;;`zs_)|eg%GNGWxB? zyl}BOyhh#P&SXP)b;pS#zwths62LKd>qvgJ3&z>|aQUFYRh>u@(sKP7idiOYo-{}+ zU;ah9cz|QY*9l=6%DuB=Y5p7c?(Js#ihK9>>)hzfyJ_0A4z2GSJGA@fgRdATa*~D4 z+jl~v%`0&(pOCmcv!+njErbjt_v2HRzK$0ki6h0POZ;8B4}L!BFT9z>m_MMubrkfEFnPr!%N}eIao9*ylQI8DbpQ2cAczY{VR6g-rm&ru0HJtVge5%a=Z^clzEQ{NXF|TxKC^5Ws>ebc}7C)QoJTFaARajJLK>}N#No5%M` z)Q_^-9j!Qf;@3aonYW%kj!Q5se8uh_358+?BJxRoumN4uc}VwWG^0oxA&u0Y-X0bo zd2mald>mx+CB^iT();-nSZVPQR8>wM6O&MzvjNc^@`G?Q<2rQ$3msv(YK#8sc5bY3 zlSu=ODQ3vXWG+G)>exf?W=-k@mbkR%i|*~Yc%8YYiWaR%*OTn5MS$-UD;8jZ)^I>! ztg=FJyo{SBU9N0g4!VX@Px&w;@%(r@OeJmCW3yMDOxsyIh|x)6&Jy)ASjo9JxCWxm zwW3JVqvMw_p0L@63x8Fkakg~T+LAd7VMx_9T{H&H#Wx;kOTR7)^0L zZvsvfaGpcwZR;DnBBGzxVh;8szSN16bJG0cLi7`J6RZ}V!ixFCXSnb6dnfxE$5YhM zGo@^Zwq`rX#ddW=W4ns!Rtlb-NP}&mNyZ(dm4e31-e{s6;hK@=azo~hah(&FK}X1L zOZ7zd-evX{XURSpzEt-CC`A3!in0e+Fn7Lm&1eZ;iz{Du!(Uh90@N>LA6eUhWt^U~ z8uMeXvtExvqNO^*j9tfSI!!ThD?>Zk4`mG%^qI5C9wJhOer9F}PN&c}A0U?BxISf# z%{pb49NIq7Fu5lWr5nx^dyQXxM+NV8eC?UZKemVQ_Klfkl?=u!w%x){KJ(mrYa=z9by65LOP(8I9e%Ko^m`d{CGNkl;nk~MQ!v-=YjQLk4M$!Ds) zos!lbvr~OZ`Hed!Ee;p!SBpKr0Hhv%3;~e^>w^$G@f<58M0+*Q_(o+WWsQ=vH6}A6 zYq7vBD$R_Z86nE3`D1(batVhG)iU->P1WYODKld>d};RdTvxd#rnapKr5555o!jhF z=DCfqA|Bfu8c~dN%)tC~KwbIy}_KV)vYG_v%(`j_Da0 zys*z!a#udYYG<3;3HxDe#TQRU6Pv2uPJ+x#6?CTO^ecMT3Y5`ycoFe|PKv;L^;R_) zn|A7#;j9M`b6SIR=is``8Qc*GL*z!JlNg&P`F!YM{8~IQ3p&aJ7hohexjPZzq(^k~ z=7SxF$$^{*xUEw=;t$kH+2|E_vFyn+>(4;7wf&!Y#Nkr%MSf-uzw0xN;;aoG4b4gT z9Lz$E$k^57cx!_CSULZ;BP zYeF~mPB>DNCYX)+au%EI%9Zb}1BKHCfGsQTnJ}c77v#t;9_||z+WHoRF4v0Le5(2T z>QMU!Xy81z;B*_UL-^HMl6H68R_VQ#vtCf6dphk3U(1%~7t(qq2uQYra{=m45I_h-OpFe9LJvGrlA(}>gOf*zpQ?;@ZzGD@16PI%6SnZ9%?LK&9YL} z=x8n92Q$?ckWbXOt9**c1cX4w{ah8(vjk!h>$X(}T?_p5tbKZH-=a}+J_ zW;n+LCmF&c^i^RiE}6q;lFY8_F=qGatoW6Q6Tjx?+waXD`c{*>Lg&Y04(xqNgIAEO zPmOJP$OYS>`3GNL(Y}d=FoA`W=M}nk(Mfx^`n?G}#V$R%uV^&L6o{A* z*&h(uyHDX);;Tj0ELN;t8C#7}n6L-oa*@|sBE&^681wS(EU1{*FHBak_aB^8GS6R+ zI0s|CM2PTrrZ%N9@3VxDgvpca2pfAEl%Qa|EWG#iN}l88u4+B8S26@ScnD`PJ#)|W zUp(?hY{CeS2k_*v7xt%5Mn?CnV~l(V1JS@VQ~{x$wuFmqbZjhC;hc^@)%9NS{T93v z$5(huG)T}OglFEM+q-KzcW;@`Z3jnq=A8Wp8@}MDEztKu(LMbakKT#O8_Wrj#F!;U z^Ezaym|UtNpmBdtWzTB_hBeNoZL4%7Ux48D(Nm273u7elh|i=aXi3TSM-*NjorgD2 z95wk-I1T(h&;r6EVZdhb0V`fQm}7GVp8BopGWoVEoCD%tq(|#7_xUaMH+c+%{<~e0 z@c?<3Juvk!nRP_#`1yP?2VKST49&{;4wrb4?qDY1l%ai(nKe5gMd89c(qrw^bl~O%OzDUuo zC%&Ss3rul}hB|5kZJ3&}04>I^-qo>%U*jEsJRQPrEIRJjV|Zy<2aI&78j;1t&uH1t z7|g8FEKbDN8sYFu!l5D^t85Y?;*PX+5?o>$4LlI7+B$eZI@5dvR@ZmH1gYr|A>1xN z6XiF3A8FoSfmp|Rs#e3(9Esaj5VpgpX-?+8y7Y*jby^ZIr6YN@sd#59J35Stb&bq! z_>8SJ#6Rz}so+fP>SA3^XDxF66Iey%60f`}R9ri9oRFMpT8aVNa>H`RvThjZ)94)& zt2&^bhSl$UOZ2GT!LbJ*b>@$TPjQU8z^28b0wHc=O_z09DE3B3ky?h1aGz} z0f0mi@jxdYS(6#q37*bhgs`_?ctEAqtN7ALZQh2av!h=JCvJg1o?C zbNxl#2e@z&adBos)Jj|O&G&5Z?VUDtX2q9p&TM1>Z3^}HVsWCRE~@~aL*erEUp6+RqSWgL&33u>s*9|@w2uLr+U*Y^e zehkR!UvXF>#9K(^Z;qm{H!OYP@icV5EW5X8MHkcQf`u@hx14qPRD`qJG}Fh!2xe=A zdbDv8oh5*qsv%mLC+4oJl%|&T&t7HbY2z3tdRb46Lp(=CjeM0Bg+s%(JRE6MHMGvX{JGUOA$mxO`Ut+18NaJ5;{zti5NswaZ@q~=Qa$mj>75cV4LuM z!o(%-$G9{h)o}Vk|Q3Eqav$@L=GlqP;ZSwW)&$f zeVVK6T4DUeh@w3%t4r!Pu?cmFkaJwJHBHP#AZSLq3AuekWdBmhz)mJ3Lt%x~l`Unn zx{AYYF_LA&TyzB>H=1ok&`Y{Hp7OW#!=-RdIg66~Wc<%kp?q4(7x?${un1t=#tn0u zi||;6R1oN z3||MH>5##xAe^maM+k5?PliO{t`*@mh3LzPxqvM}=T=`#jI%q*aFjScliktsI2eW^Vk5&;tngX$e3APyywh@xiJJcnJzzjFn8HJp7GXD-~rslQ7z;6bp9Q7!sN-1vCZ@T*uk^WT{~^ z!VUb3Cgxk`E=*veq`$nS_y3{on#-yle;TUYkzz{n%+naD=DIV*h_m%h6;DO)U1n+r zewA&UsbOhv7ZZ`5{K#9TGL)1c)Ar{yt$VAU)$Tt7S^)F5kj*J9>+#oQ%D zp>wqtt>wAIc#N(vWzt)2^ZD@HkPS=Q(%Z_kDHEBvz|k2erNVqn5msV+#rXjWkgwTF zJVe=`d9;y;%r_-phq_@eeJ6zBYNtJ|zAk6jhDAsnU3v!<=kU2`Ke;mXb zdTU^=u=Dh(H~$dB_o_ZP2q>A}bRt0|d)f)F_A=uU$%d49+mO=*ZEcC_KNrc_Qq5H6 zk>u%TwZUeST$LHT!D*apz*V5ROQgt&bVBn8i^yMQVP?|oP>9i;Veiz{aoEpPUjpJC zrWqWe0A!Qiq&KC$-9_SMX8h*i)GDK-lt-;-TeF0gYB~FpB_3{~kp)T*`eWNF(Q(9$ z+sqBYl?hdqnp3;jwLW$=u(ZN1gT#rg z#JcohPbq!XC!AQ-nzLlT8@O)M$Wv>RsD`u@3y>x<3DgPn|9d97u_^m05|Yt&tGi3o z^Z1>Lm&4u1-R?grKOG1zdBB;;AOw*@Tpj2%PJyW<__7R+E%Z+|i-Pd(Uye4srkDQP z1o`P7vP6TMZY$5?PtSa%yMrsEiOSow0X7RMBpzHfSz#Fedd(cy{ zAbR_YHAHK$iaGiHKo%9zkUBp)4>G`eMnq*+RN0bPQW3=_UbNL@cQrHB9li9Dd7$bM z(q;CCr}nqBhkR(MBGJMlXP`u8K+MGOg1;5OS$wYe(hl~>HF{HI7_3V^WCO6i(LOzc z)?$f@t;B%vHZ7wcSlXZESmd@GKs}c)d`|PsP=D-Yc3;7(wsoyvq%r$znW{-XW~|4kx0=$!V>B3P5n22c1+&zF{XsO&Nvu88&;{L~VFY+e%J zSpEv2B10us4e;wsiw*2B)<*AtE4luWJSP2hwLHJel>cb0llTzf+ z?nAL{L@>-PmVXJb+FX)MuFZ0_0ODXit>`Q&gev;ozz0yW7+e?xF7|ZShZxb`412sBnU|D5G9XYgksrZ#qTS zK&0EU9zK5kkh*aN_s(I#?UMaH!y28{o@i#!6y#C|xY~p^kdaBE@|klLCQ;r_S|YF# zI}K)=vkHKV!rVulxY%n6+~*c@)Z`CfRMawP;BlYNV+e=w`LWwu4_dh09;dqJQ&g9l zpn!N`d-#-fZ^QYnA_Wkg*(x4(Cy;&E{Vp?-_rBtkn*Y0tgOXif{@)FX`!`jzmLA*6 z+COIQBUJw;rv81>`R1d7pUiwJ`wa{PLJ#EVe`_@(*6~=WXMDY>(KK>e@!?sjBl2ztI#0T#`o_X>uVTgR zbMbAQq^Jqrn#}?%6R1P)p`%G+6K$WXK1@XIoN4GcflW4dL`rni@oOwoO|e*p-#mDz z46@ld{(%#TEYvYF7vXo|jOrW#&mjv?#Do?zKQVKZx0zJS8Ba%fP7hS4Om|?28_05s zq@YcyO@$q-l7s>o87OMI6PA0`RvI6V+G zQ(t#x{>h2-*p=edDB2JRbEthA-6nA#EhknKdo47*$EAID^_f^1mk`l?=d1ehS>qvb zz_Md1J=uaZmPLbOt`Zjvmi%qV%*2zhkhaq1C{{RzPq<}p#V*Kwg+eGc8M^A-)HY6v z915dH9aO9u1<4wpYu-9K=ow03^qK9W^i5_KFKJ|6ixB*jC^{*+eBs3{&f@2 zd+Wf#l}m{YWu9D5>)e&q?b^n=;uEwP=Oa!t$T|KweCG#q&528AQb=htR;`Pp#fC?D zWf!p;?bD|4{*Z&bdzLwFls)Z|8=3dKDsAiB@5VE0MB)Tq0eJ;sWYq5dSL*=~5_kyuCQMLY;P_@^o7EuP(3N-?X9kcbMZ$o0^k^Yr6+-Fv4iHyDWK6+HBbaGig_yz6Ms|A>wDnhivGTAXn2eCAXCxCNea^IggYF17jm z{7s+HVA$zhCn6p!y!2=6NN^wkd&JC{s>zVTqGrk}XD6@Tg2MSg>u7qziw=HS^n;iL)gV>F&9^G|0P=cu%fnt^{>1(mHMOipl&JcK9%ny;Xg zxbCP9ZE504?+N^^nS?C?-Su4C+sEDYMomZNX%qqLKd9p0AsmWDmD-mpc6bF@qdI5` z&_|B%kRd!Lq^^0qdT5QhRnn605^Gsw>c<%(5!i~t>y%D%=6``KJdpOo_WZNoeNzR> z|NDL)IWexUI`vX@Mc`SW)A{Qt#VyDgyX$ye3s9Sjr5jO6trZllJIl7PO1;lwyQhbZ zDjnFfb_^@&xeDNU=IaU}(xS_D8*=3{+}C?w`aIKJx<0PA27AeewtAH#Pkop^gwZGrV--(pV9xH8J!a7LJhgPvGu~ts~F9t ziobw7S@f0TpWjO=d})Ns<}6)C-4l%vgN4!RR5jZT<)#<*tX^RsM2q|H8eVunDY6o# znjUySX{4&2Z7lq48LP|tB!0J{&*0fCq;o}4Pj#ckH5y*wJ(3z=cy1zq-#RtC%NtZ4 zVTY7w1|s^CyWYW))@>*Yl}k>&d%yQ>^w85fE~eRuXR3a!GAD~l;WNpcU>#cwDl6<6 z-EufkvuR7oe-D^f9O#I5QMnwj^QZ}-vYLqAq#$nG*|~6bpyUCtpz>EZs2BqZpq54r zA@13#)LmdrkCY?D#>@nW6E`!0J}>MX$!!Ig1mA~-V_7BTN%B9cC!qMSl5s zK37PmwWS`c9t2fIgeF}@b(7jf&C8Qet4_B>V#i$Wws^)k3TGCgw)`~7;7!7gS{EEn zi{52l6Uo-pViDiSAjN@IK4zdoW^kLt5dX=TFrZD!B|iykn@&nXhSl$7uCNyonZ4pN z7d`Qabnlp?aU3WuNMwnl7x8oViH z;RfSDttBcUsNE3klV2P;m1CQ_K+1l$YVU5p{{vuo7XHoF$I8Y1Sa^A=jXyK|EFxsT zt~wOuU?R1$YPiTre(iAV1BP;d>V5q#5RO0F-|u10C0UQZgR{d_)xq~9(l6<6{GlO8Eu49qUY30=W#Po ziR;-E8(nK-f#L7>0d9ktAax-Bg6eW$*ZLqvTD}Qy@SJvVDKJy0oF6&+=+hVH%s=UfH_P{j(ozMzAE3yu_E$-aIkVFQnmi z=@RFd89bQ=bK)r96=wc{FUxclduc0;(WN%2eXjZ*_UtFzRIhhZL2VBAHW0wbc8Qd@ zVHx)|>{YOle7Rg4YS0$Iz?~(SG&m4d`6q8Zs$!d>K@0+MLtU=|y@8!+*hg*gE1EsFTCTVQvMS9t7Z16<=jf6Nvf0cEXK86Cq(Mcx)@Jh`_YvV* zn~<;CA4Li^?#_bfErH_^zeoAy6%~+yyWnw*u~5wF-$PrXfz(G-ZTiUhE&j>np8Hx& z`|}8n92^xAfGm`OMe)h4Q*%kM61;di@AnJ+;dL&}Lj}u5W#U(HkHd5(R zc0D)}srjzr;{3CJyP2sG-=oi$)^M$_O5|q;Vp66xo4U-hnY2z~RyG+n6dtG(eA2NU zxqMJT!49w_8D&_#am;UyjGn|Ow_047eV|E_zgdB-zL_rV9K(Z%q8rRIx%{8*rhk6Q zkAL?&WbWVBKm_~7c}%tTEla`8^@EqFf<7?Bq6>{O@51|DU5B-<$JHU|IbSq;K4U*u zwP_Q%_ruPHAl~?tz|uLanGtAV}P&bh!ps zYv`Ql=iNL7XJd7|mg;4wuQ<;sh`oLtd37{1+Qs^p{uZYs zWOD<=;U-vhDH!ru@Y=LY4b?Ww1^&ft^~2~Tg$yXgK;F@~gZyBVgEIY(ptKB3PshIT0nNZLlhS4I-@jXQg#II zl14|$Du!M0hFjRq9>qMAiJNV9k;`~sOy5BT5LqT(Tk4IC4pxb5pesimdoFH7$Vv72 zSU{qcSwd$095nc&D!d@mJFz6Bx@#u`BSJu>-QcWP$gMWD3$a^s=2lYdin+MstD6#l zu42X*RBWORR0oI!d?)JLeK$vIa@FMx16}oB3(0d}eWm&lSrn(uQDStnvd%8@N`hPU zT-bC$F^%j$eGgf@$RVwL(_X%ElFNA*ImB8T?CZyo?v_71>~2L}9G^B5X-aoVDMy`2 zBy|fNSn8Cvbbvfy3NwQFK7qlFt`umXzusMySFxm3gcy&r;2QABtzd)XsA6k+ECqUm z08?Ih%G3Wx<3e0#6RL8%3(`)|w)E@aXN+9}wFurM;jN{vzjY4w1E1;e)6-Xf!}9di zcT_dDnO|{lihJ@u14q}|4kY|0%?gce3{HQ;fnaUJD?FY!<}E+t{Cc{W@xTgT>D@*H zyShCMvmAXR;C1FS&n5@g>4t?S5AOG!it7asyObEg!ex`Pvm|QY&myO`;U_->{&zhl zgCrxaxw$qza|U>Yrjs1R({9QR!qV9-UEw{WtE|B}U^643q8H!&u*9sKr9I-5g^37N zse8$4(7@%Lykx~%*_2t0+6G23H(lbXf`p*`TX|Uxaz9`N5OvQj*uWxpns#z%EG+3y zaUdDlJb|75xZ(b=4~$9ZHo#LS*Sm>Dleg-|7>~_OEaPRaPB~j+aUZNyw!%T@@CQBZ zQcU>8eY(*=fBR>Ga?L!&4TQtgGJiF?ApYux5mlZn2q~}Fl9gw9l_d@M+3VV`)xoue zJM4P+gb~$%CP&Nt0?DDs%EJTh(Q!I&T`%RutW251VV|h>lsQ^&vNKfxSg%OQ)?V)E zEVD+Fab>MUm5vOpi+|pP)4JkKPmpJM$G^^y7k2PAly+nNFCPQRk6}3vQ9K2 z>UWh0r>#1uSL4RZmKIU0Q%dPdqGedaq`Y)Bn+ID|dzyE(4L(XOT-Or(Zd3iRophe7 z+*!ZL&44tVnOS2W(5f}Tz~aME1DfK&YhK8Bv^S;@EStq|KRf4iZ^yx0KhNbD90l0{ zpHbek$~|%on2(aMVS8(u7D_C;ZZrX4#YJc622qHo4C_t-PTBYW!@Mf zOf@QUFIy2wv2K)^AcQ;%u}1B*cBL_{*DsG!KgbNRz<51ak5Zl)V?;2RY6r0quXWCt zvg?+utp-aVgIPKfV0uw3vP44WVE=usEeoWN(Qk__YFikAO3HoTY~Qdy5RxV8J_-UZN|9YW2WrMN3(9sm z-$I|(2-rX2My!knARTwAuoSYp`wR;TcK2G zers_J~W1PIWEwgyh3ItGz2AUUeFGufVK=^&Q2InvivljK7J`ixS+ly28G9x5m86 zQ1ArR$LKYW!(5RdYH?aKDVgrzLEL87*%OTV>uuUTa)kVMl0J8Hdgd$3L)#kHe`V>v zjsHP)QjVgnrYfl@6DI)>f$<6clEif|tma{6r}k_$A^@4BgJ@=}{0Dt}Ob*6>M4{ah z`d_kDP03#T80+00I@fW_fl$l~r1RB2BJcDG{=n;3&8aS=xpm<1qvG4crwUQ~lR>_Z zV)4h=V9QSp1SI=kUTHhf|Flmg(T{_JNBCS?s8Md0I<7e!1ygPk=PjTqH*#88nrdiM zlv(#U zq~rWZ!IS4nq=E3IzkK;7sMQfMj#-h}Ua4-u@{Y6mBvP2hWmH`mOznLpQXpt(E;n;hhl z!Q7%~%aZ^}&^*QF=YIDM{8HENuv`DEy*JgZ9ChjWkRc+mffmZ@`SWXh>eVMnB6eK)0KBuh-T)o>qo&8K^v3Mzs)Sf&&eM;#f?lEAcp2RA7;IP&yHoXpReJU}$DK2t( zeuLEh=Gum#FW&lk5vb4K^wHJ7Hbm&M@ZHywK5^%t3_kuyhgT&sJ;sbzw3sgzEtNZX zyh8-c4}sy(_==b4gX;hv#N%+`^gw2F{~-ha3_AC}a<6y(bLUQ(ju+GGKCEh4KK~J1 zk}Qhcu97NfgYc2XgAIeafwp8>?zw95sL7XkE4I@?rVZdKi1;XmBVhwA{97e0y$#GC z$&Be+k93@nq8?kEvQcK-;;Lh22CZ3J2Ru==He?_WH5pR$o01#+2CL}$^T~SQDN{xi zTIG>8k<%unoClkJH`{hrgj<)p2OScs=EK4nHtYNl$3XT=1xtwvbcwTz)Zj4+!>^0D zCGFFF*~|8+s!}H|2<2`}5#5#rHZES#CSf(nM9ZTgYtiX@&W~I}mmAb{0JP^r zY$$nSUc}rcMh89%Jr;iDnehFTHmMA-!pUT!kfB@!hCjm6;{i`Y{;U6cp zYO;niZv6pfhJ>Cd4s@x+&bZqH#Fk`xo>HWh4Zx$2aCDO~Pi~g*=wR!%E}DxIc4lMN zBJ-Ezr?K=&P21&3OxXT#eTD1`3ELiW1;2EF)0f+f5IZk{bqzv-^!jd0OD7hgXv2C( zH8<<5E0p{ExdiYJZC}<=axzZH!=g^B}i>9Ur0W zp6%%)et##YG}?%ry!qo+6TL3hiJS)xO3AmmP!eG(RW~HVRcz@SQ~^U}k2229W{$(G zTOkqG$!JXPF^6efT8yoC1`n$PUe__T(7KEO|n4E%{i9ucL@NT5iw%GraM z|KjM``3bjB02~O~-u3C5eNUSVcU1T0J=U))xAV<}-rL!02LVR5XY=aUv#mFd?28v= zJ77H79$;C)LFeQJW+usyO}Rg>ZgOi>5acgL2mUkErawXci;-HEtZIa|D#LZy(}GPi zPm9qJmN25pkj_37VOuzV<8AjHcE|-}nb=H7hykv5nF&27JToo5g)(W~)mzxMFlM=~ z>nuG;pfcLn#jNJoiYWt6mZ*4HpuW*?8YgY(B(MiK8;5a?(xX>ap30<}8xhcEHJ+cBD2gF$9L6nmuY9-| z1}UA$Oh?!z?6EEU=D;~Sg{(qN>@d|PB_!?-nucCx)PAec+&{}AIXBZ$c&1yQR6BB= zwsIu%JFT70;Ls+t3v%#!q`8GdmEgJdda54x`ME|U+9uqMq~3LY=wd?BM0>tk2sQJ7 zuyL2{*}U&-DOa5(3K0@uOwwBQp`cx^fy8x~w+Z9nU|un_W64Sfr$A zcdE8gm5U!EX4&$*7~V6$JI0D$gpOOY$HoieoT!qZ$8B%hY)KQQ+8T-oj~*^;f=VBIg|{=0b`k-ZEL8Ea8V)h%=R$Q)8HBJQ()*g@dZP1Mbp27EzKktcf zLjztS7XI60l|;|_zC3X`idq8j*4KB>6HZOX$ri)`=?9$Nr(EfOf-dX6$e*=YrD(h% zvUiK1TL0mzrZqfPlBX0TZZ`q{>hHk#7o2DN@z<#>M+Bk@86lJ~-v}XHtas} zXsIRB<1wp@)SOij7?33wT-w>gzpb$sNlJO5>*QehCeFFRFK`g=judv5CEgP%U9c^R zAJN#Do=kYfZb5feCJ*gczj||Oy@=)MlFdKO0d-2hlp$#%9q%R3%q2zG@NkJ;GsBE1 zloHJ4tcnbpttpu;Xtv?(wb#_iB%bVQWROjUj2f1n;aF@|9Y#ECLzxmM5PkT5;`oEV zt6zWm%tt2WSan$2bc3dsRywoW(Af~IW*bsugu%ka{8n=bCECqipacl{y{O7>N!Z-e zjIV<0Q$J}pGa6b=j!d7kg-5M?o7xE#G3&@L@O}8&krP-%Z}YnhQ=$x-(o%mv+T(%yDbCu0btxBa+qj#!7QK@vrm==nH0- z1o`8hGFz%EyK8rOI(v_sGasiJ^Sq)a=7~2g&bc1pMO(LR`FYFgbV%eBWq*d#3Y(TG zxL_QPj2{Ss$m4+60Z=jsOKc$(x(cZmI4~Md$0hDl&V0lC+Sz?pbWPcP%M-^`o7aW& zICVuM%+JlIJjd}3O%*%{51Py;;}45o7nsiSTS#M~qRg5hX_hRwgK4@n8os32=R>a4 zdkJ@4qL0T^+L9JXm8CjQgXm#O?~-E!85-ED)OYnZU>j654y^lLYd_@jwv=jLS^r_L z!9*@khrhqx&Ea%)6b@HJ^_b4ynRdK7iTW1ish5_p7y2&Ex(8Fe)Esd5r_rfy;K1Br^R;AB!xiNs_tUP zLtqE4)07{9t#$d)@?x|Jtsv9&JjCX*=?=ud)5d$5{x$11|GAH_h$-su;yi ztEHQjM8ZZ_19k^pACWK8U@+XsK5HXv#_@iUL*r$l*+`cj-)yrIeB7Mbxn}SZ2t?{Kd*8hKhBn2T?-s{CtJqv@NQMh8V7*2wm(-UJ=5Qp|Wn z7$7NO=2cE+M|K$`5y}v5@V=a=)OZ#}w!a#XK11inc!%&AJ7xS97`0pwu`#o$7@o)E z0B_{Tu_;oja!;o9EA84J}j64A&Jltd( z6B@iLdGnU2ikHHS?S$OW_Xcy1$rgY)zl7TNX8>1AlnF++sDwvBFAF&?m)MoX4ha2z zs?seYm2c*|tDBpT7O$*#)CZ57>%Uuv|MtmCU-?)^jHY#eJV@hW;;g=IeehBBNn%oy zOKYFCUrG#M&{12yi@nJpM@~i$Or4ehTya3a{Xk;%FwH@}2s|J^3g*^}`F8w|_~X8+ zuAi}cG_WC8WG2i|{K=>fYKS4D5r}VYyLd*+8;th4}_MCW!W?(-``87#Bd4pps{TJtL z;FG$8)irmA%?hREj(@N+G+T#D|1{2mVq=^jWI)|5P+-vqKedNWxV=9)7A&bo;1Q0i z=IF-2i_xV*qbS;5STruXDe~}qxh zpI)>dFwZKX?^IshEVoy(HH-dA7t!-Rww;=p-&;YX(o$h0)(y`DUOq&5OzP`E1vmHJ zGbV54X1Y4~DMu>(ay8NH*=>I~ixrOfVYP^Yb*9lywVMU$Pu?7q30Dq_bBVvw^hfTM zrG>#n8>Xs+q+{!+&3Y~v!-+K;v{Z0^D;n{$r)q%g zSg{DD!`lifI}ATVeh(KI2u~ zv~6I!TGZ;(a;5an3~OBryjGll)tbkxB3n@r6UwK{nrBMTmc7+Rm77I5GP}&{CID6t z!dwA|Yi+}rE~%skIK~`q?wHs9XA_tqugeCsV!E5JD^xEz*D3`04L?0!3kLz>r|ErW z&hC6>{ymZBWm)vnu0)W&YGE<8U>Zb*An*H(t`rce}-d@1hkOCI{m<-5Bg1zYX)f@YvJQ zCg~$1+{Y`SgT-`_V_%lV=2ojJh!dKbG?}`m8x1!(tLaOOrE<*w!GeC%{c}S@a+2li zDq?g+$KO8(J2S@hhh|z}z>_-kG1j;A3e~8VBO$XaQT>~l9AcgK z-c5;YlXeo)o4ynzo2Z`q=?Y(beCy_<`^==;uTeO)+tbQKdYp6;JQ%~K$(%1|e@YBv zK~!ptJCI!OM_4+K-mo?EiPt)%x>crqbCkWlb8j#%3bX^;F=NMjT)Jw=S~I zblGtAi)1Rh2@aNS%afWB9x_`a1z=XkyV@o&;9c>)b!Emj6y!wiL1-s_ASsj@#glV=%p5BZGuGCRQkW02Zcu8H&UTQTE^+Aw_Q3ik*qV$=wl zxdfY_KX9zCi~9WBOa008I91M>0Y{r5K@sa&_EFW_>`N zQlgG4(2Fi&uVINWmtBrw2}_gA=7s96V~e?SGWo+fYIeu+=KYo(D@8TkdZxnzNI4fS9rHh&Ba4l?h2xg@*M*d0Z1m%ToGJxyej}dgVXS2O>U#iF4o32P(8|5C( zlT2_Zdl^N|w)JMAa&P04{Qy}I%AD8~a(kA^#JPI_N}HuCnqj1>3d0 zuQufU4Gq}5jz~CsSRRMFU!7vc6p*2L@5VgiUjY#?UEAQ<%-}|$5&4xfwZh6rqKVeY z9S=b4IV+KZJ$pi_MO{C?oI)1&_?q+t;Q9BccGx?uY(3pbExCgl*COU-~tHQ9*y^hdFnA8O$>k8kO<5%0U{Sf z&ksHs7k{RU>5bMiw?xOXIp=oA_(+}@Pn*}uOZLv)Q=<-?_aoP=3o4_mH2Oti68p65y>;| zdesadx^fz(l3wi{a1r}PPuoe?duW4%OE|AP-nn|C144MV3kz@J*5J21Cz*xsLj1@v4-H zCG68X_^rf$qf^OQwstOyoq{OGx>L$SMhUZcxGG`XzlfP>yN^ZLY{8KHK8z6qG3EYF z2jIo)+g7ecozA1drl#E)sMH$Iz85XmY*!2;Hria0CGq;L(lS!PFoRd*t~jf8-lZDY z$aJ>!;|0)6Ue)|2kW@CEK9;3#OXOzNO`(2-SruaPgENJBUi1K~9drZD0$F))Alq~?hLs?t^l{TZ`qDs=js>res zvz^rK9OZ{+bp@FTC?>mY>cO=~+#xHN8(G_#hu!xQ+eLt^U%kLg;*)zsEpQ$d@{ND0 z5l_K#L`2j%G=BbWwa zdou>3c-8cu;>PAH9W8=4jfwObr6t10x^*V)<4$X@xV>}QmHMPvtn4bhqxc1ai7r=k z)?izEG;e~m3=o#ZU?|<5>*ttP1EIc2!mme?)#fn-#|ND*DkeKS-iY0IBE1KvAV2kx zCay!lBXfdqH3nZ?WioA}_EdQP2i-=FUi02?e~A_HxJ$* z`2N9oKYIUR&-?Hb&Xyuk0|jXn;YlY;0t*g0l-`#7T!2Rr4u^vLah=FH%ioyuqqTCq ztb`eN{JJ$w2Qr#L4E27%3I`fXbHJfvL|z9OwXaWPnR*{*i|yvTv&z#U%|<+J|Iep^ z#+N_4LoReIS!xBW&~6LPQ>dn0!l>lvBZ{SxQ2OW`PTB8yhCfcv!Sw|TOD48Y5RP(~ zE-W&DKZ8W}Y%YIt?{}68=Wb?%#mVHWkZn_6ZW7E+FO$-Y$(N%gcv3N#yn9YVBcZ)n zdkHgWpdF7Ja@C118`3<=>SsC}a+-Ur=YX$3hJ{Bx6HKeDGqXgs13fSoM+!USoVEFy;h^xF0^;i?x0S zrYaPtVd7mW#g!eCv@8XUm)C1=XVi~ch1+F?M}&fHJLMshPm2R z3L1I|rH;%AD2p9P5hsW`b!YCt!&2E|Q9ry0keN>IVsqafOFn28d{nH-wQx=Vu2q!{ z>PLzBTQGyrofD+5D(gB*Q9^I_m^|a2af6mQY-J07XDl4F7i`EfC=#=ju<$fpu#4s6 z-VCRz zQ>243g~{}%mA;fIrpq9GyI5x9Vx58UF}xk&)(`D|y?gb%0rFz)FLV6S@_BJ*;dyJK zB{Y4#UtxB)blSh2n7IMIszd6`>qXAEByqT(8fMv1bs^GXdx7GEEQ2U-fr5g36XRS; zxQ#H9eOXm4+}7=Zebf;hR`7;>isVb00Wdw|mJNfqeMJ~tqGL*e&AX97Pmy{jntX)ZqNEInMXq5-(mzwF7N9=+b zt`#i7pgdcf3&G=|B`O6>nRV0i(~;bmK&Iq03J1G=)9I5RzhE{V3(axH2w9tWzEhyJ zt?7sn+UEMOPDNFzdPjLMi@W0TGzZ{IWXH6uLzYyGzaH6Blff4JE2px<>xTnzS$U$W<{HwurY&rm5vPQ;%Qdyi zH@MfZPk6C4@vO7CYw1ocaq5{h^m&|jHKuWc;_tHB#p#SW+Ze_FcprtZu`jfRbXXnl zgre0|JYb`7s)r&2^)r)ibgDo~hzxw8^l~~f`ji{-l&E!P)C})(BBRW#AT{SCj(%x~ zh&Y|K1w_Ca3+GsMY+WKED*BJg3a@gw&L)bwRC>}Hy=&0)466kI2Tg+Ll1tWqSHaue zifOSPVx@F@x%o7F$a%#FC6uAKLd&-o6NZGUIaAT~@GdXq#u0DoI(Hrew^G|_qO>eC z;GUG@IYe8eP+bN85ZRN;yR6T%s42y-*iiW`fFq5UOwKG5`kD%TK5D>p9{hBFF}+tY z+1>F*?SB#JjRRt6m|V6sg`$o73khHL1{ZCM?-YR~X9DI0B}|8TrR zm86+P)4>A$t2}~K|D9|6|6msmNf`OxgFKW{Fj1>$Bf0{y8Rm7+${3ehKmx{dsYBML z8t|yc$W;9Tn>s9K8^%5EawusFdjV zY&ZEP)07E+ttrQ}N^?>5icpRwX`y}N0u}kk`pg{<=E7#SO~}Q^pLf91Ra@EmL}*ir zsx@WWW4m#zs@-a4`FP8$Oy;FR8TVj*j9_j@mbr4Z%=9H?mHy7uy+UWZ((7FV_4z8% zl1^q?-Zxjh0G1ti;lTOe~NOK((@aUs4PMFBPl2U zipq4`MM`O94RgqGz>ZP8a_UqwCTh)8;z-gU&e6bD*FrBE+kTm)6T2sP*VgPVTxcm_ zD??YeS#V|(RjL2s$1bJ%3>E=`#WhO`M^d7~T!Y2prVSAnHt{=OMJ@QehvOk$RdaVU z`hnSb^8Sf464yuMX?FoD0}FE3aDmyDWM{@nW#RmSOW5=g9Mc=(x-ZQR0>97I>1}4& zQZePic;-a!czOB!5_|+-AsZ}}LlHgqTcjaZ*ku`_iu@JpcbgeKDhi!?MH-U`&FSt7 z+_zYg%`=}R7hM+dG-vBjfpi0mf#FRh?qmmoepz%5b?1bWWJa1RiL7D|wLA5V-7KYZ z>4-Ko*$kc@z|(pd1w?5W!5s;ugm(F)&i5x2U%QGTrUI-3Im1tDh)vx> zq1zqj@?bZ@E@G+{f#|cc7X|#ANP~a>($GULWF1 zl28H{A7nKbhZn>HL{`(0F1GPt<6#SN_v_jlW98=cizXuBWiF?*=g~cAWu~gInNPi!EF}Zgt;4HwY0E`Pa-sb2qJX9n0se5km84{92YFTFYpz1t*n|Ya4ap9Ho+hb0j>8=yrCfySQXCLxGQL zmliXHUd2RrQX?o$;6cgS%vLxPh8qudA~Cx9+Qg|@?@G>0sY)mP=2&&j#mRn{hriqs zczhUFsLdM8Ts_T>fyUtr-250Uy5lb3Sfe@-Y)oLBKz(R~wd|LvAbVGsK2Y8t8<3J& zX(rglkFDK%B5y(tTzQ6^M_8N#x52R-m=N-oeVXW?rQroqR2$}^CYaX)*)7mdl-v+a zy`LweE-NZJAXz}WWWO(+|~68~O~86tcb~s+~#boJs2l&{PjR ze)p}rtv6Pkvq;gXUU%daueZkE`uYC9GF{&At{rE zP!bRj+<(``+x_>fO{At4TF^^_ zWcpMrv7og#;;iz#5Z84p9$jTLKyQwj#fX7&?lVQHj^-L(Saku~&Su0$=T?`O;(EFF zRprRvpV&rEj&^y#ZCbI;%78>c?F6N_{+i{beL@IpmME1HnrC^N+yengp+O1L{YEQzJ=k@-_z^Wnnfv!# z)|fhj({+6m{oS^)_0%@AQu=$-vfax&eR(N}ODp_(_Wg~;Bk!w&I2c+4tb#M%QbEYo zVY!v2ZIo12D^e_u0ORRY%V1#oKyS&{*M7om@t$ylu77Z?pdOI^ohi;SL)c z8d**1@C%gwSRRUZr2^|QwyjZSn`oTP^rNC(ZO|2WbLQ#StP%5-r`f{9_F#M{= zW#}5xh1L^>6nlS{TyZj?#}O5i`oTTq39QUWeSTxYw*QYS9wGB?B6$B4RJH2Xt5c_h ztm5cp=!EikapV{R=HK4&<%Lx?W&)bLinC!{#9yCd6 z5Vha*KrRcvNxTG%eH)!rzr(m}~s8|dj@Bsjv8hN3?yQQB;HN&>{=JNmOH z+)Ta;t}Lt@mh3->KWK-upSd%^;llsOKyUO3(OFg18Y5}Ko@TnMn(ABkm*G=&btNsW z*{E`1GBJNk!hGt^5RKXfv^r8fK8?vqXhxNxvdEtJ=z1%4+8fS9*gI*ui{1|aP*sML z9fHsMY1)p)lns_>kp$W0l{2cPwOOgu6$mVy#F^(`VFlcDNbHP@?nt3iUru{>#|7}@ z6ZUn27c8BQ)Uh}2`!a-My6MZtMnq&eTQlNl_`hkecu;>gjQQS`=??JkztE!D6iIi} z!Bu)I)y&$kH(=cMoYI`Hx-TpoWKlvU3t88rcPkW3sh-JY;mxb>qH0!n`kmFpD|wgc zSYYib-?fH}dWy#-Pk~9x&__z5{?(mcqpWGamk9Q6gRbz(4P_v%*0XEbN()` zYQ0kKgusA%(wMQ5Gd+3NAugGOL7-n)p0JLhf#aC0vOf+U`bemz*J z_x)}$rA15N-=6pwYf>`rC@-7;I%^%_tBE8T6jX5zR@^(I>H)6evC%@{Fv$ALKdulB zIJ^j>!++{KrKL>Hjm&I8`f<45e3|M@KUF~Q61_kB(C6JupsaGVQ0)R%5F;~U+hw#P za7%5mFEUL9of%+z2Vwr+dHQFxdzWWG{ER!~qR0Pr2Lu8Hr2Rj*K0+d+s}pd+x$kb@ zsmc5ykYr~!OdV25mw#+WS4D+2Ee(ANy~Yv|q+q#avHw1{Do`Jdfc}cw_ZAtWtXr{$3pH!LZZJ zp#@ZpF8`=>3ELlyT;2DIuCBIsyl9`v+N{f$Z&w@Oi%EuZNo@R?fX2lymUqUjwjvGb ziER_pS_5sops=PH*B3uEOfO6!UyC8}i}(g=CtV#aM!B^E2b|I3$>4|vOSg`QFMurr z+qYq4Eq~N0_Pp|HL_Q!<2vFm`H4DjbYVkq{h|Ch4%me1`{8U$bJgN~BgCsMB=80g-aYh$$J3TxyRs$-vEJdmCfg7y_~X zR_ga)pYTNkCmLJArU51__O~VF-C_6n)lb>-$M(Ip>dbA#zY+c8d$P{~z7DgYE2(!n z#OlE`j@+=168o|YBc>k+K8WiR$f-Yx>XdgjF?O=3mIwgrUf!9aGZ1er_y!4zPS2N2 z$d>O5!${p%nzhz9F^X|dm#O)M=|k_R9e9>-TEX2YmR+Pl_=mT3Q2$ck1Z4JqI)+o| zw}ejvPDQP9Tw;NqWU%_2-1@ST&;{=Yq@4kbB>NUPZ|+{w^%*WfU!4{xG)3a7=&)pK zE7>9(Y*yg_VU-Q#=;I^~-rcVp^c06gZsg7n&NNAzn!w}VD=Pb&rLX!<@1U|hD8!_(PPXGR;->p`eEx#Bh@jcYn>%!@v;Ehp|D%UaVYdl-l+sZy8o;O`M_oE~MC1+xYAXOBQifc(g5BnC=p5rFv> z3vH^R9790DFGV)K)m|^adKgz*4%Ha3Ad#$nRm)g}E+#5nY^1NW@Rt1H>~;Twhcz6~ z$GMEGosm){4T5nd7*xZT`hH@;K&WRD_w|NorODxL$$WgQy;U{Y-}goxbQk4k3D9wv zB8itfV#=MVA{{9WIus=0bNuU(2U)Gb@i`1ad&H}S;3YHg8}N0gNMR$kq~~M&sH4LR zX~Fs$Zted9Q-Aa#!mF+H2#MM#VL-p`qIGaN*5C?#I1bT!PVKU4uN(ZAOZb1Nk+xYp za%787Bb%O$&S1fJ#_4g`KzeS7KY){UMlG!g~o)C6$6egGkq*GE{$3nsw=TqgmMnr7Hiip)se$* z=8u(LhK#bHQbPkCqX*K{a$H;|qWixz6X+1oi5Ir(7TQh2?8!Zqj%5ygsKb?a1kIKDqnP;##x zebM}bxwjnzjBlpht(z#n;_$aMqb-F93JF)v^&42po*}=6(J++~-xH!=?Pf%@`bIZ^4WmaR)J69a2@WL08uajY_u?({Wdz4OWcQrJ^y7bmu;oQTr zSM$F3ozW93VJw;3W#t~6pq4U+=a-&(vO#v|Z7R3Eu#bFBgpe4{WmNeSlQtdsGy8Jd zd;4^kv-)4X&{dc{4>+@&S%Hlz-D%#31z;_LEa#yI$V_II4^vxMR%6d1?|(1A5?Ta4>tXPH^4>VOFA2?So zyVY))aN!7gu`X1RB5*|dgEk9zM+9J#s1tC;eh2)qMnnW`dHuUp!~7rrpY8v$OWbi@ zs)>dXFrfk;@iPy5Mv4wny9J}Pyx#&oA@d&TNbyeH0>04;-poeY#LZCFM(FL2QGn5S zODcupaXofWv4_b4ee@K%8f1)S%;4j9kYW~XP*W9L+N)@~N`7od{cQ*z<=VmH~zJz%} zK0YIuMh5dPCA zoNLlf24+@Q@*l0n#0P;elxHJp5{ zK+)ElGF@I1Qs&fm+4Z&?-)Nd-OkxsZjFBmcH{;jlEQ9-&E-ln@YK3F?H>RTl6UvX0 z8^AP@QBcOM=j<^~_TNmJ+hudd#ijA1|H-78iSnh(m|F-Cqm&OLpg&F#fusM1+w^ZL z&HIC&kkwp1<=wQg;pB7BZSz?pD-AAOt6+?#w}W%^*GVC2|k8W z(`f-6AC8<)!%*Z=Rcym!3#iZ{pR0RL96oA8Q2TT9>h4PNp8V$c&TyN{t5h z)GM)iYqhi<=h0013^!{eLLBYvwq#P6!|%R~;;#-`3~sy!&61GVJl-M|KTs#!9xb%8 zO#UY7GKkM1=`$(|0o{^u7qRX;kcS1I)@eYBiegSs(A8e4ZE<=>Q{qSw!?12TZCDRZ zmSk^_s#YII=eDwnN)q$HZ`6mk>+o{K>xRE35yvRM)8OE=)9wqi1wp21W;F!pM3ipY zNSPI#(YHOSiFJDI;Fte^cpk+!61=sQjR%R;veQhJ?G7FJfK{Hg)LrOaB-0Zi*OAnr=DhT5Fi2STg%J5%&$>v z1OmOcANL+7Rtr~wg|F7pS_d#U&tLi$@4G5GV6smzYG(FpW@4)TN1wU4zgVPlQqrl> z!ytmQrm>6@%v*sdgNv#Yd2{(ems0}=7M0Sv7&KXsDZsT1@LdS#$2}x5so9274w{Q6XhsxnGIp8 zFhmypCFfb;r@vggNsz0%VXxx&cZ0ea^a9-or_!^^x_bi0KUKanS}+riYT?aS{+2VV zv)9Pj*sZn1HYJE#2e)|_hjBYQZFG@htHJA1z?MWB4rwO^ zw9ECTr!o#HbCV6sA z?aXOMEpl%=g=@xV&o(A&`&+U~lxIqLkJHFvwl09)=x>iTHCjiJ~o0r&n3|6%(xyqBf_;$ zDtq$L6a3^?P!Dz2*0Ofg!LFfv9kZ%&^YMw5E1WqDGPa^OL?q6zfPkCS)xRzRdtLxw z8}^^?qWphnbp9~V#(ed+jrWCJ#sl7DyOWMZ(7JQ zhlZdi?~*-gB`Zl<&pNl5?NK&y-SXfz3VA;%4ekup+vJA&s;G_@9a+GX+eYUM*VILu zMznc~_FK|fr;~WFbUb6x>n4z+dOQa!*SKNLaQ3Gu8};>~@zu`hOyx?(z8qttx0>nr zVNCGCu4Emnwg~ZQ#X^4c&BTiK`q#26OWu->6vB%Xtf0F;+Co;9i1f9)=Zwhk6FXc& zGuE1z?xBnaV;rre+OlgYVRSAO>ep)J(7ly0*nwKc-AkFWD(AjHTxY|!vd@qendl{ek zNIV>)dl2TU+R~3}vF^;Fad1LCs0N>CQEpv`bgD2r`hFy%NIaxM z$kb!0uSq}8&w7tp(otEHpog-rj79_TjUGy6y{s{`6fS_9E?rd)FB+{R& z;=;cMaurA8GA)-(y-f3+T{a%W?PmGY&^{My~Y#4Zgne4L8CsSqX^J-d3owJH{ z@<8zYdebzCQQZ?ekd6)Vz8dHIVD5KtdN88oVd7g{5Gah3(WbGU!-XfAK*8GbdP%;9 zhA!`(kPtzGiG%sF3%m`4`8!o@&OzL8U$hgBQfDxGX~C6sjf;flT)~AX!knV}9-ULO zgnnM1`gDuXk@<8qc67b)DkJth?rQGXAt*&XX5m2UslywO4-fmBa9;-fkVQH-?|Q(@ z-Po6tKcX(PlgVLLQz1q)H!ue|$ObtT=u4C3x^VBHiA00O|?rtdQGWYM=BHs(+JfU}rqHK+3L+pqtB~wg=U{ zWDnaIEZOtp{*{e$+|ytEQn-t}pf>xFTeZID8G`}4Jul4Y`^=jDlVGv0rYnCm9i0`GVoN9#MY_*B1z3_2^Y%Z^_GD9w2VG-Y!5)*q;!&s7~N&N`L3UvEW z&;G<-s99z)&G|b4hfBU+uv1(iZi>leR`JXnzW=DCaIO9+dRrYV#eFzu30GIc=HNpa zK{zWvicU00cAkr=(!x{6@Pvb*ciZ5mn-n0u_UpC)C!{CScueSPxf2DIE=)`26yrvB z*SOL_MnugrzS>0Wa~e5cD=xv8>K5p+_zV(RkJB?aAZsnBDPNM)uDF-{@@s*S~F?6w3D4-w?z+9{Sx|2U1$OBt0^#=92!fc z^NO_;WwUV4x`4*xu+rfq$?EYSqT@1<1HjW}9$v-zM&96D6i#^fSne#UQ!*K0BZqWLn zZA8l>a`W7R%GTvfRA)ly%dsO838`%TAA5UWcd#pwf$Ex#gP9k{L8tQ@cPFQ|9QUf& zDoh=+*KGKCHi_(1&8@(b$(*u}K`4F@C-e_GG)a7wjFGOSM~{G3JHsacQ>DJBeZplXV`I0TkE5W$85Bt;`=OP6H-1Z>j5iESejGcF>jXm z{f3El#LTbn=6-)(9o+6v9sojx;<3c6p#XpA;W>lW#bY8{E*!mnJ8shTf(kM#-?bhG z0t93AhdXHb+i$K8EhruG(W|D!A)c1OUjW_j7h6W>*XLl+iPK8=Rr}sc3c;|>{b#&V zY5YSkC}%Wgws7L(6_t+v6X*f1WR0cYVvDX^2reN`*zSDRXK+UJyAEmX(BR<)0DgD7 z{-^Za{waFue|nwY|IaL%m^p7HeN}NaP=oU%nrGFPK9UQuxaTk}EqZqZJ60$vnMwV% z${Y14rBRTL54Q`q*bhF7gS7^7Md{Gfid#4Q0;J}*MO07hL7ZUEf|c2bf<8EV z^9fv@qMifpE`R-V`0d)|BdRcG%d73c1Uw>#!8Xd@QujyhKHaOM;oQ zgXIMK&;cieU(n3P(^t+MqB40sIO^{)clR~#Sd+hS9wqf2Q#tg_E=OZYt*z7Rt;kMs zJO8nPBqo;}`@p4B+u6gTK^+?6Z_A>n!GSO|de^|gP&KVP7+rUDWfX;Zle`_RYEI+L zKB^u*4$|3!lc}a2^ggP5x^MYlM8aeG4cxFHl*oI~74v1$HDFD7I(1;^0*Bd%A)$Hq z+VXvdVp>Ar@E6GB!_kygR0^+?QVxj81C4x!R1~mPpl!`X51faX1B6t*37Igmn*PY%;?A_QFt$U(9AR+ zY-_~n#ZJ<%qU;>|2S-b8+Im*seu{Ga05l0e-@77vUHCoOr5vZQO<#3L#9X=_dD*-L zcPfQ_b+k3&{XU>snZTGQW4P7BMT(gFMf|D+#HBUjbm+jL{rK?87m3fi==aVdXWUkJ zGMBAw{Solw>$=nv|3&~~(;@bpSkU00hu*WBhJ@>JDe^S0`VdgN<%RDW;QOZ%>pvT% zzv2E@j{atJ(Ng`yCfYoeYpERx^PnA-poRg9GlD^Ox}@7MxA{w<)4lrshzW;H)HIv6 z4H9cYV`UUtjhMld$xntV9CG;~#^*S!=yD-^)nLib+R+G>Av-6@(_n93GL49+bj5wI zt?0tuGKJC*GOkM=Ym6o07Ze?S{4746D&nZE2eU=49XUsrNY13j-s1!V?opdn`emli zxNZz&58^cvdt-Nis{->Lg_V6%by5+>(in50CvKC~rmjJb$aG2HZdd9tSH}-s3z{h_ zDnq=y=VgnNl+y286=+oR(-8;Surgh*myj)xb*Sfk22`SLM#ZI07njAPMC_qbL)l8zjkUUTU7pbt)8;nyJXkaDVZYX_;P+xS&7BT?9zOeYOiT zwk==ev36G@ABuLL8B(5Wp{^}W#4++muiK@Y{Ll-#Y8~0=#M&vS8EMKNV%|U3&zE~% zRbS-TyIXabUEqX+XMYyFlO1v@U|+w@-zO)TOcRJsKb)-zY{`t*f{R(F)qa$woWibc zRhOUVYjbIh5vQOQm6p2@UyU_vOG~U(4J1ajPqqgR*$^F<^>yC0aP72)D3Dpk8A&j% zaYZolIhzddg|TbQ)QnjU5iZJ35C=1jPSoaEoaD3W422dYgoiOJe7h^xLTq~<&H5Jm z&^2A$1>_1P8p*ovCUwM)7Z%GBp+BGsVUOUE;vdO49Xml^mUwEXMRWb(D+FWY{>I#2 zWQ2^3piYSa!M->MtM_Sg=UMt@<3<2I=LDe>0^VS9e~+W!`(WG6`RP*~C3d-716<>4 z%K>TIQJ!nOg3rI>2g@&=hH7yXY+Y;r*J!fUkd(1&%kB24v-P4EUT~-%~dmsp=;f}IZ^YcF?&%xOopXW#6wm*Ak4ktK&DYK3Xve=BSZ|#p}>?erv z{W7SKSu#;{%A>zc@UXEWZ$6PvK3K)z;cB3BH)?LMg5&Sy2%(vNwK{L)Gllsq7jf)j zl<#mIRYX^mM>{YuNT75z(PoA$_2HTdAql+|YeQW@SXd^*6vkXMIw!a1p<&CKs|1c( zQ!co9&R0-(w5_Tqo{v$X%Td~Jtr%+5qw<&WJM}dMZZyxuEckc@{oFgkeiqTsDa8pY z@eG^m^&Spe5UJs+=VYmFecU|$Np!kL_$6`Pr_Kzj&}%x9*X^&9e4Nbq!A|q#ONvUc zl}8b7X+^_~F(X~7MTgPbT;8e5Gj5*RU5VUnmumn)2<2?gnJXO4DA$?<;e@cT-H?}0 z`)#toU;P3tVgZ;L`IN3=hZ&FJqSiN9VwBjMNi>M0MK_3?eO>G4WQk0l zA&a6v&S*OsDQx`y`cLvCb|`G4*q)groOFKTc+neZ1&4-}_82L+sF(wn2FVBy_6Bku z2blDKS@38rDnKQ+9shFo)^JFC88hTT;1g!oow95hE>IxVG1vF4ppmXzr8vmV9bpzP zW88bO09!J8{Y-O_^4~N|N>~%mHjjFl+$!AjX(lY%GsO%qns!SXSnl*)tsBVYBY(!B zTMvTZQ(D(Y$AEyp37C2;d3Bqx<4nF5;(ULW+4gyzb8LB!GvEhBSua0WZJL9%dxj9U zq8{~pX(DggiplpRN`}ac%ZGffC=(zyJM>1UZ^c?c`a9q+h9ET@^SS$$Z@r%d-Fr7a z2fF>f0VI`Mj|oaURj+S1_%By}^taSoEHQNn7Oy|2Ln@OBlxdh?aFW`Jr?sv+*mdNA zMt@zmy411Zzx)BD0sxKw@*1-LCUS-X2FS0dOW=<9=Tr+^rNI-IN&dd_1yf{S?arJ^ zLzlzXpVj5IZIw6f%z##S%oSt|R6i-tv7ISYc&*n*YzHHpUh_J>iWONUfNqTY#nUQ)B$CzV1S z@K^W6LG;&{=Z>OyKVCM2x|KZWD2>}fMnA&d1t1`+rx?E&g^TJV<5x*p~*q`0Xx*^{;w3o=9GCV$6p1{tUhyVJUBmB>$Ix~SeBdcD1w`m zIm-(%YM98o+6C@iV<)c?Qc>D>EX`c=j6_hAJkiR;`OkH(<6LNfN|-Iock_X$S{t?^ zC{rjN{Gg1gnGBD^5O3nkqNdQkfe%MJA!>`dMNA4C^S&l*r7n>zY5KJ+oY$Cib)R!nLI11UlX#JUxyfs?1OPHPT!t z9KaR~==mF{{l~7@o1N#U3s2VrnEC~@#;E7?`sn%U5dZM_f&rJzFX083EoP~w-|8n+ zr6jB+jf9)}*Rk^y3i@svP>Wc-w9u*%PJwvYgATV2$Yp@|kNekL^8cTqFN0)vd9@qA z8^6j`eU37(Ny@&D*mCFhH?OLwM`K$L-=4cvjqDXtvpF{Vw)k(3+ODQfOQqT)M@Q~` zFzqv<-=>YlR<*s&v!ZlI^If%Aphn(N50u~fFshc>VzX(tmdwsc;*OK&8MPa}19A;X zhcTJ)>j!p8i{YQw(hzHI?KJm@b8m*s9KY7B*}n2&0~N2dd8(g77TM0UkDcn2wp3`pLoI;> zGp@{*Y?u9Tzq?u;guxpXl3U`#DH&EOPgOH4bhZcUNfbGrl`rJvCqe5cJ@A}xflZUD z_ndsXCM2k|cu>!ngC!;R$wZFZqc<;%3U*VthY|9cSak$Wsg*u_oYKnz_0a1D?h;9! zESqgAd=V1iYBOObHhT81W@Jt3Q)t;lTO`jZGy3#L$0Af^2rn#{)_2^krH|zwM;$HO zgx}Px*qTK^>ho0$YD)T7yNg<{DO5P$U^n6$RIXHjG@2H4E!y2V!&HA|td|&FisE+e zT|zTGvM-wYj}gMTI61O}s`V@mn{^&csVfr;3Q}gv@p%-wkuDcSCgp7mlbWK<*O8gL z+SiOa2AUkQ3K}ey9aGYGBPPCXDkG_WmW3xEJa|*ke#-w1*d`ursu#WU@mh*koa%NJ z`0>z^!fyAKz<2HWK7-^Fkw7$q9ONB?=k3&zdB8@aa=U%{IPiRhbZY92Ktu|uM_ajx z%4~jl6O{e>PNsUBQ=)52#Qz8X;)s55XZJIThfw;{?KLTp1^kq1C53V`0{xdgLROrz zF#fHN+Xy2I*Nol#>K%X!R%a+*`cec2gaZCcW&WT3bRH2P?8FDLIR6imkw^T)3-TjZ8V&1{z*YSP3OAQu|lY(30(O67_bM%1XfvEBMWVPf7u6_?*qT)YjLAgiO%8onT zA6TTs@36M~(JZFQ;nzRi-;C-EuQOwYND{cQ%jK>lTZ26Vmy-$2k|oupbWHnP*VL)L zr%jgW+6cqo8x*BFI$oq(o)H}%8T9Cd>epA!BSp{@R^PcPfT>;LRpZ@U03YC}*?EVN z^3|BBrjR8qKv{wEJ^M@WXKQe0q5dy(W%8DAtG$^zYG2IFc;gNFp_?)hk?H&_qlhS} zo9L?bA}zT$m)PRB+0GDlynz>RRaMBT8Rs+Fhn2I9*SU1%!|B>SYvtUkQYrL%HCdSzjs1 z^mcL}xTn6BNc&46KF2|J!|OY*?$T-T*yf=C764X=U$}PuwCCb&LVt=TjJiBd9j=2? zoSk0#eGfr;0YYnjFoNMAa^Ujkhq3Y_9zRN_*5{U*Bq*BDY%Z+9U}JR&-s$paoM9Z( z>+j(ch*SDe9`NU1R0jaIvE~04WEWcjrA(^ys+>&?R{ew(wqLpdvBQdTn~vYaJV<>{ zZmcwAFQj*^M3v+s)?idC6Q~PA*^LY=s0^AM;*J0TrE6xDG8fxw^(}5v7mX8H$@1<@ zxMVa-MWwCMXYUz<&QJRNBb49vXD@Es5<@p^1howMR4km`j@?z_#{|Il@iYP#ozhvv z^?WG%v8*jhJ>H!{1Ii~!THw1ZPNAkA_rds)jLu=m$py9(r~tIDE^CLaGr+8BRj)uy z?lJlNEi-577m2C-f+YwUEo`ls{(2T~=V_mfS;2mKXa=bIFulnoiQ?{^cbuLR_Q=JD z4(d{?1~v0sqk&wRQ;sTzOJM$p`bnEs%XQYwJeOejl2S^IatNQ0$3)2+TJ$>bM+{II zm}tX;0hu6CKK$J}Hl^YcS*`mq+}86;FZNXR`?>ki_EZQZ^SSy)Oie$^jy~&Z{rKgw z+>ClFl4uuVHj`$Z8wz4swlunizfp(cPrIqg-ob6S%<2 z(9$u@^E>9I#|(}OYR=W)iN|i^(FV~u99Wk`0~|x1H};qbdABKkZY&6%c(&>-8d#}f zv9war_&@vNdm-A8A*%w^%ed{`+R4@xoEK8Ae94oT)bo~&4Q zuChKs9p@!2j6Qeln!G93HzRJ(n+(2dwOPX@jiktBvcZGAS7g^AN?j_E)pA7KJA%A` z;YPgF7_5+is~ZZ84__Az=o(@1qSt>|%hePPzTYIqD#t^#R~Y~FO@;ybd(sD~O{`wr z_xkaDcu(~D^Endlp;{vFc4$!z?@T)&_urtZZva5)!yj4*#W9P3?i&_`5L{9ar};e=&2y}v7TfLId4Z~ zrxTu5j61`L7w0RJ&ya9y)7z%^Xeg#%lh8PA!cK-8 z^mE5CPz3+G=WV~yo|FSnf%)Hf!t+fL2Jsc!bFcE}@7P^R)-{@1GZDYM zboL`8(NiWrt|POJU^7_>Az}K7UUko!@8FFwyicMCNnKi#(O2LAP(+Qrp?lu=Q zvRo1hhwEe|N~GlRgF)*TkMmt7SQ2J&dtahtvX=rmD|E~SKqI2{H%X1J7G60Ux^DHK zm8nNeZCr$o_N7pqDn<@D8xkCb&$k!1&)6Q?W_tXdGu&!JJ1o27dh?s}6^d5U-=`15 z(#u(9`3@gAGDlRCu;0QJw-r=9QS0s z6TDL9*hQS#t-p@YKDo;APlVZZ#pQ1`;Q;aeZgseM52$o&c8mP+tHBp8zDC z?=v*D|Kph%|DSo3lZ=NTEs|PiZc1+P#SoXl#;s0J?@ad_#2os#h1v@Df{fh0CU{m; z;kzSVA|m8Zgrip++gNXO$iBWKlegb-H5^7Ix{Bdfjw zVRqMi0lp7|CWo0_azn^XwT0K0=sF;bio#y~M^LLs zst>%OK1e^E!LBG%s0!m#3q?7Y50x)?8iAYZ`{nO5HVUsv$-vhnhO*%$=If=n$4;sZo?s}sNyl28uleT#SWe!U>wXNZ4 z9Xmb|Bip}}GjB+ATUjAriyD;mo5rUvBmPGqDCkur?*e=2D)SK>@ZfohY&y8Eo&uID3uJMJ=ZqMstJEvoZro|v3 zHbF+0g!3qft>lx+MIjGQxRW4r<_f_7CvKSbogW@QPUr)%Pj%Ksxb5cC_cL*;_2-S> zi$*5|_&q5^cth`s#I6r4vSd1A)~BH|sndlsNM_7XLB9d541~^>ue<+`U!e6LIM@DP zyVJW_BkUnAfij1(d~T@82zAmj9`3I0h?3(k3u-tn1!uo>r)wVjX?>QX@oyv|nh|QN zcb8919gq+;rrixGw*902>VDxcQK81xDfAf>+wcfqob=>cjviUzumC@HOkxDKlcbbX zUaf3koDpAmVEhtGm>Jad{FwtitEMMMJ>>RBKdj*Z)K{dGAZ*Yj)ym%;k-z9F@ph}L zY=;_aw%-3*d{n=4a6|KI8+NA#?+Wa%v*yk2atNsMZBsT=a@Wu+qKp4!3RKoGtgamm zS=cz0cU>(&anrLZfZ+2jCmtdisYN_)bbOckYjPBk|Jba;7O$WwavrNRczy{aDZo$U zdrVgz(SB)MnW<&EaBob@Q9H?(+FjtE%>?nkEVfk(c(V^S=eVH?C7*8c!99CjT~q6O zul}Xn(?f*UM4U_>a8C(bb37$nnQpj08?1KkpcPWmHlA@KclJ2@TfkGDCWQRsJ}jxi zhtz>4ARhWpNbM!iiCM6eN5r-5?8HshvOC~c1n$QLzvaMe_zhdZ+!&9Cki=-J(y04i%u?3C_C;6 z9Sf{)0{z7t@_Tpqr6mLx0j`(aK#Ew~IxTNJK4MiH~?pqn|N28Ur46d_2RY}A> z+Gdl8#XwcFMpZOF{_%|Y(645*q&-<OD&%=Jot*Ip<>0zJO2R9swmb)dIx25Ca zqamcJ)mAgfYrepJX(!oNo=C;Jis8rDIG6=KWr+{?=70K2HWz|xoJ#ok&%gH%^r}}M zDJ?f7xAj|}qN|8CT{G)%uR}JqAFoR(Fv-^q4J^=+e11o2wvSEpVda$0F|u1ZD_t)c zkR?%jvQ#~>cx?Y_?*MuDe+&LM?thhdWWX%sRH4c3jt^g#6*251Ng#BT!k5Xb6O8g_ zeD@4Vdk_zBF7lQJDz z!jV$6PRR-3#zXF6vuw=l)kDImW+V3a3I1@1 z^c!bItvu{N=I}$Wsz^D72Eo+hXAd$wJ>fha9Th5tR5XJ~I8Y%S?t*(VM%&K!6XgNK z@cB!lWW-5@hGge6Y#GT%O6iE}6j{!!p<3n=FTC4%OqSSO z{LxAxj+qTF+H);y1vjg8cK9F)v@@!eNJRrZ=*8TIQz)iIq z4|$BRiHnm~>CpnnwGN6`H)oW!2*?-lIp>dwzv?A?>&`0`$|ie3D*_$#oU)oPTH7T7!X1)mE8{>e4jGPTXZ1)H^hkx zzn7@E4A9IG^bdk98|deCII~Xp{ZJ-5SIQBo3^p|>g+3PGRU#aQ;tI*g2{y43C_>=s5wblyopPZ`JN$CGUd1<8m2ah7P-fEi! zE18`%J_Tc?MqJYSAZ}_2j>0fLY+sDW!;Igh0b4bR!Y1B2{#EyMgrW;G$S=x{Ngiy= zBaJDz^J6^e5heGcf3H{3klm>-lzl!$E1)K$)R!vI5<#$Wp z-tT$WICUFQEc{!8a3P)P_Px(Yw?NgEF6RN>%5|wv5BD5j9Sa~Ds;m5=5`#p1lrTmn zAQh~8DbT;dT1T>wHkV4;reGBNihFDb_q|S6wCX+5f{GAC-uS-6^g;*h8(m_*Z@&2D<)ywKsZ-$rZ`dWh9w$jmPa$BhSjEETL8rMvIR@*}U|5 zK4i@sHmy@k(s~`BZ6JfztvhniXRe)BQOa`GhE26v;H!sh_TwWR4pB`Sg%hTAU6<-M z`^VUk3zp9ltLM(Tc*XTaj_<$9I|HvaDB5Ty9Ld;`u*o)Wu#ZPz@89kyS0r2 z=aGUE7y<1(@Qde@{Mq*F>6q7T4qF)TLqTf~6w+z>f$C_t_kP#x0sQzh-LOn*rg)N- zA@ofQT({$BA0EWNc3C%1~W=mW>0aw57_w^j3zaAAWYMO>&s98q3L~jMC3~F8y-V zWBFC+MKu+sD!3s_rWgQeNKyS%MCEhqJ0vNM|$M#fc?eVM^P z7??!I6z(5{ny_hF~hqEg#pa^A@!w3;%e<&K5>$FoDiWZwOCt}(nY9Ou=wf%k^-$=>!C zg;RE&zPP(^Du#s=H-0AlmFcR>ELry3{lN~L^Zc%jAU|v!)QSg&?_nBLft@N%lU|hA zO=Gx=zkiD_4`s~XP|h+@xpav6yd{h9>{&7LCrt-Z&<#kBELqQIMb+@_120{CVXzT1tYlG&>P-)>5}{lUv8jYF?Sxmf!QM%c z1z1zo;)tpKjgk#Sr`b{FYS`@vK(A8?n;v!d(_Sxszju6~2&7Kkon30ZW2x_gy@OXjtXkVX z4Ui&l-Xy~Mhd$JH{ip*QhGN=nnjBnr&1Lgk1kiStlAcV=V47ZcfnPeV^k}%;0oMPw zCc`8kH%dxWrq%1Nr%5JUl0QQJ19>pw5)Pl)MZ!$P?qY|^NBOduwxlNaJA?_oY9MR@ zVsrtiWAga0BX~%!XRGxkoL3TBkP6{}7dkJ8gR!$PM86p2_!;Nd^kME}El=U@uhO<3 zCqB=vn7AsF)t*drKO#8pDN~B=7_WPLq`)${sZn~_Lg|Oj3TY|{$gOr)`?H4AY!ge~ zR?)d3BK?zQ8|jn*pTe8Jdt;^)e;PPv)<19>#bCPRb=*ohv#(1{zW$=fTnzHRZs)`f z3G|dP=AFo)+~M@zos}B7W4U?0c2wy!lBkBW8Vq+tSp9K9P9P)ZQXt(kl~!L+q90^YJ8ZSdrs>!2$&4)5Yn&3NBtq4;vqc%NR+Y)$fnDHCWRs$q7z z3W*rH-NK+5;Fqd>%s&(3e$p~IQ#^PG;11Iui&Jd7CdclOq6qAsv0@(MrD0h>Vh zo~miEeFHh~sg)c}7iXwVr7I0z` z`}R;O6%+6et}nlE=X}o5+QF@#s`jnLy>H3#aC%!c&fP)(;BwsTxY#%y(YyH{Jq8o} zCm=pB-ZK10Qdk~WTI}T`yv3KNFUEdgxC!6I_>K35k6K;pPpF7F`iuAn{%AAFIXyWK z^G81`{W7QR#*e@0KY3rneNN&TcQ*Q90gA<$P&%c_8wZbJPb@qbv% zCt{hev;M#TM+j*R$bADW0095GeE|SMg#XDDxA9-J9SXE+LmCTh%iWpM7{o7kcdt2s zlRDk!^_mO>pO0sZ{z_PO5z zxmk;>sa_gB_ewP0YpZ$2vs`FWS{@jWP>0e?)d%!eePhxt>D4BDsIC)niL6oUm^`Su zw(G!BQ4}XRB&TO_@QBT7J5?=oj5swg4Gq%m^1D;0lQnQ;f zhEy?&T!l3UzK9f0sEU%fy2svGPw}g1I?->Iw(lk*NCVaLEp<%T>G>v&4)kr$(SME+ zuk}A2&8W;*t7YRD4we2r*?wSl9r~%V;$6A@77~CMb|m#kUU0wZM)jk5^YBS=laen| zJ$GzDqt>_HWYSJ>$fY1N;5Tmn%I4tfu)J+oTY0-J=@#S%;Q+2p_So=VKxyZd$(18K zuk$cRWU$MY?Xz1{w3eXIs{p3KC|F&4!T&@ zB%1jXFts05pq97VMe!SL^N2lZ@noD_zgB}^3@2jeaSQ=NFIol_9|w1+xtVWoA9wuh zEgvUrqIMsm6-T#xU26!pZRnF8INk`5`|C-<7k3_|YNhe;aD8@QEifMGR`>g7lyDzN z2xefNzpm^vT9_cF5bpEHb7MD~yW^c}S>i+ZqqoWn)tm|Z4KE}8j#-X#$-8H6hBp;{ z+UpbOyL|o%D-h|@P0)RrkreO`XJ-Ha%>Tu9$^TIu-=*z2h-WSt#)25Q+mp8q4CPzX zg2vh&hh{{55X{atyEu?PW}4>hHp2)5<+p(-B=qXr=itVi7j9jvegx^Mnr@xhuI`{9 zsZOr|6ZvLjFvkl;7& zE)yk-a9(&*a1V`f`vwHl;)&evTAq&AA9S+eA-g;LNof;0okRA->HL0wKPR^9t^;RI zy=Z~|r;cDnz~ec*C>R_04`0aCB^jO)xO*F8{1n@9z3P^LWWBPT4r2W{ttW{!E>h0{ z<>|thWC~(KZKq9iJ+X3PkJ#;Ew)*hSU4uTKH{QL10?GD!!?LF^ylY~Vwv@^wE4r|i zcQ*Hh-o~lvycXl00JrXv?gp--fjp)<_gZtY;6bPzgi*3ayH-cE9P}0qcjczhYV{#s z7Gi#nuxLF9+-}XB<%#Gyz)EcxkRt6>A?MP*(H|eJI4F?ps_DQ^URz@R!Sf1%o?`K( z6r>tC(sPtqT9~f2?G79HT(t$Qcf}UHKR`+wCtZps zSmbN($`&278vmRDc&-%?Zt^*?(jIW#NZYFQSN|kBe6z;#3LManeyHsUzW+I2?1wR%)qX<)qk0{sY2RUW2i^6^LpD}_)1 zMSeZ@aT2xn+?7D}yaj73%U?Iqf5e9L?7>T5%P%{a0Yc)BiQ;;_>%Gj;tG8Z|FK|tE zf>-7DPy9|l+2M61iE?1wLPl(1VSZWdRK>Cj~DC|_}hDFRfCiEE7xT76SR#t$XaPyLK4DVBFhz) zImkL}v{GKU>$J~|ZW{YES<*F17jO-C)!}i-W8lv89@r&%;1fA5Tr3RveHg;kPI^dPl#9k(R+&&mn6`==cnlMj%Ws&-; zm=dT2<5jqrl#xyGXV})Ro}5$TEr>K6T`6Cbjh#2WbhfOZ4eGpbHYGc4TKjJ$9|o~U z^vy(v+)iGQRLv;ZUp>gZ$jVVGM$^<0E!V$YMJD}fu7dIt+Y@fcyHoqNsL;_|QCfP6 z{fp)JA?exl8!PKf6jS3^fBo$q`4K9LgEgM>zRU+8?2(ie9917~^ttM>kC|s;pxYBZ zIz*Ntwjif`mj|o5{-!aBK3RPQk~tfgkZ#( z9!~;TH>i-jLD1v+vG2p5wMjo_aY4VX9kuw6DVnzR&sxwmIKfoQk1pZPMvC)OvNPjp zW$Z#;G>P%2tEUl$oUwNBCECcfd&U+{@Z%=n9hxW|xb($v9e@A;=>K~X;-5kXB#Qsb z-~ohR>C^W9h>i?w;*pCEYlQna)BCXT#7c$fVajmlbJqD8-`Kpm`|c)0ZNey9b0S~) z>Zd7C3f0hLZ2V5kE=SS(>|ltRRu74llI9xnv)FUrqd=W7X^PZUB~!@lL(E?(dZM;&+UYaB5xw;i_~77FWELb9EuFq$y#uV zxcbg0$x+;QTPQY_wpy|QNpB5W`{!fSW?^DO+6OJE$47^xBIP@C9M_y-i)v1nW4lZ4C*C5g%RJBR4fmRKfCppK8Oto#^Zp#Z9(8WIA=b z(j(EBr#u#xpHw?i)IYzlXD_U1D+>^}X_cs#sj4p&4@Ee)}YdfiQ* z*rI`gJ!)-BlP1u1UNXeU+Riw6kdY$YNOs*34%tMf?e6#%R>ZCM>ZtrvAS@@D!fB#U zhJ$q0P49QltHIn|%(RVPVgvu6Am8&8qW2Y_wkg4fDz2X&akC%jdJ%3tzaaaXGN~bl zA7*IBPyh0wX2JGfbccsi3=bD9cTb|hGs}kAfuUmXBUmF)hlT~bZ@cJ(XP8zX?BUQD z@ne623KFiM_}RWNQ z%^ggY<_2*mRa2gmdrNC+*VB@){k zF7~$;<3}iS)yv|v*Qcag2z=$(etbM-b4YnVi3};hHiYTC1%K403>3@c!Ysg{jOmNv zo5V{y(6k+Xd`Q2L2Wc&Y@0>jddx?pK%M765s!+2Zv|N7h$_@NnQlPe2IO?ZRta#)V zds*<94A7;fS`^o!*At9`!zF6Wl5}OfU-ua(J2)!tPqgDSxfvZz%)r0Jb0ASKC~dgd z0nR#v^F!}%=xlSP{QT{*8Axw0N_1>{xK0OOPZqe=vVz z+-0@_zrIQ}*&RKz(l}pKAyDeln*7Y_{w(6sB`s51;K4ca`HSyo$HZ&;4Tj6p%_5Yk z3+tS}uX?&eSnpY{uWvY$4X58qf$@I1Y;7!Fb&O5}b09`igyJUWKP_KJYV+>Y%11{! zGvmI^hk4nNn%s>a^-F==@7LRiiKFY7mzRZ24m~~-8w}qBzRBCQ`D$OMBL^fe_^-&? zDj9D>O0hM&#`c!EeE?VJdF;`LZcH~j2Oe)H>vHf6TKZ>)0sjYqBAfUJ_$Fd-O6E-S z^W6==y#NX(;4j&`AG_SU&N#tmokE!5In89#%eWv57ss2q2C0~K+eMxoPH~)H_O-$Y3L*#e*2y@9{@l&X48kF=n6FJ+l3GMju_XBJ} z#~oPlElsu|?`o5tX2MNC#=_3Y;Lb}*7IU%*Up&RSMu#Q#oShC2ssNb@aX`v7$By;I zPQ)uLsK@@nsFo4gP9@}xzTlvuyzMK|(uf)#>E9HWjf$n)=6(YsgTC;eUi^JL+FH6R zUU_o?gS#gZZfG3^O6xwuI)uw4^$fM9;a6^b7ApIv)0B_<)NBN!DRM3HP3dyf8!$!52<5@yYXGkC6vF_{A(8?REouAhRG|I>46s9P6 z9ehZ9H^Yy804ggvXi~##`_z84eb~QpK09`f+TXe;X)rTb|N7aE59BknDFVlcPQ)w3 zqoqB$oj4C&Nb03*JnoY13i^FCVsU{`3F-wO@7Y^e{vLj=c$-Zt9&BaC^Ub#3rwDK% za40i8p};{;bUy#6Vq2`cxz=p$i0NklQ9!Q01^gSY+$z*oO#>+VI5J(j<11k~0c`)D zo+xC%7$o|QvakZFaiC9^r)M~H#*gvIosx|1LzrCDnX}|#W`@Ho_*5+SamtN1^o~;m z*sUPK11zPfb)l{}V_c2QV`f$w93xvUf&+5YXKZmBU9&sIB5z0>GH+Nu2NbE`v_C)i zaMYB1a}Mgrljo3RB`|aU_AZjABv>;sWzdfb!#q0L(LR?f&p_(je93wd>n-;;boEqR zuJnaiRP+ii%jwO}`6OpLWV0w1c(5v}RZw-l@odHqz{6eJqdM9e;gTuM$rrDsb^2VI zh@GC@H&aFJJPH3n?dDmvDHpgcJ+~$oy-jS}rWpCHCn>N)x(;=odi7@3^4>B>%DLay zU931^n7LOlW>1k(!y2g5zl6jT6Vx;(AlAGTtWlHsdXb!vvttyewo7U^@Hzu0Kllnw z=Otl6xvP^thh**J*h24VMJv~CPMoO|1aUw_dQ$sM?*QIPQ}gSB0>MZ@>>ROKid(^X zlH0Ww9WSL>Ch_KRxz@hcimepr(GIf~Y>KmF0dV4fLY}oeKQHea44z=&hG~en^ ze#y{C(Bo{3O8pOAUM5|yD@8q+hc`yQjC7^Th*$9Qe4zay$PP>ZTtQ@>&6%nd_O2=L`gc?Q z5m)|Q;c`wWVE|3(z9jM4tL+IPr$VD+raJZBx6-WN&ggCUv#p7A5JNZn#;1zyoeX4@ zH~j8g?d3;$H04`u!Yy31j6sYBr_rc5T*4ECdzjKo8(}}a=mpq)y~v)g0Z3c{e*Hse zX#RQBQ2uql{wI$RRoK~-$J4KIgF5Nc6~4h<*Eq3;oC?F2eqW=*=HoAZNVTHjRD}3i zZjVCpyxxOOQ-s2fyq?5$r}Zq~DqZoblWSBvGTe|%fl_gc5I@rwP5 zYuhU-qj#c%TtgeuOwGEoFVPj_9xHZMZq2{KIM`O6F#>u20x7tHn(pa6RBwdumb4G$ zlX(%$n+N6dC0+H~=Ar@9b>mCohvFPWNm*TN<)(ksw1>%`^_nOd}aAu(nS+Nxg5>+%FSKcTafTPZo1i*1ZdBYrHe|FG7sqDg+j6+DJQ5vgii2jdnBfe#N!R$_W3N|Jau(< zww7=QoSd?am>Q~o{|J6x^0g-ZD`>whjtS0P8OS&eVxce^5@m@Co}Q_KAh^kzfAMRZ zT?E+@bp83s8-<9r{!Cw^;C8a|hN5=LFG}U}o<&3Jr|QGq!!d<>{JO!J(}6N?taKt1 zCOE5f0S$dQd4Hq*o#E@1x8BdyihBvv@92LB09R8CegHu3w=aO>q~GBZ)06+%q5Sv< z>Ho+5eQ9Vpxju26d=}>^EbN8yX&HEZNH6X_>Kq&2BAe=ilwn?4{njqQ0{){Q&V+H$R zrj|JdVfMAMec!oFv@ky*!(t1;@;ZD0nV1Ii45Rhsn`Yed%C0U86cxrRR8n3;`9lw#&#RKQsrBb!_B!xcaXNxbVyQXwslBf+m;PhY(vuWXs=BJNAOM zLNB=>-=pH*4{UbDrTdcy_!>$?LX+#(c+G5%_Mx|z`4PBolbKO9!yAvsS8htpoy`ky z@kb)^o^`&4H)5O!MAV9fHwuWVEbOYR9dI12+u~F_m)T$hD*a$#BTlz2E=|_nlu0_V z5Z3u2!n_YCrhm%9?&U(egUh=LOmfo+e7`}-kKQoaMY!i7Q5!R+lBxqLHYe)99O-4{tBT z71OByeX?bdD#c;ijiv`8d$Ur!li=mVypx{okuw!#{p_#ud4K_v56@FX;L+Sf+5Gpf zU4YqwBiNgmjEES6u-C2Tccu5}nHbLDr#?<^FpS^F)BcX*k=OnweL{_2M8Ml&YFzXK34GAtcgRd~=ntXgjGFMj zA8M0O$sj!b0qLVO^f?=@!;KtKH-hKVF^Zi4S~% zr`&J+|1WiCGfkSMzmj=m9l=6gOeuJ!Sef?M1c-L?+_h$UEK`wnfKbaSm3k zkPY4;*sPp1F8Jo+;*3EUts~!=sq{(mNeNCTFi0ET{9Y9qQC=MHA;5DgCN=pZlixK} ziFudUB|%Q6ZSx%e1Z$;h?*}u86IOMiN~;Kqv$i(KS%0&<+iUvFqtDda`Tgvd4qxzw z*P_Z*+`=wf;A{WyHBei7O~HI8o2>ouddqYiugQwX+l=?u;ocd zVS9A#6Z5t)ZwZ3VSe1=|g>nm`%>I0Wlqi#ocjx6A5(@P@u0mMGMQ8Zg&fLij;nlQE z9mgfSU74r(M;$*QGPTp0B4cMn(s!J=UvJh-<=@H%RvXXgE#7mi)-FhWO4n4}u&Zou zCf>NLWo{SPu4YS35(!l(e^*)_;yPhzWNarYc@FwIOOk)N70Y<>P%Rfh?-FDtZtUoE z)$_t|kPe;E=7iD6w%Ga;yUVb@mOX<_DRLDOkt1fLPB-XU51C6huv*H_tkg-*;iRmY|8J_eOf%;+g-n z#+YJ#uD$+MR!1LqSHoRhdKK4AsMd;`uRZg2bdfCC88{K!2d#6{JXn*hJw7qWE z_BT7J@6=TD$g!2f4n>34Yz&^=m-PaQgt;2$y9m^M4=?0>-j%zgp|QW-~1ipgzfT`^DHOrON??KUea+&fqME$rAxc}Lc+3=Sc1e43QJ zWLGSRe`#h&sdys&vj6ECFda~(&~J6$5z0TuzawPesWh*yX+UD$P@u87?{cNFKwQrK z>RcKMiysLgNIq}ysj334De@C1xdAxHKv+p-o2<+ZY+7!~IwDt7J=GTWY?1D*!sO^; zz8&G>6Wnc?*mYML7#r$0^OoIPi-Fe;`W32J1#f3{d#jW0X#CL5>MoZ&vaJ>M*FC*J z^s>OWQ>G|(JMci3Mj$X%!ECLf|ImqNbe@DJ7A%T1ATWWsn?+SF)r`)d({AsAAE%;h=$FE#52d z%2X&s;wkIeo8hGZ%^MuI!Z-(0Nc%LH12^X)=4#r6Lutcl$cHpvCs7Q@+7)K<5{YZe zw}FZUasM4>2@}IoOt+O-sb*S^W6Q_lME<#Ehg{{B+w)q^Mm&Aw4$A~CMpyhe73$9} zeI|}lNc4Nmd*YN5$A?6pE15a@cp6YW%d3@PquqsZV3Q6sn5Qj5-%(?Xszg!U@B+i3C zakU%GZ`=D-n8T64@^Jj|hDsQ#_Hqh^piBoo9*T#}0QvatdjMeRi!AIvIA2=t()%A) zBainF(^)TbJ99kQu^}KV9{PQxp<&T+% zYs`cB>L%@Dv?{?7RoSuGhC&+8Rw}%fw0)eHYdT}Wg(|n5z}?zP0H45sNBk||_tXaP z+lt~;??bt(iL|wcl8;iD!Mp9X z6I|~bj{So^+@?x=X};U=Ogj4hcp;H;YlOx^E}`WRgMfW?RymyKZ#?2`Kv+XTS~)*j zUcMKOK6WoomYqz3+LLMr#a2;E4U>tI*A{7rOYfY&L8@Mfg|z5OVUDgwA%!9nnfo5X z_a_CZI8g;pd7a5Pv;?FX35T#KU+JvPPPi)^J?ybUE`6EH>`JTBI{vGyX%y;;b% zuB_UevHZ@C@$k-H!zqs1+Z^rsjq{%rUhaP{X8nWjxxc^u+vGwbzYirHN&^kNu!Xp? zpHaRfN2R!KVWf6We=VChYhGVWn(rq+V(U!jL$i!!2 zAS!uVzH7`D#faO{u-hNG(4t#FW(V;dk;qmJxZlN==4P@wAlWCj0lrUqFej0^74{60 zC$|xa0eR<|w2VqBxl?kb&)fBi_sNe^uAL9WK1GP5cv~$ey<)jE3X6L@X8DGzW^@5N zSTdN2)=16CW zY+-uEcwr}7)JiwY0eBZ!mrX)~@7MKFHyO{Ly%a_6-uR$NtT{n}WXIOOdcy;&(JBqZ z?$AXss=El_V7rULui*F2l58Z6TMn9bwBZwVv^=VP@F3DwgiW7+^?CWG;5UYd=mBa9 z$KA=|+7HYMXX^kp=&psiNhSz0Wug2eNHWmTYHl(DNY5??{!`vE^w46( z`T9urnS%83Mt8a|=KBm8xmfrs`kOjaj2SCufbyA$g|WzmdLMi+ zBb4>A7jqi5$I1T0=Y}FWQeZy5ktjEF+~952>W2r8bD(>(CYr*Wd#PJU!g-M22;LiR z1mPQ0HiT37%dJ@}j2by`;oDsn$#=e2$ETY%;Ud1-h8>O1&T>`F9*IyhyKI(}sw}!A zNJ&Lgcx5qW%``03^h^A5@@yyTgeE@H;cmVFKZc3w!8V^HaY;h;@A(D}Ru~`~e0_tE zb+}ST%gcA=d_(*2aJo8isSsnucp9F+!LZ%H?-LOrM*n^7%F{(@I;37aU^r;s5z0J} zWtvr)%Pq@AscI2FV=xny<{3YY#WB0u)|+q17A(C7Gh4epZ20No`RPP65Z=fvn zjxAe<94yDfmN&N3Mz@S5k_(LWP3@d(pNXZG9l4R`RWQvZUVZn(L&dnq^sgKGUNd(z zTwM`fHxR^L^RYo7AR0&h5>ZqxB!``R^PQ_d>jVUi^6MjGM)2)(hb-KU5Dxql)H4f` zO<6DfWKDK`6S-?de}|pC%t8zivlm$u?k=ZGD%Qlq-<`@`0g&ln=ayUk!(>ho-PR#G z0P6qoy4wHK!nXdun>ZPSf$5@3DTS6hv$6@pikA-Kyd51GUDKPT*PeM3Y7`vk=5-cw z5_ONWSuTf_O=ZvX>pmW8IB+RrHa$PrJX|#y+k(k)-@>LUE*M7=C^%aBm(Cy^o3jt9 zf!faBRbm^~%_~Is+hiZ;UNF_pwO!5}9B!?aEWJ@-*zlb7+RcQMUjK3?ZKx^?10Aqq zDLQ@Hes3|oq=nY&q82^tieXUBNj>3Jtt&+sE)JlXhv>|_=`M-vI}ccH4f=S!K-4WM ziwJGS9nEW@tH2>qH!L|eWJSJ>pL)CarA&6?n*;%|jDKz}PQhn{$iVjXc<1cp^K*b3 zTk*=6g@=5GiEnN@1usPk;1kb%np$oN+v0n?`pNEkRnp}`Tk+RH{2|r7kaq8AadGey zze4(Peez@GQT;T;yo;m>)2eXWRI$e_0zgX(lK1UI#R7%1GLb zM^_YO0n|X{m8#YGrE&9I7UB={{>n%8zmwv5($$tF=o=DA7oED5maJh?wBRXjP8xbn zZ!hKbhZ!UQKFFUA?2|e?%#WU{TFr_qHVrhynuW^~Dv2eL6Xe$Y+Tt?Tvm0}IUw=1b zCiwar{-Y1Ev$bXB;`XA|IOpwyo9fPuHokm3#c{vO6GL`RN4+gekxphQf!Fb^pyJ5DvBg>7F5Q6w_~we8N^G;={(h_B zv<<(dpuzW@1rO<+@yFe_=ni-jkoRlwf1pb7r28?gPfXT{gVgzHT}%2lL?>e#_luNo z`XCgq_V{#x001HYp#8sBc{-uzg91lItIGgA2H)xivqQe;HK^fhh_?w-??`F!Plnq!XLB|_Lsh1^*A(_#bjOkQlY&skv|rix18yqw+}MMr3`0jO zJbbC8pzMzDAu6>a)<2w&k3pRj{;?V}^Urt>lpEjZ1fZ^7U+_%jBxXQOp2F%(Lpg5J z)Ten@d8G8e?t$6ZJQ|o8m1KJ|e*7P=b?gdfD?=n|NTDg5O_Ym4ufkCoA0sdutM+zoQ6jQw6R&E>|K zg!jQz;FMb0YoC88x4xYqH28C&)VOU6N8w|udBW> z5G%;cGRjT00!JrG0J5bRoy1INE5VGk2aDvjX+yjua{>LNrzvr>;+YXIE_z70` z(Z@gP$PL(Khr~AW@!vuBr%LuM4Ya3=K#B&do&W;~L!v&;sP`hf899e`5-Uh*qGz)Y zCetXUhupTfu`hL{#)%cUEFahSg}Pz?NQ?d9_4Lz^ zt~yv94-?BGTOVwm6t2!>C;6>aR~##*6HPK{jH1+S)s|Mab*a6L?`%4IDzT%>#}m*% z_X$T@S5O*Oz2%%#=#l3V=Rs^W%g!)CLk?uw6f$9%JaJ_6ymjW$Ntmcqp6v{dBaQgB zp^or{KPpj)I3k;y0u04pzHp~ zD=qetnZ{>qbM;MbO5Wo4XFgVhw&i=M2G6W?_ts=5lETCI5L1a&mz6ZBTbkZ^f;)$J zAKyehkK9S4%zeK2w=hbXxI-qtgwoaL@GK08!EN0$vG6$34PmEPPUuuQgsyk&spjam zqN>?%{ho^V)AU`lpobtY5>55O+6QXNxk{P+X16z)UbXMaF_-HhBP1i7!C)il)JGZJ z+Z9!r=Eg3}Z~)}bf|j0nRBGVpUoFnKAdE$`tw5ptWkx z1l-LP=1=#aaK3@rE`erd5+}9d5s{y+_mB7y$Qrq$jfI<%D4DQr`KvmSJ1^Ut%a>4$ z^IO3EtF_iQJ;CM6wTblu-tTr@_XSJ{op0a%YTueY^FkYe0PgWa$-|xhFpew4=yI2` z5wGuFnfF=?yw6%U%C&6l>l{&T1b@DS`hoFB5}ffqK7SQwzOsF=JAU03+ra-2i*J5Z z3KK>7R9oD8Es*=@bQS)4MzgCxG(B#2jrxnE)z_CL$R0531&{;)H2i;c!5|{i# zG1g2WLJ`^7%dqc$qL%MG9`|Dt!1>ig@=OQrV5%)qknF?*6PBr9LJ#e-EVMSOVHj;l z8mr>_gKmNw!m-56M(66cS~A#zMT^ecj|5DVL{`2@;DCD_oiKKtY?4cInrzN_MW~dKtzm zl0zsl#p!PMY^l7?koaqO64G&L%db`YnAE*uH_rTxx6hZ>Coc1OTgQ?lqCs}eN4g%c zIg3JN^_h$24qnN(!vvqGIA|p;_6LqfS9u|9hgO{A(zY?EzfYvnCGh$a4D=~Vu2%~;R zqL^hoOyb6ewTmrUKE=JbwO`%H#r1jp3Id6fBP&N}Xq_*UUP^pQ;bH{ode84y-c)7% z`a1xKd5{z8_&B(;7~}NzaC&-W&=&>~2<3cEI9?wxzutPZDK+BTg7+WiUxKDKGZVcl z-@P8Mq6Md^HT^~fHp@;)lpiCr5Fu&v1aH8#7Xa54z*hi7>zUT8-`T4Pe=PIO7OecX zUwoGhpO~GK9wJI{&kdOB%<*&S)9=q-(@RbMRDr@M4&)4kqhQ>SddNjq#=Y~+Tp{Gv zw#|AA`4--JZtfc(?f-U2+4+aK4)}_*+-aUn4WB_k72;%yw6Pmsm%xPY_-Ffh43hPAPnl(loa~I%Rtc&oWrf>&Q znuPMTox z6gEcH$l;x8WE8BGPTTj;#G-%kyh z26%)FT%(mO(v7pe%AY&tB_0Ah+f;=2M#sV&1*>;&3K6yg*$P?p1g!`koK9$X9-TGl zI3OziRLlhp%$7*p8O7be*n9Zt>gH&LrAuF9No=R1@j_CIPOEJ(N~4aVuBPO<;O;rT z$2!!pt^1tkz4s@dkCci(>{HL2zd7YDNn#xzj&c%Mv*Pr|i27r6H!;QUbOshXqJB&# zj;z`ZLuNTOa-J-a>Q+^og<^ualJ3 zE2rZ3T$90&ju3^q3~;jP3)mf1VZJV`ipfJBcFl=AUX8unt!@m@rmOCh=4?aecmyR6 z586*p@e|dNqyaT2E8J&92(Lmpuu$z)QCCsKsG+Ox9cWv?&Nc$-SxS<$;pF+WJ&L9W zF%&q3dRC6YmPxzJ-fZ{5i)RRk<3$Wu_RqmPy{>}`LxOiCx|ft6G;e-?J6b57Cj6X% z%a=DB(aBRz_9JVfHG!yj38LXOKK^7telg~a*A3igt>X({%XOeFzxCLwotwFxGRy(? z7MJ!Q{|(>J=Tdy)pxq12dvwlPSB9PVM+v}YhHN7k)lcVSQOEssAEQHz-9nHc&Sur; zsp-OPy{`pO4!k!8U#7S={C|0+nq(GqH1RD!odc)@B~kWC*w-}alI!=(`tw~`Ru zS~9~{%#++L_|LQ{e#Dc&0XriWoD=b%fVeJbILqGkHdoD`aa)_i$Q1BX^d2pZ;vG0C zO)3;oc0dN^hMU$nzLvNqKc*np?5!>ZVxS5ql7dNQ-yQ+V6H@ZyJtMa`u3ND!U~gD|o$A zFGQ!+BRT{Nts=V?s}BPPtDytxgzTxOnO)mAuBC6Llo;<<*?~eFsU`2{j6p^tU9DUF z`_~GHo4s!{u66FUFyh*}KGa$nhe9)D(k_8cAxLFGY$8_QB20&DO`=z&aAolelRQnF ziL*rrz+GJXHFU-M&au+z-y%vZ_B(VD)k#?kQwl{7ynNM8Bv!g3BFC+2Z)Z+?#$ivN z22mF%$~mkL5BfA3?8H1qlG2XEFr3ynttG{D@6f`2{O~tnE8!yxcs~#}vn5x%JRIj= z2(E%tmabM#y4_b`QgvU43L=RB>c2&KK?hHtzXV44BUqdDNOU`bB_ITen zMVIubgFY2LmL*eJ@=jYu_cpj;=Ye~1UB=yOT5U&jrjWE`;@tjeMARsyl0;2)S+IG zTp4Q^bIhl`Ze?xNt)}nHyvj|0p#IeEwq_+)3_&HIGT8nt1g!nnL&f|AaR0wOROy7t zBa+4^jVI}1;p1(0H1|>_p_H}ny(0CEoaU4Bo!rn8Wf+%Om}UwovzO-zL9bHYsNbD~ znJwy>;wW!;mtUpPWmK*h?+csfAUUlc$Wda9fMhwKywqc+!%fPzx=gBH`z6XnmfuZa zrK$wnfgv1LGN?|)5!fVJs7XTTDV1%GWe7r{Izp-$>zb!5kdK%5p5eRGQxCz>%(m#d+UcBfK{z6+J}U}G zEv4>vmB@s)rx$3m8Reas-1ICA-vzb!taz%6 zjksK}e*Q_d-C`&}S%ZUzO)}tdr@&S1Frb^-6?ark>^MOvd;JAdI`@4vIOs2cEv%b) z&8Ty}Vyw5TI)})SQ_e5r5=$0Y31mGOe@kTJ;)aUZ@@hN3d{11JQ$m$bKO1?N6WI8u z&FxeO)&ln7o_5+Iy5=eJ;1y;wWf#A{!W;SmX^_#fF-rzlKAtOLJhN}Jde_Sg24fU! zzAyvkNj|-McTo)~wC0+s^&Cz6ffV-fKgL)6MVWD*_n~vf0{Vb0QW^jV0OEr9 z#{JV2caGm_iYU6&TaGC7LAV~`1i{T`VBEWJAfMS0$Y1pXS?(~Hz(c+>>0GPPYX6|_ z)U-E-VzOmll28-s9QgSm9)JJeHW3*aZo zI+S!+R^IEE)@hqT;JqDpiiP59wbiR z&br#H%m2=}IFxyr%$&t`owS5EJ8{#r6Yey~Avx|d_RNKV7!;gH#ym?6F)}E!i?-^F zFvuO~zMGtCfXCaJeCTBvR$T`DY`I?T3$Bl8KRlr8vAPBmMGP?k$xZ}gdi{}ml0R#F--6`GgT#6-^3B5TH-&oK z=SQ>;cPGg!L~5?A$ZSX7!J8`__*CLdoHi0Xm(Ln&*dy!RbwLeH%tO<~cFujJ;JGU$R(aH8u38ZZf`6LXmt>C= zb+4IVkyC0poIVLHwp6@$nx7-v@LhBoM%&R2QFDdv5e&dv;?($Ok$O&V{3|SM&F5KQ z8R&r{d?CS)zx^;mq=L8Lb|Agc*7H=m6{}}wdEQrbXSn`WH=4X(-2#omQ}KG z`cZwj{r%Ld>P|RJn}?2B;5TH&O{Ry;_j@QU^)UW$u0T z`m!(Z-0tLA;xArXhupv0@mu_vLEfA1iT~!;sFQ&NOMhx)CNLxq{2_#WOmBNz5=;Li zXC?fnDqEeQ=e|7i)MinBJg?s!Jv|0)@hN6-f##i3_t~Y$yvaQ5z#zMRk(YH=;^xz_ zqf(is5}9mGFx#p=-|IfzwS^3dRUl+rnCw8x9p;Kq5jZxWhuU&FB+u=xK6VWu_ZFn$1lLrZP_ zQ($Fnx2+AQkW_5jww;P?yW)y%S8Ut1%~`Q+&DfYRXOjPU-nG}i*Z%e%2RY2i>~|ln z_i?v&;agy%S>2EKQ&k51R$Q8DYOC5QDYhTk(BJcPW`^~f>#P?f2y7F34ct?Xl^{lN zTU;Z`w2}{SJr}ar^P)&_7cd3>P4 zUV%i$dD%o#v)JGh8BN!zAn-Q1KK*Z8VWu-WAJ;FYu9yM z?udI^Ao(CqGF?9=ln4i*e60fmILO0nG8bs#V>E!>$gWM^HVtq&^Wnn4$+O%)mnj44 zqC?(czteNHOKxv38qyB%$C0gChtAW_SBAk<_(4-75acvOl?oUD)>~ z*vjkLp>I3ZOZfA=}C|+|qcls&P40 z`L4#lO`2>aE1#dEbAgwd?%=k+A;q?C3kwc=tYjR=cqAE>>rkjaTw50p? z$cLCTyGp!=yH3JkRA6?{2>&Ni-rwuKbCDx3)=49dHUu>LC;LeFg7##@(x{DIC64p( z8KEP3#CK`+kwRpJHt=>=j^=C+#Q%M7D4y^8vL z&-g8q@gl1^^6U=ZDZYRU%7!2781?Nd_yUMDbO5d*%IbjC?2eJ#>3+R?@^G6SU8-vb z9!Y!ThZg*)mj?UF)-ZRH=O37ai5=iqZF}|H-I_!yip}tQcJ}EJR<1rb4!@3PJ$qu5 zTX#*m#-_M0epk}}>4xcx>PEALTsE;8i4|a%+ArFYy|->@e=xYuP|eq_*ZKiS> zP_?}2@oFuU8Bw@nI7E>tuxK`M@$tGcM_O8H;CiwA%Re%D_AkZ;E_U>GC|I#aSuUfG3rYRR^;bra76hL(Jnsr=l0LL;y1(R+8Wu0^X2RWMs45|4nLo!dM`t9 z8*MtF-4KG5^-uo)*OY1{=cetx#n(6EOO89MDUgJxc0muR$@E+ai(9AaUI{a@lC@7o zK2g|O;y>VZA{Va({yM*$R`>JX=;)7TT8(d2 ztWj5|*|AMMym-kGWDbYAUip{LEqeo(S!qtbTtb!A>uz|qeX-o)?@q@PpTWo~sjoe%`Si4MVn+CP$!-{h_M7kYC4>t>`D@Q&P-=e_VO zD70+x$`NgPEyxHNUG(Sp29^?;{x36kH@(^I-!*pdEuAy!97BQ$rbO*ckjdOl1K;1m zpEUZiq0$sn2554th|Lt7he<+j?k6O5xVr}pP`8x7H>EM;5&MK?F_E1dOw~SlWk|A= z);vOmc*rQm%v2!a*R1_0!%a7C%|&<5^jP8jDX|gVH&WJ4r$7$kru1NhO7-b+Q&=m9 z6$P#P3*|2TjkRJ`iBfGkwx-iEW9^^1$B&<(;Co}b>n$$4I+K)9OS?1RsHWvz`UzOL zOs@t4bi|3AZNa0W^MX1Ct4o^!7Hzs7QNO)zyOplO-`IT@xBBjk@|syA9@3v(9-`o2 zXfC%Pxmayocct2_!-jHqGLgT%+cGHh=1hE21YbOM`A`K;wYfZ-Ti(3KUd?Pdq;5Dr zjFuiAx>WW~P{3cx+}a5c`4m>^%JsDeyngaYJ`ftdWX{()zi)pMc)W7+cp3vxkRC^- ztQ)rL>V2<^KmC33T8FA@UXuDbQs=}x(Y2Bo4FW>tKdiAd+Zhg!5ZAp}{ZYs22&BCr ze*RO~mH$Z<4wr)XfIvQ0Gdj2(|Ie+0fA5EV*#c41uul$r(7#;l9N5llGx|rtU7+1G z;fHig?CLn7Q788i!287ZKiV($t8a5e_NvKOUfI1|3S=HVmI{Ieh^W1gregh2RuorU zbh8z?m}5)|M6Ct421jMM+BaRND=saG+m-sPr$Pq9df=s-+dkT_Ex=YH3n z$086Y(&67Xn-uI$#K*P#K>ngW6@gB|~s3gI(Dp`Cga3a%$ z&85O^4BxrW`6wq&&YtxYR)6IdEZi$`YSAa=KhvBZgZDpY`T`glCth8bGck00Z2Upr zFJxc)9d~xQWIZtfpGQthRiz|%rQrV|*UE^EhxO>b4* zEzmx@hevgVQL>40En;u<>YiUw$c7$BOK3&p?>DJU@!%1gX9!sJ)XMRJ-v$gKBI#M7 zvajvuC{kmfU?hvk?sVLv+GJDjihpQYvy%R}dgj~?5vLS8|1vFq4C5M zA`$hiY7x2YjLZ`mtu6J+6wJV}so^&NlMe*PxJ#(+OWsVI>E=I#Hn@vRBkG^%raB+k#$sn@Vyc6eH`<~f-6Zasy8<@ zydOHqQA><~cDO$W8~9}4={k-b>RhC&n65bswO22M;UE|b0tA}bqWIsz{>W2^Jf?!Q z1EI4M_1c@u2$H$`Rs4s?UD|X#ll5Ob?v5aB=-7JRl*ik}(G@CZ-)~b)gvDd-E?;jU zMwJNap^za20zlukN?$~0zB~-S#f>rwNpb{kvp2keh=$V3o&{SuN!I<%x$MYzbQL~b zcWoNrd=-=yONq0be%Y#dfR?Kskcc43%`y(VAsHD zW7SspkaFH7ssvI-i@zACD*U4CJmY%k1YS{ViO!&7YRR|3*e2q;#$|S^{V~zU3STZG zOD3RM5Lg-DDa+c5Us&FwJO=27WpWKPkyWdl1nhD!NZN1fEpmYW}*IjAic5}5<5wT*UUEE_FNmH6b^)puCA;?$+W;eCs*HzGC zPiPW7%xCu(0dZ_@Wox?)b2@42PI4(tVPv!cS6T6Ui%FnHEvNWbx!4-X%O7dKRm&H2 z7=0)fPr2pG#O>J#81*wbtPF{e`iR!Im3zreNj>^GoDRgAL)*k<*4@CodRZ3dBOAJo zNZ*4oVzprxoQgC;afLKNbg1Z)&#&TMsk>k$IhXP`o5)QcZd?W2AfRAbnfh}FUOHN4_Oq%_pcL^fFhc62ajk)9uLM@Au40?h#O-yJ%%{P=5B$V0f4aqYT%iB) z_{Of^E3&~$+RuxZ;;-(zidj%3bf3fxK3-eW9(vPKefMMcPC&cRioj1uM{GPqyc-VlQ8TDp4 zDCYM2AwpK2@dh$f*#7>5gtg4a`K(5+Ct89tdfD_6Sk3OiOh0t7+iCK>{{0!X-FfIL zvsLixd$gyjcwm9?fe+wB6lcnYZKhoJ#e!_obuDs~r8+0~=rrlz8s=(-K0y!V z{AjmEd!KtMe1CJH=}!G>6sja<0sS7X$Hg<&VVa+@3nxf242>_1^qL-5`lV+`mhlI% zP?(f(k7Fjjz8A-Idbjr}5#?zUCq zqPqSID6TUwtB~+GGIUb?I>)nTeUp_QwKno_X@l{ggAU5=cV(rXv${)V&MTU(nc=q5 zwy{>*;`0)W#liedE@{9sJ=AjAFa8u+!{`WUS*dY7PT80`{UHa7*kXy#dSkS)2Zb}d zZ_BySJtX*3YvGCxi8u{K&NzpwAk7*>D@DQ?SW%_~S<=qlPG=C#_?6fM>)?ez#ci{R z9FQi}IN)_?^XqIKS~HJw zvP#xN)Is~?-}f7}*$=)}9%49ci0#)&lody>kHH^0E04|~z1Vwj(#_oboV?GGYt(j^ zXXvXC;<0Rn5EahG-3>28r>dpK4GTsEipQF{2@tY{A^>G`hd~3ojaULAdKnRF|2EL{ z4+I3kKUKdf1Q8F=7KQvbQ~Mu{v-s~W^1r^S+Wn#A(ldfPG;3~?q9EJr!8f-U{Wyoe z8lyWRrA1SHD*!b>%D)Ji(+hdTaOxE7zkv1J%ZqrQ`mZ;0A%YOv1)UVagyr|Q-fa+SkX*vwDqYx{igftYA zxrY*rmOgE}hSt>Y?>=~jmM_QqLZMOY1nN{Yg_>7#LNef|v^`jT=7ISfrX0BFuF(e8 zQi}Z0sr0<#x^Ohj>PhBuCqIm{HiR=4OiIQA?No{Mu|F{Pcv$*TwfhNkpmAmLnI>L6 zx-$!813;Q1gM-!D<+T0!P7|Yt8`d5f5knQeDe~KRo81l7wEYqn(j|v;u0;37F>T0| zhWW(nyJ5UOVEfdhnPZdD_Y`#X`cWSm1Cyq_+%Silg};Ue?fnl!-%9^TWfpOVJo=k@ zVi+)Zo+Zwh@KUnV_l1Oc$m>xg2@UoiW}=XHkCS-LCe~58ys2Ylt@m~itx>^Q)DNF< z(c%&uOk(w9&y1(UGdS7y_%L0}6OGC^Y zWFY0ORbASYQ~@i<0bH0i=xn1jzUxE*B;{3i7pz+7X>ke~7p3K2Y_-X8{IZnk)K#$- z_ngJ+a?|je?fukcVT`;qSDBv0H0eFom!CQ2Ma{pmyU)Jb_@dmp+<^Ih0#(;rWNEWT zVPb8bAAQNW~HL!G@#sV;2$zzSPSSj-}3utgYd*|(qD_eED18E4)Ifx{9A-M{= zc&BX!#2gl(_Pf353nu+_e!erGI}>e+1G%~QTm>}&bIs&|B;@j$HwuPRbe88X;$ZLZ z0-^O#`=B4>VSuSeOi&YH&*i5uwQmVY$20%WkzU0BBcd?ypq^^Fkg(DA%Bs(Y^;>IT zqax+cUo^RuSvxaJK2s5Sd#d&&Jt?GYt4 zMEt01=S-2|JL1u8y!2hJUS}6xxGE4WpGUHx4IeS+j&%r))LNAej((=9$!X$R919NR zKfUUq4S?+V8!2mV!JxS%cwjye^^j{u5rpEiGJc9!waUYRopBf0P9?W#r*+4ea&~Yu zzIFYX_y~9tq?4yosyeBz|VY>@gtO!*Wi)U^e zsMVmHGFC;u{rt(W+u@bccvhfy4^;&;qz%nUBLH|x77?qisiJLiFcF=nFu`IqBS z=uTMg#8iBZ+ulquk&-EWT7&`r_@b>mu*~RJ0thIjZ}rZlr0=oBWPrN!v7@I6T&P#U z9d!($kn(%FkE&?mck=3P^;e-wpi|M$hVu5~>kC|!=fdDxLC>6C%Lj)Ae~)|E=N3Ml z`uv-J3jY7rI?Tf2hqgWWGm4u+8BM5vs+UF{O&DcALauY%cdh*?b9#&a_&@e~({DQ& zsP&b0?;MBA)79$V%;fN^V2&P@#l&4;2*u1rYpO8C&+aij(Wwk2+JgT_|hEh9wy0@sL+=+4AYyfRv?^ji= zWAo=P1h_H6Kh|)< zVY`9^K1DaH)n#>c4OG}lp!EtjyX=$0w6_o&&}lOJe&#TEcpJ?gSGwBHYSq7P)0*wq zA4{IjAAaVt1Qw#^J>0#QU4$qF4w)en^c?0_Hi(Hcii0Ct$*5jo~2J(hVB^E zgooV9t;UMDC}toonRU!o;K8`3gLik1KbzsBB{Hh18Q~+w+2Ln@2rQ+IQ|5_2NCHZ@ z3lP<>x+gkjTb3$#+qcx6SX%R0dusHU-WTPXIV0R7Qcl(b`4U;09eJtOn$9=gQF*SYX0h=PRi^DXcL6DGg`kFwshsykA^!rWxxr zST8^7qB<~fu2ykR(W`%dHEwP7`^|E<)#_h&i*#$N^Bx6r6sx}#w4vABN>bk8lP;9LjHzCqkVKzKnQ{Vm#2=`7JcwpBgWCvd`tUwKZ#GstWbbX{bo{T z#aE$w&iTZ_f#xsj>?{ESN|k*Hs9k?Z)U3I`+NG{sCY9}yk-0;up6p1`R&(oh8K6NQ z;%>O_bLj9*7*@$fTEQa8Hhmae^7DoEgBoz1lfH6t?yLgH zVm3IKhxPbZwRQ~n6kPJu-79QL5xS8iF<>aUV^kb6q0`9;TnSpqWS0qcWRR$QhSzbJ z1W}o+`wrPp`Tv=JpyyI;C3vQ+LO?Dn%-?IL;r@v5XG#A8cHX76a^3H-9Q&FuKiI~L zHuT$In8%0#L0ZM>X|Z8sCJ1(4|C*E(DJ~9< z8zAtQMs$bOF~!cl=3r%U9glt>>Iz1i{vv3s$?{4PW!XI@-hH5o+QIF)*vl59{jy&Y0v zDobU^qMo~w#yUa3{`oO&{t%Ws4xZVEX$%C%`ainE z4*811qEGe#^z9uj${!zk4@6|~A(`j58})({!aurgA(;0<@w9qR&MV^QZUXrp+SYRz zS}{LWq3<1=DkRVq6jT;ee>u>IfR+l9JDGbAATKbWPq2Vr4e<1Iu@{B&cD_1a5~2$>T5E%M0*za*^J5)BcrtfQ(v>glh-#xfc{^ zyhmQv5cN@KXDFFgRos%XGb6t_2v#J}Jlw0>O=9@!Gz01P{9pV6iwcSghq>}|E>cho zR4X1(xznzeuI2bl6u0&2@=XTRK$RV^(`A?RI5FH#!S@o!@OV{ctMi9kW*MS_x`6q) z9ew_Z4iP4&8vo4ZuD`vq&C529H{CfFrWftQ*5s{t(1I&b6jH56`y>*XWOr(77GZ8n zG*KAyQ*t$_O)owuAHUmPo~YP5whf0VHMTr@Qx@}RnXRr#J?{ ziDfGYpMDz)v3dlo?pJE=B}G!Xo8(8A#o}eMzV#?$BPh08!F}sHL(_CCi4Xdf+WcDv zg~n`DXOdr93lw&MRFe%gw>DIJ;k0IAsb)FNepc=m=KopyFW1IWEfbLKynrP$R362B1L&{yar;S zjySkIVKsu@SFr5qUUvWbzNhg(*c0ddNPYRs!Wg{!ohp$otUGW|LXuJ|()|2z%vUtv z3a#fZKL7Lc6Ko5Z_fM(1|19{?8A!y@cgYk{dtMiGe7N`Q7I7zp`f%#Id3oD?!s5>_ z(O0$;*M}p;aULSKoaNphE^v}`ae{a*0P7h0M!oXCBFFx{MSu$PA3LiUgf?2OHzX?| zp==czrji`_2sGMcC?mk@dykGU+YiwO#;}V0HO*D~^phVYq#8PzsWr>< zJ~LI1rnLRzKixg{ZmF%4W3tPj4dyvsmW7H!4fhZ zu^1Xty{tA0m2LG-e)3UAudGmgVf0^5$;s?YbiZY7qX2_+3y4LXI2E_nND0&U<_B{` zr)*vgvDJliCx_bhTe%)%UkLXH7EYdy6*P+M1mohbJwV2#XmQ=A%fD1nPbnhLT;Hfn z==fOs8_~Oyp4`?n;`r!VsxnZTREV4OzYc8<4vnSX3vQ&&9u?M{PYX`EvI zb~~KfqvMb@-JC$j zT#A-`OqFX10?)DOe)tL>D$_LC#gLcc?fcI{gvS^*F25lBs5pm&N6-MYu|FBo=2H$i zk{^=dM#;Wr7kBaJXQmsN@*TF@5OFcm%V*qMMNmFP2l{c3J`oS!E@nSBwJiWe?@RTU zP&^3Yo;;2?hktapC#P$D+lG92Q`mKNSHTQSV-<9I#(p_lL&%3}n z&R`dg@s^|7WBZXz4iAr)AFQ{b9gyc>?d`&VuJ5Akk(!|q)*U3{J6Ce^IDiahmGbk> zSic4BgH!;5qNY)lUolr)w#@$>jGE zc!gra*$u;y*(HtHeWQgZ?nssKiO_G65vbSeJm-Ea2IMOq{?-eIGP?8rd31-~jG|&J zcN%cdp6`ERZj#c5b-0BPxrmTmMFui}DVpUGTH0~5N;yH|=hd=vy*c)Zs248U>`k+500e6V>h76*xvVay%#&;`7e)(ZV?k+O;-O zb5y{)I&xoK;*AhE)OV*`bS&Q?R<6v3ZPwuT2Ox)qyYtu5daW&Jc1yV1EahEQPgBCf zW*{=OZM58E!j@mAHStmLlV#2)o+SSnZF7A~70LV(i>zx@r01OtTlq8g5@$FTTkv$K z{}RIvWgEpe%$`VOJgm+8+Nsb=>>*jkVC{&J&4u9xvN;XaNaw9`L;S5Y_!SPz8I6j! z(FDlPP!y9;v;JPzMuo$RR0KOz(M6q}za}empaI-;o~y*&Se%yERhpN0;J;S=U z)s|?EyD#t5+a^@~Mi*sje0BoG`ITy_a+--JHq0)av|oLkX2?fW8jWJ~Huz-$L(0HQ z`aV(rfsS^q`h$HWV;$QQw&7@PC2`=dc*1%&gCD&x;LAxRPJ{V|86 z@0axVXruGZjcw$KuT#*yPuqTGolGVQz;El;PSkth_Dmatp`n1#hEz)M_7`FY;O0Mv zn!!sD^X&iI9<;E}P4VNcI4?#>x4hwP{=-z@bsN7V!#{B9xK+h#>_v~S^e{zLByvV0 z3ro(KFgh&3`&%*4-#_s%$S{EG|D|T03h}QLIIm&37h^Xf?NUtL;{^>7 zH|NC1;0blKop4*Gp2%)i!rr~%m#};Wd`eccmbl%eui0M4h#P6O(}>~~hrO5G!_&*J z-l9kSH3E|&<_eSo@`5=n&Wbh;PwWT2$MN0M7KJzombwc$XHV<$bpipl)TH(kFZR%I zsMag80=E>V%G9gamsb}7BWJUWH#zpt4k7m+^g8o-OueoRqB9d}-j9c@J>SIEtV5+3 z6_4=uV3XBk{X^P{n*?R-8;=I;w}%%-)ToJ=x?UTMah5jc`0|?UkOJoAWVuOgz+({qt&oLY?4QXM+bHg?-`Vf9$pJKSl*F@G}gy+2Rc& zw~+a6gaak|RTx7IBpt>(7UE5jMe1!%JW z2U0`FA4)nL!sDhIN^^Lc?-;wWz_ML~B*}5mnpOQRgH|2*9W2W`Vm(?SM$xx#2hTqu z^oE87c@r9%3>kPXaJ@z%-u5!6zcvDuk*a*)U z*3(JW+6Q}*Qn{v>#ze(+o`f6d*HZHiIhZdsW*kTrs}ScLBJzj4772bsen`flwB&HL zA1T#6(&n3$a89&2q#D!8n7y#mF9}Kl<1*lJM7OpvtJgj+wsd? z6I$qOLWnFO4*xT8lnc!da;)!n_Krn>P%=9u|LwNXxsQaQ;5{LRqfh=frPr%o6-iH` z%q)lYS_9_g%g#<;pKLARw~;J83U4{fmV* z-i$AElF-tnKX&`n&N>04%+foStf@!zL7`0KPrUQZxYIve^4UWv?vfVB>t$M`{7~zn z0(Pky+2U6TQU$QEt!Oa6+I$2LoB{D?^^`)ginJ?j+GTIX){q>Frapx)P|%3ik1hHv z<8Am750&IyZ)2yp0^sElju6E5xD8;W(vWt)Ss183CCbe`Gf5M)Wh7Slg4K>+v#)=w zmnbs#)8O^!jh*z|-U+4$Vb!va=F4 zn{4a5NYS4*{-C0-?J^pj?xi=qxGl-7_bX^~+3*9iihKJ)9Cf71E}}BqH=b`TWY&a+ zX7OC$=Ca;KYmRkXg`XG$4uqr3@KkSoFt$NW|SkUX6Dc0D;-j!WR{cK&100ibxFFUljyx7 zdarC0`a*tnW0pGeI|}y0D0V$UeSy2xVC+oMAZQh`*Sc;#Lhad(y~y*ZhUq7LWrB_iU-hBj5kS8oeIhw) z(>@zUFP7naPEX3z$mTVJq9MgT)$63o4r7{U45q^SZ-QO$=|tUUTvM|Z*AW-?^c%Cm zv&oU|+4+o(e^~z^05wd&|73^pQp)#^Q|H~{zuZku4r3eXy_Z?sIyB_RawifH0dL}T z5dVG^8d@>=ONKC#Gh$J>Ex6hKz<0Ha1780d4KSpF{rk2J9m{zKxaQstW72;C|2Qt1 zdItqwzmKHl-@ng2dDuzn8cinSO^L27EO7@BoDaj_ztHv>NrOzO^WT29P5xJ@>-^6g z;a5lYRHS2yI@s@%x>w~IZou1uqU&dDZF2AoqD%_L;4(&XD}j_TQ*fpc73=aM7OLz4 zmHZu)!>VUD1A+bTiu*o2pKgP1?20cax^?JN-b-cT4m3~UbFGS+{VfK=GM3e+{C$kj zC;8GsXLVV3+W4GwzQq|K3NxHy(cwv}XEcr+-Nlf;9$y|WuQDvA_ zU$T(f#G|@rGqxy3G}*$2?ziYQgmRr^3*)k~M#?x)W=$aC;&!87dA!f2oGXbVJfV%` zcw0Kp{8-gb9oAeV#!}qhUNIawNu9<)lBSFx3>yK~_NUo(6fzyJ!<_v-rW^78p6w-* z4R)Ym4SYC&BzS+usv^x1)g5-|R<1r)oG`uR*<`J^IwM0#kgU6HAB>=d))N$@$gINW z3J^Oa4WDJuD?tAw*vxt%aW z*34$`XsA3{Oyk8=;fAr6S=gh;sEoP9DeoI$f_3E89hmImo>jk9$hQ3I;~m7vBphV& z)=XQ$qnls>K`-=#)F0Jq3v9+1{7@ zZMU=6;e*bH_~{r&Q>O{xwmD#PsM-D<0)pc|9pCZabMU`TK#S-b1O4xMe#cZ_>!xBr zBs2R+?5``$kxcdul>y~BX1REzZmYBKH987-gNGs+G+l!R+)&$USQee|e8dNGI-I(8 z>uD;R-eAn$NG^`7B7l~q0(CXv)FRV5mesjt3eszjO%Giq8PN|&`Mw(=Yq7GapXc|k ziV0LQGXi%U*W@+Cn6R>EhR|aw4>q-K-RJ3*V@dp@jVVX6@5R5C!ME>3%ftxI^W`LrKutk<_h@!hb*!X3|Bx!!el z=CM6FNv>@YaG%K-n>c)2-N1W;b>Ok4JX{p5PIug0scBt}cfXk@*=zaEgZ|sn$%5Csk9JoFZKo&f0kw6L7$a$Kxl=>O!A=CBtU~0E>7@^CBV|(A3SHz z_a^kHC9%zXIoIzbx^2R6Fi#)vZ{8$XLaG?M0(K zfo<*ieGZ(wpP`)4j%+#ir>M`>;|JA!%C&X7?+3+aLaEJr*n!QAy8(przFr1q^}!E3FT;@_lMg8xb_&_nwFW(X%`m=((&X$uYM|Joqk2^}(@_hY5j8Q%%v)~(6jvB^{6dve2y8pmm}8aWxnCR zTFId8jTZ@&!?VXSd~dvv7m)OmQmDRMRa#Hy6YYP!)jKWWmC~03Y>SV;vG}q70{A)c zY>!5Ij%7^=ZspiZbyY(~m6vBHel0X{O}VGF{Bk@#Xz!;~QMhtW+n12$13I;yQV%Kd zqEn0e97$}OyKcy;BCEUkDY-Qq3C|(vp_CA{P*MM_1i5gN-01FV34^TXkVVakwxNiC zU)@rEihM=CT0r}AJbZPHtGy{9*tXE*!T#<|4aGwW-Tl=o-Zx%1;adm4irb#(u*S1j z%&sv|`s--Gme&mY_6hy!WlH`?7dC!Jm2UDS;eeub$iN)n+qkx6`EJYy9#P>;J`s zipr!jAeqaambg)^VXJljg-Yqe2*?`?cpz+{S@fhjBd|YPa_6Smq&&(UtU?9-9_I8} zT^EH=)hvML*!Pfjf0V%C0g)0-XoP95%(sP+>fLa`KEw2+%0zN`<=`}l;P8!_y9$y0 zQSZv{feF*N^)XB=mm?YRwaXNv&u;eN-z6r(R@rt}%1g4))o~ZG((Q3I?k(d@_6M*} znr;0;pH0y^M;zmlqvn1zP|{A`S$cl3UEPw&>E~gHyNNw!m7oxX5D(NvQ}~OeYSCZj zLQy_nhGuK|2OFnUKT+u3wuUJVeKz^xV4(Ft!bxb-o2vg^$y`cLQ2^4%6O7R%`nz&G z)Vt10n)5S}v#~&-f#YEuB>a3gRVlYsr7T1AV{2=C3hO{MK$71MY*4AI7$n2OYu=O#C}CF4AS;B30|w=U{&M3o^9hbD96I$12%)gDfE(iw+# ziU4n(TI%Cp!Tod8`G>VO%u3UItH(=M`ljR}()~N6@A94OJ8yLPl_~lv4T}OvGm?3a z^+9SS8k3RGh?r;!rOcf84ZUo zSf1E6c)gvTS+7QHFWbQmCv~<@h9_xAhFmckfDCV+wxUC4{OsG-JH=7wX{p3BF4#|qaRle}LB6ksDE^J0&)@URCvix+e#5VAG4Wo0H5s4N%=Wt`Pp@enuD!)jCe9FjuM@=@sd87LU`A)d7}NTAwDvcm7~(2(WrH>;We9 zR*gL@J#*D#V)CgXC0z8#8oVw1c*K(JIr%oEQjy|(^CZ2aDukwa-aEQ&ciepdN*U=!ld-G<}1*`TwMw9emfzUiM`g>y%2fh z;HL9Jlu(gGL2`Cl_8~}H=`vv~K+8D6uWv`2BlWPpq-*V;$Ev$lhKNQ1l5sG1eu@TY;tl8eC%gx_(JiX&-Q z4c<&B{3r)wBe6RvvaWjOTV}$HBRlbIEm_U`+U<@$i<*9adl zTiSUia!bR$n0{x-Wbt?DGqIRv`3fA?c@9ppWStF9D4rBSbi?k3#OIm_B(8;Zosu*A9Oj_;`L^o1{wpd(H2(eD00@vS$s*Y1~>ufk(> zv@Z0wZ=z?2x<;u%VmTS>G3X(dw+VQbVYr;@3Ga$n*`;JO3fDv=#C}Mt2a|L?v!{ZN z>L2!>=Dk86r>NVGc1zef?#@?HqO}h3O*U#{ld&L&L+Wo{j^0tKzcxRAU2ASuGpJ*` zBSS%~A%EqApeFiD0Rd6@?jMDEN2+{0}| zICkMpRJyZ=s^6b~h1Z3Sn&$E1P=#yVyV$fk)nOg+`S#pPcL#&SmT5=GyWu(eYf3k# zN?>b-2CJLmh0=bM15x4qFx{^NCi3XV5Mt~_QZc1d^b^-#N0Eq{Qkd#WffmvQUL`B3 z$28Jt?8i5SVk;~H_vn70C4Ja%Vs3bQXbPftH+HU$fl_P`tI@3=vw6?JyjjrH1oVTdLl3-3&G_=o|Vuw<|9uZwuCm*aoN20Z(uVCVd zuhKX7*G=PFeBBk)1>RXzi2UaRHS=qbjMD-i<4bt5V5aL~j z(oLvrAmgFil~~!^c}3)yLgyxv9ebl3$Uz*G@OO18cmf+2?my-f6?e&AvRmC?nl+*L z;Cnq+b3;bvdR>s3mD!ghah=$d1`!qz1}dxWRa2F{;lwoxtOfH-F4Lt~jnfl)JzDS` zd!SOUgAtG~0p*JfE2Y_xTVrS~8?HyRiBYl5nyCwq{^)EOFRAdjxQ(jZ8yEjFj@$YH zH~JDxTmP-+|9aKUJEXah`@i(DBHR59Va>jAgwD=>V&_e^`@WFWiF~h?&c*#}69T3c z^R%zf-|h24_ibi-oh{+ny*dH_^}^htNY%_DTNi_2K^_Awno<4ENOlPL*Q+h`Q)FYHn{(lnx{wqzm1g5YiMaNrSW6*NSHXet+#jH(r z1Zn8c(IIiqc6GcVL9C^Bf)5?dz!Wv@t}o5*xG@}F_&k+pKfi{_`VApf@rdGP=C4_S zIpN~%q_-#|aid6=h*MEuS&1 ztVIS+v2O*QHuut&-RZ@bxPwC{swlIzEfkE$I5!kp6R^Rs`#PhHNS)REGfu6=kYgjU zram{dqr8`w*`U#ONzw4M%(K^3o3?jhHMpRZp6iIQt}@KnBP*p)dhm7?Z0D^V*^jXt z>PHZBdgxXh=uJXmktAl~Bcrku+<)aaGSw2Xvo*9^*zc4wHHEEb86nk`^IgPig9goO zqSUiPJ<<>@FG+J(hifxC!wL*Wf>(ism{jY8nlXa#M9jN#G6^3xRK2@F<9AWUh(cosQQvM zu#kiZ%SIBz(qyk+hn-n7d!+QU;ticeXE#?WY$jVJkKC40>q{cvad-1F(3V8JCa)NC z%0kMcBFX4#h$ma6fR9GuHhPf95@6z6lWz|m-^O5ZdOkmL zcx^&efZA>rV`gOjXzHkIKJ=(2-nGpI~9}vG8DT+X* z2HVDnp5@J1-h%P(10eoxt~MBca(;{`&eHXg4fSoK<~%0t2m%@l-rkrhEK2j}n&IDt zO!tP}e=@%q(%5wAl9`!grQ1X~tjsjeNjJ^&mvk>8_6#9RDET`g96{vg@ljAi{QaMf z!2i$gx+Q13AeC?}_nW`4_;dl|n1TD8jkvuYGUh2M%^15E4hIEkw0V%ad-{%l(M~*9J zMR9|4Thp?_z|jdHAgfzPYHgUec30OSW3HrTrYdC!|Hb!dDn%ybX{*tOL;AB|cXU+Z z!G&$k6Suvzv{=%`cGUc+s~oU7AXL37)nV)l^#zY^S)(~)mxl`qb1b)JeMtt z0l$%o_GMid5pCHBqlbFHWdY2dY4h_bPe=h@f_9ocMK;EVtFuLXFpDthTx1~m#HX;{a}4Fd;Lk=e}HdU$VUKv;O#F{Y`^EDm?2&Qz_L%kPN5AqXnP z3A*mhn6_j#zKhsv9xZ(naBYBF&77xL%k&y)$~7;(1%RTC?I%_45E{{`x3?#D^$1@% z!^HyY1EIyu2sG3|k3c?PFi;iWFPVJj`GeL@J;2GMtmQ|I06e{X6$GDB84LJBH> zeT{H;umwJZ!5%@aY%BX!2YDg&r>M6_KYv7k8q}_}%>1(nMZbOSroOj*_Rk*P5Xj^D zm-sL!&3w%3F}{D+{b=3k8F#v!i2KpGmT7j-wBosc!gaT9L;>odmWKFWkAvX9ZV*Qz z2x_Jb!>hmlXqnUhxL(DV^_hZXtvI~*?DF(Xy(Ag-02;sUz6a?JP&n2c;QBIDe{Zue zSh4{znwLr3eKO#68UDuL5<5*>X|Y&irCnep?z*gVgYV!T4!0X(WHGUcPQ~#!&}B^^ z3&*AV#uTqX=O%bVvJ`nnGd=y#>oK58avZm~%dKVFuslJHK{P!)l5&SMR9gE4zmh8P zg!nG&56PROMx78d5=nL}A|b`ggfxPpJPyo2+bca%=1OB-f^;^8iI`aJ)JHd;DdArn zgHIyL4OZwnSm}yGbtXCRzsscAE$96+Nk!kuXJg%%EU(dAw14@VO(A5ZZ;_SqIGQfY zw^J}VttD|VL5S05J=7>eUS?8taE2HdV>wqDGevZ(-E-rKy#}89oE?1`5ae{m2y^L; zdQ9(lZYYu;dxK`qljX2idCUd7Uj(dT-}e#|-57yYi1{RekkAqgJt5*V%1 zKTX=4uFfz6H9@+b8FZneqpz76w!0vxjJ3Xet%MH4XsLWJESq7wQTF(o%aPZZ%_c>h z>Ciy4;I=?I(QKZsXq8o~hqh=J=eC01({ImmCeFfz-$0i`O}PRXSlCkSXfAm7;Grb< z9kpkg!xjISWwr85`WzKDi(v#U%srv{1l!)}JnMoWBUOe2qYZg$>M=3sW$x#0HiK*0c{DdT7bKK=i$bpMpu2^#-QJ&QiSVN)Pri$O6W>~gr3oEeVXEp|C4{32p1chXL&*asY&&^_b2yKN34>$|p2!^-< z9V7MJf5zhkFg}4-c~TAlvWB1g-1mE+=x&}*$)Ll(d(Z%2$W2`W3vQSTPmz9yAI~{zLC51wBKPk6Dc8RuY z&0526YNgstQvhXo&s0yD@^1k4%(7u^CnIMvV`oCDX4}4#rGU4YJI93HpXkqXJx4xB zt+<-XQ|TX)K8EEVF`;^{m%$nI`zDnj*LI21btlN@4}00F#6^d^KS$eW`RIP7pY5A8O$;9#w;|ByKZ)t(pMj>3#MWs{w+jQEz_HC`{XQo_ zP4;S&{3^;NDQfXHQm26}N~NS80#{x0g94F)3R;h90x%LL4FZa!z>5f&%`m?9d)=(K z@E%&R1TK}T!v)MR<@~5r>tba=2vf^6hqLP%wNB@*PgvBRcW+Pd;6=2N_>m~OwiWx2 zquWVP&{gz>D{Y}W$@0>#nrj6{7LmpZtaabF+9G%eEkn8!UxICa$MI(-9^aQv5f6~& zl-BLg_p5<8t}G41j2IuoB5(Iw!(RO8+g3X(aLE9C#QsU*0$!nD@!}q)-iH!F@sC=F z5ASpCdH_HJ+=e%~~t)=)EZx6Eb6bRgGfA-+v z8?nwyEf!Ig^hM?up&SOLT93_b$d9baWDbm}8P4A1C&%QzUA=Xc>FrYbNOdqCR@Re8 zHh(WD2s<|Dnah&~7~}t;KlKx+ho0_yq%*8y6;xc2a6He3WJs>U>-_S;X8Zq$@gn(BNUTk=iF#(n)J8t z+m&%6v#-)9lL`!_^h2ZCtVqWsP7QAtvcn`OE9JWv(^{oKibzMLLwI)9zyiFnL87ob zDFW-S%AfS^^lS_57f)QUX5;gFne^*g?rQg)iX(;njzDu$3)<;rayoAxI(@ihmPR?E zZaI-h4WE4_PqvWl!rzGuk}MjaEklIs%m%spQOG-fOt5~HC>fPY;wp|dh=3B4z$0EGF&(AU_JhWC|PaE`TkFL_bV zOr!6%-;?#k+ZH+(KyIc6=5#b`xXrzc3QTgxaqIf1y4J*G_XVg4?-_z{89joTu;($7 zVQvO%U>*kd_n*e=_HREXf>^JLk%Ihu%b-OS5)^W;J7O8)PH1}}b4Y!!`&97158sHJ zvz_tr1JvJNr>K$>psozok;`GA#`B^oY~JST{RT6p<^Lzmp!|*qB5$oTYj*fQE|E_N zh`;~MHZ$Y6*U%oFy{RiYJfTpMGXyRe!-nYd-WV_-@l`dlHGBVkAZb*}GgA}FX}-d4 zZ`o?3LtIW`wI3s~_*P&x%y$vBe|;n5?E8#)RBNbrBGGWN(Csl~|3um)B9|iFK}eIV z6lW8$*to@K(O!1fxtNMGH@ZdlsVZ;EWM7iN@2luEkQUy$n3t@macIRoe+#m%MXY^} zjQ8VrSAWHAU6O-V82V~Fr}7dLdea&vP3-9^rNtBE$oc8E6y`agWSk=vwX85J9|sy3 zQP0_u0cs=}q3+Mut|2V9dlPg`6f4MU=0sNwJ74m=TJYn{aGB0)_QDF;@ETf#i~?5H zv$rCjL5-b?pf1ALM}bt%2+X^lZ$lW7)6=JWpitR7QO#W?u5yM`aFtNo#KJwyZb)#b4t=lFE{DIe6T4nXLqXY%mr-?%%?Fj&|oeJMb3A;s@ zyyJS$25-cG%fFT?vsjwqTnJV#DQeNVOf!4fFyJ~shZuG(EiAPva)DjLjn&1` zIMfe+{Rkpg=kO9gT_I~x5C=AAswTRJVX`dexkqY=+kh5kpMa}0$>4#cN$>snvDaQ) z`svc{(5!SDW zp-g)rxmA zxjUBXkCwqC`T`0C;<8S7yeh1eVOl{6>5Jw@lLhF3om=*<(#8x4{P0w&QVW*7bIIS7 z4V)falfV3ZHJKN$-K_U_lFzS~Lm?8flSWXM4WjUOYDS#Q{6{4G&+B&OMBF7Z4c z2^i_cZg2R|0CD9Xf`^=WK3%Eiz}f@ud4(WA>OB5OXUD&rnEhwE6rim$IAi?Z-3-l( z_8Z`$85ddQwV0~{F8AK4v^MSgeRI>t+k|7@f>PYakDJ&kR3Wa={{4@^I62KvjrZNG z3qW-=uWu>R)V5Pz+-3Fk4c6L*Lwbz4b35htOr8~*TJ7JiydzJqyGEAaV@KKjAc@zO zyb_%lL>h=y2+XzrB7giB0L1aX9U`=73{RrIn0qCM>p-jnNsQMCOxn$Dw!T|?_`7$= z%>Vow+1;W*V5MmruR$)d+$Huc&pH}?#R zOdOK~pJ3n;-rapvgEBt>FQ&l&NeP{&R3X**uLbDP$2n%pMU{!pjixc%EgC8Sf&A8(Pz-c4KUEBku0V_rD5 zBtZ0on+Ys?M0<1UT+F{5GM|4mO#k_C&EoaWR=ZJ%?l6Z;3nUSvKVb(JQn5aq-=T3& z-uQx>FJ1felkL28JD42999vu<7#4VFh0lj)x!uB&oaAw8_OZ!N$NZ`c zi{EL-w9x>3nc+=+-zx20ABOFbI~;_>dgn)Er8~+6iByyn5OoVjc3jI;o)#mS z01HA4Vu&q;3)8G%<8uba>zY?(imK>#EG2Gq=Ok<1z!*Tc#oU&Z2Q9HN$UK2ydW)aNQEi zH6MTh-gp`;%Clc%BgLJf>e!S}>$aIJ_uGS~|MWZr*L>Jzob*MnOsAj;F4vVFLx$Q5 z8-CwnvAm#%%ar}EN^$&C#dm6B>M#phKXI(}t%!YGbdKSHE6i#6F|CfC5%)UA{~gU7b+7R^r}q`O;qx zEP<>d+i5yPRZg9ieoelLLDdbiZZv!?FW3r= z9dGrmO_73V(?qU_*jGf(uT|$ddzZx61K8ygSoUZ@?A=OpX_pFijRcq{$PFM9lU2zr zaRL&jxN2$om_)1Jv4US{!++hP%-^1#bT}winNPe_g?q3s4nr3q5`+b}-WfDb?@!#{ zlyt)AP^s%-4UJA82R0#>)O;o$I@WKUv+IMzKtO$-Ek`>aD(-1K9U*(zxYR>ql0L>A z9prj(Op|uuXHxx3W3Fc8k#P<&t*iYX*bA|a-%XceqLZ?3c{r#eWTNaczPOr$osfn< zMxh%i{3*qY}zA2uix)1%v^{u zy`hA0XC|UdeWmOA2eAul_i|AA^QTBZ=9zyBoQDZc5{8lmb4Vh`AP$6*2{3b{ox`8b zVvtZK5Wik|Dg~LWPet}PBy@_541M!O?Y>7%TwLnLzZ6tepTQGnV43=$_|t_=447_k zI^d!^+40SrU#^Uu#5%G|OxsR%VwAK$08so1)1AP}s~R)e)g@_6{^0gr9wg9;#wD3k zvhcP2nJ>*!brk5XXY_Wjbg;SnWfzM7>0QnTT#e-QW-R0DYZ zM9}d4@XteWn%a)e0q?Iau6^bOb@>=^cxYdw&ou=^cy67Z>qoI6Zrq9{Ir?LgX+eC0 zU^Lx%j~`+CPsnVdI!N0k z_^&tgnwXxNo_9=sadjqaW412URM~6ZtMqM|yZy-?ovxH%Ne%;-_}`K9;xp`yXNR6w zDU)N8qB>89N9?TKcOYJn?Qc&Wf|%XH9<3h>OYBHA1&U*uNn2_vc9Ri#&N8;aAjwb- zs+W%;4Gr$OZ-RBS)n-D|2cyc(>$O819-bCU)y0Ii$%mW$E^l=p@YBf>kL{bsT{g(3 z;7hK^-@DRIt<0TMV0RH$ZBtD6HAY1Ev4q4Sb)p5o!U+oSNhg?LzkVJ;1u*j9gSK~i zH0GYY7-9v@&`z)WMYyFD$RK+$^LN_%QdeE}#7&lfch(ml#qEZByqDdV1jRnj5Ra!T zN^8UVh)B{ti>lK{scV+A#;<<6I@*)xa0hL;=G*{e^F25mD*NpIT`dW+ z1))iu(EPj&A8<(O0uUQwvJOk5AHWUi;Pf6yVR35Z%vQV|n}l|J`9&SI;+VsQ>SVikRmG6=!)E_IKZJFkAh%YKEauu7tWM9ZhkNMm#OB-v(BYokS=;$?j=vHfczT09{>Ei8J;$-Jrhfhw^3Zv) z{dP9vR_PCg6ZG6Kd=kaJfBDA?AAX%sjpPRD}ssn8eooBy?2`?yuT6LeAp$a9@LPu2X;xb4ZX= zZNjc4zB`ulBU6UwRq8&7%y69xA&2v(0_BGa5Pza-BjsahHtXMGoj+-4zEDP!rdh9C|Fg+OjQG2wCSiEu@Q2vYB$8elNU900Q7r4uTeTDp( zf_jc0<0<~OY>N^h>IbU#HzTf2f1@nofO@;Gk^Q0)!(Fl_ZvDEWF=6bQ)(8P;1VM^r zW*&@7(WUw3`ATo9#&y0AmUti zAf3avX_tH+{;aq(Cu9S9xmgmjS<%GeVx;;)h1d$`U5?kXb0_7p!4=p|X8MHmzs$TF zq0T-}yt!H+qZbqfwY+W=?(?IHXV#A+LLF?Q3S?#{5WLm3)61rL*56gKq~28U)a@zJ z)#<~m|MG2c-08&Lyl2M=>RBehA{x=LFzn(--$W_V;N6oQD*VBh_~8~TkG$bv{8(Lu zFY9&`zWQ08h`Jw-eQ|bVPU#W=fR@;QN(uu4_Nw`Am_80cdar^$O!VS*C&gWFeE}!F zM_3%3wLYoRm&_+62*c|3_6qZ6_8m(|tz;b7jl zZ_p5x5G$tNf{DCYRG@zemDNpL%8%LsE;`=5MVBNRk`{lKBnKDpiF&th9DC&en76Lz}(I=rAw zfw7RvCku5@?@2jZSDkopTo@KxBeh}+C7;dUP71dcalSDfUjl9ni*2z(5!7|ca)iqc{|3qCYz8Cy;F|^7 zoq4{2=5I7!4h9!`P zh*l|MxLC2!U8YM8pH;~G3_jp-9*PbO^lqjpa@sbwRndS#cx^2az{_rJ5;jm-_BJ+Z zAq%)uDMoW|yk6&Ol|P>7{fXlsbylE2QII>q*9;iAYY0&QK~MbW5|0SqkbOiZ3Ubn+#CY z@ZTV-FlK`i8~kH23dPW85V!Xa(#{9%bo8XG+SyhgUhF2H(geTUuh=%2{V>xf4kp5r zO**+aznZzcdTSOOozQioz|+O*IrY1D-Aqaybr0LF+n1sZM?bwIujYF4bhT;|M>KAV zb{~+SaF^;R?iXx2RNTwb>S2AAO_;0lOgLI9rlX&0apg-LP?ofATEV+36sA4vF^Y`< z;XPiGvXRj@Yp6ZWM)h4@(V2d{O*3v!-wp)6J<-8czf65~x0k$28>55ngVCcJNV+3U zUeg!XCoW`E^Vcv1W`g~7KX%sQKPj1{xnBK-)6jKqK7;gMg<{dho<*OFkNwlKgklBL z_SbBEKJ#t5h%6~b&`&ArHm4I{tY?! zpMEG0ahr= znG9%lUB!O;-JJ9XN>+GGswslJcqCGc1I<#HNZtveI@}#k=KY{-nfpB}+90H$DpcC) z;qUge1_j2Yvwo*3oNV^3do;TK5HW`4F2cKd%xvnu(S$66<4hCBg0<3!y9%pjt(^iFM0&2Q-Mk?K+BX#Z>{R}FK z>s#P`iLc=HZ7Q(~M!OBD-uj1F^d_x-dCNp@j+yT^o%~{I;;pr=C)G*Y^D(0|IR{6* zyvTZaqEO(G|8E!WaUaYbZWpsxDDLb{^)J-nlgo=VH$^lEov~3`Wu;XIr@z-|>Md!R zYw7pmmEiXjCQs;z_*gt^ZBNugyM25Mfv7eQzY-j93964*E-G^fasoBYN9}JeuRU`< zE;J2i0@j;y>AhGaD(8edqRVC}l-3S-_vn~=cu4Y~57*@h>K$C#t{KNsPtZj}5bVjK z(;dEkU}xgWN;hb`rrNze#mhJ4@;DiELa1;Yko*aH;(gZHaLKhqvsT31>vq~}^R*Aj zaRDJFCr5q3JvRxdGsFSkNc-sC04@Q~ZA|@}J5ca1wvoL85*L1+M!?IaH^|VH>y;_R zv6=NJGZSt8?}?NQt0Ic@d$Hu`UhSssDS~QzyjK726w67B^!XBf_3_KZG=ei3%I){sBy z<7D30KXxyD^{;(PZ_kOFdaTyhdFMr_Lg^0QFBJ*L!S2SKs zs^-Dqkt7fmg9JvWEGrc8mO9qMnm~Lr$mE@E_Xi?HD^gA8m*f`Y(qG>gWT9|en8gY0 z9Q7_Fu0mxey@4B+h6^i!dRuZl8IrkgzkaEkjGe9WEskn*yIb+=M)GdsW?7o8qe;E; zzq(!VXNi7t3?JE%Qj#Qy2+b`lxaQtQlupWuBXU~((r@HH=vuJn=C9drK4w^@66zPS ztL3j;$rdg~U}uO$Qb%x_$};SejD*$=ryPvM{^$L6>B}HzxSu6zeJ~kmEpJ+1*n?NG zbK_#m%gEuZOV@ZDOBOSY_)u9Tdq@PUm7($;sCr$TCR+U4_B0rA%V(&LaZgCb8ta^b z{)n&S=dT~Ga}6CMO&@=94Os3S255h1PBFFbdvagJOs>t$D}&NXYjlUEpIRa+QZ%j8 z=71>X1j}L#o_#9qYJS5OjLp=kp!UWHPmqD21)pHGLTJ1KSu6~x?&5#6NaG6_Zpy=uYHA+D zEdJ<^z-0YwG?45|WC1EZt&r4L~$DUHG(BeA)be)W5g3uKaUJ5W?Xv=@S$IS>lsKXT-@Hf= zfMUiNfu~2Osxhfa^q*imx8jBdb=FH7IXeYUsw$o0Ks~NwwUfyyR0&Hq^Zij;@9I%J zdJ{sv=%JUb*dp}DlDBaGv`5^PxxBH8*gj#S&@6)90|UPC6^3hc?vZpAzB{DvI3k27 z-BlHp_)HEt&S9oRu30ACbeE2C*nGaF8LO?Xw~TO_S5YjWXnS$>GJ~IqIp--}qYa4HNbN_zYGBc-s2z!Pq|fE-y@nwHKe=BATj1s4IN~DEzdB$5Bd; z$!!QN-WFoF^0e+tJrTKWV82@85AeA2VZAnRNztb2=#ldUsq1CaKxm;M0o3x5u`67h zb;(SN8q=EMmYlr(Gmlb_bj7-lw0K}; zX0E|mhoa9$86iIHjR-OGQDX>uKI5}@qUk2UIsocZMSb9yEA8D7R|jBwKawsEo(RRO zsiOhR9gj#I)XI2u2_$XMpI)>={-fJd1uFNEdrz-@y~3ua2z^8_vkFHV|Kc`6NxtpI zcvG`#3Q-x|y&67Jy{~V7++Y*=78AZRZz~pm48G?|NmPHnyO!&ZSUO(%vA15hFWwDt zV;{)1^jJJB)L`j}2cJ{xw7=o;#q10AR{q4Zf%p;tx8?zOX8C{3uVh?wlYaHy$Bdcu z?>FXt^xCsgTijqAHg%vuL)Pt9$@U(Ib6;v8%t9%@ggDQN$Qc*su^xs&$+9m#XSCwYiKZrA1lxc^@TqStbdqxvuKU0RsiGRK6@8g9)j*ai!OLuGJk`93^_4H^ z;U${X|CTdR=BOAthtABUSC992h|$eu3d;^d#uWXy7Nbl&9~V!okZ63ub@g5yYZ%|E zC9!9Jy}d-En=B#<=fqNgA#7o-ld~x6=}*p~8cmVM&~5>P;uSALrq01AuIuk({5KU7 z8A)XWCGJbGrimd@+CdzmWRDO_r_b{**Q&}|nX#QpwLkt{^1QRZc)y>>eJ$ti8PUU{ zFU5~@_wFU<5;|K9+7BNyt{TVkT3U-S>{ZFtvOEgAfX*~(o6&5)j&C{V8{EtzNMtuM zf{PG;#d7xKA}|p(sN2;AiR5YIYr?1P&M8Hw&UWJD)?UX)y5Nn(Fr$HwRy)p0;RRfM zI%VdfrIU-Z7A@Mh$GC(zfZVF&~c`Yeg~<;lNHjTR9fcj3u-p_x<*t9?$hZ8d4%0+V5^nCq+<*&@FTN(c7m)u9D}98yV_zjeRw2 zc3z~e-MW+?-gl8N;A$;*Ei{b<7$mMXKobyP_8}nI*#nHSFx5oD$7Hs-qt1ZCTuQUl zyq8Wok)R_x8l_v!bx&-A!Za5GR$oKNcXpgsTpyiYw1v^?4&5lx} z2I%l-c&Kw1$24dx_==?l22t!lOCT(R4h;cjS6K0MKGq98gb&E*#o_pHpHLGOD2=!G zF(j6vKeW2GMuq1S;V4M%*P6LYAI}DUZCUjxbN<~c@!s9m!Y8mXeD<5I!{F*8vu)`w zHeZVi^pw3QK*Bw$uMllP|NMSi$MZj0PXzFLc(uzgd$NKinHaVJ-w9%2exKtpr7X+F z)|Q_s9VWqjOWXlc3k!bk87Zh|_4%8MY;*m-AnO}U9awllMcducEt7s#8*ja;%)u5I zhgAJBkf3@Ctb{5-YRojpmG#&OM(~ zzsnJlvlppf{YM4zVQ^~K@@f3u(vDrrAX213ROeQQjy?WYfwDhG!h%$(-~Kz13I0Q+ z9&q^_bSYqwv+!Nux$k*ElRM4m$L$HkUrPLpzsXP#0ryDnZ`ADu&l2q~2Sm5Mp@MeU zad{(~17U+(>zkF1uDD-$Ct8B}v9G?D&)|1jpF1F03!Oe6)%j^I2K~$E2J3p3pZe#G zprJkWNzUI0;W2Oc-JO&Eb25xw`et6PW#0~l5Ase8g+_|`+shG274#fyR)W&p??+b& z`SAFtixh%>lsInkcerW*vN+gc_Bq3=i19@Joo6ZkRX-5_m-5L=q7*r;hC+u%;&EeZ}ya#;0dH=OQwKd3rfIbQLB=->fok^11~tPk`j(GqhhrNTw*(OB5qVk z+6e@YB%L!mjF8_)W(hNERsI%pH<=N z?rOxvz>1R~lT_q#11uido1@XO4hG%DlUb&+tfky{JM@m*^WjlAgB`yLeCX%R>lP!d zJd8SYt}HB)&o|JR?8<7jI$3JckPN!s*C)MU^vq0K@v#J+@xb@#PIR40s8fbo>z9^q57#*}fxW0eq5#wy#My>ncWm*e) z1!PfO=w2^(*5)rqojY|j|54OAl*7iL>vkeWdjX1wJV3Dev-T(v@IgEZ21xziBtR}< z@E4?!4j-MPX6~+N;q^8Jn=`+9#H;WHnGq8;XQ}p0uV|kECk02f3&SCRP>t3QOWRP| z#J)|^tS3|#A-J#s05Oj>A$-W=bWzOp9fe23i*DBVJIllU4Zd)Vc;5---UT4Z2GtsE z5KcmpqR#sagJIgab_li1UBH(MUomdvV*V7PrDM?W0&cb6MZ|Ml*~9ZY3deQ1A7O_z zPHX;S@=~pj8q0;VAvs*b$O7Wo->kpw&3N`mIZswYkGrZrYI=mfS#?b4K6$=*7fh(I z!QI3#E^mQJ?)0}J-P}NQqqea&h$%NTD;bO)!|MG<<#a&k2ADeX?hz2ibKB?!#+{!k zgQC6M#&Qv?pxf47z&QaMJDRl@Pw-6s%zGx)tG^_N(RJ%l(Kc?}rpJb&r?tcj!t3!v zV7S~jfykRwsiU6Hv8(}u0mncNpJ5)fkR^-EMN2G(wq{`FCbQF+OjqF_F2$5-7fPo@ z0=Zmxc&ZC2i~4J67{A(qewv$EqiZjdo8$+3n{@_$32sKQ$3`_2$l~pvGu0!3$DrqQ zi^v|76ku}_1`|h{RPm3#=Jm4>G>~-k_;WV()C_mSf_#Il*fj}37Nn{n413xUie)7$ zta;ww8N%aAZ5j%v0i0Za{+pH*aulN%1GU_T^nyr%LKPPr?9D(8{@enwGLi{y7-?raX{om#L*QJh~-`UDxVkN4$dN^-I z+kQNi4doQyzO(!d@~BoMc-)!s@_z&WU@J;9{2u>aKut8gz~nCy*9H@EnY}|mZ|E09 zXb(cz{61^Uo&qn~H8yOOVxCHzbHGC@CPg_MbWWC)_{sALD<1n=P4%c>c<`Pm7Ux$KS!a zsjQCDaSQmXr#hu)0})^@u`0`}xsh&f_~`zEB*tB_MX?bvug~C~8y_QN`(3hHMQN2( z+eI^1__BFo%L@aIQ`}}*^1i0C(xSnSx>fIfx}WCBjj^N0`*S~p?>DpeeQ4cvL<8F> zX?_bunc29!=_dTlI|WS+s2GtA*#@?Ptj$oSj`D0uS$f{*IFq65T$J~sRK@zXX2=I8 zJJs3c5fdSo*bpXhvs*P>r)Re!hNhCdtEu_a8kwU`U%%yG;>FafvAD9w(43Y4N^-Yx znjrIX1*U#9k+|%fe=p(WIJO-wchsAHU1fm;3`NgSyK;J}HJ+LL^-$%zai&@eiXZoi zhW0e!SH3FIt7B@A6nmTPh23X5 zdx3b#0X_pwjwIbU#u*`ftK%j;I`gR*tPqMa8SCiH`ku)zwzEdXnc=6m@ghqJMe>io1 z8#cz)!1(?xG_UayyJff`xksZ#;5c*hVc#Zd^`gj?nPy~EP$I$(=%Mta9LurPTPtkTEnBDX!0gmj{tJCL z&d2ITLTJ_B)>#`H$ZV@ZRddc|EHN8)->hCdiN`lSP-t$>_g3d2Y{}_Tu!|)xzTKZa zwnq_0@FJZ(z~u;GdvxmLSS5c!;kJeSrMhj*(vN~odyij&{nP>&#!Az1o)b;!kNDOT zoO?xjZh)~bZrVya!`1>Fg6TVao#hu$g$)@(mR?DHM_v>_hkL?F6Q$3szIiM_D5JYe zI6*WnFQ__1lsF=FxIQPUdr=u@BcCCp+sk^c#OCuv#T}*oN3htrKJ&mQ?~9Fk~o$Y9YCeRz%Ev+v}`2bg@_g0Zy zT!HZY@9V+G@wrZUuhEAcNZxJJx930VH#(es6)#mAEegP^{Y;{CgFQPvo5N)rx((Ew zV^Hp(%m}j>RH_MYSQtGf@8y5M{*2LB)%3D}51WgV0{3b+SXz~$Idh3M3_->T9 z952aveIMn3@JDVYMyIZ#C$8o+<||6%easwfXL+kr1%`AT+#7Ve6VS{ZQhlZpI^^mT z)q_#y6uS)4SlwIyRONQIGd8rVNss3em+R`=!MoO>-aW=-MkE$L7hx|{)6qjfc9uLD zk23z2su?wX4`vsoZ1w3cvghqIlqOqj@Fcz4Lr3QZsXMSvZ6H^hbpkKUh5E2WDF@r!0@iOPI$8c$O=@QvpP%GK$xc{~t2ISai>nIg zA`;#g_zvW<<7-;;b>59^6d?`@3;RRP!sY6hwW4BfFkBR4T&S~!U6;| zDaZEL20R4B!8k)-uO^H%CzDw7c>b6a3UTBCvUtw*dNWr_^ePIMJQcUUCv!ANH7}V( zHPP(6+Md>*j$@4-83;p>VUZl=`Uoh3a$GoS8eDbE30?7xZ|i!t#zYMgd|R3-RT40h z@_^d#vi1w(#Ov1S-XAf?$m-AN1F{@{dR{I`z`|vo8E~-DYWYEz95B#hJK8yAP#H4a zsugDgG!2kUnj%@aYlprvDS9)y(#0#fz~h!x(yj$6e6@_?9k<5!cE*s8=t^6vTjl7< z0mIiu>=qN2pqgeo$CD3PZdQws01DQ=)8CcMw1d;CPoxYvCl&qF58-R5VLo_fbl--? zR1vT`;jenfuZeAkU)nxL{(pvHF!J?mu=g&(Pi82vTfV8 zZQIDQZQHi1a?ZJ*@A>APnfp(!mAUfgzV?nCS43=AW)H>#vm8cyqcAClp^(0(GE$=V9rrb=%Ey&x-0c>~vo0~RXjN6I^lM|k0$DHL;-^uyBIK$#sN5%)L zZgWZe+Xly@p!~vE)cP+IcssO3Qgh;!?{-`aGcWsWZSCc9ik0w$LD}oUjhEt~l%+n6 z?a^jI*awjF9*o&~F4a=Fk6Ug^z?RP!hL!gQJD})*vJ0<0x9!>H{m}NHCj@{&imSJm z(`-Lcvh4+786YQAAtDz++^{-lx4t8^3iV}x>m}d|yoRU(Hf0~)((kEF`Wi<9zJTsN z&w6v;>;05(dSq|0i#8+D@O&nK+-b9UrWrrZxU1f@h z5WoL#jy$_SH@I6AR^Ty@lvkJ0MA=Dd;Zk|>E%ekE>)D_?*5@-?sShDxv8T=%*^$EV zXyT`<<}w>Rlo%v$3~k-s%yl=pTE4N*=zy?cvEwAkoe?I6nYI!Xk0t6c1t8KjBp0LM`_B)@m(%{wD91d^-ra>5|b=MtC) zxBWuTXgZhR7JdVzqXMfxO|+EU6La+vhwyhT({o+Yyvec z!YBF_@Wtb6x?ED|Pv*ZiZYst7a%`TZdQY%L$}tm1vJb&g;&|7E>@x_`jFHl5W*hZV zcw{(8+&F~T*RO4Ua3B~12SF$r%SJ@~7Iwes9K!>{7LSY6IX8uRsJ@2A`HRtPBc`}l zq<>vK?F3XIFbMk!p@Zkfu^oJ*qSU8zYNOn2r+bP_QmJL8V?=bj52l8iTs%VNBju`s z4!b@5a}#ztc(Q1mCz|~JC=Gvs(U)_&n+|87U`e2=k;oe1$(zpb74yB^Izd{jlK!b& za+9k)(*mNEq~;ji8Wk^aXZw6{qxogyd$-3s*A`L4D^||Kv6X+v`cUHVG=bwZ)OA-; zEj_p^mR66lv~!*6n^P%R_Y;uCwg|M(VU4ZGf7RPe^Lwvc27k1jx(61I8+{9$ByC)a zAZ{>|5&bk@h+BtZqg1|Z3^w|MQ}u-BXZk@cxnPG2^yFp1_yjRv0R0c|XeJ5rzn7q- z5fo@dPTG>*w+rG~xkkgmJ^GFocDlV_9hF*12#FwlUBCl#^HXbXSj*#90=Ma6Ss!+WZIQ)QRuJF|m*fwVMP!6#|Cm7EsL`ncgdHtyC_<* z%$^`h>L%9l5q+{a+5Iw}^Zw@Y+=5rB2YvHse+x(l~RxC{HZq?a}_XgH{O)Gj_7_8d;6 zd$d~gkr?-$xN7cY6?P1D;@MS&l($%$Yk)_<{9AZ)0E@fw zTJvDg9iX(UsVa~iwh`!WAUhcy%KFEHd+(f&#!+brNhcbk_#Hl}Kuidlg*k~ueKx6R z&5@YH=o>7riXPQLDCV<#g72W|$=2$-hXWup$9^JvNH^)xxs|xVe(}T>@y+SF+(YZ> zJVMA2xpl)q&UIE=T{nl^7@sPwMCkfqdptl5qMQp`mI#u7CfU4}^$*%$2f@W&nN|E+ z=zS-D+);RL#SgL?0)BCKz9pT#5@%)sqt$YHzdr?fJ|90vs0vgS8o zEp$$6lyMYd58+X?GkB_}P?J48CCK=HQ^nVeN4QKOA&d(OlkEfgd*vlA{R5|JJdWXh{W|amX6X;0N}>6n*LeGFY;lXFkVORYL)l;UL2kpostXF*ma>sl&$*I_+&iu6Ta^Y z!2y2#+r=;?u3P270W%pk^H^zY$ea&4$?C+gs?a|}^p?gI6VthS6b-b?olmY*@ss9d za&vC;FP{}9xT;PKOW-^Bfkb@n`&x@v(TC0@@%KDL+9ll>YhOQq<82HuZ&kV<{5>xk zbI!s{s%SvN)$9%^+0i;SuKZDoJy;}y|76w~7lYSpEb<&5nN{o6z;ql|7}!!_&9hekv-9EA3{U-LnG+|)gWoX~sKDW_$Yrta!dq=TBfwMxe&??4FvG+X&yY`D0AT9o?Mn z%&`Z%bTz6DO`pIb7MY`xB-UdLUZ}=*d^MrtuAi7_<-?El%h+Hnc|+h?IJ{&3SL>(G z4F6Q?>4Sf6?9H=;=k@1FS2Rn|O&XZkILCp)>Y~F!b4ct?f8nMmh3iZJOZQ9O-ZSt< z$()MM1X9`6>t9H7<2VJ=vKuM7Y(fg%eDHTm87ILRBP4uf zE0d1{nbG2;pEI7yOoBrg4N|36LE9(EwX0I?~XT1cIJb{ltrzA8p1z^ zO58AWzOKupuuG`2jgIP>B#QTRYp}F5{FrteDrE)@*4?{^x6J$kFyV++)NI;rbE#8kCf32_BUP6xl;B-qC0Pow%ew|Cu&gV$#Owsj* z*tKKjzX`(7HF~zM_Zg4g8_hc!_uMuDKK8~VK>{44H`lJB*g9uS}V4L0Ru zAGt2a_N!1!F(B-6$>9vficb+O^+>D3$6Kn!&x>3DsMSnz0CO+5Zqg06bN(lrEcJNi zd%sm4o~zpv7I+-C(P@lm-Y_go|24G_ca?xA{GWFakj;N;z2@JlC;eZa_c_@JY5bqd zH=8@Ujo|DuHI#0RGkqj7Z_!m;I4=pv^GdBawhk*Tf+OCt`{tXpw5;d(-<+{6*Qdu8 zmEO($7{6p$lBc5OSli{*Np zyLze%%m1oTDbnK{N1BeoWG>&aGtm!TV)1p)#UueqV$ZvnuhT@O{m%nX@_$%jn{0Ip zNiNpO=}#uLQ*q8t_f7OTkS<0@oSU#eDY2l*Ku5TdL1e2{o7?!~Q#Pe8myZd0>oM%y z2|6J>Q)y8JaF$fcO!~Yy^IzHn-{(s&KK3k)-AH1r^fnL}B=7AXVz#*f=5gq%M}n0N zCs)mvYzEUp!f`BORx3jiBsh}g~w#}y*~P2>gO zsGs&6TOmt$YfPs1oAmp+^+)`+E5jVYuixKw5PMu8m;aNJ&HAruEbo64_82nZC11OO zh51K353*I&i%m7_VfA@GyebERR0gzQj+mJdxHVS$so%0BPMgIy)4Mu3I$GfleC$gO zvW;s23dcOS=nTrJ@6Bvf=DFHK$mWte#3frX$rl@j8(+{!_D3x#4q=;3?W#S=@Shsu z{bRQDOlGu^^(Gfl6w6xArctq)9wpEqlaYOvH>Mt9HzHb7X;EP4*wPWq< zh=EazSq$j?(P0wL#XnfCy6Ie!KdN}e%(k={d!kMIIKtil{&raGqV>$3a1;1)LCV81 zLXm9DsQ&;liL%%{0WQA28}@H?lc6J3Z-OrE4~KKz-xksXg!8%)OI}4Gd zay0cwIJ$3PaCApHV`)^j!{XwI(HTj^2i&LPG>R?j=Sc-{uiudlVof6SQA<9=dFnKb z(u%G)4E0yw_!u!M`5x1--|i0&HRSTYKsOSxSf%Lcr5WkAx%fwT^$0_?rhbkV#EM0&2xK_f{RWIM>MIMYFLZ4B!CR zuHf?%gky|YP!{c^{7h9n)!=*qcZguZXeFcAy8VbNKE}2{@E+wul``S{~&jp zf#}cjX}(Usf02722jFUi@?eHPY^ybPlUdob)!RW-0kC~ABlpiQ8Xv8f<+#Cq&)owc zzYVb3lVY_56o>?ro$h$Z&l3~f9nP*F1@akfdeVV25qV-%60}5!F2$L91LRUTJ+yIZWGE=}JJRH*24;fB zs!ES=v!)8qES=p-@NFX$uz3Ehy>kC_^j(x!jI?cc6%^@1LUXD#hD)l}WfL5Z%W=7vX8tH7|pJGBOY6?gc9%~rM zR@Kf)R1QW%Ih4yKVLc000oBLJ_yPivWu_u!8>8t@OvC0ZYHidbBloAlp7%S3gs27+ z6v}w{B_VCbVD{!TRB(v)Gvo#jvg+H4qz2h@!Xl32jgjDPMd6GsvfSo3O|Gykm~>v%H{y25kX!J!I>IF%I+doUNwYt*;(6 zZC-)$nFULIN&P)UwMUO>73ka^3Oj(m_$hf}(({C|dLn*;XJQedMJj^H2X}DKxA@m^ z@-W5pv7H$$a@WdQ)hs&0aJo9+zSY_*0amdTsEaR6%nJ9rJf?M1xn2ce=&9U!#YX## zkp@hNL&XMiL@k2*r?Q;

    ?&G)I9zCgeqz1oO-f8!of4_ryenb!bWS`mPr^U9E+a zF&;_}Y*IgzV;$yv1s#p&k=c73Hw}zyh0*Ri)h!wx+0PCJlW3YNP}9pzl`$N1Ls~!}V%xgGktr;<o3-G^ejLzX-5!*#x-D`Ql zjJzoQY_HimmbamROmKq0`;6^Hc>vULTq+F5*L1{IPv-Ic*9o_GuKmpU3>VYWE8n9S zeXpKR`MYz+TQZOuV*FZHK9^35Q7z{xEsD*7%$;bs0-`yf(;MCM^nVhVKtSOBY32k! zQ2wd$00=gPGOORIG{zXbm&F#pLYkO1@v0m40*wCvNu? zh&DW9y~UYzHKqNT>*m`{mdJOtbKx+AYTT;eodLY1wJ((nQo3KTZEECNyl$qEdrQO? zQFz%9VH1maTn|)KNz%FulPAK`bPK_!oF7f)T07Cyrsti_xE}k_kqm?^^~PyxALxGz zlPeqE7(T4b=F7@sd30hZl$A5(oRwl&EsmT<{d%H$_N1B=aBZ&MA zw)vj)bh=?=!G)Fbmqt4!5-(LO4Hn~jgJRO;|$c)U(ANfs7DYFt<|)Nyvgv34mYjgGe4p54cg+J*;;yzyK1Jc zFV#{#?0;=qgj@T^@d}cEr4E#g%iZUfzox<<$E%%@nS{GW1uA@|xDU**OBruXXr|Db zVrtbxVaPhx2g-C0bh(@hq#$X`!mo=H?jPB{+wyh27ejNloU-UAHl>mIqP1L2%pV;o! zr68(mGzxC!vp;0<8!-uc6pey~w;O}0CR}L2juukA?`gP3iX1+Jsj|D2R|B~;>A481 z>-@@R`oTN57Aw%pjD`;!Wh3B^Er=myrwO;QzzsXZ)jmOmL|YIY+>W((_+@=GX2n+h z_qnTcg*3{@+F`q!}hZ&x=yd-oImcEf#TX<#6J z;PBsbaS@%_!aKxIF4$LmdK^_>{LdyrggE2=)Q`o&hB zm$pi({4>7EQh56BKp&jA4c{9>+J_y3g-gvd_W8_j$N)%RN#p4Z@$n1aHS6$`)(9qV3W>s4k;qE%ayHPLt zIQ;W?+V^Dnj6;slG5#!0ceGd=-@2(}m&Vijx@(s_>d{n0sncV_m&MuB{@z$gJ2a58t;g+WC&OJi1 zP)1+S?F@5WetnUO<_E;A8^SAbs+^$gF&jtqtSLK(8%-UzN8o(6Ek>2Lag1ifxHBk1*ax$uEB!xi*;qKEq+I!_Ww(RT# zHFJd&wGQQLD#J{#fKDQ{bE`CLDY<97$WghJRced?l+*HRTYy&r=(}X`D2|&hQYQ`& zErt}xFg`y~%szL(Ah{>zxG^Esv5k684aeQ^wk=}yyH+f~Hcen+{VLwJM77vPR!3cI ztlEr_EvG}FYiZdF?OB&x@rT&OoA5gFc!m%4P_+kV{E=SOJBs>M6vBtf)<~>Pn{)k{ zX*5%8rmXUr{An+m%aK}GI5N3CS&3(;5;flV$A!i@=(WA27w)VfBIwCY*@CzETedG( zu(QPNz)j{Sz)RG%2mSGNFSUOgaPxW4r9+XBGsIeRvJZ}yIznJ3MzcBo`&8y5q-S;5 z(_(vN5v1~E2c5ZA&%8VQd*bHcvF9rkf8wVUP;4>jgSdwHY^SRI(bFcwt0-_y(f3qL zq2(dE!kyZ~ZPT~lj}hofLaGI;LKTP+!RLRZzJCADE8UXFOM6MSjJ?_!K zV7xm4uzo#eKb;$PQ=sy)T7ZmrUE`50kxi^M?0mfoM?Cn2E+=N@ZRYT>r_-EjaG4Ua zEE{!&rPHdDbY5Kkf?AUN(;mD(+hMVI8w(pjJG|x=rqejhsUtM4y|9N4gPm}^t$%iTg=XV|&@-53no!HtA z2{g(RH;i#LtqdhGc@#jEZ_Q;`SGG#hsor!sS zwuKF+RF%$~HS(S!-BIl-OXU0`81i>t7|U>%6hWoQdFU-RR3nXp2T#IgGB2nKwzNJ? z;I=KYqwbG|J=7)sr8|1JdQ|In#M|Ix*s}}VWM%kiuExP^j@C#yo?iq^yq~gM+7l5k zS2EE^tr+Uxec8^e{}nj zzYW3jPL|(-2RBdMbceP^a~x5=^CH!Miu&EOX!wx!x^Vx5YtEg>3Ara^4un?0i!GCI zFJxjan&!SV6@1vs2c7+17-1X-VrMJe$M$skUf$ery@|18OnCc(^QB<&-T^flIll3g z5H~%5+n8ZJ| zu_dguoYrUygKD+a$}=X0-ioG&dz_-?59|ds*tbq@kYe?l?zGf>Ac z*`H#{`-jf7pZL0quwAdKsn*PCSRac@BeJE}9EY%D$OV_1>qku~uUhxWi6O?iY+z5w zy`XDUQspMjvuX+H8y1?eGg#!fP9$K~UzNo?cwE+$m!88rLG>1dQ1VA4(Ho%;0JBdd z%HUrRSJ<7#4`Kz^T>+)McaPR_2`kb2(W!ftWa}ezjm|H4?_SV5a4+eA33mZpjTT?P zxA(IQY_ZTvtgi!J^FkKGmT)!viXfae=10?ypM|WU7>dK-^h1yfikBk3eyI{!HYYKA< zpyomeYxea=eT*BS4heKpPv91b=5H=O4D#t2IJntKv=bIBRd*0KZe-@@z)2Dk0&D@YXNxG5KYKL>2_#l-+JQu9Z zdF?k)s#<=n&L8RDUq!MDp=uV4tZ#rF!6{WvUZJc=n|^F{2}UlWYB`Ap|9oeA5%+3m zL^kR;2Gu?3N!EdH898UpiGsV4m_i`ovS+p5?$nbOI|+=~!tY<-cyu_ws<;{Z9DoBd zSmA!J;d|ZuFRDL0WI31L%r+h@mK}^IASD!Z0OZTvV~mHmc9-s{Lw+vcznUGt=)&IF zZi9Ve2X#;KA5E}-?dVuDJOXUV!||7N!aq;R)7doAxa|{*#yd9Xm>sRYaXiC{qT3zOqrnGHzJQX@-FA8rlVeko zTBHlA5TJ7{MIqiTF)o6&ogt)oc4x4Fek+x8;z^nnZrg%}y#dr@>SpisDCxbV`EsMo z@gD%K#an36qO^gy|I8fnIYkqV@6$pX8?{5GnqU&kYoeK6BoMZZX_;fdMqYjrZLt|I zaa_dbM}2NtQrj)14lZV|Uf;XY92JV%j$wb>7K~r|5j5bTfFGeJ6e-)OI6*wTNz%S* zo0T1;aHCg{)@elkpmJB5JLa5_xq@C@(ltNVX%UgyYDv!$t9|Bfj=tkc+Ua$6#mU6F zE{!kD(1P=4ZahIIPxsBGg~F42acRt$?IE4@0a)>gcLS)eTi+7O^LUV?mctQ0FQ%_l zbq62We|RlWwkpAIm3nTR=lzO?~B}i{5jMoUT*+W5rUXQ$c{Tz z)Vm4)p8pdyly8R24?&ysi4akl01ZxhM*Gg4ht-|mJKnEngAD)enxAy$@oR)umIgW9 z^6`9`euQ38~gM4@_!{3)t(|N!%!&v)SdlY;|xfQ{C!YHw#Pi`RF#@ zL|$Z{TSYgglq&GmP7f~{74|6PZW|v;o@^p;s;7wCoBI^!x&&Jh%s8V)sd>&)9x}AY_*3)0~KBgFVP7cmuLPI--W^ptudZ$%n&+T)JI(rwBlZSmH6 z%u^p9JiIgW7bNtwaKqNa`Q-6S%oTAR2e0*yTD8A6>3Ej0(e#M#dGGDK^;0}k*=nDs zKjF>nF(xmlaRabs*U9&KsB5-IC!gLENS>n*#yDBY&Nnim^O%yCW!cx-(@92vr~kp- zT2L-jBi>Z$%!E5CsUN!YR7;{|+Jub>PK*G?z@d8-r-Wv(G)v#98e~$_c%LOQNRK@| z8)X}~L!IgvUtVs>L!~!+KbpZCt5r7hWcM$$hTSgGsoQSWGjGY!9i&S~BVn0Am}3!0 zoHr%Ue^kPIt?90(z-XBUdiz@~HC`e>@iK*3#+j+)qgFhV%DW;aK6(F?6j8|^+2+>T z@!y}>-bnYr!fY$uD7Ja%WbE=Vs}RYAto>7)z4ESlohjU{9EIhA#maagqJ$D8|`alT&-?tC&K-}D0$++<8ph5he;E5zn8gX(J z-45wp30${|1kUa%eDr3w2(X|OBgT_7S=t}AIkV^E5AGYfDG96LKi#=3d@Ot4`MP1U zZ!y7y7b>-G@tXL8i0P9l^o?212dHi5Zu zSSP;x2*k6ti5#Wzx~38=pgbY!hzg}LJJaU4nA`q5gjp#%xpdz`b=4pqI?MEOJ>g;2 z{vx?Fa)2A>6dm<7j)J)w;eo<)tq;U1Y)a@Xfe0VjY& z+`Q(ydat4Yq*T^L#$lmWxeIqF-Hr>43p&(>miLaoO%kPImfaL;Rh@2!-hFDfOYb%X zT8(HevYozCK8X&;xW|+)_uew?-(cX=6T@F-t~+$n#!g|Qgc3|unr!NMB7-ce=i}~p z=Xk4<_>(_~)FOM=BTW@6%hFm~E>9ooa6C}ErPsIHp0k@opa+>ZkBT=?X`|q0fzy{I zGRneG?N!(Ek)quW6fRnX>$8q~mG{T=Aq3+pCYCzvY+23WXFDZeP9>_-Os!mz@FN@I zb;m0@4Xr8)jy2X~%S&s!lbISEH$l{LXx{E_R;`1%J<(Z(=zpb(h2sCH@Ff}uz1Gb- z4=;UeX9i&0U4i7ET(_+EL;t44%ljmC&Jez2 z5U6oF*+aguKnCO_)ymF}z44U&_^0#s=5gnLV%We63IN`)fq)MVjPGpEiSO7P;o-z_ z$B%{f7vI6tJKtQSgvVEJ$etZvZ+4ptCIP3Gf=lN0oc58*h#}t8)GJXWeyct;f{_2F zn`vFwzW%Wd$Q#J{jhJjZxpGNt)9^D34QPsxhZC2`%^rwN0J*R;WaoBlq5FJ-$n}7t zV!0Vk?)WYSF|h6QN7!?`t*|}43#pjr7$@7)e&tL%2=3)RB$hEFjhf9r--%D=s3;s1 z8d;*&!k<1vrocRZlvL-~8To;>L-p;Na%);}y)9$iyAeCrGMjg3UHF`sZI0az?=~0q zUchvPm)g7W2Xd#S2)=6)PYUI9W%RL?O=JCoc96s)#bG~3YSw~!cG<{oIAp9bM``Fo zhgq0cWz|gH6sn(1#rpL&Ok2f+@Cx+gDOvi7#(lT){WVkj3@;prJs3zO zIdd|Afd_%%TV|y3gT~WKZ92*3CIzyh9(d22`R-sBSFumr&G+w+HCccKWoWP7vch9I zd=r~_YeCB&_Ps7tDcaTeX}i()f~hEPA^J;$q=ONrVIweCqwy@wwZyEdfrsJoa?-oqf1Sj3ZH?yJP+oiF zI0`uER=>d*7k7&Hn>Y4uyuWRG3J12H{%^GmUr^(E%k;jasahhSs33ta2{et2flN4A3T0d8UNO>ZFgV@hA4CZ~N}xMZkQ6F#b3Gv8ZIb{?fz+x{4GWSrVZd4PqM9 zH_h$;XZ84DfxUN+=ne^;`GbC2&@t|I)w4N{HK|+Atu`b;>s?LV7@goPu6t>I`zCzc zPqi!_L>vU90aW78*LR|xm)yp~&h7AE927qIYex^)dH)Rj#?Sthq59Pxy5<(nGa1u! zP+!)SDRc@E*?2${Fn*p;@5jxLt(d@zk>r3Bwg&8Tj?O+C|4#ob-qm51+nmedT?yO> zf2~g)E8I?Gm{%N5PiN81n5gNhvMQ@EFc1i~064UY!ZrI}Ov0ULdx{~?<0b-G!M*UY`2Md1%gLvdCFgR;hUoXrC!tsBZdE82Vg160hkl@<1@J1Tb`yaq_$N7zc z2E5w`V|ebveL2F7?v`3r2>>zl7!L^+&{zdE1q!n+%$?O}OOsZHhUzlzxF1XllwyuZ zi?;$p-SX;3Wi2>wm2_gKP!n{ng?8a!clL*}F(kSkJ1fm7DEpF{7-b4aXmBJe)RV#G z^3+5%Qv?pf(geiEmu5haP3_(CCb(TKa@ma|?@csFpIt!VY`r8ksHg%jl1 z^OhLyf6u;R^M;82=w3e;i19ypqLZBnZSbT-Ju4!Y5g9_NXeO_i**=iJP@Uqmn6)#? zC^S8lY7gZ8*gjDVICo1fFZbxn=vl9=_fvpM`P+NWFz-&wMEQ zo!DH3^O5b({`5WyoiDXF+Z-dtGw3X(3lb`9BfY~Qu}hG0x-IvbpKpp;*+G%#As0y1 zQ@Dd#A&p5uou$HTV{NKU+$D<`N`sf9O0iSr54Pcuh2PDirmHX{wl6t&g{FE)bt75+ znsLC1%2Orc?4@pe&30ymtPFS4D{NHSr=WG!J+riYOGm^7Mzz4JYtIkU+-bVd{HPUt zxQg28P6{nEm!lj--jf4$9sA(cd`vTUDl?+}th_=}ZW?^RbInX za=|cZsy(qU_&l%zvC0q$?(HrXQ$(k>kWD5c$Hcmj0?-Zs?Jh|f;tkk3O=5M)b~W*S zLLO(T@y8o-lA_nk-HLkpbJI?#)xoH+SStAGWNqt$t!X-Cwaxg`J68h|)%n8IH>Yeo z1th>-(dyZI51!}Plbqd75PdwZU-n}j^uyM1z;K`_ubu%fGZP!gke0@6>4G%mwDA=s zMox1KRyqP8_Z{L0%Y5g7Fj<))PO8m47|hJx{Ia8^W36!!yC-T0e-m4rN|Or zfM6E}?$^R%q)kt)CIf6NNCuBCZ^C|leY`^vF9HQt->yEbj~*Ch3|p2hty05fmUk{S zDc|syD+BRvJ~=uyD{Fn(Zh?diSFJayIo`DI@A&P-VLl!>KOM9_0ci{VFUljAvF7Af zSoSr!sVHI6tQ+Q$cvoP~cX8}}e8GzV|_1o7?Smf6>MZjnDyw1<|VRSB{VMq6maJuc3swP(q zzZYKm9K8Pb1gXpyUb!gj{&$+?lxbf=w|8QTQXkn7%4+s-UW(f+JzwA>C^n2A@Z!yZ z{VQ`7{`~MeE2=B&Ix*AfsldujktAUrI%~S;K~_QzV)9xSTiFGq7i1a)MCYIO>52~G z7YkRN_!H`1M(_`|^1pBP2@xF0>OE*P8=zvxa0M_8eVxaBP%skmHn??-utqK0$%;)7 z`EU0BT9o!;j^vq6v5%iIzholg)#u7aF490gX`vb42RF)2hj_PdupH6uaXj{~-1^d& znx}h+WZ=6^6naM+pK#<_CO4urwt`BC4>ng4cQDClKa}chs8ma@CPp2~yiQ>UAJJ=t z9kH!$iGN5wl5^|G4%_=?1luRXAhg^C3`dMGM8`WZF*oYp*j7nWb|V;Z+;Ql3kyuAz zn9>IyX#Wi7h~VFxvd0X-wBOR(YfExaY_@Kp>F%MzT(6hKeQ)HbFOA!B*jKr4!%DCB zz_zU>)}R$o&+=%~l2qWQ3GTCP<6NX7f8}x4n%a(*c;8J z)t^qWl}KsnvaU~+**hI__@i$!FoNq!k(_q$heG$Zxd`g=%*(^2yM)Wb}<5 z*S#E^fwel7gV2y=R3T8une)>uCfN$$y3ju)FTZwW08b zNo(V|p1i2o6~s;Vj+hdr2XfS2{`d$K-PJb(P7RZ<(_#xY10f|T_OKzJfpDvtGJ8+- zfDZ$CU2~_Gn%~wbosYhpHEM~vQ~1)kZ{{z-PoWdvAQV_~@^j zgI96e+SDfb2k@ar#z%4K1t6b*a}~g_EcOLcy=dl_$@Xg$MoGJ4qU_4&9yf#RBEmG5Hk>v<^Q?5@h`Fn^Mm>YLP;p&Y2@*gZ<~!k&Qs#PI$pU#^{PU|#En})#FtTl zTs}fLO=82R>ZCU5o;F0QrFFfQI6V7Q`!)#)w$tTKFP7g?? z+;FaHaI))J=vlZa0)NBHvT1NF9tjHA=p|Ma*3F4sY9#)2CZlcDOqR6fDL8r}*x=FF zNsJaB5F%P?@sHwfK?u?bOw1-w(=8lrWW86k8&M+VfK6+$_(|G`ROvbk`dykzYYRJ2 zh#HCLovFP%Sh;4Fm{u!GfR}-x^knP9ZC!i*HHlQ@nlUh|n>6cN+c{+wS8aC{L-1$8ZR^^_R-DhMtbO#9v$^v`-Rpa>A?Eat z-qCs-J%C%(KUZc4)i6zC0%yWW#VZ#aEmS?r3}24c%;6B< z#?iB!QCddDgKPCK6Ac!PC>E_OBo<@Y@+3oQ_oG$PL>N4GYz;_vl#agNH&yA5%9RPr z*wh@(yD^>j6JJBdLuhi^gN7QK(i;|QjhaL{QxL9CY8dp%k2eX+2;*1KP-?bg$+)e6 zFLt(H+2=lsOQaF9A&%)pwPu$ruZNnQZWotb))v1!eVGgPj}#C&2MyiOY~-F)w{Z`% zEQp25wu!v}@D~nO5-^>uyiG|D8d4o>&6p66OYw4#YjKrYGZu` zv?APk@ZZ_yc1QXs`+N)IW5Qnmh4@`SJ^NxC2wHUx9j2;G3a(=y(o+vlrmuHVLePZ* zpF-(f07`bVU*A)PP`1C)h2)g+BtC&RWNdR!JbI@kz784VsWAF^V&uA2BVuUYPedg6 z9zgv2efFM==X`eekK>V6e}XA`kmL!J>|}YRp_?|h2j|~Sj^)kyF&+GQupl6o|LGk6 zI%`3M|NQ<5l7!%sT#a7`jl95ZS>@%6NliS{;YiN(B7`kMlg@D1it2+)1T5i+h!o8C zbBkgt*;LWPM=f_bnJekiY6@K+;LU`K#C>YD?n9X}@G(8o!{lVG**b+K%fG^x8{r&d zHK^+!>j(&s9&Y&&ool(@g+jla0$Vw!zHx)~FjYQ7uZ0Xh%RVRr4{7Tu238~P5aYhlXR&@WiK(?+TqTMp$;oXc35gnN!+Z40t zuXl3rtDH#3pqCCqRU082clQ;P**~k6#qA9&)LzzCZI-UYT9<)Fd!FqxI^Mj6xLgxs zawZWq_sGG9FFw?|Eb&|F&|QB9_sR&?Ok^)1=-~>8Pyab@KKW@c%l&>;t7kj) z80cC1vqNfyjvW^+j5?`xJo_l+xbvd;yR7jgtP74OJ(n<3?(cTn7?3#L^of@MbmWZ# zI6N@@6nJm1?tNl$i9S`@HFW=TV@EJ zGI_zU^Q%w?B(E0}1Oy%=uqLC!vbiek22XQ2$&vhk$SmtO=MAV z>WA>kVzpkDzaw%B6t!{nuh#9caK*z@5RLEPn1<8!B?8V-8+4t~I+n2vCxZ?n*VABm zCoNhleaH_3GD_5`G05|SYu-gCu9hFx;8;^1@Ow|V2crCpE_p{D#-aPxj$J*ia0eUY zanCvyBSbUuN0TSv!94N~%26L_J|}Z&h=8Z#vhv>z+*G;a6NZTwkAG<1B=0!2-|(0L z?0u>psPWd2{68p#hNhm@;+dq7N^k4Y#n>J&$y1*$TpZJAwmqo6ty1Et(S~a0_gcDF z3n@2}tqe(>xSfe&?HKmKj)SHtv|8CBd}GGi)#WGX-#d$cg)p%|BphNoZm$wmy6(#DhA!qqaox9|WJgFv(#^LtLr zR83pG)XZSPiMJi<8tTh@+K%>@xmnU%p*8leF2g05u{W7G54f1ZylHi}CU-CK#%I|%j#s1esvw9;hnZWVNn%aw^Q7;wT2?z&{2PcA^qc%lR?&J7P? zyM7xwzPjD&);KUQrmoqyLY_TrQHXn{^Q1SBLB7Q1=yH|ATP~#UxL+ikcH?9fQweAp zgai8Pad~ZUUxHa0mnNW>gp?g)z=tip@d6Rm_M|=AROGVQC ztqz8x&rRLm&~Me_LEv(+va-4-2hJDW1Am_ z6KHx6x-|?e{7iUneNiWy!s&py4;vz7D9gx`b9sFhlzP0z{u|fx0Ur%1EumM-UH|R+ zr=<4L(PI|57kJ#A)W@~K$Aa?k@JimDGI~49<{Ylc+v*&f=*Gv2QYmm?8rKm*b3o6( zF5CA?U$w_4R+fE>PiFMRJqixCgYIMeC3ya&kU{&&$usNq?G>*@`X;S{F!XwTft9^2 zf*LXJ+&d*~F!#v?lxn7U=M{`G&`bKEGJKOd{U~f{_QsY$eT+xacIP_2C{6F7FgLbLS_T@5phHj6K!drEW+~%bqF|`qEbv(VjDzWrAQ@rJRXU=YlchDEjx>l`TJqh{G;SSnL zf9o|G{iYom;T79bBcNt0Wk83RK+iTMl-62ido;s-YxP1>6r$g5mF*jpw{@x!ksoW^ zUvQy3nmk@bnQBn^FCceG@8R{ ztb2Dt)bcHtvN9o&ykjT2 z=_8bxNN$Oah;M|fM?P8Q%^@;_OWsEHuEH#x+hnNs zX6*qU3|-ABCwBGS>#1!?rxT7E3NIzP$+T79adn!9LS(V-AW`A&>8h1HhaoX-v#YcA z1Y_vxH>&dv6}4E;4EADv|IA>hvz)B^`t-ufNy;Z&ndmTrk1x zHgWx#+Be zH(S@$->3p9m&xka!mRKSe;A=u#`X;t)btqBqki^)n2gP_2W>33mze7z7OQ)6xk zI@BA68L_GOEIbHYNKAYKu*n)angr^DsuTId{O?RO6r*}{2pu2D8Z)chTpW4vRoV8% zv6p`Gw#|4N3bg}!;<=Ct^1^2w)mh{|4?GQDM!RrDXdm&tq`CLp(HFmh@+zu2l^v5H z@;u3ep$+1jRs8t-qebbaPL4g7{OzGG@8-+Y0q)ahRABZ*=VFPtG29x6qbC)(yA}v| zVV0{s*{DfGXJ4WRa%Ym|+ECW%!c2ecWojV+f<^Sc4yd}@*~4Z7a(SEN$^uuvi6Mhl zW@=pEp0F|Bylq#;ZUgX_B`~vH1i!QK!D@9Ao7bAnESW{w(;xM}Amr`!$FuHqu zGgmjiB)aU-x!*YF+x9-^k{LyR#ggwu>+TSR)QP+Be%pKM7RGTD^zhK-Uh`mb6qbDH zDd_KdH=aqo@V54O4O~Wo$Y1?11~x!~`0c>|%dW=!AMC0hBE-LHvob-DX(YN^7-+Nz zWm|F@GS5fk<01V`U*92u(5Fn%MVGPaj3U3*N%yuRfGR3f=lWd1Ikou)IgcD%C7RCh zQ2-3ODND`}VYNZ})f;%NT8J|+<*j0ZtxV%}TJrJZBG9YL-5TdZkult$x2&?A5=99t zh4j&!dAw^n<}gwrb{l8#L96(uvKKjaCn#CX$`yNkvz&9rHv4TgJz7Xjf6jIi+mBQ&!#;}*ExJ{|OSeH}cE$LO zyJ<|ube8UL@FzW|MRncrx|2C2vcMqktzixL``D{8tGGWo9Sn zJ>?z|+y;;i;gK*htp#RunK2>fBOjj#O%akvr$1XwB=m&`f!Z2i_2*9|WWq4g@3*?4Kf!68=|P z_6Ol-aO%7>)15ui)+23XyG_~evVvAolI%AO#;DuT&d~OWyD7(dcG-6BUh`$U3YUa9 zFghp!B((}?wq-DYvI=lxb4~WoFCm$IWU_gdtgH|ec{{sYb zcFI&qu~mKB@k{596fW?64zc2ar}UU)tD>HVbcey5oRa7ahoR7K!S# z8R_8Rw@R4b)KImaSvc2tT3Pcxm3&Op>^Cz}gag7t0~x`|#fu^@;WQ2%4y6%c1+9~@i`@%s&5N$q0)~8`052Gq z%zocQR&Dpd-$1?W#$T=p0C2Q42?tYNsa5A`Ye#|oZ5G^;82P;gMO5+~Gbj>zo$WSp z>`?zbG!-k7YCLE0d`w-=U?MLEmPq~&`ie>6dt4G|z)%1$}8A}*J0N1Z( zTF2cK6=*<1wNHbb4WEK;;VP<)^Sgkng_Xnp%S2EnTFG-^2SE(2%io5asy8!olY}kB z`Zj!gs~HF;Zh*4*3rKScmOYuPX|oqZpTrj|<8y|~?@{clFK);=jO6J64~$ifIfS2< zg-?Z3p8?7=L}>cx|25EmXM@OG;UPA$obeG01&YzmNZno4YcbYm;^bsAWI@!ib0Zk~ zkp^$A2HifcJ??r*93BFyyYKx@f}*h|B@1KBL78Fxy83cA1zN%*?t!oUu=>2=6p@a7 z5Ej~bs8!4@!13bRRf#5!um`1ZN6ZL`Wc z2|h6aud75aWKI8b5%Dhw$iI$CKZvq_g&l$~eHZKIZE;e+E=i_PJrl{NEAVX`TZ)4_>qm)K_|b=@?=MV9 znVKoal5A59V5u!fcPT7jyv|T&KD&=X0FJLf;r&hb=fRgkpH168HAQ8G_rx*_x`o`E^LF!Sg6BKV+6v zF}8iQJ%s=;lKJ1Sv#_7+*ov^~kw7a;I#$b>cua`S_)~4P_SKgwwT4Z9MurQg@PqmL z$xNavScn1X7W!sya8HV*lC}0~m|3b4EO`#fy)~`h*JtV*Y;N0uF-~ z{c#HEE-f{IOSn1I`XQSI7{c~+WMhp#!yB8CCPO%0^orw3XRSXyA^223Vgxk}`A!{R z$SCsPY#(2XU5lHG`{?aDJXd})N+p~)AecE*I;&qlDLT(icq8qB%kXMD%nV(CfJ|>! zxSs!m+(1FjZg)Xnd88IFcP8*8fth$WUeYn)s&n6EYTB+}Hx~#C3v-r%)jepwt1vOqvO{^dl75&um-kq-h1Aa%U< z;1rC}A&>6(t^4ecrdm;X>$r4?ph?W#t)A8}ar4hMy^ofY$Vqv<12I}x5UFSpJgpPE z-OwsGd0_WoXmc}13fG{%zIhu{f0iq*1b4!?B|#%6XCBq*LB%9dH(|Srygf(nc5}K~ zVt|WI5>#Up01ugPZ!>P;h*0Sn=X7T2))*{414djG9!+Gl4SVY>+f}JGMjfg(L$CRj!( z45<(Ay~Q(B+-09=<8y{F$V8-#NX79uJu*<8R^IN#b{JND)gM1`rLrB<6~728d{Wq| zAc-V-9$&r+Px%mS+51}D+8$0A$g;adtgh~!o2FGonR)4B&G`zLSexdDzh2hfr}5?+*i4++Qnwx>r03b^;GJE8q1HS2%=+zWOlt5})&bVKJ2ER&DuzT+bi`@$XQb}5 zYj2S!AJnKjrv^XlW*THC#Q>Dvw-;`;$C~XMhG~?rKx7 z++fyeIN}uE$H2b!4g>wi&WBVfJEhsx&d1miYK^kVZkn@_{Fw^=W>G?Ju6tIbzx>Vz zeD7uJZtMdW-%Ziu)>k-8-3NKDAhFFCWGHxT53<|f%#Ae16AlR;@Q&yAywAmOX;~e$ zVE)nyM0HhacRQLaqQ+MDAG%tLzZ3D<&Dozw z6tO>vt~GggSW%C@{ol|NovM6h<{*W?ebYdoKXVDZFgD~f7Zdq3zJfunbYSKhof?Q2 z@#yueSh0QF0`bm1kiiYwHjgrHNoGQ#EJc->b25s6w2 z^@Z!MoyzDHJ6|GcW0Dw0z1)Hw>;TFYPqU@$r3+13CpG(_G3EO-rsW-I+JMGbIA|js z-7ON>J=)i|9Aw|QuwU|5b9tiP(vdlw{ovIjV8GjRAx#0C-K%?(pJtN$_mY)l1v4GP(2cgZ{8CuZvkUH zpoQl*$9nBDPI9hnofH?V zYYH{O`P)9ScGQi$AaHw|*jJhzc=9|r7WilEY8N;MvYt&|()BlFl<|KWv)8v&N1~qo zyx(o9Cj>i=1zfG6jEX!9DKOf+RUuMEQ5pl1;T51j5?Om_;)Co{Wu zeo}w)$H`Xd&OC@Lu}7LdiWg9Ry_!>_;`-M5!yJ<6{q>GH@A5rSPTZ^erjBN{yB?ir znHQ%tlYFv;M zOTZ$b^hS$cS@KF!Lz0WJ$uA*Hv6%%`RkEy0q)mE-jhu8^aq*XA3WXIX6`bmJ&^3<3 z_s;YqoFZ~0YIIju?AV5A_-*_vvC_nl$EDjr@}zeI_Ay79EOALm`&7d@@hQuD!{(4T zgth40oZlPSM~fS`tZj;%%$}d~FKrq6Sv?qlw3qBUogdLT7BXA0s8Va@a@kKUOQ|MC zXj^d|5bFsa!yhE84M~h5trlHJYDoR&mI~Rg<3ci=Z~<~Co-3BN9>);WDX=B#=3B52OwUBf&83&%gKbedofVf{SM!6n;gx8VBucAXvNayC|pO zhABT%N}=pBY|ft;>)XJ-VnxwkL)zpI6w=L7Z!iX-U?Y*q@$Ibyk>as%>wLcY^iIVt z@Jl)}8e5|E=Iy>YNx-er^JU;*l}DqDgDnkZacK>%VKlpSlsaW5Ptmbe;n1QJ)hWal zRQK=DAU?YsOFMsVs$0~npq=6mMd9e-3#+KIOfI!&Z&59+a*5g5KX?!eg==|Ratfd9 z$GKCFSeI8SO4mnXI$p75Oh9>r{62mu^7j$bi9i=#WHnk;h(#>u$XRg}Y~%>E#@Re* z@+On$M>z3V#ZEBui1l8sJKF_MB^DmD$9Uacn5!A`$c*`D4UQoc0NQ9PgL7962p{^WZ|$P2;$$9u&xF3G&Sw+X z@n7?uuYAR7O>Btfe9!y*ECj@I?D;MVd%l(QS<)}JkRVj%PJ@H^3BM84^nU<+I6`fG zQ%On3{p^18wLQ^fpcI5Yu4p(%JrAW?uRqDZgEY;8`LlqOfnFgUecO(fJ|$+ud1txl zJwp5(ePX9tC+GEsZWX=*3UK@2O*?V{ynG#ph~GkXC>hMXvQ4AalZ{BhgG%wq4SMUQ zlUtGTO5Ah5DY-%ZfS7`S(Eala^g{gl*S(}n2%-u(dC3jsY&9MF9B!uNO+y!jTU>N7 zh~aEVD<*;VQBrR%dusQVw6WuePemTAQZ2xixUgZ^6>G9)YCG+0KNr+Yn6<5uOLwF* zwNeXx#hUWQLw3#V&tRc^cOrGPjACdLsz%`>yBv4ka6dA-KCi~BL5CX8!mt~5zufQS zNrFPbI^|?BzK%FlDMdM>%b)W$OnG!&)ezjOZRU2vD1Dc9+629|6)nxCU>E7u5+-Y@ zSn74MVl*zRRa14$;=*72ZU&&3Y!y19zcSgT_h@_(iREYJ;vS6XZFDBy+eJa|G!Pb9r@@je`J)Ft&IoJth;yxJ+v4GT zxp0m@c-utF*?M}-8jxl_RQ_=g9pd_F7s)m#y}*Ugc<-Kmdy2x;u0nt8VXN&D{f(f@ z5=y>+9?Qn5NAisHM-aYTdo(CxaVgd&UVc(mdqDLRj!F&IzQnY7ikv24gSW?sxagE% zeGj+tw&AAo+0JVspczW#%uYjuQdZbBbZR|DD$gKvT4*5tY8N>k3Z~8#FLHqN`!HH4 ziNWilG^SZ(Lh-P-JV{4|F{cZ&F<_h!wIz$CEvlqPa38}PKfxyD^JDV$ zF(pyhPz(R;-+4yvCptys!F;x-0j2|hh?3>spulq@jF;K?l}A)_KAZRNU&)6PekkAH zqh}yH=9>CaDf1ff_qk6$QJH*u@jyVT{_}qL-&|`D1Q1jR5G_G<%~l;;+f>&AByl$d z(=uYopjT2$hsbnW<%RGi8!96*Jw2p+>QQi~WlvW&O92J&8AYVlx42;K)3QGu43UPh zoG9&qoQ=0JE}UH@I!_QV>_{3Yi;l*;imAWve*6jGo8LDX=Q&%8<`BDI^+w%*0&zJypctWScpi&^8Wii2(uZl==6yMSB3w zFDn(a>^1py;~UYFwCA%s2!)aX%=8^zhs+8IG%DNs(Q&Vo*IH-$(jX07(Sz@C-R9aY zJ+~?bPG3>TmheS?szb87m+-=pD@|piA5MSP{EvNXY8&K7P%MRHsrTp3V)eG7ULRs4 zti&S8AUVWFGTH8BG?Cn)nC3B;k%B(DkYDn&L|9)lc9YdRmlEbzGPWlyd0dbb6P)?+ z1Z7-FUF-c@FL^EVJzi5?)>9YAIJLI3H!9o*vWc+r*9R;n>V`0ulefo3Jt1q2YVw54 z@A~P>uQATt)&mXQ*%C*dJ3T|gZK7yY6@?&nKv#l?xOdgCY0&&o?zp*JwQV+RBOK2H z`FQM*^st=7AgZF@{!C)_I)M(bb6m;6zpkwLx6I37$jHJ?!>ut0<1~b0TLO=8R-+K5 zup1$ z6P`vLNSr{{HOu2E<<4TS+HddLl~vqZr_fLO=(yX)wZAw{?-k)Ws_fJPA(j(goE;er z4vK6ne1Gv79!k|3-oC~11kNCncF+0`C-R44PCP6*UKQIy7ZPYYZSNg^M83O9g#e}+ zTwXr*@AyseC>*~(2KD=$eRCI7tDoTaDS%~7UQZ%@2U56&1rV;(oNQ=bN%AZm<*iv5 zm%pdIf%T6Ox8FqbCEhc?U&3z%*Qa;BMGRl+ZF7;5y8)c_pK`ctkKv~LFYm}B^MD)R z*f+OR(M4(y`f=iQtS!YGI_YTV=0U3W0_}`WqfW2$Ns2&+OO?L&&M$KoMjL1R z#d47dauk6Vkfwi@AlUzCOHlq7CpIF{SX(zj@La^1ju%NzAItKcE#D-n8=)*C0YE?; zHb-FhAwm4S1^-#-$tFuI&+@2kJX*8}e7~QAVG)=!?$}sEJXd;ASACRlruB*k3HKOA zA}b4wh2YkWyRqz&^gONw!8Llq4+uj$WC}f|%{owEub`oT*gvTg5WGVchG(Mh`}N{R zMb0$3Rt|}h+vSbBZoOl+M{zixqb&7SV((KKp4~H1`C?Wz4{X{EJDmN)Ih}J1YN9R@ zX~15}ivAfu_wFB|-E$~|!-V}Ft!oaE6v;NrOgAB%UAx5Xe-@Ll8$Rp@*Qj1HTt<^{ zVq2-{(S7A(xyFCs>_|pBj=OPGY#kpXGn@DmW}Zja;}H#<$hZa0@Psf2ey-xx>}^WG z6A8*&9Hmwzfo^Wz9tv_{9xk&R{X(N_^l-MZy7}{|8*K;s`iD zp<%(wQ&eF*UUQJO9&McHTew8kFb&RBFX%fW>8V}KL(W2UrB`oje~2(QTgd_I1uJA! z_WR@)qQDtk6QbHl_gWyL9tmsA$efHtngymJxt9(N9_Cc{6sclVG6_*s!-aDrjF-2i z*A!Z-Q)XGPHDxK~9$7kd})Mz@Bci?-IV&&Tb^jM8XaK8%B%6j5FFX{;?76p zTjs*qNe(?23p4JYe|MsX;3(4nIM{nx|0(qUTW3-m6!nXwM_Okc=FtAnVVt54xj^V)vr35Lov${66??CV~qGUgc0 zlYTGVf7s31Ql+Qqj3aS3v2Qb`%ar$fsVvkr*`I64o6&YiMXq|pZnOSz5ek)Y;&BV= zRbMMd&32!heH5ip1svLORIFwQ@vdcB+qstFuSrAb8RR>Z*}bxfrk3kqdXrm?NV|<3 z^kUB~JvANEJ{$VVmBl%&ZeTpI!Zy@^10`a!KCT|$d-7S=EaA!kETbGFd6ktCcRwPw zvwHuBBjKjC;|X0)&SDHM`CPIVzC3FVR!nu-ZEcHI6=yjr#2cDRBN&@?hQEGwe#Q^Y ztXJ8K=kKbCYaUs6LW-Wnfdc$voS0lFO%hsuo>sSqEmKh_TP~^_(F3BKyo%=AE`67s zNUzXgFHRNKiA~yY;0s}{Mp3hcnjro15<1|`&Rv_vc^>>}vrv=|?oXvoqvr5ZPdnch z;R}`T7F)Or!|^UH4!P=h8saK-NAgyL%dZfy8#t;$F*z4 z@f9w5E{f&Qx_terKg&*s?Md_PBCKMpa1S}Ahh<{IP?$pJJ=1n4fndZIQ6?Z*z^v&eGgQaydlGAD&d3cAGJQT z7S6c$w2q>4=IM?lW-T~l(Q5P?oYw#Fe_06Gf#CPc>tP%5uRHJtzJ~J3s&exuM0)kU zaiI_H=Mr^|bJuvb*E$<%;LhAJ2A<~GdrJl!pW^q8tx~+a@dZTR zt{E}+6#PBD?TA$;u*Rk5kL&x-nLvYI*B|snn6<73VB3)rMLk;lPBn|KM8c57jiPAX zAjtnoanYIeT2w zbj(1uopU@k!`tXmY)9l2j|_R-zD;lE!}HmS*$#`~zW(b9vY9-3kEor|cH!(5g1r-H z;cJC#(xk3UZ@@Sf5z|O*f~(BQ<~H7AW_#R&bb;FDS$@M=_i+o*uA=cU@EqCNDSyV{ zlU!5zf$`A-m*X;r`8$HS6^AX*Ret=s@?0vd#XCb!Gu1X*JZM&C_-{hO$R)boVgBh$ z2S(STmFb64g2Xu8LfCD5WWf_SzBNm?b-RsVJ`8bvocCR$2S%$N=l%6uNPGL~SeFy3 za3SQV`YLfTDK~>lKu??ZL>p7PKn?(7Z2CZrQcNk0si@wX8ja-Q4MLSk1y>67ne zXu2rN<8se<2?zR?ODf7NW3Y$y@PkREs+J&z=Y5g4`cDF#m@zZ7x8!0DMRs~z)g;;A z9%0dqvz#qetfko+weSLfb5>@=(!49HjBk-nt9u;vT6Zk++PHsEOjDAbmv{8_EX>}X zkVDg;5$d}KjSexvwu4sj>#E9!Q5*yQvlB}rVHh$e(i)XJO7kQm14vjHl3V$Qz0|cP zW{Pm|Do!?%yO&iv)rwB+vHb+ni-7k;VQ!;;r_euhzI$pN=&eLduZ;!gi?W!inhD?6 zt@ggvZTTak*rqqh{h>QC?GW5hGvVa=X>H(@TSUY}H`EMd`lE5=1{}-^7+K_S@tulR zYU|V%dqF5B@>TeVMFvOrg700nIpet7t@Vh;{-~rBjru(FN!{v9WsuOGGphAqK+c>p z3BmvZlIQgg{KNWZGBP0iKm|Di2f-+rvCgD`{+BBs!Cy-y7o{FRxpX;9hEVcYj~ztH zbRK4K20C!llw-V^iY0a{-rnn*!MDg_$DpSrYR5oLb0V(f>oM?Te+>>5rn*fmveq#? zTl4%%RRssMo5nY-wE?y@R4tl0;r|AZ7q4jR9lgl1qw6S1ZjNfteTm#K)#|y5m!zkM zxEL|6NFRypZ9v<-dSD#Xlm;PgeoZd#;KikYhh}n@l$B$hG$6bfxYKURL@W^`G@#qm z%CrAA;U5ihevf4#=AJwX!Z{xBupv_vanaV=xc;%0(3lAYaqy59-lpTN_zSxcXRVQXjO<_= z8WG;RbryY@3}b^TDqHia)Z5cxt_Qbm-F3UCS}-w>{~GsR<)(Q+O4&N4GGNpyy5V|)c{i}Cm1yIttBASS3Ryc>x}b{VVG{Id!^fUs zZ6SKv2&AVqB39Rzq~fsSL+Lk@ktzXse~JZy$sym}X3V~Cx7YnVS4;3v$Q`9u@%YBPx0t9A-Ctvko13qBgNAvoKh(*$XgIwYP3l(S9p~-o*O&EA2|gN-?q8E#O+ksLqoigrOfwB1-6`LxGqKq)i@9_Km*59 zU+4u6Km5Q>p8YT7ZKnOGJpixe3n{zL$&6T6C44II@Yw?wc^&DML-qiYCW<`!^Mn?@ zqC_0!>u>I_r?BuIvv=Dxty^E!evYf$^VY+w#{+;2|J-ZY6PV*&i|i8t0I@MwGHyUTqy%>Bc<_6KKOef2Yzj z5Zag8D~dJ;`Rhg%u=6>c6=yA5Ka@#88F;A=AVF)pSn`z*p$Ier<4u0mD_spE&86{W z9cFZ02y+^9kq|v-J#JM0uH{{Zjc3$lv4~b;IpD0}HtK6K!9&>`X{LECdC|iCxbBl$ zb2bmsr*{?_(Tq3aDpSu7BnzHdWk7#Q#b|}i**a>fjLS^0BpNBPR3kw)lpk`RIas*F zP9U#f-cr}SuYAJDXj5!YBZ@g1D!3y#6|wOW=Z z3X8*;7?&ZHC#R7j7;*sKn2g+FpWn+QJ~_Ut5YtJmjVAr^;Rgkb+UV#0ighkGIQj_W z`K{%7UDn2jIVOZDoo9OE>~NvYqCd_$dm;M;x_8IayAL4bH9%HvUyox@9JAzBfsxD! zd4m>@DDR!=`d8bzb!(g49onNIN~1-)$8ReO?&)aopFYF$a-|zwx`vf|xQOfWBX7yE zK@kRf_imRtx*yyMn#w|D1@~5|u$UuL7n+iNLo$;m)}sc6$ppKdd{Dja92)r0?TpA3 z@?h*qpP$?w>+`$wZS&pe|0*s!Gs$5khd7%&#M{@_?&DTLY1vlq5z~S4-}B@bbT9`* zLJ?lJ1WNw+zh9Q(gQ`y!3j<@j{+?fGpIx7DOW?dmu5=wB8N%GE$a}VS%%8j${T%YM zJqArXt`#@=bPgUTeE^990hz@G0r~U)@a4tQB*vuRH%9rdyR5Jp#J{Yr0~+G69Snyo z+tJ-UIPae)-6PlMD3U0_52vJz<-l|6s{qw}LnesreXdK>3F=O(Bp~3IHo2g7x$E2|Ccg;2DwoRa%%MKanqg#HkBHAitDW`4>y%2 z&$o24)&y3c0EKRpZ>F0Vda-e(N&gLQ#3SQFEbHfIP2-90w~$AjUxghN)fR<(I(BgD z|IR<_EUTo$$d4WF80jXCEHnKdnBph?Aa>XbudPPG?UZW|jSutglo(CjbwJp3^~}MF zAs){#eVSWx8_mQ{wpY}^iz}O`h)O!qh%OCcwRj@yEeIAQv&bpzSkFBw)hBztw|Pa* zry@p@8!0`m3g&gr!FAj#>x!@nmDb|J3i$~t``>eSm5)_*_Kad!5uii7#feP6Xt&!B zt8+&Dww!kda1wvsG?LCe2o7x}h>aK)eU`@vsS`n4W?|PBVwU)Yt{kWwtav;n41U0n zy7|YD$^GWu9r0h-wZx@xH2AR zJuGy%`nOyLK)tjzKqJmr7Tz-y^^hZhTZ64GA-(irK8fZc#yT%T zZTDRG;;rhjH9feJ34t4$0xAxte0vZ=YJcHf--S5$F0oas_pKvbp!(zbDHd zhalxWMi#@zegTFAf{cE zPOHIx1Nz#ztez20Aiv5fYH+K!#N!s@Kq#&r2Dz{PL9*#s;|UH z>H6HR^ziuT93#q!ml@;F4*n9&%q4laB;d|>)Cb|gtn-Ff-V*^Z&Bx{uW>(G@lhNhG zB}WL+BBVV+*H6R*wse}GWdOpM2PAg-vpi$O@cF{0lJUq(IrZsw4}a{%3-1B$_we$P z>;Ap5^IoZXPfPzXqfHlJq%j5k{biVFeRy0DLcaOGlkf*f>@^68(kF4qGUUH_`R$)= z@z1aS$#-co06pP|YrVy_N3og92o1hR%|1#0kfCyBr1FNHk=xk&tw5IGY~whY+%(=5 z)URjLx{gYB0fXuRR!(f=)i}J|0Y%@v!BadGKpaeEj%!*=wrk~ZI~1FDJngx(+BiOTe$*&?*#cF_@O-<~aprikSp!*UGq3MS-oee- z<&Cnv&X}J}jsrhBhE~mS?Tc+ey@6SCwN%3nbfz$@MEe22X*1b64>JO*YWbp1=#Y_X zR=iHmeYBJL{4=^>fJ3U~&`!`*D0Jvb$jm@ZJofH>q5w^AUV#;ldGxZQrV4KQvDP?e zM|d-a)vkyJ;o24I^(uZ6CG4hDU~eheC9!q&*EhW-$+31ZpL}X-u9lrUHiNXZEOLAV zK%3rfWgZid5$uox@zgZT_hc0FPi3?~HV@`##>a8NI^-HB+x;1wvvfYEgif$OU8+Gl z$SLKzKJmQId^pmuS!ObF==epPnU}0~vyyel-!`Krm||0PBqKd_TPdC7!a)rA?YN|R zRvd%V-(nr0SrgziQKy2`&{xTkT16A+f7@OKNWl^_Ue~Z>K8qY>B4R?OP;2giwSklo z0P`ZEFLN({kaYS>B=*BL*Hhz3mRk^5GRr+Trb%=li&7&Gk>DP8Q8xvUsYl6=S@{wenWFZ zhSUe%e~-=CV>2V@O)8jw7_1N_9{#z>;EL_>{*9^sJ7IrVpnl2zSLQRj^-g`dXonht z*igNqNK}1Q8seKsR-$_>moKWKs5z&eX%Dr=uDl?d9g;|`9NcBSNk14HkGc2r6{8xN zET(C5LY*8yvoTHvY{T!tBtBHZt)El4z|qCO7-a%-$(u-ey)MH+OX9iZ6Lse_dhW zIgVZG7;o#n^sLIM(%)%D44SQv?4dLho5TNKpWae#ccC2p;|)x?7`%2c^qJ|^ z)##Wsjp;CcE*@TeJv~D%1oo@G0C&I&+w2uk>n=P8fo<5%W-y5G>~t?K%zyPVQ5-y8 zv@~=?%*waa1DeKeLsW2sW3p((mAmVlga|XXKA`Vx{ARAo3jF5BXBG_F?YB>W@2y_x zoBoX9%IP;AP!rv#u^oSmz@WBJZS{j|Zu#CbS)rf8PIccHWjX_teiYJ@sx_u!(B zBJv%FqU`%u!;W3=qxc!uJEum+mvD3VB|i;nwU3OsNw<)7cdRC3MrUuVaSQ(=@x9x&B(_5bF?^7`$6YL3IBq{tnNgkM zR^}|&f9~}CGXej-S_VRt_wxscBt%lVuiEhVw)c#aF?_q_$U_6PX1p^kY4oMeE@(%OMU(0dnWF(<`1X4W7~E*wv&!++qSKaZQHhO+q~oC zj&1(FYp-X|o_S^+^Wyps>Zr4-t~x(ufnfielM_c3p1joXq}Oh_l)wYSW*P47k+Mr0 zneI0{BWu+9Ci!Bt-&J-Ch8uMS3P5dw%BH(+6dFY;wS)ew!`QR+v<*12nqxWKheyzz z>BP&kyU(6l)>Bn=){-FZI9VbxM;jdVavnU-Q&fE`+B924cP?1oLsfJ_b9q{l9Ft69 zZeMd4#y!(Yl1~SmEUd-pa!{$zftAWRSPZB8Z5-JH`BO%~J*M8cR`QTTbu=4IU`^Tp zfy-7^dJxm0upj%Q1Kf_38vG-4%PN(b!tBZh}$| zF)vGs*$Kk5D}6G~_E7f06Y7`@^f|j3;ab{>LWJzF-kEq$A>(ZmDG;5M1Y6H{&!#4c zUs**wV7bAj{qA-gGHH@3F}p2DeY^#>`yg0(Ws+6hqZ$3md&H7lGz0I)>`>YJxS5hD zPxBwKSzcR`0Hq0l#fhNxi#b4%sm;)1rg6!Wxm3mcTjGObre!w*`V5Ltr{-N}eN zC?D32^5xa-;r>R}PR;B2XI`f>El1;vHQAX&*9@pzu#(_g&dkj@Nct;Y0f@dJ>vb=0 zHy_P8-zw*PzL=rS_YTtN4Zmx<@HNJSzh*Z@(y8C+v!6=b24BLkmuQvC^>X5JNHq@u zuB9RBKph%#X zV$HQyZp9UHeA+NfcLo*Bb&XXm6;xzSO6PI7S8xYgEAJe+LvOT?a0`(|(K6FrF6&CR zj8DP;W~$@YrL=p=^k_)Uwk?djnz44|g&L+Yop?G285$-BbzuBPqT&$0*&u^uW73WY zYz3`kT1Cu2amFn&4J}f?#sVeiJtUJm1f_26?mF@u)NNyvGPY@4!m0w5Q@lj5e&+7P zujab;4NQ{be_{BU?I@-)oR#D-^Y^Z(%%Kg_?&$R~TbxpTU|0w=o;hMvu{B)Ss{kd( zMPh{8>Xg+T<25Yn7 zPZ8Ca_^B|O-a#uqb=X^DD3ci+T&7YJo8tCp{^J5??fIPGGIK_8Wr%rADG7Vdv%eN= zPM?7dY3N$aJ&Ft+K2o6=Eitm4)$HCP*Rm)zCOpKFbJb{GbKozf=e@`4`0w#x zj08jNAt*iauc$1qPi}kd@3Fts`k{WEw?l2LAAOq!jxfUt07F7y;fXQUWoO{v@rJzc z^>r84EN(wNsCyEfb{f52R_8U=W-w*dgQDphGBfMzI=^Qz{Q0d1NJgyB76@PO=7H~9 zeLZu^U;|Rb?%bi%n$^%jzN1I8f6P9^r>%E@N@%{sCryV|B?xbs%9nLtYBGKm+b}pS zq4RT#JnN6wKM!*Ub35+QIkMlE_?QCH(j7V%EMpAi&rqW99+7^Ve!4Acl4_skW_{`L z0#QSA$~bDjZezIlFBU#m-+4M11&$C8vu<*SW4fBW^nj&g&_3yaQaIZ)uA-Yyp;&@N zSI5Dg@rh$TVif$huh_W~Jyg)17cw0*XghmCnn|H6@2@```SkjP2VP!ZWZ9 zRC>8pd3OQg3#DgjwO zil;dT5^+JX6-zAm(iLtIUbq^R8nWM+1&m{U?b%+CN+ZAGvvdY*6=s&X6Eah~v<#Pr19 zIK$1#ROoSyy`f>!q85P^1i2CY2?>BUy3&`nR52{q0z8a%8*LMwP}*KG70`QCm6++D zizw@TmpbNc8}<{5^X<>L89YsUe) zDTpL@rXJ8|zZUUP%EcOkRmB}D>g>GVaYmMIdRfML_}ZQ`<3bALm~o$(NW-=ISY6qan>+Nq1Wj9OOTf4!;|Vv$9txx55I zS|n!je!>l@JT!;+V$8&WP&AO zj^hg{KfrEUOI!7R>ai_+ou<~?9RPRcr1bQVeHHG zY0Bn5>5WiJ;Pd>Qv33$qy7Cn%<}Ootzw|LHp+*0^D|V`S{=lso{E1;50c3nXY%yxy znXG;=a!Etzj8l?TB1x%Kd%JWgy-M%^836%t`zNgb&mEfXpweG|v7}m$sp4_tXb!xOQ!W@zb56`m#59ny3b@!p-=e<4=F9o!Msv{cC(|GjZuj zSBQk7ZESIH+NRR*zbS}D7&!be#DoWa(Sn&xP8{nmrW2$Z#a~>Cw9uL$dF8B6F_*W8 z%Act54hJiSG-cPs5n-J*r{M&5#8*gBBXzMy-QMVW)=JMw6eetSim6nTt#83Fy(_!t z)gZn*-ih6Z)3?UU&bl>4sVGWynvkm<8weCx({nHw&AQQD7psT-^rEqi;%ao(hVTfD zsv)6buT0m!#Ifq@tds0&m{?dVfS!(Ykp+*fx=~t*YWL{t{bnFgec^h_M>QvL>x&W zUz)2;@kHU7{GZ07-J@WkZdUHIDL930C_$$2Bqn-l|T+EBFj z;;`JZvUFZWx34;*LA!XR_&!*D;76bccM?1 zt`P_Rl+*i&9Y-5;9t^ZS+MyTA;>2f2JxjJGkY$&tL9b%~pe9K5I>T-L%^%B!;R&F) zFU`i``0;O2i=SAI)i~2S2FM z3W!wL+}sO0zv`Yr}_{DSZqMB3e3Z(qfmbN0fY^!01!wQ%`+ z)&Z`Sz=ufb4?Njyg}~TC4*cU|S~ETOvDO8IkmZE;3Ub*Jy~aky-Ok1Xy?CGhutda1 zhW$S^;~TzpC-hIc}4OW`;|(8W%XKwkI?fZ^umvgjOg=`@Ha!sWxM^J?dXzk}38NF&JlvOIDv(_@qsi{d29tkFCd5gY(A z_y0>8Apg1r_D|l(gZ$wlY3P$?Ff}1>M$+$q4XDj!DpWoG%9I=v%_z3N2+R|UYyI8o zXg@vD*Hrw6v_P-1RH}@MeVrQ_-`OO|lwB9oE0NqAkB9oesW!r1%<V?lVU-w%BAPaek~J$}Q>dvudM2zPQrZ4J!iDX?F4= z><|couR@_gHGI#W>ypIjmFkJ7!Z}jeH7}galeO`B7nT>LRljU>S5C}-O^xPN@UI^) z6W0X2JYSoI3nI=>=Q>W;sZq4P8yY}Q4?~RNk zFhi@BQNv&pu0|H(+Rpxt*e=1H(?rCRs*bwlPMbHL4hgv!Hu(H_>rvY|z1m8$GX2H= zjDr>!%H0VV-mwHZ#&J#A`5RP_d+!E&bXz07Ca3@QqTjgL-FwOYRQtErZXG94w7Qfy zxs?~KMsH3P9pK$Akq)8Xs|Uxzyy-26G5nzi3hKx=PxP_`;mq-3M-QCRdo`AYZu&~C z+N%D1M)->SW&!S3>Rrzx;C!idS!_>f zZ~l`Yyzv5x921P$46LJ4EnWC#IO%yRL6 zw$l=h2C(oo*@vcT(})f9JBe2Bci|CI<;v`ywC!9LaboR!46M4PCN(@u6DgS6j-zaJ zaX1P-&PB(+Hb*pmRyY2PPvqRMPyKUGOiBf4LX+mJ*iN2a@LcwW1KIqN_&w9_%SNH& z_~T+$42Ij_-+I{pf9hd918#j*_Aei1R|*G+P$0D*gwf%U>&O_X{mEM5<^A3om8#cj z52LW%_fEv`FRI42_Fo}Fu8W29fe;k?61P~I>b2>rNMaN*D^M6vB$iA zoRuKeNVb%+S_}$UoszXy8b2GU1qfMBK=4?XeK4RyX@U6LgM<7__fDez7u`A)(I^wG zTn;P0`x*;M6=wyoDt|Fkggq$kH+I^p(5;6ZArgdfw7KW9SW$?FcJpZ9717T`9iyaG z9sTXn$~mYKlr7G`d_v}NH|f;fYU)Dvv${}dC7Wv;{zt8UUUjGFh$|y4ldCeGn$r2L zfs8fQO$GeRT5wWRvtO6gs}A=1VvfcT$W@}6+iT8wE5DZXAXQ#zf%_=d9A$^=MiJvQ zfE>@KbDPyxJdo+6x@h*SDR*+Dts9;Gq?Vj2w1W3aZrH}k+fvNZ5l^IiEz(xT=l1xA z06Rd$zfY=$qG$P<0uFh#{Y+>-@6P*E*6WjXQ?U!^dV;U_NF#M7v+-blqea({p^Zkn zEqfKA;TAt*8cW)`;)?OK-l3+f`{f&LjP+LP_h+ojVl#h8f5YYI(?m1#`@SSOO!ZC^sRasV)sIwai zs0J+dIs*KOOC81yalHMBWG6N2*cU-9-p`hc$nhKZy-Qzn<+YPpsI7}z32{4O~l zua<-#ov+KAWAwc;@zSmi&wgs*tZ)S5Z~9v22GOz2pe}jx`}yUX;l5$?266 z8n}lF+ZA(v^4do}fDF*p2uf=-Xb?z-3Qy@8li8e{KqDO8fEj`2JV|UU~!lh&KX#j!8Q%|+ko$Tk#+e=hvaw1=(z>3`Ea z>!DLUcZ~d=zVNXtPIGHbNyolM`w`-L?_5p{ z=|6`~5k679v}#-HB(7O@_CnnUQ7{=*9t}vL)T}7Js7c*FF>XP)iW+X{xhqV zepSbv1GBkM<)JGzF(^CKR5h^@)42TYD)JP|$!D9?WV#=Ob(}Lqjd#|6J-Wo((2u;S zaB~m3NcNlzw+(p%`)%E+!u`;+@=}dhTd75h{fuP*do<57YskZ(Mjfuc9kO|9z`C>* zj+)ts0pYE&nnvpb5npY#KVLF5SUwg=O;f_7AVK(tA9>aG83DAl$YSQ{!zBCZGrW?- zV@aOAV+1(sK97Fl0xn{k@Jx=YnuJk{l@UR;fPLPmiZ>A)o! z!_L&!uo;t;bVElDT=xzK=Y$B&PQfPg)2%9A=74~0;H1$}NUis()CiABwgSDxR3_Ap zvGksDB?0xb*!Jck2|VC+i^ec!W)7{lB=iUFa{G3=rV{?2SPZGNQO%VNwZli0In90l z<|EQd)mW`$`9V=iy<@pq66@?v%(6?8u0IN9(apv_ll#hA>XzG|+x6%(N|(0k?K27y zpm8%DBjd<1BsmQ$DG`x#^qHzV*%xRH6-j7(JoI!-3M7y8zOG!5k1BWbwvg#L6%r*3 zEca>+z=E97L{wVzrI-bZRrhn3CPTW+r2g?r+{V91hol5lh2&+?LWfd{E$K#&yQkCj zdYR@;oKB#TNslPTZP)Kus)l~&I@Ay)`>mKt21Nw0KghP*OUGkuB znZDJ2{28$oI4;(=-5%@=y)ri5uy3Dmr!Nyc&CFx)X(OrZ3Fmn7cVIC5r6yA7aj5BNi6^J;`OT-cmw7tT z1kBZWgm+L_7v4U`5vKE1CC*R{46OCUYT3s?P^N7@sE(+=K$cM;vW4I>t=(XRi-;&K zHbyet+K-DpT3#hhx8A)6r_FQ${w$#KUGvZ#XxyXYZ)_#AHeaKhpSJ~i2P>$1VaB{8 z(nJkQ`$*8>BtPPhn1y}18)I1z4QTI`8zQ*vd9T&Ov;xdO#6X-uv+1~~ESO_q?S%_C+ zg|SZnMAt4;H?lK3c8J6H--7%t`FnHYC;S(+LWX)a-k|?C`)+HsP8>TeB>+wB#*L%! zFH+Ni3;;y0Izl3E&sDQlqF)UeAelVPVN-a$D7Hlf)A>T1;#AI)l%XqGF_UXmPeR1n zI;%dQD#0s%dX+loz3mPr?A>@_3%hybWk#aDmSkN*4ruRnWnZ(IyhJKvBfJDwZE?!h zrwE&5x$U1;G@9AnvbtYQ)!NrX0O(NOYy;Q_YHMs9rmwZr^5b1cH4GhmJf=VQcFDK3 z%#?CfFE~R=nG%@(=Tyy@X@}g z@R0v1?JIiudm5n~morCtV+Bt)pY$LFIVJWiFND=R*6&B>6u3Q4TlB;zJWcw)D10ER z|GXt65D@?WX7O1RuU1;!pV35Cb})s6hJ=$GZQYC@t{UgD#rO26E}>ynP@of=-~25M2v9?EOB!#D=L6jX4nan#T~n6<_6j~yEyEeqV~nGQd( z7bdx*!>2354~5@%C7d3?bCLB;CN#0B{L#di*ihU=%ly%(9v|H!vW1l%iJsapVf#$y z$}?J&gf{RC$9P5r0a3|EX5l`G!6G$nq}}QTFLj9@CrCv?KyxR!pbrl%(-xLAJaO_*$Nikq1ht>(!PM530A>5FT_QZVyR7xu@jU2$OHj}w)avYc&|)kuw~;!$6Rwic6v3c>N)O&iGzrdRmHrNqi`c=K`d)xi%I z3af%|RX*5$R*{Mm;Ux7k(U-OMYR(6pZiECn7nNA|p`MD%89w1%iZ+|0De&|xYa^F0 z^eG-J=+=o6_mXb0`_KvI(M>_u+(Q;CI#>-zhEHOg8Lp=3gpjY^j}_~K!5cnemYh6z zlQZNHt>&aHSsup7t19(-#HC<0mr%DP$mZ*5;OS~yrtjkl$%0RiBf2W}hKF(k{vLPc zYF8cCBOZ#BhE|)aZ7Uy09I!ArD=v}z3uLzn3q!XL0>u9aA^J6MmMQBdc(!!@EOq<2 zRQU}hgsg=5sjyLK<;RL3MH=Re>?*an2~Cr@V6(~}!f$9t@*_t*C{ z2~B+g1-#r0yevW;C|ccUv6FOX~QaZ#~vl6HA<+9)z!#zM#EJhOl?Ig%2M` zqMt54pjg&(ZEGN@6CF^ACxbwfJiHm|N+#?M17^WAyp-(1QhxA|hJwD?XS`q4pr^w-i?>QR`X|ihXKsRmcy*t&8$M9lOD1{;{AGM{ zibHRsdq#L}zrF&DN>}_CSq*)^cz7IW{cdgcQd>JbvlBgiGe5OC(lOi$jE@2EY3liK zt?(UcWPi#H%at>&>6*2`NyuitRK@B)ow+F1s2Qp|1cukNoAsdZw zCTC!0S4#cx=87qvNi?7g4u87cvSQbBN=Y+qt_P3T#<~M9cdn^)oylFsrFB)2Z;4hQ zLHSf+&X3x2I*4g6SUm)yWu`?m7v8YHu5aL?LOsP$v9Rv+XEE2 zq~1{ON)*@@#Mi14S1`Of)0aZKccNL)eNY{_m7_u3E)!VQ9+v^Bt^Ynimr+ZG%lJWg z9ckL04UE!xr95MvsILU~d^smya})0pE#u&(U0Sg;DR|zK7&&Z*w61$zPXhZ`=2Pv3 zf4iDI@%-X`LsDD(#n`z{@_>Z1P`v)06GU5_;jiyGHjh{gdX3JfouVQoqfJ&G`&<5) z5m_&q5Er(JI15?IbwrzhYWR8W;YPh47MrincA{S0Y_U^DTs|j^XUEJ`2?0lQz z>V6jRB6{ndONM^s5~iztcdW0_Z&EE>f;wk@$Yln2&0hxodOuH#;UdbwE3T%p zNQ>0ShIY2%fgW0H#}+r8gE({i0{IuI(^>R?#kdrt6$I5zzvyiwE|ad*4gj5cW7n5a zY@1x&p*N+AB`~^(&&>jueIorf%R5VBh}%=9gh4>|C=B6tO&lj1TzEH98WVp9&ki21 zU_U$eE2s-n)GOQI1de4YFlpsfWg~x64}xj}?;81~<*~_Xh}!5Prn|gRcvh~y%E*qS zKBQWAzplyR06{SV$xHk2-k{q?5voZYT_w=YA<}vOsIgbJeD&s;R3h7P=VbD6wu6z} zaD%%+jeafv23ag%G3R(=V@BzB-jK$K13kp`$8T@e7}s2G)t~tB+3x~fEsDKq=YM!? z6qqVgt#~5)$GTGQzy^Ul7;?Q{n*do6p%Kof5P0Y`&=$78mE-7IROxhSL0J&m`XL`z zFUrpC6csPA*L=?{pv|32H36~*UKf*CQSt0YGdni~vFG4_-3MD~gP5>0LXSK9sTr(! za_ml%o{qLL0FS@p%WE8p<{3WEWK0q(^-B}`R>PBei-r$!TG{E{y^=1cz`D+CC$@Nx zMZ4zTh6l%kOO>;^tPYiv;eezrpxr25UbZSfDToJEmDx%a4%A6z52FN3);pf}b(C9A zJT)x3%bk0U2Y0FDld2!L*b?rYiX=7jznh&nyG|5X zj>(3{G|Co{!+A2}O$V+L+^iQ>T$b0h5Yb=jZy=2GUGdlY8W_Kn|Qhl!nUoQKs_IDH8-755{Llv3F#c6TAP1EB40q1rKh&GWB3wLk;gI*H`gS%RCn)t{o#ez{Jw6cWs zSr-CDN7U8#5gl*|;&Rer-5kUo@75x&Pkjp3%4u(#N9MmL*rEcg{&cw1NLTLRLpd+x zQXsL(P0Go5XIC1!B(p23rcX4QCC*+S-Dufk6xK(ER&cCC*Pi^m({NmT{ID904n`yD zuVN-Af>?F?#G>sAWCX2vJBY~-_c+I8SE{EDVe@qsa;BIaEmAvBw^=%FGC^z3!dj&3 z=0}(~I8i8Z4yE`Yw1FzRy+&9Tb>EDEl(0GRED<2=+A}Z76lK28ZY@I3i0Ujg?@glAo(^LG1+$ykS$ri^`$9lV^QNhjZQ(XPn_7k}%S@ynmmO;e z!5)oK&m2wPLDEu>dD-=p^=`?VUWA91q!#SO`*gUd5Mh6k$$M~&TO`fAhdWSn3&(*+ zcvQRjhV|!T9l(ccQ=GtFvBc=;Jx>APV`Ou|JoM=Ha~qKa)4POwAZj_&6SqrAV*5i+ zZ^VHJoz64Qe4F6)loZE?>>Vx|N*>FY!tD)cijB13*Ix+ifjSziB!YZ@rQW#2&Bv>y)@^Z(be}Ojyd1cbjFjhH7uD75Q>!39rPchqC%`ntHyP9;Ov_zaPLwy3=S&7FjQyuK}hu3?m zX3etnG!IUa64Pil4Prc&b~KZVNRXw@Nj#IPxpXd?YP7sCs-@M@Sb_A_rTjC@_9>Dg z1LxKSTu-;t(g;42-O#K1OLupuq|X)w(d}zNZHKnOyuaH@y6$Ufm6eW!4DJS43o}qw zt{Um)4yoHPE}GbBt(Nb3Ia{n{|EWce&gxgOBoHB0yzgO-gHrWmnVf24Y}47 zDdnfOhc!^zS+i_=#6ynWV0kt#>)|w|@OSQ)M&&q3T!9Ii8EvHSlSE%YM(HNrP-|}& z@)fILT4W&OcM|qb(tTvY3UeV1v&O&1sIE&X2<*l!*PJV_jO`7>i*vD3RtaUM>wymo zrW=}!t~k7h@DS1PoXc}M8=qGt1iwUWhMvWCP?-!juG=8ZQLY9 zj5-I}Y=gE6g`<}8Z(#ajha9g7v-lndF-gt9Z6nJh-HJt2C`>yZP}9e%66kA@4jSLI z|~{l)a~`tNobkh@-oMC(m=r7OjoHlh5tC-%iq3>jfK)7|=8n zf}958f}-?-dQ?q{YSaL!{2k%Z(wtr0Pw?>Bi;)yL=lRkqki2l@R?y+$U2x-4 zCqw?NPJ-{*2I9j9=fiNv3Ay*f#F0m6Rw%B@uAla3CjtSx`qN47y)ScR(~4qcDAvAI zTZ_0V&vY2I(K#73g3&D|3-pN zIOEsI^k+p30rXYx+H&gZJ$6L?*&X4Z3M%%s)29e_Tye$Yp2^%NZCKW%zMfB?*}&;f zCQ6Xh+s9oMqOai~ci*bjFQgApf;5uPTo1Rl@0>`)Vgd&mwOnA=qK_T@coQ#b_7fc{ zDBO74dUL@@cv8{Y4Mp02_L3JO?{{@Q@@9>qhFCUd`^<9gxMn_Q`Z6hn*l<2;D^0NP zS5zuBYov7=y5hre~19Wb@uf)m5d&a!c}*8Xu27j50S*n4bRd!N9*BJ!=0 zbvo>5t=xir8bW~Ca!(^N?)I>@3dRy6J4_i5q<%JKf_1Lq1dlQN9fVelf6m8gB+z!_ zQo1l~v-sYjjJydNVp&;iVPp>e5^97*Q4p?f=~D!fg7_@Hw0Hsb1GXzM0g6j)O6fOt zwc94e@R2gf`P{SRojUX8nHsokwPD_n_H&k0U}uN+_i^L^5|{Sp-puqBBY!3D^Nlqx zf4R3)tT?K2KBBa^*Jd|`-$9I};Z`c7cRA5KizsXMBF1O8rO7Jiy_$PH72wlqiHmHQ zg$PP5I6}lVG{M|I!ni^#VK+*x*}dK^b4BN^jRnTiB|a=8UQfwz+Gq&s zF1)eWVkV%WVRi0FrTyYmF;%`gV@U&LBlaLHW=Y=kt3|7Qd~%7Q#Ia$twACdISC>q) zqgGuH3R8xs)kv}(Ni>6dAmX49FvuBDG<$uDoh~S60DZb}^$W&iH z<79au09d&=P3&{$YpHh|%UyPYT!rl40!2Hd3VhxiV3(bOm_7X{mO8UAmvSy=&F#uY z>1_TWegE`2YyX}C{_uys2l2o3SmP&!0r4k<{ihKcA_B32@{AJ7D#8}5nF)#=r7y1+ zlE3&`5L*FnkLfWJx@rf1Qq^g22lLUl-D-NC)`(hnMqKW*=KQPhdKfR~gV(xX;&wp{ zKfgqkIPqlF#%|k@xtjV+f+J!9XxEJ`0*j@sbUf{}Q_B2dZY$9x)!1R#+u<8>I*w{? zwA0;9x2YX1JSSW3nvL*u0r9}%p#rW#bDH6RE1|1Qvsv6Whtg!Vx0LMpIzlc?&Xnoq z_Yu@LvqPT&d=Q;`d4a?}!=$+KIx;+Ik++c6tA3oPQP_{-Y*~|Txwz9NM3pbOe3l)H zmy)G!?ivOH=v-U~y^A`h?s%mk0fAsR91p}Yh@v+gpQ?+U`NOya8YWfc6 zqN-?nEsfXJw!dzuSuA_sW^Yu!B7f7i00nGgg)L)KD0YwIEE&#=4uTOxXc+IL#MlP8 znZoi>$GV!o7EIFkMjU8W%UuoNWct&BZ6uIot~OGeGi&LwcIA%u0r$tTnjI-vuFZ0` zC=?%~wm%QzOTbwiJnp%L9sW)(xrgXpJaIyffw>%OdzXqTA`P9H4wOSGv3w@PlWu-S z7+gkpl+N_H>A1!p(AkKo?VB&+;`1QGt;QI-lzwy!@6osI%FKVS7HC8N`RhkR3KyQn z4-FWE(xdc-&iHud9(n!T38;Js3KU;iTx5228Wajx1c#NLGP5R!-8oiInUP(S`GRL6 z2+dx}`HTtp`fiP|yV=^4Ksp$&-)u*O5e;!AF(CQm2N{NNpb?9rp@_<@5^;blZT`JE zXoA%8}VBt?i0gL zfK9EoK^$s5T9!6m5#7FB)g%;uE z!%K+4!T2{y`^ntF7}!Ivr>`_;y&sSiZxO}5clWuqj{Sun8#nipwA{Az5{&wkY7Rbq z%1m!~bw=3d&lk)?^J#BrOw^9&rxcrS;YHe|ub)-B9C)SL4!_-1_~%Y8W@wq+T;InOLezJY^ezc&(1Umd-^klH7J|Fp@G~2hRqs6h zy;Ltxk>v zi&fv;7!weIbYIYOfWBnhDI-J2Q^*_Jc;IqwmO!Q5B2g1n)%_|CeS1pDzGZDV(fb#p zUGUFo1fV>+!HASTvY(iu5QXgmS(6M&hAVD^+-oSsAS?7|8ZKqfi!ztGF8OHGFQ`PW z4H9NMW<_(4kR@BeTCST9OoPRDf~VFk5u431t(>(z3aocY(R6rbZZFq@^3>!QBWO8( z_HP=rTwZ87)Yy&H@k*Yb4*;|q?nrl%-BOy_ zWs5wt%M=V=@*1`&3QaSefawKTwn(~SoW zQ{MP8pil7(U$LFbitAgN1%!%gTe;q#>3U^Q>Vl}V&YqBRDk@lt(n z=*F`%#oQ~z@^2S87zoJRKLy_(%zy2Pg#F7&M@zIGQV8eQ)T+zX+rPKktmKNBm&;A+ zg+g*>&y_J|A~MMD>V(IThRNhll()@jAn&3GMG1+jnI8O{9Y0^)8KdUb@ol{VSU=`1 zW$(LL;N}!0?m439U$l&--|a^hxlnE(rv|ntzdRqSPL+qD;C($W*4g!l+P8*)v83xxj4?fGW66913)LyLW#s1`LP6Ts!9sP07b3E~K zYM=`AUQ8nw^gMO#IxJ685gSDcaCzqR?aq2PvEOR?N>4$5Z^<%A?X~AVjc}(6Z@&DwVJ1>@z*yZ*d|08TVZ@; z^lWkHSuid{^H|LiCH_8J4l#$fEy(8a*3^w;CR~1>2zK8QF)=1q^c24HH{~aw@%t%H zaoD}G$5HcGXcjZ_Wu-0yg)qwa$y_OPD!RS>mACLQ!qOXiImcy|FE@jQUss)GBK@z> zo^EJgV(po8zfNXrTcZZgqUJr`dEkm=W|L$w&Yxc(wZ5b6)@;#<95(R0<|ZUneN(&e zVjFWEBjl)Z8P7%bglyyy0Cx&SC}2+kZ+tWZxO&*#-;yCgG!c<##k^m@sA7FdzyY@o z345E=IoY$@iv3_mnPdGHo{q><8&Rx5egbZ3QXCVG`=;5UF-@cZPqhZ zDm;nzrZUqF{pmkP6cuMfF=F0EJ?p*xRbqUq_jbeg$}eUPDJZwyK$;)?GocG){9^iD zPgbzDjt_KK#j%^rrW8|AZCMA^681z8zl7fta(YD~bN*f?G%)ia5Em3tydfMfUdG(= zwG5H-d-|{JS(wEoeLdaT%kPD?Qb6o*;G9-qY|-i$DZ2 zqQ2n*rI5ek(c4EMCk=CF1x7CeZ$H=H&1VB!g!lt|22T-e6h9U4UQ>whrNz560QsoD z)>bte7Ws%AREKwYUp}I)f8?wkl8oPdke-Kz$+;@LMZy|>+i0XyT(q4!eLt@)9cqM^ ztTQ{{@{sdqEfwj})J!q&@e939V9aM!c$+`@xY^8sfP5qP%SgBu0Y9KX{JlXy2>%g7 ze}@0Xw^tIRS;OG2etk-MWgsyLCL_K^ZQUDf8Pfoz0;?a#3TNDYyS7YdlBMKvEx)L& zcR+E4_T^s^uJ~|)_kO@>Q5JNO&77jqdb6Hlqus6Q;DsVl z_(PcU7NX`QK8_?TSdhe`l9Fm|#t6`qUi;dX3Jqq}+Blnw)+O34B=+KwT;z^8;_Km8 zz<5o^qqC>Du`a6!MXeb{Nis$c8Tc75h@&E5tM!kTgh8h3Qk}xB3PFcmFwE=Ww?j*v z=_q=WKTJN6gPKdiDHKhMio2Dx-qw%cT@J1?_NS-$-7ZE!+D6tn%HapOQx=617iY|c zfF(Ud)iQ2MS|PgQ;dM5bgIjABv>HItX7H)@GA~ZD&|r%K%CUQZ#q5f}SqtrqZHJUA zJLtXTIo>!UeGV0`^R%`8+@*BxZ zX>T*c^J_acQ)u8bWrqg!Wqt>~2Layk3~6%etJ0{^3uy}#cbri-J=b-VI+?3Xx`7v} z-tO;A0|@qi+7*7I`W4RA<#2%`#=2g#VRh%U`ur5VXPXSxX%S*UpH|Y9LdGsP<&?I^ zLZBd-Z|f#0JXRyQemP)vz=46sM)0+%t`v;YWK3PZ%H>JF;(CSW5HyUEqc0~p6a2gv z4se#t+!~|VlOSZ8UqYcOyG$y-G&q0Lqtv-vY-jn&H@Iy;-8y=%5Orlv(J0ZmoE$b1*@-uQV`GH)Jn~<)+Fp)JbHYI-pa0S0mAPm z3Jp>xX>A==H_MJ(UlfZ^$1Oma!<-U^b7J+QEFyISC$^;3ehvAh>hzFuBv6@NRBepi zm1-RU6TWlR*_x)Uz_~bt9n5QOxI|;6XDC7`;9_aiKuvaUNAY!Qq2Qv%-bM5SaPPfg zBj?85A!1O40cqbtIRbN&GJ-PnPTs^07sV5l@q_*0LDcZW?qI~H*=G0wn=2-k`0cyN(frL|U!V0Irbiji zFhoF)&y=0X$R5tdWsT_A<2gp?e0?9}@#UoH^~??a_PImdAJ={jUTLgXGF>>s?h$tai_(w5w<@##WM^*fCyGM;s{(GCoEyy8Ruw$Jq&|LMzj zkxZbPV%j79mOsj4T#Pak;90rw$~V4NYo}xq@suz0jeklt9&E$sg;$HCG#5FTp2#P? zS8L@Z9WWvnw)y_8Z@9zywSVe`$atQ8*y}l?#N?|7-2-HQ-6pK+JeW;s^dT8@=b3%k zV<{t|)iD3aG{%gedH7{{m$mM#1UbCkGw}BoB4$E zEgY2Ml(`^+R@>>iP`_7ftO>piFs*$;bW7uG8OT;Wz;jg%YYDO}Kb z%@IxxPviF6vR8km_|KPKxjW}O=sYrPIuE-@IX=@mB9G*>9UnD45Zq!#l@5`?<4TUX zZN1?VOCQU_0@Xu*5TPftOqSP)P=ECd?j(2jt?A0QlnpnkYFd|O!n%824>9AMVjny{ zA85ra*w!v$n=1g*R5~JMM#s0LE+gd86ePTci&!AWBx7ki69DpNc`p!NlkO^HA_qQfQkB|V}lKV*Vsm3PCs`(x&@)F zz}hXqX8*-awV?Itf|G>Bm2CC*`&A6SMs2Uv$ugqHH5-3-0Qu_@%sT$GR|xC1rHiJm z$TD7RM&~m9cE#ufqL!gd`Mw&dW=tgE+Grj8%RQVdAk*29KH=IrHEufAGDzKC3Uyy>E*PW1&Lfd=?-i_RUwQ!dbG1BmW9@1Po~ z+o~r;t$2yc#m{bb^_pmU2Q_E>o-zhU{o)WY=w<7^@3ZE~~XddoYKe;=ash0^ao5~dxT|sGZH*HPh{vzE-ISb<{ z6XJ=(Jy22L4By%r^0VGmk87q~j|gkOfiN78==zbmVFua&qbf_+Q=vke(odvZ0*&c; zaZCYeEuO@5(KofU0j=%hL(N_D+)IsU}OTOfv4! z=OlT=(m^%HcublkCl@x!;ki;!x){owC9|>x>Y-tCk34=@h|Y?|DrlH=@J6oN8WE`Y!H~J zqc(*cr)s^C+hizfY>P@FY<1C6x`?lc8XVdqUpRqO)h*q!n2t+-X{hlL%7yaI^N!3m z#SGM&J5D2)s*^%(INQRwu^d@?pu~c=RKx<=n1?Y!G|8!(R6DUr)QHJXo-Z(FrA#y| zDM?xR2y`8sMyH^Gy^<-hCrx`{7Ou+|qAx8-4swXcL=dr2K*vfH%ZUQ=get!^E0_qaQL3|2B9Ru-ZYNs_kw@cmh_x3{B%V)ZsAT z(Klq(X64}F+fSC+dyWSHyTvXVoe|wKAb(fBY+K!0tEPdzp5~z{-3C-&+Tx)@E_Dok2F9Y?e z#T%^FdPQS@`eHKE#deKrT6*)E{{Df<@)eW1{&vkpeS`mf!}4P_Km7QiH7|!(&~f^W zJ=TPt&rC*U509kbqf(7Z`-2n^ohwVJ6y|J{vTTxV-8!NNOTO!g_u&2xRfznC4-xj^ zYez`^4AdX`(hW51c*pn#^%rQ)y}&`k?DRYo4;-^GR$e#_9~1d1t^=GM6xlwAl?pr} zb%uex0t3Q)%~1IX)E@W|f~0xlAGm#xql{*q>N?)0Pi~!0%Tv#H*%8CT%dDLdtF`@n zuURj^KIjX}Cm>X7>w-bj{u6WM#MaF+{?pU~bz8a~C1Ja&aq+7FQ!@XoqqEEQYF_hG zp1U>hE^U2OS?H19H7wB?X-f1(BBL$8cJ~Xu3r|;>DcIDck(napw=W05y~$c$mz_%7rny z!J9PL4yz;TZKoaCt1=Jn5Ay_$mXd1Qf^=MM{?P>F*k2}`DJosLNvf{S1_6ZhhksMe zOHa1xQcavHkY1_Fwskz%;L>B1e~>7W7q+`*UylEUL=&tb*ls4Z zb|6l)4J+hW$GOo~ycHSFcH}{ubcAWjmQFscMpnbTcU!HKCRB`n9(^9It^M_|XL*it zTd!i&<%@!igw)vTS)Yik&nSb$nuOemhM*@!f7Lb@1}EdNeZbr0`)E6I^o>=PiXM!> zn-8XmtijbeaHYI&=bEcF3w0-DDXxH5_kK%Qbn$#Efguq{9jXJ`Zz|qqjWeH2XgR?? zu99~(R&{m`uF)Dr5UbtG3Px*NMIv_!wW+M%ZNMv@I=%J>j%N#mT3P6A-W*1~4!27$ z{mjJA5t#_(pPS9|Jeh!#uytwb%yzpMw|;5y9GIl8mz=Ia# zPF#gKUS z0%^8_qtLJ3*_s|I+_^9_>9XpefZDUPu^Aj&5?#hf$wF^RaaPO=#h+ZXo_5e5Rv6;* zs?j6HObsD{89e=`(=N{|E7D~=>W(~b)sC(#Rm}E{k8}O~-gddx?5);S9xa5CIY$c` zRuucCIci}ow%Q%|G@PE!CHZx79ikKRj^goJ2O1{lUCI$e1d%bJj>E$lM^!I9Az5Xfm}v5^>Jk)?fei{clxlY6$D5F1SAu(+xUq`@`sTrJPY zI!Ws$F}w0GzktTwv?sIURhGGvB2y#cfrIU{-Gz%#%*61FR}(y@Q~cRF_fE+)3;Wp?bJLFS9xi7fjv>vtHdIxQ5y*NH<#?BVn8!omV1ViVe;&8 zaM=`#D}zp`HcxIZJd_?Qfte8j#ouY}Sh!R&V^HV0u};(ZvcIWX@yg0~bm)=0t1&J)NZ)nMOH1zA$;w|NH>ZsuJL9e|7}~>IzLkdcv^*LFhwRH^P;ZH zGusJ0%R`)$@tWkMz;|Bx>zs_hv&N@MSTuelZe4 zW&aiRo*Rw9j@X)IMG$ z!;CMj&kt=pvmraRHKB|Wi=7h+na6LS0{Jv@gA02in+@$Y_Ur-% z1Xw=%0!1AHsaPKWjcZw2g@B=wZ?KqfLjv#vWus&Qh#R~Xf)3*LCAaqx^=g_sL?`E`>?SvR@Bh3r z8mRG2>IFOf@I@?USpS%?pUaO)7AEIVN#dLM&V1rkM$bPI9PQLeLI4|e@8_0Uk8)1( z_ALrEi26=yg8Iqz=yQf?MCtd27gFKC%fElKC5SI(3EnCQ@B=J6X9|DC^=ytfQw)AW z{cCpm3j{>{zy4W3{?~o;1`G%a$QcVQv5+1FdM9z;vRgvf@Ow9UuR%H&A4(*|fcz|K zu6_hmU+HQi|9SUTp;oW%6YD=Dxhu~OUe#ywMlYE(r$A}d1PWRf{lR1>qtt>rEywMV z6vVwmN$K~(vUr_sl`71y@~ZQ{GCsqLE?qSBdbst@a|#{(if!49#q3)^inHqvXb~Ak zcQzI5EjWb)1`f>buq^iaOy0oQE-&uW9Iv`!^g9EsHu&5lIPCFDBKz^GxXR9^l2o40 zZOw%b*hSUCexY5QnQMGucV&UWPhdy0`^bN*7J=?K<+`r=FMbgpF_9$Qx#ymI`Z(jhwj2Nld+ zh3zJ>{Pvi(%~sRGA~37hbgOPy0G+Q+=qnO=t9QlH2GzIYH&3wvO-I_zU2VFR_SMz9 zGxqN#2r)`p422l)c$x2V>sK%@^~<0{pR<+r>q1653B>Uxw z>hqli2vCk&H*;%*keoa+Ww|e+ z{n!C&C9~Y*?PXOhM4&=Cd|vvf0S(BipD%n3i2W|?zkd<`=LeCFC^uTyy_p|(Ig{F@ z8I#j>W1)G%C}xiq2liQ}H*ZG1t}Jm=m|BfF3G6n5Qes_E%Piu4^kLFo^U86)HtPdk zDOGOO4(C$oNS;y5`at69sH?NKn^h@zy2U#!!1lFTTE_42fMv6U;uLkG*$Y1LpLjNC z)H#|E4!vlEW<;YgpqME)UrDL9>XP3&ID1Z@4W}k8{y1`zZXTZZu=xDMYT8g7;y|D- z*_G*RrQGIi(Y7I`Ru|^5Y@2k)8iHy=UE5M5xvY%R&TA1`mz1|t52)+Qq(cs*8K!WX zep-GK_i1Uq+)+;u8E%^QJJI2#R~v?xBvLwJc}K{m9Ak^k}c z%Use<3V^^KNYNwVWfdM3EupB#&?q_;wHX>tL0TeAK^P9a4CtX?RHxZNaQwixajx*T zMTM{AUC4SW*&R!)RwhQO}O zUEzqcDR!01>^A4f0o~)$0LPcCotYfGrZ;>OZK2vTDGX}%+ysr$Bod1EpTPDjrNQ!K!RJ82gn*+3) zr#h>UoOV90o-6?L-7r4gDCWSThf8)W(!)<{?70*xrpvNW>162rr2Aa3_O1Ie)Vtc) zj=|(d!HoiTzMj0@Sa9xt6q|7D!Q{$`C0hAm=KO0?id)CPfRoLbh1>95ON1EabGvpC zw0jtE>l6Iw9Tj~29P5GK`L8<-h&rF6)IF@OBlm^BAo8QC`~;1YZ%8k;)*fC2O#@4W z$V3h9U-0!^f>;ccv_@Gd6dn{GKKB2%;TM&V=l2@t>d7s}H@9I8t81?-bSb zmKb$n6}nd`kkFqw$4GV#jN*8I+*BAZr?1=B<~io4tt>8eJKbXlSxNNJwSgi1p&U5f*ylKM(HXQkOiU2tMLV?or+<FC>%0=BfCt)SixGcvG#(F)z4H-q5{HVvd}OJZ{A7KoXbgL1cG!y`=2uEup~W8M zAb!Xa?ChnMUXK&^f;$kKyk%;|_EiCT7e!3#jK=j*!1tnP)h^c6s7O_RNv`3A9g63z*C2DW{Ob9h~-eWsJW~Y`Yywt(lq|R{-O5Pt*rX z1Rrh~bZ-923YqAe7WbP7HFmJj98cfCSjWGyJ&)QRNlJUeKuhpq7VBYi_*{9+^0!C` zEDRlX5^S^)hr%DTC6C**rP>XfEzmP2D6 zmzWey(c4>MJ-vYLgZAvx5bzfbag~^4HshlECu!MEDpQ0n9+$4Bvbo^f(zMos7(Xuq zQKuc{G#f4ZK*Vyex&%l2)1}9(`Y<8a#|^sdEf9jS$ITXf+#n=ux6fAM%nl`!Wk4$g zb%}Y@t}*%)mbDef%0}?rK+BcS%bN4G=&=KZQ^Vzw=RR(*d)m^^=cuh_)eC_wYyiGY z4|uWB2Vw<}P1q;Hw96zJ-O~Q9RS)+p2S<|o>y)CH&Sa}2yO*eoX0wPp1}GDJhWreq3lm|Osj?(*zR95gpIiua#8X+;W=2es8 z`?375gKrRhDe;W7 z-SS&hJm-D$XYdhr()P^G2W$Im?T*|3G}-O#y&b4}GvQOY_EIrCc$C6jHmqJoq-vTb zu!~)sd&!uJ^)8$86S)1SGxW+c^?fzRPVT`bwR^4S-uNfbIsOUsf9av3*9rE<9z zlqjh~_#Fa5q79H%Ap+cBJ&UY>(kM9R5zoz)KZ+k{ySm0qqvUr?9fQN^`tRt{MO?2v z%7x>jOuQ!s&tUwLPcvrTpjGl`PvB%Ir5jGvl1V}WLeU4X1?-k&+0uB)T%_I`pvuOP zaH_6;mAv1JzSU3i+UopfF0VRysm%TDoMobAVa-q%k)3!QTZU0Yy+?pZc>c5nsBkMN z)rt6-a?GtO-L^WBkk!OqXN%qBL^2dP>?BdFU23xA@mO98dbdT(vD|*7K51R^aajv4 zJ2_zGW6_3sMgBkn#yvH$3~{O)f;Va{l(RvzM{QO6A^XVGDP+l-N&b7TV*ADZosm{x zW03hWyf^)^kz7eJr;~2uJe5v;aE;%84XfBWoLV8OO7F6m`vgq6jBbzD?K$m>{}02O zOLJEMtM8sBojXU1lj%myof+n=@3S))a*U=zxLVohZ0%hr>-LT9$68M~`wwaD7CcbN z*34SRztS>Nu@hr}`#DuNlrXHYI>fP+kJL1)1mu`7k|0e%Id~6@u7Qn7wisEC`eGW} z_REasMHt>5;7pdneMKC|9B_=$uh)60^MllBHinNb9qZWBM214trCOd4-3`z@KNb+- z5=D1Z6?bN`WXsG1>sl#|!^>{H-GG3w&7+MWQnSRoTC5B`N~4ZsjN$S$YAT~6 zew~`qn92>{CfjGhPvR`2#E-RpR-BJ|%}^xfnvs=Dw-a9+U>#O2cQ9m%`P(if#(h2O z`WX;2EB9{>S@HkHAq!_P(C0L=MziiOv+ z-2Sr&M)GegT8s=Ju z)Prb~hfjqvYiE5%JQ<#AR?73kzLj%%^y^MfR#;fv&ynOYQYZL>*OR=;&W_6Sf>#6Y zk~cPv+gFi?jKWd00n_|90u6two1sKfXZOAA?i@=7Vr=)mtc6H9D?8{56|XxO4He<-wj8A78^UZaH^}GZ>l7#+ z!t@Sl$upcVw|LSekL--)v2`)J^%%O=eI729%Jh}zKt+w}!LpPTDim#p$V_WrNZ>ouB zbP?ZD=;07Hs=+yK8kQ0cU3Kx&CU>wz`pC1}F1UqDYnZ><0wLIN{G>);%fjmV*emAo zG*R;EmKli46hf${tuI?Gqr4rxYVb@)UWvcu4G7CexrG;}1rkG?y5AFzK{0y*Ee_@+ zAqqk$FUwzg+M0(!NDtVJNbl!M!_ePi&kxT7ugwS_!FMc zZq!hbVGMx*rMS|*bqBY~5fyxSozet$(XKv+$UoGo%|2#Y;PwM3atl4!Q+b$Xebdua#*5VdD z=x}BEi)4_>bo8O8QbX7m`ERXddInBMaV>8(gK@PDhaz$3B?@x!6Dr6K`2TCK)H0=z z^fMJOZmftt)Y@N`-IbU9o+g~`MwIzt6#aC1>qBy;;X@G7eQxvq>50G9Blx9BS;$_> zTk#remDehs=>0Y7pju;ZGqzcB(_uzL?KjW;1b}GUidYb_QJKm=%$m zO=Qo-=Uk+cbnj-LQ{p)oIy({J$s?|@)HHRAsVxR1a0LtUrr>B9IUqz*C}wXq*jYqW+Ta|;(n6Teyn7Ow=%PVg_Rb1(oh>Q>6k zO*j`Q>u*+Fmpt#qd;>PxwBw~S`*UoAWM*3x)YI>NtC|Ws94M=BEy5BUxbP*$NQb^t z-Z22-)QqO$ZxEfPj2$S)4$l|OpaKSpy5BzV?qHc%nYzS{Fe zD41A^alqhtuWqv5X$KUyudUG$Oz7tyyjl{c{-Ot#3+pg=@Atp9V5>-I@T}0)rWo)k zMn%E(vw-{Mbvu5fLFk+`w(aDNai5&k=qHdT>E}8CRa&pMVl~+#H{^XzuCPO*OH$9r zm`u?ug~=S*nbzmQTdX%H9Pc!vLtQ$pw}!MXe&FnOsLrY_bHwfKVLRYt)`W~ozs>@U4{M#7iYl&~!R29X99f@S9=zAi3C)5*NIPU)@s<|24}FBp7(owD1w zQ_#r#tsVN#TuL`2N9J}O`*3*`Z13+}KgYts!T9yH+FJMY(b&-Y1bH<3oc8&|Nc}83 zD<`{#k(MTd2{$`5{Za3C(39nA?`iGm?qJRT%zp8DUg4E0$n9R;5#DcIK!H6DHtOPO z8iSTO#Oe?72V}X&b=a*@FZJQ`ZxqcVdv;(i96m$K7b5HPf$k_sG=ZL)KH>H!1g@C7 zPv;0c%G16{2eYphx~SD+&tm7cqawJQ5bn{}X`CWm(GL)y-4}jeh7W0NxE~TlQ0rY? z#fP38)Y##CklQk0vY(7~-YOb?m&56^Fg?dCW5H;YHG_`s(*&~N$% z$=6RTg0|(ubJAvS&#a?wPl8f~S3l6Uqh7yRwCcr#Z{FjN56@g`S>7XlvmW!;rATMD zywwqlJ5>b+6pUY76Q7@d1izZ|e-5=O#2LSTGh3=W+wq>X2$$zZ-&_;Gev$GK=*_*_ z5tFnxGQ3pf{b3x1DhwOn`eS`vWKSv+NY)2|V>tPu=Phycb{Rw`v3YI6OPIn(~*56pj3Nyown z?#(g5YK z9b=Y^KmjRwmIA^mz9I89_3|z!?q?FK^OK33U&8EHn?^7*SWW5u`8EKt?9JGkIAK-W zDc!b4Wxc6NpbX>1LPF}G$LgUKj8h}Ew++(q(+7Ujezmfr-C*7sfJ%H@drE$WNtf3} z>ZXS0KvmXS(;9n8tak_j3sbb@~@iBziXrK_G!1)FxLH{_|9mC)H^ozp`nH=Cgs%gt!@(^RcgVMbB3o`l^ ze4d3Db+rxnF5jcjagaeLQrb%Gs4m*^?GR0c=_ZqYUBT>WyJb?HWLOOo4~e0!@ha$1 zeQ6UdcQU0{=_%nmO>r8Z^atFuD%2t$^{xz0KN;{A$6T`<&S*nktV^*S%SZ+Eo%Cw$HUS{g ziB8(1Xf{2Oq%B+Crz5-_eZD&VR@}r24)4M8R7U55p!NQ1LGE+O|0cTlu*ICdSD{!# zMC3h=<5fuj;>6gS=5!===4yEJb(Z>ZGSu(j{JBli&tux>8o<9ir{_6Ipa`(XbcBv$ zYrotYx3iIlSsz$Eq6Go`GKZ7*&GUi}^lCHn^~VY4#^9I2SzmqRYqasfr;hNG;{f== zBd;&-&_R58jRUWrs9a76^hO0uzm7U7U&(wE#;1SJo@1(pW_L_hBMck^()9kNmLMS3 z|K&3JZ^cZfv5Vcc%(|WEj;WW}N2_bNC%`r1mm>v5IeeM4C=8f3lambX$I}=-iiK7` zpXi(d7RhvDk1k&O1ICj924`z;>|Ha8NAM!ZZql>KwkamE02?uZS~<{1b=A|~bt~xQ zcK7ELvU^<}4YGVNxI1k}UEL+?!L1y>>%|Jy=5tiEGmy)H$Ew_p5Sx);k5en0O`DMu z9?l^Y@VdtZ1U0$cj=3nqku=Qt21el>P3%O9Dq|X_)q4PJtXry~mZP$jtTT3Fr=c`W zAKgyE9aEWM1MUJoh{*4!6u7R1chCqiFk-*xx<;1+4ff*K>S11P)pUs~ zWtsX}&iCD$tW)B(Alh)|1^AqlA<>fF3w~;K-yE7|bN5b8`}wXOoTJ%|ZsvK9B_&H` z*qCf}kSn)1OydaTT~wXbe4Ict^5S$@xk3!0QjOVSNQW=P-$?7_oLMKqo_Yqgb+2}{ zPo)yY?r#9h1wctpsfhf8TgD+NSSEJNMVqr6-GwVfuFlZ8^8vxx2v51}og;gSy@@Ez z`(4zqGou?yrf6_Zn#AXZ$5qY>XA8qf-C2Uybk`%dy;O;eZ$>v+TBzPla7rR0OoKyY`#r|~6kwupiVn1$@-R=s519Ms*C;R9JX@1?EShw+}tewuJ2tAlY}W9dqj-pUG|mU`|IiT%X9hd z`Dfg)uani_TIf2+)EIa!Z|#W>nb_uL>8J4IvsF4STvabDE15_b`asMR$T|lvdfl{>>u3K>F0&7ccuDLHw=% z$@!N5ygtbPzV&4Wb$V_7}9=3ZBMb%%@<-4tyIB5kOt&FLeSF&9S~yE zG4t9orrtwV-{-|AalC(Tt+a@-wCZJYO&R^HP$Al)DpC7$(PPe;fQ*o_KR~~O$zp3` zglGY=|4Jc&@4yTLm5o;9bvrZii<#=^;798XC*DZ#s=0jRjmHf7C5xT-g9HZzPKz&Z zy$cE60JnbfP7<`;9SK|NPq|YGo3n|r;*6GxfY|L~h?Nk60xol;KlcxKnKj{_GNkv8-%D>fUs*e%XL0IsxW&*aD9q7g^0*3_ZL zoT^+DtE1&cCk*S;J{`fC_Zn$!Jf=E!1V$o1f1^e50}ua;>GU1 zzU+kGi|p*%{pGgLU!YA3&b8p!AM?Khdugw_uR{SJBb*I_4{vMI1hF^9uYT7#1vmA; z_VPRm?2kvl53m#9`plQjyt6z*`*<3isB-_&u>(|?n1bw{o%%`sZG%YNY z^3ERZ1kWH*=#obE&ab6wO(OjA{H0DBgjmsBk!Js1Id0kj~{wb#}GpJ)7AO|uI^BC~E6-)>S<g|! zCo7rBW%LqJ%|zX$YLWA*#kxFL=Vc0L_4RK3Rc%yN#!AeO{ zBkNV`o$H#DiJFUhiu7h)l7Pc^(B-rvNiVg7^HTd+DZHUq{FagAr!H(Y+n_CV zxntt)rAgyq(MzJ^4U+m3H02N~oOz6guk!ZrS&14K2Ok7ipW7S6Ava;U?;R4w*T!gp zz#YdY^}gZ_*oKjN0(*Wgf?oJ){Pq+`IYZ7%rF!*fcBnlTm~`%yIP0Po1KE7%SSd&R z>5VCmx=ko2Ea!=&>K^t{J1nC{%-vOSvr@4LRQrq9eC6YX^AP;=7#_PgzuURx9o8zUOa=jJVY+c!=caEeqJDxfFoaChjRQx=*BT@V)W?EW)iI8PN(+~WeoM5 zT6JA~I)~L((z1;PRh!6kt77e~7c4EiI;(*Fe9m=pBz^?-GuDGx7YfkdM%i|BY>}OP zTzQy%IlI2wa0t% z|9o{kI!~a+p`t=jz&)zvK`<&cwQ?vza}~IA11)A#6N%D_Ezvr5NvUhd2$R?TRq*K3U(1t=mvpSWL^eP(e)ScKMvLl6y=zfb&PP zN}1y%Ex*0gVe_UWiOpx(yPd`&q@LwV3IMEdBOP$TwU-C2ZI zznFBj4_~Gq|Jg`xC}OMMp{E{_=>NM^b*hX?RQeQsI`BcxrFM4Rgvry!vMQOI`Ftp5YLUKzFN&LjzAhpM(m*`SGJJ!-P18A@-2EX(}J+HW2VMePM2JuH8;Aj>!P<@_Ob zRj02ORL^=3OwEQUYJ7z`i}bWw>!}&+QBV=(t5J+@rKK`U7~#h)Ek%mG^jOT|PEIFU z)8<{pv*b54U+2#cqpVr0fy-PG@_5mh_-$^nsT2HoMf^@*lVH_ucQ_Smfn&x&$Hd1vE@>%DTHIt+lO84XFlXd!y&gb z!J7Phd5H2-fYCOO`V(bqMk0#&2M%1z5IO=i^``^h=eUm(bng=(Go+ELQBM`ck&|2c zPbxc15&+v3VAoOp;Q_+C{pOKkD1Xp+yn^AVCuZoH6}x`UGx6OX*7~o3FC5%iu|^*T zQ-V!j*ik@6pMyW@{HDknY1OTYw<;}3nNbla1~iVP2X4UhlGuTl*Y(3t%-%h+?1iRdI$Mc{KA0l8e30A! z&Ea~!>|fnUB5$PVag(w;EpE?x+V;LqNnI%(p0%^+G`qHb=_YilzV-L>p{lj(-F(7- zmq)Q#&vryl*ztWRcA?>Xf-%)QD)WMCWqZmo^B?7we)kvG$+;S_Vh**{1W+JEgFNPE(+KTB8$|1ezN_g6Z231SH^`%ZyfAHn~%a@f6$K3%iJ>^78 zl!S(P953ewr$uI>YlAU%XPst+hb@F(g!R}6QC!ZbvICaoa zG|C+SidoogjMcjMykURg;{5(uT`$|-d&fPjC*fOpM#I4%{A50Nck7^e>qzDe9$g$~ zlR0()o^?QTU=W;BiSI(6=$9ATP-(i_%P_oycW&B-&@t%>nf)Lm`SbWt3PRFbgKc$N z-IivxYU;K0x5x&?Fp}!MM1qUgmGPEjj9RbKA+BcU&}m?B^Hu_T49TNl_9UN1?Q<(}f4?RKMsfycKU63*b(xxvE^9soiKA+=F$YWy6-0jf$Yi zKHN?@ns6m7({z6zOjOh3Y?CAIbjuv*a1RP&LB=Ku>@h}e(xLr)yvg~9(eMn6qiyp9(EE{#-bJD8SJf zAld$WN3oZr3(AE>j5f6cRveg-It4sVj*jji)r2>@iUdtPdu5 zG-XP!U82>J8VSrc+Pe*6fp^Y+w5=w25;O08wD(G2K|kW}OM7v2zm>kMeLr&#iuK;2 z)9dJucUrGmVs(4#lK<@?E&`A>5)3xbz6F&nt#$=5KeHEfmmcrc!?Bv{O%XiB$~+$6 ze}!hD_r|}?_858#?hp;mU(|jf8E%}4aSf?`JLaxR^$ZVHW+dxRcoegQuBN=|w=84Q{o*5OUGxuY%#F65bWh~A=^r$w(ox$BX>4`Q>mIe>M_5+k zffZ~mP04)3gSrfgrE7W`+-GfbrECeqUh2WhzZ0X5Y*F8=d%eEG13*y}r`f>cZ4(2& zj$4-syJ>fsNvaI>N`zqZJ(d`~f48nk7ZlFU*DC6!@6j}&jcM`IsA++$^yu5Rf0=xADwWnn!XCpjvb#9JowJc05rd z(Fr7#zy$u%LfHk_)Z~oH@^WUE?8tyS534Sr(;HMc6=LYPSQlz@u>0ul^C%0VL*&>e9=hQ&5D@=cRe)oU}ysx-~9m%oM zi0)P%+q<tJJps;5d|@i`*M9kpv;)XlqXcG;l;wm?ralH$CMV6)u-?wWUER9f|I zZ-g7)dg~LN`U$zoEVoH$tWE(x&8sgZz1q@bkJFw{Kk5M^97`WYP$aGjNT}+rjGil59wlnyOgw))eQwvM zs3-q{m{CoXh<_@RdI*$VEs$Rz1jhaJDnCCtP(u1@n@6@!-bxRRzTzcc_$+WT{C+xK ztkIk0LA-S9=6R;%;tT%@A^7g`qUr1Lo@vfLlG|Y_5u*GG>c0Rs|L5Po8k$$AJp(Wt z$sHByda%!tXt3KFxX>(jk4!~fW(@0rY$4Et= zC_gIg9vInGi>pz7=ptfMD8wTP4Ea0Q#A?m$)rcP`zs%*TO=BHR&R#ZBWt7l&wdGAn zko|(-slnyeeFKwxyPPs7V}~+Ka(>>R*0tdXH`~x@?<}Cy2q-;Q3KsA%SY~4_AcCIeLIa@AD15|fq{uL(jn_o)NLi^^J&$~h@ z<*^Jlg~Za9|KQ@&dcD@WzM#;Ppn9-qOO>+(BX;{>NF76cSP@b^7gF5mkDDU17al2L zw4QQX<+kwxcTIi=6pIoD$!#IAhJA~jnKt`4Yv$IK&{jQ-ieBEmY2(L1SBdn7cKZ;B zgIoQ&h?CD(XNjY*T)Kl*o{&eX%P(81-QW5$ofm@-cBt%oR}D|$nsuH7?b+_eplWCO zHqmo|P5RWf7@z8zxrpoBThz-^%>&L4<>hHpz-OomxWlqpYIwHd*-l8a3>Q8u@8n$r zgfR=}g2#ClY7dp!(%(EXep}Ik)-Mz$y>WtJo)d>U&nDCFcbU~4Fe#K)5-tN)A1g`N z(}N&?Ha#x|K4XtkO*K|DouA+Tq6`@Kvn(dk|zE_zJwFxv=V0Oow_TPB}^|X z^)nM)#zS7ix3(h|f`ix$?1DWH^Ye!DNa|}sah>ji_sR1e#1sDF4aT`5DezxTuN^(| zJp4$K>Dx~C7sj*UNooQ1AAb0(EY-rXA426XnFPi>xx`;H6&$lbE8HpM<+t4Q#(*z3 zkKt49=NN-Z0V#4IG(JZ#h-xLoRiV|EgLde8XdR9rgq3B&8@AR$H@0|g8f>)}`~ObB zDhib^O_NR}sousg`BL{)Er;A^T|^R&UfgnvkjXH2Q#a+ZKA3XtW=Hrkp^aMr21pc+ zyyzarzM{)r{O(08%G@rl8=(%GjZ2j3e(do+6ZJ!f1b#%t zw~Le=(HPmG-YX@;1q&NMTaZI<40FNIXkoMefG<}rAsJyJt2+GxKGZ9(q1jmj`YHJne?dak#2Xy}x6$W*w88vr>#DxlUJCT-M(KRlWsrMI6sgHLN|Pefmi<8k4Wj?Yu7U8!iL z&TPI{Zdv%&EBB(b3$bbZ$?9n&d2j0Ht&=QU{FNb9t2>|h4D@+|)S~5^;)lZJXNVcD z{bV{FS3mqzq)Wu6Ls7z zTUiG@N{!;D7>Mfg`{cW$QXEB+%dhquZLz{g1nSQ+=EauN439EEm>Pk(^S_wo@75!- zfu-5Q(}DE{{cp3%S}7Xc;O3~TN=5i=wJUdKC*~P8_1$rvg^kr%!FU+bFoH90`P7!mr8BGw z9Q)E0P9@!nweHWm8;udoFZ)Inj-$3`3*@S~!2=;k&vwk|qaeQ%iVX51;zw04Xd+~U zq+`X#@ZSSEC2hH9P3@AGA)u*@J_I{Azd9P^x$F%i7^EZ8N9Vr2&ExesEvEPC{liw$ z03*sE3_&5|-74pLY$yzKOhhCb+e#F=O%(*q6_>H8(8UdSSmDCHAcNU%&FvJ}-xIts z^{tLt2ck3r0PLVJp%b^`7g!bERrYRAQ<4ZPahAYTaW>jTpu$#l`{f90^C1lddy9xJ z&&w6hnx*wC)wFrQ%CtrPZprM_ABk$#B_Vc|hWzy0nvrczQ2$|^a-MaA#XTu+w^*w% z?`j5J^5Ems3Z9Ssp=WrH%IV;Ysp7uHTll84*!hDmgqoq;kYC`CG&a*>`IxHExoKG; zRc!8vx+tSrB&VZSLpO{Y%}|b0)oY-i##G#rdGa>sAd=EqM z_PmtQb}Z@9{kI)$nvW}Bv;WlmLOZVwHF~&vx6&g)WmSRhF3)u18DFnw!=n#wrl!wc zuxF>;km)PC0Oa=f<8Y+D=PwKCFugYZXPa5l^GYCP$om06B6{`;*!_2}dm&X5uEvzW z|AUVWI@a}Hg8`V^|2ve_|M3sbe}PdWfprC`3+ML*$5_C6GX;Hi^M@6GU9OSnCmMA8 z#SZkl9H$?aON+!GV|sBQfVPF)B@wHVq#chE0D(n|TY;05C;+@1EH0U;^KlzML>p}n z^e?veqN#Zt{WYACgTGcc${dJY7qI6g;1KD6a}~l@7=JK(P_trFud<=Ki~@spJ6rB< zWN$n4KjN06+jI-dI^x`)Y%a2TX4GoR1V@LpSreMk`5pJljCHSTHa223D0p4X3PFPx z2@~C-u+7FVF3Ft@f}csl=nQx=cH24nHEp=kYsbB*3$SU4YSrr$E>O~1FpZRnAO%Ln zRk*ls8`Rrb>sNrMvwhXoY*)gI=!RP!RjjclErpjsT?(Ig5&fixc}Ev84ac}U%~&>h zt!}(mPfwnvLNe6F_(5~36M@Lf8b~EU+h+!XG)cu8FOW%)b80=IN*9@ zE2Uo&U6;-OPD#)jR@xY!9G$+ck$yZ>U%*nQrgb@S(+2Uw<6T@<$;n4BuH|&esz$TG?(A%Eegocq zbo`DL+nh=azvwb?4hI&9p<`4N&E=_H?A~Kk&MD$o2o`os3@ZoDar7|#RJvkvI{2#B zt~^%!^-8-vFPZb6Il%|XPm4Q62c<`|TT7Mle>8j?HLSu40L|SjhFu}W`H1OT8Q2QI zwJ@5WalFJxj-q$5_)!db>{CR+9+qG49M^wGpvGAE6Z5@W?B>`Hzb)wf&s}>0?E`;8 z%3<4iiyJnpZhpjpj)z{Q=z&HfEdkv6@M>koO>gkO$e+ar1N#mCKUKR4L;CEMVZN50 zz1i4#Z248O9S`W-&-Y-@fC)_}d&=?%DpJcvr|mpq!2&;g|0v8;`#iM^_ja}CBnC!p zY7dEQpj5Zsk)f5ue}TI}iS~-&4a-bJ$;@2w{ahBbU;r=nnnE$ULLu_7Nr);QJF|=} z<&JF%+12r9F-995Qe_U@YP{*EAU53!^G2d?5?daA)-GlH3bI0#40%jDiMkaz8q_W$ zq_H!V2XuwKvySdJ+r@=Fsn>T7@p*E?#HzS40XFU925tv0E{oBhg0NY3OAy~CkWA8l z!Ak>iLMN~Wde%MNglpb3&a#Xsh(5x?V+#Hph8_Q$fY+ud2>NS%$Z~y)LfF}^9;8dD z6%c|e>^FqSWMzVneaMoQt{YpXhv37Pjvs%ESZ4P;XAuJBSV*o@0*~q0hi#OKwS^x4CWIcvnd_hY$*%&El&h4{Q3-NRyLi;%X&N@Ds^eU&%~ zzthx?9OPV&WM?UdAB`dzHzd%RTUr9kTGxcDbH!GUpQFArYyR`)d>mpHhO6RClQc3$ zDV3T*=KjIiLWzq$`C!!!$!^kpE2Xj(^3@TJl3!|sG`g{cj`wnUoGkV1`k=AROUuSa z?X%5`)80a_n}{fw=;RG_6E7n!C;B&iq*yUCzu9!r+f=I*&zARn`?nUvqiXl;P`}J( zTKEwYn@#xu&a4=@$S}I(9VeexJV*A~g(bXOq(3s3o`XkXlZ;YE#f+os-Ad3Cp_-sQ zj9QEH|5v%!f9hQYx$!XpEC1aDI5CCElS!eAn;}v~*L$`W_A{B-fDZvW7Q77XSQ&hV zuWs;bu@g|W{rb8lN>7oji9R zxVWoqEp31Ps5kz%x90!O;(k;{J2G`2v}1BO%f>ZsS~<~lDc^zGNV2TyHaa)1e4{NxFy#U%hI)AR#1C(fET&{#Qblw^xL#Q|HD=sf9QMdi8DukT)5vDOU zpx2$YnncPY+VKYTm1&mOH@2T%|NJXTWYN+d!c<*kp5+y)u;&xPW4bUd=>GZ3B?6tX z7|A^^A12+=!<`s6@y7zgDmhmXF<(_F78jpD21H_BS!}vBn{&;Zok=eWU^yB%g6SH8 zkYtm|HCAaZRhE38r8_cCB=)iBU_4& zg|0A7sS3X!&=$uB^PukJQEag-$wZ|3xQ0i2JVTo^m~ccdk77;%Oz*w%uq1@%wf?xL za64_jV=Y%NwHWo(??{m%b-L$^z5T+eZfoA}sXt@}R@`dEw^iJ3$o)cC#@hru)Gk=r z>vyi9VQ@J^A56X32;wiW{#ghdFa-bU6|^se-d=$(Zqiac&+HSCuNBgzH+Fu{_yKV- z&8N_K$YDbMcx-Gc*OC(1X-lfVdtzr@>n&W*$W-0U*hY0! zF)mU);D|dqmdWq4U&K!I^mZ6X4c51ExZ65Q9OgFf)e;?7y;J#9SS1aGu%#B=7u%=J z+T)JW!8o(iqVM@kLkb?Kc%TYD(O7_Hhd84U zM~R7HUgUTjnnrdFQJa)|&N!0;`+2d0*-AQ_&>J>xhc|>q`5Admf1df4RryIxjoD#! zr{t5lx{LuZFXWl)h5q#v@+&3SKVw_6seD5B?PI@X&ajasc$B+utW9Lw z;qEAwR-_cWHYGHr;jMN{i5)E9e#vsk=zLe zP?}wymWUI-$K0vSs0h_^iI{gpc`|XxFKQY+S243y?z54(rpBO{8m(VUJ?uooEv+@8 zU_kT^fK?qA!iEbGPmX-p$()*83PaEM6^_sY+Vlf4O@9YlWZcZ#Bh%cT#JzTAo#!|9 zAY9H@*Fp$9QEURgM9iNf{b;6SB)@!4s>ztYm_0pPFZ3Q?DPPAgf$ zKyx#}B`R)95jo2o1!-9(2@3@&rps$ynOIijTg5Nz+LoNV<#&&m?V8@t=Y`2-ttBD7 zwPVa>;0j0q_%3ZqjEtOunIr1bDEW?$-(u1E(kY`-H@kaG&0lqU^2>MvxMAWM|Cd%O zr!bwY(gC}#Z%F2;anh3p9RpV3xW*t-NVC%A{AD~Fx1!}rljf>f27lv>IpNi3v6f%h zHL7A>w0r_ZutyTgE+U4I4^QIXO%67@SD^LRhEZNws;pL&ND-&7WJIXVQ@GckiRo)$ zIHTJ&ibJ z>X1U>0bxR<-T0{|cS4cz68@iDTVg_z**MF%n$)uW=XH`}<<{)exrHYDv&0_?_sR2% z$JWV<7mx+EOXeuAztI5mGluDbNNHa}T^e)^~ui?S|@ z&(I;)z8v$yksnWx0>D}VTeTbB7p>&=W^`2cNaXCiiw3S2-9NdnnM`!7Pdo~UPQUQQ zLGSv=i=?1uNB|zMe0a;+SiX$KU)QH1LY8@w5S9|E>o@MwjEh0a#dq9y&sR0ry*u#?3VSeDd(%EqI=w&1e z^)SWX32JK;)Q3|Sfo@;?`!q8aLxGlZyIX376}TcXXa>Y$&mv)0?|}`J-6?|_WD+%2 zcIuPl@V3E|QRC}q`@huzG``wW3IfSEan;Kq6D)QMMiK@Eaa6F`!4>EnL&%kNr{&@b z(*vPX$5|#sNU`S04O_XmbP9oNdL~5!R>Fi~xy2hHod6S8nHAH^YVu=4W>fSDkC4pZ zt;{MHZWe)iZbC>Zcc|Fcjj9}QA43yFLp-HWA;WJzyzURvRRT0bu%0AryrAoK$I1$`W*WTX* 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

    uxFJHqynhL#hwBwfQXtE^r-_dqb8(qxp3 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

  • &5-7F@Kq!LhBMl@;CjffNO5SHrl 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�$I5dh+gDfT)O5K7iB(Kln!FZr52 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