From 61fdb57b8fbbcc97890f606e85290641ef644121 Mon Sep 17 00:00:00 2001 From: furrtek Date: Sun, 15 May 2016 02:35:08 +0200 Subject: [PATCH] Testing Messagepack for saving/loading stuff from SD card --- firmware/Makefile | 2 +- firmware/application/Makefile | 1 + firmware/application/main.cpp | 4 +- firmware/application/transmitter_model.cpp | 4 - firmware/application/transmitter_model.hpp | 1 - firmware/application/ui_closecall.cpp | 53 +++-- firmware/application/ui_closecall.hpp | 30 +-- firmware/application/ui_epar.cpp | 34 +++- firmware/application/ui_epar.hpp | 17 +- firmware/application/ui_navigation.cpp | 2 + firmware/baseband-tx.bin | Bin 33280 -> 33280 bytes firmware/baseband-tx/proc_epar.cpp | 4 +- firmware/baseband-tx/proc_epar.hpp | 6 +- firmware/common/modules.h | 2 +- firmware/common/msgpack.cpp | 211 ++++++++++++++++++++ firmware/common/msgpack.hpp | 71 +++++++ firmware/common/portapack_shared_memory.hpp | 1 + firmware/common/ui_widget.hpp | 2 - firmware/portapack-h1-firmware.bin | Bin 469352 -> 470472 bytes sdcard/baseband-tx.bin | Bin 33280 -> 33280 bytes 20 files changed, 394 insertions(+), 51 deletions(-) create mode 100644 firmware/common/msgpack.cpp create mode 100644 firmware/common/msgpack.hpp diff --git a/firmware/Makefile b/firmware/Makefile index 0def504ce..5bce1a9fc 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -65,7 +65,7 @@ modules: $(TARGET_BASEBAND).bin $(TARGET_BASEBAND_TX).bin cp $(PATH_BASEBAND_TX).bin ../sdcard/$(PATH_BASEBAND_TX).bin $(TARGET).bin: modules $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND_TX)_inc.bin $(TARGET_APPLICATION).bin - $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND_TX)_inc.bin $(TARGET_APPLICATION).bin $(TARGET).bin + $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND)_inc.bin $(TARGET_APPLICATION).bin $(TARGET).bin $(TARGET_BOOTSTRAP).bin: $(TARGET_BOOTSTRAP).elf $(CP) -O binary $(TARGET_BOOTSTRAP).elf $(TARGET_BOOTSTRAP).bin diff --git a/firmware/application/Makefile b/firmware/application/Makefile index 0d2b97d48..553af8458 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -138,6 +138,7 @@ CPPSRC = main.cpp \ radio.cpp \ baseband_cpld.cpp \ tuning.cpp \ + msgpack.cpp \ rf_path.cpp \ rffc507x.cpp \ rffc507x_spi.cpp \ diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 412c74bc9..622fccf25 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -21,8 +21,8 @@ //BUG: No audio in about when shown second time //BUG: Description doesn't show up first time going to system>module info (UI drawn on top) -//BUG: Module load and return to systemview -//TODO: EPAR transmit +//TODO: SD card wiper +//TODO: Draw on touchscreen and transmit as spectrum paint //TODO: Use progressbars //TODO: Setting: Prefered input method //TODO: LCR emergency clear all diff --git a/firmware/application/transmitter_model.cpp b/firmware/application/transmitter_model.cpp index 7ed7f2e0e..22a9a442b 100644 --- a/firmware/application/transmitter_model.cpp +++ b/firmware/application/transmitter_model.cpp @@ -103,10 +103,6 @@ uint32_t TransmitterModel::baseband_oversampling() const { return baseband_configuration.decimation_factor; } -int32_t TransmitterModel::tuning_offset() { - return -(sampling_rate() / 4); -} - void TransmitterModel::update_tuning_frequency() { radio::set_tuning_frequency(tuning_frequency()); } diff --git a/firmware/application/transmitter_model.hpp b/firmware/application/transmitter_model.hpp index a4eae0f08..3de71bfdb 100644 --- a/firmware/application/transmitter_model.hpp +++ b/firmware/application/transmitter_model.hpp @@ -70,7 +70,6 @@ private: .sampling_rate = 3072000, .decimation_factor = 1, }; - int32_t tuning_offset(); void update_tuning_frequency(); void update_rf_amp(); diff --git a/firmware/application/ui_closecall.cpp b/firmware/application/ui_closecall.cpp index 79e837e90..629f1f3d5 100644 --- a/firmware/application/ui_closecall.cpp +++ b/firmware/application/ui_closecall.cpp @@ -22,6 +22,7 @@ #include "ui_closecall.hpp" #include "ui_receiver.hpp" +#include "msgpack.hpp" #include "ch.h" #include "time.hpp" @@ -59,8 +60,6 @@ void CloseCallView::do_detection() { rf::Frequency resolved_frequency; size_t i; - portapack::display.fill_rectangle({last_pos, 92, 1, 9}, Color::black()); - mean /= (CC_BIN_NB * (slices_max + 1)); for (i = 0; i < (slices_max + 1); i++) { @@ -87,7 +86,7 @@ void CloseCallView::do_detection() { // Lock / release if ((imax >= last_channel - 2) && (imax <= last_channel + 2) && imax) { - if (detect_counter == 8) { + if (detect_counter >= (5 / (slices_max + 1))) { if (imax != locked_frequency) { //char finalstr[24] = {0}; @@ -100,6 +99,7 @@ void CloseCallView::do_detection() { //strcat(finalstr, fstr.c_str()); text_infos.set("Locked ! "); big_display.set(resolved_frequency); + big_display.set_style(&style_locked); locked = true; locked_frequency = imax; @@ -114,7 +114,7 @@ void CloseCallView::do_detection() { if (release_counter == 8) { locked = false; text_infos.set("Lost "); - //big_display.set(0); + big_display.set_style(&style_grey); } else { release_counter++; } @@ -124,8 +124,9 @@ void CloseCallView::do_detection() { last_channel = imax; scan_counter++; - last_pos = (ui::Coord)(imax + 2); - portapack::display.fill_rectangle({last_pos, 92, 1, 9}, Color::red()); + portapack::display.fill_rectangle({last_pos, 90, 1, 13}, Color::black()); + last_pos = (ui::Coord)(imax % 240); + portapack::display.fill_rectangle({last_pos, 90, 1, 13}, Color::red()); } void CloseCallView::on_channel_spectrum(const ChannelSpectrum& spectrum) { @@ -148,7 +149,7 @@ void CloseCallView::on_channel_spectrum(const ChannelSpectrum& spectrum) { } display.draw_pixels( - { { 0, 96 + slices_counter * 4 }, { pixel_row.size(), 1 } }, + { { 0, 96 + slices_counter * 6 }, { pixel_row.size(), 1 } }, pixel_row ); @@ -247,8 +248,18 @@ void CloseCallView::on_range_changed() { // ex: 100~115 (15): 102.5(97.5~107.5) -> 112.5(107.5~117.5) = 2.5 lost left and right slices_max = (scan_span + CC_SLICE_WIDTH - 1) / CC_SLICE_WIDTH; slices_span = slices_max * CC_SLICE_WIDTH; - offset = (slices_span - scan_span) / 2; + offset = ((scan_span - slices_span) / 2) + (CC_SLICE_WIDTH / 2); slice_start = std::min(f_min, f_max) + offset; + slice_trim = 0; + + /* + * ----||||---- 4M -> 2*3M = 6 + * AAABBB 4-6 = -2 -> -2/2 = -1 -> -1+1.5 = +0.5 + * + * ----1111222233334444---- + * AAAAaaaaAAAAbbbbBBBBbbbb + * + */ slices_max--; // For slices_counter slicing = true; @@ -267,12 +278,14 @@ void CloseCallView::on_range_changed() { portapack::display.fill_rectangle({0, 97, slice_trim, 4}, Color::orange()); portapack::display.fill_rectangle({240 - slice_trim, 97, slice_trim, 4}, Color::orange()); + set_dirty(); + slices_max = 0; slices_counter = 0; slicing = false; } - text_debug.set(to_string_dec_uint(slice_start)); + //text_debug.set(to_string_dec_uint(slice_start)); text_slices.set(to_string_dec_int(slices_max + 1)); slices_counter = 0; @@ -312,12 +325,22 @@ CloseCallView::CloseCallView( &button_exit } }); - static constexpr Style style_grey { - .font = font::fixed_8x16, - .background = Color::black(), - .foreground = Color::grey(), - }; - + uint8_t testbuffer[] = { 0xDE, 0x00, 0x02, + 0xCD, 0x00, 0x00, // Key 0000 = False + 0xC2, + 0xCD, 0x00, 0x01, // Key 0001 = True + 0xC3 + }; + + // DEBUG + bool debug_v; + MsgPack msgpack; + msgpack.msgpack_get(&testbuffer, sizeof(testbuffer), MsgPack::TestList, &debug_v); // MsgPack::FrequencyList + if (debug_v) + text_debug.set("OK!"); + else + text_debug.set("NOK"); + text_labels_a.set_style(&style_grey); text_labels_b.set_style(&style_grey); text_labels_c.set_style(&style_grey); diff --git a/firmware/application/ui_closecall.hpp b/firmware/application/ui_closecall.hpp index 49a557b8f..26746327f 100644 --- a/firmware/application/ui_closecall.hpp +++ b/firmware/application/ui_closecall.hpp @@ -20,17 +20,6 @@ * Boston, MA 02110-1301, USA. */ -/*#include "ui.hpp" -#include "ui_widget.hpp" -#include "ui_painter.hpp" -#include "ui_menu.hpp" -#include "ui_navigation.hpp" -#include "clock_manager.hpp" -#include "message.hpp" -#include "rf_path.hpp" -#include "volume.hpp" -#include "receiver_model.hpp"*/ - #include "receiver_model.hpp" #include "spectrum_color_lut.hpp" @@ -58,6 +47,17 @@ public: std::string title() const override { return "Close Call"; }; private: + const Style style_grey { // For labels and lost signal + .font = font::fixed_8x16, + .background = Color::black(), + .foreground = Color::grey(), + }; + + const Style style_locked { + .font = font::fixed_8x16, + .background = Color::black(), + .foreground = Color::green(), + }; Coord last_pos = 0; ChannelSpectrumFIFO* fifo { nullptr }; uint8_t detect_counter = 0, release_counter = 0; @@ -89,7 +89,7 @@ private: * | Min: Max: LNA VGA | * | 0000.0000 0000.0000 00 00 | * | Threshold: 000 | - * | Slices: 00 Rate: 000Hz | + * | Slices: 00 Rate: 00Hz | * | * */ @@ -103,7 +103,7 @@ private: }; Text text_labels_c { { 1 * 8, 3 * 16, 28 * 8, 16 }, - "Slices: Rate: Hz" + "Slices: Rate: Hz" }; NumberField field_threshold { @@ -133,8 +133,8 @@ private: "--" }; Text text_rate { - { 24 * 8, 3 * 16, 3 * 8, 16 }, - "---" + { 24 * 8, 3 * 16, 2 * 8, 16 }, + "--2" }; Text text_infos { diff --git a/firmware/application/ui_epar.cpp b/firmware/application/ui_epar.cpp index 70ea8f8e2..07d1982dc 100644 --- a/firmware/application/ui_epar.cpp +++ b/firmware/application/ui_epar.cpp @@ -96,6 +96,10 @@ void EPARView::journuit() { transmitter_model.enable(); } +void EPARView::on_tuning_frequency_changed(rf::Frequency f) { + receiver_model.set_tuning_frequency(f); +} + EPARView::EPARView( NavigationView& nav ) @@ -125,8 +129,10 @@ EPARView::EPARView( &options_group, &checkbox_ra, &checkbox_rb, + &excur, &text_freq, - &options_freq, + //&options_freq, + &field_frequency, &progressbar, &text_debug, &button_transmit, @@ -136,10 +142,31 @@ EPARView::EPARView( city_code.set_value(220); options_group.set_selected_index(3); // TP - options_freq.set_selected_index(6); // 5 ! DEBUG + //options_freq.set_selected_index(6); // 5 ! DEBUG checkbox_ra.set_value(true); checkbox_rb.set_value(true); + + excur.set_value(500); + shared_memory.excursion = 500; + excur.on_change = [this](int32_t v) { + (void)v; + shared_memory.excursion = excur.value(); + }; + + field_frequency.set_value(31387500); // 31.3805 receiver_model.tuning_frequency() + field_frequency.set_step(500); + field_frequency.on_change = [this](rf::Frequency f) { + this->on_tuning_frequency_changed(f); + }; + field_frequency.on_edit = [this, &nav]() { + // TODO: Provide separate modal method/scheme? + auto new_view = nav.push(receiver_model.tuning_frequency()); + new_view->on_changed = [this](rf::Frequency f) { + this->on_tuning_frequency_changed(f); + this->field_frequency.set_value(f); + }; + }; city_code.on_change = [this](int32_t v) { (void)v; @@ -189,7 +216,8 @@ EPARView::EPARView( shared_memory.transmit_done = false; memcpy(shared_memory.epardata, epar_bits, 13); - transmitter_model.set_tuning_frequency(epar_freqs[options_freq.selected_index()]); + transmitter_model.set_tuning_frequency(field_frequency.value()); + //transmitter_model.set_tuning_frequency(epar_freqs[options_freq.selected_index()]); txing = true; button_transmit.set_style(&style_cancel); diff --git a/firmware/application/ui_epar.hpp b/firmware/application/ui_epar.hpp index d9d5762fc..a3ce96e54 100644 --- a/firmware/application/ui_epar.hpp +++ b/firmware/application/ui_epar.hpp @@ -26,6 +26,7 @@ #include "ui_menu.hpp" #include "ui_navigation.hpp" #include "ui_font_fixed_8x16.hpp" +#include "ui_receiver.hpp" #include "clock_manager.hpp" #include "message.hpp" #include "rf_path.hpp" @@ -51,6 +52,7 @@ private: bool txing = false; const rf::Frequency epar_freqs[7] = { 31325000, 31387500, 31437500, 31475000, 31687500, 31975000, 88000000 }; char epar_bits[13]; + void on_tuning_frequency_changed(rf::Frequency f); /* |012345678901234567890123456789| * | Code ville: 000 | @@ -88,7 +90,10 @@ private: { 5 * 8, 4 * 16, 10 * 8, 16 }, "Frequence:" }; - OptionsField options_freq { + FrequencyField field_frequency { + { 16 * 8, 4 * 16 }, + }; + /*OptionsField options_freq { { 16 * 8, 4 * 16}, 7, { @@ -100,7 +105,7 @@ private: { "31.9750", 5 }, { "TEST 88", 6 } } - }; + };*/ Checkbox checkbox_ra { { 7 * 8, 6 * 16 }, @@ -113,6 +118,14 @@ private: "Relais 2" }; + NumberField excur { + { 12 * 8, 10 * 16 }, + 4, + { 0, 5000 }, + 20, + ' ' + }; + ProgressBar progressbar { { 2 * 8, 12 * 16, 26 * 8, 20 }, }; diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 5ea4446b5..4b9956205 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -35,6 +35,7 @@ #include "ui_handwrite.hpp" // DEBUG #include "ui_soundboard.hpp" // DEBUG +#include "ui_closecall.hpp" // DEBUG #include "analog_audio_app.hpp" #include "ais_app.hpp" @@ -263,6 +264,7 @@ SystemView::SystemView( navigation_view.push(); else //navigation_view.push(); + //navigation_view.push(); //navigation_view.push(debugtxt, 20); navigation_view.push(); } diff --git a/firmware/baseband-tx.bin b/firmware/baseband-tx.bin index b8c8e5b9be2e58288387be0b69675fe91fa97375..de0e480badd12a7fbda617d6bda5054097d2c500 100644 GIT binary patch delta 1877 zcmZuye^6A{6+Y*^UD&sP`|OIs0>kdUP+$>RK#FbCDUfv`T3iy-X^PG8D>kb&b&YHj znZhoOO;UeE%`q*)I0^ZuO_>;E>m(iAu10B1TN}yL7HC>Qnyi_P_N|85Co7NMS4qeI zcr)L7_uPBF@1A$&yK{qkx!_*T(bUvv<={XA!1`x=Tc6tY3`l!s9hwG@(Xu~Gj$;LHw(3oec7`>O*K)*ER=jV(<R)A}1LR-s!TUmE%X2vWVb-Hy=tFZpnyS>Xn1RcP>A~hjc@3E}-^4G3&SfHp!!))k zfy1G2)*dYWTGHwk!&=))KbAd%!zu2?#E9zoG+4t}N%pPNxxt2VAGKKGCR0)zYIgH6 zBU+iNfm(95rupYAjr7jBm}?-n_uwo%uEKx#fjlnP0t>@w55djZ&-Ct%N(R zD3{M$Hd#EKcChK)DEHHr-14gB^Y<_1et%wIxhtfO4lN(7N_d)i=g}_%^gY0=Pz~@Z zi!amztfRBJ4`E8koHvG?TtOB~ZptT$_Ft51vET=xRr%{Vv!LJr-#?`QWV^Y6Y!}Kv zJ8e&!&oBPxJjkPT+g8bZQED#^+`sr)e>Qrd1mx2}txqR6j(BpsrPsOrKOE-gt~{!9 zFLQJB%Jmcb3~`+S3Up0EAGt>+&^69r z?C@}itHnh)lXd?Sr}(B0#s?K)U!kKHDw2n%zhs?@^CmO9yS8kEJ2VyVS_7mP4#S zr?K+4?5!q>)F!u@m|OfY)2(iYBhn<&MFplc&SzTC&oiwrsW5;`=Hr?9Kra6uwQCES z+Ns6%p6cjXRvFS%6e4{qLG&@x1E_T&U%^Y5rQX3lp}*F9&KvZmxpFK*Nh9XBnh_n?0)H2BR^rw<{a5i*owHfhsdZTm|zCmN9&!&FowzkhY z@~n~YMcTb)NV<^J#nVB*A?3mFHL*rboEf#UD`s#tyEz!nGW1ey**{F4WaG_;?OLw! zK{e4pUv=iOQ~Q{+g%gtWE9c6xM;J{jQ0pGLHGkZBTN`W7-T2dg$7*5?@#VV;E}w=- ztH#rE8Ws{4S-j((c#Or*(6RETQ+fk|-rhiHWyOejS*-+cq<~#->^oQxT3IFO3@nT@ cAmN5;<5>s5IKzx1RJY+o^%0*_{O>#RpR_E(Z~y=R delta 2003 zcmZWqe{fS(7Cz@DY4g$_c_kK_(9)O0(k7)gEikaIe*{QhOPLx#oN>h+AeGtR`lD!r ztWMi>Wu=Nr;{}CA$Hie5R@SvNI^fcnA~FNBi?qu)OC5w*v_Z1Wz6eYnO?lb-q}^e6 z@637coO{pr-S3_`@7>@w65K|dD_6D%1O}S`8n(7=e0I}Q8=r39@T36%{`8SkXjoYC z&L#5Lyq#OlT{!FDpTDwj^A7C+cXd`H*-)P^)qcoti6Tubf(=}^KY6jaHj}`+z$ZUw2%f&>n zLI0+&LN~48teVLT(r(U#P4t(X72~vvE5?;{H)k(CkwLqCJs-WB;1PO;v*Q7pVuUPpSBpR?D-7y+vw|tGGp_xyK!6Tr-t(K`Ntr3_iS)V4z4I!Po#Tk+7Q5A z`c&Spa6kPj@2swut?#FQ%zqB|N6HFn2@cT~<3oh6qwgE%vi(mR(_F9)U>CDCdYV6= z8)n`h4HS8CP2^g2k4J{Zz@M)i*holCk06zSp6u8)KvTtJ{UPsjD#KgYCFI|OmBBrvFNQC*+Vkynh-crv+ODz_>5t&uqKulH{!v0|+b6JI<+la&;uneOXl#RCj3(^P zIZV%30EEjv6hBVn_DBCoc0{j8JB3bGBY}AGtH{lZt4m_&TGg>HV2FV*G_Xxx(B%@g zTn>Qk&4jOWfwN|qCG!}9=|bD%LcCQa z>tQ-o*oJ9JV3cvPR}&_lFO!6D&K2j$PwT!;5}k(3OQJCO2dSx zYalKDKQaHft%}*7^>ymP_a=stg{TRAoq*Wy*%t<&EZs8`c-5O8ZH*9Pex$Kt2bPRa z;vTMViT{K@=+E=aws6(C=aqDFl3tzra`6GSsHEGKBaCgDsh|F?GKPdURDF+sq16sE zMrng%q4~`WYX_HlSav|( zq8&A}a5vpu^HT0Zx72+ET7I7$x6ozx9kTalw5fd1HRmjkUg6zJ`rxsZ?1~$i$8IiW zDQ1UhQSHBsi!v=guC}SUhUH4yMUAd9_0Qp2M^Y2?4cE-tZ49OgRLh7WurB!SsOqcZ zPJH1%v67xi&$%{NLK9;t|oFR*F3qPYN8W_5IA`65Hg$@r=PimD?sn*Y3r|KA(>-^_CAumAu6 diff --git a/firmware/baseband-tx/proc_epar.cpp b/firmware/baseband-tx/proc_epar.cpp index d186228f1..124ef078b 100644 --- a/firmware/baseband-tx/proc_epar.cpp +++ b/firmware/baseband-tx/proc_epar.cpp @@ -78,7 +78,7 @@ void EPARProcessor::execute(const buffer_c8_t& buffer) { } else { current_tu++; } - sample = 0; + sample = -127; } sample_count = 0; @@ -91,7 +91,7 @@ void EPARProcessor::execute(const buffer_c8_t& buffer) { } //FM - frq = sample * 1000; // ~25kHz wide + frq = sample * shared_memory.excursion; // 500=~3kHz wide phase = (phase + frq); sphase = phase + (256<<16); diff --git a/firmware/baseband-tx/proc_epar.hpp b/firmware/baseband-tx/proc_epar.hpp index d1b060d03..257f6de40 100644 --- a/firmware/baseband-tx/proc_epar.hpp +++ b/firmware/baseband-tx/proc_epar.hpp @@ -49,9 +49,9 @@ public: void execute(const buffer_c8_t& buffer) override; private: - const uint8_t bitdef[2][3] = { - {0, 255, 255}, - {0, 0, 255} + const int8_t bitdef[2][3] = { + {-127, 127, 127}, + {-127, -127, 127} }; int8_t re, im; uint8_t s; diff --git a/firmware/common/modules.h b/firmware/common/modules.h index dfb335a0b..ebee39f4c 100644 --- a/firmware/common/modules.h +++ b/firmware/common/modules.h @@ -1,2 +1,2 @@ const char md5_baseband[16] = {0x07,0xff,0xf6,0x7f,0x06,0x02,0xd1,0xd7,0x67,0x8f,0x67,0xdc,0xe8,0x36,0xa9,0xc0,}; -const char md5_baseband_tx[16] = {0xac,0xaf,0x2a,0x20,0x45,0x35,0x18,0x9c,0xdf,0x02,0x5c,0x2c,0x8f,0x76,0xd3,0xdc,}; +const char md5_baseband_tx[16] = {0x72,0xf5,0x35,0x17,0x37,0x57,0xd7,0x28,0x5f,0xc5,0x8a,0xc0,0x0b,0x71,0xd4,0xd1,}; diff --git a/firmware/common/msgpack.cpp b/firmware/common/msgpack.cpp new file mode 100644 index 000000000..93b9e1e56 --- /dev/null +++ b/firmware/common/msgpack.cpp @@ -0,0 +1,211 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * 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, 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; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "msgpack.hpp" + +#include + +bool MsgPack::get_bool(const void * buffer, const bool inc, bool * value) { + uint8_t v; + + if (seek_ptr >= buffer_size) return false; // End of buffer + + v = ((uint8_t*)buffer)[seek_ptr]; + if (v == MSGPACK_FALSE) + *value = false; + else if (v == MSGPACK_TRUE) + *value = true; + else + return false; // Not a bool + + if (inc) seek_ptr++; + return true; +} + +bool MsgPack::get_raw_byte(const void * buffer, const bool inc, uint8_t * byte) { + if (seek_ptr >= buffer_size) return false; // End of buffer + *byte = ((uint8_t*)buffer)[seek_ptr]; + if (inc) seek_ptr++; + return true; +} + +bool MsgPack::get_raw_word(const void * buffer, const bool inc, uint16_t * word) { + if ((seek_ptr + 1) >= buffer_size) return false; // End of buffer + *word = (((uint8_t*)buffer)[seek_ptr] << 8) | ((uint8_t*)buffer)[seek_ptr + 1]; + if (inc) seek_ptr += 2; + return true; +} + +bool MsgPack::get_u16(const void * buffer, const bool inc, uint16_t * value) { + uint8_t byte; + + if ((seek_ptr + 1) >= buffer_size) return false; // End of buffer + if ((get_raw_byte(buffer, true, &byte)) && (byte != MSGPACK_TYPE_U16)) return false; // Value isn't a u16 + *value = (((uint8_t*)buffer)[seek_ptr] << 8) | ((uint8_t*)buffer)[seek_ptr + 1]; + if (inc) seek_ptr += 2; + return true; +} + +bool MsgPack::get_s32(const void * buffer, const bool inc, int32_t * value) { + uint8_t byte; + + if ((seek_ptr + 3) >= buffer_size) return false; // End of buffer + if ((get_raw_byte(buffer, true, &byte)) && (byte != MSGPACK_TYPE_S32)) return false; // Value isn't a s32 + *value = (((uint8_t*)buffer)[seek_ptr] << 24) | (((uint8_t*)buffer)[seek_ptr + 1] << 16) | + (((uint8_t*)buffer)[seek_ptr + 2] << 8) | ((uint8_t*)buffer)[seek_ptr + 3]; + if (inc) seek_ptr += 4; + return true; +} + +bool MsgPack::get_s64(const void * buffer, const bool inc, int64_t * value) { + uint8_t byte; + + if ((seek_ptr + 3) >= buffer_size) return false; // End of buffer + if ((get_raw_byte(buffer, true, &byte)) && (byte != MSGPACK_TYPE_S64)) return false; // Value isn't a s64 + *value = ((int64_t)((uint8_t*)buffer)[seek_ptr] << 56) | ((int64_t)((uint8_t*)buffer)[seek_ptr + 1] << 48) | + ((int64_t)((uint8_t*)buffer)[seek_ptr + 2] << 40) | ((int64_t)((uint8_t*)buffer)[seek_ptr + 3] << 32) | + (((uint8_t*)buffer)[seek_ptr + 4] << 24) | (((uint8_t*)buffer)[seek_ptr + 5] << 16) | + (((uint8_t*)buffer)[seek_ptr + 6] << 8) | ((uint8_t*)buffer)[seek_ptr + 7]; + if (inc) seek_ptr += 8; + return true; +} + +bool MsgPack::get_chars(const void * buffer, const bool inc, char * value) { + size_t length; + uint8_t byte; + + // Todo: Set max length ! + if ((seek_ptr + 3) >= buffer_size) return false; // End of buffer + if ((get_raw_byte(buffer, true, &byte)) && (byte != MSGPACK_TYPE_STR8) + && (byte != MSGPACK_TYPE_STR16)) return false; // Value isn't a str8 or str16 + + if (byte == MSGPACK_TYPE_STR8) { + if (!get_raw_byte(buffer, true, (uint8_t*)&length)) return false; // Couldn't get str8 length + } else { + if (!get_raw_word(buffer, true, (uint16_t*)&length)) return false; // Couldn't get str16 length + } + + memcpy(value, ((uint8_t*)buffer), length); + + if (inc) seek_ptr += length; + return true; +} + +bool MsgPack::init_search(const void * buffer, const size_t size) { + uint8_t byte; + uint16_t map_size; // Unused for now + + if (!size) return false; + buffer_size = size; + seek_ptr = 0; + if ((get_raw_byte(buffer, true, &byte)) && (byte != MSGPACK_TYPE_MAP16)) return false; // First record isn't a map16 + if (!get_raw_word(buffer, true, &map_size)) return false; // Couldn't get map16 size + + return true; +} + +bool MsgPack::skip(const void * buffer) { + uint8_t byte; + size_t length; + + if (!get_raw_byte(buffer, true, &byte)) return false; // Couldn't get type + + switch (byte) { + case MSGPACK_FALSE: + case MSGPACK_TRUE: + return true; // Already skipped by get_raw_byte + break; + case MSGPACK_TYPE_U16: + seek_ptr += 2; + break; + case MSGPACK_TYPE_S32: + seek_ptr += 4; + break; + case MSGPACK_TYPE_S64: + seek_ptr += 8; + break; + + case MSGPACK_TYPE_STR8: + if (!get_raw_byte(buffer, true, (uint8_t*)&length)) return false; // Couldn't get str8 length + seek_ptr += length; + break; + case MSGPACK_TYPE_STR16: + if (!get_raw_word(buffer, true, (uint16_t*)&length)) return false; // Couldn't get str16 length + seek_ptr += length; + break; + + default: + return false; // Type unsupported + } + + return true; +} + +bool MsgPack::search_key(const void * buffer, const MsgPack::RecID record_id) { + uint8_t byte; + uint16_t key; + + while (get_raw_byte(buffer, true, &byte)) { + if (byte == MSGPACK_TYPE_U16) { + if (!get_u16(buffer, true, &key)) return false; // Couldn't get key + if (key == record_id) return true; // Found record + if (!skip(buffer)) return false; // Can't skip to next key + } else { + return false; // Key wasn't a U16 + } + }; + return false; +} + +bool MsgPack::msgpack_get(const void * buffer, const size_t size, const MsgPack::RecID record_id, bool * value) { + init_search(buffer, size); + if (!search_key(buffer, record_id)) return false; // Record not found + *value = true; + return true; + if (!get_bool(buffer, false, value)) return false; // Value isn't a bool + + return true; +} + +bool MsgPack::msgpack_get(const void * buffer, size_t size, RecID record_id, int32_t * value) { + init_search(buffer, size); + if (!search_key(buffer, record_id)) return false; // Record not found + if (!get_s32(buffer, false, value)) return false; // Value isn't a s32 + + return true; +} + +bool MsgPack::msgpack_get(const void * buffer, size_t size, RecID record_id, int64_t * value) { + init_search(buffer, size); + if (!search_key(buffer, record_id)) return false; // Record not found + if (!get_s64(buffer, false, value)) return false; // Value isn't a s64 + + return true; +} + +bool MsgPack::msgpack_get(const void * buffer, size_t size, RecID record_id, char * value) { + init_search(buffer, size); + if (!search_key(buffer, record_id)) return false; // Record not found + if (!get_chars(buffer, false, value)) return false; // Value isn't a char array + + return true; +} diff --git a/firmware/common/msgpack.hpp b/firmware/common/msgpack.hpp new file mode 100644 index 000000000..ae8a3ed11 --- /dev/null +++ b/firmware/common/msgpack.hpp @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * 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, 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; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __MSGPACK_H__ +#define __MSGPACK_H__ + +#include "ui.hpp" +#include + +#define MSGPACK_TYPE_U16 0xcd +#define MSGPACK_TYPE_U32 0xce +#define MSGPACK_TYPE_S32 0xd2 +#define MSGPACK_TYPE_S64 0xd3 +#define MSGPACK_TYPE_STR8 0xd9 +#define MSGPACK_TYPE_STR16 0xda + +#define MSGPACK_TYPE_MAP16 0xde + +#define MSGPACK_FALSE 0xc2 +#define MSGPACK_TRUE 0xc3 + +class MsgPack { +public: + + enum RecID { + FrequencyList = 0, + TestList = 1 + }; + + bool msgpack_get(const void * buffer, const size_t size, const MsgPack::RecID record_id, bool * value); + bool msgpack_get(const void * buffer, const size_t size, const RecID record_id, int32_t * value); + bool msgpack_get(const void * buffer, const size_t size, const RecID record_id, int64_t * value); + bool msgpack_get(const void * buffer, const size_t size, const RecID record_id, char * value); + +private: + bool get_raw_byte(const void * buffer, const bool inc, uint8_t * byte); + bool get_raw_word(const void * buffer, const bool inc, uint16_t * word); + bool get_bool(const void * buffer, const bool inc, bool * value); + bool get_u16(const void * buffer, const bool inc, uint16_t * value); + bool get_s32(const void * buffer, const bool inc, int32_t * value); + bool get_s64(const void * buffer, const bool inc, int64_t * value); + bool get_chars(const void * buffer, const bool inc, char * value); + + bool init_search(const void * buffer, const size_t size); + bool search_key(const void * buffer, const RecID record_id); + bool skip(const void * buffer); + + size_t seek_ptr = 0; + size_t buffer_size; +}; + +#endif diff --git a/firmware/common/portapack_shared_memory.hpp b/firmware/common/portapack_shared_memory.hpp index 26492d7c7..acc2881ab 100644 --- a/firmware/common/portapack_shared_memory.hpp +++ b/firmware/common/portapack_shared_memory.hpp @@ -68,6 +68,7 @@ struct SharedMemory { char xylosdata[21]; char epardata[13]; + int32_t excursion; bool transmit_done; }; diff --git a/firmware/common/ui_widget.hpp b/firmware/common/ui_widget.hpp index 0ba7185d6..d9602f52c 100644 --- a/firmware/common/ui_widget.hpp +++ b/firmware/common/ui_widget.hpp @@ -215,7 +215,6 @@ public: ProgressBar(Rect parent_rect); void set_value(const uint16_t value); - uint16_t value() const; void paint(Painter& painter) override; @@ -230,7 +229,6 @@ public: Checkbox(Point parent_pos, size_t length, std::string text); void set_text(const std::string value); - void set_style(const Style* new_style); std::string text() const; void set_value(const bool value); bool value() const; diff --git a/firmware/portapack-h1-firmware.bin b/firmware/portapack-h1-firmware.bin index b3d7bdade480170e8958c604d776dcd3acda4012..847e83ff6b22ef6b8dda5d2385e4d796bd44c334 100644 GIT binary patch delta 65555 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ⅅ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 NJ2|k@fB!cE_rH0o5vTwF delta 45766 zcmeFad3038);C<|bakgQcjnFj_5dLe#7@Ex0Wl=8NoYktt`{flBn-`H5X6W|H;9N{ z^#To41_uU*AgBR_I013ES472t!)0)Ypn@006Q;2Yx|NMHbIyLRu zwQE<^u3fw8oZfdV=hUGb&vId{NZs>ALRM?K-2AHuSqitByY93ee>DAL+V<}JsuV)L zPyJ(FPnrJ%-~E@0{tpWMUo11|uau7lM<&4WU+vDvTSV!6Sd@|@qEr`QHbFEd1pT74 z8gT~qa)jM1hryhK_bIpL~yZFHrS z-6qLX>y6uXOX?Lwm#%2DlSs7@lUNiN1)C;tDoE6o;}7QCv(#DKo;RXvFeNBE76^E2W1f`RIuHG22Q5pQqlC zcD*8>Wp8W5tHn1e*hP(KNi^BiCK4k3+fStBtREF0)@?+$Zqu+GRD7!^e79CC5z^Uf zTJg8|iyW8OgG zJ8*4qww@YMvDT68N_mq%t=p+XJ2uNHN@;(BFR`%~qQu@>Q3?eGCg{Z!vBJi_MG{)u z5nQhqQ^oN%maZ2~Mp1e{C|Ipd!|uy#oNQy`x^iC(lE36SZES^J%muQQLDr%db3~Vo z9nh=jT|p-Clv*20h!(SwMQQBYmt(H8vEk8TjzyG;-X?o5&+&A(Qg9g2rao`8x@d8s zxXQ-PM2pkK=WOie81aB^6`&A)DOS8S>p~=NrrEyxRBeeO%kPlAoRRvHxRU2=t-a&K zRYGb>Sdq_!Q@8KDu+42dWUWx-j0k%#UL32N8ByeZVV0aA4%fB;rI}4g5VM8v+1vy% zqxY9#)2!xF-@ycvBL5cFRCHDG(r#XXp@3~l5G@(&!WU0E3%Z8Fa7XPQRdZ!F0mj<}{0%!ukPWU|-pCf3c)3nwW6K0uLA)T-N2m!s8)RpbM4Nua9tn&ZZD0eEMN_({XgbQ!+@vGaZgP=4 z-$6yzE6kZJ4iq}s6UpKb;ot22WU)wihsiv)kzJW0_Dg93fc4& z@de>s7N08KlPpL#ME-SJFUFtN60=K?>=Cv$RV*)gJNV;C-cJ2aMgCi$r&)5Cv1V;&4iThrp-JXu zXP%u%M*?hInwXn1H@ME%$9AKn*hv2Ag97;W0ed7(9F|h&x6aIWib(JVtTVsHpnHTJ zOcQ&F&H$6r#D#I|{5>>H_Ose_@%ofXe-|x^yxh;nazx(1K1&zp##E(2j>B~nGJA%2 zQG`FrD2^JOcucer2{KKHb!1PrI*Ikh^Q8KO(^^&S-0U>j4H!Kv*9TxcO?Ef%~T zfy4s??d86>`x8G%JkaIVpGqWU7nNbl;iu*j>s`~%OwXT@2LvO5pnqUwH{!Jz!&Yai zwWfw6Cnn!+17zdM5rph3gD@CINIO&<-xxw%NbCN&RX@h19iVM*!vxT{j=79uYRA;> z)Xa>xSGpQXseNGk`>waQ8^@-&%FdIr6m-kUaQfIozSP39^PZab;1j90(&6HxietFV zRX=8?i+5a^(&2PrQpIAXY9o9aycCX7OIo{2=H~bEo{A!d!OQW4STn_xKuVW9^`|~$ zC4I$JZikEHSGV&q`Q5LDvkGr~sAZ*{^u6)?;`_>Gu9*4$xkpN)PA?M={YnmO%Kh|Eht@Z*hgC0e0|zdq>@D1>7)r4_AN=> zYqc-1$DY29mQ^jSYV+l6i1np8t7{MYs7)BMwRGFzhh_;y4^?YgcAt{|*%huucSK4} zMeL;+VwPTzsGmzRnW=|ozxlsA5lWAC`neZ+I+ui`)S7e2k^WBYf% zzVq0#a1Xaod!jwMGc`K4lg5(1oA1}>FF1m=V!<&VF>RjdEv@|=B_pf85JVN229mITm!Nw|H`1_e8|8MPH zS8Vx-D)78aclsgC=it&2A0gIRGtM-teB&G^K~d6_YdSqk05|%;xks+oon9*FPCp*^ z6yOiSZ34gb;P=YKzw=uFzeVudO$|@`^d|Fy>IMJtkv3CJ-0ACxwfX~JpN=?RnxVAz zei!HJ6Nj}eyMGb?!FhUX&ZY$?X1;#%)*S1Do2tH_$;l=8TMmA%65D(d@d<_kecj5} z^cVg$Q7EQ``q~oAfES!AO@_dIibs6Ph%QJU!DcHf5Fz zlF`QnEil?*iuU6fkz1AVn6u0M-Hmf&K=^*@qUHZPDVG0*6e4}C{E-wQeXjhOl)FL7 z07bsmf6vKxPbX+J-ecYVnv<9@>QXQs0*w$iL|dekHO~-xyC*4soGp7ie75jeLi#>} znUP>`z41HW51XF-we_)lJH*EQV>^z|wBEDh!ZP=bN7h2#AAgYapU^H2xV@bZ`Hc@A zzehMdS}>Q#lqcQ)eRXV5=+xU!R8`M1*NEjJhV^@0!@492!#c`++Cx@#kL&9HmvOB( zL5vtSEw*FjESmq0L}pY#c)yD_9+Dm5OlJg6VA{qXm*ghF1a2pr1`*d0d`&;oFJEy@GARgB$OO*-K1q zJFu$ROp8w3Lo91fRxcSm;L3Ku8iduth3_WoJ4Jmx}gmf!-#r)^wxiXavht zQ%4O)wi0CWSy9!4k^p6g*q~_=%MY9u#pnT!!=jpBy+mx4|A z-8C}=pXlkP?y|YTg_E#){a%bFfzJ?ewV|AL77Ie-%DtcZ^d2lE(h3kSHgd?a@=U~+ zs5?@iHpLWvgl9zV6{)aCL?G}No> zG-~$Q6WpD~geW8>X}LAufF(Tf8i)z$2 z9D-oaFV|l1O!WHWY#$?4UzaVCP9b3_xH-^gu*DT}*yNQ$(fj9OHHWg^I~ObNxKMIe zGg5U&LB_=NLUB!U9U0(uwC9%(cL9;%#`6K^ql5&7b6I?z)&jAi4RbXH^AvM-+-giy zT|><2ClkI!DAvgrq2W%x3~3wrLS%40fhAwl$R}!2Ems3*W7ndjx24n;y2R7vMD(Q^ z%4!$5gu$CjqmMNBh}+gXf7M~3sHc5zoQ%J;FcnlruZebPp(qL$mQFN4YtCF~unB7- z@=qb5KDu$V>wT98i&S=2bbb_8gVQ0gQLv`e^0u!%DKyo)vRyr6UW3Jer)1i1b49xZ zn=nFCvVW4$;9lvfbUl<)(c4%On-!J6a&OEUp)uO~)ZX_YL1VnhE9#Mu9zaPGa|nT@*?uWNGrw_m$ZCLwOsrAC^BG= zNu;N+u{B(?np*jwmlEa~z+eV*VFKRA$YIuJV zbInZ~Cl&7|d%HyV9F9oE)1~m-tSUTwcvAbrEs6H#ao_oxcYOEji%@r7e2nz1>8P1o zb}>>&%-+)FzHx@BN1*7~1aFVLfjGkstfqafZ=y}X&|cvomg;E~8q21+$6%7$JneD~ z=7f7LS6{F)sD1ti73Kl1!hC|U)1|^Znea@HsGt77t1w*}%yQrLhULB+OweLFHcU@| z7IR|S2R>(8!ev@aJl3CaHn%>X9lkXOEirALy8~)W^)ycTizk0qakw~M>ziP*%=ld- zzZLwSL~=gH(e5B%Z9*fa0hR)xXgOjjb<0(5xX&+sRcOkzs504VnSr_L<{}xIz#5Lw z#swIJmVsODqVvZ9-Fl##Xq$3L5cdp8uAlUX;U4|uk23hZ(?ZN!ol%MPd-r2Ba*?)X zujoB%7a{cKsCvpoyTN(*&ovTkpvB)7YqEEA-hag_L14>g?35e3a0ixFL-3Ov1yKtLI4WB1; zL#DkEbEFibdtp#e35q$b2SIcHLQtGa(2)@5&B33zla)Lp)WUH-oL6dSeM*v~V>rJ!)N|MJ1bmEg1iT8xEtezw9TItRSt z*LH8;Ib(_Rx}QrBbb~3qd)2(j&pXT%WQLirS%zT%yL`KDK)X31%r#G3n;Vf^g0wS^ zXvgX*cb_uA*wOss7u;2}6Ct5gsOl3s2u`6oDUIq?s z8$=A!l|T&UvXS$}ahiw>W72#v!?v9B5Xrnw!A`KM|L_J6^Iuo|>r3&7oc<6fHp*4q{1+<1@=nB`x-9-O;?3Q0wrY`RV$vefF#gQocrtED6!|d_MW{zlw#G-3 zW1FK%WqAxaeJb`W@^tkYPeEWWkxa|2xPfgriM36o9LO zyDa~A6twk+1-iKI3g=r1dABbPQ{W$j-~Ia?TAz@Vi^|{%;F64N*L`APeCGhrn2$Id zVH0X~DXeaZSj7al_!~31#rFUI@qdX2&4z8S4lrFe#Q4;A;_U-=HHv7OjVrsvi zn3ldH^o$nOH|&hLKBm${u8^uD(N+`LT&1tfv0WkE7D=`0#@5v6kk?0AtKujIj)TvO zWax_`;kXJE0S8#A*QWx;EG_ekYWZZ8H%s^X^@!EfB)Th$5nbrl^fi&b)8Z>9AvV`< zB0o-#t*k|OhTlq77WH!K$40AF-5IFeU5kn|%_7mkMZ?{+SS0cAd8M%6{-FW2I}O(x zR00kuF{tDDssxpQj}=Z%P0h8jDghrTy!vRh`aO!qsvmn|x?ZiYA1Vx?LS7lKbnuqn zE9_$qBMz#ITsGgJ1dF3S%*cFs!7|#1Si{I$ZJ~*g#5v3Cob>w!Dl-%BWAcbzy zh@RV9@6MnDGsIdS+c1c_#C`i)W3HlK31Zvr?6{3C5ywwq)dh5g(Ig#;aD1m05YsPk z?LZ^JXYB>lm~4{X`a|x~+u49Z+B@AOZHjcAPyJr%OYK;Q@`i^a65aZ zE3f)5<$k`MecP2+`j>KNZfCuV=s-|uj#ynnk=0qf%doqL)^oSB>LQwlT!H6~_+zf` zcD4z*hU4MO+ZVo_9WA0J)BZoCYVPQ2wPB}-b1swgc9>-irgw{mJJ^$h={Q|4_0zZGlmV3uOKLu|f-eN{}yimixWO;;rB z0}i^7n7)Gl(;aNr)hLrZg$)=^mx;Ag*ek>7MBS1pB6)HO(~Y1jbZrQKHHEDiK^N=J zARL*(l1EazxZzHA>qxpQ=9N1|vK#Keoh<7b+NkS9SmR`GU4uGjIhk%09V&XAt)oU! zov8cHDUvfzHns!}FjcV~CG=)-{0tT|n(okzuM)`}RqVadbd>IOgg>cbx>6tVih~$+TRyu}O>-Hl2aSeNE482u% z1mT~6w1N&0FVwK174#XMFjXWeQ`u3TR$Ie#l_0Jk(gsgu<0|P;T^YhRPGyf(g18oh zcTZ*FSZddOg79I$jHQEgKOua6DqA*|4%g9XIDekT-WyAoB*aV?NfsOwG!mG`#yL<2 zo6Z(H(5NlbTh}{idW_f^Vz2xS>~8}Q@6I2mx6ZqnW(i`<4EEUH>3iHCH<`AJ#X)Ae zg{~ECGg^1uLPaWWn9=&y9keh`w_yeZ=#190GwGoC-dBW7gb&c-`mTA7jTcemUm!tp zq@)lVbuWEVJm_Nw?gi)S8rV zw(J4AC?UnK?}%~~lgwI;)Ys2+4^oqUxi6+7NBYRe1|cSP_}KUdX+>O$bW|Y?VzWki zA;_M4kUlwRPf(B3{T_*q^VvD^BwBhqKzm2GYh3+F)2#Y2Bu{hDL{g<@A9F6Dlf-pF zwrdHs7#CcEI(8Y9)5oMG^sQ78oa~R~;K!=I)rF*wt(W8vusv>CD!v+Eq6brQLWqs? zP@9Cw4Ok{RTx`HYw0GY4Sy+qE zsU`4Nr9#8){uy@0gK?jP1!;dklq!O(_96OG+$P`M+4tezMK9@TAIn`%?S1a^4Iq6h z)6pFZ5$aQ!htOTVjy?|xhZ*3w^mrJ{I zLW<%6^=)v5*&=bmPsJkG(-LK;1~)DCv3?KJq?{C=nG}-Zf?lXFUJZK+G%sI;n9j#0 zJxu!;bELCMA?dYcd~=TUt8&$rLQ;*;DTS?i7_)0oz}=$kcA^^3YdN&?N1wntdx5ljuk-&yaKbc${R5OmCD%U03>I@28V zz-+dIhe=oXI1jf0re!uueiUH|VZ$6&`Y5^@<(_;L0uN>OJPMrfzvVt)BiuL4Y3=*5mD2N;VY~C9BL29}`-ej=qEt*&Q6IXdrZI0B-&+J}0E7t??@o-MK z4!AbBb~qbc30w=@syVG+d1;JbyVfVQ`9L+;XTCq$3e9}|2Jm7? z$d2>LJV=`HK4w@4F<0ti1J_}c_V=+V>mZ{|e`o90(ShQwQ0oWl=<7ls+uwV{lpeQc zrUs($+^#-f2@$gnu~`xJ6obI9hs-VxV+ojDQ5C|~j?!C3iv>g~jj&%B9X{}#zz9-Q z7S(Pd!wIhcNFM|+Af%0f0XUM0M!7j*N^}hz|8IUav7QbsI0ntfm_|&7odOY%ek^3z zJ@~Ttxj)5Y*_-vWK-?c-ztmHUp(QM+1U?tkqVVVd>)k-ti(iJ>t_EtkVk?mE!}K!j ze0K*&o_z_K2C=wSxq%)N*p8>^@EGS@@Sr5IM4H1cK20YNst9Z=y>PG=LR>-*@L%mt zPhZ{jQI21QAIE=W3dnyCXmP0h`|%lihw+7QPD$?(n@a}FX)GHs zm80+g`IB?mt_2~_>;hX5L zbXn0^OlA=+K8uh+4gIPx-DY~&I5~KQwX3nS(AZgMY*^U3f< zImBi((_w=Q0d6?c<t72wU3#fG%u3#%mXSXN2N{J` ziFvU{aB{l^8jN&>z(x5^AKURZX2)w`HsBqoN3{{F8CU4)&&#tTY}Px}6ek9HRbG&9 z3}29c^s)8tpi5WX)q3_FTCWj@E9~($S}|})aB=p0s05jkt@{p64DR4uLuU7WdbBL3 zE5Gj0UnN543CT|X`giG?L6N{F$8d7OSU`-p>4^pho^=$EpT^Uo4x`qRDV+&Cg?NXt z0^w5u*7h#V9k?yfpR9M36m%F3NPQkLuVXx7iHJRe*lNc<%bkd4N-V&V-=hQcTY_=T zMrlQemA^-G^=s7FT_JY&d$f=K0X23@h&{verm3;g5c`CeOAYaI{X;DB9?dGvkYW@a zNwuU7joT8v>J?|E6oYl7Kbhw=NNGxRJxm|%84^*(RuYpe{}OrHdW>|8Cwar$iTS#* znNoIu-TFRl%zZl0$C1$Z{p9206B}t!!s_oQ$2B9oI*2P`CXxcBw9Rf?$g)15S>q%O z%~CBP<#2Ym6>#g}o`>7NKqSxUa3u%+Z*Xz2^d&45$(3*=(+FwCB>RcNkTQsvM(=`! zY!_Sh0kyeh`Dx!wyNLwl%7Durly!le>$$*d^k+NBdW|>RA$mWt-bPMOCi!A}D(3#f z-S7n}{271B^#UvsDOeVgrDuc0oHRBcDweQ@tQOZLOS%w-EJ>DLf})x%eHV1^*29#u z^lg}Rc7huBJ;byDN~Y^xSXyu(bP$Qnd?tRqL`!Njh!M93^+l9uoEa6#k~4UUv(Xro zvjeF&q&j{apM#-clzs^uL;8>7lN>zuW594J=exiGH78EZIUI;}bj-9myE^A1>=H)t zrOyT)@k;sDh4bw^_{e$rI9$*6h;;wDwkWS-3z8vi39~c*qAvGB2&k^?T5O_->uQ@~ zGe{o=r<%{p7yTi5IhKI!YT8~k?H8my7I@5Jb*&-wMuYTvFeGmZym=`;IPi%Y)~dNz zatYopT6>j!cL~C(rctCdTdbMgXjTV_m{%5(uk$-yQPRXnEhJ5jwv^dEq{;3@p+5>2 zqx8*X!Ugle-z8j((#*i0g$v)9t!SZ`sGI%k!Or^9sDta##UVK*(8m>1*)mw$VMJ~m zVtT|}xb?9|;iJkR?f1LvM(IPhUkAMxS_WACC|vE%Ubud}zC}l(Aw&gCtgjS4P{0VE z1!u-rptt)5uE3z;lj^+Oiu;oS(O776hEx@pYUxSe8pr_5dHKbF&6-4FnyDp2nh>B3 z9OF(UsgnEKm6(Q6Jn*t2Y%w(BhAnPU8n)byK6=1!K>B_D7(5sGDV_`b=`DOrsDrRH zkr?_BGS$nL?4u^j8-AG4D-zN3Wg#t=`4L2Dh?bs+h+Bkuab1)|LaYsN!-I0Jk2VdM zEjH6N`8C?6S+likX4eGd(@K;&pE>S#FiwNu5Qd3<)x;M=M_IpzuY3nk) zitG=kH3#Icfc%TddaI%G7`dXuaF0mVU{t>dw;k?HxccFQd(Dp{+A^>O zh0Vtnkmo`k@;O?;VEtC*uEu#5NGWME2IPN-S?U2g&^;#HWbJoD6QnJdy%~}_@)%%# zQey$RI2^!Y(UUhnav1aXHu9EqT7W97W3`QJ0DGA+WXcS<5@3Vttnpsz-8nN$lmS#5Vg`j z5?j(v`{eBLC4#$7)K?7`>oV+ozslj#R3}RFeQZxV9hkceB8zTu;igMK&IyT4x<;K> zT%&1I-;UG=T`ZDOU2joMlndtiiSQoJ@PWY6N4K6n7AYGaF4y?vK zD@>g02A2*Z(n4rOl5|zr=E{dL&O-Fk&sdKRQX~Dq2PHG+Lz>HMhiLMEd0{SDlcZ#D zF-aN|*0$KX1sq>taW>*|xJ01(Z-~t~M04jIi2QM>$dHDFe%C`Yq;G>=OGSqCZs@N| zg|xHGh0AdyvqJDDNm8IoWTs=X{w^}-`nyD?PU?tok!fM2+qJ0}WFH5*B;@373EBA> zPH8`5<36X?i|+;5Q=dZ*`vC?lR2^goK8G}18|1MqK^FO(4oqIG#{L-`hecr=nk0tU z$S-J?drkybf-Qz&{Yk4cYL!u%8yNKOAeSIQy^T%%N!>B@4(H^!~L z#g#{Hb;hs8o)WOyrfUjfyqRhVqeD?k1aYVo*BB~lnA13wmpC#fj~t!KOYFgPNKz+% z8wRIgkw`M(EO1<}!t&!baSktS$1MPGxD$Q>+yuDoh@0WR3%}>bXHXP`#YjxS)j&NE z{uA)I(0CL+7aDc{5PQHeq$o*p=!-PYB=FA!&Cd+&Cm?iR5-HYR9$XQ{#f~aQm0F6yW|mC(4(CFaY}RBa=NrM%tn2MDLp^TrhG+*i#G*X<5$!& z`RcHS*gvtqZvj8^u!AD5bZJ-^r-+yAu!N-Sq%O<-c$=eeM8O7^QR?Tjy0XZKLSaqT zY%)MNm?8b-$5v#^ZL{-i^<$haoir-KQvX8-mY?iao_c1&T>)q@O&09P4o+IITd2r@ zLbU;Ec+XFRSIxL`7~fmtr0sfgLB2V}mj8zqr@tBcE1j(&cIZEJRPKzh8B1BB)C9(5 zNcB*qgrOPITK}XW9k>f7?S3vEHxm}Ip@(5pAJz>!TZMIX!%qDJ>@ADf`op-RT!!2X zsl?CP57VriLN#`kKM$6<=b)n4RJ_YDS{`1+bVq2lzRbtrB_FFjLbGDd`eG}2e0qqj zJpvWsQ(u>E_xD9?&k;Hg!gQa)Y)7%bz0GF>-8c)ZJxT}buTf(YeQeuNY_4+E*a#mx zdX$Sd0|83C|3$ zegoLU+0WVJgTE5~_y2*k`U1v8gmGbmy!#dA5#qv^@V{gezowSBb&+Jpk48@ZstEIZ zO^x<+Xk>i&`{neA{?eM3E{(yY;ARtfN!6v<~=6s~3!-qsnRE78`DL(f0LdlG?arEB=(CxH zuA!TZ>q}GGht+MI{m;_a&+p6nXvgE%MICyhRC}m^6k~@RUw235%R7E45{5SI`1zz2 zI>5xD?3K2{hTcz<4m&0mJzYBZYjR~_drF-?f9yf)ysf3;!J2s_-`%Hu04a1V8h%q* zZ}MG60p_n|PR*QM#ydwVu>2i|2G?PnX-|;eh9Z(Kxk8fpQFVjkG$u#~gH|F~b`)jR z5^LY-HPdk&$5Mb;P6siWiJ^8!L2TVarD^RJQh?V$^!W(~^|hI(0dFPtV0HublPc;F zAzU^sN~!Ily_csMMeq(DQfAv<-qFi5%YHcnqaA%8&R$6x@XkR+NKWhCKgFS=U&MQf zAEO(-g5w&PWI4A}X_*LRHJ<33i8({c#XffOxCunR^%f&ra)Oq}Oehk)*>$>?ng}~^ zg670;^@&Z{b+3U(7E;9I6ZDF-@itPYStXh1Doy=ErP_lgBIOpb{2%C*?v*yz(1KdA zb^wVCSy`A==bSARjy6`+ti!9J!|SSM3&S2WR@Z17S*Z+s+Y6I%h4_m0zC_bFVTiX> z`#F~$n{d;hriOq6`L$wGR$aW~rZOWrlEFJ8+2|M@Q?Y64iKzzZ$$(%j9Bi!>J9w!_ zBJP%RT8z8#8`;qxV7Dw}7k;3Y5wl>Q$hWqyzz%vM5t>)@%aF$U-DHUCmsy)!CtQu_ zlNFX4*Y~)hkXdqHnbkFs++q~4tw_Yd#*cK6dzn?**+iabiGqe7B^iU_D$VL*(tyP} zN=gcnRl;hqi8R({Wk_%N-p`<<7w(k5Gc7!g0jrv6Kk6E zVBpJ3)Am{{;px&Ze%5>vHrI37?PK#!(LMwH@(^Fw#(_6s!jI4rzwHr!P(pTI z=fb;UBo6(QiTw{sr26If%SxD0;`?vd#Zz?Pj3tqo_GBEV41ikUlTRuJ2U)A}Cc@IV zbvCy$##Ee_=Kv-SFh&*TOGPmG<+l`0f%zL~t8jde#7&29z@Auj0@^FmxNT9|NpfFo z5iE)9(VuBQci0iB(ie?zjv%(8QPoSTM?D;=?p@nZJEeBK_3fGwq@`#{O;+tQwX`V8 ztGA}TobTzd8n?~!Z1tS-{D!+zFl7a2xvV6uA*w!J>QI;4-M$gzRFNL=`5u#Xwr9L` ztH)sdvGTNs!@tlCuLt}-w_4zN6zEl?6h*5=Y$(#97CF*gE%7)? zOhAbkuT!lgV43YPnYGqxXH31g8s9-!lhz;)H+mB!<{v>C0I3CTE6Awv7#pTXA zEt2Nri%`&LP&wqh#G$p_mB6l`a>#%ZSD-|i6jCI$L=tN{O*7rbhH6(5GRG(ZH91*D z)P4!kgWZTe3v~5nGGIHQ%%w>OlzSa@l|f^Q_jVAwt!TEVeZ*GutBIWUD6l;8j4a0)WUY#As;P==+FTXWbfPN0$y%Mz zR8wte+FYI7bfP+`$y$@rR8x~CEyu>V*it;yOww?AkS;9`7ptcS3DQ3UX{!AzOH4U8Gl`edu=C`@DG5FwBk}M#yQATA9%_T`@i2)cNJo5JU!Gf#?Hz+%qOm#4Yh;T2 zO4!)!ld~gb*K?gZF%nBe7{#Kb$9&g9h-&L~(ml%6#^%8I?A1Q`2W;OGr6XZt%^%Cx zHa_$w`ud|n9V)y=$pe~fZ$F2TWqBV(m-%74nx$6wVK}kL*qrG#BQG1zEbkL)zEA#d z_@Af{u#-{8AL?`4I@;{DPzJt-i@-(KiDYb}NGjo~y&~bdBi{krkiHtCVj~HUj{9n-EVym;U8gpp++lR170-9K z!WZJ~o~D962GBTwCiq6Gpm+lEt!~H@D&%ML((X6Pc!qSMYa>1O_xzcULrze#>nyJ#_P zsUMTwbdINZUvp}k;!H(VY3tLZQoyA(_9x4n8fTd^&6_5@i_cZ0H48;so%qy4XavzV zZo@vEHz^bntTE=~8%#Ki$H-cpxh_#Ut6G;5-O?Vly*EXQNk42Lgzs>f94t$MUj=_V z+)}u5bi+ol^$px3oe!4tg^~Zbimic-A;*>`MPpiWHJk5tdVV~=>v~$6)QR=0#~#*` zzh0tomMx*Kg4_hy^SittjCX@1>{v}ck8l>{J7G!@IoIMSb$v5SOJq zXPxqlwbx}i*MzwA1FXMkQFBdvFGYRnkt=FJFP2DTv{m=Mo1pxmGXGpWpV7L z(A64gKM29T4KotI4E|7mzjs-xgv$V<&eN=1jr5WV+}s7+1KQmper+*T+JcJ%=W(Cx zi%aKmhMjs`zW8H2C_i;sK5AS>`RBbTTXKP> z_j(zFBo!Z1A{}`oD%0j{b&@MJ*nbHP=~5!weu3U#YJnNZu)E~G|7jwmLMpS~7jez1 zc|E)NA}$&Bj1kWH9Gg$(Mx->UIlxw3qy=<4eOELnhK?Ai8NW6Jz91D786N`e%q$%d{eWcvx?Z z!Xhr#Yo!OmsrcGQDmJ35O{SAY2ku4t=wPun%*Oj@dh*mzLUWq*re9}0HAQ3Yl=;OA zA1!t(Fi5{WML)_kg1#iwr+9Am#7RTKI*2P?qarI2EA(R8!0W)rb3o$~f6S1NPR6P$ zZmM)wXqamJSc&845{xu%-@p7P?es#+O~mPToHRd3@C}I*GoLQaKe};N9_f@j95^%5 z36@zpkbY}G+&Xz>_Dao5$1+!Ba#DDce+vnOHfyC5LEV-(G$AS+x0Sx6X%Ilr_qcA5 zCJn{@Aq~11TkMDWT@Yl?_-VTPA-{g8b=J5t5eq?+QD1ba@&d66n z30n(s=}iMFRt9;>H$FX{M}5MOH%_LtNUSJ8)5NU-Ha39UT~Jx*Gt#J*J(dDy|wus6QvS`z?8K zN3yJzZkW2Drao;;ob;RuGeL#f;~%NQjI<_B+wS*S6cEImTY^~b|}NZ{IYb%frkzc0dL zPvXu{gqmhN?C0mE$6-j;G_5Vr<5W@K9E)cR>bVi+WO*Q8~T=SBAl~{)s77D)aL(qR4mQ?7eG@h|HnTo1#j9Dpl&mo>yr9s5~{IWnU`v3h_!D zy(u)epP(jw8!jR~7;g4qPqGS|n>_1g>^)9+s$B_~#&MEvU75DO{s<;>s}P$|-{XsZAu+tuPzpvn}JSax3i z$fw2bS!;=f)WCIaK=G=cQK1}Rtz`tih=rU_Ij@kjTFn_1EUb>0+WrdRJiw z1no%U(co*Y>e(i;!&y^v&b4XwS?A`OT8MpS5w#EKSE^(^9bzwt+Fbp7H3l=l7oxTg zjguDR-n^(ay060ljVxP&xI5nzjZ-Ew2G|LwxtsW*YHmu<2Hv+7ZT8qkobcp&VpKsL zD}5KDO+x*xuHM$BtR~X6{WMq)krSRx=%JW~Sm{8BTlQ0>fYQb4CBT;|<%f#Z6Dr&N z;xN^!&ByDt-Hg}{M$88z=EGlo8AJH!s@=J!MT<2(HpKR8w7J7iMs$R3je7|%v#!PL zRy14kh-SS;+8oi~G~KBZ|9l`0qx^U<88dX|wZEe?uuV zN>!a>30kd9EQzoZElP#LoU%97QV~C=Y{X@yrl3>-O3gpVmT0w$v)+!(vKL*Ey|MtJ z-1`u|fCPz}M?~pfg(d5>#qPKK3AkyJUz6CBux1tp!t9#FHL~o+Ouib_bJdE|Q6LH= z={G_+_KgS^Ak16!t{@Q3kqL-TKzKg?LBvN>L6tV02;b1Q~Ww{N|^+53s{M+$ncs+F5Jopc&!|0Z7To|*L zP<7$qZ>*$9^F!>M{7%R z&LACc34lTTcR8)mAvUj*o@Itut84nevQaur)6ZR=LZ|EhGJmCpqJsC1@Ef5R7i zdM=lyND;i+0GZ~3Zs_~7(#h|C{qX?A!&!ixCI7M5!`dtQq(~p(R#l2LC`ic*nIoNh zoI=yq(wKHKP}|OBWvb*4vT=vC7G{gnri*iMeiWz88TqBpO7cqP!+2|hMsfhLQzds7 z<&_v~O~jAxjFrB?!O4Omen8)=7MrEo)#{!pmY*?hh|>;CtyH$EDRfILE&$Qy6rR%& zr=4_1UlK6+hbTilGmc{1`4)nuQ#}9E&$kxtdUeuO^vs*zGDX zx^#~BCg~jUg>6PChGA_*f;7@s3nibwLUNp~j@Mq{j+g$eJlB0Ij{wQZ$fw=0SgAlE zd6@^TuGGpbl2>S`eZ#_U`^8G%1m3XrfqnM}W1@OUvJ-=Brae}=T5;J^q@hY|hY1I< zYm}&t=d8q4Nt(!`JK9k0%}AFP%@4y358$%?{UVO`&@oz<-StW-ZO;SyGnAYmzLWg3 zheCUbq-QrKXwA`!4l43Dkr87@u=^6Uz1%|_TJI1C#djY+MA0Mo!iz%@{CzGh^{gu$4k8we5TK$ zA$c&CzkzN+k;+)9@Di7jDs_;TF%cc~hgj$;I&|?rpy|X*;}vdP=XPKt^!1JSxRIBJcBYiAF?!3yLT?#`)5B>Ng&d?Gzp|hq#krJx z)RI?JNFMQg=!sf7X6YkKqpHSKeOMJ$J*GNo^%b>eD{Zz^X>`a+>WX5$Hft)Z#wHj! zCtH81-0I0_u7IIak++9uxiYqZTQ87x*Bi9s(F#d*gAjvJT_*8fyyG{55EXjgQjjRV>|6|EL%`@#aO1KyNZ zicsQHKraAnZCJE^T-m$17cQ>N3JcbcD*HCO`yetk{9)z5=6u)&?+k0Kd8Fv2j4i3G z(0iBjRVPeQc-?|pQeZ8PmHrM^=EGhS(>UeJ+NHxNC z+GPvh4gxr_wr*nMf$30)^WarCifloVD6hxbTv-Hmm5kuDW`|$kl!BymQ2HDw<%Am0 zf=!%MgkwPJhRUMmLWF6UTA!&L-h4H}k&xEp(Jvcb!5c`|q)0QuJ4^ist;7$aiu>tdaL;%-^_52}^T;p{C+xG3-jYvJ z8}umNi9?eVXp^T?jLK&Qy-Lt9NAayM>vr8bz1iK}991&ddl z9Og6RgfRvc-$oXAO02^?hGD#%Q!TeR)Kw-1B>bS3@Q0khzs!0|-cIROnAb)GS!-W9=0g zt7kd4I^(5n;n=3ZrVOvP>8hI9&bX$nFo&OZ>YMVbqMK&J6uz}8s_Ar9g1afdIf%7$Ivb0u-B7-f1aZ4+8RjV@zGDo$B48{O^d z9jmOyOx&@`XfEn7K{$+u!qxx*@jTp?Wg_YGoJd|qxCQPtxIJ+HhC2ZF72LOQKf#@W zy9lSiUE8P%WugZ@ZfWMX>$vd2_YcWZ2&P+|S&)=x-MAZ8<``XokJ*AgrJJ@4m9{R? z%1O(d3)-jg0!IT^tL?yZZKn5O^#Aw9i?R}U#F`09IDc~>3zqOqyg883j4(>P8@Ng> zF-R>@-(BLTK%-j1{XZ3H4)m#vsgIE!P*=fsgBBG57>FwOb|d(A;NAbV%9VknrVMOI z(_y$ycVv1`c9+=}`1#Le+?VK_hyJZpbwL5Ldm~ts1pi(5X87O3=j&WmEZ(}qhjJ#s znc;eVTqohT(n??vor$f@K-)$6I$+F!KN>!_So!{92>wBF^A{0jV$tnUo_Y`ty!5U? zeg#hMf*oi>2Uz`3;8Qgel%EOl>BrOV3v9JoF5QAnkt%~-dPz`z9Hel~B`80F5MTB1 zky7O?E58T3n%`?>!!oq-HBUpr<8nb!ysej0v8BKS$m8*2xv700TJVh@UwN3Z7CFY? z@3(@IRoggMLinKVxfaLG-8~jO-k2_hac%318QOIM{Y^IdSxKh07@>f#^?^+7bd7i* zz<$Wl7K z2juU%El;AfNrk&JJWRbL)YGM1=h_$eXNvxd@8QPW8@gh5QU=CR1{-eC4vw3Qc$p3VY1#TVqICLm>XIvZ})4vqN_QbuQD|CHXk z*sA?OLodpB4YIl)3=bvX;wnfNPJSn622Aq~aQ6fFGU5dJoOyf$9E~t%UIKj1yy5%t z(E)@x1C8)G1B>;9^g{S?_!juSmG}rjG$DBiuY}Jf4<8sM`z@q@fsJM4Y4`TND39<5 z@Y2K@az>tqdq)CZ+PtDU31jP`oE~83^R%0ndva^tF&pHn8j)q01>}!h^LFu?0q8Dcp1DPYG8)@EJvH2@d&hz@H&ply$h;cYVbfyanlSbd0|! zAMlN>^ytpW@A)d#__sd08h^`YSK~TAE6>-?ORz^sKUKqrfvZDdZTZ@C%NGjyA2s^( zGE>Cn^D;Gx(Ti~Lq zw*SvLu#boc0~jJA&H(DDr~@jJ8Ua48iuMyT^Ob=mk*0x}nVCQjBQ51&Yy~sX(gDp2 zmX6o7ACx_BnN+vDRtBjk@^Bz?&x@J=cb^#)QL}r0|M`5@tbNYjd!4nPXYIB3TF0SQ z?rbpca@|RF1oy~%RpRn;3q+GY!>DVD$+wvk^HiQff;B(_P3^l%&$cNqt zK+G0;U7l{%ixNgvi#l1$s)IB3alE4*X>Xm8%2itZ8a+saiM6OifPowy0+1^QKbLCKWt&E-3P0xud1_zMQOgq zMJ5?af;J{X{ey`c>BE)uwe;&KGC=y;Mz2PZaOsGR1`j9wrQNWx1Rj(RG7`vaR97lw zB!!HXd1LnGWCW-)`D54OK=E)A9=OEz)GPTRlJ!;lCi2SicsKd{2tmEY>B-@?IXz<=^r>U8%<(E zwn7}!!5c>(sKU`;81}x#QC2U-2n=aQk0J@~P0VCAWQ`&!cPZy(c*Y^IQq0TrTaGWj z1n)RxhF5o(2B*gfYJRYbs)9)}Jvo*vly+O_hu%CD-b?|us9Nv9l}w~&I1F1U!FhzSc}ZiSi@4_R&` zU64T5NT+S|=LAwHZM4x9<4A<`jE(LbN8pkN2i(VDluoo!_wlHTL9o*pPXZ*}28nxU$vEQQXRO)>2i~}f(#GCGpXM75+;(5oTiGTh zNl2GTK1QpZCxNEWrA~LSBT5o{Ph#f;aJ9fnzn_5qJH<+E6UaudGRw;ezSV;I3VYK+ z3n!8&_$+|^-B%OIDv$0KN&h>$WTsR9MnZ>Xp{sROhT2IqjW=p0lvh;(sxI0oxf;=@ zH0cyne@Q*`^t5miP|TVn3!M?bi zyoU8hE31P}E=(zO465+}c&WG-y$(I|Fv5|O@R~)q1syFOyzw`rIKW$Yx7-4A!TyQe z_6<(%N8d;!^D+n6UmDg@t-&Kh?E(1jt2{Uu5B5#$h6k&zJvc#ma3&r+1P{K5>EjbT zN`uFi496fqI0@k@gzFH_Mz|K?TCkvTwJfg;r=Hx$xIx+fbkHZK5+Ajdb-AI&obU8a zB8m+30Zl6ka;NvMYZW`$y^b$7uq+$Wm~|iu-@5aYQbg-S~CePnH@vVOhZdf zbaZSn(r~eR#anL=7;3dbsO1We9@c>LmNsJf-)hI<3CY$QfXaL|6T#M24hyNj~#S1iP zI$0{|U~({>j0m03_I;Qq4yf@Zulw+BMV?qCYauIi!&ADn{f=|NG$4tDF4)^9)$lV| zqcDECPLZ#s;!uIp@i-l@h)PRA1&U)(c^%r@xd!EG!}+>a7&>sZznR&TzQngA`5N@( z%d{|wj85=D><}ymTcO8N3nrvHfpo`#`7xMW;7@_)1Ahd}>3j&>%8FfdYSvM|8Dy;b zB(5Jt>}JI3fOC~pOI@jQ*U@D&h%Qi%Yfgio^=W03U9me}p@(LW)zVuQ8g)MzEhSm# zvimU~n;mpJ$F$qQi;B1~$|}ADu@k zqaMXk!uB6;eOZxD#_L*GI%?WIF<2Lt+@iQdQyn{r(^r#l!e%~+!Izh=$MU%bhBVID z-Sf$UYfjiWWlq%-dJWISk5h9%*MSk|kvLPg>k%L0-O9#N3;P52T9~BJ(Zcf1Y4b{_ zJVe$>=^N;`50T#_SgjvgKu$|1U!(aCqpel1(Gw4oa_J%_l4SCw^n$}MHH9n?y_VZN zHM(SR%O&=^jUHNvZm`r&>lTvr-UI9^p_jlb;t~w24Qn4E--*pr>=C!b9vql&W8%JNP-n{jy0`JW&imju{W$Soj z>K~z6cnquNQ)tO#RL~;85@v)WF@@g}(VM?38IRG@-?5ZW_0OODxke9hPS?LS&Yk<`T;{)7Ks+ zv*)(3uS~gNDxBBhlaGHQFK6v+9VQ=MD;rI6QI}%AfC8D>WMn<4(cB0CeCrjJI9Bh z;ES?WKS290At6xU%rwzSOGs$oX>=eX4&Y-S2@};d4z|!2mXMh-Z{z+Nm}^eQboI`o zkLtXQKY?zH&WN=kpInTrK*_&D$-cLZ2qb+l@!^T^`suN%HxMh=M~Z{g-7fF}mo4yvUEInIVm_(XtE(T1vZqM$2v4hfF}K$>vX`+i;7!11eV&br(<%r*Fboy)o8sKK_S0bcfgoM=%-JRu)0+XL|CUfhJP zHbYcwAn+j=zUM{%?nxe@tt%nF?r)>v&nT0&VZk%RU6i6Rd95P(SjXINqLx);d}xl< zD@3Xu2mf9J|2+;9oJOc;3#=B6yYQ-@Mi?r?_m>hPTwBB;SJ2Dzr5{RFpdLRdXc z>02}eJZQlK4Dk1_CR*@NYtn^z>D@xTV8`oK#y1eJvVq`XH5oL5)4mM4{6NWFf;SAu znphHE0(c)OCE4Jj{1~1WJekuC#bW+BqE**3FOvoKarGF*?ey`H2p9by%yjc}Sj{=< z(@&qnJFSs1Q$8HLhT$VgZq<*f8`&_pbkAn6H?$2!5%AKq1RofpfRsT!2i>^?n?I%}gwe5r}^t7$Y6-u|g z?+Puk?Qw-tZAGq7ijCVa@Mp}oalKDXCV~%Q?*AGh;Z-&RA#MhCl}$rvkrJAOP^1zX zhmZ|%_X6|Hfib|Ffky!+0}lu0+aJSh*X`%K8FiSq;W-U$!mERiw~m_xbn2_*rP1lR zcpsv|+JA03;ULj^oVo~YqMMsrmoCIDQL1rE6aaxa!ZALb@k6oco2ch{vcPi(@^TvL zT)KQcIplA3IJ-vn%g(M5|FUTK=O}Vsr0UnnPOnRhn7xetZ5QD;fS!1rgyK%K$;)W7 zU1ZD6)b=_~S8d6qQ5zwjaLrLvzV2?}Kg0X;^_14X>9JqM8o==(dm^gWiOc+{{*A zlag~cOF|TAC1Ujx2h6*43g~9!(EGN4u6HN8vOvqb=KX;Mh2ga=FrC)^&d%YL-OQ>? z{AA*UNL4{!<#1mJR$;r6e`o(vVh@<;(XAvRVVwCgOEUAR?E-rUVw)O=a&U&g<~+7o zIWZ3GB!CSrJaJYYM7Vk*ChZLn(7~2(4joiPv_T=}8;jdTC@uE~Tc_=YCyF2vc!Wb@ zXo41zhP+7vJnmAixZ?IrGF_G75W)rueJ1rRSdx5+oo=Js-Xt+mM$Fa=@VMbn3;qg~ zI-j?m#=SIGt#DRSz)CIHhy=8}LgnowqSw%yR=AtWz2SY~5>4Drszy{`g&UHXi)D5Q z7So;u9&dClY-J%>N;fepR;|61C3dgG9XJ-rTnr}*9?fjARCQ1D4ShnzmnoXBU! z8QCVRcCRhL!QdJ&wgJEy6kmh30CklC9M3Tr&C8)X-y*u81@;^344-!@_W`3p&_KUM zt_Fp)rA_pN5qw1S!+W7(n@#iA_3#S$FcY(RsqAD-YAIWX{s>b zo$=kkCwyY;c!#VNcNqHaCQYIQ#|qwh5)#-1nffrCG&R(y!sLR$cLxelVCp^-9j_-b z-W68wz3!m{h0*#(HqS=a>q%_pi%^H?a87?~uoOxPM(e%zHsXwxtl?>%wv*yep;sU0 z-TqjA@w@jAd2$`ZclMrl6W|y{9qL5w5?;j$5gzjKofb_Q(_hT1JO2gqZG@!ALR4tP?)L zo6@=45t1Sa&w!J)0K?Ls4pro0(T4UtjM5wja3LlGT`+qCePJ(&i2H**38mXUl%xH} z*VSE>)%xccH!940D}cR#l)d6z&nuY8CR|XSFR_OTvL@?ahvJ>ePl%DI>(2KT)?SS zD4{ECyk&D8J2m5sIE%zg?!W9D8K zudvhRd{>HpnZ1=e)#mQNT!P`=7IBCkB3UEbtG6>w|b-=;+X+W;5McPIg3u;NW9tzkQADtnEgx zRC#+bfA2LctAM&YnpypdmoI*5p?|So{sE{k-&^RP-^h+yhvRS~*AR3mIM1H4O@xNP zCsLDz!|9sy?7WqJ`W{&p{Ek(Z=vTxIJN+T_`oVZs1>;%&yhfI0rPJTX4$o`W0k=u< zKh|!=D(F+xiT(gT90=U5Mc&VQQ=H~|Z>YxSJ75nf~MJuAKS*YVa7MVojx)e@Sp1*^ zU$DOon%KTOagcm2jWE+Khsb&?UWtYFH(*Ut*hXg>obupC0|}ClvdlnEPn>{-=&PiT zJ!=xeJo{r^QSj7cZSZ-PZ56a#PiljooP3@Y;G2wy8NOniSaA7*Hn=OCy4Nwm>ZXz5 z-}XGi2e-dGOhVnyvl_F(co_SqK~7IN>Udr|k3;lH1NjbYuRk0<{Lb`ky%V*gJce`s{)-ldCC9*iaC=+N#PQJ{!*?yz;fl7=kB*Z2 zJg1{7jes3*(4b@FbDyDY+{r=%gs!xS4UE#rdUyZm3oID7y>R<;<@U?=M)sWD>DQsU z0^$>(qhE#Wf1o2AFpT~XmJ(c(v#gRNdvIeN)iL!}`a>mlICm7%(N)Aa=u12I7b0vC zx4M_@3Un**gx2sJ`(Hc1<5nz=Ey{4-Ib=7?{D`a(Oun+}@#8OGNJ2VMUend`|H9lV+rK5c0JjQk);(;S9RzvL?FtSwaf3Oemv zO4oh`J!cK2N4_E}r8r8XzJ}r{eJkDmH7K6kLa%;Jwo72V@B~>e84C@e-|&S(T%jT1 zBvE&fHn!16e+1FWor@$_1qFC_A_&|uSbryR3M-nHi z@lMqhQO{H4(i3Od&*py6%BPLgDzfuCR!_}Yb{NW0UF74#$4B>4?iML`KZE-=oo=ym z^xeU7m3zCCluL%Ma;1D(xqCoK`GhOwbIQGq&nI`~qh+kPUmdpEJ;CRpjjG{O8rz|jN`<$Svb&bNnBpPxw|@i#i;XELxy6Du$c zo6@yIAqz}&@z3N)059bG7?e14?%MIIXJHOH`WN)zr7-b-d?Jie3hG%Ghg7sTtt{CM z9|>+q(+HQ6)9@L-dSCBvn7{%>h%6VE2Q<=3-HrR%}T;qG6saw~#^{$EI- z7)r?*GT3{Mqib=XFgHdlXvDT4jXgu6L*wS*E&m<*WVN%ODo62qJI{DmLdm!JIa+vz z#QOBJhbafqLs8IAP{^~KV2s1<8bSD|4*r#l9pQTl6Wc9_@v=GzIweIuDt|2R3*G7z zo8h%zNtT;5&`!P2l9dZi;<=TOljfj`h65G>_)*fOz$*bS0XFb^0KN$SE5}Kx3%3saHV<%}9yMaE&GY?gzFUclQQ~$%(x?qIvPYG;YV!ysZnzT1 zbsRiymJ;`|d6*J6bg&Z1eT4GJNlN5F^B^U1pc4135?2ptfqr!X%M^Z2mb%N_l~4S@?R~BNEbUCZ7~0R%X8eHHFWM{{I0ZNlI2*VGxCFQYxC*!mxE8n? zSo~ImzHaVat`ei%sEwG!S||y#%rxsF2^d|^#+joO)+3eJop@K(!c0HT!s}|Jd597h zp~OWXr-KbwVzkgtT_l0-^(@Ft8!tjdIZ&wx+1y9Tfqy*fv_h>J>OD@)WTLuy(qmRL z^HQ$sA+kJ()s6Tgx+7TiLOk`T^Dm=DS9f1}6o&}q0mG^BkzH69(H*h_+GfpaZjO+(%EbbWLbMzkIR(7BLAFh}$tbbQR zt!%uVYsHLMiA5`E#@e^I(ip5x%~>mpvhyQfMz-H-LsQoTHZ#%Mz(bk1dE9zNxoKo? zS^w#ZZnbdd7d*>B>$|Q{u63I$wAZ@H6FML?B9=?dES0jwJ8W`Lg>KaKza92kI z47gOC(#NfCV8JH3s*waEZ4VROaxHYY5hq=24tfe$ebj#TarNTa<1XP?3f~rb)Dbvh zN7^NP#=Xl|_3RBh4QRqAEH}Xk!;WH_+C;SBH3(yOdHeOHEPT)|mL^rAouibmr^S`f z1IQ(rp-F3kW^KQNj%X&jn5SK?36zqBsSdiOV-9J%#OA=Sf$CsATV%h)zH_CyUgG8W zzDhHsEvTapHS;90gz)R9m#6zbqekxR11_kskWw?Q!Oq9?8pi}+9a#UJDzX@r$}TqXUrt6-Md zS5cVgcVU?TD*%5$AfOL`6R2*&@N0nE1d`A9oGx93^6_m8)iM%3=pws_MXNLaY*+qJ z6fapoVa#HBgtbQ>8Y&2Z2)HWCyx9+rM~ z_$QIE-O|98nwF$_YK%d(Ofb=M8wtrgj6*0FSU-%1ZWw!aqpb}XiNngr)J#VuOoBo> z5IbV4AkjtQIvOwr5C@n5;FT;kV_s{(ymtlj87e`#U)!11__2d=<% z3UDOSXZs@1@;ed%`x;S$jdVd9ncL%jh`bkAx&0zbb#NtT4O{M@U$sFpk5FQ^+G%qe z2?-EfOjKXSLqQ{nKeUO4+R4Je=OM>%H5+&2yl@F*oBT%}xxnygp>1}e_HNIqK@Lq5 z{nAdNLaI=7k~m(sYoWU_5kva|3shF7ynp0up+OF$+1epZn3Be*$k@COBF$o?$*i`A z;@c>*?A2i!#hXk`;05+s+h%39WN<&?R1`Sa%PvL1WxQn6!ap!GwlMy^wF6;2rp$vq z!f(?Zx(lob^!Y9WHeQe_C(Ijh54hr9L!7S?_aowVKuOYIRrdztxe8Of4S5^Q#$vZP9P*`M zwTFCM#H*CS4ZWuv<6gsFg~M%6SshZto-y^9T!Xb1-*b~g-Qd@P@45LwG*7V5qn`2z z9CqnmUOC(*6>tQ zJEWSfq>6yDt-xUjQpo{gDBr3SP?jzLUM61F9>Bc-4rp{k_84aP%4bCBe{D3%Up_76 z&ZFKvx$U2!k^Tseq9irjJdL&8A>l2^xiqJcfI=#2vX>xe7Z- zx_(@&eyhBhy=XQB-6ea9;+wQzfc%K|H*{#BKR)DK>Q`9DR=~%$Uy)ydSAO?m|Dpwx zRr>Dv{sna`%|goqTmtMe0N^WuWNu+nR6fnZ!?T_LPGs)!{owe#O5nJDbXtIiXLg^kI+r=htDMP$LXU zd>i?PK(XS?{Rh@$esGM%-F0&%%bYY7%IuFaA2!qSp7Qw2bTpzC5Qeh%2b@~Jr|TeK z?S1;L+1}8^qaNDV+LKlaYHjoOuKew!k+G|SxE2Cs3~&XoFY0Y5^0xo@TiL10d|Ow? zK8K1d24?ExF|lZIJsa0`-Pj@^E+WM3p=$%>hyfR{AAS)I%lk~*`=l^fJ{dg8EmRcn z<-xGMk2O5zv{kyyex%iba$-OoQz1LPQi~FBE;)xeTMSXXr*_YS!Unqu=NYros4zLoZ)6)$ zN1?xX=60iA=x>XxbS3Wh*Xglm0=_Ex0Pb?u1Gg@YL0wdaAM@j_W!Xbdgvkpewcao^ zTs|yHk6P))e)4Lmzt!+)e;G%lQrqbJ1LT<4Tj?FuP$_l%@pg5`*)OdQS}WB5c||>{ zI+mlSgS4{FqmFeoUto_}=t8YL-s?O|RN4qqpq?Jk%7-M_0xTXV*GQ`^bSl0dC_Rqz zeS_rPp1eYxm1zhWEaMQ2!$A*3$aPZrJVVhCIb57lX@kzJ)E!6n&Oz$xSet`fwRsL} zgno%$TZ4oxQQL;A(tP2jzE_%8ZcwtPzI)y|=3{r)pJQHj>M=}K_qgAYr4d7A^%rhl z`KVXa`3r4y>@ZmudJ?so0}!?7=b_hYH4U{|j`e*+sbS+V`KlZoo|&wJgPk>cbjyU&4g$gC5LlO)tM;FQ!iTR zk>PUO_|`T->sc)f@iB(5OAzIMiM^9*$>`((+_%0#i1NH9q>F^13R%SjXJG{?ZfBqYS?5mZ5}O;2ug*| zwaSTKAqUT8LRG7D-Vnh&t#s@dIn}$)!aoNlSMx^EwHeCC$ibpiZ84k}EAJHDf5msH z=!#fbF<9ImD~G5q*u}BBNKHCs0L{FNOcMK{EFV!KA%>x$Au#f-LuP|9VgyBxj68fnRmlLL`J@Ea2mkD z_TgiD+GiIdHuApWz?N&Vl`u7Ous7jM^pR)P&pK%zveDy-@@xH#=uJWyj*0+OfK#|m ziSxm+FQ2$yrh7`dr{ECr2Cu}PLmU)NuL`|Pm}w*Nk4vWkdowy zVvoLGIA>0rxEDOIc0a@XOmzMXdAii~3%Y*>hU&j@mU)J}Mk;d9srSpl(zGuOi|?0b zh*B+@WTu?TZD0F8fKdfp_y8WV;R|~D0eO(L`wJ@1!jyjU3q$HG*+Z13;|$b;at~>O zjjnr8u9O*8E}ZM4 zmj#UHh6%~88`Ik(kkAJi({asl+%kjTe7uAW=?}@L#MJMhSo#HU9?%3}0HGMxsQ_O< zZ$Ll5P{0VlXh0^Q1?gS^jsqkD9t6w;ECehAJPUXk@H${~G2Q>L92LqB;Pe$74sfCT zZoW21$?{sS=#nE?;e7yQ9&ok`S64#wwGy_IfLh$=&;rmP-WQ-bYB=nRvxVe@2{sx=P*|tN9AXo?km@WPnyj z8X8>xIfHcfvvTN|4CK#t(db;rD%@|uCxP;SI~G!O7LsNpig(4fdba>v8;CmZ)}>}=P|-Tr`D z&=On!GQG?@6O^Iv=mOOS8YU9N|J#OXXE6JBR4ND1OZi|(r{TqJ-Ft87c@+d>4O}S{ z{$q}4|F!Z*V>HN@0dR8BiHR$BW+F2W3{<(8i2sk7xVhaTK`X;WFX_(od^)uo{WMda zM4#O*$58JqIVe>bS$qSd)33x2kMVcbUA#x9a^GQYt3dkppVEm;G^&Zn33yz%KRfp?l&J3gHrctuXl%o~Qe2f$mg z0(3j~P2UL2$b+1-bS=`{Y4B7;f(GDLy+XtQ?KH7^DFi$A&CGb@&IA1a8qU?Dz%}46 z(!29;&I7TEzfSOuRh9%=8Q17#Vr2dwC$RWwAPC@X5D&tg+q6>~+{j?&(d(V0i{omh zELH#b*rvyRz8GCv>6~}3zxUhwXv-=rou0kTRPZN5A`dgNro;0%y-fb+dmlIl@DgbL z(-L$d$m!*wHd4!R6cjAaRXE>H%xGe68Y1n@ z)6*p#U2h&0W(nOZhJe=~{;Kx$iQvCO7kN&t^Dq1I(?%YK0~)&kxh9WT>G`m zgmxTuNlN7=-B_N;8Ml4D>+$r{jdE0G_G73E0H@JeHt6`yt>twFxYM*zI~xr>=P%Qn ze@B8DcT9ZS&T>Ae_LeUE!7*Z_d9-_{5p-!m+`^AbkGL0 zS3}2VWZ-^F2ABlq)xd%GoAzc=WMznRHAn8+jnIug)0+Z9s{y_zqV z1!Qsa2^VlP2oAE=0isl7y29r9|)8MU9l8e51`$b~i8}heeX5Jq30|2KI*_q0pyn37~&Ffq_Uu`wk z&ZREVqxxK2w&dJYjhUSVnmbNR@gSHD;0%lZ2Zo)D#$lO)(ra7ZPLrLV@@=SBwbunNGf2$USVPN3G=m^W43n0TJ~HUz{D z9NdmTrtdQ-0^n90+<7j$xqBv|9W!pzmL)ecbn_x*OeBhvcbg(5-DcXkp;GhEN)>=x z6{#bEyc5n=i3jdTAhQbfkpa2;Rs^a(?$9c(X3Yb35ojN!3U)3-Z@8sgWSqyuTIXa? z{O-mnq2;7F_=bMRTdoD5L6zJ*v(kj^@+d>ac6qXBkaoz2x@1;akREU==Kq@p^|fMp z0Q^OIgKx`h&Ctq+vOc(88(4NP)XTGCQ$XC;hAE^84+3-?MAsO`eO?haR|dVRm-92T zq4zD}fHWx|p#NZVG8>rFs_^bG6Zqgh;%--=?c8PbfMyrz@OcZN1kjPEY-~YyoEX4U zCw+%t2q?pzVx|UEk^r2myiQcAv8mmO${o4V^n_z6Kzk{D)z?dz)Vl+{0O-ZlQYWsC z(&&Bi!psy9s0Os4cp4<^ShNz{`!l9WkiPS;HVh97zs^+k;Ok69Vn?%`UdBK;F&Qj9 zeCJYvSRTL^gyR7n8LYzgXgfjF`%V3!DvYjt7aQ2|!?2YC$OdEpl7`VE@5*bvQzn8@ eKkdUP+$>RK#FbCDUfv`T3iy-X^PG8D>kb&b&YHj znZhoOO;UeE%`q*)I0^ZuO_>;E>m(iAu10B1TN}yL7HC>Qnyi_P_N|85Co7NMS4qeI zcr)L7_uPBF@1A$&yK{qkx!_*T(bUvv<={XA!1`x=Tc6tY3`l!s9hwG@(Xu~Gj$;LHw(3oec7`>O*K)*ER=jV(<R)A}1LR-s!TUmE%X2vWVb-Hy=tFZpnyS>Xn1RcP>A~hjc@3E}-^4G3&SfHp!!))k zfy1G2)*dYWTGHwk!&=))KbAd%!zu2?#E9zoG+4t}N%pPNxxt2VAGKKGCR0)zYIgH6 zBU+iNfm(95rupYAjr7jBm}?-n_uwo%uEKx#fjlnP0t>@w55djZ&-Ct%N(R zD3{M$Hd#EKcChK)DEHHr-14gB^Y<_1et%wIxhtfO4lN(7N_d)i=g}_%^gY0=Pz~@Z zi!amztfRBJ4`E8koHvG?TtOB~ZptT$_Ft51vET=xRr%{Vv!LJr-#?`QWV^Y6Y!}Kv zJ8e&!&oBPxJjkPT+g8bZQED#^+`sr)e>Qrd1mx2}txqR6j(BpsrPsOrKOE-gt~{!9 zFLQJB%Jmcb3~`+S3Up0EAGt>+&^69r z?C@}itHnh)lXd?Sr}(B0#s?K)U!kKHDw2n%zhs?@^CmO9yS8kEJ2VyVS_7mP4#S zr?K+4?5!q>)F!u@m|OfY)2(iYBhn<&MFplc&SzTC&oiwrsW5;`=Hr?9Kra6uwQCES z+Ns6%p6cjXRvFS%6e4{qLG&@x1E_T&U%^Y5rQX3lp}*F9&KvZmxpFK*Nh9XBnh_n?0)H2BR^rw<{a5i*owHfhsdZTm|zCmN9&!&FowzkhY z@~n~YMcTb)NV<^J#nVB*A?3mFHL*rboEf#UD`s#tyEz!nGW1ey**{F4WaG_;?OLw! zK{e4pUv=iOQ~Q{+g%gtWE9c6xM;J{jQ0pGLHGkZBTN`W7-T2dg$7*5?@#VV;E}w=- ztH#rE8Ws{4S-j((c#Or*(6RETQ+fk|-rhiHWyOejS*-+cq<~#->^oQxT3IFO3@nT@ cAmN5;<5>s5IKzx1RJY+o^%0*_{O>#RpR_E(Z~y=R delta 2003 zcmZWqe{fS(7Cz@DY4g$_c_kK_(9)O0(k7)gEikaIe*{QhOPLx#oN>h+AeGtR`lD!r ztWMi>Wu=Nr;{}CA$Hie5R@SvNI^fcnA~FNBi?qu)OC5w*v_Z1Wz6eYnO?lb-q}^e6 z@637coO{pr-S3_`@7>@w65K|dD_6D%1O}S`8n(7=e0I}Q8=r39@T36%{`8SkXjoYC z&L#5Lyq#OlT{!FDpTDwj^A7C+cXd`H*-)P^)qcoti6Tubf(=}^KY6jaHj}`+z$ZUw2%f&>n zLI0+&LN~48teVLT(r(U#P4t(X72~vvE5?;{H)k(CkwLqCJs-WB;1PO;v*Q7pVuUPpSBpR?D-7y+vw|tGGp_xyK!6Tr-t(K`Ntr3_iS)V4z4I!Po#Tk+7Q5A z`c&Spa6kPj@2swut?#FQ%zqB|N6HFn2@cT~<3oh6qwgE%vi(mR(_F9)U>CDCdYV6= z8)n`h4HS8CP2^g2k4J{Zz@M)i*holCk06zSp6u8)KvTtJ{UPsjD#KgYCFI|OmBBrvFNQC*+Vkynh-crv+ODz_>5t&uqKulH{!v0|+b6JI<+la&;uneOXl#RCj3(^P zIZV%30EEjv6hBVn_DBCoc0{j8JB3bGBY}AGtH{lZt4m_&TGg>HV2FV*G_Xxx(B%@g zTn>Qk&4jOWfwN|qCG!}9=|bD%LcCQa z>tQ-o*oJ9JV3cvPR}&_lFO!6D&K2j$PwT!;5}k(3OQJCO2dSx zYalKDKQaHft%}*7^>ymP_a=stg{TRAoq*Wy*%t<&EZs8`c-5O8ZH*9Pex$Kt2bPRa z;vTMViT{K@=+E=aws6(C=aqDFl3tzra`6GSsHEGKBaCgDsh|F?GKPdURDF+sq16sE zMrng%q4~`WYX_HlSav|( zq8&A}a5vpu^HT0Zx72+ET7I7$x6ozx9kTalw5fd1HRmjkUg6zJ`rxsZ?1~$i$8IiW zDQ1UhQSHBsi!v=guC}SUhUH4yMUAd9_0Qp2M^Y2?4cE-tZ49OgRLh7WurB!SsOqcZ zPJH1%v67xi&$%{NLK9;t|oFR*F3qPYN8W_5IA`65Hg$@r=PimD?sn*Y3r|KA(>-^_CAumAu6