diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 8f1b6554..00000000 --- a/.gitmodules +++ /dev/null @@ -1,12 +0,0 @@ -[submodule "ext/nanovg"] - path = dep/nanovg - url = https://github.com/memononen/nanovg.git -[submodule "ext/nanosvg"] - path = dep/nanosvg - url = https://github.com/memononen/nanosvg.git -[submodule "ext/osdialog"] - path = dep/osdialog - url = https://github.com/AndrewBelt/osdialog.git -[submodule "ext/oui-blendish"] - path = dep/oui-blendish - url = https://github.com/AndrewBelt/oui-blendish.git diff --git a/plugins/community/repos/AudibleInstruments/CHANGELOG.md b/plugins/community/repos/AudibleInstruments/CHANGELOG.md new file mode 100644 index 00000000..9501b795 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/CHANGELOG.md @@ -0,0 +1,12 @@ + +### 0.6.3 (2018-10-10) + +- Added Segment Generator + +### 0.6.2 (2018-10-09) + +- Added Random Sampler from Audible Instruments Preview + +### 0.6.1 (2018-09-12) + +- Added Macro Oscillator 2 from Audible Instruments Preview diff --git a/plugins/community/repos/AudibleInstruments/README.md b/plugins/community/repos/AudibleInstruments/README.md index 1bc7693e..c3f5a3bc 100644 --- a/plugins/community/repos/AudibleInstruments/README.md +++ b/plugins/community/repos/AudibleInstruments/README.md @@ -16,28 +16,20 @@ After checking out AudibleInstruments in the `plugins/` directory, get external ### Macro Oscillator Based on [Braids](https://mutable-instruments.net/modules/braids), [Manual](https://mutable-instruments.net/modules/braids/manual/) - -![Macro Oscillator](https://vcvrack.com/images/AudibleInstruments/macro%20oscillator.png) - Sync input doesn't work - More settings could be supported ### Modal Synthesizer Based on [Elements](https://mutable-instruments.net/modules/elements), [Manual](https://mutable-instruments.net/modules/elements/manual/) -![Modal Synthesizer](https://vcvrack.com/images/AudibleInstruments/modal%20synthesizer.png) - ### Tidal Modulator Based on [Tides](https://mutable-instruments.net/modules/tides), [Manual](https://mutable-instruments.net/modules/tides/manual/) -![Tidal Modulator](https://vcvrack.com/images/AudibleInstruments/tidal%20modulator.png) - ### Wavetable Oscillator Based on [Sheep](https://mutable-instruments.net/modules/tides/firmware/) (Tides alternative firmware) ### Texture Synthesizer Based on [Clouds](https://mutable-instruments.net/modules/clouds), [Manual](https://mutable-instruments.net/modules/clouds/manual/) - -![Texture Synthesizer](https://vcvrack.com/images/AudibleInstruments/texture%20synthesizer.png) - edit buttons and lights - freeze button - right-click context menus to replace menu diving @@ -45,46 +37,30 @@ Based on [Clouds](https://mutable-instruments.net/modules/clouds), [Manual](http ### Meta Modulator Based on [Warps](https://mutable-instruments.net/modules/warps), [Manual](https://mutable-instruments.net/modules/warps/manual/) -![Meta Modulator](https://vcvrack.com/images/AudibleInstruments/meta%20modulator.png) - ### Resonator Based on [Rings](https://mutable-instruments.net/modules/rings), [Manual](https://mutable-instruments.net/modules/rings/manual/) -![Resonator](https://vcvrack.com/images/AudibleInstruments/resonator.png) - ### Keyframer/Mixer Based on [Frames](https://mutable-instruments.net/modules/frames), [Manual](https://mutable-instruments.net/modules/frames/manual/) ### Multiples Based on [Links](https://mutable-instruments.net/modules/links), [Manual](https://mutable-instruments.net/modules/links/manual/) -![Multiples](https://vcvrack.com/images/AudibleInstruments/multiples.png) - ### Utilities Based on [Kinks](https://mutable-instruments.net/modules/kinks), [Manual](https://mutable-instruments.net/modules/kinks/manual/) -![Utilities](https://vcvrack.com/images/AudibleInstruments/utilities.png) - ### Mixer Based on [Shades](https://mutable-instruments.net/modules/shades), [Manual](https://mutable-instruments.net/modules/shades/manual/) -![Mixer](https://vcvrack.com/images/AudibleInstruments/mixer.png) - ### Bernoulli Gate Based on [Branches](https://mutable-instruments.net/modules/branches), [Manual](https://mutable-instruments.net/modules/branches/manual/) -![Bernoulli Gate](https://vcvrack.com/images/AudibleInstruments/bernoulli%20gate.png) - ### Quad VC-polarizer Based on [Blinds](https://mutable-instruments.net/modules/blinds), [Manual](https://mutable-instruments.net/modules/blinds/manual/) -![Quad VC-polarizer](https://vcvrack.com/images/AudibleInstruments/quad%20VC-polarizer.png) - ### Quad VCA Based on [Veils](https://mutable-instruments.net/modules/veils), [Manual](https://mutable-instruments.net/modules/veils/manual/) -![Quad VCA](https://vcvrack.com/images/AudibleInstruments/quad%20VCA.png) - ## Not yet ported @@ -113,9 +89,7 @@ Based on [Veils](https://mutable-instruments.net/modules/veils), [Manual](https: ### [Edges](https://mutable-instruments.net/modules/edges) [Manual](https://mutable-instruments.net/modules/edges/manual/) -- GPL, will not port ### [Grids](https://mutable-instruments.net/modules/grids) [Manual](https://mutable-instruments.net/modules/grids/manual/) -- GPL, will not port diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/__init__.py b/plugins/community/repos/AudibleInstruments/eurorack/marbles/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/bootloader/__init__.py b/plugins/community/repos/AudibleInstruments/eurorack/marbles/bootloader/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/bootloader/bootloader.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/bootloader/bootloader.cc new file mode 100644 index 00000000..08ad02d2 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/bootloader/bootloader.cc @@ -0,0 +1,317 @@ +// Copyright 2014 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. + +#include "stmlib/system/bootloader_utils.h" +#include "stmlib/system/system_clock.h" + +#include "marbles/drivers/adc.h" +#include "marbles/drivers/dac.h" +#include "marbles/drivers/leds.h" +#include "marbles/drivers/switches.h" +#include "marbles/drivers/system.h" + +#include "stm_audio_bootloader/qpsk/packet_decoder.h" +#include "stm_audio_bootloader/qpsk/demodulator.h" + +#include + +using namespace marbles; +using namespace stmlib; +using namespace stm_audio_bootloader; + +const double kSampleRate = 48000.0; +const double kModulationRate = 6000.0; +const double kBitRate = 12000.0; + +const uint32_t kStartAddress = 0x08008000; + +Adc adc; +Dac dac; +Leds leds; +Switches switches; +PacketDecoder decoder; +Demodulator demodulator; + +int __errno; + +void UpdateLeds(); +volatile bool switch_released = false; + +// Default interrupt handlers. +extern "C" { + +void NMI_Handler() { } +void HardFault_Handler() { while (1); } +void MemManage_Handler() { while (1); } +void BusFault_Handler() { while (1); } +void UsageFault_Handler() { while (1); } +void SVC_Handler() { } +void DebugMon_Handler() { } +void PendSV_Handler() { } + +void SysTick_Handler() { + IWDG_ReloadCounter(); + system_clock.Tick(); + switches.Debounce(); + if (switches.released(SWITCH_T_DEJA_VU)) { + switch_released = true; + } + UpdateLeds(); +} + +} + +enum UiState { + UI_STATE_WAITING, + UI_STATE_RECEIVING, + UI_STATE_ERROR, + UI_STATE_WRITING +}; + +volatile UiState ui_state; +volatile int32_t peak; + +void UpdateLeds() { + leds.Clear(); + switch (ui_state) { + case UI_STATE_WAITING: + leds.set( + LED_T_DEJA_VU, + system_clock.milliseconds() & 128 ? LED_COLOR_GREEN : 0); + leds.set( + LED_X_DEJA_VU, + system_clock.milliseconds() & 128 ? 0 : LED_COLOR_GREEN); + break; + + case UI_STATE_RECEIVING: + leds.set( + LED_T_DEJA_VU, + system_clock.milliseconds() & 32 ? LED_COLOR_GREEN : 0); + leds.set( + LED_X_DEJA_VU, + system_clock.milliseconds() & 32 ? 0 : LED_COLOR_GREEN); + break; + + case UI_STATE_ERROR: + { + bool on = system_clock.milliseconds() & 256; + for (int i = 0; i < LED_LAST; ++i) { + leds.set(Led(i), on ? LED_COLOR_RED : 0); + } + } + break; + + case UI_STATE_WRITING: + { + for (int i = 0; i < LED_LAST; ++i) { + leds.set(Led(i), LED_COLOR_GREEN); + } + } + break; + } + + if (ui_state != UI_STATE_WRITING) { + uint8_t pwm = system_clock.milliseconds() & 15; + if (peak < 8192) { + leds.set( + LED_T_RANGE, + (peak >> 9) > pwm ? LED_COLOR_GREEN : 0); + } else if (peak < 16384) { + leds.set( + LED_T_RANGE, + ((peak - 8192) >> 9) >= pwm ? LED_COLOR_YELLOW : LED_COLOR_GREEN); + } else if (peak < 16384 + 8192) { + leds.set( + LED_T_RANGE, + ((peak - 16384 - 8192) >> 9) >= pwm ? + LED_COLOR_RED : LED_COLOR_YELLOW); + } else { + leds.set(LED_T_RANGE, LED_COLOR_RED); + } + } + + leds.Write(); +} + +int32_t dc_offset = 0; +int32_t gain_pot = 16; +size_t discard_samples = 8000; + +IOBuffer::Block block; + +IOBuffer::Slice FillBuffer(size_t size) { + adc.Convert(); + if (!discard_samples) { + // Scan gain pot. + gain_pot = (adc.value(ADC_GROUP_POT) + 4095 * gain_pot) >> 12; + int32_t gain = ((gain_pot >> 1) * gain_pot >> 21) + 128; + // Extract sample. Note: there's a DC offset :/ + int32_t sample = 32768 - static_cast(adc.value(ADC_GROUP_CV)); + dc_offset += (sample - (dc_offset >> 15)); + sample = (sample - (dc_offset >> 15)) * gain >> 8; // 0.5x to 4x + CONSTRAIN(sample, -32768, 32767); + + // Update peak-meter + int32_t rect = sample > 0 ? sample : -sample; + peak = rect > peak ? rect : (rect + 32767 * peak) >> 15; + + // Write to DAC for monitoring + block.cv_output[0][0] = 32767 - sample; + block.cv_output[1][0] = 32767 - sample; + block.cv_output[2][0] = 32767 - sample; + block.cv_output[3][0] = 32767 - sample; + demodulator.PushSample(2048 + (sample >> 4)); + } else { + --discard_samples; + } + + IOBuffer::Slice s; + s.block = █ + s.frame_index = 0; + return s; +} + +static size_t current_address; +static uint16_t packet_index; +static uint32_t kSectorBaseAddress[] = { + 0x08000000, + 0x08004000, + 0x08008000, + 0x0800C000, + 0x08010000, + 0x08020000, + 0x08040000, + 0x08060000, + 0x08080000, + 0x080A0000, + 0x080C0000, + 0x080E0000 +}; +const uint32_t kBlockSize = 16384; +const uint16_t kPacketsPerBlock = ::kBlockSize / kPacketSize; +uint8_t rx_buffer[::kBlockSize]; + +void ProgramPage(const uint8_t* data, size_t size) { + FLASH_Unlock(); + FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | + FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR); + for (int32_t i = 0; i < 12; ++i) { + if (current_address == kSectorBaseAddress[i]) { + FLASH_EraseSector(i * 8, VoltageRange_3); + } + } + const uint32_t* words = static_cast( + static_cast(data)); + for (size_t written = 0; written < size; written += 4) { + FLASH_ProgramWord(current_address, *words++); + current_address += 4; + } +} + +void InitializeReception() { + decoder.Init(20000); + demodulator.Init( + kModulationRate / kSampleRate * 4294967296.0, + kSampleRate / kModulationRate, + 2.0 * kSampleRate / kBitRate); + demodulator.SyncCarrier(true); + decoder.Reset(); + current_address = kStartAddress; + packet_index = 0; + ui_state = UI_STATE_WAITING; +} + +void Init() { + System sys; + switches.Init(); + sys.Init(false); + system_clock.Init(); + adc.Init(true); + dac.Init(48000, 1); + leds.Init(); + sys.StartTimers(); + dac.Start(&FillBuffer); +} + +int main(void) { + Init(); + InitializeReception(); + + bool exit_updater = !switches.pressed_immediate(SWITCH_T_DEJA_VU); + while (!exit_updater) { + bool error = false; + + if (demodulator.state() == DEMODULATOR_STATE_OVERFLOW) { + error = true; + } else { + demodulator.ProcessAtLeast(32); + } + + while (demodulator.available() && !error && !exit_updater) { + uint8_t symbol = demodulator.NextSymbol(); + PacketDecoderState state = decoder.ProcessSymbol(symbol); + switch (state) { + case PACKET_DECODER_STATE_OK: + { + ui_state = UI_STATE_RECEIVING; + memcpy( + rx_buffer + (packet_index % kPacketsPerBlock) * kPacketSize, + decoder.packet_data(), + kPacketSize); + ++packet_index; + if ((packet_index % kPacketsPerBlock) == 0) { + ui_state = UI_STATE_WRITING; + ProgramPage(rx_buffer, ::kBlockSize); + decoder.Reset(); + demodulator.SyncCarrier(false); + } else { + decoder.Reset(); + demodulator.SyncDecision(); + } + } + break; + case PACKET_DECODER_STATE_ERROR_SYNC: + case PACKET_DECODER_STATE_ERROR_CRC: + error = true; + break; + case PACKET_DECODER_STATE_END_OF_TRANSMISSION: + exit_updater = true; + break; + default: + break; + } + } + + if (error) { + ui_state = UI_STATE_ERROR; + switch_released = false; + while (!switch_released); // Polled in ISR + InitializeReception(); + } + } + adc.DeInit(); + Uninitialize(); + JumpTo(kStartAddress); + while (1) { } +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/bootloader/makefile b/plugins/community/repos/AudibleInstruments/eurorack/marbles/bootloader/makefile new file mode 100644 index 00000000..1da80a3c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/bootloader/makefile @@ -0,0 +1,47 @@ +# Copyright 2014 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. + +# System specifications +F_CRYSTAL = 8000000L +F_CPU = 168000000L +SYSCLOCK = SYSCLK_FREQ_168MHz +FAMILY = f4xx +# USB = enabled + +# Preferred upload command +UPLOAD_COMMAND = upload_jtag_erase_first + +# Packages to build +TARGET = marbles_bootloader +PACKAGES = marbles/bootloader \ + marbles/drivers \ + stm_audio_bootloader/qpsk \ + stmlib/dsp \ + stmlib/utils \ + stmlib/system +RESOURCES = marbles/resources + +TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ + +include stmlib/makefile.inc diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/clock_self_patching_detector.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/clock_self_patching_detector.h new file mode 100644 index 00000000..71e9be52 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/clock_self_patching_detector.h @@ -0,0 +1,87 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Class for detecting if the t1 or t2 gate outputs are patched into the X +// clock input. This is done by comparing the number of synchronous transitions +// on the gate ouputs and the clock input. A small margin of error is allowed +// because of acquisition delays. + +#ifndef MARBLES_CLOCK_SELF_PATCHING_DETECTOR_H_ +#define MARBLES_CLOCK_SELF_PATCHING_DETECTOR_H_ + +#include "stmlib/stmlib.h" + +#include "marbles/io_buffer.h" + +namespace marbles { + +class ClockSelfPatchingDetector { + public: + ClockSelfPatchingDetector() { } + ~ClockSelfPatchingDetector() { } + + void Init(size_t index) { + index_ = index; + error_streak_ = 0; + match_length_ = 0; + synchronous_transitions_ = 0; + } + + size_t Process(IOBuffer::Block* block, size_t size) { + for (size_t i = 0; i < size; ++i) { + if (block->input[1][i] & stmlib::GATE_FLAG_RISING) { + if (match_length_ >= 12) { + ++synchronous_transitions_; + } + error_streak_ = 0; + match_length_ = 0; + } + bool output_gate = block->gate_output[index_][i]; + bool input_gate = block->input[1][i] & stmlib::GATE_FLAG_HIGH; + if (output_gate != input_gate) { + ++error_streak_; + if (error_streak_ >= 6) { + synchronous_transitions_ = 0; + } + } else { + ++match_length_; + } + } + return synchronous_transitions_; + } + + private: + size_t index_; + size_t error_streak_; + size_t match_length_; + size_t synchronous_transitions_; + + DISALLOW_COPY_AND_ASSIGN(ClockSelfPatchingDetector); +}; + +} // namespace marbles + +#endif // MARBLES_CLOCK_SELF_PATCHING_DETECTOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader.cc new file mode 100644 index 00000000..579e98c0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader.cc @@ -0,0 +1,102 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// CV reader. + +#include "marbles/cv_reader.h" + +#include + +#include "stmlib/dsp/dsp.h" + +namespace marbles { + +using namespace std; +using namespace stmlib; + +/* static */ +const CvReaderChannel::Settings CvReader::channel_settings_[] = { + // cv_lp | pot_scale | pot_offset | pot_lp | min | max | hysteresis + // ADC_CHANNEL_DEJA_VU_AMOUNT, + { 0.05f, 1.0f, 0.0f, 0.01f, 0.0f, 1.0f, 0.00f }, + // ADC_CHANNEL_X_SPREAD_2 / ADC_CHANNEL_DEJA_VU_LENGTH, + { 0.05f, 1.0f, 0.0f, 0.01f, 0.0f, 1.0f, 0.00f }, + // ADC_CHANNEL_T_RATE, + { 0.2f, 120.0f, -60.0f, 0.01f, -120.0f, 120.0f, 0.001f }, + // ADC_CHANNEL_T_BIAS, + { 0.05f, 1.05f, -0.025f, 0.01f, 0.0f, 1.0f, 0.00f }, + // ADC_CHANNEL_T_JITTER, + { 0.05f, 1.0f, 0.0f, 0.01f, 0.0f, 1.0f, 0.00f }, + // ADC_CHANNEL_X_SPREAD, + { 0.1f, 1.0f, 0.0f, 0.01f, 0.0f, 1.0f, 0.01f }, + // ADC_CHANNEL_X_BIAS, + { 0.1f, 1.0f, 0.0f, 0.01f, 0.0f, 1.0f, 0.02f }, + // ADC_CHANNEL_X_STEPS, + { 0.05f, 1.0f, 0.0f, 0.01f, 0.0f, 1.0f, 0.02f }, +}; + +void CvReader::Init(CalibrationData* calibration_data) { + calibration_data_ = calibration_data; + adc_.Init(false); + for (int i = 0; i < ADC_CHANNEL_LAST; ++i) { + channel_[i].Init( + &calibration_data_->adc_scale[i], + &calibration_data_->adc_offset[i], + channel_settings_[i]); + } + + fill(&attenuverter_[0], &attenuverter_[ADC_CHANNEL_LAST], 1.0f); + + // Set virtual attenuverter to 12 o'clock to ignore the non-existing + // CV input for DEJA VU length. + attenuverter_[ADC_CHANNEL_DEJA_VU_LENGTH] = 0.5f; + + // Set virtual attenuverter to a little more than 100% to + // compensate for op-amp clipping and get full parameter swing. + attenuverter_[ADC_CHANNEL_DEJA_VU_AMOUNT] = 1.01f; + attenuverter_[ADC_CHANNEL_T_BIAS] = 1.01f; + attenuverter_[ADC_CHANNEL_T_JITTER] = 1.01f; + attenuverter_[ADC_CHANNEL_X_SPREAD] = 1.01f; + attenuverter_[ADC_CHANNEL_X_BIAS] = 1.01f; + attenuverter_[ADC_CHANNEL_X_STEPS] = 1.01f; +} + +void CvReader::Copy(uint16_t* output) { + const uint16_t* adc_values = adc_.values(); + copy(&adc_values[0], &adc_values[ADC_CHANNEL_LAST * 2], output); + adc_.Convert(); +} + +void CvReader::Process(const uint16_t* raw_values, float* output) { + for (int i = 0; i < ADC_CHANNEL_LAST; ++i) { + output[i] = channel_[i].Process( + static_cast(raw_values[ADC_GROUP_POT + i]) / 65536.0f, + static_cast(raw_values[ADC_GROUP_CV + i]) / 65536.0f, + attenuverter_[i]); + } +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader.h new file mode 100644 index 00000000..e4b23f03 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader.h @@ -0,0 +1,129 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// CV reader. + +#ifndef MARBLES_CV_READER_H_ +#define MARBLES_CV_READER_H_ + +#include "stmlib/stmlib.h" + +#include "marbles/drivers/adc.h" + +#include "marbles/cv_reader_channel.h" +#include "marbles/settings.h" + +namespace marbles { + +class CvReader { + public: + CvReader() { } + ~CvReader() { } + + void Init(CalibrationData* calibration_data); + + inline bool ready_for_calibration() const { + return true; + } + + inline void CalibrateRateC1() { + cv_c1_[0] = channel_[ADC_CHANNEL_T_RATE].unscaled_cv_lp(); + } + + inline void CalibrateRateC3() { + cv_c3_[0] = channel_[ADC_CHANNEL_T_RATE].unscaled_cv_lp(); + } + + inline void CalibrateSpreadC1() { + cv_c1_[1] = 0.5f * channel_[ADC_CHANNEL_X_SPREAD].unscaled_cv_lp() + \ + 0.5f * channel_[ADC_CHANNEL_X_SPREAD_2].unscaled_cv_lp(); + } + + inline bool CalibrateSpreadC3() { + cv_c3_[1] = 0.5f * channel_[ADC_CHANNEL_X_SPREAD].unscaled_cv_lp() + \ + 0.5f * channel_[ADC_CHANNEL_X_SPREAD_2].unscaled_cv_lp(); + for (int i = 0; i < 2; ++i) { + float c3 = cv_c3_[i]; // 0.2 + float c1 = cv_c1_[i]; // 0.4 + float delta = c3 - c1; + float target_scale = i == 0 ? 24.0f : 0.4f; + float target_offset = i == 0 ? 12.0f : 0.2f; + if (delta > -0.3f && delta < -0.1f) { + int channel = i == 0 ? ADC_CHANNEL_T_RATE : ADC_CHANNEL_X_SPREAD; + calibration_data_->adc_scale[channel] = target_scale / (c3 - c1); + calibration_data_->adc_offset[channel] = target_offset - \ + calibration_data_->adc_scale[channel] * c1; + } else { + return false; + } + } + calibration_data_->adc_scale[ADC_CHANNEL_X_SPREAD_2] = calibration_data_->adc_scale[ADC_CHANNEL_X_SPREAD]; + calibration_data_->adc_offset[ADC_CHANNEL_X_SPREAD_2] = calibration_data_->adc_offset[ADC_CHANNEL_X_SPREAD]; + return true; + } + + inline void CalibrateOffsets() { + for (size_t i = 0; i < ADC_CHANNEL_LAST; ++i) { + if (i != ADC_CHANNEL_T_RATE && i != ADC_CHANNEL_X_SPREAD) { + calibration_data_->adc_offset[i] = \ + 2.0f * channel_[i].unscaled_cv_lp(); + } + } + } + + inline uint8_t adc_value(int index) const { + return adc_.value(index) >> 8; + } + + void Copy(uint16_t* output); + void Process(const uint16_t* values, float* output); + + inline const CvReaderChannel& channel(size_t index) { + return channel_[index]; + } + inline CvReaderChannel* mutable_channel(size_t index) { + return &channel_[index]; + } + inline void set_attenuverter(int index, float value) { + attenuverter_[index] = value; + } + + private: + Adc adc_; + CalibrationData* calibration_data_; + float cv_c1_[2]; + float cv_c3_[2]; + + CvReaderChannel channel_[ADC_CHANNEL_LAST]; + float attenuverter_[ADC_CHANNEL_LAST]; + static const CvReaderChannel::Settings channel_settings_[ADC_CHANNEL_LAST]; + + DISALLOW_COPY_AND_ASSIGN(CvReader); +}; + +} // namespace marbles + +#endif // MARBLES_CV_READER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader_channel.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader_channel.h new file mode 100644 index 00000000..a5301d18 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/cv_reader_channel.h @@ -0,0 +1,213 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// CV reader channel. + +#ifndef MARBLES_CV_READER_CHANNEL_H_ +#define MARBLES_CV_READER_CHANNEL_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/dsp/dsp.h" + +namespace marbles { + +enum PotState { + POT_STATE_TRACKING, + POT_STATE_LOCKED, + POT_STATE_CATCHING_UP +}; + +class HysteresisFilter { + public: + HysteresisFilter() { } + ~HysteresisFilter() { } + + void Init(float threshold) { + value_ = 0.0f; + threshold_ = threshold; + } + + inline float Process(float value) { + float error = value - value_; + if (error > threshold_) { + value_ = value - threshold_; + } else if (error < -threshold_) { + value_ = value + threshold_; + } + return value_; + } + private: + float value_; + float threshold_; + + DISALLOW_COPY_AND_ASSIGN(HysteresisFilter); +}; + +class CvReaderChannel { + public: + CvReaderChannel() { } + ~CvReaderChannel() { } + + // Because of the large number of initialization parameters, they are + // passed in one single struct. + struct Settings { + float cv_lp; + float pot_scale; + float pot_offset; + float pot_lp; + float min; + float max; + float hysteresis; + }; + + void Init(float* cv_scale, float* cv_offset, const Settings& settings) { + cv_scale_ = cv_scale; + cv_offset_ = cv_offset; + cv_lp_ = settings.cv_lp; + pot_scale_ = settings.pot_scale + 2.0f * settings.hysteresis; + pot_offset_ = settings.pot_offset - settings.hysteresis; + pot_lp_ = settings.pot_lp; + min_ = settings.min; + max_ = settings.max; + + raw_cv_value_ = 0.0f; + cv_value_ = 0.0f; + pot_value_ = 0.0f; + stored_pot_value_ = 0.0f; + attenuverter_value_ = 0.0f; + previous_pot_value_ = 0.0f; + + pot_state_ = POT_STATE_TRACKING; + + hystereis_filter_.Init(settings.hysteresis); + } + + inline float Process(float pot, float cv) { + return Process(pot, cv, 1.0f); + } + + inline float Process(float pot, float cv, float attenuverter) { + cv *= *cv_scale_; + cv += *cv_offset_; + + attenuverter -= 0.5f; + attenuverter = attenuverter * attenuverter * attenuverter * 8.0f; + ONE_POLE(attenuverter_value_, attenuverter, pot_lp_); + + raw_cv_value_ = cv; + ONE_POLE(cv_value_, cv, cv_lp_); + ONE_POLE(pot_value_, pot, pot_lp_); + + switch (pot_state_) { + case POT_STATE_TRACKING: + stored_pot_value_ = pot_value_; + previous_pot_value_ = pot_value_; + break; + + case POT_STATE_LOCKED: + break; + + case POT_STATE_CATCHING_UP: + { + if (fabs(pot_value_ - previous_pot_value_) > 0.01f) { + float delta = pot_value_ - previous_pot_value_; + + float skew_ratio = delta > 0.0f + ? (1.001f - stored_pot_value_) / (1.001f - previous_pot_value_) + : (0.001f + stored_pot_value_) / (0.001f + previous_pot_value_); + CONSTRAIN(skew_ratio, 0.1f, 10.0f); + + stored_pot_value_ += skew_ratio * delta; + CONSTRAIN(stored_pot_value_, 0.0f, 1.0f); + + if (fabs(stored_pot_value_ - pot_value_) < 0.01f) { + pot_state_ = POT_STATE_TRACKING; + } + + previous_pot_value_ = pot_value_; + } + } + break; + }; + + float value = hystereis_filter_.Process( + cv_value_ * attenuverter_value_ + this->pot()); + CONSTRAIN(value, min_, max_); + + return value; + } + + inline float cv() const { return cv_value_; } + inline float scaled_raw_cv() const { return raw_cv_value_; } + inline float unscaled_cv_lp() const { + return (cv_value_ - *cv_offset_) / (*cv_scale_); + } + + inline float pot() const { + return stored_pot_value_ * pot_scale_ + pot_offset_; + } + inline float unscaled_pot() const { return pot_value_; } + + inline void LockPot() { + pot_state_ = POT_STATE_LOCKED; + } + + inline void UnlockPot() { + if (pot_state_ == POT_STATE_LOCKED) { + previous_pot_value_ = pot_value_; + pot_state_ = POT_STATE_CATCHING_UP; + } + } + + private: + float* cv_scale_; + float* cv_offset_; + float raw_cv_value_; + float cv_lp_; + float pot_scale_; + float pot_offset_; + float pot_lp_; + float attenuverter_lp_; + float min_; + float max_; + + PotState pot_state_; + + float cv_value_; + float pot_value_; // Value after low-pass filtering. + float previous_pot_value_; + float stored_pot_value_; // The actual parameter value. + float attenuverter_value_; + + HysteresisFilter hystereis_filter_; + + DISALLOW_COPY_AND_ASSIGN(CvReaderChannel); +}; + + +} // namespace marbles + +#endif // MARBLES_CV_READER_CHANNEL_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/adc.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/adc.cc new file mode 100644 index 00000000..d960e1e7 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/adc.cc @@ -0,0 +1,162 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for ADC. ADC1 is used for the 8 pots ; ADC2 for the 8 CV inputs. + +#include "marbles/drivers/adc.h" + +#include + +namespace marbles { + +void Adc::Init(bool single_channel) { + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE); + + DMA_InitTypeDef dma_init; + ADC_CommonInitTypeDef adc_common_init; + ADC_InitTypeDef adc_init; + GPIO_InitTypeDef gpio_init; + + // Initialize A0..A7 (ADC0..ADC7) + gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; + gpio_init.GPIO_Pin |= GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOA, &gpio_init); + + // Initialize B0..B1 (ADC8..ADC9) + gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOB, &gpio_init); + + // Initialize C0..C5 (ADC10..ADC11) + gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; + gpio_init.GPIO_Pin |= GPIO_Pin_4 | GPIO_Pin_5; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOC, &gpio_init); + + // Use DMA to automatically copy ADC data register to values_ buffer. + dma_init.DMA_Channel = DMA_Channel_0; + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; + dma_init.DMA_Memory0BaseAddr = (uint32_t)&values_[ADC_GROUP_POT]; + dma_init.DMA_DIR = DMA_DIR_PeripheralToMemory; + dma_init.DMA_BufferSize = single_channel ? 1 : ADC_CHANNEL_LAST; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_FIFOMode = DMA_FIFOMode_Disable; + dma_init.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + dma_init.DMA_MemoryBurst = DMA_MemoryBurst_Single; + dma_init.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA2_Stream0, &dma_init); + DMA_Cmd(DMA2_Stream0, ENABLE); + + dma_init.DMA_Channel = DMA_Channel_1; + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&ADC2->DR; + dma_init.DMA_Memory0BaseAddr = (uint32_t)&values_[ADC_GROUP_CV]; + DMA_Init(DMA2_Stream2, &dma_init); + DMA_Cmd(DMA2_Stream2, ENABLE); + + adc_common_init.ADC_Mode = ADC_Mode_Independent; + adc_common_init.ADC_Prescaler = ADC_Prescaler_Div8; + adc_common_init.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; + adc_common_init.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles; + ADC_CommonInit(&adc_common_init); + + adc_init.ADC_Resolution = ADC_Resolution_12b; + adc_init.ADC_ScanConvMode = ENABLE; + adc_init.ADC_ContinuousConvMode = DISABLE; + adc_init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + adc_init.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; + adc_init.ADC_DataAlign = ADC_DataAlign_Left; + adc_init.ADC_NbrOfConversion = single_channel ? 1 : ADC_CHANNEL_LAST; + ADC_Init(ADC1, &adc_init); + ADC_Init(ADC2, &adc_init); + + // 168M / 2 / 8 / (8 x (144 + 20)) = 8.001kHz. + if (single_channel) { + ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 1, ADC_SampleTime_144Cycles); + } else { + ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 2, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC1, ADC_Channel_12,3, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC1, ADC_Channel_2,4, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC1, ADC_Channel_15,5, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC1, ADC_Channel_10,6, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 7, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 8, ADC_SampleTime_144Cycles); + } + + if (single_channel) { + ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 1, ADC_SampleTime_144Cycles); + } else { + ADC_RegularChannelConfig(ADC2, ADC_Channel_5, 1, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC2, ADC_Channel_0, 2, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 3, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 4, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC2, ADC_Channel_4, 5, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC2, ADC_Channel_7, 6, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC2, ADC_Channel_14,7, ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADC2, ADC_Channel_6, 8, ADC_SampleTime_144Cycles); + } + + ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); + ADC_DMARequestAfterLastTransferCmd(ADC2, ENABLE); + ADC_Cmd(ADC1, ENABLE); + ADC_Cmd(ADC2, ENABLE); + ADC_DMACmd(ADC1, ENABLE); + ADC_DMACmd(ADC2, ENABLE); + Convert(); +} + +void Adc::DeInit() { + DMA_Cmd(DMA2_Stream0, DISABLE); + DMA_Cmd(DMA2_Stream2, DISABLE); + ADC_DMARequestAfterLastTransferCmd(ADC1, DISABLE); + ADC_DMARequestAfterLastTransferCmd(ADC2, DISABLE); + ADC_Cmd(ADC1, DISABLE); + ADC_Cmd(ADC2, DISABLE); + ADC_DMACmd(ADC1, DISABLE); + ADC_DMACmd(ADC2, DISABLE); + ADC_DeInit(); +} + +void Adc::Convert() { + ADC_SoftwareStartConv(ADC1); + ADC_SoftwareStartConv(ADC2); +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/adc.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/adc.h new file mode 100644 index 00000000..ae2c0d46 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/adc.h @@ -0,0 +1,81 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for ADC. ADC1 is used for the 8 pots ; ADC2 for the 8 CV inputs. + +#ifndef MARBLES_DRIVERS_ADC_H_ +#define MARBLES_DRIVERS_ADC_H_ + +#include "stmlib/stmlib.h" + +namespace marbles { + +enum AdcParameter { + ADC_CHANNEL_DEJA_VU_AMOUNT, + ADC_CHANNEL_DEJA_VU_LENGTH, + ADC_CHANNEL_X_SPREAD_2 = ADC_CHANNEL_DEJA_VU_LENGTH, + ADC_CHANNEL_T_RATE, + ADC_CHANNEL_T_BIAS, + ADC_CHANNEL_T_JITTER, + ADC_CHANNEL_X_SPREAD, + ADC_CHANNEL_X_BIAS, + ADC_CHANNEL_X_STEPS, + ADC_CHANNEL_LAST +}; + +enum AdcGroup { + ADC_GROUP_POT = 0, + ADC_GROUP_CV = ADC_CHANNEL_LAST +}; + +class Adc { + public: + Adc() { } + ~Adc() { } + + void Init(bool single_channel); + void DeInit(); + void Convert(); + + inline float float_value(int channel) const { + return static_cast(values_[channel]) / 65536.0f; + } + inline uint16_t value(int channel) const { + return values_[channel]; + } + inline const uint16_t* values() const { + return &values_[0]; + } + + private: + uint16_t values_[ADC_CHANNEL_LAST * 2]; + + DISALLOW_COPY_AND_ASSIGN(Adc); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_ADC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/clock_inputs.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/clock_inputs.cc new file mode 100644 index 00000000..a78cbbfe --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/clock_inputs.cc @@ -0,0 +1,122 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the two clock inputs and their normalization probe. + +#include "marbles/drivers/clock_inputs.h" + +#include + +namespace marbles { + +using namespace std; +using namespace stmlib; + +struct ClockInputDefinition { + GPIO_TypeDef* gpio; + uint16_t pin; +}; + +const ClockInputDefinition clock_input_definition[] = { + { GPIOC, GPIO_Pin_9 }, // CLOCK_INPUT_T, + { GPIOA, GPIO_Pin_8 }, // CLOCK_INPUT_X, +}; + +void ClockInputs::Init() { + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + + // Initialize probe. + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_8; + GPIO_Init(GPIOC, &gpio_init); + + // Initialize inputs. + gpio_init.GPIO_Mode = GPIO_Mode_IN; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + + for (int i = 0; i < CLOCK_INPUT_LAST; ++i) { + gpio_init.GPIO_Pin = clock_input_definition[i].pin; + GPIO_Init(clock_input_definition[i].gpio, &gpio_init); + previous_flags_[i] = 0; + normalization_mismatch_count_[i] = 0; + normalized_[i] = false; + } + + normalization_probe_state_ = 0; + normalization_decision_count_ = 0; +} + +void ClockInputs::ReadNormalization(IOBuffer::Block* block) { + ++normalization_decision_count_; + if (normalization_decision_count_ >= kProbeSequenceDuration) { + normalization_decision_count_ = 0; + for (int i = 0; i < CLOCK_INPUT_LAST; ++i) { + normalized_[i] = \ + normalization_mismatch_count_[i] < kProbeSequenceDuration / 8; + normalization_mismatch_count_[i] = 0; + } + } + + int expected_value = normalization_probe_state_ >> 31; + for (int i = 0; i < CLOCK_INPUT_LAST; ++i) { + int read_value = previous_flags_[i] & GATE_FLAG_HIGH; + normalization_mismatch_count_[i] += read_value ^ expected_value; + block->input_patched[i] = !normalized_[i]; + } + + normalization_probe_state_ = 1103515245 * normalization_probe_state_ + 12345; + if (normalization_probe_state_ >> 31) { + GPIOC->BSRRL = GPIO_Pin_8; + } else { + GPIOC->BSRRH = GPIO_Pin_8; + } +} + +void ClockInputs::Read(const IOBuffer::Slice& slice, size_t size) { + for (int i = 0; i < CLOCK_INPUT_LAST; ++i) { + previous_flags_[i] = ExtractGateFlags( + previous_flags_[i], + !(clock_input_definition[i].gpio->IDR & clock_input_definition[i].pin)); + slice.block->input[i][slice.frame_index] = previous_flags_[i]; + } + + // Extend gate input data to the next samples. + for (size_t j = 1; j < size; ++j) { + for (int i = 0; i < CLOCK_INPUT_LAST; ++i) { + slice.block->input[i][slice.frame_index + j] = \ + previous_flags_[i] & GATE_FLAG_HIGH; + } + } +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/clock_inputs.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/clock_inputs.h new file mode 100644 index 00000000..583884ec --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/clock_inputs.h @@ -0,0 +1,75 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the two clock inputs and their normalization probe. + +#ifndef MARBLES_DRIVERS_CLOCK_INPUTS_H_ +#define MARBLES_DRIVERS_CLOCK_INPUTS_H_ + +#include "stmlib/stmlib.h" +#include "marbles/io_buffer.h" + +namespace marbles { + +enum ClockInput { + CLOCK_INPUT_T, + CLOCK_INPUT_X, + CLOCK_INPUT_LAST +}; + +class ClockInputs { + public: + ClockInputs() { } + ~ClockInputs() { } + + void Init(); + void Read(const IOBuffer::Slice& slice, size_t size); + void ReadNormalization(IOBuffer::Block* block); + + bool is_normalized(ClockInput input) { + return normalized_[input]; + } + + bool value(ClockInput input) { + return previous_flags_[input] & stmlib::GATE_FLAG_HIGH; + } + + private: + static const int kProbeSequenceDuration = 64; + + stmlib::GateFlags previous_flags_[CLOCK_INPUT_LAST]; + + uint32_t normalization_probe_state_; + bool normalized_[CLOCK_INPUT_LAST]; + int normalization_mismatch_count_[CLOCK_INPUT_LAST]; + int normalization_decision_count_; + + DISALLOW_COPY_AND_ASSIGN(ClockInputs); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_CLOCK_INPUTS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/dac.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/dac.cc new file mode 100644 index 00000000..8cffeb9d --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/dac.cc @@ -0,0 +1,160 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for DAC. + +#include "marbles/drivers/dac.h" + +#include + +namespace marbles { + +/* static */ +Dac* Dac::instance_; + +void Dac::Init(int sample_rate, size_t block_size) { + instance_ = this; + block_size_ = block_size; + callback_ = NULL; + InitializeGPIO(); + InitializeAudioInterface(sample_rate); + InitializeDMA(block_size); +} + +void Dac::InitializeGPIO() { + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + + // Initialize SS pin. + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_25MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_15; + GPIO_Init(GPIOA, &gpio_init); + + // Initialize MOSI and SCK pins. + gpio_init.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_12; + GPIO_Init(GPIOC, &gpio_init); + + GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_SPI3); +} + +void Dac::InitializeAudioInterface(int sample_rate) { + RCC_I2SCLKConfig(RCC_I2S2CLKSource_PLLI2S); + RCC_PLLI2SCmd(DISABLE); + // Best results for multiples of 32kHz. + RCC_PLLI2SConfig(258, 3); + RCC_PLLI2SCmd(ENABLE); + while (RCC_GetFlagStatus(RCC_FLAG_PLLI2SRDY) == RESET); + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); + SPI_I2S_DeInit(SPI3); + I2S_InitTypeDef i2s_init; + i2s_init.I2S_Mode = I2S_Mode_MasterTx; + i2s_init.I2S_Standard = I2S_Standard_PCMShort; + i2s_init.I2S_DataFormat = I2S_DataFormat_32b; + i2s_init.I2S_MCLKOutput = I2S_MCLKOutput_Disable; + i2s_init.I2S_AudioFreq = sample_rate * kNumDacChannels >> 1; + i2s_init.I2S_CPOL = I2S_CPOL_Low; + I2S_Init(SPI3, &i2s_init); + I2S_Cmd(SPI3, ENABLE); +} + +void Dac::InitializeDMA(size_t block_size) { + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); + + DMA_Cmd(DMA1_Stream5, DISABLE); + DMA_DeInit(DMA1_Stream5); + + DMA_InitTypeDef dma_init; + dma_init.DMA_Channel = DMA_Channel_0; + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&(SPI3->DR); + dma_init.DMA_Memory0BaseAddr = (uint32_t)(&tx_dma_buffer_[0]); + dma_init.DMA_DIR = DMA_DIR_MemoryToPeripheral; + dma_init.DMA_BufferSize = 2 * block_size * kNumDacChannels * 2; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_FIFOMode = DMA_FIFOMode_Disable; + dma_init.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; + dma_init.DMA_MemoryBurst = DMA_MemoryBurst_Single; + dma_init.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream5, &dma_init); + + // Enable the interrupts. + DMA_ITConfig(DMA1_Stream5, DMA_IT_TC | DMA_IT_HT, ENABLE); + + // Enable the IRQ. + NVIC_EnableIRQ(DMA1_Stream5_IRQn); + + // Start DMA from/to codec. + SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Tx, ENABLE); +} + +void Dac::Start(FillBufferCallback callback) { + callback_ = callback; + DMA_Cmd(DMA1_Stream5, ENABLE); +} + +void Dac::Stop() { + DMA_Cmd(DMA1_Stream5, DISABLE); +} + +void Dac::Fill(size_t offset) { + // Fill the buffer. + IOBuffer::Slice slice = (*callback_)(block_size_); + uint16_t* p = &tx_dma_buffer_[offset * block_size_ * kNumDacChannels * 2]; + for (size_t i = 0; i < block_size_; ++i) { + for (size_t j = 0; j < kNumDacChannels; ++j) { + uint16_t sample = slice.block->cv_output[j][slice.frame_index + i]; + *p++ = 0x1000 | (j << 9) | (sample >> 8); + *p++ = sample << 8; + } + } +} + +} // namespace marbles + +extern "C" { + +void DMA1_Stream5_IRQHandler(void) { + uint32_t flags = DMA1->HISR; + DMA1->HIFCR = DMA_FLAG_TCIF5 | DMA_FLAG_HTIF5; + if (flags & DMA_FLAG_TCIF5) { + marbles::Dac::GetInstance()->Fill(1); + } else if (flags & DMA_FLAG_HTIF5) { + marbles::Dac::GetInstance()->Fill(0); + } +} + +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/dac.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/dac.h new file mode 100644 index 00000000..d2d9ec87 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/dac.h @@ -0,0 +1,82 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for quad SPI DAC. + +#ifndef MARBLES_DRIVERS_DAC_H_ +#define MARBLES_DRIVERS_DAC_H_ + +#include "stmlib/stmlib.h" + +#include + +#include "marbles/io_buffer.h" + +namespace marbles { + +enum DacChannel { + DAC_CHANNEL_X_1, + DAC_CHANNEL_X_2, + DAC_CHANNEL_X_3, + DAC_CHANNEL_Y, + DAC_CHANNEL_LAST +}; + +const size_t kMaxDacBlockSize = 8; +const size_t kNumDacChannels = 4; + +class Dac { + public: + Dac() { } + ~Dac() { } + + typedef IOBuffer::Slice (*FillBufferCallback)(size_t size); + + void Init(int sample_rate, size_t block_size); + void Start(FillBufferCallback callback); + void Stop(); + void Fill(size_t offset); + + static Dac* GetInstance() { return instance_; } + + private: + void InitializeGPIO(); + void InitializeAudioInterface(int sample_rate); + void InitializeDMA(size_t block_size); + static Dac* instance_; + + size_t block_size_; + FillBufferCallback callback_; + + // There are 8 16-bit words per frame. + uint16_t tx_dma_buffer_[2 * kMaxDacBlockSize * kNumDacChannels * 2]; + + DISALLOW_COPY_AND_ASSIGN(Dac); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_DAC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/debug_pin.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/debug_pin.h new file mode 100644 index 00000000..a7966985 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/debug_pin.h @@ -0,0 +1,76 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the debug (timing) pin. + +#ifndef MARBLES_DRIVERS_DEBUG_PIN_H_ +#define MARBLES_DRIVERS_DEBUG_PIN_H_ + +#include "stmlib/stmlib.h" + +#ifndef TEST +#include +#endif + +namespace marbles { + +class DebugPin { + public: + DebugPin() { } + ~DebugPin() { } +#ifdef TEST + static void Init() { } + static void High() { } + static void Low() { } +#else + static void Init() { + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Pin = GPIO_Pin_9; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &gpio_init); + } + static inline void High() { + GPIOA->BSRRL = GPIO_Pin_9; + } + static inline void Low() { + GPIOA->BSRRH = GPIO_Pin_9; + } +#endif + private: + DISALLOW_COPY_AND_ASSIGN(DebugPin); +}; + +#define TIC DebugPin::High(); +#define TOC DebugPin::Low(); + +} // namespace marbles + +#endif // MARBLES_DRIVERS_DEBUG_PIN_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/debug_port.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/debug_port.h new file mode 100644 index 00000000..5f05f269 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/debug_port.h @@ -0,0 +1,94 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// UART driver for conversing with the factory testing program. + +#ifndef MARBLES_DRIVERS_DEBUG_PORT_H_ +#define MARBLES_DRIVERS_DEBUG_PORT_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace marbles { + +class DebugPort { + public: + DebugPort() { } + ~DebugPort() { } + + void Init() { + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + + // Initialize TX and RX pins. + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &gpio_init); + + GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1); + + // Initialize USART. + USART_InitTypeDef usart_init; + usart_init.USART_BaudRate = 9600; + usart_init.USART_WordLength = USART_WordLength_8b; + usart_init.USART_StopBits = USART_StopBits_1; + usart_init.USART_Parity = USART_Parity_No; + usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + usart_init.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; + USART_Init(USART1, &usart_init); + + USART_Cmd(USART1, ENABLE); + } + + bool writable() { + return USART1->SR & USART_FLAG_TXE; + } + + bool readable() { + return USART1->SR & USART_FLAG_RXNE; + } + + void Write(uint8_t byte) { + USART1->DR = byte; + } + + uint8_t Read() { + return USART1->DR; + } + + private: + DISALLOW_COPY_AND_ASSIGN(DebugPort); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_DEBUG_PORT_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/gate_outputs.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/gate_outputs.h new file mode 100644 index 00000000..d0575a83 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/gate_outputs.h @@ -0,0 +1,86 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the two gate outputs. + +#ifndef MARBLES_DRIVERS_GATE_OUTPUTS_H_ +#define MARBLES_DRIVERS_GATE_OUTPUTS_H_ + +#include "stmlib/stmlib.h" + +#include + +#include "marbles/io_buffer.h" + +namespace marbles { + +class GateOutputs { + public: + GateOutputs() { } + ~GateOutputs() { } + + void Init() { + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12; + GPIO_Init(GPIOA, &gpio_init); + + gpio_init.GPIO_Pin = GPIO_Pin_11; + GPIO_Init(GPIOC, &gpio_init); + } + + inline void Write(IOBuffer::Slice s) { + if (s.block->gate_output[0][s.frame_index]) { + GPIOC->BSRRL = GPIO_Pin_11; + } else { + GPIOC->BSRRH = GPIO_Pin_11; + } + if (s.block->gate_output[1][s.frame_index]) { + GPIOA->BSRRL = GPIO_Pin_11; + } else { + GPIOA->BSRRH = GPIO_Pin_11; + } + if (s.block->gate_output[2][s.frame_index]) { + GPIOA->BSRRL = GPIO_Pin_12; + } else { + GPIOA->BSRRH = GPIO_Pin_12; + } + } + + + private: + DISALLOW_COPY_AND_ASSIGN(GateOutputs); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_GATE_OUTPUTS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/leds.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/leds.cc new file mode 100644 index 00000000..010d7bce --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/leds.cc @@ -0,0 +1,86 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for all the LEDs. + +#include "marbles/drivers/leds.h" + +#include + +#include + +namespace marbles { + +using namespace std; + +struct LedDefinition { + GPIO_TypeDef* gpio; + uint16_t pin[3]; // pins for R, G, B - assumed to be on the same GPIO +}; + +const LedDefinition led_definition[] = { + { GPIOB, { 0, GPIO_Pin_10, 0 } }, // LED_T_DEJA_VU + { GPIOB, { GPIO_Pin_13, GPIO_Pin_12, 0 } }, // LED_T_MODEL + { GPIOC, { GPIO_Pin_7, GPIO_Pin_6, 0 } }, // LED_T_RANGE + { GPIOB, { 0, GPIO_Pin_9, 0 } }, // LED_X_DEJA_VU + { GPIOB, { GPIO_Pin_8, GPIO_Pin_7, 0 } }, // LED_X_CONTROL_MODE, + { GPIOB, { GPIO_Pin_4, GPIO_Pin_5, 0 } }, // LED_X_RANGE + { GPIOB, { 0, GPIO_Pin_3, 0 } } // LED_X_EXT +}; + +void Leds::Init() { + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + + for (int i = 0; i < LED_LAST; ++i) { + LedDefinition d = led_definition[i]; + gpio_init.GPIO_Pin = d.pin[0] | d.pin[1] | d.pin[2]; + GPIO_Init(d.gpio, &gpio_init); + } + Clear(); +} + +void Leds::Clear() { + fill(&colors_[0], &colors_[LED_LAST], LED_COLOR_OFF); +} + +void Leds::Write() { + for (int i = 0; i < LED_LAST; ++i) { + LedDefinition d = led_definition[i]; + GPIO_WriteBit(d.gpio, d.pin[0], static_cast( + (colors_[i] & 0x800000) >> 23)); + GPIO_WriteBit(d.gpio, d.pin[1], static_cast( + (colors_[i] & 0x008000) >> 15)); + } +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/leds.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/leds.h new file mode 100644 index 00000000..2c413946 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/leds.h @@ -0,0 +1,75 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for all the LEDs. + +#ifndef MARBLES_DRIVERS_LEDS_H_ +#define MARBLES_DRIVERS_LEDS_H_ + +#include "stmlib/stmlib.h" + +namespace marbles { + +enum Led { + LED_T_DEJA_VU, + LED_T_MODEL, + LED_T_RANGE, + LED_X_DEJA_VU, + LED_X_CONTROL_MODE, + LED_X_RANGE, + LED_X_EXT, + LED_LAST +}; + +enum LedColor { + LED_COLOR_OFF = 0, + LED_COLOR_RED = 0xff0000, + LED_COLOR_GREEN = 0x00ff00, + LED_COLOR_YELLOW = 0xffff00, +}; + +class Leds { + public: + Leds() { } + ~Leds() { } + + void Init(); + void Write(); + void Clear(); + + void set(Led led, uint32_t color) { + colors_[led] = color; + } + + private: + uint32_t colors_[LED_LAST]; + + DISALLOW_COPY_AND_ASSIGN(Leds); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_LEDS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/rng.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/rng.h new file mode 100644 index 00000000..593603a9 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/rng.h @@ -0,0 +1,62 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for built-in random number generator. + +#ifndef MARBLES_DRIVERS_RNG_H_ +#define MARBLES_DRIVERS_RNG_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace marbles { + +class Rng { + public: + Rng() { } + ~Rng() { } + + void Init() { + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE); + RNG_Cmd(ENABLE); + } + + inline bool readable() { + return RNG->SR & RNG_FLAG_DRDY; + } + + inline uint32_t data() { + return RNG->DR; + } + + private: + DISALLOW_COPY_AND_ASSIGN(Rng); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_RNG_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/switches.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/switches.cc new file mode 100644 index 00000000..2e5bb33f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/switches.cc @@ -0,0 +1,79 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the front panel switch. + +#include "marbles/drivers/switches.h" + +#include + +namespace marbles { + +using namespace std; + +struct SwitchDefinition { + GPIO_TypeDef* gpio; + uint16_t pin; +}; + +const SwitchDefinition switch_definitions[] = { + { GPIOB, GPIO_Pin_11 }, // SWITCH_T_DEJA_VU, + { GPIOB, GPIO_Pin_14 }, // SWITCH_T_MODE + { GPIOB, GPIO_Pin_15 }, // SWITCH_T_RANGE + { GPIOC, GPIO_Pin_15 }, // SWITCH_X_DEJA_VU, + { GPIOC, GPIO_Pin_13 }, // SWITCH_X_MODE, + { GPIOB, GPIO_Pin_6 }, // SWITCH_X_RANGE + { GPIOD, GPIO_Pin_2 } // SWITCH_X_EXT +}; + +void Switches::Init() { + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_IN; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_UP; + + for (int i = 0; i < SWITCH_LAST; ++i) { + SwitchDefinition definition = switch_definitions[i]; + gpio_init.GPIO_Pin = definition.pin; + GPIO_Init(definition.gpio, &gpio_init); + } + fill(&switch_state_[0], &switch_state_[SWITCH_LAST], 0xff); +} + +void Switches::Debounce() { + for (int i = 0; i < SWITCH_LAST; ++i) { + SwitchDefinition definition = switch_definitions[i]; + switch_state_[i] = (switch_state_[i] << 1) | \ + GPIO_ReadInputDataBit(definition.gpio, definition.pin); + } +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/switches.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/switches.h new file mode 100644 index 00000000..a1fcb6d4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/switches.h @@ -0,0 +1,87 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the 6 front panel switches. + +#ifndef MARBLES_DRIVERS_SWITCHES_H_ +#define MARBLES_DRIVERS_SWITCHES_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace marbles { + +enum Switch { + SWITCH_T_DEJA_VU, + SWITCH_T_MODEL, + SWITCH_T_RANGE, + SWITCH_X_DEJA_VU, + SWITCH_X_MODE, + SWITCH_X_RANGE, + SWITCH_X_EXT, + SWITCH_LAST +}; + +class Switches { + public: + Switches() { } + ~Switches() { } + + void Init(); + void Debounce(); + + inline bool released(Switch s) const { + return switch_state_[s] == 0x7f; + } + + inline bool just_pressed(Switch s) const { + return switch_state_[s] == 0x80; + } + + inline bool pressed(Switch s) const { + return switch_state_[s] == 0x00; + } + + inline bool pressed_immediate(Switch s) const { + if (s == SWITCH_T_DEJA_VU) { + return !GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11); + } else if (s == SWITCH_X_MODE) { + return !GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13); + } else { + return false; + } + } + + private: + uint8_t switch_state_[SWITCH_LAST]; + + DISALLOW_COPY_AND_ASSIGN(Switches); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_SWITCHES_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/system.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/system.cc new file mode 100644 index 00000000..db914e8a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/system.cc @@ -0,0 +1,48 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// System level initialization. + +#include "marbles/drivers/system.h" + +#include + +namespace marbles { + +void System::Init(bool application) { + if (application) { + NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); + } + IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); + IWDG_SetPrescaler(IWDG_Prescaler_32); +} + +void System::StartTimers() { + SysTick_Config(F_CPU / 1000); + IWDG_Enable(); +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/system.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/system.h new file mode 100644 index 00000000..f3116aa6 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/drivers/system.h @@ -0,0 +1,50 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// System-level initialization. + +#ifndef MARBLES_DRIVERS_SYSTEM_H_ +#define MARBLES_DRIVERS_SYSTEM_H_ + +#include "stmlib/stmlib.h" + +namespace marbles { + +class System { + public: + System() { } + ~System() { } + + void Init(bool application); + void StartTimers(); + + private: + DISALLOW_COPY_AND_ASSIGN(System); +}; + +} // namespace marbles + +#endif // MARBLES_DRIVERS_SYSTEM_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/Marbles.xlsx b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/Marbles.xlsx new file mode 100644 index 00000000..e5bea994 Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/Marbles.xlsx differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/panel/marbles_v70.ai b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/panel/marbles_v70.ai new file mode 100644 index 00000000..7534b407 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/panel/marbles_v70.ai @@ -0,0 +1,2483 @@ +%PDF-1.5 %âãÏÓ +1 0 obj <>/OCGs[5 0 R 6 0 R 7 0 R 33 0 R 34 0 R 35 0 R 60 0 R 61 0 R 62 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + 2018-01-05T20:59:46+01:00 + 2018-10-05T11:32:14+02:00 + Adobe Illustrator CC 2017 (Macintosh) + 2018-10-05T11:32:14+02:00 + + + + 188 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAC8AwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4qhrlkEqiZzHBxJDBi gL16FgR26Dvv4ZCR335NsAa2FlfaklXoS0Yb905NSVoO5671wxRkHzVsk1uxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KqV0zLAStRuvIjqF5DkRT/JrkZ8meMbqVu0XrgQSGSLgxkPMyAMCOO5 LU2rkYkXszmDW4o+6kVljS7FUB+ntK/363/IuT/mnFXfp7S/9+t/yLk/5pxVr9PaV/v4/wDIuT/m nFW/09pX+/W/5Fyf804q1+ntK/38f+Rcn/NOKt/p7Sv9+n/kXJ/zTirv09pf+/W/5Fyf804q79Pa V/v4/wDIuT/mnFWv09pX+/j/AMi5P+acVb/T2l/79b/kXJ/zTirv09pX+/T/AMi5P+acVd+ntK/3 8f8AkXJ/zTirv09pf+/W/wCRcn/NOKu/T2l/79b/AJFyf804q79PaV/v0/8AIuT/AJpxV36e0r/f p/5Fyf8ANOKu/T2lf79b/kXJ/wA04q1+ntK/38f+Rcn/ADTirf6e0r/frf8AIuT/AJpxVr9PaV/v 4/8AIuT/AJpxVv8AT2l/79b/AJFyf804q79PaV/v0/8AIuT/AJpxVr9PaV/v4/8AIuT/AJpxVGev F9X+sV/dcPU5UP2aVrTr0xVjTeULhjUyIf8AZEfqTb6MNq7/AAhc/wC/U/4I/wDNGNq1/g+4rX1E J/1m/wCacbVcfKNwW5F46+xoPuCAfhjatf4QuP8AfiV8eR/5pxtWj5QuNv3ibf5R/Vwpjar38qXL GvOMUAGxI6CnZBjarB5PnrX1Er/rH/mjG1d/hC4/34lfHk36+NcbVc3lO5IA9SMUFNj/AM2UxtWh 5QuB/uxPc8jX/iONqt/wjMGC+rGCQSF5HcDqacPfG1XnylckAeom21eR/H4Kn6cbVoeULgf7sT/g j+rhTG1a/wAH3HaRB4/Ef+acbVcfKd0U4eogANdjvvT/ACPbG1W/4QuB0kQf7I/j8ONq7/CFz/v1 P+CP/NG30Y2rY8o3AXiHjoeu5r9/CuNq1/hC5pQSoP8AZH/mj9WNq2fKFwf92JT/AFj/AM0b/Tja uHlG4AI5pQ+5/D4NvoxtXf4QuP8AfiU8OR/5oxtU/wDqbfor6lUcvQ9GvavDj4fwwKisVSbzF5os tDfT4pwXm1K6jtIIxUfaqzvsG+xGjNT2xVOcVUS0kzMsbenGh4lwASSOvGtRt0OR3PJsoDm70rhP iWVpSOqOFAI9ioWhxojqvFE9KVI5FkjV1+ywqPHCDYYSFGl2FDsVdirsVQj3rM5jtYzKw2Z/2B9O KpPdDUf8Y6WS0Yb9HahQb0p69lXtiqcC8liYLdR8AdhKu64qiwQRUbg9DirsVdirsVcSACSaAbkn FVBRPMA/qNCh3RVC8qf5XIN+rICz5NhqO1W4mWCjPIZIiQGLABlrtWqgCn0Y7hdpchRV8m1sJj83 eZpfM+qeWI7a3OpWr281rKY5hAbCZCWuJG5faDq0Sop3YeFSpVmq8go5EFqfEQKAnvQVOBW8Vdiq Q+YdB1HUdX0W+tLqOAaZLLI6yJzP75BEXj7cxEZEFdvjr2oVU+xVRtdlkjP2lkckezsWH4NkYtmT ofIJf+h9QUEtr19QDclLEAfCgr/vN/kE/wCyPbjxk10sttM1dYeSatMOZLqssMDUDO7bhUjNSrrX f9n55GHJnk5r/R81RAkXVlcgD4UaCWAnZPtOJZR1DnZO48CWkwXfpDXIXAuNKEqEgB7O4SSgLsKs swtqUUKxpXqRvSpVaj8z6MSiXExsZnApFeo1sxJT1Cq+qFVyFrXgT0PgcVRl9I/FIIzR5jxr4Dvi qoBFbQqqjYbKo6sx/icBNJjG0lujdnzjpZogb9HahRKkinr2Vat7/L78HqZenz/H4707VlmRkdaM PhkjO/X9YOEG0SjShZ8opZLVjUJ8UZPXicLFRn8w6PFMYBcCe5UhXt7ZWuJVJfh8SQh2X4upYUFC TsDRVSGqa1Ogaz0hkqvJTfTJADVGYbRC5dfi4qeSgip22oVVxi8zyGv1qyt1r9gQSzmnJT9szQ/s Bh9nqQf2aMqpXGk63Lbsr6xJzKMGWKGBFYlHH7aykbsp6/s/PBIWCygakCqR6ZfSBZV1u94khuPC y6c1bif9Gr0Qoe9GPfiQg2gijSMnRk08wNI00rR+kJH4h3cjjyYIFWp6nioHtgnyZ4vqB7l979d+ qy/UhGbvj+59YsI+X+Vx+KnyyTWw2w8ka5Z+Z9K8xLc276gbaa38yysZK3frNG6+kKURYDF+6U9F PH/KxVnGKuxVJdb85+WNDuY7XVL5be4lHJI+LueNaVbgrcR7tlsMM5iwHC1PaODBIRySon3/AKER deY9DtVhaa8QLcIJIWSrhkb7LAoG+E9jmBqdbiwy4ckqLssGGWWPFAcUe9D6x508r6O0C6jqCQtc KJIVAeQlD0f92r0U+J2y8ZIkAg7FvwaDNlvgjdfD70zQ215DFcwS8kkUPDPE1QVbcEHcMPnhIB3c c3AmJHwLjAq/FNK0iruA5UKPmFCg/Tjw96OPuFKR1WyrQMT7gGn45Jguj1OzduIelehI2+/FUUCC Kjpiq2WKOWN4pUEkUgKujAFWUihBB6g4qkU/lvTI9Sge19TT2PIj6pI8KFiwdqxKfSNSm9U7n+Y1 VVJdM1mK4tzFrDyRiqqLqCKQh+L0JMQt9qMB9A8TkTzDOPIrZNG8wyavb6kdRtOVtDNbpGLOWhS4 e3diT9a6j6s1P9Yfy/FJgvGn61LeyGTVjEoRA31WCNN6yECs31jpyB+7xyP8TM/SPepN5csJtSC3 rzagDCRKl1KzxMp4ijQLxhP2B+x3b+ZqyYJ3Bb29vEIbeJIYlqVjjUKoqamgFBuTXFVTFUO9/aKQ OdSegUE/qxVr9I2oI5Fkr4qcVXLHFLWSCRkLfaKUoT7qwIr9FciYsxPv3XLCkZMjuXYA1kcjYewF FH0DERRKe3cEn0rzz5T1XUG0/T9SjnvF5fuwHUNwry4Myqr0Ar8JO2/TL54JxFkbOvwdp6fLPghM GX45d/wRlp5h0W7uja290kk4r8NGFadeJIAb6DmuxdoYMk+CMgZfj5u2npckY8RGyE03zx5U1LUm 0yx1KOe9FaRgMA3Hc8HICP8A7EnMoTBbcvZ+fHDjlEiP4+SeZJwnmXn38sta1nX5tT02SBhdpGHE 7sjRPGAlV4qwZSo+dcz9PqhCNHo8v2r2Hkz5TkgR6q5k7V3fBGzeQruzs7K1t7qGThDHBI8/wEvH TdNm+E/y5yfa3Z08+Y5IGPq7/J7XsjJHT6eOI2eAcwlvmr8rdfury2uNJuoG/dQxXK3FR8UVRt8L 1jbl8SffXNhg0px44x50Hb6PtjFGJGQHmarz/T5s20ayXy55esdKMn1iW3j4c+gJrVj7CrbZmRFB 0er1HjZZTquIuT1b6dirUanfYbAD6BknHU2tLmN/TaM1PTaoNB0FMUNw2dxO/wC7FFU/3h2GxxVe lxLZzupJZtlIPSux33xSm9rcpcRCRPkw8DgVTv4naISR/wB7Cea/R1GKtRXdvcRlW2BA5A7CvsfY 4kJBpsowlEX1qQMQWA/dnYUHda98jwnvZ8Y7h9v62zPa2yEcuhq29STWhJJwgUwlK1lgHk53TijS n4B4KOmFCJlkSKNpHNFUVOKpPcXclw6K4KoQSFp4nbvhVYsF5GX4JUgCpG5FRtTFXelelXHAsvUk igFa+Pj1xVrjJbFHNRIKEe64qjJgmq6deadKzRPPDJC7AfEFkUryHuK4YyogtWbH4kJQO3ECPm82 8s/lFr1lrkM+oXMC2VryKPAzmRyUKLsVHH7VTmZqtTHJiMBfqFPM9mdhZcGpjkkY8MDe3VkOneSL n6+VuLiIQwqyEwsTIeQYDYj4a8qmucXo+x5wygyMeGPdzfRcvaA4dgbPfySHyn+Uet6X5ht7q7uL f6lZzC4WSIuZZSgIReJACjf4t86AYzbm63tvHkxGMQeKQrfkHrGXPMOxVBXVxDazVuF5C6ZYYT8O 7MP7qhI60JyB58rbQbA3qvxaJgVo4FVzuo370HhXvQbVyURQYTIJ2SO5uGuJTIRSg+FfAA0yTBG6 RBIrvKacHFBTxwJR73MSNxJZmHUIrOR8+INMiZAMxAluOeKQkKSGG5VgVanjRgDTCJAolAhKdUgl S4abaj/Z6dgAeuFi1ptw0M4Q/YlIFPAtX9XTFU6xVjmqXml2k06PdwJGpHqKZUUxu3QNU/DX3wqo rdW7ygCWN5SRxo1WJ48hShp9nf5b4oVLO6sLiVYvrUVCPVkJkUkryCDv0LED54qyUAAAAUA2AwJS 6/lDzejvSNeRA7knbFUNp8TXFzzl+JQDtXceG4xVNnkihUA1FdlUAsxp4AVJwE0yjElpbqFmC/Ep Ow5o6AnwqwG+DiCTjKH1K1Dwl0Hxggnc9B7dMkwS+3mkVfWO7RGtR3HcYVTokyQn024l1+B+tKjY 5EpB3QUM8M04tok4T2ZX1xUH0wy1pWu/Mf165ADltTaTz3u0wyxpdirsVSjzDMkR00s4X/TYupI2 owPRX8e9B7jAZAc0iJPIJpcHjBIaFqKTxHU7YUJLZW0VzOQ7cQNwg708K4VTh+FtbOY0AEalgg70 FcjI0LZQFkBdBGI4lUHkaVZv5iep+nGIoLI2Vl1sqONnWRAD7M4VvvBwSZY+o8iuntoZ14yLWn2W 7j5ZJrSV40tbygIlCkUHfY17d8Kp9gV5v5i/JqHWdY1DVDqfpSXkqzRx+gaKR6XISMksbyf3C8d1 41bxw2qCk/LG8fXrPWpNUl+uWNx9ZRIokSItSO3KspZ2obeH0/tVqzGtPhxQmNh+TOlWt616l9Ms 015LcTKApH1eae3uvqilq8USezRlYdiw71Cl6JgVI7omS7cE8PiKe9K036beGFCaWEapAFHE0O7L 374Et245SSyt9vkUAPVVWm30/a+nIR5ktk9gB+Px0VnRXUqwqrChGTItgDSnasXt15nkQCpY/tcT x5f7KlcjA7MsgqST3kSJKSrCjmpVegp2PTJsE2sG5WkZpTY/gSMCpfpk0ba9q8auCQYDxBNaiOjd VUbU7M30YOIJMSN6TfCh2KuxVj+sNxj0iUxGSSbUIBOw41RiHG/J49kb4aCp9jkYcrbMvOug/H2p xCvF5oY9o1A4jsrMN1Ht0P04I7EhZ7gE80ibkHLFuEg69agg07ZY1J1p9z6sfB35Sp1+R6YEqiia BQix+rEuycSAwHYEMQCB41r+vICw2Gpb3RbCyzMpkX041IYJWrEjpypsKHfauGiea2By5oTVLvgv pRvxYbuBXwFNx88k1oCzVvrcVDViwr7DqcKGQYErZZFjjZ2NFUVOKpK11I8nPioY1etPi7Ab17UF MKpvbTrPCHHXow98CquKpPfW5+tSliaceaN7+H0YVVtJuuSiEkdCUoKe5rgVGMkiO0kQDc95IyaV IFKqfGgp/TIkEbhmCCKLXO4k+ERmEHZnYqWH+qFLD7z9+Nk+SaiOtunkS1tvhAAUBUHbwGSAYE2b SYVmEsrH4waqANiSfDCxTZozHbwQtsjMqyn2IJp8i1F+nITbMfU9aSyxWNtY1wMnpRwNbhJQFoOM Aaq0diOPLui/TjICljI3707hZ2iRpBxcqC6+BI3GEcmMgATS7Ch2KpXr2nyTWEj2oY3ETx3CRKQA 7QusnH4lcAtxpUCvvkeFnx7d6TR/mf8Al9FrVt5fbWIYdYuuJjspOfPm9OKSOQUWQ1FFZqnthApi SSnOrWzchMi1U7SU/A4UKOlSrDLI0p4gjqfoOKomTWYxLxRaxj7THau3bFV8OrQMxWUemR0PUUxV Lr5w91JIo5Kab9qADCqY6VamKMyuKO/SvXj/AG4FR2Ksc1bWLj9LNZfV5BYxxK31xVLqZmk4en8N SONQdxTqf2cKtNUmtKVpTfFCy31i5g1S1gjt3ktZnaO8uOJCxUjLoatQHkdqivh1xSyfAqHvLcyo GUVkSpUHofEHFUoQvFOrorR1Br370NMKEwOqxJyBq1AOJ6EnvXAlr9MRbgoQ37O+xNaYqhb66Myj izMvwkoQAAfbCqtp9uJHEnHjEh+HxLD+AwKleqfmV5A0/Xx5b1HWbeHWHAJs35VHIAqrOF4K7Aji pbkewxItINbphoNo0kM97MJFF7MZ44JCKiMKscfKiqSSkYNGLUr1yPCy404yTB2KuxV2KvJtb/IK 11Xz7J5ibWJItNubuHULnTBF8Znh4EhJw60SQxqWDIaU28Qq9ZxVBXGmRyOXU8SafB+zUUGKsKXz l5XMlxD9eUPa3yaXMrxyqfrjyvCkaBkDOGlhkQOgK1U77HCq/RvOPl7V9RtrC0a6Nxc8zEj2V9EK Rs6OXZ4VEYDxutXK7gjrirNbXT4rdiwJYkUFaUHfAqKxVJ5fMC/XrzT0glWeBoo0l4lkZpkZxute PHhvy7keIxVFRaZEqH1jy7t4VIFd/oxtaaaPTmmWX0ywAP2Y3KHpQ1A4nI8YZ+EfwQuk0+3lXlEQ Fc1JFCCDvt9OSBYEUgLnzCum+hbTW80873MFqREhIUTlgshY0UgcDWhr08cVTzFUBq50+2s5r+9m W0t7VGluLg0CrGoqxY+wGKsIl/MfyTatP618wMMUM0kL2t4s3C4eOOLhG0IkZi06AooLDkKimFUQ nnnyiYrh0vAIIWto5Lx4p/q9b3h6ASb0/TfkJlJ4seI3NBU4qnPl3VPL+tTXcVhcvNJp8np3ULRT RAEM0YI9ZI/UQvC45pVSQRXbArJQAAABQDoBiryHX/8AnHmw1j8w/wDFMmryR2El3FqE+miKrmeI KCEm5gIknEFvgrt16UVevYq7FXYq7FXYqkun/pH/ABZrPret9Q+r2P1Tny9HnWf1fTr8PL7HKntX tiqdYq7FWB63+WPkZDLdvp0s099eeq8cc06crq7mkLXHwE0dPrUnxdl22UbKp5beRPL1tq1pqsEc sd5ZiVYWE0nGk0skzhlrRvjnc7+OKsgxVwIIqDUHoRiqEn3v7dT0AYj50P8ATFVWf45ooj9huTt4 HjSi/e1foyEuYDZDYEq2Ta1BPgunRfsuoeg7NWhJ8OW1PkciNi2HeIP4/H7Fh+HUhT9qPf7z/TJN aKJABJNANyT0piqHv7K31Cwns5y/1e6jaOQxO8b8XFDxkjKsu3cHFWOQ/lb5GhsLmwTTFNreG1Nz G7M5cWUiSxKzMSxXnGCwrRu+KpTa/ld5HvJtR066s52SCSFXhe7uWWVBZiCKVgeFT6bMmxYclrXl 0Kso8veUdF0B7uTT0l9W9YNcSTSyTMQHkkCrzLcVDzSNQd2OBU5xVLNX+u/pDRPq/qej9df656fL j6X1K5p6tNuPq8Ptbcqd6YqmeKuxV2KuxVbJIsa1NSSaKo3JPgMBNJjG1P6xINzbyAdz8BoPkrE/ cMHEe5nwDvH2/qVUdXUMpqp6HCDbAim8KEp1AJP5g0q2YKwhS4vaHgSGjCwKQGPMf70tuq9tyOjK ouVYvWf6zG0g29EhGcAU3pxBo3Kv4ZWavduiTXpNd6Q+ftL1nUfJVxaWL0vCkZmQuELopBkTmSAK /PfpmRpskYEGfIOq7Z0+TNhlDF9R+0XyST8mtF1nTdNv3vQYrS4kjNpbmRZCrIrCV/h2XlVffbLt Tnx5aMCJeYdf2Doc+njIZQYg1QP2n4sojsdUtbiW9ubkzJ9alkjhWpVYJAiovxCoKBTsDSrE5jO/ Th1EyI6N8SnnG3UVpT8QaZEi2UZUt9a46G3bl4hk4feSGp/scHEe5lwjvXRRspaWQj1HABp0CrWg HTpU74gdWMj0HJKL+xvtSZ5bO6a1CmNYytV5enMkjfEu9CqstO/LfJMWKef/AC35mufJFpafWfrc 9rK0l+BJx9VSW4UaSnIRlh8LGp8Sd8yNPmhjNzNDvdN23o82oxCOIcRvcDr/AGdyaflZpGs6X5SN vfsBLJPJLaRlxII4mVQq/CWUfGGagPfxwanNDIeKBsVzZdh6TLp8PBmFHi5dw2/afiySNY6x+lE6 XAI9R2Uio/b5vQBv65hgd3N38id7O34+Si49HzPERXje2jh9jTlbSKV35cakTt+x269stcdNMVcS ACSaAdTiqj9Zc7pBI69mHAA/QzKfwyPF5NnB3kfavilWSooVdftI2xFf8+owg2xlGl+Fi7FXYqoj e9bl+zGPT/2THn/xFcj/ABNn8Hx/s/SrZJrUbfaS4A6CTYdhVFY/iScjHmWyfIe79JVsk1pZHzbz NcE8uEdlDx+1xrJLLy/Z4V+AftE+w7qoqNZLiNZjK6K45RotBQHdSag1NOvbIAE722kiJqkq80xm XQryKa4jg9DhI80rCNGjrUc26CpBHzHauYXaGCWXCYA77fFydGayxIF33d6A/LtYHsLi5guYZ4pG ROMDhwrRg1LU6M3IZjdj6SeGMuLa6293627tQkSESCCO9lpAIIIqDsRm5dWktjc37Xt9DbQhbayn 9Bo5W+JmMUcwZKbcSsvc9cVTD65cdDbPy+dR99MVQGq3OpxQrNJADaclSWKN6SfG6oDuKFRyJP6j iqL0PUYtR0q3vYYXt45gSsMilXXixWjAgGu2KpR5+SIaOlxNcxQRQSBmWd+COSCAAT1bwGavtbSz zYxw9Dy73Y9mk+JQBJI6O8m8Y9Bje3uIrhbyZnhaJucaAjda/wCSEJp47YezNPLDi4ZczK/cuu3y mwRwjqnxhmUFkmd3G/F+PFvY0UU+jNhwnvcLiB5hL9SaN9Q0G4BoXuJFSoWpV7SZ6VKsR9gdGH8M kDYYSFGk3woUbz+5A7M8asPENIoIPzGRnybMfP4H7lbJNajLtcwFftHkrD/IpUn/AIILkTzDZH6T +Px1Vsk1uxV2KrJYudGU8ZFrxbr16gjuD3wEMoyr3LP9NPw/u1/4sFST/sDSn/BHB6mXp81SONY0 4r7kk9STuScIFMJGyuwoSmGn+K7v7NRYW1fscqGaeld+dPop74qj1S4hHCJUeMfYDMVKjw2DVp2y FEcmwmJ3PNJfOHleXX/L1zpyTrFdSukqyMD6ZaMghWAqeNB/HAYWPNy9DrBhyidekbee/wClL/y5 8k3vli2uzezRSXN16SlLfmYwsAYK1XAJZue+wGGEKbu1e0I6gjhBqN8+e7Mcm6p575svfzJ9XU7T RorpD+k4XsbyFLTiNO+oxeqitNHcfF9c9Q/FET4GlMVY9Pe/85BQ3lyY7cXVqJ0+oqFs0Z4jLeEC csBw6W6OV34UIoxYgqnfD82rXUYEhuZb6xfUCLqW6WzR0sl1O3QekIYYw3Ky9Uty3oSQeQUYFekY qxb8wfKN55k0y3isrhILu0m9aITAmJvhKkNQNQ77GmQnG3Zdma2OnmTIXGQrbm35G8o3Pl7QWsrq 4Wa7luGu3kjqUR2CrxQtRiKJvWlanBGFBe0NcM+XiiKiI0yEi7ccG4Ip2MiMS1PYECn37Ydy4PpG 6B1VQl9oSr8Ki9cBRUCgsrnbZ0/EN8v2lmA1k2muKtOiuhRhVWFCPY4CLSDRtSpdp8KlJF7M5KsP nQEN+GR9QZ+k+X4/HeujiYMZJG5yEUqBQAeCippXvvhA72MpdByVMkxdirsVdirsVdirsVSyEt/i a6X4uP1K2Nfj419Wf24V+Rr49sVTPFXYq7FXYqsnk9KCSWleCs1PGgrgkaFsoRsgIYi3W5jtpJ3+ uSo8qAM4qsRRXYKPg+EyLsfx3wcDLxPIUiLeRpIqt9oMykjvwYrX6aYxNhjMUVTJMVk0bSQvGsjR M6lRKlOSkinJeQZajtUYqhdH0e00myFrbF3BYySzStzlkkb7TyNtVjiqNxVK9YVjqGhkUot65avh 9SuRt8D9z4r/AK37LKppirsVdirsVdirsVdirE/zL8t+ZPMOgRWPl6/Gm36XKSm69aSAqgR1qGiS QsVZ1biRQ06jrirEZ/Jn5mTalqMUOvwvGYryEWi3VzA6w319cXcM3qmCfhIF9OGiqeKKwB6YVem6 JaXllo1jZ3swubu2t4ori4XnSR0QKz/vGkfcivxMT4nAqNxVKofT/wAVXf2PU+o21f7vnx9aelf9 2cfD9n6a4qmuKqJmlYn0YwyqSCztxFRsQKBq075HiPRnwgcy5ZpVYCZAgY0VlbkK+BqFpjZ6qYjo rZJg06q6lGFVYEMPEHEhINbpLcR3I80aeomX/eG94kpVqerae259+Q/1W6rGj3s+KPd9v7E5jjWN Ai9B3PUkmpJ+ZwgUwkbNrsKFJ5n5lIUDsv2iTxUV7VAbf2pkSe5mIirK0zTp8U0arGOrI5anuQVX bGyOaeEHkd1fJNaXaoaX2j+92/8A1CXH+Uv6m+X7QVTHFVK6jkktZo424yOjKjVIoxBANRirx2P8 vPzSstBstNfzPFFfTN6QuHuLqYh42a5jRGMaFwzwrzLcfgLLv+0Veg+StC8xaW+rS61eC6a+u2uL aMTS3HpI2/HnIsKqN6KiRjiB1bsFZNirsVdirsVSqzIPmTUx4W9pUbfzT/5Cn/hm+juqmuKuxVLI Q3+Jrpvi4/UrYU+PjX1Z/fhX5Cvj2xVM8VUbH/eOAdxGoI8CBQjIw+kNmX6j73Xv+8sgH2iKR/65 NE/4amM+S4vqH496tkmt2KpVceqdetbtUY2UFtdQzzfsrI8kBX/dgOwiav7tv9Zdw0eJn4Z+Ka5J g7FVG0+zID9sSPy8d2JX/hSMjBsydPcPx81VioUliAoFWJ6U98kWAU7MMLSAMCGEahgeteI65GHI Msn1H3oHVWYaloygmhupCRvTa1m8Eb8WX6emSYJnirsVSrWwfrejbV/072/5Zpv8iT/jX/W7FVNc VdirsVdirTuiKWc0Ud8BNJAJ5JNaXAXzDqTsrrG0FruV6UM25AdiAfdF964OJlweYtOuuSYOxVKY WT/Fd2oC8/qFsSfg5U9aenbnTr1NPxxVNsVUmgcMWhf0ydypHJCfGmx+45Hh7mYkOockLcg8r+o4 +yKcVUnbYfLxJxEe9TLoNlXJMHYqxq780aRB5pg8pNP/AKffxvMsQUEhGWSRwW5gjaM/sGlVr1GQ 4Dy6NoyCwa3DJcm1OxVTkhLNzRzHJ0JFCD4BgciQyEuh3WiCRyDPJzA/YUcU+kEsT99PbHh708YH IK2SYJVq1P0rohqK/WZQBtX/AHkmPd1PbsrfR1xVNcVdiqTazcA3ekGNDIFvd2A2P+jzCikyRVP/ AAXyyPF3M+DvNJvHIki8lO3Qgggg+4O4wg2xMSF2FDsVdiqjLvdQBvsUcj/XFKf8LyyJ5hsj9J/G 34pWyTWo2f8Acf5IeQL4cQ5C09qdMjDk2ZOfy+5WyTWlsRb/ABJdDfibO3p9vjUSz9N+Ffktffpi qJgt7uO4kklu2mievpwFEUJU1FGUBjQbb4qua/sV+1cxD5uo7V8fA4q79IWH/LTF0r9teh28cVS7 VNK1q61nTru01RrSxtSTd2aoGE24NCfcbe3bFU4xVLrjy9pNxrVrrU0LPqVmhjtpvUkCorBlP7sN 6ZJEjCpWv4YqmOKoC2tNT/SU11d3Qa3A4WlnEvFFWtS8jGpdzt4AfTiqKku7WNgskyIxPEKzAGtA abn/AChiro7u0lNIpo5DTlRWB+EGldj0xVCarZ3t8tstpd/Vrf1BJcvGWEjoOio6kUr3OKqeq1/S ui0rT6xLWnKn+8svWisv/BFf4YqmmKqV4WFpOVJDCNipHWvE9MjPkWeP6h71RQoUBQAoFFA6U9sk GJUv+P34e8f73/gvg/42yP8AEz/g+P8Ab+hWyTW7FXYqtkjWReLdOoI2IPiDgItINKf1eQ7NcSMv cfAK/Sqg/ccHD5s+Mdw+39asqqqhVACgUAGwAGSayXYqlUKx/wCK7ttvU+oWwP2K8fWuKfs8/wDh qe2Ko+9S8e0lSyljgu2UiCaaMzRq/YtGrxFh7Bx88VYDZ/lFoum8rm5lS+ih9SQia0WWQodNt7Er sTy3tTJQL+1xptUlUql/IyzvrN4YtSgi068tLGL4LApcD6qkNWV2m4qJTDyKmKoY9TTdV6hpdpJZ aZaWckgmktoY4XlClQ5jQKWCszkVpWhY/M4FROKuxV2KuxV5+v5R2DX9xe3FxDNLNqb6nFytQxjD pKpjDySSSV5TKxPLj8ChUXCqRaH+R+mva/WJb+G4ni046RZutlcWiI0U1wsk0kf1kSyF1mK05qpp yHUUVem+XdIGjaHY6UJfXFnCsXrcFj5cR14IAq/59euBVLViv6W0QGlTcy8ala/7yzdKsrf8CD92 +KprirsVUfqxG0czxp2ReBA+XJWOR4e4tnH3gFfFEsYNCWZjVmPUn3wgUxlK1+Fi7FXYqwHzj5l8 76bql6NOs5ZdPtl094hBYS3TSRy3kaXbiSNySyQs/wC7WJmp8XTFUAPN/wCY0+qSiHTpYtJe+iWG dtNuDKls63DJWKR4Gf1PTt/UY8fSLsGpT4Sqffl7rHm/Uhqn+JrV7OaGZVsYjA0UbWxB4yCRvtOz A8124UXbfkwVl+KpZEX/AMTXQ34fUrc/tca+rP0+LhX/AGFfc9lUzxVbJGkkbRuAyOCrKdwQRQ9c VS3yxMX0S2ib+9tAbOYfD/eWzGFvss43KV6/d0xVNMVeV+Z/Nv5lWeq6xDp1lcSWNvcxJbyrp1xJ xiYRfFG0cc3rhub8iiNw479cKo0+cfPq+cLe3TRrqbyzLfek921o8brbGGG3VypHMf6a8jn4do15 bKeWBVG01382jqhguNPrai7m0+OVIVAb0bm2ZLxyxHGKW1a49uSgdSKlXpuBVC/vYLGxuL2c0gtY nmlNQKJGpZt2IHQdziqH0G0ltNGs4JlC3AjDXAAA/fP8cuykj7bHufmcVR+KsY81affXOu+Xntrk xIlyfVi5lVdU4zMKCNyarEf2l7DozYVZPgVj/nO+8xWdrYNocTSPLdiO8dIPrLJB6MrAiL1Ia8pl jRjzFFYmopXFWJXHm38ypP0clhpMxuFW4W/We0kjjkmWUCNfUbiET0iWDivI7YUIjQte/MibzLpV vqNpKNAmto2vLw2YglF0zXdI3j9SbghWKPk3UHj8K89lL0XArsVdiqyWXhxCjlI5oi1p2ruewwE0 yjG1lL0b8o3/AMjiy1/2XJv1YPUy9HmqRSLIgdeh7HqCNiD7jCDbCQo01LLwAoOTueKL0qevX5Cu JNJjG0vjsdRTWZ78vCUlt4YQvGjVjeViK05AfvBvyP8AqjuPUn0+aYxSCRA4FOoIPYg0I+gjCDbG UaLUsgjWtKkkKqjqScSaTGNpTYwalb6xqS0T6vceldoeLcfUZTFJGHAXoIVNTyO/QCgwepPp8/x+ O9NopBItacWB4up6gjCDaJRpuWRY0LGp3AAHUkmgH0k4k0iIsqdL07841/yOLN9HLkP+I4PUz9Hm vil5g1HF0PF160PXr8jXCDbGUablkWNC7dB2HUk7AD3OJNIiLNJRrsGpXUNraIFEd1cxLPRWYJFG TM/JqMKOIuHRftbMDQ4PUy9Pn+Pgm0MpfkGXjIho61r71B7g4QbRKNe5uSRY0Z22VQSfkMSaQBZp AXVle3N1ZXAkjhFrI0nplXYkNE8dCVkRT9uu6n+ODdl6fMo2KUsWRxxkSnIA1FD0IPhtiCiUa3HJ e7Kil2NFUEsfADJEoAvZRH1t/iUpEp6Kylmp70ZafLIbln6R5r4pGZmjkAEiUJp0INaMPnQ7YQWM o9RyVMkxdirsVUJ/gmjnP2FDI5/lDUPI+wK7/fkZbG2yO4IVXljRObMAn83bfphJDARJNLLVWWH4 hQszvQ9QHcsK/fgiNmWQ2WrnYwyfsxvyc+AKMtf+Gxl0KYdR3hUMsQj9QuojpXmSOND3rhsc2HCb rqp2ytR5CCvquXCnagoFH3ha4IspnkO51yD+6kAqIn5MB1oVK/hyrjLvWHUd6p6sXp+pzX06V51H GnjXDY5seE3XVTtgT6slCBK/JQdjQKFFR78a4I97KfQdzrlW4o4Bb0nDlRvUbg7ewNRjJYHp3qgl jMfqBh6dK867UHXfDYq2PCbrqp2/xPLL0WRhw9wABy+n9VMEepZz2AHc3dKzQ/CKlWR6DqQjBiB7 7YyGyMZor0ljdOasCn83bbrhBDExINKUB5zSTL/dsFRD48ankPb4sjHc2zlsAF1yjPCQgqylXVel SjBgK+9KYZDZEDRXxyxyLyQ1HQ+IPgR2PthBtiYkc1KAiSeSZN42VEVvEqWJI9viyMdzbOQoAHmv uY2ktpY1+06Mor4kUwyFghjA1IFuKVJU5L8mU9QfAjxwg2sokFTQiW5EqGscaFA43DFiCaf6vH8f bIjc2yO0aPNXybW7FWndERnchUUEsx2AA3JOKsMf84fIalv9NkZVJHMQS8TQ0qDxxTR5qC/m5+XS NzW4ZWFaMLaQHfrvxwCASZk7Wqf8rl8g/wDLZJ/yIl/5pyVMW/8AlcfkOlfrctPH0Jaf8RwJoqQ/ Nz8uQ/qC4YSVJ5/VpK1PU144OAdyeOVVap/yuXyD/wAtkn/IiX/mnJUxbH5x+QyKi7lIHU+hL/zT gTRUj+bn5dF+ZuG5g8uX1aStfGvHBwBPGaq1T/lcvkH/AJbJP+REv/NOSpi2Pzj8iEVF3KQOtIJf +acCQCVI/m5+XRfmbhi9Q3L6tJWo6GvHBwBPGaq1T/lcvkH/AJbJP+REv/NOSpi2Pzj8hnpdymnW kEv/ADTgKQCVJ/zc/Ll35vcMz7fEbaQnbpvxwGA7kichsCqf8rl8g/8ALZJ/yIl/5pyVMWx+cfkN ul3KflBL/wA04DskAnkpSfm5+XUhrJcM56Va2kJ2+a4DAFImRyKp/wArl8g/8tkn/IiX/mnJUxbH 5x+Q26Xcp+UEv/NOApAJ5Kcn5u/l1I1ZLhnalKtbSE0rWm64DEFImRyK/wD5XJ5BH/H5J/yIl/5p yVMbZhYX1pqFlDe2kgltbhBJDIK0KsKjY7jAqviqD1r/AI41/wD8w8v/ABA4q+TuS8g9dh+zvXp0 wV0Z2Ltp3DLGAoUovEkftfETU/fTJtazFVQMvJW5U4gfDvXb+uQro2AiwXF4zEF40ZehFNyTuSev TamTa1PFVQFaq3Ljx7d9vDIs9tt2mdTGFC0IZmr7GlB9FMkxKzFC/Yhfi4lfn417ZFmqRXAjFwON RMnAe3xq9f8AhcIYk2VDChfsVX4uJHjX79siz5hVjuEVbhSpYTLQf5JDBgfwI+nCBsxkbKHwoXih QLUChJ3r3p4ZHqyG4VYbiOMy8l5rJGU969VavajqDhARI2VB+HL4K8ffrhQ2KFONeNDXeu/3ZE82 Q5UrQ3CxSsxXmrIUI6blaBv9i1GwhZGyh8LF9O/lt/ygujf8w4/4kciUskxVB61/xxr/AP5h5f8A iBxV8mKBQsd6bAe5wlI73eo3ehHhTbBwheIucANt02I+kVwgokKLkA3J34itPppiUxDvUb2I8KCn 3YOELxFzAAgjoRUYQVIcoBqT0UVp+GJWId6je1PCgp92DhC8RcwGxHRhWn4YQsg5ACanoBU4krEO 9Ru1APCgpg4QvEXMBsw2B7e+EKR1aQAtQ9NyfoFcSURFt+o3agHhTb+3Bwp4i5gKBhtXYj3GEKe9 pRVqdup+Q3xJQBZb9Ru2w8P6+ODhTxFzUKhulagj5f7eEdynlbSjkwXxNMSaCALNN+oR9n4R4f18 cHCni7nGhXl0IND/AAxCncW+m/y2/wCUF0b/AJhx/wASOJQyTFUHrX/HGv8A/mHl/wCIHFXyYpFC p6H8DhISC7gOpYU9v6YLXh82mNWr26D5DbCAgm3KQKg9CKH9eJCgt8B15Cnj/ZgtPD5tManboNhh AQTblIBNeh2OJCgt8B/MKeP9nXBaeHzaYg0A6AUGEBBLlNDv0OxGJCg03wHXkKeP9mC08Pm5iDQD oBQYQFJaVqGvXsfp2xIQDTfAdQwp77H7sFp4fNzEUCjoPxOEBSejSmhB/DEhANN8Adwwp77Ef5+2 C08Pm5iKBRuB39zhCk9GlJDAjqDXEhANFvip3DCngeowWmg5iAOI37k+OEKT0fTf5bf8oLo3/MOP +JHAUMkxVTuYYp7eWGX+6lRkk3p8LCh3+WKvJH/IvRi7FPMBCVPEGNCQO1T6gr92G0Lf+VFaT/1M P/JJP+qmNq7/AJUVpP8A1MP/ACST/qpjau/5UVpP/Uw/8kk/6qY2rv8AlRWk/wDUw/8AJJP+qmNq 7/lRWk/9TD/yST/qpjau/wCVFaT/ANTD/wAkk/6qY2rv+VFaT/1MP/JJP+qmNq7/AJUVpP8A1MP/ ACST/qpjau/5UVpP/Uw/8kk/6qY2rv8AlRWk/wDUw/8AJJP+qmNq7/lRWk/9TD/yST/qpjau/wCV FaT/ANTD/wAkk/6qY2rv+VFaT/1MP/JJP+qmNq7/AJUVpP8A1MP/ACST/qpjau/5UVpP/Uw/8kk/ 6qY2rv8AlRWk/wDUw/8AJJP+qmNq7/lRWk/9TD/yST/qpjau/wCVFaT/ANTD/wAkk/6qY2rv+VFa T/1MP/JJP+qmNq7/AJUVpP8A1MP/ACST/qpjavUtB0q20nRrPTbZzJBaxLGkjEEtT9rbbc4Eo/FW mVWUqwqpFCD3BxVBfoPR/wDlji/4AYq79B6P/wAscX/ADFXfoPR/+WOL/gBirv0Ho/8Ayxxf8AMV d+g9H/5Y4v8AgBirv0Ho/wDyxxf8AMVd+g9H/wCWOL/gBirv0Ho//LHF/wAAMVd+g9H/AOWOL/gB irv0Ho//ACxxf8AMVd+g9H/5Y4v+AGKu/Qej/wDLHF/wAxV36D0f/lji/wCAGKu/Qej/APLHF/wA xV36D0f/AJY4v+AGKu/Qej/8scX/AAAxV36D0f8A5Y4v+AGKu/Qej/8ALHF/wAxV36D0f/lji/4A Yq79B6P/AMscX/ADFXfoPR/+WOL/AIAYqjI444o1jjUIiCiqNgAMVXYq7FUNcuglVZpPSh4kg8il Wr0LAilB27/RkJHffk2wBrYWV9qxZGo3OMNSJyakrQd++9RXDEoyDfzVsk1uxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KqV0zLCSppuoYjspYBj9C1yMuTPGLKlA8XrhYJfVjKMX+MyUYEcdyW pWpyMSL2ZzBrcUfdSKyxpdir/9k= + + + + Adobe PDF library 10.01 + application/pdf + + + 170123_2_marbles-PRINT + + + 1 + False + False + + 91.299841 + 128.500011 + Millimeters + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + K=20 + GRAY + PROCESS + 50 + + + new purple + PROCESS + 100.000000 + CMYK + 13.870500 + 88.390899 + 33.969599 + 3.405800 + + + new turquoise + PROCESS + 100.000000 + CMYK + 80.529499 + 19.134800 + 45.905200 + 3.527900 + + + gold + PROCESS + 100.000000 + CMYK + 8.000000 + 37.000000 + 100.000000 + 0.000000 + + + + + + PRINT + 1 + + + + C=0 M=0 Y=0 K=100 + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 100.000000 + + + C=100 M=6 Y=40 K=0 + CMYK + PROCESS + 100.000000 + 6.000000 + 40.000000 + 0.000000 + + + C=10 M=90 Y=50 K=0 + CMYK + PROCESS + 10.000000 + 90.000000 + 50.000000 + 0.000000 + + + decos + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 15.000000 + + + dividers + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000000 + + + outputs + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 70.000000 + + + + + + + xmp.did:77345bb1-975d-4a3f-9ce2-8718287eaf7d + uuid:e40ea1e3-1cfd-d843-a5ab-560cace80e03 + xmp.did:0180117407206811822A8E0FA0EE55EA + proof:pdf + + uuid:812783d8-5c8e-0040-b120-70238691b3ac + xmp.did:32cec674-0bff-4498-b822-b28d95612916 + xmp.did:0180117407206811822A8E0FA0EE55EA + proof:pdf + + + + + saved + xmp.iid:0180117407206811822A8E0FA0EE55EA + 2013-01-22T19:05:32+01:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:77345bb1-975d-4a3f-9ce2-8718287eaf7d + 2018-01-05T20:59:46+01:00 + Adobe Illustrator CC 2017 (Macintosh) + / + + + + Document + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 9 0 obj <>/Resources<>/Properties<>>>/Thumb 67 0 R/TrimBox[0.0 0.0 258.803 364.252]/Type/Page>> endobj 64 0 obj <>stream +H‰\—KŽeM „絊³º¾œ)?#Ä€ (!èFö/_øÜªº­–ªoœt:N?¿ýå÷ë·?ÿ^®?üñ÷ëí?oåêsÞ>ATŸØø½½‰¿£[¦ V›õ”fÉÞmÎÇÛ{›8óªMfmYÁ‡Ý–öÿÈ#%¸.ppÈNý€]ªSáÜmŸ{ÿ +-7Ìæýqýr¾öÇŠyMygì2'±ŽIzöG):sµž{ÏFtë¿÷Œ7®Õ5Ð>&ü»Zå)Þ²×ÇY.úÓœ³¬…Ë -ïÜ}^¯¦rõýu_µ?æöå~t½™>Æe/°œ„cGO×-kb©v>$Ö9È—Ú€«¶„= 羯3×{®óìÆ¯Æ}¼É©õ<öÂP=Þ+l¿ÐŠhy—‚§‚Ŭ¥š9 :‘ 4ZŠöcQa>¡ïDtäÇ·ÊxÞn\QôÉï·U¯¨Šk¥pv`—5†ã#ß³….?ø0¾ Éy½„Ѭ,åk¹Öá庼¹Œvýb‹nRœàŠÑ"S~~b5Bï$ÌáÀaåk‚f ¥k­±RWH·ðŽÅê˜ÞyšÑ·s0S¾“ÙU)#ý?óïB<W ઠ‰'edç…ß{æ;ëò=°•„„S§V$¬ëïÃÚC©hX½>RÚ¶MJÑS÷òj½MY6%úõ‹ÝHWQ“ÿ3«µ}ëô*1„Æ:F#á,ç>lnX-/B’¦}*ß§9šô€KU‰Þk((naw5Ü$ÄkõÇ©T›£vd€;Ѳ4•÷BýXíX·lÔ\•‹@¹Š{_LДÉ:Z%¼q}eªê—ÞyË~å©êcó%á!oúæZSDÖ|1%¼òY¦ÈGÖW]W¸qTÙ9l¸·?z7Úz`•—3G:¨ ×”Ã\±TˆDE÷ÛT3nmzŽ’•¯(»O?߆ƒwÒ±âÒEuÞ×…k¼î‚ŠdÕƒº )ӂʼPØÄ¶àÔnÁ£Ò&õ² Í/GËçÊdu¯‘Må'8áPf 4Ù"ÔÔ‚œÆõ#%«PXO5ÚZº·P­÷)Se_¸+Ñ@ýä!çzµÀO[tù÷¸è+ŸÝ—|ˆp J[Ìí"$¸xO¿û´?ä~J»@°¥¦ %[©R­qÑIõz9š¶‰k²üVZ\„‰>9‚Å(ÜK§éAçSeI`Q~äZ1îûx«&‚ô|å×X)(ÛLœPÔ'­U7ò⡊ +Ôå û:ZŽªnÁbuº ÓP+ì…xQ,go®åëç)Gmû=„XŒÜ9M3FÒéU¸³*,ccgµì7${Ìü›M:Ž$q"*ñQ…`­Ð/H¶‹ã[n›®AK%šMA}š +PF“Vž)ØR°z»‰­Ÿ'ct±ÂΙ ÜåáÉ%„¤§Û£ E¥‚²î{k;ˆnš=¢jöCñ¢”oß:oYª‹J³B4+²tŠ‘À§Úٰ蜎K!øj-Í–Ø®Plé†u•µÂ!º[VÐIB­&$g>÷ïiN±Rz5#x-0Â$f»¥”8 ÔEƽZ’ÌŽš2TôåI,9k¨ôd’ÇÓ}+åv?>YĤԭÝF¨ìÔµ“%~S­œYÂ*6rŽÞã§ñ4¦C¸•%Š+œ>r«eJ~]ºD"2sÙ‰JµS–²Îê°Ú[Ox#™ÊŽ?á¶¼U5†3àÀ2‡™âÅØ,Ûz“.ú±³7Àc¹âU5¡1ÌV«^³ëOb«N„l3A¥¾¢¢1BçÔÏÚ¬V»ÃŠötú²àãæ9–¸‰L扙†€ÊbÁÚª8)»b>y£f3†Ê„K´æ½íIàF*#—,¾½Î|ñ‹)9nÕÇ`~÷èGâ„÷h¶@ôDPÓÓCSÍ9Æ€ðôjW rjâä(&ª÷Tà8©yËr yì‹!zñ­Òäg…×þï刀,hj(Ë!pšÇ ÏTÕ%\{k¥pU”×M"i zª¹·”º3z’qèñÆ—1áf°THº©«šÇ¨»aÍ¡iÜy@c=ìR½c8Zɦ#rÊwlž°Î| Sg•^Gg+9¬¼Zâ ‡,væ»–QÏÈ +vÛ…Ý „žÉD&‘)TF·ìÛ傤çªÃq õìËY“ôÉp/+b€‘-aÖ×)OöDn-ç & B5{µö¦ª? +ÒöEåáVmVˆN€^ùz(?LªÉh˜Bs4µ$oBk¶ë©W-ÍGCj­èj¥÷“Š-«­0#ˆr¬£(Fɶ™Øè¤dçÂLRLÕh/Ï!º#t¶ÉDŽ-ÈÂm’  —ÙãņçS{ZϹˆ‘_ƒP¹ç¢já>ŸQUGäîq]ǃH˸I‡“Í)ݦiñ¾ç»[ÛÜ©üË2–‰5ÛÛrqÀôl‡¾¡{Éô(ÏŒ%ØG½·›½7S€w9°5ïæÙT2àÈú€ºÅ#Å¡®hŸ7 ¦8ňezŒm=ù2ÝaÕj |+ÄüFnL:Oœy8ݧ¸yïJŸÍ’ùSìàÝíÙoz?4$Íá±%*U+L•C…d3Å|Ò«ßI¨W¯U‚IDã[ï]_?ì¾1&•có"¥Í‡±ndiQ|‘¼â®êÜåt¨|¸\³w‰¯€¦ÓŒ'´%öÎñ<»´D1ÆÝül7Ú˜v•-Bj½~Xn/÷ðÕ(úŽ#L3QòŽ‚;n†-áÝgeP,¿bdÔšJd …ÒÖ‘à÷oõä±symä˜<¹­W~3 çè*™†c˜Aô¡›†áÐHm¢cA4"(—l8û²Ç‡ ºKõ÷¹5:‹Ý¬%u‘ƒ¾Ks« g©t¹Äu/ds¿á²–Š˜M¥)2ZqÂboÊ9äÒô¤68bc¼}©'R¢~Ytˆ–Ì…çæ‚ÂýÃMŸšEŸì©IOîÁUJÌÙ‚…Õ¡ò¹íŸ_ô…akñÆHÔ‹Q†zwÐÿíÁU[µŽ#ø.{nSÃ%FP¨eVÔ™Kû“úí" ö=ñmϵÏïW° 'Iþ9²@ìÔäu±—rÒò ¬6-^ÿA꡸ú¶Š³ô£®Ö×!½ Y‰¶‹äG¡YÖ]J`,óŒ© šnw©7BÛJE™Ç¸Ô\Âb»ê}šME…¸«&g˃‡EáäÎÉ.¤‚Nh*Lg<-Ì4;[D +›C9»Uïí^vé̯ézÙm4çí¦\LàkWK· žñòåÓÎÎöêÛMR˜Ó£´ešË>³àªeqˆ;=Ç‘ù¨~BOÏX͸ 6ÊÆ§öó-¡ø²Áìõ9îßF³Ûwp£IŒŠ5ÚÓ—ÎâÍçîàì9]Že¯óÌîù¡ÕözšZ[öúqO —ÝâFêôð½-Œ„‘ÝBRÔR4ˆŽçÞBä0›(/:§ñ”$_žJhO”};Ñ€¼‡U/+'õÝØÂ¥÷7il“ªyæwÉÞµÚ$ɳŽ&^ÄLVRG|q ,o“d+&® ÞNNu¿wP¢ÅÄ˨øˆo¸s* +ä® TìüCØÂÐ7½“ž[íªˆ& âµ4cÀ /\º·°ÓI´<Ùßσm‘ÌU¤|š€Ûä]N=Ö0ÿüxÕ‡âx•ƒ•uÊÝS»aSô”¬_ê<7Ó+eLp$¤EÈÕˆgrúÁViÎn™jŽÏ?ŒÑôîpW®ÓœÓ:ƒè¡j¿§ZsÊk(€®¬ÃµRÞ“ÞV³õ¿Š#‡pZ„È…ø˜äÏtÒhÕLm°Ýû͸”äâMÈJ"¿`sÒ·ýåE¾¬FHØA8æL™!G*Ž‹Û¥"Á‘é„¢™Ã•ã‘£a ÒBgZª÷mì[< +õ µsœŸ6$å¸oM}˜” +_ëÇ•4‚/’9ð-¥øÒÌèòÛ=¼Ž¡Û\ =¨®=ŒÕ¶7/-Çkx·ª¯?lÑEJÊ9ø8eŠ L*Žmj]@âî㦛¶@{ +=äó@§¨éŠÀ”“zN¥K˜Ö¶¬ëFçž!CušE £cx£fÀ%>5Yu ¥1NRâ¡dÊ'‹Hl"U\h¾;Éšu»Ã~ÁòÉ4]¬¼‘pÛ«, 4Þsb$$ ]“U³›p‡w<ׂ”#¼ÞVµï‰ÝÄÎÙz—ÆÄ§2ŽÓ¹hw”ã’A®x¸ z¶Ùx9Ü@%‰dˆ i>SËéCܽ[ÿÚû!¹&cp¶Ç2fS–‡Ñ Ûøiµtùt%!5P~@pPè5õægª§Ê£åüpPðJ'Ž‚UÃJ®»½òÄrúÀ€|iðYsßÛâ€Y{†é>LÌÓz‹j““´¤÷) _­þ'K…T=cäÚé±p쟒ëļmB_ù.ufËû Z!$½)Œ,dêpa7ß ÏŽ$æOko+¨ ;.ÙH"Žù€/[f¤`#ŠèÞôbAç3îò*¾eÜÍžÂÿxú ü¶Ô¨0CŽ>ÌjÍá §Ö‘½aA`)1S˜èC+n¦3¡á–p ô t–cyžîX­=o{Õ‘/%Â'ªJRûì“Uâ)ôÞ_¹õ—yéUz†¤éŒ¡µLOÈ@ +#2@ìƒoñÃÕšã—ÒmÀ]+\ {äúUô½æ¤ûÙWeçJ’¨[aæ¾°†¼pOú9óFåÛ\_rµ +jIFtTË8ŸgH^ E>·È°îƒCxSæ#£Ã&UÚ~ŠÌŒc“jöm3uµ]°@Q,N“B­Þ}ÏñNSÿ<×&PØ?ÍåY–`¦ÎG÷«’«Säe ˜fUzª>ZþðS1ŽìÓÑsUoEeöÎùcÝ“¨ |˜9Ì + )ñÀ}g“g˜½¶‡‰ÇY,ë Å´~¬gsÒyf@äæiõüó‹fMÛ@{ƒ˜CÉsaE~Éæs›—w1Á.wz-•2„kžÊï8®­ê8³eŸwêiɞ˻/úMv}Zï¨ÜÀ;ªfžô§Èu/CþìÞïÕÃ+kN£±ÏE"l§ùóJddÕ[>O,ýç:`“å5ÞÛšj¾æ€hk«içÆÀai2kFŒÂù¢ç^zêH…Æ:÷.c-$÷@¸éŒd_‘ßò2^Ù]'ÙО Yƒ,ëYæR¿p„‘Ë\Ÿ'YxæL.fÞ•žø²1ßL½\#ùAo×ö婎è¡Ö­d ¹ŒîD€ª$”€kÜõgúÃqiT {±•ªÐ<îô0ˆÙÕ‘í^/gG ‚—n;÷|6çpw²îÞN²P.>MÏéÈd5¶ó}z3>ì4®ï(í\Ûë]ˆÅ›]Uí²2¿û=‹5À÷&ŠáÒæ^ŠE $¸›ûÊú Ú®í^TÑÃ9ô£B e)xe®vSºË°}7/=í„a>o™f÷Û/ÕðµóÝ~í4.U5-¥“qtck?Æi'>DšC%¨hõ}muóÖÆ~ûðøÃJÅ °¥uw÷žyŒ¹d•>ìÇ­:ý‡í)9Ûà‘xg¿;ÝâYÑfF V›‹s1 ÐÕ5×…³ÜãQ‡ Û* +D" WЮ©mqs ê>pÏÈ]­vU%ÃbšÔmÏ—­º)w"¦ƒ°$ÎuCÊøßë‡ß‡ró®ËMކÁùœ¢/àýJ”¨Çyœ8عºøÁªq÷&ö ¥’(‰Àm·’ËøËÓ³»­åÌ¥y&0ëöË} _rË¿ðˆ$ÞøÜþÂXˆc».ÚzÑ/èn¸~,°Ëð–ÛÞïϧÒ­ž5¼«p+ç–§ÛÅîóL_–ö{íQMÈ!4n,˳övφí±ÈY‹·f¸­s‘3½¾×Ϫ€:Éèö.9=}áîàٜsì›2Ç&:W^›uÒÖnÞSûl–Ñ÷Å}^í½«ÏH…^ïàãt8c[¼gp™H@û¦ê^ìä±QÊtrÃÌÇ|¹ÓÄ;š1Š»S\ßæò¤0¥““x¤áMŽ»6 +‡tm/k·µ}[Ÿ'“Ñ­(é\<‰Z»§_z×jæFZ ©҃×½L£‚ŠL‹-•ÊRE-È-›‡E¢×&¥0 0ª3R0L¸WsÖ½ ±u·Sô°w²`3úRg;Q|òv?í¢TWç7ÝVc5?)‚#UºÁ´bŸý\ö˜%ø%)ñͯÝf`œ[ÖxðòeO‡¼ŒZØtôšš¶Ià¬Ô°×9²–ŸÑz*R££õh¥³£”c1w¨T„f³Èåå±ö|I–8"èZ–£—Æs_}žV/ç¹pˆ¯Ö2ËêPW2ݪ€§ƒÇ‚€†Ñ[°®XH2á{ÊGŽCT•â%—€”#Q: +µ/‡WÆêò«r”M©7U®@вäõÒN†§b~]•f¬3ͨ7îì<²Á‰zÓl¥ˆõú Õy¨; «àÑic„éW_¨†“W›ÿc_9vÀ…¢ OštU%H¼uÎæBPYÐÄR´£Úh¿Þ·+ƒÂíÀ7N¢m`âÃpà:µ-ÇxÍÛ-áGx %Rb2àb½¾ÊßÒ Ž­žøbÏðD¬½?;kžnù‚§m’žC0]¾!ÝÑŠjP`ÝðsçtøÓ¼Êpãè95hŒŒgÞðg©Ò艓îeМˆéÇ®y˜qW22t:N4-ZV·PV¸×Ù® œèÈRU½§+™•F ©€uþ’¬¿-ƻۇ5=$ŠàRVö´±è:=E»·^²í†m¼}8?€¡8P(O“A™!¶>ó^üÀ¥×Ýût'ˆà8Gt ûžÞ/OïYÓ[óøX„öqRUï6ØØà4ÁÊœEi? 5¼|Y}¡ëÜßÎV¾·°ýæB(×)gÒL +šz\‡àæÑ¬Qö3QòŠ û +᣺a!U¾ã™ «9º,*W‚KîÀ42ÛÀYŽÑÛÉìX,@*žX0l‘S™„í¶Ä,w|,¬»,¹¥&Vg–Õ;j à*=ÎÞ<ÎRáÝbcŠ:´ ûZËéÚq°YÙíã@þùÖ ’PÕ ^n1hy²ÌL79û†8yÚ¥xúQ„ÆK·èŽ+ÇC¯êø”JÀâÀ½úµNu|Ó0]ÁÈŒÊGˆsû°?ÿ[{‘ª—ÀPíuÊý€k¡sÝŸÂ^îmõ´’Q]BH€çRÛ¡‹íÊço/þj ¯‰³šþŽœXNN¡6ŒârhÇfLØkB¾É(´Mà¯ÏCq'ôvvàʦocd N»Ä>6詘AÜ(%½æý5v‚¢ŽQãöÿ'ö=ÛÍÁ*¾bm\º~ð…këéFÄæÃ5&ã-ëY­%Ë‘øiÑ&G9nZÄ\½z/EÂsˆUaý=£yS¿"}Ûl8ªW¥_1ÅZ‚ÊS{fQÕ°£Ìañ‡¥EBæ­ab±7‡ëÙÐé"ûÙ¬âX öŸ³4½¦r]ˆxÂÜmÌZ5@Vô^‘ +º‰zØ‚ç°4}œª¸ÃDE|§¼œR^ …)·]­(FŽb¨9²;Ì_ˆº¨Í•cߋ˲?BÀ£DâLó5äp¶n‰éEe´QÚrÜí…Õ×á¹9Pñî£øÞþýï©~ÿdkW¦­}§/%×éfe²§»”@™ìçÉš©žC?¤µ ÷¾ O¤ŠÑqïv/¾L7Õ¿ž¬t†Iûq-Ôô©r`z¯éô¼ìÞ«:ÞBWÍJº¤Âû2݈¥$ÊLWˆ c„‹GõÔE°ÕµîoÃ;aÃŒ3w1‰S\§æâÃúšÐ‚JÀhÛØsßëò\\Ÿ¥Æ”§«]©·pK˜áý>ûc2ì¸~ËüM¿m@/qÝq›†¸,š+W—ÚÎSèxp”aÄ‚„Ut\å0×诉§ûâߦË4lï6£biÃð´V¦¡û*â™Ýê¼ÈZ9kôصøÛ95½c–Eºtð®3†©–&ØW·™Çô™þ<ì_a{˜¢w &Ä#½x©Ó±{føîåÆ2ÄŠ ]Û/»zÿ Ü3/3['>^»À[Ü¥w¥lœïû˲áH{zͬ0yQõò²¥¬Lmš<%\:ªÖŒ“6o:žmÎÙu@/~¼g;–¿·nÁVR°úí¦Í–Âdèò‹7}^ÞÆC¦æØBxøù#.×E)‡˜Šû/ü¯7¹”SŸV¡|ðïñ¸ã¤Ñ:в皮¬Aݱ”0x\a­Ÿql_ÛrQŽògî2×1žËs¹+¡£IBöײU+jÛTz +/Ém/AàÄúë3$¦°‹àõ¾¿*¡ÊVÐÖörý:åM®ý|.©ÂXH©«½|u$ˆ·ÅLŒ~§šˆÓp.‡›U›¤í„ƒÊYlÏgz/_TuâÖ0M>ÿ‹¼Þ”‡Ë©ñ2‹w$¿¿þð&c“›øoC7w!!NÃσOë‹_}*C +:_0"õ/à0uié¡+’ÇiYßqÍÊ}å p\8á÷8HnÚÙ‰e‹¡;k*z¸fðB­YûsÙgõîB½ü¹p Ï>ªKÉ—'IŒ!>ߦ“B,Ì‘`Ws<õñpWpÚ3{u¯†5b?XÜð#ðzPZ¤RÊìd»Žû ?#o²UÂÝ»¼½ÞF0~¼?=DV¾“îD$«± +âûÈ︓mp +cÔr¾6ÁVéðŒ8mØ2É04[ÊÈÒÈíÿÙR§mŽþ£†ôßtÑè£XÆ'=éh_ümÖ—²ö¾ž›b%Œ„ ? OkàgÅ5Ý2}ƒEÍ‚CÅ:z"¡€Óµ‹>íÐש]ö6µ"TÚ!D‡×lZlq‚椧Cǯ`½óõ¹=zÊJ臬÷ÃL¦ç'DD…y¥f0Òca÷È{;|wŒÏ:ͨomq8À¼7Û­Î7y®c±ôôóú_(µº•ê?®Ë%˱‡¡ó\…7}ô£>ëÉiÅþ§ ê¹ìšd->‰IœV¿ò|?t?Óûg‚(ֆ͸(æÈyRϨÇõHê­ŽA‹$ßÀ"nΖW·i¾ï(n?©bÕ6q[ÑÉ4²j¼šn—¦_ÃÔ•}>ÏtU11ÓdÛv=ŠUÍSô´×ÞÇEÉíwÿ#øûVR(C@‰‚n87$?x±L„àÑF/ÌAºEµèïK&ŠÛ; Ä®á净 +öoËNž{ôïâsZÑŠî3$ãâqÏ®u’O¸K÷22ÓÑâBt¬íʺPÕC`Õ… Üj0iÕÎØtøu±Ãç컺  ¯,£Z½Ê¨ÂF,6Óº§é¹2‚w°¹©9~JÇŽ T1M»2pÓç• +ªœ¸ìãÎ[ùªÅo‹¥nÁÚñÜSÉþÓk³™—Ðo²(3••lÜ÷mXEõ÷(™ )·°šû•5šAÈX9¼ +ñ›‰Ly–±JV‚^æ8Nb÷‹B™Ã¸ß=bê‘Hð¢Ø&#øñóÜ+ÅYUÆL>jàûâXùuúKlíù*£Û¤cü‚~Ã]—µkæSÙ±òÓi—»†”®Å˜ý»Ò]5¡Ç»Çë;ZÁhu~™rBW6Š‘IH’IyFV±¦3%{ÛCH…ÕíËàƒu<,Òð>¦FËQÒÓ­Ú¨FBÓCMÒ-³OnÔ9[TM$ +!Ǧhr]Ã(Téè)N=;繫O+áÁ•²ó9ꎠÊ(ûC‘ÓÚÁ*5£gæè¾ïF‚Ù¨ØúA 6Í`¨¹cÙC2,ßx¼:ÈZÛ²lìæ´ŸÌXP•,ýÓïúô‘ŽB®¦î" @’å#( ¯c_M6Ír’êúAÕŒ Çg|{ƒGÝÍ:3ö#Ž…bã‘“ ôORçrg9žîá$XaÈ̆±XL!$+RdúB1 õ¼î±*õóHZXcè?½Àoö‰`[Å-±…¹#;ƒqF-%«µÛ'´ô@§ºÎyYDM£Öé7åø[d‘¡.¼z²ca‡éë¸ÍOî»ÚÈÑÇ«ˆ±ïxå+æE±4ÃÏ/öR/S勵® —ÕªûµIý­¬èQ]º›IµðXtK)e.ÔtÜ%—¶;•¤¦µ§˜×uz Ø¢^‹»áL[eëtCθùšdq77_QÞ¾oå[’ÝæŒ¼$°L?U;Óâ´L÷FŒrç"  »®éhÝ®ÀïQÜ]«Ý1Ãë˜æ{²a–|w½ÌsÏ™æñ"/)ët·iS; ¾Ø-!F|˾}9Ú/–ú½SÛêqõ¿AT¡yB«VV˜"ië÷KÞ¯«+ñ™rØ[f0OÅjP‡Ÿú af„lê™ Bà; ܧhÝqMã”òµƒ¸TÐ3»5›¡&XS{¶™º½»+Þfó ‰w–i‘ôËešú¬šë%ÝËqQï•Á…ǵ#ØA®Ÿ¬«m«Ÿ ¤÷Hïµ—×oáñúÏ=•;nÛ…'M717㪕2Ü©‹ꎟ·Z%,–UXQUl*‘iü,–…™]×´†H’ò)‰×È®vfSKj…£0Nåèó~U©ªÛAø(iÃW”¦ ÷@”¼?³æx^sÿ°\bÉé”(LÑRAÒzOª¼Þ-SÕM¨³²¹h±÷ëŽää‡rŸ[m$“Ër4À‡9û“Y©ýpêëÉœ6ÿsQ¼)ÆñÀ7—ÜoîÒî¡e¤l§w«MÞ>=ýýrjT†ƒyëÈp ÌêÛã}7§~<î<Ü{{4;Æ¿ež|f&"«N²ûWär÷©’Í0î'2Nd‘R’á`ÙÒV.›ûm?YSdD_Ö,EÞ UkPû¾çì´…Á?)Ø"éè'r®Ð—Q“°CxŒ£ \u§øÃp]‚§C‘^¯Ì†Ç°EÚº³Û¤áÆval3©´y:‚ k\ÓÔyÛ¹Ys 4Èzå·>©·Ä˵#ÉóÈQ½^ÇÎHró2ÿûïÁ×ðËÎ…`í~ þs—"}ê/lkífrG1!o%KýÂL5¢ÉTO9\S•£‹ÿ#f ­z+Aãp…ñߥÚÓšÖ&l2,u:!†ÿônÓ>ÅÕz ¡7=M?S÷ä°,û¹}݈0R·-¨«PÚ>O¿]·ŒÎ+Æí:®gAžp\ÛJè¿ð“|įF¹ š°b¾ÞÅ"9»w©aâöpÜõl«-–£&ÊÓvÑRÿ„—[.ʾ7Ýæ| ÒÐR´tÑ´†]ioF½Óo¿!é”üN#@&·“ÍF,êhD?´9ŒEí–ᦅ‡®Ig2'z­_JºŽ×g€ÙdSkTÏ…åb1‚%•íí«F#R^|Dnq ëj³ùžkÅiÕPƒÑ|pôöèß +ÆÕÊÕ«uz ÝD-°]¾JÑÍeEúRñ˜}ZÚ«é0ºÇÚQì¹çõ<)½ëð-F†Ó/ñì½jóÙs=i8vè#_*8"<þX};Š}ùV?dX«gš|!]áØBs‡ú¸t;ÞO%3öëËðpêg™î…µgƒØàVfŽÇ=˜¬æ ¦ eô]ïÌ¢'ÇžÎVO×Ñ2Ó¹Ïááp™íVGν³b«?ÃM¤Ùö{¸O;l‘Ø“!Ó)±çNØÇ­2 ”5Û–~)tðãV ï6KÒÄs™õðB„ÝǸ¼Q|àÇYhq½BÝLþ¾ÌË`Õ¡¦Öf‚~b;à¦b§2?¼óc¶ÃGìr?.­é¹ö󄈓&¯ˆ)=-¦“0 ëËšùOXK¿«0KúÎ…ïÂ|«ü„µ*VÓä5VaúŸ™@P„Z“It0Ÿ¡CCo¦_ N7ü+%$]{}]éïítÀÂnÆH‹ÖõùÁG€Ÿ:†àA¥¿Âئ…ÀùÛHIì.S {Ù‹µ²ñÚ…­¾ÕcÞË +cšô!ÄPÐ1ʦðÙk{§•Œ {¦g‚ÏÐúÈÙ­ëst9XzߨU—þ.õͪJ‰êp:öjššæfUÈœþÝÛB4ú¤1f@)ÚÊs¥ey„d·=ÁU“¹êSÕûŧ2T?·|5ZC½¯äB¼¶ÛC¤ÌéNÙ–Å-Ç÷©·q7â0^Ž—ÕsØA ýïê°ØÞ©‡©©SÈü™.«; ×°Åä !ÂR ½ÝmófÅWsÆ«V¢ß“ôì¦Ad)”¹´/Ñý‰@¦i¢ñÈTýߤX¨Š•¾YR±\*ð‘EH[XË×0j «¸Àwn[»‹j–¡(\þ¨ThÀ­±__Áz×®²í4)2…ôbÝ̆ôu*Ø­âI–½Ÿnl¤ˆö=Íc/B3u¾,ëÿ\—Mš©C罊Ú@ùKþa==}ÞÿôéHd»®'.ëBB +)uKK3AF£¥”*ÇhZüù¶YqoÝ¢iüíåépgæí¨ì`é•Z}¤,Ùw¥T»Ñ¹-o#¥‰y‡4 jÁÙvX{»ÝÉDzô.- ³ÔjÙÙwåžCìÙyæZç×_aÓ·Ômv;ý6qŸ~•èqŠŠuAŠº^[ÜÚÊhÁq)!¢Ìè„t yçÚ¥Z¾°.”­w]‘]“¯Ò{5 ÕƯh0«u”D g‡2ýž‰`xÔ=ga2>¦·ÕµàVt[Ó>f’GZ¡ÐB¨.ΔݞЬފ{UgWlÌUÈB˜3½›JŸ¢týœ“…¦ÿ­ÿt¸ùü2ÏÐN½4ÒЭáë3PQ{(uôpE1þ6>,ˆæÓåµb 8ÑZ‚Gˆ»ô×êxª•º¼*b|´ãw“k¡üñX~Rý`GˆE;?Ç;×, VßÅOóp•?ñ^Ê`Cˆ1»œ;›ÃŠÎE…>d£­Qy§¼>€.ñØÛ%1+ +†nÕ×ÉEµí‘XE@ƒÞ|Ã7ãÃ×#ŠunOïÿM_¨±wõÚÏÊäÎdÉ+@á ýR,×£†?"÷Siõtº‘Ó¢‚g÷£SBZ›tRÊ4HuÝÔƒ6ºÕ$h0kμšÏŠ=k1k¬ªÄZ5‰xüåÜ ˆto¸ '/V !1Z²o'¿SsGuÖÆ6øq.õ­X¯¡­+úf'›ºM£ªÙ A%î™åk–{Pá"¶ÏE/Ïâ‘z&eAEîh¬„$!LûÝ!´§gÙŠšQÑU7ã‘ç0ú.\‚fFFò:¿Åí´!›ªªi ÈÞîñ~« ö~Ó²u˜Æv‰$›ESç]v´;—¢×¹÷×g׺XäLÑÞe+ ú;þ "­¥×;¸wåÓÕ£àÛÕªêºËw1XvÁÍHººã‚¢Ï6’´$­ÇØw:\?@„?v¾n"VbŒ[cõe·¹X¹½"îó€Ê¶ijkê!dl@MÃðtÞ†,1¿š›þûéÎM°>f7K ±Úd!Ï™^eúTì 'cð˜$Ÿâï"öaÁé¦ßЉ«ÐÇôj<-ÊÒSëãP½¬¦R5Ê’'ì©9Ƴ3wx°µ0íñBu™,ÿ\€ÕhSªr[£FÈÞ Kð¥Û7ý‘g°ºWbÕšWÒí_É#êÚ-UýÀ)ÜN°ú/ E[úŽøN!'‹0Äx9¾ã/•f”H2e—«¥‘XŠékò¤Œñõy2õÂ,›ƒ +Ê)¨h0sðl£bPÛ _½n—XLs¯LW °¸îTÙc Ñ‹¥<äâ(8í³/ ‘U +;ÙIµ¯ðheúb˜_!ªßþ¡©¡ÂÔÔ`×LHõ,ÃiÔ}Øo¾{LÖ£Ó)5Íô<æ2šùvÞ¾©lfza™fÂ~ž@‹E1ô\IS…Šÿ¤•ý0UàÓÍàí–`ò:‰ú¹dŸCü8d¦#©Ð0Oó©µúq'€JYµÆyf"Ê=ZHycc;ä’jÇpÌ´œvÏí~TÛxÏU–µÛãþÄy¼3>c›ÛŠ k¾ReXLøxöÚïIú“H×}ŸU£ÆœÓ^é´ˆ¦ SÞ#Òeº¼ý1ºf†Cü#,o¾)W¡vÄ>Ó +Š3š™væ^nq/a1SÉ̇£Ô¨¥Kxœ“Ýö4ÆÛ$²·?YõÒØè–„ýÔì¶"û×çÑ¢6‰ÁÄ6^¹YÃ{;’– +'¶b8Öe¾"oî~}õ¦‰yZôayð£\½ù,'?kî§”èÍíÑ缫Ÿ’èèkÞÌtÙW‚é$ì°'ÍtþÕ^¹·Ç‡Sêã¨æ«ñ¥ð¹Òô¨ð[!ª•lÛ`vFʸŒÈ¢é­%Ò˜N:C³õ+FÐ4KöcÐõv¿,Fšm(P¤¦²PÙ”ôM•Œòœ%<ÑRgdSú£@UƃDIW`éýêèÙYý¬?–N‹tZnf¿z²ÃPÜÖĕۈB‡Ãaƒ2wTßJ‹ÜnâK]ʹÎpWÛsKÊÏùü¨Sé^NÐÑæItCõ9ü*Ó”$¼ÓǺ’wt/p/G¨¾×ÈÀE:…Æèþîx`Ìrï»ÏS³ `çш€{ãtiðv;Y“1¬oÏm~CaC^8Ù$Tœ@?• ›èV´KYm/º¥L›žüªÃÞbä~ÝNDä§3Öí7yªsç"å…OR©j û#‡$³·Ú‰hÙ •åØ×]ÕàG¬ywò“Îy¦ó«¸ë£áé 5ZHóôÝ­º­ùæÂr·]ÏÉ8 ]…oãòøZ½½É ”j©á<;^–ù+˜ÿQNEé>…~µÝ¾…,Çòúù†Ý%ßùa·eͶúO@àQ ÐÏöÄ¡»ÅQ”zéA`yy?Û1&’ëÑ(„â1ú8 Ç²7Ë7¶u Àž Ë<òç0~£"ý=,‘" ¿ºùæ%`;}ªÚ)úJ=U´`õrF…g,Åí<‘f¬=ªÇ¢OßAé.o•Ù<üZÎ"\§¶/VƒL“GÊ⤺¬1+êaþq_T%Þ… äü]€\ÉÅ4?.5¶î•aņI¤¡Ù°j4&ì>~SH [i°xÏj‘—k§nÂNJˆ#äL~u UW«ú]å\>Yû¦°ÚËй.ÃÖâÒ?íŒ5³Þàrãe" ·+.êo}Íb=Ó{H®Ý„¿‹ÕñN'x(q¦Üæ2՜ھþŠsVCpû*~€ÖI¹…¹¬.d¬Ñp®Î~?¿?P^m¤v¦¯åÑÕßÝ6¨´Çw‘(KM¨XA4TÁqâ3ª˜º£7 ÇÁ-”–ìÜv}wnŠÙ–´ùôv¸7¬?‡ü×ïµu{˜˜úöDd?œ¼ :X”{….ÂRÞîµçÊi‹w³ç2Ò]º¿}±l› +àðøm¢OÜU¯õ®½ª  Ó©´mÛž‡ƒ(ÏÈu(7ÿ`‹×¦G·Îg×¾þ:dîh)—qÕOݬI _ÂT—œû+Õ>hÕûn¡ä`ýè˨Ԡñ–ߟ”Pƒ^3£ŠArú!ZØg݈žž-ŠdîÝŸÑ2WdA÷Rîí~xLÅÐ3Š˜ËÖPu2Óûû=x– Ïb¸}`ÑRÿšz›gÝɨb†¹vQ\÷Òs6E&Ø™ÁI®.÷„}K`Z 9é7ÞÍ3fâøqHòa[¬uå½®ì·XJþƒ†*1 »§uœÐm–ÛÆ±#Ù2™gè+ETÉö +Äü1}9Ø5 +ljd}Ù«~ã*š§ó.™NÊtüZ–Û´m~ÊÈïQtåe_•ó-{ÕtöB§lVãþ¶"ÎÛ²¤ëŒ•~($,æ ©»Ì®@Ë b.w;ü¢~Àâ'`øÛPdšû}é–æòwÝvJ¸*gþÇøÖMHY^IEÒ}‹ºªév½Ùl‰ôª»ÚÕêÎ Rê='ÝÏíFxfŸ…lN ¡¢IŸ1é@Ý” Ý“êí¶zêºäïîº +w0²ÖuÙŸ|7‹ÕÇ-N7©¼nܱ%«ZHÙ™HQŒ^é¶PGœ_[ç¶´FW¡ê ¾-Rx©QÕáèHäÚÊ¥®rû?×å’Ù +ÃàyV‘ ¤?žÖÓÓ›ýO¯~™“®Ê(QÁ¶,AX"݆j†m8kAÊå–$1PÊ;·‰êÑ]íºBð÷zAI„h +ÕÒ FÏÄU"míüE £9òC$ž¾œîXæx¡Ú! —´X!n튙\Úgz´K#CÕëÎHÂ(7 ®‚Žê…ªÞGë6Çó«&n+V4wù¥nGÕˆŽôÇÒ@‚ú:v7ôu—ÃñÅ’$‹±mm„fthkä‰è:AB/ P Zd$T·ÍKJa@[OBmkòa=÷EaY&mƒD¿Ç=› BtÒžET4'—ÿ9µ´áöƒI¶³\M²ª7# Õ<ºÒ³fF[ìûmansít;ýé6“B\…Ps8¥;L¨ªÖ—Õs9ë–;·n;(æÔ¿ÐHR¹‘ŒžÛ#ã¤^ƒ-Õ,íwÄZ-‹Mv镎™Ð?"áV7ÏŨ©¼ß¯Ì•…Tnôa¬Ž+­QT#\iý¸l–út¦§ÓÙßùY]‡¢:^âæGe?h>”—Eiˆ>zÖo ·sñÊAÛ°€4P·9­w£—X=•¾;º Ž 7fšèA ÖÕfaÕ%´Ïoìow»£tüñL§7¼ÔÌKe˜lJ?‰ÞtÒNƃ´aê+,ÓûûÌo±úB¶ß*êÛW©Ñé÷¾+,•àòygñÔÈc#b(ÖQâvîzvéôÒš!„CQ_Þåýà4™kïÊËÄy׳äºD¯»Ü(=$£ XMÕ7Ø¡$ô*Ià°+¯ä&­Šc_3óàçìqÅTóíBB·Û …Jvw²x k +ô€÷q!!wÜøm57ê¿ê˜ÅÁõ åTmý„–ø|R+×3±C QéÀ#^£MÝ ZG¿RèNš°%¿XÉÈÒŠŸ~Lúæ¡U5âPSQ†*F9Ç™ÊúJúêzĤ2ý¤»˜i¢ëŸµÅy¸ÒüÑzÇŠ¿cÈÞCƒßr…:L•èÎA3^<_Ídî¶ZÆînjÍç¤Pž¢ö‹ÕO?€U jœ +ϳ,¢)·Ø´o‚N’þ®ÅZù\Ý4)eoY©òµÉ[¸Y|cy?š|Z1,fCKfýÑ™hx#=FM^¿/ŽY)doq–2ßîI™°n³yœßIUŒ€„V¶ì’n‡Û¢MÜw+vórÅÏŠV|Zœ¤ì·ïÇeÖÜöB·ìÙ9ýØk Ú÷³ø¬×é¤ó*9ÎW¿îåïÇpOèÖ,ߺj%sw%ÿ§±£ôRTÕ—Fš"ÿ’XéÐü½ëÆ<îÞ­õÏ:èÅb§j¢µ6û ÿ´.—û°€e’³ÑŸ ;MS +/ñeÿý ]Áî©=œä‰;„[" C¨™xÈwøXÔÀhÖ¸¶Aoê©R©Â1m‘àh¡=½ÇÊMŽ>¬Þ:Ä{Ù±‹ŽZîüK9$TÛ««v  jšæå`n—=ë¢õHí¾¦ò©+[ŽõmCŸÔÔõ™ž†Ö°ö²H‚n¤<ŠÔ³£œ›ƒ^GjY\ÜQ‹•м—u;EÄ2©¾£yQ—{S¾ÖœÛ\ý8-¾[‰¼ë–©Z1´ÐÛmàE‰pÆ6ìÈÒh‘£–­ü€q2­4O©x÷ïîû3yOn5˵$X¡×VNˆWÎ\O·þaÏ eé˜-[(ÆC‘ÔfëmBöñùë Lgž/x–Ó­„ôrª?ÓKZ›Ð÷ÊÜ™õó×I™Þ}ããøy¾?2‹ÃîX´—þß=#;"iÁ~3&}ÏDq¯Ã³×j)ß‚ÖZŠM¾¡Û"ò{ÏvÛ=îÊs昌KÊ +¾*Ù—aÁ¢;h¶6Ú:脯G¹ìºí+§…8xÙuŽë½¨5Á~5OzÙô1–1z<9ßyfª]£àY)ÏzŽF«—l‘£úa_7¥k¹Z’{›Q;O—ÁÊIõItú]Ród/Áºn,Í‘.?øá¥…b<æ9¥µ + ƒ¡¶øý1̪öäáz ùÅZ6MKvÁÊ”|mì$^Z/¿(ÛòËÆcµ—Ù?‹cÉÛû¢Wº+g ©Åh—ÄtPvù >êáyÅœsça•Ѓ1T|9±5ÍTQ ©­¸Š¬ê‡$”t3|+Þ²ÎÒ©ma=2’¢Df­Gʵc÷ÒÜbø”!MËì£Ã Ñç†À_Žn¥Eå·%eóð. ÞýBôj‡¦b܇ÂÁ7 ´—£Ý4B-kÞôÝækË~ú¢N;3q8§`¹ +A™Ôð3ggAfOÕS‚1ž,DOé‡Ùrq´wEoÆ•6Gc>†g/ûVLš§éC›*–6ÎõŽ[%¡¢uOGíé ‘¿4gGó«¢;óäø&ÝqYž¿”C~kªk®z‚ÕÑ3ö8~¾ÙÓÁì|kzÚ=¹Êˆår4󂺰 +ËÃ/ÜberèšÒ¨­Ì¿víNU¹ê i y’ùàîKº†æ¯ÇHørΛݾˆð‹Û§½bè”uùlN³ êæ¤ƒÞIØfzß¾_Õ)þ¢æX¿byÕÝì[ +ÊöÝmO¢,É…iM9-½>_"‚ß‚ÕÜöÒÕZé„:™ÔqeºW[%VÄ"füŠXý¸åÅöÃ$”îC×Ñ& äb6š1ýgµFPÐ_w ooA#òæí¡J*\‚y†gÙ(3ˆö|3+¢aÁý‹Yõn«aV +9¦Åm†µÎ÷4fð ·uö×g"qPõût/i¡lÚŠð¼-Fì9ÓùØLŒýÞÓ3Ô´¸ˆj×b`pP‰ä­°Ñ¹¥¸¡oÿ +¾ŸÈ ·®‹1ë7£uš`qÄj~a|Wö,œYŸMôÒê-WGÚuã¢Ï8tW~È5‹ü´Ø•ˆ¨Œç}û_¦™ÆõZ8ÈöúΠYÐ2,â•ÞÑÇÉž DU·ÝŸ­2Ö}eªt?ŠÚ#_FP¯×ºëçò +DtB˵u£ú³š‰mžÏ_Ó™ÚS9´ñòÛ}¿¹™ªðC •£p¶GÔïéå­½'&ÕGÇx˜ÜáãõÏ9 ‚¡cžá¹Ñ ÕJ÷­&Uðb5 )ÚææˆS….Ö ‡ºHÊYAC§4ô¿×AÞ +»îŽh$Íêˆ #J:5p²ýŠêÍŸÕ˜¢û'˜ª•é÷ "|.}=^ŸGÒ…,×ZÀw7’c¥^À—íªiŠm«U}¿Yˆ¡äØôÅËßžò}¹­’2ÑË^…eÝÒå×Ls@JÐZ„Lº2Ð  Å…X+ ›ícÔ+øÊñú8ƒŽo9ƒiT‚*š%ŤM0”kºÏ'=£ë=´9ëyï˜Õ{eGZXÁ@¶xW5RÊ ä9W˜Xš‡†«ÝèïH‚™¡Òá8þ‡û©Å¾ê®æucÚrmS󎉛‹¿…î&Ì¡&æXUm~¸vÓ…› Ks8p\š¨–Aqȃè‡Û¶Ÿa;áptrçü’öé|d€Âq–é0Š„a‘®Æ[Ñ„Êýf«¦­DtOÿ øÌ´>¶Z\Î|ýsÌ÷ÔºÝ÷—+:ÅS´O÷,OÑáE †ðKÀ£Fð©Õoä‡!ÆOwb—hÜ.àš^ÞŸ¨úa«û½Z÷èƒo8À]`9R<~ïƒ+×åûI}:×ný8©zãþÅÑkAŠ&+‚\S›TµkqT*ªËTL¥&4XÓuDÁjÔw˜GK+g#¢lG`c"š÷˜ÏÒ‚Å„Œ»°ùW=É(Û'<„â"¦Uî·zíÅù}œÌ'íRý<'õ=ê%¿J)é=äº>«CLeRê³Ha"?ýPjhrÿίÈÌ(Šñ#q#ñ嫌9PA8Ë‹&’Ú×1R[`HH®Î Œâx–á¼~Ò§þí\HCªvs>ͼ4ß`r‰À}‡1º Á¨¦Ç¹"a«Aîk%a{ø±ºû¾”wÞ®éûS½ó] ¯è[áY_}?‰×ÃÌL,õ°zõâoÄ«;ìú»¢°yu½iãog´_*=eûÌЗ¡ÚSDc N4ÅýUÓóî´MEÕ¨„Š–æNÒV‘– ®,E;X™JÊþrPË4ˆ3Û-Koñžt_=vPg;ƒ¡*j}dmYŽÇ°c¬ ‘mŸöíd¿èÿ-ì†ìÕmáB]ubÒ»>…„&Œ·ÝR¦b”Ʋ:l¶üÊhÖÉcøÓêkÊŽÝʳØl¦ŠèŸ*CKÃÃÕkÍ»Íú÷ÚhÐüFߣǜJ὿Ù[HÔȣ⪡`¥bžCÿÌ ãŒþArgý@×óG zŽŸŽfAÔ»ŸÍý¬EG‚_ª ˃,RP&!cÛ]7"hX¢ùC”"hvl¦œn}RøÏ,£?k·‹_ž@ЙáKN >¡(øö |ÚõîŒZá4¬“¡o™[u­ù&ÖH?Œû~nm+¡Á0Æ$_¿:??œì¾´Ž°†Ž¥*LoÏr®Xfð)FˆÀÒõûAi´¾U§>hî¼nÅæö‚ùˆznUÅBŽ5J( ÚÖ(ý­C·DY-·)n“áɰÚ4ÛZ‘GÇ/öMb©,tºôš)1…dkQ‹<({¿¾çí¹ÛÕSYc"é)Âåy%ê '´Ü™ˆ²Ú£±DŠw·v­­Æü4¢¦y"*Jå–•;bv[ÝM +Ñ5Hô¸¦m0&ƒb±[“^¹IAåA¹4–ïY×üs:ïñú<wÖ.ºv[¯.KÜB%îä_A·Žjæâß?t<¨›;\ýZzr‰h¯fÈ")Mƒ€Ùn–Ÿ°1o¯‘O¹,Bžn‘Ähx1ð!u·²Sû² ¯ÖüMšæì†WF£F¡±h¤#_Žn‚4ëè–{¼u­ÍEóü¹µ‹”r(¨”¯?Ë4}E+û1é)ýY=‰úÝÏbŠÅíæ†0Sd‹RMÒ9ÈØÞlûyw “ÙÎ9¾Ó Á½ª¬½Å> W\yêï]kHäõó¼d…}ŽjçøÀi‡r /…:± mf)ƒÁÐʈwΜ^K+êëùìÑÒƒpöQUOm·kšÚkžw/Wâ½íõs­-ÕÑßc©þÝÓÔT/ñÍÇt“¦M—Fmq«Õðõ ¬¢´®ÝÚsWsN‡Hȸ.«M¤×^?¡&éV¤šª¹?(~E¯j³EóT%À; ßÔ8ñaãQÛÛ¯Þ°—¡¾3ÏÅU·´mÇ_Qø%Ê‹&e¹·U'€\l›BŸˆxå„>¿LKC2cÛý!îË«5B¾ŽîWÕ)\\ñ \Ü å·y8œÂY~Iˆd¯ÙdŸ˜Ódä¾Šî‹ û‰q}nïä,ãº'ƶy´d*¦]å3ëÍÚAdaÚQTPDz€)Êí^VÌŽ)͉·ÐD\G°ÁÓ¹·ÄÖ$H >ä Çì;ŸnÜ^zoºñÚMôên¼-Ñ~š¼§t¸±ÊO39ðV§Ü'yu7¯Ò±AmE¥[ø|;XLX:@7Ã/v£ŠÈ#¼óƒÛþï± ø~Èó£ËUØÆŠå¡Ñ,G<M¾¸ÎNAPщUÐ ÎX…Ž ÛüÐïu2@,aß9Ý«I†³\¿¿ŒØÇÒÚ›Í×çI#º–J_¥ÑûòÑ^Í*núèÛÆ gzØ‚àðR‹Ù©A7];Œä+-¡õ’:û½š+S|nõã:ÌTg½²³#TLr›óæÛ= +Ðäß²ÞÛŸýk5$¡V»^¤CâŽ×?ÇäRu¾ÒÞv÷O~hqŸÔ¤{@+ùSÂf+¡0õnÆ­­#‹kZ=ÁHçÇ›híÞý‰ÿ—wëz÷%Ë·2š¸îÏ´ÔÅšLñÁ +OCª2P–*ßD¶_}§ ráÝ ’ßÍOKõÚîŽ.*¼‚ú<ú?ÛåŽÝJÑÜ«ÐäCðÏõ8™àÍþÓ©[ lëIl¡›M‚$PŸ±r(µIÍa¸DyeŽC9¶µ ‘Ûõ†YE©C¨‰°±ïÙ"ŽŽkêÐ?4Q'„ZÂÇ­ V i9µ¾-oÑi“ÑÉùüXŒ Rù¹Rv#^ùÊʪtkÖG‡ª zÄ M˜¶¡¡‹ßµþú•¡%󠃋˒y˜ªkE+k<,0­X¥¦5 lJä‰EèD“ÞWÙ` }‘#ŇˆÒX~ÛùrLžÕÜà±Ó:NuÌ‹>¡+á_ùš]ºÊüøœ ØC§q|îj˜bå†Ôå èXoBhJ«¶i’¯Í+½pTW”U•G¦·VÖ»ö +V÷‡=FmGóÛJƒïë-ÓD-Ýõhí}˜$ôÀÖò¸éGJ¿Ü¦ùDH +ó^¹Îòè93Ü¢ôÈïw­y<ü$€NÏGd \ G½&²~'¢~ÂUðŠÉÑnWD¨*—Q Ç:lKÑ{ÂÍcÅêÃoÍà°F´¶AËUÌãŽ=±LÈ+#fKÿ•€{…S”Šì2+&£ØS¤.Dè6OÔ'uãJNt!ë÷T»i|'d§ý4|h +«GûNM÷«Fsó|/ëšô²8›[ÅÕW+­I‰¥ÒH9:Íà´’¶È—èòcUÊ f\.‰v;íMÁ4 ¾–uÌÍÒ/.Þ(ռ͟—âLê.›ð'Õ,ø>Í£uõÛ.n=´^ÍÑ!ËgW©ò¤×âV)H¥ÛêYÿ^÷ðvس¿{o·F>¸rb +ªiÌêb±îÚý»st¾æ0•g1¤½¥ýõMº&«èpšzöNÞ]aéÑ8ìRÅÍ ×îýzä:P°ày<þ/À*l{Þï—Òä=•§lfÄ‹ÚþJî2Ÿ«¾T¢aÆÝ]П:ÔånnÕl[RMì9’`—Ýøy|Z/+±¿„Šìå¾Ì,âPxš©‚FiæÞ_ùؾ®’dV-itíB˜N•ôL]'Ü= I;Ÿ€{ˆDÆ)æÚ¦»bó¾>¤/“"§'íaþy zõW¸NÃ?_™et'7Ý·T¿>Še"ÔyNu€ ^Çx6³_ÒµÙîXN¶\V<…AúäÎp:fåoîâÔõç8¯™‚•„rú&ÇÑã_^¶g¨Û03ÁЂŒ·ülÍð]pbV‚ʵglû§ýò;lÛjúÕظã‘Õ.®.èyy`QwªGK¼¦é±Ôá3‚ã ùMôts„L¨uþkÏÇ‚¢ûÀej3 Meß-̪+ŒÐ5‹ÇûÞ¾>„æâÊ µk§øŠ5W·@@ŽiÊ”¹Œ«Ów3šÃ*1ÜAFäͪ¢Ý9ù§ÆS80P@ÌL†Ìp¹VÃøí¨äÄâºá K°½Ÿ_†Æ€;e/ÿMVUé „v²*nbPÎi#:oÇçéß î•b¨Æö­št~¤„DŸq¹[—¬ÏÄ~KûW&Zx³…>ž!¯ŠKÉé˜9'*‹åøN +¼é˜jHgº½ëö·uºƒNX‹þ‰_÷Ìy=–ð·Ù †øm³Õ{R +Ì“¤*PÉżv¸ðôÖ~ï=a— #f>õ@¨Ôn˜Ýy4)c!ÂãÓh:ºŠðlsuÂS +ø\CKœ +‹‚TóV ½QïÛk ’³þ·ß.õé7NÞ6Gp;»ÐùK]G/;׺&þ¬á&ÔÉ`O²Ï1ŸK?Ø@§Ÿ&±¹äh´Zò_sÒ^lu¼ƒÖÂïQ¸lï$·mÂâŽÌáMÝ HäèƒãS§F¿ežN9ôæÛ37Ä©ÉáØu0&ÝÝ£‡–¿ÜxHlËÃZ¸~ ÓÁ6îC媄^lw*2ôÑô÷ÑŠ4ÍáwuâŠ5qÇ/xXeÝ¡ï9~e7ˆgÞÝ@ñ´Š‡vÇål«q3乜wâD<ž‰u ˆ„FHØXý6È6SVèË­˜-ݘ”NÚ™ªjù:™·Ó}w¨=t¼óÖ)Ìdºë+€™ÿ¾- Ž¡…:EÖ­˜7Êv-÷â6LÂîóø»^݉T]÷}?é °Ñ¡`¬äÁjªš* îöÀÀ‘irØF”=r|#:ý9Lõõ1Í$€G°«Â)ÞP3£1óÉmÕ¶T ‚ 7ñxÛoš‘mÓ­³™Àþ`,ÓÒÚ¶5­Ø¯ÔmK’ +]Ň£Ø¾Zk"‡2 /iŽÂè¨ÐJSVLbSƒ ÃÀ:é»Îº ¦öF¸u3ïËX´RäÍ0Ûß‹z§ÛŠßöpãÓ@D:H¢zíÛåí¾!ÖyÓ(–Ó’ï $½]ÐU_GEFÃ0Rs§ŒâVgÎ[«'ô‘s.3EêRóä[âl½;÷_Ô"ÿVî¿úáÜ÷)JÅMªˆsÍ·1½ÿ_ )v&DÂÖmvMÃ11'ÍÔEh_Û<µÂT¢`§¨×0,S·‘ìŸ «lûÊyîðÐ9zyx ‡`„¿vÉÔ˜wô ϶©t_kYd +þG:ØNiduJŸ ÖyËëJ µ@ “FG¯Å°Ú{Ú&á,¹þNa·,}¦«$®¹¸-‚BúŠÂ¶c9Ú¤8l!x0…´cg 3ÉY’(âc%-š.à¦0ïáKðM#AIU\`Ûê ÿ˜•:Í;}ºŠ®jðáŠ;+ÅŒ®MVk#å¶£_É^Å8­™›E€bÀQ1Ž‚hYn7»~‹t«?‰zz[ýTºý•‚hþ1®®¬iºkSÕç]¦Dw{ ÇÂ$šyuز´dM%_ú­:}¤o·Dk½^áµ5ÊhöOæ\Ü}­¿ôñª.ú²²vv'”íåæŽd£ºn íb;ŠXªYæ‘7˜yÍæ×Þ$œŽÖH_ë 4®·]Ù·;1¥¹1«Õ…°Çmh¥âÙRa°XcÝÓúÙa*©­2”éÕ[F© -¥K K¯°å–[MA'9³dó•èÛRÖ_¬=—CŸr•…Ëôå~þ½1¤aJ3Mp, •¦ /TA“ âÎÃVA +ÿ~gsgMâ©ÐÇ+}^˜‡‘D+߬Ô3Û/Ü0¸$¡±B%‚Eªdâvnî˯©¢Ñ‚QèQœCå·µ[d!ÿèì­´ÑMh6\\åEaaº“©jŒIƒý•™ó ñ/¯¬·b1áV—!HÃó5g7óëJmÍô½ @øž¬Ø¼€öÖx€ÁÉ5æx\Iõ­SMmÊ5µÒò两qîfY}ºÓ4 àxŸ˥—?³=lªÇ/Ÿ÷³–AA6µåŠÈŒ’ÖZ:Lë Hâåâ3Èσoº‘d*¯„5ßçti)€×‡zqz:O½n²=¯ÍH¬öó»íqùüg•˜nmŠƒ +žó?®Ë$»’[¢s¯¢6 :ì’ëñÔÞÿôÇ ðÉ¥?’ð’™$ÑDÓ¬G·i‘@MnaÝôä …‰î‚ô­ûÈEƒžniBÙÖÂò´zÚvPª#Ó¯&\!ý¨Á vÝD¢橽¶uÿ®u”c“¤Ì_ ³?X ¤pù óúYø-°‚¬`zÝj¾ÙÕ£wUãÒ"ä¦<š&‰²\¼6YÍòÃÞJÀ`éBp‡›¸†½[âèǼ¶]½1r{„£<|” +•×ÌËÚ@¿(B_0xns­·´G +¸Ñ-SÁ ªòWðÝ»½ã0øÛø)õŠ˜!EÈ‚î¦díôlqxN0ý £Hè¿×߇Mû6Jéko22îÙªä…K•v—éÚÄvè©—lSØ€m´DNtŠÝB=wÍbt/oËýƒú +:2Ý9Æ;bÍ­[©9ÕÕíUçºÈ£}²ÕÜq*Ï(?>»Ò>«[Ægu5.¼ëÂÓÚÝåç5éjN„eYž®n°]è`0Hn(Æq™çõlíí„3YãT)˜¿M‘¢z{Ä €ê„4± ›¸ôïý·± X Á(›({fà}8¸í€%®¶“ºöÆÿ;wÙ‘­® ÔÎ|V©«^}<·£Ô*\–ABÁ÷Øïõ©Ëê‡Óë1=‚àrBd64‡ëã6„-z:Gù(—O¯RŠM°ùm5(¡Ž5¢œ4¦¥»—aó¡Â­Žƒ‹ð[§Qvï;Z´@Q·¥a¦ U: ŒZWµ‘5ÇBÁª÷Ž™¤¹wËȤ—Œ;hFvøåFŠfaža¡ÄT+!S÷³ +u1ÝPEkÀátIÝ(uQKwtÜi×ÒœQ •½û¢Ù½–éP4º›8gÝ“¹í®ë‡h.òwŠc;—÷Wïp2^\MuÐy–>§ˆVK1©¾hÙ§^Î7^;Öµ¡cº5^ªw8îj_S³¹Ò;öü”p’”e‡AA+B‡üH˜M˜€Q3šˆÝÑ>¸ŠÉ¶t]áóH{ºT_½ç^…~VþÂö,ç ˜` ôþ€'²?»…Cœô²t 0ÞÀ¢*¬-ØÓÈÞW€Íb—¬µì‰eñ‡°žú…ûãZLú2Ï2uÿúd-ó¡«ýSX ¸b–*Í +A䊓æ}Å0´ 7åñrµBx¦cއy—&óƒbA×cg»¡…|Ðà…4Óí¿ÞaOóäL4Â&rcT +]¦êû }ÕÐ]ï<ÔZ ¤]È0Œp3ÞAZM3ú‡c]?F|ü_–nܸO Üv8Zaj)޽óPæí˃d1ÓFv‡FDkB眷ÃrŸ½kç¶(p‹!Kñ1¿Z¦+<%€EMã‡pÿªˆó] »ÝÈ-ÞŸÁÁDKa²¸Jº¨h¢;5ÀyÂfC·—rÙ¦ÀÓ?yÑÙγmÓ/¿~¦Lã•VòpÊ¢ñE.ŽáOZŽÉkµUѪwWÍ¿!ZàîÂøQö +ä*xÊÂ.<ÄæéååWj=¬Hîz'RÞºðC!HÅëëÓ{-mÒQsþ¬î‚¢@ãF +‹ÁØ–#(íŽî~#ŽìÍÇí»&]@ÎÇD ²Má¬pøÙå±€ÞiÚÀð²-¼PÙ~¦óá3êÛn–QÔlÅŸj€1¬Ø1EˈàKÖŸn¾„è'÷É~>(,•´­Îéa”5Üæ1V­c¸uٺŔ¢†øöÈ¡…Ñ×(®ì§QœÃþ¬?­ƒòµÚòH)‡Ö²Ž%·Üs|¢àfc÷Ï«ÉÅ1DDz,îr„PfÍ ž€1Ê-@º×áªÈˆ[júòƉ뺈’hü\È©õêãv”>»H +e‡òuë¸ßdE•Ás®žxPÁÚ$Wú‡%G DâDj«xÍOcVeÿ¨ü”U-Á˜Fe­WÓ金5ú¢nT¾é¨‡ÓÙá&¿=na8r“Í] ¢D*ÌÂptkŠ,%8EôvÌ~¥Å™¢[VC.Oh™ÓÍ!T'I¹,ž…tW%ÎÂ&Ððxå¤ýíù¨¸·ÊvÝr7ôÖñYtñDèÿ&àÙ.LÝðï¿h^61<”Â@Ño;¿”§ úhÐØJÏŠssº+u@Vê¸Q¼gHÎåiÿ¢½/ц¨Ðç¾n¸¾~Øaºc®Õ‰&GبDº¯’ßÓ ˜&$-@§&Ìþ.¬Ó§ ¨²¨ë¼ðBKóØUW°ôûú°)4SÏ”6PãC†]¢?׿áÑÍne-”!ð,º¬W§S¤ òð}ôÔ|Ž£TZúnç-4ÕrzµPð¦ú¨ÕÍB­%ÐåaÐ𺥠K²¹ŠÏÁrp÷­…ij»ðVR†u^m±_#¦²ø?®Ë#Ë’ÜŠ¡s­¢6}èÍžÔûŸ +`dKšTÖ‹Ï`ÏÀ,ërHüeþÁu²ðWy\ZOÍt¼p²4<"+íõýRȯp oF%tÒùò×TfÏP.ÃïSùÆ üÔR¬èC«ž-&g˜oÒ•p—C+@k²¹Ê>6ºÑÝJ>»í#ô úL ˜üUŸÛ"YU%ÓË\çdü•ë¡ù%ç¸?ñ|u裣ÂHä,ú§¸" 1[Ø›j"i¦–ö…dUDvë`ö <8Ïã-µôak·fBÆw!*RCÛJLh¢Uv\æÉAvꯛK¸Ûé(–,޵'ô²í~(éDI ¯ý ñd›ÒjˤÖt,ÛAƵ\û+ïˆ×=vv¼·ýéóp¨tNu¥e´}ë¸iuXA[看,ºˆóD•›¯ T°Þ.‹œT€R´œPãZ ….qh®:OÌ”. g"1+8•jºØOÐÎÅ* c±Èöxÿ…YT +B— 9»o­Ó( ÇÔPÃ¥ƒðÔjþ¾…áµÄâÒ¼ŒœPMs²øö|”#TQ¼‚1³=ÇpKãKÙsõô*Ô?#kéj¥[Q¯&6. ¨fL0ѹ='ÕÅÀy¢4)Ë”ìÙ:¥âÅ4“èDÝSztÚ9]=ŸÖ- zx ™EÛZCÑ%*®1¶(3aQ-ðHƒ)=0?œ gvÜ›ÄZJœåΛsFJD–¤9ô| m5³CIXAýX:3PôvñG[qDËs„“ÆŸötŸú›:t±å!œ=7cH7e¼Š¦¢•¹+NÉ™i±æŸÎf<ÍñÓ)-Öv$Ò¸¦ï]×dia5û(˜ª~5S­’þ·LRÚDÁN®+löO£Flo½1®_@lëUͶ`—»¾…;¸ ¡fÂ-r®ù²¹W®ÍÙ t…³œ§™)ÉI·k@— ½ƒåê\œ«TL¤üvF‰ßÏÐgJ"¬¨*…õ¾åð¼4î„ìçÈ‚@9lDã¦=ÔŽÃÒ½C ø.Vý \hLá¯8˜Ñ"gtí­’ÛV§e4«ë…ت'KïW´Â6ÿÙ<¦pG´ ªVð„uQÍ} «µúÛ䓆՟QÃÅšñ ñµ3Õ â´0£ÎouuÓqFÂÀ(I+9ÅFf5‰@äW†yÄÚ¼r¶ï–|œÔþǵ§èÿëWÖíXÛ=øSÎT Ö]d5Öþ€A­5!«ó•iW-ºcÖµ'ÑwK ”ªÏtÝLð«'9¬ék3—êL;cW|™Ó3¡L¡h#нRÂ%Šßrf!öQ$ ieèA†jKW§»«F1 ºî TÌbXbSRú€§þwyŒ„†ŽwB›¶jØý_¶Š0rhÌFµVêþ‰N¸û‘£)kÍðöÜ~?ý­ô0F¸± x±2‚‹i¶Vͼ„3åËB9ÿŠ:¹Ùê‘¶ð3|Óî°˜94vì§¥O7ãŒw‘e\‚ûi„”±Þn¥ ìF² +Ül‘Û„¨-¿ói¶a–üÄÌqÕ¹ Ya[¾gÛ/Ü.À|»ëÁ5óbi¼Ý±XêR‚ZJü–O§Ü}“L`oK¾–·»EBäÉ ‹Êzátp +ïú¤ í*šXOêŽPÊŠ„ÃeÁTõ“U£­ôL–oL 2s@ v£ùnă·y¦ðÞó–/z¶üʰÙ,öüUáîYÑU5`Ó÷×ZÓªhF?Þh¤àÒ¯Üù‰Í2"¬öŸûes½Æüi¸N†A¤i¥ j²õùU|Jãµ"}! €ÇÚ5ò’‹¬oùiÖ@åUô¤ +%¡m\Îö–3tVm>]wë›Ù#¼©t–”Ô¿a¼îæfcBúƒ>byƈùKV{Ýõ¹¨1Û%¬ëñAuÅîó+UÈÂåN=7ê¤/»ÇŒMÏn×t‘—ê“hÈ6Ñøœ‹ð¶ +Í^ÓÔ¦KŸH¹Û·ÜµoÙ¶¢P ç g;^ºN{;j©v2Ûsúåe¤4¶oñ.ý*óÙ±c¼k"Ëùn°ž5H€N@ô~ölHCÒ·šQëÖ¤·Ö€ØÿF0P#…¼‘ÛV +ñw­Äæ“õþVc©èá‘B_ãrGwQåêpUozÛºåOÅ6áÞ„5Iyý«ž™3¾! aâ5Ü¿ÿC ÏáXåêj;D áäÔÌ Z±$6²(ŸÍ?ÖéÚ¥MRi¨‘þƒÃÌMuÜç5Á4ÛC´¹Eù½íÞm·+'VfÏØ^ ø L”¥ Â<0^I9²òꬊá'EïÜÓLp|T +¬¥Ý:‹é> ¡ÎQ]¯n°A¼¯™¥íÑ>F‘÷œeåãÙ<Ê6«yñUrJ"ôÍù¸OÊ18ºÐ¸–"Œ•2ª¨Ço1¼¹OÖ^Ò`‹x<ÿ¿Ãð˜Ûö -¡mT’(à^ )P}kMµÐjºØÞ¥¨ª¯acEµŸgŒeÊ _£Eºë¼VLÔoÿx[$8¼ÿM¼ß§¯7ð£Çj|™ïͱÜUè4–úGÄ Yb¢÷ûÈö¦­:îñÚ~=-`¿šµ•´h€k/¯E¯ÒºóQŒSsÇKß¾;‹L×SÄÉuËf + +¿˜ƒ´9AŲáŒ؆¸Õïǘ\¢Ï÷Mƒâ^òñê»ácFk{•_ÕÇ-)ÒR’ÙÏY„~´6c”3Оb·’SW/í±»s½0ûJ fwóêšO/»ÉÛ[Ö.Db^j(Ñl”|ÄbdÑ@Yî. } ‹ïÍ“ +s¿½=S7 z%•‰"© óV­ô~çÏÐËÖh¸ê9Vtëx~G¹A1WÔc¢aÔ&ÝD¦âfÅ9›QÕÃÃsƒÒí½oV—‘©¶`Ùµ²õá…ØOŽ{TXô¾æÍÏð>'ç™ã?T—I–ä6C÷}Šº€üÄ™wìLqØ\¤Lì¸M/D t€!1Uýeò%í^N¾¼ô¨oÇ1)WÊÛ6Ù¿ð¾w!1T£m×#´WÝCJ½sשŒc÷†ˆAË3™Gži'¥;¼‚Ç\;T*ªT0§‘–9Yi¡´\ëjÉ×s[„íVÖ´tòÔËšžoîŒ\fKÉŒ‹¬,¯Ù>Ccž±,ЉÚóòê±’}¨–%gt;ý¯üÇ¥^sÉ,4r¥¨›BEž~ÕÇüýk…Øt°FmyW­lB… +\Í*èî/àf#Š]›B{ªÖé3¡,_Ouý/¶åÿÆÑi†úÊaÍ1uÜñðxôH"…Z ØÝß´¤×¯E=i]©SNû+/ROœGÉ!.zqý©ºŸbñû×ðdŠçY®W&ÝšÜüÉùý«[+?º¥Ž,©Z Ör@,÷ÝqâE"®¢”šƒuåkúx}±C~û< ñãÏan€ã~ãDoñ6DC5n$¤ß‹MñHZ»ØõéVF`Œ™x¹ùºGÂá=ÕC\k§sÈ=øGE`Kº=Ê‹ˆ +ÛFkîq×røb´þx0áO ¿^vx†šuh»)\ÅÐr†Z}Âh n!Á*S%Øüöˆ¿®1Ù§Û–ïÖÈ!=hw3·Ð˜AèV®ôàÁV´îufs4qý.G* +Æ0òQÓîÄ示å»îÁŤå³9Ä(|n¶—’ߺ‡ª“·à½!T‹ðç®VMÜ +y¼‡á»×Ín=#…þ=©T°)ÌZoæGõ{\‚ A+8O +²iªÁu[PÑB¼#:ëÆú ÇwcC«¢  ´e¢öí}KŸ·¶Ûñû×7²çWÒ†j7F·sµøVм?îÓw!¯6\˜dàîö?˜ŽoÈgùêßij»¦7œëÃiÜ•[0ÊO©íúå„̓ÙîöÊWjàPWt£Üå¯B­¥DF‡ëö‡(Òs‚óV0r¯ñà éTD§e²œŽl7PŒf-O/>.|-Wk™^{¨.rOݼ®¾ñº43*p| Úe¼Öõw¹ºi âßw½"jGýÛg·;™4¾F· ¡™xía¹<|.dõ2£ŽžkÂyÊÕPæÈ7’/ÉŠôvÇ)ê} À«ßÃ0‚í.‹á{§$)«^ÎÀaTýЦ8m>¨ë}Çú\ЃmM¥Ö®c›ˆ,TáÀ;Ú«Åš–k¥+(Ôû*ÐjÍP”O=àĆÇgw5éçÞŸ½WuÚhÙ[ñR”¶ Tu +–vW¿|º»,§ØîØQ[¤@m2?2ÎoMÒ,ÖmϨ:Àõî]lõ Ól¦*'#%JnÌ®ý‡D;ôì ZµdäßyÕYq¡H¦\ýعƒ´Ê¼òvžÒ¯¢e€ó å½Â8_÷TЖPô]­±lÝU®ûÑGDÑM>¯ +†W„Sƒ,¦•€â½ˆ¸gJêÁ!“h}Qؼ†'°½|ܽᾑ÷ñ 8/~)Åc Œ‹ë{”¦æ¯¯£Öä,€%îEì©“ÎÖ¯û‚?¹§mR³¾5n¬úbo/×(!o¶mÅ $lÃ~“ªÑz]·7ñ—w³yâÞ m­»72e^‚ëR¼tí¾ã¬èäɈ÷äζcø¨Lpàu¯*¡6Ê= +VLf‰YÇïw \ÄTÁˆàÒU°–zÐa ý ú×$´€v¸Ù,—0l8…è1!¢ÜòoÞVLQ¼€ òÜ<¡ïlv¿ñtD&€ÉЩ5ý§&ðÇ`%™c +‰´åáøRT¥V"ų‹ˆU7Ò/üGŠÙã®Ðâ #HP”¦êw§àXò¢úÏ bÎX豟vRتALŒ*²—DC—«4=óM‡õäæëNJÃÌA`$ÌNoÌ›NîÜ“\WlÉLâ•`ejJ‡¨Lê!7`qðŒlÂ[¥†ÔrýËæôxœNHwHºCmËmçâSžÔüRã,;%*¼â+UÜ{®ƒ¯£9—e S|¬¢NÞ³áÎÏp`½›XtÚx3¯ê>`-þTW Í7Åù*÷ä°üÆçè휱i+ý¯S¨®÷4yÏ Ú¢™=˜ßtÅðMÑÓê(ŠjŒÖ&M¼¿¸=?Í*0ä-ض­,ut@ ˜Š"N9ħÛþõ †í†©cë›~+/Eû‡Œ†—*{DgmPÉ,ØY:݄¤GÁ¤x`DÏâ*BmÓƒUf p<Ów–Nu%¿×,­;Ãí_²Ë·–%‰¡¾V!» ä<,£× à[OFïßi²¤'áC†*neeFÆÀ •{[eU—çHA(S²Õ¬Åm†¨ªYÊÕvaí’ùkæ_ÛûX¡ÒûÌn•¢¬¶¼Ofìq3÷½´»[TB|ØÍæ}nvco¹Ï!ò„«ûí±èð¶S8„­–E¼¶!z{ñµ‹]6Hí0ø-AfÀ£·ï]@Àr™½¥ ¿‰ÇQ +Ìal· ìQCåo‹PÅÒá²¼¡kªª¦r—˜€Ö‘ÈC³5MGwÙYÛ†ÙêXÖ²8fVd.<÷’|­\Ž´WÑ·$ôpb€UzM™ã­~ÊFù@L•Ùñ¬HRš6¾)1Þ®ŽAuèð6“o*Y• g¢oûbïb¹ +jËs˜õ²eHÿ¢åÕ¥Ÿ†ú(V§E],q²ï³-ð±ÿ`CÔ:óDèZÎíá”äÑy>V—•œiÅr˜ùgçe£Zd_ÅFIB¬©”i—*:&˜úׂ÷;fõà +²ÖÄúô¬ÕÙ__.Ë "¿Ý³ EñÃV¬±Výz+«åfŘö}³zœ8V‰%@u¹÷!»Sœ„ ÍÚ¦ªI”«/†¶B +M 8Jkðop”*´8ÜË”@'áŸ*J¬é íeõèÇg_ŠÇø—V"­Ç‹öH:L8@¥ëô,oO—K¬åµ{©ò›Þôö$÷ú¥nËnÕ }»wCŸÒ¥žä:6‰?Px=ïëÛT¹{s<®MÓD5'ôí[ E™óËxŠ »ÛËJÞ«ýh¹ã^¾ãœ+ÁjÛ;!âXË…/” +êAûÕÇÍZDÍc»ã–tRmú[(Šðñ”4v ô¶–qwºø-†’8{8*'NÐ23&¶cBjÀzGùœÚßѳý Öb)'«%îÝÏAñý73˜0=Éi-ÒÁ—íÍé$A¢ ¨Mt¾™abQL‰°{HÚ$0[4çZt‚ý&^ˆŸ·þóöß·ÿ½×÷¢¿ú~Ô÷R +á3Ÿo¼ù4«UNù'lyê±Ô˜0àáߌM<„ƒ\XÊÝ V.Ö®¤%ÅæÐ­µ¢"HD1t]À{ÚM±–œ³ë¶ÚžíµG1ZÈè%2i̶ëöºª‘À-Ìâ‘Í,æÎàB|uÓ9 þbPåÀ³o$IŹS×ó°¥ h©¹æÏðÀ„ÌÈ0µQÖ½ùßsÑ=ªçÊYró:E{o™—Š|s XcD1)âŽít<ÎYZó»ôG…ÀI€Z l1Ãýu¸ªä.R¢)rŸ˜Ke"SCKÆÖÀSc©_Ë  —ªùX´<âYÅÒ |Ëã–upT4R &#@èÔP3øZ‰ÔúB¦ÑðÚÃÏðÈþÐc™ð*Lå,wÁ|~]Äj‘Žz]O¸OlÆ=¶ÅcQf1¯mÔÄrµ½AEˆ6Y5ÖZ>eÇå¹E&~Ø{®n«­ñ6Ec#gov]¸³M7ùMPÖ1©µ³Õ Ò°ŽÈQ?î{ørèß§Ím»Ó?Ó èµŸ@An˜ ˆ2¾‚ǤCÍ…ÓÅÿºä5žCxùr8‹@˜¬]1ícëÏ®îÕí¼rFb¸T ¿|ëCŠš|Vhvðý5,ypä +îÃÕ+»/×$RíëÀ1Néïݲ—‚ÍW˜‰>+~‘…‘ïõ®>Î×ío+ŽÊ¿‘¬¶ûþÛ[Z1r™|Ú†ãNÏ ,èïW²`ŒI¾¼Æ‰i'‘º™òXä²ê}e•™·ðzú•Ü~ö¾öRN·ùl§ÆT+p£ë9ÇŒ]4( íMðN0Ý9êž½ 0qR ßdíck÷ÛjulL šå¦1jQÓcÙÕrÊ 4ŸÄöòË©!¹yŒ¶ƒ-fú §á¶ Ãa7Þ5M-ûö\Ì‡ÛØÅù^™k8ä\•UIDÔ ÀèïbvO_§§a…âÝ54à +òÛ•;TÕb†-e¬EšažW³px@B7·=B×i>_Éèfjz¬vsÿã|£ÑBL O#éUaêHÁòë¸1‡sP- ÙŒ‰¦7ˆ3´iúîwiðÉ„-p‹¤Sj¼:lzůƒÅÖÚêÚó¨R¶gÛvšFu OÁµº]Э¹ÊnõÂ)òä„~3Äh²Tc»5}ÀxœÞNRÓZ:Ø 7½®ÌÁ»Ùün™ ìÄòvÊ”¼p÷êÚÉÂr]Žù6³S)¸î¡–ù¢Õúæ× €ñ1,Ïý %OÕé2:‹­›b•ðˆ +S™_xµŽß\ßMME­`s=ìžßÏ|pÊLF?Œx2Àß•‡¬ù5±\dÁ"[ýzØB9±B“ Ô¾íÌzÖº:ud÷(nsÄçNÛšBuìI2Š(Ë HdîYðœ>:u„æÈ}Ÿå Ù)'»zÀ®æ+ ›°FœÞ{gÌy¦C©O™N¼qŸ ¶ Èæ_w÷Øh™_'ƒ4³Ivx†V³žUWzqeŒ•tZÅ(Û™X×îÖFÜ€‘ï‘wÊ7…†‘©>jp*³Rj`7¾W´PáJàt›Ô› j3%õ^aä×Íý!Ò9Ýo7}µNè¿+cgCd -ÜBjƒ>=$ÞDé׊g™ß–|ü F‹¶kn×5UÇ(³:b +Õ9xxÄ€)£F¾6’Ðâ ›Þíפ\¤ƒ“]]L5Ö|½8ÉãðƇn<‘RºDëBBa8Ph_«àèÜí©Ì]¡Þ :¬&†ƒÎï~Tˆ“Õ›ÂÀ}YN$³¨qè´ø—ÔÛøÿòf®Rs~‹Óg*.ö­¯É7«Õ›Gñêà ™.¿]fÏ`^JÖðsh¶i õÎUƒ#)·.F›Œí!@=Eȉ"Òa'Œ&¦2#ãø#Q•¼S~½ú»; ñðj¤‡+j2¾"´¦gu q+Ö Ümã¤ATÎá%UGºŒì=yþáßÇ›’s ðk ;G†t³–Á}Ö¯u—»°þ`[×în +j>÷®»¸qÊòBci}tXt¼ÃµÖ}4ÍÏÂÉÓ8ùü Y÷Ã÷^,šæI#óš`Iì ÜB¶¨ºí€£û3ÓœHçY†’6  LÞ²{yHûxß™ò¥±Ýc?Þ®Ö›¹· +#»a0øó~Âä’JãFpa¡óñG9<Ð9à˜@—JžíOõ&÷!wõý×ÑoAax£øÄ¹ö4ÕvD‰„^„§´e.›­ î~XD~9Pe!аIYÎ µæÉ +‘s’NÏBÓçnñ7uMcÜø—‡j¹f2S­ž>ß {ÓGÄJ`²BU™,#³9–Ü“Â?¼\×íŒdÏâ†iáK”æ~éF¦ë~î…u¹¹ö^ñfÊÂàæ·G5ûA{üÙûáh——;m‰Ãz©«~’¤ZxßÀ÷€0XŸNÅ“þ¸”µSÁÆÞ·{ÿÃ]¯%Óã-Þ·(6\WùiW,PñÎoè¼nš,ã ľŽc74ÿ“]æØ±ä:õ{Ú€t8Ãz¾óŒ~ûw?âSUuÚ’P™I‚*ñÏ?Õ„¨ÎŽóT ŽÎ©Ò§Á„ŒÂ©%¹Ëºg>ËîpÈ‚£iùGѰâÒôªÈ$+ûEѸmFKìK¤ÏUÆ$^…‹öøÓ6’V`›hÛ}Uò’’cÿy.gPI^ Ä9¹Þ>µ X×|ëf_*×°ÜrOðøP4J³nŠ›cz8 sýôÌD*-¼ $>Î5VÜ?WŽI£ð&Z-°Š[´FÞFÇDrÁJ¢ßU‚.ð)ôšfjƒÎÕr?Ut¹‡œ9çRÆôŒÍF­ë:²5|듵HqQÝÛGHzòœ[»wÖ2ëÁËrÈ4ÒeI'ÔcPh"Ïéd•qReqÁ9ÿ„Öˆ»{ï–a†¤éˆ+´h³¾\ý&ÐTòh€„g´µhômÍ“˜Wi ¢ÓÖþJ £»» Jš&''¼j·­:6S€@ª¼(U5~ŒX3[A•4oä9³§ï[Kz :Æc¥^šŒ¤ølQSo›çHq’¶®LѤe¯d`˜mèËãþ——ëW.)à«ZAÙ¹®ž‘¬ä’ž¤7H~_wAZqwH&fµµ:ÞzÊæ”m˜Ý&ìrMÚF-W,-U„5îöÝ1ŽÈj¢{÷@ª‚æo*Š&g9fWˆã+TN¡¸'s@÷ÊE$^N‚Ý7ºç®wp{O«/)Ÿ0Ý þc–Æ‘ùLt  „ÉË,¡†3“dôÿQÇbZ¨°4æÑd|ƒ1_ÇÖ؆# ûªÒJEô­Iî>•ø[Àω+ÔʤŠr”–_TgîË(ƒ“P´Y’–ópt2® ‡f¤¸Bºå[ŒR§ÛÝAŒ ÌÑÉZ©žL­Þ–ïl*ëî¶ØËÃM&UËh1 4ÝÄõ^ƒ·Î´Ì#×C‚‡,^É’„ýÅ9¯ËNqAM16lä«ÅäÞQÈ‘ +K"6ï™ ˜nülgØ@ìnÃÂMŸxâuÙ9©ŒQþÃ-N„B_ä²'aŸ…‰E„]ì!psV\ž” +v–cÁsìj¨ËMý°úñ-HûÐ!›™šÍ÷Û,gJ¬/C[tõ[‚z;šƒß}w‘ ¬pkÉ)}$ô@²Kç.¨ŒÐó «k›€±7Až$MÓe;&?UÍ©ª@Ö3¦âf0Y°ÞÛE Æ‚ž·éœ%ò2+幆ce)¹%QVÙmÞ(.ñÞ7ÅòýJT„¢™ŸzPÇäÕ!ç%œ¥G:ù2B+¨Ã‰ÏêW+|ª£„î“b#Úî8ÉèïK SÒÛøõ:×ÿžNJ®Hù· ÏQeºª›²hý¶øÃô R†¨‹ê®A‘4e‰½Ý ' by]”·’êûØWXÝå+”òL-ø!b—x„SiBÅqÒj›Ðâ{ë­ɱ£æW%8ë¤;¾ñF]Lã2ÔÞûþZ–½¦á¯âå¥f•êÄ+м“ø=DÝOÑ&Ú%‰/G )ð㎛ßb~$`\Ç™µÀª³?D®¢O:LgÕ7œúfl"}§ÊÈç./Ê=K‰7ñzÝ>ôž(Ô·sYgH»ä@,\I#cù¨c[–b¾Ù0q pPÉFå Û¿e¨í²BêÂk€¨XoÖZF´ÿõ¹{¾Ú¹³Üp‚±KXX­Áý(ƒ½üTÄ©,ÏI ÿ¬‚ÞeQ#¿Ð/n›Œúrò+{b]ÓÕ¿žUóWmòGõ“åÒÍäLýUn“å{ ¬VVªÓ†\ÔÑŠAa‘9¦-[wð.N37,Ýïîz[Í„Gjæ£tô«Ÿ{ NŽ4ØØ$ôûF|HÀ,=ŒB½`{“™«Åi²çêdáGÆäU.®zþpÎï ¸sŽPûyÌ$‡·ê¥óy×ï)eŒÅ.Cj<#OÒz)¼½øÃâSth¤€¢b;Å# )X‘ŒI´Ö<:ôf&# »€÷u´¯ã!2ƒ0×Z*%ѨŸ”"ȞƓÅw2èEÛAEØÍöˆ“«@Å ³ÆúúØš'×PÏD&5Ë^Q¸,U©d`ÍÙ>c–Ì];/Úˆt)!]M{¥Oƒo…ÕÕ$¡ ‹Õøv³4mó°Ðt)Ât]ÃØÉ#ÊS0: 91~ ×+<)¤èI‡+ÿÇ=J\Õºá˜M^ДY«ýŸìrI®×è¼Vá ¼‚®§&oÐÞÿ´‘'©k9zRe\Q"HùÅ[¤°KÖù7²@{ص1™J@.­€ê¯ÜYŒã¨Ó3µ¹cìBý › Œ(þ§ÏΔPáÑ6s:Q˜I´ºÖ€nêªÍßmX¬ªóš»²í+ž½~eˆ±˜Š½ÒŒ@î•ÂäTúÁÔ%ñZ´æžüãA8´úlÏ(ÒÝ 0¶.î ½+¾~íÌ\Fx.›®Nsë™–4—vÏJÚaÌñG¯ÊPUl/$oÚº³¹Y½qŒ´;7 ŽBc¶¬Ce?«¡ae[dE®†Œ¡‹9x–äêc$=ºÓŒWÑG¶¦JClA¯ÈÃiýÞfÈçmç[¾Û"¿S¯o¨ö?¢Z9C{·fxìëß ½Ï:Ù€Õ^Ýßon³uÙdªcÜTš>où$ð3œû´IìSõ›åu‰¿øÈ`vÊî× òVyr´$–UÁ• Ú-Cd½FˆNϦj¶W…±;+®4Paá¢XK‰Ò²¿‚@ý‰â¶§Âp'ôºëv|“tcx†Éó8v,¥€7½YK¸¹›¹µ¯+€³};!”ƒñ¾aY4-«Œ‚gØFnTj¹Ë›©_ŸÀf}¼ïœÕ•ü,­«ÖÁW…Z ©-ãZØ4º" ŠäÓTçQ~$Ì)”.”XÕúäªT\JùYEKX%„õÈYW¯¹ŠÍ„V;×=ìgÊ–¸Ë—+YW óò þcpºxIôòâºf÷q8Å(ûñ9vÑÅen;_üu11U#—w›´ÜfWëÝý¸31СÏ*Ü`6+°Öœ ç¸ø¢>E%ã–7ú¢jUëkŽØu:Ÿ oT;µiêš¶H‹`Øon3„ …”‡Õ³H÷¡-ä VðOX¯'Øwa}Ü+éûü_‹—Îâí«ýP¹-‡F7Ò;vwŠ?‡ÂAˆ±µY™6*Tæt¹Û–­ˆÑÚàÇ4òî*v(ôúG¸Nng›ûúusŽk¼Ÿâ¯²kýíëû +zÃî¬k +LŠ›È7÷:¼vÖÏ·+ ñû\žŽp‹DlëŠcb±Ø´Ë\vqg8/+ÐüyBB­.ÏYìmiK;@½ÛjöÅ?ÚЍöŽûñ ¯œ.û2oq†ÙWjQÜ/Ú˨[Q[´ †¹¯j>]6XCÎiÙ “î2†}tú´öÍw·mìXfÊâjmæYïÒEÚã !É7#D)†´?0·²=|_›¿ÆA»ÕÀ\÷ cZñt:/ÀW{¡j-ãK:ÙÛÞ±ãAưM%ò‰šqï¸RÓ™¥yÙ,•èRd5-‹i—±ÚK錰¸&¸YçdîËŸ ŒËp6ù:–ÁTû«ºý&ÔÛýªt÷å¯ÅÕJÒ®ØÏnÏ’5w¦Ü¨»œ²X¼¾C©q\,·Ö§]ë%ùú™ÓÙÊœÅE¼reéCýÃè7,ê¯À?Ú€M—vÞPF•³£,³µÙ¯XÀ2Nì“ÂmxP‰ÂßÛålÖ!…Z¿s¡§PÃ>»ûg»¦Ý³ýe.ž±¤¡ŸBqqý ™'˦u8B~å¢:ƒ¤Žñ³vZ>êž- Ê$¤ñ¡W…A/_”8.wî·œ[ç¿ëÇ^‡3BsCÑåX2¶¾?€—‚îœðœýþò²” ç ”è0µ+o1¸Âß+p + w#I ŽiíxÚEF!S¹Hì.È~³åzgF°, +óþ­Je4Gs5î¼ì³PÇïÒIY¾ÆÍ•®qsÍæ3xö}úÒ‚æ€ê>¿ô¨¼—~ˆÁ‹K““+ÏtåÐÞ– Ú~ÞB"M–ü§­]ÖdjöŽ–§Oí^@N«úp årRü•‰ -r0±€a$„v¹SP/„ÄÈ™5®K°ˆfgd¥k±cZBUf[õwÔùe´ÐV? Pê=Ý7’ÉßPún×HwH-L!rqÓݺ%œA7ëèq‡·êðÓmèì¶³ùñ˜ ßcZúd¯w.›´<æiÖjŠî».ˆ +ù#k °Ž®­´ònÛâ‡#hù±¤)öo§_%&,ñó¹So1PyïT|”"Ÿ(czC"êäFø ' aôc\þ-f´‚:Ü‚r Œ¥ñ[+nñÆœ´Þ=DŒÔr˜«ŒmÂðŸyƒvóŸ™ßM¯•fΨ¸¸ÖýA¹uç{™îá©e¯“OÃ]_Mîûrc·Y—;‡”ÞÍh–K QHršÐ&KgëZë_&,Û,S̈çŽpBŸ¦°† cÅ*;@ǶeR:ä£e²#û…ÑVܱ葰¶P÷[kÃéê hW‚/£ò\nÀ9·|¯aÈRRcXÏÊ#ëÓ÷¾ý¦éžaˆ=ÓÆfÞæ“«à¢Ó4²+<À§.¯Xj„ó¢ÏIÔ°K蘌F¿Xn)–Ëc{{2¦±êö„¥K³˜gtsPÙBY´]Ù=ƒ‚¡ &®Ð~/lI Ÿ'NØHå‚vXë1Œš.Öa1 +H±)†½¥lõĽUÍ* #©hm«lª¨¬k7†eë±1ѵìÏäþÇñŽ"Ñp¾êÎY ÜËñbKåPwÞèÕ軸•ª2cdÛæÏFÝk¤sóÊ 1º|îÄ©nÝwçrt™ºåÈ„Dba ¤¢‚E…;ÞSiéŠ$Çúµ»jl{“™Îå›8ð^=GôÅÍN§ê›Å©"ØÄ§›Bì£âRf°éiG%¤ÒäͶìÓb{-Ú°Ê×Äíö +:h2£`Ú“8)]"Ì89rÚäWú´‹§8ÓSEª?4¹ðuì㸂Åß±|«“ˬº=&>ƒFÍüù1ÏíÆÍÃãî}|­ùå³5+[GPiž#Ñ_ÞRG/LŠ;ÏZ˜ªÉȪ_GÝ­Ä÷ôHý?¹ 2—ÉfbH2ë£ÉW\-$«-N›ж\08ôª÷ erÑÝÙÐLŸI|íN=‹w\ºùø¼º(ïE˹鋂ŒÉæ¯^á«,{6œ¨ž˜§ìã=Ô¶­µWÐkÛö¬L~£ùìã+•ã Dè©d¹G‘^6TÆãëW¾ÿ¬ŽÔiß’rX4óSËžÁP·²^$ßàIéEžå—Ó0ï™`ý’_< l/úÉŸÉ-øÒd7³LXW …#gWÂ7êQðÊðïŸÔ´ñÁc¦E*ˆ–;ú-óËÕÙ‹ús€yT3ªz0}w ©©Z^µô¤d³iT,=ç¦Ó yñ7÷ÓW²"lwqÿzç$„TTV~­/iªÆ¿@Uv~Eƒ­þ÷O½LxrÈÀÿ¤ ý½ûaÕI’îw½ô¯LÃ{Gs1”)k 7)×ÔäÁ÷=—yÏ3Rá?MxZ¯{ †1-7†ua.^VŒrù˜¿eT`Ú…œOV-> +™ðÎA­ß9«ÌÒœ¢•ù‰jŽÜàJ¸ºùÎÎûÖ¢=+U>¼´7>a¢ÔÅïͯ +étyŸ×UÐZ&÷SJ©1vÂê×;9î,?Ð8ˆ—c\íQòQ£D=äC¯J`è%zrh¬h1TXÄ0õiøA½PŠ*ö³›Ñö P{êÞo;äc1¼õŽbDà›Ñ‹Ë|ÜVØÆ‰",C•꬈¢ƒ;ÉC<á¥ÛvzâµýOKÌ£a:èÝ@Qñq¹}ÕcIû/ÛeŽ$WŽQ§¨ p ûržVZ ï¯N¸¿ø™YV­†úH ‹/°> +ë,«ý( Ô†j¶µI·(ù÷—$[Ç€m=Ù*Òüs#ñ•9Ö¯%5K¶_™Ó˜‘á‹$9ÕlÇ_kÈÇÊIûÊ-Ä5âá%ŒÔ +¥Ô˜xu¯÷*1¾p>"‰¯×A Ì­cq† r5“ÿ‰º(;N¶” #Ó.Šâ|}[¬¯q~ÆðmãrQc6«ôxWàÓF|µ±ŒoŒYê¤Y`²C‹©eajCx©ï&ÉìT£Mõ,©5»:yÕ‘Ø[ ƒÕ":¶º¦ÕÕÊé>†§@æE²›<"¯ÅôØÙ 6WPKwææT84ºäx¾(ÆÁ4j³š&‡ÊÉjŠè¤Î|µfC*•¨5-†.^ó`B¹¸.Kí*×ÒfšfB´~M]ßÚÄà)$™Ï7N€°Aµc¬ä? (­èÊzY}Ú­Dd0uaS—å¼ZFIŒQŠöu*‡[€‰®;€‹J ¸;Ê^ýò\•úïú:H’¤hͱ‹ö+ÒÕH§¨kX8ê—ñM"ÆcP¢Ž“‹J¨˜ÍY—õP Ò»v'gN&q<ï‹TɆ!½v|›ÄëäÔô«SÔ?Ù¼Eúùü°,ýŠ™[WzOËR‡y|c-î̇Í(Ž6´TÜêÞêöH«ËõÐ-YA+û¥ý7¶4HlìÆï…Š´Z5 ‰þÔÝñ¯‘¼sb¹0Êø Ïüã¾3€¹ˆçQæj{[ÜaRÁ~ŒGûÚr­ÞóMX–ˆ>ð’G€ÄtäZñ¢r~o¤¦~´Ž»ã1QT(´ÛØûQf:,ðij4ܦ,üPzü5-Ô7Hõï{%馾ÖàƒXm%VOŠc×h[ØÌ(é’j}`g}LIÍùž;ãÁ‰ïqYˆÚB)‡Àú#Èÿ©ºb$CÊEþÔŒß2oÊîyŸÓ»NPr²Ï†[¾3¡Ë³_1°ËD_nÆ8™ó ^ÐD׆­å¡½¥j¥‡³Í[}D†JoŸ•ò +*O>;7IXûlyÎß4¬sÕ_X«òp¯·^ws§W–ßÝíÑ$ž{O%S| óGö‡("¹í±2›T ¯sBI;wK•fŒ¼‰¶â9²©„ør´õ!o‹i(ƺJþ#Û_µËJÐ’|ܬ>oÖØÍSðWªºhU&Êü«Ú0ª+Ð'Õ¢,yfîûÎf£pnöÕ±HŸ ±`Hs?²FG^jl™¸yH’/”.õ´l U,Ü…w²i79â ¯OdI&§O~i<Q;n2È¡øÛã|t\Ãtô‡y¢*ì öøãÎbsƒÞw ÎNñ§N¾L” ±Z%JdËÖFÛÆi>‚÷()ÚX;{)Œÿºù¸Ìàu¨Õ¸o$‹ó7e1 u{BxÇ6¦ßVY¶ð¤Ù±¨è݈Ö½Ù) 3y ìí9¿L¬_‚$× +‚ê©a6Lj%ÅŒ² “¸^×nrV1¸â«ß¸Þ—\,ƒŒÑZõñ»³ ,A·ëk£øñ 9΀ó$wšiKOŠj„ÇqmaÒ†mÏ‘€þÕA+Ù¯Ðwø†Htœ\éÿÈ_©I†¶]­zæÄ5ÃÚ™/û1+[5p+•lŽøZÝ­‡ÓÒØj4£´tÛaU½·KøL3{e/£—èæzÏåÜrlüú{¯ŸÕ)òÇv=Õx;geÝRó&ôÃüèAÖ²Ò9’Zuÿ'~ÐjæVwbõÌû+\¶]á]*ÅŸ9Ï(™•/Á42‚|ƒFõS,ÖòqíM8è›6²k–16OVVjz¯+ÓŠU/ wKз^š§²]ùhÌÈè\eAÙZú‹2ÿzb›©)æé‹*VSG3z ;§÷L‹Qš& ºÚ| æcK¼ê´~ëu¨'`ToYX¼Z¯y#ÕÍõÅ0;c­Å$‚¡èûëÛ¸ü`³uäø"È·‹=>µD±¤-»hÇ#Íš´¥ R#è…6zxcq;H"åI®j/0¼‰sÑPý¨Ü‡Å÷DHaZ{J>ØKÇ]Ÿ2ËMíÓ6íªFÚ×mz]ËìJ‰²Œˆ˜›ÆØmº˜KÏÍ.´#ÓM´8^Zü}{l<¦É±F0:͘µ˜Î Yðuë2­|ÉkYƒ=À9I©v¶6J %Rp³íÓ3±”IAöÆb™å‹Èk)b;ØwÁú2 ]ìâÍLSݹ•ëº?Ê3E$‹Î½eæÆ£ÞåGlà¾ð¤ÍH—³9Vsó;Yj@%*€¿ôĹÞ;£‡á+uÑ„*l²ÐáªØ`ïíòÕÒòêN„ÕvÆÛ€l¾^J×Íßﲂ¡«?û×èËüJ%ýñºud ¶^§=ƒ´k‚×Ýlûç— Ì×ÒÄéZi4‹¯F´6¡0‹Ui$Çù_ì]ÿ;‰*•$ÌÑQÎ#ëÇ×\û aœ@Ù>ó›!åt·DòjN qk³˜¯çj¶µqÏáÍ‚i=Ë $C+)ϳ ʳ5ï.«_* ¬ã‡ÎªF ³¬ØSN7}:&‹a+,°wFe œ ÍÅFt`Ó.h\K.%:`”Þ²“¨} e\æÍ Å0 æô{5·IÙÐWÉÞÃ)8)½Rîl|ÍB’î:{£ÕNõ¨L¨m»4è¤Ò•6Ø +õW‰žtSZ•ñ/g>S9O…>Ø bвÂñjÇ`—ÚåTr#ès¡W–²×Ôæm6Ö+~ƒêÕeëy¤ÍÕ--¡í ß騑°9÷#z5ß³¢Š:Â)ÕPOÜh‡ ¼º­dÁa1!Ëïìda¡$ªe¶V`WÕ¹ŸÓôƒI¯è% +ZPªn|ó…[ŒTÜûÈ„jµß:Éü£‘Ǫ¨uìκO»_¯^•€(ânJ'œš¼¼6’$ùÿ¤lJÅÔ¦¦Ã¬#QÜõŸÙ1!={ÎùèCæ û—•[ÇÏ ZÀg§™ÖxÉ—¢ù¸Þ(Ò³+;кlXRWÊÃÏXj‰æìÅU¥èWƒŠºàî +’={Ò“ãYçÕQo¼ˉØ&@°z»>~ Râ>}¢íÝp†û6á¼ãòA&gò¶O¶Á]ª3ý&ŽGܲŒI>1»ì+0ÚÑf^Þ&ËS6ö¶Úÿìô.;çácnwÙu].ð®«$MŽVîû}ûcÎãÍ¿x}ÿí‹AY®ò.E‚š"3 (\cG¦‰s™zq —,Otyyì8¢¼a¼\Ü7üìC É× î—Ë€3QbË‘·"sDÏé4”4 °\'ìãÅ|€ó©Ñ!Çà ‹~˜ 1:LgS,tobQÀ÷_iü +Õ{z¬…‹¬/·áœEÿØ'OQ 1©®‡ïÊP Íz]„ÎÔXÆb$©²ç޽µ5cÌÇû‹Þ_K]o Í°Í í~/r1Ô÷òé8¢ÁuE“s$¡úñ>N,Å€<}×;´à`ˆú.úÃ:8Åh Öä‚DŸzj‚<•:Óèt¿C-ÅŠÏxà ¥ÂÕ‰@ág0ϬþDx„øÌ*›¹-Úzéòx÷ÅÅ?cšŽ“蘹0ÜŒ +Dù¯Ö³ÏYß&÷l!PÎSd˜K¦ 3Ÿ)Åã·1šdÕé†aî º³×ðÓ˜j"8UÓÃ,® §æÓ69ªÛ Ómê)E^¥-—Ê`6!Áùr…Ü·YÉ#4O03>n3É0_BGû9úË…*NÊ ªùŸ +u3£Z®B–.]Óõôî·¶,$®~4u½f¨¼æ§¬ËÿþEMÌW0 ù ² ¶Ïùì 6ËÝbm*³¦nf@Œ±"EF ¤êJõ­!gÞtvDç± +åØthžšÆä¡]Lò\aöÄk䄌à|1ꎦ Já{—x|jÑŠ M„î¡L;!³ÙIvp…^ž„ñ뜘?uBºM”ÊYDeÒ£)eÁÙ§™uÂd²ÙîáŒê­Œt¼v] A³÷ÇB¹¨±‘C +Ñ!„¸õÇ}»â5¬7çt®øe÷1ƒé@žsË9WA+µ<®»¹¶^nQ@³^͈Å9/— ÈŽƒŽjŽú+ŒN6rªU—³mm° .ls5^@Þ +ú_R:®âÀC)݇@ äëöqðœHg/AiKÚUdL0îõäÇñ“R«áñú–bRœJiƒºB‚Phñýi.·¢•Û$@Ùdß§¼IQñ[F{y¹À*ï„ôYÌêÝnil[à¼)ñc;¯V¨­5ÆŒâµèì½ÅÌtþ0O° x˜6_íwÝÜ<=hðx®çiÄ]'ëFøÈRpÂc(5³ù„ ÕoCªd±½Ï+xâr7õ«;±€ãÂ¥ƒ4.Šl3‘ Õñ¸ÃÿuáA[@´H€há!€xL™¸°(›1_• Ĭ».c3_Lõü¶¼É!ª‰ÊŽÅ7Ëÿ|¡ÛófÒö€!f{C£€ÄŒ5m“‚<4õÑâ{ij¥„ÜâC£š™¬æ¹—Ä+ CAö¡ÒÓ(Bä£Ì–”JÂHQ̳µwÅðÞs¥)– hWYÍ­“wJϸµ—¯„صu6©ížTßÌ¥7‡ …6)ÒNWÙľñÈŒÐÔËò•Qž_:™eú÷ÔïÇ]fmù½íV2“MÓ²áÄkVGßóô=îë±-w™>ôŸ˜nÔŸ–WÒwªÌFgíd~nдJŽäà»UÐL4ö"ЧF·#§S…¸0„ÄžNÅ÷þ|!i†õ»œ^,Iê?̯ Óàí"ð“T…gE¶†I8usë9þÙ&éð»ZûMc*t榽\³Hy™›ÊêŽ;*ÄôpÀ ¥‚•!ߎY'¾ÿ½BItKãÖüh¡ÚDxœ!øðÂ&}Øüÿ^ˆlž^XRG·6NŒ¤o×Mq®â~·ûú‘Ëucû»Æ«@lrN]Þ—LôñðüþÇp!á1èx>£iRžlb–¹¦À)v½ŽÚØ5½ãœ!Ä^JÍ’úé>*ga#‹èˆžì“¾Õô¦a^Ç3Õ”H„uïúþG7}»`ÈÐïõO¾SÅUZ/–,›³<Õ{—Ù0d5 ´4ÍÊ~ŽBªÿ³3>Ísëa›;‰7œÓhìÍ‚;wëõ6ÎkL󭮪³‹É½]ÁªÊ¦¾¼©q@C ˜s2oÓJT›Ò”qhÏ·âáëõÈ…ÂW:%¢Ö1cÜØØ)–g8WÝ2 ÒMÀ{5-ðq•Aoª_“+šTÚ}!'@Þ¬þ%¡Äî +Ç45´#’OYÝ‘=li¦”ž¤6›9ˆ³¹íÂÜ`à ü¼ŸÑh^âÜÁ 4| ŸÓûo›°’^4+Õ‡}šIEåBðÈ­ÿâì缾ykp1D¡vuÅU”#ÜH¸•z” ðûA…Í6“FbÄ‚l€ï0F5)’žnÌÔß2 Ys„ I;¦÷v]ºïÕÏ}l«.é&„×䟷…ÍÕ@·Kbu¾ž…}G”ES"A¾ÃÃN ‰]Ë\¤„+ö3_\ÍR +[/R­ü”JÍ­­Ç$‹¢4l9Ëï*áœ$Úšfš9 õØ;>8Bá`^%¶<;hÞµ¢äõñ0ÖÖ*(#ƒdMÊ”=…BS•á +©_8"“Hµ‰âÔF~HƒOúP[­ ¹ Ó)´ë^ÜÍîÜ¥.ÝÝJÅ*ÂŒöwÃæˆÌÃCiS£ÜÛ Ua,:÷VM¬[x¢‰¦©¤7g¹,ŠPo ÊÆ€´Oìa ‡æþs‡JöÙpM±Ñ +jŠxDéS¢mOœä'Œëÿ/þ}ªV–òÒ_ûÀÈé4=§z×QåIdÅ1‰g™Ò}þy>ói³àwV-û"n¥;Ž”Øyý;ēֽï©ÜnÖÆôûŸŽ7¿õ¢Ä!Ž6l;ÃöùzžF¯4é«V;öV Ñ-ŠË¥Ì$°½™ÜÓLH“ʦÃÊÿ|uYO‘½³ÚÖÉ ÂÜ•NR3jäÏ%MŸLn<Âv2˜w…j;£ÖõcЗì 7œ)*0ô0ÄáÝžDØý&M£ŒCªîú·¶ßJ4R«ŠŒx*ÜWW» aáI’pÓÖŠ@(õÈb–zɉŠÓ©«L½Wâû;Y÷ð +1`h°øÑB !ý ÞAÜìCůÁ!1î¿]óø=ˆSÝ¥Om)qkäùPþç+5Äâ/3ïç å‚Ì j¼\eèNR¨²” +XGKÓlØ”+1¡«í|h4kZÅ úUÅu¶ë]£ƒ«‹À.{•‰&µHïdÙE3XÌÓ(¢±Í ߯pn.khSÙÙ§÷t däõ}œP .yvum‘¥›IYì ÷S+]½å®É~¬@áa°g’Œ‘N:Í nÒ¢¡¼˜«¨ÓØ‚&)ÊÐßx˜dªªaݤyhœƒ¼†~“>Bš!éâù:Í¥¬ÁY2y]”(gJ¨THÌôO½ºç09ñ]ÄnGEs!êåK"#탟YC -aì°Ðbš¹­.µû]y9ð>+G.„È(³ˆ1½ÄÖG…Ý~éË„çz9»Nl6ÅK‹Ëíïw0åM±Á¢G*ç‡æM¤6é‚á¿,x úVÖGZœü§{!°³}j­2>ÆÞ¬ôÀJíÙšûà,½Ã•LzKëi›”Lwtˆ´Î©Ÿw¨3ͬV´Ì5× {¹®!NmQݓㄤ>}kv\)âÓ×.Q¬h>Sî)ÆËçש[½˜Àãó4€«k÷ÜYMSÈÚÅENÕ›!ŽâIÛr†ÿwµSXþoâùöNgACožD¸*ÅŽ8΢òŽÏtœ–Ä1ëøÒî%7“nOŠX¯Œ:,¨ã™‰ ¬7,xóU]“ZK\ª¾ô;¨‰›ÙÃd‰Åí«züŸë*ÇvíÆù_…6à>—8­Ç‰{ÿi×êI/’Š—f$É“û*bÑz¤¿?–¬[ð5•ÚgH¥ÉôlÍ‚/&ëUJ™ÈHªÌ“"‚ÜǼ|ð¸EB½ý¾S~Ó´…šû¯Ï¢Ãœžhõ ¡0;ŸÝGoŠk R¾©qëÓíïá¹m> +‡œžWï` ˤ¿¢|‹NAìð0‘”€·Œ¢kmù£ÉlJŠÏ½ªÑ(¡”a á.$ P#ÿÕ§3,ˆõukHWÆ=`Ò•¢;&ñ† *]›•(XCˆèXÀ6kwcÐa7 \_ +Õ`£^®b¡·ØÆ-íôk¤ úŽ\„h]¤àKJ§Y£ÚgOa5=­'†)¶„ã½}TëYÂhÒx!ÃoS2/ÙP~Jh¨ŠG[Z¡E)"¶%"c$>ü˜µ•·ò„€{JwäÂÌ©;§$o[—þ¨…XÅåd@]m2£cD +X”™G´½÷ ŸÍž¨í>?DGÙºåÐVä!\Ás¸Žhu¡ìukÇuÀ—7Zm‘"mè€7د¤çÉ· N>h€¬ø~åC3ºŸ£F^eþÓBÇ5bŒÀæïœ¹›oóœ̪ËÛ‡ƒq‡>kZ"ô]§WhžÆMwÃATjeZåVWç¶yçGL…PW<»ÖÝ~ô4J° ª |«éã¶yGFr;µ ŠqÄ?§âcÝíË6îÍ Š3k3 }(ì8éæÝœlA\hŽàéïá»ûñWg0«…¬4:Bó1ì>¼Û¶&3-)§mÁhJ¬O=íƒÎÖ]Ϲ<‘@je¹¾PL½¯Ö±EÙ„=òY…ðVoöÇõìÉóõ(ºòšoë +?ñ6¯ŠKéÛ¾.<½ôp]š1JÍËk?íàëm(IQЦá§ÞêyMo®âoXèmz!ªÑÕ÷ÒíDÕ2)*TûÐ1ù `oj…‡3èå>§È³žŸ"P„i:ºÜaG Â+œZ·wõÒn²ÊL§äÂ>³daŽëñùúPŒåæ—žÿÙê›\l,n[ƒ!|À +ެ^òb‘ƒÐ7F5\×`¶á8ûJÈ 2»DÎ áñ¥¾K€n ¿Ùµm5]°µÕƒ˜â©3zF­€‘³$Êbõº#îö¥GøU6}ö£š½ `"žeG•+4~ð‰vïÐ\K aL–!—#ór¸>íø­ .´OŠi]keþ¸Ì쮌’ê¹o.K¥€îÝý¾‘­¢É;ÆèE?4ç $b_om«‘µ>lÉÐ#Ñ/Vã·ÿùSŒç¯ÁvØLºÔU¹0EžÈKSÄŠuV°3$Ö.ø~ÕW yòR$½†E£eÿ<µu›¶‡ +(ßÊK鎿¦ÕHÔ„Æ~ã«BɧïÖäÌ£Û¶áŒ×/5M\ZZ¶k‹ZIó¤è…ÍÁÔŸuÅ%q¹F=aò3ÂÚŸUøXÂviÛ`à +fyyjÇ).6ÂǬ}”…–©Ý)µEõl~R<çÅ.!V %V@ÍxýÖÛ'&K?BìÎMÈ@Òåûb s[áu³ÊªG´xÔµ”zh&8݆áÏÝòÿ"Xm;Y@ÈÅC¯.Oá/â»MS`boåJ©àPÆ™·6¦eéŠ|Z ØÓÉ{q¨s(nMÇõƒšJ´—¬<qÃV68]cs‘ªW®J +ÂRÇ:•Mf#^z… —u¸)‚ÇÑÞ>êl¢?%Ê1‹ô£4|8Ãðú^i·õ•ÈœEõÐР‘F”ýhÖTbá¥{I<°÷y”% YD$úOÜôE!âøƒ—‚ÝœÁÇÚ×[ˆçÕ`:COEdE¢d^yóçA‚SÅtdÒ5Òßp€{È<÷¹•¶eýkÜ}ßôõœb%úyýΣ"’»¢†KŽ Ä2 ûÁœ6ýÚýÇýÊ^ÅÉb lDS×>ï)_7):¯…¬J‚î6^j!(`Uµ=; V%r’¦*|ÊÝÙ„ÕÇhP½CÒ~(Vf k¶ßnA‰”v¶LÛVöŽšˆ)?·¬aŸúõ)C³w75ù)¤âx\ú²V×M +M*­XGhgA K¦ëòANSÖ|ªU(¿Uáv&|%Ê#Ý8·.x^a‚,z„GÛcgßK ì?$1 ÁCB@H'Ž>‹eÓBNochþbÖQñ‰Ëq½dcÂS ¡ÅïKhúãè½$ᘇ†©õجYð=o‘~ý•‡S•‹ôD†ra”a™ðl?DEx_Ks˜áêåNk›Mo3Šm*’ðÉt:?œ“¢&Ïfo­^ÀTäÊ¥NérXÈ` %^·÷$ûV¶¯ÃR_ø£uµC±#íÛÁÑvP­éª <ìƒåØ©ä]+½tgŒÉQ3*ž·ðZy_e¤seW…Oì'ª'vãvÉ)+WÆ2?]uC´Vi ØžkÙBÉ JY 9e˜oÅÝèßzÓõlXˆuTOºÆOjÑT2ZÁ¬f«$š.?Ìmekû°4ãT­Ê¬—œXQFO¶ñ-ëÞ•^5±¿•SÉìÚ«¢î·uXnÇ~ï—¦U34©á\Ï› ²7[~eƒ®èjY +3–>âù¼Ç'†R¡Ê¨˜ÝW¡Ú„Ÿv‰Ž†Á¦+\¸ºð8U¹H'kͼA°½C!©b¶wa²>ÞðæRgyå„ïÜ +MTƒšk>ÿû†#æÓBÕØ436!ªQ{ˆÎòÞ&6J…!ÍbPçKÓ þ'Ü‹W˜ï@ž3¼þú îœ,­“‘ÂcTžà™Ú²âÉé'8,@ظ ?»¿DàU^Æ™oÅ"B©ùjwÐÊò¨Ú°j’®ÁC~'¼³Ö®`]ù³³N³i´=ñ zX,é*®"‚M§÷,WÏ;êöö?Ô8þ¼»Â½?ÍG<÷•»‰)"5ï—¦ŒŠ,¯ÂÍM/ÎÓ¦S«%ÚÞ±»;Óæ“ôuöêMÛѺËRE†`/kGmסÏ3|ý`ñk…NöSûϨˆ9’‡”„a±5s|k`Bß÷»üg›T§ÉZTŸ0|nólpÛ®N=[çb›§ÅWÞïæåΘòÓ<Ý.hìôÉ9Ê“ääú~Dõ§ÚÓQŠnÍUCĘ·_)ì2«›=çõKË¿ÿL1*±ÆðÔ|+®òš"Üì÷Ph¢öL 5ef0Æ,Àë˜|"êÅ!̽¦2Xo¡W!È6LMºR/™¢5ÌÒÿs]åX’¥0ПSÔºÄržqÆèº¿;±ègg–SYÁ! -¡i“˜ ÐÎÖÆH]}Ð[–rh²€P7[Ü$Yìr!žÎ¼QL´rÝÂs#·Š 3Lj×~:3“8—ÃNÝWpï õ@¸`>LUÅ+A&"T"5úøŠ#¼îzF–ëÛ"7‰ aͧ¾jHüÏ'@HBðeÈ1n@ùóÂǃ‡¦IÖ¢¡…Š Í4)s$a´Wu +eð œ/f$,¬îï“Dþ>ã|}jªÆ]º«Â:Yšp–›V;5—pB¢Sí^˜nœ0Š»KÄnÈÐŽ÷„˜ÂB§Õ­³˜\M¦¶Æ•AkêÒÎ7UT=’•¹·{l•¾œ?µ·5âyŒ–esÔ"¸0<ª²×¶n‹¶ƒïeQ=ô2)ëáuóš¨k¾Z6ýYÞ}kâ +fo×f9 +æ²Ú‘¿Ì­²‚Zy·£§Y8‹q…Øôý±*†¶Ã¸;hgÂûÔÉÈŽ‹ÆSÝM8÷ÌgF“ùS$<ù@"Í@(êãÙέ•G¡.•ÖCgÛèÊÚ8v)X‘wm!ǹÞúÇ'øg5ß½KÝuªÖuÜåè ß×+â–¼åL|S5€º*޲•ƒµA¶J\;†sët[uwÖ[ŠÛÓ—ÝA:ê±*úÿZê©.¹}wuh¨Œ,´žìÒ­y©dU‡Ù¤ψ{Hþ°2¶›y¨ÙG UÿÄÅL±’>1OzGȬ±v׈ã…SJ˜/@×´’ïV°± 9²§ãÎ5§ñf_ÈÚÜØ’’±O4®:H63¹…¯ØzŽIi¢úo†Ô|ªK óóªí)_Qƪ“I ™ûr£¦Mil’>»ƒZÌa-çŸê¥‚a㈉›Q]aq/T¤‡ªñ02ýuÛ¬ÈÄNOT ðØb¢„Upä©ÝìXèô aÓ÷Μc¥„¯ã%|!bø}[—).J” ÀYmŠ×óömªuñ„Ô-Í ß ý÷4‚•$]àõÇ[™<›;Åà¶ÉœK‡h 5@q S’± ¥ëJ·.ÚŒ) K·¾øíÖ)Ä=‡I¥Æã±ƒO¤ÔbSúK?»âhHÅG1&9­+}Ù;—¡Ì,ª¦D8Ç#b³hbå”» ¦š÷ºKæb›žåOUnPñ„‡o ›×aÙG]1êÒºaõiï×O8"{$ŸtŸ¯pÉHˆ7½¦rD}¾Šÿ,%zm®Sšõ¯¢WK®M XJÈz¼pðA/«ÏòÐGZn+µw…Mê‡_{ytÄðV= ”]óå ¢rúà§at h#Ò‰³“ :‚¿£¥7¦¢Ã5….z\9íÔÐK¦E0J¡Dh¥j†÷&º8ΞújIj–¡f‰$ªÒGI Ý"´DDsö¯O}«í!j;ÆØ8Õ˜×ÐÂÜë/·Ûb\f~I*DöPdÁ‰USŠ»†Q° ’„{û[izÜÐúª‘¾º*ÝhŽh'««©_ƒ•€gøì›âjb‰XäUyª!7k‚¨û™BnÇ{•Å}6’›7#Œ«ÙÒ÷¸×ÝÓkï£FhÔ:h½Ü /Ýag­ûì=¶OrG—K=ùM]MpœŠ"eü·0ŠT¸,¡.Eªžô>¿ÈÞ”}›\c3KØ!) ¹Ä"dœ×{Yc‘ÜJBÖÁ=Mm¨e÷Vz…xk/É'‘/a©ŠG?`Òx*8%i—òMã»ÂáÃpá·ÆÐé¾fuÁä¤Ò—J/M8»Î{C”â¦ä³ ÿ‚÷9BÑWÛ)ºEÁ¹Ð–¾w¹GIO´å˶žÝÑ­{úò»‡ ;_?TwŒdm°^™ !h·°‚öˆÖ§œ+˜|Â:´±LŠ8H¶QÉœƒñß þ¨ÝäXâÕ(5€«mCÆîgp ÞÓ©H÷p÷õnòTÂùPô@aÀB,kzóý4ï J×e&‡µoâ­ÏŽI€C²Ò)²es¯”ha¹¢šÑ¥sSÆœBMu’!ó@†Lw…#ÜRlê\`Ýd>ËËä×v¶ÐºnΫΈ¼l9:ÿ¬+MÅ#^Ï€ù£*ô¼ÓVÉjýè²åêönŠ›1,Ý#>Ï&å¿¥†LÎ#÷NµU¹†î¯F:X=æ»§´SL2"¬òä Ó2n»úò{Éæ øC“ r\]c¬i(ÙÓhÁ÷@Im9¨uÝHçથ_–†õ8´QZeT}eE ÞÞ‹ºkxù´a©kÔI…œDû˜Cl‚4ï‚iSB»…öPçœùa—’“#qöʛֵpŽCš„œ²2+^u_¼oÙ€4c°$Ìì&•é[o¦Pú‚q¸›„µî³oªp;baÄ´ô´×•VËs<×Éë5s€¹oøG[<3Àä ଠ+•,‹ÇÓbŸ·ÎÚ;“x\åD ǦÑAo'Û=µ—yCûŽt`ÀöiôW]ìUÌ ÄøÛT“ø0¬91¿H§ Óˆ´‘r϶„æ¢ÌHØ];C˜˜º*#(¾pGà +ÇSÊ`¦^O“¼Ï£±ÐŸÇ|hÂd ÝZó ¹VáY¶Ezµ[|,kþn1vƒˆo˜WCÒ­yAŠ Ê–3ºP`§wM¸Xè¼ëïö–ÆUÑPÙ>.é¾CÓûÓïáÝk³j|("ÍÃì…õó› GǯrÇ %¹K4òîÐàû«¦Ë¸ªÓ¿˜Nݰ nöž8|_íÖ &š'iwÎ-MYƤÉöîË®BÒ%2„°ÚGÕlxó(Xªi!dèu˜åÃLGeKÛI>ýí(S4!XòVTù6ÄÐÉak8Ø +“ƒñóñéλªO2Ý)qýîòƒ^ -8ß:¸ß2_&ß-fxÃëª3LX™¯_Wø#>Ûb#^(%š‡˜ÌÄ/t+Kã¸95(•np,.¯FÕCHDV*cùÌV +™œ.…÷ƒzÐñë$œÖ蹪ò AZV’—ص?‰¨º +îm½04#Ý)¥ŒíŒçT¥WL§zJ…ŽÒØŸ^±þ.µwP‡…dœÆÝ‰8–î° +Oؼ–תáƒÍJeë˾ծø.3»Ë7·'÷TýöºÑýÝÏA6°m3d ¥˜/KÈsìêÝSy­þ¥×ڱ倘—*¦ÓI¨Q¢‰iu+ÀÌ^ÂÛÐ/xÛ’ngá øØ×.’Y–P•¢5:DùÏCn™÷à?äÛŽFÔ-µçâ¾LW2"´Hg®Š|}œüç+ôÿ;‹Ò­Äf¢œ7µ½˜#ÿ0¥¢fÚ^Zz™?¬²n5&cUÿ~¦.§ùPr#мç7 o<¥l]צA àSšq¨8]W;¡UÐuí熶]+Xì8·è—v3Ö©‘å¡~èîøÉ©tâõ‹ývŠ+X>ËEкܤâ6Ho†­SB{ÆKvÏÇ6ÎD~f×(S]gǦ†aGzAªCQõSacƒ`!5ȧ^d3úz’¸½dJ:›V•D# 4e¾’QòqOõlAÐ!OŠDšdfTáúH’%Ÿ^«rqM…3Ö•Z¡ži‡Úd¡“"nOCyD¢dL|Õ½Þ$ºîFdfÐFF.Ù­Q+…óèn¸¿TüЪ˓ `߱؊1,IÝÂÆLÉkÊgö|,œ¦žo»ãÀ×`|ú`N¹$4!sGQWD¡+gTãw¯VèÜæïæñ6Í[yŠ#ɹ$ª6«%Ї3™ ¡D䌡^«Kƒÿv ++J âAaݳخ —Ý ¾R»«Ò¯æ­§{&ò¨«"UsÌáË:[æùWUq`æ4¥W3pï~0]Á£Ô€hrŒ,ËÎL§±zcÞM  ïÎRåHÚr`u´Ò+TóüÎñû%È@ÖeíÖŽ+Ò¡àò‡9Ýž} û `|³jej sªÛ…w–¨m_G¯«Ä ‰j%W³¶ +i¸ûvð.s%È|Ú-¶ÛÎíè½ûâ»d«ãŽ¡ˆ•óøs¿p§Ë.Mñ}¶¸µÅ£Î¨xEyàpÎ] Jà&B»&ÌùIÝÐ/öîÓ•oØÝòÎ^=¬^#›ÁgO+°Q½ì+;k0ÿ`DÚ ú5zTÞKÒ àKwÓ;fìç’ €i»=GV+ˆµ Õã#ƶۋýë¾ÎŒÜ$kü¦7Æ.Ü ÖIÁÓvE†Z"\lÙ^øvùdø½5¥¹¨Þx*öÙ°qf÷Ssß=q/àÒ7¢Ò¶“5¸x›dÒl’š‘È©¹ìh”{lio1m²|©ÝÄœªøf؃ö¬â5Ó$ÛŒ‘€È]”¤O¨Ä¡¹¢š#µûé¯ñ`-O¬æÑÞÌWšƒþªÂ&9fÉÒÏâö”Ìö&S˜‹Ô”&>:'¿¯å>–¢h:"6+>¥Õ€¿ÍáRh‡¾Yä*ÞdFiAŠ^4]w×;Ã÷x»'§ƒ“yALSËÂ54q”µ[Æ +å, ž|änã¾@ˆ°ðÜSfÛ<U!TñtáKˆrµû” T~úâ,ÜÙíš>š»³>ŒRÃE¼RYvÃÝZ³z'ly`Š<]ˆlÞ¤F$4½—ø<Â@v#à >Lȇ/~–Ñ +$3*gÜg cŸÞqºù4wùÈχf™[ƶ½ –î}gŠà¤1o‡ÍV'¾ûôç«9O-tþRx‰Ò‘QVÊ1ô:]Öõ[è¬6C‚}¦ô_žÿ»[‚_üû´gîT–Li?¦'›Yà C,å×½rïf(DM¾><õÄ´þd;!×M0@4éÕ¦Ðn8œßþxO-¿ŠÜ±(j•wGaƒ6žæ&ôòG蓯Œh’Ši« ß±¢µ°hj—Á©¿\vq‰|¹z»oB]ûé +ÑKëèñr=mÙcj)î¶Cz%¶l÷ù”ÜñÕÿ5!Q¡YÕUxBO7%ëÑêsTUnÅ{ÄSô¾£úÏ[pÁ¶Ì¥‘6Á@6 ¬î .q¯ eø•J¹ýP?ì®§ãôu`mêî„T‚5k*‡[‰½£¦²™aa­ •V<°øL±šlŸÆ±o>«Ü'õ/©¾šV4ô?×UrÝV ï©Â䑸Փ³û¿f|YòɆ>Ë`¦éÑžÅD$Õ»qyÆÝè"UK´÷¯þ7CG#.­4ël0[«HÁôMñ~÷À‰[l–%2b©]§M&€bÔ“²‰Rßîõþ,è§bá÷ÂúC¥·o¡ÏÑé/ìïS¯è³ˆ‡„/{sÆo'D·fì¦Áê†0ßXŠ/Ö‚‰aó®Š7¥‹Õ©|f™Mš/x–ŸãÁ„ë-J¬VUPºëë—+~J’éÏo µwˆÏ§è–%‹ÛF½ +÷ÆsÄ.ÃÑÕ•ƒù·ÏÒ8ñp†î3ReÎRWW9EîE;RµßØ~0ΑLR,J‹¥,P/2§èÌäÎ;|!ŸCÉ€½Æ—³ÌS-CsS&}¡Rx¿íßÍĨ‰Û»Ù^TSö²!i- -b49c×ÞÇÎÁ¯¼ƒÖFòœmk^­ÝÄ· ÿ"¯ñljfB¸4$º(è¿? 9 O°#¹”ÅîíOoÝÛ9|T¶SsXO<\ FØi¼YÝÁøØ“Gó‘ÛÍÙÑ—˜­šF­>¡ï^;üNCUïDÔšÁJEJ?¸:µa’uƒüÂeDz#áÉו’snÁ SEáZ 9‡+±{ _ááæ¾ü—µCôä4šGk[ŠÀÈi(5qHÆFyT] ³ÌŒ s¢'N}÷Œ‚ƒ!…à‚û#²A=*³##U„\zR€a/s£h)¡0–ºüâÁ©eDŽ‹"é¬c@ãý xÝ„`úÒ-lñEúͦaÍÞ¿ûëÃ1bLú’;¢³ø¥õ$kŒ ‹í ;ÃÍi.I9ê3€¢³V¤¹Õ!ØCúˆÛÓÞe·Y;:‡¹Ä‘)eK§¾l•&\6¹W–eðüå¢vÈÿ_ïðê3D eIÙ#fŽ(óÔÖB„í¥Ðæ4u”Œ<ú¥×†Þ,]sÚÞÓv‹ñŠÄ©SïðD­¯_.aý6{MÉi4_Â*Mãã%¥“8Z–U’¼=¨BR…—@ìZ½Í&‹zJK)Øzµ”UëH[Ö˜a$€®S_cë¤\R¦j‹%Ý¢µÁ˜ê)žtòåùÇ»´6·G×X¢¦»”FŸ.ÒØ¥E-t<à°ºyn šëÔ Ñ ¥^8ùº…Ú±¹æöò¾mrpO˜—Œ¾-sNOi’­ÏçèíGssª¹æÀã–VcwèÝbPòUÌâý¡~ùš5DõrD¾¼–¯×Й®›uõ–ÂS–ZÊù(‰%>„Àui—°ª Â[r…™ÙUÜ`¦âj¦ s×êi±WO]³z‘Qþô¼ +‰Eyçt­v¦v('­ËéÕï9•ÆD ìÙÂ,ÁPÚ–¬a+L­Ðù)‰cî±­!PÚ¡R¦^r¤Jò„¾ÞÔW6©ÝÅÚë“pùÑuhW²òãe:vì*¨±]­™F¾íú çà,•Í1/!uJ~ é^;ÚþQ¬¸²WþÏÓÊm[JÒœÕ ,âO_”4ù°ØòÊÂê I€a:jÝ=é4 ÄíðÁ¾ZKøfR\ç1µ–TNk»³3‡nãÛx·ŒÓü[ԱŒ!Ew“)¨^¼5=,Aè†Ü§RêCt=zÄtÅp-ST6JNá'tZ îšÍ¼‘{»…ë£Ñî‘|‘fÐMšÖÅ\Ò{W¢’±õ}²«©”cyKI—=„.:¢[-„8˜˜N1Ñ¢ž\hb²º¼º¡rÛÆ»ÓŠÎf„L•öÑ‹ªÅà±qT4öPJÜ"JÈÖUÕ¾Yå±G…(¯ËPg1ÀÖ:£ZC©²HköfSV×RÔ¼ÔƒT»I\8ËšÌpÍŽx%Öê®*¯aÌKsøaHG™¤ê8YäP áÉfYG± 1#ôê4”´{ ï×uÕvµÎ6ïÒUŽwÊWLNàô4)FD}âšéoQBR—@Š æJ=8ùîŽ0¡—¦¿Ç‡T$Xs¥-ßÒáÉÝVMÚ®éÓ³Óu«õ4ZÕDäãӟͼ-Éfv‰ç¦uOoaºÌf'á(>¯è¸óŠ ;:ׄäš}t"Úƒ“"–4…2×Ì–¼­N/N € «²Ù«[GÊÖPbhØÌ”|ÃýÚÝjpx8Ôò€C/ HP Èæóâ°¤¸¢Õ¨¡["UÈF ØÏ A3‹ »Â€uZ7ºÊEƒëQ¾.c{…›¹yQlñp°qFåÍ+º®¼/ž÷žiU!k!ººä›¶F~ƒß¸&±œWªúžŽ3²^DCáL£^HBÌ¡!t¥À¨™âТçzŒ d‰‡˜!¯tê½l@<&]”+Ô2Yv)¤é¢yt²—=Ço ++4µƒ°x +-d Ç©uSq®îÕ§- L%„ad±Ãl«®.$ê| £(6Bæê2ßbîb•ZDœ&Êø[ÅèI¾ŠP‚8ªF‚µ7Ý£”¨dXâÜãòëÅùΰ•I3^þbÚÇ»ª`»1ú1ïx]q¼AàÀ–›èN#í’C×r—¿_Új…'©¡„J÷¬bœóéÂÙMŸD„ôpç%½á[œ…]8rÖ…Í>LbÍþ×8dh‹íî4cœ>Ñó÷3ÞPã` yߺҡõì`X 놉­:æÆŠâ*¦ £ŠÔÓFusd<é@YÁôi£î€at…_®1ç»—æ*´ô݃e/—ÆP©ãíB_ž‡O̺g ¿7·‡BÅ?ˆ‡m/î©I–áשç‘Kn“ ½žéÑpªÒÈy˜«@ԃߴ% ¸<Õ¢ÂA ¡*žlÍ5-ÌÐ@mZ°h©*­¥?»Õ-"‚˜¨]F¨c¯)ƒð +y˜OŸJ“…´,Úwyü›³^3´QP³R«”cüçºÜ±äÊq êk¹Õá$±9chöïv|À’º-‰Y/_’` âbþY>ôÒv}ÉFíÉKV¶Lç±^¡g/"ÐsXUò£¿*eÚbPí{\ûqŽU^¶r™À +:ç|x©Ž»ði-»ÇJê°Ì"O`×e’«+ý·}k(DÆ1îW°Á¸{.õ÷e‰†·¥o7›#ábäw˜ðí²}ìÐ˦¯»ßfÔ°8ÚªnE÷ë=©lû=¾¦¸/vTËiyÔtãÊFŸì¼f(7³¢hÛç¹äË€˜¹Ê íXÙ$0>Nl³þÙü¾¾§MáŠm›}dº©™a½!5Þ5×srÁºÝŸDðˆóo‘”Ô4Î H¯±(xÚ]íˆ~õÜbž&ãQ§Ä5ãœë‘ÉáœÇƒ ´Ík¶tDªàØ{-ç‘i4cü”í˜@hõj\óÊ€<ê¬ÂÉ™,T£Ã*RR¨} >HR•ÆÃd5¶„a*"ˆ©g:gêFµ™††Aƒµ\/WJóÝ+Z‘j"î¡N®æm`<¾!î’"óœÙµ.ÍQk„NÖ†ËP½§ÃjÕº_c{/nýóŸË!·ë)à†ìòÖh¤Á­Ïí¦õtØÜo4»D€ãšòõV<#øúoñeüƒPÇËðŽ,ºÆÊrÙµj?B [íÀàר»à®Q¯=6„©}ÅtHø›ê‘þ2kÏPmË Ž’[¸ZÉ®„~t™BGèG+]„Bi´€¤Ç­¡ìßylhÉ“q:8}Þ¸pÔ0ì¿ßêsm–+Œ¸Ë©äÂøåCûá|Zò°¹5ò…Ô¾äÎQØCAdÊÕøte¤??Îh?z“; +ßVMv²6öér’ Zí!6r0,·ÃmÄ3¾°þCfŽÝÑ+®WW¶†¼<bÌS#çácÙVžì0ÂþçÞÚ5_Ê\ÝjW8kvûóq9TÂãàðÍ‚V@É0Ùø„_Í^sæ¶b_¢ +\‘'^Ç¥åÒÄY*ÇH’ýn='²ªÑWnçš&(iùÃUi}+’…OÃ)´¦ÛéšKœ*´u¸®/­f„O*©1Æôlv¯Ý˜*•ÉUzå`®õÔ³¿(µH Rn—ü¹gt¾G މøâéÈù¬\©Ôcè—Æ×Gà¸J÷ P*É ={„ ¨Ìô³GV ‡°tš‰gkçÈ1Ç}ÏÉm]ïÁU”¿çá’7ýrŒ‡:½l*J#‹7ÖÝ!û˦~ílrG%Ù¿ Tå»ËI­Tdœiö H!û8Tíª‡§CF ðÊòäHµ¤Gé£ëhÖVzêK46¨‰ºo}Y/Çr–‡àÒ¦?ØÊWµ –mzžc¶óµ 5Æš—§˜’0‰˜3ÁmE®¬Z±“µ‡ô¹veà¨úwŠpð·¥-ªÌ­ÔÅ†Æ ¤ŒIÜ»(1 ¨:³Ë”…+øø®¼3\ü +{›¦Î4­au²Œ™“÷æyw°ÛHÔ—}z0 ×7]ú“ÔßöŠ.kªÝý™1›V…îY°ë‹Yi€äÆuoß¿ “qΕëá Þ<~ñ.§COϰÆ,RdøLQÅÛÔèFòò}1~4‘l{‘1tcs{-1AÉk¿±ÍŸiÿ70¬åqD ƒaIÀšýX1*±uǼLµÎ]ÏR×D?9‘ÎÇ ÝEv\ØaŽ aÉRêñ¾}'íH"}¹Ê$,õÛ÷Ý!þÓMƒó÷±7«°¹öÖ¦ÕÞsYΙž…h‚X“)‹ðøF)a"JG°%š ŠÑ¥¶Î;¬õ(뜂b8 ]ûò€è L°&÷IÞòÎáݽ®úlìa[NoÜãÇŸ«ÜUE¬&=žGãTc)Hª}ãðe¨ÕáÙŒÂõ *ÞyaZ­që>Ç;¦/X1%¿Ìåõøsì5í½|eÉCöï*Îþ*OåÄ¥¢D)±-¸ “ÂtfÚ“ñ’¤Vþ§Íìm¸Àfÿ¯Ÿc9Ù'Ãq±jé<{³Øq|¼!­ß2-a©{T$xÍPGw“iŸA6+ø Cf¢Z×w ùn-ua yöX×9»¸ógÀ zÙ28ÐwÇìùyˆ& Ql›ÓœôKÀòóð:ñ8vL*;¨Ê‡žÅsî#{ ØiâeY1p`ftñ_ŸêÅKJB¹Tôšj¦_?nùÛÕhжP*aß(ñp¢q¯îDܸ|€¦È? °önÕ‰,w¢1+`E!øàðÊq·u,åa3áu¬^Ù-vCW­ps©0±§5¨;ñB3Ú?ÿ «º¿[‹ƒï¨ÖŸ¦¥´YUE’G¡lõݧÐ)¸-£Až«hR\òþî¬ Q¤†Ò#b\q½Ný–™m8’á ÒUtIêÏO5Øð,ˆ»D»µ˜8D:hð,ÞLMઆΈ«ãwg(UP<µ,*ZÏÓâ¯i'Z]ñÉT¥)B<$¢?’°øbN$4½ v Ž¡!›£¾Øå@?Ý ûí48ª¨• ä~Ž}iiI"ö¨´?‰kNh4²ƒ°/ô"½.wuŽ{CfÃ<ÅˆÒ juxA‹c¦Òf”i£]£»;‹Ýå×7\«éô„ 7GÔö0g¥:W^L[u1ÀIïœvg[,Jøõ£ ž×µC¤ ?PDñp}V×y}°Â£/÷é[»èz\fÞÇióCËYæÍ1jðrÍm wÆ­1©µëo¢e?aÍ Ê«kUD¡Dì3dY[¥î“Úpò.ðÿõˆ€pÂÐ÷†iäÒ¿H’Å0r +‘¯5âãCçAåãƒÆÜ½Þ?—#ÍtŽÍ•õxŠÔÑô~<™4«Ä¤^)Z\õ¡øî͈€½4©«´u¢|);ü{±Ü=ͦÉÞ¡<Ô +8sµ>|Ö#á¨Ûczø¸A™5’³ ÄÑùP˜÷¡I’ó95¡-©ËS ù?¥ºsFõm~ÐãT£û €¼O&ù­¢"¤x@udåŒTóÈ™®4ðX‘Sí¶7™×;Õ²'ëO¢)æiØfµÜ¬¦)ËÑö³lÝ¢Uìu²ÂºšÂeèç‹’iÈ+[GT Ö̹x;8'£8rùb9[zÂôþ˜Â^¿¿aq«=÷Îoìù’ù†r€&içÓ+Mu³`µúÚoY^žt#F‹õj3J iËO ofDWj¸z¦5Læ¨[qo'‡k#œªá“©vì„^az¢9˜¼è”Yt€žX£FpÆ'à ¼}§'S¤ÞêïhQüEåòà¿Ñ|ëã‘ú3›._HÔ¸‰A͞ݎ²{ ‚m„1°ï ŠvFõ£k„Ϧçtƒæª`¢¯ß{8Ì2›Žà#5?ÙÔ4פÆ'ÿ?[BX&¦ó»D-y²{.Q¡Á%äÞ–Ù6V%ڸؽb£z+l× ìÆ[èïÏùXЬn}Iö.õ |Fvèduiú<¾YÖD˜«6"´Ð¥Õˆ›4ÜYWM®¯Á²"®þ»î¨ÕešÐæ¢É–žáÏP&hÛ·¿ø¡Ëèt¤ä¡mHQ¨¥òã;sS¸èù¶N31Ù­NÖ + »Žc×!^›êª“0Ãzº›>0ifÔýóçþ’få\³–cB…ã`ÜM“Ô— ^/ÿÝÔXX­kTç·ôš¼‡*£BrFuÊê®Dg ‹/¾~𼝄hE’Ô§Ý.óÙE8wA­‡×‡žZHº·äÎ^nT:ŸŽ×p«ª ZZ³´6¬¹#ü]3=¥x;Qg¸n/?˜¦ï~»Ÿý¦sõ{ú‚ÙýÐÌhw®…GÉè¿;{C°‚«|[-–[›£Pãh ÍL¾¶ðXİE –¤¾)¯0ÇpS(U)[ýJŸžåQ©JùñòNª‘Nâ1³ß±¶¢œ¡õÔd{=m64÷÷ˆ–Û¥»¦,£urUUë<¥§´_ÝòX"±(Õme‰Á£V'€ªT[Kê<±=­Î™D#R[ý·Ótk'å½sÝXç‰ê+jX»x1¸‘@-;ëyK,^îiM­ê÷ íV½tœüJ+ÞÈ’´½µc1£æÐÜYÞBwTÔd_khÔDVê ÉJÑõCêÿ"ªüͧm¶¬»¢WV‡ªË4Ç6À&cÅC¦T¬:5\O”nÞ2“8ã0¢%@ýù®2òmµËÚJ—ÐÆ=ˆcG6^ósuï~kμW)kLžKhš ⛺†„ Ѱ•͉fá:—+i= ˜Ÿq‘´¼>ó{oZzÞö·Çäj#&ŠÜuMu›^ ¿n#»owÀèæ—Ñw $¹û¢×ì}Ìâ4Já(bÀ’†òÞýr·mgG†­¸òžßp×êëVÜ_îZ‡¥H®žÝ&Àð6äñ0´*ùiÍÞ E£’bxÛîo9ÊŽXú¨Ê“|¾„iI±ãFZÙ\l +xðŠB ­}ËEËÉ:ï,†¢Ÿ[õ[n±‚zÁéRÛžIH™³_QG×LêÕJ4µï( Û°ìóV«,è$U%¦˜ +Öž Mæ;k¾ü/ÍöŠÔŸÎÿ†ûÃÝ¢Þ,>\{ÍB¯ã<)UÅ ­7&*h_áª|jDŃmygºâð±tò8¯+HzÐHÀÓ?Efá4_¹ôÈÝf¯œÅˋ֟a{½|‡ý L£|m`8PäÉøÛss'½,l¢ ê×¢¼Ý·´ËØê\t0s¡<θpß!Œ3¦b˜RcƒpQWn§<ÄVŶ:ÈÙ.“ܺ’#ŠÎµ + ÐȾY†× À£âÀûŸ8ΉdQ2ŒJ?ù²æ6P‚©a9òH‹Ò²øøCô.[t?Ï®?ÉAG}ÇnãMÕ–†êz_u(åÍÅÆ‹²a85"·t‘š;D—@Û:Þc—õ®{7Z­>ØõšYPv)ÞëÍ‚ ,˜#Õü2ÕèuÄ£aŽË_bõ¾0åìÒòî¥8_÷ˆ˜ BeÔ iö|tô¸&úéè– +ÅéPטÄs|Ãè_,ãUH3vTŒ@'»‚¥˜‰ý˜òÁ&y^F­O®…Ü¥ Øj%Äñ>ÞQ&àÝЋ6îyÑ|ñ…¯Æ•°,Dñ×ñ–pr“Ù‚?Q*Q¸ëKkÌTt·¦ŠÂ¸ ŸO(‘ô²á©„ÙÂ/ªÿ 5)l­wqì– â¸X¼"sÆ €å®á‹€dC`»Í×îxþ ê©;;z›Åz ³ð¶µÐ£öVcΓÈíéüÞ²Š˜®‚‚d>”Á4s×ÔäJjÒµ0Løªoº*y*¬ïT7QÏȤñÈ#Ü"EvÅ=(¹ü‰‰ßÀ‹„b_É1šö^|D|Ž\¤‘&— øežg’êxU”,¾Õ·{Ûx´Ú?¥'øE›Õì%Rð‘‚áŒòù˜I ³F109}ù¯öжcñŸ}ùëÇ¿ÿñã_?þó3ð#þƒIBAÒ,-n3'"øóŸ> ßY@H&q *ÖæÇßÝÿØ*Æ‘ÍÀ‡š^ÒÐÅï=´•ú'dÉO²ãV=¬-GZ´î‚müŒÑÊ™ƒš #¾ÙÞh‘«'çALwçÍS‘.7Dýþú•8 'Œ…OäY'éëëà_?"HP•ågŒÐs]ðMáØ7­&$šâ£léýh%óΊÎ,ÀšKæ³ëa-ùû‰é'Ý,‘4”UaÑÂyEíL‹T{Pk# !^ÇŽ´¨QiݛĀF ”üÚMÁ+¨Â(Iv?×íF\¶øO«lò2켦×k Øàé9šöBÇZ-¸±ÈrЄe|Ûã…/6\>ñaíßçþú±¬Ûð~“[àüºg!t¶kལ¹hŠcrn‰€Å+£þ ‡ÒÈ®vaˆ(lQaБ06 wþ~"³VÄ'äñø;4g‹AÀ¡ªäYRðI`ŽÇØZ ÀBþ¡È¾4F½>P"ý›}7r¡EžÚÞ¬R9q5 ™›@ǰ…M³^S¾Ç—hÿöÞñößîn¼AQÖìÌçõãí3«ŠÈUPøòªŠ]¼\ˆ¾í÷h«Å÷ì™óRAÌý@ˆàªš¢ünVÁ×E𛀷ÉÄ„Ôr9äS]˜À‡S˜Lìe¼Gþñáçû7ZCàêGà(Ûv¯´Yõ~ LÒ«&s×dÀ ðc墋ò×>!< þFö¥,Výq43§øF¾>C;AøÎ¤­*;V¢ñœñ¿;øP‚ÏÐVùêg)™Š¾f¤P]È–¥°WnRcÃk·Nµ_»¨””ظÉrLXÅK6vqN­ÖŠWif\¾ù–‰§ûìßò®â¶’:þx•áõp7-wGVYO?U.`5Q°è‰–²¥Í“¢g¡¼"þ×®Ûiå Ûé›äH5Ã+ÁJûY[oçbSSG̉-Côn4]_ñxÖìýU9ßâÍÈŽNUJ_Gm,eîßs¹$0Žê±?råw·üW}Àª`dW¿]mmj6yØ\Ârvþñw*¢sT‹©cÄ»¢òˆWЋÉéw +ÇŸÑif³³ÙPÁÝ=ij芭ëÃYL8XÒÿ)Àf•*A–“[§w­ý è½kÿùÇ¡¿ rÐYy‡ +H ¶£Õ"øË¶Z–(Ï$åÜ^ªÝ‚¢ÿù¢È‚âñ5«+®yÌGeX?†ÇÀ¾(üß Æïò6¬IòVÓÞÖémWÅ×¼âM¢íËëãMbpZR>%–¢úc`§–z’ñ1÷KÊÓ;¥Ü¶Äç°qDÐÂȉ'y”¢4“g(&èÞ§½¼V©²çýþÅpÛ•s+ÈO&@M´Ê{êu]]~£Í©™TV´–¥×!"ÆOæ'{ºwƒ»re½#“õ^â>;!ä¾<û CûÀú´Œ”âêØÔÖѱ j€ç¸ôìºÚ[.è§xÕKñïÍ,73|‹d™¹%‡Ü_•}5?•DÝSW”ŒJ_•…»Îô\ÅC?Õ»BD±]ýC¦x®Ÿ¿½‚iмR„l£¢ÅÈÞæÏÿ4Neʰ‹ {:¤áEnÆñ ¤&ž”y‰ª ®âMônÙ ûäܹ3xóæå]²3«¹b>ñ†R÷-óš€ÝctÝ¥µ§†oÏ4޼A òì=ä œ¨>UÑVõÌþô{ÊÃb)ëþvýv¯$}ëèı[o&ÞæbÔäa~#`æüMü9žåúÜmºçVá‰ÞjÛèx&1û/ÝU’cWn÷uŠZ@&“Lò}†ª…ï¿q |¥_²„ÔÅÿ8ä™òÊ3€g4Íîq²9¥â ü›úh¹¶<ï,Fðr„‰ÜXŒ4kzcs©ÀŒ·ª“ðÆYK: -N8{q~7DΠތnúíFH.7AôTâ±Øž ?‹ðÿ©®g DqcG¡ü_¨.ºs(êH7kî)®JsþV¹æ\P.â”7Í5m—åpþ/×PE ‹\9Ï;eêIï%¶ ›Þê†ÆAäAþîIrXA%Г±sÿòä›g<¦r8nêâéJÍý¨›)3¦:6"¼0–“6µuŸ%ÎÖ½ÇÒCÓÅ-¨Ôå\“öâ>öäŸý@FÛ86rÏQä«2 dG^gô`:†ó9yŽkØÇ†7“ÍÎ|¼8ïŸw2¥¸¹Û‹¡d÷'!GPé4EÊ]ʽ?§ƒ½ˆ–B‘²ê‹šD¨ÐÐ:,¥ôþ¬xj@x–+)ÖXr»qkÍr«w[ü>†ŽL"ÊPàWs™Cý’+:çoæwhCVilœçðòÒ}†# çr:Z\p©/\<«æ7ˤ©§â6Fx]®¥a}·ºk~§õ”²¸tM÷«©ÿœ vM›rûk&ˆw¼Ä–’Þ„ÚáÎsõkãr1h¿L%àÒ‘-ù·3JïÖ’‚T¦‚NH/Œ=W”ËPbXôc`–ZʨM¥¿¾úql›‹3¯;ËaÌ‹Ü× ‡/ áÇu×½õ4ý¯÷u{£»UìÈ”†>[Â×á쪷눺¿çß<‰öxR¿×78M"¢vtÍ }1èªùduÛ?4i„]¢¬YLh¦@5swhàXêªáÍñ»±€õý·DðnRKæýü†P*ö›‡Ôhâ+ùÒò†vzÒ«‡ééBš_OpãÖNÿ„ýø¼4¾ò´(Áu‚%˧PQcae¤¹–&M 4­„%‘ı¨–彜ÓëBW¨âÎûHîÔÓÐv…ºùÀ’´„å:” L 7¥dsÑuLÌIXÔ Ûwt‹tà}íu oâ-šƒé ÷}y&„`h=˜ã›ÂcNM‘ÊA<Ÿ>ªJ+Ó ÕjÏŠI«é½³Û§¥½ ;½ÕâÅÉËòÒÄD&µÅùŠtIç«–ºR27­\!4RnOuÁ÷ïqßfæp¸Í8”tÔb/ÃäB5.î¬IC°Öt5Qc°šhëTh ?.Q‰µ¸5-²÷wö/ãÆû€PCsBª÷°^lÏa9 Jáß“eŒ¿·\¿T‡8km$uÒ±Ä[ÃÎËêV;ŠÆ.½„ª)-Ȭ®®s’œpj:Vˆe)áoÓÆóQC#G ï¶) Í¥–äÆp6Ùƒ¼„V#,C·ñÚE3ÚN¥e‘WPIݺ·¾BôÅE¡ <*ØížÇ™¦°T×{“Š¥µd̈pJäQo~U&¦&Vì5Üà‰uÊãéêæ< @ ÕúÖ›çÙ+8XHj¿­c‹–ê¥Ínû“SS¾E•Ëúø‹oÂÕnˆý„ZƒuÕÝÃøÙĺ¦&ÃnÒmÊ;&¬–Š/5LϨÝz¿Ÿî­b/b›½y„ç/–„9ƒîéŠ ‘èÇ$Ò”¢¥ò?nlæ‚‹ýén,/;/©®Ñ‚Ч3µ±m?€¶…RÕ§P +\Y¨J„3§ÉyÉÙ†+øe§K!<uésÖØr ËàqÍB§­&³ðä§Ò_êÜÁJÇ(uÓј†œžÆºAáÀ`¶ÂaÐÖ Ï!§îÞíjÝ×*´+ß¿¶à·ÿëퟷÿ¾÷÷†ÿú{N9@±lJŠÛ7~úT,bÉ,‚Ê’K¿WïÖläãfÀk+Ù ê³øÅƒ„fp™¢=6ÕÜ–)‚ÏA¥ÚP¬„ûš\õ ˜V±«:b†¿Õaaž›V |f“227 y“:Mïdñ6}š·¶AS[óUCÒRÍcè«UVÁÜuj;BT€ýÖ÷ˆ0AÓ}~ÄÕÄmÒö»‘j$L9M²6D<ÚXÄŠ²ðèGû†égœ»¢]ºpš—fÿWñϕɑ¼$*Þ‡ã6qP‘ìçaÊé®Aô'ç™:¯«6ŸxҬΈœt]<ña¯_Ñã+Sï” +òÔ¾ÛgÆYwõ“«M£Ö–â’ ¬þ­Øªã@Ðk)K‰3X¥¼ßçRw¨y‡Tt–€äEÙ@… íéšâ©ÕUÑUˆo¸R`ÎÑ÷u+…e4½+¨Þ*Äì/ núå¼ÔœÛaÌ%zИµ†¼ãÉ=¦¢CQáÞlTÉ·âÐN‹5z•bncSM^–j ¹….ët©)Hl>©Q¨H4ÙÝ ”™ûžæ¿|Ðeðb=ùi0œ¬ÎC<Ò³)„€ÁPœàAµgˆ$S:#$¡‘Nç§Ê˜Å¼ÆL5Éá—ÉSÑL9Ü5õò.†þp\êŒÚ,j¶PÃ÷ᚈæÉñpXÒ¬ÒÔÓÝ“žù<ÿGw•cÇ•ÃÀܧÐüI€ÛyœL0º:µà[Ýö(±Uý¹€@(\I=#\áiăAï*öT¦\Ø¢?Ð4 _óêc?‡41¸Žçpª$q|ùÇ ·Õþ-¸-7UEû”›Tþæö°Ô†Lyž$X64 PÚÂm]x-†˜C§€\­ÉF +¾éáyE‚)-ÙTƽ¾™åÚ$¤‹Ù·B"}(ò§G• zz¸:µÉìW5;ÙNÛ*^Í¡ÊçOf5#ØKèSå%ÿUB°%½Ðîï¾ÕM jDãµm 7ueÆ#}ý7=å­ª·\ +§ ³<Ìôßîvâ ‹§šJsÜʸáøR +3[*Èü·;ÒäD§DT—ûóÉ¢€ëøyÙÍŸ‡4©Cîå­L1*R¨G •=ˆ†Zò¹êh¢Îc½ô-Ÿ–Søjyh:™–9z¼0œ:®.ŒøO×¥ÿ·¿o^Tè*µ÷@äÓîß3GeTb¬ŠKךsumeñ¹Ëu=qXR×Ó*Aôù(r€<¹FÚ¡RBîïbŸ½ý¤pøû!ÂxlË—ÿ¦õQœ‡Q[‹$×ÏÔNp¿¦âK‚5ɰ޵wô÷£›²+öëå绀$=ƒBœÝyáSŸv„ZXˆVã+'X4åË%uÔ»–mä÷Dé oÒ Ò¬±¹ÇÒnw3ªÖÆvQ·mE|G)L‰Ò OÙ7þÈms‰R°úÓK@f]Sî]]÷……ʶÁÝŸ%+ÚÈGvÑÇÍ>VÎV ¤žlš ý”­ävGQZ ¶ßÅ"4.¡Ò&ë$óë%ÇÑñ¶?­SMUþh–3mëñw¨.˜Y×Ê¡é©ÎšíÌÃá:4+Ϩº¿\UÎó»¬ôâ"(!))߯±×´Ô ž†ˆ\ÂW…kªþ·{%ih>û V*4uú¦†Å$ֆпª}Õf§Ü=ºóDJUÕ€2Mß^V¨Q·»?J}ó@ŽRX4\©Æÿú@ûÎ:½(×B·•žn³J͈b„Càú¾½»Ìjˆ½Ëc³Q[ÓA^ë1çKJÊ^×wÿˆ7ÛÙ©(†”L·:l×꼕çg¸1;{ÛßNЈª¨¯œyéyvV*ý}mxªÿMMSK¼í +Û‹…;xODŒ"uõR—¿:¸KZµb¡2­;—K •}ëT‚k!Eªy­•ߊ"¼çÐ^‘é.ÿiž¶[w•*ΞKƒÐ'qÂ9Àð ÀDœ `ÐÂ@+™›xPƒŽ››¹ÍABަ½Ï&BIçÞC E«s—wö]©sÚÐʃ´vièHÙ7-)Båò¬p½QE¬=û\v'"ëN=°lýiUÌ—˜C±Â{õ`/l÷-hÌ7s¨¬F…»ÐEŒ©pwrLpF{à&Ìèµ³nýð¯@N½lØ,?—ÅF(œvÀ³ùÖÀQ‹óãÝ2×¾P,YKÝK`èÔ‘|)¼MàßÀe†àI²’š•Þ»•%•8#{Ÿ ++8Ûù(¦ò£kȈYQ6÷§üËœÛ}ê—±Hà–óQ=퓸—üö™Çè1žÐîÞ[UãÆìš=ÌðÂñayéØª0`z”Bª6cw/]¸¥,Ђ‚>tÉ‹µš¤Ð~èÄþ“S§RajŒqŽ,M±éô‘lÁ2JÀÛ8Ò«Ðüa¡: Ø…5Ä6CÕ"††m7®6·RNm¢¸ù›òDñP^ð8;†’8|·1†º¦IC"ðW!cyÕ«ó£"O¦Šœ áqd–Ê`K^u™jö2œÇm8›]1ŽP´:´/…‘•椮<è€o¶þú1=€Ð'¬z‚r +3¨‰®ŠÆ5Ò›ÇõÆe÷%*ÆôÐ&ÁP]–h1PÄuÉ¿?þ•rZGÅQÃRŠaìO›a½³{˜ZÛ…áhô›Î),'³rµKR•%0°­«ýrHôv³Ÿ¯"ʇúùøxl=ŠJ‘%6ì (ŸqÞ§p§k"?ÞP5mH0¾w»>î[ï?:¶}J±À_…šuãԱ˱«¾ûë”â†4=j럄L ú8áädÔ/àÁqÔ£[ã@"ñ·¤ù/.\Éo÷èÛÿÆ\€ þtÍí…›Ÿf×§…G•• Ñ©VÅË4lCõ ‹g0Žoëå#á_i®Xæ¬!È9Óˆ¯ÃÏ@™2"hÖ“PC6j<мÚw¹¯Çm¼´—µÏh/4÷ëë» ´9+ .;¤ 1:ðEj¡µ€ôœ&ÎëÞÚ©RýœÉ]ÈŠ«µ,È?)VÂkÛ,€Ž%#ø• ájB¤Iƒ˜rš¤/çVH/¦Ž’‹;\^lGšš"pÕA°ˆ»ÌâDÈ ÎµÓ¾èZûâB¿¬&?ùñÈ'bö¢¡yŽ(ºÐñZÕ.ÞŠBÌ)!娃ºÈsÁê÷§ýú1Êpùa·¶‰˜‰Âx!j—aÅêNØÛÕ ”ÇÅáü¥S¥ˆ½–Òa°§o…À;©J¬ž^›ì'©âÏ[Žv.¤3нe¤íï¡@'Òˆhë$*é÷·¡! h¡Gêû“0/°sú¸ª™[ý žïYuûMð ­D~ "õÉ¡£b p—²¥àެGJ +™Ú º€è ¸˜Äñáe¬ þ¿YXçue³‚£#•°—¾=*iy­¨Ž<ËDSeàLà+éE]hñ–î¥Mœå­WUâ¢/Ò]h…Ö– )C<ª‚ÈkùEäc¯ + ¥,ð©_8NÛÖµÛ¾Þ¥€á”’Þ-z#&DM(†¨Óï~#°°UÑ_‰Ân2|2Óhm¥Í•zâÚã(¨Ÿƒp©X¶•‹¹n1Ýi¼d«yYûn;Š!5òr8¨dˆáNbV×RqPFàtnňhnï]K˜9H­Ö'Ò-…pÐtÑݪÌÀ¼—·PzXD(²DIÿÂѲ`âøM·wÔž{D¦Áë)æG——.ÄI—Ucix{^H×dSQÿÔœ“ƒ.õxHíŽi8„JM†?Ù“š¨¨Æ;ÈáåÇhzw"S ïs9¶{õù@楣)¨»nîâ„”<ü™-5à‡8þ*QCgCkÒòm÷ú¡ˆ²dèůûðÁJ†Ñuîvâ*C¨ôÒkY®h2-wÝÐ{–.~ìªpOãõðFnÒ¾Õå—xLÓŠ6ÓÏ6øýªò?ybÑïðÅRðçr2ÒÜ5ä¤H(Zɉ]û³<âvÅút-n{Ôâ}Eà3Ó‡QÔ×MiÆÎçèØ"¯ó›ì—á• ó9|¤Ž;{ùûÒ彨ñòN4Èõ'«! ’" + €×Ñ_!° –•”Ên"À¾<ä¤R–ò'J­Ò`:ÇX¥>[¡iJ0)ÊgŸ¸¶4úU~²wI¥7ñBÒÁ¡¸´™ø*R‹Þ&u¶ ‰ÚWúƆ¬½{lÛÈ¥, +ª*‹ˆE޼^Ù…!RBt).Úé¢^ÉÉVÖ1¹}c +½ØŠYê"E$pèÓÏÿ¸.“,Gr$†^%. xœ‡óô¶óþÛÂ\•Rm2… 4ÌØ¾d硚ÅS/¿ÕÞgù‰óI >Ü5ìjì¶OB“CªÌFÏÜÙƒG]’~Õ{è•ÒZúP¼J€9ÃÕŸïX5ušóµµNÿˆO×^ºQ7$Nå§‹a»!ìÇ-•¸F€ª"µüøÝ$ÊIó![­~ƒ’ª_‚À<-󂪀²ó…ºÝýY 9%¶Å¦P«€(óëŽn‹o&”ÿ>”ÊF¸‡Ëª ëƒ±‚P?ÏÉ 4°:%oéÑ6²Ì²¶¬@1ÐäM¶w°sú-6 ¹»uŠšõÊÉž’ɇÓ|DË[WHxÈ-þ5iM÷XÂ¥AåbÕy[&L`“ÚŽÒ[öÙúÒd(´.,÷¸¼žÝÜ£.kŸ(8;«+ÛÌÂxmþÃ=ç™>‰­öùó:³ÍO:Ú0 7g¾c§ª˜Üš]•pÕéÕ)Ϋ’~¡/ý\!lÎdo¿ê’;›!!ªˆ/Uö Ÿ]VÍ\žÑs¿BX}ÐæðŸáêÖä’&ô*ìwÝܨ¾"KBul@{ vKºIDˆ6€Í¸ýæÇñB@wæNÂÔŸDÒÝjªÏGH8›¼1(3Áhu2P+ÏõŽ¥}DN6y—zuZªµ§¨\àÅ×í+‡{\%*žÎ[{×”.‰á›š£Ä€OMéêX*®Þê¯mÜßõ{õßß¡9©OEñõêЦË<£þü'p× +‰êOEnk®¨9NxÅ·*Ä(hq—¨±âœÍš‰µ™æÜ\º|¥ž{@ÿU“;U·­l3óVT¯ùúèÚôïqÖÿ†èû…öæV¤)"_p¹2ºÂàCŠHå2ÏS×Tƒ6S©úz.šVAá<Ý?o;\ Õ›@ +.œF]ß°‘VºŽ¨dWªýŠVU‘™‹à›yVâknf¤™ƒ\Â|VÝ x¬N¢p8_ JÕÔn “Ùî&®ßàç@aüãõiow.¼‡çNâ/VzóØͲLs>òÌ]3ª]R¿3/äŠí!ØÅh«3ìëÃÁµw J-ü7<:åQ!ÇëÖôãlä’®ôÇK.ám Ô¤y*@~¹Y!_ÿ6gá ü.ç2,ñV‹9*nR™èåNQ˜âºåùl×úÀÍé-䘇×ÄqQe;TÈ!;3K˜—>h‡œGÓ@KÊõ%œQœTÌÈ~J˜š3Áø*ñvdƒhÑà _i Eœ–¹¢=øAµì 0[ ë5×ÓB<ˇyNýù7šBƒ…ÇÛGñ›Ë–Š#Ó=è*C¼/Æ®´¥_¤0•rî«“WK+Bq….wæÖ¹0(¹Ô’1Li:Ã'XdwÒ:!´bÔÆ#®Ó-½•ýöót‹¯VßU.æRöâÑqêê%ì탃­~ê ‚¥¿ïظ]2åÄ×§fþ,SÓÞÍû>¨N8T²ÕŸòh…pŠ3!4}Åœ†V–Òߌò:ùòø,\¸×i™ËÍ g˺ås$Ï”‹¢0¯ÞÎÕN*Ž–’>Üiºücº2qÓ“ÞU‰ü P/š›ÑRMºBºëãlºÛÏZmò….Ý®BͤF¾¥™˜)€ZL8ÌÕž5þ@h]X±&\pýé0…šäÿ;çкÖr +—¥ºé*¨‹mu +Q9ˆÊê9-N@…úàF«yDÓRÎ%LÅ¡í@â¶¥ÆtU&†Dö‚èòzÒÚ#\wœØ€PYЉ[I-ÎmA«®m4Ûbrl&f&â|´y VÀoj÷íHŽ ™7Ñ îó{UXÅõÀ·Ôj õqš77°MÙ}Îl¦(Qh¬„4TF˜eåÓJ¸éHèÐ* Ž¿œ÷¼ ÂsrÁ%w•ó0% ^§3¨³gQ=ª–Y‰ÞfYkn˜±á¹áTVª#$áŽî>l7ÏÏ×ÑTh×R‰b_‘s|¦öÒål˜ò¤ßÝÏæú€T¤˜¤1F‡ñ›_ÍuWŸY˜8±£ˆ…¥u‘ªO1;ÛB=ª®“‰ª¾C¥uýÈž›ÊFñ66²ÝzlÉêÕÔ”ÿóuÍë¾*ÞˆÍavzA´˜BÔï ¤'¸ýÖ¦URøTQ¬ê«W[0Ý|-‰dÞí`¤v3Á.A„-^(Ïšt‡ìHe†G‹xé;ÖT,„©ÿIEuðJ½Mü’Ps}Mý>µø®3J›A3fV,‰W½©½e“iÓs¥ºFóñã:‚ýÔS4¤‚h=ÚA–‰¾Û»'öÞß…-)Ù¯cij$UÇ®u=Ç$Ë́Й¥I‘ÛÌí•}O=Î5bšæNjÔ<Ö³IÒÞi솉ÖÚ¾óCý‹ë>ŸA= q¸ší(kôDâ:S×¶DˆV,3žä‰ŽÿZ4µ£Põ]³dwi«bTÍü¦óŠV™§úT¤õùŒ.&"N­ºIÐm‘Í^\ENßa“Lsºs—ôß•£­÷é׎?ÓE÷¨:óÑ¥ u•–Ð”Ì +A}ü/Ï說ŒÝkÔÅ¥ýÚj áa5hÆyÝ÷ +mPÙÙ±Õ¬ËE)¢B¦=—³= +¡N¼÷z3·óÓH|¨sÕb|ŸLתk¦ÍÒC#ã{ +Æ^íÈ4“"ä*¥:òKS”nÎmX1ìy^Ñɽà„áN±±ÛðàØ™u°K¶E°2ÏR„Š^Pä¶{ÒŠú9ÔŒÑBÞ›êûT£¥ÃMiuD0g”К¥ôÀ ä¤fÍnx"øô„¹þG¨&ŒNEU[>³}ªû‰À²WËÄC3WËc¨` EWW-¤åëBôû>T‡ZWQ.,3ËôŠ­ÌqcýF—Ýתþ<Y{Síu¤'ì¦ xó#ýnèJf˜8Þ}zÙ«ÒÀW/{—ÛLßöúô"-›nw<'»L÷"±ÏÇt×äÂýÄÔ–:±ê—æBC×^Ãá,¼‡G0;n4îð#TYËãþ¦Óºz¸UŒ Ýá7«Ó¿IW: I8t[Z;¡Nû¨Žm¸Ä®tšž‘¹4mÌÅKÛf¡«#G è·ßlCSö×q¿#¼è5Žî¨‚ØçuÜ­ ¹ƒ9~œ3DˆŸ²ÇÄaã±gÍTQ­àR¶µ#K +ÐêˆQnÏÌ'œ¡°3MoqÙ»üZN¦P¿Ï\Ú¤Výü%`øq*eDß´|º÷j§ÓÒÅJ^±//ãAûöD;Íf N³··mÔén w>´Ž +.q + ÊTÚMâÛ7VÀ©¼VvT|;™;š¾ßGëeû¶Ââ;þ8"?åëØ÷õº€‡­ú|ØŠ%üq +·Û¾ž¼³íëÏœö3æhöXóã€èayˆ;S¡v"¨nKñ°sÜ~¾cÕ%u,“„cMœ¿ ñ©dÐ༞jy‰ú=2é½ ÿžò/è=£´½¢tLÍyì xzÛêþ’>M¹CÉÊÌ\ÔåÑ2vµ°í©…€öïúáqn³$‘7áÙ¾ŽeÑÄ™ña9‘üu=yKþõäM÷ M`U…3Þ:žðjÏèqè +¾±0ç®ËMކÁùœb.ÐûIÔûl¼‹î˜»“•Á(ºÝ ³Š:pN/]3ýåÜYp×}Þ¥:¼)r«;?vŸ±]œ =~–å!"EtVÓñý •–Û¼AÈyxLàŒjsh¼z M$Äà£Î}ñц.øUÃÄÚ‡Ê(ú˜ü|â‘Ëá:»#N%À³Ç]>õ fù9¶3†­ñÿb—HN}£WK8C„šÏBm§•†@Nöo”¸#ÜÝi{úÊán^ÃKÃQ··…hý6^­õR6Ý_é¥%7Ò¿x„¼Ù(yFuðc·ÁûÛxX¤È|7}ìñ]ª(U}Hª¶„âQfZ:K†+:¦“Ì©H瘳ì½¥Þl¶j˜l)çÈí‘”p;­lö35%G?3×5Tc™:yÍi±Ùó>´]âMÀ Im½{xܘòòÊéî’¶ƒH±®Â¡N|¶˜»V.C·à)¨+… Uͪ‘ëhñÍ’‹KÄù9¤WñmµÒ9aM=ZÒÉ:1T}ÿã;Ò÷ëÚ:J³Ó÷£¤à²S´-c£{i–½´ +ªÄ‰Ôop«&å\vô¥&a÷uåüžwØ@ÃÁÍ:Ö» ‚}”åéhO¸¶•Sd4þÔveÒÛ,×ö²Om÷uݩڈþPlÈó&µ)sõ ›Ü¶â-%‰û¸›'ª‰ jÜÀ¶j 3홀2÷ÎÓ¯~†íÄ)¬!ÚÍT(Ùô¦^È>½§yüi#¡ìS¯tQ#l3=§43%4¬·§õ›÷éî8“‹#ûN †(17†__ÿ~54 +®.DÀUù U;SšŒp6x6fdÞí. ö:xÊý¶Ë¸˜Q!õÚ‘Ygõ••I_p’Éîǯ¯e¨AU{ü€ºÇÖ"í^îúCëÅŸåLlÛKf"?›¢¹‡…AIÆ7âÆï4CÛ­Ì[ðˆö6`àø¦#@N‹þ3†5fåEWßg|¾ò-¹èÇéúycùPÑýþòØ×À­8}–PÏùÌèÝ,KH PëËÇv±#©)µá&önª0c`n„Íy65B¨µßå{#e”7\šÇ¡Ê@ÔLB­ížŒ‚t+_={]s½†PY3×rœöÝÕOOä©–pM¢>ŸC+þ1n¾ÈÁàá{8Ûˆ†ª++çJÖu„kOUZ¾Ðz<¤ Ú\¾]•0#šñS\²—oÇ´iwÇ}Ý"µ}߸äiï+D|†«DéGU ˆõYÎ:›¥ ÒJá ~Ƥ₮ö= ynùxv+~±[,YÓ´ÃS˜ ‚ÇGÈD‹Ï@~}Ųɨî0?_1sêt³ ÇÛKê7\=¯éJ•8FK:ôb‡‘¯4ñSñ¹‚gcY“á ”€Ùxœ›×~(P:…› +³Šêu¸ò«È'sÐܪ¾Yûž+ÓÙùPš¦ý $7›Døë²EE™JÂCõ;§6Ñ=¢p•q‹„ÜêÜÖž¤Á½R—Ê— Š]Ý}žìêêôk³åʾ3ygöøÍ¡?ÏL¢7$®Ë›sëiÀI}qÉpµùÔõ4æ¾ï3êÑ“ +΢ÎSTè®ãú^\Fî½Ïw²ÈÇÊw?BIæTKfNh¤÷XCu‘ŠÕðદëHhÚD@™bEì6GÂÇF& Íñõ8bZ³‡˜Ï®ÓÒ<{rèo¬I¥¦Îµ&Ú_]x¤¥èŠŸžÜ]Ùô=P½D:~XŠ›v[¯ûZ̆ÍîTKÅÄå7ó¡Š“pÜ¿æñL‘f]Ó°ô}ŽðÚã×G°bUjiIúõjº2ܸòl²r÷Ø3Û)ª&• +Ò¥¥ì¯ËQi'yfûÚ¯mÆI‰¦ÅNJh(ãϼ–Z‹âêrHS±jŒrJ#ÌÀ§¹Ï§.жuìKçÝÖq£èµÁt„”Eè¿r×Å–Xðá+‘Z…ІNB¶gÄûqS¨GˆÊ>ã•U—tÙî”)ÌV£êÔßo¨úS® «RÏVÞÛ+EUìîá`£®"E…"eá¶énó²7‹ºbËæx ¸kAâ·®EIÀ• 44,ÍÌ«^IÃã´™@µ_£]ëF*—ߦۗaÅôB(¦É«_?غ-IóŽl‚ªß³€à_Ðߤ/g¼uÅøgdõÐÝwõÜ…Çä¢x{vyʧxS÷2ª‡Væ4½”5, /ÝeÞúQ`¶çè9<Íáo›óÆÞU³à4‹Ã – ïã³Ì {Üꄦ„)zMù·VPOïœ3h˜Zøã\;´!þ¸ud¬Ý<“a<»‡Ã½ylÄûbºç¥Ôñ)-¡ùÚ‘S9Ÿ±ê#·'ª,$ëÁÑò'ô¿cÓ)dgs잫܊ïýXà´n„J‘WÝ•cdáïÀÊ;ˆ*Ю++΋é¥:1Š ZGjž ô+6[ÎMV›t&»y–LxLY®sJ̆«~e+y<(b‘|·6v³ïœ<` +•UÇRôúýyZÞÍ¢ß{›ÑÒ¤Y7JŽ"tKŽ•Ë–+oãA0ŸO—¯†T ì·¸V´ð™€¤ø©F+Ÿm‹k;nNÂŽD·;ý´Í¼º¿áª€‰,ÁÚhlÂk[èØë…¤1·¾ôÒ¹Â˫˃ž N‘ž°SÀ½p:•;_¶±º/&Ìi]4j : kg. %ˆ´£(ý…#D­uégäNkõtû©-‡Þl3å{}?¿K;äD&½Ú4–U &2P1Àf2¡ùxåÙ$Iø]4Þk.ST…£™Åèß-Oa¸¹ELØÇ%¶ò[ÉÊ´t‚åø„#Ÿöå€N9ßÏhý¥sìt¡7K5L«é$¡˜Ji¨Ëp÷ɸ7K&ÃÌNó©a¹ÿ\’{ÿ› 3]¬z(mì½ÞÞz>;7Q5•S‹œ +;cšÏ3\­UëK/°'ºÎ¡ž„ú1AÑPЪIЕﮤzËqJ¦öµEâ ‹s™|TÐýOHJ¨ú9îînÛk} +HcÛâðf¿ÛF¶¡c^xBO‚Kä{~šô¶Ùt;stu(€r;²~õ·í¤R‡úÂ$2;;dŒFCɳy -…wý#*Ÿö‘æ(TÆÌµEÍÍÔ²íÍÎíµÃ'ÃeG%×?àA“bÇj«//7š™a¢Ñ”<E~ãÈ®)´§ß\òuBÌ~4,wŒ7Æâ,9$í…F<@¨«…ð9ÍÆGL¶¨³íÂðÜbÞлÉ$}1ú„4ûÅ~#›|OÛÔÔYª­„FóÓIÝ€l†µÙ¸‚û¶›aÂZÄñÒÈR¨.÷žY ‚ܶ¨îžÑ&?°*­‘üà~õõ™7…¥aOŠ9ºí½_c´èÎÉ7(ÝžBNeáäBî]_Ac…Qƒg;ÙÖ±šn[¦"‡õäÚ©†åzDèúkÇ^"»v÷\—Kv\9 CçYEm û<ý¥õdìýOPÙ®ž$FIO")Ã|d¢J£ìKÐ.²ºLÐåÖÍþaGÅwˆ±ZêшÒ2È.kŸ3e«Ð¦ý+!úÈ©ÏÙ ËÕè+:CꇭI3â47c¨áe{åÃIÙ‹\,ŒAùr[(#Ø"¼ôhd½iªOßòP‘Óx㇚܉ —ì®Ã4žØÛ.}‘ÇàIHû±IíÑÕ1?Ã!ÞÆÇïOóÀ@ôiBæ+ÈCyµ÷¯HöÁ­ 13FñIÏ@Ûýi5MwEsªÇÛ>½ô<íÍ&|KBe?šTñœõzl>v ݂߅”Ô„sú˜^ß™¯”áØþ³zs‘”Øú.z$QH=‰‡YTˆ?Ýt+ˆf!øeµÐ¦õ7c%m¢(.ÐÆ¹Ÿ¡eeÛ`ÍÅ­YôÌ©úÉçg/ @5”,F}ŠÖºÔÕúK‡4•;lj‘Í2H¾Í«šû„¼ÎhÆô÷å3»tg¾?#÷é³=Ò–5TJ(æ ØÌÅ‚±»I¢´Õð»'N‘t•zc«´/²®ô‘ÕWÿ˜h×&âvG!Ôa‡Æ¥}¡¬v! +šÏ¼a™À]½Õú†+i5j%a(]¯P²(ó´ZJJ^OFrG„>ø–²}¼8h¹Ý¨Z& 7·šÐ"›ˆÜðûÞûá™ïdTRš,÷Æ>«':›Ð,Öl K e-Õ̸Âk==h» žb´[M‡ìÙ;2¹UzTŒ˜ô@îøÛ2ÄòN—î÷‡t +¡:ÜËÝêÑ«šÇ…ÐØÎØ÷áÙß?ROS%WÓ¾þ ¼j‰½pÃùRM)e¸S“ú´{îaë2 ±,0­æhµÚÚ¿»šñ~,ï!ä-à±ñ´oñ4¤^[q¥¾>ý›gQ¿i8¾pœ'n2Ô!šŒ!°£€ßBÌ¹Ž‘g7Xh8œ4Äîƒ?¯ís_éaÀ~.½TNÞ׳Z+{)üÖMz¼¯ŽÀ† _æ&ö±pº×á,B'»‰ÃñI8KK•¯ãFÉC—ø1ñ”*¾æ¡|Ì0c@Òñt¯Ë„§\äžQÛ¹§žì+íY]3âÝ^×§f'Â9Ëúü¹ñ“Ÿ~iï’­Ô„/7·û'|AoÜ~wø•6ªô,f2œcÇÃX|-D?ѨNG&%œÂ3'5Ÿ„æ(HªÌ¿Ý>H¯#P8u*{oBݽ¶o‡Âµ{µaíôÜ÷áXD7/óé×/¼»U݆‚©Õˆ E—ÓÇ»ƒvãõX®Œé½+òtO¯ÍPA1˜½"žáUX˜¦eÛmÕç.›@wú§8¥„èXŸææ™t^+Ns¿Bº=¨b.cÞyÒ‘w¶Ò¦n<ËðÖ‰2:É\9ìw´@ؾ¯¤Š®øË+yµO#ºqCj¬ì…a…qœÜXZ¤üq’³tŸieqˆgI±jWZÉ3ý8FLŠÓUá¹"³8‡ô2ƒ¯¶Á^†½¸µÚî×Sb…Þã§‚ƒÓ¨˜“JF`âŸq‚ÓºWiXU° FmŽQvw);ýÐçðzÕ´#H°€…цÚ{;BQ³}í˜:üõêýõ?7ŸQ TÏMÏŽŠ\& °Ç¢Ì Dï?¯®æX9æÚ +‡.Þ5 5^å²¼“øVÒ =ZÜh¨æ¬Kó\à;v—´“TúmÅó-iù»oÏXÊÜ ÿ)Àx[ô¿|0µMIØ&¶U~šÚªÒHx†Û6¡K'2é*Ìç23̧Ä^Õ @N œešy0PÍ-T«àTt }XPT©Äû´àï]b[-Q\¦nŒUÔŽ:U§J0>–©‘ÑÇš]\<–|5{[‹?§dã1®ˆÈ …­ø÷3Ü;üYÕˆ‘‰Ö냿¬»| ÙJ°)ÖáK™ÑÐ+¦ºTc°¹(1!ØÏºœ†RãÎeÀb¸wàñQ#ÚU?¸ ~.AZ2• ‡jš‹ŸýæK*MÛNNƒ çN˜™ÚÒu¼™»ù‡Öcx# th ïÿòR‰¥XìÌ,› ÍZqfø°¼ZǃI©Ö•Bin€úÒó6VM«f¯ló=ýX5ÒnF”¨P…ÅÐg!8wè6ÜÀÍ®”•Aéõi¬rQ[«‡ g`¼ðN'Y +IŸŽ'}‡Úšî¾B¢o§Ÿ€6“½›ù¡EMKm­+)ÿ<>¶§Ñ>é?súCÄ$WfÔÐAÍMöÙ>h>nN0”Y·üñ^OÄH'Ì> šûõéÏJ–·¨‘¤'“ŠY~,ò ¥ŸŒN‚£†GGRN¯´BfR«>^ŒMèŒ:ïeT?lrˆ·‰î8Õ°V…~c»i¹‰˜û ­pJ¿_ÏFÖïé§Úò5¶o§‡~;òáh,gâEŽx.Wøašxˆ+^ÇýþôhÛ}¯[Í?T¯"IÅm¾Þ–£™{¹®TãÑãIQÛñ:A‹_ˆ)ÍBþž¿âÕi?"ŸZ„t+Ùü<‘îå¾×“Êâ™P¦ñn:Îò_â³ü{•$Ù*°]5ó .,õÛáËS·ÔÇŽÍÎ!«¤d§ì(ˆjjÉBÍ ¡+´Gp²XÜÔÙªÚþ4T~*åwpõk-wní®"H¡û­g×6N÷´JgáÜæÕf—ÿö,«ß¹6.6•¥Ž<ýÄá\°<îD F÷óeñV´¢Õ¹2åÃR—#å “÷OŠ7D;L +¼ÙÞEC÷Ûy™G pfµfÁÇÖZÓ(~ñ­€‘eú}~Ìz®A%}?!·:sé1?´¿TèÑ@ÏèKm- ¿>ý²µ[~f>Ü”ÙÀX¬ê3CÔ + +c}ãR¼ºdhYÖ~nþ4¢Tþ´ +Z›VšhÔi•ƒJ¶p‹ƒn1µ¶ÅÛhd1ÓÔ4àóoœÝ•Óññ>NoÍšDd_iÞW9J‰ã‹¢ÕÕŒì[6—:ֱиpÄ òÙ®(ªù Là…ªmþ›:>Ó¶k ªØï6¬ +S& >ôòJ‹{º Úw1)ß[f0‹´Àã6| fÛS|I³ +@½ +ÐÿþãºL²ÛÚa :÷*´û`¿žLþ$ûŸþºJ–2I?6 šBÕ§«–DœNû«”­ÎÀYÎ=ÖOûº×,϶o9õÊ.G©%Dw2›ã‡ÐLZ +² ~„¨£¬°|Ô>&JÎE‡ ¹q•‰ˆZýt6!YÅ#<«+™?âƒ2ú¤BŒ¯†5àyÚÔ)Fçæ…Ýx¬³¨«‘xÌ´ÙMáç‹lŧxþúé¶2•z7NW§>äª ó2Ôù^àk%õH¤ã–½}=$s­5áú†@10iLàqã&ÝQUàTäÎF9©t!¦ÊõÁ¢8~<óŒ}ÝD„ü,Íá‘^lÞ`ýAYÀŸ²,-_þ%çL§0Ö¢’Ç%rC? QNïKµ°ŸFrÊ®ú4&Æ8ÓÆ-{Ùmï¡©|iÚê°§ûY4–â)ØB°¾·¬ä¶xTnoœÀ‰î{IðI5úþû®„µ^óaCø.»·™;mäÎ5ԣݦ¦9A¿¼Ö”pÌ+¹= “mŒ Í›þ\-8;ÃÂ|7žÛ'<ýÛI+Í’z‰Œî4g¶ñ~%¼=벃éÒ‹$¨~0a. ÕÅ®åäpB{£ +™þ‹v˜JÅw&n9fO•ÂÙ¦©´W3ÙîЙç!È”ªfÊ@ÉküáÝA—%Túв;ºÕe†X(Yp’ØK7 sGХNJNIÔ'ÓšâÇü»€x˜œ_]‰>ܼ­7ÿ|ý‡ØeÀ+º çÉ<ˆkâä\fg !.F•Ò 2Ö R·hHxªé72äFmQP¶«:r‹P5i^乯 +£˜âêwè·fb˜€³ +RØõ¹+OÚx¼»þ’œÕêïsÐÔäIì)‚Bï¾õªMîJ£æ—÷l~CDõ‚~K¼úÙ$€u‡o”rúVoqO¿zætƒiÈWEn'²§¥³ ³‚È­ÈWG±¼Äh>ãÏWlŒq®GÉòï-6¦ß±Í"¨JYä ‚ÑOî3@NSÀX¾&1mMpQÂÓb°yðúñ9MÑæwžêQ…YÓ™ åŠí²5TŽÐ‰Òsí’ ¢Ý‹jæÑš]=*¯2p‰ãXxšVvNmz¤Š6 øP¼=½\Àë_(ŸŠnß?>d0‹Ôg¢KñôÆ 2ÃЄ…}ù¼30fwÀ~=Ôº–=­Ìng¥9ýßÍäDV +q„Z/0šk4蔆-p‰0É8j4YŒ<‰NcïœØºk©î¤õ†­Qò›‡Kh@§ƒÍ’BV§J>|ýóU‹Él´ˆ¬Qr-5W<Çuni¶N·GÍü¾j„×´U™5© –€¤Â‘º½·l ›å$/]a÷ Ú|ª'GvSc/måÒíèUÖ¾9›„Ð#;Ê姘jæmê=tuA9 œ¸>G` q[ÍôàxŠ4dvwTxÅ˦ê•G·:å8®deòÉè%çs3ui9Ô ËVy¢Ê‡½=»(ÝV“ó¾^¡Ü™µŒi@Ó£¬©Ìø…Üñ¸Í"D&Æñ[ôså•û±, +›‹ol+€–=Ort÷ºÈ©yÕ1£Õí$#ŒkoÞ¹x’à¨T{–Ú@ö9.²?ËO¦Y¥ßqn–7lµ¸¹¨¡Ë„‚uWá©Wˆ°U±™œà¯P4Ym¹(·r++G%«¸LhÞâëÐSeÑ&ŸÞþù)HU°0ÒáB£ÆßðÌâ¡4M +óñÔF$¹Ö¿z\½ÕŒ<³_E,Õ“²½ú'€E @å4l¦hÕí‘›«E«úhÐøH5º¾ûž4÷å©MË׌|5‡¾éB> ~$„kkøëV–Œ$áÐcEÀXªI­×Ö“¡×„Hl!ôAƒOâ÷¶æ<Œ™XÆ3åB‚W!ÅeæccÎ7o»è5doßfÓš´wê:eK&’¢x¤˜Î'l[Í^]7TŒ¶-2@ÁÁlµ[Ê1V²±êvP#åÇ¢PšÇ*¡3ÅÅuõ„ˆä\ˆY£[\üºÊ™Í„µmϬ¿ïØ\tÁË1%ôWá¿Ìnbæ?(QúÃVx0Ñ_23£’Ö“¦ p•OÛÇQИB;VC6sy»§w{+gæHg–†…ÌõøÇóëŠ*¹¾?åìÛwr´·BE{^¦ÕËsâºvü‡ˆúr½f§`N1}-‘ +Pu¦Íòqòá‡)öé‰K…rè4HÏ߯^¬[Õ8ò®“°z5ËðÜŒJLWÒ­V…]5¡ßc€ÛmÕ»ŒhA|ñº¨¾ÈQL‰;Ø· ¾l`fI.¦ÇÌÕÑLƒK¼Eµ×Ae)®¨^ê^àz(”êS[ù¨(Éb:c1 Ó]¯ ©Kle™×6 ¿¢xËê9I'd‡º‰Òàé||8{ A‹šrUë-„Jݤ*s®àº¨¥ñ[u2뺕0vÚùy®°™: :ê¼Êfî—!Á«™\ËSÁ5·ýµÅóìrü‡Ú³ˆgóòZöãϵ|xÄ3Û»ßÓ´>3&}p…Ûz–”ÙÊ7ELQH™a• ZO) RÄÐ0_–1FSre4ÖëÆ1MXñ2“NWÍLJƒH Fâ7rÊ*-‰øcGQ•™iò;Ùæ©©Óô7xWG^ErÍŠˆÒ8‡¬íê³™Ppµ‰TÛ0.­Û,ÄÓwN[HäŒ&d{ÑØ÷ë éI§ŠÅX@UÃk•yY Î)¶zräÕWîI¢HU<3„\q¡6df·»Þ7ÛzÌs½tø±¡éêSlµð}œæÀ c¹_þzÒµé0S‚Z®Ô€¨Ì+ŸHU’ Eωt$\²d¹ù%E%ç +°?­>>}uXã õíN8‰B‹V8'j¹}ÖÕDÉfÒe0÷š{ò#aÐn^ð4!“N†õ*#ÃVí‰{óÙ¿lEBà]¹Fº|x›°XåaÍvIXœ*÷J5„±ªêÕV“&.Ëœå9»¡¶ÇSø§àÈdáÓjæö\½«gàŽ¾S='~o\ÌÑ<ãú6›?“¼¡æ]ÖrŸžkH¨ÜlC¸°—mê_ÖA&nå.² ÿlyVnw‚mBwג帵iç€ìO¨îd™èùB"X'6nZ™=ÒV:d• «"òékú.ï€ø XÜ ùèY S¬i ÎôðT–µ{oïv>º×¢©ä,3*»Œ…Ç܈ŒrLÎ7µ +ñ€Éj7¥zkS-àÝð< >}EÎB߀ã¨[rÊ<"t•,rVu“7“Eöj&ܶgÙ˜£X +€ KXÖ¼^æ¬skó‰‹Éưãê2¼p&ímÝ"•+ÖŒêÂ$½%ªÕ”«àÑ–n¡??“y„ Jܲ!aÖ,Ó‘0íW7óeûË<·!ØÈõ +#µÅpõY=„Ù££®Á.ëVÂce²—/õ&»øÔ-ÿÈ5BWðtËvŸÃH÷öxø=F¿Ûv¶5ƒ±<ð©¯}_ÉǾR{õLöoDw*X…Šf}# ÿþºÏzòyÀ/‰’ÊDoÅbH2êf^Úaÿs]îè±Ý0 îï*¼É'Qïõ¸I‘Ùü NìIåž a"gâòWº_/î› G#_esÊ5Û¨n‹À=lª¥.¢P?À>íT:°P]‰|žåæ¶ÔT -ÏDݶ5à¯ø©9P“˜jó¯Ò«¡¯M +s(ÓÉ`ì:—NH põƒ.D¦Ð2:”¨æXØ‚u‹©ç(Á„¿·?Ää(6QCi‘|F.t²]`í•g‡°…g¸Ð#¿š0Ý*_~Ú4ØGùáq!cÙÙ¡%‹D¤Ã¨ÙvWEÈFœ~ÛènÀCñ›‚ð#¢^ðfùÞÚª›·HxMu|Òž2uùwDO;yàZ†7*.šŸ7®ðñÇE²'H×ÍrL ÔkGçt ̽¯aÜÀh㱈+‹7Å:û +vsX6)Á³ëíiEiÏôš†’{³x¹°»ÜO{¼.ÊÕØ²‡¿ïk^Û-ñÝ“’øŽ^'«¾dïþuQî_:ዳŒS¾ ‹ø°Ä@ tŠcZþ`35ÎÁUVŠÇöž5—rd¸òuzì)Y­¥¥<š^§_EÔª× Î&ÑZž™^¯¥x–å#I\gßJStÍ2úu³¬PŠ}I‡«E$=¹ÑúÆ:µ“>´Ò²v3î1Ÿzša Ux +t-E,±]홋گ¶¬ÔâÝÊ‘U‘§ø\¯:•¢ ã±yÐx$}Y«. +BÄ’@ +\Š·W—é‚®r n˜!æIu5´¨úv\ËÚ(ÆiÚc¾x¦™E¸¼¡‰é8Ó0$fƒqžª©Éjíæ¥ÛžþqÉémÕ_l`ßÀÖÜ ØzlwjlªNñšº|>ú8eµ\Âôç˜Íª÷PZ–ðR±¬’Ù€mS -`[ =nè $ŽûŸ¥ˆ"RÒá ™ ‚Žâ]´sä[¾èpÄKrœuïy–åy'dû‡¡òÅ~bàâ+{šŸ"kJ‚Á]l44oK4ûH{'¶N?)@ujs׊åKZê +õ`@ÌýåÚDÂ5wEP§›ÛÒ'Äñ|ÖQ› ¡»ó3ÙÎþÜ#³¨ §~³äÝéÝævâÜo=“LMdqm<=ºÌüL÷ ýÇÈÑÕåx£¡à3"u]Ú ›““D]š ´Ž‡zûq‰6œ’Ôe™ýÅ0²ôcD¦ØÊ­ž ãë×ÔË+hUè^é`‚#¤aHØ ¢“Çzœgs*WËHû×Å=Ušjr ³{伩$‹aÑ(zò6;ãØI}³WmàR*!2E§ë깟gE ¨sº§¼ÿܯ– J7qHt7’³j<ÀñDB N£áÄe%®/ÕëWkÖé'œ|º[#³‡K“S¹eëÕq=‡•РˆÉ»V½B¸zoéԎñªýB-Œe0VÞ ?É7’EÿÀµ¯;ÿYÿ¼Èî]ÉÄ‘Ïñ7|Õ´‹0“/»F™ѹgF\ñ ?*…~)^BçÚJ×ãÆ!@oÙN Þíä@2Ø›y‘b‘e*u.tïÜÇJÈ·g Þäã*ß¾Šª”ÔoºÙrY •HšÅ+?¤.ÜîÆ•3«’:6t×}îl¿È„ùµ­ˆaÕ``K1=0î´­Oµ •ýÇ o%¥Ã›3+©-Ó±ˆž4Íà9™õ¹ê°¯VŽqP­+°é$"4E‡¤Yp£™Û ¦_©¤T‚‘‘@N­ìÍà¡û…H,{h%’(åÖÒ§•ì\æÚZíBި歠‰\JX'7[hv«RrœÞ¹®9Êôä´çhÚ‰‡%8ÞñÙ5®¨@Rp6>¿¬¿> &[9t[ݽÁ(°ª9Ð$µ2AÈÒWÕq§“Øý&”ÂA_O=&ÔVj7E´brd÷:fS-› +ïó߬‰õ>’CGç±ÄÕLWºxµˆ ”A;¡¤¯“æa¨ôŸrå&;a“Šà^)èvu@μ +qš‰Ö°,„\…àìœ)«Y¼£ýað™0¬$µ'ú½„l"þæ”"Wë6•­ …|¢Â¨3_WKÖÇÒyêJG×¶«éB{ãÊ•¦6TãZh…7™ŒU¢‰­ˆÊ©W4çËàž´nlGÐI¤WÞ¥:ÿ_¬WZÊ Kb@¿gÿ¹™K¥+v`ë&°¸Ø æŠtñj›íâmùˆ§]ªßÇ7¯kg[¹jbgIÚî&Ó‚~%„¤'* +™¨¹lÞ¹]awß|k.›žì/«J_=Óu%'ľ|æòÍá„´Ldèg»åË•Ý"‹Û÷Û,ù+ +â^6y¦wAIÁ9´Ýe™+Ìç39¯@JJóžó€Ýþä¸> +L}²ýX¥¼9½‰¨'9ET&%skÅ;ê2NÆš]‡Òh¹~ÓC¨hW²ûUýqbuûzÏÅÎ’ÅTÁA&΢é$*HÝÚÝYjž€­)5‡:ÚžÓlQ/ži1–– Tí‡÷`:ÔU„‚£#É…¶3‚ÙíD›^õŠ/Å9X[Óô-‚7§çå›uZv_¾§Ñ¯x‰N&Â%ÂOø6M©–ŽšaWíis¡¥ƒõåAÆ£":Æpƒ5£ Î@í/ÐVGˆ§o’Â.LÒBV4ÓÒH 4|ưŽ@ÕE©íe± IB± 5Þ]–B³žœ¸AC]”em)…;>¤9‘¼)Ü$„몳åØ2}\=¡®©åô»ànõôËñ>‘UóשÒ¢-Ñ?B‹óCŒéÈÚÐiq ž~Ùµ*FÙ ð,ÄÉÐä׃¥ÆòÙ—si¤¿´¥6§MbjYrŽ4¬+-­n쮊*øÌ".®dl«šË0w ‚ê(ˆŽî„ßéƒWž) +–V´n(ÚzˆÅ´÷Ú¦›aÍ;¶]Žž6Á‰òmmJQÏÌY§Þ36Ÿ¿ÎæbÅFòÎ'ƒÃQ¹ü_W™Ý¡þ¾¡&“÷𵓖c0Ô9–M5?sV½Õ(E<ÍATßà°ÿr]&ÙmA Ý纀ßëy8OÖ¹ÿ6ø%ÇYÙ¥&›5¢€¹2™î¬~UM¦¿Å[jEêÝØYîX´œU /Éùa§ÛáX<%P3a°j8‚kš?fˆ‘:Œ‰ª ’J§ª7T¶Ü•l63±zh5ø5÷Ñ&ÌÆW„Ùï_çínsi€ÉŒÆïŸŠiA(uŽŒòà ٨ĤùйÁ¨îŽ`Dœ†/¨Ìƒ1 +sW_Wýõ$9­y†rüÎÚÌ\¯¶oP®Ïçv{õDéœÆÈ^–Cñ1#nP¹ÆÓA‡BêWÒtÆë¿¬¸Io9înFóìѪŰÄ&Ç2Üʸì{ ”%Ïâ$ÀO0F‚²³m·µszmUÊqÇë™GéÎNz!è×`¯º+#£^>=J7@óâ±|mϳwG˜uNÑÄ¢{¹g:²9Þ ,¨)ιÍÓT ö€ ¬9ÞÐÓ.!u:'çõ#·Ù§Õx²-°u%ùœl_[Shd«a÷«rðª^Ô{a+Û‘2²£-Øø*-ˆÈµ€·Ár/[-hÞ#sD²¯)ÈZ+èyC2üìõôËÞ7Ð]ýìÎj˜Ý„d äÀxË@>ñ‡º-€NÖ¤³8Lˆ ¦yw€2°©•-sÌŸæ>Aú‡kõeŸê6Cà)G턽|gW¢©(« ýçZéºÔGuBGiüu +!55Þ²f<Àúl[Xd‚´Ui¶njÍþL¨ÅõMÕÖ¢17Í+ãlÚJæÖɾÍâÍ šñ£]ÍË‹gçYx¹l–§ì(Až.ÀÚ¶¨¿ŸÍï–œNøPe]»{ꉻ€ÇDÐ8 4¯,Oƒî©N +mh‡ +3“C?²4ÇãuåÐ|dÂÊèÁ“Y€7b>X2?ïKP<­íãÖa4ÏÊ"Ø3ò¢¬€9 Í Þoø•/§ÌokfÔêó¦löeš>U>›ba/¸Wà >=‹£ùò¹W6öðhb:Ê;ͬb™íì'Jd a¯€ñ:'h»^ÿåP7÷˜fƒÍ,[Î0ƒ@f(ìš% ~†š=¾xk_oróC´…F¸š!ù‹W€œ¯éEÊ©^kL¿÷꾦¹¹¿P§h­ö€mN¥¿j2®V G@))Øá·,s«ùÐl)F\¢Ž>Ûé^“J÷Oâ/É +UÑ0¨£Ìa¾³â9ß³9/+c^ACuÂþ Š–¤ª|+ƒ€(Ñ|]B §ü HJ°ÏÐ.,@šÙêÄRFÆÈRoÞ<Èp6ó‹gtX¶ëõ9iÏ…¬©f±ÁípgÕ’ÍûË6Ÿ±æ;Š•;fðêN®ÕCîè^ø Õ54K›°¾ò&Áñ‰„©1Žçè;‡é»nhÖd¿{ØG +¿§`E ÞÌ(ïòÒŒÍâB´áÍîf™ÊÓ\Þ¾²}PÄb5CgÙ3.ÝmèlÛ툎3.Œè|®-½XÝ‹ýoõ×0»4¸›¯N²fþš˜È¾€e7°Éò›ª* ‚–qŽw½îµtb¿8îp&òGrÁ„šhžˆ?þñ5*D@|Gyüø050¦d*«ýs”"8¥ù^u…+Ëëó9¥T?0ç˜]Ÿ­¬>YÅL”?¡Á×èì¿Ô%}Ãý +÷]æŽwª^ÚÏà¨YŒTay`\Æ®yÉ<OÛ9ÚÅ +6?ÝûÚÒäo9!'ÐwL…®eŸ=%äñ s%²’< å©ÂÁß_çå´™¼5ÍŸ)z5¥R÷šÏÓKcÝDÀ02•Aƽþ+™1¨нÍ5à)¶—*Ž5Ž­«™‡L³{fO@ »±Â ×D×x0‚Œ}æ{ÎÍ´åʨÊÛ€ŽN5å0¨Y £Cå\Œ82fþ¨yešÏŽnÂn 0TÞQ̱ºñ†ôÆ­ñ)ðP¤Ú´0…Á¯³Å…ëÍ¢‹¡Û‡`› è–F«gÖšGÛõmüÙx¦1ŒCýšRÏÞB¸i)¹4ÔØ²Z ƒë–(ˆ<…2×ãÂ%pÌ_Ç”†%?Ç4ÎòéåÐÔ¶Ûl_0PP·D}×JÍn—ìFOtëSýŸ½ÐR¯¨†Hà„–³7“Þ­FØ´›—©cj¯õ¦3ÐéUÈÙyÁqܩܯwà4ÀtÛÂ$š#m̺Ze>!N9¥6jq¦ª²ËŽEÝví³£”ìm'{(µbž6Ø^Ëéq&–æCæÎƒ¨ðErd(þtñ@çµ^ÕZP‹ :iÎ P™--Æ´ƒHËå©Á/x ÍÙ0Ž©ŠTp¢™öEÛª£Š_&U¢ûtØVŸ(Ó´º®ÎS„]_?*d‘¡Ëè ê…ÕdÑà :/º Y©(Øbhô[ˆ‘ÂõMC2ôo—ú¿w.€‘ê1v°«ü@fÖY‡. c4T úýKÕ7u‚ ÚjÚÜU×ÂBïÈ:£^YŒšåŽé×W}‚JݪüEÎ5áüqæF\¿ü¾¼¿„<³àWm§ÿF£Ö"þ>ˆåz¶@øã}$²÷êË|ÛKqydë2¸ËÖU0Þû“‘u§V”nqŽÙÄê¥+Kdë‹J%8¥HnR^ª#Ь-“çbBùo SQý3G.é±Ea\ÆŠ5Ž%%¹Í¬œ~–l˜Ê?“ÆãGMM, +DÔ]¡¬ÍŒk‡ ‚Y3›-ëºC5ŠÊËFzjÌäÑ äê¼ë)dY7NY)½÷C2¼Q÷Üpê P·DFÿGÂn¯ôðf™ÂR[oW`ìPϰ—³fäCOº•á‡Ë¬aMÊúÀœÓšô¶0Ʊrêò|~Vuæ|ÛÛ¹“ ¼Ò”þö4i¥8zÍ©M›ôê(Æèo:©Írg>í¥:|®ôV ¬¨!ÇJ<T3Æ-7ß7QUÂT웢)`öñ5æ ÃT²ÒúC+§w.¢ëSû±|í?á…uXÍôËzqˆë»¿­ïØ/ÕpoU´L†M8d›êbö¼¶h­Úî„4o¦fìÖ†[Õ[r! #’«­ 4 5Ëîfóøtĺ&.%[¬Õ–G鸾 +9Š+ ®R„!‰3½[á3-ÛÞªó +¥®þðÊã Ôš'·'@àÀ™ñˆÜÈÅy_ÒÃËŸÉK +Q· ·~”DX=Iæœl§ö:]'e¨×i§Í\†F`×Ú’}ô×hfÆfn5öê¨Wñi«OÔ¶ Ara¬§¸»ùlp0¶À;¬ñÜ;‡ “ÏM¬Ö‡ÙW£¨\Í‚«®ÃcGO)bYh½È5È×· ã/Õå’¦9®ãÐù]En ú³^–´ž;íÚÿ´qÕU“ÌàoY–H“­.Í„…2#æÊ™µé$pŽŸdùTz¸£ÿFæv•*Í^at~,u`¬Ñç«YhÊgõ­´à£ GäËvÕï,iˆ‚ÝŠ‹îìHpŽ'•*¼Ù½V¿e«à"°UzßVØâƒ‘#Ú#K“Üè§Õ¹Õ¾µtÜ·z\ÃÄxwm²­û j›1ƒ¢õZBvë¥ñÿc€D4MO¦³Ï¶/J3įw|;]ûZ¤Ãüâ[ye‡Š³;Ùš‚ Ýg^ì=_¶šå£{èEg4û£ü*RgôBÒês±5¢›ù꺣G·2ˆò 1KéŸY9ü;ërëzFØ“"í{¥D‚‡Ë†!>]Ñ€g6”.“Ž€ðÊs!r_…Bnêt¨üxŠG½$ÅñÖòËÆT(wYQšoØØÜŸG9¨¸=ÉèÊÓÒ¼ƒ]zé>ÿƶ©’.êyuË€ôzŠx—dšÀøÎb.4/²¼‰Êᕵ©Èæ+©‹ÇJn†ÕyÉk>ÿ-ÄæÇîÂÓÈ6åÈŽÃl¢¥iùìÄçЩ”¨Îl$c?‚MÌ*æ+´ž]‡¶äÒ‹Áϧ ÑMã"7 ¦ÈgÞŸ2Kׄ·Ã|‰úöÅ›%’²ÍnµvÅØP×éZÈGáfà%§ƒ„ðÈB­V¶í¬zR~¯¬^Øç+JÔ=ûanwå}æbR98¬¾>ûqûcšx*…ôϵ±§•1øÊ &NWᘈ®&oÖë&ùï[Y¢‰µîÜíšT ÂnßRÊA¿>=[ŽúA|¦£½ì áVåý/!®Éðê•0hP"|»ÉZ¿§é††‘”Ã%¯¼õÌoí§ëa_åvHúЫ`#U{žÜ¤Ü浂a–çkÔﬥ™Ô쇘]™¨×¤ÓÑ|heཆ Ù¥–O-]…õQ&nÌ*ôï«Gx+ºsÌÐr¢· rv/´Ÿùw Ú§<|„ó·}`w6 5f¢èr”ÂülQÉ´þ5º»¦CÖ¸O/ÂásIëót´ÔrLµÚµ†e;žf§e{w-Ý5œÜöTÁr½n„ÕTS~-ÔkJwK'Þ~ë°ªí©NPAÓBvJÀ†ÖèŒþàó/7W uE1ï5šE0å?I»Ì…ÁHЖm{s×Ôg¯âãýÕk<%¹Wòt”¼Ll¢ë›OûzØ•=›'˜ó–M<îznYÈZ)kdéð“Z^4Áþóoz¶Ûßt;&+Èû \¢¦æ(Z’w¢½Š þÌTúùíýü8S¢bð8—ýO`¸EßÒpåLž`ý©bÊÃ3¤*' zÜ–¾ +Ùõ ‰æ£Uê¹d‰Ú%[Ë—¹L8„ Ö‹¨,$ˆŸ–).Š~Ÿ‚å[®ªÊ׿ý¦À˜:0”õÚšyz彿ë·+Q¢Wó4§UÁêänµñFâ\‰$ àù^³G9pR§ò5Ç·EàòX²Q“pjåNU@s’§üˆnâ<à¢ýž #lyÜ–5?¸ï© yœ.„ñ±æýÌGù ™ý;hÚ°Ó~l6?'ºŽ€€ësb‡˜ óWyÃãâ¡ÉMS³ÏÒÃAl|ÅäýÆ™C™`DQo–Sür¹~}¤‡€Ç²;ñ¥®r½·s¼zR]ö[d2E “TËÃ,Z­À8ês–üæ¿Ýö/þûZÙEÊxìï+“èö^ö’¥ÍR‚ÆéQÜ¢ÑÔ1aÆûéû‰¡q-³qÖüñLßl~®ÛvÜÄT¢‘(”fdÁëÛ´tãý­J7f4asó3KQ˜‘VÝ»–†£irš`«ûæóð _Rû(þ†8€ÑÖ%B|ÿ*i€½˜»oP‘x¥¹V:$ßN„£K4ºݶ~E)=÷éQ¡à‰ú«[®DeøN€°^ ÌÎN9hkE«Fkµ2*¨Ž‹”jIÅ}S±“ߨvÎò o÷H«Wæ çyf™ÏÓ$[ŒŒ+‡|×3Ì.²b’XÝÏ#¿Çaêᆠѯ®ÖÑ¢ít>1C(”kPj§5+m{÷gæRĽ¦çL{Ì@cŒš2FS®ø|%qͧ1|:®ó äÙg Ò:ì“Òc;ŸhW9Üêû’¥åï÷“¸›èÜYF&éÀÔž']•pžò?ù/êšg#¹ã¸ßÚÛMÈ.S5RPÒQÞƒ¸°x»Ž°}õ Î=ù"=’,?«–û‘õì×IâßÁ¿[]™ªwèöÁ¿q®ÆØ£Kµ«¢>4‚êŠù©oÐØkìÎR5„·êd(ØsQTØ#÷)Æ–L™´6*ÞúIZ*õQ#ò¦_ŒÑJRnþ=EÛ°)Q£óËÈO¾|xEà˜Ã5) Íp©³KÔkG¦GÂ+M Ï6¸€6Þó9¡%ÌEðózÜ*ˆYÒž‚&çÕÂH<°²a Bs”Ã-ÉëÇ´‹6<Ö®êg,9îÉ·Ðx"’µ]SǸœˆ³*ÍUجWþivOâi9r‚q¥œëœöy÷óQ¾Íjßåá0¡ aKÑÿÀI 6ìÙî-ÿ"|C_¡üˆÀ~Á‘ qm®¬7ðžÿç5Å"àqŠÞ8ÍçëâCœu;ïrÔŸ/_Ù9Ç,;ä¬Ôz³±º”„ñ[\ÝÇ{Í(È!+f +G77 Ðÿs%í¤®ƒ+D~äóøƒòà×Ã^G™„Ô®:óIAÛŸ+dóÝvê‹oI™çj¼f¶àBG_A¥>£'ÁµLøÔ¼=ú°Ñx'„UÑ@ŸÊ®•^§¨Ô +¹fûY‰ªÈ/e}J‰Fº¿/õá£ÌÒ%E>Lü½Cy«»%¤ºcöÙ9NmÈAÓrþ…¥í{/k‚Ÿã@Bä‘ÅO‰À†WIö¶Íu˃…˜§²`eÜÝê/TrJðØ`ïþÆ]Uš’•V§i¦Ù‰ }JéÍ¥ŠÀ-uknx gÀHßâ•4Ä<²Q’èŠB*;Ï' +êÊÄÁ{¢î yª°Ï[c§}RÿÅ~Ä 4Bq*̱³Ùõ|~ù•q^FüÌ"­²ÏGæËæï˜[àŸV¥÷«„n5 3%°hÌ{.Ju+Dôýý[¼JŒS3ûJŸñP–ÖL`*|ʉñòjññ“î1êúêÃ1r¬ÎxÕ×åiùå˃ó/ôÔj\Bˆ£=ÿGu™Ir1Ô•q #xdòðIëÿ¯ðì‘ögwÐÅb‘y@yóC+&æË?þa«%b4¼ß ·´âÓ„‰oüÆaÃOl7¶œÈ]_•¦Ï¯¥ÒH´KŸo÷ “ÅÝu9t…Šr¼öæÝôCº&†J&ó¢õµºÐU–§Jõ®ê¿ß¼"»z{ÛWQFêš½ +.¡®õ* ¶Ÿ{Ùª¾ßÞª*zeVl¨ðT™ª’Õ„I´Eã°q_#`MtŸU]r<)]»ËWÕ*J_¨A‡Ž„蔺!Lgõ+vC¡jÝy†$áºÖ`UŒï7ŠSk4—fÒ§ô®¥Åª9ðE«&<ÉÀµLo¦–®¤=`4ÆÔª}ïõ»4°“7\8Ýsú¯Jó\„Ÿ2­Ðÿ€SÞÓ“2EÈB7ŒpaÒÙ-O K²&œH¦°´,÷ ЖzŒ[”x‘þÇú*FiÉI—Ò”óâá?U-Kw¿.YM §cÅ\Í¥¡¥Ó³[oÞ"Æ¡h'êÁzéúlËPé× ò+­a¹µW.s´Ç0䯛Z¥ †ôˆ€–'M;½ãÅ‚¤IŸJ9ÔU(½ŒN©õærÄ“t˼›6!g¸rHLf+ðôòŽ*^¿†H\‡uP|ç(²Âñ¦e{Úº¨1*L4*¨ÜÒµYŸš:Úö;6DlYõ AµAŒ@z07@w„}ì{ï£Êp<) ‹3WÊþù»ª,Έø,¯÷L´5ÛSkÝhâ[’:X&nÆ~±çò³›¦Î5mt×µÒ^£×W˜†'bRåàqÍ K³ŽÿÜQh½4å4M À +˜ŽO0B3uþ„5Ãò +„%¦ÊUûÂñÛœù¤õ*_µˆŠÃûkn¥m¼T• –®‡\â¸ûà k~ñÜBãÛž’]›©k#9ÔYýùÚ…æµ]©ã<Ä}µK˜I¯»REHÀ´‹ öi0ô¢"‚|Šò¤¯iÁ<®­Z†°ñÊ´hÒnÍBÄkm,†­B›%Œl fÑàš«Ôx4gþ:EÌ_7Mñÿ+u: *â) ó<«`éaÏš„´ƒÈ<ÍnvÇrN•iåî×"šì:в¹£ÚJá+1D[húˆO¿@ Kã4÷U9ü—4mBWÕ*MÓDN³êZžS*H·q ´S£ù‚:=»j§ùBË<ÕêŠ:µsÞù2{Ðgãºø?ˆürCZ$”ÚWÅ1 EOšÓ¶cl7O¦Oܪ³dõ¸ÜΊ7N$„&®h®>-«f³¼E0‡W3I­éÃä„\?vs¢œcªaµ +B*-:Ú(,¯©´Ï.Ñ÷Ò í®â¯]±WšP.n“NŸŽºß]Æ};ó=ƒ|÷éf-EæÓŸö©`A¶‘'¬æÏyK‡ª > ²&s§Öiø¸¾°€×ÊTë˜öú*¹œ¤mM<‚ˆoؼéõáà£tô–‘Ü8’1‰?̤ÁiÔñ£J£9ÁÕ“å9aÏH‹;wÃ`Õß9¯Ú5Æ9t˜œÆòtÓ©U".Zv8tàD!Ûι‹ì2°§Z¨†ëUQëÛŽjÐÏÓÔ×Rí‚NÝÑTq©°ýˆ{.æQ¸½TÝ^hVOAfYjZûJ1ítÉå~—ˆÅ¼ñ ¥¾énpÇ~…pk-FFkúY¡{<‹¨|tÆä´šbh¡«4_Ìò{aodZ~h©¾¶Òϰƒ]qÝÕÆ +ì©¢çf@%D8ÒCcióÁ|÷´Iåäœb|*íeŽâ”’¦|£{ÒÎê]LÙí+¶6‚Ó䨻'gÓWÆ  ¥ÈãzÒ:c¢‰ Â#¿·²ÍǫΘILq ‘»´cWÊ( “¶ÓðxxtËœˆW]Õ˜ÈFï +¡ºÖÏßÓœw‡e„¨éXÈZ ‡$¼Y¡c,¬Hw 4O Ö;—Gt?–KÙ0ݳV“² sHxLšÐ¼Ã‹­Œ¾µäº˜õT1"w9ün«g¥3ùa®š…‘µ·4 `Ò=}yŠÜÒÛz‡1Lñ½Åd䢻°’߃0ÒôÃ}·²\Q/«*&õôÆ‹é¢4h^›GºÉ€ ¾ ÛýŽt;VxÁáL¡¶^>§¿‘Þ«óÑliÕmtvxuH7“ÿo5iÑ–êUÍu¦!¶f¢pßI(jÜçôSë}É-¸Ýgå[|®³‚0ê Ã©Õ¥•Kà;÷ò¡»æxTÊuŒ¢Š“œ¾ªªQxέÕÕ¼˜“Úü4÷âØßl¢²ôoT¥ j5س÷’`æ¨x‹¦ÍÂT=O…Ñ](ý{Mw,…kH„o ez-ÚæoTFw Ǩw] ˜IC‹†ö¨‘ZhÒßô`;ÑÕð3Ù܆ÇC°Ô€ñ¾Uм„^¯RºaʽJƒùbs) ä]ñtÆêÖ§Læ2¯½äJá–D±\P«©›–åŸcÖ¥?õ +²H“ Tk·epöÃÝk³×ÄÖ P Ð)Ñ´ýRr¿ÎÓÅgëz$H¾þD·•èg™ø…Ž¢+J·õµ–’Ƽ +µBI)e™Ðiz°"AYÂúCéôÒ–úŠ@å–ô¯÷eÛ[NÔÒ=Ïͧ"„œÑJX·¬Ü©àvº“y ÈùŸ»û ÇÂÖ¯Öâˆ^O¯U‘¢H«©”á0^Ç;áѸ µöü$%së 1¼–ZÄkm+=Ž)4{Ô®WÉ'ðÛrµÀ^>N÷Êaú6 ñIÜyÁ9ªbvÉPel˜Œô}zT±¶´Ù…™ÞJ¼é¾s™ÝÆŸŠg¢ÖìÔG¬êãúéÉr´‚ÿµ½vˆï¤•ço +ÝiáÕUÙ ûÙV¶EPGG'þ¤ÔNò§r”ÇΓe«àÚNh×Mz™œåcƒõ.bîìZ;,æÂûÞ$½ÂL~áy-סWŸ*O—!¹ÓZd±—Úâ¦ÿn°s«ÀörX;£º<õ½¥0š5Žšå´¨µDœNÒNÚvU/ÎåÌôÚaYˆxd  &Ç#¸BÖ¬ÖkãP5ÈÔpÇç¶Ù±ªåÖwjDÉŸÛmoñìéÄKk. Ù— Õ8x”©i–î°–.]n¯Å &-ëÓÞëmO³ VvÒV ›–ý¨`Bxì0¯‰È­pÕ5‡é™3uKI݈û_ „s¼0Zï^ó ýXÎIh›%¾×Û§$ŸWvÿ uÐÊézºÛD¡ÃSfÈã›h­gqÒ½¶?sú¶hSœÑþ—é2Ç•kG‚¨ÿV!»8Ëè5hOFïßùq"X‡ U>òrHfÆPÕx¬Ñ’ûU$¯³d;†Í$¿Õ——T@,Ë¢å|Sºš{KH|õÌ5÷„¸ñ¶ü>\k¥2:‚Þ÷qˆI 0IW ²C eö·¦õQ³ +aêOùÔ1ðšÅê(BA±GñöžabV×Ð4Õc< Cèr¬ÃÃÂ/>ëÝ=’bæëþDÍ’àe.Ù.4¯ëÓKȨ6 ] Ó9|Œ(ïul‰àqJäºè±Æð8‰¦ÞÔV·,T´,ìEÜÄŒ!ÍE¢úF`ÔcE~“jaîØÒ¥¶Ì¥D•;¥k¸‰,@F0šL#·›Íª”/› ÍjtO‚qIân}$tw7JØeèðX'/Ïì·~5ôÀrE`{*&bÃæŠ:–Kâ¨D¨×r2—“G4Œi¹5–¥‰þÃOé†Ò\ߪL¹¶ž¯zot¶¢!)¤ûôEy__—Coƒ'΃[ngo|yy³ˆ‡OÆãàiÈð؈(^ÏEÙ1ˆÀ= YÚ©ÙZ¹d¸~je%Så¢6’ša›¶ïÌ\ž·ãKw)GÓs° ëº¾xê +­Û£çuEõkÝxG¤Úï=e³\Í‹i ¿õ²<3UÙ}3'PtBvX“¯†ai»d¨•nТP‰–Ñn^û$ä—"LŠçâ͵²ÿ"B¨(7t”ûּlÝvŒÛ*ò«ÂkŽÎ7EÕÓ»A”Ä“ ažÁ·û”~1\ÇíËpÜ)ñc7чùÒEcI¦24!ì— ,딆1ªÓž‰(æÚÛ¥8‹orËz5Sœ„›‚ê¾6Êñ"ðÕ̽žZß«@Øç*z¢)”Û +÷±Šz›};Zh&:0è5ÑÓùJ‚W@äÑ1ý%/Ý@·7·?­¬~£m8‚lLø3syy´Âð®p!bjm"<,Bk¿uë±,»^¨Ì¨²cz(H™eA˜©JI›žZ,wœT"ÐOÔ^usïdwg«y„#“z®†½ý.[,1[6m‚ªÆƒe݉;OÖ]*ßFñVŸA›£¤—K‘÷«ŸfÔ…]ôN3*}ŠJw´U#ä{¾ÇEBW˜[U5W£H(h¼Å~ÔDùë›ê"ûJÞq¯ãhî’›°Î/\)êó× sRˆ*«:-Ži…⨾¢meí”w“¤e™Ô>âúb“1œ1€Áï.­¡¢`Þ°þØnSHAh«Ö¨;üÑÕ¥ÛŠËd²´a.¡¾¶Õ¸'‚›2$Fü´±…Ê6LÖÌG]¦2mTgn¤U«ÛZü Òô¸TƒkGPÄVÖ̳ª³nS ŽR†*?EºÈ ¿Sð +®j_èwU©™j4ý Yàpq<¤±üª©·!2µ¥ú«ÉYDõZnAUúª<}·„£ZqÔqx:®•wÔ9ö“LfÛaÅŽjö«³ø£«> dúŽäX°¹`Ïó ËŽ'‰ã<æuFN¥wHï®ãiÀÂK¬ÈÅÎËi†ƒ6üõéʾ½Ûðù§8þ99è3Œñ=Ö§ÇⲞj$­o=]SùP'>å‡0M¦èýœ>ð/ØÞk€65ø¡ŠšÖF]"¡>4‘ÆàäYêîÅáPøZQ]‘èÊ€¢6¿s•žšm›bµÄïiŠÕƒ´X„¾3{Ä0(ªº³í„£‰œ¢ý4d¬×%Úv)à´æ¾'ן•Y^»=‘ºª§5·ç´tR%ÛFue¥ym¼ Çæ©ÇyM‰­´§*žêƒ.°Tê ü¦b oª¸ØO®QUîR ýéV¯ž[eã˜4X‚¨ù}5Ô?/+t¿Û£GGRtT9D°FHýg ¹­†là‘L~µf˜dÈÈEÜ),]\Á ŽGT|¸MjŠ𦖡åõêE«Fiê4Ä›AÞY+<àLs·pé•ý%'‚âQ¬®@º©¶?ÁêJ)ø´kƒª{mpê µï‚4WÔ{Ëž7së۵엃ÚÈL0Òx…ЧHNèÕRîrJ'Ì‘ÙZ,|oHcΜ§šBêð:Ý´,¢w|OÍÇjFâ§½ÆŸð¤ÆŠ +~[-h e +XyW—áNªxæ §4¯ˆTÝßD Îeé¥ zƒmjûV+Í}ø=,a³±"d)ÌÇ'8”Z@@àåž;’*Hš^…c*ÂLúä “;ÀRééêi´BüÑ|6-€ú[F2·iE5˜XÂ^NSS©Ìè´¨÷ê®äb@C¸R  »áêŒ/ýþQ¼y¨j¯ð`ÔÊzF´îFâ„ T@Ï,nìBx§‘©g¨èa ª—ÇÔ÷„:VÔÐt€OUÂG&&<¤Z2PÏ“à8ƒ–ƒ!—’¡³¨6 ®íø­.KóŽÕ ì«{#Å¢áøm™XïÈ<´¤48u,;¤Dô +Ÿk¡v7@)<‹†¿Z_ÁÕA%JÁ%éµBp‡3 xéž³Ta³›ï A¯S×L¶]€.¬N8¢¡ ÂÁm¤Î¬¹»—Æjä9K¨ìZ¼§s]~;YŽ[šúu› Ó§KS˜‹Fž®6†[GŸØÕæ›>ÔúƒñRáîf¢z›Ã+äTAöѱùÍ3¾ 6 +/pÁ¨Óª%KVßv %+„nò˜ùzÃuß·zLJB,×ãt§Âs3}ìñîoú„oÉwÆ)U…’"Ë£TÕïŸÿýçç¿?ÿÿ%ÄÓ?Ý©a”â¶Ð ”ÜŸ†þ€AÈ–b$o«bÙ«mX¥Ót‘Sƒyç_ y•;–rW”…¦üCÓóÜ 9‚û/JÍRÓŸ mŸÞ]5$SLWç®ÐLKË#” ëIgEfuƒoø‰Éð\€®,8ô4ËŽ(Q3ªÁÎÀ¿¢ÅN{F‹ Õ!ù9AÑBpñÞkê±Yf@¯Sx/ܪ‹…ïŠÍÌÌõ2<¢†d«ørcð*ó~ +Y‡xªJ‘Ü å{$âæ†ÞÇË#s™ˆ®Sv¢=ìó¢üR"Fó0ì¤ä•P°7‡Ž¯îŒ±ó²0»Êx`›5Dpøhú›Û–‘÷­wðA¡ëe‹¦s6c/tè)¬]€ÛN­ïçf;z(î”ôÀ-5ætư˜¤u;lýw^]öƒ†âÊ‘#ßß|èiõ<3’O®¨œ +xÐâ7(Ó|i!ý¶C-œà˜Ù #Ëq Œ‡wE÷°¿Ï$é5Û +¨—/åKÜNZ‹o‹~©®4|\…\|[åVEuçDvîMÉàþÔ Q»¥,S·k0¾뚡ܛC 1Bµˆ<êg×Çã°"zÎ"Œ";\á ¬Âm_©±\ îÊG®'$£•§¯¦X¬Fƒ;Yåw!àlåÔN§fbÙTëZJíaUâ½ÎŒÌZ,×;¶ÐGs÷W_ËhìïJãDQ®ˆ˜c œÍÚ·×tï“;ã9»ŸÈù‡ír˶ÅèTrY „xÍbMìof­ê¯slc "s(\ ﺾnu$Û´aÚÐÜI´Èmβ/“€ÐîKå_?LÓo'ÜDòm,Üxyxíù—Ñt–¿Íò 7X¶ 9‡ó„€ß”õ͹]&ü‰K™òrѯùï=Uüi®ïkÂÏgT;yš¨ZùÑۛ’!üU]H²¨¡c׊Ìd‡q1`w:èÞ²jzI•(=ð7C»SWÙæã#é3„ ®ˆñ_šõáìëIÑyF8×Ûóál&wýsÐKæa1[&rä¸K{¬›ï¦uS¬¼<òMüsy°¯Æ–ú®Ø[Øom'ÀÏoT_/ÁV¥0xI3€CÑÃpz1è‚ù´£Ò¢<}k’Û÷ÃE:PQûw¹ &2’Êh?oÈ$gpá1Òvñбî(rãr¢I¦ly XÍ!?–eªÓ”u®³â>ÈHb°6Ê@ß.@ТñE–+õ5ùúˆZ`‡3u5DÓ{„/Î)õÎr¤té»ýCï.\µ"—EòÁ¢ƒˆÜîxI*¥ž¦§^äØ};¢dì`ªÈ®âÐÖÖ>¦(TåóaâÍ0ÖìÇúçsT”·’$«¢_+ŠE)ÅÙÞ + çJ&…7oúš]ò†0,(þŽkha•mí„qÔ|¿>j +p+ñŽDs#÷§öž“0ï«nþsýn7´ÛW:@&iŠoò'I? $Q£„”Ü?®à@€ªªêA RºP+ªh`9Œ$Ê1ÄÒ"êêÚ_‹ÄÈ5¥["qK÷§­ËEq›î»sèŽø*ÀeÂ9îjqÕ,.èh.£~ÞN÷ÏÿFT^Î][œÚÝdÉsà»\ò4ÜiZ$86‹uÞíAQrÿ&Ú¿+½ÙÊp_NXr' Ää`*÷`5ZdädPW°{›¿,ÌuÕÊr +2Qxº˜Ziû¾˜] ”Á’.÷¡G;€æÀ‚I4ñF÷Î\ñ`¢V”Ž<ö5iK‘ÓvM¸ é0’ ›*DVp‹_û¾XÒ/4,ßÒQ¹¿$lZ +;…•;» Hc8ž%{^•›®™ãóË}Ò·eá˜oVØ´;Â2@1Zw¸òºÏöátJˆ_´äa7¯9;®OD“J‡sXãaßV“ëŠ/›ý(º˜s{jk@³™¤µ‰HÞ×°b^¯±!˜"£·ü[‚ Ö5õó CРͼÚûšÑ»Ø‘Žxë™bçë¦í·h÷weöÖúòÍNo +–ïB Š’劻‚PUeÞ€ÉÞâ·üìèb¡e‰OE+­JºI`ÔÎo¯y¬ÂþûðíÈã.ñ,|R'»œÆÀ3÷Ñ™DÜwîo³¿Íɤ"6UjÛ ?Öþ쿲`P'ɵ:ÁäQØdÃ(4ñÀ¨Ï*­èV›€2!´»…ç[}WÂÙhê)ÒYŽ5òÆ5{ Оç/䈴¦9áì¥h1„*'ܸh¦&Îècઔ`nLw½3<ŽïÚùª…Šhì‘)LüT°´›­üÒÈlú@Òf§ócÞ +#âý9ªI;0bÐAe†is˜ÒZîÂs'96BŸ8¸s‹Qƒç ú&Éièl "LX¯/!¾{QýAÓá¯-ÏìÌàƒ´1ê–¹¦ÑÆ&QÐqOì£ÎõÚ–‘Ë=¹ŽMþëa·‡z÷¥ûÊ-$:¶Ð·Õ<ÕÄFh1¥ˆÓÂ+Ó¡.ÕštÜB0çà¶>ÓXçò /y§ :qCŸ"fñ€,¨<Ãhõ}%¶>¸·)|¬RàýK¢}¿[ò1bl=ußôª^EçC—0&öT+NÃÿ½?‹èïÛ>J_›† þ|/å-è^lÎÞ>I-'±ó9η˜k숾Rݬ¿£xËx¤ˇéõ ‘‰ÈSÛdýyÀn/"m [ƒ0õ”¥cIÛ'—ƒ‚)ëÈîú`‡O&týž0²„¿3Ôj¶,»‰1Fó¨5Üz3íæƒöVÕ€iémîØ˜zt­è–¿¤ïÿJïÖÎãl®õGz{Q—’€6µŒŽw8š6z¬¶4Ëü2£º¤—r^D7¬ ;¸€”FÿhT†Ûêìì„:E•מá¨4ƒ‰G¸þ®«.ûåG±L¸úH69¶BTû~E‚KÒÄu¶ ÙìvQD8&m#R|:¹W/ÚÞa¿6ƒS; ‹Ït®ëMÏò8]â<Ç5µo­‹Ï)=T޳¸Æ#Kp[wÍǶâ†éשÌëZ¥@•èôYi„íT6Ö9xû<Ë w6ÚÍ›¨dnýÎLø9vŸÛW§91ΰÛ@à»èJŽÂÆç 4šÔ+óQ»Rè!<ânÒªÆçÅ;òQðˆ”ÔÏ.¥’w”0Z.wç §®1"½Ôž//u¹ +y¯—:Ž¿±Óôst Ðh[ky¬tžê™ŒYÙ}$»íxÙ™‘Y¤Ä!çg”VÕcÇ.0\ºÄ•ç OX¢dE6¢¥®èÄŒßî—þ5<²¼«à,g²|XP{вÍÒ¬0—Sóce/€¶É¯µõ˾Ïø,Qk7ï¤Ïú%Ïîtä™0°Œ’ ™:afd‰"^ÆÜz…y9‚Mî£eõc¼×g³5l7[i˜};,Æu;çFíôŒ#º02o ‡ZEè„^ç*)PШnk’)Ä.ÞN.;¢&ù}Þûæÿ^e'R>ñt ÔG°Ê½a=Êlm\ñ®`¸q…Ù«„“gåf ÷‹ÑÁN•Füé)Ë~HÈT,Θi ¼fÙ d?oÙœÚ]4êG7™¢ÏYÂÛ«$UEì¦ýˆã9hRÙ †EGÙ=Bü’¦¢óê åžî‰àÿØ¥æá0Š +:<„×£Œ›^wM~º×ÝåBQßá<”ZÞú6Œ4ÝÜ Ø¤óõáv8µ† áŸÔúnËÖBpvTÜÊYÁu|ÛpYùŒcÎÍ’QEÙ5çÖ¶Ôc†W†½* %c²°ƒ£×f޼Uî æ°÷WEèvK›Ø"(9+ fwOl@)bª¨“Ä’L>kù wÕ?9vÊøqÏöZuUµ¥(³ñ…?žœ Al»?ÖüV£g%Ÿ:¸(œ6œ—‡±˜ëÞ®V䯿یƚUe68جìdt“]…±˜ÐFä;„;¦2áŸåXžgp’né¼QÆûÇÐ ¬ÑoWñ‹}šãý7džŽ7±ó 6Fƒt@MÏ¥fzƒØz9[qPLƒ7 ½Œe-|áó’"“ðöÖ>厳´–L&Ùÿr¥ø=ŒVÖ˹ÆééQ@£k”»Fï>ì‚ðÿ6¦ØÉ ÄÉÙÚà·Í9;tö GIU0ˆ;çÚâ’[úùGiÄ @Öè. áÐëÜU¤váï5UÈ·Öc|ÌtÞùj0…µTìdǦrO¡û”à„agèéÄO&€¼c/mÿ—yâÜÁîór¯‡^™\l®·“ØŠ…‹u†³üš‘ÇÈo'ïàधã i^¶•õ[5ºÁçHLÿƒ#ó²xð §@ Àv.ƒ€‰ÍÄLY“°-‹Á]&ÌD£Âäßu‡I†Ye'Í5¤«ßŠáŽø—Ò˜´“‚þ­€9ÒÓÄQÀRÐ`1vöOÞ +ž;òà˜d$ˆi´ëLˆà ¹*?¼ž¡ÑËE!6ØIÁ ‚üŸcSeŸ:f}ˆzÝ@¬ê9dÀ2J +ºãë£(ºhf¥iàýØ<|ç‘]ñî I‚þKµ»Ión¿W5'(H¼§5éPÀWU'm2"8bÂÜÇXâøHŒœqž7LœOÍîµHXœŠDJ>Å©w-§%;Ö0| šB!’^VV‡¯ž¬ªÁìO6 þ•%}cr̾Òf‡lÜܪ$HînêtîW"OÀ°Ä3›:ˆÅ,’e8Ôú,‰Ãe>“ñhŠüËn˜”‚‡&dÆübBZãaèÔ=7Hþ„ïo8¹¶¶4Š’ §¬+Öº¹)'ˆ(8À›©Î O“WFªÒË@Û¦*ó§ A<->9Fæô^ ¤Œ½«»Rz*ë`‰UF¼<#hH/óˆ½,Ù7{âëþï·B¤V&7¹ê}àcÃàaÚ'|p¢AGr¿`› +Çv(N$?† +RÌUFd¢yv9†I;0èòxÏ6ˆbÒà1=!ÓbÍj¥…L`a„änh}(ò5ƺßgÑNNžÉ3Cþua¸-VlPågãS_äÖµùϰ"pMÁPR3ñ¹ ã´æ×ûù¼±ˆù3­9qàYc3ø$»ç¼ +Ü&~õrŽL›øýñªÝ¡l;­¤ãK¸©7Ø‹K6`!uϾËãò “Æ·•o•Ú˜âhS’Vá•ï04r"žøG‚ݔΰ“ЦT›ü—k´$tXì·ŽY|Õ–²×;OÕi˜Ç( ìL—sÙmS#¸©ˆÔ¥&‡&\ÅQÉíaU -”–TtgÚHæÃá'{ôFH䄜ëæýmÒ]èöñRFa¸kR‘A9éÆÇc/Ý0 +4éZŸo\jõ­4‘·ß‚j4Ì*XŒºðQáTMnÔâÆ+UüØö(=~4ƒ}g óó½qCèòH­C§r(V¶¤¶ôCýÖùMU’doúc6\¤GXåVn¼ ŠöS6Zo\Fó¼ÔÝÈÄ]6î 'oD †™ø K\ã$üa€U\™„^mªøâ]­¦"$}G¼Hóß…iÄ^V󫵸‹pÇÙzJ;ð‘¦6Çá»uEwQK•y_- k†(»q\Ý!ÉjoU×(í‹ãÓõ‹!íÂßÙK­tzÉiˆŽŽ¤ÈŸtþ¼ü·‰éçKj{_®<$òš‡¸•š„nX-Ø—¯MUˆßh{–di4F¯w¯„©ÕW§ŸcRgõ=y‘¹ÇIJâœÈìåJX¼qå.™muz>È?îàTÔ ÐjE/ò’¸¦cºV‹Õ7¢ÎÛ#oE–¯« ;±ù®‡bžK”θ셧ëbgÁJò±4÷MdŒ'¨Èº²Î2æ—§éÒ«AÒèUÞ‰W©Hù¬x$£ƒ‰\œæÌ)çÉÀê"åÊ)ŠpýJÜ÷Õ·5V±C—êe;&C@+ãIpš¦¿ËÝ¶ÛØ""“·oç‘•")·ƒ–,ÛÑßiÉ‘²KΕüš;‚ ã;OÐK¸H¸^§çCÅ(;ÄQ¥ö 1F³Êœ1}6tpÞûõø1“˳Kùv–Áì'œ^®JÎ'$ƒ'X­øÏ)G•Å$¤Ì…¦hXÙ%õÎþ%˰À![/²Ë;ω†p…ѳ¿ÒÌS¤8Œþ‹1òßþ÷g!Þ°î‹ÍòªÎÇfÝ¥GÇ%á8<׬,œå=r× :*³Œ|•W¡û=%"/œö ZʲBM­éö¤ÛÜŠ ¬Ö™Ý~L|©¨¥RžƒÊõT)òom•!¡!óÖµÓÞE0JD îR® Be²}ÅÛñ?þ–8LßÎ╹¼¤Ì{öì°, '¸ˆ‘ÜÌ”mš)¥.2Pà •Ü$X–òÔ¿è8&à NwÝûn¦û]û8Ä»Ü ãLªÕoÚ·ih9"8ßFb˜åÓvÐqôœéIÛ̦TàJÇ-~t ÎRª€:Îxw„©Q0iná"-¨p&âAgQ«£òÜ*«ÒÈÑ+;D'>Ó¹ä>õ¼·³f¥(¶YýT‰ôý½Ã–ãÿ×y/¤>h~r‰&èŨ°{ÒÚ¦HZê‰À7h’ ™ óY4p,ó•dƒ`_œœôäûKE4AÖF?(êÞ§ˆa/ü€*.h+ÔÄT‹w!Û€€~._«GÌy•;—× +¤©}"''Ro®‹Ì qy+!¦xù!W¤PpŒzIDZDÔi$¾ ì¶0@.¨åž‹hƒÁM!7/S;…êÁ"0Oð„`¶] ~úí†'Üè“ó•>bÐâcZ!öcŽ"»Œr(1ºÛ)™£ˆšôÚ܆ŒœSï•£Ò¨±S©¡-í Q3ÿ:øE®cæ)ưÌQèŽ>ÈG˜‘—2fJ…·X¹übJ'ÑÊÌÀrTvHÀÍÀÓTx´‚¦+Í›‚‘¨ÁGcëäÉaI_éxGèÈü´éôì@¾¯xk˜s.î[²M‘Àé–Ê’â`2VñŒs^yxü,olX{p¹Ñø‘ÍŽà£ó̺@zSÈK:‹#”»¸ HN›ÊSdÊf÷_t”)GÞÿ¤TyJßÓÊÀø^äwC¨-ÑLû¬d%ŠÑØ×&ÑGí¬ùƒ蜘¥±,ϵà§7™Úé¼ñ `¸"“ +-pbLg˯~‡‘‡›ï}úû $W‚–GÉDÝ&=O^•Eçî…/:ƒûÉ:h«˜ÃØèþÒ}Ù¥¨ãŠmæë1ú ÷g>e9ýûŒÆÅ66Ò{Ã*ô'¼*˜ŽZgBÜ`HoZãþ~úrƆÿ:ö5ã^€ 6 ºPyIhJÃmc!Ýù`AX}¼¿ý2ýÁÄ +v*„®P[ÌÞ=£§B’ÛaLm—@Ç?n¤ÕòÖ¸ÃPûîøÞq){û¸ß§5¬í-ùkŽòÄé•"êïŽ1ÇÕá—Дá;‰gOÀtÂÍÇ´Ão¯:ªPœ§[o™„Òÿò'‡à°‡ñ…ÄßGx¢ÁB¶á·Ø‘8|¼Ü¯ÂK¥¿8½Åu0ÕWD5üË5 ®~1˜Jœêc¢âý9ñ+úìW±”ÃY÷.f^ý€ÄõÆkçÀkÑ)¥Ï€÷j`Æ»p\lFŒÇMŸªàJ\gÔ9(²‡ÎNøöFëë…l0ÚÁQˆ<í 7.PÔa¸i?¾>œæü¦Vö“õOËè‚òÓ“ú¶~«w%ú¨0Á¿ãzðönìÄ\¨Ð’±sRIÌ:šÝWìEr¸ Ú>¸ÿb³_Æ¡ û’ùdŸlMx¸@ ‡Íçl_çæ½×ìö2œãz0&gdèòÄÄÇ9\ל28dÒLpµ¹’cãºóØ¿NeT\ ,sd4Ü«dØPnÿб?+žœ•qB@p!uH-àu.޾“𑳥ZNl¼Ü£áÙÃfäX7Ø.–›/Îx +Iõ‰R¤l¾‡þÑA/ž"¹@àËFoyÚ}ÚÒ ×ÇkéÈ«xÞÍ­¤9c rãÂî8˜MŽÙ;ã«r1ÅpbÚZ èÿdºO…-ó7~Ù‡ˆ¬~µ1DËå6Ã}ª•º¼ëW’ü†íÚlNSpÅô%ûMh“›C7<©Œ‘QK´—tå¾8XÛ¤6㊌ä‘äúÝM!Ø ´¹u_tÇ]"èbÉŒè¯ó +)éXeóÞEr_7^Kv¿¡åGß)a³ÝUúCïîPhé7³™ïb„EÔ¹ATíû×yȰ +qŸZ¯À÷µ³*åÅÃTql×Kã…í–3_©F*ŸÅnb,§DV(Ü'PsŒëD3ÕiZDµÂ«¡ôþŸý*É‘$Ç÷~E| QÔB½§1@Su™Ã¼hf”gdú6Ǿd†¹KrŠ‹Ñ85L‰—u4±X KAzàä®~Ãú{û:™È¼ºjep¥©–*¾fÆsÐd3­ç•(¬Åhüuß©0ÉÌ'Úpq<µðPªCœ)MK.ªú­úâü¨8MÞKòP1›:l——†Råí:êkÉcÆì&Ï6˜lª“Ã/ÄQ ‘ +ÐÔxÕksVuþí¡1$Pn^¤„Ï̼xWƒ*Þq•×À»å’)¹$mYçÔúB›½r®ãæz« +#öVT8øé“Ì6œиoè4f>š6jÄʧéeÛQãsš wDþŽ’=Ó1"RÀz8ë›È¬:%Ê-Mv©çµ®ÇíìSíó¤ ±+ˆ6M"‹-§Q!DË^CdI;ŒSëð*£:,Ë5úU;É@iÄb Cœ“¥Ù~AØ•2CM)td¼›ü2è>¯­Ëè¿Oêr¸G”çpÕXKÝIßÎʃç7ÞA1²Žq‚Ù¾M ¡uI¡ !Ó‚¢iàZ‡âà¶ T7”ñ9A±l|.Æ¢dV;tøZm¦q½c üU€ð@êhw>Q+ƒ3èTwc}‚lrçR£o؈éµ´E’Cú¼u.,õ°É¦®pN±äT–C´)‘CÝoãN×1ÙaüÞaÀ°%®gm+¥bõõÙÕå»jO¡™£KyWQ÷¡•1jÂì-pwø9Ñ­«5CbikcÝENÊkÓ$a·cO͘®‘¡ŒEšc­˜ôL L¢kvl¥‚*¨Ñ©Td‰Æ‰{„TsÊÒ½œmÞiò½À~H×AH2ÝvàÊã½C6ªöÅ ½ ú¥9ŒΟ\Cþ“ÈsüžFŠGf#Ü7Hˆ7’ì8—StÕXµ@«ð^½ ™ q¤î¢®êùúW5\„91HÍ™ÁÞÕ—lÑB¼Ä9Ù¹¥Ö¶ˆCJn)‡çZ  +1íµx½•66M˜È~kDœ¬›æh‹¥KšUß$΃^íM-‰Îu¹´pj(3v2æa'3? ®ÃÂ. 'êÅÚSRÝ$0O%>40ә鸺RõhºUÏk«š²•´RÙWx㙤CÌ¥¥¹MÓ™Ä,ã¬q°9«ÉyD;“Ío],J²‡)8í°4B HLEΔCtÝ©Â×K"}ެ7ìaë¶/à+jj ¬Yì0b%ê‘ÿ¢þé_ïÂp<¦Ùø%óy.|ìÃд”ý²’Jø€€f³4V°qCþëœD3—öÐÄÊá¨KDNrATÒÃ÷pÅ_,– V¡±Ì)$^ØH{„çwø,N½^Qÿ÷=J‹¿Á´;úׇ>à³ø)øûErƤvãƒ9RðÇâ4êäý™z¼¹¥Ÿ½j§O‰FÑЙªJºN°‹µO ŽÐÇ´¥¬x·0S:3ØLåÏ”6~§‘@æWJ#GJÿ†D”+È(ñBšXc>oaÁyvföUãm•~6ƒ|¦^o 7è(€n‹¨„†fät;:ÞÎ!±LçbŽÏÊÓ}ìëÝÒBÕ䤳Câ@1ï`'-:šp{Íl‚îÆÒånœJï•G4þaÙ×½àÏ 3-'r¬±Å¢®Z5òïz^H +¥F"LK44šÐÆùzg"ö#t<5mRúq:sSå÷óü¶’,@ Vüuë÷/•<:d£”i£Šü¢Ÿ…À½UyÇÏ'|Ö¦ÈLÏÝ“°ø7¸=žï|"»ª^È™*+Â’Å)#„Riœ”?”ªø™‘Ö\ð£´דSÙíqV!øêH5‚¨ÇÝ&pÒ—´§ x·í–6‚à +ú»Ò¶8EÎ?¥ýOiÿŸKûPÇ¥3X(½úYí…Oø¬Å˜æ¿ÃuOÒâo“Äy¾ó=K¯‚Ýf)$8*o÷úϿޫ~«úýUõû«ê×·ª_ïU¿¾Uýú^õë½ê×[Õ¯oU¿ßª~¿¾ÙVU_5þ^ïÝÒ ;E¢ç÷T-ïõîÉ8íÎoÈ›Ã!Cƒ„À8öf]a½âCROé›ïMÌõú5yåY'kU»9ck爖YDø3<Áœe%@8ôeþ NeéT]>ÖÞ}özγ¯ï.ž`axMcªšu¸0^"Å?ÿ¨À0ˆh3&’×ûmX!©Ö¬ +Â4á£ë:¥m²•Y@|`O¾3̨Cî:ÒÏYÊ|”ß:å"£¿y§4…®¢ÆQƒ'Æ‘$gr´™lnD~Dv/ô\@½q :‡Ï–BˆNì÷ ½;3¨]Oì>É„Ôgèñ™{hÂ.Tw9Öc>v#Óò¸.Ø&/GËa“œ4ô¹¬¡=ùàEÔ&S”â˜_Ûq··eŒL½ï1î}>o̲¯~Ó¦Á3»Ð¾8QœPù›s¤Gñƒ·màÝ +ÚœT—`4rðFƒDЪM@êo˜JsqütOF'ÄñlÌ#;mkl³²pôº::,®¸v:ϦâŠ'û>ù©'sÉãyC'Ñuž[`žÅ¾ö)ï€.νlÑÇ·àœLíYuß×­ë[ÆúlTv„S‡™d‡×vÉqBf!fv`Vf£‡ÉÈ~5аz ·s® &΄摃•}*;ASÛTåOábcݵ1ÁÑk†ÞïóqÃ/`Cgý¶ý×Õ’%ɮ¶ò6Ð}lÀ¿õô´jÿÓ‡$‘yGU"Ã6`,’âíeô¥¬rC¿\0už“‘ƒ¬”+Y?7>Ýù*îAA¼º† Ô +K5ÞðëèNÄ>bj€z¢ }´C+Óe«ƒ\deÏI{>訽ú’ý}#þO˜ÂÐЖsÕIZÖ¾aõ”«pÝjlÓz–vÄ3iqíjä…Äc‹ƒ9YOé¼}·­H¯'4éRR>6ÃözÌ÷ª³•O^Ç4ùØ(+ÂVAÞãèwy«×ÃÆŸØÛøñM +W\úê™ÙÔÕƒM&û]K!½sÑ:°ô7«¸heȵ*”êœQ…4–zaÔH6H·QÜBgP¬«ÖºÚx§˜Â=òž}$áÑÇÓè +Ab +—ö—}†ø‘®7’,Sd ‹(%è°trÌ- _ ×SCRxQŽ1y°tî‘RB $JH¸üjWÜÁ목-°šZbÔyƒuƒ.q]fÝŒâ›Ô +,›Á×1ú•ÿÔ-€õ[NZ$›mN}.û +øM V$®EÃ)ܯÐE@a[Pªò?÷ã¼ãß; Éq!©9Ø’°BG©EESÇHA¶ gc¿³€&›‡dF)¶¬ŽzÔ‡{7)}¾ƒ„±Ÿ°|ÜÙV‡íØoX çz“ÀJ=·ÓÌÐl‹Jâ©{±™p•_&E†V•Ó¨Öè% ?‰£ð%¡uw5ÔïÞO©1B‘:ëušíË«zZ†ÝÏ䡚!õ¡rÐ5ÐÁÒÅ2K_¸¯?’‚¡¬]²‡°ø¥A\O¡aø«œ£öõ|!´|—Ho–Rt"ITÔ¼»ŠÆGÌÄ ÆØ„ c Ëš ˆfLnÂ*ëü}_SŸo£[k_·fFÁ™ϰ<Î|“À<®ÛnP²¿²ô¶¯EØ´†Ô\0îÓ™š]á^“¼äŠ|iZ2„UVÄ_W£ÔÈåd|cGUª·W“†Ë2„št¤T!IÈ„ oÊfÁSÔ-âJ‹n~ήêꟀ?R‚$'‚Ü;Ù¥ã¥ihtUXHW6Õƒø¯kK{b‹Ü2ùf zhÍØµÒ€"Cr°¼k:–%Õ„d ¦‚…äâfŒí ¤„βû«T$^Øô:lóÁ¦Áø=ëæú•¦2[*ï,£é*Ÿ •E˜ãÈß‹¦v8u÷#•¿Ç°ó#K²å³õf“w•UpSŸx÷âD³ú¢$H#e&æø +†¶ë÷óÞÂ,&BcKnjÑΙ%qïü}޺͖­ƒØùB>"sƒljû4@+üÒ@’’’;à‘&ÜuwíÔú"¥ÉJÊñPææ³Ç¢ý{¶µož/¹$ߨȕ3A¢¶èR9°Te9¦=ÚQ>ŒS}=~ëtgž9ÕAr–xâzŒä`Õõ,*JËâL“­£¾8dï7òÜ Ù¦êLÕ¢"2F,üÇ“_5¨‘„æÊ[ãy0P"f©Õçj1NâPD*¡Äîϳû¡¡»#ž^7%ëó¨^€t ]…aõù¡7s³N‘“‡ô:nNÞzt¯ãHy‰7¿_ý<‘~æ™Ìþصz™ª(-q ‚Z° +QÐå°«‡zVú³ÕÌÒ2äsfM¼B—ÃNœxJ?ìöì1õnUb¯Ž9B¸›Ú×í©’‰U4ôÈšÁzLÌ<õR÷‰Moc¬»…•›$ ÄñßÀßÌ ÑCC£±Âiˆ¸øƒš  Iu«ãf¾£–™$pL‹ œ]M‡³÷`˜‹,|ðV:¿ôNQJ ޾öµky_]Çóg½Ž…†ÁÜñ·5o`ÔŒÆYéG†pEFßúúŠó# ̤•ÖÊX¤®a¡Ø£…ØU„‡m˜ò*±Ý=¶ÎèuŸ~ZÌÞ wä£÷šWIäõÜÃOÜ”1Öž…¨~û¼gö)J."ÂSSV)øC¼…ÙÏÿŽ^‡æ +ÉR¥âÑö¯À?Rƒ\çŠ2uÜÈ/ñ†{ÄÀ¾¬…rU…  c–Ü#U‹ÃÐàÀåj +l/gm¨‚r`T{àýCÅ#x•àØ¥ò U¦OÜÐÑÇ'ä˜ó¬6 q :l Ñc¨¬³F…ò%WQ~æYDÓå¯Ñ%©aˆ¸áµ…OçiѪ³ƒSœùG–IŒ 2 RIé Ú›¨-0Q ¡bª'¨õÝQ6u„]¯W«¢áŒ _d¹ËO£,iõ€‹ËŽ¿î.'IÐ7Ìö“—ürL·°7ôéƒÀAvH’ÁZ¬ÖÏàçd èÅUå5­é µ½sÑÚºÕŒO¼°xjj¹u´  ;N¾*«õm(蚄Ɔ&úÇf‡ÁC’ëó³ÌdÁ"\U ¥> ¶»Á~$ƒÙ\ žñˆ‡Òm]‹0 1åÍ*̧” °ïgêô•—šoN—´¨-מCHžiƒ-­IeWÇÐ#ê[§\X¡¤ »GꃷxbªÞbã<…a…°Ô&0[G¼µ \<¡3ºîù û#1(„d0V@¶jÇ@‰îkøbœ„ŽŠÀ´™j?!¦¬OÃb7æ|Îí‡k1å[^ûº§õz#;‹R…Á²s·‡`]U¬õPJüiÁ×ø9˜µèÔåé¨: œ€@Ò‡BFdR]o ‰`.ƒ=-ëˆBí@–Ä#/†[Hiã•'îj,i`ô*+üG–ÝùSá$>Kµg1Ú:v÷Ø£yÊÐC„z¸ž¶ë·*'ÿÈP”<9w¼Ñs‚Ê'´Úm >Â5`*Ç'î¯Ì ×eÈø¥#•2! OÁFœ0xe|ÿÿøyÂësŸòèrDËí]Ç*ƒ©«MOÙùÔµ6e½±>ò»¥Kè§Šö4ÆÇmðù$Ü<®®& tÚF6Ò‹1ë´ úš1üéW&˜LÓ€ %uTFi™ãZˆ'xdÔ䬟½î#‰Ôµi«+uu¹Ðs“OarÀ30}ÿ?ÕÕ’$ˮ¶ò6Ð'ü›õ¼i×þ§I8;kT•Æ ó7ïÊÆR~+&_›nÝy”ÚMsš©7éiòWšÎldó# Žoj­¢`‡Hšê×@ƒ¦?g_!¿@ÈÙ˜Œ``}¨0t*« –ÍR¢±Z’,MžŸvê|ÃÆ büsk¡»ó…·¶ÄX¼i€)fžçÌÊÐAq6ŨëRљ߃Þ9;¼ûßc +®ÎºltæËÖóAáô~CØÛy‡ú‚‚H&ãÐm§M¥Pj”‚‡ûçÀÄ–E.—L»6¸/hÁú•&ÂHñžÝĔ͞9¬4Ÿ•C©QÝð-d“²‹¥€) Ujï˜ä|†!2ÖÁ$Tk¸²Ýâ–Ùõ°«.…&–?úâÈí'ô8€;DÁóM™u*µ)Å5ÝåÚúR“Ÿ·Åó©˜]™Çð›ºP„íp…8Ž‘ëéºÕù\ãèu“ý,:88Y `%6'Ÿˆç±¶â|*:Ód‹ŸoxCa Å–¾®]·qB"!­nsgp“HƒŠž'Öo,gVªØYŸÒ @i(°Yät”l:áe#©sh¨¥Â‚GiFʤ6˜m&Ù·Ò³Å5aÁäZìy0‰‘Cr3j~7Ù°¦~ÔŸº1.i)wAW‡8&‘éã‰}Á —Ü~"aƒTêWiX©dØ©ì* šÞà´ËÆ=ˆäÖk¥â¾<Äç&˜š>Q2F«2aÓã¦ÂTÆjn]+ˆ‹þ¦ØCÏ0ëxï´Ç‹_Ó¹ƒí¶}‰µÊ9r¹l…uÛà„ƒ‚};ƒG…ýÅú‚p‚yŒ£m $£4”±¦¥ÚNާ\|551uååíþoÈI¾ˆ“)¦ìSøwW>k¼¦†ÛXþÌÐ1º0,\Ðþîì{ê*‘²¯ë™†Îdƒ3ÊæCò™|·3ª)qæ§×«îè_A¿`Ð9TðÝ&óûPÁŠ“bGlVI‹‰¦¢7]€tá焨û‘oÓê6ÄȂްÓ0OHÿR¬†±É2’9:§î ¹ñEFèo9¼Å—¶sµ?äm<Œžö+q1”Ä]*°¿@_@ÇÜë9"GÐx\Mʹ`t™P‘O>$d¯¦KÍ¾í¨¶‘ôr•ÞSC¦G¤²_§”³ê ] J.ÈÎõ{«–D ç‡æ0QÑ(ê !ëƒkpœ×‚5Ëu‹›¿âþBH;WÓŸlœ›šm-SR@œ'znŠ«óónj.hvÌŸË!Îî±ÑÑ¿]×QÄTù¥8'!‡†Ø”â=µÄd0Ó+ew7ä-?ÇÖÙ ¨ÒQ»Wíàçë¹ì ü™Î“Öß@¿€ –Mlò°ñ}Jãçj(3LȽdº`÷A»Èwú0êEs×l!7™x]Ý ƒÚK2§R=®¥†j«¾è…YL]ÊNœ Ý[“jÂèEìSÓÏ8Ó½…úV‹Àÿ )À²È!N4‚U“4m6ÿ +ýàŽ|ù¼"©E°æR¶/Ò¦ÔM)ºåé£eŠ(è\_O¢4˜UI†6az;I2y¾uˆ¤ƒç™é5}ïÒ»ük N“‹&} YÈ?øw°O–¥ôtÝÀFS ‡l +«H'ñè @ÙŽÀ2ÃOiPÆÒPxbÞ%c>¥¼ìÚ@ ÀjåÍ'lè-ùƒ´…Lîžz=q;J½P7‚¦4<Ücòf^ ļ+ðÞ2=Ž^áèN4é䥉­çJ Ç–ìz6Î2áòÛõE´þù ›<áýúL°T?”ù,RüøÐÐ{—H–tLJžoÖõùbuT2!åÑñºlå=9³SÑ¿wÄåYZj1 IŠûòà˜‚¢S19ØóóÍ`œ …z îvcs¥ÖQ7€Â‚ã÷[Y PßHKð\Æ®™y•,éÈW ”8µªµj,Ä_)8£%ºWÁ˜ýHvÕl×T¦FMà“Àäd¡m¥èÿß1®Ï¦,Œ.VÔìöé8S~rÞ ÷Ëï1è¸Ç;|ˆýC^ +íÆ}QÆK4,ûÓ"+rR ‰@Š]²Ñ +û’Îo]¿É–¸uÔNtxÙÒÀõ©}13`êIsÄO¦Ä œšÔyM¢"êtWUçþÌäònIV;HÄF9×ÊÝ%RMè›5å -þÅûBƒ`¦ ¢¦Zª¦œ*)¬Œè¦êŠýØ9ú/Iu¤ÅD¡ûòi=†Û8Rð‘™‚ÿ¯#ADV ]j\Û »’cž}ïíª±J§qŠ9ïNÂ3ç­1ɪ‡Jã1UgÉ­YÑq(½ãcàÁr¥A7úPÃ*-ÍïǨ€ƒê.LlR&ÞJNN'´ytV_g ¨ Ý9ª[hÆy²«ÐF™ß£ÁBR4ÿ´L¤Â¶îã¢b·z2a×µ^ruÞl7ÆN¿Ò,¯;ÏØŽWÌߨÛv©nš¯a×ÔtKE÷N(Z”âªý«%陂3ÚÐK£=Âò +Ý\ïhz®.VÁ‚é×Îv… ³]t5Èó)«Úã6›lékTÎÖÅÈúRqálO‚kÔC!6>د…ïª ½oÞPár°¸Z“µ™޳Ò@¶N⯶Ù +Êш7åß;å +§¤^©¿Ô£®03NùÔ€ÿ\ÆçÑñW YU …|lॖ&QÓ).‘c‚¥ïIëTÍAp™Sa.ºÙØÅþÂ~“6"Ôl{Õºó»?í+TC{טÍL›üàT±5¦\ÏêþŒœ)j½“1V€=E“=c»Êj evÕ 4[N7Ó¯¬èôM!¨Û J»Qr@ã7L£—kÇWØo\€m¦Ðlu,±ñh(û–+±¦æw€•ÉÕ0мô"ÿ‘^5¹™ì6pïSø6DýPÔ1r†‚qÙäüa©nµÇ3xÏþº$Š"©I5\Ç+í(Ð <4/ÐÖ±òÚF C‰p5RQ®êÜú6<³I›l|D{}š™—Xid¯%Ûñh+œÌ¢ž ŸNaA°ñÞŒ°Œ:H©¯¬îÉ©Ss‡¤ÔºÑ‚,/#`ÉË5ªæž#9ÈÇŠcÉËÄ€;GWV%Å[8~;X¼y^‘ƒ¡!LfasØGœmû +7ÇíTlºT7Ñ}'>ã:̵jꈴŽë×ÈGÖŠì…’ŠFšJŽÚÚù¬â6j&£oÉ:8q£  d]¤ß"UlÛÕ3Þ—’µ` <æá÷¥$N›Ê3_]¸…ƒ›ÔÒ.Ï>ûŽY¦}D…¹ÈÐrÜ#À+Ó0[~âLÝñÃÈnDpãm¿Jüàш`Ý}½­d|…íüGt“.@–g xßQ³ÔÑ·]¸D¶[(÷m^§ +ékrv|¼üËÇ»ŽÍ^äí|Þ:~Àô@×`ON×n,Ñ2^#n(¢¿H*Ø;+zÔ½g»TÜ#²ìÐRóÚc“ž8Íhá[½¼í¤54lG^c‹zùõùñÏ—¼ü÷U^‹ÿÉkUt«ú*ê +üÿ¼`ƃT¼O™þù†–Þ^ñÉ„Ÿ8Î^rÑ·Ä2a[Zò÷Ç Fǽ„oÕ/÷~±ªðÏ%^ßüܦqkÿªˆm|oëÞ2ƒçw:À•pÿM.»€o¡kmõVÓ¦Ü%—`󴈦†m³º×½¾¯°½õË,§æaV -÷æ>-ã’¢¹>MëWÀr¯\D5iØ|Äl^1›GÌæeš1ÓGÌ:õ6L_¡km6·YóŒÙ ÿ掙Dˆm×µuDm]†Ù#jZ팚í¨Ùµµ[wÔÖ5)¯aT÷$›Ül““nrðíA¸OŒ ʜۤ;YwÐN.ÞɃx’Ì“‹zò°ó²òdŸœô“›ò$ $åAA¹8( åb¡4”%´m;ŸT”›‹r’Qn6ÊIGyòQHH9)II98))åb¥RâÍÑzr´>9ZÉÑzp´&GëÁÑz¦Æ;7>“ãÎŽÁÑO5§y9C5øºæè÷jŽ~Ysô[5GQsôÛ5G?Õýû5GSsô›5G¿¨9úš£¿¬9ú횣ŸjŽþýš£¿«9úÝš£_ÔýNÍÑßÕý³š£?ÕýfÍÙ†ü¢æèŸÔý²æ\£‡ø_«9ú»š£Vsô§š£ß¬9Û_Ôý“š£_Öœkôÿk5GWsôÏjŽþTsô›5G¿¬9‘ÅËû|ý÷£þÌw«¥½j—é¯ÌGýñ+â?b‹~¤¥ÆŸÕe#wÍÍÓuͺY‰ð “÷9*P™+d—"øe,¤ï2á£Ûqƒ>(¸á0æþÒ°J O8WÑàËÐè–÷˜™‹ßƒ5D÷7¥†É=Õï%݉éÊzš×:tëÄã󽕹MØ Ï”#ª“* +Œ“Þ¸kÁQ³ë5ÜÉZ¨bdÊÒ¹bªÇì4¹(C>%õ´Å+Ö¡PÀ;E)1 &;ü*îËXÛL,‚”ëŠð4ãÑõ'A:ƒÕ×ìŒ œë´Ô̶•ݸʊÞm¤‰±›­˜c’ß~Bò^ú¾@Pj B. ÿ=Fhjz +.ÌÕˆŸ:¯ý¸‚¿ÓÁ¦F+‚¶¨PÐ «z%XKÁ¥&ü ì{–äo@;ç å:›„ÑÞЬÞH“&TÑ5éT ycZe³ô 0¤m9BÁH(+¨5¡!Õ¡¿©O6©pß2àÉÀÒEÄàØ¢\œ¬5ÊM ÁIÁ$á‚A®¨!ö&›—Ч¢Ð°²s]0hÍ]]œ$¸Ô›°• ÈNîMU ¹&cíãw`ºYŽeMb¯ŠUíüÖ¶å5.˜b?×ÐŒŸgÃ=ºø÷4~€+Ð|Ç +GÉè¥ß ‰mþÖÊ#¨¶Kó¥†23K5¸C¤ Ða0h±ól (¨³Þs“֗¤e54Öji$ɪa‡Ü m®‘¨¬Ñ±EÊ`´ô¹+6[3XçÔn~E#ˆ¾6@òºçh°Š§'Âè+Y1l5Ù?¿Ç¸>Ûˆ‚HF¦6ÙšJ#ûZòJ&ù¼xöT+YFÐ’©¥Gž©—6ˆ/mF™ELqÑ`\!‡kEò’{(=Ú°Ê5e0½È®ÉoÖœU‡ÐbÿÁ $G»¾U#:T0¾[>¼ª{0;ý”}>Ï™–—§{^S6 oøáf‡R†$HJ¬=7x7sÕ /.žÈüîånžÈºm;KÓec÷©ÛþÈjéÒp»ö¼Öî)©ÒnP¢ê^°±rë=vü2;Y¦€KXÆQéܽů(ÿg»\’,Kaº•^AðŽj5íõ·%Ùp+¢'O —¯±uvÌ|t‹¹Pq„Å÷cƒó þ´OöË`¼u‹Ãé“r± üÉäœ4TZ¢g•áÎMÏ2ñÈOl.«ÒOhoÅË`<‘ð!6kÄ-ìPç <²9µEÝ«¡)s#èbµ‹ÎT)a`1ÈÊØÄTµ¾;ó…X}mx¿qÓç ¡~Kc ñ©QáWàË {.=#®sõî¡ôò#ãÓ__5?Äψ`ª“9D ®ið#;ˆ¥~¯EΈæï^ïFj.c8xHBYþŽ¥ò£ ~©;“Ccu¾‰C)IÛ¦ÔÁ{ô}˜r"ųÐ8&¾•³ûC9Z …M¸‡áƒ¢µŠ8ר·klŠÕxù{€Â‰{Ñ:²h‘.€$¡€% Í×ÿý£Ž¿5 %É¥ ×R +†tó®Å2¥EsÃÔ… [Ìè̾3°¦L=iˆŸºKŸP{ÙUhÿÒ-Î +•§‘ZãXM=º"/ Ô°Ÿ”X%Z=¡´"¬×8 ]77:cо¢'H¯±ìSMŒ³âÃÕ0Ì´Üç<àÖI<ùn\!¬  +Ô8¹€EÙÔu°kG»ªí™}©y=Pœ¤,©¹°v0d,—´Š$νTø«÷Ð(ZÍqÏù¶ÚZürèÇà¸=¯»qž•Á Íjgf_jl˜#éÈLG†×É#[¸]ÛZ^XI‹Çó”ŠGÔì¶úêXÍx†CÙ±„Î<‰{Ârõ.üx‘¯ªåûj|ãð~P Þ oˆŠþ_…àn¶˜á+!®¿DÝŒk4 pqZ®Ò ^“ꯡ­Ü‰|Àp—¥,C.Ä ó‚VéR§BªN8éµ"j˜ :ÎoÞCk™½þP–櫾Ò‘°\íµ>k1qÂz#-!jcߤ/Wqv›˜:Y.¨6U‘j´`ð³èë~ØP<'K¢é UPÜ Ur\é³£oAÔЀb\gÈN¼Ðzצ 7å@XïNœªãÖÊT#еü´¥ÌØÃVå ¡hôOô}'¹ê='t>ÄÝÆC†žüWã™T–yÕE¶§×ˆV#´(y&`+ó^'Bål„“,òå1§«H ~Ç¥ fÜxò¯û<Ä‹µ˜ð6ã ¶þÕ‰-q#Áo®Žb;¿¦fÙøCÝÍnçãgÝrœC ¦Ið©ÝéÍÏvÝ¥š‰ÏJ-^G6N–\ÒÌU6bHj/W|®®xE(ý‡w[wŽÛÐ~’“6ݼTÕ[Þ+ú–z3Ú•1WëT0ŸÊ±†ÅdçåÞOd …YbŽÐ*© ¹{”_ÕøûL\˜åBŒhtµ:»ÎJ5+ìÑu +`‹ºÆÆé8¥nô] ¢á°Š™­a•¶âð¡÷þ´ÂCu-½ª/6чq}-‡¢íˆõ\Þ6Ô<RPHg7À\[¿Hý§Qµ(Y|¯É“‘‚à*bÉJ“ÄbáƧwˆí}„…EoqÁ4WüÐò–©EYÓ¼¤€²BÔ­K5Fжm=6ºÑØ£QÙm~ÏŒ[·Ánß›HÆÜ4!ÿ‚xc@IxŸ”($ +aÏP¸!úZC‹7ΛÇoSŒˆïƒAwÚç=‡ÊѾbʮ°¡P%!{!šÚø Âß.º’Ø7ÔTÿÔ5iQ£,R!ìë§/ßH¤GŒ€°ªÎŒà~>ª¹Ö®€µÊËÁmµï–p†Q›=rcØŸÖ¸¶b±ƒ*ÏÀöN|㉰uèõ-c[?÷Í'‹¹èK˜¦ «g„ʘiÙŠÑ$d?ÏWfoXæÅš“ºÂKž4Á»\äE#ATY2Õ³¤­w È“«Z·ZKÿ¨ º§»lÃ)ˆ!£uÕpK6³Ä»UyˆCuLÞoØÕÎ%ïwi/¥ 7îd½`ÄNœ¹oc |ÎoÑ·/ŽÔu +c¨µétùPV.ÀƒÑmäNS0 ˜ô®ü´ÊÓh£Èën¼«<¢rž%t‡ÆW¦ãj‚[K—Õ¦NH=7j«]…ƒÙ—ºžÕìseeŒ¿.%.[÷/ç”Ä5@…ÙØg„;SÉyÌÆ˜ 8uÏÅ(67·¥)}…JõZÝw»_ºG.ßqÝAï““.Ÿ„Ëú°…øŠ®°FЂ  y‰x®Ñ3¶qÕöG• ˜Ðþ— ²ÊDƒùʸYÈíÿòs"&’?üGGxãÿ@-˜Þ" ±Œ6%¤ÏåÿXf·}_åÌ·RCŒí½ãÞ©0ýëASù·öÂæ¯OzmPáôˇ²˜ÃYa¨¾$42r +åÏGî¶Bׯö¡6Aª{5öÚÛ´ÅP(*@®‹ûΰ¥ºì Qí±§–y9ÈVWmÝõ1lϾàR¤ÿâ +;»êœú’n,õoînDÉ"ÂmØ7Ë÷ºQû’à\˜ +Ÿä–CÁí¬X¤8WmœGq»2vƒâ –%Ź|÷Aq»ù‰®¤8WHƒAqPÖŹ6²)Žê$Å=UÚí{’â8ÒIŠƒÚóQœ¯éìq—á zK†ƒªãAÜ®Ì!qPraGg´l<Œƒî5³«yIg´çslÐõcÙpÞ×Âñ*öIŽ uôÓà8(>$‹›*VÇQ[rfi59.æ¼Ç;_Éq¼ó"Ýxú|Z…j[ Z‚¬“[… ùÍ”ž>ªîù\·ëq²õ‡zÚøôJÐ@¦Oc–΀Í5tXª\]÷Øû ëµÇ§usñt•WÚ…´ƒ¢•&ÚqœúкõD;ÌÚj¢´ÖC;׈°@;,>Án#KÔv˜sv{:êžv®‘LYwòDEv.ŠðLFdO¾CY=ù§×Wb”^GËrRU“ðµ\ÂsmrþUǢ͞pdu>ÀsÙ´×)ƒÖ×ÂCu.ëô°$<(n•„êÞÕ¤ kãsg‘w£®ë÷F~–Ö®LËbбæ-K^MÏE(¶™ì26+· «ÓàÑ_½FåíüÐSútWM¶(­ œgoyÇ]O&ÜoÿÓPØÞAF} +ÑF@(Ú{ªók«©ÒÁÒS¨x\2FàQóƒJøë¹TKsb Í:Ç»‹*£çx‡}òÕ™FžðÌw½¿‘PÆÙ¡„Àíí iéh;³©ôŸQ€féTD@aùÔ•ê`Y^²‚M:uu:„&Ò‚uS°9aÒ´£NOˆy?Ïí¦˜êØÔgøˆ0ô找hù7wŠE•TïäAðk#až¾j9m“1^ýt¼Í‚ñÔîÄõ³©£(8¡‘‚ëÕ&_ßf±,$Kù#™ÁÁ¯a¨‹à'Ö1ð&­%ÜÅ´ëç׺ö€+¡Ì¤Pük§Ï5øõé¥þQjøtÄöú +Öu†v9ʼnL2+.›—Éàö0 ÜIËíïjRÔ PW/‚hôðµÅX_[ðÀ3Îwo+š™‡ï‘ry;'ŸIÇ>”¿ d=Ö›’6¯™gǨV¹c9#Þä1fú/Á2ù²Éá ·^é±àxužDæötÔ©I1 }|Xô×rNé‡#©žR|±Öyv9qp¸évo†FŽ©$—C{×Þ¸ö¹¦ ÍzñÌp#µ‚Ê©d–rçµFÍe4Ééˆ1Û¤®ùëÎIkFå0^×á´›zíxq˜’‰Š´ìÐWöc“ýBÕëÀçÏÐ úNõ`2¼c¼%Ô­Ôf¤ztРɾpîd +Yê'' ˜ò‡h ö¤=Ê SIõ¬£´£vÑÃN™O\;ÓX8z¢ XŸ+ÆÓ_Pª–`EÚ;di·(S ÜQÅzc†L=ÉL±aÏß‚åOf&é<Èôsæ…žÊÿ‡`H­{iðC{™ã>„Qã:c'þIìÝBȵ—à´¥ÍyõY•U»'GR$a`öŒ“õ„g³õ®ëá°r2¬:Èvë¥àÁÅéë Ú}¬P“« ¼43fÑÑÐpÒ×ôžåÕqå¯n}â• 4ñ’¼®á +7¬²dû£ðñfT:®×§h3¿œE1ÿ.šyõÀþUü´‘nj‘"’?GzG>äïÎMŒ!º——&S°PÖ²Œ)áÔþÂQ-¤Iúý´³þ´ª•r²ÏS3Âä˜ó¬Gyk’a:d½^\ ãбÂó ïcI怰` Mu™FêÒ 5O«sn!Aïl=£:a&b•nrÓkvö¾Œù`»jZ0ŽR-í~z +*¨k~܈MX”î°ö¹³Wv¥X#CÜ-/Ò¶‘:]ãú"k“2'`«›Ý‚ uó\åˆ0ýôB ¬¾“¿sØr¿Ã“ÛÐÚßDa;I~„;‚ÇÄë±éot¤à'gÇ é­†påÿH¼bü42☃0Æç`•’”J¡ÃŒfªÄa5}²8o!#bpÒ>âZ‹ÍÓô|p°ü§OB0Ê…J¾)š.„Ç‘¾7{‚y™¤ÓÎ!caûscF[ Ó:ÌeÏú2²À¸ûªÓ§–ºî`ëJš§µ½vD¤ú2dc,@ÚM ÿ>Èü¤;À‹x¤¶ðáLò G’Œ+è,€Æ‡¥ ÁÛƒ–éƒ,RÒt‹7Ûót#e9ýžŽÇÿ¬ŸU)‚<ù Ëíž¿ÓÊ QÚ¶^8²’_Aô7~<éÇÍïyý¨d†ÇÒ¿¢‘̰‡e2'>–‰7È žUŠ|¹º +^ês<ÊW5ø‹ööëÕE È’°9ß²¾dYÆá¬”ö'ßç¸S´a´Z"7>—–––—9NÎmCï=e`ÿhõXâ9’À B²–/d-S£hbåKËä£ûoD(1Já?!˜¼h”B‡"ý–B‡‹¿¥P}g¿ÜÑ!ºsqG3/utý[ß^€ú¥Ž1É}ÔÑB¶ÔÑavÚù u¼‚|¥;ºv0GœµôaŽn šà×ö¡ïYúK~_ÌÉÌ1áǯ ˜#w_âˆÃu<$®¸œæ'c_æèЦ\æèp‘ë%söòWÌÑ᜗"H:âèA<úKÄt¯Kûzˆ£ Ìs¥ˆ#`ÿ˜ã“:^ÁªbóœWK®9Ü¿S¼õ¯!ê¯cÌŒi40ö¢ûþ‹a¥USY.ö+*•J‰Š`/눨6gñµ/ëˆ0Ë:b§´†mœQòejú§uÄA/§8ggñIU2Ôr9GT¯!—s¼Âå¯sŽ|»]Α‹Wçõó"¾×àssη(Û:"Ìù²ŽW¸¬ã5`ÖËõvYCÜy«Î:‚nùxǸ¬#vÇ*³¬#SÙ.ëˆÌ_Ƭ7ÏÛ®K­q\Æa—qDÕuGÄæþd•/ëˆ0Ug1ƲŽÈk+—D˜–“œ³SÏÎ:â^òñ‚þYÇnëx ô±(rYÇ£^êôºZ˜²¬×!§1òɰ á¥OãaµÒb.14yå˜1pãsQÆú^˜#°b<"ÞHÿàȊA?4mÉ>Ð#,.«¦?ïÕk¶ø»[¬kc`yÊ<ì뼯- +¨“Á¬c6PA Ó3zY*Î0ç­òè½ùç]ë´{»ëI±zº¦GleÀb0leð¨WØû^]ŽÌÙu®¿ì¸™¬œÉ.K"–)çÅÂÚû–H  „M‰D8J_©ØRóä4)÷©‘ˆ@¹©[i[#£Çi?Gç’—F"ÌQ¶Fb Œ¶4a¥i§Fîpjä F2Ü"ÉÅúØ"‰Ùõ a£cs=/e8hà(‘+¼$rNövZÉÍŒ¼«9SÊ.çHx45a¯mi$SË¥‘ˆk^‰(_¢h·4êÖH¨ò¸ç–©‘¼ãÜ·FZ¦F2Ìei¤ C¾¦s€ɰ^"ÉpŒ-’ü\jK$vY"ɽÑL‘ä@oK$y¥Œ‰¤áÑgUÑmY_Y…}lK$ƼDr‡S$÷EÒÞK$mõ±EŸ¹zÌè5õ­‘¼Å\–F2lmiä§Fîj$ø$k³ŽN‰$ÛºœÙP!¹µ*[!™Ç±Ò.!-‰DØX¦Dr Æ%‘ s\ÉÐô*ÂMÊ’H•Q–D2¬cK$rœɈÝ.I®yK$¤m‰ä­´î_°N‰\á%‘{ 5>„yÖËoW3Ø‘ zÆDWoøx,¢ hß?Õ€óf¨¾pØæçÀWÔÒmïÏ„²ŒìÌ¿TÌO®µ§ÿìKWŒ@'ç‚+ä¿}ÌÐ6ô}…¶][ÇNâÏýíãÏ„Oþ÷GúüïGÌÙ™Rü“Ú1-ñóŸÿèä¿?…“Q»ÌAÊ †²úÛ®óã#m”õA7Õk±ÍÀ6ËÝ‚)¡¨¤Ÿ.¨óRM/ +Áaýrì +ÂkAõ B[#XUÝ‹yš¹J™(\*°NÃÔ˜h¼ô-°)ÓAj ôP²a…UÞ:©xje¸4 â9õ/¥ÜÇ^t˜–$ ÀlÌË”"ÚU (4Ê-p!ÍZÂ3'b;_‰ &.z#à +¬ñ]ì°`‡‰ìVƒÁJ´ÙøÒB¹ŽÌ¨&¸ lí«(Ùq=¨ZÜqÙ:Œ×Ò¯¢øÕ&5-RV ÈvÆL+¼øŒ¼N$Š­@3¥Ñ¼›fÏ„GÁ:êtCì²PuÇêŽqAf™×+¶0МäÊì éôìHU± ŒÛ-ÃM螢å¾r^$ûÕx BÝC³¶œË¼ç@ ÿ2 i!:*‹ø„QÅ# ùj†8óîÕ vYo‘ÙÉ’™$KdìLÒ(ü#y®;:ŸJàºc0â.…¦7è´¿>þü—Rj“FÒôÏI#Ž4ÒÞ%Mô¤‘ƒ4ÒzB³˜ˆ½ÌÂÕºu¿¸GâTz`þäÚvu-ÏAÈ‹yü GòäPîAÇ; Gø åí@yv(w äq8”W‡òæÉÁ|<‡ùp0Ïâaž=ÌÓOa^ß¹¦ñ)Ìc»ƒyu0—ó^Ћz9€.7@/·@¿Åyr8‡óx‹ó±qœËSœßTs:õvŸû vëƒê»>hœ>ÈÛ âl¤Ã•[Ô4[†é‚ŠsA"oº |º ¹µAÉÛ )Îõô† +‡J({ä{‡ÜN$‡ò¨T^ Óÿ4ïŠ÷?éð?=;ÿ“|ãPÔÅ ¾ PI§*7HNû#ã°?é°?íÁþ4oReÚðþ§wïÔè>g ö¯°þyç Í3&žŒI·ŒI/:ñC{·sÈgçÐOb÷¬8mN›þë´¡í¸é ÇMËã¦þ͸a7ü2nŒ†iS NÆi£yÚŽÆqCyÞÔŸæMy#ÛysÙ£•¶™7íž7æMIó¦Á¼é0o4ÍG·kÞ œ75ÍÁy£÷¼é/ã¦Þã†Ò¼©8oç ¥yãlqÍ›Žó¦åySqÞΛþÿ™7 æ ü)ªá•ì<¨èAFjö  Á‚N†`AÙY~#¾:Z¶ lˆïÙ‚-¨;â«`Á>~>t kv ЧÐé@ITp`ÖäÀ« 5âÛòì@÷øé@Ù8вÿvàÈħè@ݰðµì@Bò/ÀG`@?N>ùø È Hh@-`@½ØÊ/¤­ù6¥Kæ67‹¸GæÛ Ÿ$äëä“„|¯òQB¾z#_âS$¾@ŠE|#ˆí ÐíD{h¯íQ¢½vÓžO¡ÚkH{iöø¦½«>ƒíÕnÚc =FÚó:tâžî1âÞ¸p¯ìݬ7nÔS ½šHïÌ*>9b‘ÞH¤'@zH¯%Ò«@z +¤WéñMzP¯&Ô+êÞFâ4‹bdž‚ .M™#þ O7l‰ÿèXçl馎Ñâ>îG„€zN˜@"!J$MŒSŠM™¹µ>l<¸ #Ííæ6u_ÛgJÌÄ?|Tù\¨1 Ê´º ?¶ÛN‹øÏ,KçÕcv»ž§lW¾Ò£ÍøÐÿDkk:ñ¥£ú3K+ö€2æ´§òPg¿”yàþBdWf›O¨r^­ÛÚœFÖÆÎÔšŸý¡LþþM½æÔTúçšT&Éy5†Ç}±˜¦‹-8¼•|ì‹\û|ûþ$r?=/†RâôxµD~èþŽæ::‹ÛUÚp½KÌ>[ØÆjº¶w†|>»W½˜{"&ü:V*øû@™? ;4O:l߆®é9Š›ÄG`qñó +£Ã«ë9ãl;ùBK³89» ;”ËÈäp}†OóäcU9\cýÙjWU=×Ëpqߥ¹™.ºsXt/‰1­È;ŸMšÃSGfLÜ–Hê³:èôº5¦øìqr\Þ°è÷TÎŽi›w¸#Éï9šÝŸ4Üf»,žÇóžæmWŒÉR|7¹^Ky” ò¶ã55̰n›Xg5ÀÀŽº5¯Œ²&üaëVæ¶Ùž; øÁ¬}ew¢³GqRL¹²ÎÓ·#3‘D³lXSr>Ãaߘhãù +¹Ïü™ØœUC™ÅsOjdÙ¡¶Ìâs¾mõ=ëvbÂöwûvDB‰€wNò 2—Æ¢qXΗÖ=áO˼´N6—ßZ§ qöß['g⌽ˆ³%âl_Ä9¶­“Æq¶†Ä)oÄ)‰“¾€“o8³–·Ö™s|gKÄ)‰8)§Ò q~µÎ-oÆM6¼Ùo¶WÞlÈ›µ|ñfK¼)‰73nR¢Mù6[¢Í–i“mR¢ÍöF›¡¬‹6Û+m¦Öù/Ú”=mRy¥ÍÔ;ÛWñ̴ɉ6w1`‘:gŠ1P0ôçþZ@íœÔΠvµ'±;h]’ÖAê-¤^| + Ô ¤N·Ôçî€Ô©ƒÔ+H’Ô H¥Î¥Þ¶R¿•.—Ò“Ît^@çŒ:÷Vxêœ@ç :×qé\}oN—[ç}Ü:wí†ÎQç :×­ÎåYç.Å[ç:×[ç¥n…®·Ð…n‡°„^:}—ê}îÀ¬ªÏBÐy’¹‚Ìy+s™oTNãYå„*÷E§Ìu%úVâ ðš^Aá +Oç[àG[7ñœ½ƒÊ¥ Êë³Êëù±ú“Î)é¼ÎAæ¨ò*¯ ry‘+ˆ\“È ˆ¼€È5‰œ6"×­ÈD¾Os9ý"òg÷y“:7ãÏÂ|›åD®Iä²Éòæò,sÝʼ?É\6I>¶IŽÐ²úZt›äŒ/QÞGO"¯¿„y‚Þ…yÛ„9B 0ËOQÞ@åcåúÇQ.Iå*o·Ê%1 ?3Ë&ʇ½W}’¹Ÿ`Ü¡œ)5ÿíQ +ÂZþ–Ï©ˆu‰Ö\ñ~QýáÚ(«É±ëÍ;ƒ½Vñm´ÚÆöÄu¬§dhýj9s¯šsÏ$m«ê;…¹¥³Ù7A«Q‡}QY£>qu¨$_hKâèì‚ì„F,#5‡êÛýº,+ηe¬¿[ÅTTµŸo"±ðp5‰ˆ¨¹Í¼e‡fÛĦïrØžX©÷/øbúá[\Ç%öcœ´î‘R.«47—˜`b”ŸôŸ(eêeÕŒb÷$ ËٜkoZÜÃÑÎsZßTàǯNxìÑÒ—½=Ì vÚ‰Êk¶5çIJÖÜ;^Íæ YÒݶ#9zúG·E[V1³ ϺF~ò|¸Éæ¹úÂBvˆR½”ú,!ñM®ÃŽÚÔÝÀˆÙ$WCšŽIR#ÎE«~óM+Ž™ß[̘³}ßÜj[åü$d'ÙáÉ_sþž‡|i}EUXÆîW7T;´'˜r2:Ñ’È`ÁNhÁú›…³,3é´àØZ-8’N *ZPÑ‚-ØÑ‚š,¨àÀQÐ=9° :°ƒiëÀ +tàÑo>0¦^ü§ÉåòþÓ쿆þkà¿ÁÉ Ø 8Ѐ‘aÿiÀ +ôE—G6`CÊíÀæÙ $° ïØeAMÔÛƒZÁƒ 44==HLˆ<úíAÑÿÑ^FÙŽ«8Ê›@z„@Ì©çÿÝèÈ Ò-“rÕ[ýS+®ø:Xœ¶ƒížÁZl£Í™î!œÂ ÔÌà81ˆ‹Í Æ™‹ÁÉ‘Á‘œ‘AÙ Z‰ƒz`°æ68RœAœ»o{ "kgf°E9@Ø(CØ„¡ –ž¬A + &éƒ`eFùà ~à‚°§&ˆ%½!ì– „T¾!$‰öaʆP3ƒ-287ƒ_ ìBˆa€pF5B¨B¶¡!lB ¶!ä„mCÈ3@XO®R9vB9vž)”…XKè„#tÂ)”L¡D +éK'ì;!G +5vBFk„°e9B(±Ž/püq'¤„aß°îVȇV{!' çvÑc'LÖy†°=섉±)äD¡)¬_ZaJ¦°[aÖQ>´B:µÂq¢°Záa lcfý̯šv\ðãTñ?X—ŠŸ´Ãk-‹í)86ºý¼Ñâ;pŒ†9Ö§]”v®&Uí¦U8§¨yw³-ÌŒeQÇf5CûØÙŠç³L^†a­Éª¿–¬–%Øq<ë—q!É~Ä`Àòã†Ç;ÕÖÚ;øÖÕNh›â<¼ËVܵ‹ýµé¯­j|²oïmîg©™•~ôëÂö™¦§½•¡„­ç+æ>OÙÚW¶*[æÑ¥ +™0ú5±¬u5,¨ÊöçÜQD4ªbq¶Oªè)vãDá§ÝØ1+»¶¦ÖímpŽátlÃ×mÿkMÒÞn ÜÚýdµèa+˜Tª¼çUA¤ÆU(ß?$îó9×r­×þ6Ÿ¼ó „v>[Èg;æ“îó‰Ca´Þ´õCBkߥ#ŠÜfT;£cFëÎ(…Œ¶cF{Ȩ¤ŒöCFGÊh í!£=eô6¢”:ïj¿sŸÐñ ¡MwDi¤ˆrˆhÝ¥cD{ˆèAdÄšÞ:X¾󟫯y`íbbšhry lMÙZ·õꃕj¹„gb͵ÀO¨Tã%(W;LZà8Öf×…¢í +Qº<Æ6ÄDÌ\ƒ¬´mm?ôÄÏ rAiPÌ!ø®á \Ðå¯ÜXáÆu]¾åd@ø²Vha·i!*äJf:P^Y›ŽËdÄr8ú­M.| œyŽŠ{ +igƒ\²6ÅgºLT¼.úÇfª­2ïð_»8ŒÆ;'~yÀBÃ[xàf`¼Pc¥÷~mö2¹\‹¬1‘¿‰…¢$ædbø¸º¡Ó¥ÂdÆÀ~ùbgÏ¥"v‰x­0´´\`Ü:qpAn 3~ŸÓ5ðYìo:yA B ³±\t¬oˆ]”y‰WÇá6=Õž;õ1‡«x÷ËäÐö½@º¶ÃhØ ”u +´fÿªÑðâ)œ¨¢µLPÁ\2m ¸s¬€˜ Þ‚‰†pfÏ`JS#˜œÀl3‚ÙÎ`JS˜h®ÌÉäH&=%sd2g$“ÏdÖ‡djB³E4[f³?b“6›}£Ùh¶&ììÍæHlR`“7›‰Ì˜\™¡”¥F(%CI›ÊËÊ.*{¢R–õ —¹ä/\ê#.gàR6—¤‘K˶¹\ÓÍ-—}Ñ^æ —´¹¬G*%29¾0)IÎLŽÈ¤D&kf’þ†IúÒ,õˆ¤üûf™ˆ¤3‘5ÙOÝò‘¡Y^GÀ‘ÿw 픡ìÏ Ì­RÏ­²ý “œ‘ì$9!Ù­29‘=tʃÂö•¬q²>5Ø¿k”¼¡”™¡äåøedrD&’õ©¿êßøkHJn’ú´I¶?ع™”G]RL¶GûL`)R©‡6YDögî:2‰”§DÆ&ÙMrÖ@$%"5©ÈzDR~äX7¯\s[ÏPÛÕ7’ë)ë·®“p}Y±ðaö„M_X_¯f/¡wÐV`˜FªÕµu„E:ªÞ+c\è¬(™‚){·Ç—µ£´¸àa{Àkò0¨Tqc«ÀJ¦ŠìÏè8=MCÖÅèäO´3²^q­ VéÞp!T±Ä†ûl×êñyNÛ¨^+Üü•W•×e¯u^Ô¼Pé…ÊKÐi|_‹_Olº•ä%8éÏîe¿Äyץ틹žöºxCÞÏ,•®ª¬+* éh¡çÏN»uÒN$µ \Y}^ž—uÕšCY ¾4œ]ά&jXê@ˆ÷ޝŠí ~• k;Ó›ßçÇ¢X…­ÏÛz«YY²­õ°?š'rlùÇù‹Si‘iä!û/?ü¯^ûr}·Äu¯{?Ç íÞËÏ+JGˆÍt_îŠ8E°EÕ» ž\½Õxƒ(tPJ]°Ìïž>ÑB=â—qéG\f ¸ŒHKÏ´´-ü–aá3,ô… ´Èú }¥fXÚˆ´ôH eZ¾ÀÒ~ÀY±˜V$³B‘>³B•Y‘G¬ÐL¬p`ÅÓ›ýÁ +V®‚~X‘o¬ÈŒ¬ŒXY×sD^".|j.«ømõê_…ÏÄã=sôs‡fý}´!ÕÞÚØ) õ/šÞèhƒ’¥¨¨€—Õ ¯_¸¬›E½¢¿VI8­ r°j>¬_3´|àIÓL‹ªí…Àø;äÙj°v|xžúÚ®©É•šÏqÎ_³ò:á£×ì­Lö("y{USÌ:þ’×lä¿7 ¦¦Eê¾~4Vˆ‰›˜½wƒ…W_ Ù‡½´-ÐlÆJÀÓ$Ót½q³÷3sf(ë½Áõ2'ÅDë$ÜUVÙ-wbQëB+ÄÖþœ;Ì [ê?~¬àIdW¶ :Qöiµ¶ó`•z°KU†=p”4|¶ôWÔÇÞÎOKíÆ…{«¸'a2-£–(Àƒ:Ú¼YðK÷ñËŒùÎNÞᔑÒÉ!ÒÙS:%¤“w:± ;!œc‡³˜Îâ)§xÒÜùÔOÍñ¤ϹãÙ(Æs§“C:9¤SçÜé,âÙOñĪÞùÔ”O:äSb>Waw>çÎ'f­O@‡†€Ò; „ î€ò' =”c@E?ÅDùhO¥PÚ•P +•Ðû|ÖU Œ‚&ç5é†<µm£mÛ@¿;ÙFº!G9oQ6j¶ 9ªùÛø"óN6ø«™s’ þ!zTó¿—úÅ6Æ¿·dæ5ÛF=鯸35ç;5ÿ©?ÕülÉÌ 6÷`'9¯²Ž–r²ó@‹o‘ÓBšåœ#.q© ™ÇYv¤Y¶ÇYV#.ôe–•8˶ LÀp¦&`L,?ÄЈÈdbú 1E£‰˜ùu– ôdç-Ó"1Z1ý1’fÙ–ˆ™‰˜Ó$k Û¼È ¼Hä…/õœÏ¼œõ¼}á¥%Zô-= ²’ä|<dOf®¤õà{÷á ?̼&ùiA~zŸ‘ä§Ôühæ=ÈFùiA~zŸz”Ÿí§gû©Û~$ØOöÃ[ZÐJrŽo˜ÐÓ{ПqÔŸyÔsú#'=ú#;ä§n;çƒGùéI~æ¶óà>šÜ§ÞËyKî#Á}Úïå\ÙI‡„F=×ЖÚo‡ÇQø8’*wãã¬i|l; u'”kJh •Óø8ÿl|ÔùŸiÑ/½:¤VØËyÅÇ4°hWc#EÛíðŽfŸe  زÖ\®<ÌfÑÄ¡^'¦»-}`¥Ý.µ\ÂfµQEc„²)ùÓvƒ +ÚuÛ ö©£(æ'¥csð]«»Ua¶B[p£™Žíû´ïŒvF‹0/úíeä8ŽCÑ}"/$‚äyf›÷_ÿmË“S³é²ÚJ™"ñ€÷a°ã¾BAûšÊT‘þêP÷A‚q†_Ÿøj î ~ªïÝäÌ+ìÅíaxýôÒÇ©|+?:)ê:3}P³˜Qõuþ¼øùólå<¸E¶»Üê¸I†«† ¶õÁ¹¸—µ¹1;G­û¯Ý /”ðí%¡ÿ¸8UN‚²ÌßD9ÕÆdÍàDÛÆÛ„}Ó·¯²±°°v}«’)î%°þ9o„Ù +‡ . +¾s-AìÏnVûM'îSeòª0wx]ÔY=VPYË+Ú«núk@P+ßÜ„D"3¶Op&'¼ì§oÎì7ÕˆÒP\‚p”º{¬L$Ù·L.hð¾å=”T–”™‰IJϓɡ Ê'“R$0i IÕˆäŒHJF²F&-2Y3“+2¹"“#39#“™”Èd«‘É¡l™Ê©ì‘Ê–©Ê”:•íEe_/*G¤Ò"•5P¹•3QÙ•ò¤²¬•¨¬Ê.Ê™©\Êú„r/¦e0%‚9#˜–À¤©=À XŽŒåŠX¶Àeï‰K:˃K“ÈåÊ\Zàr.%q9^\’‘Ã%Ú“Ë9—-p©ï¹”½*øxSŒ<œmà}ÿx çæ™¢@ +Ï[tóX¹†''^MOCKYÛeØ9’ê;kÏ8Å[Ç~îµÆëÙy,QL¼¶]&õôðWpÅcžxü®lò;“ƒ ÄòÛ•WƒO²é´v>`x;gÎñE;Øe¼jíì)ØøöSÝx r¿]»÷Õh,8©Ì¶h˜^KhKúØß­S_èÞÏÝëö•éW÷ìëY†—ÐÄÕrJd/ô»oˆŸQÖp óÃÕæüDêcÎ}Š9Îú¹üáŠp/ã…/¾ñ7gh;½`}ƒ;†Œ«Ôü}Ñ…[€yÎíCrùnTá}ëø>ý®‘vl&ŸºÿÕéÿ—÷ˆñè¦ox›lÀC†ß«ÍOÔø sóŽ‹çÙ½í5"‡"~+~Úͯ m¬"óåÎÉ£[•oÖ;«“Ïn‚OjŸ Ëž…R`ÑÁŠõ‹ÞN]´Ó›Qv¾™È ,¨2yþ ÞËÂë–‹«îCø‡ŒkoAÞ5×÷Þ€<Èò ä>ȉãzá¸%ŽÆí‚qMkÄXÖcIˆñâúb½@ÜÄš Ö Ä’ N Ã31Ü#Ãs]n‰a ³ +Ã’ÖÄðøÈ°D†%2,=CÜg‚XÅëBq„¸qâž Öq½@, b‰{‹ÏqK÷ ñè â!v”Å âÈpµ ±±X¢X.×H±ÏÅûõßk²a¸×;M–;M^Y“5jr»×d +±{r´dÉš,Q“-j²fMnQ“[ÔäþA“-h²fKÑ’%Z²&KŽ’Ü‚$3Ó½$yÕ[I®Y’{d –¼’%÷]#É=Hò’lI’ÛMt­I’å—’lï$yÿèšY’[”ä%Y³$×—$ËšA“WÒäU£&¨É5k²üV“GÐä49Y²K^!½Ö_Y²Ü`9wkÚá˱¬/.k¦²G*%R¹2•ã•^kಯÌe \j\öÌ¥F.{äR—5`)1¼ZÆrE,-bÙïëÆðš±”ˆ¥F,%ci˰´„¥†ð:_\Zä²G.5p9—#q©Ëþâ2Q dïy@¹”˜,+&WÉPö¥E(Ç}r-5@iJ‰Pj„Ò2”-BY#”ó>»Z€²ÞRÙCv‰Ê¨´@e»QÞ¹Ÿ¹ËëWÊ«Iyû%»Ö{åm嵤¼59ïü]-EWù]{Š®ò)ºÚLÖÛ?F×–¬×.ÖkÉzûGíµ{í½ZoN®š’k»Xoû}rk½öAzÇEz[²Þõ)ºŽÖÛ/Ö;ï£ë\Ùz½Rn¬÷]][ßG×3³o¬7EWg=dך´w%íÕOáõLŇö®÷$7 ¹÷ä†äv^ÇúDrO(;¿K¯ýÿ“^ÿƒä–H‰d¹,‰äšH– ÉšH®‰ä~!YÉõÉ9¿ÊÇüÚÉò)¿Ö_“Ü>å×9ÊvAY"ÊVÿ2ÀŽõ?Øq °–PN$ É+’¬#‘l™ä9ÿ6À~&YÉã7$+J¨¼ °žS¼ +óÁþåJqèV\uº7ÆVÊÂ0h‚­IXnp†‚÷Ø´ÒV¦GÓ3ª4#LÙ/„J¤”: ¾}ÿèà“NöaTHN¯øl Ï«¹2”‹âIRé+¶?ÏÕÝ÷©¤GÝOXô§oVÿ,÷Än?”T'-´à½†êñYªÐbÐÜÅ >~b`}•+Ý-V+²T©žÂÛÜÉ·‡.߃6‘ôÐ6„¿ÒXFrÕÈç¿þ¸tBê¥CÜ ÷¥ÕEíTÞåÞ‰þ·?Ó>ÓŸDÇÄm‹G±°ï6‘iÐ*°$íȵŠ"Ô(?ã}ZãíhÚÓCŸ§¥úåç^ØcÝã©àeœ}òjýä4®wAÚByÚ«<-U§…ê´gu¢‡ÅêÔPöªNƪWu†òœ¡:g¨Nîõ£:{¨ÎvWž³…òìý¶>G¨Ïë³½ +TCJ(Ðå!ëè :RÚM®X «…µP  4Öç«<%Uç +Õ©ò”5SyÖg}Úm}®g}îWyÕçJõ©¡@íU š +t„¡@o2 : +Þ"TW®ÏågüÅÖ]Y¡â‚SWó¸5Ù¸{á}L(‡ùhåêšj{¿ãâø€­c°Òªá,>Y&Saçw«“îÂiX9 Q٦ñPÕ‚‹æùFÏþVŸ‹8 ãç侞Éf°ŸB4¸ûç ³ðF>zúqq»"Œc`r”Ëj'§Âƒ¤ñ=ºS|§îëÃlã7súU(>ÅGNe^À{€s~ãOôd ᙨ=Zl¼q©‡[ht*; +>3Ý–IÁ©æô£ U–Ь‡íÿŸ¼‡ö¶·ä·»hÌÙÏc÷ Mü¼(·a”ÎÇzÐ3ü8îÈÍ~ïZÊÉ‚PÏ%Ê=qÓ±Bž‰÷É1TTµðÈjÇŠ§KÛ2o–´qœ‚°/¹Œv˜¢¯wÔ²W omoQݳÀAˆ%]9 +pFp˜†·®ã(¥±5÷IûYÆ…úÏ7Ö:;üˆÌ:—=š›WGkRº}³A‹›¿4Ô ž]`ç>B¯Ô¼0.tœ–†ÛØm€¡›ÿé\æ!AØÑœ%ÎëZ«¯p´3U®¾wÜ8Ìe¸qÌ}ÖBS¥bb(u „á/P™YŽ™7cWîÕÝ ¡|½*L9_~|dàîêò7¿r¥§}” [¶yWB¯oÿèñÆÉ^~2×óËÛ‹ÌÉ~M›UC›'•ˆÈ£9 Æ*Uo3ëøòÙé'-œ®´Úedþá´nHžF8ŠÛ)Îbñµ¨í’¥‚‹ÆÏØšýoy[®½ -Ê{¡À s‘gX4vþ÷ÌÛ®¨\ŒþBë‡ýqMœùi£ÅÎûì7d¿¶‚7¤H-·Ž©ǨЕ}¥Ì;1M`•ß×SÝ~ë.»Æ´3“ùãƒ}\yXÆ¥ØÐ'ä,Åã£Ù_ƒŸíLîɆ´GàϾXÏ!ØØX Æ?ç!ºýü‘³1Âù,ܘŽå”‚‘Š7ãÛœ«]çßJ Ã.z¯Â¼Âœæìâ…[Ñ=¦o­ÎCà¤ïqîËâøn>.…Ë}8´‰&¶óí(Ÿ[Št?ò¿—F ¥1RiŒPã¶4z( y–Æ¿Y¯¶,Ëq¶•Ú@ÏE=×3?YAÖ nÉ5U›>ùé[j˶L XÜàX8êàØ6ì ¿°1.lø[ذ ½¡PÍ5}{‡`Š3¿‡û3ó3ã3Ÿ8áxÏ¿‡033 +,Ûþ_A³þGÐŒïASác ºuO?Ø,þP¹jwýPð\>Ï×”’õ!í— këܼ7nÝ;µ2@W84V4] ©ÆÄGuÎyiÜ +Hb°Ë +¢qøÙk0M“«ó¿·ž·u''^ü,þç¢áþU©ðXs¼ÂÈa!oYäKç4mEyq„FoˆÂ㘕w]+ú²;¥éói +ç Ó(LG8çΑúoôPÃEð_ /ÌÅøS÷ë9WL«2dOÎyÕ­E§3Çìú¶%§ž.ƒÏCÓT²ÅÕPżÑÊêf/•Ð mmª\ŸüRïښǫj¨¿ŽŠ¡öƒvMX(8Ÿñý}=`(°ÃE‹°Ò4µ¶?¾x×z®U")îRÅ0ô¥üîá*à’o’‡iÆžfÒŒ¬ÊV ,ä…dî„ß1«üD7nèU«F¸4Ø×>J”ó¿›0JgdÖ%=‰Z%‡5½¾NŒQ°ª×UÌ„ȟ¢M Qç +(%éM›Þ›j©QÄPºy¡ö6ƒÔ•áQ˜õ4ôúL[*`ð™R æ•îÒê «éü@ŠÃdoF—;P"ðâ’/f=‰Ngƒsu–׿}•&‹²¡³^%gc¼@O"E‘è–%ÀI{_2›ö GFöF3ýðZ·¡½3ùÔ#–Zmiߪ,È™K>%Õ°8 tUñÁ!³´†LAù霋“WäàqRƸYs|‘1v}œ€ +#_Wˆ$±äI&¸(P¥ 6ŠŒD® +Ü%yÒˆƒ]Ù¾õ/Ü(tÚ5# ÃÍ&‹6ñc‹q'¡Ïƒ€(•Ñ8èµÅ¹k3ydΑ) —J:dF©Ô² Œ±˜ˆ"“å‘… rW»–¼Z Í{èr·<0"Žæ›åd"P@Á¦2-¡˜ê¸Bd!ÚLïwÍçÆž"ï•¡’û:ÃTÓ`gèy9«É:ç¾R¼iäP§’szó½«iLë¶åg;nš­¥õ•å+ã8uȯ(jûãH8K;(×u-¤âÜ×';¥±`€bVs4¯y__[%¡qç©ãÊ¿9´ù k²ô<Êäpï<³ïžo൹\GA¸40—{?¾~JcWì©"ƒƒ³¥ Å7e.P×¶k€7²Å×ÉVX¦ª/•¦’4cþNŽDYO6mi@ wÌ”g5€cZÁI¨Ò#Á£îòA0þ'gÀ¼® 0Žºó>²Þ°Ÿ8PopZ2‚2ÁTK|ƹQ”«†t£ÊÛ\•x*} W¡3¥ð·œ@ô%[ùsí…¤viÿP"Ô!éaW XÚ¸d‰0 +àE5q9Ä 8GŠˆûoú*âÚ ^c®óÉU‰W•w~Jœ¸ç¨íËO tÆL,6övES#Wœ2—‡y*ïoÀÞ\îA.ÁÅc¸ ªA`ÇÓù’ñß)¨¯€‹â"pOk „£«ªê‚¿*Wx´WUQ˜#R\ôœ˜ß$èxŽ=¤ÆÌ%ù–¥ä<ª–µ£‡äBÛE; y.J¬4#zèJ4¦ Û³Uvt\æÚRÝ*÷Æ ×–i@{:ËÌØØ\x)”çÆc@Ÿ Ôš Šîb&9µ)'tà’Ø‰ÓÖ¤n]°Æô°xÓ^‹Á4nje²‚•ŒÕ s°¡s®Æø7rµ­rÙ¦øéLm¿ìZi »® +[QÀ×b÷³àF&—x‡³:o«R2zµÌLñƃn§Âpì©ðü6&CæœޱĔñIæI·ÏªÔžž«ÂPUEß5éhd냓Ñ!fà +DHeö±H§ÝšÊd•e@HѸ•]5_ܦdV2’jŠÃüÑI¦Ï—+V5Ñ:-;šõ„|åc·æ³•yg¯Fu¤Šmÿú'y&Ý×÷ÜéwrÆ$wÚ“;vs§ÞÜéÈuqgî›;íÉvsÇoî쟹Óü“;¡b?rgî›;ë=îÌ'wæƒ;íÁþä„ô“;uÄÇ÷¨Ó¾PgÞÔióAR§þHý3uæo¨³oꌟ©cuÖ¾©3¾PÇÔY7u„ÂOêh,½¸ãîØîÔwüÁû‰;;¦²µ7È£~Èãïžù$ϾÉã7yæƒ<ýž;~sg<¹³nîô›;ë7ܱ¹Síž;~q§Õ›;vQ ù:n‡:åÁšöÖÔ}Oû?MœÖþlâÌ?›8ãMÚ´·ióœ8ó1qÖŸOœiÆ[Çw0Æ¿nÒÐõÙ"eø·‡‡Š;\dÛBO›¸>èûÀõ†þ5˜ßv›*v8ÏH+¯1b—ñ‹àš‘]œ¼¨§6#*Øà‘ÜjPMø¯dºYÉk\küXÕËFä2Ð`ã• W¬Ô°ÆêãàAˆÆ°çŽOµ§RÌÍM5ÐÔ TÙÀdx¶¿usìØâr +0Ú±È0oM¼Ç“¦þŽ·­qþ܇9Š}XáUhmY­¨|šÊˆr9§T0PßOõYµèÜ!ˆÆÿÍœvl”u;šë4N•­Š¿'š3î«,>X‰]T,8ÍÊ̈®ðrÁ!ר’·Œ†ÓVJR3ÜQ ´%²Íÿ°^nÙqë:J&Ðk ÁÇü'v‰‚€Ò”Ÿû“Xn¶,‘U…](z] (¯ °P\ŽóµM†: ÄvZ¼y±;Ì`ÿ.r¾TNòJåTNIå%¨œƒÊ_‰œ“ÈGùøIäAã5>ßõy]Š\9ä{Š\–"§/*·¤:/ ÓRç„.Qèíz½dNõ’ù*¯K•kP¹•¤òd^ƒÌ5ɼ™Kyy#óen‡°Ëœé…Ì©©¿jåA#ÿ”·åAÖåAi @OåAʃDÒ_”‡ @ëò0ry©Þüe Þ<£Ê·ù1£|K}ÕðH„ò}›7ÜjŒ… ›­›F}cÂMس Û[ÖË„ ŸW&”hBziBÊ&äh•+GF ÖlAŽÔ`AéÙ‚%XPzð /MX‚ KraûÙ…rº^™°êïL=¨/=(+–èÁ=HÔèAÍ,у=Ø—ä… / Êå@å¥58p9ÇÜÞyo,Ø¢5[°¯,ˆ‹`Á,8,X—sðÁ‚ô0)Xœxxrz0ZÆ /ÇàK –dAYX“ËiA—ùû \[°.,˜ç ŽhÁ-X’ËbölAެ—×lSPå@Ž,o¦`[MÁ<˜,È òªnµyÛįu+´- m‹cÛÂ<êV u‹^Õ-NuKBÝ +mKl[Ó7ëÆÅ¡qIl\W¶v„¢ƒ}ÂpóA3M³ÏËñÎ{  FMïXd8CôØ€kõAÓ|{™²_7,òߟI‹©#¸žlWs?{¼Ù€ÂßhmŸPT°vT¼Ä°Äšz¨ˆB Bäª?¬-Þš9Œ7² ³ âWû]mÔοYöµ]Ÿ&¢½ÀÌ«zΪ)öÏ9¬¬ƒÌ«1ºoÿüÊtïÁ<{•é>©ç)„|Ÿ9h–üw”]M¦øÀv×mÊñ¶äøÌÆ.p5Tý&ût2™í×ö–6}MÑ®*Ö@{Pì»óU{Ù ^¬øÑø[nд£=øÐa×ÕÜçéÛùß,–wè\*À—’ï#®1F^Ù9uñƒö•¶P±lPŽêK]>E|­¸8JÁÚ]\¢xv=rÛv«Mr»…:,mКMˆ~ìœ4Î}šrRvÛÀ꣺/5(±ÃðÍ4Z6ßZ¨aÛWn*GÀâæ~å#Þç{È<ÛÒ–A0bÔßJ)ô1F +‚ƒ@oAPSŒõƒÀAÐoA@A 9j +‚úÛ$è·$Дõ) ”’ >&†$ðÛ\IÐß'Á:t<§ ¨·$(¯“`PLMI 9 jLÏ…e””#%Þ’@×I · àuðû h5'AKIÐ^%A&½oåÓ«Ï…¾% o"ßñÏäËKòÕ‹|Û}yô;ú¾ÂÞ‘°·ì­o°—è;öŽ€½…"ö–ˆ½rao?~ì#ƒo à«Kð|#ùj$ßq’¯ŽØ7ÀïøÊ¾‚*ñ}Û’}K`ߨ·%ö­}[`_ìû|k$_;„ƒ|ø.T^çŸf{ê¿TŽóCE,äçwôEŒÀŽc~Ðv⛇Ê_|ôÙE{ábo¶9 w{cñ±gABp«l—̓£ºRÀ†ÔÌ Ý‡ç w„e y;ìäsËΦŠ#ÎN‡Xà;6»°ï _ÄÕÎ{sL¶ÜÛ.6ó ý¯Ö9Âç(S¤: ´*Â&5éÝ1)ºipU,VíVbG‘a&ns·BNæ 9…nÒñŸ‘'Ûé ~üH±@Ú‰£ÚæmXÍž50 «Û­v´C4¤²™¥+4c²œ¶ç}t¨Î÷ò´4INÏ0¦¬™ìcÃ, Ûø:C€vƒqMûh]Oªá(`GÐö­XðA{Þ5oJ#ób“£?Ù)–êL……ì¹mö‰©ÖŸÏCµâ™{V÷WM¥zžmHE{° J˜wívöùæo»¡°Ú+Û¿ÍŒeszRí_V_4<!}‹ywÍSûO=xAmELOÔYŸ¨ó±~Žu¶5uÞëgyO©~j„Nþ‡òÙ2sjbN~dÎú[æÌíSnÌ™S‘S×È™ˆ“#pŽœã5pþÐ<3pòcõÔœüÔ=3q¶‡îIÿ·êÙp¶T=Ç8K"Î’ºgÏÈéâ8‘SrÞÊçr.c Í=Qö&J,Ÿ·è#ÆÇpk‡òÙR Pйŀ¾N1 1ÊcùLݳ>vOJ9@9ä!ô–%ä€ôLJ¸uÏÒSP +‚’ƒ Å…(=7σ ¤ § Ô<õ’‚ åÀ-xÝ;[ŠI1 9ø} ¤ÇÚ))$¥@»¥@ +”õV;5e¥ (9(e€¼Ê%£ö½vª!9×£ž1á7jˆbåÄðCÄ`Cõ ¼ÒjGïl`Á±÷NEPT ¡.ø·8ÛáyïSÔÔÎÆç/š7Ž!Ç J·íšF›ß"´ƒ‚M±§jlWJö<Ü ™ûÀVnzÀ¯c§‚½qxÄÏ2Ba<ð× [ÆÆhÞ# +Ã'RN6S{ä0ì¯^Àd@7½NöÆ&…2Uë»àÀ;dœÏЪêŠuôD[:ƒFà+‘ºx&AOµh_6%±‰Mðw}÷!»B#h7ÃVÔ¥ÑÄë¢`Æ›üê9ì“ m‘¬•õÚξ¨ôÇO~CD{_ÄÊè†m4ÝšNh¥Ðù>–?+´…֤вPèH +-A¡%(4 +EâojÔ'}öKŸ,ïôÙ“>]”®OýOúä ÏºÔg¿ô‰G<:’@i!КÊA¡¼’èåC¢²I”(Ë)Ѿ’h¥K¢—BÿG{d9Žã@t_§¨ d> Hð<½íû¯H ±4Ϊ7›´˜–%’ˆÒ* +å÷ +í· +Ÿ(tYmÞ toÀQEÔvír… »ßîÊs« u t(Ù·Ômwù]Þ}EÛ-<4(¢ë?’–[X ËŒ(åI +^0ßu¤¬å[Ž3áD`I#ÒþN¹ÉMÓkƒï:¾Ó879]1DjÒèK+‚šßïp§>=»†ü$ë¹Ð¦Óíq¸+ÐØCˆ¨·Ì9ágþ(±íŒTª.i>"ÈÖ:Èá߯¶N(l×ß‘[œƒ}àA8«¨pf þýåd1ʶ€7hA :‡g^gÆåaÌ /`³+–‰[6òÅ"\Oý;Ò~#ÿƒ³'.ß½‰zZÑ- húæ»×¦îIš|û¶È×ÔQÂÑô§ Â1˜û1$„A})¥Ò=él»(&8­=:z;h‘ë·]s+aS~ÃÒ£Ãéä‰v¬ ˜¡Cuß§9£5 ÐØT×®ïicÆæ)Pm@d¡¤> è¿'rà rƒ$g"õ$22Nb’2“33I…ɾ“'‘2*‘Èž€lzO$%"©U"[&rf"ǑȞ$Í@rR*’yl™Ç^y‰Çqò(GI8¶Ç•qÔŽÆÁ<‘\-!©IILêɤџ©ì‰J´ƒÊQ©™J}QY‰¤L¤d"G%²e$5!9 ’ºnì« ¹iF’2’R‘äÉE I*H®„¤&$[f2#¹’ýIùVòÜðÉvã’‘êþŸ>)Ë™±\÷Xò½QnóŒ²ýQʃOŽŸûdå’N.e\ê{›4.{²Ê‘¸\…KJ\Jâ’>sËuÏeãƒKï ZÙäÌæÈlògnÙ«[Þ™åƒWòxeS—rrIzë•r‚9Ö˜ó[ƽWf³íS05ƒ)`Žd—ëÓÛ*˜ýŽLºO°”¹ÔÊåº °R¸äÌåøË§üšýRR~w`Ž“Ëž¹äÌ%%.õ6ÂÒ_dXæB%e(s‚¥‡[˜ì•IºƒrU(G¦’3–ýC.ùË™°äâ—3q¹î"ìLXRòË»Ceóù ÛSÔ+{`iÏiûGnX0ù |«|+¦6ähŒþ&ìÙ†H@ XqŒØB²ûc tyJìöá«°ÈhøFÛ žévÇ–œ*UÜç}Ù†‚3/|7pÞà@nŠšƒ|1\ÈÞ81 éx/£ÁF 3ìþ;S•xj¡x}™,¹Ç’]w¦Þæ…°®ñ…ht|™ð­$v.ê½™J¾6ØŽꟻœ]3ÒÏ÷ž¯·¯0EæAaFÖÆ5^Ýh1?]☭h”}Ô{0‰½ïpÙМï‡:•:1 Ü-Æû&zñhCÛÒî[ãë;ßã¾hŠÑ~{4È5á7JÑq4ìÚGûEOR@Ù»ú:TCrAš/hüõ=ÐëöÅ÷Ä|Ä—+¸× ÖÎÀ8¼%ž|V%fyCŠ-±Ù Þ’59HáDJ¥LŠdRZ%¥eRè$Å»O"E5‘2VF…**w¤VR(“"™.¤øïNR2(­‚"ï@99ñ­ßzE +,r¥gZ4Ó2 +-D™–@éE‹VZzË´Ì–iÑ Ë¶4ÃÒ,cXZ‚efXzEôŽ–Yh¡LKK´Ì~ÁE +.«à2qé—ðß7¸4ʸð­±Lwûc)¸Äà­±tͼð§¼ôÌ‹^VæE?äE2/£òÂw¼xμŒÄ ­ W`fÆ7à-1ã~°— W`¤Sx™^¤ðÂÅ]惻d`fËÀȺ†+0Ù^ø˜l/ce`FÃ0ãÁ_Ö#0T€é ?® hèšeÁÛ¬ü‡iì™â1R™éwiì–˜Éa¬ß†±‰ùã,6ÿG1ôƒ@F¿ïYð;ädfÆS"«se¦gfä–™l2­effMdô—‘lê…™šÉFaF.Ìô fÚße2’oÙL€ÿÍ ‹W¶˜Eyÿ˜q*;“"5c)¯„m“Ü'1Ç~ lÀˆÆËxí£ïá¾Cö{PMæ‚UiœJ¶Žê@Å„yÙ½†<ö6†röH{N´âVÌ>ð:2OG@2ܶ¶?vb¼S@ +f{pGmØ~²me€2á0×y͈Ÿè8F iÜ»…H÷Ý Hö ÅÅwÞŠ°»]àd0ÁŽ„±Â[zÖ–QD!=¶z˜¿®hÃ1£c”®cêálí¨ —ǧ7£:b!ѿˣÇöaW]Îñ„<æ8 +5xzÃc9¢GoáÐn¯Øjþ¼0µ8RõÈàØ5>à•èF¼·ÏN=ž%Q[»„FLV£Ý¯¼ Ê(‘8‘9Â?± ˆË-úd;(.yûIl·ð® (l‹ƒÞ¾ÛñÀM#NÚu®¸ÅËQ±=¡<‚‡yõ3˜µÂ¦û‚y˜ûæ^`^æÛ£Û×|wôÌrïÊÚž\9ÂÒAs`ð!Í|¡¹šG¦™Û…f*4Ë#Í­Ð̾L4_}¹?øò•f*4sñåñ_^?ðåõHsÏ4÷B3_œY‹3k¡yþÀ™µÒ< +Í£ÐÜ.4÷B3}lÍûáè yýÀšåbÍú9ÍÖ|¥¹ÝÓìGÉ÷4ÛI„¬å}dÍã‰æxý‹æêÍ|¡™ Í?ÈØýÑš+Ìœa~Bù±éåöˆòx@™Q®[/(·[”)ÒpB¹}Žò§û +r‰Ø«pÌOWW~æ˜~ÀqÁxUŒ#¿8~LØÅ”ûzÂxŠóõz€x<ækù(_wÎ4Ÿ³}ýV?o¼ öGño—ÙßÍ‚Ä!:Ôö‡!rûd û²ùõ´£ˆÓl¯üv·ÿçWðÛ°ã´ùµ›kóWþ6NÔïr‹±I7B­mä$ügÙß9ñ¨e„X1šMÞ$c—ι5­5¤Ù1+ÓwÇnzkòk]±æº bß,ùÞõÍ~°ãß„G¹‚10–lËíróõM›¥@~ÓòkV„fA–òfåo#!L¼›¬ =òu;ØFm'ámÝ‚QìÏÑ2ï`¨È´mß3Ðüç—ÉO}åÍVnÿ|oòdðm ³ +é:Ÿ]›ÞÉÕÆ(]t0<Š|ä_êÂÆ//Â0ê"}ø¤ºiË'm_øj¼åbæì×.K_ß´ÕZß¶Žèý zðMðÒoh°Ohjî[5Øð¦…ëSÿ{…JR(Ý)”“B{R¨…ö¤PJ +-MúÔ;}ҩϦwµr +mY¡«*TN…ÊB۩ОJY¡[OÕ¤Ñ^4:NZӸѨ®ö¢Ñ–4zJ´i–¨íÚ)Ñö’h(¿:nÚ^íý(Í"Ðö^ ýV šzwªÙ̧=‚ µUº¢\¯XèØ ¥Ù#M3Ê#‘‰BŸ:#¡ -¢{³Ï£û»¸m• §‹«vtxÈh¡CÝ"g¨‹o Üx‰ïvÛkÑÅ —³©ûîMXo>`Ù¶¸k˜£C`”£¡_+îšP£G"Ü7Q˜¯n¸1TÿÃzµ$9²±ýœ¢/0c’™üÀðÂp¼ðÂc/ìûG8dI¬yR»ã…7­¦Š*~@*Y-láe`k±·ÁlÜð8HïòŽg®N?û‰Ñ¬¥‰µÑ[ññÇy¸š"½1ny2Þ VÅ/4H˜h4KÛ§ˆeÌ+° a™ +AC dï!á‚]Èñ}É94p±îOL—ÝX‹ê%c3Öoδ‚ „÷ŽÂ£ÛÀv˜Ô]Æ“¨­Îk™zV¨ÔUѤëŽZ•o`¸Sx_l{9}ÃÍÞ5Æ ¨N¬ÃEÀNôý’ f"˜óRª!ðqr¼¯R«`_ cjI#Ë:öU +›Rl»¬ƒÈ^…ŠïúSGT/°¾©[[о¼§Ãˆc‘.‹ê¾;~‡÷RÒ+ùT—µ9•Šß8i¤àqùI†øÂ‚}¨‡Öšb-yQ!{:„Òxœ‘²Ø¨3h¡Z¦øZDÏä¤]z*OüO½@Ùdäb±†kÿùMf3^BUl¼³Ž}–Âv¼ºŽÉ.î}ïãÿ¹yÉBÇîRH^Iã“æ¼,¶Í¥‹›‹L +^eô_W“N5€åËÒû<ù ±y-£-®€åuœds¬~8}°‚¢)ËØšWš”‡Þ +“®ˆô “ñ±¯µ\ÒJ¥l¦L¹¨©&G®h¤NŽÙD Jkå”)Æ­qjέì¶[~ð'{q´Ø¶˜Cõ[eÓA +B‰˜´ÈÌ0Ùº˜î[”l +3›;):˜éäTŽÂ¶B¹¥_écãÌÑ4R°&œe–ЮEe¢1êSíL£¢æ6õ«\¸)|U54èFêt+¯@¯é[÷´X0]ð6>‚áÍf»Ê6KìÕ5-ë«–mÒ–ß-ö„´l0z™ÃÒ‰fT«”x"γŽ_™NÑE\™õ‚¬¹`¡µ[¨¸Ü¨Qx0J(Œ‹QDt˜‚‰Sû22vÒðåÕ.‹<" ÓäþdNÌé¢I‰A=#b + 6\ˆ _N¿F¤áF&ðÞh! NtJ{ßCŠÕéNÿ$2ÙVÛLìjj¢¡1ÇzÿÈMÁX§&ÐÚ$/«€[„ ϺN=„䤜 KÈIÞ¬OU·M­«Z¹Jìjy,¦ZJzHe<¨\.°¼ÂyÀ{'f3<3´ÿÙ§[WÞ¨@NeÏ3̲٪—¤u—A½®3T6sÚuë6)k^°*aìŽÆ`<XÙ #6|×Q|ÓÌw fúxI3|K£æá. XBŽ=Æ cšØ4†7D;Þ¦šcð‡¥Ÿ@åâT–€É ø=§ÓÁªPHŒÌÁûbÓÿÄPÛhÌ;sñÚ Ô1h¹¥Íß¹±ÆƒyŠmAt)–Ҵ¸ûÈ&Ųˆî„ß4’©çeI†«Ô—ªM• ÝÀÒ¥c;løC¢š—õÓâJyê[µ¦¬1%æ[‘šžÈùa§çžéR豚È\ AÞ+îx0Oàr Ú.úb\9JJ×T®¨aMè.I‡jû¦½§˜û”6¼Å¶fM £nZZNÝ Xý‘°b MTÈJÕHqôI54ƒB€Fie'ÅÞ˜³|¤­mt‚R~r¨n¸WÔå2`½lÁ¬¥²";Ýô·—Ö°ÅÊÌÈg_64/b§êúa±Š=YÞ"«§õºƒÅäf8@…@p"°ËÖI.¿šU^w³„w)DÉî°yptŒï¢¥@“>]ijÝð…½ŒË×A}I®)'ai'K†Oå©"êîãÈFÓ‡¼[”4çù|ó¤1ú‰‘~\]Æo)ð1wvnÔvÏתø‹‡˜«R¸¾19õ~5ÐÐ¥Ë)¼ëäꢺ"£cÉÞªÔalp“Âí¦û€G¶·e)Ë©#ñÕq+{ËF1`"J|—&Åß™ralioz™B%•(! , nª&„èò¤ú¿‚´/ÈÁP~ùÕ<>òK½šÍé’+Þ—9V€QtéÚÛT«šJ5»éc\ÖpÈè÷øèC F=£Œëù¡RÑé¡ÕJäa–ùaØ}v•'—Nî‡?TÎŒïIPT±Œ:ØØ –èðKØžl\º6º0„Å/3O¬YÞM„ØA^¿?1Zgò@9æã[úR¹˜hºhKôâÒóÙ¥i¥©»QºPdms]5gS,;ûå²d(Õ + Ôà@•_Û]&Õ•rn™€”‡ªbY—È^÷ë½r`}ó.ÕG÷G¦„þf#KpP;Ôb±†©ü2Fu¤Bfž±ê6ÔK%UE1KIÐçÛ®[ö¯ -Wß”×) )üêÉŽàÇ·Pܸ“ …Á¶Fñþ­$*Xþ÷oßþúñ/ò¤@j>þñíOþKùøûn¹ ²U!µÀçïæUJË[òk±9‹øÂ?›ÎAAF•€R2ˆáNå®T]Üm‡pmù¡ÂÖÚ*«×¶#i ÷èÒ<*¡±kûå¼0Ñ%FAŠAòÀ` qß-‰×¸Ÿ€j¡Ý¢.·ÐϨ"xà²ev(w¥- %†¨³±³¢þ£]gæh{3æõ,bôÈø_QæŒ<Ã->úe¦Y{¤œÞKUÁ kÀ˜È'Âþa ½†q¡_šzV=5o€<.Á‰’¡i:ÅÕ„÷õ¨Ò”Ä~œm»¨t!eÒEQZW GID{¸Œªc¢#óɾœl bdtü‘x”;ÝÝÕ×áü˜YÉ¡©ídF‚(/K:wW’º_'Ÿšä²¤Ù¬XÒ¼PE@u7eÌZ¦\­ªåŠ•¼û}Ø›#¤d7äéy$`yÆ<ó‹ä©û‘§žäwòŒ“<ý ÞøòøWÉó5îÌ7Ü)7ÚŒ_h³ÚXý2mÚ§´é7ÚìÏhcïh³ï¬imìdÍø„5ëÉš^ï¬ñ“5'iÖ4B΃4ýFšù)iìSÒ´“4k¤a¿zÉšps æ%kæÛ–ókÖÉšýI˱ƒ5eßXÓOÒÌ“4ëFšl2Išy’æÎÌ÷œi'gìäŒÝHó†3Âø“3ö5ÎøÙjöÁŸÿ/Îôgü“Vc'gì=iÚ~ßkVý"kêÁšµÿh¯é¿ÐfÜhSOÚø¾Ófî[¯ñ[¯i¯iÓÊ +¯‹BÑËÖI›²°ÿºÔk.ºÄߎ\å[ò‰çÈBCû¬ø0£¡î¼ð ZG~t†C̪LÜåt¡OÞ˜áûª«Ä•A—'Œ  ­ŠkêœAˆäÖpU5Jk|E°dãWÛP`#šËeŒ¨QÇï+#ˆYeã‰þ.ãv*Ÿ0g-™+(ýðAÑ ÙqC¤C\Bq0×.À©\¸»* »ð€Q†ã½ßتVâ×8ßÌûóvƒù:`îÌë æÊý@ù äõ ò·oûùÈÛ[€øÞ'¾Û>îO€»¿ø| ðyÜO|·ßö?îÀí¿¬—k’ã0ƒ¯²H•EêAÞÿb+’vz#·§jÿÌ´·Û–à 8〷^w>`Àe ¸ó5à\v® ^¶Î0àõÕ€ x3à8ßv?æ{Ã?bB1ø›*ò!ÿ´Ì?„ü3$óÏ®4’KÃ@þaäÍüƒøS÷øCˆ?ð§dü)ˆ?H?”臠1h¦Ÿ ~lâ-£¨! d¢D@œˆnÔõD@œ ¨o[%º% – h@ô²6ŒÿÔÄ?5ñO¿ñìù§Õ§Ú %Õ†­læ6—ù›¿eÃ(T eÕ0ª¦£jZV ¿l U¶²I6¬¨ÝÄ—p + +§p( ‡Q8eßxSnÒ9KÀ¥JÚ7ítЃt¢Œ¼+|“Ž&éÈSy[é”,Aé ”NMÒµÓ—vªfí0j‡ŸÊ?”‡qÏHâIÚá›v’t(U‡OÙÍ÷ýMT´Êñêïæ ¯šC¦¢UmÓF¢ªT5Nªò±|AV²kV”ÀªXéß`Åú†¬úßd…Õ¡%²R +²¢Y)Õ+ÝpUßrWé¶8È–«ê¦8¼âª7Åa3çl¯5æçÜ/îp†ýÅCÜ\Žá§î/iÂwü¡¢D˜j½W -§ÙgÍ¥gú)—˜Aoóºðéù¾âùÒCÓ>l¡öfÚF\¨ÅQÕ¨DóG*.¶0Ÿ×ÑÕìÂÍØb'g ²CѸŒšõ>WÔŽ¶Äeż`~tþÝéŸì&f/⤄A³úÔ^^ÅÑ®l£m7:ü`çÜžÞlò¶‰ö„éý;éåñ³Êñ•ÆðNSmŽ^/!ç5“˜}>Qu*1ú›ë‹Z¨­‹«¤Ú7®mGñâ¯a»Êí^FØ=ÓFrJ&pÅNlj¦ÆuÍ;H‹ë†¸ܯu˜ˆŠ[“m’í+ùÁ±ïøÇk§rîiˆÄtk ÷:{O[øaÚøÇ½È½vwyõ )¢tvCØx¸(©ÝÈG¯ÇX÷¼ÚÃÈŽVNJœ¯Ú}ä{JÚ'þ¦–?Wñ³S¶o]–ÏÇ™ó÷ }èõ«“_Ý诲Cû¿Å mc¦¯˜M1C31“RB¦BÈP +ýß™BÔñ&dC†ê&eRÈ”¿CF!djÁ©2åGȈʫ˜))fÄ ¤ cÊTHú™2.+f:Ä §˜)›˜Û˜éÛ˜!ˆz3ºb†RÌ”oÌù;gªIw1Ã3­`ÌÔ‡˜©3B9gÆ.gÚCδ•3#¦zåL‡œaÈï&3e›3sF¶9ÓrÎT šISsÐT  ¡4 AS!h(|ƒ¦´4„A£ß )3”rF~æ §œq-}sF1gzÊ™Š9Ó gFÊÏé_IC)j*FMŨ¡5ŠQS¢¦ï¢F¶QC»¨©?£ÆÁjEücÔ°Ì]˜FúBƒÁ 2jõúKÖ+¬¬×vl¨Á¾Ó èKÖC ²<Àj°& – ìÕ¤Á¶`6°7–éE8D8ö°‡ä½é•;j@ƒî© A~«AÞiQƒŽ%¿48@ƒK~áE{¯H–nœTþ¦½Â@{5Ñžþ¦½À”/í5 ½´WîµÅ{¸W÷hOƒö(‘é@=EÔc ½¤—Q¯ÿêñØ¢ÿßPOõ¶¬'Àz²X¯È‚=]¬×õZB½Ë«ø2±Ÿ¨×õ* ž&Ô«€zmƒzæ° õÆB½–P~£^ù=æEÅŽ>ù„>; š°Œcìùáÿ¨Ä±Òq¶=«:ÂÅþ•#L`ιûÌi%¶f5‘/éa’ñ´ñ ÃÍÙ×"ñßÜúéø‡gÅ1‡Ò‚¡÷HˆâKsjûtÎÔüoZØü×3£»ÅÚÝÝ6ÓVÕ¿uc›«â`Œ3œl¤çÚÝu¶Íφî&8¦>î©ç“ú²Î\°÷˜F>W&·Òf«ó¶ÅÝãSÏ]õ—ª>B'9ÍUÿÆ”mè7§xžè\©ºÝ—9Ÿ©»Ø¹¶Í›úã4leSìŠ#[Õr†C‰U\9gõã²[7©×ß·K®ïºœ _™?—Dmmïk{GŽo?×£ù] |Î×Rö­Œw®qf–Ŷ9>Ïv†S ¶yä+‡ŸARšÿí|BžóZv¥|Üõ>&D?<9ÏI8:®ôç"wb_ù4ípi«×rŒµ»í:iþ§éˆ‡çÓÊðá¶·[´@£ÃŸ„bÈÔ.’Øö_B4þ+-ަµóZŽ@=·“ȇ…jÜ`xnç¥fæ×‰wœ^l«²µ0ù… ô6PÆÍm€Ðb3^ú€Þ|`l}€o6P“øÀqs‚8ɯhryt‚ŠN -9)h9&#7#¨`5ù€<ùUð:ÊÍ:ú@)ÉzöƒÐ ˆÑ zvA'Ðäœ@“´dãÑ Và59AC'›(r2‚–Œ AI>вÔdíÉbP¿6Ð’ ŒlJ6 76Г 4F8|ÙÀŽyźýf^‘ óÒ–y˜—óò /'ä- yÇ–yIzG@oqm ø÷ÒîíÀ½”¸·÷ÊOîeî­¼åÞ…½u‡½ØË[ìm€½°· öêoì¥E½" {+r¯&îeà^îm‰{ p¯÷6äÞ õV ÞaÃú¥Þ¶¨¡—Çzi1¯ ìÏ1穬οÆÜ5Rý%ޝžUÑóÏOÝ_Ñt7®Zôñ‡²¯‘{ÞMõlº¶sæõž~b?sdžY‰aýé…ì½=Mæ§Sas£"-¢æH·39µ„$þó‰C&÷Ss£Ãvºs[7‡üB–«¯ØÂÎMã*òBtD8šqrdÆ\ÌÏæBÏ?Ûm$zsW7ö¬qÝ|Sî>tWRˆ &¢Êp®ù?ØæfÃmònÔ_aø [(ÆÏî'ÇW£hüXPHÅ›€IÌ>wE’ßS‡}L-ÔÖMéæÇó–&m­Ïä”<¹eg¾Ò¸—(¹³ÚNŒ34M¯S4qݘ¶ááo'=|÷Ü™uLJ§çÅž;ؘs[ÙuèÜQ\}7~|Ÿw#;À ¨¾ HãqØÂ&6Ïõ#݉}¿z ¦9ë»Vv¸šηínÏb`ßñ²sߎˡìœí[rŸ²Ñ§×hˆqˆ;|;cP7ÛÝ\Ö{Ô•P¯„º2ê}lÔ;‘n‰ô¶I_“Àº$Ô ¡¾I·žHß cºâAÑt%Ðeƒ®=¾9ï º&Ð@/ïA÷è`õzyî¯ùq$ÌÛÆÜŒ0ï óB˜+a^óòÂܰ7æJ˜oÊAî¢<²"Sn›òÞ7åÞåº)¯0/ŒùU‰sÛœƒˆÍ¹mÎ×ì·8o‰óº9/Äùi¸³ÙFÚüÍ· »¿]=^©¦ë&ÝsM"½lÒ«3é2Þ“.Lº8¡n'Ô7éÕO¤‹ê²Q¯¹¦—úe7êñ%™÷Á¼æ½1ï÷ö|ôá xÙÀë à ?Ux_¹®ÞŒ€oüæÝ©¬£ý=ÀWÞǾ ÞðÄ;•õËïòï…x§º.Ì{Ýu½øæÝOÆâÇ©°Wâ]¨°×Ä»ïƒ*»&Þí=ïj§ÊŽ*òßðƒ€÷ üHÀÕöBÄD|'â;wKÄ+÷÷µ½1ëά ³.ö÷ã* v£ê.»¦êNŽŠ»ù¡¸*î…`;äڮTÛL"½J{"݈ôF¤×Dºé¾I·TÙõ}e/ÒežjÔý·¤[A1<Ò_õ½ ~Gž‹“™WKL)ßi°¼Òº/jzÛÆÇM:¶KýUÙ»ôØÝµÂQ£ 41Y«Ø&‰3¾0“ÍWÀá—x3ARña+<#VrŠKÅ7ŠTQv yè{ÔEçZ¤¢Ëú½;qW¸´Ê/Òg‰²,&xõ`Y‘SÊzÁȱ‚#Ò‰ÍÚ‚ÀzâYw팼3ŒUKUu9¨žÿ†Ö&ýæuò‰Wzò†c»j[!ðÛùz!@FÔ.,Ñ”çN÷ºð¬=n>FQ*ØÀY;ZG¼I­ìØq¯?º]ðÔ×&=€ ø=œP×pV‚S7œf N!8õ§œºáÄ)l8ˆ³÷…禳(ÑÉp¢¼>t¦³g:˦Ó6ʹXʦSˆNa:7›H&œ–àlN›Î:…èl/:ãˆÏî›O0üšøħ=|®ýâÕrñiħøDI¼•ž­hÝ€j´n@¤BO€z¬µ¿Udà×0³p Rôn“2"æ»ý¬±fœŸÀ4^úë¾WŽpù3ÿ7hÏÚ‚±~‚óÒ@ð¬Hós«ÈTáŸØ„XÙpY÷ ”X‰çÎJЭóüçEÅ7 Ûò#`*Žß(‚>7¢u¸±ø +†#¾»pþqÇOôº¸°r¿!º©ÏçÇJ<ä(+vmpCÖ’#üêt«Æw!³!œÇ"M §ÇUY‘sÍ*ê²N—+z­_´öÊãEVRÄÅÿSî´²ºgüPh gE †pûBôÒ´vŸ³"×Å]щ§BkwÒòøyKA;;Óˆ˜~ÅE8ý{Ja뢥ÔEÕ¤[‘HûX}GµŠK @¡rܸ¬êøŒ9©AŒyóÛ´¯Ê¹r=tþþ«ÚpPûÚ:_a{E=ñW­ŒwPrÌEÔwÑJVVRXIÏJvVÒYIKN"JßN†JG';KÙIJ”Ü-¥K©$¥œV²e%ýK%++ÙHIËF:©ldËJú{%ïàô8)ÛI/'‹²”ö’rÖeÝbÞ¿1Í’˜äeÝ^²•Hcï¬Ä´@V:[9^VÎW‘dæŠb™Îfj2Eó6óÎc·™žÌ…ÌD¸{™)YM#5›‘š5›édf#3K2Ó·™WÝf¿—™ndæNa#zÖ[3§£õwif +™iãC³¬ÛLc/köÒÙK#/%{YÍrd/…½¬g/ÛÉKý॰—Ê^Ê`/õßx©çV)G/ÛÛ^Y{é쥑—N^Žä¥þ³˜¹]vóƒ—ýƒ—…½´sǬ'-Û¹a¢B´¼k)Ü1ÛÙKî˜õèå Ž™f94ÌÓUÛ|ZìØ?7̬密ÙZê1¦vi#kiÇvY?hiG-Kù²]ÖÒXKûÿÛeû ¥n-u–-iYIËmeаõÔ-;YÙ“•BVÚVZ¡ëIKyß-?ÙØHû²Sf%‡~©d +±MYIOJömä(_uÊþU§l¤d}¯dñØîH:Ÿâq®’k:E-Œ•ùÓ!ª`Qu¬wk‹²5÷†ý±MVEíÔ^¬açfC¯øÎ‘<`úü_,c™ñû;?1Üé1UTÅmêŽûÂgùk8‘:ð7 ¹&vx^ô&ëyñSÑpþ`Ç…ôØêç8U“‚Ôµâ$çËÏuÏ‹1â´®Y ~&”U×’'à󲕠=–÷[ýîÇÐmÖÉF­ÓpìW¬ÄÐLÐmì¹Â½u]¢àÅ"^Ãë}±ÊÚD.žyá¼ã™²NÊK¼jÓB06h–ÚXµc xx¤Å•êò JçQ“æ®xôìW]Ê7l +˜¬3wÙ‘ªãhš®û"_ÆÙ ë:ÂÕn*M°}•ç–ÃÔ`¦Þ`øÿYÅén¸±7ùˆUVŠWìRãçbOÚâÖpïXE¥È}Bã>Xã‹“A›ˆ=8Sðo•)••±­LÕ¬Œ³2•±¬Œ²2ÎÊVfV¦²3žQ–ÆIšÕ¥¶4¥ßJ#giF!i¢Ÿ½—F’4•¥ 0YílM#kúHÖOÖX²Æ²5ñ#Ûš6’55[£dͽ-·5–¬ÑmM)lMOÖ4!kœ¬‘‘¬é'kü—4…¤©£%mì—6lõdMùe‘5—³5AûÛð§±åÝLv²Uƒž!L`F±ènÑcÙáÐ…84ÿ{Å]½¡+d$Œ‚ÂQ- +@ mâ_\ƒø‚~/ˆ.ËP(¤±í»"tź¡wý[Öð7FNÀ ×y^i^8BnüemˆQ³Wý³j #Q´âKQ–"¤Ìo=^0ª2jS‹ýŤ$¨&ŠÏÿ„~ίKT oHMȰ¶Bb¤=É´ÿYfmÒÊ‘‚è˜;ÛßÍ&Ïß>x +áÙŽx +áÙŽxÖ'6qãYÞã ˆ_|–Í'Žé´0 •ød<{ÆS6žcã©õ€§žG:Û‘N#:û‘ÎBtú‹Î8â³(:áChÝ„–¡F„*j}J€Z´ å¨ =¦Ž³m;ϱ£~;ꇤžb‡“zŽ’:¥å >ræ0Î3GË™ãËÈ‘rº=‰£~L–bzý•8œ‡rN—œÓSà)p诘^?Žþ!p”sL—SL¯ç˜ž‡Óu%Žú$K‰Ã?õEãû ÞƯÈÑŽA}2tPÆÿZÌ2_ ·dLFY˜BÂøÈ°/²}¹VÄ~M¶|iÎÂd_„Sº±1š)lL!cî!î1F””‰ÓÝÊdcô1WûeLKÆŒ?Ÿ[’¤5ac4ÓX™™¥>M¶–&ÛÎÊxIÊœæÚÖY_ +£$Œ²0= SI˜ÖYù LškõW>oÿã¼jÒ$·uØ>§è d>“ú?O¶y÷ß>Pµ%OÙSMÙ*˲D¸±¥l½-l±·´qª`˜òG÷“O÷Sý#÷Ó6÷“÷S?r?}q?ýÆ[=Ý;÷cöÇNûÓw>Vû“ÞÛŸwþÇ©ëùÖÿÔÓÿ¤Åþ´Íþø[sŽŠòG{nýû³tßö§þÐþìþ|µ?~ÚŸ|kü´?õ¦–ÐJAÂ?·+BmC¨¿mÛa·þ<ÿ¡Ÿ´öQûXmh} ÐÝŸß´®]à¹Úóò <7w¡xïÎoáéwí£}Ïůðì[ÿhoáÙ7x¦OÜùÚ>~âÎG)ô~·¬ËL©©®»Ô/ÍK£ÜåQ•èR8FÙ¤È>r0foœªš)©Ó‚ñižÉJ-snM÷BY¤C¬€$\¦tIˆQ€®Õ©hTClÙÿêCs_ò(™*í|íZ pFþÑño@æo%-×䜨n‘óR´ßRå÷OƒDÁ¼ÈX¹Q«‡wÍ¥ɯð¶AkɧÌtžf$ù¹ +z©¬D^:ËßÊL{â2‡vÐÖ$‹­Ö…rÏ´TW.ghïÎþÁ^9¬•þ¤*4GÀ™'‘ÉpvCµfÅÖ,Ñ#ž(`‰ÿ´ûÆE“œ|R/”h61¿qµ™°F£‚Õd<ñ‘sTô%Pœf§kîìÖ¦•œíž6†0Tµ×EIž>¶}\Ö£wa Æ´*Y@`¡]H‘’&(’šçW(QõôzWƒÐ|‚Bh`¢L—ÙÛÞéŽÆ„|×1ÆõžÆÝvW_i,gúâ±°ð8m<ÞhÜ.4¶{§t¡qÞh\W_Hl+‰›m$Î? q¾8o$öÄí‘Äm%±h±°8m,.?`q^YŒÀ­,.;‹óÊ⺱8í,.}eñ°ÅýÂâ•Ä¥­,¶¾Ó¸n4Î4öƾѸì4N‹m£q»Ð¸l4¶Æc§qï·<¶úHä±Ù/Dö•ȹ­Dö;»xw°ü ‘ÛFä¼9_ˆl÷zœ.<îz|%r} ²=y×ã+•˕˅Êõ?ëqY©ìv¡rÐcÿ — •Ó½ ç±SyìT¾×ãrÑãȾ¹]ˆœ6&Mís&— “ûÆäô$È;“Ë#“Ûƒ _˜¼ ²oLî;“›=09_˜œÿ “Æö™±.‘Ó“±.“Sd`rº09mLΛ³î?pÖL¾8keÛ˜ì&§g}eߘlLÞEÙE9Ý‹òÕZÛÇÖúQ”b­/\Þ©Üî½u?ðÖíâ­ëƒ*?šë<6.—OÍõ•ÊQnîÚ6*—Êý†Ê·\öWP¹Ÿ\ÆRå Pðø=‚ñé°Åà6þIDúÁ”`ËxRÌjá§„’ qwÀãòeàŹùŒ] ÇѵÃj82>—ùP )‰¥#KDR |à´ØÍ?;â`qöÄåÁ€(ÊÐxmpWÀ?¢ˆ÷µ`Á‚Û· #W2|)ã5~ðYÇQ,°£\wð)T^m'¾q¶fÀKJŠ"FTà1R°ÎqR€ªÍ0 ±+ä D#’ðjï!j7ÝZ„ú7Bk„{E¨„P;Ú€Þá³ÞâsgZáY7x;áÙxŽžé„g^à™7xæžmgYáû=ñyÏáÁsAç 8»½'¾³€Óm‚³ºÀ3oð´ž¡³œèô[t¶?£3dþWDh†lìè*ÑY¦bÄ…øô¦ÁHLNQƒUȇi€:“ þŲq{ò5ÀµÉ£Ý:„•È„À~P!ZìF‘ËŒKÏ(bF9D,ÕÖÿ/³z šZ˜ÞbÆ/U¨! IâÜÄoÕý¹Bg¥‘+îÊ7€`Mér;>0¨³¥ñÄs”"{Ÿñ,g:€V–GžyN´DF®Œ Î$0>ÑŠá&ÂŒä<LLš8r§ <« îYÒŽNƒ ļ£jˆ³I”Û9ô'çоEHþÅt9ÞË\6Ôñy™Ÿv®ªF¯âÛ£|››8¶ìEíB+ʆ™!‘Ó©˳ϞBñ¡c•2ò¾[î™&dTUÊRiÛ*e h+h`"Êx[Ÿ=2„s½­ÏdbvÄj ºÚcšðƒvé`%úqß#“±íÈÌIà|T–f<Ñ)+ŸwÒ¡ •ñžñ]‰±æƒ üs.Š2ŽW𠪙NÅœ:ËWoÒFªa©ÆÂ”¿lVh%Ô +œ Õ®Ì$V×Hä,†%#—9¡bE$U¯3ùGã¤A÷„‚“âƒYG¥Uñ‰E„GH,Vw–BoÈdÁ6%¨809GO|ÞÇa™ù!hŒ’XY*xë ï[WPÑ¡!A,;x;Ñ8Q#Ȉ¨ï”A°({ñÍ÷Â^z !Òö8eŽß§.À©'pÌ7à´8ù8sOà”8¾§oÀI'rÆ‚œ8½€3àø-p|NÞ€“Oàø‰› 6cM9aãã6öÂMîïqÓ6ܤ+£÷Šó¨8Uù~!§mÈÉ'rÚrªÈ© rêèŽð ^¢‹”}#¢êT]sJ,œ /üÁeCÕd¯Jåß…S›¦¶Aýê ÿê·0^<©Á5²QpsÒÔ"Õ.ÙôR€›é2ØŸpœËÆV¦‘ý£ÚHçGFçŸ.'jöáz—]%äóï©õ.««7ÓTj(³d|pYö®N6ã@cö¹¨ <>Uç Á¤L,Óƒr"üÍ'gVµ£‡QŠkÍ¡:(ç7Üê}m"* F‡²Ô^ûU¶ºüIã‹I^Ãäú B™)SÀ:GUñJÜoó¡Ø6- +wŠÍŠ[iÜM*š:7çJç¹QˆÐ +=§ÈøÆ¤ÅñKßPHƒé\hЫ.Œä6ûV~wøë‘³W;dzœÍ‡ + O]#Kà9GÙ˜Ïé,+MÝÐA¨ÍÁß" x­©UÀ0³v´à+},Æ9•;˜>C]/Ô‡@ÍÄ£Õ©º¸6=/b +Õó‚RÏKbeÉgÇ“( CY4—9â3´*R„ÐôPGSòëËݡ²Ðhïaݵ>Ò":#U¤—¬©] RD™§”ô²F…ÝÝß§SµÈ¢!8Â0sªRk4iôjÜU‘¥.Þäè‹ø;—*À–ÂË‘Å}ÓŸJt{U ®d¿¸azb^[ RƒcîîP‚å¶FzP¸wßgèÒu:ñNŠD`@‰MÓš´ºËÔR“R›^¢“éKñé‚gÓöc_Èß:Ø×m²¾Ò€e…J;ñ=’ºÂW= 1ˉj.úUž‚<™—;†¥û åÊØÁþ%·I§#}wG±;Ãòhû6zJŸ8Ê•­ØÔƦ¥ +Öô/d_;2å¦a–ûÆo~‡Qù¿ôQ©öÁã¢_Õ¤A·lN&†íI˜~«YG±aÔ¬Ä/žËUî]ÍѤ)…º&ž·ƒ_P×hÈ.1Á=|[/oq¦çJ–E>©ç®>F*šéÇreFfÂU4›lÒYô.NýBFpw «ÑR&•‘È:Ta2æÍêqÈé$”v†](¸‹ÒVbϬ4~®È Ìâ°oªWAìÿaè2N»Ö¹%ˆ.¼[ÓŽßË™9ªŽïÿ|WI²%¹ Û×)þ~Y5žÀðÂptxÑe/Ú>¿ €Ræ/Gõæ½dJ©R –`eKž©S'„Ø 7ä­«É3ã« úPÄ”…^%†AXˆâ‚¢)Ñ(ͨ쬎ÙNDà,ÉÒàRº:×îŒq¶ îJ浉P•E>L…©ëê&}ŒÌú)B¯anQ«ª‚Þ ³­¬WÇèNßô™¼Õmh.(™–X +¶%yÿ8mÉ\ŒE`HyTÁ-³ä…äÎg•5`–ì)“Nê¤šÝ ™T¨¨lâY96 !J<‰:äÀ( °²@W‰<­d•4æC#Ê¥*­› §YsPlÒrÖÐÞH&Fæ=Ž€"©Ì#!ŽDЮÅ9iš_Î^©úÜe!¤<©3#íLÕÂ}"Ý%ߺf-£§ f-Å´Ö})Ÿÿƒ*’üá)Ñ•ÞôÊY„H¨ +†“x +.«XOíÉ43Ãñ Œa¸Î–ðNéUçdsÅwýx±*ÔT¸ 3ÜWÂv’öB!(úÅ”XM-šWGÒºRµ–œwÂìeŠìUuRå +ÁY¬¼‹*|žkây¿îìÄÅ‚æ ,cW^_ÆÁ¼vÞ.Fþˆͅ¿èÑ<Éd_gKöÝsù`¹B;y§BìýÐù…LãydÞ8ªÅèùÊ‘Á”ZÆ:Ã+µî†<‡ŸSRa=ñ'ˆ„/#«M… ÂÄG­ò¸Kœí?~g†ÓÈc2ÀÉ$ {ld® p¿B‚Y +½i‰þ?·Ö¾ÀR”Žº¾´Ö.I„p#6Ê…à#Ld¥]Syü©óX<¦þ*vf,á*Ù +.lWçš&¶–²nÛÆ@ÖYˆ˜8$ ‘ÃHÀ¨­4q nÑ*y!¸¨á‰"î©!wr*)Fô£S ›u9x`D¯Pܳ͒¥©fòÆÆÜnjè,•HPy²‘Á­1EÙ€½©ø“!¯‹ó×ïzôÜýX}'œÖ£,Èڕ`.4AÒÒs®¨Ꙛ—±fâZÎÒ8Uvª Øõ2Ù‡\ªŠ"V¶`Qs,LõRÒO—µjSž}/å²™/ë/ò¹Î8'¨"ò õÆ_ËŽ§-dT±D[®m¥6º*m&“bU̇ùœ’ +YNÏVÉ´*ÒÃþ.9. à·)tR¬c¥¯£hꊡDîÖ/¤dROÙÁ7º³·‡¥cŒ‘àMØ6’å°–”.É›Ÿºl#UŽJ€)ísîÀµ¶Ú9S …ö®vÔª§8€Á‰µêŽÝ¨T‰Ìº>®b«wiSé¨åôÒ^ùQë2iN£¶äwJÁºr®Œ5×M\Jy–é×ϺI»ú–^r$±ÝJßY’¢ ·Ò¹=7IE ä¶‘m ÏÂND&M¸®[ 8ä+ñ7÷ë8aùñ©c:¿vXÖ»:¢>¢|4úˆ¿ +"ž/þøíÛß?þý‹²»Ä—¿ûË_ÿV>þùŸoµî€Í€Á ¼šö½×ðe­‹Wúåðˆün¿žÔcÑ(þozøêySke£ Íýe"-,÷ÍÚ\õ.°¢¦ïiÇ.:~g¸@÷®pìgûF‡8 Ü3~½E¸Ê-L‰î G“güÊœõg/C¼8‡ÛfÒ~×óu§—¯Û ñ¼©­“Çëö²qG\ñ¼ ðA.pœt¶xÜØ*ñ™ÑØú³Â±ï÷Ežá,pÎøÓ-äFf7ÜØ¢‚ìg7‚¹u:Â7±éW^öELù“¯kûâFÄ›{Ä õ ‰º‚¿ìsÇó‚NÀ„\€N +q¶Hû¼Ñ^¯­‰ï +Ç~"u^äÎ÷Œ_oA7fwüý­TFpá蘩óEü@ª»ø$Iu—ÊVÕµØÀ!˜ +þÆvß0«‘ â|EpëÇ7胞ï`¡-• ù…ަæ#˜øæØqéxSí>7Òcù‚Î[ sg/ vÕ´"~Ó¢gÙËšÔ¸°Bµ)å¢éij”yZã>¸ôŒ‘Ýù}Á¬M.T'NÓÃiƒ´|Ä3´M8k=ÏuhV`;FLÍ5†š”ÄiÐêg i\9T óH"dŠîqÌ vŸÏN +M³ÂZ\5ö9È…®Ñl‘襹ÉÍáüÏù½‚k‚”â[u´e½ßá7ÌŸptb +£³‰;5h˜àx"t ‰…õxaBÄE•Zé¸"¤&Œ29‘T$"7áIƒ+6p˜ˆÿ;6; Dø«iâ1'½k\q/l=pwuLì“ç÷†±†ÐÅetŽ"×2ã2PáÜÆ,CÎ…ANÝp(g; ÏUˆ‡?­AlìEO»wúÊ/Lø4È Ž;áBbãŒÜµ¢-l<7æî.[‹W1teUHš¶°æû=B¹91ÍŪïØ+EfŸ4|Ui*‘b%^|×ümz’lSMTþ‘ Šk +P2Y–&ŽgbC Šèwõ¡bYAóJ¯JM];ädœ*îñàt"~üÝý¾ðôS—5ð;Ëú.Bй-õ¤ œ[°ÛSŸÊ½RO•h]àPax§ƒ ëÈ°È ÁލŽ"Ý,>aõ"3?↴Äçh4¨`L•‡†¼9S´Ãh(¢Ø—XJPçb:tÅÂèÄTÈÕ4 õ=f\®ïzŸQ¡DUZ{â× LQñ-&§A4X¯1ÔŒôÔûn‚;“épb #ºL'ì¦üìcÀipõ†r8Üž3d¦!õù]2G üõÈ.,À×óÌCÉ@Ösêjò ëíñšAÆØ±·º²îJ»k"ïðY›'v<Û+°8r·×èÌQùÐÞÙ‚ÈšŸTÂòu$‹?óúd Akúk°x¾Dc|¥µ9 ïÙÕAä΢2öz×oÆjt禚cs«æ¦ f«ÜìÄ:­÷qîÌú‚]3y±ºÑ;àJ~P"6`ÎÒr0„—ÜÀû›bG™Ê+¡Ç¨×çto[Œ_Ç‚…VÓ—EySmgÎh%pБ‡;Î=€L¼2·`{4Mˆë\Â&w(+©¢ÃUÁ»’ˆØp£N²ÛÔOãó½³ /wÄÍÛº·ûC/y„;/w„Áþ@CPħœ4?t0¥ [L( Ž-öÃe/£¬œ¸Ô µ +:OvZª‡"ÏÇíÃp­È'z/üïKÝv"d+¶‰"œÅÝ‘óá¦!3Æ8æ +†7ÎW+BÚŸ%#vóöúÀЇ6_,vRÛÝ1Ä‹DöÉ(‚V¹«à­‚xNª¢°lÉ꘵զqJ£–éˆñ"‹@Sf Ùy^ä71)Y$gdÃo‚ïèEqÉß 9Øù-- K¼K •õ +ÄÑâ”äÈêÿ"(Ûpš*g—š±ýX©Zxà=#‰ås&<·½>)éT…gk]³¤ŠzÿªÇÕ½=apVijL¥^%þÞÀû ºÔ^¦C@Ô“(@ÕýŒx÷ó ÚÖ~Ö‹X´›(…@ópG{%´ˆÛ;Iò°À‰ ¨ÖÁfð‰Œÿø\l³üS@ýOÆÙw AÇÜý?î«$IŽäÞùŠþ@±¾‡š‰óÿ«àîˆÌ¬nR£“lF—îôŠ‹Ã·Û­"_â¼ÞÎÏ*¾C÷>>ƒóÖ…Íå +݈¨c‘¸ [ýЪ’OB4¸:!ÃÁ…ôª”0÷韱æŽÒ…„ÿ„aüÊJ Epº%Šh ­óuÝ5!Š B¾EŒÆ¦´Tm|צ¶ÔbÂuðO} ™‹ôªu™¡²_¶“pÊ ¯8º‰~|ƒ`âƒJ°u¬ám_Î*©÷ÇžØA@šÎ÷÷ÈË£ ‘Ç’ÃÊ: Lºæ=óËvèÐàŒ¯ÁQæw›}Á%o‚2óø¼ÜÐÖøŒ~qƒid·ZaÊçñÑ­m'Í(<ïèÜDyGÎ’Gëóª´ã™ùŽpU»Nø„~qq›á:tõZíÍùˆw%àK’è„ œÚ7‚\ü•¤©Qàk^BõLߤ˜yFÀ·p{EµÎïA]~ÐÚìÜ" ݘ¿ ߨ l±Îk ò£»ŠPKó|Çͯ‹.‡ñzu2Ac”PhG’ú˘Q2Œc…jÒDPŽœØÃ<¤ +sÑp‘&úÆuwEfCTôâ¶#tÐmééèâ¢+yí0'»Þ°\th•6…úæ !_ê{cƒí7°R50 +‘ôÇ c9»ŽÃ»8°ð¹[Œ;ôBʇLŒ +5ù"4›³)‹ªmMNròœÑåaV×ûö„ÓFÃ_ÅqøZŸaò:Å[ éi+²~T—G¯° Núuuð}UOºÜWuÐ'ß™0"#nò‚ÀœÈb,‚΄Àª»:”NrÄ×Á‰ïÓߨÿ3|Ô‚>~W Ú¶z~_wKhÌL­ÉÓß®öÕx¡.gÿ{þÿ–ÖÿQeµ]AUãŸXöF%sU0~¯ +j b]¬Pl¿¿ \ÃöŽTÙÔJv2Û¢Ô © +dÀŸ¾`îuªH}ÃØ*qž¨¢§=oF´× šw -½ù* œçûr.Š †Ìš Ó‰»aißdSOaNë$GÈ'$_œŒ)„?4H>“ ꈈ¨9>tzX€ù¢¶Ï8±Ó¨bm‚󠄪ÏZ··q6˧ˆ¢Xß0Žý×ñ;ìˆN«ZâqÊÓ¯¾SÓé÷(=å^ûŠSó­ ÓçgÔÄ¥I­¢€‘¦`Î%ŠˆwÎ5u¯O "ë:Ÿà™\®¯ß^ªóyÑx“Sa=Nõ#ú›ßÏú ¾ $‚§þÄø²%ôQ÷QêÇ¥@`ð„ÐoQƒU±Õ®ü‡±Ò¡? #¨%Ä:³§ŽÓšžäy]Pž†š@hMºøÍÕ዇‚V {’ÐÜÇÕøt‰%ä(Õá IºåÐ æ¶P‹´{~Ðl«#ñ£“Õ+Kl•\ ¢4ÏQZ½¡å=Ðiý¨¼gÔcmØÇÎèªOX9Z[?ç÷hT”õDh+®cL¥cyi+ûcºœÝÂáQ<9~² „GV•·…¤^¬‚[Xå°£\­ß ­þ¨Ê'ïù}vÒA\x^î8š…/øšÓ}ÐÑÐ6PÿÏœ^—£]Azç°ÅÿEN¿¥ôXÿ)§±á;|&ñú“ÓJH@ùiƒLÇàÂè$Ù1L%fA¿À^)²mº•DÛpj?ˆ±sf:\LCmU(ôO{%×0ªF$aÄXˆ˜h\(zZ™š(RÑ`§,èœXª2˜ìÎSÏÂàÏGÃUÈ d ›kÞdB¨Ã…B i¸–"­kj¯òõà> ½ð?ï¤9¼Ç¶¦Bý`éæT¥êÔT” JÖÜÕ —3ã ;“¾ð6Þâ¥ä‹(ˆÀ=ü†+£~\;äƒu¦ÄÈeÔǰ¨ò,æùæD]-^ uùtr]ÏB vóû掊ú 6ŽpÃ÷¥`$;”A=®EÁYËΰl<&ö/°_K¿‘¢çÒÅGŲƒm‹(ïQ#kjb1¦=ÁÑâ µªÛŠ Ô%)±Ç¯Ì0 ‚Ó‚ R–¡=ÙLtì™HRbµƒAH×B³©Pž§Ey“ç-ÿª7©07öÙ É(†·šˆô£=-–ã‚*¾€Ï.? +v9™+þ˜t×v}~—ž„\ ³—œ ´ð|kσp\.8ž@20KÝ’>«3l0^˜|ª¥Ÿ¹ §ÉÖf…PÐqb\¥e¢‘ ZÐûÔykn£bŸÉK9ô¸* …jáÍ/ضÚS“Ã"HI?(‰ÿ1Øö½ðBGL5™"Í Ú5íâz†NP2²ÛͼíZt@aT7°%Â8¦ g’³L¢ÆÃUrmØAª7RS9:z}¬œ¹5‰€ºhg=„ljõŒo9‡«‡ø"wÑ»Íǹ!ÇŠ?FkÒ†Vúôǹ!ø¸ºTvš$wÍäklå —)ry! ½;þü–KIKû »QEú@ãÕFv³µú©(ñª5n°Ú=O‰ýÕ-Ê^ÍÆi©,É ­ÝÀvΓna ²»@™×<\?••jøì§ëçéÄEÌîe h²·ðP)xÞœKäRÌ‚"ÀÌj7@g¢‰Ê«…‰C=Êù5Jâû·k“‹>éï÷<£ªÌ=Œ­vooWd +!5 B³o\ãÀ t”ΘG +Éž­VU +h³¯„â¥}]8ʼ¯³Pàl*”çiQÞäyËCö ?0ê'²wÐ@”ÎAP¨Ö‘Í ÊŸÝüUŒüµVÊÖ1³ŠS i_H÷üfçÒgº|ã*hR/°‡Ÿ‰ñw¤KÂêP^aìÂh¶¤XÈ Ô…zAc¤oFºÊr øó넘|©¬\eCÕÇ6o‚lóá)¤õÐD93½°§Üö®±“CÎ~ݯA9oKÅÕA™î=Ò-p¤Î¸Ö­í”ߦJàzï , YES +sÝP…÷xWzz´õ|ð2,d‡  -d‹†âð?,úy ×¼°v’“´Öƒ (a^ÏNÈsCX¼˜S&GñBsú F–}ìŽ÷slõ…m&¤LäÞO5íÍùñ²iXùVË©µúG’½U`I„GÞ-Nx‘¥Fy¢lzŠKt·+q·¯£‡t-Î츧áÄÁ†° ¿³J}u(hý0±V˜(õǦÝîà&¼Î»jîÕZþûH»åD'Âü_¢ )¨’úÀµA › ¨ÝÅçÑiGÀä4߯X+û€lôòÑÝÜç›ÝÝ ”´#á×ÇH뺆!í ªÑpO‚fýŠ{CË—n¾Ž'·ŒR¨8JA< zÝÇ·?îÑy 2EQ8™€YsTäq7P(â{sêa³bײù6æÖ-í1€GÇÖN®oxõä‰+,0AÝÚi ¾¨v®»Àú¡¸b]¤¾Îw`oˆ·Iæ{f:ØÚGT» +¦ú.Aíçˆ^Ѽ¬c½ã2¨`öµÛ‘’–TBìèZѼ°^ž%yzAàõÿ¬e:ÊK‰…Øû£výØÙ¦sdí«t—÷¶üÍ|ñ öÿ.ç&0çVÈ O£-®hU¥g+ÂÈý•)ËÛ¯ïS ÃS¶> ½ßæŽÇh{“M¶I¦›$¾½÷7Æ‘r™s‡t™u‰vry'/âI0O.õäeçµ2³O2ýä៼ (Á@yQP.%‘P. %ÑP^<îvì|SQ.J&£{¨­éÜÞB”ÁWo°´Z7ðÙЌچËi÷/³úÿÂ]Õ_¶¥ÏâIÚHýVü›¨›R˾‰À»(ȱ®EÿæžZ-¾ +ÐV 1ÙIÇܺЪ©‡¢~zƒãïc“M«™hFûðp{go3kçi‹­~¶ +-o½¼÷Ã’â—íĶOêB†éÁô:Ñ_ªÊlû¶äÜã9Ll +é·‹ú 8/ödÁ»N0£+]•¸  Ü bSx¼M| Ɉ@L¥õ„+1í6 7ÁÚ¦ËQí8Tž@ y´¹ŒÝl ;MÞ”¨Ÿ»µ˜Û&¬¨ãx4Ü‹sàqîñÜ–VFØžµ±î'°;DlHŒrŽw/v¡ŽÊâÚf¶–ÖØæzvû\“ÈègÈ{ZÎd:˜øMx¾7lÜ ¦[œp÷Ë$ÞÐlñn¼ö¹‚¯ê!´Óß ŽÑ®1wÀ ÄxSÆäÆ;ù–<‡…Ý™·?‡9‰H g±#ÿ1ÔaððX:еÛ0ñÙ(8ÄjAC~•†`é6bªÉóìˆ@8µ—1æ‡!qŽ9[Ðj\*\ÉÖ0·†°`Ÿ i…bÙ©u4#½1ƒãM×äYòÛVš½~RqU?}@Ê3à\wHg}‡es}SæÞ2H~çª%èå*üF¾Ö˜Íœn†Ú¹1~Tnß;ôfmT<&J7‡ÔX×ᦔ5ˆ‰½‰àw(“?ÄΰŒJëð‚*ˆ“\Í¡ µþ =o¯ÎØô2î€C „×ÚûùÈÕ ®†f!ª‹y‰È@¼†ˆÌrîÙ@mŒ¤ ´ÁÒ÷À¶™ø} kò»n„f Wê» ¬‰ó=»á¸âéØZA,ª®ìiŽTe Ff!)pÆÂê5ÎG®QC|êäÊmÈ\S…ÔZAR&'ׯÏÇ_€4˜d85-r~¤Á®TßM4åõžis90¸:agù#b ˜ÐšQ;£kn2úåçØZze]ÒÁ˜ÆÄ€C\»C’9Ç¡r½Â—M=µpOn‡Œh0v/¡éÂ* U°§'— TEÖª¨ÔÎ8-ÂCбãûRÞñTNïÄúœ ‹ýlã!âÒ'´³í?GS x‹FCS‰.ŒKõÛˆs¥ B³ ±º¹ûÂ6=eT$¾ Ð5æ"kÚ@©Á—1PŸZQ€(6OÛ{ƒ¥ÒùÕƒKj/brwøøâ½I/î=ãÄÙ³2({›e j¸õíÖÛ)({m-‚âöv·â³jF¥7®æ/æ+ ŽÍóïYz–+sØù®ïÅúÚœ~¦ã¿òÀyƒ3›ž=K®RW‰¯éžÉW†ýèÅð$“|5 Xýújo~Ès:aò5¾ë{±¾6O¾òø¯<°XÂq»k|ö-9»ÁŠÇYâk»=œ¶3,óåì:¤zê~œ]˜[gù±.¾ë{±¾6OÎòø¯<óÎv×øìÛã¬zQ÷øJx,W{QU¤=ø;±¼Ì ØŠµÀ9§Üì +»â«¾WjÞøq’e »Î^ÇèäQòÐsßH._£ˬ–5²“ŠÔù•”…:vóº±?‡&?㻾ëkóä)ÿÊÊ‹Û]ã³oÉÙ‰Ìô8K|m·—0V†}Kvv`zr6ÊùØ­cþ=¬ŸåǺø®ïÅúÚ<9Ëã¿òÀÏC}ŒÏ¾%g½Ï7K|m·—05ò_7»0ý+Dò®e§H¯³úßõµV_['WyøW€qg·kzöìqµYmû8 +t¬nöæÈ0;i0ßg³‡Vï}zÎxüã7}/Ó´éãŽüÊÂØÇä–¥ø’Rhàk­‘I†ÞâüÅv•äH’ãÀ{¾¢>IÔúŒyCƒ9¨óÿËp%cL£€¬0ФhîÜÈ‘ªoP™—Þù$òËÈÍ=²sNј‚s i×ohxîîÜ€ì`{èµߨ9ùgEØv[ä4,—åKöìÉ~™A {÷è`LÁ9µë7 +¦}-™»²~Nј‚óGö\¿Q°òkO/xäd9¯¡ ¼‘sIä0ìƒDy#¦~때vC@ÓN)Z:’zñF¬q¹/CNfþÿQ4|ƒæJÈ a¯„$»ªK®µ~ •Q¯oÖ<Ï9Ec +Ω]¿Q á¹»u>äpžÅ,©ê<Ÿt´ŽîÔ¾:¬û0¶ªÉ#äÇaM‹,KŠíØÔ•W*ší´„sIjÖ%§Îb·’åE²Ò£i ÙÄéå¼:dŒ5¸)[üз¡O@\¬¯¥RÛ%id+™Á×é %é ý3õ·drÿ´ZæT¬û'£& ÈËf üû'ÍeªYšïkdÏRœÊ6§iFMÀ âoo(¶ä)’¾ì¨i¬eØÙu³F'#¨)ꤖêŽó¾jSš)5½´Áó€§¥Ávi?KsóoÅòq±!x~:jI“‚4ímVç'–ЕvÖó®0Ó1_ªÍ£h?™Ó`·N¨ßY"š¦ÞôKÌÚþªÔÃÒUäÍËÊÜwM4Ù±§¾ÎY÷ZÚ{;êÖby…& S¯†úÔ¯»)ÃÙö´PÖTg‹¦2K¶ÕH9 ít>Ør³ãbͰôŽ â÷" ›‘tìÜl¾þâÐý…qlÍeRü“pðûxÿýÿÉÿv‚·,àñ&ÿ6ùïök‰üíºüççV€0-aþâ=ÀÁÆäÍç߯Ñý=ÖuKX$GÈ—\D­Mò5BèÀŽÖ¯Ý$,.²Ót8ýÏøðáŸ,=ïœL=à …k«SŸ>mí“Y¡³Y”K©]ažë‚`³>Ùî`k€ìä;‚( +!Ü窾_ÈêQ}õY•ß^"/aøÎ");¡@V/P}ìËË“u›2×ÿ¨¯–\9n ¶÷)|*ýu#€o•û/R$KÝêycü ø‰Óú«Šd]Úˆˆ[7!©cK*"lÝz‹ØŸ[Œ±öÜ: ï·ˆãh‹ÏÐ7H›´Æ ÝÆÀÄYr ðkû PåºÍ†ñÞéC`Pê6(p/ãv/°6}[›¿}þãn0ßCã‚öкC9ìÖȇzÒªmlÙÅ‘E~ª5”¼m%‡ÈW‰<ùp‡=ðbåt—©h¸Ï‡áxx‘èèü‡‹yœ5‡Õ[Ì¡TkCiÆV1F;D˜·Bò%Ïz‹gœ.¤5+ÓBw3åø–å iß¿ŠŽ „ú‹2àòå`Æe`$òm$ +—Ë€Ž–Ë€ÀŸäßø¬ír/‹~߯qSß¿¼ªöSžbåRçiÙSé*l‡F>ô©®¯âëó”uisUAáÆ~žºþ”ý§'xµ OGñ´¯näáUž>æ× +‹Oß+žq®ô”h™zÚlЙøš –.⊡©"K‹rÕ%æÌ†P9•¸~ZiÓ€TQ—…³ÐàIžòâoµò·2lÛ;i’ñO“;ÔÝ1èdûˆ‚¡¯"ëCÚäƒÖ¥}Ø5KN€?d9ëÑÛ +Õj”~ ™ã,W©pÙշʺí†e‘¡iÞÞe¾¸}[¹Z˜äœ…§\o—QÓŽÂÁ¯½ÿbóüZ}[Ó<±‡24VwÎ*´¨TÅ½ÌØ—õ‹ãÁŸÓÔ×ÁCÙ²è(K[Ç×f1RB»c»Ï"¬!y^'õŒµ|ì¡Ê“â4_·'Ž£UqÍu ‚||-1Q]šÝÂú “­}d‹§ÁGì{Þ¤+Œð(¡Ï~È@€×3"£¬{~ËáÍ…Ò…Ø5~ÞÆËðMú£t*`þ¯»íz³³î›ïùz—µÄàmv=VWßSèa›:u`£ºv_AÎÐØ]‘ ?ð£ê©®1ykщ·ÕÂãµ1U§Ê6Η…J=Q^1ïÆŠ©ÜºJO‚QÄ7#Þ3‘ºñ#7¯!"[} Yˆ ++©1—Ê“Õ$e Ðv¤Ì +n6ޱ)”˜p¡mW£ŽJÁ ãXÞî¸XVv,kò©‡j8œ?Ív0; +ʬ‘Ìã¢|­2ïK4 +ÆõÍèáyõ²†×³ìR’OæÒ|¿»kxÏ÷»»Ä÷ãÝ}êšï®YŸ”-YN Kz@U©°ßâ³Å6šêÎz±É¸iw[/¾Qb# ÿ)èSë‚}fW¢¸éXª«È’ÇâØ7ÙL¼‘Æ¡¢2Ù„Ô7âY¨»Â>C»س +ÆŠ{9÷ù꽊_1r+—†Ê4ÖˇáþÅhÂ,åŸ{…(Û Mb‘¤ÔÍ;E‰([rôÀ,Rè Þl)¦?ý ôÐÁŠéj¸Yš'E‚–ë<¨ûA6P‹Ð{öc ’YX Úp9Ð~MÑ ~¸, /æRd ™ +Ò»”ÌeU›*¨ràJ>ˆPW¡hÜí±ØÆSùÒqFÄŒ) ãP>v<Ö`Y „Çïdägë¤h×X^ˆ3±[÷LmD'®Ñ*§âÚ"Cíª±4Ûû­«\{¯Smœ°r®8¾ÞˆÌN~ó^ŸVe¶_¹Ià G@Œ`åþV&iSÏr7 õãÊ#^ÊK¡Ì«õ#ŒõúþÀðJͽrG8ÈÕ z>Nç[h®m`ÛÙ bçÓl`mÍ·UUÂT—=N`Ï)¤å4&öqîñ5·=Ú ý«MOnkG]•|Š“§ \Æ9?;Q|)üõñn^Z §üË…à<Ÿ Rƒ÷¢OT†èˆ {¢L£žOto–I~‚wÏà ׇχsó›-dÍ “®ôv6÷©XÚÔ"án ™ î¯)ÂéDo÷Xàx;.·ÃŽc +-òÀCŒÓ%ç]ÎH¥\¹>:3(˪¬©…£Ìe“32˜%/¼K?Ú0ò€…3k +Û3ºA´(#±\õ²ÃÃmØv) ¥c\™½¸®×ðy­€6ËDX5A±aiå>£¬®=»¹}1ÈøÍó­!{My1û¬ÛàqµžèÞÛb,Ö¼Áu~Aº&ËXoJæB“ÛÃÚJ›aÖ½A0n÷7Œèt6“î¶÷ Í^p;Szâsúò¸ÚU¨— 6,ô3)×èZNä¤RÚ…ÒÞ4­tµrù¦Ã·îÙi qî¶íà€¿vrÃZþ„/“±Mæ2»ÎþŠÞeJõX~QïhÈ_e­¸òx…‘Ì òy7¯DV§¸I)­_²ê[æô[ÃUøÛëw$·Ñ¿æÂ·®•‚ܘº³äŒœ®Èi9Þw0 K‹ AïcªÀ± +|ÏŽ“')SN*šè¤ËRÝ[6ðg Å )eÇÄ9sÛQ"{OË +U¡8•‡·ÒU#R¨ó ETø±¡1=”öyž j £ßÅŤA®&㇎ª¯:=C‘Öfú¥õ=Y峨.ç ׊ÜýIËøÿH çŠß¶ç²Gv&»h•‡[bEþ~<ƒ…}%Zll Åßï7§à×osõ½Û«öj.Ø|ö˜/Tº.‚„[JwïøÉW^þ.È´‚Zä<è0Æ7u±_èBqéâË^Jä Ó-{`GSÜ6u;™ªµu’Êè_3sq<ÞMRsÞ÷Ž[óry{'¦ZŠW¶˜&Ë6ðµÖR:§ãE}'Ëù÷zŸ²nhäh„á›(º~ãÿꪶfùþE舚Õ^6·‘öÃŒŸÄPö)ý: WмJx\A íRaÀ¹ÓÑô©nè«ÁwyôŒ òTÙTb`ÔU£ºQpaÅ3ýZXðZ<®Må$ñJ¸¹ÝîM ù5Ôô©«¡øÔ¸,,ò¸ðÇÆ…µ +–Ml‰JT5cÀsô±¢íÿ§BòJ¬Þ +¬~A7&¿Ÿ¯•véLa´m +§]¤¤½>¢WÎî^}”íªŒ…²áŸ¿½ÇÓásyл[ëI$ù—<2þ,ÔÿÂ#^O¤ž=ú{õ›Ÿ<vÇ5zX|æ @䣙ìÞr¹SWr«xi Yef²qfìÈW¶¢Ø0:‡ÝVäo4™Ëã‹SpfEÛF䇫=¢ Ûê _ +ýw¡—-ìõ׆×FA’~ª=ŒTÑ#¤Vhêªá§+‚lŠž†z Í¼AÅý©#`óëaÍe µß˜¼82+Ú$"Ëä2šKѱó‚'ëèÈËú­F9˜PC³£ºó·Ê¼Ó5¢ÍÖÕ"ø&ÆÔUn`)j+@„8íÙ`‰Æ­ð"T9$tlKüƒ{h‰V-M”xUò5بJíDÄZ±”cÖŽw¼ŠÎ·­Wü/Û’K4ýÊ™Ù9Œ|™‰óß1±»–•üªÞsq¿¨¸ÿ瓉ó“‰óo3qqÇÃ3x8<œ<œžЇëOy¸<\<\~ÂÃΚ†]iƒ‡È²³ÂOxØDü/ûU’e7Ž÷uо@ú 8§^ïìMßш)QÊ/;.W÷¢66#¿H‚ˆr#âúkD\nD\‰Øž‰Ø†×þ#&Ö±<‘pýEn ×Gn&aýûH¸]Hxãàö1Öƒeãàzåàú)®ßáàzr°n<~ž/\NNã à4vNã,ÕÓÃ<íSý¢*W1Ru¦®0TÂB€ƒ)âV!¼†QÑÉÊ웺Oëžfs—ùÛÇ:ÑCWKä–Jî 3ŽðÄ®v$A(LéT +Sê˜YÙfë‹×µgÄh“êb͘);1 h|í nc+/i¦ËìÓʈB‰ÅUèqñ› œ Þy¢çjŸWã¶HiÇQû©oµã×/x”ó‡Q4Õ1ïùó¥Úûd8)ªÛWž„‘ Ïj'Mf¦Þ#Ò¦/ANWÖ|ý#ó¯7ôŠ1«‹n#î±+å“ç¤8Á@4ÞÀ4 BÌ1(ew¡p¢³ k¾ÌÌ3¸û혈<¡k'>HŒ;5Šœ'z#oäü”mÚË4h †¼µ +' +VIû¯ñ)6¦óD7PÚºÍA—eÈËÊ ç»âuMÏÔ¨W™§:¢)ûVdˆöíä4ØèèAë×Ùêc£³K9e%wzC[¦ôÒ®:œ:qðbl Ö‡F›ä¿ÔáÑuÔeh€Öbæb>›ž’/_çyÀæE ó²`‚eÞ„a;¶ÌG]¼x/‘Œ]NÙÿæ?„éÙо´Šùöa‚4*ºrY³¼pLi²Aª´û±/·În0F)Ž`2.D\ÏOÇ€ª¥½äaW]ä@ÄU||¾1¹\3Ç ãD. ¶–m ~]O)ýœwŒ£&ž· ðrJÄ´N¦KäžÆBʬˆf¿Éˆ¹¯úž›”äÁˆ C hߦtsb“tœPf³i:&`ùaÊ øuAá<ý;vˆƒNuèÓ5¨Ñþ>U~’R‰Rµ¹^Ï xl@“¨ë¤ùŽwmÛûvkR¾Û·3\y^´IŽ~EžZùa.í†B¬/¯èìý­ÜÀ«üÓí)l*-Ø4™„ãfQÅÐüçÑCÁ(Òzv¬²ßÉÀòI£ÌÝk Á>:à¬fBù‡œ¼"pö8ÛZ3‰¢S@}$àp?vÈ~×EÒ8ƒ8›Ì ú7yœÐ]Ùcvx‘FÇßø4ÖqÊŸ3R[ÚŒzCaÜBa÷zÌ«$òw»§[8Á(G/Ç®áÃþÖáÃöáCÿ²á£> ãÿøÿz>ê_8|x„ñeоwéï’k™Y"$¯‘<àW½vH/ðIÛ›~G°é.ØäTl‡¦ùiÅÖ.ŠMn’M¿#Ùô&ÙÚE²Éƒf«»fÛ%ÛU±í‚í£§`ËWÁ–wÁ–/‚M?.ØÊïl壂m)´)Øò&Øò&Øò&Øò›dÓ]²éU²é)Ù°imùI´i®^u‰â´¨6Ùy³ì¼Y®¼Y6Þ”j6{I›ù6Ë…6û£fkÏš­î´i;mÚ•6ÇN›y§Í|¥Í¼ÓæØiÓ®´i;mÖ6¯š­=h¶~¡ÍòH›õ‰6 CÊ Ò|%ÙúU²õC§É¶º(´~‡Ï‚í:5í»b«/©¸õ/I}‡͈²Ýæ2fÌÓÀÜ®sÞæÃç—ùlm=êsÌõ20_Gä~CûÀÜ·ùÚܺ°“º=žë0]ç-œôŸû'§'zñ½’E«ûÕlo~oKÌ Ð$¿ÃsT­Û‚Ãj$mLçíw|ÄÒ‹»ôwxÅÍéŒΊ¢.u œ)ý²¹:LŠ ­Æ2ûáfßQ«d=)ç½ï„R~P}Mxq¸QHÝBh °½¼òþ¶„Ñ« DO¾–¶±ÄAî'6y 9k]Ù%ê1+;‘+{œÛeXK+<ªåêHiÈÜs½8›Í¼#“<ììYYL#0ÓÏÁÐ g ›ƒK“19yN19f¡æ&mNqïDr¥£E;]ö£M£ÙéѦ­ÒËh“½ek<]+ζÈÞÁ&ÛÞŽø¯téhss(»4 ²¤CϬY@ÖÀÚ¢1—H§Ì $Õ5Ce:"šoâsG”ü0‡ÜÔÙ|‚ËÑ,¼è›EsOÕ2+3]q÷jŽç†˜UÿÁšçRØs˜·¤ + ;³X_ög‘|Öü_»ÔæÏÀÀñ^7´1iê7´3i½¡IS¿¡Iǽ2¾ù—½˜^kî±æI5ã ÖX.©8GjÏÝ !=Rï.‘ESÞÄŠ®Ž®VÆyñÄçí;qÚx‡7"-íB¤z2i®SCÆú°nB!©ÅžyÿŸw™×†—{Õ‘§Ê3y–ñ)òÔ_bÏúÈžýsì)Ï쩲³gÙÙ³\Ù³ììY6ölŸ`O}bOÝØÓ®ìY>Åžýcì©ú öÜÈS{7¤º U!¢Ê%…UAzðMf +ºÃ:ó£O¿ÕØëÌŒÚx¡ŽHa¤ %úT­0hQóÔ^2!ê¼2ëñ´ëÃy ÒK }È8D÷(¹s§’’v¤T臑`,Dp‰à$C"9‚NÅÞFõéXaÿ˜ß¢ÑÿdIƒÖçŽG8¶J;”jj Ä`0&Ó·~,ðp%Í·mïÆ—4.^á¹Ñ?vS˜ U‡Oõ’áˆÌ W¦5måÕLiTÐööý®ñ[ä¹1 +Ä Z,ÓKNX“=‹ûÆø¥•0ÁZ¥àà†¹Ci¶%0 íŽ<`1âJG·íUû›q…2(ƒ>52Àˆ²BÉ5U¢Äv‡lÅY^À-DJ-„:8àð]ÝéÆ ++Ä‘^›§‰²¦Zœ£»*;J笆O#múVžÈ¹.—,ÝmÏï*²Üc ½¼Œ¬!çdäI&Y¨*$ãu– ÔoG®®ÝnR£!U‚¯×î#ÆÉ,S®ˆÐñÐØüwhêBBÿQ>±££»2üð£ˆ~îÝS¶mædbB7ÜØ0'“8Aj€+úÕD³@. MðÎ7´{ògØ!Mާƒ«h‹xµavVìR¶6~dþÇ Ã‹I5ÉÆIuædWaêh¯Z?n<Û«JàÆwFçn *ªß¿µ¤˜f¼«Õóf#„Ù2¸õu«£`Uoäþäͯñ“»ô¼ÿo¿¼B Ö‘ï=ÖÃ1’ûMVvS·oòe:åÙKU)ÍŸÊËØµ~HK—‘ˆ™¶Œ³Óv{-ùß–üÌPüÆñ$F”°ÔŽ‚¯¾sdTOkÿÁ©5 EZ5ÁAW[¡Œ†Üâƒvr7?èMºÚücûÉï8,½{}QaXšúÂᧇÜ7Œ'±1ØCÀWÝ¢fÌÓ¹Ï[»®zÝš%ê}J.rÒ +<ÉuDÝ.ªm¤Îc†é$µå0ÕÖ½.µ2ÄKàëEÇYŽâIŒa¨ø¿ê¤ngzªÅÉ =ZµV]£…ZÜF¼¬F$3ŽvÃ-ËX$솟zH~ûaÉÝëLæméf2?‘Ì)Ž'1¢ŒÃ=|õÑ/ÎKó䎋:o¶šE‰ö§µI¼†fÉÕg^o7&Ô¦Sg^7îÉé}˜b1J'åKƒ~¦ŽµÆ“1ÂPÝá¤É©æÛJ_Fôã pÍ8„1OÚâd,¥FÖéXP•N'†{¯gN’`) œ”&CƶñºY!ôDñ¼h<ù'z^ÿQFŸ˜ÏÆÖ"¥èýÁ=W½T¾A—5p##@jÅ`Õü‚Ç únÃÕ^¹• ¯s#…¢y©í˜¡îíd™”¦ žÄ‹:p?Šð¿âè©Ó<ŸWÔk;èÑÇ¢’èZQ®[¸ßdc‡/øU°næ!©=ˆˆ®¼dVë6T˜ÎÇMTk +ãIllT“Oøª“ZGÏèÙŒøg¥}Eß)b(­PçÃ4C,¨±Ö¹NÊ!9m‡%VxSܶ#áá%ªÄóââ‘60hGìatyáWð”¾÷¨8cVÔª•·2Jeæ­ð +îd+Æ)ù&]s,±m?·¾MŽãIŒ(1rßGÁWŸæG÷Ûu{”Þƒ†±èå0k¢Í…×YnÁî¨{©ñÞRP.NØW‚ Ê=D±s¯âÍc‡SßëeŨüFñ$^š•§ø¿â$Ö±ñšG­H¡`ã î`³¿pÅ…p!ºWÒ=Bª‘­2‰Q+N'}‹½zÜS,²Ø¹PܶÓIzsÄlŸ‚x^4÷ÓAÄþF—˜ƒûôûk$1’+؃çªWÃ\‰äÜÈò +Æ»^gØÊu“†îÜÛOÀ{Á’jÁx÷µÄ Qø)—¾MŽãI¼8± L¡à«~1÷ÛßU_Ì ±+ˆU¼õ’ü‚‘_Ë÷jP\(g«œQjNØ ?óô¤\4d2Óx2¦ñqiœÂx»ÖÀ$¾òèóܨþî +¹v7V¬zA¬žH~!Xö}¹áµ†SæB¹8`/¼Ðol‡)™Ì¯yìðK‡“·ÛÓx±g ýW›´Â°ï*)ÐF6CVm­Dò FÈ~Ç?Ø8_¨'§ÂFd±wÇlc–ܽŽw_K‹~J ½oObcÃ(ÖPðÕG¿¸L Oí¢©âB»®ž/É/xåŒßÒ ÎõVvÃÏ8$¿÷aêµ½Žw%Îõ¯Í9Ž'ñb§¸,†‚¯>úeyn—zëaW«8C_’_ès\áXÈfÈH̽ Ând/H­¦Zôf2“yjLæðgrŠáIŒa§Ÿè¿Ú¤ÕµÍŠK©H"!´a­°½4âLFòÍNÁxóâ6ØY¤Á£‘[¯®¡¸„ÒYù~ãí¤Z(=1< ïFW;ÅþÑEŸø±§œQ'R+ØcU»W¢RC)Òn¢”¢ûàˆuÖ§¸P,N…“Å^½ÛøÝ7SléÁ,Ùc‰%»ýÔè>)Ž'1¢Tqn_}ô[aÙSºF÷Ááì +¸:8”½$¿Æ^FŒÒ O(4ø½P,Nƒãqo?1£±l¦Þk³ýlK¼¶½~¢ý¤8žÄ7û+úõVðÕG¿¸dÌ›Gõ¶vØÄjSZ¡Qy5YQ˜qÁÒ$v‹½ ýÎí°ôîu¦ï¶ÄËÌë'ލÇ“¸11wn_}Òë–—§·E»EîC!V‹_1z¢aÑnqƒq–_0Þõ’c”ø™,+/Éí<Œ1í“y(;·—‡TŠâI|ó®„rŒð¿âèõ‚WœÚbzô±Ø®;Q1“Väß2øÒJ´Žt¼¬NŘR±$­å0µb‚ óÓ†!}Ùã%29Eñ$nœKúzãÿŠÃ»sâštC±8ƒí÷äª×3yÓØ™L*[+®U ÕF±hNCbÏÿúëaJEƒ'³j·æÛ‡”æžÄ·rý.bÿ*“Rؽ™LTÊüC›V[‰Šéò31^®~Á¬ïq¡ZÖânø±Cò;Kmsx- Rø‰,Îq<‰G’Ž® +¾úè·‹»²"¨÷–`WÀUÔÃJ$¿àA–_°{ºQkìAþkƒ{oåÞëÄ\1TS/z<ù÷ZZ¤ðÓ”9Ž'1¢„¥z|õÑï„eŒ©Ñƒp6»‚Xmµ$’_0böŠj%ô²¾ÊuuRa®±$½õ0õö½Î/º-M~íãGgrŽãIÜ8œtô¾PðÕ'½°ìùÝ06Úï™ EXõʨ-‘ü‚+Y~Áø-;n-0´Ø 7õÜöÃ’»×o +܆)ÜÄ×MQ<‰£jëÄÿUG·†=»{‘ZÁ¬¶:•®KÐd¢ªt šc’qŸƒ\6ÃM?$·ó0բѓ‘‚¯¡I +7]‰‘Ãx7'ýÕóUG·¸^”Ë“»7ÉEâì®@ë^V2Ê5L=o<àû^wÕp!Mîƒ"ònç2ï}™5ûÚŽ$ÎÞŸüÑÁZ}cÿ¡bÍ{f÷bí}à±ïõf-cé0â1Z‰­z`s½bM“zíÔÕSz½÷fðyy1…ñ¡Oóqÿä#[GãÛÁÿGµ0_üõ+ÊwŽýÀcç²wÓe‰Æu‹™Ü¢¤V¾]9½n©Ž_á«mÔ§êù!Ï»œ ^Û!4ù~#2{7ì¯*ª,´íµÎ›žGfó}àqïu[+c)Ñ€ +#ï •BËÐŒüGhÿ}1šZ¦°Dðí¶ý€ÚÞ·©üX/QªÙÿ“s¾¡§í訣܋¿¬×z‰fRÅ^ë˯Ž=#î”{ =ð $#žßuýµ¬ §Á>Xµ{Æëxp¿~[}?`N¿Ö˜ÓÇ[OãyòÄ såUóC-Þ/ènŒw)ɯïO¡½Þ®’±Äpà .õâ}’ò…ÆVv³¢u+{ó¾ŒÕ«¾¨~žlÁaŒ'mr¥LýóäÆú+å‡Ô¿ýóë¯_ÿþO}¹äf²ÛPxîUü(£¨·¶ ï< nÜãl?çJ*Éî¹A¤Ñ€[¬_’"©/{Ýøg/ ¨î7²Éj€òx¢>~¼ñ§o×'­`ˆA~Ýžš>ä>²Tû@sÇã$ýýxÛ¾¬i¾’¿ù×Ï·ç„y(ÿaÆë +ïùQF’ÄhœÈñÔç2m7ÇCeM¤Å—-(?“ÖZWê +C§qÊvøÐHªíŠMµÈe—£®´Ôb |ÔŠ¾gÜœåßž©cýP--‡³–ÒHŠÕÃguù¬n>«Kµ²ù¬>Óí—G1¿º1i­ŠÕ©VÝ}Vݾ:}f[hQðcûæµ¾y­/ÅÚáµæ»¶Ýkmz­=^ëS¹þx­ï^³ûåJ¹rg°Ùm¶‡›mñvÜ—ˆóÛcnÝu[ØÙŠ;;ÏFäÙ +=;ô\ZîÑg{øÙv ´#mÅ mAh+ +m C;âÐ|·©çŠöÄ¢íÁhO4ÚŽvÆ£) m‹H!i[LÚ”¶¢Òް´—¶3ìf`Ú™¶‡¦=±igpÚˆN;ÂÓV|Ú ¶"Ô¶µ#Fƒb4Üß‹w$Ò‚›,f@ž¼§xƒ;ΠŽ"ó"SKÇ®†Nv ±Ê&MM‘ÖÜöM¼šn4R“_ž©ßÄ;»ÄSN ˆc¶‹Ù¤•ï4Dã/ËGtV½¹äjøê9Ž#ù\ÝXÝÁ.Ñ ¾~>6ß_Æn¼Œ±Ÿ@ÚsÃ{Ý€ÃÅ š|œëÂr®‹¹…×\AïÍÞ«ápéPë}ií+w;>þ#v`5ž~Åz(¼ßìa±3ÇÖGRV ìýÆÝvë|ÏCRV´ÀßÛ¶f|ás5_—J`áN¹?wª‰µj¿NË9Êò<(Y)#ÝdIÊTZy'·œI>½‹ýËcŽÐ)V°M?ÙÆ×]ûf×yεipíš]›ÎRg™£»CSå–Òi¸àôÎî¸Ý£»³—kxÚx]Ѽ·ŸYÝPG +œðŒ.ÐN +ÕNMQc“è ^ÙŒ‘×[Õ-ðC‘sâM Ô¨@´o6ëámõe£~…œï¥Ê¯¡É÷ÛÆ}Á¼ÞéU IØ«î‚Á~ó^4[Í/[»[@(P~Ÿ9 Qvv +ÑÃ-€nuØsí¥Ñ‘iI+›B@­Ž—·»,l” •yE=ÐoW«Rò‹+]Gôè6Ö Ø†À`|¤¦Y´›ÝŠ6µ8Ä®ë™îÖÊô×3[76eŠŒ µË‡]À¨8¥Øw°úŽÂ}£Á`ÙÕ Y”ewą̂VBæ0Á!êÙêpÕgMlŠx­ê„XÈìPÅ¢<ê®fÓ—š]gß?%—Šüj9¥s?$3¶ á} +txy& šu‡l|OÀÁó3ÁDX? +?e\/³ÍÇ¡øQÈ6ˆME,±îíIÛµ^ª3ѵ{­nq©ÒãN\–M8-)¿õ ƒëÂ]\{æ…•e×a$'ò&­ ó¼±€Ô)â±Q(Eãíœëe,Tí½—"½nf-Àª)Ù ¤¥¤&2ˆtœ¯c!erô‰‚iìo0ñÔxš2kP¯ÊÃá=ü&ÊVµ Ph®UkR¸vªԲd³’»+Cq$“›ãê†H5ü·™ƒ¿ôœq/W¿›ÄXºÌnÁÛtHgY0ßD-ðøóÌÔ].™¿Vú™¿¢x„ï+õÈ4ÅÉ=2“ð¼3]ÌT½ƒ¢UreéŽóVÜ2…:e$ì¤ÙÓ²Çhž™ýälXøCg<2Îà­AJ0êñ‰‚‚ŸA/ÜSÕå¥(§&ˤAD†L¹÷ÍÜ4UAÈ7|Žj}¥UÎ-¬NÜ'fÍÕ¥Aîw—X¨c¿FoXèXJ’«Ÿ´”!%·u]Ó¶Óò·äETÏBO4ÖÌ!C)y»(t ° +/²Ý˜’ÿhæÆ¢[dNV3V[½}A?6—ñ¡¤ñ±ä\Ô(ØtûʦËJÃO/ÓÏå\4{h˜ÈÉA±íCÖR#åH2¶ÇÔÓpNå}²9ˆxë~ðÔ—L %ðZ“`F¯ã”Ø$'Á¶.Þ“`†·DÝmÓ­Väª/­Ú +2tËïwt©ãIÈÊ4¶¡òÈ)68ô7Ü•è¤tW¡«´à¦ÄªCšR2LÄ‘­n†ífë¤Î˜mn€Jü}ÈØ)ºT½­…›ÇRé$<·ùE±B.Zjþ#£$ëñ¤ f)Åg†¢¾„Eó ˆ„z»‚ФÀå…\NêJJr‰ù‘Eñ’ämÈÌNcê`SOÿÑnéÄŒ<Á¯œ´k£ÜëÚáëz¨Ìé}›V¥*Få½`¾ØÏ!ÅßÄÑ‘,@ÜÉq‡Ê äM=Æ“C'›:Ý]ßðîa¡ë $J¹=u|uèu\¦¹¶ÉÌéŠÙqO;}aÁƒ7„<øRL÷à§cübÓ/Ôº3Þõ ÏðÀ¢î½Ö"¦ë¤©k#­&cBžvm„6ç€ÀßY´£S ÷5ç>ùaAápô"Fõa“%%LÐ3ýô…‹Q¯ _eØc5Vå CDÝk#%™¶AÔõ…°®¿®ƒÌ®Û4wBi‰"3¶¨É¹¼¾€âµA¤º©…—Þ[=ì9âm’©‡Û¤Vy»o–mvK?¦ü¢Àkg§ë ªë r]‹ÆŠ¢nbš"mc8ÍÔ…ñøF\þQFŽ“áµacuSÊÙÊ•¦‚Hcª£è˜ú€ª|½ ¶j߇oO³¥aV¾’‘Œ~ØJIÿÐU’¸à«úúÍ­·5ŠÖãì3÷ˆ3Âí®ö¼1f¹s利7³ni±¨ ¤:4{@v8ÿá\•‡eèî¬'4• ùA\á”ö€KIcÞÆ´`Mý\[$Ç_»-ÐÓt/&N‚Ÿü°ƒâEŠ,‹"éXVß™ô£€Õ”÷´ð”B«‹^ýR˜t+Ïô}u‡e·s÷V¢6x„lÖÖŠ¥,üºHgi£3|HbÚ¢ƒU4ôvU%-õÅ}>ý¶†Ÿüuœs#µ‰mA%+*žÌI?ÚÀ̪:KZ¼Ê[Keá¬Oïaâ®®¡ä2`X·¬e­›+¤¬w“'ù¡=ø€ˆ Ê(–Ù.]^D‘d1q¢\å,èÓ•m‹Ÿüp?(ÉÕ›äL‰z݆òjB\”JcáÍvUœo}vYü;î¡<Ö3š•ËÒÝÒ5°@µ”N$±°>PLS ë 3‡<¸’Wôt„´ðÊ~íÄ4¦×‡ åšÂš;øòÚáSÇÝ­ 6aׄG$WÝTaz9ÕRêu1¯ß{_L,ß´˜2s÷©»›º»Â©óÌùgà ú†¿¿ví…ØL| +ÚⷠмƧÄÖ…ÝÇ…ƒßtòïØÿOçaðVÄÆêÙð|¬ÃXg„½¿¨Ü›°ûû¾ßÄP„zùãË®}ûþyýuß!o̵Ž`;6¹ÅBÕÁóvÈsÜÞþÓ»r—¶>›7c¥K÷xf9Ä!Ž©"ÓÒÖJ%<ÍÅ{,p +ÿÒ`ÜÌE„RÀ³“ ¿ê3Ë %‰ìÿBõ?ªùÏgRFÔň„¡ü2ŠG”^² ¿Yå~½3ül1*R2\ÿUñöïêÝ~®¶›3õ®»ÞõÔ»ºÞXðsÅÁŸìš˜xí¿ïñSõÁåÿHu„HéxGYC¨ß‚üÿÖç3tx:€¢—£¬½ÉÃ.€Úš–DÊKzÙ€)¤}¼8âøjýå[ lnQ ÐT¤èÚΛì`Ôæœ%U ßA,%`-4ˆcI„oSˆ¸(Ö›ˆq¹ù6Ç{Ž9‹\àC©eÖ˜}ʇ çèïìW9’$KÕûyÎû¢2|CÀƾÀÚ0¸>Ï—ˆô¨Ìêž®†3”ªx™Ïw÷/¼jf( UO”õË6] r7„¹vÜÁ ‚3~R¤OJL>‰9’½MêS²å]éÅ8Ä8%©ãmY(.‹ÍÄ,t2‰$¨Ú.Ñî5j]$”¢Vgý*òÜÎoå¼Ñ*­Ï±_[÷[t%EU…‡DæwmiW¨f3õ¿è+C3¨„$qÀÂðSé ÷H›º ÕÛçfÇÍiÇU‰'sT|Ùïï"~˜"6r Àm³"îj%œRk¬§Ð3_ÑÙ-³!\%ŸŠ¹Ìàˆ ã˜uW;9Gähº¥WœýbZ% R[V$ðiMÛAÏ7—Á=³/bMyÏ9œÒˆ¿ŽïÿF>Ée¯>¿7Ÿx“OªÉ'Õæ“jòI0ù$,ù$™|bÒÉ×g“°d“f²I5Ù¤.Ù¤Ù$›l²$“5}Ô[t™œ1WÑ\‡P¢i4.ñVz»G®@…!RbÈ]ƒ­…lØÌsˆV27( Ãpà±›V‰5štöîÇÚS7 aǨp~Œ8œ†—H‡ºðõ>Žw_„´<œéÇÒ9I…)œ†CYóÄ'73J™Þ„ʵ#md¼ÖZëçÝ‘$EÚâCÖh÷I!çÐ n…>­"…q¼ÖÔ‰JÄÆÚûήHˆ¼‚BÚ5.vÊ' õ +ýTŠü•§tŠ÷d¶˜I{µÕ¹ÕKÜg²qbW>²Ü9Ô=qFÍiMÎ.krŽl¨“AyäfM²*í¡¼«¹Ùijvu¶;nŽ[î’MÂbÒc¦ìDZC’B޲JÀ÷ pî,!…Ô’Nš—9‹¦"—²äô['%)d¾?¥æ@ä¿ê¬¤åÀv«>^/¯"¯ífHºœMH·Hÿ¥ÀNŒ!ìˆzÔ©nD¶êТÄzê;÷æ(.yú{µ¸© ‰ï^öìzü×òcv-5Âw‘G#Ü)ùÅîã·þ¯mU¬øW"Ï%ô‹9k "ÞŠ +E |Õ¤ŸŽž2o ][æÎó†#·×>”Ñ3Sþ¯ö ùHÜ7SîK¬%rÇ‘«46¨< Ù§0j —_ô>ó}…QË›žÆ_FÆ(Ý‘ã(±³ÃYH„Z£Äõ½ÇéçNµò7«¡ÐÉÖ˜³g\=Þb¨,»ôoa6A$‡ãáz|ª°ÄöuŒJ—=^Zx™7X¦g'êTÔ=+ +á +K“.*“")#}ëä–)¼sÐõËSâÙSÐEa¢`PdïDI…,ŸyØtÒ[¶Î·–Èõ¹ÓNû½ÚÚ¬Dbª‹‡Ät`™eÉÝðé&æ§è[QPäæê”»Jƒ›’ªkC寶¨ã ŠtqmZ®Sd©»Ò;ƒHõ­‹YÈÝW§!ô Ê cŸA~ž"÷YäÆís%‚þúùÓöôËŸ>m¿|þä·ßýÈ> +ò +¡ÊPÔÀ¹q õ< =üyû‡ž]¸cÅïöGÈŠ,òoœö‡ßÜö×-j¥DQ¶†xMˈUfîöé”§H}u +^ž*»‰B㱇×ä:¼ gi“åû˳ETàôcq¼ßn@˜¢„³;âšàš/¸æ÷pÍ—\‚£†ü°Z“eê­ZýäêŦèur}X±Wló%Ûü¶×šõ¨xº»¶rÍERð©@z‡¦OöѶ´''ÎÃt §Ÿ»yÊJ>{9_çž-÷ø*÷²p/+÷r{\¸ç¯äÞ + „ªüÍÈ?¦øÇÈû€~¬Ó·ìµ 0"D+‚_EXH‹i  }¿Ðo”„ìPpGL¶1Õúsúõìþè}Ì…>¹! ?*˜œ®(ü¬…{&Ðü™:íOhæÏöóçëÜßïûí{æÏoFþ1Å0žØÛüÙrÿö?ÉŸ?¥Íüùxô>æBß.^;Pøè]ùÓ£kv½Ô“ º5A²&H7”#ô‰.¬P­…å×Ú!¨h y~Ãg¬%ºµD²–H‹%Òb‰>Ñ…)êaŠ`LSkŠ:ÀY|¤ÔÉõÕiw¥oq­{_àæ÷'¹*¢;ÐC ÞUøžìÃ6L5óäJßÉu‚œ~~7$"ªYsý>ýÌô«0 |U@éû‰aècŸ"K?0ýÒ6ÝGÛ²ž)k¡_9ýüýÒPÏÇ|Ï»_â@LFƒ?{ûTU@ø§‰‰bÛpÊky.[hÇ¡þÊÄér=>œç"ˆ©ãÔùQΔýp5t[ÙÇnÙ«óÔ Üê8Öoô´É~xÍðtþ~p9ó'ŲAÿ{Ç‘‹î±£ì¡pU0ƵßÐ_šÌê^H;ú€Ò}-[Ñͺ”纉÷4=RÁ˓ܧP˜È.-Èçpn/=dzÏ'Aò"Hl«$™ìd%)‹$夒Ð&#Éñ'¢äy“•åùž0ž<©l¡ö½ÄVO6 Üø½ö“ØÑLá7ðòTöü€m¯¨2ºKÀˆCAô¦n²G²¿Ð +ß$Hvʎ׺£ÓÞ²ûÉ¥¨á‰ìÈž7©IŽxKˆ`…èc—§t#@ØìQã¤C€¤ùè \¹4ÿ +{ÿûfٷɾ½›ýúÏìQïk(\ŽØçÛö¨Uº§fŠVÄ>Êý…âÊ²ç ƒß¥Á¦ +†ÑÒ«÷èIëõtB'ßßíŽrÞ«£{ J2•[úžé7%¸²_É3]T¶)rJË•y´Ä£ònŠ&í 7t)´+Êc2SÚŲ¦ÎÁ²æR0yoy?yð¦B`Ï3ÌË ®sYû +— ¾£ +ýŽÎû×ê¼,Ôæ›<}]ã}Ѹ¿VyA·á`›Þ$[Þ6ÊžÇ?O‡dÕùùÀPŒO6Ý´hz†Ì¡p¯Ä_é:éÔ”ýÏɾ6^¨©ù|5¼|ó }ËgF”ÎÉ…¶<ßMðzoÔl\Ëàï:}¼‰Xÿ~!Ü¢ýKÏ>bÖßïvR‘ -•ŠT\œè(PÕ¨´([Ÿª­OuÖ§ºIãÀŸÛƒlyª£<éÇWÛÚK_ÏlŸO5u¡ʾ¿³ï›=êŠôóQTË+­%zK×PˆÏÚ¾¥ßÞÙ•]·ÅtdW-A;µå~~O]Î;ɧoG>=N¾EÔ$þ˜ç,Î^,ù2É—kgÿˆßrŠ¿ˆÒ3ûòµ~ÿ6ýWü¾¼Ïï1°ùÞH2ßÙå_I3&œ…†Ëˆ*:e'Ì”~‹{ Yà·L€{üžÒ€I9] +FQˆW…'Xl’“ìïË“\%Èé×w;_c\GYJ„/'m7ëåÙúI^¼<Ûôذcß)¯Çå׺z4 +_˜ÿúùÓ†¿ÿ0yh„î endstream endobj 67 0 obj <>stream +8;W"!0p:TO#h15Ld>!kT+9(hd4R1?$IV>k\ae`]@[&M +ElXsOH[kGVg[%#VJ%-`L`P?"9g\<@>Nrs"-Qjmle;Qp_ZoI>HP-!@CiV.-]Sno^)[ +eOrrC]O'l:]ZH`5]N%H&26' +WHJH>iFrr%;*N+UiMjaONL[lKjnJVVWNm2Lrn?-`.%3epW;Lf?h5dM=:NU#><^XtH +hbGj*s1NnG)rm']7K#!U*ZuRo[3%oWErtLr'W_fhHKai@FW9*r+J/?q^CY9qhioG5(%obFXno:)Kc\eF +WtJV$V-dc[!A.ggrLTQ1P@MmFn1Mm?p!Y0C8+2dnU.gLA9cO#0HW]ZBbbtH>4nT?Q +q=eR6e$Sp^H^NhF+u!%OXa[bT[c>EGDGC^@>*$#->eaC#pcTMMD)&l2I!bN.^45m< +gOE;us8D[,e+e+e_g%`d~> endstream endobj 68 0 obj [/Indexed/DeviceRGB 255 69 0 R] endobj 69 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 60 0 obj <> endobj 61 0 obj <> endobj 62 0 obj <> endobj 74 0 obj [/View/Design] endobj 75 0 obj <>>> endobj 72 0 obj [/View/Design] endobj 73 0 obj <>>> endobj 70 0 obj [/View/Design] endobj 71 0 obj <>>> endobj 66 0 obj <> endobj 65 0 obj <> endobj 76 0 obj <> endobj 77 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 21.1.0 %%For: (Olivier Gillet) () %%Title: (marbles_v70.ai) %%CreationDate: 05/10/2018 11:32 %%Canvassize: 16383 %%BoundingBox: 3949 351 4209 710 %%HiResBoundingBox: 3949.9414 351.591791114886 4208.6787 709.756782070035 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 326 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %%+ 0.079999998211861 0.370000004768372 1 0 (gold) %%+ 0.138705000281334 0.883908987045288 0.339695990085602 0.034058000892401 (new purple) %%+ 0.805294990539551 0.191348001360893 0.459051996469498 0.035278998315334 (new turquoise) %AI3_Cropmarks: 3949.8789 347.748 4208.6816 712 %AI3_TemplateBox: 419.5 297.5 419.5 297.5 %AI3_TileBox: 3791.28025 123.099 4367.28025 942.319 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 3 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: 3821 731 2 1583 1122 18 1 0 750 214 0 0 0 1 1 0 1 1 0 1 %AI17_Alternate_Content %AI9_OpenToView: 3821 731 2 1583 1122 18 1 0 750 214 0 0 0 1 1 0 1 1 0 1 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 777 %%PageOrigin:114 -99 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 78 0 obj <>stream +%%BoundingBox: 3949 351 4209 710 %%HiResBoundingBox: 3949.9414 351.591791114886 4208.6787 709.756782070035 %AI7_Thumbnail: 92 128 8 %%BeginData: 12450 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD07FFCAFD4BFFCAFD0EFFCAFFCAFD49FFCFFFCAFD0CFFCAFFFFFF %CAFD47FFCAFFFFCFFD0DFFA8CFCAFD49FFA8CFCAFDFCFFFD1FFFFD5BA8FF %A9FD0BA8A9FD0BA8FFFD0BA8AFFD0BA8A9FD0BA8FFFD0BA8AFFD0BA8A9FD %05A8FFFFFD5BA8FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FD8BFF7DFD3CFFCAFFCACFCAFD17FFA8FFA87DA8FD19 %FFCACFCAFFCAFD05FFA8A8FFA8A8FD0BFFA8A8FD05FFCAFD05FFCAFD15FF %A8FFA8FF7DFFA8FD17FFCAFD05FFCFFD05FF52A87DFD0CFF52A8FD04FFA8 %FD07FFCAFD13FFA8FFFFFFA8A8FFFFA8FFA8FD13FFCAFD07FFCFFD04FF7D %52FD0DFF7DFD0AFFAFFFA8FD13FFA8FD05FF7EFD05FFA8FD11FFCACFA8FD %0BFF527DFD0DFF52A8FD04FFCAFFFFFF7DA8A8A8A1A8A8A87DA8A8A9A8FD %09FFA8FD05FFA8A7CAFD05FFA8FD09FFFD04A87EA87DA8A1A884A8A8FFFF %FFCAFFFFFF53FF52A8FD0CFFA8FD12FFA8FFFD05A8FD05FFA8FD05FFCAFF %7DFFCAFD0BFFFD05A8FFA8FD0BFFCAFFFFFFA8A8FFA8A8FD12FFCACFFD05 %FFCFFD0AFFA8A87EA87DFFFFFFA8FFFFFFA8FFA8A8FFFFCAFFFFFFA8FFA8 %A87EA87DFFA8FD09FFCAFD05FFCFCFFD1BFFCFFFFFFFCFFD11FFA8A87DFF %AFFFCAFFFFFF7DFFFFFFCFFFFD05A8FD0FFFCFFFFFFFCFFD1EFFCAFFCAFD %14FFA8A8A8A1A17EA87D7DA8A8A1A87DA8A8FD13FFCACFCAFD36FFAFFFFF %FFCAFFA8FFFFFFA8FD1FFFAFFFFFFFCFFFFFFFCFFD05FF841314A8C99FC2 %A8C4949AA8FD07FFA8FFA8A8A8FFA8FD0BFFA8FFFFFFCAFD05FFA8FFFFFF %A8FD09FFAFFFA8FFA8FFA8FFA8FD07FF601313FFC8C19FFF9B949AFD04FF %131A1360C1C89FC99ABD94C3FD04FFA8FFA8FFA8FFA8FFA8FFA8FD0FFFCF %FFFFFFCAFD0DFFAFFFA8FFFFFFA8FFFFFFA8FD05FFAF1A131A83C79FC7C3 %B694BCC3FFFFFF1A13135AC89FC1A7BD8D94A1FFFFFFA8FFA8A8A8FFA8AF %A8FFA8A8A8FFA9FD07FFA8FD05FFCAFFCAFD05FFA8FD07FFA8FFA8A8A8FF %A8A8A8FFA8A9A8FFA8FFFFFF13131384C1C19FC9949494CAFFFFFFA86060 %FFCAC9C9FFCAC3C3FFFFFFA8FFA8FFFFFFA8FFA8FFA8FFFFFFA8FFA8FD07 %FFA9FD0BFFA8FD07FFA8FFA8FFA8FFA8FFA8FFA8FFA9FFA8FFA8FFFFAF3C %84FFCFC8C9FFCA9BCAFD09FFA8FD07FFA8FFA8A8A8FFFFFFA8FFA8FFFFFF %A8A8A8FFA8FD05FFA8FFA8FFA8FFA8FFFFFFA8FFA8FD07FFA8FFA8A8A8FF %A8FFA8FFA8FFA8FFA8A8A8FFA8FD14FFCAFFCFFD05FFA8FFA8FFA8FD0BFF %A8FFA8FD09FFA8FFFFFFA8FFA8FFA8FD07FFA8FFFFFFA8FD0BFFA8FD16FF %CACFFFFFCAFFFFFFA8A8A8FFA8AFFD0AFFA8A8A8FFA8FD07FFA8FFA8FFA8 %FFA8FFA8A8A8FD07FFA8FFA8FD0CFFAFA8FFA8FD05FFCAFFFFCFFD0BFFCA %FFCAFD05FFA8FFA8FFAFFD0BFFA8FFA8FFA8FD07FFA8FFA8FFA9FFA8FD0B %FFA8FD0FFFA8FFA8FD05FFCAFD0EFFA7CAFD04FFA8FFA8A8A8FFFFFFCACF %CACFA8FD05FFA8A9A8FFA8FD05FF7DA87DFD05A87DA8A8FD05FFA8FFA8A8 %A8FFFFFFCACFCACFA8FD05FFA8A8A8FFA8FD04FFA8A8FD0DFFA8A8FD05FF %A8FFA8FD09FFCFFD05FFA8FFA8FD05FFA87D5252847D52A852527DA8FD06 %FFA8FFA8FD0FFFA8FFA8FD05FFA8FD0EFFA8FD05FFA8FFA8FD04FFCFCAFD %05FFCAFD05FFA8FFA8FD05FF527D527D5253FD047DA8FD05FFA8FFA8FD04 %FFCFCAFD05FFCAFD05FFA8FFA8FD04FFA8A8FD0DFFA8A8FFFFFFA8FFA8FD %05FFCAFD0DFFA8FD09FFA8FFA8FD09FFAFFFA8FD05FFCAFD07FFCAFD05FF %A8FD05FFA8FD0EFFA1CAFD04FFA8AFA8FFFFFFCACFFD06FFA8FD05FFA8A8 %A8FD09FFA8FFA8FD09FFA8FFA8FD04FFCFFD06FFCAFFFFFFA8FFA8A9A8FF %FFFFCAA8A8FD0CFFCACAA8FD05FFA8FD05FFCFFD0BFFA8FFA8FD17FFA8FD %05FFCFFD0BFFA8FFA8FFFFFFCAFFA8FFCAFD0AFFCAFFA8FFCFCFFFFFA8A8 %A8FFA8FFFFFFCAFD04FFCFCAFFFFFFA8FFA8A9A8FD09FFA8FFA8FD09FFA8 %FFA8FD05FFCAFD04FFCFCAFFFFFFA8FFA8FFA8FFCFCFFFA8A8FFCAFD08FF %CAFFFFA8A8FFCAFFFFFFA8FFA8FD05FFCAFFCAFD07FFA8FFA8FD09FFA8FF %A8FFA8FD0BFFA8FD05FFCAFFCAFD07FFA8FFAFFD05FF7DFD0CFFA8FF7DA8 %CAFFFFFFA8FFA8A8A8FD05FFCAFD05FFA8FFA8A8A8FFA8FD07FFA8A9A8FF %A8A8A8FD07FFA8FFA8A8A8FD05FFCFFD07FFA8A8A8FFFFFFCACFFFA8A8FF %CAFD0AFFCACAA8FD05FFA8FFA8FFA8FD0BFFA8FFA8FD0BFFA8FFA8FFA8FD %09FFA8FFA8FD0DFFA8FFA8FD07FFA8FFCAFD0CFFA8A8FD06FFA8AFA8FD0B %FFA8FFA8A9A8FD07FFA8FFA8FFA8FFA8FFA8FD09FFA8FFA8FFA8FD09FFA8 %FFA8FFA8FD05FFA8A8CAFD0EFFA8FD07FFA8FFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFA8FD08FFA87DFFA8FFA8FFA8A97DFD09FFA8FFA8FD07FFA9FFFFFF %A8FFA8FD06FFA8A8FD10FF7D5227A8FFFFA8FFA8FFA8FFA8A8A8FFA8A8A8 %FFA8FFA8FD09FFA8A8A8FFA8AFFD05A8FD07FFA8FFA8FFA8FFA8A8A8FFA8 %A8A8FFA8AFA8FD04FF7D277DA8FD11FF7D27277DFD05FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FD09FFA8FD05FFA8FD0FFFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FD05FF272720FD12FFA82727A8FD06FFA8FFA8FFA8FFA8FFA8FFA8FD09FF %A8FFA8FD09FFA8FD0BFFA8FFA8FFA8FFFFFFA8FFA8FD06FF7DF87DFD13FF %A9FD09FFA8FFA8FFA8A8A8FD0AFFA8A8FD0DFFA8FFA8A8FD08FFA8FFA8FF %A8FFA8FFA8FD28FF27A8527D52527EFD09FF7DA8A8FFFFFFCFCFA8CFCAFD %05FFA87EA8FD07FF537D527D52FD047D527DFD1CFFA8FD0AFF5352527DA8 %52A8FD14FFCAFD0EFF7D52A87D52527D527D52A8FD08FFA8FD12FFA87DFD %0AFFA8FFA8AFA8FFA8FD0FFFCFFD05FFCAFFFFFFA8FD09FFA8FFFFFFA8A8 %A8FFA8A8FD08FF7DA8FD13FF7DFD1BFFA8FFFFFFCAFD07FFCAFFFFFFA8FD %0DFFA8FD0CFFA8A8FD13FFA8FD0CFF7DFFFFFFCAFD0BFFA8FFFFCFFD06FF %CAFFFFFFA8FD05FFA8FD05FFCFFFFFA8A8FD0BFFA8FD20FFAFA8FFFFCAFF %CFFFFF84131AFD04FFA8FFFFFFCAFD0BFFA8FFA8FF601A14FFFFFFCAFFCF %FFFFA8FD2CFFA8A8FFCAFFFFCFFFFF131A13A8FFFF7DA8A8FFFFFFCAFD05 %FFCAFFFFFFA8A87DA8A9131313A8FFCAFFFFCFCAFFA8FD1EFFCAFFCAFFCF %FD09FFA8FFFFFFCFFFCAFFFF60131AAFFFA8FD07FFCAFFCAFFCAFFFFFFA8 %FFFFFFA8FF601A13FFFFFFCAFFCAFFFFA8FD0AFFCAFFCAFD10FFCAFFCAFF %CFCFCAFD08FFA8A8FFFFFFCAFFFFFFCAA7A7FD05FFA8FD05FFCAFD06FFA8 %A8FD05FF7CCFFFFFFFCFA8FFFFFF7DFD09FFCAFFCAFFCACFCAFD1CFFA8FD %08FFC8C1C8CFFD05FFA8FD11FFC8C7C1FD09FFA8FD07FFCFFD1AFFCAFD07 %FFA8A8FFFFCAFFCACFCAFF9FC19FCFFD06FFA8A8FD06FFA8A8FD06FFCAC8 %9FC1CAFFCACFCAFFFFFFA8A8FD07FFCFFD06FFCAFD0CFFCAFD07FFCAFD07 %FFA8FFCFFD04FFCFFFCFC1C9FD07FFA8A8FFA8FFA8FFA8FFA8A8A8FD05FF %C9C8C9FFCAFD07FFA8FD07FFCAFD07FFCAFD0BFFCFCAFD05FFCAFD07FFA8 %A8FFCFFD04FFCAFFA8BDA1FD07FF7DFFFFFFA8FFA8FFFFFF7DA8FD05FFCA %9AC4FFCFFD04FFA8FFA8A8FD07FFCFFD06FFCAFD1CFFA8FFCFFD06FFBD94 %BCCAFD17FF9ABD94FFCFFD07FFA8FD07FFCFFD14FFCACFCAFFCAFD09FFA8 %A8FFFFCAFFCAFFCAFF9A9494CAFD06FF7DA8527D527D537D527D7DFD06FF %9A8D9ACAFFCAFFFFCFCAFFA8A8FD08FFCAFFCFFFCAFD12FFCAFD0BFFA8FF %FFFFCAFFCAFFFFFFA1CAFD07FFFD047D5252537DA852A8FD06FFCAC3CAFF %FFFFCAFD05FFA8FD0BFFCAFD1EFFA8A8FD12FFA8A8A8FFA8FFA8FFA8FFA8 %FD09FFA8FD07FFA8A8FD2BFFA8FD17FFCAFD0DFF7DFD09FFA8FD2AFFA8A8 %FD15FFCFCAFFCAFD0BFFA8A8FD08FFA8A8FD2BFFA8FD19FFCAFD15FFA8FD %2AFFA8A8FD14FFA8FFA8A8FFCFCFFD13FFA8A8FD1CFFA87DA87EFF7DFD09 %FFA8FD17FFA8FFCAFD15FFA8FD08FF7D7DA97EA87DFD0EFFFD0652A8FD07 %FFA8A8FD08FFCAFFCFFD0BFFA8A8CAFD0BFFCAFFCFFD07FFA8A8FD08FF27 %5252275252FD0EFFA87DA884A87DFD09FFA8FD07FFCAFFCAFFCFFD0BFFA8 %FD0BFFCAFFCAFFCFFD07FFA8FD08FFFD05A87EFD11FFA8FD0AFFA8A8FD06 %FFA8FD05FFCAFD09FFA8A8FD0AFFA8FD05FFCAFD05FFA8A8FD0AFFA8FD14 %FFA8FD0BFFA8FD05FFCAFD11FFA8FD09FFCAFD0DFFA8FD0BFFA8FD13FFA8 %FD0AFFA8A8FD05FFCFFD06FFCAFD09FFA8A8FD09FFCFFD06FFCAFD05FFA8 %A8FD0AFFA8A8FD13FFA8FD0BFFA8FD05FFCAFD07FFCFFD09FFA1FD09FFCA %FD0DFFA8FD0BFFA8FD13FFA8FD0AFFA8A8FD06FFCAFD05FFA8FD09FFCAFF %A8FD09FFCAFD05FFA8FD05FFA8A8FD0AFFA8A8FD13FFA8FD0BFFA8FD0BFF %CAFD09FFCAFD0DFFCFFFFFFFCAFD07FFA8FD0BFFA8FD13FFA8FD0AFFA8A8 %FD07FFCFCAFFCAFD0BFFCACFCAFD0AFFCFCAFFCAFD07FFA8A8FD0AFFA8A8 %FD13FFA1FD0BFFA8FD17FFA8FD0DFFCFFD09FFA8FD0AFFCAA8FD11FFCFA8 %A8CACFFD08FFA8A8FD16FF7D52A8FD15FFA8A8FD08FFCACFA8A8CAFD1EFF %A8FD0FFFA8FD06FFA852FD07FFA9FD0BFFA8FFFFFFA8FD0DFFCAFD0EFFCA %FD05FFCAFD07FFA8A8FFFFA8A8FD0AFFA8537DFD05FFA8FD07FF7DFD0BFF %A87DA8FFA8A8FD08FFCAFD05FFCAFD0CFFCAFD0FFFA8FD0FFFA8FD0DFFA8 %FD0DFFA8FFFFFFA8FD07FFCAFD14FFA8FD05FFCAFD07FFA8A8FD06FFFD07 %A8FD15FFFD05A8FFA8FD05FFA8A8FD08FFA8FD05FFCAFD0EFFCFFFFFFFCA %FD09FFA8FD05FF7D7D53FD047D527DFD13FF7D7D527D7D52527DA8FD05FF %A8FD0DFFCAFD10FFCACFCAFD09FFA8A8FD04FFA87D7D84A8A87D7D527DFD %13FF7D7DA87D7D52A852A8FD04FFA8A8FD0AFFCACFCAFD1EFFA8FD09FFA8 %FFA8FD15FFA8FFFFFFA8FD09FFA8FD2AFFA8A8FD08FFA8A8FD1AFFA8A8FD %08FFA8A8FD2BFFA8FD09FFA8FD1BFFA8FD08FFA87DFD1BFFA87DA8A87E7D %A859A8FD06FFA8A8FD09FFA8FD08FF52A853A87D84A87D53A8A8FD07FFA8 %A8FD08FF7D7DFD06FFA87D7DFF7D847D7E52FD0CFF527D7D7D527D7D277D %FD07FFA8FD09FFA8FD07FFA8525253A85227A8535252A8FD07FFA8A8FD09 %FF7DFD06FFA8527D7D7D527D7D27A8FD0BFFA87D7D7DA87DA8A8A8FD06FF %A8A8FD09FFA884FD07FF7DA87DA87EFD06A8FD07FF7DFD09FFA8A8FD06FF %A8A87DA87DA87DA8A8A8FD1BFFA8FD0AFFA8FD18FFA8A8FD0AFFA8FD1EFF %CACFCAFD09FFA8A7CAFD09FFA1CACAFD09FFCACFCAFD09FFCAA8A7FD09FF %A8A8CAFD09FFCACFCAFD10FFCAFFFFFFCAFD07FFCAFFA8FFCAFD07FFCACA %A8FFCAFD07FFCAFFFFFFCAFD07FFCAFFA1FFCAFD07FFCAFFFFFFCAFD07FF %CAFFFFFFCAFD0EFFCAFD05FFA8FD05FFCAFD05FFA8FD05FFCAFFA8FFFFFF %A8FD05FFCAFD05FFCAFD05FFCAFD05FFCAFD05FFCAFD05FFCAFD05FFCAFD %04FFCFCAFD30FFCFFD17FFCAFD20FFCAFD05FFCAFD05FFCAFD05FFCAFD05 %FFCAFD05FFCAFD05FFCAFD05FFCAFD05FFCAFD05FFCAFD05FFCFFD05FFCA %FD05FFCAFD05FFCAFD36FFCFFD0BFFCFFD0BFFCFFD0BFFCAFD0EFFCACFCA %FFCACFFD06FFCACFCAFFCACFFD06FFCACFCAFFCACFFD06FFCACFCAFFCAFD %07FFCACFCAFFCAFD07FFCACFCFFFCAFD07FFCAFFCFFFCAFD12FFCAFD0BFF %CAFD0BFFCAFD0BFFCAFD0BFFCAFD0BFFCAFD0BFFCAFD6BFFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD09FFA85276FD0B5276FD0B5276FD %0B5276FD0B5276FD0B5276FD0B5276FD08527DFD08FFA87C527D527D5252 %527D5253527D527D527D5252527D5253527D527D527D5252527D5253527D %527D52527D7D527D5252527D527C527D7D52527D5253527D527D527D7D52 %527D5252527D527C527D5953527D527DFD08FFA852525276527DFD095276 %527DFD095276527DFD095276527DFD0B527DFD095276527DFD0B527DFD05 %52FD08FFA852527D5252527D5252527D5276527D5252527D5252527D527C %527D5252527D5252527D527C527D5252527D5252527D527C527D5253527D %5252527D527C527D5252527D5252527D527C527D5252527D5252527DFD08 %FFA8FD5352FD08FFA852527D527D527D5253527D5259527D527D527D5253 %527D5259527D527D527D5253527D5259527D527D527D5253527D5259527D %527D527D5253527D5259527D527D527D5253527D5259527D527D527D5253 %527DFD08FFA85252527652525276FD07527652525276FD07527652525276 %FD07527652525276FD07527652525276FD07527652525276FD0752765252 %5276525252FD08FFA852527C527D5252527D5252527D527C527D5252527D %5252527D527C527D5252527D5252527D527C527D5252527D5252527D527C %527D5252527D5252527D5276527D5252527D52525259527C527D5252527D %527DFD08FFA82EFD245276FD175276FD1552FD08FFA853527D527D525952 %7D5259527D527D527D5259527D5259527D527D527D5259527D5259527D52 %7D527D5259527D5259527D527D527D5259527D5259527D527D527D525352 %7D5259527D527D527D5259527D527DFD08FFA8FD4F5276525252FD08FFA8 %52527D527C527D5252527D5252527D5276527D5252527D5252527D527C52 %7D5252527D5252527D527C527D5252527D5252527D5276527D5252527D52 %52527D5276527D5252527D5252527D527C527D5252527DFD08FFA8FD5352 %FD08FFA85252595252525352525259525252595252525352525259525252 %595252525352525259525252595252525352525259525252595252525352 %52525952525259525252535252525952525259525252535252527DFD09FF %537D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D7DFD65FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD0AFFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AF %A8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FFA8AFA8FF %A8AFA8FFA8AFA8FFA8AFA8FFA8FDFCFFFD25FFCAFD4BFFCFFD0EFFCAFFCA %FD48FFCFCAFFCAFD0CFFCAFFFFFFCFFD47FFCAFD10FFCACFA8FD49FFCACA %CAFD06FFFF %%EndData endstream endobj 79 0 obj <>stream +%AI12_CompressedDataxœÜ½ézÂ8Ì(üÝ÷m);$a_JÙ¡- +”–n”%,e M`–÷ǹöc;{È +Ì7óž™g:@É–%Y’-Ëéhuù 5"á f·9Ešî(:eG¿ÚïV«=³£áOî¶ÇŽÇƒh”¿K ¸†=’fÔ&e'ð ŽVàÛîæjñÇ‚¤íÕÅjEî3 ?ß・5ø¥Cîv`!U±Ñö„û×ýÞ&g 4_€–Ÿ°>;ÄâIôO‚ÀñD ¿„Á¸à?‘x,ŽàUÌîžQ« ÿ +Nı(hA$ðp8~I$ÂI,‘?G¢D"„“±d4™Ä°D4†Q8‚Eà­D’ˆ` ?òOûvOoW$8E 0I,NF£°/xGÀKx8Þ ƒ_"QðO&c‘hš@€£D<FÆ£°;ðnOÿî©a# +ÒÔpÖ’á¦9Þ°‡#ñ`<’àf7Çklû.¹Þ®¿!ƈàÉ`ÔN$ãà¯ä3×Ì#Ë>€]‚D#¢vœ3šLÚ#áXœû)!‚a<ɾ#r áÏ”ý‘Ú,[äé]‡eäHÃØ¿ì“ö~EÒϛŌ‡?%Y¾hPrdLx¿²"v@ÿââ_¶AwHÏÈà}jµß!éLðßÕ‡“yÈãƒà™ À³ÙîÓÁ¬Lf»çûÑÜ’›.ÕCC N²ÇøpN4BJ€O Ô…xº "t ÿrøò«IoáyœçFPÞLœ^"'R$Q„¢àiÇc¶€Œ5é C +({ ™d…¯J/&¢ì9I°©ƒ V†p< 4‘4û +‹ñ!ÌüÂÒLù „c  GŠ ‰^À‚ z‘ZC¾c ‚„3 TÅŠš±Ï„Ïè x}¿eéÂò`ѽØ@˜¶Gô$1h­öàQ•¦öۻ͔²¹Ù…¡GŽö\<±7G?à PñHWÙ»ôp €ïB ä·]p`p4ig‚7ÑWþÿÆo—È)вâëì¯åÍäŠÚJÀ²íŒáµVÃͬ]ðw\}ñx2ä†äîÕDÀm[@5Q@×i ydŒ¨¾Ø@¿ éÝŸ½JVöàpkµ³$wã¹.÷ëI[ÃÝ,™äfÂد"•!åÙߌÇ_®V‹=ÜÎc{Þ3s{—¢Vl•çé3ô¾iŒ²3†‚I«a“?q?ÿÇp´Ð ›æ†“CL\%&°±ïüGq ï¨áÿ·àèü½Q«³§^òK ˆáb¼";3;ÒŒŽã\ž,€ j(%Ý6?‡@üë‹‘®XÂAN› àÐÎ~±#EI¤Ö[hšÛ;óá–D#à[v€Q´˜KÖ¥@ÀhÁb=Ô veâGÌNA¨öèL“ˆ<úÏìº:%þîþ;|ò؃lgàš+íÊ™‡¤¥íln­®GÐz!"všžkE¬5uÖn'Ù'ÐØÝý ¼=[èaCý¹A_ì)0‚ µÖ3–ðØCÃ5i÷ÛB0ÉI¾ foÚ°`ø¿y•£ úA§`UŽ?ÀŽAoÁ.ö6¶Ú;ñŸèEø?ыȿԋwðëp¿Ú}ê³$‡yÉö&˜ ÷z©qèaGÁ‡(ð’¡#›ÄcɘýÁ<÷âÜ‹Ä ÈŸ(L†Ù®€w@¢Þ¶F6­ìc;´Æ`` xî‡㾟?(ÀÒdi“ +XÜÿDœ@†N>@­DI@l̼ÆÕjß=v= UkfãSФx&ü×ÿ=Ü˵cpˆ“@+¨‹71Ð. +D‡|yJlš%!¼¨¤Ë_AÀ~ Ñ„SŒì÷0úyñÇ,lò'qø„Úï¶ûû U˜‹ç!+z¾ØH*IJ]{¨÷uС>8„æ˜e ÇØG¬íÁüÜÏâG à܈ùOi¸Úœƒÿ¨ øm1†²4¤ÿFß1{èqÓî‚ *+Š¢›Ó)Còsœ\ž¦ª«4Inø¶Z`ëätWÄÏof<§1¸»§6—ÀE£a–mr"Ÿe#¸ÓʶHàI¸X‰HF•Æ´ò5h„ñæ)7À„&áàn#˜`À17ƨvû6¢ò_pË’Ÿ7ܰC@0<¥l"r$ZT£BnH6Ôª°Ú΂|,,Äeþ®5¤’Û^€£7oÑÔ(¶’3“ÂD<×c/¿ÀØ2¨PÑ$òÕ'yèÁHÃÔúY^ȉ•~"¸vUïh«TQ1µEAUÈŒöØà (‡Æ«³OÙMe`gSûÝ +îîÈ¿¸É +k…jU\*¥cˆCà2Û‡«ÅS@n<Ä‚a‰ÅèPÙ¯V¼ÂâöìÁS WDô“²ë«ÚpÞ…*rWLFâïi´óDÒw%iKéãî,x«9Z1;šZ’ŒÑ°ºS: ¸æìBÒ?Ãõ€Ð†Ê­VÒU×PhÑŽ&’ \GuŠÒzmÔ© ©ê Úýµ^mÀã  ½íw<9¤AÄàKZç‹Õ„æe–×§üSøg'èR÷õ†ü1¤™´„«¥Mÿ +„D¿3í6’ ßÐÿ¿ž:£:y‡›  "0WXgߘBÒÖgbÒcǸF½‰ñ­¨ñ +ŸñØø–gšþGëŽÞÔ¼. R5Ãø†3ù¿IÐS˜uØô_æb8¼ñžÙQëW“ýs|˜b†p#ëê0ËŽÿ¸\t ?õŸéÊÿ RÊLÿü¯Æÿ²00*õ¿|–7Jk#jò|¸0ãY>|çßÕÈ(Ç7ýµ:çlãáÍ%^¿7¨@<‘Œ êo3ãùûß +žˆÄ’Á$Ox8êO!532®á¿=Qñx8˜$Âqvt„Ñðþ2¥Iÿ–RjOI”tmø¿ÚOÃTžJ)¶Cé$|4ù®df®ßù—-ÜÖc•ˆð›†L22·Ì VÚú¿×~YAÿ˜ Òĸ#ÆT’¶þw™3² À„îHÚœ¿.¶ýjC5,Í—¼ý¿¼Ü nG7ÌvÀMòöÿñ™[À¨õj86ÇÒÖÿõÖXñþÿæéÊ¥»7Ôv·X/þí%þWúœç» kr7œ wÃSû‘<±—n[ÊŒÌIûÕÕ‡pZ< ±ÇaÐ%Ï0䎶u·\Q¶aoÁp…’³€˜=Å0£mâ6¹Â/h+¨7Ü,˜9•dרïóc +ÆÏþ²Óä ŒŒ?T€‰Gd¯ÐCh¡À(Ô>®ÄÍïD$ŒöÚÃxÌx¯]8ÜSì%«vîú’ô¤úƒ¤·ðà®´¯¬#Û€íìG`*h؆Â(Lw( ž4s(†P?»ÔVBÒxGƒÅ“&a¨Í‹¥Žˆ“÷D“µÄ£Âw› ùW‡SüqJKÇ" +P,EJ„dÔüŒ `”n©3"zc–•Íð¨cqó³ˆP«M£b$z­½O«ý–ô˜Gþ. ³tÙóßct·UgØt&?r£ÛV°„£DDr4ð %!¶”J2noñòÛ%ÿÚ¡Ôáô`ãÀòZ•½D<“à~o“Å~m/Aø<<îŽðIKí·öŠ HPGvÒÈâf<Pƒdæö6ÒsÜ*.ÁƾÆdo4Qš…Á;…zйúp3Û£cÝÔæ`ª­5üì2sf{XˆNm‡ñlKóájÁH:‹^lAE³õY*f‹ÙR¢¿›¿³ç÷;Ji’ D.4l*áBLÆ1üÚk_JÂ3”#˜,Žî P4NÚ·Ã-˜Zf±Þ¯$çêpM¼rû>—z O‹‰Q= +#é×rC—˜ù›:ËÒ Ìɘ¢'ääpí¡Gj'{ãÄÕù3{|XE‚–ÀDži-þ"W@kLIµ-Q“ ;Ã?ÈÆ~µ[€ÕŸG¬_ï\ÿÂþ{réûyØæŒ¥{Ÿ¹üfìZûnéP|ýq³ˆÇCÌ4œ§Çw¸o™ÂˆãÒ=Ód‹»ÈøK›¤ÅÐÌ/Þ¸qüdao­ÙôëÎ\ñ.sùRö'£ ˜—»÷Øe6^¤¾|™Þä=EŒ.?ØìÆ ”y/ᔼÇ^bOH§laé‰8ÖìMêþyÙ(…†™ëŠÃ÷FC,1øà AAMlNltqAŸ}ÙJ†û”y)?°Í‹þò7 Œèw€u_1_6[ö¥ÛÙ çå&“žü<~¡™: à5 Q hT¸:ð)vwß´a#2‚~‹: +¥"u‰dn#±·ØÏ8ß-ýøJÓÐÃoy8t]b£ç§dËùúœo ­Ò´³øÍý~¦f6g!ÒïXb¾Å&oåîë"¯ùf¥ôó2(.~b¡ôtíœUŠS/˜ýŽÇÛJÄ—èü®òͺ÷¡RòLXÚð„fyÌþn|òÝö†¿ì€²±Ä0—îî.òÝûÝþph +ÊJèÀOÄ+íàAu€ä4‹;›³ü6qΈïÌm «|äˆ2ß™J p‡×ï+PÉ/å\É)+X~"Xι3{D%0)îëÕüàG“ñmÓß÷ô!˜Ç2Ý7Âsõ•a;"'GlßN’÷õÖSœÇÚ˲¯¬ˆœ + OA Ó)O ‡æ€P­¯ÁÐ.=ÅÙ¼ÌÄÓãçv>þF¼(ç U[õd°/ªå€”T›’ä’|(Úœùncâ&›,êý¥ZoQKI»j?>BS&0¢irήUñ´VéJ)úFø²Õï€Í)Ž Œj<­”KÑx!hö ⵞ!-…¾·ÞÂÏn².¬6=*ß¿^>À¶ì§‰Êu þžoOç.ðÚçu!æ«ÏYmé)M]µè-5gµ`¹÷ZãU8@ððÙ Wr³›W¨à¿K£Èü%ÿì3òv×ùv÷}•øY2H£‰ À">§î±LaéÞ.*™*î–èö·¶w(¥ XK$ÊÇFû²ûæ÷E\iO'»wñèÙ9xžøö¥ï˜)ÐØãËh߯Þóïû"÷4™ÿÎejÅ hòÝZ ~]Àßöƒ|g߈OQc ÇÀë=N]³³%•ÏP?sÛ,nâíé̾žóákÇUòt¯ë9ø)‹ÝWñŒ¥nq¿»x+ü–ß°9Å–èWøµUa½ˆ¾Æ:uâ >½aßæáoX>¨Ä£R›¼m˰I5†_K6§Ð½lô(Âa±@|r9¡óYá4j{ÓB]†›G±9Ñ0ÙÃNÅ[µFþ–FÀD,„’D|—•HÑW^‡Ã"¼ÞIÃçh·")QsÔ=–Š›YúI AÑSÀ’QL˜}ùD©Lí¡˜ û$– ÑINŽ4*ñ+&`®ªô!§:–¬ñ”°]FŸˆ,RùW–-€æ×b M¶€ë¨DVQ%z8ùX7ìX‘äðä¸Ç 7ÕˆªT€7,ÅÃD4IÉAÜÊ{S0³<­@Š‹R8Yœ-Ù¬fE®EÍ!%ò*¢’zØ”ˤè'û¬uRëó "9¢"‚Ìñ˜šDCDÓ²S"È«-QÛ±îi¢O,ùá0PçáŸ7¹éçÍw{›JÎEv¥?%¤ F2¿kå¬^ùnôS‡7V18®¿Ú®€åRZæ^.ŸgÅÅ× W/¯Ù¥LbNDw-mwFjvø^;|1¹Cƒ:Zš<·¬é׺ó|ˆkœÌÛÂ.s=—;YœïÛo¥‡‡ß‚t@…™ooJÍ\ç‹ v•[ãr,>ä;¤±Õ ø®Pʧ¡ Ï;pB{ÛòØß b~" ññÂhV"½åšh[AKé~Ÿ ÃYa‰¦Äu“À5…¾mrU¡¦¬yvà5^ P¡Fû#û,%`­GßNqNL¸&ÐR:Ñ91ášpVŸÀ¡84Öe–ù¾_KÑCI¬‚t›ƒgç’³^ï ÈŒé$‚ú˳@Ž4ïOÕ>J…˜ ðŒ +O¹woáÉù¹Cæ0Tq:I}ÄöÙØC°t÷Šdž$Gþü¦ï­êÝ|óù°;N–9ÅŽh9,=³±˜W€ja›½#ëßæíÿÃŽ’ÍRué$x=e`Pc >ùwÕíÅ(™ô¥#r°u '%ãb5L5ßYå|àíÙ/>nß6‰Ü³#Éyª]/ ˆµŒ8ýÄÛò²8ÿp¤@‡~ö?ƒ`¸A û…eÑÖ4"H +:_…%qãÌŽ¥&ë§é^æ#Ç +•Lù#(@‰W¾>½—•òf¤’p&× –³üW¡÷D|\¿/<µr`µè¯¹ŽîûÎüÓc§}mþÁËO˜£1uÅ—ûQ «oƒ«*Ó$ifN*¸ÏÙæX²’£éùs$Õx¹EÒØmúzwElš,ÞI`7·…Z!²/`¸ÿ™qÈæàý+ŸL?„ÝÈop‘G¾XÙŸ£/îk¯Çêêø7þɬNíJeàqÌáHùÌèk“{yò]§æ¾Î,~ÉÄçí|À¨J÷´÷›å±CŽq”³lKA~eÀÌI/Ë_£ÆaŒä7,õ¥WÒ(½À¤¦Å³ˆÁ¨Bà½Ý—‹ +ˆ&¼| Ø'X¹yé óåa…š¤ð„ØüO¿µË?ôñ ;7“ÒdôóÌç¾~ú-V*Ö.ÙÅ(@9²A6ÀFÏ^n¢)òûšäèTk… +«`@;dvØœ,ÆÇçÄgyðå|Ÿ9r¿…/·°b;Z7vå”HÞÁ5gV…Þriìwä»sëu},¥øKcÛ‘¯ÝlËx&\&Ë_ÍÑØ&i¨p¦žò؇}ä#îäP/ ÖàЇ/s™ÛçëÒÝzñ^ˆö^ƒù'ok–ow}À³¨:«ŸñŸÐRS…]PnB¥»÷ºmÔhçLG­ó‰îõU§2¸¼î—¦€^…UâÊ_ºw{ÜȸdY3çðDò"=½êÌUFÀ"ÚfÊ>ol*]Þà\m…¯\ïj·0×Áϱ]½Òœí²G.v÷^Íp „õEh?Óijázj“Ο¯”ú5¯ÚÐdí¢>›3ýI½è5êyããtSÑ$M~y–(Ž–zœ¥e?õ†ÍÅóh峺Þy]°Ý¯a¸è’kIcÎ2·±×jñ±Ø»Uð·{A;ÞÙüÛ“œû•X‡(,Èû²µ9шÊ|>Äb7•ßZ¦´ªGE#˜›Ä¯KGiÚù¦Š‹‹«(`ìH3¿ÉÞQj<ç2]“o“iÏ7Så‡\º°•ZÞ\Ï2îHî¡NÎå㟓ÇÒ4ù*¿‘»k=“?´« Öý¯~žš7½€brfÌ%ôõCì<èÔí„K²7±°ƒ$—ùr7O¶‘Ù8(MŸ°"³ª‚ëmí²RÌÎ*Åܬ]»ºÁïòÉÐ2¯Þ$ïýÉõºwÃJ¦´“ôhâË‹\ê…œå[z€â’‡X€CçEs¸¨57;RÖÌ“CÉTWµ/¯ÖÀúòû–î вÌÀ0ýàŽŸë\oÚÝK`gc÷ûR°= äR?K‰qþtc•M‘ÛzÄõ7½×¬~2ò»V¡9ùõÍ“šŒHÉQkîKµ/†)ùG•rÆså|¼Øÿ-¬›Ùè!¿<]€åkù-¥4îz.â¦Z7TšviàìaÓµDï˜Ï荒âxÈÑ—_»Ò”¢ƒ* ›«æÌ÷v^+ÅémXÎÆAbY«rõú³Àˆèr^ªf$01’16;î½1ØtÅ}7yÎåÔ¯%2ó]…½Otù]ž°×íIDéô °Šª?ù&^7ûv™Ëd·—RYäÍ ði’Pcüo±ìs¤œž ¢À± F¨£_¢«º&]Tê›ò8º˜A +±\ùx§QsÐoå©üÔ­ŽPþ!¡ ¬'l–jøÂ`%í^;LIªŒíÙyÑb|!øŽí€w7yŒ¸­<¦úÆÊã>-åjÛ_¾±Ÿ‚]Œe¤j?·B‡œuỹ»—P¬:Ÿ…U/°G2|ÇŸó2ón¤Xs–Çû‹A>^@ƒ0¦`/°mÈBd9™ÄzÏŸ½Dü¶X+Îß'ÐúÈežÂ_¥‡‡Ì…°Y¬| Øc•áu9—þ|fgüɇþß1ÐòoK°æN·ùö*ú"SÂÃ×ãy½(=܇Û_¶j +•ßµo½Å»ƒýÆæ-‹7¥Y4v‘ñï?±ì¯· ¼ ïo%SsÜ(è'A5ñ:‰Óc çT´®}7¹øE ù,Æ;*¬ñíÕW@ n¦&“q7E ½­Â*€w«¯o¯0/»‚Íc›<~ö•ïÏýž¶p!ß(°ñw#h"¤“Á2ìlLC0ñÏîüf4cÝ&ƒøE¬Ñ(9c!ÛÆë×°ïjíi/>eyì%ß}ŽwEÚ%—¹Ÿ:ùúE²„Tþ~KÔcòXæq+‰‰"b\™nÉ»3þþC!ŸðßAx× 0$«‚A¤Ey~r8 ¯ Œ©Â8ß|¨ÁíÒYÒuéé,ä{zøBýï5TþqVÊIjQþz?…è«4ÿŽ=7ß8 S¯|h®xviª<Žy¢…†Ç³ˆoîž|ÐWF£ŸÀºß¨¸;_½•ýĬy $³¿øòÏòÝãý> oo€oìÎU—ã xo€¼ŒRË›Òç¢)a4rëÁš³Ö~*Îs“@énU|Q,ùñôqYq?`^Zo~J2~Y<&h†ô?£åQ·5£ ó4j°æ#$oIS>r›Èc.©òðûÇŸßÜ:Z•o÷'…á£tï˜bb÷x؃¯ô]³ÖŽ¥^ŸG`,d…3«qÚâ›Ùfž øÆêc©ËOSG‹¢É¯Üð%Ôùü@†ºLyœ­PÏ×Û«äsùý*9{>2èY Æåƒ_ùî|¼ƒ}ü?Yáüüh\ å&›ÈkQ;OóµJ•A—^¬a1Fû!ß§…¥ôtÎûòM +’œt©­Ù¦lj¤qÚäLÒYµ#ž|KþÖå¼î!Y'ÚâÍTîîœd`©RÒ¾›“ö [àÅÎð—¢ÿ9'7v†½ú~¸‘µÃ+XìCþ,Œä°‚¨LÉ—û›ÚÛ·+𵱓“|‚P³àfÃÅÆ¾!òÛ2áÕ è¿}GAcÒ¾ØÁÆCûjø7LönÙ;ýa’«ñ á­ñ€¡³†Å¶$ÚƒÞQSý‚±ï7KX ,x˜º¨ 'É @éÅö0•Pö•!³{!GðzrãiEU_ltnóM›|ÖµqÐÍ"…!­/+/€šäD}Ñ€£Îšå>˜D« ¡ï솛‰pI¾plVÑÔdþ»˜g©Ö«µ¡ÆsšZ“%0ó쥕ÊQ=úó鳞-³Œ]nÙLÚ©/ÉhÈl®êªÍ]z·(ÀÓÂ-Ö†³{ÜÔhð°à“Ò%Iµò—M&Øêa®Òÿ%7Ç?í‡bæ±j"„Àö¨4Bô9Ï–C–êV"3",1/»R݈Áïk×—áÅåz\ÀÍ<*vÁ šâô»Íi% Fâ(ChÈ’ ¡šùÅ×M³6!ºhFzòcš wl™xí̃C†•0ȱú£„<§=HýÕÐç<ì*]…­Ìk‘ÚLP±¶» ˜ßÅtÁg^˜àFkEt5‹œ`Jñ65Õ)2wa€êBÊŽ^õ€ò0Tï P**wN¼šnŒè²©6§aAB5óLi³¾§òбÞ¦ X²¸2+–UŽämq6L¾ËBý[|Ñš ™3(8F„IJµªë Ðèr/8 ]ÝÔvƒRz2¢XEÞÒ]7!šáŽìÎ÷ëÑf¸X™pl8ÁéÜĦgC¬—ÂúË+|uÅu 0ñ: t9›AÕN1ð“_ÜïRFR‰X‡iÇÔjEŽå||V€ÕEEá¹"™ &o½ÌUô¦ 9[Ëj“©7}žóÕ\Ôñ'ÔnUQ½2¢=ÜÌ”9eMó«U‡„'ÕÊ:zÚj³óCØDàáj5<¸¶Bµ9¤¦pŽº€íy°´ldª ™åb;>ÀR/Íu 7†ÇL@4 õ )ɇL —ì€÷aXF$Y…G„4 ¢Ñb·B¡¼ÉæPqngëep]/j: Ž$V²ªžEÍ×0ø l®F9pàPóî Ž©ËìVA.Ò°eÕ+/ÇË d›™^†%«i~ÔO§‡-&(ø ¹øF-3YèÀˆ»Y âxE×ÔD/}¼ÝÒÁ?)IÝ8ífsyý@-`âýØî|DŸ(°½H”Æ U&íP9ZƒEÑ`,¢ßž»œªZObÛï€$ Á®D#BÕ ûkœ)¥-Áƒ‰¤ܹJqÆÉaP…nž3U1AhSl€e Ãô´Zlçý?ú¼Ã]ê3ª9xqB "E/à¥ú±-T¸õoÄÞ&dBv `‹Ÿl·üåeÝØr¥©õ¸õvœ›Æ °B1ZmÌÚªè%VW‰ïé¶íDgö™à +#›D·b9¨Ç²{ÒJöT š†²Ð˜&g’xY¦^T'ûº+«j´Û³¡X ]áð¦Ý-?×jÚ’,Ã:+5RkèV1.&,‹jQ…²UÅñ„éeZP]&Öèîþƒ.m ñå­E­¨6®éfœ¬¶ô”:(ǪlÆ_ÇIc!‰+›‰AKb¢µþ@PÛ1-!£FèCޤás}&ýC7| +¥{>†"©Ç†P‚€³Ñ“W˜ƒÐ€4¥ÊØ‘ ÎÖ7‹€ª ¶cJGŒÖAþêWý+f@CqnÝL»Z°ß•‹1<‹ˆ n`íA, Π'Ôn® ð™d«é*{ÝMH¼˜Dƒ„ü’‹â¿ÚÀÄ–bxY£µeø “Ñ ¼ÁQÝ‘Øm`Å(ÇÞ€wЇ›  ¥õÀªo4#²ÅGÕ0b‰Ï…[ôŒ#D°É^?à†d¨hª7 j +}Æ…t‡XÇ/’D@Ôµk uPÂF;IôE‹Ó€ ¨#ƒÓx#¨a£é,ël£íJ/|„@³¡=‰iF9wh·Ø­ÄèŠÄÎóm%.´ì–Xœ°çïìUz8æ«}¸™p¡_½‹bÙ—êp£&O³/¡»p"Ä2L¸½ÜêXFže—äæPÔ=T?¼ÈïÛÒཆÊn$t.Ú•ßKÚ²‘òPÝM-(LFÉ•«p0Mn“«+U]’ +ÅðªZÍËt' G©ñYz— +Ñ5•ו+h |Ž)gäpܸ&m:Š @uHš­X`Ú,€K¯ÜÝPâUìð€´Á¡¥21WevÒ‡±¨´Í  Ê›‰pµþ°Ý@o6ü3 +½JQ½®Ê—~Ç}·½Q ùßí|†ŸˆHæ)< ŸÐƒtø¶»+”¦Éê²vÙ¾ÂSóYá)á»iÇæwàûÃáu]ìlN‡o|tø‰JÅá$ñ´Ã?ÿi;|oî+G ®;ü׺Ã×®]b¡›¾õ!ê(zž" Á4@KËÈmó;.$‰Ø[lý†òÆÐy,ñ©Í‰Õd‘¦³ÅIò»Ú¤ßêùPù¥@¶óãfq »·îâçÝ~ Þ¹_c“ë~I@Õdû‰y®ðº8­~8òͯîs%SŽü §KÈWghš`ÖŽÀæiG•‡cñ9!×+ßnѸO¾:|Ùå}0\O‚7[g„ _=!¤¨ËXíûþÎ@‚=:NÒ…}Ùרë·îþyi 1ÑZt5*ÿ–Þ*ÑZ¾M9K·¾ù{áû‘èÄr·~ðu`‡VûnM °Ž|pÂÐvpT 8Œ¦Ã“yô:圵PÅáyìSO¸ºæ†Vu\‹CËn=–ÆÂ¼ ÛÙ€Ùý‚O-÷@l&‘IT6]Âì_iÂ7’a@΢?˜Y`Nì9Ì€K'#°‰jø%}9_«+n’Å¡¥™7ú3Ýjb¡HÇ-„´ŠD^çu¿*ÒÏY¡fs*ЊHcÄOÈ¡…tD…|/êH žËçíª."µ9E´ÌåW¬ …´–}ŠozêH#žW_zÜl¨"½¨|ElNZ)V)<ä4Æ.¯6´çFiÿ «L;"Rt!ž€¶êÈ\ã÷ƒ®*Òjèj’—xËv¿RÜ›•åäòBì³uˆÖs8«î~ø}…{Òu0«uŒ'oËåR F׃­ˆð˜ í€þœoºHsÃX¼r…«"ýºýnk!€O%èþ—f…bèŸ[àëµÙ–{/€5¡9’þ´®·|“NNŒ"¥‡ÝGNñOvëžt9k›d ± Ðt4÷Ë6’EBQ— ¡9YrÂ?—u¼jaL0‚÷>¼rÕbTv9[vrü J­S².UÝ.]âþgÜÿ¼£ø˜±‘‡ÑoÝå}¢s†¯%Ñ'WŒ¬/p„á«ôC]¡úøà£ùs]¨ÍQ'Êç‹Ô#R4}-Íç‰«Í Fþ=+ÄÒfxI)³|1fŠÙ)¼üÉTÕènsZå¬tЄä(è.¡˜œòú<’ƒM‹Až“ –Bõ”?²^¹ê)‹ª‡—}aüg£ï§e:,# œýVðš5ÊiW†žøämeo{Ðí ¿@;·¦T~•‰Ï}áA]q«J%ÍSZàBmhRi0´ÛÔSCgh¬ y®‘ ‰‘k˾+Șިª×Üì«0{ù£P HªùMº‚R>ÄPÆç×ðO›[_™ü«ŒMñ‹¾uÂ(È"®Òìn‚|.¸9¶¹i„ø¡³!u`…·ä½Æ’ϲ9µ)änxQõÉ客\òµ¤Îf¸dŒˆ½¾ÜÁ«tüè§e{WRN\O¨“PIû€7*:P˜ô<‡‘»çÐAÏFa*Ã/„æ CsÊw#Ú`"Åt¦„µeSR5²Âdª‡µ“U•h>©âÞÂOEÝ ŒEM‹Q¶Š-;ý…ÉÄü¢Æ ó_{µe ]îw`?éZOU¥ž>$–Wºì‚.Ù÷‚ÙN‘ZkeNè©.AƒNs­l¶`°x ùÓ7è m~IóeÒyäüÉwFXbõgc†kð ïõt`!ý~Ù,ÃÎI1ü|#ÎI±ðiã–eŽÑü‡Žë¬†M\ò¾Wb3c…׉ªæP3hµôØîÖaÚÀV—ÊYM"•»Û+‹Ž2ÚËUå±ÂëÎy +u`o®½Q·Çô©ƒ‘ÃÁ³IW¡­9–$›êˆÌÁƒÖ…aWT:b ¸ŠŽ¨Ù– + +Ûò¨ŽH$•;ucà/vU•%ª†B×&XÚ–§ûAné'w‰"þ^”ôö“™íÌò"kè†5u~î4kuךÁX>™_Í5^ÍÖî’¦ü}“ +Ø +˲šаa>wîëóŒ/|Ûë6Øy9‰è€äsÃYɵ¶üÚ@ŠIiC¦tøöÙwi /ÆLµ}ÐÙ“2\eÅÛÔ“ËDÜVÍ>ZêtyÙ> 5Ð,Ÿ«¯È +NŲ̈ôøüA\÷Š5 å’§¥lNí'˜&‡|íȳ9MÆØ–}8Xè´8ùÒŒ- 7«äç7žØßt¥ÎfZî öÉ’¸eLTD_÷™]í ¨cF^LÄ[!°›ÝÉ:ùµsä&…bÖà.…EOŽr§PÅæ4 ǤªAáÏö°pNÞ©@P×=ί´´òqÀŠÁw³‹¨ä¬jXnóºö&ü-¨/9Š@‹FÜ ÃγÜ@û!½F ¡rO“”)UæEj€êj´u¨ÑÀo*Mà1 –” å.ž¾FSÝ­.ª8^£Põ½Íi¬†Ìh4ð å8ÙRz}>E£‰²æí  B9Ôhjùù1åjøñ{¸‚ß,{ÕêÔc¡S=¾"P#¯{Ïüjh|šÂf~5^ŒŽq}y}9‡}fMe-´¾ŠA8zö½ÙU À9Á¾—Bá×Bݳp&àÈí{­µPk—G*†/&VCýµP¾Ç÷í ¨¬†¯f#i®…¢¥4 uVCé9,¶À+ ÔÕd;‰ÒžI‰) +¤VĢ޴-JQ¶mNÒ €ÍM¤¶lK£ +ØR;ŠnEm¿*\A1KÎå€6eó +§ÔTcNP‚:¡k 'ó_ :¥c²›šÊeiÄ(–%„eÄœ'Ü ]JÕ@$gõ)ήNÉˆÑ  +SÒd–þOÛ`ÇíÞ¨ö먟'B2bLÅ“ù™„X4N!¹ ™:|‹€i˜ð<¦ƒ•q„úv…¢KšÎÊ+¸œXÀ‰¨ÇÕ= Y¶\|ú>—Þ*½ŽÍ™ í +õ2ýu38%‡N?ƒNqKÀÑ9tútìïé9tút(¿ò 9tútòlÁãsèô3èlÎóäÐégÐd ™C§ŸA´åYrèô3è³Ë¡ÓÏ “"8!‡N?ƒN¾“È}:"‡Îp¿òô:ÅäÃõš?ïÍßlÝ^©]§ÕT]’¯b†â»TÔÏ'º”©wþ~µŒ)æ<‡aU"½ÆtÒðmKÊÕ^>u|Î:úçÌ”tÒØ‡™eò…þðhè¹$¼ÎF¾Çw +?ÃbÇgœ3¢—9gv|lL©t¹²@tE—Ô÷ÉwFLÝ r¥+/V’æ´ÌfUv=8m `ß)“d¬Fý¾Ê +Õª’]köPt?à0»7g3ƒ¡õM¤ Íæ´tD+ÙÍ`ãßf2ÙÍ(bl"Ò “ÝNUõý[]›ß¹)õPQ8½*sn/ê’ÙS›a’éˆøÕ3’LÎDëKç`€™À™|-"‰Þ :y™ ÏcN€Q½*5¶4[ÐZ˜ŠÙ¥9»†y|ò« ŽT­(/iÿY×m"5M~ÒQqÞBr!ìÒ¥f—Ä©SÌŸfŸ<‚©w5ƒÁüÁ¦nλiùœTõsbXÛÒ0ý[4@©O†ÀôoA°Ò/¸¦œbº3V)¦³bb +fmŠÀï.û‹Îôʲg +¯_Ö Gu¹Úe%)ÙêC¢°k€0Ê–SPÙÛݪÞ%"ÑzÅÑí\xý½’ïŠíìÕô=~7A/„ZSîaj»úZOèÌ´fZ˜A‚ š!nO‹O ¬—WwphVÕº0Ì«³zvýÐK‚„1•BbxÒ&nŠ“M[w«ì£vŒïë3·Wf6Î྾3åñ{IÊŒ¸sçÃYç±còáÔN¨ÂL¶óæÃrBÕ|>œ^Fêùòá ÇwŽLpý|8¹¶Ôvj>œp«†ÉTãòá4ÎÀŸ9îÐ7<ÒwD>œqf½©mâÁ}ÅÇæ‹p&Ra[Âä³s‰|ÝèSd¿G™µßõÎô5ä;ÒœP@ì©×Z 8úX6ópNȱçýGç¦2Kw‘¢ä:™*nÓ²~⹿=Cð›\ÕN˜C+g4oœ†éGç8šŒ@A,çÞÚÑd«Ö8¤÷‘n´,¬âþÓÅBQá1Þ+ ÇJ"¤V&„sêUŠqÆœiÏÓÚvÕº‰B'.íR¹¦xÕ LiÅÚ©¿gÉHÅ/ .Q1Ÿ‘Š_(ýÆ2Rñ‹ˆY'T/#uxAšHºÑ7^Δ‘úr¦ŒÔ—3e¤¾œ%#õEíh‰Çg"M>aŠk eTds(ÄPåh˜‹õ¬¿€™=m{ÞT8v,5Uì\©pGÜ}D*´ú4÷3¦Â¡¸¥±÷~b*œª_yöT8µ¨ÂùSáØµRn§Â™3 ÅK„Us«­ÝmbƒáÕnÖÉ;òB5µyÀÎTxf¯Ák ÏbÃqS{I&41Üî7¸Hóš`I6z_wѳ¶8À.I8B~"ÂÊTQzaÍ8Uvæf€­*K03X}àð÷¾Ê°ºû¬ƒ^†eÃQEô>¬"Þ…r°¼ø½Ã_jáX3y%Lçµ¢Ãܧ}¬>>¹‡ÁÒ²{ò ¥È‘Jªçe.®õÊÅ:v¾ 1{Ò@»„Eµßµ’ÝÞt2옋Ê^†Ýô±£‰Õk!È3ì”ÙX…Ž©"Ù –š*À`©ia¤Ê »ˆ§¯‰øF;ë$±G ¤¨_{M|iåéfØ1m¤UÿwODzXtÇçZõø‚zHë.M¤@^˜ç¬Cs¬ŽÜg +›U2É£GŸ¸‰ðß&kÍvHöù–_ûõÆbìò÷«üÚ4ls|'ÜÓ “Ž>ò +S”ßÂq^iXÙkWIR;r{p—šÜ‚UÙ#z/]û¸^kÕ±j¹*Ò>_ô ÙÁÎ\i§öÈM`Ã3Wç¨$§fýJö’ÎTI.«RGîØ(\ÉüIýó0°.šWÓåR9×§_÷ílEä4O Ö¸é”Á´aE•Ãñ©O†ÅÚôk ˜ïRH±|4ÑM¥4+/iÃ:**'š…í4Îê;c6²‡0î|ræ ›NÍà=‹óeÓ©¼dµ8Ï’M§rV¹yòÄl:µ Ê3ЧgÓ©åÒiÝus|6ù¨õ)Ùt* ðÓnQ˦SË¥Ó?£xL6Ú> µ>g6šß,_+Ï‘M'!– FÕö^O˦SË¥ÓÊ9>›Nôª¥÷;›NmvEÿ\Ùtj¹t» 'gÓ©åÒ! sÖl:µùCòrÖl:KéLÙtj 4wxΦSe\SØj6ÝÙ(fhZ¡ØqÙt;s6Z.é+ÓÙtjzÑvöl:µ\:›aG«ÙtÚ9#ç̦SËý’x¯gʦ3¸uöLÙtj3$X°g˦3éWž˜M§³ó~Æl:5)×½ƒHÃ(…]ŠZš!ÞN–Ÿ¨$>™QPîÞY¼ºIÓK°7 +G3ñ©¬Lœ5°.ލW§fðèYÇÕ«Ó°. ëÕ™¥“K³K’½$3t26,TYà°~å'37§0è’  +Ôî´7âKy—̳$3E¯SF€A—x :eZœºT|˜Ô0R•)÷ˆnvJ&UíWš ƒV掣˜~¡;+&¹j™;ƒ:#Zä·XæN£Z–¼ÐÝ‘I¢>ÙJ™;óÉb¡»Ò”Ø2w'GM•¹³™:†rj™;á,÷Žj¡»“{°V߃2np3¤ž´ƒ`ó,·ÏqɯJ“[u_ìAó°•¡ytÎ*XH¤“[ÞGµsNZ½†_-N¹Çwd:3°YišÇ-"C6?L3´PaË(Ÿh8p)e¶VšGÔæ:˜¨!u–N§·Ög< €ë4Tkmò4”~šÇp`¦6¤‰ÌGÏÉɽE”Íáñž CuŽ ´¥I8þ#{£¨“è1SÌÄÉ.*hJ[šL¬õ®{¯Ý3Þ +€™Ì7±™È8éšTfÒµKNJÙ¼L® Sur$ޤn"ƒp³ ø5¥¿½g.ôWí)î©=.3,oc6:u#fª´¬¹ +†ÌRû«éªEÊ{Î|´`NhŸê|>Çæ.‚r†[‹‰ j§;õâZG$2xóie £T1<‘ÙJy§å‰•ò´Åðô +wªÆdkóÕf?µM\Ža¤Ç^ΗXû‚Ì™¼ŸXû¢ïU›­õüñ{ÊýT’ÌÇÀkµh–Å3W,Ë̃Ø8 çôÄZE÷^8kùí°\žöF4w´†=©b2i@Š!øÍ8®esšC0ªwÍBëf’˜ä«XÊmòÚtILZ9/G_<‡€»í6“Žû€6¦ÖŒ[Ê);_ f²°àWj(®WKILÝN~‘¾ÄKr…×~@™ãª¼èø(ë”w¾×¾Z†«èYXÍq-¼.õÍJvl¸yÑÎqUžÚ8êj*îž+lgÂ23aÃôÕ2\®”g¶Ü£îí °"ÝYÊ=ò©çÈq vx¼¶Î¨ž!áìH˜¨äð>¤q”¤Óú:ÿ`Òux»ùüÔârûQ,ôºŒs Ï µ”vŽ.‰™S0[0ãpkK´B˜”žò2w®+j+]èduØÜ£«öRê‰ËSÓ>ô*Î}4‘b•B¬©†Ôæd ÝmÂéVÞ—Òª#ª´Z¥û’È•2 ïò7¶ÿÐJMÓɇK<åÚ¤Bj ÊrL¯žµÒð¢soîÅ»ÕJÂÓÎüäa²UL™û÷YÓJ8Œ]:—¡ÞH éP )ʬGÆRjcå’Hg÷—šH—±g-òúRI·|¬w׊Y…¢@èÑ'>s?1ÑÎædÍKÒ Ä‹æÃD;z?X:%ñ–“ÌN^tÁÛ~·béÔsŸšm•ÕNQÑ@a­¶®×Šý ƒØé U̶ igÿH¯VS­bf¶Ê—aÅ~£‹ÝåÑNm²t´JÓÒE÷_05Itj©@S= ©K'—aíÓYiÖŽVé$€ùŒ²Ò,ðSÚ¯?>³g{`Š›Æ‘Mã“åXN­]½K²ŠÛ¬;—¼¨Ó׳úÙX…²êû75SP”ù 1æ¾_™ÿrD ¶l)¸¥_ûé«|ž}k6»ö„Ïj04Ý»lLÆÇúþí)q-¾Fjù£dfs×°¢žzdY¢-Íeu ­|­„1™/fèµ@PÂ)-•8ŒÙ’ÜBÊûâ*Š#Óª»Õ¦4Ìðâu&¹rž[Qœ¦ÜiŸš³¨¨]…/­.g"h'ßnó ˜TÕn]PÄùÍf·%´«ôšº#BrøX­<>‘ìðþ±Ò47é=Šb O';qw{¯µ¨™°Æå’é{ƒT@ÝDÀ+ãü}Ó©œƒ*.6n*•S#QÇ3(3¸«>yeã“R…ªv}1+Àúúõ»­QÌ(—ÇÅ v.­ ’Óhç¡©©#rÒý˜¶}¨‘hÖ™Eòrt Ù@S·jh0]QO¨|T µxò±Y€>ƒ@yv«Y€fsmÎS²ÍæÚNÊ4KO´"h6Pé#[ËÔ15wßô³¹ÞŽÊDQ>e€¦(Ÿœ“ ²¶Ž.Ê'ó,þ±¢|ªQ¸³å3ªó~ž¢|è†öÒNîšž½(Ÿfî¬EùTsFÎ^”ï,õ+ ‹ò)î×딎íÌöÆðn¨“ëúéWõ;C&×Ùî†2®ëgþn¨Sêú‰C;ÃÝPšuýô£BJ;ùغ~úUýŽºJ¥®Ÿ~¸L+¿Òj]?ýª~f8ÙÔ‘Eݪ~ª·4Q×ïÔL®sœVä2¹Î”ˆ¤UÕÏZýJíº~â–'Ôõ“ϹÉê –ëúY?¡zL]?µtDã³pVëúqòyêúé/t6ƒ­5³uýLd¥¡®Ÿ¿¥^ÕOç?¶®Ÿu;¦®ŸZ:â9rÞåuýô¡×ã;µ”-_ïuýôß…«ëúésS¿…Æz]?}Oíð¬õquýÔ%š¯êgœ÷j®®Ÿ>)ÅÄÓêú鸶¸)ÇÕõ³’•v®¼eU?MÛÒb]¿Sdß|]?Ý4IŸ$#õ$8ú·xX¨Çw†:Vä‰uýD(jÛV‚—tb]?ýª~¬ìŸ^×O?V`sž§®Ÿ³³Uýt3†,ÔõÓßoVÕcGÔõ³rŠàøº~ÒÔ‡UýޝÇg¥¸¦^=¾ÄP +ቷ7uýtâ_âú¢oÚ›¨ëgíFcëúé;Ô‚†9±®Ÿ¿¥š`"õ^͆¤Õêúé›9è¼åêúéWõ;O=>£,\³õøN‹f‰õøN«ëÇCQϵtæJ¥®Ÿ¹dxÕØøuýô“áÙzI§×õÓX¹¹ª~ZzÌj]?ýª~’÷“êúé»íêób½®Ÿ~U¿â–rŠ™; yb]?µœ'íœÄcëú©vIð¾n›7[×ïÐ0”VõÓ̵X×Oeb%ªÀæÔ<]'%¥a]?ý„X…=vt]?µ\41|¬Q´P×Ï8»öuýô7¤÷öœR×OOÕª~Zç-­ÖõÓãItT·èëáÄEðÛL;«›\áćD[*B»˜Jh÷]/´«sðž[Ê+ŠSÂEi ëÛ¹’‰=4Ù„3ĬbæHàÉ‚|±%RTá‹ÂÜ·Z"à¸Þ—_ +/ð[gË5Eš¾! +ÙçϾÛáÜÄ#W +«8¼TçÉA¤: _z•*ø²74<Ïÿü0waåÇm«$Ë9¬Rx(cUÿ¾Õã…w¬þþ6Æ^&ˆuÒ®(ÖܰçŸÑë¹6s¬WDZÞöþ +{¹•°ÏæòûÜ_±Á]`ƒ}{ÛNì;óåù•Íä?c4C]ßÑûÔî¹Ü¦Áp=±ç2;gT+s9Ï'w]dë²÷ÖÍ^mèP嚈 ]ßTâ¢{?øº•–+û”!c>!ÐætÕÈr ^¿þSâ«À´·€ƒ^|†œÍE£Ì}±—f—z«¤Ã·Š<ÉJ@ÖTEЗÉR`S#"ð5öÝp?éÔ—GÀ»Øm«t_*Xõ’jÑLâe‚2I…ŒÔˆ§ë» P5Ê 6'±\þ ÑÌ•†¿]* vVJDñÉÞl’È*Úࢭõ¤ÌQ£„÷³²‡µ1_Ùò™þÆË«Ã^ÀÛ{ø' Kj¶Ðõ$[ÖÚü€…4“°s¢¶wó§ÓÉ].f+¿¦êLþáååËWò;÷wíîx ëÊÀóþdº…ÇÔ0Àáþ¾ °žS6úÁÀ¯!NGk.áÂRÙ¯`4–Õ©yÙ¼_°bûáW?÷µ ¯AáůÜ{­ÁÞ|„o{ÛBq1 áX(q ÝüÄ&nw +=€˦¼â#¼ü•Êðïäüâ°¼Õ³üƒJPòàsÿ•ãÔ1ñˆb©¦”ôˆ¶8<öfðŠpeÝÐ~ +²MƱ"¿bð„ kMô•‹ßÞqä +b¡~Åkqv–að¼ËÎብ&<ÒnÅ‚y®±ê8Ëþ¤ç+—ÆzWRoãÛ·a-%–äKúÁÃlè<`å@1Þ†A`ñÐ%“ñ=§éXö9ò˜NÜh5 ’˜ó'r1ºëU¼žl:Þ \4*ß gRJY=ƒ€Û}ãðë´Ä$h«iyfcÎâ°&ùZºœìËÅÏjû5õÙ¤Ü@÷ÏŠþ~.´‹Õ +e,ØM¿Õ7Ùêª÷ú‘¯Å#©µÊM MX§.´îñ t‹âˆ +朷 +¾€ß¼¼†-@1°¬­wP¼ŽÓ£Aönä篺 Ø„9ø5åÃe­añoô0Ö4€ž\+ƒh_¯~ßlœ­ _©a*j >xp£Ü Üm¾yöÀZ&¸¿èÜr†3ª4qÓþ?Ü…°èèÒû!(1’üÛ"VºÏPhÒÄÅ%Ÿ–Uª7^~|>4»¬“†×õÇ{¦—Æ«ÛÔYàO¼W+~/ó$Ї@Ûj[;|ûìØc¡VÎ+"m.èC«(˜7òÓPjr^jÀzt=:|oî4º+P ïáW[ŸHü£ÃOTŠ·àw…© Vd¨nYk]ÊéèÊÂÅ^­Á]£ÑØ@>H4ÆôÈ\ïáæ®2ØuåïXs^øk—ùæ,SÏwK‘«Òô‰isšŸq|ºJØÄ¹)÷êíRé›GZÚš­X‘¢Ñï|7ýã.ݽÇîmÎ|gï¾Èen+AAÐ~•‘È…æÎ ˜¸931xT¦?æƒR°ýM§7›‘Ú€U‡ !B-w+×Ýלuߺñ×¥ïäo;N±p ÒÄÀê­\Ó¹žëõ7GÕè¾%Ìá<í()0 ž… · +æ§Òôz{™ +K£òð{<‰n‚äh,Éã§ûX»M=q7ÉHB¬¶tó—»„® zÖ.fúE ôá¸Y±K¦ì[¼ÍóÝÞ &“ôŒÔ|äøo­]/‡®`ùmr1G²(s§¥™V£¶Íy$½³Ïo U!1ì¤9pv7ÁôÐÍ\Áh¬lzèGÜæ†N…>~',à}éŸE5Š9ü¿ÛVúž.Ò@[Út¸¶ÏWðQ*Ï+¨a;ÐâÊÂ?àê¿Öšö;üŽo_Ï €ùTa7Á|6Í9ÈÊ——¹Íoè o÷-;å?VÜ4\@1íf³ÙᢛÁ Œõ®à †öÁ;W0R+¸ŽÄ¬6f°Š©Œ*³– i³Æc'©uJξÕUÜúÎGàϼ (¸ Fÿ£E•ÇŽ µ¥á¿RkÀªŒvf ù-L²Š\å×'ò´×N±ÖDáâî´NÎp§Ûài7‹§>[$pÒb9ð'S(|?^>¢¯ÉrbOT£{¼\¼Nøv·ùZÔA?ïKB™¨ålNÐhì/Ó_©/©Ç}Çr!f;GnŸÌc¸tÁ€‚……¹ûì*Ÿè²’ËT½K•ÉEaévƒ±”k­žû͇ò¥»õ‚©”VxÓ—ü0läü6½VŒÙf aXÜÛb±°tm>JÁ¸‹1mN8©Ï¢ ¤Ðº8púáªôQªVo–`’ÿ–*Le„äXÃÑ„õd;I£›]ʸ؅šáh}’5©|±£mÆÈR:r…£ …°X\_­³¸<“ëŸâ6îÆéSÛ·Ùœ–ÄëÈá¡ÇNâ1+ÚĪpéë1ó“¬/\Gò˜EámñŠøÛXhø‹)—wÉI$bsxß’0®—ƒ +0‚÷È~õx „#ðQîÀX_ÈU‡¾ø(7V;ðkÅáÉ<¦à±ìäПjœÿìaÈcçSüq~“f•fœÿhOõù4+FHް(-:1hOü\áWMô'Å`MsüA|LÅ¢>݉ë‹ñ^Ë©˜Á¼œ×•ø'c°Þ›[^‹…=`ñó>Ñ_§-5OX}'ÇÂnÛÞ|÷ùçKSÀÑÙQAÄѧÊÀÏ“ŽØE:lœ]c‘Ïó•Árå­äWì¨ÛÐ'ö,®ãæâN(ðË›‰uîñIVZ—»¸p¼{ÌÚ5âÉÙvûê`D^ç·¡in "ÿA +5±ïßHUØÄ‘иJcäE4$¢âÎ*8#¥'~¯‰öI;Š@dn;wþ Äœó»8/èYVŽ +¹8 Ð0+íú¸—ŒŸÍ…È4EO‡ ö—Rµëš˜µƒÎúØCÜaCÿ#K5-à¯ùà§ ð[Hø Ÿ:@@vnš=¹‡¹ƒo +‘bkR93Žo®°Ñ÷ ÁíŒõÀ>À”Eªà”M2:m‹t·VËJɤ×mA¢ûlêÇa],‚­˜³ææ¥àyðñ©1µÏàÅÏ3’J€lQ¨7÷íûJÂJ¨Z5¢X8Þ\rÅ¥ˆ=.ÊÀ’7X¨I^ðý‘ÔóJˆðN‡G<R¸HOñmòÅ“ («qöùõ˜çKJbö$áMJЩl »®õI0Ì<"°Öø<ü¾Â"Ø44 R®TÛ§H]EÞ‡Z ÌUþýé¿›ãƒÜžgì½C$#¼_ $xUðì¶Ft/ÏJZ¬¤!ÐÙ¨³oº~è˜>'"Ø«SŽ–¾ô³zØx²ñ0PÙÚ£IÉÕâ¶§j˜ÖàW½‡¡ZÁ‚ÑÆ ÞôHI2â\°S™ ï•Ämñ—’˜0•b:¡æWöb¹?MÍ´(‡‚<ÅLËF‹¾àAô×b°Z£?–ÙLçô?¤“Wz„-[cÓU$]ÅŽ"LŸÔ`C&xLÁ¦ý9sš¸ö—‘RÌÂ06{KâÊY2´ãÄaì/´x̬Ŀ]^õ`>DWoÞ‘¯È£‘ ¦ÒëÈüUëƒÍ©ß ˆ¹i¦RôAX‘GKæ4‰mvš¤Wd]Å5ú=Rë@‡‹Í†Fâ4åNJR»ß½xrúžŒ®Ã­&ï<×b¬Ö⼈›~„WBÐî¾&|\SOÛœ\nne0àSZ›a|Ü?›e‘cÎ%„&”Öȧ3±Élð7÷é‡D©Í.—ÙõËî½Ö|Ü)w€í-ût”}qúœÚñ¹Qw’Œc¬6Ü%ùTä¸G’Õ GÀ?€'ˆ$†WÅþQ1 Ék.¼=ßòîB’¼æ«ô,Ï?Pd-Á@@õ†Í§XP^³wµè—$ƒ|°GŸø ç_ÐUü>EXåôå³rã +œœ7á‚€7Lø„£ÞØœ\^3ñµòšÃÒ„çÒòŠ•åO”Ë[ÌRº¬Íiœ0+Ië _{š¨ŸàOÿÞBý‰ Ÿi»Æ æïsɶÂîŸn«–l‹…vë(FŽR1È«A!oû ƦâÊp ›iyÓgð–ón6BâåéØÙr†¿Óû4Ð^7 ‰@·w°ã)¯f€Jè,§³ Ž„:‹ÓX}*ˆB „+çø„» ž÷x?ƒÝ˜*sZ¼î‚,›.ü)ÊgÚ¤|¯v]ø¶÷ø fÒr—ѹ'ÏKœF +N¦Ç¼ùøi7¾ËœRð?ãp,b^äD¦Ûꘛ‰K”Kµð’3k"N~ô +#„Î<ŸYô³¿ /¬CÚ«ðÚÿ)¬.6¼¨@ýó(…-*3áÊÿ“µÅãqžˆ$’öP{¿"é&½˜-6v¿-m åïpüy3¡*4IvÉ¿v%j¼_“›=eå;Å»»D´DŽ© i÷³Qv‘\W¹0¡ô$YüU¥i²º¬]¶o†¥)ÖÏ\¨®ÝÀƒm6S3Þ\ðÏàÑ÷4èø¿´½é¶&Iq%úù§u…(*ËÇpw5HB ( W„Ð@C Ñ4 „V·þÜg¿¶‹s2ëdRP¥¥%H>;ááánnömïüÇïgíWÿÛ»å/×Þ ðÿîõáw¿øîÿüúÏ×ßõò/¯¥è`qÿÁ—~ðå/üâ/ÿü¾qþýöŸ~ñï^~ýçßßþÚ/ÿñ»…Åô_ÿÒ—¿ô¿ÿ«¤=O˜QÞ΋ïòi0£d þ ¼(ÖUŸ˜åí¼(‰­ø¤Ì(oçEyºó> 3ÊÛyQÒ‚øm˜QÂæzïO¾Õ¨ìžÚEý•wð'_°¾øë?{÷f˜ùœ¶Ê_¿ÿ’7øNØÇý7AÄêrê¿þކýò³—6~÷åç’ âÏø%ßyj÷üý_½ô]~3 +×Õâc +àïÿæ½çÆ{ñ™ß~Äo•gH,þçWþ×úÆ/¾ü·_þÙß=$X»·Ï}ðûÔýÛþhA<ý¾?xÿÑäû~Øx/ãHýÁßPK~í?§}ÿw¾ý.ÿSþÍÏó_èS÷Ýþ§,šäñÁùÓþàG“ûÅ6çO¾õŒ°õæx—‡þõÄÎüÉ÷ \~ÀSà¶ëò£q›ó 3Ê~ëëšiËï¾ûÕ÷¾ÿÅßûýýì¿ëë_üÚøß¯1ƒYÂìÅúS"?öFxÿ‹OWã¯þá=žãñÜ_þ¼þõµüówô¯'Ïý«uþÖþøïßùÚkOs}÷Ã?ýéWÿõ3ÿþ·/>óG_üÃïŒ/ã;Cÿ4C›ü¿Ÿ5¹Ê?ó{4„~=±Ù/î,ß¾©Ùþò1áôQû{€ž œ߆¢ü*Ø=¾xëÍ?„àÏU˜‚?|‚Iûü¿ý?¿¼“w +ï½ß#mÂÍÉ7ÿâgÞØõÃÏk£Ý«ƒ |/ïb§qÅüáß}íû2<ÂËzim ;%´å^Ֆﵯ¾û¬¥˜_úÂmå¼KÇ!~ûÊKÆ}ç6ù>g>àùõ÷žgžGì#_Ÿ‚Ð¯ì¸ø÷/_S®|×Ðmÿò|äú…÷ß öwm¶üèKï%7ÄS­Šî]?•iñîïþÙMóó—ŸsņÙ!Þÿ—|CjS|ß¿ …hÒŒP£ÐhÅüР¶þRSYÿôzÿql3AýàŸ?óîN¾„7>¥¼ü½Ÿ¬LÅô\²Òµ­Ï¥+?Åd%¬‹7¤+?ÅdeXoJW~ŠÉJW6?—®ü“•¯Æò_Ü~ZÉʘ±7¥+?Åde|ý7¥+?Åd¥WòséÊO1Yù¤Zëõt姘¬ü¸¶O–¬¤·ý|ºòSLV~Œ Û§¬|Doý–¯ñ±’•oÝ•ŸZ²òd?~ƒdå›2lòÓO˜6x%Yùjöãc' +Ãdå3ÙLW~ŠÉÊg3lo‰ß&Yùjöã•t姘¬üMð¿}²òÎ~|4]ù)&+_±WÒ•Ÿb²ò™,n¦+?Ådåoœaû­’•¯ÍØO~³|öÇMVb}ì×ø­“•÷ûhºòSLVÞ'ò¯I~²d%±®Ï§+?Åd¥Î—·¦L?…dåÇÀ¼| +ÉÊgOä_Ø!}&YùùóÞB²r#ùþ{÷ÿ~ÐCï&×E,O”ï_ÏpYýWÑ1¿ø8aÇOt¼ã0ÿ¥tÌ÷]þkè˜ttŽåíaÇOt|ñ™vüÄAÇ'ìø‰ƒŽÉÎòÖ°ã':ê»üš°ã':ê.¿&ìø‰ƒŽÚû¿&ìø‰ƒŽz—_vü˜AGôUøá¿ó¤VB:‚¨mm¥øÂÊT~ÿwþœ_èü£oÿð/¡©>ûDSÝÊÅIÁY?+nØÏùKqäÍÅ÷C·°ou‘ú]¨ÞKôĽ˚`+¾ûÎ|áÛ¿Ì\ãú¢¢£ÿú­ßÿ‡g{Žüë?ÿÑ?¾ž†}„þûÿB"üŸ{Êôz~…Dé7Þ¹ùŸâ¡þì]0ˆÍþÅõ¾ðÏë&ÌþFyL[~„Qþ1®³³Eþ]ÿä[ŸÝL\"rçèŸüh€Dü/_:¸÷»”±ÅÐ^T„OQ™7á×ÇYµŸÿðâ¼ø ‘ßûÚÏþåiòÅg>¿|ó‡¿ú_àæ÷þø‡?úñÏÞÿþþð—/êƒþ¯ÄÿÕ‡ö°ÎC›ÿU&~|ÿ/>ûÓïÿà‡?ý÷Ï=¼ÿ³åáË_{ñ™ï½÷å_þê«?þàW?þùϾÿËÿ|ø}üô¿xÿ[öՇ߸ÿþ<|6ž§|/þ8$ŸCîó{õá½?þùÏ +É7¿þw_û¿¿øù/õÀ‡yøÛŸ?|å›ßüõ÷íÿûðÓ¾ò÷ñîßÃÓÅÿçÿà?|ñ¯ü×çñßõ¢ðUËË:~ò¢øÍãšÿŒÿñçñÿ?ýŸ‡Zþâáþ©<üKÌÐwþæÅ(£½,}Õ‡¹ÏË9Ïܳ–k¬öð!„õå}PxÕÚ œõº(Úu[´ÎQ}[TÆ’h¯AQõá+²¼<í@¸_†è¿”3ñËzŠ'çj!éçe«×Éõò”‰Û¯>Ûä@!¼/«}⮵ÊÄuûåÙmPÔçÄ\­Î&ÑîóPtõ¾pÃY[Óû%^·[åà¯ãjïñË|yM<@+xˆ®—ý´‹¢˜® ¢³ê¥®—óºG*‡“zú^G×í½—oÒ +Þi_s[OÊgk»àu¯¯Cî‡Û/K<3fi޵tݸ8M1¥½õµÕ/ß­K_7þw+§öõðÁ K“0Â}¦ëj/Ç×]º.„•2Ÿù)ë¸&e·agñºowE£7¼@g4‰z¼ E­Öw‹yÞ2æ7FᬜA¸N=ºîZ}ëcòóÔ9æJÑ%I?W@­1·¼°¬U­œ1(Œ¥è'­~}¸tW_Í¢vM­ŽX¸ÙŽoùG×ÅØ±òôKZ:3¾%ÖÇ>“Kg䮊Ì`kuÍ+Gjët +GÈBK>g0v*ž»¿<׌µÛblo$Q|Çxîÿ+CŽ\!¼°Bí”ÅðÅSæ/G#²jüñUãÁGâ¦o±y+„k/}‹ñ²î5)ºŸ)îÖüÃÕq×XÀÇóÕsÉ6|ÂEáÐ<÷X[¢9ׄ¨÷¹$Šï¥!GãìeiÈx¤Xë!¬1$Q/3¶ÃEs•.Q,ˆVí|ìÐU_7ôàžk'&ËCÖ—ú„5?j(¯Púe` w)KŠÆššÐFφÿqÚ‰EXôh±÷/\·zD[>4mé¼ýÙÜg-vе<çh ìýuiþ×ÁŸ¯µ87-vGï…bÆý×µ¨Bt/Žs‰ïŽ^1d¡¶@_\;–7.‹u‹O˦4®©ë„2¡¨Uª‡î ÑUµHBXîåÖ +‡¼ð’!š/ófc¯Æ‰õ#Éò:x ®ºœ¾pk¼Ú/hÚ ë9úæsÄaƒÅKw¬^=}©žªÂå‡Sªå[_ZHëŸ 7õduêç5LqˆzúX:êË10½ÖYF~™3^ ÄÎÀžîíÔæ£¥^^ö‹÷Šñ©÷´ìµ(j±çý²mÕÉßJ,°øóúkùmyä¬ór.£®N‰fœˆIv¬b©”–ÊiAÏãèèWmº.TÊ\ƒ¢Ðn]<(Ûˆ6%©í`;]ç éäV*Þ¯} +ÞiuF-ÖÑÄ,AÔ°³û QÓ×_8°Õz,ÞË+;¾RL …£rĽ㾺¬`¾æZ¶F,ªÍ/R_ò¶裎õäORbôÉ!ËÆ:ÄIpaÝÔ˜À‰Q?P—q·YªD•«>Dó4< U»¥nL¼®“Úê;N£J ?ùn{%ÞíÐP +IkE×Äkp®Þ‡^>ñÚ¥t>HçDÖ87jÍg< êèÓ?šæXk;vÁÒú©=  ¸b&x·¢«:”¦æ_fY<|¥^«©XñÒZô8¹e±Õ´9ÿ¡[8ÿ•“cŽC®x7œ,aÎ…þ Q9¹~¶m°§HÕæäÔt¡×‹Å×MÝ S<=ÅM’q<Ǚȳ|q¶Â,ÔÄi€åSBÃí³)é¡=±Ãlá½Â$]"ëPSË'„a…j×ì2¹ÛÚæA\ hÅmÐõ± +;—OfÚíqBaȦ4c …x¬$âTñùð +Ôo·þ¸`‹Åa°Ú”¨¦²›¯Sû²ë”¨¶áB¸öñ[ +"j¡¯*Í……Q³>ªÊ`•Cv{^“5ô4ßnľi[ç_)<ÿV<·æ²Ã +„¾­ñÁp’Å{_9—WÜa +ã(‰‰ožJqlMŒØVx!S¢+‡z¿5^vÄö×Â[:Jz¡ù}I5 7ξ\»ÊÙ–´ªÇ“’j“ß[NÃkBŠB…]ÏŠF»Ï :Tw‹¯Ìúžƒ!ÝÆÒXO¿çœþ46Nãª2`ÿ­p:V~íº–¾Û†ó_»† åºüI×5øi:MœhÀ2é~²8ÜdHÄ?öEciÉA Q(Ñ!ÑU°q±¯yX›ÕÇm(zÌ,? ê„v(¾Nê6´nK­c«)ìÞ,ô›$ýš2r:+þÖ¶M2¬.–øòúsda5ÖC“2ŒðIèÝ=lP†.„(²£Cµ¢ëæ%a,x\*-¶®.;tðÖÁʈu|¨ ð•y¨b™Ç[…(\~.üVö੸ +ކ¶^+ÝÁì˰ª.!Š‘B¥R„­Œª}¥Ž"Øq±õ½« _|0s5%æ‘«…©Û"DñUý¿{8vl¼#,7­mcÙR2ýyÜ¿ÔxêK¿œ°ÙùK¼äŠjlª•P¯…¿ªèEÈ©1(âœ\°‹¼Ëp8;%lLò…{7ˆÂ_ª÷Zô#BŠB›¬7ˆÂ¬©o2æOó»#Ž·ÏU2qXÇ·æ6×ýáPÅê«.œ…p‚s xuÜ…‡NxÉ×À÷ô뵆hÃ@ +Ñ ·Ï¦3EWl‹MÓ‡=úSùÎb½W˜Züʵ-J&\Ú+£h)í%ˆÂþÇsĸ1"t ¤±r%lø`b=U‹*>Žn'nNÝZÂá#ˆ*ôÔ® + +;R> +4åP/1âº_.ΚÓmêÌá{c{¼XõTÂ~mºnRgÆK1 Ä_Fþ2ù!à~ÄåMaÎZlÅNüøHuÏ6¼b‰àDžȦ>,í ® ŒÇ0%:¼?Ù`½ +}â/Œvð+#6ã.U¢£#Ôüˆ¸,ñ˺“ÁªPKž…YžW˜\n!Šƒ"DU>òÀ +Óhrr ‚¢ÿ@ÏTa°à7F.|êå?gÄ8–BÎ…aì5]b…SÔÂ(Àʇ[ÐÞÆÉ«†Ç>z8Ú/q–åáwæûrïB4C BT`%û){»…1W1ãaœæG¡á 7Da25‹”=è‹¢µè!i]u(6ÂjŒsK×-n4ˆâ.Å>©ø!Ú¯Š¥Üï%ƒ¨L8ÂÞ ñ¹gµŽœØpÅÄž(RCÑ)ˆVèˆ^Âa +àå.¥dFÜ [y?JbHÒ½)b EQ¨ï Qåä>+8µâxˆÍTð¡hÓ㈕Q׳]:Úñ by¼ð.æC …9jö„6õŸcŸ…"öÊ‹³ôì×$õ@áÅL—qoÓ³ÊÒe“†EK{'”(ïµ8bèÄmQYÍ¢†f¾Ì:¼dâc‡²!+ß!Gì¸Q.°z…‹YÃücÖâ«o Øe¯CØa…pŸb­L?›¢g}|óÒòÄÀZ¥(œ ܬדZ™îI§pëIb!Ñþ|›(OÃgo.’®\Kþ¦_T÷/!?ù›<³àz^«ÁpÃÓÇiŠo~€·p¼™¾q—Oxµ®`fx8ñº×}ÒÀu€°Ó~i“ñMˆóqƃ4c‹gn>ƒ +\ñ‹ñI|¯.\¶ü’8ÊBˆLIØû# C"ZÈB´Ã2ØqÊÄ:l]ˆÂ^ˆ¯¦q8èÃort`5uŽ}љՀÂCVÙ¨aÁ{ÙójyTÔ8ø—b¸P›»…GÚ2öZC†`Ãfë1ÃxÁÀÀIÓ’Á"f! 32MRê„’2#Ž—Y.‹êj…‰‰ø!|Ì0ŒÚµ‡I ‹zrŽÃËÆáG¼Üpôk—A]/ìM$œÂÛPÿµÏ´Ñ4BȘ +Y(ì£Ënàe+vD‡ý §ÅQÚˆ8b•]åÏf·Ô’žaFÄŸ·ÛU©´¸z˜µ±jÂ… ¿Ì†å5Ô…‘·PCqx]§ó9F<~‘ˆ§]HÑ¡O¦B1”m„I8"ŒŸŽüÍí‡!Lg=ž¤~ýéHëÐz:Tã7<-8TãcÆ5{›X´ÈZ·‰¬l³mOxÏ)Ñê·<4N¬žŽ¿f¼ìÑG…h¶AÑ™T;p›âÝãÇÝãæ'at|vp¯©‰l-LLdŸÝ.5÷²ßH%ÅtÅòɰŠ(cx¶ÇÞ›cûÙ`ÏâÃe3®*ó²Î‰µ§nÿ|ŒI ½Ó”¾ § Ž‹©ëRµ­Ï3¶ÌÊèLÕŽ@ò{@Š»µŒÁè˜DrVN‰rÙ%‡Ê (v5–iø»Ô–u‰ö>xÊðïêÌÀ¦ Ðßá|Åq0ô(ek&±°°J?p,†Ö ЕÕï0ǽ„hoÄ·´ó€`LåÇÙ +Y‡Á"½Ú‰M:±&ÃbÊxÇòÆE¤{ãvñùh2ãy‚ŒŸ—µù!eó‡(|袺z¾ö²“6Š‚!¼ö¹ÛE¢PàX¨aS4ßMË4D›óæ&âÕ!«‚xá´0ýßãSVÅÕãIO—V`jKÔzõ™ñ[xö©"5ø{„H[>Þ¤P%Reñ”CúÉç4¤\‹§q˜ +!Œ¸uY¬°% Œ²Žèì˜ +§^Ë¢0J +‡êd€á%]µ|Õ¹Ÿe¦€¢°]y«ø(ŽôÒgn§ñ^» Fwì¼Îëâ$Á$-„fœaˆó—¢XŸ¢º‡“Íú²×¹:µŒoË>Â'A/„13Cîð@ôIè£C¤´"æÓß¿.®˜·„gì^‹ƒŠ*¼~æÃ) Åh ²W}8#ÍÑæº/g_Wf +bþõuS1–˜ì¥¸¾%^#J“Ž!ZÀ#p ƒ4ZèeH¦áÑr%â?è W žFq">äIæù4àèT.‘ò˜Åñ*íÊc‡EÝ”ë‹{É ƒ(¢°†3×DSb„Q[¢2HaŽ +7„MÉ(Ú¡_”ëdøað‡E]¾`/ûK,%fbÙ…ÅÅÅ…¨¨b;%$[ãèo'L¡ŠÉ‰qäóÖ®”-dqbÉ-ßþ U.‘^íÂ)·$:—=X¬±wb­(!’þìÀwÇæˆ„PÑù„}2!ظ.ì/§?»¶(PCƒwƒϬ)ÓI¯¿ó©E9˜E +gÎêc + »Å!>ÌÇ; ¿W[5¼‹¢¾9 ‰åˆé„áÙ¨‘®8“{çjCjQ=›ÿüðèÀ/€—áÏ—ÞòäÜ`÷Êé®Î?†éÎ$)f¨ÌN,êãL:>=DóLÎ鼪óïÌ1𹥈!éêgÞ¾{2tø]ˆ°_ºŽA¾ÔeÀÖMâ¹TWÌÜXíÆOOcn­i}ibž¦&áÒe±r;‚ú±r×#þdÐÂ:¯0 B™ IŸµvÔzl,C1¸¥ããöª­4JM´H»ÎôÜw'œXÂ>˜S§hh ¶IøSØ÷±ÌØïç¢2žˆ&"èV§ð&ãœI㾪'$)ÜfMÙ?Hz»nhR×x’°ÿy»YŽ¡Að¬|8uNBJ%üÏ;*ã8ïöxœHÇU˜ŒHƒ€<ÊM©Gä TëZþj‹ŸØ€ +‹¸·šH‚‹¤Ã1Í¡ÃG~ìðb«,ÚÓ Ù¸yï°4*Ì@ÄtO>#MtÜí‚ +Ù±ªßºhKk¸âÍ"0¢¯œûc·Àã‚'ù.HÿécßvƒöVLV+ÉÌÃU©â×#ü‹Æ/Ž×ÁùÕÕ«>)Ó<”9[qò¡AKüBë5žópK Ä‹wòˆ ÚĽ ‰Y«µê˜7h pÜ-[¢Rñ­e°Ho6‡³¦§/cæ`+Ïr€áͦ•¯Ž`o[‰ìó²¯È°MÚbk]w··8§I§+ˆ´ +E[z/Œ~=@U¢ VZõ©qA€N«¦ˆ~2WXó +K<ßP\ Æ»Xb…‡3œOm­·˜¢Ý¸X BüS«¥yµÄ0†’vËõÐ=~ˆ¬œéq%ð”‚}ÿ‰ˆ mñú ¥V= üÜ+³Í±W,¿î±™Ê >ù`÷áâ•#)t–»Îg>“‘ ¨GzhµwÙ·7xmp}uË!sÃWºè£Lã„í5û_•+îòq¿ ñåðÛZÉÁ1ëòéP¬ð÷Ööu„[ÓK¤ +þt’7cºô¿¼zc‡#%%_tÚm†DŸQå‡fÅ.rØ(kÅfb^ÃŒÄ÷ŒåÙëýpgÛ†u°Ó| Þ{Èáž×¤Û…ÔÓ+¯»TQŸ'²2ŸáE_.¦e]ŽPCNú]ˆ|ðsüÉמâY5aêç Å@ ·ø…»óR˸+ÁCXbÔý¸Ùj\*¡M´TbÕÖœï1ézÇÛâÑ 3™|@à%¼q|¤Ñø¿4âP ›p64bÍ@ÃðÊŒƒ¯R{ÂÉA>¢ÉÏ G®eó{,¼nöèÎÿt$ 1ßç Ìö@‘W8Î3|†¬B³¨ò*Ø3¡z€G;6AH :¸ïXÅóðSàø®E±·Í C€:ѸK€ù0Dô-»kœŒée CÕˆ»W=e¬ŠÉpa|¬äÊ<ï—ýUÄ‘Ôá*ÛWMz9<|×€Ðu †H'â”ÁÔŠÃB»j,†Þ¤•=jx´lÆÎðæ¤¡ÿE/DرˆÀÆFŒç‹µØ_¤ð4…gi„a#¸`ˆð!<’8Ð.KÖ °ž8GÌÎì3G$ÖZqbDª×u±LcJ]f‚¢!º$Š™Sx:"þa×ä +†çÑçG…iq?#Š­HÝü†!å/V耩‘6p÷H Ä_—KØôqÄ!üFo¾æAB£*Ù$2*¥ú[l&üêH‰ªc ?®| +b×Píþa(‚’ä(–Ê1Æò>Aú€Ï{*‘3 +!bv5DÀ y ^¨Ôé'hum¢4“g`:›Í4Îâ—„gc5¤´S?Ü=½‰BÓHÊC‰…>Ûò,MfPšaîx'%þ ì(MÎÈ0–ý¹Égc´¹1ÄóQñøMX…B”¡× @ºì4^†x„D—Òwa,¤ï–Õ2™EÑ;¤ö˜ž @íJœã¹Ðî…Éy„Hé;—iŒñ8Üa’¹Î‚„Vä¥k”#H·Ñ:¼¨JD0«^}ñá{Ìâ–¨HY2øóª\ï¹(‰ßh‘ÌâŒ6&rñÜÃÞvȤmCØq˜‡ªf9‰§D\Cw§­Y‘Ãȹ#•BçÅŠ“¨3Ô?&†šµ¢ŒIÔߢú©+òÁÕu4§3á@CŒX/Mûè8K¸0¡€^ÎE˜FHa!•«ßÙ(d÷ !‡a£o_§P2ø j2¦PS,¹9 èxÝX®ËjÃÅcÄl¢Ua¬BMÜ@XvÞ*žq/`l–u€×Ótšú +KÅŒ[˜ƒž0 ZïÓºxM¨Û3ƒú¬ˆ5ToÒ€Ä]‘J]¡fž<êmBOlÊðOžŨ –ALáåý‹ BF Cx­•C +ó‚=¶”ÅÇGÖŸ,ÃeØí¡\¯–ŒH`ðÐ kn3öÂ%ß5$Ë%‘=6äþÚuxxf•¼!h$R·j,d(ªf —//™F_7‰Âô-±ÍÝÖ& ]CTFÚŸ˜QÀéb†Z Ç\Ô…‚>ÕHÙPâŒë $'ù@E™¬˜m íMÕ¹_yñ¯/êÃWå`0:EìÊ{aO|hç#Œ8Ê:Šâ n¿=œ'"‡CTˆû@ŽiºhTàfâ• ?Çš®ßÅuˆùSX¸0Ζê…‡,?#2;ÃxîÏÏB|á,Ôk‚ø× +LB8'3}1¼Ã‡DÀ0$u4?¿¡Š[€Ê_åö '±µX‡6ï<Ÿ$lc‰&Pù1]ñú’¾g²ÝÞª +¤ÎQ¥öÁH]¡Þl*”Oèα…1‡4B½±=á©dÂÂ8aþÅÇê+¢'ÿ ÷–s±q*že³ y©îŠSf ùK÷’A'nný­l‚Ø›W¿ß +îf$iBÀ«€œ+˜±K:تä2€.GöÒÑôîÈ_‰­¤é!ïM«Cñì!Y(Q.uÖë.,f r,N8'<œ™ž¹TŽ#h±0NÖì8”5ÄׯAìsæ,ÙB’»#GÙq‰ó€ƒ Q;°àª«FTå ñ¸ÛxÜv—*}°ácýÜ"”ãw‚ÏÌ +O<c QXéSÑ%Ã7¨©ˆöŠ}XtŠ”|içNâ§ênónbØ»·;\Š`ž`ȨxªTë½0yo|¦YscÄ]¸Ò‡€8”ŽEÆ<§Çï3¤³âš¿(‡¿ì°ú7ÖP­5G_¡á°Âÿ/w0âèþ(—„1|–êX x‚ÁÄÖP>ÖÈâ7&â7YÒ8è +÷#¤õÅD)vÈŠ%¦XÌ6x-D5Ã…; U(öøsG·Êö8WšÆXßÕ‘åfXb»)¦1Œ|¶¥ã½Ô;ùkù- mFp†¸$FL™™Lꘀ¤`V“B”Àâì ÷¬,/Å¥ B!×H–Û O!—›-þ…ŒêÊ!™ßÃbÅÀ³c?‚ÿ”j†„øÅ6ðÙ@ ï˜ëuîègÃôPȧÊÑÀƒaþ0ºW’FÐoô›”öäi^smëO¡Ç‰äk3¼œ[µJÃ"ÒÚË'ÕêÎŽ``CEuïx‘Éó°ó\‹êi<¶@5 ¤Í›Íbig¿&¤Èzõ#".ÛÚŸ’ Ÿ¾¥¤¡é€Ï×u¨é¬_±ýøE@ÿ˰°ƒ5o~‡ãÚàav= ¡V]'b èÌ8 :³[¤"¹s©Ú(tfOËáD™c€ ñÉar{ÑO¥¨S ǹ,RµÕpµÞ¹ÉhÝS _€ +œ‰–jUÀbƒ]zà>˜È q¦kN¨G§$¡×e†Àôk2ýÚðQ¡L¼ö°jVIŒHšÎø ûÐ55é²&ŽT=Gƒj…ÛƳö,6¥ ³nú#@†ò>›kÙÞÖ\ìÑb›ÇìþT‡‹ÔÇa–†ôÅö¡DŸµ>òXAॹö3Ü¢˜lZGýh$2j ¨‰aæåÏØ\Ðݨ(jfNY¾¨tÆ +7ƒ4^ +æàÙSa¹Ð,ìÆ“,ÂZãD-Å‹Wð‹µ‚0O/ë´sïPâÒBf »aÆ—<˜hÔ}“×]=U¹†H NÚ[ûV•ðÏ)ÈãŽÞ.ÅÛGBäd8§#ní+”B+F·†E‘žjCUbR +  {é4…å̉dñê@‚âÛô„W¶áã´5$ÊÛ¨‰˜EþþNøƒÚEL¨M…”åÈWTȯ|í®¨ñÁ{JÜtÎ$‰K£V”·6£``0jЎД£XÃÞ°¯!Rª@íSby5b&·A´!޼ܙrä;è /ë£$ ãOHzÒý×°ÖÇÄ A R€—j¢ŠäÖXQŒ]ÇXÜñJŽÆ¿™åôWÖhßj€u3-Ô-¤: +²†h”èÛTã +’¾F°_ìøªt¬\L`´™ '—7üBŽ„Ñ\{݇£pº×Á ;B%·0ŽàÍe' ‹íT3ñ-ïdæ³Êº„ÀQÒGÈ‘ ßÔŸ ]" ¦Lì–ΘÀÎêBFïQèKz¸èudÉkš€ñª8ùAFr¨6"=`!ñeãQp²` +²]´±PòµjV9Ê–`ýcØ}¯š Pí<ÉäÙÀ`²,Q£UÁ01b[˜\ž| –C! Ÿ5ÈÀ¸u½›¼è“Q¦áŽëT†ƒ¬lµèj6<¹?Ö…“&ÈJð¼n(QärœŽà%¯ëÇEŽqÚ¹²Xyêåˆež4ÁGóøÚY¹øø]@ FÚÎâHW¯¦¢k–žÀëIìGi.A Êe½ÀdCýbFwYÈÙ])RZ} lÄ`ï!ÅvvU¼ÉîräbÖ%ÂFyÐWÀí4“,kÇÉ 6œ’unÀ4$OsUóU8Ñ]B’1ög©5±ÄËe*ý9(2­‰€¥:µL <1¢W"|5‹šE¹ì™Ç§çƘñÁ +7t3Hƒ©o0¹¼Ô ¢8üqP7a‡0Y—Lë Áî{H‡<`ki`1m5‹ÃV»[Å×,É„£Íd€‡¹ƒ#Ó׌lââØâo©´<ÌÐ02ø6Å¥È=csÔ‡±oÆuƒÉm²j2à1e16!\•1Dfo”¯ýZ˜… ª$Ïa(ïTŒé4îí %±‚ä² ‘qŠE—ªÑ«dgµcqˆ›å ¯J7ªbŽWDU…Ï¡H깱͕n¬7®7žIÖKó^TPMïÞã ðñ/zq1pn·Xݬa>ˆ-3¢ +ªÃãÖ°B!°zÝçänx=Èé!ø”©ú˜êõK´p›iâ°xE±Ìš2ƒ£a ?±/…ƒPü$a8Ÿ†Ü‹Ù "UQ’i‘¸ÂP•pî‡sÁ0Àÿ˜ùƒÂC—:\@OÞ w†v² +Âë?lšáp¬\Ä.N¼ÈàðRƒ…ÆÇõ½r*²qTT‹¨,ËÿñyV _áÌú¥)2s© c ÙÉ‚WÔj£Vfr5s ƒ&aZci}/Ú®^÷vÐo:¥YCÁa«¬{<5:þØû¢ª8ƒ[”ˆ¡jõ¡QƳÖ'ÝÌí„Ë_º·,Ë{áeHcà¶SÈEÛyÇ.khi/p¤!8›:d–5y ±›‡êª +R®xD®#D®ROFJ:Bà7}ì}z¿ßUUèÈ·Q„q×üŒ"d8™¥C!ëˆÄŽGj„4p—gÀXðöY;.Ú<>³|ŠW+†És•žO¹#XÚ²a +ÔqÑPC<–hŒXîˆÍQäPܪF³æÚ-qÕžw×Ôßs&‘_לA»`yE4Í8”$³¤v¥`|>ÇÞZ·Ír±° Q&Ä ChHøEXG̹ïðr.o-çæŠ×"È7™ƒ æ‹j†¨&—Ë™.&¦}1‰CSÚHž~Ü!ý>®kÆchö–¯£J04ªÔ¹Ú•ÅTCÁ&]7ŠA¦a0¿:ÓMq&ä¦GTžßUöÚ›ŒÛ'~ôДnÂ%é[n?{’vìfuÏÆÞ]DRàSЊÝEìd¬hÓ5 +ìîÒ° + óP¦Í2gÙ— kç‰a䘧3¿pæ­ˆIg€%ÚËxW\G[iÃR\òʪ?KݲÜcØ=ï"*¨¢ÈÀ:nûFšõ¥±²(«Lû)r*v,Œ»†é‘ÁsL4y³0O¿Y-‰o•ͼm3w;s*Í¢7°ì /)H+¾Ì$x)u&f†p«Ølxl¶–„p¬õ „Ô,D™MT ☊z‡T©.JØõ††¤pd¸ªC‰—çHHøB퀻ÇÑûqVWéE%"H”Ö^™ íª{¯‰.Z 4€ eƒlv;³¸‚ŒVø(„LĆIH uˆà°Þ@6„6Щ1JîgZ`Á–$ŒP@PðX†¬ ^ Ê’Q>îEዤQm7€c|ÕV){(lT¼³ê<Ùb/zÌÅø¬ø å2>Ö°´×<þ¨¬Û…:‘¿0ÎO¿ÕÛNˆUÔ mÔÀØPè+È2 +w$g)D¬‹F‚Ä¢"'Z%¶ |kW‚U½Óލ·Ây;ÒE§ Pa̸eF¾Û9 9nÔ­€¼$R 3À~¸a¤8¼_äÁìÒYgIF·©ú8Òć›Ûuµ¤Ô6œÚæå4D@æ1ì»ðÍ®bªÊö,ð*Ôsz’å*tÜÁ$ì)Õ—¢ˆ…Á°äÉÄÚf ¯†˜>^-+×k*+ç§ó½kg ñ ½È0yJ—<Óåc @Ø¥“ +rÛf¯óè˜ !Û â˜`¯åA—ðv`+Ú†IÖíÀ„ˆlA8†¯¾¯Ûøéø=iÄì®Áè4þý–î+ÀU‰àJ,—Óô¹@çh–%3Å÷–Õ Ç¿© “ˆIÒ³Ì[‰˜Ý TÕúkr­j3‘?gWçoÔkR{Õm¤˜ÆÖ%5êÜT{([É?ýT¨/ÎTÉ3¢D‘¿.²í.8/Ù\É[fóYO–%;’,u$Yª{ƺÎþ!^¬âîـͿí´\cÙ3Q{ƒLj=8‘‰Äg³§ xJ±|óäÊmLô¼yYS Âåw•™ÇÍ Æ‚;LFd³—vŠ™jkä¤LqÂ÷.¾ˆj=ˆ¤Å/bˆÉ,Ý€ÖHÍya0ÛJÂ"kŠ“žÊŒ-O‹¿n=ZUªNSrôËç= éº/3êWP™UE8d¸˜¡îÖÃ¹Ó +§¬æÛºï ÔðŒ±JzvSÝ.7s€³@ ¨9»»w•I'ì:`#òÙôK¼ëqv‹W¨ûAq}‘>:ëaƵrØDøo6ÖZõñ+«eÕáûˆµ•CÑX—Áëâ¨ÉŽJô’þLü è6;Ããu—ðïxo•án³¨3Ø•7‘ËÉ]díîЇ^Ôî³ý¤øÒKM@*ô¦þka“ä6a/ &QQ®ìàÄõ^Åzmjë„ôãAê%g»-yÆ(h“Èäðç% £Â¼v»7žÒÃhì5Ø~¬U¥±8r6®ÅnkG¥8ŠÛv#¶Á]¹˜{›T­Ep"{%)‡ËŠ~Ò\磺-7®¸Dµ…D¤º#Á8Q»ËŽ.(ö¶Í£5ü‡«x`õ%ž|7C¥õ´yĹÝÓ0LÎÊTE3˜FJû@3»#•”åh¶½yKê*ÓÂÇ„Q‡W3}B;ú`póyÍ-wd*•}(àŽáê‰Ñ|C µFÏ>8%b,n @Ïú}b¹ƒmÅs”Oj‰B3µ]Нē¾¹ø`ÏlÞUX‡èèŠ;DÌ G•R›Íç­Öf—x³0«êßó™ ÒÂ’©? íz3©mÉ8ÙfèðCªÙ +@ÇçÁF7›=,7’Š~«Ž°xcÒŒ© +«æh–3¤h3vµH+jC¡iH–Ç*ngÝ–Òš^à ÚMÐlëÔt5䕤Åã\6/*¿1ý{c +²‚+4²¹¸7Èâ/¶‚J‘ ‡Þ É‘Fm@DiüÞÖ®y»¹^|lö, íôþÈÛ”õn]¸åE´è8îƒg#‚ +êw;ÒÖsn<£(@°=è®5K©6ÔùlSLwË6Œˆ–9}°$ÕkáÊÆŽ]lû4·a o†bt)„E­¶ËŽ*®š6h8Ü·\åGç¨;ˆ¡ ø^x„¹½Ÿžmª)a°EÐÅ0·Y¥•ÚFÑéé0°ƒGs¿lËÀ¡ZG´­Ôß­5sȰL¦Lh¾÷Ó@¾ã Nü_¿L©'|)kf@(…VWÅ}yÌ2yT"ðà)˜{eºã˜ ¡ov¯Y.Ô OQR7Ñüå&V*B„uÀ6§¼“¢wýˆøPµkÌ’™aMj6˜®X?×Xn¿PðPP|Ÿ“€‘äD ÛÍ¡g¢ŒlˆpÞäw¡ñ"J°bJ°v¥¶³ë‚@§1Ô3¯šøúïeâ‡ÛP¹4+‰„ЫÅ}ñXŒI² NNÏnÂ2±¿þ8ÞL¸’Ö~¬©énzŽ ¼Ð™5ÃcJdÆ/TÑáŽÆká"ñ¶dv +GæòFÑ‹ 5¡êëv{–áÌ n«d( E:û¤¯¦dT¤#jº¬`ò…ˆ¬“!*·K Ó=)mŸš†n$/Z9¢H`¶‘„T@¦0ø€Z>-ãtXy4LQiVˆ²œ dñx#§ªæ±Ä âAV¶p+Û—½²½L^¬n"± ™ÉÍQ3–,(ø¶Í¾íJÐô£Û+ö›Ú‹cTZz$Æé&ƹL5Ú]5Avf2ðî1„>¬æ5éÍÉSÌ9>§v3ƒVâЙ7¹´™{‹c“ÈñЉ;™ +ØÃ’¸ü8³Õb™P´%·;yìnâwbX€Œg+©‡Ìî®4ÐÊö/¶¤¥Èh¶z«äeéαÂâ#‹Î\&Ü@ûÈÀ%Ûô +@&"‘±¨‹_4í Ä‹™ÜËm¬½Ä¸¢>~Ùùç$ŠW>Û´Ý<()B¢ìÝ´³ ñŠÎj›‹sê:AºáDe¼Ò$R| ¡Ö¯ƒò¸ÓÂR1,âëd8ݺ°R4P¦Â¾jÑb¥k—ybÀŽ^d®ä‘òS +Àß0Ë1ßÛÅK{q¤"÷ù  *¡ 5Ѭˆˆ}Ð<ƒYÀÓ‹8±G ‹„e€å& h¨e\›R!Èq5¸h—´nh­©³Ñx©¥RÐ~ÓÐn’°A,E9oÞ€:¡C†Ék^ùªJØ«és”ëAÃ%B%¨–È‚®«Ì¦‡!¦ZÙ,ý®û°© ;#BúëŠ\|h`È©^òB»†ßù áe}M“XµËÝ +â›Ô¼ñt) m ´c0Di˜L‹¥<ù#î]]UÔnÆç`ËŸ8/U1ÕÝÓJï Ó©B¥¬ÕƼŠLf»i攇úg’W`'ÍœÐ7‘)ù ¨¡\Ó_êÉ6sô0öï"ˆbdU‘­n.*ˆfqѾjz«dÅú€dq¡z¬5‘ºÄ)lj¢šDæÕÄ1¹’„òTír|$Í£üÜ$ªÐo‰…­ÅdAÉ_ŠB¨VE"~Käj åÄ +¸™*T•lºä€u^Jeá/:#©âÑÀ´’ìi€…]yl~©Ÿ–M ×¹¹n øN»WxÎëÈ•°kàP7Œ¹mG ‘Ò°YîÞ¾Æq @—à¤0Fî!K`»%ö­úÙf";ŠØÛ´‘¬ÿ~¸üøŒFA¸ªßE3]3l§å~Ánñ©.Q6'ïVÞ +ò5T»sïå^ʯuYÆÒ&㛤"œ¾ëuç +æ– &?º«Î®Å°Œ>YǼ§@³1žÅvÉÓí’¯;_¦j¤mæN°dUº&½4žÔA¨ÆÛÌÀ•“ŸM:_ •´ˆw6£Îo [gûÊ0 ØT]NŸÝjO€ +G×fT qÀGã’ñŒ£ŽEἃKÓYN68†ˆ^eh½´-Á’éPén0 +§ Ï[~Ã]Ñš"è¤Ûž…*ƒBXb;,ÑG–©qŠÔPr…N#‡TËXâàá–µJMœ…Úì¥×ÏXYé1Üë8º¿åªNÜ·, ojÊ6W3¦“;v.$KÎÒ’qqXwc«¸K?î¡â Ë°½›¡t7lQ¬Žuí€ÀÁרw2¢Çˆc%ì¾èAËÎv,á 1D[pŒù£tМ u?i¸Tâ0M;±Pú•שªðráöµi°U›lW vÊ€ÜÅ„ñ—ªFjdËךã©QMšy·d@÷ Rå:`ýÏ×m÷w}±ðÀVÏVQêF6œ%6µ¥`Í¡ªnh@åÐN*»èl׿Ï)™1‡{º~äR—ÜP‚=4ºèdd%•”{¬¹<Ø7.–i¹²FÈ_U,ɱ¨Ú£Qª–àXúîCuÔ7•a:ò2Ñ»0öÀíkis]ç{ðÜf~4T‰›d£<¨ÊºNªBA½ÖDO|Vª”€yÜuæÀœNÄ{)‰š#Æ0&.ÉÔ;>gSÛHž’éNyÀÌé!³R»Ád·x-§n8ÏEC:BWå‹·ðøæPmÙ!¬ªx ¦I³dÝðŽíiŠ.£þY(d®»Dþôø8äÒA*¤&®Ê™, F€¼ •c.%åT Qœ ´Å€­!X%€ÔuÑ¢’§лËì@ŠOBÄÜel/Ù¢£F^7¯²ªUñÛÅÐìIàl· ‘0y])á^®ðé‘C Qhû¬TY³Y¶9¢™Ôðl +p〭\²§œ,ÚNï€"ÏÑËJ"‚ǨݙrCx®˜5¡HñWA‘³Ü¢séngŒŠ 6ÿ- ðº-Õ²UcØX’yÈ¥lw¸ØQµ/ô"^Ë=ËgÁ¶ +eÛeÞÎ×H=r™_4QƒìÃ*¦º­9“|hš«bQ>]wúzª>™š7pžéù {×ç;9¾ÜA¾â„;:»‡k0Ù€˜½‰A×oùΚ-#ÕØCC0MuïõÂ~PÈ·|#$°!~cq#:)ç/UY·#æ Û +YÒXT ‡æ]'‘uÝ0\D6ÃyOv²/ìRómMëSF"دlCœ]—Åt‡âØa4™ +Ι:› š·CtÞÌÀ\L³ RëòXEÉMA?^Xä'kx…¡EÁ3ÙóáéºD3y¼ö1ÀqÎ+¯Ë:¯zÑí»–U{(6J¨üŒ¬âˆj•'ôq•¬o¶_ÚôyÓÒÐÊ-HüÊ5Ð(|B x*„ÂÉo ßm!!RHk›Ú°#6$WD¤BÃ4¥0”r‡ëH¤Ã`%˜['¶Mp²ÇÞÛ2 Ùº*â!Æ®ŽÜÈÃ[­#AdáÚ²•ž<åÊo§2ƒn +n‰`÷Ýñ‘f"MIGE ûï*^wLï¶Þ•ìªË̦ðÿ×ÝyÐÅ[Û­ûÀ}?<ƒb A"Ž5«à¢®…èìS“qU%wOe·8ÝÉ·³.wŠDÿ!‡ùØób ^1O†B³Ï"¡Í7º3.óå¦Hª/µ…CÚ•|€8ºÞ²^\,™ÝtÙB9¸ë?”~‡mÄJ².ª˜ËÌTï—ÒþhÞ9K²ÑBÔh²ûúuÜ‘ŒWФ&k±Ã._& Ø%º.¸>j¯ (Mêw’t<¼B½‚gd¯±ôÈÍôÜ‘x¸¿CdFK.)Ãè„kÔ“Ü$HlÒºX+Q†”Äû¦ˆ‹—XÛ'‘¨þ¯Äª…K`Ê" E×xH¬Ÿ$Å1{unu›Âîùoc›p»[Q†ýÛñ‰t‰Ñòft7qÊtå…pžky"S$r‘H¿Î¿œ ´¶bLyÕªîãv†*t²žIU,w„ khŒÞ³“bžb˜ƒ½%”e¦bWàtSt 8'<2CÜ.dÁþŠÞÚpÃõñe˜ØKÞ¢X“ñøš:XTØÑŠvs—ÔëHCÄeÓóåN¢s5e+²€ŸÎzƒ“p¦Õ YŽË\‹Xé¬+g­î«v<% +2ùfë}e•xí\b€ õ©á[Ø©]ÛÔìËýtx¹Ì¯uWHÐ `ˆÌíhÞ3ŠxÀ4%ûÑo!:cöJ7]§€9JK'ã±'üÖ9ÁM:ÐòºcêòCpÂroõi^æ¥òÏÊ&bÐx£«™$ÄÉîO–ûÉæ»Ü†xLæUæ>ž^õ3¬É@…ÖPÃüÊZ_P¯äya3´{©Ô© ›Õ>Ùq©#aq¼QëgD »ª£yâÍ®Œ=Ž àháÛ^Ý{Î¥½Çr_¶ç˜~>^{«®·$¸oÜ'ÍVG$ÏjrôßÇšBhT¼P™Ä!$ÏôK͉û7ÓdØó±­„ +™·9\B$, »§2lÚqÕ`w—Á +øn4lD_U™ÜÈÄûNñ³7.r[RÝîrÑaÿP¿Ý AÙâA',”Óô4M–JÖ;³œ+Tî¼}9µh Çúx˜v¶h*—5ö¸¨´Xê|X_ö5ÔÌ Bw÷Ü·SžlC ޤÍ-—4ᱩˆ+@e6$È3Ô˜j`™•;eP5°“±’-rÌ]4'x N3Š#X A½Úýd>"àY5*Ë« ÛaÄWÒBKD‘úcŸì'óoƒd% ôè£Á®IZ}™A9da·îŒTz·l> ϵtZª°°æ­Ý’Ew%jx±3™­¡_Èe\gµY#ºg‚`‡@°7oâ.S@,{Õ —»¦ÏÃ*?œ:Óˆ›´?€±Ž.P¹;ù˜m§$‰óÎÒË#;ì«F€ÒV³è¢gxñä°¸J2P:»`¢Y‘Í·HtN %Ò7,íl°Q˜ÜLD/P ˜­ŠÄ<úº·jkéºìÊ¢œQG+ë¿:˜ +¿U­z "·7ü¥J:ÈÕ‡·,Û¯^Ù^jª™ðBSÝä½s5„ãHÃÌeWñÊ¢tðÀ>#Áƒ}¾"#8ÆrÇàdòšˆˆP6ß)vìÄ?LCwÉÐ]ÙrY}ÐøEѾ <ãeܲº7ã«òŒÕªÏÖÌ¥Ævoä*X¬™@Šæ‹‚¥w±w‡8]†éa…*1+§Â1‡Ëe ] +g_wá®hÁ£ÂêEŸ‹ô_/·ú"ÏùAâ#=âg¿…Ë©Zân‹ÂÙí[S9ÕPž‰e`€dAã䋪摞éj˜ 6©‡9$»k›‡‡än‰sBë­¹M3D`Ç#ñõîù*€êot•w´a +ñÆjþÃæòU}ˆwnpN.%Áî‹Ô+ ¹QïT]WN_– áùØûððÉ.f&:ºŸ¹-¥ÂÕÕÊfùÝM‘M&˜DÛÎÏYÕ!’ „kvbWã—pÆ÷˜~*䊧Ëff|½êRJ8Ô¶ÐÁþ0^.qk’Úû¨#&³gÌ­ºÖªä9‹ð »Ì­©:6þjR(ø(¬ël.œÜÞ%»cʵ,w¤< ØÊf•äXG/ß>}›Y7§•ÍÀô ed>ŸL®l€¹¦z:â0c‰ëGÛf²q.›Âš‘;ÞãfÑ€§¡„í¥ê'Ѓ(~¾Ê¥.›1ùçá-ó~–~5„1ã« äp?TÂq E[UЍXË;’Z¢8¥É[¢f è+#àêkÛ •X‰¬î¿N@•"S‡ú¢ }›WNÆÒ%dHA÷PH 9‚1Õ_œ…˜ñ´é8‰ºEÒ¬†w¬ó¤ágiÝ»e{·T±#’–51aLU£OE|Ér‰Ø™Óö¸N(è&Þ ìhõäŠÏ“/j`8q›i}cpa·|m6Ææ$ëµ½¼uF·‚º¬ ¦{G«Y›râ ís"«T²GH‡ßÕüj*ª¦Vˆëê2µÂóËÇÚyØÉ%ù:¡3Ê$íàξU„!܆*X;eñ®Ýì¾[ËfÁ&ÛVOÑ힢Ó-YÅÔÍÀ–÷ •DÒ÷L·P¡$~âJð‘V? +j?ÛÅðûéœjŒÆYÅv1À†(Ôö¸‘¯n¨ª~‘+|vuŸ[L·OVò+ûÎÅ-‹&Ó´5[Æ?Ú·ý®ÛDø…TñXnp+®a2ŽÎbŒ•ï:‹€“&Ì÷ +TAD²eˆ; +z·f‡†º¬¡ö#r˜”ÔlzÊy?å­ôȇÞÉfŒçW‹K§<šàªcê°€?´L«2š½ mUgZ¤î1Ñ]áDÚAJhv”$¼ÇÜ—Ú £D¨ªpaʵ&_; •r¬ê+€`;´8u²€ðÊâ‚a Oƒ³îÂVÆïX¯ Ø>‚Ôñ.#¿.γbíW¯< —HÂPÉÖ{b”¸œl©P/.€dh>?‹â®À\&ΤNV‘”Ñì"ª…èbMbˆx^=~3x²“c¹§ÒB¼ 3/É{ö(ZÆ­Ô›é<¼ùs{1,…(y!žX¯XeZ +“PË «p¿¦ëukV~°À õ‚šG!ù,÷kÖ®„å¼V×hÑT}]Ôw¬fÄR”ðz—*´¨ \Jì”èÐ&ŸÈ‚Ô‘×]B:éråA·;ŽÞ¿fûöžØ­ýXå5 b?Ê”©Ç’‘8 Ž+Ÿ‰àgX¯•3Ÿ”'{H"€c¥ž»bZ6¤t ÈB´V–*1ŠB,9T“V—f±Ó£¦B6uœ<ÇóçMc³p1ö]=>R˜ ˆ,f!«*—[1IÄgÓq½€0\¨DÀÒh®¼$ ñc!hK¬Ì»øÉ—óå]+Åô`$¹Ê%§ÁFyÉ„ïÝKaÊ:@Ã+~ˆ“ V=v>“ZÌ!ò(þœ™¯¸Mݹo¬KÀï­ìŠ6hƧ¹tI«=ïJ±ÇjXyÞ¡‘«gËž÷¥öL,>›5—ÓÂMn2ÚpßCйÌÄ:©Œs_Hü9'ä-ÛÕáš4»A”Lp1±õî1FÝH¦3„³6Z|ºÏ‰‘Î[ƒív©qnQù={~­ëäÿQŸtTvªâ+bT/nœºIHé`NÏÞ0„Ño ¾îÖbô¬@9D.aI²'‰RÑç¸AàFcQ§d„ØÓZ¹» +Ééß.+;TEsÓåÞÝlL];örœé˜^‰Œ`jrZ½c?âJ?Úr€‡uG?FNƒú5¹Mäùü‡¸ÓÆ"hI¯&<{¦yC¸{†6ÍÉxÈÜ }àH£»wþ…Ãê5 +K‰aâ8[šâ‰=ù’ª º$Äœ-E¨Ü#84zivpØcŠýáÓíÖ *;‰uàXç4 ÊÔt]¯Lš +‘A–‡4]¥ÒL&°›s½ÏO—ÃLÕ*ðâˆlõ´Ø¹ +3µD¾Fµ®ˆ°(X*d„E•©ƒBîhs’h=¦'ƒB㑜yÌ$4š'‰äH |Í)îò慽ͽ³CK¯›¿šÔž$M*†S‘½{tßÜØK/©š›$áÉ×»Ýò†-Ü ¾âÕaËèäWæ±µÐÏî:Ù)Ïlêý*Ù–Ö-Á_S=}ËüߟG ð€³«*]]p(?´PäQ Éjˆ,’2†co!÷â»í{È›õµ¨%s8ÄËÙs–pM ¶üd|é᣻Êðn:¤u`33¬~P‰ó¡…´ñWšŠeHM‹Ø¿åÍÊOvæU¯¸\¯˜éI60pIÀ$Ñëfn.<ÉpÂrŸqТnb!Y™¿jU¡rñ ²Nö]±]üÇœ©¥9ôÃà-¦cJp˜üBà›dáãTrøþ!”Œ› À&Ü+‹É:ô¼ó#‰•Šº2Ń„³04G*&ÛŤÈ(áØž‡¾ô>¤‹˜tó3"}§$ÈÐÕ#ª9æDy¨ \zë7}ã»ÖUÍÓPA]eC"¥¢œ‡ê#‘p"À) — ÍM"ªTžM+"ñŸfΤcÃ’m—s`–'ñ7„¤7õûE˜o!è°{¢S÷•twézÖ¬¥ž5c+¹½ {Æ‘Ôül-;Á¡ø}€MèÑ(á&2°Qíl"ààEÛœ¨s¹õÀóóçµZåíÍ=® +z³z±Vi +/7ÐVz ¿ Š€´ÍJB‚ÁïØ±|ìUzyÕ]$ØõÄ=^ŒÍŸbØ@õ¦aØñ2µik¤­-eßÌ&œ“àG +:ò‹ù&/Za²Úd’6û1‰¥”~ÝmÛo!) P‚)¾ºGT ŠbºO鯉FúÄÅ¥¯¤uIl/Ý/{õb‘àN¡•jŠD }Ȇ&qpíÇ&ÂË|´¤ B«±»o¹ðVÝeŒñJYÔöü}<.°ßyšžjqÔšˆ bV ¤K„Z$qPèÁþ ˜fã,i)açÒÉúô’Ä äAM¸KöKàJw’†Ž2šd;[Ç#ì¤G#U´’ãˆÄ„#ò×µ3V¡jxB@æÝ$Úc +‰eàRúîê°³ˆ Öñ"ðí|‚ú¨l‘»Fi¼2W·‚W!B¹`{G¸JÅ +þ.´¨Ã ,鸊}ƒ×¶ YŽËUWˆC¤hh{ç²IEv9–JaAµªõ°{Õ¿Nÿ8Ü +é™Èµôêj¸­®îUس$¼ðµ˜®‚lrJ‰â8ùc A PC] ÐÛ¦®dODŒ¹#>®ýšèdwKÌǬy,± „ˆ(/QŽP=äV};ê8eñ2+—„”ăgHF³%¸å–)àt«>jYFà™Ü³]Zó€~ösß<Ùd9 /Ä= +íºñ¬ÅÑÃåÖ':¥Ø)Xƒ"óÊÆÕäxÁЂHqä×]øÆþVèd’åJâJR”ËÏ,t%ÍÍ:X*»Ž0VÌMëæÁ”ž_è ´8\·ÿYœ/ÆÑ•ŒÊ¡àÄzä[U5ë|ÿ9D…z +â팃ÚlÙošµäè7ÍÐëßçC„Š×€Ë- úbÕÚ¸It±_–%¡|àŠÐwãÂùûsw#P.™Åæ´UYŠ®€ {ÙUAeD­&‘ïFïEÕ˜AµÚ„¸çC²>1Œ~A‚ß&êêMǧ%…“#ª'ÊÇo Ÿ¤õ…Ê4m@8yÚ•|~&ïbB"eÓ+W€qÞ„)'XDšàØçqÌ©¸}$¼,nC• #éN]F®ø7•j)úä÷°~庮fÆ;#E  ˜‡_+"éb©#}¸N¼RZ/¡P°è%E…zljÊÙ–ç'éα³6óàdkd’È»zùµ.~dG‡š¬MÁÏAÍ×I4‡CôÚ™n§“8ÔÄk=–oĽ&”¤V&ω +;!<;d+“ ” WÀ³ffš·‰è«74’>eX™ÊWO¸ì·¢ZÕ±>Q…SÒÈÐü–©ôLY“¹nD{Ð{ðtÍôN²òªÄÈ8ÛÙÝç Ÿ Â~]n;l¶ÿc毂’à»å=«#X©‡)Χse“`çSÌ&vÞeîÁ¢îì“¥«`¡ÝéXuê"âÒÉÀü¸eUðÒu’«R½7ÕÅ+TŽª¤›Qº½ÑRO~Õ =÷çê†ÒD/‰c¹g«ÙçgÐÖBK¸éîœÔà‹üPBeiÈO¸©aSµ?òÈ3Z…¾^e¸]…(nˆa«¸Ùâ£Ëö ® föA¢©{¥zŒü:) D³\ÐnŒv“)‹Â +Õpjr°É¯@Q‘Ç¢he»¶ãïù·¾Ó[ªQa“*âÅB•{R€}ªîΖq²«jÿÜN^¬‡ËR’mÎá¥Â¢ÙµpîOoØ×zâ²ÎAÕ³kôÅwŽN]韸³ç¸Lù¯%@Â:KÿTj,ta7ìÓ•P{ã«Þž®|Dßëçw©I\M¾ùLËòjºÙ×Ú M£®ðÇ\(‰ +bÀˆ ÃA¤Ïbò…z¨Û¨²nTÙ²w­ø%XM ¬Œ'¾Ûï1àºâÙŠSÚ®þoî-ÛÔÏø¦·ö¤”Ü›Ã.èaÒ¥ݪ©›;N%8»<.1œ6!áÎívxèT˜n}ÚÅO†Š5´PiP*¬M‡ ³éósî?9œºC{„†Ý[„A»9šºðpÝ'’ª  fMF‡s‹y(œ’‰šjèCÌðšá óu«øâKbaÈEvÌ(_Ûî$«ÁÌgöƒ®xO)Äb?ŸS,b…pc¢¬RëëPaÂA¤6!`š·5Ž/lP0Ð0ÖJ´éh#NP§kÝ#’I„2ý×Üó(æ1‰^>ÖêB[6µ] ÚÞåAa¸ªl1ÞèÊPàÿXQ$ˆ4„,—}ÓôÝê]¹·%z%kuàF-&›.Nß"Á~îò¹›AUºöí­È*ÁeìæÇcÚË<ÞœŠ/¤Ë$Úè7MªRÖß#óè‘åžÚtÊGlËD:Ÿ­:%(ÜS…47;W;J)2I¸µ„€÷¬‚C¼óÚ.p5Huc·Wæí.iÌ0« ÌÔL¹óÏù< r ]­0*Ú,«¹”ަ£d‡t°%œ¹v÷–`@˜lzô Q¾×4Œâ[ÓÝ €ÀQPÉj'×cटæÎ¼;„ƒ‘qû¹”Ž‚ãW| —ù ѳ…å¦(ÐêŠpð×ÑbD åšÕ:S|s Ÿ¨YÒôüœÝ‰4õCCÁÂæÈ–â p&MiG‹Ê£˜øz¹·^³e’U“%—Æ´iìã›î–ûQŽ$&¯F[Ã)$„ þûŸ"u(Á¥†ªÃíà +:ÉÊvÙ¼b¯JhéÖÁ –½aßõ ØêKè‰- !·¢Ú­p~¸fà#îˆò‡lѦlÉ8ß§ ÙoœÈGŸJ.cSF ЮŸø‹ò4W¥§ifQtîjÒ9Y†Jw3áW¡M³g¤SkGÖyÿ@ó=›ÛCŠ÷¨Ÿ +ìóËõ)§= »›]”:r Y@ñºÐnçxƒ„Ð7¨ÏS¢—Œ¯½=õâ+l¹B«½ƒÞ<OÛ´Ž•&z`Ü@_E0AÈQÏ5ç[…Å’Ì/ì6|œ*4ˆZy°b¯#%ñNß­cd˜1]&NRÈîT\!,µT9ÜD¾Šîð¢+î†þUÓv!ÿB†ÚÃivQÆCr„ؾÀÝ݃ÂîÇ9o,aá8D>Š'¼Þ>‡Ø¤âÍÊ*FŒû¥§š™ÅLv6M9Çf§¡¡¨zµMI&µ)Ž5,߉n~þËܼ»øâŽÈM70U®´åjvgs¶ø…-×ö±þÙ¼îá-<"[‚B3µcߥ“ŠÂAhR| ‡,§ÀmM¢Æðછ0( ԒݪUô9È/q uš²(Õì¸ê3Óì•îß#«‰!bX/DG­áø¢öAYéBކEIo]~»º«†èº”Ö>ÙÀÉθR©}¦á¹@‡ÌG¡UJÌÈS˜ù•A§ºµ·|œÛp$2€å1*Ý€¤§åجmZgëõ •dŠ‘<œÉ}/÷踗h¨¦iªñqÃ-ŽO +ˆéŽ9T ”ÕRÊwظA]’#!ºŠCÜàê[©ÂX“Ýü°ðbE² ‘ݶ‹ˆŠÐ½aoØùcŠÉØK¦Šw²auÓ-–쫽Á"N1Ž è¾‘€rY¼Q’’W%Iias; òüñ÷*ƨ7—cp«]*¿ÂOCŽêâCG˜‡Ùn÷w!q»g"\¥^ e>Îk‹Hå$Jˆš þ!˜9DtØBTP$òÞw ïÝÿD’Äøºn]ñNLX,Še øü—°7^EI̦tðBÁj‚½þ¡„BôA7N¬c¸ìÚyÔ+íS†575§UD +ŒA2ôO¹Û£“[ƒ$p±ÑYl »ÓUQê;‚¾MqYN’P@KŠUC¦®]í¤Õ¨Ô¶Ø|]&š%èëÆFíñNÆ ÙÙÝ6dvÕ[d[…’"«A÷~5vteÇ9p5ŠCÃ8Ï8Elˆ‹G/>±«ºþ €}ÁWd2ì1¨bËÞÞ.Í¢>RêƒéŒ +g%#@î™ø+1èÅÜòº£ÓGô„A‹i©YËÍ­]5ñ§Í4bLÂlŒEr©ÿ`¡C§–š,å¼]êZ¨ïñ7…ýª5„ÏHµ¦@kgÚUºÛU„Ï£’Ù4¼ÛC>÷i1 J‹ª~ÅáˆÞ¶+‹ªýÚH;—a;;»weC¸z3Ywº “LfTº;ÇmvHoaù•›þHÉx¨6;Û¯l,nŠÞj®_°yƒ‹äY.AtJÜI:Y¿V·ŠîÑþYDJÕ=»Ák'|ÆQO\²ê#ÊÖw†Iu|¤C$ªŸa¯'Ÿªî^tˆŠ|Pˆ’wñ"¬]ž¶âñºêGV²e`¥AºÍ ¥ÂFZÅŠïùâoæšuúÃw8MÙw øügzœ»mö!Çœ˜´µ‰Òmî¨'2:¦©æ¼n I»LT÷*»r:«{ºXaº‚Å‘øOL3‰Ê߈Úv›8r}ɯÇ7šèê!‘ËÌ‘:÷HÓt|up$`G¶olâQ²ö ¹H¹ºQuÃ<0Û#XævÙ×ÝAv^'Ü«™ñÜ¥LÆ$ßøîºÜÅ–š(ε3v†Ðå/ÒŠžªmÌÞÃk"0PAÔ3„.à "–ÝÆñÑê•áimp˜DNÊQy§þª(UBtFs“`1žÂÖod:àê»Ãòê \Åm‚öÞÝw˜XˆÈC×¼V·tV  ïqw­[ÕCÆzñHGU–}u`2ÏFÞ°zž°xúcãëb^y¥ü@¹95rÔy`/ÇÒŸÿ7¥¹û·û‹»Œr—ï³áK•hmÇ#ôÅ^;¨€Xfºb²·W0 0¤wƒ7&Éy.èéòfµÎ¤­²mgâO# +<Ò2TÓ¼Fá”þD6z`º®ñëtëpqŽë)°‰C2C¶¥½R¨;@Èòˆ°•d'ï:D¬@hÕK<øÛÕ©·ˆ¾w„ÍÕúI—ÔG/*.Ei·šyu×)]‡VSŒ7~‘Ǧ^mˆ£)UçÚÉöØ-NÝ.шÚï~'É76Ñ/™š2´M-J&q>wà”´ÿ2¾–¯ã2RZ ¹ áI.Ðu‘ÛÀµQW¿C±Jö51¯áv¦‘wgnÙ‡‡qŽYÌV¶ýb] âÂfÓv=‡vÓD…5Z[R™‘IV=Åh–Í‘E Ù±A&CؾÉlGâ +…pVS7Æ«ä2Û°ÍB‡]ÃüüϚǼ"¹b‘à/Ì‚sþVŠbÊ`ö¿8û¯VÇaV ³Á|; ¤o5ÕÐN`ÏÕënyÔÆGuäroÐ!åÒå®A´¬Ú±×3nÒ¥æçÖ_™ÎSO dÂgê½âÇg>HÙJ³&ÓRg•!×x2ä]­,-ø3­·¡3¨¨ÿÖ ÿVÙÐØ…ëÎ&²„ΓÙDXè¾. Ëõÿóu%I’ëÈõºCœ  ó°þGéuÝ+¼ÁÁ¬ÌˆT›µ¤ô"ƒIÀáþ¶<ô^¿<‘»Ýjì?áKÌ_bƒQ­·[Ê‘ÙÁéî /*6œ.h¯A.Nl;4¡3Áƒ´bs$ŸRÌ¡4ù«{Se×§l4Æ ¥€,Z?GÏáÌ~©Å)e‚F†Õù)¦È\ͪÞk )%Ø‹Ëæ#„;[-WHÅÕ$ZعÛÒà ¥­.¤Ë)í׋UxdiswµhÎ>^"«`²ØÁk=p³V¶½PÓY–+‹ïÉ­ú鸕Ô…®K ž“|Z@;ÃìÞáÞ‡±J¦­ä¨8'ñá¸T/«“¨ˆ}ðCsd‡Zï¬8Qvà*„úTe™ý|ßá!é?G䟴Š!ßç:FŠ”O ­y&›êªÃdË“gd kZ%%HPL +Ë-7˜€”%;tÆá̮֨-‰”o(,âLgOé#ð_+ˆõ鲨ÔÔA¥)û‡¥[ˆÂ‰« ¡›?>ŠÛö˜Rq%–Üɰ9å¤"[Y)5bïVC›ª¡©Z.ÂðqO HŸ_ªmނЮëÜf.¶Y¹„tìîs˜MUŠ‹»‰ÒÎ^¢œ³¼f:µ‚Ø%Âb‘â5N9¶C6 )ÒS@]y¢SzÕ"NP˜pÄHKÜue™y,ihçR$úà]Ciï–¥°…B7`ÂgpwOÞ¸xëØlõZ¡ÿ¿<’¡£`^R „v¡âî³üM °^nñÑ Â*YšNogtŠMéü:±5)2HÀõYT$D‚‰)hº=êU×¶óiPSó>¶ƒX’JqãP̰‚}xaçAEw’ÄdV¸HϾ[ìU¯QƒÆºðUÜI†¶á¼âüSPÍÅÒk¸s (ëIoö ¢b` T:«û‰·{–Øñúe䟼‚=ˆ>é„°²ÛóÛÖìÖüùK÷’?U¶¹¢©aˆ¿åA æeZ°-ÀGemp@[ìXnýG©­ªí„ 7À)‡lmÎ}—H9²l¶áµKa¦-ÍØ)6Ag6J˧t†Õ.n#\ÉW +Åäm…¦ÌätXÎkj¡6ÚÑ'‹" +¨„—LKÊVØñ“`”ôú9úžÞFèùÛpŽ·Û²òáý…I¾±1Ë}u ¢@ëJ¬|3OHãÛœÏUЫ ÃJ @2 ! U®ã¤ƒ×Ï儚¼+!ô~ùéôÐ<9Ó¶1ôÜÛÐïÑûÇ­úêÙå p¡ùk¹Y_}E9% +AÝ@/|,¨å ø±ÙvË–]i(—Qͧo ]d‹ü²a3ݰ±k2bLF°´ 5œ“<s9ß„>=’ëઠ+ÊWÿPììµÉ }Y•¼[VqQ ðvØZT_B-*³Qû €¿aå Þ0—¤¯ú¹¯Ø½¥'Ú@7Ý9 *1⳨؛žD~oñœ +Û¶8®[QŸmJia‹‚ HV#mýÆìñæ7‚!:A,ê¶ Ï$ 4+¨gÎj3Bv3šòõ@ƺïËXíg2–´”g¼Ä6úù6þD+sÒ§²éSÓôè?6íàÎeCe[µŽ£Àºàük“Û À9éfŸ=À³r+Û”d'"«~|ßËøÓ-ˆ)03ÞX°ŸŒÆÊTw–žƒ c!…&š +ú1f']µÛ³j-*Ižwše$ý~t¾»Ð®%¬ìH&ØuKo³qùtDÁëhÁý4~wM§º§`t¬ÌìÑí~d’ÒsÈÐQP»ÎÐb“› 3†àǽÓ2¶þ4AÎÀø¹7Í•e‰©q’)óјs;ùZ\Òùé©þË–î*°8Sd1¨œVXàrn90ˆïïÒëçtbM_ ɫ7_WZ,ôŽAÉ3Ÿd&ÖK[ÉgÍp×$l04ÁLÅû +DtýsK²H|g†P@c¯-„Ô¹ ÚMPºPõ4Aºª\[éSƒŠÄÉw”ßÝÙ]£l…Q,ò|’›³˜?f.úËqšFái!1ô¤Çw–ôíЖV’ä/àsLTË$IöºúiÚþÁÿÙô, ‚í­p½‘äªX1#hº¦µ¬=uîŠ:®©G[¸ûÿåvïü_¥!V`\¦s™.Ú`%Ñ\ГòZz‘0à¨#P‘y)Ë÷™†;hK¿‚ôJ<"Z ´®žØLÕÖ•$6hx1h°²UH(B®åÌ*ë A{¥(0,¹Y“ùMo®M-,Q–@¥ýº8AÖPݯT›Ù}‹@ÛÌ@dˆý‡ BÊë—|iøŒ÷ ŒÄSŒHöðÇ~¶E9 ˆ£X +˜÷ÕÐðe5Ò)v;%v{qÔ–±DŒJïû쨔ôWÑO% \$ ¼…Æ­¡dŒœ'QH8ÉdN(GZ¸ìñÇò3À=šŒ;ØÍÈÊ?7Ä< ÂÇ`–?H¢ظ‰æ¹°)ÝÁÕ–ˆþÔRÛè«DrMáh­M ‰à‘ï!9ÉEïd¡ˆ«B?Åc;¿Ålñçƒx(—ÛòÒUÝè³É0r +KA ¹Š"ì)ùY„4“/3–ßá“@j+weqcaØ'>!÷È¢9;€ß‘½‚¡F¦ A2ûV˜ðån~¹[ÀuTâšØý‹_—) UxH~HyÄ:À]/>hVì¡Ò¸Ÿ®Z:ÜÙ¿uór)Q2”ßÒË ©ïpK ³™SSV¡ôf(1wÝ/ÎUÃlOë€Ù¡S»Ê3˜_îÊB)ò3~„c5ÐC‚`#.†–4Ä X©àlmêO°‹}¬ƒ¤n–´ÆÏ[už»’öeÞ>úe=:>å²}äu;”¾ÕÄ_j¡»ß’oàý¿[¯ N(Y:Ã…Ö¬;Uاqñ~f“î†N°:HEǼë›tlB5°ÂÔ:_ö"7¥@añ‚dÎ +Õ%h¢ñÁ—§¶pþH¶!ÁAÌ@ÏA%_­ µw2%HqFZxÖjþ1‚›N»‡8…à"åUIÌp Bz¸Ý±þÙ"& j`ÎSW©è»ºmaJ)=|±çÃSko…øwIŒÓr¡Æ¸½}Œžà@¸»8mÛȬæ ó`2M«å–÷Ø–Cý´†Ð;¿<¼›%DÒ½N ñj1>üg‡–¦·>ÉŸçí“Ò"*æE„ÈîÊï+¾>â«äDFTN 1Î0X–¬¸€Å_W#–z˜Üžm ×âƒõ­]rf ÕK‰Þ^–mW¥A¿wϲ èºÕ×0@‹ÆñcÏh#oIÿ‡ÄÞë×/æRTHÔÖ€@Ïôô˜Íó¡£,E+l:l6¯OJX6H=|¢¶Z' f´¦P2=%T¨á{@MÐŽ[‹ÈL4Ä=’ÊÉ ™|>äz¨XSLÄî!4°xšE*Ñ Ì{<4óÔͦwêØÔýóϱu!¯@>ÔWD%lØŸ/4Zõ-’‰Î ½4`k0t̤!¡ƒö4 +9Ùë§Cë@Ç ‡DŸÐ„OÔ6µ»’`\xzZ Ï»FE¤Ä2àççê*FŒDD‚.Qê~4)É{mƒÅçó±NU1’å–ùÝl nS¿Xu]ÝоBø=šò­)Vµ—±“Ðöà~]lm[¾Û²•v –ÌÅ’Nš)Ô^’(D±iX2כּ;\Ý‘ˤfo€B=0LWÄxÞu¦µfÁ¡ÿX,˜-îÑ»‰F|‰:g»ÍÐÆÎÝ^¼I§M ²Oæa”‘á‹÷ +¥xß[¨Etìº$ÓnìLœÙ¼*rUêBw¢?ºªˆ-Ȩ–.j î®C¯Lû†‚ªxœÙ ›6ªü öV¦1šÌ¥õFFi…2Rv pä»)ø,¸ˆ–K´^Û¥×V¤yŽ»Y³$µ’ê%ö—ª€µuäa”²€‹{´ ¹ç¿J'¤È—àÙÖFœÑ®½ÕÒeÈ5º©ü‹ÂKÌ%eÿZv„¨t +öز¡N+rµšYN·÷3†C‚ïÀ³B'xVI}|0·4cMrAä|Äs^ÞS"Ðð{°]?†(bxÞ›šÙ¡£íŠôèW ò«¾b˜¾œ`NQ1æÎ»dW{Î_*•Z•l9â„ÊÈŒSjOÁŒ…äh!މæ¾6©êd[ËhpÞŽ„¾^$ù¬—–Ýv´$DØ*W&°†L„ Á:Àei œå|ÁrXÝ…qh¹½ß„m¥vŸÅc%FýsÉ6Ak¢­Ä¤Ê Þ e ,ž¨ÉHIµz>.P™µ•˜=¼«¿€Ÿ ‹£á”ÓñçÅbj•×v¥È3¼Ëãî¤H-/Ÿ2‰EÚÍÆ>ùǸ6RöBŒIWÞ,®h‡×YÓ „Z³?º`Ž™ÞÃô¡åÆèKž\¼Ææ1!—Ã|–Ãü\_hÝJý+°³tADœD€ì*ñƒ-§ð{ÿ$î2Æî^Â7B±Nu·²ŒçÈá¯T¦°Ë§…õ2ð«ÑžB!´Ák>‘Ò‚”Ÿœ&~w8 †p.KHÿ=a cž«NŠ&©Ùßy–ó½íX!h&€ Œ2Ü5 Ø’ÇQsýò„ZsÉz© +Q[zÂÉþ!ÂÈ©‘o œ¡I¸8"&Hµ>§C„€OZq&}xðKš5@ò¸fŸP€¶v¨¶¢—†K ÙO[Q‡‘9L™d{‹ ±Ò=ÄcbÓkžà +ª¾{ºWsÇò¿]NAƒßµEwøµMßMU a1.ÝvQ©oÇ—ñøu|K0]üå‚ìd˜"åø“Áµ)¥|%™Ô$A¡\œàê5´€E‹Fåª)#N"»ÍáϽåa‰Ÿz…ÚÀYiºÇ-N© ³SFFNPº€î=3úýÙ¡÷ãçO«8A)h¨¡XDöîñ¬‹ ‡U +`Õìn8"+—x›"ªSÒÞŠOíÂw ^Ùv²§K¶O­âá›Ñøß,"¦Bí.«a·:;çe*†õ0B¨”ÕXw‡Û­ÉÓïïíšXNÂ,ÆvP;HY+ŠwP«³W?YéYQŸ™ +1tí˪ô¢I³„7<1ifE:ƒ8­¡lS”£1²½]“°lòÒüT! ÔJœÑfaÛ58@9w²æŒ×g³ª{Þ}ξi]Š”pœªe,kD Ö¾ˆŠˆÙfR]…*›ÏBZFÂVßÇïê]°ûD6írªì›¨!w¼Bç—CP…"1˜\ß‚eÓ! T›_¼4pÉ`µZ>]¨zœÜÙ|×ÀS LéÑLw=Y…N¨­_Ð[¯—«=À6›Å8¸Z/¢¥·C-‹2=‚¿Üì%W›V‹¬ƒÕγ̕J6:Êò¹%Uõ_jB ¥[N3/4b…ŸÐØ@¼G +Á9LÅdcMÖÈ;Q"© d‡ÈkiÍ þ^Å .'ÞA¤¦`kþ”Μ°jjDƒ>MÂ-—ö=±#cÝ É +·Z?‚Ç-¶GÝõ„Ø¿þeü.æ{ZJVyx÷{¹˜µ¢€ÆhWÔô¼²Ç€P¡ªáyáò¬X—Pߢ‘ÖÇ+QÉb*åýUyYqضn!)•ð9Jû[HL9Qc½mâÊmCÓÎ'µk$¢n!ª “؃Ýj©¡íÖ8íî@ײ¾ãºtb剿@ŸÇÍËl·y$ +N›Béôã¿ +Θڵ®@}ÚÃÍ,Y&8AÓ%®³\ˆX„€L²{Ô0ŒëÇ«êz(S@d&G8Ñ"DÖ2ÏÈ‚:²mS!‡ë(߉Ó}¥w¾–lÏJ“ñ¯g1ÁÕ†f à'Ë{á"¹B•zËXp˺´ŽG¢¾'“z’×Ç¡|äéè"ÖOZQ)ÝÑ»—¯6‚$<žo¢¥P6ïUfƒWü†ÝœâV š\Ù`vG“¶4²Bçp[ºR¾n˜'JˆYµ| ÌŽË#Or.¾O–2joêÇPÈb«%X–þ““D¦A„ +pôV¾"záϱËØ»ªÞ‚‰jyËJø/–›z¾r /üò\4¡¨@íø¸;lª¤V â.vÁOBPÞ +ËÆ{qjƒ•ä +ÀÓÀokµn|ã1Zyûp-”!ªèÌßÒàVµ š"È÷·4³”q{«[L–ìÚsÎ9-ƒjªÏ[ÎÐÿÃßöŠe+# Ká"í ‚³ÈOPý_õÑQUºÙá½²ôË(ÃûòÝ:¹d4@Wµ?/Ow#¢cªú9ÐŽÙŠ·éz´¼%aó$ð}sâA4%¥ÛÙ*Ç®léÚ‘ô—F õªx8ͬt<öºßQ®)Ô!†VV Lt% ÂëôǪ¬{HÜY¯¢ù—à½c_@µPøY Jö·- Cܺ5tœãùHŠ Aä{xY“RjÀ­71Ñëý^š½÷GE«6ÊzáÖ_^iRü³o¶,R¢‡yºÖð#P¤•, Ϭ®EVæøü‹……©áçí•)Oˆr嬸 !ºiôs’Ø–ÉL)%)ÍÂgwz£f+Û "UbÙ*æÍW9,BeY55,wºÊ”¡–¨Âì§á&U¹ÌGÕ ÃeÃUÿyœ[ª1á­<Á¥2 ɤ¥¢<ê¤Ãë`‘,rqÏ/A¯Å]WH`ÒcÑ DAYÑìL¨’Û“ +¯Ciäw'«¯«'ݹXIèú„¡£¡1Yl†ÆÑ~ýòªÜ–Óã.0i?o24¶¼ÕœRø¤Øà£ˆmŒL¸ …2Ë ¡Ï¯mŒ¬?P_jdÞ}~Q +sÛ•]`[ñÏ ÚC7Õ¶~Ætö±â ŲD ÑÙ¢®;¢¯ŽÁâí_í©Ù®þüóÙb×ÅŽþ1È0'tmL¸2µÔŲ*_–´íiIQBEêl™ó‹y—…ðRwuÍOhJø;öxÅʨœ«XF¤"ØÙQäæMª…‡ I‹*À×î%ÜØÂkQæüçJºð¨æ®ÆoŸ®·A+$Uk°°‘·Ð˜RÆBS×D4?±¢=0}"$‘޲ce…lvk2„‚áMP5pm6¶nD‡ õÎNâ˜e} +:Ut1ÿÊÞcB3N©¤xr¬!Ð}MÛ×Á68™›—J„C„)5Ë'#Vœª(œ8%œ8«7OÅ…VB!ïÓð=”d•fà¢@µŠ4ò¸«`ᾫtwéPý›†€²…J.½òyuk(ªWãá Mßâ<ú…€2WDî™jh_’?DZð±@~Qଠ)œÐÞ뮂ҷ†;aH©‹5Ïá”×´&ý§Û½ÚX†wmP &ºÝ,ßCïiù“CøJóñ¢0ÆÎ×ÌÑBû0¹ø$V +!¼à ˜[1Í„& „J.àVnß7âõÁ d?‘q¹2>"0‹ è3v[Ò‚½Ó8cÍ5†•§Þßå³±EœS͉8+ÉÉãÆ‚VíŽHѿɲl½Ô/!N¾(9X‡’cðÀm°ØÅþÁ7R³¹Þµ ÉD CŽš-3†E`x”^Åè†Xmܹ%ÔíÐÿ4§ÙˆõQRÍÏ’«,ßòîêø­«QývÔ9¯æý?{7΋̈Y Ÿ´uI5¸æô߃©,SÐwQÝDË 8> -Ü<|7›…,°†‰®{'ŸÌfQ{ëDRšzÉbΜ© ñÚŸ&17ঠ£7en·E®ýôϻԆ ÿÜí3Ù%V«³À±ý‘4£7†ä¦ 3&W–Y”â“2—M|Áø·ó"?,‡dyƒÄ“ŒlxSU §ä3 ,½„PŒDs|ÉQ~¶ÍìAhÐp¯¯•é©…”ŽÖ]жæÏrÅå̳ÝSšº@=㥖 ñO1^ÜÛ$0éÌXaò~$/Á©MXH*E˜ gÜ¿Žá`·±Y’8élWQ.ýqFRÝ“  o¨n(#©Þ,ËÕ\:¼ÚQ0>„ôÀÜ… zç4Ÿ®¶Dáõˆ! Sû¿°ª9ºªšÒA/ám„Æ‚§êCP =&¯“XÚZ"•Gþtôî+‰³µ·[(fS›JÒŪ¿…#ˆë½H è°·â{b& ž‰B¯Ïª=RÏ›Vñg?½]â=[OÖ.Ôænó*¯ë‘h5‘ÉÐN>uc¢d¿K"¶‚n™¯eôGy‘©‡L ¡Éo’'RËZxƒç‰FcØâWÙÙß®Ðñ)9%òîˆ{„*Ìp¨8ç;s:›È+*D'س›Ø5a ÅþåãJW‚)q³’§(µ‡Òý©(8£}’Èôøü«`sß…¼#I†©gÏOs8èqP¯‹óhÓQÄòV”Ÿ»‘bSüFѦDpÍ;í‡_[¢ôƦ(¬O)&Q¿t¬¦Ø[ìuw‹²ÿµjDÖä_däM•>¼%‰çK&¢ÂÏ­´¸I@LG«0+­ÙÑö¬ðî&"üËúS´Z‘d{Æ •J‚œdÎ:Bï„¿ˆþ'Z`þ&r™ø T/£Ú^ñ›)(/¸bøuðk9ldòõU%…„>‹+085‘)ø¦AœH\»ÝÔ½úÐ@‚o«ŸñA‰î„àÏB‹¢4ÙÛáú‹ØÅà)P¼ 8g*AaÊ‘bO…) '‚¤Þ—«J¦{÷[?íÌPšX* ÆwDAeQXÔsëãRâ%ÜjBöóÐ÷ëó¸ß‘ëÕT>´d¨XŒÐnXŠõ´Y|@HlkëðË®Šy—kê9 +,øxë4¨]ÎiW™ý’`ÞÝ?ÅRxÐ-­¶®"H…}ÚŒÜÒmÃHO\%ú‡Û§\ú1úøªàçÕײ94ÊAÕî5¾(*Œ#(vúɵÒÚ19 ~X1wo³š×Ï4†èjˆt*ÿõßÈb”] f»ór±ŠP À'€ºs–‡ò y p ‹ZxézËLóçT®_C‡š 73 Z.Ÿr>®=Î$Ýâ*Œ 6w×'òŠPí=^ GT"¹Ë÷ëVoÁà˜Æ£XáÑ–‘³½v7y&na¾—+ŽáA†úÃê,2³À‚c Ã….C´rìƒ ‘š%¡’†Lxðd%è…ujÓuØ9Õº¬ñ­`QõŽSÿX7~DÛ[¼ux“XIÜÇ%b»]Øs‹*æ'DµtPªgÃÒÿ ªQÌ®vëœÐ12Ól»&o³qݪ ýðï¦[0y +xà]þÝ•ÏµŠ½†ªgÿãf.Œ— ©\CènIHm¼V×,q‘`hÀù¦¼>?ûÊK‚— !mN†Ô ››¢ìÔ€ŠÎ ²­ÍÑõ;’Ò³Z‹FFždô‘©cÛLã”N ‚õjg2ò{)Åv +$GIÉòýçšá76Q8’(!²¦JSŸs +"(xý¥È[¨\ª¤.Ö̉ÿ‹AqÓú;[É6/ê '[¦5A9Ô»_POÝÏ7¿•áÎ]"‡IŒÏ¸ÝOÏäbøUª#º·Ý[µƒcö2TKžÒüïàµ;1)Q1&Îâ„–fØ%e`•§eÍ,ÜFÄúwTý ¯#Q]™ŒÈYT×Dá½ßõDÒHô¬Ôç-7éÊÃhzú¢1‚æôþv=ÝçÆþl«1ËØB\ø/‰ÅökâÖvu"OD>Œ5 |r"-ùÕª¡|BÙÑM5h +ѨEîi]êÆuucA@ HÔ2®øäâ”—Õ¥Áœ·…¸Ô‘È•".*)3ÑM’p -hú&Ô:sL3æ(fË'¨]WÙ6ƒÎÊÃâÛ¸ÝÁÌTeç9KŒ¦õ«›üá1íî~ .­9Î;rôͩ߱þ'ÄB­AU\œ sÍ&nYÇÑí}pÒÌÚˆy]hLÔ•¿±È§ìJ9Pp©(Æ”×áó,‰F,y.Õ¡Vc, ¬bƃ7åükßµ˜¸°Î æW}Æ0H÷Å# ^qFuõª!{çªGï~àY/J“4û#€ñ_?ÄÍûøt +þRûØ_>Ë1Ú3€YÞ%u¥ RÍq|ÂA»­wß”öÔ?§yÜyDg˱ƒ¢RõÏ=¹ÎŽw b¬û¶ …µéd +ífi‰~º€Á²qrÖªêLÒVR^÷f‹•QlÀ•.E¹B%NÛE%¾¢ü-÷óYmbzz?^÷m7Ù>’yT»B‚ÜAÒfΘmUOªåˆt§~ŠTL—˜»ç,‘¡7G2vË ™Œf»?B™ãÚÉÊ…Õ%½jvA§äÎìòO™Î&ò·¡Ý:È>‹¡h=ög|6:®UÔô|6è‹ðy2W:ç-Õ ¬)Þ‚9ù¨«¬IããÖKÃ\ãœs? ™ìAliŠ—MΘ&Ôì²ý'¬a•K~|®Z.? üGSñ‡Ä{)¬B‘` ¦…O°ÄZò4}Vê0 Ã!Ð8¢;eíÅ‘Eî…m›Jhá·„_ÕaòqDhÃ^´CAφ•<‚þw£Š~‰3â f8“4]ê0&)ÙùÞ ™ñ¬È(¨ùØ)špò'dR&uÐÕ ß_”¾äuT‚˜84JзDU§ż/?«Q7:”%hPÓ2¥˜A“½à%EöNìä5r#Éü]ÈÇ«âã­e»(%w¡Z|£ì5¯rJ:¡ivdé*Ç€¼È[•R³5ôBJÇ> Ú¼¹^ÔÞi¡ ã(Y®ÕfX-BË…ª®¢ÈU…ú×Þ„hb5¾«_m%Ó- ³Âbà<–‘æüŠ×Ùl¶»»ÓT@>Jað|ðq%Ñi²¼ÓV?v®eH ¬’;24r'lT\HL]|â§_Syf Ùà:Òp1=r©#õv S™;åe;¯7éÂTw÷bÕòúåY8cèª2GÉà7Ðg©îîé !Nÿ¬®Mˆ“®d‚ùÐp>ÄcÔÆ™ b1n °Áö`‘€éyîíóaT`@ÊF‚ <é…“éÖ«`ò8”´†<Û×Ú³zvõJ’¥n±L–ë‘YuE(5¥FI¢ÉÚÔ¸ý÷š‘TÐÂe…TqôEéKuÑ¢¤-èYR£8Mƒ®¤ø·^­Ë¼å9Eyúx¯^n’ñóM’g½TŸ:MdI5Ù{%W€«ØBžinÄÂ,/Ú¹Á9º¹G_¾ðÏd·‰õjzÄfÑ( KgäÜï6‘ô}‚+lCæ$Òb»4èLFr—3H±5ÊÜ+©Ì=-+Ú¶¼ç>•ú¢fr–Œ¢ºÔÍJ•~À÷Ñò:0%­‹ÌIB6c,é8-ûkå¦Õü¤lK¦¹Ù¯±®q¹‰œÝdlܱ 6#“Í´käí3ȃTVóèI‡³’­&bô@j@Z³DÜVplºÿÏ{6ކqjìá?ØÂa×AsšÖ…ÈhÓt“ïY31bX‘~¶{Õ ‘¬ÂSɪjÐmZa).ë%§sèý㸵Iá ²Å¬a¶gô¦Edùš°20C[`;šŠåPÑ¥vXÝQÌ¡FºôCö0B¶%œ:÷Nl1OE¬üÆUQ¡E,Væ +óyï­i•~K3“¤ž´7Kh4÷©Yå©¶æì²k®sŠû‚;‡öîí±£¸N—z¬|°¢8q^ëp÷Ç9a© ¡qK_ÜgaõÈ*3 Úµ/nK‘úú/ZÉQÙÜ wÖïÿsÉKSzR'¸$ ùõ8’/PTYÚ7—ùÒ-á°[—“mÏ0ìrŒÙãŒv†Fˆ[þ1moB€uàŒ{ípôálÆ:S£ÃfÚˆ>â2±„“] á¤÷ÏÄ3×°¶ý,ÍDHÌ_}}v0ÚD }ù®±¼cêøò\&Ed)ìí Ya{Ê5ŒìÈ€]@)Kr½ÉÅø6l.š¬µpà%äå¶¨Ò Š@÷mùß%/1DÖR„}nÍ *RB¼Lõ®1ÕŒ¨ql&åg¿ÜN+Š×/åYK©U¬w¾À³Š]#–ÝN©ßž/w4¯0‚à{çD5´ÇÓ²ÈêT–‘‡ܼº$Údâ”P'n4qµ^š;€\R43åËB’’ ÐÎ_|9ŠTÒ(³o »`Åæ(ò__ݷ깘͚3ð"¦*/F¦ÕÉIh—mùz±X€gï®`½¸+ùc†àVQ¤c\9$Ô@YºËщ— îE*¤P‘Dk"ó$ȳ‘ád]ž*ϯ)ªÜVê¶œN—$ß4iý ·hÆùªQOÁ™p”º’½"Þ&ª€Ë†ÁñêB“­Ú¡°¶b¥!¢¼{†$¥%â“*™¼ßMZ0öº¾Jy/uÚ;X”+”ŠÞàUjt² P²ßo°Î5¢Ú'dÍ•£GÜjL±2”D6Pˆùm;æZɱgnDÃRûεê•Ù¶ç óì-îMftvÚC’þLšoΗÒ|ÓŰ1}Â¥<µyâVyZä§è“™ ²bT€bÇÞ…î'ÃE꾊wl‹÷—!nä*µqcÃêxiʘ•oÁ¥6£ârˆPåK¾S»ç‘§5¤¥}ñ¸ù÷Mßý¶ R%œˆY¾ì`æ3¾WU@JäÙ WÝ«» K´c4‚°š#×òÓˆà&}bh[º÷O¾»Xú|i[zð#cg—££ñöAxm˜.yÐ÷ +Å:RÒ³GÃ"{ÞY +ljÒîI³@¢Au6ÉÏlPØ«2cú¡€{‚…è³(¸0¤TÂüïlàÏ?µÌµ’QèÿAVlËe‹hCA¨ 8TkÂ)›-9åDšaÃÛ\®“´Í²,c¦«TìßK8j’‹6é,¾»nž©`Á:½®Ö½À«°eî§ÌÇ,¬EÌX‰]g½—±ÂUnHR^Ì™2' +É’{Ûû¼.(ŒEÂÈ ¹³‹Ã»¥(‰ì”«"F>ÑžˆNcé-Ç_³ +0 ˆth ÁUO£ŒË»`9 +ÄØA«&Š'8$«ÏØ=ž”±¤Û—Væ‡`j ZŠé¹”ŒéY…Ô§z¡’BÅ3îW«¦ó8r0¢ô”ûüùž*4ç ¸kpWr^0Q×Tu!B•†Töl°]uQ—N°Ü§BûÖ“55Cxž¤³ Èd‰×ÕÒ7ÈW²ÙéÝÇÑçšœz +‰ï3âùBÚ³N)ó‹ó—tkC9N©4 u±l¶–·D¢A.÷`_ïX$’êOÆ»GTrnP*é²îo‡-]#ÌùõËHÞýhAtp«rpvV¨Rˆä£z >Fª&ðAÊÜ-þBÜ2TØ]Ùç×ÛÅSHeXåƒ9Õ^&¬ÖZ¨j¯lP½×‰a*!(¨T(§¢såÔ¸r¢#"F8æÀÀZ-§Û¶Ïÿ¼éw—¼ëÚ)/pÜ7íªN(ï;³·ãuß[%¨ÿ Š3૾œŽΙrsÙ¡óÌmíø@P‚4ª"ÝÕóùÇú‡{Ä¥OëÏ{Õüë7*Q² tçV +Þu9P¯aÔ~‰±”~‘ñ)oë,B;jªÚxã¡hïY¯ÓˆJ¬íÿ$¯|¶Úg*éÚOjØžðÏÑc²I!}8Ïõ—Yƒ‰òv¯éß + 1 ‚†×â_S™ÊÜ}¸@Ø@Åxw0d˜åÂ^š % ×S÷ßè@ýO§4ÒyŠ-@é˪ÃHkCDr%ùäfä[@ñiMÿLY.±Z A,'8£ôÆsµÐ$ò~{ت¸æSò›Ø‚ŒrÏ(˜ÿŠ|’7ÅW"qsTUA,D»ƒéÒÇ‘ô‹Ü¤Ú$· ŠqÃÖ/rµ¯&dÌìŸ"^HwÒ:‰ÝV(oë}擉®JÕ( +h°cä·G‹ø¶ÀºÍù|;ÄÞ*š÷œ$'´Põ"×èU‘«Õ‡±ð£ÃŠ[Џåt(çl;l–šŠÏ?Í.v@qkBoX×ë—á{l̆±ü® Íoon@+¢ò!][¢Ÿáy +Eî‰Oh¨º‚½@Nw endstream endobj 80 0 obj <>stream +G¹cƒÁ޹d,m²g”>Sæáç±gš_G[VbãQ-Ä‚¸’œI8#×ì&·N¼á¤dëûǦX*ovÒ6mD'ô +Þ‹Ägü`˜ÿÄ·ôøf‹XR’Li`õ®Mœü¬!½FYª³tKNw7ÕpiÓ…´—àîÃVÅöJ v⃶] SX—Dõ¯rˆLÎ"¡rºX–:9oìoÐ$‚smI¸÷¯!\mÇåùý„º*÷uãžZ\¤„Hj7\åÌ„×úNN•x,–e«aùqŸ}Éh2ÖØç6l/óŠ}‰p‰%Ö9PÝÆÕkpÚ˜)&UazË\-66 ¹…z˜vÂëtE‡_¢É òû<Û›Ù{„ìBZMŒÏ?Ý=N©ê H©“ +YÈÉÂ$iX~&wqÊ qHOÔŽQÇMô¤…5—.ã êL ‰*­­Yé•<ð߯_Fðß…Ž$9¨‚`ßZ…N&‰ ("µª!;Â-¼*‘¤‰)¶%pQÙÝË£U‚³¾èš¹;[-6‡/xˆjü^9}‘âA+‰¸O¯s¢6ãæèñW MµÐ±nO¹b,¨“Ì» €ˆ"#-6jÍdjtô¦¶®$ˆ S¤Ïéa®Ò[¡ j— *DN"¼'N¼PØmâ* WHCÔ ×¹ +@¸D"% jºlùX{Õa$–7´ëµQ Ì’dnͰƒVH½ùj‰c™yYPʪQÉÖŒçJ¶f²"L&*¹]†«9wGÆCý—†oFE#.ÒfTá%ØœF²iBX¿J¡ +ìl_¢€œˆÈKö¬¶¡ËU¬°MQf>í6wvZ“,×<µ•ýð8žzy·r˜k¤ì6×Ëù䇖&(' ݉GßôÁ“Ó\ñ YÜB(Š!/!̇ÈEøÒ» ïÂéPKíQÑ'ê¥6OÐÌÇôõ¶„”~…ÓÊPÅy±—‡¤ç9åWàe³§8¸b¡+žÒr*‚éî +}_J„é„9§3Wø8€×Õƒbº2‡Iô{I3&bÕKšÁ (`·c†œ•![L¦ ÿu>ᘑˆWÚ­µ4G—w‡»#fU¹à‰H]zÂuÌ6$7¤êm —”±ªDž™Ð‰µ>ýÆ«÷Åí~λ‘üå]?;áÏ!(_¬ mHÀ7•’W¼©Bú'–¸)”\ìŒX]ÍÂpT <Ÿ,ªÄD«klÆÊÃ($¾JîרÍõö,iy€ß?˜G¥ó +:ÈT.DÎ4§4C»0³FábêVÃ9/š½ »|r‘ ‘A:Ml{" 3:‚–í=R`ÈP*øKîA¢ä= =©õ(‰KCõ;'„Æuœe³”¨ÏU¢‡÷úå~¯µ˜ +˜K'g°¼R¶õò»ú}=`HHOºGkÊP!¡Òè#M@ €Þf¹„Êwi†Øÿ£t—tÏ>ã]Ë ÛÀµ Ežq?I÷¬"&Aù©ÚTMÆIpa¡¹ «Ú……’Ãûqsf“ƒä!£Ô¿þ[v2ÓèIË'»:†"“/„¤¾lñ‰n’qA9›uè* j°?³Ì÷”¾×Œ&_›ÉFÑÓU÷v)*®ó%Uì!:Tæ5®ó°—™gÍé¹Ía3´|¾­°ý¹Á©ÝÀ]‰×—¾|\EÃüûÈ}Ï®dO›tÁ*x²–ÐíÉ ½G$hò‰d(«N‚_ô~ïr¤XV«Àý¿%y¦ÌIPVË7¡,ÔåXD¦Áv9ûó¨F·#(i)˜gó]ÜG—R{—`®¥hØûÎzŽÁEâNO¶s9YÄyebu †ŽóõsØ®—žÿ´‚Aòð^ô"ÁÍYÚ.Ø_,B¹±V¶ìºAUú|Ò_–YhŠãù_ɬ‘µ”ó4bVKNÓÖwî&Saõ­ù˜ùßÞ­áœÉJe0lÜ,ßì <³:MÅ'ÓN—é8ÙH÷²f¹BM11äÌuÖ»Xˉ|ayINÉØ"´m¤H_íº3:uªæ]âDzç1ѳÛ8éYéc¶ƒ…&Åà†K³«Öçô®®ZBÑWù‰ÂdO?‚* +@“j蹦,±•O£õ,&B>¢€ªÃyµ±¥ˆÖA8H;̨EvqW;¤FˆÒGQ¿‡NÀhé\M;,OCý?&›è/åj¹>¶"ø™í]T¶{¹Áfc5røgP%ÆèÍ~œ9¦¢ ìäé5â÷|#6£`°{[Òb¢9y,Ú/Ÿ{ë”Ú¡œéFˆÅ#x5÷ÌyZRå´$ëMv¹ÕÀ‰³ŽL=ÑÒNÔm=Ë…gWH(;¼n*#×¹h%OŒp$›úç–lžžŠ©róÒ™’©²ØœüèÓXHˆ0ÐÍ©ràÌТë(` ‚hΦôèãÍ>Šc’wOa£¾öÚ÷eSG›”F×,]%ÒöD“ +åà¸Ìl0-‹ñuÁsÏ[e>Ц­T—ËÊòäâÛF¯˜w=­Å;R´Eÿ¨¨„ªÀ…i¨²-}†ß‘5q»ó–ÂE>u0Ï\ôoé%Ýo‚Û ž’ø2tõ´\2%îS¤lŸ†ðBU´ÀUɱ-„þ˜!+Ö2¨60¤»AŒ†Äi±ÙÇ{¸ñ]CB‡õr +«ð7Jm-QCæÌËW )¸5ú?—Ž{ ‹_N B^ +Š*}æ‰;®È¸k5Bâl^vtþéÞ"8”ªÒóè›<ó*¿¨R— øº6y‘?ΚsïÏ2>#÷Ψuö*tEö‡œÀ„#P¶–线±$•WØ-Pë²þM!7l%äϪ©M~°üÛñÏ›ÔO!<h­TuH ¿æ×ùÌDɲ˜Jª}¨ï?ß¡¿JObÝ’EiY–jj³jêŒk#€‰X7²·e8¦éB]õa­F™s}7ƒ ¡¦äÖbD<žS b8ä ÉŸÛÖE·I÷¹’. +Vtž|Ӭ؞…òi³`˜ÕÐOr ô!µ>“$p-R[OÞM@Þ”é ‡[ÎÞÐTðÍÑç˜f>p]§Ž³Yx·¤]IgVï¯7{¹Ÿ?ÏÐ:¯c©áIg%Ytµ™à)QpŒ­ ȒvÂS-†7¹ɹBÜKÃ$ÛØe';^l•Ï@ÝDem@ŸÂþ58)k^ˆ·ï$xÚMcRå$Mƒ‚ ™ÜíCýþ6¯e…¥|¦k ®; +ædM×Yé~}¹‡ØÆá¾;dþ`~ô8<f®ÁµÖ™ùЭØRzZ&ÎRÄ-YÄ­Æ=P¾B¨ŸÈ0ûWõO àÁÚZ›Í.ÊÅxJ{„¼¿]§ºFT1œ*)¡Ðìx|}Ï,’øœl9Y£à‚l¦ÊÙŽÛ,ÈÃa¨0®}¸µ ±°`<:°¶\Ã46÷ òU²tݤ’Ï$i§¥YÏ#e3ΆDD¦™¬ ¯¾ì÷·{GƒÕO¾{,± 'ì í©ðÎR«lœ_œá$ÉþMÈ2)²)¢FÐ<öŒBZ#.ß.¬ A“Ã5»€_¸[ö÷0AiÄ•QíÏ'yb¼Û”A9ïv©¶qfÛruÛçmªþ~êë—;ý¢ /þº¦{t`Û¸âðnáVév4¸pxí[‰m‰á'wš%Y ‹Î%Ш:³-¡ä5Ú”`‘@» ñÖXì`Ø2ðé‚‹È_½±KäáÂrÅfyb#3jÍoïÖ+Èì +R Èàw ¹¶d¯Bð%Ëc<Éw©Ý,„{áñÉ 4JN¬²ëˆ©_8¦jÉRp6….L,GIÖú»þ?JeÓù< §¨ö`Ÿ*¼Ó^Ý=àíYyÔ¶ÿ’jCIª¹[,Xì @6ðJg/]nRqqâýZUªXÂfct/žï‡ðÑN•ðù²ÿv¨Ä;î*<9ëVâ†`Á°Š…ˆš£¤K&sÁ¡•&ÔyЬ œ¶Tb×| 6é&—ù6tõÞß²‡tÙÔ¦u²v¹ØÊ)àÆEôSÉ(Àtc_”*}4é] ÍË};íÝ@:É£‘FЧoGð"e¬~1¥Ò_7úAWëW•bØ9R‹ ЋøjKD¡¤H»bJ9d–B’{É#½/”£B~C > +sêĨ| ”o5,Éý¤¡Ä¸rá]Öh2Ý—ë±B­ºž7ÙÂ= »v÷Ï݆¹¼ß‚š†Bâègèý^¡Dõ´ñžsE®- ¡Dr÷% ºl“e‹’ó˜lç¦P¶âf3I… dpF*Bångjì,«%" ¥â 1ذr–”Žk8¶5)aX\CêÕƒ!Ä ¡¢¢ì|ጄôŸPwd¡˜ÏËàÎ j„á;>Üã€*צ^ T,oÈOLwM圳òÈÛqüRKÚ¢ ”¨[‚8ÇÝÞ« Õ¢µé†­M|7æE¨H˜‚0ÉZ’ ¹˜‡ž4³®r?Äi'2öûQì•2Rí~ʶl,ö1¡×ÎW¾QH~$–nýÇÀ¾d9Dso£‚+4Ô‹BP…FüU˜ïG™fH¢Çpb%ºªïá¢)ñvÌîBO/köä*QW!ÓëŽÏ¸ßɉ–™}M Åó¦úµg—‰mot•»aÊÿ F=ùÌìIuxRýG²‡èN <ŸDèa ]ç?A}á2y"úöý)×ÃV³ùòžQÄ„Ï(¹Sj¦ý2‚W½E8O´ð%(ëX½eØ0´-‚¼úSÌGåÑžT–]{[š0¤xT•8 M-¦ß‡ù|¢' õv@6Ó'«ÉàF}7«®H²’‚r(LŽÊŒƒ"Ó_OrÍ `òd%ÄM#tJÜfêÂ,5P?Þ¶çK÷Öò=LÝC!CÜ3Žåf?“‘wÊÖ°–Ý9Œ×’ak­©ÃíÑm‘{͆)ÎD9F$wÅ%{†¼)Ïä\JE(ÖØÁ^u]A°0¬ØÍœ ×%^’°Ž)6"Ѐî©SÀ˜%1:€Pv¹¤+ñËxªìÅÇÉ} ”A âÒÀ½8Î(°©Pa¡Ìòþ†%¸!…3:ÂpÖ@Ûy8n_šë‰ᙵ¥ÜÍ($tɱò5Ôi­wð¹:É9+=–@l5.J¿ÐÁãLx~|/ùìi^¢Á±v€ÝšëÂŒUƒû˜»â/ä†Í]R`ßeØöîDÝ=µÓJ!Ö¥ò’¬ AÁ2Ýl·µÆ3@¡@µ]Òåø‘^Ô°î)Þ6nAÄOOâ*†xƒ¿l€yÎ<½”Á*‘‰t^–˜¢¬÷mÙè.´âèù ¼erh6!÷èÂx²Œ² ¿† Ä†o#¢¤M•ÔéÙÐ޽9ˆ„q|Œ= XQ'º¸ ¼£áƒØRË[ÎNÈKržS[:¡Öûóô³iáÔ~ï5ñ6G—|®ŒÈi*î +:Öf ìãðù3È¢·0LÁªÊÈ_Å®ú`°ç¬¦ýd5ox-ù"Ѧ/àâÛhȼe!"§q^Y»Ul:­•’l\–òáÿ\Óh+qWúçä?ðÉQE«²ü†P2ˆhF\&žxϾ¸äOƒJ„æBïÒ.¤ÊÅqS™ñbÑ]¡–®-êîã>ø:à/L°–•v&Êpq¦»o‘*yWëjÜiZÂ[0«LO3†¢-0⊺Ê<‘}BÁºYš 8zßµøÒÞÿCß§£$y$øžl.]ú~ ¸‘ÀæØéÂHç¦ì¬^;…äkHd)YA9îÃŠŠ¤°z²mQAöòVH&’ oa+*ttµðGJõÚ‘.mÞ”YBJ©rÍ ¤Cì¹Àóé{Ÿúþ–¯?D*v,ÉÂ×EæåçÜ\¹€ãubM¢!¶lƒ_¸v.…Z¸ìn‘O²a]xˆ@$›hËjÝ]Ö; ž‘¤ÑL +¶ +E4Âh)Dòá‚Iz3’/ç^y7B–HÇÙDÖžOtÛ•*Ö ªáSÔæX}>)½mƒräQÍ) +^Ýá"Ͳñçtž4œýa£  Ü\§a×SdHd°lŠê£höi¬¶Cã5]SâpqÌEÁ‹ÝzìÁ¦÷`ʼ¦q´Ø:’lº—²ÎN+ÐÞrO‡Ã:'3(;ƒ“~b=ñ¶öãì´º0îƒ\¬=‡emê´âAà¡¶ª3DeAÜ"¥¯fuºÕL • ©+±ŸÈÝ5K0wu‚·¡=LÞ€"Af*½Þö,Hù(;·‘RÂä˜}n§ŠµÄfÙÔ°ð]DŠYcÿÍû–az]"ŸmÎgCUËiNƒñ¹)**ÄÒ’çØÇS7D¼!Ê å^w•ÈÐÉÒ9K²t‹·û!LKyXƒ¿z‹K>€š›­íóÖˆÍ2;LY¹‰Ì9ÖÈJm&ÌÅ[µøŒÿ<ˆ›Åº²µvÃ;îdÚ‘Åòó•}ÅvOâ8œÅºhÛ’FqÌ‘¨ÑjE»*WÀYU[à `ÉìŒï9}Ên‚&œƒ-Q#-íÒ}ˆ›¡jdÍæÎ…€ÂÍpöKT/…=¬³—­‘—¤àl w¶·2rm$0r œv œ>eV•s‡Cn²Ç…ûð¡~B'EJ÷ÆáÃ`÷05µÞ¶IØÊâçãCñ3Kr¡‘žá뽃˞éOÆ©5_‰‰¡\H$& ´”ˆpéRHb/´2^¶2vi=YkâV²N^I’g9‰.¥7r»»\ +…Ë1yPÿê!h‘d‡À3)¥¥A“ Ü\ é©—Ù.lþ§ûö\´w`˜Ò¢ÇÆx•ÀÍ¤™«æ)< +¿tÊ+DX@_ËÂ!ˆ4U&ý5öJ:Šþu¼»ÅG0©™KÑ6¿"ãO°‹u0~(òLÚ ´¦CÝ?wGÞ߬_‘eP{µÒ +XVF$Q„ޝ“Ìé“:†  mhOÖ'oú“î9º:ç]öXØã5{”@ƒ™+¶”ƒ›Z0*¦Ž[JZ…ŸÝŠâx•µxO¹´§ìÃ{Ê`…á”›û½J•P†$ÂK¡=Ì€³Cò>êÑ&mÍÄ“,† ã€ùÁ•vOß› ¦0é©Ü“'5>ŽäãV•Ü)EÞMuY ÖÜØ=r×s³UË"ý|£2Ì…õÛ$ë²Æñ‚3ëÖš]ü„›Þ[WA=?kS¸÷Ûgæ§MÁ‰­ò`tx·/M3- ­BOVþºçòæƒÏd#ÁöÅÁ¿pq"ÍǨêë}i7²”ÂZEK—¥˜ê°0xÖ ×Ý.c+¢å‡áŸªÝ—nY>¾]ïT—†‹ôí¹¢Öu-ucfE9â„4Ð ò{փɫ”pU©!RÚÏq%@æò“(xÍ·uûú~ž±i\jdšç¸ß(âz7Œ‰nö¡÷vøîTX¢XcÙè¾ß©°\@Žcû<ê˜UL}Æî¯‘ =¦gÂGREj gòµdW¡](Bô&EˆiKYÐ ÔRHëNó΄SD‚ùAËI}ßãH-ƒå‘lJ Ûi‚8'%ˆc-NËh½D§§óµ$=: ‰ ùÄ*‘!”ºÏ¨ +òßÌocŽÐ0ç(»rÊ4Ò"(Ïñ£Y=)6|ÿ +y F•57•xyNpÐ9D¯ÕŸö2¸`AÑØ“õO"Uì„ üç7d% '?0˜{œúù˜ŸÓÈÖXB¼mPÖmYD…øJ.hÿ² + +%ç±V€˜è¸ È\ãS•ÜÙÎ +G 7NiŽòCXÜ;óZ™íBZ9™uBø¯¬ ®ó² +èkLÞ„0ý…¢kÄ!Óê Ö ‘Æ÷ãÿ¬¦<N¢`ï…ïâ¯×©póf€dͬÀ%Oc¦‘‹ik¡D‰B¼+¤Ÿ‹ +bhñ}Y¨p”i6]ÏÆÇI‚õ§ÑhJ¬‰@õxÇZj½UŽSòœ¬h`€»Ú2ü‹E¡¶ºÜt“î9dòvŠ[•'žó,/æÿf‚;yiЈ,¯_ÆÏ³Õ2hUùMõÂy)J'ü¨¤yMµmT”UƒÓa'^]]°%6XÀ–*X¯¨J胂³Xa¬[­ø[Xø'Ôä?qf`ú,úL7Ø5Äô,ÿË%EPBÓé~ZÊÞ’ àþTz;ûˆ–Æ-ÂHQº©Y ÜzÈä:§˜²-×_jÖ±ôNzièLëí +Öbß-iôôÔ¸õ’_¿<ˆKÝS‹–œ$Ôr‘ë+`A)I|a6R|$KÈ~b #}À L†ÚuWíºœg£úg¶ƒP —†3™w(¥3Ÿ´µ×_¢ÒMŽ‘;qš™¬&a¶øIv·Û³òüíÆÚžÙDD +ôtåÄÜõøèmÕìNŠÚЈGQ;“•ˆŽ«*?ݼLZH8ôvôŒƒ ‡ßíc£B—t6ÛðDºÂ¦Ç6\6-y§±´…6„DTÏzœ;ZD2Ôè«”|E¨÷ÏÞ†â5Ð(gé°DV%ÄBƒ$'dµ'<[rdN€êð!C¶(i•rì.‘°Îé«¶ô+!E¼¡ÙF5ý‚CAÉë=÷Í%ý÷Ì&ÎtËâãè}ï6-“§aŽd^@…üÌ%b2Ý]Bއ=dƒ¤÷¢²¾-ø·äR³¤È´²Ø,Tåâä¹_}@´•7æÁÓFZC óY"ÎË÷(&ç• ¬M¤º+Dw­— ÜDf¨ìð-¼—&×s0~÷ÕÜå¤HixìssnÃÀ‡S÷þ î(í×/ÃwìKeðn‹­’*n?pª,û È%b{q [R߆œ×¥z5©"—æ,s_GÈ-ùºnÉ Å†¸…¤ýuZÔ•\0«Ñ5ZfQ´³ñýÊÆ[}Ø@>Ïíþ”r.C‰×AŸu?6Z5#DØa¶G—ŸöÚHjºð‹¡ÃhaÕº39ÄòåùU\Ã]],&Á¥[î¡äoù$ÚÁ§T¾ÚÇýxuýÃA¨c]eN±{¡€7*Ñ –uð*u +pÜÌfÁ’Y{žL(Ú†%#(uètöÏñ¨…¨4åZKjñy‰1“dá×P*ÏG!€5å³Î%¦ò–«ì Ôt>ó]i!R­úÊ6´,!A½JÔCÛý—´Yõ‹ÃbÒFrn=™Êð~ înî.ß›Úî§; ‹¿mÛËH=ÚÝ6ÁvE¢a+%3Îx„¥ío˜±Òƒj³o­,pÐYó~“ã$ɱrœ|¯¹ÜÑh²·ÔÃ>«€ö-´Ž²ÄùóÔÔÇ_ôD jø\›Ëlr7¿gù¸ï(q ½5µ½>žÓ±ü8Bã-¤“th ¤l9~•œž9¥ƒ”Ãa2t•vÑ"F"¢-&îí†IÕÉaIg”¨Oÿ&yUèžwç´pDEr*†¦Bì7ÂãoXŠAz¶ ö…­N™cøJì8S¤KÛ"YQg+,tzÑ ‚øw¸”äp7)†Ïä0]LJg1„ìÉ’5÷)„Å8¾:ã”Ö9*&ƒ§@Rf—E¸ÄÍQJÿ\Þ2Lÿôpîg!EŠâ©g·™b¸\ÎI±'¸µQåI¬I’sZë'éN×d™˜P.0©â)¯û&Ëxã»k©>›fgRZе“?¤âWÚ<ÞsTC·‡pOÝVLÀï¡%ß˧ԗœf¼Ýû&K;¿LÊ^F-6ÞäNF)‚½|vþ%ž"2 çŽÏA8@ÎXÜBkc’ÅqÄ“ì›d´äêÔc~y#F+Nð§–¼xÉÈhÅ•{¾vD}à/(NZ…ÇëŠl!¢7(Ó>âLBÑõêŠéF|S„üI ÊܼZ…xoèO3QOü4ï7Õ»7[;.Î —¡®3:©§þúeàŽg‹ÝÁ¯’ªÞî²Ö\d{“æÖþ ží"«YÎ\ A{¡.ôk²:[³?!BË$ÐêùAÊ•Ÿ{.ÜýÖ 7·äqËá³.ÿf¿ÉE…§ ¡Ù]•øb”ªBf6k£‚œ£"Gu˜`ôgmWÓœqFu“PÜ@£ó\"qÆ®k„ƒ%nm‹‡òq ox‘’°Xe(ûæŽÒ>³DS‡çq¾¾YÕ)¹œ¤K±`GåŒKë 596sÉv5óÆB]éé_?[ ·ÈÌ!y9Ù%¼5/eqɸ‰ôâJ™Ì{‘°ŠaM!Eh†Ð†úÞ%÷}i•¬ñ0ºŸ]j :¦ÛåM­üØ µð÷é÷9…ÿY•(-Ê2¹{{™Âo˜ZÓøÅ ¿´*¢Öñõ†«]L ++é^¼#dF)ˆÎ{¹eûüGx‰‚æëbdO3®eúéùD–;)ÂZÒÎF.Ù-†Uô;Wëʌڗ—ÜB~nÁ¤Ýã”,Fp' FñÚ[w¥ÚठP‰øeàL–ªFQ!+[ƒX D‰,ý™¢,¦€‘Gr5÷#«XÎ ]( xP"$ù†)+€*×¼ÖŒUzæÈ˜&³¹Ý¤e¿B-›ym¶Ù\a„G¥gÙéYóM9cPPàƒûi):l‹ÇQ­= +2ù&´¹KÎÔ!¤Ž«<§t^)þ%2NÝZ5Ežyjå­õ1}ùïònZ4·Aد‹€Ôû©rVXRÁnÊ©9Ué"%xÕ4ïÌQ¥äôP×Ù6Ï«u \Aºi< R§þ¾¤Cp.ðê +XlÅÌݲ.à°¬_³P‘,³%ö§Ù‰nzo‰^¡f„å:0´„Ô—CžWætyŽ«Z›uù”*£×­Œ ¿fÑño#è÷·¸ðŒšçƒõÍ×=ÐsB¹\•:"í€ÃᲜ+Ó†€ÔGÈlÅMÌý ÷•s-ªâís0M{ ´E©î2Ê£îèX+tỄT­ÎØ®øv·}UŸ¤­¶9:L’6¬NTŸqÁé—ewz°¸ r`øuhIáÖÚ(sZ‚ѹô^Ž0,UwÇïÊÓs\[ôv"MX¾EPÐ5€¤y¶l¸·ƒ“ ¨¬Öû)3~vÂuúý'e¶©{ß2'nh¦)÷œb*±'C³‹5krD†{¦aå,a>ã +íÌõG.³Ç°tGðÊ·çç[¶ÄÛûÛu ˈ/¶ºÈ]ߢ¯› .ãnâö .Ë7H‰=ûf5õ£¢·!ü‚Zû™®Š±ØgûWhMÒðEîžïìŽt¦¤þ{3]™Ý;î6þgÆ=v!"|显}‘̧tÊÊP’SôÇÛ½è&â,šý;*Œ8r pSİ¿=1`éQä¤T\ÜϤšÿt”LO„5Á"qۄè=aµj—rÑ•[U¡íü–eiÖ‚þÄ Iq{¢R¥o:o›(!HNÓlÚé’i¾uX¯Ïwz©S‹.%ÑAÄH\´M…`ÉAbK:TÓ·ñÛÙÒUgÚ6g\ªÛfëLÖ“,ËWÞ7Èjé€Úÿcˆ$Æ‚/G†²m¬vfõ2Í”ÕÞ]"*;e;­ ÑÊóâ/ócxHB.Ñ$'.Í8òdÆSZ}}¾Ç+X¨Z-•^7ÄMÒ4Ñ :Œ²›êvè@] MÒªnPªÍVTe  wÄXÖ¦_-”ê&u·þ¹,&Ù"D†’1 ‡(“Ïf#›—›Âè>“4ǨMó‡=Å,ÆaõuS}ÐêV¬cøövýqÌ0XOÂE:’sKbðvìP8LIIóVf¾ÃÖ+Š%¯hŠ|bˆØÅ Zk‡•‹`’ð Ì:Qgeëì/T˜Ï4¹õÑC¾¶¼ ÀÁÏIR7¹ZUá2Q}m‹F±I¤:„òxý¼Ç›íIžFÏóvU.ÌA‘JGËn7q"í¬5WÚssK”êš,-×lå¿Üƒ{yžz;ðÚÖû”{‚«šø:ñÞC« Ó3‘ܰ^êqÆÎm<Û,Â7©1 ²4_RþôüÔ4÷æÃ­ÞBgÌfLLìlÊFäš”[ö7–pջе°VÐé ¡!Ý×&-¸¾´Xðå%dk–Bɾâ®jÝc†AªAu‹½óµÌEDzÀ¯ý¼låwe²ö]a…Å(ýDù‰`g­¬D(‡¼%¾±êRΚÜ@²toè,a­hª“nÃý;,³,ú+a\ǤTÞÑ{‘’çÄÍÑ…ë¬)ÒÕâ1$¡üþ™xÖÏ¢ú +äïPÜV ’ ®9» ˆþ¥î½Eø³ô“ÐÈ4g±«×bTÄ[vg¿Çv+K²¸£š i¸S%›lƒº’lGDÄÆÜê=_#ìâ_³/Öè×±³ËÐú燪h áÇeì–ãŒ*øWzWˆ­ÜtÁN(v‹-Ý™ Ù°Ìj÷" Ê¡cìáõ¤ïº¨(#trz‡Þ?œG=X¼Ñ­Î.ôÑþ« V…—ÀÿL«²½E +W±Âé í.Ë +õ1 ý`'«5–âëtyI+ƒD9„ªÆ:D7u/”D¦mw”)¢ýÌ k36I'ÎyHgd·,«WŸéFæNoûvŸåäFTÔÀI-%P¤TŽÂñÔ÷U`Ë·XÛâ|¬9ü3ÑÓ˜F¤Y§2ëÂ߃ iü†z²âÊ»S2H\D±Ž@@Ä0"”TÈg•­u»0à:¾j3p}vî‡ Q‹¾™›ã‘Sõ-Ë +!”æêÓ÷ü~¿ 2¥/ÜÀmý¼´!Õlª(‚U +w÷lÙHªÞ·$[ /áÂCœL(û<ã[ô3PdPJ_Îðpi¶å„ä½Î!䢑½Q?_j ŸñÅ|±bô8CgûëœInS»'A–y›@›ž»‹w`}&Âýœ½ÅÀÕ£%lÙåøðqÜŒð¥áücG²Ð BN‘LW:Ô+g³…­;Á¾!Iå{—"mUŸèYݱØ"Oš"à÷YËÛÒéQ7ÕS@ëë—‹3G Ž!4Û¢-Ú~Mn¬,2ɪ¼ÉRU£¥¿ÐWfY/u¡ei„ÒDéRÍlªfFuß<%õ3‰Â™×’­‚çã:ëÓŒYú·©Â_1É«… ú²m©ê(‘A1U—›-|Õ/¸ée€}·ã&aŒÄRô,¾ÿ¯£åÇÿ¥§Åž1D@®Ôõzt¡·Ä7jã¦!ÍЋژkù!ƒZ¨ÐÊ–×(I¢Ð¥64–Y‡ßfÒ' 0¹°'ñâsúx‘V!ÙíFõJ ÁŽ2]±Íª"<íÜ® ž8 D²ë{òaÞÀÚë )†„T׊–ò1:‘$SHšZ¤ªÐ²9¶s‡$tQR‰b ±•š»V+v8a•‡E†5Än¨ácŠJJaálTšKÎPm!?¸¥ó%ÎbòIÄÛL‰”s@Œ‘é“¿¶íïöq Ÿ¶´´â³aË« èû÷k937Ò$q—ÕÇ'gaNYs•ê“+¢•7K µòII£[OÜî÷Y! ¥!D}ªÞQâC˜Û2¨)Ñ–E®œ®)S‚™<ûÇ* [sXq"ÔZœQB% ²ÓxÒàæSZëFպѦ{ÞïÇíÎÀ™NެÛż+x#þ4)$/î3ó5¬VÙ’[EBœ€‘;¡1¼ÿæqM§¤ $ÀY5à†ò¾a‰oÒHš’a{DcRÒ<" Ò4PI9îvgšñê£46DøÏC0¢}«„þ0f Þ p/e÷×ñòPìÚ´ª„A;x¥#ÇPDCÄ;É*¿¹ÅøhKT1 búbà›µßW³§À‹5KªœU¼f7°¨œšq‘Ж&…øÆ Lð3«dý^eÁ¡@a Ää1tFšUáM×¶˜#Š +î¡#ëyÅÀTß´° +ó +on¶×/x¡´šaLÓ“Qï ™ÐÎÎÿ¼Þa±…ûKZ©Î2µ³´7·†Z5@Ê`‰/[Æ—ic²Ì¾&ŠŒ{WV‚ti]“.D0‹ïyaO¬HÇÌãÐ#yOÍø))ïü$éŸg¯ATéÇ¥Ùlz©ûª; $Ö»ÑzæQ**"§•ôÙ¥ìÞžyt¼IÆ¿bŠÕ¹Ÿ¿T~h$‚‰TóoAÍc쬾 Y¼þý)µéz®àNÀÅhkí¸b’-Þ©À>¡N¶“®€“7$ÀbŸ©+÷˜Iï)¿Ï/#w¡î‘Û*¬Ãèª_ î +”¡ÇîƒçÝÍéck½éb¸+oå´Cøç“ã†zV}^mÏÑå‚/j°€s±ÍnL¢0BÈaÞf;)9@u+Kš¸àÈõ¡4ÏæåaåÆV"à/ öƒ¦Ø-ÿKIÀžmC\ÏÄtßIž¯_†íŽêEvR©æj-FUk3¾}j³œoß)8`梲ϯÀã-øIs‹þj(ŠV .–Â[ ™•í“ç²\ðÊÅËC!®d£ìÜW®DÈ!ÊofrC0{>’áɡџõLƒ)Ð$8pÞpšV<ÊnœXœ÷Ô ‹Å3:WVgüÆûÁ»ÞTÇ´9='7]Q¾„60©iÝÍÌÝ÷´Ç“IxÝŠ[B; ¹ËØÍVÙ2¶­–ý(»5æw‰OÇ‘¹‰: $a»Iñ#je³e(‡jÝ4î’ 8Á1{œQ¶óZ§Ÿæ™Tr}ýrÛ^l¶øB|W¨í°7‰ÕÆ;Ø\s?Õë(;°±[ßʹæcµµð‹Š¹¿?k„? íhûÀtà9ßü Šp€t`äÞŠ}p•ô Aœê®$ÿ!H‰GU}%BÔb* ЮƒÕzÀdQ‹ûß—•Uüeb)Î76 ÊÛò„CqóóOU8æOÃçBJ Œ©DŽ¥­D I{Äo1–À(Wó6B/ôïWÛX¼'€°Ó Ö§[;kl·È ÔpËV°ªšÄÕ”Ö¢B<¬€¼ÏPÜ›[…d.Ì÷ɇ{Sooúvˆ¯‡Ã7^8|çq›„ÿ¼P‰‘¢Va'ui©.ª®.— ®$@N4þ±‹0N eßqjVåNVºKøß]‘OX¥Ð÷-XÓº·¡g´Íç¨IΗ2¡YÖKeüHI (–µ²]Åx^èðhY GXsÑŠ=¹wǘ]…ªø Øä—l^¯U¤*§û_®íVÔÌ¥k´ªÍ÷¿.•´J Â®Âåøõ{˜ +—7\€¯â-èÈÇ(ÈIKZè”û¸„ø@»¿\åý(©M %†“]ÂTÒ3Œè”ÉA¦À؉÷ºÇgY¦CÑêÝþ·Ò8ûzÐ)%£¸õÒ.þ>´ÑKhÑ-jDÔ>li÷þÒn;Ç:×ň"x¦º*@+eò4OÂFYü”›iÐ#䔊¤Ôj£F«„fæ®$âí5Ú²@Œìe0ŲDn«þúÓyrZ†w“°| ó—a6ð÷WP!Þ1^8ö’> +%_4ô)Pl¸vaÅ‚›åèBl?x½½ÙX–Ä tƒYú8~žš¦ >Ðû3¦$nåñ§âŽ›ÚsÉH(a£Y­Ù§Ù©PKíyJä‹ Tžˆš À íù¬ù|Q%²±–O1¾ÁLâ|%^TvÆÏ[TòõÌŒëö™³¦Ño·x…]ìp\ì‡SÕÊ.ÒÙ±jyv]èÙæß“ÅÂxòçdKs7Ùª5@ϥ諤èÜUoÛ 46UÐî˜Ôr>ÿÔ‚î*7´W½g”f~n‘x¦­Ñ|%FhU3ð¦LŸòýmßy‚-? 5r¢pl­!oAWŸ*x3õHKjÙ^ªû^ ÿL¯šY ܹ¿É +x›@ zÆP÷ªþ³Ü5æ"ĹD¤ìSú*+ûÿýß¿#‹ô#Õ7¾†&•(JT“?Þï“ËÈ«lû›¯'Þ;†Cî[h»S¯Ê‘EIÄ´ÿFó N#ð0âá!„Ý úñyÝäC‚ˆø=w¥Dó +Ь¢ i׳%íFäB‹ÄHœ +ÈPuášÄ7pÊ ˆqÒ”E³Ž‹Ð±]ÈrW#² ^ÒÔ˜ô•|oï‡ëÎ5âô¤¤’ÈàÉF¹Ó²˜)Ùx¡fPì^™„\—ÜœÆØØn¢»aû>§ Ûw´™8™‚=í9†²{<#Ý>ÅhaÑA×=ù†^@{|[6bÄHË,I?–þFmæóÝ^ë“,óø,ìÚtȪí}b¯÷¬¬‡½õau³Ú“ ô¦ÖôcÊT“Ÿxš*=”³íVŠ £xöŇež%z"},kjë2JXÇÃujÇ £ËÙî<®ð7‘”/šüB)àBSûím_× +õ#j‘ŽÄÎ ½®¨ÉKš÷|j¸t Þ¸°wB å ×îU÷ ”(¬ZRK8…€ÊŠOøÌ0Eëf 1Ðlì„}[s(“è”Í?Kž¼og^J6Î%¡²k£lEžòWV’a”±…혲E¬KÇ_XÛ G >YRIæª'(mRÕâþÇ0K†)e‚[‘ªËèø°¶‰æA‘Ô•o$Û>´³­%£ERªñbÿúJöÿm1a\‹èÅ4uæÄ:ƒ}Þg Óþwáâ«$ºqnN¥é–ût éÙ,‘§…#ÁD +J³JÂÚ â†”¼PÔ´`Š»s'8Ff´\Êö 7xKˆ¶³*ÌÂÝ¡™øÌðÜ”¼ o{Z—&Xª¢“„É]ºPiúµ³ TTÉåï¦ðåÇN¢|·±T\vˆ±uéÒ€Ltr *ÎéÓ®V9TæuêÉŸöš¹CÅα +CT·|õ-‡øŽ0Sx~÷OkÀÂFÍÇq„ /™…>¯«xJb š +^ÌéwûCQÄPt<<+,ñn„þ†`öﺣ`³*´[áQÈJ¼<¸±–ŠÅ PMåÜñ0§a„ŒÌI~Ž'±Úï^ûƒ;ÈžFØh&ëN*³Þß¿mµ+'…E‡ÜƒC QXHkÌþõ+Ó©ëVÖƒŠ°€LÌ›èæ¨Èc©~¼½¥¾ý„E‡ŠNlœjï–¥›I@¼|Pñ"ª&œ£Ïâ!g߇”€ôèÍÕýiµ[( +–óúŠ2‰#igÂõD|?ž_’ì)È®T;ꛎ¿Žå‚GcòrB‚@·¥Õgî˜hȶVOÆ£`Y‚u 7­ådsÊtdS³{l +¿¦'íâpC¡bˆÕå&-¥Ml6Ó ³bÑ5g«5vPOÀ¼:Síó§ +*ò»÷þ ÆéªÂÿVõîÛyÐq2FcPµêøÿîÃgWA¡Åù±AýÌ>%†3‰ÁMN:cêv‰P—ÃÞÔ„£ß’Z¡€Poqn·w$<>Î\+oÙÙh€ëÔO±³Æ`±!üȘ~îïßש³’xð¦Î8"nÌߊãB"4Ágñ°QFŽ_1d2•0·Ê)–‡AƒOç¡Fó]#gP$r&‡GwË^ Þ‘h– Ž& ‰(Ï!”Àb7ï(DÆpýÝÏ„¨·x¸’Йåv¦ß¾ö16 +=­)O€£n´—!\µ¥\ÖGÉ¥ÀÛ ë~ì4ˆ¨b-,Å´óâ¿ç|Té –$äðU­l†à"»x³SÂOVMWÔîœ/4}cgi믟_¨0ØoÛ_x×OWéæNKÐr¯pҳѠT7;ˆ¼Íø¨â¾„>Ww÷ÄFGm ]‘yW÷›`h>2aˆËkà~ùÛ Eò'ß ‘àw·$ÖGôDWŠ[ ȱÊ qto>ýË{^j–~ѧěB V¾n Qã¦Sö4usTIæ}×±eȆDÛk_Í›¾Éþð÷Gߣ‘áv.¿릇Jn„m áºÙôV?m`÷оk/6z×lèÃ-Ɍݑcí_xïO›yȶÕ?ž™ÅL¤ÿð²Ú¾™KH¢ihêÈá_$s KJ!à¨é/w¢œ î¤VDuÔiìB>/ ‰ 1vëK‹‚¾‚ÆP)Ÿî$vhàÑä±½r Û¶ÑÂÀ+Ÿþõ‡×µuír²I¥$d +ľ[&˜GR5wôùn®‘Ö­ä'JgÂ#`kRèïX &‰î•™nIEñGÂiâlê"–™uéÉg;)Ö“‰ªˆ·ÐûN²8äó–µÚ~b‡úÃÛz2’ªÊ-ýV5õ-Ö1$:Ë€$žkù„‡cu¶ƒ>4‡¨â@dáO}r¢ÆÜ5¾øKÒbÎ¥IË#z¾&Ø_œ?w[aã‡gg>„¶ûõÓ€˜ÀéÁ\Ïï^÷q¯iõY$""]Y’iÐ3I%cðˆšº–ì’oI–J“»èÛÄõ5©(fXÐí£ß~J®SשWp)$Í¿~~ÊÆ^2e‡ëƒ”=™’ øå:)6ðÇí¯?¼øk/1§ï”Ö,rDwÖ×^B”õeG¡uQ2 "DAÝéÓ|qð'Diû ®á¿tKK„2Ñ fobí!z9Ž›2Gx©J¬¤v^{I!æ—Nhî}M$FXð#@ðO‚¿}ïO^Vr°éHlj½ô%üšu\68­lè‚„k±ÚÌlѵ€ ¿1/ÉÞ´Ÿò a;1ñ…3¦ê=Á›æÀ½·¾~|ÂöW¢º· ô?v2"Æ~·ÿr«¢”Ì$Ó÷/ýJöN7Àk¯*è÷;³@fyŽíàÕ üéÅ#qÂà*ŠÐ²zV˜¨#m‚VC‘ð“ª^ öH‘\9¶æuFº“îCú®6ÌE/å`¶8>éa?Å2òZ€R7•|1$†„¡ã€(ÓM†]«r)Äø¡ÿøŒ]‚ ߺÄ|› þVy¾ïæïC}A柗ª(ÍþŸ_±Ób°7õvÿ8DVŒ‰ÇSb釡J}µ2˜T3e3þ$¿D\‚é/Qf·¬ÌuT 5¤n +¡fQÛ¬ï(. d:!€à÷:ª¾Mµ p©üöÛ÷v2§;Ü)\%¦°[s~÷$|¯¢ÍÄíļÕÍ¿K„=êøÕ®ƒ$Æ"™eÖº»¥Æ 7&Mpx¡êïÖÏjB4ã!–I]i þ ubºv&¿ó²ê"È%mžlC,^¨Žá¡ïßõùzBpvNh¼Z3J"É+ 8äç=½ˆFè§¡NöŽêÆÊ¡äîÉ~¬Ìg±HD9½©b—æâ’b +ú:†b*†CìsãÔ§ˆw‘mW½Ê>ž:fñ.•ÏJ¦™CªD‰h:v¨¡ýK7šì‹Á½}Ù’6Tr4¨|ýaâ>6¼)1ra2n’T“ÕóDe?rùÚRmRú†_Í(Ðò*eò/Qž_&)^ ÉBbÛM_7’_äi¬Š^¾ˆ7—CäRºè2êyKúŠzê/pRèÙ‡Š‡Ò^Ö-¹`Õ{ +] ®1ǃ®ÈÑ·ñ–bAÿÝÄ=& ÁЇu—Qp­c'“…Š8ˆYè›2÷_CÊ¡CY!HÈrHÚµ›ÏñKa¤éjPRØGLv€ÁÊ¡&=tŽ &hŸ\9äž{§Hby¤hO‚]ø `{ÛhdL!zrSFchSèÔÆ2ä1]µÌT“ª¿GÚÖ|š_|ˆ â]HŠßÎ嫊èÖEµLð5=mû'©­=¤žÍÊaÛÛåyÜlZÂo^â±)‹}îü(½WÿšD/#òÅŒ_,´gAjÓˆ‡Ë´Ò»Ú·YÐõ¿¦óäÁ2®Šh|¶¢sá¢"Q„Wg}õèèr}¶•Ñ>ÕÆâ'לª”å×UŽÏÝùºqP&SÙ÷ø‘þR'_%(¤#¥a¬`,ß—SQEìb¬9æ?"5B„²Jì‘ô ‡X,ê(^9ùpT×eE¹vÕLˆAõ“@ŽAç1¤X¥¸rû>iN •MžŒ°0Õ|8[|äUÏ` iûQåv”Å„¶]>åR¶ðìÆÁ!ež§OV,_nÀLýÐogóüßþû¿þû¿Ê×ÿø?âÿ‹ÿø¿þµ¾þ§ÿùëüŸñ_ÿ—ÿû_ÿ¯þã¿á?ÿ×øÿ;ÿUüOøÚ_ÿÏ¿*®¤îð|e%u°¨ˆ +v9êHˆy÷´‡²ŒÓcÊ3B´2’ƒQ`Hhe³øû·gˆÞ\Î%*BÚu&GŸNîÏ^å­CÑ­r´„`vø—Ii†4–‰þÛl¨w9PgÜÆqœ¸&ª¬§¢>TÚóIL}I©ú šÀá.¸Ùö „ºÖÜ9´¥”…\†bŽ2¦²—œ,ÿœÚ&.ÀÞ„íÏ¢.º¬^×ø§"JÊ2> #É8ðjóÌ+ÐjB}Ö5kã8žZ1ŒB¨É:ÅO„“D/ +gÄÈŽœ?)UÄz“S5{”¤€a}lšjü’ŽnOÄïgû2kMµ[ÅÙ«ß:}SÒ˜ÚþJ·b)Ó‡£¼–¡—7Y–#äáJ–ª™—¡ExÕ²šÇ„C.Ë\;Ô`å×·g¸w¦ü;Ct ± TYg>\ŒK +YMðlá³i‘mYI±ÊCå:00®̼HiC½!…&Ýê€}Çfܱbe\ï;‰†bK’„^ÉkÌžýÖãÔbl­î]2’ +iö…ÌCºùAa¶“ô®È`ôß2©ÚYM( |æJ@"ªgÿãŸC¢ þµ¡T™Tq  “\,y(†°FÀ L’=`•k1D˜(‚ +¾÷L´ $:‘5†bš­fŽ…*ñ ²Ä{2ôj11Å5³9D^qœju±Vu4 Çp½qˆîŠýmq¦ ùö§ðqf 1D÷¿T&nÔA5?3ÀÕù"í®:ÙÖe•”!iø®W*Åý­äØÄ×ECÍшI°'ú†âãÆÐ|±©žu:‘2Èä®È» W„ÕàΊLÒ€cŠx§pU†‰•ºU¤ë^¥ïì¡[©¦§|{‚_ŒÏdºÛ€TYáGåðú2 ­l¿ô®ƒUz±‰:†V6 §±¯jÚbN’Ô`,îš²ÎøåÑ¿©s~Ï~ö³L£(YÁŒÁµ“¿–'>`B›º†œüãI›¡¦ &VDIÊö뙜„qh‰…‹ SdyƲ†Z–“¿=Èá)ÔðâŸ@XÀ확`ˆ˜ßmy󱿭\_ÜzEþ­FÈx4М¤ºÝJhsçUì ×@–iت¥^°€$Ž0Ù£©ýS—´›c¤‰¢ +‘Í=9¨L{%÷]›ZÊÓœ…µ%»Ê4ÿÞµ±¾¯iekÜÉT’>›XÞùnÈ·þODÛ¤ˆêÉ®À1þ{Y­%`¢¨®k_v“ÊE2žqÇF$Õx˳’$ößú +FWSÌOðÏ/ýsI9ÁÌéGbµù}ÿ]‘{±ú> ÷œ™2(ÏW­z¶Ö\g¥Ó ª»Ý°°UhzŽÍsl‘™j»W¨n‰´ôD+Ô­°ôßgû@UR‰ª›¥ÌÕl[ò‚,|1*æc‰íÐgôx€¬ÕwØ÷–¼Tö¦¤ÂñBnsfâ^< §2ãpÀ¤ÈÔLYXÌ0B^÷b:R»9׬19-Ïb"¨&‹£’O ÒøøÝʬ,Ù§ +Us ˜ ‚„A.^LJ*”"ÈHè‘!Þ(÷ëoèU Lš»Aˆø‚ÖŽê7™æÁKí…jaSr¬³¡9æñÓ ~mq(;§õ‹$éçfÞ ètD»Ä4Ä$ÃÓi:˜ŠŠà´ØbOÇny –ÚìïÔ%ë^ÁÀ6 _Æ4ÝïÞÕKaå!]Ù*ó¹ 3¹@P±Â6ÝR¹óÃ"¶ÍØÛ÷úLÿ:锞X{é&ˆ ŽŽä™ÂÍ™öeØëG®}1n¡ÇzFøóÓìÌù_oŒÁ:Ô/0Å¢Na€´Í?½æKŠjSÂMXìX§m¾¸â‹r-q4Ef¨úövC.c +¼³¸(:<Ãt+…åÂwÜÝž¡ÈËU§W0òÁ~~®_ÑŠÆ7>‘ái¾LYèøßÖuiþR…‡š¥°‹ñ>çá[¾}Ù~ã|§¾g=‰xê4¡p;rQMV‰§`Øðr_xjÑÀ9ÅžxÊ1Zuf¯†\ž.n˜6–ÖŒÑP8}š£Ò¿8_*B¸"%Vúï‹ xRü×Á¿åŠÚ›ErA9ãö‹Nwâa¾Ô ÎëDA?Lwxb°ÓR‡P!|¼2Þû1½‹¡,ñw!,4*™êÙœ°ò[ï”ùÝÌ='Iª:EœiÈ+žÆ 0™†YÅÉ#©QC)FÖ±‹ÄÂ.‡EÑÎçÙ¨ÅM‹¤DPx;K + ŽN|Ï.0Õd°£Ý­Hn¢»ÕJõêjŠ¥8BŒ…±¸yÕV§ãOmrî%á^XR1ˆÂ(@R–9àE¡N5­“øJYÕÓ!W¿,Qº¡u×K´°ÝˆÏA-Œø”^K”ºxeà•[ùõk¼’¯ü#yTo»]¸žLpdÌþI‡ê¹Â«ûT™ó¬ mƒ!&8©îö‚Î×9‡vrz»=ƒWvQ×­>)ô¬y7åÜVv`¡¤€—ï}.Ӻů<ÐJT<Ã~rˆ‚‚¬¹Ýߘ‡©!ÒN¢Y`Yî#){zATly0"Å”¹„†ãoOµ)¿š ýþ £@C§•8iÍ JüBŸÁÿÛïñ 2ì©€¿G‚wð"K{Ã{à‰9âØ&'„n Te£ êZ̨êÀ  0Ö·!ËñoýkÔíÚçºûØwQCo9¬¿53_³!9dÅúó9tp@߃*(Ø]ÕI,¶°×ÜÿÊ;ÆÐ|ÿÖžk‹ÂW¾úx +Tcne.:ÏCL€'Ä‘9½ÅÂÕ”Gê,ðaHÀà6ÍŠéÃ4ÑT”ÝÀÃ9” ÀœÛ”Ü…u(á8oŠ&š ‘F°$‡f:©ÿøï×Þûy¥NE ñ‘³ü!tªaŒnиdÓ”wÆ0ßé@uÀ~4H5ÝA¥ò¦t^¦§^éÒþòZY·p»ª<à>‹]¯i‰LÞ,îØã2ž/ÅeèFba‹Á`²ŽÇ”»Ðo5Ó±wlÑ:GO½NM‡ãn1ö 9ɲ'‹œ ',Ñùdúàp‹Å…kÉä‘Ä61%]Zs§%¼àÛùÿ§ªL5»DØÛ(d Hd² XØÐ ý ”ýKY»ãiN¨ »l +„‹³HEË m26¨µp­\¼¢Þ9X· o†•fû[ÂÕªº]¥ÖZ€‹äbý'¨4ÎBYO-Wu|tê·—°`©-üŽøúñ¯èj’7_‘’Šàj*swk’`Ò8X‹´€qé&œ,É •Ã}‡ð{Uä¢Õ¯Éާ0šeçx«’^ /h]w 6ò‚0Ô‘Cuv±lF«ã; +߯zxBÕ &¹1rS~G&‡)ÿÃ:4»ùdÅ’ Dk·(3æ‡%'Ú + nK0`ùÀyÙɇ.ìy¼ Ô¶@ê~kwÁ/–ù"0-õæ¶€µÛ²òÔ76Õ܎s!ˆ«;¹«ÿ¨¹a\•Ž[I-«ëú%ÍmñÚ®ªkqZ/ÔÍÏ)¤†˜_ƒÖy"»Do9¸ÍÄÇÆ|’ÐE9­¯’CCdJ‚œþQîI‰µ-=gy@ÏþÚD€éz{ÈR`]L²™D0’dw&+– ùgCvïûJ&ÁpSX6avÑ”HQÌ ŽbPþN bä:Ý„À23vñSð”ý¬;1dõ/¥ñi—&«‰#8H£T€JغÎKõ—£ð‡ƒ°Jkš´Ë-%U¤6ì•gLXê3-¯M#· ruÍ~«U dÛv’KÌ06ãàRŸ*E@ªðB%Z§”b8 +H¹™¦ÄUtþŒ™1â-;vÂ)†ÚêZ¹sÿà|ÊUøŒBƒgäJج[1OãåJn ++K˜íèóƒg ×ܳŠ#NQ6ÿÿë³G¸K»¤àõkјr"l<¡P “Òê¨ë“ öÍ,{<þ5e¸bVsnâÀwÖïÞöÑ K a@€ÑÏd\‹¯!éƒÕ˜ ‘ÓÂ2×jžŒ6LQÄþ”0šàŒþX_[Tµf¤(I¸W.|vrë~-i]ÓŸœ\3ÚÜšu“´€ÔßSý÷Ýœ²q„®¤$þþÅß¼vSã ¿|’VYõP¤”4x¼mÈPs¥x›¬w&3f œµ…´+ôÎ=/<‰Û%ƒÑéhš´uNn—"ýKˆˆø0/Yå%{=rå;x c>˜ðdy—ãy-oqb?æúö½ß´¸/|)2Ñ<•y­šZñ˜̕d¯~PâJ1 þ»Àõg7Ys A–ØÏ2n¾ƒ ¬—^uÛ5kžgGCmІÞb˜»Š P%@àŠzõ>µME=³…:鮺3ºré^$üÇ8ªÐ+sd¹çÏT©=÷Lt;zH3‘½²kª·l…þT£Ðm¸bo%1r¢ Ï>z0ÛV.×ã´ÝT +þí7ùˆTª'©"‘ø6ø•ŽÞ2af|”þtZDQè[=‰ô¥8º„Œ›À.¬A¸ºU·(cŽz=¾%eäR/¹Ôã¤"‚ÿIQ(úÍ@xõ¼¥¥Z) jo?[PŒ 9ß>-†ùÍÏ_yÖuJ( MJüë)5X˜%}±#~¨x´¾š6I]žÞq^}>ë.m&äJ“:¾¶¨öc"n-^Vß~’I>[~ÔónÂÀ,•Weøá$½hj(Μ%È}§w'ùМ zgrBùª]þî)¯y!‡ ÍùyØ–×d¤”Ilù!ƒÆAˆ˜¯Ÿ‡Ôò}ãÿ2ôó»~¸íÅ[AXØ e¾µ+^i õEØ„¿ñ»®DÎøÂšÊ#—d:ò"¼¿GD$ã¶_üsáÞ¿Æ»äQ®[oâ›ÞÒr9È‘Ï/Ã5¶Àò2:b|¸nŠûJª›Jœñó +ü7çÕöêê žˆ,r³'•AVMžýo'ì³²ø6—\çL‰Ð—~¶ÀùòKÂ+Ot$-ƒ‰*†eç½¼ñ"L*D/vDé¶PpšáàŠ¥ë“ÉI^uHåfŽg"*I€K€Ù6ü +Pðëš×Fáû·t?îRo’¢ær¢H¨†Ü¥|â­Î¤®RVë9n% Ks%ƒ³ìK°ýŽÆTÊ2äÇ Éª[ÆÚJþ•K ÿ"þ_üE–%…—”¢úQ 7’"n–¤<ÎÍÑ…¿´ÅL¿Õ@Ú–$H¤›«þá²eäÉ!¥!²ðßΗ§óŠL–p²8˜ÊQ +™m–¥öNXº®ÜË'½"ÝÇ0ä·Y·‰CTŠ¡6nfeXÑ œÄJX¬²9{ȪJì:‚©×9] ñáb¤>î(ð%œ4òú©¢ _ê+Œw%òû×ö¬S`âˆ$³~‘áÜk‘“`âØ”[ÑÒÔ¬Ú>OßõwGm;½+'Ó Ù-†åê$WCÃ;>÷fn¤Ç3&~=ø£×KúlýX'Q^U¶!ƒV58lQ¤"Ø=Z· xžõ73ýý{?Æâ“–. ÒEÔúº)^¥TkÛNòG4¥iV™†©žÊÃ4óФ'[€óz×:»áF]={OÅ*hV$Â2{:‹w_#;ŠÝZ­Ý¦°Þ y«X14ijϹù#’ϼäS¥:j¤eèJÖ5“¤ÐCa$TPo_Ÿ¦Çª`Ú%«[‚ê{§ºÀ§‹:ˆj…ƒ çkEç ‡8¯æL¾…ëk6—pLÚxJ[ŠÕ³>˜™{.vØjÖK¼¢ò¹‚š~ŠÝ| OSX ˜gF“ETB8–¦.ìðYNÛZˆû2qAÎ$²?öNCdÛ;8Ã|ƒª^ÃÖL~“HþÝ<>j ¦\>’xÃùuÃ1ØMÇÚ=2žc¤÷Óˉ«@v*‰2½~ľ»Ãdyµ¯a \ôEmÀß}Ëø”¸åéS{ºþ¥ÖE‘á.b‚œæš'#|€màøŽîå.’¥¡%<"†$¬PÌø_˜||· Ý ÝSŒší%!¥Á¿øuqÕ0i_(^ÎÔB[<еË'ñå®°߯?|’ªŽT^NÚltÀ!£CÒ0³{Ê1švŒDÇU3PUEúLrç¥:ع)£_=[p]:uò „3HúqˆÄáXÓ•ÇQyÁðyˆšRM­ŠŽû+ë^$UübjÆî4ü¥ºg± ©Ç±r·T“4¼£ñdB¹@ÜkNE°NA)t40w±kƒ–;°ü%ã§ñxÚæè¨@²q +«,Át3sŠÇ±(ñ«ÐJ.I|$E$ ­ýoå Ž˜ƒèXǵ¢¡ŠS;¼ Y]4ÆñóÕ6E{Q9#Ð,ç›M°Xè¡FÙwÄ)7õ±ZÕi2Âãw6&—,á‰E„C„r#’»¨¤TVÉ„,ú·éמ=œîWÙEð%øÊ£$לô&ªš´°{º¾ÌM½ äÞ‡ÐuÈÃðcVÇ8È*éšj ÈòÝ’åZÌÔ$úNå{ß¶EàO«ŽÅÀTvŸË›4Ï<<ìÈljŠÒUdöDßýã|Ú*‘t‹oÖ'}ÑÕRƒ6X5ÜU+Ù7)ð +JßÔÔ©kå2ѱ œE¥v&MÀ`Ä.‚n¡9ê÷ÍãNÖ›´4–=ÀQ"&Þ“!Ó4¾û.êÎñ"÷ˆ÷üF"5AÝ£¯&4~‹°HÖŒu"K‹ýòÇÇ'C¹ $h¶«4`L _ËáN"@Qˆn@|rÈÇÀ±¼ÎfCÏÝïk£ÚÑX&Rn°TëÞþ€‚u[Ï")+3ŽdÛ¯³èÍHûã'˜R´q¦ë´d)i8çÌæš»ïïᨬ„AùŠ0Vô¢°2ZSƒ´2ß¿5êŸR[;—2YÎ1Çõ¹­­EôÒO#â¼IW$â1ú€%é{àd#‰ßð4fÃÁ'CÑo˜èΰdƒ+_·L£ I“I[[ÕY^›a íDz€¶†j¾P%Ûf+Õ0'è(Ô™éÓ£œæc„é£3ÕJå¬ ŸœJeÍwvˆnÿXŠb¥‰T©de¿ ø9Žœë3o)Y7Ý~?¾],ÄVÇ4`™LœÜÚŽ²…%¤>ßÎéìÎÌÄ@€oæn!*‡×5eLÀˆäæà §ˆo¤ü".D|•zE5Ðìñ•pJxz4&^|Õ:ºŒðÆØK™E<†‚îá…Çlÿa©Wz©Ó¬x­6ŸcÍ»O²¸jÂÑ·ýÝ‚vû¼ñWݯþ8A%]ÿ»Oâ/¶…WÎ{:ç½ÌH¾òh¦îŸjf›{YÒ‘eNŒRÀü\f2Lˆk2Ú¨Õó;“¸ÆM©é¶uÄNÃŽQâì’^ + +°”F_µäa¹>EÇU5¿sÖ|Ê£ù=""íT¿þðÞO‹Ñ¬‹M=¡(#€#ß:Õ*ã¥#’³ÒM(‚#T'AœiwEL•—sÜù¥Ô'SMJ%Y›bkÓȧõ"},²Ö‡¯™7ƒAB—6÷»bP6i2²}K ?¦²KH6–’~üÝk?ÍnjŽÉ³.Žß±v,P¬Nc*Væ €lX´ºìUô~IO'5N&BÀÒöôÅ…sÂóANA/èËî°•›* Sêë_ä#²~^·û ٟܺ,˜A¶ÒÚÎçã…¥fÊRÔ[&%ÏKVJ®ø%–*×~kE!ÊC96ÊuÆ[ +žÊ!'yIagÊ)o›Y´$û̑ワ<0  Õæg4ˆ\B@cšÝAéŠ)àÅÏq¼êRȆ +:þßOäßÍp(pM¬!å5>M¢5˜î0¨ŒLV_#_ÀK3•àOWD-û­ì#E‡…‘ˆ7?\\…5Þiš’¼®”y±hsN æ–ºduö4 Mú†à¼›+‡šQTL€‘)/5Èo†]xg¾Á°úÃ`é´v•uù?LägžëÐsÒ´0âV1¬ÝÌÇ ³k(í'Ó .#be÷”«ºDÚÖŠ ‡5>[ÜoGŒ¨â«6+@êŠpµ—?"I ¹uI {'àŽyGaHã–1\käÌýá8[Ï;¡Ôþùñ¡GŠ.— ò™ùf¹: %–0T«×¯Ÿ‡Úüúýäý°„›°e‘q2¶ÛØonÑyàh`Ò +äüþ˜Žæ6c0ý…°ü¥ý{'ºÇ2ûE˜Ùf7¹aÃß²€¯tŒIKÐ.z¹Û×Ë™a +*7¢Ì¶> 3ŽJnf3®qMø§ÖQ)6Bb·m,à•qÒLÿ]b[XèDБ±ŽÜp0ËÖ ®É—P,ëô6Zæ¶ír) )šm$¾þð!Þw2[˜aÈ£ ö¯›ßɳ †:€‚¶ó}ý¢!iîÄŒJ®î³sN‚Ã…ÝHsYœ\dm€¨õô<| $”´Î‘jšÞO+ýz¢¨~<-b»Ö@&7†Ÿ¤o‘„ª? +¤kéšx@ §¯²^ŽÖÂbEQâÍkŠ`<*ñQ÷ˆäñCCî FãËÖн÷ÝR‡Dülu⼤‰2H€÷Çú/%ŸñÛoóO•ªÚ“xën-ˆ²˜]]CPr¥ÒY5Âù¸ÇuTÉ“·) ×î%ƒ:•K¬íÚ¤ÅûÛ}¶Äs£§ªq”„¦Ó¸r2ͱm¦ ÖsŒ.4ÀtDÅ !£ÇQ/*Þ)ªh¹n¿åå,4Âîƒh¯cÏX‚”Š0ebæ“*­[œÔ$ÆNZîP¿a€ÌU@»Ì¢$-Vð)71K¹yK5‘c4z i™n(pž5ä;tο°Ý3ltÝÃ$Yg!³¯iêeä¦x1€`£VX›9Œo +_}sH”Ê–£=8µòÚTxòß‘p.7ãRP¡—Ü“„ªu•(´ãÀÞó˜i¦5á@w0Œõ’bB›îaìóÀ+Qª5N#šÿJnv ù Ħì©·›Ô¶ xÒb½äMãˆS, ÃZ¬ÖŒ‰U˜àÆ”pep +l螉)bÞÉߨb<ùįaP™(ö } I’²; ù5"'ýÁ˜¸þRríµ%ä Jû{ø ÄžiÕcã•D€ŠÄ¥¥< Ĺœ‹9¦ ¼qx…t]óˆHÉbÖ×ö7¡J)8Ÿý‡f v×`jMÍÝX¿Š;J¶6š4Øç¼~þ¢Ê'Å+t­;á!ƒ[œ¤µ¾g+bæ^€4£ŸùæN«n^Ç‘ÊZw’·Lu6·×‰¾¤›¿ö)\Ú„qZ ÛÂH%+Æ$²»H‘]Ý +a4U8e‹VP ±²vc½Ž=±ü™“ä翨âBˆ(5³'›·}¹Q\ 3ÜoS á‡Aǃ®Ä•rwvSÑAsrÎO‡žøÐ·i:ðÑòð;Ðôo®h_Æô3~Îð§äߟާŽ&Áb®›²º•`جbG:²\× 2`·'ì˜:JÜ2 ö\E^@Ȥ¾Ô5[ ¬{ÖG»5äÐJ3‰‰%ÅóWQÃët8oÀsÜ¡a@lWöLƒ?‡Š\’¬IO¢cŒÏ‹/»‘O…l Ñ'ˆ‹èúd•Á.ÜMGÜÕ­¼"^¬ê–XÉÕ€£ïÏåŸF®f1΃þ<;JXóàÂnF±ŽÑ-÷ÎOQ ¶­Ô¹Û½RÐÔR^Weàø@Á%é;jó{1=ƒ¤ZyÝ¡@ÿüM¥=[v¤7ÛÒh Ñužbô$ó–§Û×o_ö‘‹üƒÇH»«lo.ªVòKi§²¤ÁÂUX†›+j­<0›lÊ‹ðäÐÈ0Þ)s}‡¤ÔÁK˜â¢íF»À0Õ<ž¥–Fò’Aç°?Ÿ¹WtYSÝŒîÐõ>‚ð5p¡y’¾ý˜êà˜]6ÖC씦•°ì<К˜Âïðò´ü~þ>ÓKé.*)û-jp“f£ +ͱ$AI£ ÁMÛKÔ`íè¯qFŠzà s@ç¡à7%øu¡ÉÎÆfIožìG`TsË¥abáU¯TÙ:’â’î½yþÄœAêL:Z‹ÍÐÍ*λ%ƒæ)6ÚC2»'Vy.›¢ic nÔ”:âËS²%,ž‰Ÿ›1c@‚tP f'ÊOSþ>ÄÐE)fìV¤®rÏ/K<×Üób#ëE¨˜°ÐWTvÙ(¡m$ïÖ>½¤¸Æ±ÐoÓÑ›5R/':R,zÔìð!h\ +Üôp4>ýhäo¤ÓìÙ]Qùkø_u¤ëN;2t˜7pi=;"V;œ¡ Ž˜åÑüvvࢡ®P)çëSøfX‹8}Q&F4ÑÎý¡[†ÇôïâØèÊ»¯ #Ò2¤«ÆH¢†?öžÁ^²çò’¹GóP¥Ó0[®µ®ö—¡ô²5«C<8¬f¶*ÚGªVuð<>Óöí;ºy­áÁNid© +V»Œi½÷†ý–8±f¶ãŠ`CðQ,i| å9'qÔÖSž$ý¬*[w…6§ùyŒ‘ /BÁÞ­œ)!j imë"·Ã;~=Õ®F攑$ª>?BVùü`oÀ«`ÙܹÊc°óc{ÖÄÎòœè–.»—¢‘œBñ![yÈUÖ÷xÝår«š×(¸ÙÒa Ÿµ¸UúûoóC÷-#‹ë¬àXûœƒ´ChC˜T•‡=| N ¿ÂÎÝpGv{Q• +ÐE +Ð äÄ^Ò2ÔpÚÈäV!à#¥Zå¹Sµ¸BZö…”sÿý¢ÿú×σּþáüÏ)Äüõ‡×}wQá’zŸa%¿1ÄpýZJEb®× 4±›F·^`ýðˆ‹ïùí딄&”4aa)Zß?h»Qªg»ž%° ]°Î÷Oª˜l"ysC»£%0ɵ ­^q‘~8øy“nÿG¤±P²¤½@|Ö4¤ì2Ù ;é·Ã’ù§è»c‹ðmÚoKgäPf©u…á–€èòg$ÍïÍï©–­[JaŒt t/K—Ýb1#Nž ÓÉ莸û÷¿ØÈS“%YM'›8sŽX=ìA*]”‚dáQA‹ÿ£G;â´Ãà€a›Ø¾¤qØsÀË!ñþRÚ ÙË.êšùi‰Ù $© 6ÊÐ)ÀK£Ž•Àœ3hÛ)xÜÍ‹c²-µ¶ÜnPøë+ùø¡ù!Õ–fšºÌÅØŒ~2«”ÂãP.­y½¼Áb"Ž4 +˜'I\—2‘ë,UU¼òƒBVÊNÖkõξâÅ›?oK)¿@Ö‚«µÔ¯ÔEÔ¿ÔÑR“ëÅòKìA~e/ÝååQÝm8òÐw©t„Z Bcø„çí$›¥1ÑIiÛ Ó«ëTRÅP¹@pXRÄ–J÷uY%N3¿¬Áë&¼A Móæª™lH*ú·\¸íTŽ-Ûhóqt.;oX[W›qQΣ¶r…‹ŒJÈ bZi dèÔ§^…ò|°%‡& €§xÅÕÇþظeáVFÇN×ÐLRñê–Óž,;3…ÛæÑçŸêHÀѤáaXoõwokäL³ø‹ +€EŒÉêI»&ªÿT*æ ßëq>ÉÐõÑôŽ™výêùŽ×YD¼6õ/Y:g¢q™t©I¦×Ä„/a£5èMøŽ’E ·Š’h±Rb +ô òFÁ’ßùØô¯ß¿­çbg«¡¹-Ù­5ÇÅHΩÔßt§`7)çÐyÌ=\U1þ£NG¥Ej´i7?aG(=w³ø)0¸¦&e«aïv«ŸíÛ·µ¦úÈ}DÖ«Jk¹‹5Õ{ØrND‰6É3ÊöJÒ7™<Ü©Ä$_L uQQ<.â–‘¾ØÓw 9yÎ!†tËæK$)K[Z;Nur`€·½)"81GW3GW?d³”ÖÐV+½µß½µ'å©^3¦Ç?,UPKú^Cê(:²§Œ¢&•–3©ÕýéÖK#ðé®{9ºbq°“¡š È,ç ½¬ƒé:·1]æ-í)]5žRÁ:õ`ù+ pÀtºå™%Uâ +°fH:ºû—‡ÐŸÁ –ýcßø[¦vT4³t°­ã„¿-.¦†Œ»ïÄ}„¡ƒó¾#ÇàD³0Á›y§’w¯ì•‹ß€Ÿ¬ –E–÷ÖQèôзàSv‰yðQ ³kì:²P ÌÇÀàEÇpì“.`hLÚUŸ\þ2Ðã‘!9&LgpèÿâР‡D€)–H&…Ð÷ÚÌø6-bówK©ÊQ„`r‘ª¦»$Äcéåö GÓõUCª7Ä;]÷°WËÑðÅW’q=ÜÜš[â[³å$Ã@DeÕKìãêèóž® v¶¢RÜ#y6 k‹ˆA$-¹|»[j"Û×H0d!ïJʆ±$où‡¡•õí)çð§’ 3¡)CY ´ÄÕOmÇ¢!& s˜f»P3VŸbUæàþ@Ä!P…Iœ:jxÇžÍ&HH4 šF²a/‚Á*¦¿Ìl($p5b!hÎ=vsÇ?ß­˜Jk»Åƒ"78§oö¤[Ê%ûMÔñ}ìXò_Xº,ÝwI¯Ôàªçc ´ác]{øœ³Ù„ªÛ“ÏqõÐhÀRb‰7 +tÌ0 „=ÄNi÷QqÝq…’EG*'ÝT\? ÑVžW“¤BØZ² `BÎZ†.ó –0—dåiIÖ ÊzÞ©]^’6­Z2’jÂ’Žýa›s·H³ükyzõ³%+E¢ãG¶gÒnB†Õú¡Ž0DOŠ×þ ¾ò˜Ü[À}&'YUÓ”eå‚o÷Ýì§$‹ð“à6}¦DßÓ @ɵړ&ìpý ‡"Díkß]ŸZñ¶‚Ã4J2‚ÔxÓÝg¼cl9s#¨6HXª 5NÃ÷ˆ¯EoäçcºvˆÎvÏ€kïm ÙšîŠÅ•Ž’z«zã×ud¤V[-LŽ@&?w”°K€Òž0k¡ÓVÓ˜ÀÎFÀ™¶n 1$tËÅAn~È}e 'Óáªñ¨ª”p³ŠþâÿÎÊV,rr iìÝ ©=íòp/H³n‚\J¼ѯ–Ð`|ù`Û?ØÌ|µ³Gw‹žª; á¥ÂA¹’œª–¢.êÇAÌGúeŠ™9 9«Žx ‹ØÝÑáQò$ÇÂ×O>e¡o§ZŽÙß§e¸¨L½¯ˆ y±âw_ÂÄéÞÄ·Ü:oL|¢È¾þ0o ªw€þߊ_ªÙð‚Ó1GÜ’µâÜÞªê°U榡9íCúEpôRÕØ®Ãd|¢N0»_‘³¬÷ 4>ìÕ§í€!ª;=ÂAVpC.¦ƒq¯÷”P„àgÃlF2xJv4ˆ·ô¼åbkÄ‚PàŽ Çà²ë,¼6›€.ó&·ÆÓç•û¦Ãó?ù·<ÖÉÿ×Äu-=Ç-æ' Pí§¶lðù¥ÿÒ^¾qþ[íKèc?Ú¿Ýzèl³®¨®ÕLîçí±uØtq·½[q}Ü«Wš}ù£DØab—_^òmZñLYâ™pqÐó•ݤ‹­žq„W“–ÏÒ¾}Þ!I0F DÙŸÛŠûó1¨nî­! êB-™gÃV¼¡ßQÀ¿¶i¥î¼<+/¶ÞÊPÄCÎÞM>hH4P +‘n+¦Zt˰4:œ¦ZÜòΖêØÔW>3»0—£¤Ž—íØ÷Sùø µKaæqà±·ò° t§lKKl¬]&kU‚Ñ ­Èb*‡vv +¹}Á¿ñx9=Óà`œk-Ci5j#žc2K²¸n!žáÔ.‡½÷Có®è†o¤úô¯ðÚ‰£Õ XªFÞ©ÉÁ…Ø{ÆQPFxo-9ˆæºý~ñékLŽÍó-iO»§¢Â-"Ž4"×rHkZM¾ «E7Ãf3óf1À¥WY›!/S?u"Ü ‘PGMÖS•; + š]¸myGGS ¥Èבº¬é` G¾µâi¾Ã¯vÁÙŽo™j7ÛºÑeVÝe¶-õŒ¨u[ò®\Q'1,IÄ¡ïæ[ÚG)EIO©é*îT?FšúÕóa><€}¹„Íì—°âÇO·ÍjQÕŸ(½µ&ˆ’«<²FˆŒÀü5×µ‘k¸f[ý”Ð;ÞÚ£[4—DܾÐ8òÉæÖÒéL§üä.ª¬\†›uíÃ}ºv+›ñvÙéš~ÿº?°ÈCÁ"FâaÚú}¥ÈYŽ«Áðë“XL]¬4Ìh«kèºðC4^†®Xw‘ާ9JŒ$9ËœŸT7ör>º7>ÜõÑüaºzƒªocY­ùõóKñ@€LèøúÃÛ~&Ãá¸ö%vÜnÏå¹îFS2!aÒmõˆ4 ¶ Ëd¤R‰»šZèQ>Šü"0õã,&ùÆýpŠL‡C…´§&­jUÏè¨q^ˆ-<ž>5E Š ð…òóo°6¢µx¥;ôík?¶l·òtq%â‚cú×jÝL='ÐGxÜHLhM%´Ú5¡º") ©ÜòŽý«‘ä¡QóñOGCEOÛƒ2}×–?D;cã.ö–íØf/]ìôÜUÚÜSæ±9ÞÊ+ KÏ!“ܽѓV·>JôJësT™ü°óǤ­Äg-iéo®íƒÂz¾¥Øº´²à ‹M¸Ö4A]¼53ýöS<Ë&|&:РǬ¸—¯MâJ‹ÞÛM[óºÌ¨ë zš"3SÈWÑKŸ½£,qÀtj8‰Çâ‘hFóªõ¦YŽ–µÑ-yúÛNº®|V¦ÁQü²EK?·'§e²“ FsðÕÎ{ȱ—ÝÜ.^»uÇ£´MR=j ¿ñE‚¿Ì.üís?܈5É„3õñQr¾œÓZ²nè<Å&úÛóOµxÙ?Ü—‹±"?¨“‘_OÉ¿o_CÑ!:»[në#‡¦æL9þ©BNu~"¶`Æàx}fîÝkRQÆ\èˆšŠŸ¡û›Ï¼£hã0FpXŒ›ëaO"–HãÚù†T‚zé|¾‡”ëB»Gt+ìOB…´4«Ùý&"îl0ün&ÿ©‚,yg¦3:hƒ!mcj8Þ$Ç·;½­IcƒžWÕ'‡šÀê% »›´a#ËtaÚ»å,¯£í!ÒvŒl-÷‘”d„ø‹Š„ é}vÿÛ² +g6ÂÞ¿ªS]Ê6ÄzhÅ=¯ÔI¦©:<¹{­)¾z]ƒïî‡A—¼ˆN©dš|U:¹i7¿þ0iR0ÌÃuéâèñcù¥íýZ-ÅÇ£ª¼‹÷ X¡Ý"oÄÊQbHÆ3Ù®°y×›Úd×âbf¼Ø<IÌ™§ZÛÝI!|Õ=ŸlªÉR¦ä×c°IŠƒŽ¬îãfqŠjx9ˆ¢oªOv>S,<Þ¨‰=cJ\w,9SoT•'øíüýcÚ€M}9’þï÷B'¸“WR/†äs¯Õå·(Ws:ë¦Ø’¤jééÁö¤µ¿:!0&Zt¬¤¬Ë/²¤Èf¥2©H âÌ1¸Ÿ”BϾÓ<%%‰¡o$†a‘¨#ÙWh¤“y¿kÿï9éVuK"‡b0Ž ¿›”§qzн}Ru¢TG»êȪùÓm'æy¢Ú™Voº š˜)bÓë×¾ÄO‚^Cj¡'5?±ºVôzÒÝLÅâzgÙÚ_’‚¸ÖÍFèÖ< aÝ+&˜ÉüøÉùØbå¿B·áË(  FS‘¼t1‹ëußj;zŒ Þ§'D:ç4¤J ú<³·X©$Õpñ’ÝÂÏVniÕgg{¿„4ïZÖŠ7oÿÔ.]rt; 3,ÇQk£ƒ ž7}±æ"ANìÐ'Ó˵³ÔØ;#Ÿóó¨¯uÍqO€'Šèüj Ѫ§”Ó˜šÎ&¯Ö•ýÄPÕ—¥†7%ÿF&Ü8—:£ÞÑ>sÅØé_k2»îèMCƒ~æ Å—ÄiÔª©¢Âí㇊['jÞòûùûLjÀh™u,Ô%íÑrRbü ®Îs©Œç’¥ôöŸ… àì´ˆòzD¶E*„à9Z”ì@ŽÛ¾ÍÐÈÅ h_VùÖСZ§X6¨ÈÝô¿Žш™À¡´’šö;?)ÙmhWG ¿iŒõrí+Z¹ð¨ƒ¦ðtkÅ?y?°µo*EdP̨×RÛ—.ý¼ç”½ê«‡7PRîžÉjNÖ>¦«îž¯0®’A£û´îÏ‘¿ÿZO]Z.>¼CâÒèžM}žò¼2é¬#?É'hu_­T¼"® Ö¿ç‹o}Î# ~Ø„©5€‘pN,ù®Õñ÷ÙûÇ<2tÏw¹¾ªê‡ëQAòD\Áüxx•Õ¿ÇD Ú'—<²UeÕ~ÖHuÇ&]!–*½Ö•XIvŽŠÁ |mæiÛ$¨"_·Û×Í +e3: +m㣠ƒ³EäÌ4KŸ‚At8Ò!±ËMòQIM¬zmФ©÷n¦ÜâE¾úëù“C•%~2»¡ðtŸïû‚> ÷Z?í©9k5%KW~§¤ºÞ/%)Ï´K:ÓôAwä³>îT·+¦s7ÿš°s i¦Bšùð™b›bgÇ øÃo¹œ‰nΞ®»kj"¦Û­³ŸÓ§²ÇTxÎh°Ù‹<ù Ôðb,Ÿïçñc:fiÙhÀœ;;ÄåJ(^1oÿ~º„ ”bi ¹2ݤ÷xߟñð #ÉM[EFä„@ t†<ÚÜT7>댃ã8Ùe o LfÂ=ÈÝ,÷´æ|Rl‚=ܲbøEE8 +ˆx¢¹7 n›`ÄSÊvó¢ü‡ᥖz/=D‘ Aj Z¹£¸Á ƒ…@újš &ÔQPE“ŸÙêÎ>3·JÝQ•ˆ>ô›wR®N H{ýÐÕ°áÖLPРÇå!õ¬µî>ß.£únÙ4“¶9Õ/‘pM¼°ám²Å€C´dGÅôgÇN1Ã%h5IÔÀï`R"ªB ¢9®ëV?£©=g¢Ä.Hó•áÄ hPÝ«º˜$#êp/Üdå%óRØl\{y êå©û”úÍëŽïH|#¼îSÕƒÀ¤ «ÊKî~¥»”3ðI©•à&¿%ãˆ}OËÏÆ„jCw7>fd¾Ï­*.˜éØOXq¸»_MÖâljy3z´kÀ0›áA.ómZO9ªá¶¸Y¸;# ˜0÷r›ƒ6sƒ¨ZŠ6 á÷îîäà ¯k³$€j2`mD,I%žå_³M9&ç·¶ Œ'嘅ÞÕ4{Ôq”õðx.ÃdB8]+£ÀiËÖ)ñ’YòòÑAån,)€l±ÅƒÎaVßQýù€'’¯+>ÌÌ­ˆŸ»×t¦ôB/STQÓ =2"."%«7ÎL%’iÚ‹Ší{Jž³mÉ‚°œ¬Ì,‚ô¨Äkí´šŠù°xÈGZ©G•w{!aCHª:Íq4|Îð†¼Nò²¶Ãr$pÈ ä|Ô1SÉe)M ¦æž0É1`„]KñÊ=Ûž?Z~âR`“Aðzëé7<*QH2Þ-hÜ™I!;MREÙloÛl@/õoæìíçöD ¢ê9@£o÷v˜ñIE{ HëâüÆ{j,·ìTŸŠF ¶—pè&æOÂcš«^'baþ›ÂŒæšÅ×_Az|µcé +ñì^“Èò=‹9oy± +Cm‡ÔZÉ ßivhëbP¯­ï¿ÉëQUf¹Îš€?4±Î¤BH8G²ÉÄÑ8e +¤ºKjqj‰ŽâÊ–Ä7÷;KÅî‚ëDA`Œ,(¤Gõc|½k¶)Âìêà“0“×ãg‡WC}Äg²¨‹»I±¡«]ÝË[åtâHÊÞ *Ü~…MyÀH[iîÏa Ž˜Ã1Ì“&bƒ_UüŦ–Óp×kx×·¹ñYÄš"|±{²…YGèpR¥õVÖ#ø«Ìá +o9@ÒË ;Ljÿ evŸ×ªcÃÝ`›"DŽ×;I LM…Žð„F7qTz…^×sžÙªü5‹µ¢_¶.?¹ @â:S×Jsb·5oÂ}ª˜Ž ןîòj€õ>UëÇ'ÍZ’ô!A‰Óli‡ö÷$X6æ‚F{Ó°Åù»Üul.I®*iÀ³e÷û÷ö´ôÏùƒ®!v ”±žáÛy‡«ÚÓŸÈi™:X2iÛ®Žc‘ƒ†_™¼W7[01¨9#¥®m_;®èÆP¶…‹UÈ|†ðw ¨!ïÍÖjië‹K—MQ57™¨+À# Ì„·ZûjqÙñâtDœŸ]ïJð¤^:©ç²5ÿ~ÿ±VØj“ ᕦ,’«ê^0óc‡9³j½ ¤ÎÉ I[µ p’tõ}À„ä¯&% M׸XЩéŽ=™Q׃v)Úµ?=Ä+è] •ï¨ã`¸¯Š}‡˜¬:\D—W'9bEa¤¬õŽ[^c¯ë4§Ó€´-uxZWK)¸¢F±Ü‚!—&ca¨%=,ÜÝqÙ +ã2¨¢#Ýìërçð‘ÝÉHí$7¾âDíˆûu·3Hx]èî¢m² +ud…]bšô*wêÃE‚zRbÍ<€NBónšþ°¿_ékPŽ1Yã·r9„j²ôRº¥:á5Æ6Pü2û[ô|Ň‹¢Kì¾A×t›•™]¢Pýuõ·$ë7ðð–þË'ÐóÌÏÁÍB#–þ€‹žÔÍ!&I¢Ó++Q¤®3i x彞µ‡Ý/\ˆ Í N2ƒ«v×[-By¬µFùá™ýåÏgv~R×—éŽJ +ž¸tžŒ¥në­¥[¤1´k÷ ú«dzx QÛ·ÕE7‰[ vÎAL!ÐÁVlä¿$ùFfÃg†@­}NÞÒýcÃ÷ã×ÜOÁ£ÄV|y}Ø;­ÆÙ£¼÷VáMÁ7·B5$ð°ÇHF}ŠenS6—³Ï>þOv +.{tì¬jÔ\N©p¨ª)½æ¯¹½ó›~uìóêÎs À9ª»˜Ì§ 臚 U8]›C Ac†/"¾ûz6ݱL¬~‰‘”y2št‰ˆl÷Û#j<ËŒÖFŸ¯yÓˆgPŸ <Ǽ(¤ ²­M†\’?S¤™gs÷žYÂÇ èä }>aÊeS’ù•ÍfDÿÅf•½þå¼ø$s1‹îÒ –—˜©+¨ iŠžÑ@ïbiŒe׳[–>ž¾¨ ŸS›õ¨ÈÕѱ÷Y×zaBÆ®¿ØPÏ?Hc%%Ã¥%._)<ûAD¥&<à®~ºn‰ wþ4ê€úöSVüð2!d5‘Žk^á +`´‰÷÷ær´Xá•t'Ã\õV]xm/Ñ×ÀµáãKD!­7D¹R´µ[€ S@M‹~S8RŒtú¼J‘dzI1–$qnv§Æë±Ýí/JÐÍ+Ô®SO1H®Ô8|“6âw³÷¡oG!4S„i„fÇ4H‡¯5ŠuòŠc»‰Ö[„à¬W Ÿë•M`ØlqffE”¼œÅÞÍ¢¬ŸÜèó•¬Ë2ÙB³n!´À§'‘¾øµªxWóÞ\Ø”;u°]†ïô¸ ÈfƒŒJz§l›Xâ´hè^JH3l™Wæ›®$UQJH¹î•õ&€ÈJPÖlþ}vôbd3+‹¼éö“ѦÿZµà· %Ð5¥0¶Dë“9p)®WRÕqˆªÌ̶½²6¤±Ýœ2M²¥K×9³„ÖN•dΔ*ûq%Bʼ“1Ð q¶ã²ë-ù›¦­Ê¿èp@ŒÌ‹ñ°Ë2˰LYÒùõw¯ùÛYaGˆ3º†Ý mÂÊ%Kßú¤°·9'„x«ëJ6q€1صI.Ô] +¥;GMlê6yâW_…¿ÅAœ¦[^j’±0ÀòÂó¡!q3° » ß f@[¦ª,¨TLÍ`o …Ñ8KC¥Õ=äB8 +iò°Z5o) +}TÝó¡tDtÝ–.}§ï®WZÇyß뼯£¢Q DAœuÉXdz£:Å‚Ô/yãs 9>R칡vyó[˜¤Z—  åBT·Æù$õ¾‘ü½R±øq¨¼µ\.›´NÔEÛ¬Æwe¡h¿ýТkŒ`±óCÀ §ç‚!`†©H{¬;Õ’J&ðx-˯0[°­¢äUO&Tæ…4 ÔÉÛÓÖtíàÊ‘8òÉ’iO‹Ή¬ë±no³þ6?žïÜbõïmÿž,%œèí2>Ó•PØ”àñµrLøæUàÀ®9—/õßÄ¿€"D^—¥ )lÞ¿²ä¯ÒqCšx¦¡zz ÐàXÛ6p¥{n•ü!×Vb^*„ñ)V·¤ãïN£ÿ탞;>>ÛÉR#BiùVô~UVÆ_Y;öùtL[‰!UÕÆ‰O¬Ô?‚Ðéž\»™ŸÁm:®š%?‰0Ê^ý§‘¥®mؘÏÂðT-zÜ?~ôe6¿ø¨b³Á*JtÀDG6+ÉΫöd0¦úå°ú¥­µjëû/i„R­ù-Öûfo‰ÊdZ\+ôÑ<¯læ/<”Z® T)¨%ôúŽdu€!w¤HÌÕîyÃíð)—:¸ôÑ§Š™RaªñKû³®Š +!jWBÙûø2éºaˆŠA•i©bZ.1Æ×.yÇåRê’ÅèŠ& oV erÕ>ÌLõaÛ^D›™¼ ~ÄÇxæsä~3 „ßÚj¨Oå9{ýšiòûØ)^~w°r’é¸kúmE ¨œ ·`óª¸-(Uùål›WË¥}®Ð:ñS~¿Ó¬m¸Ì‡Ž…•‹ò{JŸ¬Dws5äÓG·ü𞊠®±áésX€ô™ôMqø¬g­ì ,S×TãÅBQísº† BL©gކç%«ºa݆Œ¯·åaþ„:’¹Ð&BÈÈ“T:Õ|û7Sj–Ç;!‹‡Ôiþ<>H Œµý—|f©eDè—i µ +Îðd§ù]·ßG½ñH¤{§ß}/ø)$rX­?6 ÷ŸÙã°™žK¡µÜ>ŒXšX*çeyIuÿžåy> ?5”vDùz÷|cÙ>·”£ -*T„BËoE´+êáýmRî´$¦˜Cåü¾ð Í:=áKÖ~û²ž‹šÇb’ˆ6r.X…âÚ­ŠV ½¯nc&õ +é»s Žú£ %¡UllñsÓ¡ CELJ§#;–ndu;^ezÈž¢®™î”XÂð·Åu_ÀoìïH—-üþæmU̱ÄUÁLöî˜åÔA4[üé…ÃÅãÑØÂ-UWËï&ðqéÿ×ý&Býÿ¨n8t{ “}†(xu|²;tËÅ ó౫@Üò¬,³ch€ `m¬gLäŸãñi´ çFPŽæ:*溂O$ÿéúMØã«Ç9]Í0»Á`?™C¾ˆŠ=*Y¸\ãõ‚­:Øò0¹‘6šêÑ¡E;ÖÙω•E°º¦¨âTÊm®´ë{Ù—±Î¢ÊÑxF ±¤™Å!1E,ßòI”¸­Ãò.³Üã´9~ᡳ&4Žl\/q’e¡’e+@H“‚š¦Ö§¯Ù :N$Í*=õ‰ã §& >‰oÙÏsó› ‘i É[uhÏ‘ß$Œ`LÆ«2jÐîb67ŠÒñ”ñĹÖ!ׄ)\íqRнÃý³Ó²b6 ¢YIèŽ1 µ!”‰¹«e¨aŸiÉ6ˆoaø6•Háð*vBËË|À•p„Ûs?.«dŸ¾àH<ÉE "†H‚‚Çïàä…uˆN&°²‡ÍAŽþ†ZøÜ8ŒpÝBNt±£méGúu²Õ|€š“|¶X_·šãnýçU£"”M "Swv‘â/X†Èe‹»mˆ2›+“¥a5z¡»ÄVršù3EE’©Bh1k˜Ii‹qÁ>èsØÒÁç ¾.ÃyÖD;q:*Mòƒf‰‹B)ÇCM-çˆ6ü(íTÒ«JWŸÉæ–!ÅÓâLï¾#£AHñ\*K‘ÿ€wÜn¼Ç—D_Å@‘%AºbóÅnB©÷Ò\\ÊÓ£ÓÆr"³Á¶ü"ØAy34Ù‰îí^ :À–àìŠW}?2˜ußbè¨"Ç%ÑÐ7qcO,%¼u¥(~k]Up”Ð׫ÉzaFÄyx úCìR¬ ˜ÜáÆDD Jø¸îâLŧÄ sPnçªÈG飱Ž¥‡ü[Gƒ*Ì4짦}ó©cˆé3@ÍÓ +Ç|çbu>†f+Š@±ÍiùÙg[CÙþ¦_ LÝð(OñÛ£äSФJ®Y§û!áÊ¥ O ßŠÙÃ;ƒÁûÈ;‡ùMÐÆ¢ A€Ëwâ¦ÝYL¥ëö6[Ž(ÃNóÌÖcÑVgzØO¾x¸k²›±™øº[ÐpBgIÑ£ÀàoöKcgv£«{†ÂÔ*"0мÍq̦‘ïÓ>¶í²3_ê¹ð¨µ4Y‚g—^VØù¹ö»%P¿1ˆƒ ¥Ô°o…´Xc¬8ÌaNôåçnHܯ “‹ +è;áÈå'ošS¿ÉJõ=®!Ÿ°ùˆ¨ä©ˆ ÙBb]1ˆêÿ9¹E){yÝè¾£‘0BìèOîÍ;ªízé󡟪ð“B)¨…}Éi¬H÷h$B`]D­ÚÇ”°Ó¢ë(Î…bÜô¢à ÅÈ…w¬ªèAÒùØuÔ@ƒŽ¡eš«³ì<¬ó—jàÙƒ©ŸöLˈð/Øé H—¸Ñƒ„ƒç>ËN¯ëVuv«LÂ>ú·ƒmúPÈýi¢04šþy¸hŒâ— ¦"¹ Ò8ü‘9Ý~º{‡Š²:9¬à­+rœ¸LRCh¶í…‚nYÝï¶ ¿7HÄr’Äq‘Ô¬ðׄ_;àG0 Ch¡• ø8¸­§¤R# ƒ„ ÄÏÔ£¸ 1´éZíc¨F òƒK@ÖÞ†„á  ®ƒW¼'Ð>˜í 6àÉ;"#¨¡Ê\Ã"Wôþè!áI#X‰¢)0^™Â"§)~Çc15Fº³/¨ÛñÙ lþ`G7ZzÐ*‰Ž€tVÀeFi'’o]õ}ƒ©ò¨¼eÿ|¹¢üKÑ”¶Ë· À£ †T ^¤Ä›êæÓØdíZÍز8nÍ%_l#D"žÃ]̓-KöjlYY>ŒiRɨÍ}yÊðeBqg2.ë9ĸ‘CÍWÕ·Œ=ÐlVðé+lHS¢½‚2G(ÞÃM†0»æí²¢QÛº¦¾Áb¨p£ê @VT‹»ÓT¹:áVàëÖ8ÏX“ÂL0u¿ˆ2]´ÐÝ®$íPÕi@™-ú)M—UÂŽpÙ¤Aš•Öt9—Ë‹¦,Ô²Â[ºJrš#>1q†±R‰”zÅGnÍ'˜Ž·ZïË ªöƒ4šØ¡Î]ièñ#Ìmá0EåeQà“.‡pGY4³Ý¬ia¹Õ­Ö¾ _'Ú +CÃ]SEqºçWFä™)dÉ,/’À¡OdšÌw!oÆo P8¼I"™È_M,ó«‰Þ NLwNk%£Æªb8ßç^Fðø ¶-ʱ@¸¥ˆ†cair= ÉëîU׸ôÁ°&„aÐ0Ò;èÀ| È31sèócme!J?Ÿ+ì®| Óù&‘:ü:$V}@éð3yfÇ6š{¡{ CÙxZÖ +Á-‘û [[ù +¬]º®³¨;·dBiài"ƒE'ºòݵ÷þK·lrlѰHå¨Ã_™ Ã.— E%¦©0hT «_àïAÊÔ [L!¶ÂDìŽ`,æ¿p¿Î¤¹D\$â +ASæqÍt!ÔQÆãÌd°GCñ¶˜åZ}G¸; +~˜Í‡«Ä“8MDL,‚Ò«æí¶"¾"ë%4“û¥,£2”¢;”éT%æø«Ü\så8¸Æ \àA^"<`JsÌ#§h˜¯©»ù†±6«¢Mº«mKåªíil5öƼÝró™nA@‹¬rįW¤¸%ƒº±Dm€8831¸®gü<à^Fü,>&¾6¬¢îÍ_%J~òÖí’h¼aUÙƒ}Èé )ìÑPƒïtæ§Î3æ  ý¦$h~!+GÔ/–w»'?´B|$„±>¶Øy4¤ºf%Ápq§“EXü›³ 34ÞL@l¢¨ï¦¸C¼ÂÆ»j(NÑ£LÊ%Þ5œ&»‡«XßeHªb#UÆô766ÁÚ@Šm¶²Áb¸î¤žoÔ{ +sª°1³»÷ã4·^Œ4?ÇMì_8S©qŒàçP™âyǽÌy­àÐôaQo3B²aÀ' !ü²ê_Ì蜸võ´ºrÇç¨Æ)U¦‰Ã(qnño‡õ‰¸›A ¾µD–äï),ãÑy 8©½CÙI8®ŠëD"¥d;ïO1îÀ©²D¸†Ë7H€Rnη4dP;äé +,¥œû¹ãvv”|±ŸŠêô+£aäFÑè~Ë[†cà« +@‚¹ó–GU®n÷öž­„;âã厮}˜Á%ÄÕ칚%,.›hÞýdïðÎhéa½…C5ó0‰4˜I^4ŒpQA8¦‹¬5ˆ/£P»8ZîÑÒ¾¢×$ôsHé^šÆý3‡1€.ÎVdœÜO$Q8mbÖEmrL%Ù'1RÄÍx胎·Û†P…d:3ÿys’/•b%W?Ó£•Ó ¢½±L‰waRÝÜ»±›Û±C¾‘Pd¸’€É‘TÛ¦ªé¯ÃqãÑ ÍL%Á»üWø}<~IØÏχª¡®,;^×";ËDkðÛ˜L9,p~{t™wÿ_X´šCŒD°Zš‚Sà*ž“Ø®I¾öfŠ×„º êÃÎK´=¥KšÙh ¡µí7mŸ8”\xlQ1ŒXåU´_ZEjWÝ‰Ø ïF׊ë^©+ôwYî›.jµØòö€!˜j“¬,¥¸!;½õF²]“•t5NÖ=ñ"†‰¹íŽ¥äö’iÉÑl€QWÂ>Kžœñ6´Š:L†âˆr)BØ5_\l€]Ú áUEB…ì +ØZ›x­º2Ȱ¹ôÔ‡ +×qt´,t=v…ª*æMðm‡²,­]'¦,¼× ,ÈÂþP—Zšg¾ ÈH$ë±KÖð¾-0 + ú +4ü ö‹Bé!fÅ`- '‚¼ ™ ›éè¶Ô(Ƅͧ³B?ã(ÍÃ^aT¨ÃuŽ‹álÞ|ñ7Æøc‚?zº GéÎ –™µB¤ÿðjy¡§6³µ¬‚l_Êê± +®o´ûÿGØ›¤é’ÛH»[ÉèaOçø_ŠÆÚÿôò5™¥8º“ªTà|ÞtÁLò{ž_ßæZ>˜ÎÿŠºzóêVñ9«È }¼‰ +²‹¥_¼{r>óTn3»’¬_Ú ÈCÂ}Áݾ0D/'Åsƒ¹¢ OÁäñÔbš@بôý]…B8ÍGÜÝ]ÁPs¯by <„4Õ1ÒLLŸëoŠ’ŒîÛà Ċ³Lrtèb«aª G¯éÈU9Íýè2¦˜ü¹¾nr½ŸÆŠ!þ¶Lœ.B9A˜ÇhY)­yx³}wxJ†M¥ˆa†Jm’+ÇQ0VŒ«?í *bvȤÊÚ5uG'pží®Fïü>ïý¢£×ž¯¤/þp2|pó³"¶oµ VÍŒS¢'ô¢îNû/õÓ2-#%’Âr©Ÿhv·üŒs6Wø9©»ù®*´¥§¸[lRC¯™Ð¤Ú§Õï*ÄÌPSÃÏÜ—»œj¤ü–èÈaW»Qß…Ü¿ÆÐ]º¹Çà‰5×ñŽöaL%A[­B»ª¤=IÅ2¬ìÏkNÖ"ÉS è8KÎТ—*C+úÜ<1üE@ Œ_©Q‡‹ðón³lŠ]—¥åu Ôßà¼Ó^#å²-+ ~¦©Pkm{J2AÄT£Û›ß5¯Ð +,—‘?–sülÂÚ5ZÃôÖ‹E,¼ˆÛý<¤ðoì 1ˆ…c6ÆîÁùkª`ÊÎ)ׯ§í ¡­Û¯ÒnͶ£ñ”^3-¸½é pu-%®üŽÍî(_G³F‰EÀ².›ØàîÛâG¢¢ÒZS_WŽu†wݯµ¦ïÃÌw^ýC}ZçB³ÝšÖÓd8 ›¼ÃÊâDnJ”æ'õy,®*Ïn¼…ò^ÕûÜ@“ÍÇx ™¾ã-+ZÑðÅ«¶ÅûAÞ4²Í”˜'g­9/¹)M)–é@1ç.Sˆhò¹îpì02ÒM{Ò_ÿ¿&ž‘{©ÀN½'\yò„â=d—µ2Çõ¦1«VaÅ:½àû¼)Þå#jèáY AbWß”u&Œð:xä¼³u7øÓX[BþE>‘™5H¥ïîÝ\ `Ç_¢¥sبÉÛŸù §Šù‘¾ëò˜”¾› +[_öN{߯lt®Öfh&\™¨Ô`ZZÌDä4°OêU&ý†‡Çß •»ÿœ7xèM„ Íœ„daù h,0µ{G&Ùp¦@Ú%èz&>cqÁr1wÙÏÌg‰NÓ$£xԲƻ¤:îä»ýœAͬŠù¬ùBÉ.ÌÉîÒ"ƒÃfDD„üëÃË[MÓ4ª[Æ8‘î—þ šÎurbsš!42ëãÙ ' +ÿY½¬"wÌá»¶[òÖ„‹ü󎰟"°Lødß‚iÿçUGŒë:d]Äç m“z¹¾´“{uëWœ<×t¿×çà‚ùk¨·€Z!pq–D.LÂr®š²*» ÿª ¬ëîýÃÑ·<ØBÈþ{šø)é=À Á  ×_iQÉóVJ~IšZfŽ +úH]ƾô»±«jåɪa*&«Df~‡C¾c’zÇ¥\wÚrQޱAxm÷¸§I’•˜¢ø +€ä’t™¨z^SI6z¹2ƒêLå!—¢•v°G8è '­aI»ÖjÁ$•Ez˧á< dlãÄÏ”K“É.â T6Áûåß—XÊ›ŒÛJ¤4iPÇ'Êà×IÝ6M×Ñ…\V—†‚&Aýe³D8jœ.Ú¼u‰ë€^[ø•ŠžîAßèƤÖbXñF`÷ç&FŒýhPš–SùV“ZœdûŽMÇ¿K墾DŠt[‹wŸÞÕçü'Áĸ` ¨fýÀݤwÕ·­HM0?Ú8aÔJn¼ãwµãwÓ¿3v¸i/eë“„ð)2Ͱ\½ÁÒ²¥:±2¢ëþ²0¬•-x„&ÛC¼©ß+Þú·#CGc›#`ÁÆì€rüÜ‹×åg "kÚsÛ}¬õï"{·Ïz†Çþ®çmôÀ¼ô3ª$;G‰üŒÓ2¶®®Âü•ù²ÁO|¬t¶D^ÿ…Ï Ÿ±÷/R7§å>üGçH¥Ï(¢Õk\– úøè—· S<íÊö ¯ +%L³iÁ¶LøèÐ>Dý˜-ÊÍÒRÑZ-LgÊ4”P#°Ñ¶=TOå’t¤xcøŽ»ì0ºñø„|¨þ9uP¶ÖííZOǵ¸E¶¼þÛ¶mu0T`V‘ h@æØäY-lòÝ=›'ø˜ävÝ}¯×4òôReÈx=2å$Í4ί®Sê.ãp@Kna"ñi'>>Îê3U(¼{öR©.Æü©ªBÛwš ‹ìœµ4c9áÉÈÙ@IÉŠ{€»QtÐ:Û€®Sö#˜v^fþÍIøfÒ‰Í 37þú!{®BÔ›Lü<É<¯púÄç4–ÿ:.«e†‡m;ÜzÁqwì?¥Í'IU=v×]„ª.kLlÎUK4ìvšŒ @®ñn󯀼òÝMÂ#’×éík¥I ðS&ÚhÞ%½:@ô‘" í^….24LS²FßÝü+³Ë¡ÃÌf¢ð7Ì.„¢rFóŸ+7"Ï5@ËmÈQ.§âµö× ö9RÀ+$Ùö]ßdüØgÛ"Í0¥%qß$ÁÎKQIÓ‰¤+I©©ËQ4ï®{(BÝI.Ǿ„S°"#±·ŽÚɱM…e?ðºâ3ájâJv†4(Èn¡dd̺²"(E„$äE‚Íafp`³êß»§YJ°º¦€ I€KÉÂ/—?½>ãý¨%tçvOxE„hô-ùÛ‰3¹B;Ŭ÷“)Ù¤¢Ÿ +;÷›uyI=1& hÂȱrèÕì‚iq»»äKjÓÑ% F2RGt»Ý¯®×œM;­¸\_ % LŽŒ ˆPñ:oYmÔQŸXVSù9xªˆž ‹U´®Ü¸Ñë~ÈïxL¨Pâ¢X˜äwôÆœêJÀ€œ8 Ÿ Ú½Ïw%)‘p.Þïá'è÷s.BqÓ`¿ÿ|“ +YÙ Åï|ÂÙ ²¢O¬eÎö³mÅv¥°?kI¥¸”†—^œ¿ª­çލÆ\%l(¥Ò7=O#¶{Ò]ä&zã'àäÖU$F;â$WôBUÎ|FÎÜíT3%æ –=¶€œ!·eUK¡bOñŒÌùë-5ñµ×0ÔœKó¦Óä§Åa}Ñ®Ã2Né¶`ú!Mމ<-Ø;T]ÞÒ«X.ráAÖ”Êþ¦õˆñûÿcã§:!F‘áP_íáy*(“T_îä»àx¢ÕJ2Æë9Þâü(ÓdlÿjG‹¯X€è»fTé»O[TšÙ#Lu¯ ìÚ™.©Fè2X§{–Ú?Û¤ã:²ìÜü‡Éùî’p®b>Å—u”¸G©Uäg¸~ëÛs¿¤;¨J¢,wì+‰âF#åæ;"o¹ Å9ñ¬)^gÁ°á&+Ó4† Æ÷l=û§nH\vˆ¸£ZÍÔ4êô0Ϻ|`âíhBÅÍ@‚,"X"×ÜìLx'ô©’»‘‘Ÿ`ÓŒH)Ã2¼ë3šeœÄùJl9w¼^µlFèúAסá¯dçíC©ÉFQhp~¦¥m¿Á=_’Æœ½Vü‘j¶‚WDíÍKîèÎÓ·³)áS¾þ¸{˜Ù÷Yàÿ’»«Ä–²ÔICÁZô²×d‘mâdea¾(|aš¢Á-çÈHËÔOÅz[ú‹²Åüå†À„²®Ã‹Øø„½'œ:L£5¯»äíX"Òø¤ÜõXDÁÏÚ°â5»¡è– +;Y2tAÅQÜ÷c! +áÃß.)3ƒ`. +YÀ¡ŽûÕÖt¯ˆéyCi¡”éÍ”ƒÙÈ2aíEd@Óªí|Μ¸tà»ÃeÀ-JŸJº/Žw•è!hX}Æ_Ênúš›^v»³…JRXûIˈ…W´Ã1è±Þ§šÄC5&<)µÜ1çT©•×'rBéhÒ òwÜíì#øLuÀÚéøäI<2öç–"¥éQ +ŒÚª"Þ~ [4˜CþÒ(l‘¿¤¡"²K® Br; AjBÖå"‚#-›™ãR‰ºnº#å%?eEW²^l;þ püõÐg?™ßð9V"?‹©G*x¥{Dz¾ù¤×ÖÌ + b(¦¶(ûµíÄgGS™jYK}ªCº=p“U´c:*$fåÄÑmQ™6»ã®‘ãS£h­#%ã,ŒEr9#7Ì>¡u妿:“]jËæ›'“]îQ+3T¸Ì;Ýé.÷bbŠÉÝ/Þi¥õIr"¹+0š‚cœôÞ5n üþþ•?3KøŠ÷ +Ö¡v±e)Ö¦·«)ѽ uJäÛ ö3åV´¶²gGÞ8&s-¡e”íRO/¸Øw¾c<'%ã£Ö:Äu >ÕhìßÚk›ä¬E¦P*¿ûr%ÁœPvµ’(Á¸²{ %¼¸Äqk²ÿež)z¼ñwÿ!Uð@³öôÕš†$€7שÞÏ´q/GÀ„&Ã<. +ÙAšš€I=„Z;êö„f¶@[ÆK~ŸD0²¨Á¬Âù·Lî½6àÉÞ›ôÕMH2}ï­VŸWz%Ã¥Ô;=ÌÒ;WèÚMò[[Ù·in÷d‡î¾²±”'Í#Û\-÷;>}="ÿn;yeæâiæbw’ +Y”ôµ áÛTçÏ‚²ÅmàÖ´Q„äýKe…o ®¬bfXµ9©\­_Qŵ ^ÈÉ'å¡aÙàÇ 'pzuYý¼ˆ;özÅôPÝò™à4hù+Ù!hUŽw9TºÛ˜$½ÓµÚMûu?¢÷!Z ½¼zò>Ñä_kwTx—Ĥ® iIô¿,íÚâî$­EÔ9²Ã(Šï_¬ü¯˜Ä9t©O\ÈGš||Ë­†í +,ð N¾UÉõèLv¾é#üJ a²”o­ù¹Ošp2p1C¯ :ê¢;KÀ^­$\Ï=ŒÎcÍç…ŽãÍ“i“ë±pCíÚéSgÐØRÖɇ £Èê¨C´µÒWèrKøT×øŠxï©<£€©nJÓ-”Bû÷W4ó¼[ˆA«ý4Cøí U›U»Éœn†P"ïÓnü^;‰”6.ÒÑ +7ÉÒ!ANnr}FËH­hçr ¹ÃJ¬DÀ +²u +ÁÎwèIv‚BhS½ø}ò%îÐVÀG4N"ÈwÇi.Goo‹äÑùÔ:Ù€w+F9ŠhÒ¹(ÝÏðçˆþz—ìMj0”ãX¨p«×’©UÿIP×Ý;ºÿjä%î&Vµƒg4mEªpfwó>ÍceGppÀfp.O†ôCÝЧÇîÞÝ5‚m +°Aë6…”HOÊÙ3)…Ü +s7L¾,$ÊŒ\žÙÉè[‰¤—ÐàèVTº÷~ìISg)ÄžC$9Ðr7@O¨8ÒyÎٔиbÎØ6îr›JÂý™uo7í«y°Té ž~QCÓ\GŸè QH8[,'dJFbõG³À›T-3›Œ·ØPÝ:Ñ[¬2%Âlݤ¡ygüh®Z|J ‚1NÄxµ¹ý,o?5¢4Š'\ñúy\ñÎl²'Ó>Öj®Y‚›ÂÉšvÿÌd’“.Ü,üýš¶qV‡PVé?ü|ÈxP¢[â?áßÐèЙ¦ð¥5MN²mpÓXΈ¯î™½¨‹ÀðúHm¿™ˆp§´ñh%8÷ ŒVõ©”((JNG¼­ Bš©o×c ›@w‹Tdq¢ï!v*I"D4‰/@eèk©ÍX%ep÷/ , š+mÎ3xŽ\Û⑚~4F2ßaÜ~\õNŒfÔæÌoH² ш)Æ „±*kHõ†bþ?Y̘•ÍYÙ‘·ïÑLïÚœ?."ÖM“@Ü:‹°îZ¢”™tkÕÜÀ|Ú:‡¿¢^§$Ĥ‡Â¹ú@6„z‘’ I&åƒaO¡Eör§‰ì§ã¢ÌTb ¶ôÊ¥û¸qÏÂó÷†Ê+œÉg$³ÞØ5`n½®y9q¶1?À‘vX|[Eø8öÕ!‚»S#ëü­íݪ„âöû$Á”<¡»ÂR¿Ë_ÏTAmäÊkCŸ&¿IÚÞ3d9æ ¨Ðû·üàTË kõИ&1‡xAã\»öO•¼ŽVÝ*^u¦OÁÆ/*!(Ô‘MòbÇT«‚0˜4ÊÏoÀT`SRx€M¥æÿƒ!}ÐMž‰a¾R†g]éu=`töÏ“š¶ø 5€Ïe(¥ý».5¢x £9½«ï^8ð#ptuél—˜ï*W‡‘L«EÖ—3œ„ñiÂ]7ï]QÝJ/Œ©LþYÿçï¶èw®Ç^ý¦eý6‰„DúnKImø+,ÞóB߸no‡Ë—lÛ•°ü?˜bîô¬fGîþçMpGûÛ@exGPªÂ(@‘€ X#ãU-S 4Jw—™DŠüŽ\+’ä$[ŒNkyà]¹¨BôF|ÚÅÃ<‚ŒýÜ­+кd(èö׎^´Jö1†Ê/ÚëÀågùâ’&0<3¿!Îb· &eL”w$WS=ËÙþ­XpÝ¡:ÃÛ7¼E" éžú…÷þ2¶û'Ù&[3±»#@× +7S˜DÅ3Å먵E}¸æl+Ý£T +ù›Òë–å“ÞN©™.8’³0gz?S›÷öSËQT‡­IElr°cÇ©?ÔN_jd¿¢vT£s¼c™±üC4÷{{øÖaÙ¶~…‹Sý+óဢqEæ<ÑÓߥÜÚ›`q?8+DÞæ<ò +bU­™ÿ{ô`ñ·¥ ·?Côt1Á®“’”6ù]̆ebÒ²®ª±®sÁ,¯%‰Bi/­ÉŒ´³xëµkÇ¡FІl€üÈ’Ól3¾ßG¨ìhç”ñÓÉ jà§ŽP_’*åÞ{Æ€¢@L"‚”}<£¥Oµée·j°6 ࢇésyUîx'm ,p Á’Æ´ eƆÿDЂÊwì*ƒ¬(µÿ¸pË {Öz„›aû¯­îÇÄ©~Ê2nêON᫪XŽ#üÞ¤#· _hÖ<ïÓ¬A¾Yhk&àîrirù¢š\[¼:Nm¼ÔY“ÿÆ]ȵ‚<ÀÑÚ;vò)›ªäÎßvÛ…“)7BËÌ6 !ÁDï]€ižÜ›ƒ…;Ã÷©ÁÍÜUkAÔ ’»AÉÏ¢,MßP^LÉ9.ãK¸—•›3þ"š$´X” ”ŒG{æî[@@MÆâöHvûÐu=.}ãÿ[µ±šS3i +•`Íâ)Ûâ)f§ä:Žš)w‹~¥/A1­ÏJ3Õ8iÎMÕ(¦ôRãþ¢‚ÛJÐâÃŖﯓ”!¥~AüõŸ,“syÊlpÀÞÑ4ßL©“,'v¼>flhªÆT´=Øíò½ÓXSdé:úV[ø1zÃóàéþ‡ @Ã>*¢é.F¾G*0¬éÃÞ‘Y’µ ÿÑ<Ò­áM÷S +Yìž30PNQßÏb7«EÆœÄ~„ùÓ”Ö)ćxùOÄèÉŒÌIÕ¿7ævZ1L)i¹öÖDæëu=Vú„! 4ƒøùºk%½Ó&Ú6RšÇ:›DACn ºÔUCt] §6L¡!–¥æ÷¶núu‹jw8¹»ÇªVuõ®¬çè1fí$²V{<„ ü÷-\6 »s‡SÃä¼g®€wÊv– ٵ߼øI°¨ƒ´ÔVÆ+¥Ñfh/׸Õnê¬1RF”­Y<‚(5bЧ{´…*@í}h÷|YFPµJž„eƾÙJ7QÕÕ“í¼%³ÎNæ,VÐAj˜%t°2<\nD´ÀCãÀ÷Eü4.”ƒW}*4¹¸E°ÑÔ ¦Å¶ç†AĆЪ¡ÙÄÝ}†<œ>AÐÿóÅëjKQs¸×—Þ» ÛZ8ÿ÷ÁæÎ\‚2ÔJ¤¢ Q×#¨þÔ9 5ÀjÉx(ØPƒ˜Ž¨cÛ»ÁÐa“åU „Ïz°"’6žFQ›Š +»ˆüO¡°˜˜Lšævæs†ÈØEžoæ„’Æ= —••P¤­ÞsZ0éÕ(:TUçšLs¾ýà¾Ú^ç?~÷™á†Í¯d L'„Âþ÷¼ í05šØkMgNjÅö­î1vhCd¾è¸Ñ×)Œ>OŠ>㦕î9é +(©~Èÿ‡B‰bˆ9®Ý¤ÿ‚Å™EvWÚxþÚ‘©-Ùµ—Ž˜V‹iælA$ÔÌÃA <Y+¢A¸€.„VÝ1+JËhÆR–<½ò÷égbë­N>‘1¬ªûÇž¢cHÛ°ªõøÝÂÿñÔÀB§¦Îp­MƒWUšdý.:QsjL^•sÏHJé}ò-£"Ób¶T5£F¤1¢|äÝda¥¨T!ø¸î§âŒîî–?4"Ø5³’ªð7ï% ‹h„2™2©öõàΉ¼dŒB#ÝôAøÆ­|%¨‰ ù,6»gî" Õ4îzðÖk§utbå˜Cú' Äù!¹¯ë±Ó{Ÿ[æúVä=>‡»TÂü;‰kàÌw‚¡û6keÒ´Bøù2íUÆK#J»H‘°È](€g×€871®">‘B¦Š^í¼§[¬  òý»}ÿû¡˜*3h5Q!ª‘?u±‚Ù©hð@ó–ùCMŽ?Á.îf:ÜñX +/|»/åŽùÕi0UÕ`Êêz™r!@‹gFBUqI‰Z’fût³¾Ovß»ŽSŠÑúÔW€ü;ÎA ¤ÕŽ G–Ò[ß=jJ |À‘+Q3àzªo§4(¨…¡üà!b90€¾™^•‚­¾—Äwͳ+½”„+jË7D³44ã¿>mw`)Y|˘\ºfü)LÀvKúÉd©ýAʈªÛ¢«0ÃÃ5gf·ªä8H ½¬§JŒ¾ :¢0§äÌJ‡®6Pþæ°Ÿ4ø³*ÔÝ÷l%×(&Pb"H2wõWd(‡7yHRØ\›ÛˆéÉ·2 Žšâ‚åpGkí_+i†CmIœ&eh›–åLîˆÄènÒID¯„¬¼ÑU5¡I䪘bl@–¹Â µ¤Ã‘õ…dRœ·»é >>túÃÏ®ötA—£DÎ>Õ Ñ•†c†î˜!K¥`´¥ùÅž®ØLœ1Þv¬9Ü• €€¬Dh!Š=\1ötåG_*ösüÛâßš²±RñÔ–^¿`Ÿ%êÖV8‘r +wåÁnëŠT*SínK´Ù5z÷Œð]úÅ\&:µwðÆ`ìÄ…Ü‘¸%ûQánÄ3â: ‹ µ‡œ uÒ ëæÖ1È÷®â?mË®eõÞ–>Ô ÿúŸXœ_„Ærp}j)ü²o¢JÞõMÌœñ…|<þÇçÐØ´š” +å´„À {`~Å?Î%G|¡»Zrr]ƒ(¶o9dË¥N1³Ätž]#Pm-OA#K«âqŒ÷õ8M¼ŠÕŠƒW’@)‘ +§¡ššâñ(ÜHì„ou/«Fï|#` úiEL²¿š*«V›-@¦ã’Òߎ½ü(}!z0=^äEÓ3Xš 2ÉGábæpÂà&eB«˜eÏEµÖô”Щ'õ™!ÀŠX­$ênp¥ÞnûíŠ;µ>á0¼®ï§8¾û;ü?«&6óù“qÕŽ¤E2lúüÔÅt´P¿^Q^_™ñ µ;)5Û­OÜåøÌM(½ºOzuÓ-;Ú8"XoUëó%2+Cµ{¢K»uˆ‡ti¸Èh±‡¹L&ùØ"iº3É`H”fåd4—o{«Ãï´áv!t›öîÁ毰UÑ&ÞIŽD aŸxw™Ï HÅTGÈS}QF:ö‹'ªJâõ™»ˆ"úé"×ð!ëÁ æÐz BvQm™ëFücªö4Zu¹#AwRδ™Xgr@¤ËB¿Û³¸R1ÃÓÕvBY‡íħџL¬§e™²²=ÄåP±úÍ€á$oC™Æ/Au-**ÞwAï¬XXâ +Äû:Eƒ³ßÊÓÈea5qi2ÙÏûÃCDÖòzX'SS,´d<"‡NƒöÎÔ”UõN#eÏÆ—ôÉüÎÕø­Ä*v³½ÿaâàc@r¨û9®{J/>¥‘…ÛÕ¶ÉÐÄÕ‹ÙÌ.ò•ô;;df×å_¦Ë¿»;@vxGJœÔ;%V2gõ™¶gF¤z@Q¿Þ•-N“½+g-cå™ÅænLÄg€¢Öʈ›æô:Á¡“HTLU‡ãæä¹,ÞmM›w +vÄÅÓðÞ{ð!@Ž”b¥êå:Q”ùQ«fãè6/Òp :áâ‚ÊŸVeœ§ÆZ0ü¯ÿÄi ± U=È2ßi* hn(.07³ÅÙãî)e°Ý•z?ôwf½‘#‚í9¿Àþ¼\êhÒŸ?pºGZEò@ + +ÿ½AÙ/SÆ®²\:Tk×çÊÚ¢÷p‹®ˆä@ŠÛ\ÁœÙQ£oŽu ÿôp^G@áºßt')] yTC,ó˜ —„nG‚àZõãÒWŽçHÎì£Å´çï—ZáÔÛx‘h¢ÎÉîûøñø˜ãs/‰³j‹#_üç~ü&’«¶SUlXÃÙ,†U|+;H.¯ðm/w— ”Ð/µØ9[ðÊ”{=D–‹q¦Ÿ_-y¬ížIjšüj’`;»%‰˜»"¨an•L﮽ÏËQ«ÿÞ ½öwfÙq ¨¡[À›Í©u_‚ a%fàJ=¯dÀ0ÈCÜ-ŽsÅ¡Ÿ!°E`8PèèÕ&`ZîÁætÇϬû§Î"éËÂü£sK·CÏQü¥E^Â’lCKÇZ0=åäKÚ÷?÷ÃUXN¬°ß*¿óYùOôŸkE_Ëâb2ð¡gpÐ_µg‘"é¹ÉYU1Lÿhýb»— 5Êë?ùˆ¥H{ˉ€‰ÌÖߎæ]vä4fä4R–ÂldBäf}(mäé?*ŠOA ¬ŸÐídâeéL@82æ}s%Fº&P|R+"^4)Fšéu,Uxé‰L¤dfdX!]ü‚7îóI8L^§.¸õ‚è£$‹|Ä"¯{SœFS*©¥Æðÿñݼ\ŸPŽÍœ $—î ¾Æ’%ƒh—œ®â¢4_©çäþ¬ÒpâÕæõä?Eª0³ +” V,ün'šh¥(U¦yVly†Ï’øC2ÕÎçä[¼nSŽAûuüÌ:zT\ØIüÝ™PT&úY¢V½áûù~@xrl”¶;#C ׌ ‚&“Þ•åEú7 +-Ïá+*{£°Ú^ªÏá-n©DÈ{Ò Yt=¯†¸ z;’†ë,Wd×§ÊàáüÌ<ä4“5)%ÓOé%ò—˜¢R¾[¢Ò=‚oÖ;Œâ‘С2\ä€ZSšÃ|FIþâ¤ù ’Pyú•6ʉÔÉd´*ÇÅMv'íÔ—^_‹J]Ôãü}fñì^§7‚¢ýabåþ) å)íå q¦O™ƒ™ƒ¾ÿúkú%è”Â!jN§ƒi |‡Ò fEz¹êaïø]ûìôGèõ`zõjã%™&KÝßÿwrÿNZõ00TMŸ‹³7sŒï—Þ;‘‡ÝïyýcR"–P}I®\|6ºD°T1(3ŸÍ|ßDkÚšhˆOY!ëÒ©¾£âË+úCÔ|(ü׃† ÎR[h+‰¯¸~í P—?ÓV3¢<_-yX~QÄ®_ÃÔZ޶}¢f4£ftÁ£«ïjj;æÁ¢Ž-³I HÝ›±AÈØãlš¥ÛIýmx-º9 qÏy]%Â<éz½P«×Öˉ¥üÏ‹,vÝÒ5¤sAEdå®kÕJæ`y4I£{eëûÒÄ Oœ;¡Å´Tk´hù`BÊâ„*ÎÓK8º= + „1}{gû´dçZŽbp9ßkŸVÖÒ5Ýæšî_ŸyH˜6gä¶÷¼™´||êêó§§tÕ=\âwâ©òh~Å£Ù#M¿$ã­„Nó6Z~Úž·ä~ÔÚ)ƒDŸ-çävø9W}öŠ,}ÄXo2þž¿A"÷<’ƒ-A€!¨í"â;{½~Ÿä؆¾ŒöW4^w>F*ÀM´!†hÇLÔ|ª[É…4på®P%ó‰¨Úù[ƶw¯Æ¥k\!g“Ôòï +ø3b“Vã’ŸÛ¡»%Ðúu¿¤­9=Ä_D[paÈéA +މ<‘•°J1òàˆAån\užÛùE‹–“aDÛD›v{6˜VŽÉɰÅ)É9¿§LОÔ/§|Ù®#jrÔÅSÑF‹¯÷ó΀ú nG@ƒâÛ¼[lÒ¸ L øa'MÓK8ô¿Ïíûüu^è¹?µdUú…¿ E6(yãw¥å‚ަŒpYå=wlÁ¹mÔoÿs¾Ä¬€Ì¡a<ùêf’fÕ +ØZT…ŽÆ¿"ÿ}¼Þ¢ç¥f×½ö‘¦å¹Öß2é lB€\Ïg•€6H³ZÀGuœ! 1{!y„§‡ëÔà²Z/¯Q•Úá¸n[˜OÒÝõÉûÜô}ÆwÿûÉtˆhž¶&ÖœÇB'@-F\ñ›á°sL1€4 ýõ?f9Á¶Ì©±…ÝØÂ{âi |!",ÅX +';¾ÄîÐøØ½½ž$rK(…Ï õц»üÍçiÑÑHB?ƒŒ<=E)t FOþ6§€ÝˆÇÅžMXÁ=Lj‰+•§šðÑ’zø NDÍaäÔ«Ë +§<„Ó—¡ Έd•Ë2ò_P"J „GOsúúîb-ŸÍõÜ”çlù}ÿ]0Ç{¿N€§g Ò¨ÿ +ô ÆÍGô–ªÓ.Ÿr‹÷‰´“À9^×o LR±öÜ䯖œGߊß] Ú‰QNóϦˆ“15÷MѺiÓr0#S^ +*¶Ö“@ÓÆ“X8OŨ靗¨Z]!í•eEC«J úPÆÉ‡êfZPwhqJòž/’‹G4óèv׊« +„UŸ=‚Hø’Œ×¾õ©{bKÎV¦@´+[Ð0ÕT +øãÜÄ—õ¹†BÞ£÷›¤SâÓZ#vJ§òÝ¿/ņÕQyÓ*A‘X ¯{ñ£>ÒEñP«%^{ýçŸOûJ ØÒ6D-Ô/Z5T +äkOZÈ3~ýŸ©ž£jðʶj©&•š“Ò ;8hY'äGY ÈþÛëµá¾ Ta/Ï^W‹…'ú’{ô¸`dRzòÉçvRcåiyŽáàõ³>‘[à€[ÑgáŸæ%"‚‡ˆ"ÜQÙë¤À_œ˜­õùÕUŠ7>ïl5Á»+»5$vÄ¢]†“'öYÃûŸÝÈ30_þ݈½ò[ÂX/õ6ÉÒÕ\ªmÌ{eI­ÅíS»_·¿ü5—*JèÐÉ˦ìIŒ³q%ˆ3šª¼âf48ï8çü$ÅOb%T@êxÓhûëX#œ[ö½õH½z Ê;>¶ŽÓ¡íuWQK0jUý‰yýƬV%……lÜxÙª_’J8EȃÕ¾Oª¸ Wà¸ôÉfKa¤b¨ j{j{ÔÑÝŸ ‡×8å™e™àÒÇÉ:òˆgGæ +G$å|¨_×!+Ú [ šcQ¹/u$+}óqäEX!ýR´ž=T ^ÏøˆºF¶¿D_ò +9›p~Á7ÀQ&8 ÅZ7>š­‡QÊÛ‚.ÎðBE1ÜJIRêëÙ—©¼ùÚcÚ—±<.ôý鯖­VâUºVìSPcŒhbî”zõ^_©ßÕ¾ç.“9Éd5ûò¾+‹Ózן¡HtÍŒ7|ǵçPT'éÞéÌ‘àÔ¶"%´Õ¯D£ÎPh7j§‡¿}Mí¼ÖŸ&I·šhAØsÊuÆd ÚL„Å4§óïÑ}~ZªÄ} "Þ¬X®6ÙiTOÏVŽXâÄKKl®öfȒ׬1¡Á(ßg/b·ÁçQ–­pÆ{­·µŸàË÷Ÿ¦¦)*Úõè)™‘ÔñšèÁ¢“ï÷©x3%ŸNÓ?ð̤ý"]&âꨘQ϶L0ž?Z¦d ÑÎÌ£A¬Z€>\ýÝ×(M´áNè×6¶—CßhP³­èÜ•!À¨D÷~%8ELÔ-žòø›A“ yÔž¬€-qÉêØQNèê“éªEEI2«Cü ±:ÆŸQ¶s•=,ð³íßÃØñQªV:Ø€Z¼Ãèù¶â/ðäÚ;{»ql­·ä¾ݶR¢àòåÊZIÛx4ö‹]{y­±Ë7)íUÁº±²j‹ûIùél#Ór¤k´·!rN{[2 8ÞÝS ü”ßE›¦ÂÃã"P}ìxn;=‘ÿàH}á]t'IDhâ!РãeŪÿ}Àß|¨·ÃmJÓHý«žQü¢5\UNv›2 p‹ñøß™=Ipö±©¼àÀ£#û¤ÒØ=ØOÍé(FÉS5²hâ|pÏÃÛÞÊ— îG计˜wÕ{ÒąΩößB­š£üíh½•š(D‹UXôº‰Gu Þ~Ÿ+{W]6Èž`Ø_ê;šE^é‘Á½&i”Ÿ{á~Ï?ÍCwݾŸEçœwIÕTXC-ÑÓfˆ2 õâÈPBøÂ¹TÀ?‰V×…ˆöÅc«hº%hPýn[ìJ€ÜëËÍ“F +¡‰OVUÌ(þ×#þõI;=)"QÉr²î¿þûÍâ}›%ÂMY;‡)k‡a‹F´fc—Š +Äx=¯–ŠLJqQÏi=ôgE5$S…B#È÷·Gß3ŒR*;Фùw1”¡9ÝÖ/)Ð)¡_i;Z+rZ°@¢äx°ƒ"t¶¥üdÔE­í@féË_5`Zɇ_2Ÿ±ÛØÿ +ÉeQRS„Š¸Øšº“^~0W ñâ:) ŽªÅ¥€ú †c~{ ªÚš‚@™¦BY\l/¼ý~Ù! [$ƒþA¹{²!gäó>ÝÈ¥"Á`°ÿ}ü"´?AéÚ†aQ‚5VÇ0Hîè†q‚±Z°Pº•;åf5VrÎX-WÞ’°!Õ6’ù³¥¤¯xu0Ú 'Т®´¸RtÀš`ø5w}Þh±´JPgÇe†;D[l´ Âß“ñrr–Ú•®ý¼+­"Ê/ÔQ£ãS@!?˧ÿqÔbwˆKéØmáqÜÐñŒ¦W€‡8oØi*-‘W#vÔ{IÎið¶šyœc˜fŠììbî&Mfb¢‡šc¥öi3¤Ì«S@Ñ,Ê‘õú·KZö†zÅ0b ÉÈ#Íy· EÉîâ©ÞíмïwžÚXð´¿‹$Ws’ý.Ìaà‡ð-[õvèŽ@`,àR/#9CU*H´Œ+ ¬Ž˜QØ)GMKý@8 ˜a76´•aºê‘"–»†^äüeì\‡KÒÒ´<â¬QÏV¬¶²ƒ³æˆ»üNg4G‹† )ùéX‘ÑÍ„tFÏ+Yò‚1,ÂÃì=‘áB#ߣNkû÷ñ‹M^a]”¿Þk‡)ù›§ZE³Dð’Ë[j`dxÊĘîÓ@½sãlOÓ$\£Kª°þd®0Õ*ÕáI!Û›¦òSК=òn0t&òÏÕµX n +xÍ &÷εOüõß/Ž&] ˱xëòšµ­ØÑìn™"‹sNà8 Nyi5â‰Q,Þ“r–Ÿôèpò'¸„oë€Ôìá#;}¢ .:OjÙî0ë[T<ñ”MÝ™fâ†qC¢†<œ èNÌ—/­^@,nwûë¼xbU W´¹v›¿Ä«ºz8À¨xƒÄ¹86I§p(š/FÄ£¡Ãuß`ÖÔï–âј8HÀP~“èì>5 k?mر QAÁfG·ŸT×õ¬#þòë‹=tä"–”“ßä +S܉ŽNWþõWÕ5d2IÑ ÔàÞPZž“áË./°WÆÐ"¶ºÚ­à•F¼…ñu‡#Kn& 8‹,‚ι±4CÝPìWXæõ€’/_ÀYäl+bšøNr üúαp[¢kÛ(à›"4f4ÕFÆ èYî‹·Îߺæ +ˆƒ Õs`^0g¬dÞ`¼É,î¨Vûvsûv 0´›AÔ÷£méÙW¨¯xª¹.á*÷È'c(…ýdËqan¸Ÿ‰ÇO,îïoûªYbõ–+Q„YÒÜ‹#þÆÆY‘ñÕòS³JçÃË•d¦ ‰OÌÉl2‘‘¿øLIažþû‰ž/~' ±Œnö€ÖBÂx›)ˆ"Ö]Ç îrÑ%ï’MúëÚ¢sȨŒn`ò‚AeDó ú’¬êDQ®O±½[\D™\0\Ï|àn¥zwªþqü^éBäªW‹m…Ì(èS3°G¡î,Ä™€0{7a2ï±7oV“—å<Ò0I!§­¤'èugËc ˜÷TÏÔAì “TFÀ”Õö~ÇSÕPvxOÿY€KE¦Š (Øc¾Wj(+ú³?eëN»Ë«iŠ©VEú)lAo= ,›`ê(Æ„»öûP¾ªyALù©¤sïXB¦„ª±±®¡¹Çþ¾‚¯[ø¿^‹×aêÜã†J†ßaý•â‚ÞVzá‚ïá—ÊnP28š»iYi·ËÅÄÏôÌñª…8Ôœ —"¿¿dF(ÏDÌmjôf}£;SÍÐA¾ª÷ʆò:ŠYùZ‚¡5f D™¢d-ñ÷‘|­zŠ>{ŠFª•áÞîN® +L©åË?J²ÎÚ[ #«Jÿw¼Oy\šÍò/U=t_ÈwLó¦ðêý§êÄЛj¼á6/¹˜1õÔ`»oªæeÂbÆ( ŠnÅàÆßñ_*Øý]$®h%eU/XzÃMúµ'¾ýO¯ó£oŠ„ÀwŒ H›¯¡^G¯«-¢wttóÀ¨^ÂÞŠÉéfWf7ÝhºOnøjF‚&‰ä¿à¥´û㼇Ú4çÊzöï/û¾u„Gr¿ÃÕÞ÷r¢Máîv®·¸Ðl» ¼— ÂkçRŒóoÂÈ_ѳb(e/ÑMÒFТAíËJQ{õ™MšýÑÜiG è¯íIÔbz˜¥¢Õ¯Ñc4`ÇÎÖNÅ—˜ÜC³òkŽÖy@úþ×€T`Tª +Çug ‹Óò3zÙ‡Pc¹7(|SÞ"Èæn3£ oúØ4NDv¿ÎÇ󽧪nÜpküX†a°±û­~ئ»«“nô&“Ÿ&³itT5¿£¢‹¤‚wÐnÈŽ‡œÝ(¦¡¦©’F…ž¬#VU@/ïu“”ìk9b¬»#ñÓ2^Oð!H˜…¬/ºõæÞ^]ÍŒ`(BÌç½Ï/Æ®ÆØ½ aû•šÒƒtlôFþ>n/¹ìpZ¦tö”Ún$< ½=ËT‚‡S‚¥“³vk]3±ó¾âÄT:›ôMûĤ ×ö Õ¢‰|"(Ô#OÛF³>ÞÙz>òÙ]9ª' ˜C=!üL1Âúv∧ê1{”Š M ~úÊIð;ðÇ÷Žà†Š í«8P”]]â+ùbO›BU‘¤¬/•?¬f5Å%„Y5ós˜¤Ï ¶LüþÖîM˜òCè{½œug¹ÛQÅæn&¼y©Z­°¨O‡#êL ñO–ŒLø‹ËS †½nù©¡®sH«ÂM:‘#’è,OOÄwñÉǯŠ‚ŒÐàõC]‡[<Ú±\žeX©¦ô0ý>Ž A…añ;ÓCií¾Gr!lŸr$˜ø€¶¤’¼¿©¹TŒãâÁÚf›$þ©z¹YÅ?…=±c +ÙâÓqØY(ѯ[ 9ª›PÓ­Fèjž•³®ÓÃÅNeŠFö7R÷`¯ÑïªêÜw§¶”wσ•kKªÓe±fØQ¢Ù†ÿ²RÉ6Î$ÀôÿÀ:óÏpðšüìøÜùã[Ç ”l¼D˃5]Õ®þÛ¬ÃÒVh/Qú,Q3ÄV& ÉŸµ(zN'ÉÚÊDG÷Oùtªçaq6J-.ÙV$uºÞZaÒ—®"r4×Sô¯…Bj7ô¬! iLZƒ8UŠE¹¹?¿ml˽ÖDXR•²Nä¸î¡Fá?‰èFZdô0ÍãûݨªûïÚe>´Ðvæ­-&L[¼¹éÜþUÎìmÕÓ¯sbmF’ä'Ø8äã]“èþíKªÙ8xl>óØ|qÉE㜒NîSÂ3ýlº§ã“5î¡u2M$bA‡ºßHg׳a+`dÊf䉢_<Ðy¥µšacK wr6“+Y`GoóÝ3j¶Vÿ>%¯ü"]Î?壎€Q}£¥»°”ý¯ý)|¶ÌaüÒ0¨È¡‹¡MßQã8$bß#‡É‘4‚QàñU[L¥#ð$v dR:ÝKO9däï„U‚é.ä‚RÀ1U&f_Ùì1M±{?•ùzCLt Ùi×Üo®Ì›Ð¨gÞ—Ü}¿ŽÛû,u%–_ñ¥!~ò;h.xkþ(c—ÆÁ‰z"ãÒéT‰Eæ¾hLÍôãÐ!¼u‹‡ËC5R¢È¥«üðs¬(¡`m¤YWÞb1yE8²<Ã[tcïÆ“²&u׋jÉK‚îæ/PJæÔ¬®Ÿ…Ñ=dhFs”|³’-†¬DŽû÷‘Œå«Ê¶!˜÷T$\׌¦Øàþ–^ “ņ*Að¸ëkF%ð3LËÙå5õbûù+ +×ߊútrüX§¢Fæ¨ÿ(@òÉåé’ªÐÙêÚ‡ gƇ;Ò±+ª#·Lo©Ý@PÎýÊ ý 3ã;¨kÇvA‰ÿ€Ð8ýQ WgSòf,ÆÌ¬Ðè„4VL:?ÀÇØM’I:d2 5|Ý¥FßSˆö ,&Ä=¡Î+”Å%¯ÿº¹¶šçü®…¢zÈzâ9>ã9j@Êx¶µâw#ÔÖÍs¾¾8ù(*ÖÒÚnôÿãë¾ó½Ž€‰ +tƒžn™½¶fëåÜA¬~@ÙúYŠÕ<œñ=Eènå‰íEsg Å]Œ7Æ4…ÊùHý%qf7³nò´IôÅè*·¡›ª¯n}–”9â´½Æ.ÇÎ|¿xýè×>=¦ý¼·‡=jlr¾;EÞ©kÒuhS(ŒŸÞ­ ’ƒ®Os£Ü+îh SIŠíªólgS¢RÇ‚a ¼à$/vouŒD£z¤´q'#ª_m‰4EÞF‰ã5²d!]矩¡N7“Úë™÷“hýù­×ûŽl¡‡s'WŸ©ñˆÿ÷3®3Ô’E%`#}2óü,+€w‘üå˜á• ÏJ’F¯7E‹Ç«¿ÀÐÎ ¯¾"^°P®„4ée¥àÓ_xaòÉÞu|9† â§§­EO»ZJNÿþ–±06B¼LØÆcA¸e_ÍDÐáÁöÓCHQ©”¼iMCÉ{¤j¤0ÈÓØgBÀ¼ – :øCEUèÇVKçT§Ä÷è1\ùˆƒÃ +Ö¸'÷‚gÄnÃvHMlJ&¨ù_[ŤwKÿãÝbÚK8`Ÿ³½ ßɺ0ƒÖe£Ý3"¡½Â =md®Ãôóx8â¿#ÄE×8Ðl×±qO3¡$Yzžª:8¬Vßã1ioCkü$’¹Fñ[ýcDHøšóbR @d×ÙeC³ô×WŒ)¯õm95+U>gGؼ»‚†»Ÿ6@ t<ÔØ{TœÂ4¼¥Må”eá·{´‹‘óßÞÅŒ¿mäñYªÕÉeº3Ýer štX “úñeLÿº#zŠÙõOÈÒ²[bT.Sðp¬h¯þãkÆ2X¡I¶°“R«hÜÚçXô˜Ó«žÜáãeQ`æ/¢r¾×r“çRÇÄÔ…ÇüÛGXÌ‘ PôÒÑG˜P!Uäõ€O˜,öu¯Z¦©!ÄG¿Í†"£’õëÕÖÕ=(à6f˜LºEĸ–4ÛI‡frVÛF©OÔÐ{ät?Qð.J×{*{GúÓx=oÃ>9¥º‹ª&c4¿-ˆñ 96dbò•Chx¸±eAn}!ZF´;d¢ã¡d£?B÷êþÎͳ h\LzD΋nÇŽ€ø~zFˆ¨Óëz !Z.ê 1/_„ÿ’d°ØCWû×·~;éfú&Ä¡Eï¼Ç¤˜:„“õƒ¸ÓØ ìÖÊUÞYÊK%æš!ûÕ‹(¿¼×}Y¦‚ +Pi±C ùƒIyøñ3RfÓë ÌHýž»öÊ»¤d¯:¯ÇŸåŠgkªäõÐÈÃ4FìG¿¾í;g8Al\SÆø/uWõ­¾Ÿµ•Ò¨G·ƒMñýæÙaBòw“à’{c>M)”±¤|ˆ•ã—›?%fÏӮ”¿ã‡~Õ8|R&Œ+Z¿ºUÏŠ\ó១qÃ0×€áþáµcÀ™®W(ê‚Fë¼~ ½xµ(²Ô`¢ùÇ;4x`ig€ ú¢%š8ZPÁ9Û^‹ í yÇ?ÎLX2µævzz[Ä4Î%‹º(ÚIù·%úƒ©GÙƒÔØk»”ü†¡É¦¿¹kÃn|ë·“øèE.%ð +&Ñ©8ö.±á|¢WdïêÑàÅå²4$@þïJ*Þs—û1©œŽ‰µóo_²‹ •½Þ{Þ=-ýýàõ.תΎÁ7/Ì$È€ lÖR­ÚÚ|<öU·#ʳTôÚÎHa‚—mÓÄï†Ôk‰_19ë4Õ +õÚ¶|Âì×é‚ê‡ï€]RÕÉtÝ•qD#¥,¼\wŽ®NæÍH€“ª‡±À²™'³mÊ_‘¿ŽâŽ´»“Û>šx€©%¡¥«£¤ö¥»^F\‰Š{¥¬µŸ(­9¯Û ”ž§’¾à>N×c¢‘úãÛÆ`4Ï/.Â]×8êGð`Ð]+ ÙpÌÝó«Ñò-iÊ Uõ»»ãµ0‰c ÓF—pF®ó¤ÄwSÇuÅ8ŠQöí_¦Äã`#YY‹ÛÃO R‡PËŠœXÏëÅóщÍõNx?áGÑ/W …p•,ýsMV­]ÉÅÿg @‰Œ¦ƒU¥Œ—T"±íÓW2¡í¯ÿ1oœ!DöÛ0´Ð?E*‚þ¡g®q¨œzwÍÏ|Oîv+Cë/SØýš‚\üÎN ! { ¸ò ž­U--ÎÏ[1àGÕìÓÞ º¥f“i'Š;ÌãŠÔ·d´Úaɬ"ï䣸yŸÞrúþf»;ÂëFk"Õ]†ÚÛvß=.Äzá…DÒv] cøY€¢;‘£§rÚß庚2dˆø?wÚ-­¢;Å u¥ªa5-ï ›‡7MŠ"Ù:¾fw–hO=IÚƒkHkíõÿš¥jð½éÝÆ¤ßëPFW³Ùò¸6‰š43è¡ïæD“¤£®±Û§ÆÑ75iH¥wdJ³úÇõDhMd2—³Y…®:‡”‚ánŸÈ”˜Y™¿ÐÊœ¨B®ä}•Ô­†  ›uü–*SKi#^³‹ˆ9Cl—§ª–sIlM‰ü¢ 9ù?þ?æâå.Ķ£ìKøˆ@üGÖ1MMÚ§Õ§¨N·ý<Â&ôs®iz£Áéó‰=MÔAH¦w ^r8“"$K÷QÔÒi&¡ì4{Ôˆ™­R×Aù(ksG,6ÃkôNÓ¥L!cÊ^êàCì:7Ëm.ég/F‹m|¹Gz|î¡Äø˜Ýc y÷#?ìçíï/ù¢|óEs0mŸYœÊéL†.̦éG§Öw‰…“r”n¨YyŠ5eàøw$ ÌGr  +BÞ_Ƈ>WttÔ¯:Û¹v0 ó+çN>ie°?|{ÍWtµqQ¥@ÀZŽu^,I;ùW÷®¼ënßk: f¼…xW\=  ÛI}FÁ½<´XWŸHò&4œ°HMÑÅ)ñEýOQ¡}ãÔáG1Ö&é,Ï‘¢ìâ²#‡$.m`ˆ Ý¸ÏËêƒ0!ZÿkÕøÃ¤¤BËÔÆ‡N¥ M[ªU'ŠŒËm~SPÓÿ¼à›a2‘(T·_Üä×—ôÌd¨Àr$4Bš·Øqœ´˜RÀ¨ÓHÌøìóDAX¿#wø¬:r15† $S@Jy‹qÙCFÖ?9¼h¦o±åòаճ?É¢†a8’~ßQRˆáqˆ}‚ô9P„˜(«o3Ð’Q|<â׿®Ý-l¿ÏÄ›¨(¶7˜ Ä +QkR`›ý»Âþ-·©¯&F°9!gͯä²û¼ gw†ÁÅ<•zÐªŽŒi¢î¯fAƒ8ëï¾<òöQ™S7#`·ù(p2W®2áz‹ß|ÄR´»K~ÅZúý­ ¶Õ?ì»Èz=÷I‹S?…ÿƒ&»ÆR$9~«_MùØt_´ù1E=¥­ {.jUt¤¿ˆøD¯ k}k^í,À¤Ed:ý<ºv•ûuõOM¸½csО®çöïàâ ‹<^^·ÛB´žÛM4±à|ÉaîVÏ?²™}ù•”øÛý´-žÁ€E~hG…ÌF ¼:qI·¡¡ N¡Ú•í¿ÎÉK!îP ½f4ºöW(˜fƒ&ì[ÂùЄ…mS•ÔØü…[lSUpZè‚Iè|‘–°L÷u}cR`ÜNÈ”_'­A.èouÏwq^M…»§Ä%ÅG„œppïêÄÓ$jùÓ~$G¢bvà9Ä÷·h/!]ÿÏ1z'¸$Æn¨âvv@ï+‹¿ÅøŒi Ÿ·ÒPe¤, +;°_œ2 ÉÞÚÔH>ÄggÐÀ ºã`±…BG¾&î‚x@¯Büò¡Ù3l2ðpw¾J«<ÔÅ…‘>nw\á¼WkNg +fù\fÿë¼ösí +êÁ må3Ò·³.*Æ­§¹'£cøU͈گ(?Z¸}A3cõ%S~SÄlÕ—Ü-´~á›9-ÄëMípl‡M†0,GáèÝ1…‘ìxŒô5Þu§”9åaå5ÑN…iDù0¨UdIÞ…ô¿7u÷Xº[«ñÚjyÁÙÍÏ(ie¹Ÿ¯ÄŒáK›µ3ý¶ÝåE~'FVœh”$+—ü}NÞ”Á¨ ºôu錩è; +Ò‡À¦Jš''JÆæˆ˜Qu|ÚŽ²Ž®|…hê¿Wm§3¿‰µc*ìøüx÷ÊU&¦҂Í&kç‰ßžúÀ™0åEÆ»U?•±”p½…G™b±_z¶ûÌ¿þü²ŠªVIà1€µ$L7‘¼Sd‚Qê^RÐõŒ+7 ?Àëpÿñu«M@¸d2Ój#×—‚Æ)„È©ÙK+„Ó¾®¯÷AúïX"*ÅþßÑäI¼K`i¶|V•ÒŠ™#·|g®Gq†ÜM®È„ƒ_uÞUãElqŸ±õ´üúÖá?À)f`ð±Ñ@¼;'t•1VݰAòÈž ù˜˜Øi1í˜ÓUÈlñZB`Õ“GßöèÞ ;LÙ;ßZóš>2h ¶Ä‘¢£I”Óc"wÈÄßÙ¤Nº¡Ô ÷#“õ.I€9 ý\RœP±0Ið`Ü¥û°Þâ“æÙfká¬33§5øý1Ü»Ù,yÈ«¥G_ãñƒšÿœ +îöÛûÚáÃÛžÈè®ðÞáªóÄÍ~Ÿ›·Á›ºóѨÌSÎÛà§à0¢Ô„±×Ø V‘‹,Ùט û«Jyžð³Â63™|Å“¥Õ`L +;¶ÀS¼%xIÜÃÉSÐÝ#OÂzȧl£ /ÌÍm&kíÊÍâÕ(.ä³R“©[ÔD7¹õ“ÏhôÆV5ATþcóE°Wë„ÂëÄa0&I’b‚GˆõuB’tZkBó +=íý-Vñ$1ãÜÆkyÆ[ÿ>5ÓpAÛAÑ÷!s—Ð0¥à:ç}ïjŠ­'áWúz:^r÷ëwÇnŠCºh³­d +Ò¿ã’¢é0ïOËá1!@è3FzÅH·¬,ÕÖ¥I¡V޽î?^/@Ú‘àë„|ŠH +ÎFoç'> LrÈ•ŒÞÔ"È`$VB¸XOÈ k€NV9ŠÒ?˜¶ÂNÁA"Ô2¨aõ=¤ÇoyCÑÓ!„ í ;#àáÇB«C$áàï3ñœÁµÖ¤Â¿ü@Ëܲ‰ s·«Ã©Cñ8ü"ÆÓ߇˜|jƒÿø§Jˤ룡˜Å’íÒ±š×‘üȬ¦èTâ±”ñõN‘Eð7š„ø×~ÅÁZ”ëè;œðˆ¦ãB­RwßÏ…¶_íq4F ý"¯ŠÂ—ßäó›”çý6V?~ŽÒª³š2 ã¥;%€MýÙ<žÒ#“N‘p¦öGè×11؈A~¾ˆAü‰ã}„`ÒÀDا§;ULOä_3W.&â#¼ü\2ÞI›ž^77|Q°kŒøÞî V\à™iëcBYÛq¼X+–w…¶ƒ)ÍÓEr!¡ÊžN9Ó]úmð^=UdK% JÚù{¨ñ6Œ +3‰Ce³ð´Ê¢BcI ´"1ûÙä&&‘ +º@yfbý °3 ØÙ=3°æmÆ4 “Thêm†ùd Pþi ‚¬Õ*½ùøçdl*‚˜ÑÙÃø2S_V2ÿ;¯¨´¯lÇ1x€µÌ…/ã6Z¢bþ>|œx€ëßÎá¬Ô"â/=»Rn¼1mÄõºÆ ñí«Ž±9̃ig RXè©\HEfcúÒgˆm$`Tˆ V&L˨ñÌa“GÏÀ‰ƒRÜÛjµŒÒÿ¹ÆâÄ1&àј$ ÁG\\C&ýÎ4ÎÜ@oææ½BX‘+ÂÎ!´Œ:ÔmC—a×@[¸‹ð}xpm=e#S«7› ŸÎœë¯0y¨3%Æ÷÷y‰¢šœR¯v¤˜r¿Ï ˜ ¹E…iâJx,°öù 8঄Ë"ç¢u¯AV¾ñ\¯1ÝéH•ð +ƒR9Uܬ ðTø(“­˜O˜’À2óú¡¢Ë!/‹4K•@@‹G š…ðé—ñâŠj¹cœê½{Ò Œ%FµÓãI(Ñæ!‘zÚvžÒ/L¿äû>,ŰВ*BÖÜ9b^ %ˆWšH¼ŒÇ&tË> ÷J쬂'5ÝO¾TÎÁlÛ’‡ÒclÊ”žf,‰ƒ® LÔ°»ä‰f¬gæ’ ûŠL#Ë–ú ¨ÉËõïzÍ®‰ŒWL;­†+?`X¡¾ò>ºõ/Ťz»I‚œŠR"ƒw·ÓìuIJ}à÷±|D!†žjݬÄÕõ†_ËßÈItÈ‹W Ô”ËXúšDsöÅ2éŽöºÕõ8[Z°ø dF|s혫»èmænéýÇ‹H…Dæk…|ý)cë3~G™,µËB•%Ö[™B•Çñ½ÏÌœDnU)ºàë|“H–Lç03uÆkŠóÓ ÍÞiøiù‘ hïyâìGÚ»&,\˜Æƒº-ã±g|·ÿ˜ˆ‡Ï[*Ìj뺫á$>O‚PËF”~„ð'€ÀHÉÔH]Ó=:M'Š—YÍ–A;Ù 5&øM¶¾fü]‘¾ã GQ:¦M½à¶ÙA{¶•¨šÐ—uzÕÔI™—„rIÆ: {ïé0F€·'p»¦Àꌞ—DIé~L{d‹ÊÂÛÙÜn ÉΙñ”wmÚþÝ7Ú{ïê§Ñöâ L<,í`€&û>stream +µêý.Ë'g‹£1,_öÛŽÈë2TtA2T!¯2"£®Ö\c\"]º ¾e¢²Í@í¤5ëî€ÔýN÷ý†/Ù uãQR çI2³?å”ÜÕQj6ã >«FSESn¶ñ¾‚û°ÖzÓï#ø·ô1ÙÁ/Ε%ô¥ÃüB¯aÁ…‘ÉbA11©…À€LÊ©/œ<¨ï~<#é[MYˆÍÝ ¸KüJzÏbàT¸gª”‹œ{¦‹ ÂÜõ@=¾LFzåE—Çbs ¦4ò1 >Íß;yÖ ÅD&`¢ˆù®¸”ÎF$‚E°j†VvyB)’"ÍYiÉñéµÔp{Õ½^ühõ0: Uš\h€DŠrKÿ”¡Zʪ÷%üóò¢µ‘3sÝš¥Î`Û!ð"1%cÕP +9_ ©²O¦c]LkÅ ÁÄ®‘w2Ïâ†òcn?戜•Á½¼Üò½T¾³©Å+õÀ ÌòÊ5ölL—J®~ÃWì Ð8Fœµ¥M«iÓ%Ë.Á¨†Q{‹¦[—,ÛÒh3qY$Jt¯pe+±SH€”² ½ÁÑ/>=¨‡DµYU¥L0I­B/×ãåZ\ò÷¹ùùà(c‘¬¿/Æ@«Ž—³xeè·1NᢠB„iSG[–©ö€u­¨'$Ôñ¾8w°_ÜALîÿ0‰gz•o}ÿÇôAm¢åXG×ß¾f¼Å>"¬ëººˆ ðþ5‚‹¯Qú_K©%òæ³ÎŸç¦l®ÁÜORmxÊÆ_P]†H{gbd¨úJ]´ dz_*‚•«Öœƒ5?ýâñOþŸgägœŒþLæßQŒù~ +lĦب{b+oVÔ„5Ø<ÛuOV5%ÊÛ!e¢ØaÐßëgÂÂøÉãa­Öýß+nß‘ýàþ§I@·*½¿+*õÍö©äÄݰ÷ÛYUª¹&´èëȽ“‰•E3"òŠ'‘ÓΡû57Bi `éôºÃ2Œz\Ì×ðÀùñ^•a+Jàw|Qºï,ñbÝ ŒË ۩ѨC|œ—Ÿ|ÖŠW‹ÄÔ}þ“ÐRWï]ã½ëËZ4ÆDýѪª¬ða¿ÑjÔŒè[o|FEŸÌÍÎK†‰%IE‹_Öôži†e%´HæêQÂÖÿ‘lÓjû>¯¶•(á¬4TEV»#Ôßþ]4+°1­· _£ˆAÓ‘Ÿ­Äj[QÖ1æš S¾–þÎ`C¢¾!T-¯«LïÌžîVcpå÷²:¾2ÿú“òsª¹Ž|‡bjk_{gšÐè|£Ÿ\@m#·ð/6Fô‚¨6÷ý‘_6…Ñ%å ŸQ9+6j÷'À –Ø«`Ðöá4ºFezC²øøÚÁHFz»=I„U‡ënŸ/ ,ü“èÒ;”%ö¥±ÅβXz»;ê#0›õT4&}Ä>¬Ãb/]ŽdP”]ê9o¡®xB½Ù²’ÕÏßkÕOvbÜï³òbªOlÛøâ¸½¸6užS‘}“±*È.ÅE)Ü~¥{ñÔS—ʘü¥/ýã–T×Ç*–Ø\§º._ Ï’&|e÷0]‚dù^©ÿ®–|U[^5Èkœ34f—¿ÍÎÜ†®tг‡²Ñ5W:Q–“Ã/îÖ_l&òlÜU‰@àÄÍÈ8Ù´`h憛I–h §Ki¹ÍÐ,’3ÃôÄ@ÀÈÐì×y¥{kšÒ<Ó:¡ExNè°`«¬µsuÀÛFZºúapWÂÖQw—i<ˆf0þ@ ÉGr]«½ãB¢èÃ$†Ë‰æCIô¦¤êcš?WãÌß 0ÿ€—•…î了pÔQÎŽG`Kjøò7E¬;¦nÒ%žo ×Õ×±"ëy`©a‚èk{4·©Cjßñ1ˆÈâ£ÒmhÅPëYýyôòGòZ&Ë…t#Íe/‘Áb·F޼ÉáoÔè1”ü!*½ ò'&'†ÍÄÅÔ[! +¥âÎ0S¬(íø;ì‚¢¡i”%w00µløü›Q;ê"?Õ"D6Ú‡§‡&à>ý ¼‚lj*7Á^^Gê–‡ë0ªùU¥9;‰Ð?nAüãè½…¿¥/h¤ÅI¬ˆó?¹:†m¼¢ Z$–€”ž15‚ϯïí$€š2­ù|$«³‘H»Ïu•KGIO°=ºg3q2¤sÚ…"%qµ(R'á $‹œÚÈ^£¸òÿ†Š"ôëÝN¢›œp^JþäÊ•X5+¤Šï”Ó㔿6üô_ÜôI’Q4âh¦Ô‡C5Ûª’ТbÅ÷HÐ óT’¸kàH¼ÿõ?¦â‡køDÆDoZcóKº‰9)\¶iÁ€ia…XµÕ«v†v«hd¢wÓ‰$(ìr•“y¶ éƒ]ñ"»{¸+" ΋˜_+³ÆÊLYÛxÐiNÿE@Eþrwaþy‹msJT DšXJ–˜¦Uìt“£áø +ñZ'ëÀÆV?£aAy2žyL=sOJ‚´_|}uhï¸bRç`[6ìÃÿDbbÑ䉋ƒfŒø!w1ŽòÉ6ö¢ú¢¿#VöX& +«–dÕ×§~¯Îh¤£©qbAwÖw†…ˆ! ì{7„¾s!Åùh®öß®X¼ ŠK:¡â!§2ž| êù0¬ñ«¢qOìü$1Žž ëå¾ßÿŒ³Q¯Jû“Œ¸ßê×+«žnÕ‚ª>Ö“’‚ÜFHñU#1%ÁѨh;S«êXÑK©—éÏsòØ÷èD’…ï?icTÞ‡¥Ÿ0L»´ÄmF÷%FÄÈ(S×; }òƒì4xª{iÃ*šaˆI=Ҩؕ†Òlˆf:4 ”ö•)uñ—• ¿ÏàÍ$ý¹‹ÖÆÜ/¥ åÐÉû(ÇéW,Ã:‘¦ºÚN}¼Òþ¼†Á÷ÿ¶À1ªê4%Çíׯù×ÿìâ¸Ñþë#ÈI$ªšìR„¦5ë’L§fºIŠ#9Ø®î–V_K`9÷'$-'c\òx9¥ôÊ¥3âó‘Ðæ]K‚SèÛáÔû¡~ÁûÕ\ ®Ic2lv„L* ýߣâ5ßL­kßìÿNLNBýŸ™K‡ŸržõlªFçZøóL¼mΚôx…nd¾®ßy¸_NYÁ +#RãS4+~f‚¿²ÝÐprÁeýÓe]Œ1Fþà|:qO¯Vú—ªÙMHŒåàΓ½ï#`ëh¿ž¼¢ß)–Pé'Ú¼…‰Áû” Ô”b_4”UwýpTêWט=/Y«üiŽŸâ¸ ÅÏ„”…€‹I[µ«sa:è‘«Û´þÓ®¾ £ò¿™ÅžáV3±*<…é÷9yµ"QN(‚ wAÀìêˆMŒ]_O‚,§æG²i÷šGÏ@˜©¶UÅP +m”¸úæÈ¾WZ½†ðŽèí1Øu¢9²2tVD~s:ò›Ïͽïžc–¾øçíâË]Âñ= +Ë$:“&íÊ|¶šñ±´ÒùÝiÁ©6ÕÙˆé:}˜ÆÎ"ÙÊ_![¦‡ûæ»ä7"]Õ}§e<–Æ´yLµ‰#ÁÔ³Hö)xß’¹ßå¶°s¢¸>k~KJHÓe5aoî‚G4%ÏÒÔ(ûcª/çÒ MXê{r—ÙzŒ×D7uû)˜Uf«?ªþ©œjãxÛ§šgóòî$\Þö)rjw_âžVqVÉTà?o«(š`¼¯Az°“íª&Lb ]Äwê@پɦ®wM¥·œ•c#^"ï«/ß;ª0Òv`çg.ù܉‹ç+ÌžfÄ0®¹ãú¦¯ ÜFZÄzã? yÍâˆYÌ ¾@óöY?ßð{µ6C ô 34ãËü×ëùÐŽQYš•r~b$+h0¿íÁÌÆ2·3.0éÌ/æ²Nf®·ÈYoÑõ[Éò]‰å¨Ÿå‘5éíaø´-|ï‚'©Iu)–LêÖf8è»ëùˆ¿NÌó+œ=Ô€Tmðqøú¶@e`„F•Ü]"ÉkÅØ¦ï×µ|«J{¬ËÃ+…né>sñ¹±ìÌËg·ð¶.E·×B/zóAûf‘鮄窈÷£{P•ÌÉ;½MYwMÃP+Õ:»Ÿÿ:)2ÑXÿr§¨ç Š¿oÐJþnxoN:5¬¬?þ>”ñ…TGýz˜ªŒ9Š ?óíQQ—ïð¥çk¢L°É‰ +){(-¤ay,çG5Š$Ñ—ê%ù=Åh(îŒ[I“{#Ÿza ++ÿwXDŸzH¤™³gTb¼¼2´­˜¾š©… pÓjϱ¶€ ôøî÷e¿¢ŒzA”§ÿëoði†“¾;†s|-¹\ÍÂßÛÒUÆ»¤ 06©ë«„7¦WKSSkYéû{N8ÕÜ´ü—C)Ü-o×p¹(VŸÜÞ›·K*Ýñ_#»¤y75Cp0CénšßKÓ:Ч5“©‚oùŽêv½×ü[ƒéúV-L y,LÒyþ:VŒ–Fî7¡æïsóbÝã ;øó÷Y6*õVÇØT©îÍ :ÕàîѤ×zKµšîTAŒ'Òn”æg.ôãï¤>e÷uì¯\G1€±->Qþ ÜMÜ dú£E[Ù’Ð*÷Gò+€ô"îÅdG‚#ñÃÌ;õ]Ç®ªèaãñ©¸é®Bî4iÞEղų–-݇…¶—ª„š¼˜ßk E~§ç  Ú»»ìï£ÿÚgŽ:{8E(-Eå^ý¬ª}­`,æ/Jò>à»ÑãÑÙOËÚMœQYÉç2W€ŽVbóæJßÁ=–¾úZWä¢êo¢·=Ó$XŒZžÖŸÒäž6UzXdÞŠ©­G“Æe’kø¶™V«¹ÉôÀÞuM²È +ns¹ï¾Ú©?í5NVòÞ‚K†"_RÚÓŒ¹îöˆ†æßÇýÉ›G‚‘åDñ³áá÷,V:bõiãjôšì( ŽX˜Ní´qLîMiÿJù¦“RÕ¬¨áæÕ6Õl¤åN–»÷—Ð;Wû’VEÆkªë§ìiÏXŸæÔrkÑ3­Éùßß³QKnDðÍAúÿ˺­ð6¢G×í¾àúýRl€ß™gÝÌŸ‘ÈmîgTæ°pˆªÂöÌá½]5Ò=2"°ŒBèïò4EhHôšsoU»¤¾’²¤×#þøÁïÒUwÖdYÅ@#i{2ÃÖÎbKÓ¿lìÞ¡·Ë·#5*´ “çÊ.ô\Q½<#°=@£½¸·Î ÀÓó§S|Å2%âž?Òj_¸˜,Ó¢v´®Â¿o…H´Lôc°‚OšX0òÄÊ/±òwôV©š½àª×.1Ì;ªôx ÃêÐ/,?š'îu\ášÒ†²c¤bì—Çø¤Ç?-ÿœ•çRHEzjçâ{ÿàÃoéR¸Æ®vüÖoÌ™•VÇW%!5%kyœ@g¹bZUC@ú¼"ìá<»£njR%Ïj†*³°Pî˜+]€ê_©È~7@üü@M†'t—>AÛãœßi鶬ô Ó…aÆ«òƒüz •k[–åÿ”päE×÷Ë ÑŽ_F'Y]3`©²Äñ…' ?º§‡à|é Öáﮚœ7‹j‰fñ?î6áúd4ZÌv²·H=†w¯,³Úo£á'ßë·AgŒÍ =¦RŸ1H¥<§™ž1Óõ]±·XÛ룞HOý>%?êÌ8aÝ~¨†ª5F‘ìc¤íãʆû²–IT„¡mVúÉ(}™GDâ]}ŽIlBÕ(­<àëÕÇç"rŸ$= !Ó ¢üÓ:¡×TžŸåkÄF® U¦rÞ¢8 Ël<`PO0[3Ü"É &7­Š¾dº«3‰„Ççç0™ˆãò’+«×PM¿Ö¸ Ó ¬Ûž·øuøƒvʪûï7•2reHFãr«L1F\Ä=š ˜Ä0O.³Ú´ Þ9Ú$GUK¼¦ý˜‡›>E¶rŒ$¶ÿ?ÖÞeG³$IÒ{‚z_’³HØý²4÷48û WD.ùþ´ODÍ<2Ò=ØÈštU·kœóÛ±«šª¨È1:Ù>é +â-²l=6 .˜—iYdd½¶IÒY6öøcËDN©|Fó[Q«¹°,¡ë§¬j“à®QßNRRDаéLL}IµÓ[Jb#=l)àXf½-óÍpŠC›êèÎG—)úìËQxKà¼r׸À™G9çß4î”ä¥â‹äRÙŠ.MÄ1‡âÍFh`0–A iþÊD@å6‚L…†j{z”hr ü©œ½t^äa*#¸#úÕ S`È5R½rÆTO¼ÒTc× >–ò#n[÷›•Ó¯Ò¯‰_S½â½QSMõ½rŠfƒçPxà•!-™/‡uÏôgz͈Ód/vÖ‰ÀjjÍîB‹Wˆå¼jŒ· íÄ"qÀ¡´_Jl +¼ ßV>Š@üDŠŽÿ4F…›t +®XV#“BYAaLj5ÜE2€I”Èp®~— +>‚ŒR`P4 »È**5,3,énAÂ¥òF"”>s¹ù[—Ò)òBqcqÆc +tÓüüÆmiLÎðaÛ8{gL0–¬2“MÌü¢Õ«ý~5 üî­*Eï¶ h³ü몾š9â2ì&xÝ~Rô_qÓðrõ¢9£û¾‘Çun%ÜHE H¥k"(|µ–‚w(™Jê¼›qùõƒø»(ÉŠh#ÎÖ¦ MJæç#N¼o °£{ÝdƒŠt.%¤th`„iìzÉ©¾lå+‚Ó5ìõ +Ažín_6­Å4+êSP~ë__1¿¢êRé›Lpã-­X@Q­jb„Ø¡ –¢k$ËwÔKWòsk>}3Ž)#—xw\WÆüȾbEGlœ³ªÜ§R"£¤hp—šÕŽtƒÈYLL³‰ aÇr7.ñ-sݳ¶úõ¾lâg CÉVîÇÚòS0ç¹`vCÆ5_ðKìÉÂò!°ºñ®[cŽo ÀýØ +ÇÔ L‡n•ò¼*O=Z’ +YÍÓ]³ýëF¾ãp«š~™r­hßàŒ› Y U+²‘A¨$Š`ÇÚ´¡ñ †Ýmc§+<Qž°/ì‹7q*(‰7f»àËüñªÔáǯù&’©†„óÂÉ wöSBl¼ÎËãOsp+¯ çt´§b––…°Ð .@ç=wQÁ½á >!GÅóÑT•L4÷—ÉѾmc¨øìÀ©7£Ô°edpá@#¼ÆF¼óÜZˆW€ªØ9–±½JVY•µŠŸ}ø%ü‹!(#Uäà” øC $™U;‰/Ãe¯Ê¸Í•”Ôø„,‡+w¿[E²Ã•aô‚‡o»R0bY„Ñt¿‹°êŒ¦›\V‰É +›|ÜŒÜoÕ*ÆžW8HÕÒ°z™iY廨äötÒÖñ»bÓ²[Â8nÍS1 zdI£÷‰SÊàO£ˆ<:òëùiÏÒì]Fõœílç`¹dÑn.VnܧG‡õÜØ  ñwó\—y’bf·Å¬9A”z÷,Ó; ñ_óÆÓ-ö,‹Á:0´ZX4óã7Œå²C¯f,CÊ kž!Ÿ4 ½‰9nº˜ö¼v89#n©¶”h‹B¶3êÁ¾ü]ǵ8àO’‘“­½ Z1.7Ëé°m¾¼ïù¢®§n–MˆhC‹Ñžœ¥Œœ…*°xj¬r~QBÓŠÙzv*M…t%Üù•SrÃV~¦ò4nÞ< · +êcÕm/œ¡µ(î`½RúÛ¾täíÕẅy&ø1q¥AM*$'Â&9Ö=1On+ø°Õî5µˆ¤péÈ·!ï~ a¤QnÙ«TTb+ †Û•v›®ÈQçîé5ÐoØÆ9LLTt²¤šc¿ ÉÛà¤GªR!;e LQGTÕ•:?ù&¸½1‹„ɘov|h•@BhTÔ< ·±æñê—w-äܺ¾YÒz¸Ã˜¸³Jþ¶Åªÿº•O.ÓH u¤Ûy&å§Zæ}kÑẇõdÖóô!lØ"ÿ§ýz2Xw°Ýr‰SÞÝ}{ÚìæÐÖølž4ªucž¡Ñ÷eÓÞÉ8‡ÞœClûíÒö¡eLé^#*Åôlq2N£|»heB Öü€Mnr¬>É[м2N1ž)Ø­Õ<œÆtÜh]ÙfsXâ»Æ…[jñK…ÝÃ\ú“@–^£^[ä’D‘‘¢®˜Æôø‹EgÕvyM´?’÷ò§ÂyÏ‚€;”6ÝAr'óŽ˜ûw{Û“µƒg2¥×¹GfÂewŸZqA±Ãr——äÂØP‹ÃxË‘&,5⃦ˆJø.ýîS* ”Q…‰xaìb2ô+C‹ñóç¥÷ †¹»É½v8ˆh›‰´›”ÁÜRÌÝa©yu=Ò¹|ôöÞ¨å @oQMùÖIŸªqÛLE•Ä›{¨½0u¼½cbºEl& u‚QÈÇct± ›Pu\ôܤôcç"Ö>~3$±Oö›AZâÖÜ^÷PT'rkB>a\oG ±Ì®^Ä!L)¢ß’"ã{{>™Yq§¨&@n&|Âm)â3f…±†#Ô…Ùó1ôåL‹~弯46éø8c ¦¾}äüáSGµ¾Í3Å õˆ +Xk%h¢´á‰2ÂKEtËáo…ÆÑ»y~£“­êÉäžœ9z4›D”DŸññ›ÁùÜžãë\k–¸Ò>åSëaÏ!&¶½BùTâÒ2IFfòí\ÏAUè¤"«Í®Þå“é2Fž7šÏlH1Rs´[ø—m|‚¶ò +ôƒÃ+¨a»ÊÃ5vßâ×åðå/Ý«´¬«p¨½v޵"È,… óÅ]rÈ/«éb7鯭Ĺ•Ï8»8»™d÷1NgqIò¤p9ó3h´Õ[ì#¿åŽK®DÿWÀ£¦x#§Žv¤ªˆM®>(¿kä§ßÓ·#ƒÀÙé¬}£”cF]Ø!%–‡ðV, Ás.Ξ¡ð +!lÐÞ_€šÜ¤6o'gw² 'üEEÓˆ 3ŸÖ>~Ó¸èÿrŸaÕo·{ÁÀ€ª ñip©€1Ús["ù˜†iÒ褭)³ïâÜJF·»Î“k0ÑsÁ:æxnMßÊ¢}7=óKÓb¹Ná©ü+ÚÚ¶Èfþ´-)w¦Ö5¯ÕSùSv¬%‘Uê­Ú`ÎjØó.Πz£1-3âMºg}ñß5)\ÿ¨b=hCäêÆßfÄA¦|áó&¹"ÇÒRŠPÇTD “b*Ó/rpðQ‹xcýCŽîW!’ü„üZK2%“œ/¤c©Tðâ§!k!ÆI©–}¡Ð ÚDD SOqï1“*˜¸€N›QB¶ Ã(Ž ™±š;€/EµÇ+½/ýÒƒ1saáH~ "#@ÛWœbÐHˆ%‘ovþëÌIߥ[°PÐS + ÀU1S¿›Ý±Á×À?'ŠŒQÔ ìž®‰ÌN”7˜6Ÿ¼›|ü¦qoǶzC#„ÑØk` Ž3g[Lã¦jþsÑòÃ$RwL~bÚõ‹dSmz¥ˆÑþÃo” ¶Î ¥p¢§ØžålbMW‹3ÿ´v¾mä ìˬxsw¼™ÃX»Þ2^ LãÓP—(@ç¡NÓó´ålÐ,ŸGúÁHgŒÈu¨}½êE{™€}yOÑWqèðUÁÿ]Ûžx½äå9±ðð#nZ4ˆÕn‹„Ç1ø& +“¹Å=A¾òLMþǼ¨{EÆ’üæççJñýÂq øN–]ÔÓl½² ç ›+ÕÊ%~ܼ¯t"cò+ùÁxθBC~áv‘.¦í-zJÓ›TQÈ´MùºS–X|Ïÿì-Ù\¾ìi’8bÿiZøº+cók¡~Å/v¹eK›ÑŸ±ÁH€›_ôƒ}¥\¶Ù£}*Ëõ+wƒ½Gªg”w¡䛺¬êÛIy;l "Ì © Ïd«Yù^—^I*3v¡ Â$€_ÛŽõÔ{2ïHN$ôó}¥=ZÅÝ”ad6Û¡˜ÔåºÖ¨Žïýºã^dx8G¡:ã¤À)÷ »x&aÈQÈNbÚaÉ~éÃØZ¸i—‘.¯D:g¬N÷k,79ä+áÆÇoö¹iÔhÚØJ‚×ÂÛÚ4”„ + Ò:â±ÖwÕ5h†Ë9V½9tìÁWÅÖ }@Þ´ã’TÖ+§=aŠI,Húô ÞîÜQKø‹„um—Mâ<»o›bùü×_¬=È_(  {ë˜÷Mâ•×›ªòT•*?'¹;Ãj«ñ6²/û+6²zs~ }D×@m£:¾ϘÖëËÌq¢‘éxðµÄzÀ‹® zÅuõ8ùt4l¤ˆý‚,j}LRØ:û¢‘úß5)æmmb8'$I“Åõ§mZân°Î ËZ¯Äk¦í¨òõ}닽Úþ„¼ùãO„TÓ"™ÖãäÎ::¸N?)X9|qr§ø±/[øÜåQ¶—eG»>…¶o‡¿­Ð‰HÁ:†;¥æk2Zhf´§Z裩9ÕÈRÑÏwO“Û1žY<˜±X–ãŠ/Áèq •§ÂM!:lf¦Šå%OD£>bÔû]”â·À”šºªËµkj"@ +zlJ ;Oè4<¡o+ þÿj!ÐåI0v‹“¿DUö}e¶)dc¿íJzú¿ýç¿þó_éãüç?Îý_ÿÿËÿúñ?þÏóþ÷ÿû_ÿ¯ÿë¿ñßÿÛùŸÿ]ÿêüÿãÐ|ü?ÿÊÃHŽQ;;J¿+%hª‘FCål$Óœ,®£j•³*ÁÇË+ÅgÑ'Û–ìaŸ†\=$˜U„¯Åâ¡D¢#å¹GL"à>íæŽ?Bã¹ßàÊž‰²Aý´>9‹+7'¨16Ãx:‡©Lòi÷žfZÕÀ]“´×©DaÈw’’öEÌá./•+U(ß™í‰ém¢Œ¬AG‰nOåùªK¢ßÉÄi`ª”iÐ=Y k¹* IŒáËð2‡2]-Öðûo’óŒ$Q곩S„ +î˜Íxžl"sž«ÌÈ3‘‡P[Ò9² Ú:_):­ÿ +g5{ÅGºðÒk¸i³õi»usv¤C@SÑ!Õ¨qB’#z_áq"‡Ã¨…ã)©{WßDŽ)—KüìôÍ#êÍ30![¦••¥É]/`¬kþË¢Ó4Àá¤8sÝ¥JHM¿¦ŠBí½R-M;8 ™våz#>v5YkLÖÉ‹3·UpÎî^ÞFÔî’€±‹%Q®ç`QsñIMæArm,Ï¥ùHï³Ã‚¿Ž`0ÚjÐ6bÝúÐåB›³›?—–tT¯“&$Í!ÚÆ ?^»wg'мކ²€‘Œ)€}ç…Õù¢ØÆJ +bjøkøÑnU§1¥T°X7ò³3‚E<öÿŸjÍBÌW +ÓSך‘Xké•h%ë6¹:ͺç æèª˜žcC3´~¦ÝE}RªYúØãÅŠI€hÈ‚#m,%ê]'î”$«u¸'’ʰ¶z´Å•(-&q?ŸOÊ÷ͲßeÄ˸¨ãî­Ù¾Ö2ÏiIYïÉYa‚*:žtu\åEvÈf#©û”%AüÃ@<ÑËÐà²Ð#–p×Py*h¢ %ªý.¦KKûÅ+\î‰qOŸ7kÆcF{2Íaa7òõ)Å1˜Ïñæ8˜„`ùø­)rÜÚ 4¸µÆ¥“üöØ$“Ú›öÆ.½è+5´ž %ÐlÑðÙ÷—† É+£îÀJuÏ?›ÙyS®“cŽ¢ Ö¨™éhU#^4¨dº›ÈÛ±8zrþ`€F1W͈;Ž;¬—pVнŸvý +Ò2Ïh7w1âM"å=¦sÁ{ÑFù>( ê³÷›_ÑáM‡€K€°oEÆæëÞŒêçâ9o +•µ›ÀœP/•÷“åŠÅ‘¦ +lšþ¦é?Ãä"a­¶ý³F®pF¢>úpmŽäeöMW(_†i Ú]=P'ÖéI®—Ç„j²±1?uXšZ[R¥÷s±É0‚»i©Ö¬º‹IZÐ |‰–òÙýJ ¨4Ò,†{xrgr%ƒû™Tl¡t×Ô·5eçâ• +j2O :mÛÏ .Ä + ^‹ÐòMî|58hX…£-Ó:ò\—¯Ðœ0 #fQ‹Y4.(”Šú‹Å, +ûsë–nv÷–·Xï”aú¸ÒÍyvììœÄ*ÁõV‰g_N +x¥oóNXpÉ.Ç­Òõå·ŠŠ·hÿîÅèâãµÙ*ËÙ[ÛÅB*#¯Q=#Àg¸p”?îÝC›úȦ`¶A¦MGØ÷i£ÿÁ=¶·ãÓ2l=™†L(_Ío#ÿn\vG¨oÿ\Ïþ¹\nâÇØ}š9µçµŠ,‡ÄÚ´tJÖ"}l“óû:Ųvª=ú›yN—Ó•KŸ^þž‹J5“”ä.Zu„ɼ¦Ÿ*C·òOZ¹ÙƒðœëŠ ¬d6ous§šE%±` |$"D&WW!2¿/ĨØk#¼;7Å f¨ØFf ]²Ëœî]y„÷¢±ÀCeUÎð°[ †ç!†–¯â¥ìPÜEgvjÁ¯¥¤uY±hµ4’ƒ[ó=šf U#q‡Èܺɻw§§ 0>M,á-¼(‘ƒ`êžM;ߘç¹ÍÅdÙÚ‹¤&q_ébø¡w‹\"9D&HK𬙹ÖÇäMxš"6ƒœT¸ÆY #\…7Wx|z ø(®¯9zdeùLä`ý×›ëjg.hŸ‚;P;-`Žx®’ôæ•Æc~;"/AtÝ?Tu\!¶”_`<ÅL¹è°Ìˆýw¨}çgûu÷”]aòÜõL#tjÜLµ@ÖC6K •&Ô1ôøè`l"¿ÃP‘£úá¶Ç|Ä¢çžÁ¢À¼äìô˜AßI#¥˜}̋ܵ÷1îrª! È,ô™Òz¬+\—q®¤ƒ¨¬{Ì:Nÿ‚g¢{èq<ëò†cÖ¨ãøûØ};,<óžq±Õ¾s:¾ä ž#\2%ª9ì]{;#GÅâÞØÃ"W°‡¿)ªÈë•é›Ê‘õ‰A èMṏFD-=)ÅÓGÛ/ ÙŸySásåRLÚ¨g¦cŧî Ìš=š.A%LŽƒŸ¯——qøŸ–G0§ÄÞøÜ)h,¥6œ4üö{_âS[‘/!r±S °{~kõ[ͯT„ s8“¥ãÇЫŠÝÂéØFLÄTvä W¹)rr¢ÖȾ?bƒ,q¹iïEçóJ †@g süóžcåŠQC8úÇ÷ßúYö•Òˆ£½Víþ”ÌYb?:a!õuÜOe@³+¬ ³›†Ð›âôç +¾¿"øÆžEgY\Ú‰/&8<¦%o÷¼òº\N&âr•O×Í éÂÉ ëVå{e¥›ë¯!•~󑟵ԾZ’¢èJ> ¢sïÊEVFÏfª?í¡%ßV› ~äÞßʾh4“»óU5¶ .–r´PaË8¶Ý£FïyS½ëðÅ™o ìÙôoúäVR¡¦†E +·o#k8DL³iÇ&¹Ð ÓŒ¹¹â’µj¤Ö\tÇœ^òW¿y õ“uP¹<Ùš{«Dý6+Èø•=¦wZú]y:÷»‹!Û¤° ¾¦±ÿ*5M–yH5gó¾SëÞ8æTž„Í¿ÞØ¿eRå=Ƙg,V°üºõ}¦= š^/›PpKŒÝQ?[ArÉî=Š8àêÞ÷FÛ|õw߬¯g†|d ÕõNÍ™l—eËx£\;µkY¶”x£áõ20Ý3fCÇÔ£%+ûnëVzón>ñÿÓüz)ß.X…¾:Wµ_fÜm§Â‚TeïXÒbäÿÂÕ™—,·ˆF™š>cgïÒ©:\Is‰)§ÄlϺŽ]jùøÍØ<ÿÀ缞Ԏ{”ÈXÏé²*ïž;vOq(qhx£BP¦P¶ ÓÂ?ý‰þB¥ûþ“Þ,rŸÿ°Rø»÷¡i–F¼ãÏ–Ã3/–:eY¦dÂÒâ0ñ4‹pVÅ´Òcµ ö³QŒ ÝÀ=È[­¶gAo IÍ7¤µ>ãJÀEA™‡\]ÆÍ+Ó.áÿ¶øfTü%‡G<ïa +åL¬Û™£À9hŠ“­<7ã¹³3§Ýþ~•ŒWºFÕ–6RS©ÝÉ_üœ˜©8ŽJøþ—ßúbøÒúÖÛ¼‘ù𢃬ƒŒí–;INϹη÷ÄÒ&Ø¡›íy´V£Ð±yÿyoþaú(Gí0ù,9ë0uwFM/°ì$Їî©^Gl¨vÄñbkl]ßííø 2ÄÝÓíô~Ñ©>/!i÷å#Qâ²ÜM\qSHL÷‰©D-;®5>^@ÄÅ·?~–YŽNú }d/ôµƒÌ @+Ò¿¥;v‹kíVYŽÛr§’KƈÚB…²å,ÅádZoó^>]ʼl•ã3U!É\àÔ>]Š˜tS‡JZ³s׌Ìÿϰ|=$M¿ðæáЦò£-ï§‹ìGÁÆñÙ][w蟂#9!•+4¤àÊäoE ¯×pº½¨ ÖT[žª®¢Y@{Ôb]ͨw`E©’ úˆ+ü9[rEëÇ¿‚O$ÜgCÀòsÆåüŠ~ÿMýãJPúj» ´¶ôÒNøÖb¡$T{†¡CNÁ‘åt—ãìv›jašÜb’xÀŒ½À›ctÍ |êph@¥gzXŒ‡ê¾¦ê§ÎW+ÏÏÅ+1@Þ¥Ûb7ÍFKhö\r«1§#ªØ¦T:è¢mª„³±Òþ2¢!þñ+´ü7øï, +±0êB=´5–I,3…aôŸt˜Ž¿9)Ú.¾¿Á^BϘŠÃÛ½jƒ Ñ%ÆSqD„Ñ9b$‰e¦ +Gb¢Ý¡i]dÊLW_uåN +õ˜OV¾ô™/øi™H “a4žr]„Ù×ÃX÷Šy a8O[Ø¥\41Y‘¡YGÝÝÇozíŸ/uCd¿€¡oa‹$Lþކû–ÕY­>е‹¡`ÄbøÇ»Õzґ䘮[mgC®éÖ:+?(Ð:9Þsœ›# +iç?¦ðqµ(‘¡€[¤C¼ß„çꌦãåÈVB ¹ä墸iãT3¨E·³X¤‹òo¹DMFGT#Ìrjßuà?_)Ä hd221o¢”»×aà -Ï(KP O}5]û«0”LcErªšÖV)¬ÆU†.õ¬ËJ ÙãElñ+]¿vÌvš¦˜;„©ëÕL4g'€GèBQ‡Å±øE/è?%ÕÀQ–h\$Hx×Û& ·Ù šk²”yÁu•½ßôÖ?î +CœgÏÕwp‡—dW…îF¼âgSè^/ý·”L“®e÷›iŠªPp€¶ƒ¥™77ônÖpŒ«Ü¼’«‡zl»ùœ=Rçš`š‚‡±C¿"Ûá«:ÿë ªH0.•³f‡¦isª1\òFaÕ€àøÊ5"Ò¤™±‚÷„÷µb ¸<“o;ï‡Ôoâ^`à[?9΋dŸéó®…y~´E©§üÒ/FŽ~ày“Ü‘L üAM¬˜%äú4‚kÇ‹"GhÖ¥3 +ßÛäd¼M𤛠wª/K¨x$N4©«ßBÞ©Ú8µUîµÑDŒ7®ˆ4ô¢5åj Öu¸ÌüùIXããK̨ñýºÛþ q“Lß Hõxê,Œç”¯ÚZOl ê¥Ì9£­Èë*E"\r$×’ëà°H¦ï鲞K½²ê…¢èÐŒ ª×©Ü!p© +hŸï̱_KFª DNKÙeöÇ»Ñ(n’qŸ9ƒ±Ý"•!b’* ¦œ/•K¦R/Þ™¼ù}¥êŒlçžL9þŒ3ì™¶^ˬfèT+á¤"OÙò~µvvÐf,IÞ5:¥™·z^BY[¡•°c(ÎÙ†ø´(*C¨s ¸E–ýÖUç?¢vùøuYuÙ™ 2gaëy_øáví²hÇŽ%ÝNPlv‘éwC7;ŠP$‹Ÿv† -Ùîñ_`-Õ°:Á’jŸÄCdÉIZ ñÝìˆKØËó¾ ö-J$-ÑÀ¡”aNȹÌü˜Ë;L@­ŠÇß“¹ˆ­òe‚WS¦~–Ÿ÷$bncg@J½N JS¶©f¼óc# +ÿ:[C<²&ÔÊÞÁ·xF³gM}ïá,ôCRäÌ1ƒ1Å?–˜–^ã”ÓÙ*ep˜ö Lmámµ(Ñd˜öSç5½Îê™MË>7oÔšBô/„ +°_â¸4í:•r”¨VÁ¿-3«ì ÀRU1âadÎÑ^zí©º¦‹¢2k¶Òˆ%xéÑÞv άŸf~V† f½x„RYA…**œs½2±Ó䙯t×ÙTÓFSD:Å€›¶hŠùÃí6'BaÔdÉ™ªïÍ[Û9*²n4¥ËD÷´­VÊÏ™‚dE‰o/&“©÷éá@“¦=÷}eÛÙ›åÙ}ll-šÒD8¢‘/2}Ù%¬±¤”nS½ÒË¢­âÆ­OhãBHŬ¡éIÑÓs]j/ϸŸ2Š-§—ò9’êÝcÞÂ!¥ Ù -Z/"º@@ %±È%ìÔƒì@9$·44gŽ©ýª|ìÆHL}á«Û¹æ×Ä_(œ½„S‰)!¡^LëÁ ’3m¶Ò?†ôzFͪdÚâÒ8ߨ.†È¥LKû7ÓµÞª?]d„ï£%ßE0c+~¾V%ÕÀ·êO¸Víí¨t“tᢕ±š‘9Eõ†tv¦¦¢Ÿ¼ju]ÙwƒòhŽ·úIúÓý›ö#àLš–ŒËŽq‘;WÈA£¹˜A°¤[zšäÓL'.ø½öªiŠ—ãr=?Wîc‚Üi0©?d0­áÆ,Ûý%¶,z}D±ƒvñ§!ðZzÌÁB^ ⾋ÚQgòñW”£Ú©áªDê•Q}¸Òæ¼§gÃnž ·æÇšYº}颼¡"q—˜5H759' xÖ…HwI3°¡3tÉE9Zƒþì¦A-ô–~54Ÿðþ3œ“ˆ7δ¼?ùÇ|Â. 5ºáZ'}·ŽSR5RŸö¼8Ÿ¸ d%BÌbØb›’ $Æ-_SÎO¦390Õ±#?›äqî©ë`8çÃøì:lœTÄõZETöùïªÂ;“9—ùJþšMä +šç}½÷éÔ=Y³÷ +8TæB€IÑ½Ž¨Á… ½Žl}œž.Ȧµ|±'ð‘ò-?9F ý0&ëHQÑðõ¸¼šXª8ÂÌ7s BPÕrV/K%*/·F´AK¾ô¥°bfpÓÂD¡})Û}GíÆDõUNýÓ#¯w~Ù›·H#qî|=eö(lw5üÝñ&ц2à5Ð+Š@iœIt0Îç×o íÂ9•q‰i¦þªrïüPñ³ª] njšŒº ˜Þ+ÉNa;Þ›5§ö-8;«Lj¤@Æ|ÝñŸeæ}ÙQ€Óš‰¥Â¿¨3¯1,ª—e³[‹K­{:L,æÁ•q37ï8QG'l¿7ðž½§àyxƲ6fs=`ñfo—˜‚ŒöIy'VW^¤ +Q€ (‚ßµ»€¯1ƒ`/ùq³¦æ9îyUC¬ŒžÓ© ÍѶB° Ó;½è|’áÃ2¸+Š~޹öñJéE‰ÓEn¢ûÆ•8 C%%#Vh­»‘ç%fýz ^û£~qÁ‡w~ñr©ÜTW• ˆ€Ó­h|qÂò>ƒWR5#Ú¸ä~ŸËEŽíÚO}µô¦á.Qêø—þ{³Ýûž + ÚÈWúÚµœøø”¸ËÕ²¶H†iÂeßlÕî§œ—(õëìY„¾/ámZÑܪMÓ}‡×h-Dþ]” S(Ÿš+Åë@lÜâˆrÝpÿ¦a[•îuµ_íO•ð±×V¬‰å÷ˆkcæ"²Dš*w‘W¸ü¡ùn«&e1ªB{ ß¾ªXЍV5gÏ}ùª‰P=$‡ž‹Ó2¹òßa[Ô³eèâq'7‚|fì%û”b›L7êúõG~òÍ:Í6Œ_ÅiMåÑP§ïÒD>¾ágÄĵg=•×#zÑoäÕr¢óÿqÓÚ÷‹»îXPD]š|ê§›:¼›èf‹{µ=>k`£_yè,’Èò ¨%= Ìß|ìsl–æ*H#ÄZ¢ÄD86}Ù›ö—z ª‚ù!LU‘´Óߟ‡‚l ^©¡PÁò™uó;nÒØWiÑÙˆ$UyyÝù©)‰ÞðäzS¤ —OÔê /,g»V;Ûï¹9r¸úY¿÷c [¿þÜçüNóóYŠ][Z{ίʛdlL JÊÅórù’‰ßÂÔr`³Ó _URüâŽ<èa]÷~džž~ KºÒ9v.=¼"ƒ¸ûvä%§÷J'õô\‰KH~0ñ{sY +¯ +•>~óáÿÓj1 Å>[ž}…õ†ã Ó¼¬üøÑœ$AT. +±„vÒ2,:ègÍW(QܸÞ2UšÑ…P¸Ákˆ|å x§Sï·*èÐ;|ŽÂxtïÅÖL­n6üìK]¥›™ÖI„Àb»¦pDžÔE+6_™Ù.vÅht‹àý/÷îÞã*Q(ÄŠ*ª å:L¨Ïôýäÿbo=•üŠõ$uÅ%SVrŠÿ"ò}¯oׇ¡tøM¤8K«Å$µÒ%µ—qL9&'ÎêìX³Kô(ç»I)ÎWºÕ%3ü«Ñ—pgòe6õ`/ +¼Á/¦x¥dz¾j +"óËö¯ÐÐUNë³§^­pºiŽ™FUÖvç®ãúí¸e_¹(xîòg +^ âÌ +1–Y>ìèó2ãÙ'ê½9ž¥ip%û•‘@ù×|7;C>Ñîõ¦‚–s·TK’„U¹¦p~ñbä@¶ë +ö›1„N1ÅÕB±VùQ›ÄûqÖÒnŸ èð”Ó4 *ÞÏn¸2­€<·nAôÙAm*C90 ÚTnÎVìÜgƒØûSêóík´b'm?ÍÛä½CÄEÔÞe/Üi 2¶œ¾^ì$OöàÛC¼–×ÇoMlÊ’’£@QQho ŠÃ¦ üÜ®±aGIk…I»cÚ,ùÞ$ÊÃ3³xß7ƉóS"rßáémjmê±§}5ÏeˆÈu—»ùMZÝúpäc¸-W¢àn2 Äè_’/}úS"a…š^¾9žçâþÅû{ÿÚ”L…÷õ+SlÈðÉ+…O+ü‹5–OJ.¯ºJ?•åå#Û…2qçØØ¯ÄîÞËÎÕ<ö‹2o(/ \;ï8³{¤ƒ„ñÖ¯^Gµï³x:ß%\²n£ÇMº¸ŒÖ÷Cß#Á“‰JûÉM7“QjPsÑ”ûE5j\’ €Ÿ—*ßZö=D#öƒÉO¥u3S£ö”äò"5Ïv—[JP7<”JýŒ]æ¸9V¥U ‹\¿¸( + ³Ç-²üË |Ž=UÀñWÿ(2{d†­‚iBûØî–Å/Ëó¢Ùq9‡ç- kµ÷¸UõKcçötMÛźJéeUoˆÒúeÖ-nÍöI¤o¯§J»T–Ó´î2î(+÷×ÝgeOiüÝtO:â’® !‰Ø*q_*éru(u d“6Åã’ÍWÞ\œÛ!ãåm¦FÅï¼H¢>vGwÈ2DůãXÕq¬¼ßý%&©8ýÏÓmEö¼í²ó©Ù ¹ JõÒkܽÿÅè£Ù¸¯L=îO_¾òª*ÿ}›"þ<×§ BÄ´ãÞõõ”{IðâÐnã<.‚à]‘—¿ eoÖ`tÿë•—®» Û4!m—Ñš•:—Û ž¢™ý8Kâ¼[KÎõzñN¡ÿò½÷FÕÃ'§ØQ'C %uh‰îµ´$ýu·¼)5=D̹ní46Ö G¡MË•ü¦ûÞrÔK3äþ¼1ƒHˆå1®öGø8ëâ²:.@U|µÝ  –\£/t9Éõ²ñk"N÷EÖ=±Dn…Úσ²g¬ g[S˜ÓÙÝ÷™fÒþûw*~ó}óí7þÛ¥¢ë&ôU/æð\ ]2é$†‹!z{’EAwj>G@·¯¢(„©9ˆƒ¡ïÌЋh¾*è +# +ÁåùðsÖNWjDÐÓeóÖcA;Ì%¦@pH9`4šï;Eø[ËE‚–×wvALx[9#R™ZFÁ*#ÉÅ{—¶÷0gïQ#;W¹!XANz‹Š£¯ûòß©š+6ß8Îõ´·@ÎrTj‰oõ5ßr¶Ò÷ºíOnÿŒªÑZãÂÿ·ïÞª=;ìšž˜ûÛì»jÏ(¯(ÇsœÁÙº¥u RqæÔî|W»- _üÖf(­.âêz#3oÛâ¾Ù¯#µW»Å¢¢ð(¿«Ìßöà?/–›fçr-uIp0;„*S®wÄa‡ûh–\_;gÅgÊØãVqZýX¦öJ4WÔ˜ƒZÏf k­Æ°VK>aéW´±UBpúã•¡–îW§µ#J'ðc³M*õ>¦d ç@¥{M¾Â7¡ýÊI ÷g4ìnãV†îæ.sãyS{Úõ_÷Ö?_Å:ôúZyƒLõTîwÉøЗ:…Q»¯{÷.7;O×[’)¡yýíV‚.ŸÕ4ô{»•˜Ëy^*.’ íºê˜ùq_¨fü¦çûŒâN)*ŠÅIW×.Öt7)¯IÒS`ùcˆàqÒP¶½ä òÙ90öcN5¤GµöwÝõÏKãBóÇX,¥ÓÏÞñLÁK»!Wf«°#w6ƒÚ7¾+™[(ÌŒ[xÎTdºaËñ&‰€( 7”…S,ñç&Qš)_¸©ýVF8ÎÀcÊë»E‘%~kj¿ 4,¢*Q«Â5øÒ}cÃ8ìQ ”ÜÖz[Aóßh´[‡ñu¿ýó­lmuû‰Y«‘90FÈ­(ª>†ë˜rO¤£dŤʧt–Aƒ3^½N¿Hª³ÞH~À’¯Œ§Œs¤>ÃY~šxÔ¤ €š{›·× +ÄÐhF ]‰±­0' Iâ¬ùDç¶¥MCU‘Ù@>ÒŸ–ÕþlÂÞX³ó:³8¯3žDÛ—ýøoÕ’ +JâÚ‡d´{ì_k@¨ØǫPÜc«`øj ËO“ÚÈâìÒBdàG¼0 Â¢Jº{Åûúíà1—ñç%… 鄨Þðó= ?¯¯HuQFcܺ’q.ž1NbiÿZŠ9;'SÀ’›vÐQå+EÕ;yœQ\ûÐÂ&øEQmôU’p!¦÷z•p>\‡`°Ù žu>:jù 5S=AÎ}7.ÿv±*ù‰@¤eéëÐÜa—³s$2Ù”^Tµ"ZliÝ4«hCå6•I@úF*½„Š 61ΦW®u‰út3Ô¯>¦Óãé0 SZAAž@¾±&kÇ$igð‰ã1•ož£Å j&|Ç‘\%Tr˜Ä/1à’‹ådøE~JÄ/Çw»ˆ_›j‰ÔD>~Ó• Ú›Ì4Á|¶ôO +NÙ%¡ÑÆ?Æ­Ÿ? øóÚxŒ€ÊJÉ0)WG{a2!ÎÛŒÍØ\QlDI$»Ìrf×DÌÓ¹hËúÅìÅäQ4ÿˆée€Œ“¬Ò±ô^">®‚4™€äbJŸtç2c@ýsi>âH¶µ_BÇi¤úu÷ýöªÿŸÿÚ_¬‰ÿR‚:§íš_äœå¥^ü§m¶hµËÇ( ›À¦1ƒ¤1Ï_|ä/mÃD–ÝŽÌÛ»ÿõ3.jkÔ¹dõÏò&)ŠIZp~HÜÉ™xüd² Ê,/ˆPr^è>”›³EôAǤÜ9/¢(H.æ¸%â\2Š¿#6€ugÞd‰å²[ýìu+š-,'&¹­roÛ,g—KÐÙ9‡n®¡ÅŽ#Ï+-h‘k®nŒ +"u“ˆpÑløÿ-šÒâ1‹Ÿ«‰[$xLÊ‘S™^Fz£86r U¢6«rîYÃÍŽ“ aAœÕfvÍ£ WVk“)¯x% «ÎÇ*„$˜Bª;]Ä ƒE<ª ¢Lp5| ˜¡¦Å(gA=Ž ¸¢^H… _͸‹Ë!Ë`kDd‡M&¢É#Äs¥Lê›»d~%ebðñdXhàzdZÆ/ 1“e8clÉÁŒÑœqy9kJ±LÅ­¤í&¦Ë÷p!¬¨^ÌÉ:|ü–&¯ø„Êýd `¤œ(u"8ŒIÇ6f5à"yؤ„¶¾Y:xõ¹ÝWf‚Þ3N4ãa9évˆÄ’=TI_t <ø¤ñÖ±(Mx$w鑘4ä=1+C =¬¿áN22ðîbÔɰ÷07+ÿo!J^FuœßØbÏ¢qB–c2«c…õõ¾Q ÿ³¾Äã1¨£b!¨,ôl_x½~‘ kü圩 êYûoC'²Bºå§§Rtš¾¢Çr¸‹ù[#Z¦‚ö¢ÔnÏJtѦ{¿Z¶§eœŽDýŠÙ!‡•y[Ú ŒAõW¨aØR½&¢çÄ +M›ÄryL Þ5¿h„›(ÃÄËy¦t-þ×}”°¹Šké É#d[¥»mimâ•Ýì mp˜ÏöÇ+»Î™¶Mâ!Íg1Y ­"S0dJ¥ÇçÎèÀÚMR=#“®>˜ÆY«˜Î©¨Ñº§pe¸²ß´B ²»iHØüÏ-àW™ö_–Øp+HL©Å£=2<ó™x.8®öªP=j#Êñšlrö_,ÝP§ Ï?.#ûE;æw±[—&ËýUR¬è9›…¢—¹pÓ‡¨h æËÜò•%]õÎQIÍì_rxuÙk©œjÚZKÕ¹J“û‹½¤JçHÎxR¹ÞÒÆ].mås›ÿtؼ»T½{Z¹ £ØkQáßlªÄÃd‘ÐJ’ia‚»2Þh¶Ëéñ\!/g7F»£5òÎü…(Mtü†X?eqÝëCºÿmRììÁÓálæ:%ï ©b›X,rwL¢U©ÔŸ×è­UЧËqnF¯iAîݳaV*ߢOÒßEžZqYåMqx™  à}¸Ž·ó¶Õ¼ø1æ&[²¥¿†7¾ +ǰ¦ß1‹1dzçx€½x“ª­0ê:ŸµŠ§¦ÝcF3ÛΌƳÐ+«©jq^=gYp ë‹VŒ¬<<ºñMfGfBީ临ÚJ°z0{ GÆ1Üf¾/à‚ÒÀÛ¢Ž +âŒïHI&bUbhÑHïÁ鯧ÐÔŒ‰ F6è}ο;'sìÝFÒòj¢ï¤‚t;_œ¥}‚¿ƒIÛÑ)—Âe$çµwʘe”t:–ª½^9žy¡à”}ù‹í +×6æ}£Ù#°RJø)uõÔîqì7i–ÓþA˜ Óàsý”ú¢Ni5ú•3Ž‘¦ÑýÐ_<\ü|,o‚ŠS‰xÉRãDÕQ¡skу@Èaìj$6Æ)\™,pÚŠoóÇ4Äö–QQЦ±Z7ß;ËŠc jo)•5Îõ<²-ÃÏÍIÈ¡Aó ïûù2dÉ 7РHkœ!Jf"Ï"ŠÎ¶é*T53þ2ý‹Œ4˜A4:”¸IÐS6½ ›J±N¼z2LÝŒ[dÌs%s™oй[[¸º­[^†°åäFŽ©ËóÇD “üLDB¤ßs^¤ì3ÂQÍœxÍ3ØÑp4«sàdAâ ­v%N*Ný[ Ê•Ôš£­íc$@W‡@<7cç¤iÇ)ÃÔA€É+®[ é˜jžì‹ ƒ²RÎFH,–©…zÚ¡œ &%~ôcyè@ýÆÀúb,TØT*Eµ8—Äá‹é¸ªôR’yæ Âo’‰E ¹E1Jëøòq‹hì•ì⃚{F°±±qTËÄž7ÀÀ±¬hH)½vB€‰iFÇëÅèŸàâòsVI —qoÑ2e~Dbqz·ýˆFÚ½ûMv;Î_WÏù‡Ï¶)§° áA4îPV1îÉè©3·ï΢Ý'F·¨Ió³IÜ‹4ñªC[q{T“|Ú´eO†îɠܦý"OÚV¦Vk¢{HøYµ¨'Éâkõ)‘zàOWðâ®-¤§¸:±”\Ë{¾“vŸÂBÏ + ÈdyËcòÉr.ó¢dÀ´Ü¡Bfkh1Õ+‹«ºeä:QÕ¸˜ÀuùÝo”âû˜j‡v>’Òù¾¦ ï/¸â•PÖ{‡»#^)5ö0 £2 õxŠý‡=lšØôZA>Ý ® –tÖ$ܦaS5Ë1›‹z°ß–*CuÉ™¿1_{wò#w•SÞ»“YìЋK\åÅþ€Âq­8 FÚ Ö…x¥lún + en¤9!9)&Û¡~w‹À¦¤³j×ûݺTrúP«‰ãª ãô–g]¹[ÝØ|ðdrø<xê\rŠOPW¹æð€ÚÅÔlêÊŽk8ÔÑÑ­O>76g—0Žë)TO-ɲŸëSG~Ö2FŸ«{cjK@œâgãtKÆxö@ŒÇé«~NÕércÈùÓˆÑgd«Ÿê°UÕ§ñ@çYA'iGÚ®¯’I$ÐMå÷|Ó¥–ز9½*|é~à9»0ÇO«zFgãN}Òßœ™y8̳¯éµ®o ¸ËS˜ùyþ\K‡Mª…úÛìЋF 5«šgÕ*ÛÏY· 'XNFµiÆgh Ëý€æÝoœÆ%ʸµyãÜœ!úÁu‰=ΈÏêN¤Ž˜³fx²U|¿dÅ2©‹æ#±„G ¨6• ”íæ^® þ¢;¼æ`)šƒ%¼Ô‘] \—Y6°ˆ2éßRl†‹¼èö+%ÃErÊß§æ®Ü7ŠÀåoG›v\e»®ÙËÚ92yã„c­„ȈŸ¦/L[^ضC_ê›?u©ÿ|¡%wª6ª®tˆ^Ä O×úê¶!ÌGÕÍ1bÚ¨;r7Ž…Ëž#Ü£Û°|8=$‰.¿±¼ÇVgou-ÈqjCzˆP„ÖÁ& ÚýƸRE˜‹ì0C>F»,òÙz×ýwyDKDìtYžôÿñag¼2Äú¦UeèÇýùÙ°ýínŽÅ ÄãõÆÙ¤ë¤7BåñÌ1žÖlSKÜËÄ ¢mRʬDIð +ÐhnÑ*Ô¿…öå…7k$+ø]òG»b'”Rs#;{w–Ã0Ú´‰ÆÝÝÕ®4àŒ˜ÓYcí¾É1aº«qZ¤4†M/^ã!péÚáM'–!f±(× qú mò¶É‰yˆ¹—´Õ´«•­Üc}@q‰Åå?Ú–&b†‰!8·­Â ‘uœ¼ó:+…ëÔq†³†h9ñw&Ú¹ª•ÉJÄÍ„·Mˆƒu_©<’¢ýï=3xû1ß`‰Ø )Ã%ªŽhWTºþ!¢vÎß9£‘ͲDÇÖ$µSº¯ûœY¼˜‚Õ²ë Š3’è*“È®_ØcÝ)k"rðú´.($™–5•ý #Þè°V àO#Jþ4».¶E0‘4Ó¾ ÙJJcÂÝ8&©Äê§·"¦k¹þV,<¤Š–‘Ü•@•JRI¦cÇkñ¦¦ý'£aDØ Hsý|¥s`š÷ñÏ)E!aMZøþÉ=a§.ˆQ7cŠï?rŽìrp¶\kLrçK~³0G³Z!Ϧ¤™ñÚ¶ssê®LÈïé¸Qï粤rÜì‰vÃi!“h dÂnº•;Ž‚*‹¸•òÛË râê”_&ˆG«z|M—9D3•ªœqP29%'DŠ*3RœN`Ò¤ÈÓLÓ XhŽEâ41d8J=ŠØö®k˜Ð•Eç6 @‚8‘“G°ZŠm’Zež¾DA^\# +éPs‚6†”ÉŒ=F‡IMŽiØO} +÷´¾(»–xs¸m^w$H#bot˜‘!UÒ =˜ŒÏré•ò-kîûÕ˜É89ÏöJ撚‡ã´<æ(]åæ+‚Ú•Š_ŸSRâ:YÎKüØkºÑ¦Êàç!SÍŠG`Rˆ ¸@d~ç½¹>·OL§ïxhÖ ßG=˦Ùqü‹Â¸’ÐÄŸ=ßîu•Vì·¦•¬~1HŽP-œâD^<™PfòÆ.ñËp…]áO5Õ +ù #NFÀ8ÅøSÅ·9ÆÜ×_pJœìxOòÝäî` ‡ˆmLêW~„…Œº§ˆˆ]>¸ÅIMz\R‚fnG)ɹ5”—”¨@ÙQaJõw¸K÷cêXUH—1r¼2„XVðe$-ºoP.WWµDqµDäx¸]¥ VˆâŒ©ØçèöäÌ«÷¾àAæÁ mtð½/j½ªºª0oŸ’£;÷¬ç,¦ÍqãÝ>JÔ>W×>ßÏm`L^‘M£Á„.qá’3—\“L»ÄU¨ÃAîS%qèK–7¸Q§©æÁ{Q¹2AŽÁô÷!¨Êt_+5F†_zƒ”ºUS—æÓÊ)cDÖC§éä"­nÌÌFL’ßÜcÙdßW]½4½Ç½µ†²#Œr~_ž=öÝH!( PÁõ®XGd’Y-=¶dÅæëüjÞ׈g¹•\«Ï¯Uùªµ¥u{ÁF¡pAÙÄ]@’¦Å¿V<“‚åÇðCÈ(®È¤Í©Žt±ÈLûsYxCc›¥&$°•6é×t^)EgLo¶P»ƒiRi ¯¨¤MAxUI8¬ä0ý²ßÕô‡)¹¸êiµQĨ­ÂÉXŸcKÊâKž]$)è§àhè‚ä…Ö+&.Ž©—¸¼•}imR\V½TºnI5Ôº¸ª•Ò­êWfgpÿ:v‰6‚²[!÷¦`'‡ÓÖj+ë'‘=EJ rðdQa/`2:‚b|eŸ ˜ÖpA{¨\ÕíHÊÌ0îåÒêXTI¯äÚSW¼ªžªªwY–}XXµ´u°|rØ‘0§«ÿæNjà gîùŸ{ßǃhúþÐNÓGÙ/~‡^Il Û¹pâù¸2zåõÄÕ]fÀ0ùúÅŠÐSgý¨óqݹ´™ñœI·ˆVŠ—Î hX–5õê åg½$A&L+ìÆai×RÅ\‘{‰¦uÓñ“6P«Ÿ˜÷øæð=•ã™ÝºÐcÓàÅŠ‘ôÜjt„·khYV”wzhæð~%8Ä`=^ùÜqÐMâóz@]Óã­«°D1S»o\Ÿ—… ¶çh!ýåÝͽߜÅ=/Œ9ß äº °ç7Œ,ΗVâWMa¶MôÍ…B\ng²î‡ŒN-ØÇÈoéf[RÖar‘/tÑ3Z) š˜i–(Ñçhó!£†ýLÏŒ?æï¥Vnšžûu|ñóØä.lxö{½-Î3(; î÷u´¸xÇ­‡ü’ÜQ~iž¥»i‘î¤ÈzØòj,`›-ê‹(MhÁDdåBtuj”?(¤Þªî~mz—=Ëíåíé­¨˜µÄ4S~&¬«òÊ6Ú¡H{°‹áG–æy€ óàL²hã§ 5F±#¸â ?•]^¬FÕû¾0ż=×™R¿õh×c#”d Dðì*™Nkë¶4G¸i0yÚm‘WêMÃàW›—¨6÷'àáSL!¼|˜«ð&$x¶3å÷JÁD: RëãÖ´xeÎA2¬–{.EÊXæâŠî ‘L{I¦˜èJºh,žìuF*AR,Q7¼|…zÌ=æ[KV¯P.éˆå**Ž?È‚%Ω˜/õ[+©ÅGo Or‘$Û3JζN¿Mõ5ñp„”XTY©Z¢¹¯LQgŠ@mÝâ€S©™rDƒ3maÃã7\ „ :^¢È¡Ôér8•§¨<\yºC¦2ÃDfsiƒ°‰ÊU…³¸6ÏÇš­%§Ðú%FލÈR¨@h•¤ªP_òkSawq¨ª8PðÊÝéßÙ/h,‰`6 Ð$…Ý‚†(N4ù˜„‰B)õø±ÌÕ’„‚Â:§Å™vÀ|ŽM®ï±‰~$Ê-§,`´—2Í3ª­µÍbu)­ý¾:*ÌåíbDà©DCœG'ýñSEgêQ 4w¾’JݤI­èÚ@2ÎÁgj:ã!ûHÌ}À2¯Ô“³÷dp-¨¢ýn^…5ô>W”‰jçR>ÁªðE û}™ú£ Žavpê@?¸ºRþÓq çJÀ•ærc¤øjÔûŒâ{ÕÄÇ^(T—÷-‹ÁªO}å£ö¢š¶7áKd‰|/½Ù ªÈ/9ü@¾gŸ ÆÌìÀÌä¸*MúwSÝ‘*ä•@H¨Q¾`XÊ”rXi©ôiG­Fñ¶á +¸-ø™+ÊíóºoÕ!Ϩ—št +i_@!"TË”‹®F׿¥9](,ÆAu%Keî×/õ8Tôhgx¯êuàgÜ'¹µkr WKg$ë¾)ð\5@ðûÜyt*ZvîðqC%Õ~F 7UG´›¢ñ»%âáªÞH 1àûœÜoP,ƒ®(%ê½²êcC÷“Bâyºå˜9/¼;…1î™@AsÒðVYqé,«.·HŸZÍõn’®«¥èU`€Fz% +A; <<„þ—#€þ3ÉÁÖxœ–DW’­VÉÃy·à ÿÖ‡Q‹Ò"Ò®K`ØÍ²Oø$ˆVêQA=Èù”[i”ÞÙžFƒÙã|·„¯år©”J›k÷æ*¦]9ýÞ‹”PPÚ²Üõe%¶yÁ~øV}÷±€œr”Q¿žQyf’ƒ”£êùÜÆæ­ïlQÙJ¶SûÍYð}Ä+#YG’L&ô–¢ÎÍ!%ŽIpžd({z—¤åü_³dîibJê/&l q3íØ}„É<}à ±E¬7ÏãJÁº’4ÂY.Ò°˜LÜÜBü‹påŒ;aаָ¿+EµQ 4€õâ“îd9Z2.xxÝ鑸‰ÌKÎÆ(ÁàTÎ!§bÍ—ÅpDEKíW† –T[(îÉ?µÄÕÍ‹´rò”`¹Ý9˜-óÑG"½ô¦n#¯D8†W°úáød¾¬ÙøŽ/Z4ãzöŒS× ïî5 +:æeâÕžÉOÞZ( òe9ºœËã?NWELûJÊ#8ß…4çˆò€¬®*6•O‰2ê‰úv‚Lº}qA×4ßè-qæz sÈ?Ç¥ÁžíùzG‰@µëº»Ë%ªªâ”É×™ èŠ  Aä±zœ98ŠÊ@6ÕÉGêÃMa• ù€ç\vJ§{kÝ)Ù&àU{™ÝÖ1v‘H,Iú1µ_Àûk*2µI\ðÞJlû)ê:S1š®ß”OØ”`˜ú™§öLÿl“½ôŒøŒÀèQ™º pUëÅÐ*‹Ä®(Ù¡†£nSLt>‰¾‡ÊóÖC !n¨N8ÀU8©ìk>;C-tUh–¢XÕÖ]÷O–fò 5’-À;äÅõ‚0=¼ß0=MùrŽòÚh|g½(Q3 W¬m(š@ +­Õáš÷å!ùžȸ¿<º)Α€Ÿwlˆ…ÜŒl[֜֜1{}ªŽ/¢Ú8Gx¿cím›Êu|’FfdGÂMY’¡’éH¥¹VŽAÒ›Ågw"ª²Ž°M31Gq$™Ýôƒ5nÙ&¹ë"ÒH&ÒX·ºfGýË"‹´]µØ¯ [«U¦O“!¿³)`ÞìTªë×ï+ S%òÏî%…›ÉÀ,Ž–&¼³ê +±ï¼añfƒ¯˜å2z¼Q®&Klî2¼Ák’3\ ¡9s¸‡k æ#«ˆ *h}ÁØÆ×Réb踎©ðÆ·õ|ž¿o4‹Ÿ‚Îgûâ^ñÃM±•ámôWßñœýHb¯M&Jó”#Z @á:3ιØ0/¼ ¹$“@•y.õpFj1£zCOZù¡BF˜ R`?¤‡==kô<‘~»ïçL^“p¹bEÒš«*^Žg=ÜYy͈:Àè€ÏÆ*ó*ãEHX-Ñ•Λs—“pЧ‘y¿z”mRâ#˜;†d®]â@ÅR©Ðsè_PÕÚHuˆ§ˆ½:3iä Å£Ïö-qTÍ1¤ =ÕØœ%l©æO—õðSôœJ\þC=“¶¼¥1—ñešñeJ?ÂÀ¢@9Ö[|?ˆ‚Ý„(F\YÐ'êX-‚eÇ&ìE€‘²ñþÛ÷!Ù‚ë‹ $x1©¤³68Ï;È™ùÎ1R}€˜N dd~Üéö‘œÆä"aW{˜X‹®a­»Õ +~°þà`ýíÀÒQ—AÊHPuÍ©ÊÁ—Ý´aÒ³% çÐ(ú}³5xã À8EÕž9SDÿ´Í˜ãcTDE„q#J–UæšÙm‚üÑ&”'e¢¾â妇/ç0Më*¾å´}Kw“%ßÉâ•[D¥»™üö¼zZÈL¨N­Cš{ +QNÛ(Ϥ6æ0#[{D07±eÏ®M&òÀ&®;Æ•UðKÚmÛQõê¢b'€äõRú§½ª¿|7óìŠã¥]]öЪ钕]Í”Ž ‘ˆ4}B2ñõ=9?œÀ4kýVUuæfŠç<¬M²ãºês4…)ÍÛÁªRõŒLf86é 1Œ¤$ød Ô=ÃMиšç.,‚]S¦ØJÊ·¦°öËë³íŽWÑ<-_‚iÛ'‚iÇ.Gd–œ2Ò +xLÇZQ­ïñâ‹R âry]§qMÝ6ÙYPy]òº  a-þˆUD0‚sX"¾]Çžh­Ÿ¬+HÕTÜÅœRÛíÇÛqË–”>“3{q´{¥sJæ”ìÙòʨÍÅ2wÐFk–g$Ë­âV†tHÙ +÷ƒwÂm¼>zqQà ÛŠ˜…ÄGbŒ2ÆC5ì*SQ¦xÑ"Éec_ðµ}k)·Ol†Ó3¹që¸{‚ ‘ûhßï2ÞƒÄJ(g¿G)ˆ7;/Ô¨ _¶ì†þ’àw<·ãÑ01§ŽE\Xnu_nŸ1T¥=šd‹âA%Ú]„Û¸çi Ê-¦[jN·EÒ¼wIºàáÝðð®0Áð ÿŸdíéˆäWVO.Ybñi¢±ðˆAìXÄפ"(2f7R eIõ‰8·tStµK><ŒLlÔàÞFö«êÒ~mÏÖzðމÚë<|^²²­Î¼\ÀårnA¢K ¾»†Nhˆ¿â{/ÁrrBR‹{øìNxg)âHÏSºí.>º ½¬´%Éu’y÷ü"m«çŸ# ò¹B ;ÜÐcÊ;À‡»O’-~ða•V +`Ë#³&e¼½4æÔÈ‘jÈý:$ç[Ϫ¯Áw×£N”° œ>.Œ"¦é‡.šçü)‰0FÑÌXBŽEèvËZ‰ßnN±uK®ÉÁˆs]]>òçÍ<®~aü¼™GèˆåÖ¡t¯÷èœUš\>  ,Ï%%F Â‰sT?gg Їªm +™ÖB;Eÿ‹hòG¹y¿é2þ®ˆÜ™VÛWà§ÅqwÓÞ&Å ½š]— BH”žItYošæ M<_(c¡-*-°H&¼Ø©aê +辡J_–g}è ¡&tw˪;׬~ùöt»­ÅqÉFTv>aˆ’£êžv)ã|¡‡2©Šå\>Aq÷rN©Pg\@ã)15n›âªó‹1šµÜ 0!WF‡j-O¾úÅ— +ßþ‚Ð-Žú¤ c c”¢CñÃAıĚñ¤à¤þ\‚p7cÆ,ýñWŠ®¶;ï˜0YÉ €W +æ³U§8õ†î…úì—©vC€'2vħœ©®—ȳuim‡tê-d–Úí=ãìÍ °n€Plñª¦¨úØb€DyÃõF"çrt*ùf^‘nnA{¥4Þ,¦.äÓt÷Ѐ ‹7“/T EÙé¶@'âqÅK¡GÓVVˆ˜MþøÍàoªF2àœ*»m±C´u‹`$Rk$Ó(·u5ï™é§>|·b›½uÄU èì(:¾œ;§A³ß<†bWVt¼²CG*“ÐҸŬ:yèçûœwÞt7e)dG•ãÙA¤˜ÜôR®ÚÙÓà“á{*Þ£ðê Š¿!VEzñ:åb7Í÷=á`TuÀñc¥•)~MC.nuå8ÛM4gõôWÇ$²v|sñÆ·=GÌVùó÷'„³P"­éTÇ, ¸æÖP)â8nIjQý´æòEd +¼›Ø¢fjø•Ù7ÊsGAfæ¾R^….00qŠ ¨h¢ô”ô¦’µh¾Õ¸  £Y7!£ ´š1EMÝSe@“ вŽH£*@Õ¨ß<5é×Áüî s`KASuRìnúëvNL‡F06sSÈha6Èun)u¾ÙòÅÍkWwÖÌÁ¯Òâ¥Å+LÉ€©ò²¬üMŽb‚J€-Ð +êt‚2ïLrhr´¬È4ÞÖ\•ÀZ–ÃSÖCü¯Í @$Z½¹¬SY;8I0ej"â¬wA¼:sQ"6ª\FþÃ#*¢$¶½?m—@[á ’ZÉ•&Ã瘘°Å]´±sÌh2-~E…û`æRs¨ɪñ>لƦ =÷*ÔÛ4½ló±€õGÄè ¯)à:LËWáÝUãè1̃àÚ{Ϲ&„DC í5Œî²š@”Å(`†ä É—Våyj£ Vgÿ)éA­iW1hi¢äç–‡ÑÓZª7&»W~…1ŽýÕÎ(F3b¯›Ô[Q]^£šJçbòÜxVû~¦ð1•Õlf²å³~Gï@µUÄwV*_­ÌP‡„óºyKNa›²’›"ÑíÃÿÜ4‚ÅͼpçL©Üá¨^3¨ÀâV’cT}ƒðkÚçE³Ø ’ë&‹ÛçD/áO˜*È„é¨Ð¹N¦ƒŸ©ñC›>iÅAC(:*þ7]´†)å‰ð×àéwâžÖöÕ§=º8ä*EÜ}–AŽÂ.'h7µFuƒwð¤,æç’$ÁùØqqÓbJÖLhT7ø'3»7WŒ°˜>Mæzkvš™ê)•V/=˜(=‰¨Ì`Þ5A_7~Ò¼áðj½—ÃñÇ=8ù˜Ý¢eÞgÚïøéÈk´ÅU¸%Vo“…Lê°ºsäÏ¿Rž¬Œ¦„G€5¬Ác¼²Iúà´mÆç敤_C¸Õ­ì÷ŠÎ|U¬o3#ÂØkjº¿›¾ÛøÂy*‘ŒÆ£³iÃåÿ§mSá‚Ò?ÏøHÆqPT%=›ÐJ¨oHÅb–¢àM×Q®ÊH rÇí:A‹ˆ7¤ 9!#A¿¯T†PÄ++ÆMß–<³ã×ívW£¤5¢ãNÜXÆÈÁíU\ÕHd'ÕÈÐ[Ø¥i;wU¿°X\ˆjˆò’¨Ú¼ ^Ö ò³pñI}¬s6Å’!Œ"[ñMÜõËòU"è}}d,º«©Sžµâã (=Ñ®Yeñwøúޱ;kƒÉ-Ù¬×Ǥ“K¾M1ä ÞKÜ­Ü]AdELQ³ m>ÏzzDÓrÔb»q,3‹0†ÐñçrpwA|)O.@ZDT¹ðæèÊ@!Jjálý’SbÛ\ŠQTŒ\ØhŸngެwJJÚÈßÒjH¼r+{½ö­ç7И¼¶\Œã<•œïì Ü£\?ÌÐá\šw‹‘ß)à¦%^#ò]ã¾Ñƒ:cn‚ШŽn$@†pïSq]¯ûýÕ²õ¢&/ fË?‰ +hþ(ö¡Ü˵󊥀ˆP鎿bN²[Ó¥–"@H¾ÞB¿ 6($øTI€0"w*ûP_ ›âïv )ì 1›ŸI‡–4")’é.¥’:’HŒbÃÉ©RÇÒ¦W4ªœ¼@\&ãã-G(Ê$mZ¯‡…$W䫦zé³¢æI%šsŽÉyksTÄ+ÓÿÇ×—\É‘#ÛJðtH ú`Ö_”Z—þÛow0ÉÊ䪫 p8°áÄqt¤“¶#ÈuI¬OÜ¡[ŸÕµ½²Å¯,— uÒ†_XÖïãC÷_¬X•/,ce—¼_«—)à=ðuÕÌ#èMhï RXƒ³&åµ(¾Hqªmƒ—ÿŠ©’ƒús«úP±xIPrpÉ£:ëÍz)êʕժ rû1ô¬z–œ0Ù-a¿ÇÓjø].”K~žK»soßÙ9G‰_ Á —?±Ý–>*o§Õ[<š•Ý"é‚qÇž¯žþi2i Ö t²¿Lf,Z8JœÐ€ú¿îZ*X-–Èš‰0ƒäê´=ÔÉ!†[Wd·-îûê=ç2¬ªëœÛÔ6ìÃÇ£“À|4‘¯?§ǰ˜ê9ü2d hï4lgJx‘¶=•‚+!ௌÀde›ñ·ýÆM+Ú0RAãá”ý_­m:¥Xɨe| +ý-ƒÍK6•=âû“ÝSž-É tRÿ§2˜*ÉMÕ,ãf´GiÙÛÝ)–ØÖ·If-NhZϲ È­]èâ–ŽÐxøv"VãÿîûÈ‹r(ÕšlÐÊ—P¿øid7l¬®÷^{Hµ½ž.ß/ü‰ÈåVqi.ˆ!‘âe*Þ}$E†?©‘帷÷p¯Û€ÇNUÓ Íë +AäRQÓ«uÉF=ê<¯æ§/ ÆcIYµfî‡KrQAÊßE—ÅúÿrÛÙ-©xKÂÍÅ„¿±Ÿ×rð–ÚÜEÒæ!ÞxVI [š=J¤ ½ëØþç·JmÓœï⽃Q¦e¡}bE™jŸ@6Ñõ‰¯¼E¯I1?õËBj4©³ÜJY¼£Æ0ÒÍùvœªñp÷‡†W½¹-ç‡ "­Ø‚Àw°ƒ‹º} “Ä4¾S6UãÒ Ð#®91šEþÿœ°€Í'G²‹#‰f©ß q1G“_Ö†÷ëj2šÚìP"Ê¥I ÛÆœð$³lP£¤ˆ‚ǘŒUÜúoÕ “Â]å¥n¾Åç(¬LªÙ>6'ÌAV¿"Aß¾~‰x‚t–ÖÓ›ÉC„§#éÄÜa„ê,ÙG“;!îŒi_)6F=vЧ¡E €IYü.FP +É=ñÂ=à‚h ¨êµ„yˆŠ‹B^øs PòômQx—OPø†÷Eê˜I´V¨Ã¼$«ÊмˆÇO`Þ{"E«]1{du·­\µÆ2ÈÛòJNosSáõ¥€X^Ò^ˆLn:pÝ)&¼¼ K™Þ†/tݦ#=¹¥SÈCõCÎvîNzÑEPÜ >uïÎ,hOÔ°‹muó®O@,õ]¼9«{‡i%9Ûvs9ªžõ ò“¼"'HþÔÞL;†P³Š!ô¢3ƒ¨ ?¥÷£¿nóv / c°6~3Zl€“v4rëÃ*Rr~ѹá#?Äà r86°¶ò§ðÛŽDÛ¼äÉóR 5–ìÙ®n”fX²Ùè-ø’T/ÃŽ{í¤Èªƒd*©n¹©“ë+IÝ o¶~ÜÜjÒâ~õj\;²R½Ù`)#¾ sÀéÐÌ=_É$EšŽÜDPœ-‰,òÛ…>ÏÂSHDKÉ×®õTúà%MÂéIZOÊ^|jÚÿÆ~vçÍó´Ý”#×.;å[KîNÍ,¡jkn®FùÒ°Ït üéo9ž<…6‰ vgê # ˆ¯ã_Ó¡¼ì¼)€—oÊNú ›ÙK]‰Šb^ +k=(Å. >¸ÕPÄ[E?zÌÉ¿tõ¾3õ(>®LŸÈ~_eýZÄþ8äcÞïB=©ôBé<Ų̀`‡ÀZ­-8ߤnŒ´« “EC ¦l¼©Ä1¨³‰B„[Òò\–¢¬ÐCÜ9[­Ð+ùâ÷¬çŸe‘J¡Þð¾¿ÇŽÏ€*!në@1@§e²,¿_gÀ2ñŠócGÌ{µGŠ]îB£Š¯µ©Ù¥…$o ÝÄ2¡Ð(AtáÙø¤á@Ÿkvia/ÎE¹®AÎá<ÜWÁºœYºÞ툙8dä J­æå2¢€Ùë2À`Hmšò5' ÝÇDNÒ‹'í \—àÖ±_x$w[EzêˆÅY§tuN7xrÔÔ!í³eœê9ôRŸ¬¬ºËOgݬîç,wÑÐâ‘áŽ$ãà1Û @%h1„šyîáË`ú€‘e“Ž~SÇu¨÷1aˆÌ%FDøQ'Þº[D(é;ޤ…àhìnÈQ(ÎAÀðbpIöµåLÍÄ'“Ü7˜c‰  9¶ÌwIÚxIU®8™tI 'Ùif´Hòf@K,kjÀMáwmú]›FcXÅÅ:ø1„ª†NŠ EXÅO¡––*}È-ÏÚ ;ÓæÎ ©‰"%†¶Øüx’ÝŠ>15ÔŒ™©%5J +fm± “+¹U\Re«ûšÂs<Ä\K©h®Ö¼¤¥—–Pf˜”–ä`‰ b¾(“\©¢9-?:õe ‡\‹DQøÍDpw +‹’4†"P#åÑj„p&K8 8b~',ËçŠË:0RT-héz a¤‹Å‰ÉÛ²FêüuÆál`‰`lS²FÅyEoÉ7•tÐË÷«4%àtUн +C¯¡¶ùêi‡O0¤oXRg›¯]S÷š$¥”b±›ºµxQÁR—H!†ý«á[–‹²Å„täp%_­ò,°¸²Ø‚¤vuœT×Ý@øé͡͠Ô—IS²€÷M"O[•®;?otIó˜’âW½(•û%ÖÝ-KlbÇçzEVO`©ñŒ,ix;cçv訬0ä Lì°+ÀÑ‹à´$Ý@µq± ðqÓyȲØ(ñÇ`—êT2Ò—ø¹åŽø—ß¾X€­e4dÄ",â–ڗo›Ða—-yEÚOòuéT×>qÈ~å”ò*ýÿœOîå!µGè`Îç Ž|ļ‰ëš©t¹`Ÿ¸mÎTù¢þïF±õK½B‚Hbh·×%5¢m‹ÅBábõD»„ñ¹‚+—Í1FR%jöFF?ŽÌœvÇȬ¹ãFäï¨o2Zìb0s:ðJSñ?Þ[”óŠ‹X$¼ÀTdböëÉ}±I6ŠEM3fZf)UÞ¦±¹ +Ó½nïT@¸K ä‘t…CUÕM¬ª^yÏ Ð8ŒYyxæoÄ[ y”ÈA\¸YˆÆ²Àî7‘’V܇ý>tÓ´ŠüÅ$r°ümÕ•]SZá1ýÜTÏŸñº¥Y¹™¯¡”¸Y¹ùHÏ~hïAI')÷ÍúdÔã7+“A.þrHݽ±=ð8[¾3G¦~Ó¥÷Kví6WUdqýBøÐál¬cá†Û"Ü^3¥ñÉ­Ciï×6¨Ëï®0¤%O ¶üÜK} ðµÓl1Äĺ§I>ÞvÂA)”T˓Ϝo­d-Án‰¦˜­ío¾¤³"ì<¯§º§ó³É")nÖ|æym3Ác[œ¢¼•N£Èe¨Á·/6öj #yUj÷Py°á MþÔšª2ÐÿQùÙSPBeM?ÒôU¸î À£2*Ù” Úâ#%jOŠ[MÄ?äŽ +à‘tÂ(Z¾Fáì.H#á㪎]e~€€"#py\/^sU÷ë®)‡³Q[÷,f’”Ù[Þ­ªÓEö»ÈÓî1ÈñÒ‹)\çP¼)éÁ§Ú¾Jñù$”ñU)ÇOóú=±ó +ÅÃ…b±ß§mK‹ýÕãSuþb´Ç¾f‰Œ yzfUš˜>zšŽÜÄÇ銵°ó‚û£fHÝZž¾-¹.i60c©hg‹¡éªBV%ñ¯¥/×ZÂ^ÒfOTÿBŽö3òMl9¢üÄ7dõeíR\U=MzC$,€¡Ê’kÕ\mÙNÑJõɾ_)/èÙ')•œ{³Ò +Ù OèaJ‰ÊŠ €¬ß‡\  jSÇ·RyF 5¹8NU}_B YTX‹ +` :¿»d$qw~Mì-ÇŸ3·o+cdOÏt%ÓÇÊØÉ’ãRØ$q+‡ …šgõ›µV ŠÒ;‘âyÝ-)).W¿ãœ©ÕûT»ÚÖ7+L| oS®ßñ[Y½_½¿mªM9Œ8âsSeR`‰$c£€fNWšÏdaW…lz¬<À‚ë~ÓØ96o*a\àkäÝ;˜Bò ½J‚a#”¸ï’vªYc¹{·ô™x¥Dà°©”¶]¯ÄKze¾h†å•xW›Õ›ŠÚQË.óbŸpðD@åŽ_Vß²é);‰Óÿš(o^H¯Ë1ª‹ÍÅo§‰Sc<àˆŠÒ×H@V¤p uÌæ:fKP•¿Û¤~¤Í ^Îv-ï"Oqö.X%F¦å%½'Kßñ€xvŸ† E‹åÐDóÇŽé¶»¯AÏ E5ÈÄ>ªBn›ß¹›~¥äÞ¸{k5õÀ~wgÒ˜Ä*!¿x·Ù£ lÊc˜£EjàXæE¯ô[LµÓ’2­vV€®ø‚aÑiˆ¡R£ ²‰bIµ¥#$ù‰õº‹íšÊm‘&Î7ÔíØãû‚&ñ wý©ŠÐ+Ì2`ý#uR²cÐóBZéø›B@Ïò NŒ²-?s ÕäÓQ‹±:a§é Ã™7vÜ¿g)OÚü°¨7”‘ó‚²#LÊ9Tã÷J:ž4&ˆlN‰:6©zÑsùP¹æã g )2x[{Ýïî6#0DßÅ#¸×êƒví<þXܰª"Õÿ¼AÑó˜À‘`¾Õ‡)“»ÝkÉ÷÷c»Y¬ß!ÉEsé»óõ¦ttŠ6¾‰'Ârês úý&¢àÖxÝØ/W{ŒR)nöD÷{I„€Ë¯·?½¿VciŽMPÏÊ ÐPŽ%5~ øÀ½“ÑmÏ*xSØóR•¡™>7SI]­sXTCÁ\â#GMî–Â&ä‘â +tžÞ Uè·õuÉøGY¯V(®Óºy.é¬WA*ê hŒah–‡¿þTÕ%áÇž5ÙB3ÄV©Ò‹N1k þZ*xÀ«M¢f9c•D©Á­k²ù|†³ý˜`·¾lаéx›99*RÈL¼SÞÔðR_»× —„ýŽZ^`Ë0€¤{RÖ4‡rÄ`~¾Ž©V(]h¦]hTeD¹Þ/Ъ¥ Õ<_›Nôê‚ó¡Èt“ qéÊÒu>ž’¶ÀY³KÔóc³émÿñ ³¼aMpªÚ€7¬ +ËÔ7Ô ábf(p€;æñÝ+Icq b¥‰±«M‹K꣠uæú0‰Û5*IÞí*~:«HôˆŽ÷³.+„:?Ä_ôÅ“¼aüp)Ëlül˜å$^T·œŽ]9’,¹9@³‡‚×)׫zØnµ›TŸZ5+‚Szº²@î˜â»(mÑņaÿ¸:«„¾hÞàš ½„ÔÖª28“ëÆ Š ®ß[<ˆñþ”bÒ‹tÚ‹ô±eµá]áh0$n& ±[Fòb*2qûG•‘î¿ù)ǦF·Ùì£ÍkõH½òœÁé4´ØŠ5‚M˜=‹¿>^8-– óB°J—ÉWîò¼d³èðs„œ¹âÈ®–¨qÖFÍo´ë­šið 6¶‘›âfÂá˜94[äy_Sþ¨ ä‘©»üãûñÊþ*ù2ꄲ¢N)éÛ’C…¤@òÛõÄ,õe¬rÁ†0Tu=&©Ð‘˜F SÂÒ)#Ð⌲8#=Ä4(Kw(K5Ëe:Aír2A\>ŒÐET?¤YI± Ï“v´"À6§qXIË•»%í¹d)àˆOóÖk»kY!IªÌ$bNH;Di½0Õ…ò ]Ô+4J{>/n…Ì„ˆbŽÀh-“—%û_âõR¥XrÌVw™*×5‘Žwy|Y“u*±Só…¢MÞ–šëiq‰–yö}16=„|ªƒ»ç± Å¡•ˇ€4fµCYíèï:(DÊOd&èÂ'·>9ƒì:sŸ¤™:À…ТALZž±Ú#ÀJ–J=$ç4Äe ±‚·<¬ÍÀ'#à~€¶«§¿éh¥´õ2ãߪ)Ž7‰üA¨ÄÒ+<æUD© žN›Gݤ‚zWn¯æf¢ã‚rBiÛ¼¸)À$“G9å,›K[²Bˆô^÷«H xˆûiüV=½wÿ|!~UÍLèj¼ó=g"Œ±YHä‡<ü^¹S"_û}Yfa0\–(¨p9óíö¡ÝÿQÙÇà˜€lb™KŸ7/iL:ïÇp±TV°³ªŠ}ÑAÊÂìÇDÞÅËe9?›ØÄå€S[)ldˆjsÁM—„ê-—@½‘²šRÔ8$ßbüSˆöÉ©¹]Y„%fϸ'ºÛ‡—â­r×L¦™ï +cÖì1’âytE6»€9™)g´˜¨p[¨üüÆQün=i¨§z'¬ðÑÓ¦jÅL¶B·Ædº]¢OÛŽÁO~p}< ê°: +ôšþø)+™Ô²@I‹!JaL躑IèŒt†D¸}×›¼~²î™§åÔº@ è'¡^ã+Y™d¸Ô“¶j.¥n®þõ—7àŨêCîêØíšõQžÒ¤]O_€„qÉFÙþì‚ûh³Ÿ”¦s^`NVGe+Ôé#…OÁ‡À¼?ÂYĵ¿æÚ·Dº³E×·H%‘q´q#Ìê¬[~ hY*6IzU*EQã±Í¢††ÐéíW¶j7ëa×t´–ûNqAÉ'Ã.ΫÙ÷ó¿_jfÚcY T躪7@cÈn3k%Â^Æ,ÔÀ¥<->ùhD ð[T•ÚCö'·0~ÓŸ€¸¤T³·<›cnhçâgQ=&E)üA߱Ը쉱i%• ìÀ 1²ØÜ$ÁÞa:CU÷xH7yÅ[3å—;@±#mú¾]v/þ2ðåJ4p×Xé »Pç@ý‘ºÝßi ôH+Uäf©î ×iûÙŠw6CèÔAŠ +e­|À*Q[5b€sŒÌ°Öa>WÈ‘³]#^-  AÈ®=F¢èÎÙ2ˆØÛ˜iþ‰–oZÖZªTþð;h3ÎßhûÐÕÒérOZA‘r'Κ–6‹“ëõù[æ%Ó¼<öôjú:.û:V‰ÍL¦ÊNWó@›NŸÃÊqçÌÈÔ%—3øðÈlõ4„àÆ5¼1µÄGJCÁ•ç +É%C-¨ÉȇÄÄ¿¢.Y}Ii¡'+²z:Ì_Aø¡t¸f®izlK\ ÞSMþÛu÷Ù,« ø¤ÉŠÂylvÞ, ¼>_¨Éº”Ü©ü5Žd[á_w ß‚]Ë3tAçÊà ­4,C¨¯MA+&×C$vãY_3ê$ƨm‚ qŒÆÇNx×ÊïXS*QìjøÙ±c2ÁôºÏ/ó‰Äу$¯š0`•*'É1eV_ÞÛ®ú ´­‚¢ÅCd5¶ÔÀ°·KÑo%¢+b\°½ìS lmy;›=d·½›+TÛ|”!è•«jß-·vü@[!$4&xž<ž ©_¤VvjfÚƒˆEVîFÀ~ýe¹86mîß!­ !6ÁéÕT³ÒŽArñ(lÒQR¹GvíÄ­Ä_–ú_µ»4Z¡Œyrle#]Â5De‹©¿(*GKlÉèâ$'«V+´Ô›r“‘“ÚSODi +JÚîOQ²‘h}SJFËpÜ;¾7êEXV$H]ŽÏzht†B:³ð¤~T—›çàñ÷gÆXˆLª†ü´b£ÀKë7„{°y°(º6c,Ù8”7ÉÄ-fž€Ƴ¢ƒz9õ9©<€ŸCzäK}غLÍÕš²]qTßt&m*ëòA‘(ƒâ™—Ž/ž7²|àçJ>¦ï×É/Å«P¬Ð$r»ai ¥‚TR*÷ù»y8¸/Emà¸ã£$\²Ù +û/»µTB¾³úfXJ·ÎŽ„¢"c=%À ÄÐÛö3Æ)G‘·Ô7Gâ.H:B´3‰ÇÚæÙ­l±"JbFy ‡óÝ}%ªeK>9Ýèd•ÅÂQA™YI}¶ÂÀ]~Yüäç;¢<ñÞ|N&2? Ê·âzWTB üùµ^yïÔ•kŠÁÁk¸I³ˆlßùû¡í“Y,ô¾¥9 #ÀyÆ`¸§=ìa“Ê‘—ËáÓb!j +²9™ d$Á ^¡ÜH»få‹n˜j–¶¾_¯¤âÉ0=/2 Ü +¢Ä8›O‘Fgw˜¨í'»€FE³*M¹S7áÛ”uþñ%)[O¬ Jì–Ü\f³F!Æ—ýD±|ÑàR:t&››9»…¥ Vfÿ4‚U߇S|Éñ_¤—4¬ùÿøfð6‡ƒFSÉ+Æâù}Œ|~E§@÷''jB §éFh£†îçö9<‡ Ñ‘ª–ÝÌá_"! t¢ÑÖŠ!@MümEï”Á•WTÙutâ0rùÒa"š‡ŠòèqJ4/†$…ƒv$1S]²Ù3Mu$û’F ºyzºÝ‚^›Fm¢²ø`<ÅÉZdž.µWÄF•! +{Ó”þ +VÒekÔ¬ûõ—øZ%‚PDÊ-±C!„vûœ§oËÓujŸ•ÛP$µ«Š‹•áÁÝÎ¥¼îCû¸2¬ ¸=dŸI/iâjöP¡aËCë˜n«ƒˆzò JÝ šqÇdØcû¾­ƒï˜U·‡‚` 7®­À1¤=-ì¡RÒ웦2ì2iÀzÏeÏéÜj°l†T˜{*Õà—Q‰æÎ!Ü—fbèÈ™‡»!ÈÀï#nSÿ|p)bÒ©¦ Ý´á!•vßñ˜§ƒÌ=ìŽb,ñÖì_¤°Öƒw‘ìãº÷&ÊT_ÉTW§ø»y‡…xèJp+͵a9<#8>Wl-Åý‹ï—Ú a^ö¤ͬµ UÓG±ò8V“YôÒVŽê¥dk®ZT/±Mºâ¦?7“‘b'¬Øvƒ…¾³ ´D‡¦†ó/ûcŃ“ã<\Õž2¡2Bøçæ%͘*ÁbÅñ`1‚«LçÔ0Fœf @¸WÌÓWíäÂÄ™|”žQ~óƒWÄþã¡ïœÖcoé¼ÚSÙ;YMº¿”¨K{a¢b  –”ã®>N mSO›Ü·Ñ'g•Öõö¿2!9#0)G· Á(!ø0ïÎŽxÔñî,à—Ql| +Ф**ú%Ä¢ô"tTz°âÛ®¯$$+þ‚žÞÄ?µÊ#Ó¿ j³øm/[c]ßß×i|‡ò"ÊÊuaFV%d +^=¯¨n2@(âä°†?'pø©fáöz®ê7‹èǃƒaÇH¨b "lwìoÝœ«hþ£ÑÜYé×äRÂCL³Ñer»î3óXì$GV<ý˜eÃ_‰KÑè!ýOuÙ,ÊN UÏynfèFrܺ'¯æÊoÛš0?.Æ·V[‚ÖH2áîï:vê¸ÅŒoøÓƒiŒÑ«z(=SŒTZ@E>oôUϲ%°[ßR„f«u[œ—µíacfdaï³û\Å$ NËø¦" % ÉZœðûÍÀ¯$&NýCÄv…vX(û’ÕG:™p|ýûñkW2–4Ö'†ª½ÏŠˆûX¬’`¼5zÒâ 6sŒ`¬zm³‹”ÀÌ=×f„¡ã v{ibI³¹ ÔÓB yoôÜü dâÉ#NQ5lßI {ïôûây¶ÄíÏ‘ñ©ˆÝ×– !þBÉdhrŒ7_Ͷ ñPæöúm9D©ÁN º–›ÛÕsPs_–(½ƒUª³þiý®KÒ¨jÎ.V¸—Î÷k÷¨$,)¹ ¿i,OúÊ`w'¹ +~g2µri™Â©È8 7oªuW´gpZŒû‰T‡p>¸™—­ˆ}ÓeÃÍÚê­ËGK!Àâ\K T“#ñ²¨¤oGÚïê0_jf‡‰C>ÔOp_EYäáÇù.<@ð§“lÛFÒÅC,3`„Rƒ …wÇd 88ün_GRd øCGÓd%è—!øß02ŽT IaÚ¶™C¾#ÊòFÜ€š‡ø:ÓÂLJWŒ´`ÚµMÖ¯íOˆº åˆÕ‰¨?sd‰¼b³bUC ÒX*¢!Ývš®"†œüû&HëûE÷²zJГõ}yúÏ‘jÂ3Ïñ.Ç úËM¢IG¶)‡îêCiméžÈG ê"ÄhI¢ˆø]k˜9™ÂÏšU÷ölF+W)» ôÆ-†–¥bäÓtÀ.Lùî+âg°a9ÊÍ í)§f5þ´Fʉô*Å„भ…ü« +’`žp¤/$>U…1ï zþ£ç‘†E@6slë#ÈÖï ÇÃ:þE"CåÎg÷ãÞÕ¾;üo¬Ó>Ô"àú(´ƒOe%ò}(ÚÃ}ª5—ú%U°Ž^Bð ä´šU (Ký§J·]‹ŸÄRÆÕ¦KA©½Ý‰Áj‘ö°‡*j’Žžq?xF~–SùãÍßVïüï ï©g÷ïÏ¡Ÿ^{ï +Mº`¼««æÿhiÈ4ÝG¤›@n648Dñâ²JEû| +c°Sýö7[FgOóL‰†~†¶—0ï‰Þ÷ÐI1žÞê}hsŸ7hIU§µIð)û6¼MR’GmB ð-öjõ,ÒS°jt„-S'†-ÔµÅÓi J )ˆ,W„Ûjýn§’u¥{³àT‡&‘„ Äù•š¿>· ¦áíÞT4,†ã’/ +5}tŠP€ªUî‘ßKLÝ 5OJ ¥¸ýZ€´)!ÿ„{€|ÝîUöOk˜«k ªR—‹ .& ßžHOú–[ÚI¦p¡µÐ•,.?ºhª<"ª!öçUJ[·Þ)a²€æ«c4“W›LÈs÷R¿m™¤r­ÝC`ßë’‹jÅDJ“ß +a[7×E“\ˆ¢ßý©1HšO ÏÓ ñ,ZZó¦J* ¼¹âar¾ª4E(c~-H¹,H™Mí›v·ÒÙx( ŸÀÆ^ôeHª |…ýÓ25ÍqHxZpÉm­HÚÇ@2pî„G.3º QÀ +z +“ìßÈ¥‰Ór#´tQî$vªjúmOdSÙEDý³[{ÕÀ×`œùMmE2¼]ʤÄí–šÊìóæÂçªZS}ŸÉ{d'µXœ¢<Á¼ùÈ4ù1†"#Æz‚Ê ÃÌ )2–8±ròS‡ÀÈRŸêqQëF +ÂÓ +Âê۳§ÂJyÝ*„¥òÊ;Ù~4EuP)¦à9`ù€ï¸Ö~PËô7ðè¼Çž§ä/çõDG£Zo#KÅS]O2è–sÐuK´Kó£„f_ÙyžlïÛòì=~#¾³TPw ¶¼-Ò¬[¸âé‹&õ99µÊ”4>%óei$4k$ܧ°ÛŠÅÚ¶qvš(|ŸáÖ´ýƒE¼iœ½ím ÃõýÑ#e²ñ§Ð-‡dÃx³!»Ñ|æÊ)Ók%´Õf¾”:,¦aÅÃcêsS‹má!Mja ™Ÿ^i¯s=Q!š€¸·u<Õa îâ,&la&«Œ_d¤Ì{W–%%. uŸÐð¤`_Üö–¯ßß1‘b‘(òÓëç#•^…)nʮޞGê“^m…U;‹Ýö ‰»ÊÝýÈv-ªy’tnõôwʰ'ÊÏ‘ OOí[a£“çwÔÎV‡ÜÀ(~㼄?j3¬¤âeëO¿E.APêÖ‰ÐZ­¾$ÍÒ9ĶN,ª” [éÍï£éíÊLlq™¥~·VvÁŠ]y žÆsKo=oJ~óÜh +¯¥1"j•Y¦ÙQ¹Ä^N.€?O#F@üpdŒøáK¶‚[Îd@wë Ž'šJB"øCä‡Û>DÔ†ïvÛLUª&U*ƒHgjq¡ÐȇágñI-:?~$û–'&t§Ü‘ÇÑãø˜îŒ*²-Ûâj»$‚ÇÔ—ÌB^1ßh ûC®—Â!øýúËŠvß*È * +¿( ²~ÅÆÿ,s˜VG³8äË|ÈöŽw­n¹Ì—°6á@4Ÿ¬‹43ó³bÎꨴvƒ³îyW,Öj¬Ô:¬1™ÊÉ6ÿ–jµª(º×RÞ,J,%Dåûé¶}Fo5‚(ïE÷›{1Dp§l}µÅRäA¥X•[° >kò [kís +61ШÏL†èwIo“£’žˆa¨v‚—(Rx¾Dí­É*ÇB£ŽÚ +î”PœÚ,>NèL¶‰Í#›¨¿µ^Ç2êß߯7Å.”Ÿ¤‘hâ0)0ù¯Coí`iAy§­Ý˜múÞ°¬·5¢X$¼õýÛïÎôâs$Vè¿y1F 0½_4Š”~1 ™ +Hš]æTN#†óͯ¿Ü¥K¯Õ$0Ó©b ᥪ®,8íËŠ›<PC¬ÓÀÆ{W+KG´ºIò2†=¶‹@¥ÈtI¦è^:ázäÏxÅ1¨ô5¥¨‡-^¢ô‰ýÒxžVÓB©—Ìsp¸©Û‘'V‡²Rürx|îxDøïbNzäYiš/0È'9¤WŠeÆÀ6kcçöÊaôÇ™|-Årts*1÷Áê×Q죓n¼dŸGq ï ënªnPÉz;¥ä½5õ—AãLÒ¹öÌ_ +Xe«HY’ ߇Š@e„‡º6Jû¨kl” Y°³Â‹^ ŠÆrÂP³-¶Uº#TŸþ¶1Ü¡'ŸŽº³íÉntÉŽV+ ãûȯèÝ’l\CìÃ×½³¥úíD~¦™Š(k^öâ&-Ვˆ_Ì^(Ví»jSKsÑÔ´ÇÖï~«D˜€;ƒ`0¶¥ã¸·§T+žak{N?¨É +G(vDcã3a›ÖäÅ}L"B÷n[Сè2óÛ2¯À#\þÒQ¨fz²wÅeº“æ;þ)v|ÙBDÿ7[ìÔæ8àZãõ!ù>|#<Â^8[ºC;DGûº¡ÿý“ðƒ²#1ÕS.\u£Éô¯å÷Gásò°p8ða_VÕ4g(†ºðE=u0$ÛÚÚÒ™«Û.úûŽ©pI訣´qå‘þt·ã Ÿ6´t®+H1HÂ?Q_œÏÝ$Àö¹¦41®dÿÑDNp(!þ$ø¹²Íü…üÅq좄îyBQ¶ÀäPpQHv1’„}&¢×’  !3àaŒ‰ÄPx%+¾òº×®šKŽD{B é&ÄX†jßÒüñžœ.ª жiºñõ—çüËùsôI6KðzDª‘’K%›óD¸£§®='aìxè» ùØæ]É…xHð oùtGc&Δ޵`‹/)>—9Q°‘+ +ÉPÓV¯Çòë±ó´¨ùuÈóH-ÛI¹˜„¬^Y%÷®þ/É%,©#€i;;âlMíâŒâÕ5ï‰F@¹B6¨Vûõ—™ÔDC}Ø¥g vÛ[ïðpË€/Š ¦Ø¦HSŸ#ò¦ÏT)IaˆÇ¸úFS›b¸£µö¨BPG™NܪÁ‡hiYÝÓ] gÓÉ+^ey’˜õ—”鶘C†¨òCM¹Qlšô‹³Õ Íš/pIwûˆM$–P:Ã"NDËì$ÅÒÞ!n{u÷˜kM“§¡ó :N¹vš\» æûþ‰˜V¸XÖ&9g b`¶ÁkÒÒ,‚†L€øª«*G}´«ÉˆÏuI÷§Ç )D°ÅÊf“œl1 ‹À³˜ël‡„#‰gh—,áØ³bËé÷/@Z@ÖÔ·ß²Aˆ5±\o‘Éåµå«0U¾F ü#JßËzP ž—œnpÂM†¢J"K—n®t 3Ðvt½(K1ø‘4¯ˆ9Œðçt Q9é»FÔ²%›ƒ+¥NWZ²}ÿp¼«Y]PðŠð²ª—mv•+ؽFÍ÷R+!–+8$Ÿ˜‚fN{]½ Í6Þý5DLNWméÎf’Õþ±èn„rl[°f?Þ’Yö œVš.³gÈŒƒÈDp÷–qûà­9‰hAþ8´AP¨Ü`ÖýN³ßCƒá÷ó£ñÏÐ!jµ6Äœ¹Ø æŸÐ `$´)ÊÂB;,ÀL¡Šxÿ쬵ÍUéYÔmR…Ã|¨L$ÄÔF–œÕñýÃ}¸kY©Ãlè*À vÙÏU¢œ¿ÂûƒL›³ÄûGcÓûcúÃ"YŽ@螇ª¥`cï[†è–„ú*ñX©¹Ä-ÇÔ:)ÍÆë½eƒ‡FÔ/ßlõ…NSÛÄÙàÐöÐ0:ü·Û5ʬ¥!ÎT7^ðž4:§PÄ(ý!’`QÝg0ô äÐÛB ìù8|Ç‘àZ×È+i¸£Eár£È1X‰_„ v8šjH6¶fýƆúRâÍ*t!$ ÷ˆbºAe‚€ ÏEÄm'×A5J„›>u~Ða¬¯Œt÷Œí©Óµ¥[Ÿvx¨!,'åP|hЊ³nkíž-&Ô#hWÚ®™]È]ÞxzèÌvÖr~|0>tб| ÙÑø"”îyètrÀÍZˆK.ÌUÞ ^(Hý—v÷p~:¿ì¾$ô1[‰ñôüup2Þ—@0caÁÓž”­Ëm[C”†ÃÐARDâã~tš ðs[—ì–½®qae:\Ò¦p×Ê—ø!ˆsðCÚ§õ&¶Cz޼ÇÞ_7O-Rà€Ò»#Î1ßýi4]èa\àÐ×;v(¤Ñ©Â½8Ѫ Ó´ºkH ÊOÅ;NIcº#ÄÍXªÿj]'qaŽCÎ[›äœ qx.g¼˜ÝÛ’¬–ÞŠ38{I¼eCÐE“<…[w  E|dۑعEè@mK Ùà?Ú2%qo£Ü~|›pKdÀ#!MmµKî¶gð/\â²õð4Ý¡áM”'Óò3¼§‘aŽY36´á\ͽpjD8F˜•™‹BÆ:‡$vè¾#½ïŸÂ«6Îi'#ê‡ bˆgú¯Û3C\ÿ†ö +™Ý#5Ú}˜â fT¶D–£GÁ° É%1=båòÀ –LØj‰ äQÊŽò¼‚Àm,΢ƒÁ8ü­žröÔë¢ !aœU¬`NK\À9…î6Dàid¦õÕU„õ¢'SOÝ%Ú+Êfذ~ZÝ Œx22àá9ýU*÷àÀcE*ŒÏÁa©&-1(,q4³b€ ,äõ›ñ9¸H…Äq6tBRüó_m¹²ÆÞ´xèÆ±+¹«.Jž¨e0|òTІ„൒õ7@–Ê“‹ÅRRÆ0_ñ}(šêsJø1„]Ý• ß©Æ!¶Ÿç“½À ËõÜA7¿/Vp¢—IIjéAQƒ”¯x„Ú¨>>„h#rÕÏùú¢”GëÓ+×\¡dŽP, -ôÉEZGáäÁ‡­æ† †Ä: }2m}…êÿ]òUy&Ÿ7‹Â|ÜJ=ŠÝ±ïÏ›e¥¯&éhà.ðBù||L‚Óþõšëä~ioBOf”×G# ˆ¼æÅÏÁmÁÍ2qú«¤S=>W8K8aÄ)XÛLPŸN%#H«$riùsk+¥¦§koh¯™º$TqðRi;¶)#‡ +“lžSvjÛäÖ0̽§ôÎÕžš1Ã=ê“ϧØy[QÑQÍžu 1µõOq+~·2ÇÉּϔôƹB€$ˆE‘. ÿ‰ûTt¾yÞï&KŠç[± ½Ÿú"O€Ë–H.ø‚ÒÅÞ-Û[ðpPõjõÊt¼ŠsròSs}´ª˜2AèŽæEèÕ~IòêìN¸„•ó…s5Y–­øPMîèCÏS«,.T%–€×Þ±-•d8 óG0B݃0ž,Œæ[’UÒBpl±r<ÇØDÆ9–Úáú$Ï?¸¨àü;¿ýšè3-4‹Ô‹ž]¼íã¤m.ví®dPÏ«ûy]Ï’D¬ð´V>‰o®£×ÇtÔœ)*6@²ÍôHæz“mß}¤~¡âddcÿf’çÆö§†¥^2ùGþZ¿.B4DÖ›¥Ñ›êu}¡=›ú±—T¶zËš Šî”‘F!朗šÖ¥,EŽS¢ì#©X¡‚À¼h¾¦šß¥x“:u¬Ín—„˜]¾<úkºRÎ{Ë ë<&ðŽý;Åð‰ï¤èZ€ *OÖ“ª HV<žmðxŒÐ\šð8Īâ­åùƒþcG.3,¢yñ7ÕìЭ©^¥bͦˆ"ô ¡ø1ÄXV(Ëõ\‘jªJ¢#WVâwîô€‡Ôöl´ïôûªÌŒšqCèá_Û†‚®æ +?Û’Õü™Å´ ¿¥Šø¶c½äŸfð3Ár—êFžõTXj†š2ÉDèô(9înmÑêÐÔKLžnÖ9X5E©õä4«çÅA¦xn9™éI¥7}´àEX¸Á¦ê"¼ t/iƒ½Ž¥Z!ÔE2t—ꈟëÞß¶EÔÐiÜ6é8éi6f­ÐÍB‚²ÀmåD Qþd@<÷mÙßΣ­—Âto?¾Yâ1£ÞЏªt葃¤æâÕȇÒ (Ï™™5yÃDmˆ"¸V$ýLÂMaBif 6¦yº-ö\FØ4ˆ‘2úsEÑbEf³•a¦î§±7AŽ¡µÄç¹ÿSóš :p«?ë…ÚRRFÿRÕQÜúðïüm‚ÜŸ6@âMÇA¥þ4àaSMv䣘¿.u +•N]«óÛMŸàú¨ý¿ýwC²[® +Tºb"ó9#Ó3"†ûp‰ 3)s•˳dŽÀñPz|žQ}xjk<ÜÁV”t»Ëy?RÂMX›½ëø~î@=½ÅŽÉnÊ}~œÊ_h±®\š¨kP´àq‰CUÈëHõ +ŠÂ[TåhÄr(òn°w0Ó7„àIõuÿëkŒ óóx”#ØÔƒÅŒÐV¢ƒ?ž@&f_[T°ŽÛ· S‘&'¾Feß4=ÓÖkøÉ\©R¸~Wt‡§¤ôCv¢ø¾º-SõeeÍùõ—Ùû,㛣R¡€Vñ(¯J¿nT„_Àƒ.BÙP†ß" Öþ˜„EN’ï“ûsXXÄ+Ãhž:s°I„yÖ•`uã<9Ïô†Ÿà~Ëx¥çÉ¢$b}©ûÍP) —dͯõ±1÷TJEa$ÃîIÙ|"ŸZ£È&k“):½æ·i~%©þÓ~¯3]f¼w²«â®„2-?=e‚|ÊJ:J:¼ØhŠ×רŧhMfÏDKÚMÔd´ö’y|ËÜq…P(ëä_UAxy>©ºhE×zú; S46IifqJNÿˆ²ÍŠ?­ëŸn?ð+½ð ¶ÿ§ø^S¤ ^J‘Þé +{OµÑÓä\ﯿÌâ'ì:îž±áO vÙYcØÅȾ9²o–¸‹žúq„~ÿ¨Æ¡Bo€U?¥_š“³AA‘ ÀPB6/Ý›_‡òcëfþżïÄÈT 0aÚ~oÍíV¨Um´̲84μ¿N‡h*2FRãÑC$°’ƒÍƒ3s¬&7àUA¯k³ª›ÿÙ·»1À¹Ü÷Àˆ€™­c#ûUƒ ¨,•š«–€!ùç?.(&æ"°“[üØa‰îaן¤8¢e·t"Ç(º¬!Ê8k¨ð’ÝîC˜^‚æ0FàƸR0–ì’6éu{ä0Û…šÿ\TóŸ)õßÍìû€>‡Ò ù|#3Êæ÷7 ‰“Üͽƒ+ÛwK’—DxÛé>«m¹úÀÏ€"«÷Ë¡o'ÒÜüóð¤w +hLJРʢ’-cpQœu2§=~ ‰Ds+7|J +RQª·¦à$0sX¸ +lfF>33*®8²IÓtJ²JŒ¤&ÞpŒðMñýÙs¸'” þ€]u_‡]*"±›'¥ã4²z«Þ†Zuc ²¶(ê1ôÓ˜ +13G™ ïÔŽ8ŸÄìÏé;î¤P‚DÐö«2ÀOÄiEwª–˜mö•(`Á]»¹5@ÈöÔˆ\_‰Ï‚ý‡G‰Ó;6å“jqbœÂSP¼ŽQà–šèßEçnµ èë cRK¾¤ˆ2¸d%ö$JKq±A{AFúmþœCMCòviò·fVÑÒ^püo%hœ˜NNgÅ=^‹îb¼¿æÉ]p}ðäÃb‚ ¦§žAa"§Ì´ÀK“/üOÂg¦³j·D\üééM½‚™ãq”tœßP82ß›&„wfç1HX6$…¹±9=³S•“†bߎž»²·å}¦¥Zá°G8yÉa—ZÆøiÒ^›Jcâ ëKT‰™ºr._¾“ªOˆþÄÈÈ +"ª †›Æ`GK?N›Oƒ“Rz#+[£Nƒ#ý ZýRîú@m…;t‡ààÊê!ßl/)5EZ M¿ùTî\¥+’„ bgÃå鯑Úˆ,æ ˜wA˪¬#._ÔoóGj~±D)ê Lþ'-ƒ—¦€ v¶§9)ºM_³JÊ€ž};|@¹ ÿ(Žü6|Éï§Òs¡Š1ýž¨Èï6 —ÿþ>6¤ TN•ãIIѯ+‡æ Å–e÷z‹ûi£ݼ›e6Šz ß@€²)njGy†Ê°‰X•GÆ‘ñù$yÕÍòšÊ&G  ²œ•ò—Ü´t|¹v'̦’¦è =Æe àýýCÆ(‘Ñb‚KKC-“¢”b¨äXEš¹Œä©Òjó,=‹ ÕS~zo›±Iˆ=K£Så†")ð³LÝ™® ’³Iã›°;ÕÛ­G·ï3>Â_TÊ!Ê Ø†ê­ˆž}¦EéõLoB£Ä§Ø?p¦¾tÜòë¥Í6©|§]JZcE0ðäxEpE—ži+ªæ†ûv©aæ›ÞÀ‘Îü)>‹å¤@tì®ÿ6mŸ(‰y‡§déûÄ@¦[)Oâjõ:,iªÇ  ÆoØ¥•0õ–Q©[f®!¾˜M_W»˜…ÃQ‰r?ÕÈæëPw=<˜M²*a +ýóþ2—QÉÃc‘¶ë8²£à£\,áz33ÞšzÊ1å|˜uJ÷ÉÂ/¡ËR.b C9ÞR'±Êþ²ïçñi zOš6TYfj úU´ûNnÎÊlÒ‡þœòøK +oIQ )ŸãŒ_Q÷<ã 3™–Ê;©‡GaUÀÇ%“8ÓÂhÈ•?À﫽’˧ [Slzã–ÉÀ–Ñõí™|]ÄÇßITG¤Nä~Ìà ¡ü8eì°ÔR»¦TQ+«>²Ûëýà ìP÷ÝÙ@×oÊïÇRÒAŒ‰ {Øpû3Z?ÿüŸgiû8=ÔÆmããɰuªtâ‚ã VM ‰%ÁTf‡ºí=-wX0HC´–¾ÈúõøĈvÇxC´>…‰%b¥8ôÓO¡Y†7}è¢lŸ(”/C…àJ(KùØl–›í>2Nf/Ï&3Cºt”2ó±ufÒݧ^ ­>ÍËøþÉøÁ=Û¦éÃmÔÏ1+†ÎTÓ6ç*>¦5Ç~Ó€ÓqÙ­§h^îï>e­Viyr öw”._‘A“±ê£¬;–†YŠ4üÊó;vÇdÊ8uB±@â5;&±OV¥"™¶±‘äW*-©PÎ_¹g—N@ø¶Ÿi}ïQ•(êë\ikÈ §ôNˤyÿ—?d0‰‰k.éwÞÿ¥b•!ÕíÒ¡øñɼ¦Î³²K§Br÷uuü¶.Saâ H³-˜î;'…Ž*”3»:Ý*mlû¢ÄZÍÐÜÝ +•Ρ &£n[ù{M V­iÊV4„•Ü”•"–²“èd'*&B6=ʦ&ÊÞ¼ù]–ÛRë“"1“‚xe£ˆjµÊ­(ÅïÅðÝ™Ö4å9‚ìuWß²dò@² A¦È«Ô®“a¢æ¯ßXÌ×ãë/OçÕ”„ª†Q(AË¥²€ó¯ë5Ô¹Íq*Ͷÿ¢3#Fhé#ƒ +,P%ö’P3ú£²UÝ=+Œ‰\‰â[G¿òÂÏ)à7…v«èð#xúaÃb'¤0k N·â¦qéSË¡1{^R·ÝTºÃа²Å¯ƒÔ–‚©m ï—!EÒðø,íë/3ééIq¬¢jgDP9íìÍIõ&¯D¬•uM@ÜâÂÓµ‘QùÁC“a*¬mkÍ–œï¹º2ŽpúÚ–¡0þ5+e©iû¼b«©t%Î픎[î¯ágs*ôŒBø(§ʇ2TqûØ:ëÒn}ØÏO4”ï*ƒîÊ;²rÈ‘?ÍßËÑ$zßI±E[:vyxè@í6¾…L}í¢¼=ÑAÓÅÈ §‡Ð2ðήԆú,![£Öÿå6®V£€Û‹%³‹·’šíTÐPj-¯cVN3W¤Ä‰"[èbõóÞ$ù T›P+5ä¡®Ž]¶Ô­Ǫ̃„¡ z— ú¨¾Û‘—l]C¸²½(ó®oCæüRRÕ–«uÓ—;…=ûœ ”ß¿ã÷ñËcB}/ ,Úaßd]>^S›Í%Ùùûu&Hª†¤F[‰ýúü4 0ã]ÍD¦ÒC@\¡ˆT|TОrµmxÚÝýÅ~R½Ÿ<7{<ÛÜ5¦ªÍH±ówǵëÃåžQ™hƎسÑW>b¯ÑK ‚Sj‰þ DfD !&ôž W04gJkU¡ï8‘S»vŠuÙ(Ó/@D‰_4Ö×ÏOæ\l’€ZbuXý•AܧÎ(X×n=LåWÝÊ ðöv§ é3ôÁ£éÚÙy°ðÕM‹U»÷ñ®NÌÃv*-vkþéê΃æu:lÄ-:ówôëzËÒ_†¢ˆ“ÊÙâ2þ£™`OÖ$´€fô 0U˜uŸeb‡Ï›ïçϯŲ¹ 7·®Í-6o½ËùêEA„ ØZ\Õ«§¨9…}V¡Ð¢´÷ð̶%–þóµ÷yƒ×žoMlå¬åA¾.¿­Ó+4>7™¯íJ7|ªèX*6Êݹ´ rteùsÒ%D±µ©X{¥X=N +Î8ÝЉÁéVïÙÓ»&´SìÌÂü@´O2¨Õ¦ÐÎ+~›Uæ)ðHxâuÖD¨ ‚wYF6†_Eýãˆë¼Oþô8~y„‹nŸãÑ‹P3]æŒS`G!,<†#¦ +š'~¨€@Ɖ˜*ÊW¾& ¡†UDbµy,ÈóEÐYàC.Œ^‚2A¸ü!Xjéô*§0Z_’Ã:›D|øÆop\8{åÛÑþ DÈ!AçˆuwX³äǸ%ˆÎTMgšçë?³÷)±î­À…Üã‰ÝþÎo |íž‹‚×™°Û¬N I tÕ4£ü$Ëjå55JŒ¨‚*œÃ|ÌöÍMSþÝZ{ Õ¦‘b&¦ÄÚÆà>š#L«]4Ô=$¸>ŠtE:XnžZª( Þ¿\02gÓ0èò Æ¿YývŸÀ‘Ilæ7sŸ¾ÑͪHK‘)­æ+Mð¦}4/=´æd™|×|"ëŠMWú¶sÇwL×4dˆ«©['IüXJ +)n¬îgÑDã½ár"Kv¡$ŠÉK_òø’’àdMf»&³g^Rš;(•ö1"»n•ù±Üt)…9ÓÀb 0æh²E0ɾt«LV#(zȹuNYQ°‹vTG!™Ð¯™­ÁoÉ#QxĤۀ¸@l“$ +‹u&±gKø †oqA)lSþ„nü:VU² +eå8©ön<)m!¾¥ +š')µŸ|I#ö‹Í±ƒ&£äé- +©²å– ?ܤJýR”CvµÝ”c°\'­; ä©Ž3"EÈr =9ß—¨ÐÕTïÈXo5O¶%Ô†É#:wÚðòûùÆEj°Õ©>v¤m§¤DµêY]ÒÃAY¾ëiTkCÔegÀaÌ+eg×ÜôºLõJ¤ÊSê«@%ñHÆù;5ExNVÏv©vΖî@Ü`Þ~Ɣפ†#L2?~ÿ8¤=†(Õ—ÜÎwµ¯’? +­šjásEbL&MKn“‚…«™»%nt¦¹RN»[7ªaÇñ¹†§ñM j˜ËrìQùý“ù%'š¤'‡¸»š²£z:lžJáʔ־ÃC¨ì¯òìEbE¤?4¦k xdBòu•5bp;×:‡$<`áø†¨™„!±Œà/îÆ³ø"¨£¦¹ ®d¬n‡¯µ™"Ð+Ò?†›pücZJ;—Œ¾¦éJ½§t½Œ.ž{ Yã§éû²Mw;7}x0¿0–²X¸&øB1«ë:V͹ T'¾® °‚Èîæíbk!¤ksÚßÚiPäb&n–:—Q«v`»µIãž^ÐúfZnËñ“´qãšLÔæ¹¹¦Â³4=†Z¤ý²!˜Ò«Œ~¨ˆu2 Z\ž›Ã²~¬„^<òݬ=pH`WÆCcð>Cʸ${€²9$>]ÃûÀ(†«I_ `úôâ,Xý½XíÀçJ#ïÃPE‹.Cèå“xVw[ÁçúëS¹«¤ö +ÜA'è† [B£CR{Y•/Š.ÄeUŽ`\™ŽãLÞŠ9ÀR3X¨¦›²&äA¡@;xÊ5~œQÕv'=ÖZ[äæíÒ‹?¥Ñ`¶Ž‡]– NüþùnþŸÚ ;„ñqy ‹¦Ú‰NøŠ.·¢xZIP¹ªŽ´†·‘ŠôÇPZ âŸëkR”ò¶ÅS°!#‹!I๋€ˆ CLób̪‡'›ƒR£6ºب8C´Ñh¶ø‰ |‰océ)†–O•\u +Ä;ðçÍ…rxKgò»Ö”tC¶p…¦_{èw¶É0Iˆ¼Ù¢éë+†ÿNíOÄ'wI.æN‡9¸ûšZÄ[ïž«w1üx¾Ù“—ÙÈíM:Q5¥â·˜r°ÏÅiôƒ]E¯¿ºdL˜¯¨·gIfdÐÌ—G·.EÄ=`¬®‹àHOÂ9\ 0Èn»c„b7cFqO2$t\;Ý}BÔã÷0r<…÷4XÂp s%Hìy ËËì°¤Ý_ròK¢¯ö³ò=ö_\¨„: ±;.ÉòÐÏâ÷– "d¢:«Úûfî&1X•¤ì£B †È1èq[4ƒ?1"BáMQ‰-·¼~îMŸÔÀ(,ê!~%6Ï,’‚ÃK’v çZešDoâw@`ºcµÝ×ô Êíc·¬á-vqü¢Ã*'ð•Úg‚Ü7†ªë¨\®D󢨉´áfZ™ˆ×ß`­™IïbÄÝJnî]‰ÕE ²|Õ+{áÊÜÞr 'ªk·‚0D:- æ´¸LmfH3°„  +Íú–„ÿÓ ÌÄœkÚ +\@ùššqÉᓃ2_߈ƒõÏn!†bà‚E&¿ïôŠÆ ‘Ê<Ús Â8]ñ䥽Ú}EèæéTÅù\t‹œ2ÔD¶HÓxßn—#ÔëUÑU·ÖâÚÆ ·ÛIõáܨR-K̰œ§U€ú¯K°öC +‡ì‰›.ÌJ¯ÍdP>P6 !+B»Ù|ÜÏ^5(×\ÈKÂnü6Òaã2w˜üÉÖd¡²n¼õ15i¢w¤ê¹Õ¿’rìÒ+ŠRŽß ƒÄ!>¹>Œ¾ëtº*¾ó¸+× Ï)ƒ\i»-üý¾T{£ÆÕš£ÏvJ7Ôi',8~Šé£¢ñÔ¹ 6+W’ØÐæ¯ù(ÊgÛž±=T!‡ÔÂÓ?én¾  +J +貃<Áï¢ IÆë¾ô0|ÕyÅ*Š8SmSÊèyëò¦²Ì·7û@¥¦S‚/Ìn7ŒAg‚JmpÏÒ-ÏÒ®zßI#È®% çLñmÉT鑸¥-ú;àSkgüaËÍFR;iÁ¦ÖO‘r á[º_œ9”» ?†›ºâýhâ g€¿Hû³ ð:β +а{X´2¦÷}.g‚öS“5ŠñÛÐ0B¯¡TqóÇ1ѤJw2–ç-V?1Vw\ßÿ÷Âg#B:Û)B]”¬ku îô¢E¬BTw rj.nj?§y¯0—-„uƒÖn·Õù1_àIî}eì>§ì #àL*ŽUc&iÓÿèBG¢²ÍP…&ã¦Z*;ò;J§þé]\Ïs}„hN§yfd.ö¯ŸÉë‚M/Â0æ.1dÂ6vcÈÒÅ’U±oºü)ºò\oÉÈÀ×Ë´F*¶‰õo˳tªÑ÷j¡!S-žˆï‰ŸØ’QÆÚW+R•} RZ‡ƒcÏ–x+ +}Å*Çaüˆô Å·äü¸¤Úét4ãzENq:Ó’õðʈŸ1ª—_FÖv ÅI}Aíh(©R¬ò@$uùÙ$ŽÐ_àÕF>¶ooùõQltŒºI{tSí§˜vÆ¥O: -m»Ó·Õ‚[r<›H››yéy[ô¡KÈ\vqZ ¼µ ÞjÙå ‡ìt®N·&¡ÉÞ¨S‰†š}ÀÁZ2H‘r›ëÙõ!ð©UáȃSQ1lÒ¿`$öÄR‰+œž[úÜÚ{ FëŠc诿Ìä'¼cȈ0›–9klÏsíif³ø/„>odÀxÒyK˜RE‡ì6`¨óŠà¡Z¼»§;úqÅ9ÞÅ &Z2†ˆEÏDJšÂ{r ±¥o‘ík•Í;õëɸ±-ëinëi–‘`—Ò¨`ñ+oJ›´ôâÙöÁZÀ]}ΦPËrÀÈʈmF$(+©í$<Ò¼íÈAqõWùůªF#&‹a"R0 + +6¦àò‡'óé°ÅÁJscɹ92Y\œ”HŽgÊeêPÍ(¢W¼ß%¥O½þäÛPºÍÜ(ÆŠš4Lb&a¿z«þ¤†¡±†Uñ˜Lµl«È@Y8TçbÙN‡~š?¿ªGRÕ¹]ó¥Ð]£zGµÑø¯óÂuÎU!MÓëEºbßT±âk«®,6WSíMØh ©ÖÈ¿— ÔXǼZý<¹B¢yù UFѱ¶š/ÃÒk¬dÇ„òÃ%)˜veƒFbOΕ˜«ŒÐíÞ ž‹•·¦zn¯-· P¤YݤCæk–-UoU“š(~§jΟäfã•,Ö0ûÏÃp;`û¶¨0B÷ÍÓ cùtè'ŒdNö“ÛͶc,ZÚ,š­cÙø©-l¦PmH¡áëüT|‰-QXˆËw÷·ñ’qb3d_77J›Cñ|F^ÒúõfFÕ"£b7 ¨¨Ò ¡ë ¥•ªú2ä܇ÈÄg]7úÀ Æ3‹Ç*>î Œ±V×QYóÚª¢Ôs|êø¥]'‹¡Öe†_]žÉÊ“ŽÎtèŒÊõåë/ÇAôþ;_Ô¹½7aÝuˆ€Dãé~ËM4)YHšè¥‰–;<Š2 Yñ´‰ŽoL׺d̉ž´6Ž:?ç¾ãɟ˜Öß&9㘠‚ lÏýšo"•Ë£•Sm +îŽÞB‚‘¦jÝM“(»æ«<‹9ÓX| +´õãlôýÍ2þq +?oÛÓ‹<Îæ TáÄ~ Œ5ôD%SKYÿ\m¤m$ Øâ²ñR¨\x lÁ…¨x;®ÌðJ¨T»Lk]çü¨+E}#Ú1(•Ö%£& *\VáÑP¡¸ìi¹½#.WIèoá +þ +™Yj)Ç‘§È ·é—ÔI•Û³Û[·ßMÛ[¶Zcø¾Ãâô^Í=H>«¾£P†«Z/}ŠQ…‘FCé…™ØÒIË]ж£´Õsatž—ü5< .(E¹ øK¦Xrx„¶O=d<1V•@)èï’Š9þäôn§(t1rD_ÆRgu3†¨æ†!©pϘJAÅ)LŒ ·s×ç»Ô}Yq\ªí·ì Pà Û9„¶w¾Y¹N(¯†§#ˆ!C³¥ÖñõØwýý£yÊkŠYAvà0ZH@UˆûQðƒ`¸}Yàl»¶H2R¼êÃjdOÁÂeNT4œã—`)ûYW^'8sEWÔ€":Pîq6uwQœœ[̧ó‚Ò)eý}ªþ^¯?çnò±eW¬æ6¬1Ïv¢EècwS1¨À + ¸CºØü1ÖÅ)˜±-˜±S&Œ!a•`€h–Ú†ÆXË­&šOQÑè›+þøhLâÎËšˆúþ•PÅ5h…û#M i —ó˜É­9: Ò•ÓÀÚ/õ?œÂßhl +/&±‚ð?KÿœâÌH~K]ˆ3 œH†šh鉭äíd'A¹žW„ðµ¹ÖM\ëtÌ+sûãúV•s÷?º$e)ŵ®&b3´KfD(wÿìï'ÎózSi›R7ª©E¸T\F{`I¨~áóÁƒ1 ‡]ø-Wû`H.»M¤q³È…š £HÛSž°œæ¡gg-æ)OxÔA¤WpùJBÙÂ@³¥0¡*+ËnœH)Üð¦µÜmÉŽx_q>ƒäIýežœŠ5;Ú@oà ¾C,Y5 eb: “Ñl—Ò9†˜‚ ÞLªDd~5s!QJ$TÀ¡Ôx :—âEǘ¦ +²ÅpyJ"pf^CwdV&C¹ dØð¶LlËJÔb†ßQwUÈ& +GJhwÔ,Ñš•dÊÇ2½O6G– ,@#PFÓ¨ÿq=ÀZpgEoƒ„I×4¢<näpéé¦.ˆÄ‹^eÝ-K-<ä˜þ]VþþÉ|Ø"TÍa-߆úý‡ªTsÂÏv»<®Dºü9—Âù²´€!ÀHÔ.ã1'Ø_g§G^íEî‰&fÃrN6¯ pg×Üňjdöõà®á0-%ÛÆ”GãP7_UÕ,êbpQaâÆ£õÈ´ë)5ózñ›*Bæ +ùf¾Ÿ¸W›(¢‚-ñb`*¶i¶ˆÅ ÿ¡â—©}¤ˆLQcbdL‰-5ú2b¤‚1>XÏ…Á “C´æ€ÈÞtÕ@l{ •ËO-5([šÿÞiQœR¸}W]U¿ˆ° µñw›¹z¹^€í9Åj×H¿¿é·Ö$Öp3¨9µIWªÏã³ÌcU9¾õ2üÏe?OC‚B\¢Öàú‡2Š%n<™8dªâöFãŒ')‰ÑL &¸óí“g‘Ǡǣ Œpü­µF}ö«˜NT ü9äåK¶0~É4ÞÞìÎi_Šx€í åwAC#e‰øþT}ËaŠó¡|1_:®7hÚa½IæÇgò)±‰žºÚDœÓÊ[ÆO¸Û²sµ%SM¥•çrVNo‰„ÏìUVš1$ ­åUÆ$^pwaAÚH€ †?N]B8ŸS¾ÿB-n}ÎÄ(…€xÁ°6kuºôRàˆŠ+n?P±ˆWDgÚéÒ%M]üâ´nùðõëPD‹HàYòXøvÚt,øè¯yI,;¹šÕ±ÒÎÓaxDE6Qt㮌¬°ô5:¶DÃ@¢õ;̱+g¦J’}…LÈÑLj~!c™”¾Ø7´ý¡~öÇ+ílëØ&½Ap u‰[ĕ؟Y{1¤]ßo‘EŠ\ÛOIë¶‚Öl·&Œ­_™¦g]'xév;Ù“‹.ýRY9‚y윴¤éò€ø¬«”í4÷OCÖ`ìNÈ åÊWÍDªöW^ûZ϶©óÓŸ›Ö¤Z4Çó +w’!J³Ì"Òªn¿Ô‘ô›æf  ñ\†J“CšÓí2Üœ ð'ðHˆI ¯$¿ËbÛö•ÔOSitŒµáCWrßã±y½"·«v,£g”–¤¤s|.!-!½š …ÅÅÇ47ð®“êqäêÁ*†Gü+±a.~Åß!ærJ¥‚ù<IérmR*:—¼)Q·SUjuúúC,l¿¼p ã8U!ÅŸÆ@úçÒÜ1ì+n¥œîŸýý´yýv&qÊ¡y…  ;OkRNÍ!¼;=Û¥Rfc|UtÆ–èÍQéqƒlØb±ÖÍMS™¨9·ÃÖ_l1ý9„4µ{­ƒ!E=×|¶"Ùíã…¤¤‘’ä‹!¶ÛqÖ” rÄ{iKô œPØ!²…ŒZ|[ö$G&þÈ%e º÷tÐÿýTz¿ÝÆ`öe-˜ØÄAVúWƒ–a\Ô Võ››k¶«wc»l±U„Þ«ö··ÙDl#W+¼™–Ê Cƒà¬»_lrkJ•Sn™‘‹o³«?ƒ`_^þ¶bi¦_† ‚‡ñúmhÊ>ŠôS“‡ÆN®$´ƒI7ŒW¯Yíɵ”œ*-ËîGÔòÛül4ý“Oç Âf–S:‘0ý’8N·¢?ŒL8;dÇó-¬“fg.2Øí…‰Cút +j¾üÊOÍ´‰xHâþô¶t"ćF3,•5£&4ùn³}"¶#õò@!àD÷"O"ÂbÅÜöËâž×ô72‰Ñ“&6Jµ §#1Õ_™¿wÒÍ!©o7¡,>èä™…=\HØ ªvu™gQ|[<Ïuç¡^äÁ´[¾ÕÅVl´Z*ü\± äWúår×í¥Ï<è(Ï]v8Eà¶÷;çXÊ„Vú”S¯é[Sýô”Q¯;½[醯’Áb|õyNã4›¦‹2½<#!oÇÇ£«¸G"¸{,œ<ù7E[q‡´FÅT×/8‡pNnßlK?fJ¢Ò×0¿}"Ï$€¹:jñÉÞð™Р´Y¸?¢ ÒÐhšà ZðJ7S¾„wÅJCGóÍÀˆí¾ŽžÜ¡ÇâØéqÃÞýgÙ:‰ùMÓ#{¯ýP;´ +Ü9É»®°À1iX&DÕTzQnÙTJÆ­êir¨Ê¦r~ÌnXۨױ9L>iÐfS†™@ }ýe*_YÔÝí©Â_ ½†l¼ý{ØæCõ0‰ÉÐwÆ×=]ëÜw85®ïwgìØ¨Z^¯¤—ã-L›Žë¢ÒŸg˜.gâe¿tütVñé¡8i¯¸yг0;lyhh ¤·+­”Ïå>ì®K¼Ú;®þ5ô³bkûjÚx›Ô²~œ·Ç೫ï0Æ;r¥8rK fÓì±oûg#´ /CÐ÷všU°ƒ/oºŽl@z²äÄdGÔ-ðÑ— K;ñ@Ý®£{Ü«q7%ú|C ÌQð‘+ £ç9ÊõdÕSCKC’YFWTäÙnm,GƒÕ«Î +Ц„BòŽÏJš  ×F½ÞpäŒZ†[^hºšù„ˆ¥ôóÞ4í¾’\©)Æ\ìÿ 3rÙVþøhž7ªÈiØóÕh¯Ô-°9ª¼9aùJ³æx½Ø@jð%ûóÍæ›îб‚©AØé< ßUT!àCçY(d×?>Gò%<0J¥«eÕâuDØ“W|ÖÈoŒœøã%­€‘¦‘ÜÒ•!­HÊ!>ÏàÙ§6ÕÞÙ,‡tJÓç a¿Ý:E+ü8.`*dÂe +²ï4… ¬Ç˧¥:ÆM-qé×-é×mwZRß#Mh×a >¦Êô×*í4£ýˆ%eÆ1¨ƒLÏÁÌ$¦§ø œ‘/iûbÊBR¬Ú¡Ï)ì$1Ù£˜_¹íÏÚƒr ßö¡a’Uf®=wq»š=È>ÕC\i‰Œ¹ÐDpÝ|@b÷1Õe>Noš\*Ò‚göÌþývŠ„U”ÆyZb;"ëš&º]ßE!\±'±t~’î]åY8äL¹¦!È«ÙÖF^ÝÓ;=IñÀ+-ÆÎ¯sÒ½Y$Ú „¦S.!„ØY]߀mݯ¿Ì¤—ß¶‹µ5(DA3¿5f H(ìN†«M¥Í¾åÆÍH¶Óø ã!Ï–L;:%Þ¨DÕZßœTá†h›R”è}¼®*-Õ‘ñŒÐï‡!6­n:k>Œèm莳SbK¢jH=vÚ îô|Y"ÜâwË”«ïω½È +ïê´þ4{Ÿ†ˆÌ¬—ƒfTÍÆ§!B°5òLªrÄ;»R®KWe +z‚¦µm>—J Lýiˆä%ÙÌÄ÷ÝTu–ÌX£1²r¸Xðê“B³¾rlŒn ™ È¼‰ÙJè§fÄò|£"Ï/Í_¦Òªõ‰Z û†rRŸ8(Çuµ»ø:£F™Åz­êæ,•=;I`޲\0xÐÇÁ{SdL"¬ à ?ÝìÙ|ÿD^E8·Øf¬ll‚Y¢–ž#„ðÀpv–ø±Ö”Kü=Û„%Ÿ†Ä½àÏ +³Ø$×*+”ƒJu¬c‰/Ç3›Hu´¡‘[>mBî‹üùÀuBÞGHGàTA# ªº4߸I¤Õ +¥›€nÔj}¿eKI5!T‰Ïu3~º 8W¼ãJhÛä’@+v~ýe½ïLK !xf£ñÆÚiµ‘0+ >q±¡'ÂØéå¶Vr†sû E‡ëkHL9~ˆ2õyH“3¶…>ç3¡qƒlÏm¤âþqE†ÞÀå"½¡•ç°Jvœ:³Ë0Ü/Ó{Ä¿*µ·)“7œ¶r²NL7¼´}F?…o†ÉMCL'lpl®ÍJé¤E°"ZH@-W¸ì†ÀÊÚ"O.é©EŒ&ï©Ä{–g}æzk‘Û a5Eå´ÛÓäVº] औLîætÈu å†Éª‹¦ŸC³»C7ü‚3—|¿¿wþÑ£¢oé8ñû9èfû³Içž 96”[s—¾ˆ¥À¡¦æÌyÞ1—ý·Z8Úv+O‰Ä-± ÎP­0|ˆ“ ½6ww›5¤ñu“JutÊÑ›9€ËâÇ÷šÂÓûä}‘N|ÑÿïIÐ(ìºÕ•@?ó>$ÓÑêduëB: §oçñÉÏ72‘Yþcœ +…$Mó„q Ã.4.%¯€­ýâ4' ”…~?a3ì+ÌênS—w zÅüÔM¡‡D«Q1Äj2€¥ê$¦IáJv’¢Ä°»±K³J¾“æN¢£)S™ÕÉi§ÑÐ×_îñq£Dz…H$'ȼZ—×~ » 1†Ö’ŰŒ­hæª`4rU + ôv'êÃb"i"ŸX†¡×‘"'FC Ú Gª]qÉg 7³Àx)JÐÇ$ÜŒ*ÿ‹{á”á—Åö¾M3ÿþ¦ŸDõ7%ØD‚zE{0%2Äîç~‘*ˆîé<‰/®rAÚBV"ÙÒ§”d°áz±ñ÷,X‚ýhÔ>An‹bEÈP"¾+QûÓÜÿN=H4÷h¦Á %7üÈÓŒ–V9».?h¼]ÿÊïïûmJDõSw’HLtÙVîIRe8”b )À¹'-ãqdÌͳ€A\‘aìâO™~ç  +„j«{ƒÐö† +Ét"4»²Ìög$ù ­%¬™…¥ÔÕ%¢[ÒÔì\­¦Äð·÷úÙ7’/I„,á×Êmæ°SL…øv÷ª +¹ŒÇñЧì´Ô@ãtä^¬­®;j%ý±åúÁrê’³û¬iT é˜ öy½ÝšÊm¡™†(Øè¶‡ºÈÅt~ý|£kNd¬@鲡Â:rëØÒ6„Â~/Õa­’c˜·@pkRß7†ÄKòõ¢)b¼^+?ÆWûhZíÒƵ×ÄÄ’Núwˆ«Á»&5ç†Î"ì+C?D’ÙqE±èºi¿#Õñ*5ˆ€úŶf 0/E +]¡»¡«^ °PŽòhÖ‚)1Ó<Æk²}ÔW£üSÝœLê«a7þ$­Iœ‚€—Ú“‡{ G$›õbßÛÕ}ù.èHëæ"”x/»‡ˆ'n§:}òo„¼Æ?g©~< +%üêûùz;±ªí%ÅGÀZŸøq +€8¤ dykÑÈՀʈFÖÃçô€„¶#+ ÒD2MMbE%ËO™¸¯ÌÛv±R-N“E1­™þŒØmûðD}.¤\fŸ|D“¨ì† öäj±óZ²¶°6¾¢9¿KBÃ$”p?{ î *ϸ7uüœÈ%S7-ž™¨€`ÊGE÷`×J=¾c˜ÕZ´dÞtÌ?†àÃ"“Á’²`–Hhf±) Ø{æº^œC« .¾'%³Õà§/Õñ ƒÎÝ"ƒ²| ÊËz–þ +ÚÑçë/·ë|º™‰ÖoQPÖàÆë +rOÝ%´ÈÈŽ˜J0ˆ» +æ@B°q°P‹¶Iùö8þc[¼R¸îÎçæ¶ýV|‰Íïª:t7‘X1©âùî€x€©²Ðf†Ç©#£k³ûq&_ ®§úÔ¨X. ÿï©Âµm£zq­¨ß]eç›oaX^BãDæ7ÑFã`+ò$ªÒèsÒ’E!x¼í [¤ÞÄÁ°õ^ªÅþ±úcw«ÏÍê2{¤­[—A„{­¾F0î!{úþq¿¾¤¤ÿÔ~¡»ûnèû)tÔlŸ ~hX5†Ó¼,è_× +‹—²çuiÝ ´(R|±‹Ý›`àXÚÍ`zøZ³*a“ø'/Q‰Ùn&½¿·–žÊÜ®(JÈ’½ž•49`œü%±‚›UôçРÅP35õ²) +0, +°žÊY“öd $&9Mj“I±Áªß!Ø’3üiÿ$B€Í q hìW IA Êß1Z¾3ŒÚUrCKídG}èSŒïcˆ4¥| ÙkŽAµ“™hd +¢†~±†ì-dHo4hϽ…·}W¤!Þv/.\E'2àöÌKŠ>…0Ÿ‚ ìS\×òFU~Pš¼þRÿáù?®pè üÓ¾ÓÒ,ðX³eؽ®  DÛå÷pï1Zö"Úv€è NGRÚ5dº2}¼/°CÅÝŽÙEE'i†kµ”ƺ>5t%gØxUeŽo˜éÌ]M…j2Պ㣇H‰WA®ß¦e—*$óÄZ£¸àÐÆ0Ø“‚öp:rËŸcK¬_2>†L¦šm­Ç¸)Ù$Ò$A¿Z/‘Y´ôNúö8YvVbQ½lÕïI‡On›^Æ1¨:t÷§o`“q@×€¦ª•…ÇîTÿoJQO*<ùj·Jtˆ­#”p»¬ÅVB‰WBig¹OµyïhVèÙeÔÂh +¼WIçcëw¡ªCp9=ó’,ªsöçå}™—l7O]Ýq‘ŽÜsøäÌ%Ez¬¸ „rSÍ\žáåXÿ¡ä.êG¶—äÊ–NÊ¥žkЉiŽ¡P)\WŽî¬Ä´Ž©„*¡Dy‡B¤KÞt™Èždº+#±Rä¨Ý_9¨v/JKÝ Nˆ½r AÉ/Ê |È覲 +‚ƒú´ñ»¯$~I ŠPHÑץϭ“aÕ1•§˜ü+yqfptJGÖÞvÒoÖoé–Û§1‘tJ¶tJîH¨zÇEZP#L%‘&â’ãIøýÌbŠ@§«Ž æÆmÈø‚ñ"¥!¬òÓÅÐ*~-!¨´>…ŸlšáaÜ•‘ÈùõR÷çÿéŠÚeéeDdfœSb¼/°¬1‘éƒÇíH\v·Å) =×DoØí +Öº¥gÁ0_Û@7wœàÑæ¡•Þ:ÎÄbO7 +)¼!4±†VWOâLh séË­!IöPÈV~A·yÏAÞÏ©Iƒ‹Ê̳_ËàAÅ–Î1‰ƒåŸŸÌƒ£™¹RR©H€ÿ5Hi"yôTY©r 䢪“Û^AÂ8c®‹©Av ]ŠASB‡‹š ¦= 8T—·©¨‚½¦ó°²2Á“(DÎ%”d™$@hUÒÖÝJ1øÇT‰©…©ô?º9¹·ê¢3Ø™2öê.EÉuºRù8{‚âËÓ¤\¶‰#ú“pÌØ¦Ä.ˆ¡Á“zA:?_™ùÏIÀš8¿q,}£5÷0éÕ¿]?_̓¼Ù›ws»aø~¦'O;-­±Íuc_â¶Ít7•¯8Óy¦PÞ ©cÉ 2%(‹ËqxŽÌoa¹SL±èêÌ£U]ÉzPuÇ3d6®™ØFßO[I{¤ÈÇr’Ï,nIBÅÕ"‡1ã2¶áD5ô¥#Ó:lvu| sUç×^‰Ü¥ñ&L¯‡¾O5IŸÄ&[ þìÚ²I Ÿ«TÃe‘ò¹o«Ïc¿' «ƒÁÜ5´§ñ@wâ F…ÛœÐlÅj–ÐXZ6Ì›ìKþR0p ¢°^×5Ü#b ʽƲÜÛP K`òÁØïW)”"3“ÜŒˆaÌïúÿ¬½I®eI’,¶‚ÚƒÉ?HXß ‰âœräˆÈ!÷O•Fízx¼ü/ª2ë©ßÓØ±FQ‘µ’ üÇGGˆôîSìO,XƒÑþ°v-®€…Cz¤OTòéb®6Ò9mn®pM³L×ß‘:è6Y³kx B¿Ñì9ôw [Ú´Š`u§+$A¯‘~Š5¾Ó=4-a¤ð”Ïݶ‰EHSe Câ´\{M-MÄðÞý\#éóUçÉ»kƒÌíl(Øî5p‡Ø#>’F"Š3Äå·8K­ Ûˆ|7’°n‹ú_‰¤šLйeÕ À¯úJ%6e—ykEHIŽ–ÕUe£ØBæØ˜LK úBÿÁXu-ƒE‚¤[TX™)I¦]»æ—Þ¡føÙÍÏz‡ÈHg­ïŠJ?I²É´:%Š„`WºÓÌóúá¿yíŸÈ»ºÃÊÅUìý„;y*‹ÆžÁ˜ËbFӅбÖåôºÔÛï0‹(ÈHAƒíºŸ«‹<†[ªQ„Iß ­EŸ=Ç‹ÒÍîsïLÊi˜¥0žÌž‘RáDŒõÜ5¬Ø[ÛÕ(Jlr{‰zÂ[`Ü2@x [Ä|ArÝÁ‡{‚á_Žà'ç;õ;^ƒ±êƒzS€ƒDOüìÊtŠóàG’XfI +#e×ѬtÖ“>™â‹€:1dñ]È"Òz¼\Ñ›W1D#QÜ<‚» ™öG"›xWÚˆT[u ˆ:+xÎxõnecòðƒ™^Š5r’r ;¦À$ÔÛ?¼XPä†Ä  ¡Ñ—Ž&Ê#ºÿÁÒj–Àay¤Ò¦)6Ç·¯>ÄãáZ™‡Rž‡,y„ “é2¦:”¨œ¢6™Øé¤”É$ilòè!‘å‰W^uj#¢7ŠÅ:Â4N"éŠdŒ§A×´tj×€AvÉ$¬%L…UOÀùF^QÙ *l’´®±ú¤¸íŠ +ŠJ™œK³§”ì•ÜP§>ä{H‹š_k©Òó¬~mÂæ9æÑ”Yé¿ÆO˜;›$ã—¨Ê +h˜”¾Òl‚qf€ce‡‰.l^ÁÇÐßÖÅÍp“›!þñ@^¼ t‚8”÷C;(þËtœèÿ•Œ„«kó%» IWa:“V}—4MÄM6¨WuTª92K‡çîÖ²®D?(Ø9{~¡J(q}dÍ{±ût]RBüK3—Øë+¢r3§qó‘ô*h^Žæ=ÞM ù +z­ó)¼kµ$)iÎÏ SgîŒk«@“ÍPá$Á*µÚ,TÜt¿‘A¥ãþÀ›Ñ¤ÐÇ0’“=­Š–•Ù + Ñ›ñ;5/0Ôm2Uµ0êÄȘ™B-…]oÌÒ…W1ü;ÊÑ"»×© +• æuejŒJªqâYI¡²`áÞ.ÜоòåºððNà! e“úyJwʳ´ß¼d»ÝW£ûÕÞÁ™+Ö훯?ŽWÙ¼Õ¨BÞ“ (·rIçƒðŒ„Æ™i'Î1Šo‹¼m¬–#æESLB0Žrî4.´ÔtýîJ fY$‚Öe¶KS'¢G×¹žÙÈ«|ÿnè2liRIˆxRUÿøþ=Có,èQL`®ÿ[6âTjÌ*3 5а[Yês©šë¥:õ4ÖMҢ퀎޳x´e2Hn’’& õÇ÷öA’µK3÷ФܼO;›;™zІzÐNúj_&­D7­ÄNŒ†ÔΖúÐÞîk +3xhIŽ‘(ˆš°÷†“\¤Ðï4 }-àxêã$sÉŸŒ:|•±û‹ hõÊqI¢dü«QÙ3Ö@÷QÿÚòÀŒ€÷žÚܾÉGÆBG›.tÄ)÷ÁÿJ¶MÉo€ÎÓ£%=s+Í=¾†(†…‚1au?¯Ç½whü„ßÑPIÿIi¨é°½Þ“åyæÏ¦•Ž+xêÒcйQœ‡¦&@'ÛH<± g bO’ÃIÇj9vÍ7 Ü^½œÁ §pf?B÷Åå„ÚV޽rý¸³U %ûPâ)Dƒ‘A>CÊdtTÒnº£^× ¿û*Ÿ=­:½Ì,?æAñâˆ-Ä9ëeQ?*½šæÔ(Ð%ð\‡Œj7ͪ2h5¢„¡aÆ–ó•Ñ~nlKMÓÕrßqC¢?Æù€ã ¹qr✄˜$À¾[D +M¹YsmH íîá{Q…Šä@•ùñ‚«|F‘—tÃ~ñnb¬Â·ù"H½‚…¯>ÁoGòíLÖÓÕšl.‹£Å"ucdÇZ»7´•Ž™vzÜlÈD¢:[uÜþSRäÇäò.Ù=3F–Ó’ñ¾M hcˆ3†V#]oÓŽ&£à1„Cåþ]å†õA÷1浨åFj\ňÝ_QKØyIœD»Å#®—›”ÇìGÓSòB3¸1¬vjWû2ýç˜yþ¢­Æ‡Ë9pâg࣮<.¾þ?Q]2j;ª !1V“xÞê©4”ÿÐ.ÓZƒ°°5y …4—'ymi¢Ðl1%9Ѝ±`\L_ƒ û”yCÅÃP/w +F«©#z(4ðÙ¯î'ÞX<ÐȽQô¥ Ù`}Lí’»Y-ºdAa&|__’» Å¡¥û»²˜w Y˜»l÷…VyáîPÏ.²¬p»â¹Á¥Ú6àf#ms±Ë—üòK8¶âk¢Xˆ­â¶cÜ>iÉuU´ÃØÕ_‚(15Þ@« ¬9’>¡?|B2ñ'"±Q©3Aª@ÊDRëŒà r{š4ûÈíÉ„dd‹„пÂsÇÁ÷íŽéîk“bk‡e¶öBJ¢ŸþB!S±¦Þ–êZW‰£TfÈ?¡†Óû{o7ØAÓ¡ÖvšfÆÄTåkÀšÒAð{ýIœ3¿‡eSö ˜vCÉ®[Ÿ¡*7% x¤üÑ^ +h7ˆ‡ÿ%î.r–¸Ï\IVr3èÞ)ÂhÑÏ’èÚ.4ôýÎò‡v¥®s‹ÒNÁÂHÂ]*Þƒ¯†©n^½¹¡/îÎøRÃ’xnÁƆKãÁX$ÑKª§gȇƴPÏÜ·ãöA€]“¿)mp•;þ_j¢^êo&8èòꔾærÉÐAÛg‚¶˜ù䙫öB¦Ñÿðý’®ç&{µ&@W4}ÀswA‡ŽÊÿ šï6$p÷vU çdjû…Éåí–çq»t(®²:ß¾øgº57[R>8 ñtseý*qEdé¸ççûÍôSø7¿íð¯F#z>¢ì|O€%»'*¿üi"’bI'dÆj†y* +r‡è?DÃßÍYªr6Lò…Ê’Æ5Lí%’èÌk +2Œ’Ÿ£Në\]㙇ûŸûA©õÇß Û‡û²Ûî‰ÙHÿ¤¶Ei·$6 ©­ ›ùbÆ‘égþ5Ǻ1ʧ9€Enšµ8×ìÁÆVý;©ÓЃžö —Y4MJ´<0h•)”?tEКé±ÈE=øaZŸ.×ÕTTj¯ÆX5šA#4hfIún†$“« endstream endobj 82 0 obj <>stream + ˆ{¬Å[>ùs~œaË#ñõ~øÇÕ}´eã¬ÄŽ’,®‡#¸|‰šùLÐIFz±#ƒYóöÝûø–ÝøɨùÍåø±¶À ,=| x2©6÷õ—ø|(ErèÃEâ +ôZk¼¶(2`Ë É<Öp꺑„&%šÐsZÏÏ‹ëWë­5aÎÆ&¦×c77o–K‘÷dO!ØE̶÷ ¯Ú:° & ëZELü›ÂǨ®„/ßÒõ¿é¦!Š5ª³§U#ÐzÉbLutlÉáR{‘Њؓ¦d gð‡1¢±é€óú?uE—ý†)ôæ­S§(Ànm8®Ãâ‹äªnŒó|'±ŸL]í®êÎR\.è@µ’„QSI\>‡ö·Š†(ä?'|å–©°&õÓ„ï5ürÂB PÆjg„Ü{~@Ï­Ùç&©¾Ù°<·6´5ª#ØäÔÚ®bÁ$Ÿ ª-O'šÈV¦æ¾ ‘YzøŸ/)Ì‚m‡JÄý29€‚V7˜p‰réþô;’ÇÀäjN¾›tIdÁT™:þ<\ @a=»ø¶Ó’Ýýàà!áô§éµ§Wýù´]ñMüÛð\Ñ\"+”œv“œ¶Å¶½kÐØ#]Úˆ:ùñ7ÂÓd×JQ¢uLÀÔ->Tˆ„Q¬:kžc =9ÍP ô€ÞfÍY+(d±'ÊÜšëÓIû +? ÐRO>v[C¶¼+ó¢ 2'­NÅZ¼ÕNhebA¢²ó=d%ðœ-²¨·–Ê3¯¨“¯¶¸|âXŸ^ãjú ÓFÿE˜ê\#W/‰€ëqu…^‘M£¥ kDŸQ ìÞ¾þ$oe‰ø +χ?5³böZPºá[…»}¯W–1aaŽ-,EA5xó×hB¡v-眚7qAÞm#ÿÖ4W%yO_nØ—“òËwÏèÈw|7*¸À{¬vÁævN;.‹’$î¸]Ĺ=ÃÄZ5rí +Zæö‘ïP2¬Ün)Àߘڨ.ýs¦¤‡ÑÓ°¨66·)7`:A´±¸œŠ‹›„d4©ŸZÅÖ4  +wa*ªA~;pϵµì‚a81ØÊî^HÊé'C·½²)ùH€¨Uknëjºq®ñVΟŽ|2¡Qa;< GeÊe6åèÚÉýåvec¨ÀC"öØ(ÄGš Ò­N&ŽrƒQ¼'+>Dõvâ´¿œÁ£‡Ͳƒ±ºn6œ™à¾ä¼PÙrXÏð“ ÁZ1$EÁØ·ßæm4Lbª,èûyÚ<š›Ãä_±c•{™9ˆY3Ï£Ö¤ˆ˜aÔNšÿƒ¦Œ×u(I +d4HmÏ0Öhº”Rú’Cavï·Çy(p •LK@Al=*î±Q˜6)’ ƒI" +˜íEp0¹bŠ­ŽÔ’x_Òžž±²Þ ‡Ms×â;ñ¢ÄT=–bÆâ‡&èî W®yÂñ;tÆ%Ó«ØEžûG5ª)¢Õš’9xj£¹¤Q’^Yè¼ÎÔ?—²ftž¾·Wy\eÄÅYó>0ahñ•«fçh7ªÉe)õ.íÏ'ë6ŠÄØâ;ÞT!]Î×~15PÂ&Á)§3a½‰P`Þ\.ã9¶gÛ¼I² eÑÉ ±ÃÐïô] +óe‘ +ÑœS¾Jê]Üäq„¿?†1^EÝå¸Nôõ~ªOÓÙcІeÑI`¬aHп¾ÊŸ‡V)FqÄîV÷Lž¡S)&|<Àø!“7¥H +Y$Á2ÙÀ€âä0Â1¿Z'éßk²ÀØß”õ¦ßK–‡ëì}ÔèVAŠçÄl²¿\õwšâﵤІI~!#ÀÍUº‘ùƒB€×Ôˆð ÚCèË·¹×têtóù¤Ðï55Tnáþv]ºé¦˜‘5§½[vA²÷\W¶kpBÝ É`]±ÐP,´¯T–<Ë ¶Ã‚jxä«‹J¸É³špS*}rCi€²¼_U: –nhÔ«þ‚h×QD Éy©ÒU5.hÿâZ3Lµôø¦Z¡ð;©’ôCa¨¦Öiäé×CùSûyñ´ì‹so¥ÓöqÂQ`d[@éÜÍHЖ "¦AÌôíu1b–§®uRaÑ…Êl7ýkÓ,^ãùÑÍä;¹‹ÚkÁ¶5jò¼3’¤Ã1ó×0= ùs9óIÔÇÞjùÌÚ)®êŠ ŸÉ½œ­òC¿S‹cüêºÃžl\3Â4$©"F/'­°œ><ÃKMâè躖*ÈC"\EƒqÒkkÿê{8wײ•ñ!e)zGÅÙ­+b[füËÆÑ>@¡c„U5ª#YÎ ž’0Ê醕­ƒh'a…޵ö„v öˆjŽÂo¶]¶l÷ßÝ\ðЍñ4öu·ÂÈ0º¹ò?ž{»y… PT™HP;P`œ/`„%ñ(¢øØ\wKEÚVÖ¾î°ÙjŠ’Ä“3 û§Ú{6—ƒðl{³ÏµBâÚÿ\R!ãÈIì4}ùQÞ›9¾ECÿô<ÍƤ7’GÇ"’Šñ¥ÆÌ‰˜÷´8¾ï5Õv}ýñ|“ âÍ)õÎ×c‹L³ªä'Ͻ¡É`¿KJ‘Ê®O²F0}(!ªcÄoÍE&’j|(ŽS컟5A 8oGÉ©øÀÒ¸ª¯£[ß»Nñ®Á”ï­n2@ŸÇ!å†hLC~á6WM² æ9y«'ïõݾü&o•ñôäÆ`#bVÈx•™"¥mŠonO)QSañ²<`Î_MDn¥o²±°W6ù‚vêø‹iÖý<ؙӅ©ú`ÿÓf” ¡ø,Vb ?×€?ØÞN¡CÐÇ#AÁ§‰šnñEŠA«X’×»X‡Þ&¶Ó¾½4ªÁÞkwMÙ›¼cž®&)ð·ŠûFÑ#äáæ×Nv¨•ôƒ6Z +YåÈ~ýEžÄ­4䀪ËÇÎ΂”¸užxZRow¡Rg ‹fÀ\4Í’B[F4 ÀÄsߥD•'€Ù#b4œRñ¸—’þ ÓÐù3¶ë€!¢µÊj=éÁH„Ê–Fž„!õvCŠa25L¤µ–n +ÓÌ’4/‰u3¼¤ð”bÏø< +à‹Ìÿ« _Â’¬jÀ„Q˜€Ïw¢gÊ#ˆ»«r?V~ùóu¼?f½¡#M‡(›n )Œ"Ïlnݶ‡»ÚJE³&¹³° Ý&•¤›ídÃt]6ŒC˜ðfåj¼Þôï$)©p §Ü–gŠÈ4ï¡…ÔCºäLòÏf-ôÓ19ÓöïDS_`Vóî¾÷ÖÙTÈþ.)Òr7蟫ÄÛ³k:ÚŧK0Ø µ³vó ™ëal#ˆ$jÕûZœ®Ù /€Ì¹Oøëòˆ’éj„÷¯NÄ„§ÝÆi”í…{„Šf’CÂ[.~j*ÆÆi MJ½ÕG¸6@OÝÖ{9Ú·:t†dÊö,Ñ~'e•ˆ+³šš»¸Äèq¯åm¯7uE¢Œ é º®Ä©V'ð—mÉŠž`äư^=%ãeíÎäÈc€3†©ªmþÛñ{²bvÛHL ²À.lÜ?as»I;÷•<)ÐRÛ‹\iXHçÙQ)žo%3~ßWÂaœÒ2æ%€IíkØ ²ìK~_€ <üøÚÜgñ‡ª+"Íêß+‡±!^ÇgŒÝÔ$nwô”i.Ú„¦Å3n=q ñ4ª÷=ö}â7AMÜ +ÛÂÞöµðÁ Æu„†ßò=ùf Ï™õk9Ú/‡üI΢7é/‡g©|ÆC„Âf»„§øÔ\óèA…¯VéœPçÀ;pÉ”=M„ÓmahĚŎ©ÊR7X&àHñ»žZ5"Òúõnè’œ6|J&c¼4O)ZSudIÁ7bÉÖÒDH:Ÿx¾Äá°ó)?G¥v5§-îF\ Ð¥öÑ-ÒÃX•&â47ôyo^R›:Î3ª÷îÊŽÇäúÈÕÏÊIUî/?ÎÓbWûBá“›Æç,þêGõg¿:ó”0±! QfqAba"ÍcL„lp4góꜛ%ƒÞSvŒÃã,ˆ&4N0Ýußl ‹×‘&àh_ÑŒ?ËiÅ þÂL&üWB8PºýZr™©c¬(ëȺ0Må­hÚºy¿ï뜋WehmK­š_¶•o?Ä£9ä"ÃáKr›8—c'M˜gTÏ6 ÞӼϴÀNAM3?›ÄüW*!uL¦œ2‰¬q;0ä1=§+÷A>6µ4¯LÒ´ÄI»j^H ‡”z¸R¯»- ·þ9¿Žø–ayÑAÞ£ «´>W¬z€8:Îåɨ;Lî·&Å6_iII~³d5;Ý1~=›ÐÀ¹uœß¶yœ£Ô«Ÿ±Xþ—ßýÍ'ù|±</ âµÞ9XîÐE9CšTžÄ‘Í>—8²ËM“#¾ððÁº/Ižx¨æwv8Ä~Þªi‹@ øÑ¡hÇœý¾) ´?´„xÈÑý»ç©ÜãáUNóCȼ™W2Û@K€cÉËÛÌ%‹OÇšÎ|÷*áÁ›ý‚á"Ìæ/­r8ž€¼|8UFNù¯þÁ%ÊP»Ó³Öbn>¢úXÖ‡–ëxõÂ25 îbòÞºR ÈÄ ‰I³°ò€Ž.Íam6bTÃeeh¹$dDź 4* ¤] +šH×3%AÅÑŸŒ‹¯pEÑ©mðv„ÌÎZÀ$@bœóJ¥øOTz@óóüxl=@W5&ñl};‚.…/&ˆÉÛÄ|l"Ôÿ-›3ÉHXU ÄØ +Èø]‚1胂DɆFr‚&Må0´l/nð s<Âðì9ÅD2·ˆ°ƒ’*Dé’•¥0•Î^˜ˆŸSqñ˜ñ¤C Ý{‰Rá’m§šì÷›·þiÒSe³ Í7é*‡Úø.à(= 3BLò #ñ¡Ô_`âßEk +â…ùP«fz¬fðšÔ£¤…Й4LQN¥ßBØàEò¨-±:°¼0X†éHú›®F…±?7ÑŒN–0 ¥…[r@ ËwÈÉ~ ¼b¶Aµ„tÀ/ŸÄâ*Kb,JsCpÆ8¾¯Çï³ 'pò(l%™Ñi\2ŠØvZ%ü³=w×3ÙÉÓÔæss®nQciâKÿó_D>ûçßiþë]’ßϽå âg§e9è³ÓNûÖdŽ)ÜŠg{Wúyþfp¼\yìL¾uÜLX%žŒÝÐd”l?l£æ4RTæì‰‘Ù§BŠYl¼Å øÝrw³R†ÄFÖ*Me`ÂYš7a^]Ç–Uý\‰LÑ ;ÛzÜÞ‚¨ãã&éÔ_Tóa¹Å­óÉ6W²/mS›ýðBì^7â»ágW5òÛñ{Ãûi’%óG= (ûw…yÛˆ£Á±4i^ÑF³ìZôu‘7óšCyÍAöF(%l­Nfþà˜þD29_WbS}FµYáA±2ZÁªõ™8Ll[€II\$—Þ[ûKÄŸ%–ðè)?¡$.Þ­éÝVI‰‹¦e"`6[6(å’j‚Î!±’ÿsˆ™ûà[ ¤Ëš-3Å™ãÄ­âX¬'aåJpJ­OŒØ}äRØ¢Ä&5ï@ÁkçR¢ÿ¦Rmwïž›ŒÝøe )ôÞV¢Þ¸)Ò£˜!ÍÛÆsþ¿.D!@Špo:%‡÷|ç¢ÁÁĶ¿µÌc|1Á xl9SEp(î’/®bZòw“âÎ25zÕ~?öy@§_“ÍÚñîÌKî–m˲¾Ô…"ë_”iåõ¢üQ÷j@)ç:)oj-ÍÞ½”•ç¸k*78 |$[ºzdj˶ot h­<ᲚáÂÉØæ­Æñ'1žéú]r +ùGx¡"¶þML +(Òzt^ ùÒÁÿÿ9pUK@…²m~º"¼®ÈÔx8sœ×Jåï3ÁÝ)v?,Eu±V!•\øÚcnÔ<·¬Ù_ˆZoÃà;´Ö‹©l—WXŒrä©>47[¦#ŠÃâJ—äù[hV·E1ÁI9ò†±zÞÅB\§BäH4Ü3U]‹ZÕ%¨îùuÜ‚À¨FÀ£ E ¨Ì6î6«™°šë¢™øË9z“ö¡g+$@M6Yg Â>8¿hO¨½è«… _¹ê]üµ9mŠJaêÙúö!ÿ«<ÈÈè™Ñ[YÔ[™|dc1²pòLþ!Ó ü,×A”€ÞøU×wžÐ}¦£F¶\»Gš„grƒ…ZºÓ(I¯_»³É$? ŽUH8z3ª7û) *ÃÍo 3ê5È +Ó›.Â5IÉÝ.¤ê(«ÅRºyÉë½ïNa ý³·.OšØ»%™Æç8éÎN‰÷ýá‡ìЧc©ФX CG௑\êO¼oeTɰ’ÜN£>+©vÄQ©?¨Pùª£)ž2›—K~6$% ß_)Lµ(ߎ¯³üÏå.`Þyf <‚ÒÜV<‹}¦—÷Q:»ʲgO +þyåYïÒÜ|&“_s|1àÊ Sõí×Ô/µûä‰q÷ºÚ½J6Ü­a)Sñàøzýl +ºqEÊmÄ©Wf6­Iòæ/"…ï_wÊDˆ¦¾å]4ÆQ—è`Ѱ‹ÔtÜÑ¢îKñL±Åœià +=>÷u¯Î]f"Ÿáfax;ì ÿE”:œ$ ©Ù”jBÉ×O_ˆOЬ…Çb&‘sHõ‚Ù$EÁ¾CTö¸ù f/IÐü‚ìÐMäå")ÜõLý˜Óª›6Ϲ½‡ºâ›Gñ?ç ÈÍqª£:‡0•C°Ÿ.G[ÑÕƒqK¸Ã$Yn¸tþÖaæ~ì2e¿oH~ZÙT,œŠê_=wÄ´Caoa×$ÅKßõ|³åF˜ÑynȤ´Ž=2‘¯¥àúêòn Ö ’]@ÅÄ{2ð¥öÔ朗@'†ç±Fº·,ŸdÛšVhÍO½bd+ŒÐkEXe™û’ylÿ5ùLKQD­dE;o^ñ ùÆîhÖ0ªhLƒïq–<½!u¥œ/Å[HMi¡±“lFRœ‡;Í7X?ÓOŽhìÿ³¼sd0SxÂÌ*È-ÅG›,Ö3½I·ö ƒ‹w7S ¥“z½+i¶OcŽFz´Õ„±L•™ç‚µQ3ñÙÖ‘¡b »¾¶ÇÏÂÔH|ÌúÎ,õñÁ¨ÉØúÈ“Z3{¹ aôYþtPSJª0Û±|¼ó rå¿®Šö/¨#þÉÔ)€èÙª. n L`”¡&Þje +¦=¶>àv'ÛI/©›lÖ—,);*g/¸—Y4ÂP¨póõ1ù¾Ñ›c÷Ok³ÀD#WáY ¿’Øä+¡MTà*Ö^Û°'‹& zOM"¢06N€ÙîkÆ`y—CÚ˜éS.¯¾ôàpÂsì{}г“¡š¦¾Ã‡†ÛYȆ ½4£{vœ7'w©öƒj­¯Û –& (äò¶!†rkHp׺«d†¹Ð†»âšjîÃÖ9ëý Ûµ¸!D¸¤¿æ’1ëèn@qz«P NÉ +¶Õ Ø„9ì@LëwŠàfS¸à:=¦ÒÙØÌ¤2â›—l Ê–]|”NRJZ¼·k®!þSùù2¶Ëf.@C1¦¯\ÓRŹB#"TXŽî`ô(ŸùÜ™gZA†Yɤ6\î?í7¿-ŸèËV T`e“ˆ*¸8R¶§yU»+|‹•€?Nk2ûbºi‘u‚úÿSN•šÕ)™„f3ûi,3qº)•&ë·Ïö_ÔM7 ‚HÀ2Q7y:ç’tyĵQÉÏL†ÖSƵ‰Dƒ?‰Š-ü×1¡›yá™s¢‰Í +I6‰â&òSÕ8ʇà]רµÎpú OêÊ ÂtÐ¦Š†s­lf‚wlçÔŠˆIë<Îlé­ºk ¡+¡I8<-ªZÎfnÿãXcV6z _T]z>B¤Â&¢æYm{TÜ™¤ ·©4K–5ŠAÅ÷NÒ„YDqp¼öz³^ÉJå’=Ä$T{¸–¾¸`ÆDÇ*/N¬ç`ÏåRÜtG¾§YâNÓ& TEÈ—R㊠šx{h© ·+¢h<5{U®1wèº3Î*vQaÖ ‡K_]€Ç±= P÷Ë;”ކˆ +ðÈ“Ü +%nÀ”Z…ãJ«pcœãcQÙ¿#ö öo¤xôÛ&=MËAŠøLLU »|zNñB~»|Jê¨sH‹Ù(v¬YÔaY®ÂÔ™išE1˜* Г‘¨ª„/"í0ªÓSW ˜$e9®b>üEôx%fú4¬¼k\›H%€]£@ôê ˆ¸¥üŠHójÒ#^åDð›™ò1‘ÕC^$aÄF²éaQâûì {ñrlŽ—ƒ¿«—ëjpãtS¢£ I7àÕ â«Ùb½NäÃØr!+«GkòÐidjÈÔíµIúšØtÆç¼¹ñ¶¤G¯ÉošSÙÌäŠm`zÝŠbïªÓ&‘tÌš,’ÄûBFÔt7/)PjÅ4kÅ”óç-Eëc4- H5w„£yKéI”uuèC>æ¦þã¹Û©Üíâ©sËÔ-–u‹{ïö6PM!üŽ hÐâëWP”(±];ëqеáN4¸'× ÌÐÞ“»õ `€‹9ºÅ:èFÀ$’˜‚&M×!©ÃC0&N>¥IpŽR¨±—‚ÇDr$ÈxÌ#¢6¦i2a>êÚelF1„¢2©~¸½Ë‹Ü[c¼øn±p9ÈKylš¤Êî¨+XQ¯wà¢XAÓ‡Äô™—">E9QÐQª×§(®Á‚hÉ9eÚ#P,fœûhÙ Iߥi \^Å®…‡ž_Yª˜Ôe‰‰`ZÉ™9Ô’ô϶,uROµ(g¦"ðÊ+ÖÕü|k<‡h%§r 4¡H XÖÎï"¾ŠbP.ÄÍ\`˜3Ù÷‘ZQeÙ÷,¾É%Š`ýèp*=Y1ÅÄÙä¯êpîhÁýEÖ *˜æñ·èˆ*[Ò€£³IÌcèöÒ~j"Á¾4’<ÔÒáÁ]3‹oWš;3d[((LóÔ:n øÍMdi¦ÇìR¿»µ'ñæ½>vO‹#7ãÎÀìÜüÞ¡MÍßI€÷±‡&9`¼NÑëLC—¦ûix?®8d{º¿Ó‚0]苇©t‰©®ù\¨¥–ì1Âðé$íyêlõ[IÙ…9(û6_É=ô–õA ÕAî"Ò¦iõË›ùLLõ—jñìÝŒ«Ò@™ ¹e¨\¼²=¦ª:òvêµÖŸ@¥¹ñXÂjÌiÕàn~’bŸÜ%Wd°‘Ê~Þ²ÊõïÖ¦×'ŽT‰ºÁ¶w8„Âáz» çÀŒ|o îsùN–±¶+•‘Á…÷!•¢tj _ôÞå·êü¼o }qük»²°ø°°¿·]’˜`GTk.2]Ô Œ6„€üÕ¿Šú>A1¶l±rk +É 4࿽ûKçn ûˆ«ooñ{èž,mÍšˆiÒC˜&=¶pç}\íæn>Zk@zŒm.e&Cè:°-6ŽvÕ°¿}Èÿ²èx”Ø!΂F‡{°ns¬ì4„óè±å´¤VVÕ¢#GaV¤ø½,ÂèMŸ‹ ö¼dÃ^[¯r;ô2®L ]AY!QEx'ÔϤ ZP0Uï™ÓJ0Rª)Œ[^Í”j5Q­< øØMŠ/>%Ú¹Úæ"•Ï-;KØ2Ø—üÂi«É'iWÍ×3‘cÄÒC"кT!-ê\ûVµss<'ŸÎmg”¬.xµšÞÝÐ~NU^@ÞH5[ü¦®%Éü¤8¯9_;‹7邲±K™“„yCOµWtD¡5Cë3‡£xì範æe ºÌW  „ÛmÞÅ4G›©x]¶ÈÄëJÊ©È{†òmxþë¬ £Õ¢—#óKƒâv„¢„!†„lh‹k•Ô‘ˆùFø :©—™„Ã`x‡GP¿îÜ-–Ãöâ%Ü­ÙAYË_¼Qêø_t8-?š¨ºÜ·¸àT÷n˜,Ž6Ä݆j}†¸é.«Ä+í"¹ˆ7ŒoÄ™d^ ÆÌU(ñ„ cË|ˆ ŸxFȉÇ3Žy/s*|xk5¯”Ô‘µTH2‘°Œ YKöcáÕD¸ÜôÖ `æi&h]‘Ñáœ÷=Z2Aˆ`2"±åϨZV¯®èaQÇKŒP‘‰…›ð—¹ªh4݃43yúN½šù©ÑN’ˆöÉÝ(Ù³‘¿vº2¤Ì9^{h"ÿã#óÍ”Þ=ªåàWÞf?à*/tuçópóQ1‘@O¾²X"’¦B6£HâºÜë²I )²¦SÿyKÿyå¨{Y"”„޶tS&佬"Ìl/v´µß9[ª %aS»æô/Øh±“è.A.Þgp +ÆÍd‹•Á¨ˆˆ!܃µ®r¿1MáÞ!9fÄøM&H%Ÿ×È]u™FîJ2Z!ÀJmdÌq³^2~ƒ»,•`0ÌÝ8pNj҄m êAÐ+n +©V’†£”d÷1í‡ðÉü|?å>äÏL'K’„[íZqÅ[3¶J)r”1ZßÔ oJ#‚íCË(ayŒî3W­Ð˜1¤ö¿ °°+Ùss¼ì«½Èµ|6K Uöp˜œôˆèÃ-1—ŸJ‹ºc6K­ ¶87~8²Är,ÿ[ýE05; S»‰¿ÉΣ›!Vé0ëezÜdˆéÚ ÈjZ¤iæYü'ÍñÖM§æá0 zGdVÐÊ’p|w!éÛ˜éOÁ¥D3àî“1Y‡±²ê(WŸ"µ€ç|suŸ·lúEUçív··OHHJ}’•¾ÙÞÈ\îºIœã×ö_R¶ìŽËˆu9‘> +5˜ó¸â•Ú*¸`sdç2~G­W Á!5˜híÎ C€­8SÇÐi•6­ö¦RÆEOª“á¢pKƒ¾ J: úŒƒ×ëv›ÃO>™ŠJЩ´Ä õÚkòV-5îQt.kZÔÄÆ>èFÛ“„˜Ða™,rõ«*§&j ÇH‚!ØYJSr§%Ž ÁÿYNÓ0;{‹ÇÚIÞÏ"$54­´Û¶ãÄRâHaÄÐôù‡ž­(«ökR{ùÔVF<ï ‘Ÿ™;?ÒpT`Σ”á¡‘\=* +¼EE¹ùKK.ûŠŸ¦dƒl'ûÔaÔˆ¨nËŠÌeºifdßýdn¨%UvS§6kÔ[u•*¥nÙ.•Áy{ò¬ÂTE´ÀRaÚØ€œ’êDmuIPé)¢\aëR÷…[¯+SM%Ê–Yžµ¥»W\l+@'Àå‹r7Ü)Á/ðƲíqÑYmciè(R;¶,í°m–å§®þÔÔ5C+´³¬øÝ<p»ém½û/5F ¼SW8žvrâK+„…Qjž(²©¦ìÐïÈsÌj#¹¼ ËÁí ä…Õ°…(u7œ;T0å†p;— N;UÀ !'LW(\X²ZͺïrÈ„ Jþ¤˜Í¥Ä™¢án&XaÙ–l&úgmµ°àp÷1ÊÉ®éÁ¡Ã>Á +GZÔ‘Œ1W,Ÿ$eÛ²L—<Ù×›îÔìnìäÝ™, ßK –Èx9þúÈn!ÒnT½9o„ÃJ#¤~þEyÜk-MÔñ Røv·˜H°‹ƒx-’ጧyEã è[×ïêZ.­ óZÝﻢ~BE’pɺóÐ0ª6ÐExãÎ'YBmt%®&dÕûüÕ”ÒìÑ,üp; +'A½v½ËwS¹è˜§¹{Üš¶ã*ñ +Ð&"ˆà4žj¨#¢°&´LŒ:?å{ŠÕLéÏÉÔ] ÷A7t€Ô§z¦8Sªïoì#ª°nå혭iÞEBÄVys’tQÒr·Rþ;ÑÉaS.úÌÌ=®zÛÌEßI!zZt¹ T~¥‘—Œ…É´˜F«2‰`9žd_Rù{îùÄ1•ìBCÀI‰ü=çk%‹‘6;ï¶)Ã÷UÕÎòƒFqÿ Ç¥¹’ŠÍU £ ‹ ´›' gAS±Ú}Œþ&öLBáØ‹—Ñ© –É6+tÌÒÑ€,åb&ßö3ØŽÃÅë†åìùde½3–ÊŸm`öä…¯]ôì?§é‘BAÇJ{±[ ¬åfŸµÐKË8ˆ¦M5·ÚFb_Ãóq#"¨¸5±ð7ݾҲ¶œjÄÅóö¹AÓÜR[ŸÒ”†ÃSè÷æÏìXÜÅòý¶ø6îµÌ*^äa,èéæ32 #–j¶5EkGKQ•wˆ3´Û•\ê?bEZË“<úÖÌÅön\HyAËP“kÙ¤p7pøUm¦˜ꈋ÷ð§±;å\8™N +~“U õGö£^°SZSÛÔ°Ó(b¤ëÏsƒªJsÓ½>wÍ!í¸6;Ìn‹U¸=Y 1ªÊ œ¡p–X»(a¾ÜU´€Õ†`‰åWò.\®L†j Çì÷ÔùüæÏYí½„;”Väj߬Vñ¥umÄðçÚÎô½-+¬©Rm;â/aóø¶ÓMð3/öpɵÀÒ6±Çñl"BÐ%‡{]c,j®\ñO_kd`lïÉåÒ4ÔH~c>Zî3«€Rðê5Mn2” n…9‡ÙÕ•çŠÒT,»,OGö)i«0õV?Ë¡7gÑY*CÇÛèfN}‚¯·ü9X3:ÎxCÉ‘– _ȯón1¹Lðç)£ìI#6^ ¤è>hã1 ¿˜[Þ`že…ÆÑªÐ>ôU‡ëLæßäìG–‘­Ô0‘–ÿFÀgo°¸MWÜv‹¤‹¿T•.>ѤËÏ Ž9Ë'h‡|›2¯Kp6Ä/BqÀCÓ¬Yšl(°H,©W‹.Ñt™!‚Òã'd¾d³ûèbÕ´âk8/]õ=SÿS“Ž3ËéDäâÃtAÆÓ¥9š þ‹Òû±n;½âCê#„Ú©Ï +;ËD¨u«¶cV1¶–äÃcùCÊBöu¯2yŠÒßbX|‹Â7…UÆ&¡½>߃~c™q¦º0Xlf/õ¤ÌgïnÐAˆ£Üu[êþÍ`ƒÛ{¼K<é QT))Iò¿÷MêžÚn$°a‡V%jŽÓ§K9Ò"¥#<ö•ŽÎTÙ¨ÆÈùŠ ƒ”±•ü¦ÔÂhAsž~Ãög-c´pAbÃú0ŸÑJ`3ûyKŽ–§”ÕÏQÚ°ª'e¾(Õ‘â…ˆˆ¿E‚:ʳ•uoé°·°` ³ÿ¦ âÒ6)2ck›Ÿ)édó?XÏ·Båb+\-#[›È›Š ¥P“wº°…zÜQ¼3S%Î ‹CùÂ\xbÆðƒ*ï„°eá<’ Õµ0[ªŸÚ« ‰Ž•% ˆ·F‰yÝߊŸo» +¸ÝkZÓ†d£ž-ªtMÑå½ÑÎËã¨ÕŽNp¢ŸûŒ6ž„¨W}#)N +Û1 ŽÙŸ€.k±Kkã8tƒØRíEÛAÔ(ƒ3!æ}#Q{íé9Ï,=OðBéJÏÄšx•|6O„)ÿ{Zmïá\U_"Ú‘{Û%]×5fv­ Í[È-¸ÆÅÐáôU¦ùp›µo¾8y»Á<Ì0ÇÿªÄ‚Ìæô…Š +Òá»}r¥–fÿeÇÕAËÂæ²Ð+¾¡ÏàÁðzm‡Á_è¿Çm­™=ÄŸkJ³Œe”†1AØ+?¹Vò4t³œÆ|G ‚.é­çþëö6¸Û{ Ü.fR1À ÉFØ öÊ-ù36®› y¶ýc’’]ZH÷ùêî” °ó÷¬ŽR +èŽ ìé,nQÏ4öø›o¹ÕÊB#Ýý¸Êm÷¬Ry$w®WÈHJwìÀ™qÖÜÓ»9ŠL-2æã,üÑnN…æeWGÊr,[s;^'lÀÒÄ’ åˆ„a ÿ^ÈôNÇø8wÚ‰‹ùi +ˆ!vú‹]&ùåËD²ƒ,9ž’806¸ÕLd{ÏÀ¨ºšÊ>½8Ä癵À#c®>ò¢oð%/ÃÂk·@ù}¬¸y¥f6€nþÒTiäÝÀ‹¦–ì1.lð!?އ\5cEãåŠ4s£ŽGˆèdí¹½ˆXŒÃ7M¨Õ”Z,æCÃ>Ĩ;]ÆÃ$±ùÉG­áAæ;¢l_Rz3, óøëÔÔßÜ ØýIµÆ°´É+P&õ—p…I"ºÉ¹ãpC³·¥P¼T6]0]2t¿E²Îà |ŠK‡Ø–zfm¾ ¥~ 5…:j—{Rö.÷Ýô#WžÑõª+›KÇ5KéÙcªh`èŽ6çí+× #–¡áK«žÓ²ô“$öØ—ùãûgû‹4ÿ6‹îÆ-¶aA ÛÇ’YÍÍñ¬øÇ©»rr ³¾Ý’>#Ö”Tãæ1AOëÂ2 øgë¡È騵l(Ž_=±2ætKÿ0ð'éú5ô‘ïýõ«©Ð¾%>ϸ•ß'±Là8Õë°kÕjçrªD> §Äš4Yùå&›‘'Eí@¢¨cÊ, ¢$)Bo°e”^Ýä*D‰rlÚ²£ñˆ^&/ÉŽâæjSAŠjw– ¥Ò¡> RÏÀ´óBœ¨š.,®M÷» šø—z·ZªŸlQÉâcNgÛt< 6D»cl¦K8$³Êi–ÇA¢Î†X‘c‹äëÿ©¯õ¶ò‰c¿¸ôð!1FÚ€¦!{çÇß|âß™4ÎýâæzÒH` .óùuDÿZI²²¤‹ÒL˜Ô¯£œü> :‰?™¯eJîT—iRW«å!]ë°»4{ÜQ’›Î ‚\Pc¢![ì96]ç +„Ò‰˜iZ²Øg àMŸþª*†qƒâ±r%Pµ;S“mTýž^ìØÅŽ~ž Å5°&¤ÏMX^è°$X‹ââ¿ùÿøÛ‚#œô݈@‘#C NÛó¹p\ˆL#aEU¨[‚X‡ògWᕉ5BNˆ£o'¯5á42öAGZ3kú Å-oÖ|³Têèºä6U6ò£ÈÊ´¶¥4C± kepˆ‘Ø"¡:¿—Y¼µ¯ +â(PçïÇâ-5AɈD5‹·H,Ya" ¢³Â—‰6Ó|³ÑíîÓ†N ¤±ˆƒ‡kOŽvãÔƒŒSJ^ðË/ó;ßZ» ¤èí½Þ·Þ”WlÓç +Ûtèr×¹h­€¸ròÂ3n®¼dÉÌ’Éœí"=èy­}žªvmZ¦…ÛÒüÖƒ9:˜¨ÈÚʾåïνF:jH†$31#¼: +Ám~|3u»â™§Œgܦ7¤bŠßšµ†0.iQòf{{@PG`“ÿëü½eÈ•V¾‰˜­òþ4RdkÕ‚&áá+±Ïç§AîIƒ POÃÔoN}Ã'%Þ®%ÿ\ØÿÖ”BŠzåìc±½53‰6dӞΌ[wšÃÄ,ÕWT#&îÁÀ4V4abÂZô fÍ™äw$Å ¤sq3꫎qªf÷Çß Û?ÿ¯Æ[$ˆ€ÿý¦U2’— )µ›^Þ­"E*©aJÑ tŠÒ¯Ú¡ÂM’¸K+F‰šG@¼SVÃ]01¹œÙNÁ »xHVn§‘|MÒNžóÔb~1Ç"£™óÚt clÌq‚‡$ŸM;Œ€±Ã(îZŽDQ]XIä·{Н|=‚ÿü›°h¥±Õ"?ˆU.!BàluW’jÅ?h*°Ÿ'`áéæ™WOø­€‚yR;C…äâ“ H é®ãV*„SàÖcÙsþKßܺ¢ô©XбrA_y:냻2]Y~Zn3E"cÅ:¶+e;ir™õŸ÷ú™¾µþŒe ƒ˜˜Vh‰Nx-üðŒØ…øŽ+Rzî[Ág­]n"aç )¤ã ÅNú‡.)VÒ†q§4TcNÙþf ox<øÈ·ÐE™dãZ‰‘מî“R5š7Rt]ò#(Û À î§Ÿ‰XH5:+B/¯Dh\xÛBÓ|;`ÿ<áÆ Lùæ¡Õ¸Ô<'®Rå]êH£ÏjjìDŸ;à‚ÝÞ^«5؇ÙH\˜ç#‹„´¡òð÷Î<§oFŸ¦QŽ,O•«_Ê;ú6LFfañüâ c˜¾ócÈnæþ®¢R—t ñÝÚs0T{9@ü¦—<<  ” ÿnÜþùbèÙ]Òétc8ªºMÂW^›ˆ·õ€ 5ËÀdZÆIê#¨zÒ™€ Œ›•–ó44ªßq • ¿kY#®©Òã®>Rª›µ¬×WI_¢:ÜŽ• Jnï(%°¦,-<“*ÙUm~4¹{u»2ꟻIù/]¿ÓïxHÞ_P¨Cf,-œêt^µÃgV‘ÛçO.BqºwøÑéã\™¤.,ÙÇ3™?Œ¬BÆIqÓ£ì$¶À£0 +ë¢ ‹…“"•ÞvYéâêS^Ǿn&H{3sÓÊ +:M·hm¿‰¯6FÐ¥S²;Œ#×¹ÎeÜïaš'/ùõþó¼@ÂkFmr߀×듌æq]=Íèe6³™`f˜›=E*–È/ä¹ñO&5¾ãಸŒ’&E{0)hÖæ +Âs°2¬ÍæØf“"Çúh(“n®þS—Þ€¿u£ŒyÕÊF#Þ (cܬ1ï K×xH"@¶8øU¸P¼«Ÿñj•N tÄ·ßšÍæµ;ãÑÊFªžC²ç3’ÔRÆaãôp©"HS“Iä„ß~™ßÉ D ióK‰òð@œ©†§¥6íÞé×v°F‹¾SÚ킇Õ⦘˜LƒlqƒƒuZ|,’õ3ÿE<9+eÈd‰à«'ˆY­+Ùâ–Ò›¸dÕÉ­²už#uÈvhò”)Qõž äß0ÝÄ(oKÂ}ÀŠPõnÓ@án ׇt¹ÒÃßå?_.Ã(Ln$€žm6Ôh¹ íØ~Ǭd s »‹ƒðH¨+olK2U°EpÒ¹ó¥·ÑIâûդ&¶„Eð\Ûke#¤ë(\º?FÊ87‰Íp‹­~4Åà¸Yå6´ŽKPs…s©î +"T_’0Ëa +Kn Õ?³zvS# +†a-ßìëÁûçŸc»IÉëÎ93€7ú·Œ~¿LŒØâñìmœóPU›Xß>¼!wÜÿ#"¬Up?ó’Ê€rùm/?Æ$#ƒ¡aFæÎšÒÌKJAˆ›Ì¦±‰ey˜q”‹½hÝ‘O)a<¥…ð7í—E$œTë¦O9¶eCYD Ö š/|“¯‡ðŸo`Ç©û|qÖH†m`Ç~ã€w‹±×T­çà¢#3ªù÷b4.Ó=QŠ˜9(„i%GŒ¬" RëŸÏ\pè’ã¦Üè¥àáÂÅô¬ôRö£ÜíèB䡌Í|r‚Æöꇓ ç.£ž4Um\¤5 Ó6‹*l:&«ÄãuQUÖÏvniä›A»ë`ÒóÛüç e9ä +!þ­¿ b‰(\ÄŽýš¤6ƒ33Å3Á¿ý.¢eàs9ó¦8„Íô¯{§öð•{ÿÕ´@kŒ:ýp?ÃSà’Ÿ2¦âÉÐv²C‹Í +cC_$Ø0IÜý,›ÞÔ¡²¬€¾)é÷ЃÚmúÓxýó¿/@iŒÁÚ’sp«1ZžiØ8¸Ó¿Þ k6*d©™¡ “”‹~5ý!”™ 1_þÎÝ^Wp¸›t®€Ž£Ô4ž±jv—À5åôẑÀ06 iè R›rS‰èÇ|DM7-Ôу‰ýaÚŽïñ¹ù +3Æ1ý$N{!âŸ|È.…ïòŸoSI/…±¨cÕšGc€1Z ì'chôM XåÓC¸$-ú À}|øðš²C^Œžxé®—ŽYæ^!‘„ÂFÇ2JQE­òÓ˜jÖ,¯€/û’â8$<ðÈ) 7aÄùfËñ¸rD8s½B`#žotx“>ÅÉ…[³Ü͘KÇ‚9ço‡ïȦ‰þ.kÙ_a…MœÈÁmÚ(­n\“ÌÞdï Ø–ÂgkJµò.1‡©Ô¥±Xм[R#ŽñÞý;Ó3gÁòÖ_+»lq€ogÁBÓn^ÒDÅ[ä aÜr¨ŽÞt3ªàÄŸ¥DP`ÆC +žNº¿h]¾É Â-¾:Þ L$ùjô~ïs@ìàq¿—ÞÆû-7 ù ãKC} ôGN*ü$1 +⃘¦f“Å š%.9ð’ùj#AYÈ3#k5ÕÍR0'ä§p^ì'²hÂr§  Âû®VR¤Ú˽"SK[ÒX|yÝìUnÄ6Ußx;ÔáC†±\Sx_+ÊÆîš:X_ä?ÿ4Ðe>"GÇ .Ûë¿e$ñ$ˆ?¡Vð J°0Ý‘*Tæ‘B™ÇkK~J´,’f}WQÊQ´ªŠ:€lq¥5KŠVQ®&Ò¡Þøÿë›Ñ&èm‘[¡~%"ž ´]„×4CÎtõ©#¶Õ9E.õ½Ç`Ok¤ &Gƒ3l¿³FTT*fBýlw8ø@ÓÅ …¡ÄåÉ¢€¼4q—ø9Å“]ê‘01± §¤~dC mðÿyÉ•Z*b¥yóW:wj +ŠRò«©íiÐå}K„Nhظ‹Ÿ/"%.È¢+jÕ1Ó{®¿šhS@ψµ·AlQ´qÃ֦׿ü­ÂîÒ +Ó|«çëüçP÷¢!–î/ +7¡îtÙI¦d=èíK±î-ÅÉm nhì4]‹T’âC!Ï3û~è¦!]‚“¸Û*æ”@Ò œ7¥.Mƒ†N8 ò½÷ö°ø2º˜ð»½-Ü+"´žD +Åm/%5Jº¸ñZI ÅäqOÁ‡bN¢”mð_Ôju¨&÷íHþÎ²é ²Ü`×Bšw›¡ýi¾ö¥¸y­¾940IG‘VêÊÒS‚i‘Ô,<Çsòl‘úŒ˜W0 +²©ZÉǧD ÚJš/9´¶þq‡nÇ‘1^AÇDƒ?í¥È¼o1Øw.n‹Y¯ +î¼´$4C…às¸ÿÂêÅʧՑ‡_å?ÿ:ç£ÊÑ.W°kJ†³-FiÛY¾‡‚¢ž’¨]À0Åw©Ðª9~廡'v¦>à£!…Œ55?ë»Ëùèä´â ³f|Â%Ö4vd[‡&4üwr¬ÚR˜t™ gR÷FÜ—ÿ˜d¦¸pÀ5»ó!ɹ Í!6Vã!`(µ +)’Õüü_ã?ßÓj)vA@@‰ÆûË(P1–i'° ìK3Ï<áÕ(M¸8ÚH~2ÅÎOz³ˆÜÝ[´Páf“¤±ma&~¾…ZAåbžœ*ðXú’æskâµçïD¢SSy®‰>ËÑM5»M”ÈxÊá +ŒÓr$§æ•4©¾Н‡ðw63vð¢#—á‚méytus8jÄ º3ý/&öœnòæsef¦ßý*ýÁ}ƒ}Là +ó±o÷ ·ˆûp(³ûLÝ +öïq=Ü6‹_ítfÕÀ5D•…»½ÀCII<åìncµ¿³ŸaC½)&P©”«ÐïÄ(6ñ}~üeçK,ay‚k[ÀúXq/":ÍѾƒähÆ`oÛ Ò‰exFmöüžôaÙåÑ$LÖÞ:«ð§> x,0²o ß{ëWÂÖA_Æ¥'ŠOcd û_ç´ˆ3⊮眦éÀ‚žV3ÕûÞý>n¢LY@s哨šE.Z4lÖ×ôÇߌàï„*êl×3)|‰¹3R1Jñä'©ªéÀu×#‘thq11Ì1ÄWk  £qSÀV*ï0b ^Åëøb»‹X ‡§AŽê"¹,$?3^q;wcv=Ç*ÑòÉÏGPÈE‡´MG´Ùƒ+é•Òò )(.îŒJH{B®cß+6}9xÿük ±, O…tb×{.Êg!Èx2pó2!³€a@±ç¹Ýb¨cg{\£ÅY‘B—8y`unF Mƒ«â )c;«zÒ]ÀpWnƒÂÁH”àK™ +`ΚhfB®²Ûõp½1øF¯ž—¤C3—¦3½5Õ81"àaˆˆï»ü§KâCÍü¹`ÒÑTW¨¦‚wº4Rr°ÆUív™»·">Uÿ™~—@„ "«€ävq³mwRy‡©÷'(Ÿ`Øô,M†Õ“4Å):ô@6ë9›%¤8m‚Æìõœ$£acÏ#~¹9ŽëÏ|9’럮 y- Ù¨YÅ!¹)dÿåPþÖ²PÝèk1«?Å+¢CH…—X½íµMÛ°5£ëØÊ{.xjîª:¬ö“’ù6ØšM¯±0•,®Ó{Kýú´€™nýæº9†SS^'Lóud¥ ù;tâw³y*»u£ª6¦RÙìÎ¥A‚Œæ]ŠÒù½G¢úšŽ…ŸNlY.cHÆÌôÆ—Cù;¾kUmÿ`éËÌxå_"‘ù Öš@.k:(ó.ýåX¸KÓãìö”ý'mó˲GîÃå11Óh+ ;…Jš%ùà„ÿ‡I\»¸‰ä\€Ð3JW:;`2ÙÙþéŸ&Nüét€‰À}(>`•òoÇíw–‰¢ÛÎÀÙZM—˜zŽÄŽ2-ŒâøõÆ=@†“Nj¬Ö‘Ñ9‹‰üÜüD£^T¯wcÓºµ<âÕv>‡IW¾/ÇñwâFa2À .2—3oeÜ(\|5ÕA!\G±’ ϪbC2ú\³¨ÀGå ‘ý´žœBÕËVéTX÷"ÆŠHÚA »úôŒg» ˆõa… Mœ‡ø/ìfˆèUÌ1ÕŒ3DË:25sY}ÐüMìõ_ªÕá’"f´¯“¨îÌáK~=Z¿u~l£>AùÒ\¢ºúJk{ ÜHw¥ô¼÷ì¨=q[»;©J­“Í¥§ûÈÁO‹VOŒlro×àhäÙ8¦IÂw*µ86‹)‚~;€ÿ|‰¸–smqhÁ«© Q£GxG:æ°\a"º¦A]Ÿ(ø´I#Ò,XÖ€»ÓALãÔ&Ã(2©£Ÿm[M͈± [Žž¹›ižwËí¼¢wPT©x`,kÇ7åkp‹ÕÓ"“¦z#=å`ÔÔœAþµ{p|ΫØ|;n¿›ÜšÿCuœMãÑnÂ&AïB#‰ @ZÖ‡QŽ7vˆ«Ÿ­›ð‘¦"¦¡Iñ²Ï“ºS6½-ï±õa“ Ö¼"¤bno—ÀK­—!’MCÌV=Í:…k7p´žˆL]M:Qfu›0É”‹^ÀÆJ:œV‰wÕ,ò_Ù?_FˆóŠƒÞ,Ø’”kÀ¶P'n¨_¹˜+ ®cq¼²j.Ä_ë‘ 5߇ÙÕ<Š!æ)„¬cþŽJ4Q ©ÁAMÌqIM¿Ï`cþs*u ±ôøJߺ7.Șù·§À>öÒ—ÊõÇ~v¯îïÕ}Aû¦Ã:—ߎÛï4ϳEØNèVõ‰ø"ûW‹xͶ9oÅÃýPGé¥i©× Lg5›$ëL«Á¥l¯^úçbº…Û:“²G¸õ/¤Ç€ºŠ&ýu'£ŽT²€%Í"Õa}ìTáòlY½ ‚~˜¤ÇÐ[´ÿ¡+ù†ŠñKÝþÇSo E¬AùŒ¤ìùr”þù¸[]™0Cæêb{ ‡=“HëèÃiôá5ë´®€pd¤âÏ _Sh(àâgχ›”낱èw [VºæÍXÌ‹¶' Â×÷;-Ü"O»ˆˆÃ/ãOà +€T¯ÙÊläõ‘5Ð ´Í×W Çûc, y;AÀ8\ö¨ëEø:Pî¡ê ÚÚ‘]â’èƒÞ(š£Ã„=%û­\ÆÐDg£üM,÷qQ¬éKÒ3àC¾žr+Àž$ Üs'Ç’Ü… Ñl§ìü7ÅCD ä!íÿcâi¶,AiL¿Ð0ðZ…»puÛùñ—¯ð;L9ìL¦p“… UI”3†u® ÑA«(ÛÐ]c%$±S µÓÚÄ›ÆMNã&×H2–maTDPÐHjZïƒfïJóÃxc&Á@ñÔú!Ê‘~,~F!ØØŒŠÒÚT]˜¸™tVWÊQê^ÔRŒ•Ÿ£§te/uo­m Êžþ°Bb†v|?¿ÅóEPŽÃÕgzy,_êÿ,ͼ=è=ž1‚f6À Ÿ•–%„¯¤a6µ%«Gn¢# +çžiì +Xw ¬V8¢ —%Èæ™d้‹lRtÀÏÖñ +~Xc +!þ{s•ˆèÉl£=åm +wÁ†+ñ\«™á!› a:Éd÷õ8þóï2¥ú[§f\M£éñ”l‹›]sÝ!(%{a/ä„mJѾ=?Ä%íÐÌ£k€+GÓ´>#¥ãa¬òÑ@UT»N¿ÁRY˜ŒÀL>!Ùô›ÐÃÝHÙôú‹‰­J€dCbiܺöZ =¨)Á{XÖôRàÐ[|?x¿³J(Ê@,tUIŠqw¯DJq±>^°¼ý“5‡âFÜ0ÅÑÿ4á‹ôG®}zfd©(Y®9-ü³†NØnÍã`âËþÆø·@Üù:ä碘Ø`0Gb¡î"YNÞ¢èþ[8˜Ø»WŠ¿ìé‘çñ˜põÜ3yÙx3Îí Šìdé²0'˜9Ý—ú8‰käfJ¾|Q ¤ÜEI{>þú²ÐÓ S±º5]ŽGêâ bÔÇè2}7–;±dqóÛ‘ü-¾£iˆo'«u;+yB{ºjMú ëú¸ïjÇ$ÈWÒ§ÖÞýÎfXxj>dŠÓÉÈÛu–h:âÉþ‹8äjâ°ÔCò9"¾6Œ¿cnË ¢gváØEOóݬÝÔ8ˆðpf“¯°uI‹N7q‹àµåÄ7Gò}8¦]úr ÿ¾LÊ?~ë×ä\ (6Q\}÷L3çD©> £; °3 +¥%¢Q‰‰9´‹¤! ¦‹}º¥ªö5lô@Ëõ¹3wÁ[yÉÿq«>“~Ä +JPº¸ìe)&¶Sƒ¿·DâvªpÝ*âÝ©¾ØEì´MWÚ‰ÜX;x$ÜÉÊ\‘‘Dí¡›‹o:ùQƒ'“3æáR>[ÚýŠù +îF›áoÙó«rFBïtÕ“ížf$P?<:jÉûÂÒ‘½‰_;£‹Ð†ü8$ÄW_h•of{HjtŸS†ùo¶ÊÅ™P›™ŒÌ:€ãm‡0Þ*þ’¬jQOÑhð½â¯ù<`·o‚ €g‡R(Ãí5¼›X"zªÈ]aÓñºñI²ÈÃ8ŠO¸sfüø”›È`Ѩ×ÓM9Î,ñ㊋gSŒ%D` ›ÚŽ—K ²]u2¯,mb…© ÃîõaÖ$Xù Mè«PCù’ä;L•ÄSg"—!“ú…0Ë.©höÉ+x›@üs +Ü c%ÓË9Z슉¥KîìINl)[Ñ¡}¶]¦“{Ó¢öh.-3EF¾ +ó…¿œDU]4ÌüV ~¶]œOˆëìZ!é‡n«ž^0Œ¾’ qgØ{¨Å#nWU %äµ=îð.OÎ$in‘7‚_|?Ñ‹›‚*š«$¶ôëgûq7´)N<$ÿ~HÛ3§8P K¥Û]¦Ê°UÞ¤2ÓwÄ<¤dÓŠy”dkJ;R0Whg¯:fû¤/w)š{Ç5ŠCàjš¸MGèSÍ F& XH5ÀæÀ™[ƒ ‡tæ]*òV³æ!Ý~üÍ òQ¼ÂåN‘®+åAâ{J^‘ä¬hðÙoÕÑö8[>"™*þº›ÞI©~rºDÅŽª±hÊV@I!h6ͤˆ¦ZijFͶm1X:ÇýO?ƒŠ.ø¼ ¢[ïŸLŒÎò£[‚1&X£žÃ“¨ ìfqçx€ý¨í’r‡H·ØßâG5¿ÓÜ`Ä>…“7ïG¥™N? ì~û!ð­tÞK³Óœ«qî5@áÒÌ éƒ‡"$uîaZ!¾†m#ÆD0I6ø¨ ŒÌÝܯ&[ÊÖ±Ž>^þ®¨ªq ‹ž +r‘Í]—A.o©±ia ,Ò~½ZWpÍh‹ÔdçnGŸš£¡ý à +’~œÙ?‡£94·û¾ð—ía•èI®6Ò5Ï›iw·ZÍãIâë˜rNä† “×Å‘/SïÊ–´Ö@ªå°H¼ámÊ—.I0E‰Îؕɵ3%mG©¥·+õ'ù€f‘Î5Hh˜¼ +Q ¦çKM P­Ž0íù†¨å±CéGÌ3uðÃ$¼ƒú9Ù`öÉýCy!ºK+¯ä3 +M-eé”-žÌ™…i[j˜~éâþB:c œÃ+çˆ\ds–d¤¥’V–fÝ<_X<ő͢¾)¡§&%d­ŽtiÐWb]‹›ú×WyøPãð%•a‚w˜ß³˜G'¦&7ƒ5tŽ~·6½tWrÅõÅVÎpÍv¾VÕòàÛ8™GÜ£Óˆ>/»Îôc#TœÀý³ ¼Ä^>ïíÅS%‰®zo©a'!“ŠsáSç9~ÚkÁaA5f×Ä»œ²-i~¡3¾{iÉ0>ÞÜA6ês‰p’š7æG%?Òö–5¬òJnJ}škm¨@û[)">þŽ4hñ»jo@]ÁÈeßé'´ 'ØKRôwêæ«î dÊñÇñ»R Dú娙~k‰‡çÙ~R :ž¤sí,4½›ú;«¤Ü#AI_Žãÿ˜(dÆŸß‹CBÇL@ö–M" Õ¥ jêt±N2ZJG«¥ÃpÇ>ò]#iŠE…kéà8u± eP¹ñC¿"g`ÅqL¯˜ŒŸÈ€ —G'3U&É Vw܃»¡ ÈÁ\è—¶sfÊ>ÎüÕô÷V3wšó»6H|ÌÚ«aÜêì5/)–.ª…V2„CBÙik\3Tœ°O¿M*û©ÌR®³î=»ޏkÑ餰•½Û‘Z¦ÛJuˆñi÷ Œc»vAÊ XÄ7\$r¡Ä­oDàGµ¹'Jrja<Ð/Ýä}21ú6ŽƒLÁOh6§Žå(B~•Jxñ§²9¿ÖʯFš2!KÝe¨/]g•E€Å_5*ÒšåV 0Àt.ŒDþpįYcWlÍb£q¦¾P™Ö;CSÅFZÿôS4’è¼Å*¢,Ÿ¦´ý¾J0Ý©˜ª¨ZÅ>‰GãöՆ릭…—ê’®g[WÈ2áTÏúpÛ[¸x–¢LÝþW2Äë[lâ͵eéacÝÚ9BᘧMkŠaîïº1É“¤r©)—ÊJ¸ˆ«Aˆ{ô’Zªk%C=¨·T>–Hܪ94ÚI 惞 YöÍÉݲb%M@ñ™Žธ`^ù&žÈxªUSõ±ð4iL&òøõd!åÃØ)\DWñÜMØ®B޽ìú#ß'åECsý[v";…‘…ß6nk^wê=Å>ÛcAÞjMÒ*ˆ}³j­šWTýŒ·+¾ÝôÏÎu’d&Û#‡¤õ"Òþt2ão„ÞòJwš%,ª$`ºIO‚×—Ü Ü-RÝúNm¥þ“\Îøe|ˆHÆ0—«†º.™¥þÛŠ à#·™3q£aLðV˜04Ëâ3·‚›_TŸP—Ç„w†>_¦;Qˆ"Ñ«Z‚'vÁ™©o9Õ¦c/9ÍÆ«« 2t8ð(gê™´fÑN–U>e °!ˆü~¢kÃèæøåvÎ8ÌÊõ‡p;3ºøl«›ú~¦"Õ²sœÎÅ$ʸÛpI%PD%0=IDC I-öÙU¸’~j%˜q8ÖÏL.kPì1XëJNrˆV«:SÆF÷ƒ£6o8­°§%¢x_ˆâbåºæÕ€eq‰jcwA^ó° +áš·±G£R3}ÙÚzrq~ëàM™§vã‹ˆæ ¨,X[(wã>*MœŠ Ä)%O²ÀEªl?„ÝJn¯Êsá”§¦•Yú1ÁÑe eŠr;(kdHRþÊiŒ™6Èuñ$•õj^¢7Á>ˆª#‹©Ø­ýÝt¯Õ¥{€Mä×Þ‹Vÿ›’cµ9°›úÔ†äÒ™õŸÑáX Í„C…Ë$ØX·ÜÔ­5ZÓdê,p5³$ ¢Í¥r‡QæÀ…:Þ Å*2BIO—ä&ѳ(Wƒ41‹%1SÿÅäÚ°xŽ«Ñ ½BØëVb bÕ4©TQRÊ‹nÍÕ Ùà cöSü¾’ÿi¨É$¥ZRð’´³µ5€H©«±(ßå.Ôáb‹Î%2®(?Å_¦¬@F {MÂ^ðäzzñuÖ¶§ˆÐU\¹äÑ„=ûA«’,™y‰!–T†w«Ûa¶b9É+~Bj­&«©ˆÊŠBÈhm–š®{V;Ÿ½lì±jͰÜÿ [÷‰ªcLïiu¯0‹Z¯þõÖr0®3dñv«JfÂnô”ú¥˜¨ZT7—¢¬ßP£EÇþé.¨ˆ°²*~êîD%WBÆïöÆh/”~Éü¯ê/Œ¹èüÒ|Œ° UãczŸª]%Tuµê?â›Éª»!÷b”«~Ž’£“šª€L¯–#³%hVعªYeæè="ý÷8eµ{/|®š„ŸX/$¹¿¥G=I_ê?–Ç +™ª›•Ï È3Ë®²AEÙ·¸-u¥ácÑnK•/ZtêÓÆ¯¶¦ÕâºRH­_eNöÉKR-Ó&­¹i÷6¹ÖŠE«|}l‡¡‹Ý¸^-•ñrû0\ë2íí•ÃByP‹Üz꫾ޢ®j=EÙfrRœdœ>·á Q‘It•ÕTÝl¬„Ž.ÝŠkØþ_¯d9QDb{¥¼Ä(ö5Uì«V“™îž%ÑšE!V9_d +ýü©DjE1{ŒDt±«–ñ!W:5E«f ȈlÊQ¬¾¤ßQ\Ûßäm×ßRøíJ7g}›IŒ*6Öí ¶ÖÍš‡ÆÎ~c>2ÉÍ<„-D/€—­¡ªj -ö¤ypõ…Á¿‹g˜#‘²RKSh}ò1²[=Ë$‡]ñãSnÒ^"ùP’Çߨjå; oõV¦•5¥Âk6á5zE“f ®åC•€nJ—j‚Áál«-OKW%•®Rå·7ÒGUÄI:ZÌQ^#ìˆ4÷¢Lí²âðæŽI!îØÑ,*Šó¾9¸ðs°ºVkr=«åæùPZöäE(Œç×fwkiåM°îvUe²6œ 3[õÂrSÉ}”x3÷/ÊkÚQµ@CÆ«ýJÔ(Oè·‰n,Úý|NA}ûÚzå>gw}íeM¾[Ëßë,‰Þ°b!ƒµNµ9GÔN¶2D(æÜp‚_8Ô ²8ª¸îˆüÀ·×¢‰rÿ6k厄š¸xëöÚ²ݺ¡—·©ü#ðùZ_¾?‚ϩؕŤH¬+É- +ŒßYv•4\% ÎÈ^¬ŒÚ?ƒÇk¿t#èµ-È©²Æ»n ê Ê±-Ág(q9®¶Hã€K]wÔ€7íȈأˆX÷JµB¬&&ÌÑ¥š¤C¡P®&D)µ×~1Sw¶¿RîmóRrp'çºAÜÇÑçU^ZKr‚Ûz5+£X×Å`¢´sZRª¢ӌۀè·hPÏìå9§+¿†âOë߬žõüÐfXÍšûol…Ñ;¨(¡°Y‡m6z +^8‘;M«…0dë"H1­^÷Çw{òK·ÿƾQ!Ÿÿ ȱ ¬öAžCü°þÇÌ>wÉs=¾[Ç»ÓW‡2:ª[VªšÒ>À¯ ò âg©2†ÑÚügìí¥»@Vý?Q§à|Ûã·Tœ®dUÕ}Øïo»­ÐÛoÇ0o3ü¹²½mëôSÚNÚm,Þ£S´ f7=Çú; ò•@½ÌöÔT–òËs]Éo_ëVeŽvgå([½:Ž¡@ÊmYÓ&ˆ¨F˽°íÕbÑKû#ßD¯¬¥¸xº¬ªJp‚_²qH±È8¼Ó}ì¶$¥¹-„~ùíw–}ùú+UÖÄ/^ŸV#üBßÎúF÷šP®Ùdƒß. Ý•~V™cy48p~ +[Jb!çë•¢ONóPy*7ÝêWƒPü#éÈåö'‰—Ò9‘Ѹ–;[£æG€~ùµQØ/6ñ€_w°Zí݆FßñbôtgüC^„:jµ\ädµ¡?ƒA9qm &Há6P×b ŠÖlÖ±Á®Ó¤sËÂmFœÍÎJðÁ¯dÅ–µ€ ­# „uüƒÏ×^3ýˆ‚”h2‚ØK‹ñ×þ#°Ã7²8$­·©ü#ðùZ_¾?‚Ï©lB“K;(ƒf¶i +ôg`ƒ7ö»PÀœ?p~T®où~žÐ&¼<çBÁË×\(à(Á¼àÂó{Ö¤$1!‘¯!d£ß…‚làµë¬`"»Í/å·¡W–¹/‘à7‘o¬Ó ++¦»LÀÜwH 9ÝéX Ú¤„×ç$.¬¯… ¡ó]nàbÇÐJ»ÜÀÔ£LÞ3O×?&‡,ß_IJD/FCæpL»Ø-Ïa$ÄòÝŦPãY4 )߈º‹/][Éè(—{­í.S 3‘R A½Þ]¦8ÁM¦@=*¯#$ÙĆ?ƒA]~Ú’SQ‡sþ²áw¨Šn›LÁ^ÜÈȨ’ï2~'\ +‹›—z—)Nè.S¼>&™‚FâÇRNw™ÂsžÚ¥¼ËÌ£héB!Ù€éñ8[,›¹Co;é¢h-÷fMõ.S0YêËúí²ú¿s©»pq4ÃÿDHKÕÿIßt“fÀJ©ë Q•ÈŒüûÆÖÕí ªöS‹î?LýéºÞdý`8:ÈŒDx\n_˜ötX¥é3°ù¥A3_XVŠ=¯mØ SÔË ¢§ÒOì=1iŒ ‹ŸY·™‰–ª–¡#ÅÂ#bàù)Õ±ÀÚ5­Ýhó‡&LS㲆kjïÄâeµäõëƒë<éÑ,»°ôÄ„0äû¨¼<ÅÁ4KíØQÃc!k›ÊÓCf,ð ߉ž_SŸëQšöäsgåÄv)·— "°TK]Òb?î_ƒû®@H¾¤ÌBS\˜¿lM˜fÓ«Øz6…náþã ÒB]X }r1–E&d$˜èþ•©Ù èòÔÌYÞ 3G‡>†ˆohðFTúGjÍ3åšDÀñY0´¶¿æ0Û$„Ž_6–î¿Ø›¦úÅñ7Ñßøq¢Åþõ?µ:Y«›½ZÅ¥¸ä:ÑiÒs†uø ¦ò7a†\qÔ_¾Nç$TQÔé…+Î ;ƒlUC°–¼àLüÖ+«O³óäB¡‡…_ë¾ryìk‹ö`¯´­6l )[6…h»ÎEýú9쀋N€ÆX3á«Ðb|ëÀ„ íÖúO=fK:äQGiß*•$ôl©&År²_* Ù4ŸC½£f¦ˆ—ª"oÈ_ü­W2·àºÓH%´˜Ðs£´¾ÊU×Ã(Ý'ˆÞØC”~ª³ÀŠR œ’)ª¸!À<ù$£ÛCGÚMÒfÊŸc¼¶ ˆ‚„–ݹ)¢ê¾d–6Œn1Ɉ/ãǪ/擯´³ƒˆäèj4Rm¶€Òî~þØ] ¿T Ÿžö‹ƒX3õhKpm¶}„ã3$ëAÙú^l‰@‡Õ`GP+ÕÈêBW@¦xdUéÁ/Pº ì~¯Z•R[«OÉZv%<Hµn!N•Y$è¬gÕXXS㈳&ëAÛÊŒj³³ j¢(„Ö-BE¤éSó³š|n fø‚ŸJ[êbw¶~øO@œì¡wô`BNúÜ::ÿøÅo6êê`Ô)Rm KçSœv;G ¶£µT›7Z°,~BëFlµ¦›)úµ‹\åÂóGÑÁí´ðS2²·* +!‹˜:¦ZŸÙGeíi@Ês(^?b /hC¬™Älw_¼3GGË—ÀíîƒÂHý;5?È] %….¨Â|À !=­‹&|Ÿ$ñnï4ÊŒ?Ýp'“1äWû»$æºäள†zT&Žn ¡k/Rp†ÆÔoB~W±.†Œn¿õÊàg†0˜jÖ¥ÓTœëƒh:¬OâšcL¸Àº²@ØZó®À¨0º%\ÌŠ´Âõû%½˜Tœ@ R]¶úE´‚¸'Å@í þÖ+M˜d¤Q,QÏÁy«õ‚;Sl| ì”Ó£‰ÓAù¥5QV.Ô¨ uJ%LÄ´w¦(µ< ]R߃<ïdÕ¯*– ž»ñ~é×oúÅo3±üâGu" TÏ&‡°è{09m²éëâüPl^O-ZåvAÐäBÕ¯•¤³6QiW’jOÆü[¯Tî*ŒÏ°gEîé9ƒV” Eù¬’q1H¶mÇS†&@Ȱ žRçÖ‘ xÑ_€šÌHlÚ€ µÆÄÎE|&l±M(L¿Ø¥TÕØíÎ ¦> æFçšDš¥ð±Ñìâ»h±QÌNïôë òe&¿cè6O¯»ž ¡jºÝ;ørº†abÀs’)"\[v»([Ï\ƒ>´¿±Ï²Ø"b”¹vMü€2¤€C¬¸I)cZ0P*4‘£HH(§Å XáÝ‹á€Î`ù® }I»‹a(8™ú0¦ž¤<ôëý©¸ÕŠ„a”º5ñŒ]e 2 ~™âŽ‹•Â¥¢HO€ÑÏî$?k¼ClaØ¥Ìfâ$@zg@ň7Ú|GS;ºýsǰµk˜˜B +P»ä ©ì ˜g±D6¡fL¥H ìêeºçÜ\µ~ zû%PE2"½Û{ê{ uöl¯°&Ò’ôt3¹Òn×µè:Jà¿õJEWv_推ô\*<‚pSUrìuË"êËU‹ÕY²*4ä3¢Îm™=ŠBI»@&$:<ò{“úêºÖ)˜ ð„]½¾Ø¸ÓW¬AýÒAHYaÚ ºõðŠƒG(e#Bö]ö¤Ï;]Eö?W s»Ãœö·À„ÎÐu—"µ:Ó~$g¿o³æM²˜Áj‰bî­iîl—Œç"¬\ÍÈ¢(Ý„¿!RÅ[³U0¦à[:4y¯¿ßÀë‘w·áç#«ßÁ&öÍŠf„X† :Ù,žQéÒi@‚ªéVfIçÍÜIH—Ÿ:³* ¸4¬lü‰õðš"Y°¥Šw)…z:À¥‡J9gM•⟫ªŒ ,B×C’86 KX‰ˆÄåDråvIs„õÑ!fÈÚÑDobû ^ g§3÷³‡BúØœ¥éÞFÕùjLu UÓ)‘H°H—Q;ûßz¡Š»`晪( +bT=·Š–k +†œ!sä2O؆) Z\B· +ý#B†´KƒTEàŽªŠØ“HX M\?MÔ&Õ÷Ȱ'bE{2žæŽDM¡ZÊ5æWB,]ƒç”XHÑŒ…¸Ò,責{>HW«Ã§`6SÖI‹’ÚÖD°ØmÙj÷`I=B®o<ÉóNV;ÍèvÑÄC×%EÃÃߣŸ DI—vno= !¡açÝ7‹1L«Ž&<:ÍZdT '‹®’í£e9€4}ƒž*ˆ IÐÎÝ•NBa3£eE]LÊèUmu€¬-S 1ë.£Þ¡ÎGDåH(6Ѝv5Ô\€ò‚WŠe ë¬4ºæÅ¢«õˆ_ râµ—Àر‹1ÌN–ßXÍGG€‰j êOë•jNù@"lz®ÛÊOª¼SÓŽx³R« C¤ˆŠv¹bݳYÊø  +ÌéÃ`:JK ¦ô0Q®Â&Q#tÈŠ²¥ÉOÈ Æg™9ÄCGS>^Éc@u#•àåtPyeüFó +¨†âúµGLà›Pc‹‘TW|am@Bªø¼jŠÔì' +Q-“a4¬vÁá„6Т†ŽZ·ª„X –[\kQb£iBI»œel2ÌayYWÇ)ÖšÚnií+_Ú$`‚f΂ždy'§¨]§•ò_«âk]â@d =@AÁ¤"ÙíÄb(€Ø‹åqÍýÒ+c·]KRŇ˜ò‚W=Øé!JTÎ.ˆÄ¨€«ŒÔèü·´hf€THk4›w]¯¡ï Cɶ…:Ô0˜X… š„H›4Û,~nò ­‡=qƒo¬f-Vé +­눳: •)æì¶©ÂµðLµ¯8Ї°ª©T3×=À;¢…Ïy{!Î+Qí„#RÅhÐ +MY—5m·jOOPqIx ´º3­Z“çˉ‡ut1ÐÑCqrÒ§ëªVö—«‹S×;,¤AϘÌûQ§d*2ˆ„cù`|«KŽZ  +S!æQ—éT ¼ +ê/^ª¥ºc`ÝDŽ©Øñj5ÊF‹÷T;œ¬ÊšY® *£û=£+(„bli\Ò"û|A$ô  ‰Öi}@rdÓØHÞñN@;ÓðB¾Æd°E¼dÕ™îêý ¥6 šÔÿÖýË +PêÆ>Úâ­ÍÎôÒaKL~£`ã­`MYƒÉ¤mE%xÛŠÀ/Ô.+2ÛyÉ¡×¡àæ»õÁÉ™,®ç”È_¡Ѭ'kïZמš¤ÈºôŒÍ2/‹cJVbº¦Ò•ИncOFq6”½Ó"Lg ì{¸†™YÐа)¹ïÁΉKx·Ïúk©\¯4x§2`C4Ã6èPD‡‘ª‚ÿBTøÁ‰¡(ª5, ¨¦¢y|1(Ù­¹äŠÆãÑ-Þ +í“ü¤±dTF¾=C¸ĶX%ë]§.²üQˆ.B9† ]D­mˆ~9ÀÎ "ÑRY¨ºñ•½ƒðR¿é¹D7]Eq'‡ºx4®f¬Œx³óÐÃl4Ѫ$år²Fζ­\&=±JÓG®"‚'·‘£‰‚­=+K6`@1 2^HöjÚ9^ŠE¶‘Â,Ëý¶n"cxBí\m  ÿ¢œ¹Ø§sĶ$€ +Y8Z Ù9F‡‘¨;»-$rM¾.ýEg-ÊĈ6#s@yØŠAÓD¯ÃÒܧAÓO h1éoD]P`K3µC/6ŠÖ1ÄÚm$£{e÷#»š©¨²Àæ‹"]2oÔj—u4¦c³îÀÄM;è,xÍ_¢½O͔ђe‚ûÕ*F²³|½†øÂÊD;P=‡è-B2×"n2ÚÜ"VB5Œ%™6‡qwÞY(·øÊئq£äÇ*+K#£.01rÆc­ÿ‚ )À{aP,Íö45“%fD™ðÊjgÃÌF¬ü­q2šã•:ïTµãÝÖ‚·Fí²¨ìßP]œ8@B*OŒ/G +(ënM!ÈÚ ÙP kó·^i† X®¤šôØ+cÕ²,U q9ŒèÄƒí¸€ŸÛ…ÝÌ4)ìe5·sÒ¬YÅ©€Ž4æUvÜ0ÂÂêEû‰#´^Õl¾21HåãºñŽÁ;„M–-á«Ý²‚.&Ïb¡}$¶žD„u~›?! Œ«LCúZå¤Ë ÌH JiqéZ{%ÎwDµƒÌBô.ø­Ìb}‚‚ЦžBáº ÖÆðЧ(Q5« Àª=õ„Oa¦^À8o‡©Ü·ި +P.VR¼ÒÅh ;­S§®S'ÿí¯# Ê’W ¼øN›ž[·Z$´¶'žCÂuÔuY•Ÿìl³žb·‚_ZÔ©9¥d4vôSÃJ"¨Æ®“øNš×³¶,šj`9ÈR«CÕBVXd°›QÆâ·½±sÈÔá áÐ"Iß\lßæ¤vʇÕá!gókð.þ-PݪNb˜@ŸŽSà½w(Û$ž_“è3ù!™6˜1 Od¤—O)Vƒ‹ ù½5Y5 =I}–„Iº&¯¢¹ÀQ¹Q@<;܈ãZü¥,apÍŠß„iAF’Ó Z˜¼¦kVEÅT3j[/Ñ€ Œ¨¥G‚]C†=Ç*b•Õ›#ïÑ RÙKîâʃ>>òæ ƒ¯±ºÅO÷°v\ú©KýÂãÀê7Ty§¦ŽwñÖ•%S¹ó"ì0 l³æ'(¨ôjÐ$K ²Ro8•da—þÒ+c2Â…Æ"/KÊuinÁ@¥/hS°óDß=Ömý"wzër’¡´(¡xA´ÁýöWN½r1ìõŠæ§Ìk‰çÖý™lvf1ƒ¿ƒ—<ŽU÷)˜¹¢ÀmŽù­[*È,ŽœÈbß÷RÈ‘!”€¡?ÁARÜ%Æ,aÊaØÎ¼²zBã»ßöJm +h¤`ï,†ˆ¡L»Ížôy§«•ž +V!›|Ñ’íÀ„R¹~ã/ìvDzÐ}Y˜ÝiHÅ´K÷þ­7©ö(x¦—Œ§Lã`&2¬]"9š$ýˆÂ¸U±h"(•­BtŒVŽ´‚ÆZK[¢\àÂV¸N°æ‹½è¥Ñb„IÈÁï%5’ŠÑ +I®ï)¬TÞ'¿õJX®,/nošÙ. Fr-©q'¾ÏRWܶd|¤<°»¨Ä©:AØÈYŸ‘+N´{’W°2Ôwbl$³ó[Ñú¼ÛRsaÌ3:¿Õ™õ +ªvfTC +ÅbˆŸ´–ôPR›tÌZ"I¯dë,Z6{7,µ¨%Lz(ÅUE"@6¹é¡õìIK/XûZ[o"Ô +·]îìÂÆïË‹]q ã©Ì²,w~ªªû/h‰™2‘-Pu¶kU “ÌRŠ+Bªñ¡…« @3G  Fô‚ƒ© à`5ˆáù$#/©Åi-€5“qE¤ \ûÀNq²º•<¼1qáÑýY7.OX®ºÀ`D¢­½Y[c´É REñF¶óªÞ4½Àæ8޳͵86%¢0X<4)fGöùá`‹á&m*…šÙ@Á&: R·6³ûcr‘ŸËäæ˜€m¨œŽ$cG­p#䆸¿íÍÄÂî½ØÓžCýÇo¨óNU;ÏÕ]á(óÅz)›õ*§ +¡'¨DòaÏA^}TX±Zµxj·<-E´zôBU!Ǭ©è9•GÇrvjI(Xl™Ià¡&÷@·›èi·¡”›¶Æ8Ç•v›!¬¬è\”­ÄÓf‘y¤mÑ/걚±ï]Q¯ƒßzÓâ¢bS²s,&ay£Ír È’ùǰ"_×÷«yé d:yÅq·Û‡Ý< èý©#ÄhJ.¾È]Ô†8^WÅ“*ïÔ´ܰ‚.B\©4qÊþÏþ$y©ªŠ* B?1»MvƒŸZä'ÀÉ^øç‘Aõ÷R£Ù’@§›­ ƒú\ê`Á¬ÀS—)f_4+áØˆæ Á+³Qt"| õ ÅÞ<=A±`RhZÒmvˆ +'¤€ˆ‚þ²ø¡º‚Á˜¿Q¢S‹Ž8бw}nÐí‚1ÛÙÖµk'±©Øff1B,œJ>¤m¾ä~©Òxe¶`• ]b¨É 3ÁyÞÉjGÜ‹å㥑‡‡u.uÄ»{<PÙã3h©™Î 6½R2Â5¶’F_¯‘Ô]¸hfuÆÆô* +]FS±M¬f»ªÂ Ó9¯‚¿¥ó¯¡®A€_4CAA+¹§Š»±))ÿw+ £®< (øAÇ´ ï`{ÎŒkK0´*( WÉ,}O|¤+M0u6šªdÔ +V´¨§ªŒˆ‘Â6ãšA*ö\È”:ÖÑg@·Ÿ–ž[y µÕ«ZIÙzRå;jêˆç\Qü.¨Ž @eР í¡f©mè°EiÉðÒ¿°—ÅB³G‹²E±Qt;_S±'¡²q¹Ù›Y,»¥€¬•ŽLˆC‹böcƒœqùQäÞ¨‡”Ÿ†vËôÁ¡b‡‚°Åp£÷h³O)8Ü‘Xƒ†Ïúz¬2«]ŸA •Ukòl“eùš³Òî9B:î×Þc¯^"!h;ÌL~pájôC›Xæs¡çló‚¼Ò*Wk‰u—- weñÖÊJ>Aœf†Bµ–” ‰:Ó±nþ0>©[Xµüp°$§ŒÊ} J§Y¯”¦›¥›Ýu« Bë_7‹õb©|JX˺Ñ͉È>ƒº¶Ñ…€‰9ˆ à˜—¢Ã¶¬èØPl$Šbach¯oŒ.¹ñ{p}_…`•àŒéMÔ°¶¼õïtµãVMk½Dwî¼™-½ d«ÄpB°úfÔW肪˜ÎÛÏÔO + òD@ö*²·d)9ª\ÐK3´–ΰž\>C‘D´(?«AjÀÒV;ÖèÌFiüTæ1>¬ˆ>Ø«p¢@f±›:à U9wµ\dVñÁ–?e³|–ŠRødC?¥\5ÊNCçÚe–«©‹/&´;'Ü¥¿õʘb4•Š8Ô´qÏøBŸ?ÎtR±\ñ2°ÅSÂÕ~Šõ !¸¤lÏ'R(7u"IV½s`²ø"BoV9 ¨ ÊS;V¶?ÓrEzh—D‚. +¦Üæ¥-Y$ê³úyEÓA0–%ÉŽng!ûYSI8[û¬ÁÎô|)¡õRaFÍ~eø¬(qŒº Ço€IAl+n/ËA„Étç)‹Ÿš-è]™78âC­·#ZgéÍQ1Ì_k•õ«Öó’«å +Ž|F’%oêZÙñ + \Ù'é—FÙ§È9tJÐiLžô÷T°Ò0Â…Y€™-nº†©t~¦þ94’>·xµÞ¬Åf…~L00Ê“>lL§¸@ù©¾TÕåPìZî±Ñkà—°¦Dü5çiõYÔª–}1+ŸdùŽœv ¯;lU“€<ñ·@ µ=@Aydƒ†MžÙX€‚­#ˆD+Š’²Üõ¹DÕe]ˆˆãǹH¬ïeü•Þà̦ô?!4Š—d†"2¢qz©¯°MU2+݉Wca£4  ¯ˆ,ÞŠ]·\¦@eh§‹Ü†ÍÂ_|Õ#:•Vœ£… m¶è ~ËïËÆ<˜Ñ‹øÞ%Û¡µs²Õîo½ÎÜ3ƒAJü%dûåI†wòÙYîî½…SŒÌµì:îV¡á ™=ÁÛ\Ôµú\yAÛ™ÌKFy +Uœ®âaž2DBªóA÷8¦©ŽE9{$ÑÈÄ?Q4–´ÀëH ¾ÙÊ´7X_ƒ¼Uèn#+ruaôX žÔNÙùQ±!d½I6@©‘:m”°I!þ¶[qïá&~̤ƥï¯4–³]!Dìü s\;7[p4{ñmZê’ô”ÛG0:šh >… Ý°Ýó$Ï;Yu¦Õ Ϧy‘i(?ûK»Ý@B*,AȦŽ`Auj0rd¡`‘jÒÏîÖŽVé™ùÔ2/îÓ6ogtëŽ@ænI:U!ð ÖË HòÛ´,´÷³¤îΪ­„tˆÒZ©Ø+-2 ù)\kÜ—C³;±YhÆŽP§(̯¤©-È–Å4éžÄEØë +ߣ <]ÑöÓ<à"4ðs“uD%5‚'ûÛÓØìC FöFÈåÖ'uÞ©ª£žÃçè!Àéoýúur£‚!ã–yHžÉ:Ø#•u‰‡aºF3­x´|©Ó2xÀ(Xƒ·ËŸé%#Èïxp'Èd†¬E*<G Gw6¢žÉàò&ÆÎJv†•I„ë‚ )È@›±…ÈN`Øà°Éx£È¢Œ Dói­ÔL6`Æ ò¯|üFLìT*kHâh>sQ¡HoteÛ|ØŒ]6]†¨!RôR³8 NBÙ™­†³ŸBFð_Úoú%Ù}˜#‹_ä Ã/…ƒ¦å—^c´k+pã–ÙUV3P¸v7–(†Ìƒ"Y0¶Êˆ-X +‹C +îŸ.’åšM£„œ— ”…½‹†INÒEƒ@NÔw áT"gið}ë$[ôvòäÀ¬J’¸š"À c¥©ÉM–PËãÙkf°Aî75+xZä®-ÎîDø=X `º&$y õÌ4!ô.Kù ÃZv“çVMËñD¾†.[( +9Þ1"«+buòzR Œw‡ä9¬ @™Ž§šãHÑa H%ÍkÅ@4«ö5%çb—œjµ`/èb³•2µØ”ͳ°P¾¨œ­±"(Àâ‹™g@­8 ²˜m²Æ0AÔµ(BÀ!žô\ShnmûˆyòÙ+¶h›Z( u0£t`–XVLÄ—©ù’7òºPéÏ$íá…¯4´SŠh<[ó,å¡0?ïo¦  N#DI.‘ió*(Å‚ÌÄËÍVªÒx«Ž<_Uí¯²àLÔîÐ-’ƒ5äjËK~¤àæ3HÆÙá‚­ +@Ú¬¯TùŽ˜vŒÃº§’q'æ R¼”Ò 0š´·„®ËoYP¡M«À¢= +±H:âÔ…ù¹N›äº²Gƒ ¦"aÓ°jBQs»±‚¸5™»Ø>äÒ3о VÉÁR<Ë€µ#ZHæ8¤˜1¡ d쪨¤Õé•urÏŒõßyÞ¢%°›X»o‰ÕÆ{ 2¡EËiGœÒæ2‡ +žn…¥`d=—Šm§â¼ÕN0ücÕ–YqQ‘‡óo%:î ¡è A:¼¢sé‰rìFÀužÑH›!wÝÄ—€T±–‹IAÈ⟘[tnåbNèwo‡zX¼i¹Ð5$“£‡Ùø2ö`BBÍ…ó‚þ¹`“ærö]Ê6ƒ)é +¥å~ë×ÝŒrëdY´!³ç‹)ƒMæ%…ƒ”öÇÍœÅ{“n'ÌÎ3(Ö¡E¶þöL¶k{I /×G©ç¨:çµë^É™90¬ão»Y26Ð é ä’bo÷CoSÖ.$¡»Ì×eEÌ7þؘ‰†(³,m™Zeè·k7Ók·~ã hú6² nýÆ#æÕd\†æ÷èÒ"´lA)ùœÔ0Íq°šÖÔX°ðB A HͤX¬ÍÄÙäEaJÊߺMö +µ| ™yoƒ¸ïožÙɶtYYI_»Ë&“íì–r;™’ß-ÑÚW.9ˆ â¢&¥ÛoF«ÒÒç"o7ïöFÙïAk&6:¢Tc»£5H$€IS@}9·hm} TÛ‚”×W›1˜Ëöݳtº,|€]m,ím ÚUœ?÷4k¦cV ÈðNƒW²ÚÙ­§ÍìEuƒ‰W…Æ#rݶqȘ·î b^MãK*¤ö[o¼Ìˬ~Ž©G†5ãc¬ïãf½.]JŽãuN9Žá•¿4Ë&WHRyè/šƒÊš¡ d)?¥ÚPXíûÊ.s0m +•Ÿ/.òáEl„•Éò4®Î8kðÚß|Ûü˜Îƒ™Î×§ô¡nZÃcåŸÄÒñlác\ +=Ê•ašÇsZ4ï º.R–Ó/®Ã71æåÿÖ›”„Æ™J¤%Û›FŸ¶xMçuhpº“¿+¿ü˜sy}g¶Vm/#¹AÏÜÀsæþ±çr}Gè_þí¯û+ü?þã¿ÿÕ~üÓ?ÿøÿ}ýëÿòüõ?õÿ‚ÿüßøáGüñ?þBÂïÏÁ´Y4Ë…•`)ˆãÁ[ #Ù ¡ìϱ¤{GrßH4ôªýúëu{áºhõŒlhë¹Àˆúu÷t{åR©uŸÀaÿ÷®únoÏõï¿Ö¿寿îà6»¯:×äÈÛJ¾Sà™â>…Êr<;𾚨ò‹ÁÀÔšúÙüäVMeb"åF¢ÔyeЧOCC™Á_Êœ¡û Oh#ÑËsýû¯õoF¹“è˜ßמërém5ß©piš­ êRH;쾚ÑöËRˆ_°Cú^…¹eî$b'H‚¡¾Pûž> Iò—Bê‰h'Ñó¹þý×ú7£ÜHtÎïëÏu¹†ò²˜¯$8 ”ý{KYkõ ÐÞW³ØnY25 Ô;dDqör¨Ø+QÇÛnöXm_#N>í§¨ÚKËšnß'x@;‰žÏõï¿Ö¿åN¢c~_x®Ë5”·Õ|§ÂI$ç„ áíØ}5ë–Z”²C6¿åö ‘sùÂÀ‰üv(iŸ„ÄøUÜOÑí$z>׿ÿZÿf”;‰Žù}à¹.×P^ó•'œ "„¿ž§èï«é<7σÊéƒy”™òA"çò‹ $l~ÀüvÈ­nW{g­Ýç÷€îz{®û±þÍw³û:ÀsU.½­å; vÕàlÙ²s#Ѽ¯¦ó\h5}11 ä×Fçò(R›ûA"¿à¨u£‘ß)i¶ÚF£Úiô|®ÿµþÍ(ïDzÌïëÏu¹†ò¶šïT8‰ä|0uÔ <ˆt€÷õt®‹\ÏYH_LKáˆù ’óy8ÇyŽü~Xg×qÂ?uÐÈ=z|¤vÐÈ/HRþR‰_+±‡8ë6ÁÚiô|®ÿµþÍ(wóû:ÀcY®‘¼­å; N9/Œ¥ÀÁ¹“èïËéœ!š£M0§ÒA£)[ùÚ/LþßhY±° Ž5ýî4ŠÖ<¾GT—½ëFh£ÑËsýû¯õoF¹Óè˜ßמërém5ß©ðÿÉ$Qâ@Q~Ñ•ÿXX÷ %nS¿wh3IÜ¡‡Ib7#Á} ‡iá>‡IUgáɯϥᅱ¾寿îàa’Ø¡sM®¼­ä;düÀ“Ä}]𾚇ê½C‡Ib“Ä <·¡œ¦…Ûž&‰Ûʼ<—¾ÿZúf”;‰&‰<×å"ÒÛj¾Sá ÒÃ$q_˜»¯æ¡zïÐa’¸ƒ“ÄnF‚ûHÓÂ}“ÄDÏçÒ÷_Kߌr#ÑÓ$±ƒçº\CyYÌWœz˜$îër€÷ՔôpŸÂÃ$q_™çséû¯¥oF¹éa’ØÁs]®¡¼­æ;N"=L÷•9Àûzîº÷Ž&‰;ø0Iìàf$¸ä0-Ügð0IÜæù\úþké›Qî4z˜$vðX–k$okùNƒ“D“Ä}a𾜇ê½C‡Ib“Ä <·¡œ¦…Ûž&‰Ûʼ<—¾ÿZúf”;&‰<×å"ÒÛj¾Sá&‰ùŸÅÿíf?;-ˆûa!…„L²5ˆ™×ë’½ÆÊÌ'ø%u( +k¶`K-m+½sdcð‚B»íbË;;W‘æè‹f²õÚ¾Vèùɹ³·4ÒȱРä*iתµ¤~±Ô9ÚþW Wæ/)ñ•èël'‚»Y¼(¹†’Êý:HêZ‘t$4÷VVgC!®€%YZPRõ">À¯\{»ü.7[{¾ƒC­} f¨}Â&ØØDKFÖ$вHʼnÐßÛ"2×ú—^Ùºjý¤00‰·U/HÙ« jJ¹TË d„ßž¥÷5öÐ(?obr»aã°Ka(­ ( bõ²Z÷ VbÉ~ѧkàÛ.¹?‚÷ù¥JI¨W0ç›¶@0×à2ëM[PžjŠÄ¦.Š*ÇøPTgH®ÅC]`}Ÿ¡>‡»¶@¤u¦Ñ?´Õ^×=´C’P(=@…“zýü´Êi +íõWë—Šæ°mPÑ•òÐ&ë%±k „Xnñ¡-ì´…ý·M[¤Å8´}_Ù[®-ð7–D{‘&ô®o1Tx©/  XŸºÂ y¨ +v×ìKÓåµ›¦ ŠY=ä<.ñÚxÈy{ŒMÁŠn)¯lWTª+p>T3•§ª@ˆŸ\ Ж;tU¿õËþW#š€¾© +‚Foº‚#Ëñ©+X•¬žŸºÂºÂnº‚UEã©+Ê©½é +š‚L‡® Hœe×´H³Ï7eA`©ñ©,’kíPD )d/›ŒlÌo6¸c./OªÁ´»¶°#‡ºp}Á>–\¯¿é 6Èü¢Õ[ñ¹:”‚ý<Å`xÕÄÅnMXZNUí²¡O°Î7§¾°#‡¾p7}A±?å~"W1vuÁk×}ó Â<´;›èCûl•ßµÛ“¦HlÚ‚®¦bÂú¡-ì&®oÚ‚ Iw‡º «0äú¦.ŒªþS ñKný©.jê?rª §Y‰6uA;'•±_Pë/½2[§–S]ÐNU¹«·—Ö”ËS]Ø¡C]8À»º`¥MdèV#ð]fù-‘ÆjÄ`³d½jdT3±’¬i>!«Õêš‘ÕoÕLõ{¡T62ZX%Òª-ƒ"B¼Õ—P0­Þh¦3³?-ª².FÕ8nÝ?”éQÁ~zåÔ¡ñè%TU­þå´€±ÿŒ-~‰•‡El>À5cl{”ÆqÇòæ€z¤ºƒÒ±¹= Åu•Ñ/!¯¶)5 ‚` þÜh.Ç–DQ 5õtŽ¸ÝøµÅkº¾eƒZq€é•og7Í](ƒ†d««-vDCkàÔÊ682:^¿%ZêQÔ¢ñƒì{ågFÝ$\¼hW|ßhâ¨Õ sî­Hh:@*”XL7˜rÆÆÚPy¦½‘µNÄ^¨f^/±Ù1¿´.'~©xÎÏ«TŠ~•üL?-´® -8ŸëÔdU`\*/„–h¸4Ò¤‘Zû:EoÔõ\u·h61“g×ÍV…°¦ ‘À}›­ò1ɳkíѸza‰Õq 5Ó(Ùî|A¥ˆÅß 8É‚róïw0Œ›gVð¤*0d]k³«ÑnÉá×è–HîËfŒöÊÐG4¾6Éä†ÃõŸÍ ähãÖ¨^ètÛ¡dhè*|{N%¡N.ªÔÌü“¨w4ºŽ$K²ì¢+b´ë”û’tr¾<ír½AI¦ÜRü°l%a×%¨5{Ž}×¹%£öX‡ öÄå>®åºÇúuh– ' |  g*;»šš}WÎ7Ìø„~ûmÞŸƒ´£b鋇AE]ºx¼¸w¬f•ÐÄÑŒ29·èÕÎF­:õÇwõó\ ‚H¤ +º JÀuð{ãùY%å@¸‘í®®Ûu°´€äPT+˜;¸GFÿŒp˜ÔЖ:¢ÏŒýR­3ˆƒSÙNS2siÑ.‡R±ÈšL `+ÖªrÉ¡·p×AܲºÿhmP×›–Öf¿%Tá«P•œmó0Ò:ÐdÍøÎ”¡/ý–ØUg>™7t½& ýu­f^fó‘…ôh¬-åü"üú“è cI©ê£÷°lü-0%3 –¯m{5m”↺Óê†÷f~ÌÝ´± ÒëÝh±~¹,ênÚ(…ÚçfÝàZ„Ýó—ÑNÁ@/Š)@®ñú±eÖ ìwì=¬âMxX7TÅ•Ýn]›ÆÇÞa/Xšì¸ÿܼÍ~Ù­€:e½ë+ß›Ýà°n’ñëaݸCëÆ<¬€ÔxýaÝ”4އq3ðaÜdìݶ%²‚'OÛ@÷2¶ ,÷Ú\‡mƒü£|³ƒªÊx¿ï j ´– ”í6ÊݲqG–ø°lð[v°60D±±Ãº-(2ãí Š¿6°÷Ý4ZŒ»^fÔݰqG†x6ðÑP^š:?Ñm¿§eܺ”³‡×4mð0m`þ´ZÜLÜ%¦Ï¦ l;÷ ¦ ÜM +ex1m´^j§iˇiд»ðaÚÀEì—i¿¨|ÐôÈÝÓÀ‘\nÝLØ;ÑŒ%»¢°ïî«]£T·¿½Ø5¼«Æû+»jŽ>ìwèaרÀÝ®¯ º‰  +ñ°khàÅlv»+³­ê³yºb¾Xd)A½þžÜo”M/j^³ÀÊP3hR8'âsJ +ØCi ¦-¹žµ- âJ Ä9\ñ3oÏ™XÏj7§+õÛÒü"D‘:ÊÀ°'øªèf¦ËA¢ãׯ¬X9‹¶™>Ë8 ,ÁÑ«ôƒ¡øïØ'E B:F§êû¾ûŽ:ͽÌëE°H´“g“aízlr))õ “ú²MvÄø@lùÌÌ÷ò”i2ÏO!˜®T!…ó^ƒ©® d7eMˆG_Ù’Dä$y®Â Zº3-b ²¿ÑÁ¥J ®zÌöÊÅ ´°¡Ñ\²ä'{c41û@ìÖ`OsªmØE—éIÊ1Š%Ûd—–ÔŸ =ÞŸ³‹Ú)ýÓ뵩½nb,Ãn¶,§b&Ý+›æJeľè +7Ä£fÇ'ÚYWft›Ï–aƒšÛºúu,¤›£3ʉ¾´Öb“mÊ¿FÅ6¨ÉDýMN&úgd)ÑVÉ΄Ì*_eòµ›¬y8Á¢——F#[õçÌb_¥ò0Çé„&íƒa}×+Ý ‹NëÜ“óŠ} åQ÷Á±£v}©·ÁÙ¤Œ½únë~¥Ÿ¬E‹+Wö7®–.ÜFsÙbÚΡºïR‰CÙáªÁ#ébWaŒÔ5 »VßÃc+ùÿºNëõB–bæ}h\¢t·©Æ8ÜKAkY jã¦+Åž´1À|rZö6¿—PcwƒÃô-qʪóÈ¿²3VëlOðËÀüö¤ñóñÝ÷Š[¾ÐôºI\LÂ¥Ö‹Ý¥›05Ø8JÐZd™×Öú…æ#ÿÜ}¢ríÁ+Õ.ÌPiçhEô¿C¹]Cº~CÑoܯ´4#a5FVíßÈàj®.­xM §q¥ ‚ÍÌ557N&£M4±%âÅôGÈRt«hÎfäŸÂðëü¬˜CÈøú’$j÷-‚͇M  fÓ\/fg«ß†ìœ0¬$}'«Ë-ÌM1}vyJhÇ,V1íÜ\¦Ó!n¹ÞÈþŸ.É< ["ø§s”Ôª7±Ïâ×Åb²þ1óvÁ”É{0ÏûÙÎfAŒ™[2PülGYçÖ‰¤á®ùA´SÉÊ­–?A3j/M‡6èZºQŽjXe2¿UFŽ'4¸2Ø/æo*ž.,5FhpA¨èÂ"Ù\Ôr‹ho kª/Ûç¯,`–Ìi–Ìj»„mOiɤ:WÑñc|N–y´'“lÚdÅ̾IFù`«uƒL9YGã#\`ôƒU“Å[…ÆëcݡŨKÛ“æW´³¹ø_žÙ• R«äè¢AæZצm©KÆð µAöÊ0çwÏ…è^»é_R\1?:K÷s”êRKéÏzü!eƒ{jN—LG¹V¢¿¬ýË=Q½…Ã,•¬ ¥ÜMü4›Aé–¶èJËç›ÜÉÔDÜ”>´@β³O³³_<]É{96œäagç}·³£ùZ³;™ê²¾ÖülÍwgþ&K(¦% ýR¶ce0RôLøßJrñÊùwpã úÚ¥`J5/yVƒØb™\MK¸®é|Í×ôö¬ntø@ÌÆ4.ÿ´¹ÈÖ).Ã9«/RƒkMÑÙI¶ íFëÆŠÅÞ¾cw =ëì6ÈæžÎ4)¨¯q…‹Õ÷>-Ü—i4ÓÃq¢(¬LÛLvŸ°":dŸu\+8ܼÁ†ˆeü l*J›F0›†öî Sr1S²“áµÝ4œB†´(Ùý•ò-BW‰&ê„Ü Š>Ò0è[{ \J$EÛÅãlƒM\lýmMß•_éÆ6ûiÙèE2 š«(Š` B³+ì©Oˆ‰ ¬d'1YŽG×5ZÆÄRjV #ÿÖ{›±`-ºn×àùÎÀí`&VV8_ZG ÉÞ›eudqkäjQ×°U˜œ¿Eó\/á +TÀ}‹]0¢úžóü7­…›AÅýÌZ^ü”³]=Q.»Ì}@Ýþíkq®”ÊäòÉ>º¶{j2Ý/°Y,z”iZ¡›ˆ/%éZã+6²iQâd ‹Åõl ­K‹¿½Qæ òá·F™ö%·p­ &£Ü d(ì~E~Ê–ÛfÊdG +ƒÒôèQʲ=3<4%~²›Î^WšÀåèÒòÂÌ‚ «¶£k«¿)¥,ݧGéü³ÔsñJ›ò7•Üí#t@öÊÌ…õ|NÅ q°B†AµÙ@‚F¹d†k”éRHVH blé$ˆ§›@±¢;bû´¸‹ÐöiÏ3؆·Û0Ù!\­w#Ü^xCøBt¤3¦÷xªöKM Bh·dŽŒ¢kÔéaýóV¢v~X:Ÿ#“XDãµ×ç:“æ–<'½°‘ +¶øÁžRgÅ'É•ùNiÄ‹'³@=«9+]Î=±ÄÍ&ï!›ÜÚ+ Ì +Ï;ÛTèkٌ֋£Ryfû/ rÄ—Sû˦=Lyxœ÷~Eø>Ï{@—™wVœ‡βcŸ]¾E”Àˆ<}\Â2æ,ÈlG/SÃ({.ËŒ•Õ<—üqØ.¹ìèd¯¼¼í/Ïõî£ÜY.‚+Mõ “ÖжԚè¯,9馸œL†„tSÀ=ŒÃG[“RÝq!çJq­ ˜'r£â—î™´A‚ǺŸ“AÃn‘¹­šµª'æ&†¨ ‡u…%{£[b¦=«A,¸³ˆK lhuå“­ž®µ9… îåæåö¥­W"°"ï;xù+“;,ñ›¯\‹åÏy*D’ Ô$ìÉþ“$x.-^üÈ”$ž§FÙ2—î»tL!³J‘ŸÞ6tÛ×|í™ Sxl̶ˆ34ËbÉö;tHfæƒWôi‚$cì(+ªË'°˜ ³!GãSé~ÝbUÖ®’aP¶äÜB/w¡Æåß M—«ÄZuç2]³2àIŽ ÜGíæ.Æ×‡ƒ° lÆ£Ôâ )`d#Ì#Ì'h+’Rkß¼ÔdhB°”¥¦t@ò•ᤎ‹Í8Öa¡v­ç6‰`ü¤LÈÁñòÕöü€ëþGvĆF +[Ú¢(6]®è“Îë\”ëRªÃFÒâ³@5G»T”' ¨¬ Ê´ý‘kÄȶ½²<ìK˜éÚÏwFNž#‰.a¿Ì`X¯µ—™Cx á¾–ãŠ\ý,&ÙV¿Š|Y¿ 6ÈãÒÉ…HEï¨~I5BSÕFQÜ?á©çŒ7ƒ 3˜Ý,Uå±-!™»BòØ–ƒMHÇÛ¶l)5í|T˜âM¼’ç’JÏ/W‚bl,s1`Òú +<ÍYǦgEx,Q¥9Ø›+W¸7p|³ô–lŽÇñ%bÁˆ]¹98gÂÙ3Š»¹¿¡®U=–[´£­«+»Þ-º`U§¿ÈülÝ#¥tådÈ»ú/(µy"Š=)ì8çoˆ3 Þ¼6EÉöFsÞ^;(ûmxÛg™M’¶?ªò >w.B%|O>v|vËÀó¤—Œžç«¸{îíÌ«G÷zh‹K~o/íòt*‚R7µØœx€\³hF +èìÙÙ•Ôé5?É(¤í¹Ž{® Ë±! +Çß{aªïϘs U\¸I¹vBϳ|ÈÏe”ÂÚ’žKi¾Ü$å{S-ÑIJ:NÅßU0†'“QQKÈäB€˜¸æ‚jW –ê& >©{%2uq>M+ØBô’i(Rlê16Ü#R'G2Íáßœ·ã–/vËK‡˜ßÄDéL逦yBŠ'èæQATWbÖ÷× ‘R² +û,¦“£ÇÇU†7õ)Û%l~ÙѸZKY@VUO˜<¦'W1±K? °" U-ñ#ã(‹Zd^¯3L”D*FóQ¨É,.¾°‘:@ä­¦Ö´Ï>Ñáú@’ŠŠä ÕŸXæK&® 9Ž…ž†–u«rÕ*Ê?´DdÙ=Î`ž¥¥QW ÝJ/®§Óî!­LŸ?£~ *E#šþAahýRäî + 7Fº E7è—m¨æüèÉKÏw^Ð!Ñ›¼Dì¸CÉSºÛ˜×yph7ŠæèÞMA:EÃb‚µÓc°Z²ƒ)Ú2ê®÷f;µUÙIžÏ|ŠP_ϹD‘©;ÉãØ{‰¡ù‰ô’HR[Ïíö<[}B×aõêLçR7[Ên:‘Íq˜0´M=PF‘ì}ñƒ¬=%C¡aÆ”j;¸&³ìn‹}ÞwЎź ëëKa*usÊ1”¢†ß¯3(ÎøžG\àµ&ûr¹÷m•‘'PËëcÙª“ÀÌ~®øAÑ?›´SW`¬[0£Ü©­cIŸ\ýÂ/µµ/Nf¼0Üè´/fVl^Ý ò+®­"k5²›¦™ òõÆâi©QÎO”Y³E¬îŸ[[If~¹’^¶d‚_6gEƒ¬ôYGäœh¤Ÿ9˜åw 7Š9¶æ`ñ윘‡Ì†¢b]œÍIÝÏC7ê¢Uõê:!›SLdTŽ‚Ï}gséÃŒC/fãÀe{6–TéHnp$ú+§yIÙâ˜ÝNɉš<ú¨u¥úoÐÁÉn[žÃ¾'C=<ù}§›1ñÜÆ0ö—=®ÅêÙ-ÑÍ `£¿r'O³1ÁKëÆÒ²=w3½ÞM¨‘‘Qéå`Û+?Aw›á8Â9d™Ì'«ˆ.#߈Çõ$T|%wpü$ë&÷Õ£{ôW®Sîó¾›Ë#²ð/®u_/A>þÇJ«FööT³€¼ÝÎ{GFmv¡)°äƒÁÊË|ÂÖ˜õÉ/yÒÚyç†@ñ¼Çƒ§x¼ÝãÑU'(™ò +mJ\ãañÎQ™$-+ø ^Úû³: ií{‹˜µNâfüÈR9GËòcI7KtTìPêÑyÙòÕ W{ZÃÔIÖ$ôåAWw3qd…e–È,s7ÇJž…iL6¢™•Æ» Ë§˜¨ÀŽl &I¢£¶ŠT2p®™„õÚ9íÌX4e7OÆ‚j7¨+x¡àà!Å^ižÕn7ªecg½Ž—ª76$Kë/ñóFÕ]ê.—–›1&#Ywy(y\u·€A\>¥øQož[¢ZèCÆe… ê“Ù̪t@¿EäôÍsv¾}ÍÌóo£DvóûäÊÍ|,Iq•êm)íUÇ+ .ÁíI¸ân“7‚£Xlß9Élk™e?èw¦|£€ Å ½§ßåñÜÒ$íkJ¢Å¶­ôd¯¿$ï|ض£ž3cÒSÀè®gЯ?Ù®¿dÚžž{pVþ$f\ï¨ÅIÈT¥£‚çúax¡GåÏb’ÙãĨŠå?>Ô½LÄYôsÇŽ¢ŒÆEùGà£è'Á¬DÆVô“_´ÒiGñN F\ûQôÓ¶Jxyî뺞öZÌ8ûx9 ËÎ?Š~Š@ÝŠŒE? Z-Ë£ § l•R÷øcBRžqËMµx{n1ÝòÍ×úhVr$Þ¤ ½£ê'¡qÅ[ß«~Ð^õó¾m“Ûáø#ø¨ú+ºaŒ}ào©–×ë±¢ +š×ÝeTÃ'Vãá2ªÁ½(§Ëh!mZÔÈá2Tš†.£ÖiÕ— °v—Q ?ðÃeTæ§lßá2ZBÝg„_‚ùqN—QžLx¸ŒÊ½¢æî3Ú Ói´»×ˆßjÈî5ÂUÝéÅkTgÕÖ^#€^ïðU¶Äð¬ùÍk¨{`ùé58- íð-è*Z}xÍ+ÀìðÕðÉZ?Ì©õªÆù°6aoÄÞž­Š±žk¶p./v*BVÅóá6ú@cë:ÜF„Ì{¸…+´þpñ˜yØìî6Ô“›v–6¡¿å›»ùx,ç«g‚‡2Œ'd¯\ ÁýF›´¬/á¾ÿm|õn™2½”ÔÃȺ =`út-ÐŒû/ΡZ‘”·—Z1ÚçPPÛv<&`§×8ÜcÞ 2ûÐc)„ +tïK¹@Ë"y{îjrx‡îÐÃ=twÿP7ìæÂ0’ÁÓ?°»[i÷an^ççðaE’GêŸ"¬äˆ'º9ˆÊp-ñá *¨ÏÝ|xˆ0¹d5·"æ°zñÓÓCT®(ˆ‡‡ˆùœ+º{ˆ˜BÕ<2öð1±·x¬íÆÒ}Ù¢¯ææ!bb`7Ætzˆ˜}i©ÃEôI¿|¸ˆ6hçZwèpaŒ³¿ïÊöqP©ÝG„ZFóÚ½=¥ÞÆÿXJŒú²“õpÝ¡‡Ÿè>EüÚ›7ˆ£¼dˆÇÕÍ)¼]ù_‹1>E÷,‡£Ô™åE ²…^´·íÝQ„„QŸGsPí©‡£ùh +{q1ÑÚ:=EÌÚv_Ðé(˜ÍSs8ŠÊeÈxxŠE‹ÁtOQ¹Ú€=¿†u÷xõÇ(‡w¿{NnØEó\‘áZÔÛJT拯¸¸'Ýlk/[Á^9>‘Ðçs—òðÝ¡‡-ó>|EøÚ4røŠu÷ùœ¾"€Åƒ{w_ «ÏÃî+ÂÄu^|E£»1v_Ö²_NŒ? ³x¿qµËºvºŠ€x±ÆÃUtm„Odùl+rxаµÔ"æážÁ–t«Ïé)*—iíÅSô1$<=Em =E üÄì¦0˜‹Ü!t¸Š _z+‡¯ ;þo äíwoÑzx‹>àÃ[„Q¾›+¥éí¸MoŸùöœ )ÏÃ=}¿x#@›pyÛ7f’^Ìdw§Àt¹O7 ¬<)¿òW˜.‡ôîôõ¢9Ÿ9}E´»ôòÍsï|+B‡ߌ]±¿Î-Þü:»«м¼÷‡«ˆ¦[÷ßﮢïlysùú¸øâÔx[“Çs=¹³nwÝ¡{ý€W¾æ)l‡„¹Í7/Ò¯?٬ͤ¼IͳëC¬Ù œ}Y©³ï¡áO­š3ìlý@¨[¡»­õ»Ÿ­¯Ôw¶~à“â˜ö$nùÈÙöáíMÈq°÷|"ÿÍ£çÁê•·ž„¼¡ÞÞó›AE§Ÿ=@R3±\=Df×®¶žX¢XÌ »÷|¸AWÏ‡í·½ç K<{>ܶٳçÀQ­FÓÞósS_ÛÚ7)Þ£áèùÌüÂ/OEEøœM°¦Ÿ!MðœÅhœMY5«½çå={>p$Qö“½é‘jñ¶¦D¦#{ÓÎ9ëF9š>2‚m-nÀÙðáííDËßÛ=pxRºží¸ÍRÒ÷v\y)»gÛ@cÚæ<Û=ôêÏçz~kš£³S-oÿì÷ 3gM)ö~×É?»=Ü€³×à Ú;=ˆ›û–ß:=pV^.êìô Íf›tïô(‡ôâ®5ŽÐ^ŠLývÖ0ߟC–¥•ÂÙ;=YËßøìôÐ*@½nÌúìõ°Ag¯‡xöz ”­DÃÞëœÐ´‚£ÕZÌy´µzà OV#çlõð½¼ qb\-w6Ä $¡z4ÞîÎFa(½Þ½ÙÌi5}ááÍèâÒáÍFš¬ìôf£°T·pœ‡7™ÒÅìÞ쑽à½{³ñ‹"v_ÜÙ#[ǶÛßU¾ôáÍÞ Ó›½»7›Ÿ’£ùðfñ†Ùo6êaU‹öx³vOÚ½Ù€¦1ÐÛê[,LýæÍ˜¼vüîÍåÓSíðf#S:ãÌ6­úáù•ËOÚvÆw™£˜EñÅŽMz¥=Þy•4<\ÙèáºC‡+{ÜêW6 lixW6˜»+vWö'Ü]ÙŸ ½¸²y$ƒ§¹l®l,’ÊÛ?ÙÃóJž“N©ó\Çä¦Ú·uDXÿ{*)J˜]î½Ý}‡~ì;¸û±ñ±à¡››ÃðÓwú±1àΪÝ=‰f¢Ãi~lO?6ÒãE?ö‚frnµû±}Ê~ìqkköðc£tJêîÉ:üØã×rø±QV¥º‹{÷c£6PŸ>…Ãj —GúàfèTY|57?6Ê‹_²ÓÍZ-š³û±dt}ø±7è`Y7èðcã[9¼ïæèI¯o»9ºîõ9ïô»±Y~é½@×ÿù6/6¨£ç7o^lªÓþáÅf­¯áŒfób£Yñ<òƒa„Oÿª‡›u˜¼>ûþ**å‹Ñl^l–„ûÎ}Õ&zx±QÇèb]»7Ð5þs)®¬ùã¹+„îážC/ö|x±ùµüzÁ²“ÉKàwñgýêIþpb£ÚRô&k»Äñš®'6+¾ú°YÓÎØÐáÃF!¹ü ¥ŠšÉŠ6ËDJ‚{x°ÁÜûð`ìÑ‚Gw6 fuJ6 êÙ“æÁWgú‡Pv'ÇîÂfq#wœ.lœìéÎàÝ…ý)=õpaøÈ‹   6 r÷`“±¸åtöI{M¤ÍE¤¸W~w_ éÅßÌúo—3zóS*ï.lVѼ$Ÿ¯\çñ5ë×ÖåúÞ Åàq#¼ŠÇÕë•çs&.ì;òpaÀ‡ ›Õ 잌^–Í oäWÇ ™A,UûÎëÊ»ºzÆÊæ`á6ðd¢ÝÅË]ï.ñÓ5Ìz_¯þ kîpÚýÐ(64Q¿ ì·)ºW3†6}›°F1¾h8i_ØdLéRZ÷ú˜ø½º_ÏÓQ¼òiºú‘¥eÀ9NÒØÏ÷#c•r?ßLZäíçô¥IEŒãbâ‡FÃhEÝìò9%ý|?º Ýwa¾?kë“üÌ÷{=k?ßïcòóý>Æïd;Ycz„Tq‹÷Ä¿ï|?^"˜0öºÇ·ôÜ&õÑsxSòÿÌ÷ãg”p8÷Ÿ’†õøM:ãx?2–žò=Þ-KÙAÿ^&?ÞïcüŽ÷ã_"-n¼ß3´Çü|?þØÀÛ—ªîÄ0¾Ïœ>^}¢âçû‘QøÉÛÇ–öö~§û±eÚ·§ûÑ6xdˆ¸ŸîÇ;äYX—ïé~lªúˆüt?ÙY:~á;ÞLYNB~¼›Ðï“í·ei[Õù~üLeüŒ÷c‹P&~¸Ÿ˜ä;¿³ýÔ¢Ûä3Ûïkr³ý>Æïl¿÷—‰`þùa~°ßûn>sýäÆ-×ðžë'I v?ÙŸüBfã=Ù-}¡w蛳¯æD7ÚOÖ€*I}GûñÊ©:wõ;ÚWÜùÑ~¼„—fe?£ýØ’´ê;j7…¦züd?ÞKÐÔó“ýØØ.TGÞú6KûÁ~lLÚÙõìÇ&è|•¦û¼L­²ðƒý؈yŸÁ~b‘;úÎõûX´'ûý§ÏT?ñdúöZÆaœžìÇF !t™ôI3ÿ”Fûö#SÇi?ØO|Ùã{°¿lÌøNöcrw~²¯­¢Ý,ßÉ~âèôÛ¾“ýx±b™Ÿì'+YøßÉ~lBÇïg²Ÿì MøÉ~lÔÙ?ßÁ~/Ïéû±IƒýÄWè·ï`¿Éöûö–ÖTúÁ~¯¯“ýؘuâËw²‡ HS}'ôñíæ-zÅý¤þc ™i?Ø#;ݶ~®ŸD}]ég®‹uhµº¿ø¹~ãw®IWŒï\?¾#Nù¹~ò”T±â;×ßɨW} Zpø!¡ªŠ·ë“®Ÿý\?2©bžÍõ£¿is”ŸëG&Âççú}L~®ßÇøëÇ&æw®‹ÜüX?þá~ò3Öo· >cýÄséŠqcýøcI³¡ß±~|³bÖÏX?y€rA?Õ¤zùŒg4„3÷Cýø1XnÛ õ#£ŠËêP?þ D¡¿CýØqX?Ôoåk`×g¨›’fZ¿Cý>&?Ôïcüõ“ß­Ó¼>Cý~>ñÒø¿ý翞?þ§ÿë_ÿïùþ–?þŸý…k_•&ß”‘©I&í8™Vø÷¿ö¢zþä3w0þÇÇXa¤!’¸;—ýGc¸ìÿý¯ÿäøßÿÏõ?þ‡ÿñÿþÄ?øÛÑÿø_?wFå2?l¿~ÊY>û¿¶Ç,Ìl/»_ËW‚ñ?þõ¿üÃ7~¿ã{™*—ÙÁþ~(ÿv?àcüqÁÈ?‚Ðë²ÿh —ýÍÓûù±%fnö×RÅ^sÍûØ7aï;H<7þßî|ŒßÇ–Õ¸/íï“ùGc¸ìå±ýç¿Ö?/¿ë­¦?þûÿö/*°¤}9ù•=·™Â®Úø~©(˜z•;y-ŠBsߨ¶ælâj}2‘L,ÿ…¢þ nü%è¤[Øùd¹or/†IÓT¶‰ª~]€ÎXÛ çNx˜ÅÄGÎQÖv¶-½$RVù܆YúÕÇÈÇ8Ú™ÓÙ˜œûx¨çv›ªœ;óG‹®8Xª¯H‰EŒH­m¤Ô§|.'1Tþ‰cí/*aÓþ’m"òklä!6d¬trÙÆJc¹Ô4äsD÷’©SÛ‘\’ÎdJò3ÈM\’7vb”ç ÏÑ!·Ýù%Užý)ˆâ%ú Ñ+“J48uÊ6ž«N¶B·½Kªö•¢‘…¾—,DAÊ«eÕN,ÿÈ{Œý¶8ã®ïXe 2îƒXò9ÿÜ9ÆŸ£Oɪ£CwçÄ_¢_Ѹfÿo]’Mm4e3>Àýñ^¬¤ LOÆi¥,&>©“^±Ù%SVc/ò¹Lâ›éù`úK.Éù2ˆ’‘Cc1‘Úhçìd¢»n%PØÄ…½lbFh?/âŸô’›²)unŠ’ LÁ)×þõôâö(únd·Ðé¢Z$kÿ1M5æ5hÿ}²­ ûS_¼÷¦•8ñZÌ+¸ï³ð6¥2t‘–í­ŠKfªsáý²/FÆL¿M¾" Þg9?¼éä&‹RÖÛÓzãœöf_@ÑÝö³ãs%©¡#“<%¸¢Qxsá / ëÉâÂÔ«P‘ÊGÏ í.XfïF¸¼Ë¤îqGJl¢IOzEî+Ž2ñF߯ùÑÕHÕ`ìT[ÂÔoßO¤³®K7ÊÄ¡fsz…t6iS?Gc"Ù4 ¹®Ì…)bJü´Ç×5H”`°ÉÍR½ÓÝtÇ¿¿6Òü×ð ´X›—Ÿño1rÅ ”ÊŸâ÷ “ꎶϣ¶ãQOÌŒTÉäF…Á/XD¹%ý”Ç"=KÞ×m“øó†E:[þ†Fíl…ñoìg y4êR,uC£—ïÐHo›ÕæohÔd2È Dǃ‘^‡Ù÷UÜmD#ÒŽæýsC#؈F”2nù‚FEjžîhD`ÚÚŽh™Ör…#JÚhÑ+ª/ŒSDðfâðôQѬ~ŸG#pC#ª×Nå4*Ü}x#Ä ‹ˆÎ%b‘^pPbé†E{,b±bmý€EU²7,ª24ë†EM¤òïXTE ê†E:÷ë†E•€û–®Âœß ¨JZâE4€"G$ÒØdýF$Ò~ê|ljtÙp5ê ‰,0(²è A D!Š2 +½!QF(C"-~ºáM¡±ŸLwäø5Q@?@Qã^ ‘#õ EMÒ <êÂËßðHIÜ"uÖyG$UŸ»@ÒÉ7H¢ Áõ²~õŠg'IDÜ­u…¤!ú1÷Ò~^ˆ=$ ™Ÿwƒ$â’Jý’H§gµ+$?%R7D"v×Ïå|ÔeŠÃ ’:î6B’æªîÔE#åIMÄf"$íS€:’€¨‘hµæû‰ê†ÆO$s‰wª˜ÜMU0úIÔ}^Ó’ªÌ׸A’Ž%¤žT#¿ˆIä¶ÕäA©áÌu¥&"Ã7PÒa7Pêp·7Pê2OýJ4~0—+(‘RÙÀº÷ ÔÕ…FLê2f÷†IKèJ]ê%n Ô€ÓJ4ªà¹œô æþÃùˆ¦’§qE¥Š/¹œ*|xD%‹ •*îòv@"5=iyTª’+¹ÁRÕ þ†Jûwïw…ž}·r¼™î ò[Tš ¡õ­Mj•–’—‚к8IÁŒ^-­ê‡#“,Í!MlRòŒz]:mW*û¬üi‘È‹¤ ÇÞ<™š›:=¬iF±;*êÖ_b⡼ñʤíZXoà/¹d—HUžô’Ç^¾©Éç(*½dbòk›b)òJ“÷dj +”¢éêÖIÍ„ÿ¢o‹|y“½ß{J^.S6N©µó~Û‹WR·Üh`2í^"ò9)pM¾_ÜõDÓ£ïT7›pɬÇÁ*÷8VèäA‡˜X)‚w[jtI]±©t uÑr†__Ã’x#ˇʪxé8ï?ЖBÓ6ÿ’¥2ÁÈØHú‘¶Ú¬]>Æ ë¼Õòâà¦WÆÏ³úhê6ûª¼÷§x–iu pÙA‘|ª®!ñ㢒8ÚqÔÚ"¦>uëPÍñÞû“¿q +‰èŒr×rn¸™Ô/P&ŒV +yÓÒ±žÅ‹­«mvýaŠ[hêì½àÆ6²°3yZÎx3< „$EÂû)SêH–…Åæ©ë_ÄSž÷¡'»/œlOñK$œHÿX‘y¥ä–x¥,¹Î”>Y^Uìz§Z¹)77‰–6È02ìÝ7ås,ûÇ •·ó^¨”çgÓÔ‹7Œ4©\QO M÷åþÿ•G¤FM4¯gr@×é9ʳn,㩇cê)çèo@éWý©IV!IÖà )ÔWE•±aÒÊà¡ëŽütަ魀ƒÃƒ}wØZºÇ.ŒÏ Z¸"Rqd¯¸¿ƒ•[üñv`YwûŽož5±tóì»ÎáÛSô’­éy|ÿ8þ\“ ÒñÆœS×+¦U.FÙ ýÿ€¿ž$Ï xÆ 1=ò „y啱ù <ñ~'W䡎‡|r0ëÜ!}ı®¸ci¸ˆ;K&ßqg!…`¸Cš‚©^qg¼áÎ’JÛî,Döw"°îLì lQ§á‘gfÜ#ÏÄ& ÏaÑ7äØ"7èÇÓzè€Eä'ÇøAÛÇí}‘gÈhµòh‘ïyЀ—ÃA4q÷ÅÀC:›šw÷ÈC3æ¼"Ï„ƒº!¨‹Þ€gI/ê x‚Þò,½€g À³Ú©ë<ëÑBÀm©I—·Ãmjàäð,-縙$Á€‡.)ñ¸Ïþ“:¨€º"VWdòà3A/Gð1/vŸ‰¬kŸ)² ðQqØ;øŒ“wõ3Î=šîXñ[ðéÜê…‹ëôº§º†/Gå@=Kä)dÜþ‹ž¶ד¨]ȸNjCBrGÆušGýHHȸž¥É&’q=ãdȸžñÚ/d—"‹#ã:UñW‰êG& ó/ù¡ž¥fïBƱ »ëKÆñ%e+.®gÑ—¼pq=ã$ 2nÿ% ­óCôp{’ýæÈ¸žp·Œë4lºÖ?®dÜyˌۋBù}GÆÑºXvdÜ_º(­”áËÆõØ82¥ O÷·\1I@·%áï&ãÛ"·à #·^Œ›#ãκ·üЇɸõçZš;rdÝ›¬ßKµma9À2®?‡–udÜ~£¥ˆO\m\ ©שn")7ðåâz’¡0W.ŽžF[ŽŒ£KJ¼È8Z“òHn›:iĸ8Z’Eœ‹Pqôˆªr¾R¡“³†މë$3•pLÜÒß%=´d”÷ˆ[¢¦ð"â,v½¥‡¶Q6r$â¶©¥·M’‹»1qKT,.t-2ÉÜLwù5&e¤°o˜D´¯åsäA?*$e‹þ@RI!‰2~éZ±Ð‹ètÜ!©€¨¤3†oTÏá#®Þ* H7HªÊ³DDªç¤©šÜ#R}Ÿ"UdÌnTEHz%Ÿ’Šá]!© ø BRáöë"i„»#RF¦:"RWà)ˤ¯;"¢FDÊ(uŒˆd7H2p‡\¬¼ä›éüJIdœ÷:òèù^@G¦1×’ºJ^_ é„ ’(‚[+B’>K–{ƒ¤Œm!© vÃ$’`m×:ZAϽ€®ÄT7L*ð¡“H0 +¡ŸÃ¤‚cñ%AD«~ƒÒ^•½×7*åãŒB‚¨gäE",Qmݽ€ŽÞ¥|IÄ%SI\²`°tÖà–xW¹БiÞ è®ótô»Ÿk]O"'|3ý"¿¦é&"°M·öé‡GGÓ­ã:‚­ñ ÉuM’I‹¸HÇ€¿}o½ÌJd¬R_ðBòd12%)J)êX÷~à6çí;P³Mæ„Þ;ž%.•/9ᩪDÿ¹­’^ÇäÙÔ­0”5·iïî„%£ž†¹Ñ¸3´Q‹'YÔEïÍ2x·îh£©I;¸HSª1­!Z{­ï®uEr–Ù¨Ê= 0on#Ë%³æˆëJ‰n×Þq»VlÞ– æSå¥L<ÁíS‰D eð Ô¦À8'›Hì—äR>±ÊýÚ»è¸5ããõ"å”:û4RÁÔ—«iÒSeÙW]xV=ÑŸ*©µ9éš”,aÒÄÊÓã0A@ E6Uk®x‡˜ê-÷ó·\r4”$¼qj›\ÈͤP@E6"‹¶¶WáØ–…ØÒ´8uò ™° +“,WJpe6‘¼®hí€MÂԲݪޜVQ®Cý/I ‚ï»w'šD¯„bð(³¶IŒÌqÔÆ¯Gw¼–ím˜K“Vnõ=z“&䟒ø€·¬•ð¤B@[¨ïýÞôcz¤hx"´Y¦˜´1„*¤/ÀÞE‰ŒYîŽP¡ôc)÷¸X[CNjü5Û_›ƒaiAõ+¶› +Ÿu)$¦Öu6ÙÞ¥×J<Ãs~În‰hì-_Ü ©K²7˜ø­³®ð¸kü­Û¢èq´îHÝõÍŠ‡<¬42”í°c¦R$OãsxZ$K€ý±”ǤJµ}e£˜MVöE½å|ئŽ{²Ì¤’·JÂiOÃyÜ.;ôÁgíšxÖŽl)>›¥™#aåD2%ñ™„ÌØ´q0c1çVôÔi}íSÏ}b“õ:J8N¨”ŸÐþå¾å8y3ÝÁò·è›äê/è›Ñ" ‡?6YÞðsøc“ž¸ÃáJM¸Ã›º$ÀÜáMš‚ ‡¿m¤#ö¼Ti°©aQ~l²ž!wøÛƬ!µœýøJZ¸³›ôvÃÙm Ÿ³Ÿ\õ†Ÿ³› ?g¿¿åvµ°™Ï~ü‡ŠÆ²ÏÙOMÕæèÏá©V+}ú–œð>‡?yµ( u‡?YIóŸÃ›¤ ÈýÞë/œýÄ^çuöCCŸÈûð'&’ä¹ÂýD‰õ§?6Mœ¾SÇÊ”ÂÙpü“µ)®üM »ã›VÒÄÒ÷ôGmZÚjêlÉRsålÒ´E8ü±Q+zBÌH&9»ÃŸ\¹¬cžW¥½ïßܑôµê<ú‹6šèéO‘TšºÓŸlÞg^Ê4ÄAšÜéOv躕iÈ«Eºùsú{»±púc§þ>ý‰)éÑæ}ú“Eî.à¹Ôk ‡ìòkÇ?ÀůOC¦õÝOã}kŸÓߨ·¦ÐêQwœöœþúé]t§¿mêHñ»ÓßÒNø#yèGc wø£Á\?Üá/5ì¾ËáŒr³8ü¥vÒîð—|¾;üé•”pô‡¿má,ÝåðG¢Sh³úþøŠõÔ¸»Ã_Ò^è°é‚²{.G?2JI{8úñÅSwô£ŸoEóþèGD¶Ž~ô&äJáè—H@PK°ÝÑW„rŸþèס~r¯£ŸêÔÝŽ~*ñè7 íq;ú $ÐâùNÅ¢n¦‰ØövôC b<úÍ#Ûâ~ó‚ãÑÏ:öâÑo 8*ýbìÛÑo pg¿Ž”\8û¥Ž‚àËá/Ymu8üÑêÖ4þ¶éþð·Ú4î©AG!œþh(ÞiæúyÊ^FÅ¢z%iÃçõa»# ý2 „Ã\8N9’ãn†# mõRþ¸Ÿ6J›ý tS!N€§ŒxçpèN€=³· ÕI<÷à8lŸ?A?NÄrñ858ŠPdí·à@”OyÐÍtÇË_09îzaÿ-FË ;n ºâ]o“ð4€Ûy€+ÊE#Ó?í ‹Lbƒª,พ + +Àå F&E­ØU&ÝT„‹_.bAGü-¨W ø[ÀLGü-¨)¾áo9Àçñפ±"8Í8÷ˆÀT,‡À%7&=õàŠÀ¾%"pE +3"°-‰ˆÀÍÀÊ0úœ_øKA’Š¿xümÈAGüÝÏãðmˆh"Âv% n–ŸÚÕÞž6‚/©1÷+övô5Þ°×\"öZo\Ä^Š4Ký{ÛÑðØÛpøŠØký¼7ì­'óì±·*¾Dè­è›¿Ao•¹Óè­(ΈÐ[enÑz+˜tƒÞj‡`¼õµw=ò’£Ñëxä­ès2ä­H_8äÅC“ót„Þ¢$BoÃý½ LC„Þ†ý =¢7äí8`Däí§µÞ#oG•Ó y;=îvEÞ~ØPBàß ·ãqE|mH¸ÝLw¤ümáͪ(vºÞ¬ +ê.Þ¬Š®Px³*~ã¥ðf[ÖÞEWx³êé««ß›mµ]¹×mlê÷bÝMC&'ÖÝ´³cÝMG»ÕÝô—Ö¡«»é茸ÕÝôS)àën:Nf±î¦ã¥Üên*QwÓN“”¯»iÐË +…7«"Ðð…7ô´ÍÕݬ—A¨»¡¶aWwCë ®î欿KÝ s Ü« Ôà +oVA})¼¡Ÿªkè®K¿À'›V+WîUŒÃÚç>•7ôôEy0TÞ w+o²¤±ò¦á|c•7¤Õ^~h‘£µiÍ>UþuŠ –Þt´ÝJo†ŠkÅÊkHŒ•7x·Ê›qRÕUÞŒS í+oÆ©ÅB"cåMG;•ÞtHuœÒ›nUоò¦£,VÞ˜÷¾UÞ4Ä ±òÆÂÁXy7v+¼iˆ¨báM;;ß²ܡBªÅ¡¸fÕ#ÉMw°ø-úŒ +çÒŒ0êe¸¶cò¡›˜ÕøD¦Tþ*äË\ZL·rÛƒnµ\ŸNŽ\ò¥Ëò‰LÙdåZuKn^®¨ƒ×¥’xi%1?­mšÏϽs3Á(È2’Çf׿ϱøÇ‚N3p¹á%l²  >‘½c¹"w¼ÎYÛ5LŸ!»wä?öšØ¶h^>ã¡ýßû;Å…¸BmÏ©{—lež¸Tþ‚†=FlúJ¤„ÇóØÏArå!©®Lc~ªÜ…íå98‚¦æ}šZ…µõÌ‚Ñp¤bÏ @¯ñÁCS­õYKTA1ÀàÓöÃý£@|A~!…«ia˜~Œ³ÎŠKjÀvS.ùt|.eï*Ž&ñnrGЊM¶zQɦñÊ!Ây¸`É•‹i;R“E±£‰)¥ãL w£!Ó;<8B¼ Š›sá'_ö—ª'm`/*Ÿ@zÉ«™sV6`¥tCÑtvóyû,Ky½Ä¬deVR1cåKç‡Æý¼—óÔ¸cï3]1¹ÏK+ǰа1L‰.š~Âà_ƒz‡ÀÆ Ô;Ô]#¨S‹hßzÇZ¼zGAõŽ|vu:jYJõ†–ÙêíôyTÿœÃ<ª74ªDT·„hDõWþ2¢z…Ðo„õúR§p¸^Ê^öú.{À?Gßc^9ÝßÙ+„‰²[²5"{;£"²7hGd7N0 {Cgå ÛÛQèñØÞ¯°Þ‘¼Áz‡*}„uâ#¡•é`½C«ÌÁº^²C9ÉÃzG6°n{æ†ëaZÄuâúU$óýõ×û¼ýçšï=®7œÃn¸n²•×-6\o2êŽëí¼ ëE\¯§ãƒëº -êô¸^Ñ q½ ¾ázÁ<âzAf=â:zu_°^íaýeò°~.ôAõ¿åŠwH/ÇxL/GÏ&bzQ]«éº.Ò­™úé}½Ò*"¤·S$!ÝÒ0ã,2íÙŽþҌގH‹‡ô·& ƒôᤀEÜ&y¿ò“éŽÀ¿f‰_Û.²Äàâ#IÜÎ)Ä“Änn$1yÜ%FOwt9F’¸Ÿ™#‘$î¨L‰,ñ8ãYâa‘$¨‚0’øÕƒâI≔ù$ž8mF’xÈèI<ðNn$ñ@R$ñÐÊÿÈw“ìðq?;ÑQÄý4dxޏëÝ(bËÌDŠØøøHÛâ»QÄÆµyЏHÝSÄ ,Ð"î89F˜ÔLïòjô¨¬r7PÄ]©”È÷ÓHé⎛C<˜‰ ñ@Áž1Äu?7†xžêlaˆ'Ê-"C<¡¡rcˆ'"‘H¿t8=E¼,Ÿâ…&óÈ/ˆ"E†xœ)ÖñüÓ¥Fޏ5(O÷SëM?AÅo‹ƒ¨¼O(ÚFƒú‘Å8¡o^–LõSôÌÓ%ã[3ÍsÇÖÌqF·ÖÌ[3*.bkæ@ÿ­5s `­™ãÔÒúÖL+I¼T=ýÔ »ÖLÓŽ­™¥è—ê §ŸŽHßšI¹SÕ¹qÕAdšë‡ê Ç@&¶föW†kͤS—‚ilÍÜ­}Úši¹¦Øš9À-ÅÖ̉è%TÑRBeŒ+¢•œQ‹ÛìJVéëêƒÈ4!!ð­¢–\Su÷%B§C/=&œp3Ý{O´{¯£ +×Õ‘)_k„žuˆ´P#D¿äQõCW#Ä=‡ãZ#Ä­Èõ‡!ÚÖ"¨j„¨ùÑ´§ïÍœhL¼5gNÓÆæÌa4§ïÍ8Ü»!manh¨t½™ã´ªøæL¦¼thŽSa šÝ€±Cs¼¶°ïЇéñš6ÈÄ:4ò·Íyć]‘=m ¢pEBôŽšú¤P$D{•@®HˆÖǸ ÑB’2ŽK•Ðc2!¡Jèy+Ç|«„¨Wµ+oª„hÁCÛU =&*Ñh]îP%ô˜k(¢.~I ßLwÈüµ< «¼Pºd´Žó/¥;“iõ9Fw[†”¤]Ý™Žr½ctg:ÒÈŽÑÏiµðŒî¶ÙŒÇèn“Æ€ÑÝ&k] Œî|pH Œî|ÎÀ.Ïè. ?uŒ.ó% g–Èè.üÊÈè®#ÕÝuTõ•Ñ]/™á¥@ê82º ÇÀè.(ÜFw’ hû!W;!·]zÜÐ¥øºÛÒÀµBw§Iž} ݽZ¬9Vw&¸Â «;BßÀêÒÚDó°cuióÒdi`uiÁc”‰cuy/4(ËaÛ ÓéHÝ™Nɾ#uÉ4nÌí÷Ûƒ²Ýí¼Sš&>HÝùœñÑÔ&H]z]Vµå2!HÝùœWáH]ÚfPô¤î:u>‘Ô]8âFRw!¿I݉¤ëÔV-á9]:4ké¯çtç UÔ8FR÷eò¤îëJ1W;¡2‰Ýy¼Š'vçnþ»úU"2»žP{fפlnÌîBr80»äN}:fw>'ÚÌ.y ä_m¥ÙÔ?ÇìÒ"ÌÏÉZ2VL ü2»¼œÛ5YK¦¦(½,зäbúsMÖþÄ¿FvÌý¼û+î½µCìkñ†ìåŒ<ðÈžQe‘=cÐÅÙ3b…ˆìùŒ›ñÈžOÕäÙÿ–W³–¶ìyd'ï[®¹Úi3»/ÈN.ÖÞ~‘}¦Óèçý¬‘ ²“È,ÈN‘ G‘.´^, ;ý$‹÷?ÈN8ÖïÀž°nÀžP+‘=£u< »‰ZÜ=cGdÏÀ̈ì247d/ #²´oDd·|Ú¥ ‹ŒC³”Ù N{@vÚ7&Z롽àv#´${"D¿¾>äké.~?—ßøý…vÚoí¢º«/¥£ûÏC{~±qY·`ƒæY„ö|Þ…‡öt^¯ƒvZÔ(ê Ð>Ó‰<´³ƒ×T®ƒöi“7.ÐNHÑR'‡í„>垯¥(¡<°þ†ž6‡ílÒ ‡íï+l'#w¶Óƒ¨Ãöùœë´¥£REêè‹íNM9l'o†%`;9”rÏÚ’Gwhϧ½;B{Æákœ•f£=´ç3ö>B»Í~ˆÐnË9B;­ýÛÜy½äépø]þ¼æzâ_‹*¥“ˆ¢JIuV¢¦R†óŒšJ¯í5•òqž^S)#¥5•2†àÞ4•2b¨©DŠ/7A]6ÙÈ›¨©Tþœ6OGD•*z4¢¨Ò«i/Š*½Úö¼¨Rc¢Jå´Ç»œ­hάa9[‘•é—œ­<°NR)£¶5H*eìÐ(©”O™\”TÚ+¢ÞôtU¿ª\’¶ïåwÓTJ§‹å«©”^NS)¡ò⦩”Ñü…“ò’ƒ¢Äc!xÐTÊb¦ªSTʇ¹òŠJgó›¢RAÈ•ˆ¹|Žž®¬!­œ‰‚JõÄ®"¨TOà *U÷7E¥zʈ½¤e µî$•¨OE‚̨¨ÔÐõ•ÚéòŠJí(Pcד½òŠJõíUQ©¡Q(*UôëEE¥ª­LQP© læ&¨T@¤EA% ²¢ ’ù°› ’U”GA¥Œ@;*å3Q' +*ePQ5)£‰%š~‚Š_cOãpÞÍØ>#R"ø$nàS‘¦‰àSµ%b8~@žŠD]DžzTD<ò4´ûÞ‡â3èC òX—oDž†›½!ÏK«Å#O½‘§¡†þ†<íU{¯E—m„ž +>+buŽÕyÃžŠ¾ëˆ=åèEì)gê¶Çžr´<öØò ã~ßûØcOA,±§€a¿aaz럾™*+@õäG𩯙¾|êa»"øT ø"öÐùD1K±g/*Dði¦Ð'ØÓѲ±Ç4"nØÓO©«ÇÊÄC\ÙaUÀ€+yƒÏßrÉUÑËâÀ§C…/‚O‡§=àcM²|:’´>]ƒ´ƒ=M±;BOƒ‹ØÓpP¾aO;õ{ê©AñØc^ì†=lUÄžúªœùbOÅTâö˜âM˜rê¿£é¿Æž‰“Ù {&–VÄž‰m±‡Æ?ÜkU·qA0b°iéŸu²O~^cFüR…ß~ʃ’Ï ül£)* üì¿ T 8øÙ&­’¹ÀOyÎ~qðC—„H‚ƒúþÔ~8ø#1?¤—ÝÐû…ŸuZg=üØã? ê^~&¾ê?ó(zø™hŠð3Q6{;úLâinGŸùâ!üLl»üLôŸEŒY?Ì +f“’ô7üY¯1ÂÖáý=þ¬sgöE‘½ òš3"T^ T Zœhf*éè;9* ½N* Õ¬J:ÝÌJ:¡Y8þ”|:¹#Ç‘ 5Þº”é<—órKR’¢ûψH;>®T‚hûæu=þÐU' P1]å€@幂ù°ø,LŒà³M%_> sÀoà³Î¸ 0?×Éüˆ¿zL8¶ð)&\À§Ø,à>ôV¤öê>ü6óEMGö L|J: ’>´Àô ì±'A­7bO†ƒ½aOFhØ“O¡ÇžüêUØcÙ„ˆ=;#öd¼”ödlÅr ó6nžMgù{ +Íåº*™Ó8ØC¯°°‡–<­Ãžƒô{μ`Oy‰£°§˜~ÀÆæÛ0DÆ‚†o{\9rX’и`û]ʼؔƒ€=ôf`Éc;Ó»”9½}`–bOF6í†=í­ÀË¡Eì9äm„ž¢Cÿ"ò”ר]‡<唕Fä)‡LðȳMJy +œíAžrD=ô„³=–è8ГQh¡'ÃÉEèÉ(õ¾aO†ØKÄž„ˆ3ù± þK!ü!S¿ œKi?©’K}nFÙ$ㆠÿ¿ÅŸjÙí þÑP÷Ó+A)gÕ©d’(Éš%j>µ]®Y¢š÷Í5ëœÉK¯Ä¶e´d»^‰š ¯z%j:s©B¯Ä6jˆ^‰j:C¯DMG1ôJÔ¥;ß+Q2#¡W¢>š ¹´Jí¹O±ª¯C™ÛÆô©v“ÔK*È„V 2- Gø¶JÐïLjÖÐ*AK„úÐ*q^Eh•¨G¯Ð*ÁK¢_¥Ì«yÏÐ*AËÎj«D5š=´JIN 5ªÉÝ^Z%¶QÏ,¥¶I£òhª/ó˜HF3â:%j=§P×*QMøæÒ*±‰– ‡V úýRºZ%è¾e)]Z%èñ¢æÙµJÐKéé*e^3˜çK«ío ¹r­5ƒ½´óŸòëm4M«o¯-Åv—2¯é¤X}¯DM‡»^ ú zŒ\¯™úÓ¬è—Mw½tG˜–,½ÕBŠ‹ *mЇßV‰JÒ\ë:̪”_^Z%ªMI&bºpßÒÐ5¡àNë^ÿ¢AEÑà`ÇÚõ¸’²ï”ºdÏ··ëS±;´q{CÆ€Öe%?¨a + d”í$h EÑ!PEh}ÁÝj)»®Õêo¦;Lþw_2]wëKýâ‹»õ• w=mwM¡2â®ÉGÜ¥8¬þФH¯-óxË@î÷¥¶ endstream endobj 83 0 obj <>stream +·œò¬'¥†¼åèþGàͧ¹ÖoÆÂŒÀ›O¹uDÞ b+"o>}y·i¶€7£}/oC7Cé¼åô•(ðô«GàµÍ·b¬^Þ½’ð)¼õW xmJÞŸÔO·ÉÔOoÀÛpèÚ¶¸™Î·àÝF8zäm¨&ˆÈÛŽ|WDކő·þE¼ ý y+2Xy+˜žˆ¼{{€¥ˆÈ[1ë "/¼jÞr2b¡I‘¼*ÚðPx_"1x Èm^‹¼"ð–×öÀ[Žè…ÞrÊxŠÝp·žËxI< ³˜ðšõ x+R x12Àp— +ºË°»]‰é—;Øm¨½õ°kº47Øm˜Ta·I@ 7Üm§®×ƒ«‰½GÓO0ùkÜ]¨Æ¸áîz8qwÁÉÅ»^…;¸»Ž –ÇÝ…nùˆ» ­í7Ü]ˆ’"îÎtyÜ Mo¸;q3ÜH¬Dܹ¼áî„JÀÝ|XÄݪ¬îÒFÜݦyÍÙÓ!™qwü‰ªg‡º/¢î@ãÙ u'DCÝùju¨»P/QwaXDݲ*¢î°Ôm4Ì6ß@—,2‰%€n³ÎÓ è¶GNÖfLt4¥˜eÙž#¶ì0—L¸%‡¹dÂL”€¹ôS:„¾˜ÛlrfÀ\ºo-`Š»àu"ä.°•r ë¹ëT:yÈ]P‹‰˜;A Ü»g€¹ót{Ì'­0wÛJýv'Š"æÎ×öõ˜;qÆŠ˜»þDîBî:dYÄÜu:ü=æ.Úò» ^s\zíXt»Mv ÌmÏ9$Ðmsè¶wî ºÍZ/ KFä?¿˜Ûžƒ‚}ÈÔ:ëÒï¸Nò’ñÜ„Ùÿ"‹¹Í$ƒ/˜KÆau«oÌ%KCG°»ë¤ãv r÷_LfÒAnKg°–ƒ\vUÐßö»Ñ@zÛA.½{SûþB.­"‘»@î6šXO‡²Á!rÛóÚ.D´m×!¬=Ú.´TÜÐvA³2¢í: n_å#Ü®Óåw¡"1. ÀütÌ¥GUÛ{P½†§\u}—×Ã]ЇVQ¿s·i—ÜìJ*.7aöhDܤB÷7ÀÍB‰°Jm ÷SnËX©7ÄÍG Ù#nþS['<ÞæsÜx›!šñ6czLÄÛñà àÒ~.Ú®ë·Y¦%nKè r€û·\Rûúà²;í7¼¥-ÌgÀ[ZmXœ_¼%œ@¯®Ã[ò³˜hâñ–£“ôÖeñV€[²ÌyÖE? En醯G‡ç`¼¥‡6ï:<ô°Ñåw›Z)? ë¢ÕŽLÜtŽ¿ +¸ÔV”Ò€›‘Ÿˆ€›Á\yÀͧþ4n>õAq3Ÿˆ=ù *ˆˆ›Ï€I¸$Ý?烈ò×ê«&æyS_ð¿t'™;l÷ª[*‰q-“Ê‚¶éYY§ö˜BÐ>¥ò#žã±ÑfmmOÂ_~5PˆÊ¥ã$a×Ò»~•Òö뤸e2Ÿê8¶1×ÂFiåß&ƒ['ÁO %±_RyN=ð%ÖMØ~e¨Ê':ævˆ÷0þŒ®/TëdhÄWÕu,¼Q‰ÞÑ KBPôޛσ|cWÕ¯ýò†èQ žºý)îz{—ª*kÏKæZVÂØ0ÓäsÖ® -ýH¦(ø=GµÉ“œ¹B1ñùÓ&ɦŬƒ+};WP ×ͽ…ðe}ÈuáBº+ÉÚ£Þ“jKTmŠ&=‡ª¿M{Sˆî$ù‡”Ö‘ð—_Þ!ñä¶ä¹ëÍVØà^5MÓIÅ åH¹B¾­6ÕYUÕ÷ÐûÏ^C]ëþ#Ë äÚLŒUU+È݉€Bi«|Ö_Vý¨xÓoˆ:§&WÅLMº™îNù×^ÞŠÔo^~¡á9zù… +½èåש/Š^~iE ^R±0ºù…fpó²©Ðžòqó²o]I7¿Mé´287ÏFÕCpnžMZ¡åÜ<›š(ö:‰ Ã`œ›×¬Náãæe=ª)in~Y/•óò Ó3¢—_>}óò ê(Á˯W™xù-¤››ß?@䔣›7í%só  àæù¾µ«Å¹yqVšóvóú´´Ê?*~>¨·ÿúy¶à~ܼ,ˆs:7/o[ÊC¢›·ÆôèæóÑËŒn>ƒaŒn>£v"ºù|ŽÀÑÍgœâ£ŸÏq¼ŸÏGëËüük”÷óYéÏèæ“‚kðòlÓNܯ›g‹–ª;7¯;S›¡¾n^^¤Ä2âæ›fŠnþí5‚›cF=ÈÛͿןsóbºö8#*¸uˆ'¼VŠüƒSþµšuC9ÆMÍÚ†{¶ôÖD3ºkr &Ô…ŒÂo¤í­PäAÖ“[òJ*¦ÂDáSâ§4+ÉõáÔ20.¤û¦PA+°r2ˆMvåTóbÆ+í7¬Ë®5Ù² +0ÝïEd.Æâå:õµ›”µ'òryˆáÀ% f1 >Oï ЛþxÄí¬½\t“©0>m²ÂýU 8›_ud•ëïçþß]>gº J9í-Ý“š$­Üà“v(W'~¥Ö‹6ÔíogÆeöô+Ñö  +gƒ01Ìe•-´÷ü^ø¸¤U¤W‘¶Ù«JD`mXgßçaöJûÿwQqä!Ëa¥$¼hÓz.Y³ñ'ýÜz4ŒïeÐ3ÙwŸ’.BT0.bˆ—ZM…qvó@wD扃b’šB‡Bl*2ˆtª /¡Y‘fßÇ2áSU H›G0ÛFID‘k›QäL|I›¤{ûœ:½«IzzoºÙýÈÝ¹Æ +2‘'TlΦÁn«lD¿áQ®3˜á«lÑå¾UÌq@ímGNE½‡Ö®wíêé•®io§©‚Þ”^g©úvša>Ýbz†$LI]ÙÚY±„&’©ª[ן&ÐuVýχ·q§õ>¦/ èå‰K&ÈŽˆk$= ÊI«}ôØd)_' 'ŸÃ8Â’DXkH™0$-3)¿_ïh¤–¹h?ÏÜ0aÞ6!Ãöˆâ UNéÝ™‹š\wúÕYL6®lÿªê¥lÛ1+€Wußp­•7Úöž¥/lOĵôä}a®ÄêEµô’n´š•ÞéQ“–žìø%8ÒÒcý¸Â2ñzɉ&æÌ„ýØÑ[×wÚҥŬ6õK¯Á÷;Ü-½¼lÈ\GF ÓR™ï21ã!µØJ׃˜üÄY¯‰±§ž»hºƒô¯QßæÜP¿#X¨ß_2ºõm\÷ õ;Cý޳IDýŽ +ùìwôÇEØoÈSì[åÒ öm•EØo¨`‹°oÕD7Ø·1Ðöë)õö°_O<Â~Ūˆ°oêöMjáûõU’â`¿âÕGØoh¼¹Á~;ÍömþJ„ýŽ#ð öûQÒõ°ßA¬Fاs™š"ìïÕ‹ÁœöÇ~+hós°?ê¹Áþx`r°?þ¼fÍØ2O áQèáóö1-{¦ùªm  ?q ?ŽÆ­ýý—ŒÎMúV +A`fýG{ýŽjÉúœÒ»b~GQúó;vGÄü~ ùíHM|0_c<+<ñ˜o#¼"æ·W±YÀüö*Šq˜ß´#B~C²øù ã'"ä÷ãž<ä[@yƒü~XÛ¦cr431¿ciÜ0¿¿æ“·ñ˜?À"Ý0@·'bþèDÌèk»aþxµr ?N5¦ýíûÛê2£é'”þ-ì§ŒI<ØOÖN`ŸLÆdaŸL¨Œ °ŸÒ+°ŸJFìo“–‰\`?Yk`€ýô š°ŸT~_`?=§ûÉÁ~²,x€ýdLâö·1Tö°¿Ž–†‡ýufGØ_¯B:ûëè„xØ_§>Âþ‚³Œ°¿Î‰ÅÁ~2 +ëûô,Ñé`ŸÞJY×Ó~JèvºÀ~JÐN °ŸtÀìÓ*´¤¡‡}ZõG£ìûd²Éæ_ØOç“ ì§ŒüM€ý”_S²¾(2êL/¸OF›Êè>W´òöj±òZûd„²œÃ}¾"É÷éwL­ +ö¸O÷"Àá~zÉ;ܧ'‰©öéÔ+êÓ+E®ÛÁ~J T"ìÓ"y —ñ…}r0¨r°Ÿ¬RïrÔOÏkæéöÓsBiûé™}}2b˜…ƒ}º$4öî“ c·îÓ¯DèîpŸî¥î§täîîÓ^ÄP-Æý”Žcu¸OÏ$jÀ}z—mÜ`¿“*u°O+ª÷Žú)cHv€ý”_ _Øß&mvºÀ>-|”Á:Ø'S]FýÀ>™Výá´Ÿò9ö:lO•[7Ó¥ û3io°_Ða¿œFûåTÏFاlËû°Ÿ +z#ê›»¡¾õ%FÔÏG"_Q?Ÿ2ˆúù4vzÔßîIJ"êç“Hˆ¨Ybôi/hÍaþA· 擲nð/æ§t„ýæ'èŠ\ ?¥“ësO¡,ò‚Üäg¨{EÈÏèS‹ŸAmÞ Ê4ñ ŠR#â—Wþ8 þ^Óõ¹ôSy >wˆ_M¸!~E¯›y}‡Ï¢°7įHóß>§¥¿WÓmæó_zÅXwˆ__ã§â×S{ß¹#â×3óÙ#~Á ÊAþßúr†¶•zÌ/¨æ‰˜qȇzQDürjº=âgøÄâçS¹çÿ“[ÿ"¾éŠÝ?Ÿñ3*w"âgHðß?Cz2"~>ªzñLÞ¿¼j°ª:îu?è'AsüѲˆø,VDüŠÁ÷7Äߎ[Ó½ð+ê¬"àWm•¿á}…ÔDÄûŠòĈ÷áÙ ï+j'#¨Wœ4¢é'xþmåVÐ)¹ ÑÚÆ„SÔǰ)+;:/íýb[‹R0ã¢(K*cdÚ8-º´÷kãáíÍZ7ºjòeS‹Ñý†fSÇ øÊå^û/Ö2—äû;ír2½¦²O^4}¯š 4;¦-ô•ºXl²ÒùÎ};˜*³-ÕÄ‹ªçíä·­3¥ªJ!Øvz<ŽžL:J£ê_T͈?›³§„+YH²8îØaÂâ1t»í2›-­Q¾XÆ|ž›ú&ªà +¶Td =íZg2K*­ýÃŤìÅ^‡7å6S–8pä (æÝZZ+XVÏ«ŒZÑ[Ócs—x`MõÑif¼:/rÎbiE¿“œÈTlåËÄWì‡frC¥Z?[Ѥ£/#(%æßráÕŽo©¿ƒMZŽLN¶q)Ðv;MM(!Z2VlC[²KšØMâ`f?y©{ <ª6§ §Ÿ¢Ô» ÏÍÔ›ehlú&T)~ûŸÊaò¾³¢ÏmAžUª 7À×–±^¸Z­œ[ú!Ø”'ŠÙöÅ>…M¦lY¤nîS¡]Rz7ÌÓ›û?tÛð¸r0ºÂâ%¸igϳƒÛ1̽ ôL]^g ®èFöçYú(Lþ]vÎŽ Vïx6æ‘X¹V]±yem-Å€3á¥V¨´üèˆÀ‘°ô”´¸©4Yº“™ã¿ü4ˆ~@½· ÌQ F·Ñ ÕåY0šÐ)eÄ‚±›J{+ÊÑ®‡@‚y!ÁÎJð$ Åót$-ƒÖHu”ŠÄD`ÂJ…Ä@ä¢äÖÎñØsaí”(z.¬½Š©ÖPÔ¹0 +‚¦Vh9.ÌàíÅ…µWØ— +li ÊU¯_È0z„Ödù!öÅ&}82Œ÷¦v‰x2Œ‡ÆN9= +FïõŽ ;~ãB†‘±Ý•¼x &X¾d­[4ÇÆa«˜™ªf–7ÓÝ-ÿÚÏÛr¿ùù‚Ô@ôóPý|9-QÑÏÓð¼üvóÚôÑÍS|´~ÈulãÌÚÛëÝ|ƒÈJtó  |só$:ñ\TyÙdïæ;ø£‹›o( n¾¼©wó5-/7o{#¸ù + çèæËI‘D7_N[¦sóåÕbò$üå-wzÝ?´ ›Úgn¾Bñöææw Õ0¬ôëæ+ŠÝ£›¯àÌnn¾Y“óòíÚÇ>ø‘—¾N2Úðïø9þLófùK®¨Ñ[èë¤+Úùöu’ Pëû:éÖ  åú:é wr}ôŒ…Ó¿H91Ík_gy5s}eiìû:ÉÍÈ1&4vnÓ#Á_hìÜ+ÒFÖ‡ÆÎ2Ïv䀜®±³ÌWï¦oì$#r²®±“L`¥]c'}&ÿ†ÆNº-Ûw}äAÇU³‘ž´B_gYgð +÷uÒ£…Su}´5ÇóC_gYG[ÁõuÒ&›:×ÙõuVk¸ôuV4U„¾Îúœ¹£®¯³>Ê[^ú:«õ*„¾NÚ¦uðíë$S_?È7ÑnA¢Ô3{0¹>†?!ö¯§‹¦3ˆ NMXl! SŸ×ÙPäB€m´ê?lÓƒŽ³ªÊÚ… ¾ô·]@ úOß Zÿ-°uC›C€…®[°C‰1utb’‹–5ÛÄ`±¬Ìû`¡üø¬S åC€uüŽŽ»ÀBð"z7ôþ7 íö£šS}Ž.“ ö +2QaТ´Ê:Ð&,`ª ð‡ &üÊ[^“\¡·;ãWÞb€ŒSéísZÝr5õû01J™r 2jCb`Âý— cøL Ò) tA@M¦Äbz]t1½T”„º€LÒ6ƒZ&²=BPŸp¸ €ÜŒ¤c/Aysô4¸  ~ª?A9ú–næ ²_¥›é’Â\† €L#ý ÝL¿#]@[îi×0 ¾&²…0€v#Ø\È‹c¢£ x{®|j:çuÔt:> H —na€&Œq@÷「éO·@€F^õÈÒÒUÏ©"q 2ZGbpú¸™î¨ýÛ“‘…çKL†¹@ª±èì$ÊùÞñ™>)“7ž/1Ys“µVö£’<ð6&Óß/”¢ÏëÐ'õ{õ¬!&K,ñ·½Ã£ƒµ¶±MÓ”a‹ù6U HQW´Ïõ4ŠÊ²ÏÑå/ZR1G\…=mKë4žÕ³ÿb’ïy¿/‰£¸¢„ž?ÆØ )=hâÀ•”'*º¨FÞ›Sß·uvžƒ¹Ï‰“íÃFdÒô[.6)4ï‹*«MæÅR)¨~J}Ók­\5BkŒ”й”hÔ»¬Äì è7Éçtæ%›oÀò,ÝZˆq)D¡ “ÛU;bØÐ™›éy.Wü[äTsû˜80Þ%ékSä¤Ò8*hØN®­³4“œ9Õ®ëOg*8ÇLÔ­˜ôŒO™m6íg†Z&ë·¯Z„µcã%uVôw½úlW¶Äd-â“ÃÍýºî×>ŠùŽAxM·,•GûŒ’¯ÌN§:Š˜NMÿÓ:ÇÈ—̘e'·Ð©D?g¦*!Ê>‘àÛ +F¥|÷¿å’ÆÆíÏùŸZ6ý•À@UnÉæ 3¼Ð0ái÷;Å¡RkG]aQ=*ôÇmŸ /å!qáÊ^ïÝ•Ñb ª­µªÃZ¨®‘Ñ©ªM]9½ê›g¿N)¬œ‚ø»© iX‹–R‘Œ`§"/Ýï6Óã¬À †OjJL¢¢â†‹i ÀWÎÐ25öoy ùk£ ¦+.þg Þù h Ê‘#Ж×ÉÆmAcÙ h3 +Ê hóëlå€6ŸUÚ ,Š@›5q6¡Aì…³ ÕhgW 8K޶â,9LL9œ%x@‹°ÃYzýEK)Î’±at*ã,ý¥ëü‡³dÒïð0K¿ÈTß0{â$À,Ý*d "̾š ÊæÃÄy”ÍgŠàeÿ–—VÑõíQ6c‹E”͘-zCÙŒŠÁ³6…*Âl9¬O„Y„‹0[þ„B“GÙr:ã#Ê–£´ä1ñÕŸMJDÞ.™}úš¾0›OE„Ùt²—f‡Év˜Ï€`vØèÔ³ÃX²³ä›Ó¼£,EÊù:% šLr K„í'²d|T%ÑìÛä@–/iTú'­-?Eȵ²dêÚŽ$ KwTÑ#îAv˜Ì{ÙmÒ1;d9r{ÖdÇ‹xú‚,»íJð ›Ð?zÙ ê2¢l–zÄØŒ6¿ƒ±Y{~#Än˲‰œ_ˆÍ¯é›b©JVH“Å  £;÷tÔÔÄ €NƘAä‚€Q.· `õgŒã |0ÎÀ¡ŒW’Æ·ÚÀ=‹[0%vAÀÔ¨8Æ“6n1€ cÅÀr+1Xȳނ*.jé,ˆÄ `ý0[Û¥ßG×yF#DÓ´ͲÏWI`ÙÍF–}ÚËqìóˆkGŽ} påØÇiöû@Ièc·Òíȱ(2G’}œ‰$F²[@Ivk${?±?Hö~b~%Ù;çH²åq#Ùû«ÃDHönš'žcïG=.ìý´~Iv¢p²…]þb".‘dïGÄEYöqfšy–}@¸èƲ$º#Ë>N›¿gÙÄæn,;-\Ë>ÏŒsϲOã¢"É>›‘dŸ‡J÷,ûôè ö)öq¶±Ç™tå9öñªôt»é{Þ8öñš5æ¨t‚Gƒd0Ýñ·;ÀÑa·ñì…GØu&zŒ]G~#bìãl»^‡*‡± ‰áÆ®Süé1ÖFäDŒÈÕ½0Öä#ÆÎÓžå1vI`ìbì@¡NÄØÃÌ cÇ™‚â1Òåb_mÙb»NLŒ{,`û–¶ŽËl‡[2€5¶ø°ãôUx€ ûÀŽÓ§öE69€ˆl"À¢á솯óèñy€'æÖ$¥À.0ã`m„FØ|Ø….ºˆ¢4M“7¿¦ñð·»Lù D6•slµ˜0.주Á¦‰i0NycUÉ,ÓÎ] Aœê›ôôT7بñ–SÝØ¦¬USNtƒ-Z‚D7ØØÑ2ðÝ`“íÏèɈÙ._Ñ ù:r|D7Ø”ºûˆnÈAöAD7äQ¬%ÆùI[1ûGtCÞ«éúŠnˆ1AÂò# +FL8a]èV 4¨¼h‰>œQÞlƒÂùZò—×¤ÙæÙ[`œMÝb¼E7ôa©¸§ÝЅУÀ8[ìy~T7ØdC\ꆼm/}T7ؤ7çT7Ø4P«çT7Ø8q(û¨n°IKsœô†˜„¸Ô(-S"rÚb°ˆö†\rXàb¨ _>×E{ƒM Í7í 6™N{ƒ˜?ñßà$ÐG{Cwf¿ioÈ›DÁ}mºYm$÷G{ãí4‚ö†ÁQ~´7Þ ÐioˆéÊ5bÛ¦zÉ9ʾ]ùÒ©óþø×ÞVûÍÁ¿›‰œƒÏ§'×;øŒŠø›ƒÏÍËçå¼|Á îæå @?zyZ ·iA¼ÈMê4ºùŠ>ºùzFy7_!pqóí½|AÇZôòqóËËck'ŸQÁ|>ct¢“Ï |‚“ϯܖxyëE»¹ùüC5Œ`£Ht››·1Ì77_ЄÝ|AÝutóå×G7o+!¸ùjÔ{ù +y ›—ÇŒòèä’ÑÉ¿ÊD¢“ogey'Oª¦Z:æ|;C7A¢èäÛÁïäÛÑ<6'ßÎüUïä_jõÞÉ7A}|=5ÎÉ›²VôòõU@î½|=º<êåIrX«Q¼—/¯Š“·—WDÓ"ÐèåmýE/Oúº7™µ]üµxBDÏÑtwÊ¿õòufõ}†å=òì!óIô$P*€©œ¼Ïß<ñ9CHgc·“Ka'Õä_H‹¶ªm“TD{ ‹J$"‹]o7ˆKΤƒ^Ut{ÇF23AJ€t¥ù°V·s˜rÉ„ô89Å!ÿ\_WG +˜Êë’˜ŒSºiØ13AĦC‡¸·½Êås–ÃV_¶ý¿ÌÅÌ‡Šš²qv¼°—+_2cÌM~XòÏ5+Au`\1æXz%ã¥i¶«¶ÿ W:Ú—¼š[>º û5U¡ÎªXNiSG;4z’'#Æí'½Õõ4¦=Þ?Àa™Ð·-rÒÛDS.ô’ú¶3x˜ëÜå¢ïbf ;;?¢ßºXLqb×UH“6†ž’3`Õë,}…Ê]Vdš·—ÔdY0ò3úR•¼,Z=±—‚Îl|àqоБYMêr +~\©öŸSBW$ÄÙÝm² +è$—¬‰&n˾Ð$8+;ï«ÑbÓ ŶäÛê(CHB#线ÅǼϰæ°ý…NÌ1§¦Ì™Ý¡>Ô«Èr;{ßå×ÿú820ù÷¦Ì¬åÛ¤N¨PèáLoÕð¿ô§A.^‡¦Ú½Qqõ¤;¡"„¬¦©ð’Y¥{¤ª‘"=~åߺð°Ï>2êÃÒºõªÏqãôdih{UFjûž4°Ø´d )òPé£)-6°ÙER“x5 Ù×xl€^Iùž€Ëû·96”¬Ô…›=Ó¾… +Ú UuûénU˜WY>"œt=!㮌\«“±ü¼†Žê«íÓU™üíòåÑ6¿¯o¨ìý—ê“ÿø øm%d#6\”»Tp$*…ú·ØÀqr-Î^âRÍÕ +&Pf¿ÀÓS‘ɳ{•ÎKv´!µ8­ ½²¨ãÎTLÒHÊVËW°Fæã›,”Ñ]°wµŠU’×Ãá³r… £„VõôVØ¥ÕÌRäí†vOqÖ?TZ’P ©Q¥ÅµtX’zª½ÓŠ^éŒi襰p%Ý7M8ûš½ëçÔ\e–ÃþoâZä’HäÊŽîÛ³d\Q+x2bûxôTý‘Ò´Ó´ÊrbÊÔ߯¡rã<Œ^ihmâÑ™÷Ý>^³ŠR‰„°»{V1)ìQÅv]«ßèÍi¨þÈÏ®´¢åc¦«ZÊä8£.Ùjûi«‘¢ì¾wÕåÝFíÙÁ‹ÔsígQ¦®¼ÇŠô›DCOûãµ”)+ÖÙ°ýZÃak’§Úá@uŸÚ€Äu•“Jè^:f0ÔîcF³hSsVá¥Rt#ke€„jò¹j’FIƒÊ¦9U•î¹j¬ÆdmVY3ù„=Nv›ìt¢à~–mâÅTLšv¥­ôB‹5œKÂoŸít#Zê±6Αì€*Û»®ÎƒÿÄ4² PðIŸÈ `‚’NyèŸÂ%€ØÝ›º3ì—-Ï+cXŠœ“ˆ'ÀËÑ™Nä2W+3cª—¬'/¹±…¡—¬Kù'{Ü]Õß?(B°KÚå5Ùæg uxG@tÊá‡*§ßKˆ(¢Ȩß%鸓%õÏœ“þ­Ó¤É/åïÛxT[9_=ZÍ…^ãó '›Zø˜·i9±00™0’l–Â¥»5<cwð2¹˜öI<ì×!O³PþZ,ó­Þ'1¶Ï b“V S4ú$‰Få«òiª–Ù%#íµØpIsùµð2¢·:åsF’Vᯈ‘ÎbRJ¥âçoä¯]î:ˆi,|ýhÃ#ÉVs0öÌ´ô§éA˜Úáðƒ¬¿¤<òkóäúö§ pc¯êFtÑ †,&-,Ê$í…&ÓTØhKw¯16R}§|n`jl¥ âkÙ OÅ©“F¼%îKxº–™>õO¤Ù‰cá(:s!ì¶(§›ÕÅí¯šòe5ŒôèVmxêkÐW!ù1fÏ ÔöC‘)ýF)û •¤Íé(n—MuÖëÑž§O›]û¨ôŸò*_:hÚÿç£kS9á‚…TvÜXñ¾_FÊq’ñéø\N?™Ð•_¹t›€Md„øJ•f“R7ÄëšF³ieyüÇÈà¢ÅØ´ùGÆ• +NfIÞØÞÀXº ò52³fãRe-û½ƒ—FTÎÌN‚©¿Ä%è¢Eù15’ÜÖ¸ñ=!J,"Yt{' ßeBÆ'š~ò€¿ÖÈn?¬¶«qAóëRi*F×f#çRIšCr©*W>†q;—JªòOšøøTTW…³ €Ns˜ÖõD½ãÜS%±÷Œf!ïTÉ8Ð÷uª¦,|*Y&ÆêxŸZ„!àSË8‚RΫ’ÉjñMY[c²àUI´#rWe=n¼*‰|+«éœ*Ɇc×8§úÖN•´wQiä¼*k]c)|½ê‘=^•l#8îüs¼j1™ ›$ý<*÷^tvZ'a´ÜYV}7ÚwœjÖá|*/Å´àSË8“@ã,V3iØKûgèþi —TjˆÞ©þkc¦RÃÒÖókð¤Å&}OºM¦ ìÕtÁŠº> ‹b‚È~zøÁ)¦—|Ї"DjßN¦'Ü¥NŤfN~pD·è,K¥9Cö”LÒþÕÑÆE”€Nþ8|tdK›Ð¤\8&È“§Eîs× =¬Ý‹„~8=6f8ŠõKrÒ7ïãµXî…Ø|Å®îmhWí>THÕ&YLíä4•I†rL½Méë¯qenJËoÝö·+¨ ͹ïÈC?gòœ ãUAÛèÕL•Ôòj_­IC,XúA+gxçc/»h^“¼ð>h‹ +¯TÐ×Gw—-®ª#|‹cî˨Vž•† µOž´N¬ä -O¤u ›Ë’ær¨&R©è.;¤L웋šv©Ôl—ÖõG(/l3 ‹no`˜â›[§ËU þäñþ .tÿÇû1*Í éaWÖýo1V+úöSæt4ݤªœT4Ÿ*¾¹Èseï¶û¦y¶åÁA³j.pó€ÉŽàm·†+>(9(šß&Ú%/ùœˆ…—h}Ò:Í’üßû¼)'ƒ€zMž…[¸L“MZþEÙ`®6¯u$½¤¥„$]@µÚcá’ oGሡåÎ\ä6=E{˜6œsTFnL¯æGÏÚ"`)Ð%#Dñg^ü¹}#]>§$ «¯S¿µté%{ÓH5Iá{¥{—Ï)=\P_]ºŒgÚ&‹¡´Æ{/k딬•¸hç8ÆÌø¦ƒ|Õ>õý Çli6oH%ýŽE••NlTÚËq ZºÛÔ¡êßtÜ[êg"š´Àîe—¾èŽ«¦§jMeÒ“LYóBM2u]sDäïs"æQ{éL±&ëâLáˆ[ª¸äXP@—ï«‹fóÛÔJ]ª¦ÑW¯réô¤ðz‡1ú-"q¾’M£«Þ»Ôgí Ë.iÕDZ[O* ¶WëzBÿ‘”, -÷²C¬¿€Iº +MæÕ ™Pš&îùýËç”K ®K©K·¸N[Èzl·›ÌÉhgô€¤ÁþŠ¥NÆ4Ûf•šö)t7¹¦©Jº((×ÔpIåÂéèÍË¢íeåsÓZ9™µ¦ò:òŸU×™*ì߸œ«I_M꘠å4|2Ô¡;gpim/xòl³œ¦´í%ƒKZ#o]¢´‘K }ønÜ Bh•þøŸåöU ­iGM§àa1î¤uê_e^vß¥eYV™;¾ŸÚ¨ããP;„ö))%¬Wí.‰Ÿ›§rIøÁç{ÙLZ\@ZF"PºïÉÅ5Õ•òʺ±Ò˾äe€Åçûý¿²n3•)ª söJU'ÈÙ¢–¢I»Ð³¿U÷”øÚÊíXº•ºð$)IãËØ>Zš®†hÍ%¨3•y«*t°=èX°,%Ü¿òhÅÑUÎzÊzö¯eö¦¶žÅd3”„ŽÜh\äà6m®¹#DÅ$çMT±ÉêTiˆþiÃ%5‹Ÿµ•J>ª|LÕŠ])4›¬e\wÅöÚŠÉqÔmé`²o{ɤzÖc¼Y*5¡Ài.5Yœ¹öé©S²—ÌÚ©K{£áŠ*wJÚ"ÂP2¯½Mù„ÕJôêJW\Ñ䇸î1>§ô•J,©÷– øª¹Û›”ƒµ’µ­”9RÔLð^êT ²äsVãÃEô¡Î£2AûŸ>/ÙzÐGÕ;úLÒúIS;5BR§²]¸t“–s„n“»òH®›×é=CÂ!ŽÕŠníu¸ÙLOë^§nìµÉ|X&Á—¿åŠ6Ö|±Ú± £c6˜Šð … ÷iJqèå•·Óêø‘Š¦ºD™El؃<ÊÌI&«r¨'Ò2B +ˆ‡”f¬ÜáÁtF ɚȿÆô)Ðã/¥®´b¦ë +—já·n¾Ä•ô3ô#ÉÝäRbúÇK}»‹ÏØØÏöW|Æ&u·.>Çò5Ÿ –<ˆPÞñ™˜×¹òá ñ™¸”‰áŸÌuïM·³ X9¥FÊÝͽº¬Äk­9-^D0T”Æ®æ©æÙ<Š­6‚K õ4ÍÖ +‰»mOpÍÚž˜¤ÛÎmþ|¶L(0Õµ^¡^«âF;ô©Р@(e}ë(û«Wª ô)뵞 Š(‹`äŠ6§RD`woƒyÖº´>Ò&[®Rç*2ÍLí³™AåQ=µgRØ·×:ÆÒ½ Ý%û§> +óêöZ¿´Ã ¥ûÇfB—™4 ZËöŒZFµƒð¡;ùèk$}ÊSpà ñ#v¿ÆÄîd¹@à[ojpÐø+ð¿£ý›•–Ö¥§]“§ìÛÓ~fèD“)×¹TÙ_¦ŸŒ¬8иlDL§'«Ú>(¿©"áYÏŽÛTJÁ%5‚pDf’^l å˜j>Êo– ) "éßE„‚2õ*­Zö¿âµ¼ƒ…GešH§ñ!_‹öä º²‘¯6ôEêßé/ê‘U^IdˆÊ€#¢bÏ®cݨj AõˆS·oÓÏYÚkJ&m»ÝGMªY˜5‘CÏ4W\R=2×KÉ_0 +ûóêÄ”|«æ•ãjè^VÿýäZ/×KZÀÕ¥­5‰àzÇÃΚŒ,9ý¿Ë§ì' +·´ƒ•‡½c7½-—4•lžºú»º·ý°kú¶ ÿ ÜËijÒ2„ ÍÐÔ¤¥; +¬'S ©y …)DÕ—e#{>ò ²40¶• íˆ%¤ƒŒ–¨Éƒ4~FO˜ +d­•¥·ƒ¡ÓŠ®úÃ,#ÕfJ_&h·¢FbHs§øT”ë‘åû`P—m§O…$µÀ&KåajVs¨ë•ÅýÍI§{aÝŠ +!møÚ‘€íÛ‡üõI”~Ó¼b1™úœuÁ%ä®òÿGåË]£[+_4* TÊòÜ%ÁÉtûÐßš¤¶\‰ûXG ’“&•LºõyË<è%”øÛ(Õ1Ö‡ÿŽ…Å„átQM¥ëBs\軪†Ârùƒ¥´Ç#¹œÂÄþRS]LÕc bÜÀÉô™Ð4_•þ/&8KZ—,¢±cÓ¡…26nÛUgSºÇd“²¬ÒÃ4þQu)¾èè bêûR| +˜Så-í:ŸÁg‡Ú’ÕW?+§íý0g×QÖ -岘²«j9©Í~›U¥ÔƆµ2ãEùÚ©:Óxn -˜]tcO©ÍPgú‘˜%þ¼³«ï©ØÊL}ŽVEƒÇëßá|ÉEH_U²éïV¢¬C­´Îº†=Á¢ÇíyÙ1j×Ê—ÔµX«÷§hÊtt-~ꔌŸVF#GbR…åÁ~¥¡ü&«`ìDõ‹toì+I…E'Å,[ƒRcæ$°dÉ +þ¹ÓÖ»ŒŒpWîÞp¥a_(m¸““h£4¿nÌ¢XDDi_ñA\MúC4 ±±Cßûi¦ü” °CšÕÌ•äüP²Ò@ž2XC z(é„’¾f­œ"9¶pÇ•#ð9Zã’vî–²ˆFd|î@šV~tÈ¿.¯à¾ýßb´¼º +gnl”Zà¢GøºíÁ¦å©87©,›åÊÝ'«óÔ³-ØpÙiA)(…oÌí£•–2whühsú^,OµhTÑLfØ©bZ"¼ŽÖˆY45YÎgNœMØÿUp%ë‘©"AÐVz´”ö¶0M»ãaøŸ 9¾Ë>{Lr!¨/Ÿê`ì³ÇtihµÊ¦èÒ -Æ¢ ºš´ =¨¿@Å1]Õ˜TÔ¾;jÞ·ztul]KÐ:)—µ§?‡Œ¦íÍßV¹„“M©À½›tòÔP•—R6dýÐ`ͨ¤0sÑr|kÜ“uþ—´*,«…y²ÊO½’’¦ÁÇ“IvÌ%¼ _.EE·Ïi·/¬äù]д¡(ŸàâÉ"\pñ€ú švlÑ­¾;a4ß[ˆ\» œÕ*í‚í"óZÌŒV1=ªgý¼ét5©C){‘é²àŸ¢tQȦJãìµõdí¢PVl@=°ìí„"vÉ¿9«—4™G9@'gÈþ|0r\X’“jö‚"b’?ä­”wˆÝ°uËÓ{|¨Rõo㥤óª3“ú¹dü-—4MçOQ˜x¸öÃBªx\— ã´;Ä5M~²OEAÐ"quÐ?{üÿü׺ä½~nmˆƒCM&U)Á±Él:Á.Cp³¼”´Ü +ÕA¾üÖ_’NkiÞ·sSÙ+>hRߘ^r€á¦CÃA/<^¢Óº§3 +7 ±IǺÓ(&&Ó¨ØaâŠ&‘©{i{&^‘dB›¨®ÈE/i<í§ÏŽ–O›o±§ÏÄŠöRÖÔy³çª÷½„øw>¸¯6E¨{%0­¶Ñ¢ã¾ëDq–^¨€©l“õû{ .dROT:B$¦¤Í[ÇÍ’T§Úö]jRI-¼ÌP€Uí%'›f6”zà†Ö”±† êÊÃ’,YãFM˜òmr™&Ú(tÙuTf¹êöÖþ´+¾-zEeÜÙx›*Îa7S¿Ž‘ä»®JOŠž’˜,‰«¶ÈÔTû£ʦ ©{§*?e¡,^ؤº]s“›K(rû0nlÒ®jã¤kÙpÞqãz6sZMüÚN3‡ëÁì§¢Á±þ²  mà};HqÜnZ Oið¡kT¹d×ç¯WÔ¢ˆ­ÈýÒ1i³kÂɱFÖ/3ûÏžþ[×$:þEÉ— Éøc ]†:ãk¡ß^Œ­ <;­”ð'µŽ¥ëÚ1?¬úh¹¬tºgÒQ¡9pŠÛ¯öÑev*¯Zú,¼å½yVÕ¬Zbè¼òÔ™|àwîK«ˆ.C!ª¬;;gÔ“.U¯ÿ€¿V, >oP4Ð ¡ÈzQ2²n寽ýn„¢ õ±Eó +ŽP´Žð ƒ¢6;BÑ‚·¾-Û…Sg„¢Â-BUÀjëöŠôGÚòP´NŠÉCÑ:X,ÒKšä³Ç"“Þ6,ZG„äEúNŽ$•£‰Û`d70š¨´‹`4ÀÍx0GØ"‚‘ai#ëSˆ`4ŽÈ`D#s†rˆÙøÁ`¥.‹úÓ౨c6EÄ¢þR XdÍK‹ú©ÆöXd<¥Ã"³,᱈˜C´:,¢zeÕ4‹X4qÒ‰X4ÑåÁhž¬}£yö™£ ¥ÚF/Á÷¸«­®0¢ÑÀQÛ iq­$é#4vÅC’DHêç<ÿÆ% ¹Í:p¸dQ€áRÇ]:\Bˆ>Lý%y耩#»y&*À½ãÒx±Át‡‘_ãÒ‚ÂÕ —2ÿ—lR’á’õ#¼pÉœpÀ¥N³«¯°´-&E`©?G«ø K=!Å`©›´×å„Ô_*M–úK£ÆÁ™Ö…R7IžKdÂ80KtI+´ô°D·ð¤ë‰n\<.`i?$à”?!ÑÃE³‹C¥mÒ» ¨D/Ëú†*YcD¥…*J””?‘Ö‘-ó¨dË5¢Ò:íº•æÑáõà3OÃz4©tà —æi²ñ¸4‘‡Š¸4Ïa-4½ÐOÁãò¸4- ëaiâÔuƒ¥uÚƒ=,-tÝEXZJ<}A%Z +Ðóp¨´M/À*m“rtT¢…WïG$ºdÑ¢h‡J¼&Ën±¦j”DT¢5‰bX‹ê‰"&Í#vî1‰ +^Êý˜ôêÚ g¥ 1É¢ä‰mr;+ÍSCé1i‚ï˜4×ß0iþÐø);¨Ü:8ÿC~ J“ZiÖEÄôßb,Öžèê$J¯vR%ÿ¼ˆ¸±©¤d W£nð£ò“ÜF“û–üÌ ÄÚ”ÏÙUÎDʘ)˥߶P-éбwÖ'¹h/h©z•ñ ùa¶—͋֗| +£i#-V ¹‡Š:1‹j8È}¬Ñ? «ÉÒ•ûIÒ¶ZÖYD³k£•Šg*~ÕM%r׈^€÷Õ×¢¯—wÒŸÜ~LûH”ÙCÜ5·ÿкŠM«Î9Ð!&ú1²ßD%­e»Ìö$Z±'˶Šrß´ý<0*³¬Š—®_5T¸b?^ÈtÑŠ¨š¾—ºvÖB u”J.•aÿx¯?7ãIKšA‘ùY?e… n@+™Z»&7å7Îû¸ømš˜¯iÑÐŒûÔ M'CÆÚ®µ!dùº‹ieÈ4¾ÚÝôÝ´¡ßGùŽMš­á/ZDíÁ@³×¨W]| J~ +ì?̤Óÿ?ÎÞYš]G\Aï¡ä®ÿI¹ZufW~Âì_„ƒ²Úì˜õ³ê{ðedF '‡ã¨µî'~ +$¬/UK‘èÛ·"L‰•¹'Iš‡Ü9ò™¸J:Ç]¤m¥øG]Hå˜Z’áq¢8s’!®‹çI2á4kíçs–3ù¡,yíÃ9!‚K>"͉eœá¡öN=Ç¿E%wÔ†PŽÙ©3K:Rt_Há?çó§ƒ,#ÕsÈ¡­[*ú—X“'?Ô´AKC»%ÊÒÔ­œ…ûÅ?iP»üÑ#çéÌÚç¡.k, ¥ó3× ®cLËWȃL éYRú!©B‹blF­ƒöx]áèÕŸXñWð¡GÕ"±‘ÿœWsV¤Ã>Ò¥—Ç`í‡Gèuì3Î}FØC[%Aöå‹=<"¡iÜbO&.A ÁG÷†êÊù=™Üq}Cwe¯z +î6‚žruD-ôì‡ÓWè;ßߤƒÁcOæ:ð…ê‰ '¥*…À“èu–xèd7ÀCnåwxÈPîÐjȈqç.=ƒ;ß-lp‡ 2ã_Üáa9~à@‘S .‰&ó…,GòWµbXºÅÄD•v ß”vH]íÁ° ;êK=ìðøúžÂ1îв”§ƒ;>ÅãÏ‘Àm* ‹<Û)/¬óE"óŽôy*í”"K˜çydÃ`sä¾Bä)8È*òPŸƒ„y¢XÆstDŸÌ"OóÈ“i8rÖ/äùW¶g+%DRs•„ªEuaô$êz)!ô$jÿ‹äøÈRó‰Dr§ú¾Ð.3Ðûâ¯ÐÓ1=$ÈÅõ +¢»ËÅõz3'×µAèæâz… …ÏÅé”[ŸŒkwæOÆ5Ð]\2®#6õɸŽÂB”Œë7f“q*æ“q)œ FÔ•'í“q¼_ŸŒë/-—ŒÓf;ŸŒ{ž%×0°Ì׈zÛgãfƒøl\CÿY£×\¤ÕÅdãzEŠßdãhÝé”Îw6N.˜”(ðÍÆñz Õøz}5ˆØd\/èqt·^–L¿F‰²1Cþ×$ãȤJ}ßdÜ6•xÞ)Û„L.n›:šL2ŽnMt€]v°ˆ|3qô^¦,'“‰Û¯ZÄí¢T\Óæk›‰k¶ä3qʼ2qºè|&®½¤ÜM&®]¿£+¸¯.G÷Æ›²ÐUý6 ,КÒQØß\\/¢ïRqôÓŠËC´Øž >©8Z4óSºË/(‘Q»*¾©82¡“Á¤âȤ$=›Šë:«ÀåÛèn£ªÒoù3 5t”EˆÔ –ç©ßÆA$"ʯ/îº_H4¶†:j¦Ëzÿ‘ÆÍ.D"ne + tÔÃÕ1qÖ­_’b‘R«E¤I³†BëbPC¤¹·RL £~H ž "MÀ"Dâqkqyˆûèß :–Ð{RŒHìiàv="ñ[úA¡cŽ)t¤%¢ÐÑÚÒ.T‡HЍ‘H’š¶«yDR§èa§½;.¿¦úú‘‘¨#:¯‘zƒ<"mSÿE¡£ŸRc +9îô„::c<…N.©’ •”ÞêQ‰”~Qèhë–Rèº2(<, ¤“"X¢n0Qͱ°D}Øž–:ââ @D‹r†:Z“§ûVQ©aFuP!êíjNZTjè^ð°Ôð%,5!hQIOŠJc.#T"Z^ JõÕ¸f@©âL’JxèihŽL1Šü9E—¡¤¥è(5÷ˆü°ÉÑe”)|Ž®üÃBrqŽŽçq‰ +£ÉÑÄõ>GGŠÊùW}ˆO,Â29º +i9Ÿ£#uQNòY:"í–Oˆ^³Ä76K×HlK¹,]@m–Ž@4!“¥«WßÐgé*™š$6¶Ç+D¤ËÑâ +ÊgT!¢Ñ„=du_eêòMLÙLdD}žN×_”§Ó„‡ÍÓeäl}žŽDµxmžN³Ÿ>G²=(æ:SÓS¢ËÓäü}¢®@Yß'êhÒ]øT›¨«’÷y:Æóf$OGDq©úD]ûçQe"þόԬMÓ5–Õ³t =h>K×PqñY::ÒJEÕgéèP‹™m&K×I,LÐËdéXDä[¢qYÒdé¨er~êC4sn~ëC 0ê³tÎgéöö\[¢Eä0L–®âtì³täÄ:(06KG»Xœ­ÍÒj”Þi‰ü£@Dµ>aˆ¶xÊ"ü`ñGôÙ6¸N>lÄy+clKÁ~Бˆ£¥bB¯úÃ@q툄o bµF25š‚Á‡ÀÆÂ%40´ÓÆ9h³ti\œXd”ÜtÁëØ.a_J)}+ŒK¦6Eêèt»í@í|É gL +òÏk~0ˆåû±:¦RdF=j€{°;"[B@"’!O¢ã!xg£ëÆ&Y_nN);f)ž0f{Ÿzn‰Jg’Ùûnc¾äƒcæg$ïs³Z"j2ðk?Åz^ •D¤:ü‘n;¿?"Å* ÏOæ}vVúx¿‰Ž+ÞËËÍ`@ˆ #íyµªŠ+ñä>ÊYt×ÔJYEgmò¯®¯>Î&WªpqFJžM;Àˆ(lÊÝ[þ=W†E(2‰÷ð&RŒz\ãÙÀ’GÝ˵×ó9©Ðqø(¢Óy\L<$3Ðûü”,ëo )ßš%ó9”E\ÈsßéI`н>/^Êvêrˆ9:Û³?²Ý•ñ°ÿÆ*4æ˜äŒÐÑxÊ1.Y!4{4±7ösW3¯Žsœ´‚±¼ñO½‘ä3YRbÐð,ÁUd0ðÑø¡ðIöë<…7³ØÔg‡õ=šþØNž§ñ~翌a·3¦|G%ô±I·ð™¹÷ÈýeˆÞhÂ0íüúàŽR +â<ßQÀå©ðºå‹Î¤Á÷˜Ç×ÎHñEÂÌçqŸ"åfYl2ÑäKyIh3|ŽðmZùIºO&&ýµÆ‡`²Hn§ˆB5ÍÙYÇÒ™Zv^-Mé}.HmÄÇ«ŸIÇ•CgmvaˆlÛ¾‹*;H¹>vä’ZðÚᙿG*uÇtŽ9ŠâiÀü+W4c‡MÚIâM1^þ€Y‹ºÄ ÄšýBù0YFÏ|ïšLUÆq “À?èÄ‚YÄ÷™g%^E¼(F!xAýÃCðbpxaµ)¯2‹_ü]$w<óu&6›`b¹‚îkx‚žbX®(TfÀÕ0©M7ô§Xž úyžúòL¢5ÂÏòL”=Íæq+B`R|†pÄ€iAH¸˜–‘|Èà/­â!&½ÎlÐ`ùÂ/™ÎÚqð»M+ò}9½{|1–Ñk¨5A¦ûe~ɨý._ø%"ß/ún‹žCúfå99ôÍÊQqèK·]¤»È¡/mè.mƒ¾,r/²ë}I‚ûœÖô%MïZBô¥•Qdœ­Eß…]„¾ëŸN­AßEÙ•}©AQ» ú*•TÑw¡ êÑw½ö¯EßOïÑwÝ9é}Éé%Qºsè˳P„ iЗÏcô¥—tR úÒ^@bÍÀ/Í"`þ¢oNÊÇvàËÓ$gÀ—–&¢-¾™†rÿ_ZïYôê ø’éðŸ= )6_žmÐ"Ž +™ä êM¿°òÏÑ/)èç ÿ;˜9ßè÷ÝcŽ Ê(7þ–÷ñïUÇÇ¿Ô0‰Yv|'(Ø|‚L¾Áb„¾ãÎÚô%ÙLÍ5øË"3ýþ’¦]Ÿþjç£Çߎ¾«Yøh„øKÈ&©_‹¿n3Âß.ÞÝÃ/O·¨!üRžµU¿<\«¾áwàJ>žÈ ûx¯‰GpÓÀÔ…]CæAHBíÔxI(ëã_¢ðH‰M'Š`uÀ>Ê]Hƒz~~7 ¼ü­GàQº‡ày¼(^Ènø˜n@¤ol,‡Í(ü]¨§øðw¿1Mô«ÂQô;oêßF¿ãñw¢s1Â_­š;üˆþ<þ¥A… þR]n¢O@|Ëèè÷4ø;^û×âï¸Yc‹¿Ä˜/ø¥»?§5¿xjC¤lð;¹ˆžY«(ö] øàwa‹ºàwÑ0„ãï=løàwµáƒßuã[ü.p½=þêa- +Ïé!Š}£ˆºx‡ä奣åŸKŸ¤G:¨ÿÏ1Je×>ÇåªÚÒ'õ +З>©•U¸½¶ôI»®Äí é¨ô9áö|ésá ãKŸë.d_ú\¨ùjésIPd+ŸéyðJ¢Êç¢áHqÂ’øÊç"‚8Wù\8• òIí’ÒÂn+Ÿ.ÁW>UòÁU>'ä8|åsâ«¢Ê縢 +¶ò9nŒgkŸº£Úçøg@Ææ]ùðë¾ò9pŠŽ*Ÿ9[_Þœ`E&É¥E•O·BaÃ¥©_ùœÈaF•Ï×(8[ú\8j铚œ¤hiKŸgiB§žµ* y[ü$Sk#îQ £ä³mõ“L’3´ÕÏD“E†ÚØê'µãÇœYÿRôt¾ÕO¾$è9g!óȘ™ø©~ò= ì<òk%Õ†ê'ýIih¶ú¹îô([ý\—o᫟‹TQe.·©~â@è‹ŸêÆ¢âçÄyÊ?'ήø9oÐ苟ª°ì+œóF]Öô .þŠ?c¢7`„½µ!ƒ×H’•‡Ì ½7{0%ÓeSä#¸[áˆncUzÆ[“•MR5´ÓgŒ[Gê9úsÅs-lƒ$?­1P)èÔÿÄÑGïLèÜ&é±èOÓSÁà‘¼í:B¹•Ë÷£slÁñ<š&ÐŽEòú4ƒ“ÔÞ:Å^‡¾0:ê@D-emÒ±2«ÔŽþêa=‚®sOå˜Ê”sðæNG¡/ŒŽÚ¬œMù/ègئ?€þ „\"!êç{“ ïé<)hßi=Ó-Ò®ÄA•'ú DÜy&çØ.F(’üØ0bçœöKòålAÁq÷Ã4Ø1nìùtlAö1n#¿™ü7X¢ý$ú™eŸ×™À9¦´9Ð}ÀéëOsý™eîõÉú«ç¬Pd–:ÕXTy›Ž}$÷Ù´Ô#¿Jëýäˆ_Ôdê[nŸ­À©÷¶ÉB¤A-I›T¯Ì¹ÐÌŒù~ýÇ$¿­ ×N¼|ÆlÝÖæy¤{<éy'óPš%wŒËéX/-Ž÷;ÒìE†Áïƒje€æm&üWSYÒd‰mÚ/M–Ò!hÒ$%‘Ãì¢*á9y3<Ú¥T7n¸O˜GÒv´Óî`áK4ÞGC~¹ §y7“åˆK$xY˜¤Í9¶T0î0xð&ƆíVùÈ4u6sl·¿Kò³+ê¦Â,Ý‘«ˆÅ“±é¼àsɧãsêVÌ4ÖÑ ÔÛd$ßöTE´3è1éñö}9·`\ÙAú¶Îd[z)]Jà—Ù”üÂö'gów AØ‘ûÁŠ¡,3ûÎ.ÿañ¶dd0DZ¿ì£Zš¬Ç]h L‡1¦ý¬Ê$$‚¾\iTɆÈÕüÔ,¿M’gNyh¨j/Ž9æ,¹˜Ó™b þ³èʃNçÙ'¥ê¨d'Sp I´í®o#%RC\§@KrX׈®/,|ë4ù&…°þ‰Å,¬O”Á<¬o':eÊ£Åõ‰|Y„ëä_]~q}¾:„ ®ë +‰p]ÛŠë¯æ“ƒëSµ2<¬ÏëJ ¬k½ÕÃúD,‚uÊï‰n¡…uÊ +>ˆï?°¾8@ŠQ}Ýl‚Eõ*ŠGõ…ú`ëóÑÉÁú6åG ÄÀú6I3¶u¹d‘ÚAõ»Õ±eL'rIÓÉôÄBe¯ïvN;íâöÒ©8©˜_HW½¤Òä<¤kR!}ÿ¥Í¥¼ÿä=XHŸ÷ÕZH§‰Õ²Œ>.Ëï¹"à_HàyH8 G>TÉ":ãP !}Üî0…ôæ’‡ôqÕÒ©ýT¬7¤ÿ+—œÂà²>®G±NMtÂeö>. ÍBú@½‡tíj‹ }û”,¤OÐr<¦/ÊÑ`œ‚Åô… kÜ•&AƒÇôê\„é yéom&ƒéZ>0]1Ì7íÇ‘)†à?g‹_{Ïg‹5'ï³Å Î>[¼P£Ž²Å”“…Ô8·…›o¶˜3:h¯±ÙbÎ ÕHHIÀ™o²˜ÒNJ:°Éb2î¥ðê“IÏ‹l³Å õsŸ-æÏ­PH¿gæo¶˜Lµ›-æ\šî=I +Óf‹ùѨrá'[L&ÝŒŸl1¿‡+©Ñ«…֊ϯ«¶b³ÅëJƒÙl±.À([¬i7›/^÷¸nóÅ ù (_¼p8wUºí*©qޱke÷›/fã*Am—M5‡Jjlª?”ÔNtDJjôö3òÌ©ci>9n•9‹J¹ür3ÚG}¾Xe‘|¶8óܽ(Y¬sp|²8ƒÆ%‹3ˆl>Yœ/!Ê&‹3Ò7YœïÔ&‹I*¥üÚç4ßd1‰l®˜ì •Ôxƒ¢)ÖæŠyƒö¨Q†ßk …ÔŽ+hþæŠÙø òÉó:š‘’[ZXW<þ4ÇBj´CV,¤ö+þÌÊ€ãˆ)”¯¬Ža +m‹æÇ S(ÑåËʘºæ™Bêº=S(]5]GJpž(”@¼ðD!¥nFD¡Õ% +=—xn‰BÊOŒˆBÏ­õ¢Ð*«# +=T Ç´mK"#ظ†(ôܪÝÄ Í Oè‘ç =/2†á =ЇˆxBfn)O(á íyB‰ÚÜ! öå ¿ãÀ OH=§ç ez0†'”/ã×…òN¾D¡ ÁÖˆ(¤}ž(T †™J¦‚þ÷é|P‰SÛ)S(8 +‰BÔK‚Lš' +edE=Q(ƒWæ‰BÚQ…ò%ÖZªPF§£ç +¥›wô\¡ö›ç +%ÔxW >£Û^SS]F·]õ`“ÑåœÊˆ(„dê²k3ºS‡´ºŒ.)¢"“ÒÝ& RºEöS’0)]:ìUÙb&¥Ë(Qåù¤tÿ=—¬hñ4)]Z¿ç•º”.¯^Ù´.¥;eA"¡Kÿ]dÌÑ‘§¾P÷mF—~*¿]:Ñ€¨o2ºSEƒŒ.=5Hº˜Œ.mú‚Æ'£KžÉ6—Ò¥ ¡4“Ò¥“M•!&¥KëèxÁ(¥Ûpêõ)݆#¥Oéj‘-JéR*NîlN·!g„œ®n›(«ÛPX÷Yݦy›Ô}}»“¢»…ܰý\½*'&«Ë»-PG’W¢5k“Ôå“(ÈûYö_;’ARwÖû&LR—7Y +ë´³\ªKêÒ‹ë:Lë“Ô=Ù+é,ÿ&uÉ“J[¹ËéÎŒÀÞ%u·I$\Rw›ÒRÊDÆ•¤&LR—LCÚrMR÷}%W§¥_PåÜ`’ºSÃ^—Ô%}ß9]¹¢¤ª\N—µ·$i`rºSõ`ƒœ.½Â)cžMN—Ð>KFÈätg½4t—Ó%Wü‡.´‚–8“ÓÚPäty‚ÜÿÍéÞÕìrºd±RÑÅ|â¶á™Bþ3ªÜ#X§"xÅ]a]‹Ö*^¬÷+;maFÖëXó/¬w茰NR€µ„°ÞUûÅ€:IH‰^×Ôÿ=¾°,õ NŽWv¹õ†"Rê )iê/å$ êõö¬{P¯W7Z`½âP X¯¯S¾ƒõ†ßÁzüëû7¢àêa]5r<¬7DÊÖI ­£mÀÂúŽÏ“ˆ¦ZXïxÖ;Êr¬w$V<¬Sn[ֵаNb …°®[°®Û&‚õqÇXXßß±ž¸X;~@÷¿r»k쬳ݲr³¾¸Þá%#`ï¨õy`ï¯,\–˜•’倽Ýwa½¡+Õ{C7özÕ)-°×+/c½â@!{E§»GvR瑤µEör•ZÙ d-=²—Ûòf‘®$ô ìTìõv[d¯W„Ô•ki‹¢kÙB{!×C{“^—ÙVŒGöv§íXdo·ÇÛ#{Cà5îJ“ÈÁ#{Ç‘Ù;”"=²ëröȾM+œø2ßt1cÓ/$þkÂüÖþ‚„9¡½ÑW湟ђªQa‹IåVÒ]y¢* ¹’è‰>Z¾”¨„ôDë§ÊRR"#zª­ O’åLNITµ’2MFUä+#ÊL¼©¼¢IF4·cZèÿóaÑm“¼t‰‰dD'ïâNoMJ^ ïJåÜ@y5À›„ÛSnžn>|¢LÏ’:WîØZùxziÆr£yZ’&ŽíÊ®ÉÒî’Ò´îê© îSJ“ä2MÊX®(=XÜ’ÈkiM|ì„e´¦Ú-À-°)_záçàåëœ(zÐWȺ‘Vú·T;锢ӢࣧäÌJÊhRyÛǬè”ÉO .w|— X™DšRœ”Ž~Â_ŠVö~]Þ¨LŒé¢ˆÛ÷¢}^©ÒJö9çhAS-ôÏO†èä ÷Û§úœqôwwh¹ª¬’úbÆœ¥0Fêí|NZ¸”Y÷!ï¼wMUÑ¡å^Ù(±ÔK­=Jº¤÷|ª¨õN*•}÷vüE¾MÓ8¹.\IcÅ2Ù7%èQÅÒI°Ê~™PGj|rL¤€ö(Mðs‰4Ÿ²QA„\åÀ9ÒJOÁK‘nš™XS8·òªýJ´6©ËÊ!Ô^Ž#£OP¹¶Ž+IŽ,‹ôövym•ÏÌr>ß^çÑ"STMÿ„…ÑCʈ&SýnùÏ~^W{äç3NÞÏ¿òÊÖÏ—[õ~žNÎ2Ã0ÁMžLwóåÎIôn¾\zuóTö”°ÀºùŠÂVäæ+ÎQÞÍS9C²®ÖÍ7ÈÂn¾‚=îÝ|EŒwóå‡R7¯[ùy-'x7Ÿ!]¹ùŒ’´só{TÝ|¹…ÈË—(/Ïàõíæ H‘›/`ßy7_0Í»ù‚ <‘›¯ÿ _ðuòõ>Nëäë-æy'ßìöN¾AÉÞ;ù—îªwò¤×Z0¨éëä;ï‘ÈÇw8"ߥTä]|ÇéÌ»øþ"jW½[YˆÞÅ·Ûål]|»§,ïâ›Joß®&˜õðº/_EÓJ¼Â’wðê2"_/ñ¾Üa€ÖÁÈmF^Åþ¼/ȸzÓ/üg?1Ó,rñ“|´$è™nH÷Æ 2õŸò'¤ö“,üFÚÞ åÜ6ÆCg¦(ðä êʤ^rÈgÚkC–ß@Uš¤;lgüÔª*\Ôøx‹‰*i¿à„ëÜ9«pUø‘Í>^P1¯Õ)o}Ü)çmðjy(M‰K>‰åø^ýkú{©(ùs|uƒÉþ§h¹8¿ŠT§·Q2 ´5û!wöãY:H¢vF›@í4·?›¸ä@©N¸{Ï&¹¤´“4äD1WÎ}?hæ>hïø½ìõQµê‰†÷’:ëv@x€šIÙ%í:΂Zÿjöú>àUJÂr)¢='SFJI>Ö¥ôr +LN2ñTÎ (*_-ãŠwág¢›(”oü©Ä#’Îå){±2õr¡Ûbb²Âþº"ü#Mªø[ûGö€E#WœJÍqŸ[!¯ô˜Z¬PÀ6]øaªž+B-ý䨶¯­rÛŠ¬’°¥ü9®Øig2EyF‘+ÊC;/‡$:—MºWº¦¾›*#2çyÝu–*ï&–#`“ŽP§l,™ò¬¸¢ìŽŽDwÚaANäDI.7‘¢ew/­¢OI¸ãd¤SjšøDJ¸ŸsÃ@zß&ÜÉ$¥Ÿpgã’¶§’Nn¯u`Â.-øÎ9›x¹Ž1;žûUpÉ †Ðs*4^¼*¼Óä#õ>Å>‡ªy{öÿ$ŸtÛÈ+­Âàp©•·Øöš´œÏ#?G>Ÿwç×xêt”w/’wO²ÖôÒ:Ÿ¢)ï~öúB®€òîœk.Lû—uXQkḬ̈” “ÅÖQß}NÝ 6qHK4…(í>OÚ=/Ý+S·ŸãKKåPâU%1ã5Ž= Õlö ¢(ÒJrÞô œÿÌtU~bÄt}pFuh¿M·äþEû¤òÚ éþ÷DŸÄ”M ÷p_Úï×õ€kaÐ^;fí2Þ¯«Élñžôýzñ~B~:Âûí€ +Ž»ð'þ*!à“0ÌJ?ÞÌüy96ðU`'üy3?ð'Þ¼ü‰i¬à«T¯|%i{À_˜ª~z‰¿ħÅR¬A|Z„ Å:ħu]j4ØŽùÎŽþ >ñ¤Ï¯ Ÿ˜”Ú¤ñE|b2þÐÊcÂï + [.)|ÇèsB= MÚ£åXµ Éb‡ù)½F¼|1ŸLÐ(´˜ÏÄÓ†á)̧GRd’žÁ|zÊG‘,À|z;Cf Ìg‚yÔRr^ø!{ÌOâXùë0,æ/¸FúrÓmlAŸú|¤«Ù‚þÉ!ý…ÕìA_Õé<è¯Kò ¿®î´ýu]”Eýu[ö•"/¨Ÿ´'Ðá~Òžã÷é}M™ lpŸ6Ú‰’î'-)¸ON㘃}Þœ¿dè_E-K¢}®²½7Å ýgÔo2-$}¥¤xÐça‘5}Ê9å!~"‰¡ è7µ=ºsÔ¿ƒ7ê'­Gõ“.PŸ&``(¸Aý;JÄ¡~Òìa€ú4±óŽ êÓ Ñ\0 OÝ >r OÆç £|¦qGOŸ5Fü;OÂ!>Í“@¨bŸæI@’Ê!>=G0˜ â'%²9ÄOõÊÅ{Ä×ÜžGü†ÁtñÛ­:Àoéô€ß^Ò'ð•3~Ç©Ñ~µÑtîò##¼ïçðc _æLÂýŽð¾¿Äÿ Þ÷×#1xOu„Ã}çØÃ}‡köpßn#°‡û(÷íÖ¶-Ü7øß;´Oõ–J Ú“gIëe‰có¨OŸÚéêiªˆ/8¤'FŤOŒ¢9Bz2Eéi¾ÉáÇ;¤§;ƒ[2HOÏ£ýˆïÉc–c“ù*¹Jzß"½RÑ#¤o8Yz¤o Œy¤ßû«Iðƒæì‘¾k<Ò÷«ýᑾã´í±¾cD‡Çú~ÁÒƒý‹Úf½CMÆ›~`óŸ±^•Ê#°Pò`?n{{R”œ‡û92 +öglöê½"°ï`Äx°×Ê”‚=–C«{]gìÉ7I/¶ûv«ìµiƒ}C×¥Gûvå<Ú7TÂ=Ú7$I=Þ7pj"ÀoZÛ³xÿ[³xßî$r÷ Ùr÷TH”¨Îâ}¿©a÷ý +Ý[¼WèÞâý¸ôzøã’™,àd=àÄ$àD%ðç™oõHÿ× çKªüyô¹šâsläðçK½Á¾ +[{ÀŸhî _Uè=â«aœ¸Éཚ*ßÚa>NmÎ. +ûô×ìÅŧ}TXÌ$ït"ë^YöZ‘$D:–1Ÿ†+¦…sС¬¥rhëûM¬•¥.ršNÒÚ?\^Òl§š2Îé)·™òy€ûåV¹ª¬²³iìfÈ”ÝxYúXZ;Ki èárkÑÿ¥ïé.O«$N–ÒÖ2%È«¼MrEY®û¤“Œ`$\ŸFÓ RcU•öDþ÷P­H‡ŽxlšPIfµ¢ÑžÂtýFeé×_§ÿhã›tÐOÉ2ç)ñyfÔŒ'Cr )èe¢¿´s»pO{ÚäMäGòYµòay¿îbÙ&‰_ªÐ +7Æ×¦;wÃ×YB•[}Ÿ e½tá˜$v\S:K0U©+•Ãz›­?KðI £Èù°7÷ÿirÉGZG÷ ‘¤+qÏ /Á…mÊ®gpÇPÿÒ!5åJéÜT—Èaû‚gÉûže¡ÒÄpÚžudhȸ¯z<ÕsŽËµêŠ-]„uóqe¦)&ó—é$ ï„–Ç1ò=I¨Ê2Yhe9¦íN ?\ZyÒfú9½þ{žìÓD"¦€…É—h»Dè'ŽŠñò¾A)É™b ù3(mǵ"Màÿc0UÒ ɳŒ”2VoJ{UamZPÚž¬ Ùß‚R+ @‰tB$* T/LYP¢´‘ðB> $Wê8×YPªW]߀I¡găÑ+T8¿ DmõâúUþ’EÎȃR•$¥Ç$•‹I6_L"é +A+IÔV ƒIûigh™LÚn/µî1I!X„u-&‘NJd“¨«¾€ši1‰V'ä‹I«ÅcR6í‹ì%Ÿ@á¸Ý]gjTg-&‘q ÎòÅ$ró(ÁL"Ó©†& ¼ÏVZ„I¤PVê“ò©„>H>—¥a ›ÉB‹I¾Ö`Ò¿çå¶&©G‹I´IÊ»0©üƒ* I4·üÁ¼Š/$Q¹$!D´¤œ\…$:…Šç°DŠA¥ Iû¨[¥ÝBR¾z,$Ñk­ya’,“ýá?˜Ô•;à0‰WÆxz JÁÇy;Pêª:hQéâv„Jûž6(ÒÎi(x8S "F¥‰œ•ˆS—€Ó_TRÑ|KÇF°4¯f…¥ ƒ‡¥‰ôSK 9…¥itK EÜ–T†ÔÃÒB_½ƒ%å¹E°´®R€…%•ÜUXZw {XZWöÒâ’ª®:\Zhf7¸ôïyšÛ°¸¤ãÌ<.M¤G#\Rš–Ç¥–lK<—ÆKÂæ‹KVKü𗈫žCžÞß +<Ö$>,Â%îða‰J$Òžfa‰²sÒýëa©¿ÔÒ¾°40ù@aIÅC^°´·x…–D%=,MãF¡’Îïõ°4ïôL KD¬ý,í]ý HÑ~qiÞ9Ö—t2¦Á%YÔš…\ z\¯™ñ¬6Ý÷.ˆ>@dò¸4@Úô¸D:‰%ýÀ¥®´Ç%òk2fËâÒ^ycÁ’\²µŒ¡î_\¢‚‚¬/.QztýŠ–::Y<øŒ#obù3*-h¼D¨¤¤/JJ~ö¨´°~ *ý+~åƒJãÁŠr¨4ž[*²¨4žK9¨4Hú4–Fºƒ*Å2‡JC§œ[T K;@%2®8X"Ó5ã]è/}àP‰~[’¼‹A%º]L‚ÿ¢Ò~4Ò)DKã¹M§•èqc@„A¥ñ@\+B¥…ŽBJ ÇAJ ))ƒJrÉ— +ò•ÖK‡Å Ò:F<Ýë¡çöˆy‹ªYzPš·oQiÞ‰$•ˆ-·íxó’ *M\Ê=ÍŽ©Bu±p¯ýÉ W’ÇÞQìmûÜÕÏ甤ÀÝ·ñ?£\r8‰ð•Ê¥®§ÁLŒ½Ô¼QÚBô eªÉ>¥c’j") áB¢Ô¸mŸÿ"¿¤áYìˆëaÁ;%Ú«?ÑýIö‚Ä*—."šs³·)÷¤“rE|zŽ#2Î?édwˆûŽñ«ÈϯIäÖdzP!¯/Ô±#0Lh½µ â7©Xž'¹”Š»Æa眑_‚U¤ +¶Ëݧ ¼7u—"†–I¾è|® +ÞY({”'=bšï½?~Dò÷ÿpI9‘”õŒJ¦µYg‘ƒ®¼¤Î +†&Úéò'‘Š&M‰qYúõq¨ÒùÜ>A”í5=ál¦úüHóÑ÷¥Xƒnn­_&©ìGó1•t}îeúÓªWñm#Dáò9ÞÁ^( ½—úÝYðO‹›òâδ¸Œã5e“Ù´?ªÄ^åÔ¶ÿsƒY~ ž–ûg–Z-˜Ög>2‚;VEÚ†¤lGe[A1!µÁ‚©ò¬ m¹{êiLÉCÆfïƒ&ãžè„åù0íêð^fMø¦çòâK€áßó¥…šî0Wc>2F*_¾Ø8ãûò•rí1zYz«r>$)&òìØ»Êç&æqËoÛA¶²Ž”Û.£ëV–sÒ ý9–·¨µ}<À]ubÿLÙíS2“u±(g! l?qM„¶ã mÃ2”µ6D$¦çÚ“ìh9ÝR“¿ºt}ç°©¢Së;)}¨(k4úŠÆ±ü˜YÙ^šRΣâŸav€ÿÁl…ÙÃl¿½Ùf;ºí#˜í˜¦¥0«¨fûåû{˜í˜zæa–ÈôOa¶Ý†/…Ù•m³êS=Ì6pÐ/ÌÒ©X0M`¶Þ1>f+ŸÌVeijgma0;5­äP–Æ€bæäÐ Â2æIQV›ˆ=Ê.·E(»® ’ ìºªxf×kÄ¥YúIGcßÀ,OI®ä©iÕÇÁì|@«ÌÒ“„ +”Yzþ=Ù™ ˜æ@v›4Ê5 ;'¥õõñ/ÊÎtUU ÊÒúEŸ±CYZ÷EâUƒ²d% ei+…h)?òW¼J["ŒWÏÞ¿`–å¯ "ÓWiœ&ZÕ¡,í„#¯í€–Òù` ´ZK€V+1hµÕß­ÎŽ€V‡{ Ð!ô@;_[Ê­ÎC÷@;ïX! ´ó”V\4;/˜ZœPªRœwn˜ÇÙ…‚ÇÙ%³$“¡ +e`öÎ/¶0{g—;˜¥ýaÍfçsçΜåå–Ãhv¦Û*‹õ§¥1‡³d:»Ëá,™Îú‹¤Á²ÿ^ÿ;]Ncù…ІYJŒ`¶€eáa¶\â…Ùröfit/ ÌTO<Ìf‡Ìæ«"fa–j^c„0›o{“Âl=ÁìzU³é’a†"¿$Ÿ³äBOÆÁ,AšÌ’1k«R•^#%ÒÚd©¹C>öY:%I”¡£‰„2l¾E,Ù|û+-ÈfoƒŒ1í¢/ÌФ<Ì8d³ÿž%U›ˆ˜-*'jQ¶ ¡lAvÀ£lÁaÇ£¬†R$”q=$–8`eKÆôWÌ¿Çy|L_Í iE ›¥Äå16ÝÑìcïá(ÀX:'#ãa0–œlÅX¸/ƒמëG0K§»;Œ%(Ðaë_Œ¥óƒî'‹±„.ˆ Ʋi„Áì=’(KFP€ ÊÒ¯,ãÍNe(KÏét;”éVb¿0Ë'·ü#š¥½/USƒ²ä0LÑ l¾Œ²”ùŸa4Ëë-‡Ñ,Wö¥ã.@Iýy”Í/ÒAÙ G¡lž·ÇÒ‚1¡‘)FÅ¿ÂìªPˆò]þd"—mågDŽ¿ÂìdjH«Yav2JF„Ùé/:aç«Ìþ,•C÷Êìd”¾d«ÌN&Ôn•Ù÷™ë*úYev2ê¨é¯2;™T·ë«ÌN&¥–ev²åY¢ô#E€Ù*³ó­ Éùˆ2;? ™Püfç'Z¤Äñf'SF^Á +³ó›$Uñe,4*Âìü—PŠN.$\.ÛsÎïVõs—Üõ«åý«ÌNÆÜÀúþ(³“évíǼ-Ké•Ùy) )}´ÙéÕùÏNK=òñ{­½é¯ïw‰õñýE]p>¾‹…ºøŽ±™ÞÅïítdäârÞÅ3ÜGÃ7Ȥ$IïâI–B(&ÖÅÏ;aغøùO-z3.~Bwλøqe'­‹8B¿\¾£žç}|Ç(ÓÈÇ«\óñ2vR=<ýw ”A‹DJ‡ïP"Uß_c=œ‡ïà#y?Þɯ‡§É‚’Jñ~ÈÄ[çàÇKb=ü^ù—ƒŸ|­ƒŸ’þðþ}¡­0òïëºFèß—ª}Y÷Nj r!Ö½¯«fÝûÂÁÌ»÷/úrïû·j¼û¼ÂHÖ½OL«üDmÀ9xÕ)ö~ÞÛ9øq+¿âàÇkŠ›qðê2Œƒ,“Zwðºú¼ƒè¼?ðn¼C’-2…ù¯¾•«aØï§î0á?Ç&xOŒSNçìgÀ›¾tóJûs|T +û§Fƃô*ÖvJmŸ+…±YY£¥—’Ï) #Q¿¦Âk«PA[÷Ÿ¸àj:ŠˆÛ܉È&:}¢–Cý«é˜ò@AÊÆmÄËOr;Ô徯¼Î礤ËmÏÏüòmEÈQólšQ÷#Ä%'´°O÷Bkx8Ô<À$Þ½ù—\IüÑÔÈÁH‘(¿ÎW¢Ê§ôÎJnXt¾8”éνdH2îéäŽú\C‚xú’%Š~;šá™žûuùþ!hd@ŒLÐ39ôm¢^R¹ä€0Ú¾_r³¼Šv~ +Yª$àä˰Ÿw¤.Ìs!¬Ó <‘ùVœ~ÙNG^à3¤2&‚<©u¬Ÿ%Ôz.²6Ð5w4¦öGEº€s7l9oaäEïž-Eú凕ª¯Lˆjȧšý–8­ÛHÀSÛÎk¢6Ú³ŠŒ‰|˜ ¾¯G' ÏuüÏ:ß·!„³—MU2sÛÎ_8ã³OUSš°h#OÉ9EXˆÓ:djèà^øK† ü÷Û#*]ðÏMùÿõ±ˆï)é :}YÞ-ÿ '"¯¥à¶ä/‰·Ri’_uXD +Él©r0$¿‘Eó¹Ÿìþ[‘7väoª´Ð¦$$µG9&8W.I¸Vg*ïwÐѰý¸ô0¼¼üy²”?›Ÿ77¤=fŽê“¿–2üyÊSEÏy4å©¢¾A”ë£Uª³Ó)*eRbæÏå¤!1Ñ‚ŽWÿÊD;|7¶×ï¬2ÁKR·Ef oîÏw$X0Á‹ˆ-R«?éÙAÛXFë ±®bÞööGçË:( Uú]Fzf×hšKªåL_cÈà4„Æõ.45‹Ž?‘Ÿ¿W@íç¶•?)å ú‹¨ÍÑäMùÌ´ä·UUXëøE"|Ë)þ¹ybº“ðx+•µ +ïØ©£˜ž.Ÿb¯8éÀáñTˆ¥G9FB;tEYìH«ŒRÛ‡†,£±÷µ&W>:Ƭ ‰x‚#{ËîÊ(˜G—Â>Ær`.!Ì–Œaê­ÞQ`Òhè'§iPg›ÊØ„N4?fe ,îg© isŠ,2¯>ºb‡¦UvØïWú¿çÝ\gÍ]}5QoÎY:Yô,¤RVÓ‘~d½ê1>rEQø MYº +K\nÓhC/ùmdã7üÕº†,éó¸ÊiËä¿T‰Ýl!)pŒ+I…vp’¼dëè›Óæ´á²bÊe‡, ÿ±› ¸R¶°Ì“ ä=?§ýÏXA•5]…l95€è´›ü°ï²"Ï™bøgâ6¡ëøA)£î ‹¿çw"ÙwQ2}fÔGŠÅ§9MÚ…-Z¬û™ñ`he›†ŸL™õ<ÍzÊÞDܬù£ŽvŸÒá¾…<äsÚY¸°^ +2lÒ-ž‰‚—«M›MVIƒFØY\ÔV— Nf;i¬x€Âž.eoÙ]wq™It +È;¨+*£åD%äIëÄuäžÔSKiK6—Ta‡äO·'jEvÙížœ™ŸÌx77uQ?¬å>›vé’™ßúØ2DA¢”þÅ•WÙÈ™b—÷׃iÎP?+BˆÙøA­ÿˆñHU¶ñá +ñÿuLx´%è¿;ÂÞQпç2ÒÄ]E7—º>èͲ鑔Ø3NÖk®GLmˆlHJ‡ˆ0¨ò'—”$Q=|úK‚Ìn;ägÿd²$Ðå+ÎÐOj¢ ðŠWG÷grñ¶6 ·‰Å‚ìÛTŠÌõ¬ý¨—.G¿œ.ýouÌGÆó¥P×E`»ÝQ‡<Ïsôë˜Øà~B¢ó„ÐôE 6IH¤¤7,Póz³]¨!ÛÔD¨ü)ëÏ©}lØ^ëÿãé©Â*;FìrÑ^ЇÍõƒmjܦ´…åA^ú¾š\ò6äfܷʧjŽ)¹l³¿ð|.£/úA¦¹-RŒÚHB'>ærM h)’ÛËgðwR¦ [±ºÌTŠŒ$ÉÞ‡ES“°Y²è(ñíéyqÑ1WLˆ¢d¤%Œ®¨t§vGɳz>ö@jìSC&Ú%8ФÁ}$Û7h +MLÇÕgàØvu©³G(h꜒xæÓ³¤³p¿7Ö¹aw¾dÇxòŠÄoÚŸæÏu–ˆ uò&;èéǤ  :J„à’Ú‚9˜³F4Š|.Ÿƒ’Ž<¯c­r¸g]Üå5ÓñýƒpÅó¹ÓÉò­L…©mjwÎöy$ô›{:&i"§zêˆµŠ‚äl—³XÏ÷ÍÒ¯­ÝNÔs Ùî«<0iCWÈ¥T\Q›dÇ9lŒ1ð±…É!ƒ™¹jsb™‚%û6KJ1·÷Äxg3uBò%ï*d\5a:vN²n”ÅŸØOoŸ{v q9àUöñî_BŽm2<–çY—ÔøLš!ò¯|L¨¢7K3庬{ˆBïµÉ§’L“dO_>ÿ‘…Ê<½àìÍGÖ('Ò)Lyà=¶³s®ÊÉ:v Ð‹´¶ö²så%ÉmG@,6‰þ"%F>‰qšKô˜çÃÿ]0¨ëT9ÈË!è~£ >>00ûÔg¶ _Ç—¨¶#EØüD÷OöàGÃt‘¨¢?aÚ{žü\ðï*>ĵ +rl ¨€aÚç?F7½¤½¯ëÌÜÙ¯©Ï)-ËÖß6é¿þ÷YÑ·mò£%¨zZ´_¹!0÷Bèÿ% Þá[¬§÷wÎ •¶;g•Óª©ŠõU9íˆBˆèTøÍp”$¿àžA¤Oœ5ØX»%æ%IŸŠÐÔù£4vlT+ðU=>òmÄ#å`¹Òåøœ|x¦,º,x {\üè4Ž…+HYeâÎ6•yü¡Ré‘ÏA‰åÃØ4!ø!ÒdO-@­dT”Jöúó~¡½š³ê#`/I¸F"eü6WY‚ç*·#0^&m¬¥{F©¸î£Öí¬]JIž„´¢°H"ûµ½ƒº¾^$¥¾“•ž³wó—{"š”€P¼iþ_ÿÏÿéö¿ÿ§\fØ ¹LIgû>÷rOÖ”‘Z 4IÉx{¹o£q9é¤-.§ãȸ퓞ȪHŒ—%zÙ&šï#—”Î{Ä>**2[ao>´×ùHºEÜz‘u°%´ $·$m-û d^Êû¼ðHv|Òué·\ôJÓ Œ½æ‚$? 6 '%eLZå…´ÿÁUñEüÜ…w×5q¦üiIKÔíÞäsY†æÉëïðóµÀ5x­žGšU¸QÔó?ª;(ÃΤ™žŸ/õyIךÅðÀ zM?UŽ´kSéÇ1 µsŽ#=ˆ-üè`eÐÿ÷|Læ'Ê9™Î\£‚ÿH›êë¬Ó˜÷ùo"u9Ž{:©î}š¨ºº´YNÄtP•W)¼uÓó^•WV˜óûÙäÓ!áÑ:­"±Ý+Ÿvû€ô¥tÅTž¶} e;¤. 5ÒŒä¿þX¼—¥9>¯dÎ~¦;[ªâúÆÉ\S`4O`Ôå¤À +S¢·xF{í/O¢qMuïû*ZG’Õ2®ä¿?å+i9„6A÷•eÉAò-ö’®Ë븪~@ª¢ŒS—Ÿ7,£Óò‘.×,º‚'¬Û;÷á4Î3Љ?äçSÆåi¨ê„X9®cœú(Λ™kx½¬"cí±ögÝè[µÒ|Ú(ä Éui¨ ȽîšÔE¥˜J¿‹­¡ÜÕtˆ´î˜îiïJk—a{qŸä*UÓ—|ý©wªÒL\±JC±ö®5XQ¨äªèfo:MGT Ò¿:r±Ô*? uIÞ½‹DÇ‚œŸ\ˆ«%LÍŽžŠi'…âtJŸŠÊé¼ÀÊŒ6I¡}@«s{—|²´O…×80çA¢£D’…û€q()¦Ã–+õS§X?ËìÃ)W’¸ÚM*¤/9k+˜}H¿ü,Xÿ9ê3nñ{ +㻬lš´äŠ÷—|:¸øá"oûÆØ¤îD#™ òR4¥ûŒx¸&§„âÂórŸ3\v'µÓ¸ÒŒå’ ÕÒ³,ü„®òvê&û<¤°¯•°O•HV°ÖÂÎA¯®'O0RdƦôéî£ +ˆ ý;Ÿš¢\R÷ù™€JÓ¢Y±šx?Çlj¼i`b÷ä“о±”•Q# +ëæ¡n…ê¸0ó© “Ä~¦ùïq+CÁ¿ULvp5žŽÍ´îm†e^N‰_Õdš¨™!܃ˆ:èßÿÿù_ëíûÿ¿OŠôw!Œˆ #¨ÇýçïÂ|çØ´”LÀä§ÜÒ öšœØY)7¹3·;gbaÞíüN¦¸#Žã&ºÃ¨'?Ä쟈_˜Ð9©AÍÈàTʽ®c‚â8!×àf¹ Ý5l¨í Neg\ Y–;N%l@‡’Z'lßoG + %97E7kR©aíìù”3ˆ7.ú3éübýIŸ¶L¾^'üZj$lêD™ @‘ú+ð|ö{j’ëŠzôç'³Té:jÕøŽ|d\í¼ìvSÇ’òÏtž×wÜD:f 9Ÿæq>–0‚óaØ ìYÚ ¦&ÓIòxvÿ8mÎýP0xÅÄßògv†–J"Pê—áfA‰|¡ PêîzÒ@éai€|áai\•nKóNé2°¤£²=,Í«0èðD)ÕãÒk +ŒÅ¥ 1ƒKò#edŠÇ%ŠÁ~ÿâ’– .É%ffiK¯7‚KûLSSv¸$:¤bKwëai`útK +µ—úÕøâRÇ`¬—úkÖ‘Á%]¯—:Z¹#\R¯èÁ§Aß*2½æ1Y\j(Cx\jÚba©]…4K ’–ôÈàa©_Þý–Äáwd\,,ul3K¬Ž–Ô…=, ályTÒj*у°‘A¥q«6•ÆU~ð›ú•´°¨DÓ€„*¨ÔïЛ*ÉT KJŽÆâL¥ûõKòšUÊÓÀ’–Ú•ÆúÀÎƒŽ¶°DÅ´ÿXRY†–Ú/¶çÙB)’ùü"†¥)‰î•æÕ ·¨4‘:WTš`ì¼Pi"™ëQiåQiA B%¶dQ©¸×öPúÜqÈMZâ:¯ó9ÕÙûÚùþ&Xwt7B¡³o£äYM…ï²/‰RŽ yÏqL +Û#1Õ¾I½e›$°éXµ§sˆ_Du»|>TVÅ[×Èøt_öRˆ™úßÿK–„ À:úÝ‹@JîI…÷Ù­Òj¨ýË]54«`ËØ¿1ÉFÔ.šStùé|š¦=ŠœèiƒÜW¥{ô$ö‹œG1\á“п*=;µ¦.묂¸ò‘S…›Ã HÓ‡J‹I'b}úPÉò£iôxÕ4Â>Ô¦9¥ÈÆ_¨«by€@´Þ¤Ó¾D/â³hO€¥ñA ¸ä.ÝÍ‚ús§0¢E2E¥ÃA-3¥~!ˆw‡œà,%œ›"ÒYZ +AU>AÙÁ‚2΂²&<e¼”Ò¥:`¿Vœ Ñ£AšÜ mEá7|ˆ^Fk¢7 –€ þ\kˆá)Ý/Ýõg軑 ‘¡ÊaÑ™N¤ ýFUný ÝöÈ!8Ñ£R3‹@û Ð!™*tÚ?ÔÓ½1@ô>kGç€ Æ®ø“_ Ãòsyð'#EèñG[:#ü)¨(xüy¦´øS ­áO’„ÇŸòf ô)!a„Á|2²á +>/-pß '„€ŸŒjŸ ІYCœ‘Áz¯"_ì¹.,Àžž^#3¾ØC&•Gø`­0ú{ÈÖ*]ôGCvo‰‘â¯ÐS +4ò‚T\)hëq©¸R0ï ©¸R^ÓÊ%W +ÆE¸T\©ð.Wê|ãRq¥‚ ëRqÄ—.}›Šk7Ðð¹¸ú¡OÆÑ(ò¸@D¦ðäŠÂ2ô¹¸öøl&N•4¢L\£4׉âl&®ý#¼ú“‡+ ®×׆J½ƒpL®Ô«hòpô¦ž_Å¡û†]&Ž„’qß™8ZVGØÍdâä‚w@ø7ÇkU“cŸT\)¿•§¢ŒU—o+:"2i¶Í¥âÈgâ¶EÈ.G¦:ƒ-•Œü­KÅ• ~µKÅíûVò»ã,Ðs^),•r3²&W*D߃\­…Ófæ²q¥Þĵɯ¥#Ù¸»ò\6Ž. 2“Ž+õéüŽ.8+¸t-Ê&逓Ž+å:"ÇYØF)Џt\Éè]tù8z—:‚ÆT‡Ê[ÿ›£õ‘?å!^ƒ8{ÙòÐ6ŠÆ¹ËÇ`âòqdjñÀ˜óãâ¹å¼‰Î×›~aÈŸA©bútJ:jÙƒùÂþ¦Ò•v‰” +Jâ‚=$uh‘zHêwJŒ‡¤Žd…ƒ¤þtçY@Râhùªö—¤T‹¤¯!Ò¸©r‹H‘¢Ç¤q5<& œˆ<&½JÏ‚Jýr*Ñ#«CEµ¯<*‰r„Iò‚="5d ,"é´à‘Q="Up="±ÈÝuˆv*’ò‘é »sÄê¼R Im’*fëETïã²Tq0òTovÇU‡J“VH ;Ì#’vYGˆÔyDbE(h²~©_ HÞÓ#RǸ:H*¼ˆxI®°@TTý^©]?ä +D¥ê¬n H•¹êU|E€Gõò£-Õ;þEð¨B­<Â£ŠÆUG³=VÿbÑîA§c#S ÎÏ¥Ûàæósé*ÚüœŠDùü\FSu”ŸË8ûü\F<ïós:L>ÊÏå+þhóstv b›ŸÓ¡nQ~®`f¥æç +¼ÏÏU¤Ö£ü\½[Çæç +8}‚®`^P” +·­ ‰î}‚._ÆMÐé©Üeè^l†.“»rËÐå»…l†N³¡>C§+0ÊÐ!Ûat/m3› K dE º ÿã³pÕ´È$..JÐe€‚OÐåWCÉÐéD¿(CW÷ºÑMÑ•[ôñ)ºzË>'EWµíÌfè*ä«¢ ]ÅpIŸ¡Ó&Ÿ¡k˜Œeè”[î3t }ó>GבºIº +/å“tõŠ×J’®"¹¢ +,õIºŠ´>IW´Ôí D42‡"òHLl’.ß–Ÿ¤Ó™`>I—1É%é2ÞZ”¤ËÈúT G{bÓ/¼ø+Ñlä"MGzãÕF},š´<#Áã1‰,=G¾×ùšxT.7Z)»™o«ûÉÉ2ýý˜´kâh-íéL'£¤e +^Èvp €4tnJ?½öâ1ÉëËé~¤cqÞ1M²Ó¾Cþ¹ìö*ÒlûäÈCIÓLwˆÒ>ПqƒóHï“1#&‘ó}$\çc,èж¦Ú=_Áþù]øMGÌžÆÝ~Z³qp·2:¡ãJÄÝÆËBÔ»ê3ñjE¼l ¢ÜN€»>ÏiGŽ”gL5‚'Y‘ÐZfÐ!GÚ ¿3þÒÔ¬žCùÎ9ØÎR:©ê¥¦¶ySE%ÀÄYï(eÜ˵×ó¹4¥Åsµ‘L§r1i¸ Ã?¥‹¬i)å(hå>-ž+qœD7.ǘ}²âó?MRµa™äÂ9p˜g•eéÜ£±g6. š‹œ:ÚP9À[|±¼Þûérž*Wêd*§ŠðD0^€¤ŒKêÝ#A!”¬ÛuX f'°éŽÿ‚b[Ŷ+â[t¤u9SvPË™t³fÚþÉÏýeÈöÓXÚ÷¤sî(WéÕšç;2ú'+¼îCÙ¢³5HÒ g†Ï~[í|nÊTÝ3Rsãhîâ­tÊtÚ ðOÒM‚Ññ3¹žvÎÁ„ŸELGä’ã×±ˆnj‘WKÓ1DI€1¹ŠO?ãE*szÙ$s¿ T~ö]TÙ$W|ã­/›Dë]g3MäJØ ÐH´PT¥?À_ºÛÒà;{ä ¹ý†Ë¿âïÊÐ ðwiÞ€‹X¦üšp±ˆžTGl¸ +ê=.\ZxsàÒ +\®‚oÒÜ;Y’&þ[õò‚\ü·*ÎÔˆÿhêÞ(3ñßj¸Ý þ£á”Ê]ÿÆtIˆèšø¾?É‘úþý{~[C +…ýäaÄôd0TÜ„Û$m²6ü£×€Þ þ­r[þ]ø·^þÑ:ÂÐ8þÝõ„ëUˆøÄ+£×ÙÅ+£é6À:ú+æ.Ýt‘I½AüGÆsÈqHN&˜øLªˆmã?z£C¸?ñÍxD~â?žh[~P4xmŠ:2ÇK+Â.ä—È+Øp½”MÈÓ2Ágý€4Ó1I«¡ i`’þxsp¤Ï¡EÑ€dDÄJîpR.þ£[:¹ÄK»’4þãi›%$iÐî-9$i¬zå·\¸¯tñß„ëâ¿ëÆ‚øwr +Id*BçûÆd 'ŽÈ[4ªäìòôŸhñçðoÝûòáßzßÙ'ü[÷Î,æ.¤Ôoø·në¢ ÿÖkîŸ ÿ”û… ‡þÍ{ú°áß$õ5I5¸ðoÞ¹<þMðr}ø§j"&ü“+©”¢ ÿH!Eæ«Ùøï=©÷ÿñÉ¥ÿˆÿÆewØøo )0Šÿ]|87óà€wÀ :‡€Wòà´tê¢ðà‚ ¸´ô_àBÍE€ëM$4¸ñÀ¥à"jòF€$:~@XÂzPñùg­F€d)ŒÉ„ÚE€ôSšÄÐ&\J’t Ý8ÚY}¸ |àCÀõš mbÀBp*·ÚÇ€ëfõm 8‘߉bÀ‰¾qN*ž¿Øôêé21 v5h 8Áìñ1àÄcb@Œšõ!àÂITCÀ*Eêü…™á‰ö·„'ø„'4Œ<O4Ñ^÷9Xà‹z肎@xÜb¢á!yNÁZwЃûÞšR„·ÌÓœË îà¬8 îÈO{ nWbÃcp»žÅbðK"ÝbpCÂ#Âà—Å`!¡x†ž|ÀÙIà×âx ŽéX„àq±ÊðÄð¸Ï×À&“‚X=>;D)؉SϳNä ¼ia?G)Xu·>»Ð¾íS° JQ +mä>K€"±³ÍÀê3Â߉ԓÇ_ÕŸ÷ø;æŠðwÜ´Åßq‡Ž[üá¯r·þ­¤§Q^·sc-þv¤Õû…-þvÄGþИ<+Mx@eÆ0¶Gt¶¬C<ë$Ì( ;ï(F›„ا. « £Qv"ÔðIØ){Ÿƒ]7Íês° ÝF>K§µ:C(Òs~”„HÃx”¨½E¦/ÿÌ¡õ÷cnïWÛ’pÆm™°$íhH8ãNù´$œf3OÂh +H8žÏ“pвë98ó®cÏÁ™¯²þáàP£x s°}¡A"â଻ñ,g¾” gÊ;‰(8APp&蹞‚3î@IKÁ8m8 +΀"”§àŒ—&«£àŒÛAl)8Q‹§à`ùE œŽ‚“¥àtÐ<§3ÔÅO<>ßólˆ’‘I’*‡¢ …ûKÁP"ôœqïÌSp&˜cž‚3!)®œ…òVDÁY¸(8 •{ÏÁYwî‚çà,z;a +vqFö ®A‚u*afŒ+¶ > öëA}ãДҧõqåö<¨ –Ó_½y}.õq‰õ1ëÙ¯Ö'¤È=°kBÐû¼ù,ìƒÒ<°Op!=°/”#`_w¬Ÿö…6Yì á¦v¹¤”ê=°/ °ë¾‰€}Ý<’vÚT!<¿¾ÜÃúB­ÿÜD ÚÃúÔ¹QÔ'¤i<¨kñQA}bNe„ê¯ñŠÕõ4äQ}`ò‚AuYÑzæ´°®ÝÖ»["TïW1âzGmÝ£ºöë¾P½‹Œ«õ~SÔÔ_ú€ú¿çŠd` êýÊÝXPïP´ñÞ/ÚBú@+‡tí©Ž } Ã×Cú@ÎÎCúk`˜‡t-ÅŒ»Ì$é1}‚¸aºVÒ=¦¿å ¦Op_"PWóÈ­3<#SŒÁÎÓÆû¥åÙ5ï“Äó†!6I<ÿÍ¥ˆÄZ}ŠX™>E¼îŸ"&j™iRÄœ¿Š¥<ǃLh#ÞF9…#G<^Ý(&G̳$Iyn£D›.GL—Ô) ßñx íuIbN®Í—”'%ÉN€O¯›©°IâZ˜K“È'F'™$ñÄWEIb­Ìø$±fä}’X×_”%Öt›ÍÏ{X·Yb(e‰'Î$>¼~rx·érx]–x¡\ï³ÄëvUÚ,ñºº§>K¼À¯vYâñ@œYbZGå—–çt*Yb˜*µ“%/A>—%¦éœ+Öò¤IœZ75YâtKš>Kœeî†O§Û©e“Äé–Me%óTÙJyŽt)E'ML÷Ÿ¾RžûOÚEbÒÄ´}s,åI{4ÿ’òÏ¥ãÚ4ñº]6M¬ž,J/hCù<ñz¦¾yâ× Ò牴!}6x^†¬7Åxñg–P$G,¡$}ÅŽ$”v¸ 9S™M$Plû©Ç&m˜±!õÞž#D¯2FÄs„¸ÏzÀºp$¡±Ðî„ȈYàCþµ²j Gh(31àm£’Ñ¿¡mn¼ã ª‚Kdé8Bƒ¢$0!25)hÚm¼Ð\p„†¢Œãõ"b|YBCî€&DEý„%¤Å&ÏzP#õ,¡ç(ŽPB“µç‘œ°\N9BÚJë9Bé (_ŽPz ¼;޶éy"J(D¦¸…¥våyŽP†F²çeIŠF¡ŒîÏÒÉÌž#”0D'â%Ì9÷¡tçÔZŽPBwbÄzåyŽÐƒ^DÏz In8BÿžK´UŽÐƒâºç=¨D¡çªGè¯ç=xìGè¹Úo–#¤óL”#ô`J[DÒ}®þ°å¥;’Âr„2yG(]"å%ä€GH5d"Ž*†xŽÐ[EÆ„²äÈ"ŽP¾šØ–#¤ú2‰2â݈#¤r¬ž”H¢ë—)FË?ÏrÐá•AR·Q殆…Ú¦ÅçÈ„á.©Ûê±7Iݦ¢6Î;´r.lR·LôrIÝmºRÂߤn+·…Í%u[áÙAN·‘êW µMûûMN—öÍ6JÀârºí%Ämrº-ß,­Ëé’Q{¶ þùK_®ŒÒ±ËéÒ/:ˆÍén‹¶·™œnS¡‚ §ÛÊ39]zÚÇKÛœn+†rºôj!~öMé¶‚@Î¥t[…# Rº­BÁ¥tie¢…ؤt[…à^Ò%#¦š˜”.ï„ ‰9ìšÕU“Ò%ã )\J—¾ã¦‚?ÉÙ÷×;;º'èÝûωKêÒn ecå °MZ—^×qHëÒ_ íÒº´(NâÒº´ÍðzMZ·©ÀLÖmG4—ÖmI×&«»-7ÝcÓº-]®„Ië¶Ñ—Öݦ‚¼Òºô7ˆ™¼îÛdòº|%¡RÙZ-ÙÀ/6iÝ–®S1i]º#¨7»rIåU›ÄnËD¹¼nËW:ÌåuÉ›à€fòºäMpö4y]Z ¡»¼.ûŒŒaópôhˆ3yݦ’A^—Œ ÈÓº¼–» ¿i]Ú |B›Ö½ ær·´Ï)62Å(ügXï@¾Ö_up ëý +ZXïXÓ¬w„Ö8–Ö]°ÞDcÁ£z{©To ãTÿ÷¼šyÐÔÃzE;އuàÁzE…ÁÃúK¿ÏÂúK½ÏÃz½S Ö+¦j×ë+Vw¸^oÿ»ÁõŠ©?׫ìƒÖU¤ÍÃzýg… ®zœ¨7ì^ê xéQý5 +Ö£zC^Å£:úŠ<¨£Ìð¯h­?”´˜Þ‘‚¦÷Wà0½ƒï1½£Êã±ùõõ®PK[­D䬳պR³¾˜Îʬ?Jµ­Ý’µÅô¦“ÄÕ6È8F^ï‹°^ﻵ^¡Èï]U< —«kf½`ÎR„èª6â]%/=¢—+G¡ˆ^®ÔŠEô‚>7‹ç¯ëx@/Pêö€^Њâ½\õkW©m´èªìå]Å #D¯§.ìñ¼ÞIoÏëU8óxÞ$ÜwéàD çMbœÍ’ÂαŒ=š7Â"4o¯þÙÙÍȃïŸÕ”êMþ{5¥ +¯¦T¯¼£US"¤ü%§»”ÙèÕ” +(^M©]’¬WSjP8ðjJ¤ô꾑SêwÒ—Sê7TN©_Æ••Szµéy9¥W£ž•Sê”ð Ë´ôýèŠweÚ¥” è)5Ôû½žRþñzJ ÑŽÓSj©½žRE)ÒSºrØVN©BrÞË)éŒä”4nµrJõÅš0rJl‹H8¢¢_Ù N´’ƒGƒ§þš¸HÆËéÒÓ:F?|唚 +„{5¥Ž²¡WSêWéXÔ”ˆ/S~¨éòÒœ¯"í·naÕ”È}¦EÚ5êx5%íeòjJäI¥%Ö«)Mix÷bJó6Y1¥q%¨±ŽÇ-XY5¥q;wDMi\Q¨) 4éy5¥'çÕ”öíÇ!y1%Ú†)¬ÑÒ«=¸îÕ”ÔEjJ +^M©½æ|Õ”^Z$äÐðJ"¤‘)†‹?ãOÇX«úÒcñ§ƒìñ‡Â:‘3òø£ÚˆïÑgH~σN¨ÐgàÐçÑgÊÄŸyÅù<øÌ+Ï×įK£ŽŸ…ìj>ë’\-ø¬›Cµà³ -eÀçßsÉ¡cE ú,Ô(<ú,qú|Öµ¶à³Ða­à£¼Ì >èíÁ‡†ÕËx/ >§€}¦„<|Æ¥XðQób)¿ñüŸ¡SÙ<ö@ëÆãKG42ÅHñGèÙ.m~zÈØ0.ä =dî­…2‰T‡2®“µÐ“ŸŒ™,zÈ$²µzȨcF¾ÐC¦ÙRhoèÉO¹“œ,ô±žYI=ô—fÀzÈ4Ðüa‡?ñ’ð¥Aá <üíE:B-ðQrxè«_à!“HóZà!“‡ ôðk8Ób¿Y(œZìáÓ/öð:Båù‹=¼þÊŒ#6‚˜þÆ6œg±‡LgËyèáßQxøžÃñÀl’|¤6êäàð°i†ƒæùµà¶,òðë©þ‹<üê1`„¡‡Ñ)Nzè9ëRº±¿ÙŠÌ¦…2©±…2ÊùÅB™$δÐC&iÀõq…{g¡‡M·Ž÷†¾$8ÝXÇõªy}±‡ï ¬Æ~PØ<ØCI(S{xïžb²ÅÞ¡­ÆìT~M5Œ|Øåúòb|xÅhwï|ØÔ@á|aòŒÉ©¼àCæªlò'bÇü‹?£Ï~T‘búŽM‡«Zð)-øP "ðy €µàS?xð)·4âÁ§¢%ÛƒOăO»âÇ|&;(ø´Û:¥×ÃÏÞA踰ðÓ¤¡OÅvúT4Szô©W]Ç¢O€C8÷èS°C"ôÑѲ}ÊÕå¶èƒõÏKý >ª¡ïÁ§@³(BŸ‚ÝãA¦Pe! +|Øgõ*ælÔödƒ?TF?õޙǟŠ3ŸÇŸzûÄ +iþ¨h7ð§áèíñ§½ä:üé·ldñ§¿¦îüé`ÞFøÓ¯ +‡ÅŸ~Û÷-þtñµ~út¶ðÓqœUøQ5‘ ?í¥¥aà§Îàá§aÀK?òõ~*Μ~ê•–ððSÑ êá§b~ŽÃŸz§×{ü)W7ÂL¹•To +áâ¯ð“:Š4þ¤öRÔx7G°E +´B*²v˜ð¦†¹Ö¶7‚L bäßÞ2IíÚ÷Fñéá «½¼AÁ°½dÒ¡T¶7‚Œr¾æú‹øSÛÁ&´‰Ûæ2Š ˆiŽØ›R +#¶7‚,Óylo·µ½l:#\Ü&&ò¶7‚ŒÝooÿHõ'ŸÞ2-Lhµ½üLZzi˜ŸW£Os½@!IÚæˆ³&r¤aÎ+ Ÿú¶Gð:Nã£aÎÃXïo{›NÔàPƒL+‹ñ﹤Ä-¥RÇÉÜ›*ò&’hóm`àþK•¢o[Pz·ýd”Õdû#øa×R¥È”2R±¦?‚÷5xÎßþ~+S”r¿ýdêˆÔm%dû#xyd‘÷ýöGðÖWÅ8£¡J+N•¬>ýdQ«o™t~€é`Dè˜*Å™O¤aÎ&ÝÄßþÞ È¤û#øŽpHžç;èó+1ÇcÓìá§?‚7FÃ~û#È$¹|/ù£ A˜TøßÒE!è~¦nœtEû¬]Ÿ¡+ïc®©>²b¨/âÀ@“%)“|[¯säûi‹`Ó©Óxêw¸Þ„’פüÃÈãäŸw ÚŠ€wÜô§Þñ*š›— èÿYÚ¯*{ààYFÀÛQäõÀ«‡F¼]…T=îv¬w»T<ìö;ÕÔÃn»´v)¾ ·¸Ûn^ÇãnCjËãnC·ŽÇ]úË&æaó G-î¶{趸Ûî$»];Iv;ÚÓ=ìö;ÕÃÂGÝq™ÏuÇ UuZ‹<ê’\4ä˜T¡îD´æ¡u¢`™®¸ªC݉ºDº¢EaîUßcî™Öc.]éGO"oh°-æôÔyÌèŒ0w`¼ÇÜ~'=ZÌí·f{Ù¢+Ð`n¿msûU™r˜Û‘ÙVÌÕS—ÇÜ~;$æö+ra1·_Ʊ`®Ã"Ì·Ho1w ç1Wu§#Ì8xÌÈ(æîtõÊ-æNô»yÌ`ÝZÌ"¸Aî¼t ¹óêXô™·iÇCîDÎ«Š»{Ó/ˆü+æf]`.Opa1—,ª[õ½k2¥¢Tíÿ>ב­éP7gçên“p=ÔÍ '$‡ºÛ¤.ƒºÛ¤C¸ìn£¿»û/RZq¸»MJ¶w¸›Ÿ+ÂöÅÝü܉«w·©BÃá.S4²‹-(ÎØ%Drìnc+B23°K?ò©ÑÈ.6M!™9Ø¥ÇU?á.¿ +ù‹ÁÝývå€íp—ÖĪðJ:¼9I/ðÒß®bøxÉtØNx³¶›À› üŽC׬©èÈôs%¡±l€—LÈaàÍmôæ‚Åä 7ëØL½ûÆE9&€^Ú×§rç —ÞÊGvñ»\óG¸›³(c;ä¥Õ5Fƒ¼´óÑjã¢]Zp xäÍ ³Ãòf-`yä%[ãE¼‹ð’ift+|—~˜”O îÒýYqà.Ýü)Ÿ¸KÏLÓÅ_ÜÍùÊkÜͧ‘$„]Zîõ CÝ\Pìî¿ä&t »¹ ºí`7¿+poØÍåÒ&î’q!~ûân. -•+¤ìp7k‘Ö+íŒÛù%ÿ »*Án}u }a·¾*¾æ¦+Ú.ìÖ;ûÓÂnÕ‘Zuun„º´ f4¤‹ß½J|Ô-7›ãQ7_uAÝ|‡…XÔ%Þ~D»´ÆŸ(ð'G»´0ÕÖ£n¦†¤0Ú%æöYØ}•÷°›1°ÀÃnÖ¦c‹ºYÑ߃n†ûPÐ-(xÐÕáA·þ#Mr+jÂr+Î/È­`ãzÈ­<ê!W[A#È­/Meƒ« ªÈ$k5‚ÜÙW¹íÞ”…ÜvÃ~¹ Y¹ÚZá!WµÇ#È­8ÀyÈÕr‹‡ÜŠ>"¹r|Ñw¹¤T¹å•ˆq˜[n¯®ÁÜ‚¤­ÇÜI˜s ª‡ +ºzèò [ðØÐ-D=êh;(êê),BÝzåê,êV”]=êÖ+³áa·^éd »õ»"Ømÿ¤Sñò°Û$…eQ·)Õƒn»! º ‡?íÊ{Ðmwº¤…VíL1Hþµ£âªx$¨CVæÛ}À`™¶‡¡‰Ÿ1ƒ¶…ƒ¿£h +e ¹?à9Õ!í`S–A<âY€åôS/Ȧ. QØë‚ ¹$bXü÷QK,ˆvu¸–,ÚŒRaa>/Û}dâKf=* Ó%ŸmݶüR¥£Äa"mV6áÌ+ ±R9¿?¿æ×ݬ‘ïFœûMZ7ëüFI;vêpeiiÊÙ¤DÃÝj“Wz˜=D˜t’j{ÖC_)Ûñ‰I;ó>¸#oâ#JkâcEgQ%ùK)r!ÑNp½㹕صä¶_üQÚ}”¶TÛso*Iàî/dãiä'¹Ì‰"íW)‚ÂúQãW^ü,÷µ_ß8š¦å¶ÈÌã­·{©²LŠê[Ÿ•06È´ó)íW8ýFæyí*6EN†䎳 “XîÈzä,fG Uc ªM0hî-„oƒSM¡Q°+VÉj·$ºUz£IÊ¡ÊnÑ;¥ö™´ŠæÈЉ%.æÖ¤|¤3n·ŠbÄÆ†ôy%2D$d(ê TÉ´6Wí§GÝuÿ³ÛߺÿÈ:¹6U`’ù»£ PÚ*Ÿ˜E`cûœîFªdAóÂx.ÓÅ´(°ºr<œñ§Wþ³›W®zäæ3úž½›Ïàéy?Ÿ•cäÝ|¾Ø nR°Ð»ùŒ2fäæËê¶n¾ *çÝ|¹í ÞÍW¨òy7¿.N³~^.Ÿ/˜ãý|¹Ü>ëç ôÁ^~^7‡óóv½ŸO=ùùaYççv©úù„1w‘Ÿß?à$»¼ŸÏ7?ŸßëïÏÖáÈ4sÔ|ÿßrIô¼ÔçK¢Aä‹úüCÀH5¨?•åPŸÉ!Õ þ‚£P5éQ_ÇÅxÔ_ˆ Ô_Ršñ OsÜJˆùó¿?ˆ/ç;O,àëÌ.øóÒÍÞÏˈ1p?цáá~^¶™‡ûýëùœ…û‰Éôîå(ýºÙÚ&Cq¤$îÁ^‡F`¿^ú‰ì×­×°§Á#çü€=M9wäÀž–'Žìi:Ê)å`OÆ!ÙIö´@Æ4`Ï“–žcªè§ü˜EE;%å ]ûÿ<¥ªbòN4¥J»Üsîf†!>·Öÿÿ¬½ÉÎI’%ôù±ì.‰ÏÃEKl>!!TÀ>PƒÔÀx}üØàƒ¹ß–‚NUeDþÎwýúõÁÌÜÜì˜k{¬–,¼ý¬í¡b“¨t[Ó$ilÈCÛãÓÛó„ß&3ºj{ +´Ií­írTã¥í[\i"FÛ·¸I·Ú_ä}FÛcTôÌmÔ=¦@“Ì.ußÂAwª{@šNbÔ} +þR÷-¬z@FÝcèIŨû6ýVu±ôõyÂçMì_ê[¿‹B¹Ô= 9~u¡×LE£ï)@I KßS@‚æŠêHoÏ>92³*R«î³ÞÙÜê>+Qí›'­õKÝgÕͯçÞ:¡X{©û¬×·ºÏkHŒ¶ÏzŒ|hû¬!‡·¶ß¨Ž¶ÇHjVç¥í1le´=m¦þ<ãRÊ «íé:GìS£î!a44Èèû6ƒôgüŽQùXæÎëEê¡òáhÖJÊ—ÎÇe_h]J¿m¡AFéÒ*[—ÒG/Õf7J;N]—FéChª7ôRûÌ–°ñ!3U²µßfq™‡Úo[üQûÔÛ¤UÍOµO…ÞJ?kJέôóƾ`”~^zýVúyÅ¿Z¥?ù³o¥ŸWá[éçuÚµJÕÜ“|îSIÿm­_ôjþ¥õgJå­õ˪dµ~Ñpø—Ú/¿‡&$¢ö‹ºònµ?EØKíϤÄ[íg !šZ?¯àœ[ëç•Õiµ~ÒÓç­õ“&¼´þ,vký¤!Ñ·ÖŸúí¥õ“\ŠßJ?-n«ô'¥ÈKé' ¿•~Z§«ô“¹/¥ŸÕc~+ýYTáVúYš/¥?IÅo¥_ôën¥_¶{ãKé—­´²Ñúe+un´þÁ¯`µ~QSèÖú¨ðbb%(õ×9žš¬j¾ž“°ßT&gÿ¥õ+E8¾”~Õ„[ëW-×ùÐú+i×*ý² +<[¥_4‰Ï(}ÈYêÎ*ý¢A<·Ò/êHy(ý²î¬ÒÏzཕ~^!K·ÒÏóTnuþ~¥~ªü¬¾ª—ÊÏ«¾…UùYvn•Ÿ•€ÿ¥ò³rŽß*?/V=«ò§=ùRùy ¾J<ìÞK†€UùZzæ¥ñ‹ÚÁ·Æ/꾺5~Õ¦—ÎG^±\[_5¤þÖùUSå_:¿j!Ô[çåμR·Î¯ëþÒùU##oÅ^”Úæ½UôßÕù¡ë»•³¢[Ñ‹FÄéŒÀí<­îñ5¤©#¼0bþK•¨±!dÝ 0뵡¬î1s´‚¢“ËÞª™ÃÒæ—ùu}l·tô:5HÌÎü×rňÂWôþ‚m((sÕWÂÛÇ â ZÍGé+‚¼R¯JÛѪ2YZ5qüøSé[Xũǀ ¹GzÓB¸5IKzX¤µV„ß}S»¤“ñ1,…N%bð¹“Wó¨'Ï+NÄŒÔ&Uc£é„,Š]ó‘ËÑ`´£dØJ)?N¿2µ]ÍéʶӰR<ÆÔjŽR"^¸a¡±”‰³4u”U†$æŒ)Áä0-ÄÂt.°Ô¤†Yèzð¶TÎ@4†ò,áD)\Hœ[ÒT“Ф\³P“bŠš“¡-^2·.WV]"({Š"€\lòÕN¼|k‰ Í&u}Ð¥¹ñdÊÔľ"gÖ(‹füR¤Þ´ùŸºiå<Ä‹`®É,Ìð“”ÈJg:ªIÝZD[8´{ÊsÏvõÔJ¸\/Èൢ‘hž¤_Tò ‰uæ<ÒŒc^¤D3žS;U +èµñÙ¾X€Z CâQ ,t„ïì³ +aÛÖª½œGŽ«n½eÊÈaOt™ìIûΛfØ]*ʇ®a…C±¥œÒ\­YX‹ˆØ¼Î¨$±ÃVsR°z]v>K–—|ôÌ L8Äh¤¡ÅÂÒ`ÃÃlýSVRg…¡j“éøÅ Ó§ÿ¨ý&5üUà‰6M-Ð[}ü]}4f_øå^úÈ/6«¼:fn}ä—ùy룰ØH­> +«RŽUHÓ“ûPHq)+QHQYªn…õ~Ü($iI|·BŠ¹Ø©¢®ì—BšAÉ·BJÊ92RÔmÿRHQƒòn…Õ¤»R\зBB©¸Éˆxj¤°Õ¼1)(ašÑHªyoäÄœ^ KP9G.Dë³¾*Ûq/½ÃЏÏ‡¦á’“—Þ¼ÓZ37$e;: Ò\)»ŒN”Å\5: ö—ÞëJI´Jײõ§R‚(/Z›žΖ4¥• É(“«9£•ª£mµRPÛÚh%1×fþ•ÕJ3±þÖJ½U‡ê¥•‚^8ßZ),Î>«•ö “K+ÍΞZiÚ —VŠBˆÿÐI0s›„설!uF)Ѭé¡|WJ²JšÖ™1J‰ÌáÍ2j)N"•‡Z¨ìRF-Ò²i§Z"Å>Jâ žÅù»{ø@ÞJäoW„šå…^¡ÚÊ^1îO@€{%¶ Ö’îÑ+³ÅT¸Èªf¶¬ZKWf êµ(Þ•ÙÒû*Õa2[¨NŒI™-v·ÐÚÌ–àÜbÉ83[Í3Ì™Ù(¹7³%^×Õ?a2[PLGNLfKï«0²f¶Pí÷ÊlÁÆgc¯k“\‰-³VîUÛÛkKŽeü¢åUf©©ê»k)!ä·•Õ‚oXW|&«õz&ÇÜ™Õ2ÆÃiަÉj¡¡rY-kج”jñ•ÕB‹ ‡wV ͵^åY-€æmݙՂr“ôÁfµ Z¾âÌj¡#|So³ZVõ‘;«…KÄWV :QÿúžÔB æyßµ!‰`²I-øÚ®Ä0gR „&(I-òʵŸIj2ٞϤÞ—’Ön²Z0‘ÍÊY-˜ôTžY-Kd<²Z°È¦)sfµ¬õweµÒ¬»òÒŒBºë+µ™ÿ}#o‰ü·E|ÿà®ù‹Á¦d¬VÄw¥»E|×£[Äc¶äJD< O-ÔtŠxÚP|¥p‹x€³ Æ)âiijíŠSÄS} ¹Íº%¼WÚí[Âûu(°~V…º™%¨Ô\Y~Û¾VÂÓöQZ,‘ðÛÖ0žÖ¿Þ[Xß×­Ò-âûJI02¾ëUï”ñ3´ðUQÂiÑÝ»l\â%)Oßñ•£°4­Ò|Hy á!äy´Ä'p‘¤@~:­ · yª5 L!ï•õç%äÃR¿VÈ :¼…|XÜÓ·zR¿…|ÔbI·ËuKyÔ(ˆô|Jù¨ÆÙ-ægbß&æÃJP´b>(÷-æÃ*]fs©ê—–‰5b>èçÞb~Ò°]rž—¤'9ÏÊ©¼’Ô7¹qËy5^á”ókZ1OH~W„`_a, ý«Ñ/Äòßv0•mk]¦I)};˜æ¥Ìí`ÂmTøºð¨z¼Lu•h³¦ªî‰‡ƒ©iTÙt05-Sp;˜f€òí^jzþ»ÝKMê^Þ%$ª8¹Ô¼¼KWöï뎮u(¦w©kì˻Զõ.5½°¿¼KjáçÒŸÜ 0õÜÎ%$*8É1Î¥º8nçRÛäö-Õ­ ²ñ-•eëܾ¥¢Ÿ—o©h”äí[*‹Æïö-Í„ÓÛ4ùËo(k¾ÁË·”Õ”¼}KYCòoßRž×5·k©,®CãZ{ßï;âd_Þ\KEäÑåYª+ÛÜz–ê*¿rßwT U¾K¨=%gëXjZÅãåX:ŠŽŸŽ¥ª¦åíXªËh:KÊòÓq,Uµ¿oÇRÑÒ"ÎÊØ">éøI€ÏíZ*¿+{šq,-Pþr,eM¹KyñÂZÇRÖ¤×G˜NœµÆoÇÒ Ö»KY]U/ÇÒ¬u»ŠŸ¿ ·öøÛê¨i¶øK5­¦x«£¦Lç·:šþ £Žþd=d«Žº®¨[u„uÔWä7«£ä”ªôRGÉi¨àC!%§<’—B¤¤§FJN—öC# °Å§B¢•…X´¤™¿ôPHèw–l£ðµZOýTHÉ­ûº£kôæ­‘ºúöoÔ•ö쥑ú¢7°*©©C÷VIm±Î*Iqòõ¥‘f¹ç[#ÍBí xˆI&ß»ÕN]y174³bnTk«ÕHC:‰Ž³ +©®Ûšë>n|øF#MA>5R[åE§FšöØ¥’ںɲ*©ÿ®¡×—BêE{k¤¾ˆá¬Fê+ÓûÖHG%òS#õEØl52)Ý×UüF‡BÛóVGM#2_ꨭY«ŽÚ2´­BªËUy+¤*©x·>ªzµ}룺èn}4Ëßú¨nå„O}T•G祪z!n¥3 ^Ð[}üí°³¢è«lRóǺÁ¨eÛõtƒQuU»Ý`y;Ÿ)K9Y½¬,ÿž¿œ`™Š³¾|`E#©oXÙÏíÖ VV<ã›Ñ‡·¬.ò¥ËV4Ææö¥ýº}`Yn›l–©¼|`Y˜´­ ŒŠ5·ú.Õ©´/Yô.ÂyþeÕ͹<`Y9Þnج¡8=`Y‹U¿<`Yë\ОOì“ÇDqÞ0©ùò••/fü_e ¦õ=!¿ü_U¯]oÿWÕH¸ÛÿUÕ6~ù¿¦|»ý_Mï[nÿWÓ ø—ÿ«éêöœF\jÖÿ¥&üÓÿU·(0ãÿªë.Ãú¿fäúËÿUWm9ãÿª«Ê‡õ•UPõò5Ó¦ÿ«è,Ýþ//÷W^^}ëþÊitû¿²ºæ^þ¯Y+ïöeuRÞЗ<þÛ~.÷—€/NxË÷U¨ÎŠ÷¢Šë%Þá5Sò4•3ÅÇŠ÷ªw¤/_•Ëê–ðhõÅÄ‹…œ”Òþ–ðM‰-nßÄpKø¦9r ß4^å–ðmÝ—Z _5e“ðsg\¾(mó-âËòäß"~2–]2¾l7,㋞;_2¾|e ÒÜNº¨.û8ú™ðbe|ÕÌÇKÆW s¿e|ÕøKÊÏjU—”ozËtKù¦i2/)ß–úµR¾/_+åû*ÕyKù®çó[Êw½p¹¥|_®§[Ê3¸&’Y)ßwœ•ò]î7!ß· *#äûºÉ°B¾/¦Å[ÈOn£KÈo^^+䛿Ë>„|[I"ä«ÞÝB~Š—”¯Zö–òu%ZX)_Õ_ö’òUõí-Ê˲žoè-”ÿvEÏ ÑV¯Šža G¡éݾJŠF1älv'·øÌîä~ôgv'}›rBé4".½Ò;i$¹VåÍé@3 ,‹gz'Mj}283úrEÓ2áMï$QÆ Mï$A”ÒÔ¤wÒbîâ>ó;Åú¢tÔ•ló; ”Ý}dwR{îfw¤Õmv'ÀÉßfwÒ§©x:³;M‚'›ÝI[QCøs!®rõÌî¤AïùÍãD©²3½PS²ý3½“V”òûÚôN€³þè™Þ hV=Ó;IVðÞI ßµA“öàHï$¨¿f¼_ª{W +,ì†ÞjûoÛIéJ_v@ÒwÛI/5n;€¦¹}ØiÅZ; *ÃòmL —°ño[; .*(cµµ^v@Xw­0k¨ÞvÀ,Áò²‚^¢Üv@ÐDßÛ+šâ¶ü¢û·v즺zÚaå7ÜvŠ)Ô§ôœv››À½Í€ aB·WîkDåd}Y3±è¶Ò¢í·V@Úâë.+ ¡tÓ‹»,®Û +H’ê÷2’šF·•nýÖØYS_F@V›ðõœˆµ'Ô^ìp“¬|[YCn+ ¯"°—5Ž÷¶’ÆJÞVÀ¤9yYi².Z# ­ÀPk$ÝS# êæ¸€¸,k É“”å2¢f´ßFÀ|xZaeâÝV@\wÖˆÚ|Ûqyo; ® +‡ÖˆKIÖ0Œ;GYy!1Oê_ö.q d&‰725ÇÝ­8YKdòøZÔcM~n*¹¡ÉAíÑÐ hí)—IoŽ´Iá/Ìò! òÜ„›'m(@y›0A§ûŸÜ¤$×dx™è&h˜•Yz©ìmTI˜>)(‡)”nó{%à µaÉä*CyÊs’^´s£a™™æ¢¡+Cl”¹§WÌq•Ú”RV)ÐÔN#Ó;AΤûItœ*w+º­½æý–T9ˆ&—x,¸*—ƒ%¤âe['¥l×øY§˜ YÜä¨SLÐäYµ±3ØD|IzÈ@Q±ÆAoµø·õìŒ1xéÙ¢¬:·ž-zf»õ켇~éÙ¼ÊNŠžÍ“žÄªÙ¬¼—šÍºsn5›ôFíV³Io»7=›ô|ëÙ)Wo=›ÖY-i–¼kÚ¨q¦·¦®…—ª+ãHTíø¥I q«j£ÞW?TmZIA§ªvÒTµiܪ6­;6Qµi•°ª6K½x£iÿäi šøm5mÖMvkÚ¬w“/M;i}/M›õXukÚ²ŠÜšvòÂÝš¶hÕŒ[Ó–•kÚ¼(—¬Zܲnh’Œ¿šÒ½×s/Ô©i³fi½4mÒƒÕ­i•¿óV´“æ¥h§þV´[U«iÇL&ÉA¾5mT·[ÓM‹¿5m˜Ç·¢ á+Ú ²Š6H°Ý£ü :ÂG½[Ͻ¶›zvºŽ_z6jq”[ÏFjà¡f“úè^jvs;5›Ô¾¹ÕlZ,F·šM‹½ÉªÙ¼îǬšQ”KÍfu“ßj6ëæºÕìäç~©ÙvxëÒ¼Û4ЗVüÛ>í×ÃG“ï[ð¹ñiwuñÜ>í®š—O»¯º Ö§ÝfÔ©ui·UÀâvi·M:—6âõ~{8´gàùË¡½•²íºˆÝ¬C»jºÙË¡]•oævh×uÕlÚuÏ›µí*ÎÛŸ]´¶òíÏ®+­êögƒCÓ¿Úu&µíªW:/‡vUkávh·åt´íÉÎòòh7õ‘ßí®ÜG·G»oñ²—G{KÕ±íþ»š»ÆŸÝw¢`ëÐîÊýt9´ƒÓ¸¼ÏŠÏŠh`~rÄØ J“ïÇ:´²”¹Úh²Ïâ‡CP)<ÈÖ¡”3ãög÷mÝÙ]EûËÝ5Ëùög÷ämýÙ9@O‚S’1=¾8‹ÉõîíÏn*$_þì¦á·?»­|yëÏnÈõòg7]É·?{ÖǼýÙMy_þì¶îí?»)¡ñíÏnñògOjõg·%V­?»¯h¡ÛŸÝõþäögw­{{´‘ó¥$N—G»«-sy´ƒÓìåË£œZw6Àž_´Å´)¤^°qh©ý#¼ ûåYW7 ;÷^Ð[cÿ] xMºz˜gTßi„v™€$Uì²ÆWÏoc h†%Ò*§[í0+ÁÝ&À¬ w}å«ÜFÀ\w·ÐõÂõ6ºP½l€®±Œ· Ð×5³µÚb­¼m€¦‹ä6fÑÛÛh+“í6ÚŠ}µF@_—sÖè‹ö6ºÆ…ÞF@Wþ­Ë Ý¦I9ÆNy‡/‹Ë½oµ±&g<µµ°ÌÃÓÒµÁi¯’ÿa„É}^‰1n´“/# ¨AøzÎs¬Ëª/"?¸IqVÝFÀ 5½€ 5BFÀdT¹¬ ‰^x3C™ü»&1M0f&U3ŒÈKš¾5‚Óíq™Á-›Ã˜3ñëZÂ\Ë€Y3àˆ6?Í€¾®o3`Ve¼Í€¾H9­е¶Ëà •ã_õŠhÇ©€2fÀ21f@p[R’ظR†â2h{Ê]×e>Éáe¯¶ñe`QIvñe„I”u[óžå¶¼VcxYa‘¯Y+ (Àm„jƒÚˇ…@À,”pCoýwÝíÙkU¹‡»={MļÜíÙëmâånÏNœw{žñÐênÏne{v3¬år·g§G—»}@³hŽu·÷U dºÛaø÷µöÌ¿Ýí}àÕÝÞ—Ù/îö.öÐímoêëyyÛÛ¢ho{[Ü'ÖÛÞ™Üåmïº\¬·½k~ðô¶÷Eær{Ûû$sg{_EÎŒ³£ß…“áò¶cF5^ÕxÛ±ôÊÛxÛ±hØiðð¶ç¹ïô¶c!v¹ñ6Þv¬lݘ—·=O.ÊËÛ> éR7Þv@O¯¹4ùuyþ‡7uuž\¯&Œ='ü–—·=OÊÑ—·½k•­ÛÛÞÕos»Û…¡àålŸµáog»â½}ímÅBß¾ö¶Â8¬¯½­/ëk¯Û†ºœíuQxYg{]:Õ:Ûër¨ß·Úu¹Ô­·½M‘ Îö¦–/g{[i ÖÙÞ‘ñ¶Ož°—·}s‰o{_U¼¬·½/J·ÛÛÞU6]Þv¬¶&A£ÆÛžg™áémÇOʹc¼íyR?^Þöì6kÜzÛ±ƒfù±Ó¥ž'/ü })Å¿­e£j¤—– ÊvkYYKP€Õ²Aý_Z6 ½U÷K프ÊêØ Ç»—’õ+ Ô*ÙY1çR²Ù+ùR²Ù«×ñR²K¦^JbSùíêÔûÓ¨f%›g…öKËbúUÿ]Z ¦ü³–Ínñ¹- ˆ] ·–E—ê#z,ûEÊÏJŸª4G—’Å5a“e-‹ÔºbVË‚UTkWôؘS©PqkÙ ´R·– ›«eײr“’§qiÙ°.i¬– ËåskÙ L«·–Ý’;¬–ª/•>/®Ñÿü¡-ƒÚBï&¿þNèÔ²~éôKËBº(/½Ñ²Iùy§Ýªøz©Yè{%D2jf²ÞO= ᬸ[Ï΢Q·žíJëÙ./5Û5CüV³dÕl_u!n5Û—·ËªÙ¾xbDÏN®°‡žÅ0•çvvš»fÕlv+mãR³ØûÊíwªY’Y3ý5›gÚCÍBèõ´U³ð½ôç¥6$x9”¬×2·’ r·xëØ rø¥cƒ®¾[‘Ž É‘¥7ô¥ÿ®Ž-ñƒä/WÚÉ=^fìôÅ=^¢ÖÅy”—(3èTËK”Yký*/Q’zå%JR®°«¼Ä€&_²)/QfBËÍÊ0kÁÉÊH÷èÉÊD"ïê%¯À3S]¢dx¼ªKŒîOV­.Q§Üã¿™Øl¸Ç1¹qÞÕîñ²ÇGda„èE(©Tü’ÓÃa* ÕÓqÖ—(³"”V˜ÀwÄV€r·|U˜Ъ¤{V˜ áR‹­0¥ ”hg…‰’׈ž´¼Ú›–ƒæ[™™NZ_Š#·´€²²[Z€¥>i9U-òxÒrjZâñŠ\Èq––ƒ Û?i9èm] »'.…‹Îy¡„‚¦—zÈRæ(µ„g­ˆJk¿h2JÌÌŒ\ˆ  Íh5r$•Ö«èé-⊫sŠL’b:`”YÈ+¡›™¦„šò•“Ö‘ç³×e&ätg\g\‘‰ÐLïqj‚iᥠXć=~ë2âÉLzïìsqyͱ³¬7qeF § Aª G½K2CíE_yµs1ÍŒ+¤.²‰3¦Š½wábFr‹É#Ô‰÷„f†:¢}Í!‘ãOÞf]‰Á;¿n¼ž¼™€4ɳq%íÝáG aa5)¶ÂÊÒ¬­É:"ˆùÖõÞúæ¾ýC.ŒoqŒo \ðyƒDE˜Ú Å¥ÅI$Ï$ãëãÆÌ`.¡÷e¼8ä#!’ $¶bˆËWØ/ë†Ê“‰«hÁ#9,µ–e›ÎÀÏÀ¾©!}|Õ7C?Yõ „ô) õoG¾:hpÚÄ ++SEéÜ,i43:§§{bI]?vUg¯ÐXªÂè¯ÕÚVâðƒçIå¬ÜÁ‹k.§æã1E²†Lâò]äóØÂ±ÖÎù«B‰?,¦ä‚Eñ·c#‹r´‰PËÄ¿ŒU ÅçŒU.!^e>¸4™LU ½:»žmÍUâsò +KaÑ?ö˜÷^’õ.'ŠÊª¸½) Í‚<²ÆÖ:Kˆw JL1“Öú‚¤ªt1$NNÄ‘¸ +D¸'!ð¢²Yvþëyaã9Âjì´( ¹y®`Í‹?èÚÐ •â#Lª¢Ï)é+Wyÿ—“BYã;Û~NÃ÷’@Öû±q@r‰óz—Ãq—ã›öŸ ¦L÷2ÒR®²’‡•Nà1$…ÿ\\áÄñJKylÏÄTó6ÖØ©ˆËÊ–fêx +Tœdà~®‘¥Q"…q…¼*Ö‹¢;Kø{CÑH@Tµ¡¯1±Éò +YÃ3›C.ÿ¶¯eJ!dØIY[œ`æË«¡€“}nè% +·l­žN¤q‘s<;9‹êôH–J¢°†Êd‰Íü\sÒ^e;1Æi~6ßL5̆åÇ '/r<Ãò:¢ˆ8†37œ ¥¨MÀ+v•Þ Žj‡î*{qÞG¦LW&ì +s¾gÝÞòá®h°Ày›BK! +I·#ïÌS*¨‹wìëBʤ´ÈÃå”™‚KpèäHB¤B æâúÊ %çù¦£ŽªÒdÔ‚•†IvI¼$ý¯°f“ó>«7‡Áõ*2oqŒ6>!žúXBp…Dq…ÔdV¥q¢œ/ç/FVÿÝcG*qþ¥Š3Ü—¸È®9*>Rã*k_9Ê1®gQ£^„ ½ùJµ&M|bÑ+¦‘!^“fÛ +üý¸Ùf¨(sŸ=SÖ´ÛŽiPÖH ˜¦Î³iÊ/Ë@‘¤ÄIõ®‰ §æY.EZK˜ÚÆM—ib_dS`(Í„îþ0äU×ð5wÍ*{É/Igò¡W¥oE5\*Ú£™~w7ð\ÍÒ1w†ïa ºTV…v+å¦EWjQ"d3ˆØO~NÈÁ¸ÐÉ N|º¯eqñ¶(kÁ/½¬šg +›º‘!€jUoQ7ÞÕømZÁžŒÞÄéͲ!çQ¾N?ßUF³+R?Nòøê7±•{%¯È@Î07–ï5áŸ<7BI›ê8%Ð&Y^V;¯¤ÇÑT§{qí ÐI“’^ù„Øg‡ ÉAEAñò”ÜÄ™(ãÜO‡$@’‹Êe¸jÖDž(Úcé9¤N#v°—Üe‹©¤¶ÍPN‰Ž«5i•"v¥CR€e%[¸Îz¦ÑCòtšéüG©š”åù5'I5Ý=—àpˆïiþ’»dâÞÚWMœ&W¬L%¤KÒ)S‰ÂœWËÔ?¸¡™7vÊT®9tIì2u£^¥£ZSy¨>æyWÂ)S‰^Ï“V¦n,ôV¨2½ð œBLÒRùªÎ*iN¸¬'óÔ)T šú“‚{[O¡JäÖQÔÃ)T‰ÜÚÉÞ´B•(¿µÊ×)T‰`¼ÉxŸBõ`%·B•Hz5éªDŠ­¡?§PÝÒ/©JXn¡JˆáŸB• ¥Î¸ÙêüŠÙµ|~¥ZÈi\ú«É1]ë†R•æM$N©JK" ‰•ª úöi%ÑÄAH$d å>›tª(e)O?•—R [Ý·S–RA‡Õ®Ûe) ér>e)•P‡“•¥*!Á)KiÇÏ[Â]–¢•XîÂMÓoîêMmžô}›#)è½÷‹#)(ûÉåKŸ“²'¦PxËZx”ýƒ›”K7Iä#–”oO ‘¯ñpæäW¸×_,CéÊ•Eò²iÏDã%ÞtvJ„Ï +ž$òMäÔËd$“‹´B«nãÃi†z„Ï>±yŠä,ÓתĻ9usšTF†X~¢QƒwL*q6IPaŸj¦°ãt–ÍÄE œ.RìR¼×-*â”k<Éï‚_ jåèQôÒ4³·4¹-+ž‡Ñ­Ü¹ãކPÔPËߌõ~ƒçAêf[Cñ?Z] +j¾£³¥E †©’n[|ç`N@“ åH¤$ˆÝ'¯Z~]¼îz}SŽÜ<)3)âE½â6*_’ˆã B•ç&g×ú«Óû!EV¬unWÅÃ,‹D’ˆP&‘ +’êtkÊSæ+âè‹rE¹á=ö‡l®µ¸„ˆ,r|fÌYZìZ8‘½ü£©é–˜ù®°8Np]öÖ¼>çc5|KQvYÐÒ…œã(»Q .zSŽI2œ¶ÜήÛLxø^STïÜSÔ]ö‚Þòîß!@Ç?þåSö¤×%&àû/%XÛæZ¤DsÕ“RáVŠ?{ÐÃLBusúz(z-Í·‚Õ ¡'žÀÅ bmµÇéËQî¹áy Ôð¨}y…ö îß(AuØž"zP.”ß j¹qغҒlm¸ô)}h\/M +£ek„pK ~‡Ù%×Ò5’±0V +0¤lá:›’ó3ä CU¤®ÙÁ û'7X•3¿…NOÏ(òT2tG¼5AEï¹tirÞ¥yކOør~nž $à:¾Âí^õyÔÀï±’|¶Ó®DI)‡ML%‰»Ó#|’üõ1Œ™ŽÀÝiîRBdÙýAs'Z_õnÇÒýæ˜JŒd[×™ÔúªžÆy±cE#£^Ò!:v [•îÌÒê|ÉCÞjšÚçÆ‰CÂfmpÆsˆÔ«cU鈂rEç!M8ø‡:-Ö =•à,ÑeÝTd¹†{8‰Ø°ã˜šÕ²ÇÚä–Å|énšòºÔ©ö>µ~¥ËQš[N9E€G`S¿¬hÉ52’ 9™T Ñ–ÕlQã‰$ʼ s´ÉOTØŸïøLí£YA·FP!4'Eî• F­¦zÒ¢\ ãd$—³XÊMÍEóœ[µ/:[t¨ghFo%^’cÓˆ£;©*ǀ㔑at~NÂTQ^»“â`·>©d’ºpœÏˆ‡NjùºÌÙCÃH—oËIÈ9= ;IÃ+¼ç˜Š•! Ueht•´ZWu#·$äP„]5‘ïZüäŒ –5,ŸöÍxW÷:îê0æÐ>>)«†ö­Œƒs~nάA¤¦à¡>k4áN–œ$.Õ×ɸ’\Œõ:·qÑHy¾^ï9Þ.¾hY4/Ì1Y6Ò{bþË¿þ{-©ÿô™åØuœÖTî‹´ÆXS¹+×eMŠÂ2{YS\`ÂÅ~šSø2§r[\~—=5@I½ ªEåüfƒ*ƒwK~9 *X¹.o#GtÀ "¥3 Û3ºK>›”K`h^e‰#r¨ã( @³òùu½(< ª\—§Cø‡²÷5k“3&ãPö‘ø1!ˆ1ÑÍrÙCjzfÙ¸oq&ßݹ’}.+ì}Øfäõs­ $éZö©3iÒq {ÒÈ¥±×¸É¬ú”#ì›t™óS·›#ñð8ø¹É¼¸œ*å`áî7ÊsQ.As+õ¡*#óê´C\Ò†Ì][œ1žƒSzÈYž“<»,C‚Ú«…–BR%“Œãa‡!&L+/ñûZÌœ©5Ó‚²HÍ¡À¢Sh½r†ó5i““þ¹²ü®•èe’„‰J¹¦1¦ŒÌ ‹V+™k1hª):.ÎÞN!Ÿ›q>tñ…‰Ô¼t¡ê‚ÎòÌK÷dTTJñ²pŠP ‰\Rœ3ßÊ:>çF¶]tr× pº  ŒÈ^‹²_f ùX”(²ð³æàtv„°ÀÈ®z”ïĆS[-ºµ>‹ë0ΪYvuÒ&ÙÛ5ö\g’4H’ÖÇÁ4c‡Vٺ£]å«@}ˆ4ò.¨ã­rlFE¥˜]pÃǽÂ5ªü¢&±ÄÍdø[õñ–%}› ‡grU²‰<èxŽî !‹5…ç2Òr×ErYiy’\Vd+š×m¬4¨ 05VZî+ÑÈXiŸjYi9ë¢Éâã»nô™•ØäáÎê¹:šÎ™´~E“›˜s¬_µd›FÒÆ¥)ݪJ>_ 5.™Õ`tõÊHëåÉ«xÖ«'Onº!gö… Íz‘ƒ±nƒ¼DX†”Ò¡’Ä÷ •7âÔ=jüÆÚAëo¸ *#«Ê¦ëvE‹°ö[¡­õÞÅŒ|Š÷ä_ …7 &Ž#Cщ®ÉŽà7ÖŸf’7åKÊšf2ºêDÛ%¯“¦a uÙBZ<6/ÆÜÂb &±Tc±UÙË‹uÃË@©¼ÃF6œ#e*èigÀ£Õ2™uù{¿# +è½ÿ}VÚ§u–‚fwšLv¹4HÏ´ú´UÙ¹!¯¡æŽLœ†[2>‘dÊVch¥%PìÏ8¼W)Rµª23AæcÔÅ€¸¼§º$Ü +gW=S¤;Î0¾U¸f!4“<‚Ä’s^‚‘Ä_V”Ç4µÔg0’°eÍ|ÉCng~.á~áP­R\”!í(ùTpß´E9ƒ/–n +ÆxĬ‘7•¯äú EÖ”N£+ +˜´Ö +,/j,‚Øä°®-ˆ A´p‡Þ‰3ÂLâ7 ¼¹ÄÛ…{~Ù–BèEÌJ£=§!kR¢§è]ÄPŽãà¹"SrF 4ê9Âñ”pFÂMw[÷UÛY5Ø$sªá|qæs2YpÉ(ÊÊÚÖÚâ,ÂËAÃŒú˜JÎ\ùÆ;T¼n߸¿ý/géOá/ã„@á•Us ª8ì†ðrä›§°\¹ˆ¼×{W…K”mZC§“yƒêyPL@œ”ñGRÔÇBqi†>'¹¯a×"¥ùØ]43bØY ï-(¢D7 +9k€2ÎJ^’4˜ˆ wï$ˆvš˜r}X/ìåG€w»Ç(0\^NNæ-,Xöýä$æ™ a53è|&žÈÅöŸô@È2MÈ GÆë­¢dÞ!…ÆÕŠP+z6Æ©“g¸&­’UAÏM‡BßȽˆh\'kbìdÒ7^ï0jÒ*!U!¡V:wÖ¨ –U/1C”@ü8‹lÌ(⨷IÐØAHÈ›4ÔžåFJ¯:Ørß$ è~.é•‘µ+¶XçÛ® t…Ù•“pª&½ó»muú>«zšÎÊŠ™:{g(gdÞÐJjŸŽ·ÞĬhA×KÐòR%Èó“¶+s JËL‚Íg\Ñq#=Š]Ä;qÆêrA2(’jLáŒcCiüzUJŸ]ÞJ“R|®J%d9Y±b¾Vq¡€$Œ#ÙË*LÙè¬[`OÁ"‰×fP o"L +C\¦É’¦©°™r“rj¸B âê³;ç2ø§„Þîe HWû=Ÿš?Eô·Ìÿ×ôSúûßþÛÿKDþ8ìŒÎ]a—Ò5Œ -f5è œ%ø³ãgl挼ֱÊÍV…=ýßÿñ?ÿãÿøøŠÿa~Å¿nÿöÏn÷èCÙ‰äùwüWÏüÿŠ„åBåü<.†;Ý'ü%[/AXZp@ØÁÇ¡°ÜøÃÇg8rÏ, ¯­ÂnËS¢%¤`$CF§Û^Áé3ÖÃ8±»œd%p'-„h¡ ïçèê ’ùzÙD^}\àõmóeùÉ?Ç¢t䈮¸õ€·+ ñ8 ’7£ê`7ÿv'çŠSdEðgaP›ý%x7ûŸ£®‘ ]Â>{?;ø|«6ûKð£KØHôyv©ÿNÕ<Þ]RðùVmö—à«Kÿò¯s3Ñ>ú»¨ÿϼ‰†ìxÐ}qm2Ê)qI¦2VšJÞbM/ÎOèg‡ÑìÒ‚­°Î~ö& ÚFÿ³„³ööìKûLûGW¡uš*¯ÓÒ“ö~…½úxàŽäÝ„ü¦úÙ¡×wÏ& Þ¡ûÁnm»aþ>ÌíÿîÈDøíÿåϧ߱€Qa6;>Ã’ûG ~üÑ¿7 Þ­;ÈËÈI_Ä‹6qFþÆ_̸ž Ý Caaø\¼Fœ2}eˆ“„ˆT{°ƒ!G 'Xâ¯|D“,„ô +‘h eœiaútCÔ¢Ö<´à@TÄÅ ª#îÀ?1±DeF*Òã†éˆºWu˜çÕ€ +oÕq0½ŽQ‰L÷$B_*Å(ˆ÷|.#ŠÅÉŒ·5•ÎQ¹¹fÎk“¤ „A[õ¹ˆÅP:§ßò56#üïŽ è+ŠBø÷xUÿ{È8-€|ù}ÏPõ¢çá„iuC¦„À5èRóRRMŽ #]ä+b¯Å‚õ(Æ• +Ñ ’9-ºCð‡w‡|¤öBÉÇa®ùª .ß;| ÊX/žfe NåV½1ï;”;ÇÔ ¨Â&;r‚t᪤™CWhƒ €ÀKÆ[¸’ïÃíùÜXâÎM¼Íþ…3X20ºƒëÑE—t?…}ùÇ÷6ÄËV“¡ Ϲ‚£A|»[¨ÀøÞЇ®ž[”¯˜sú|ÙõyÉ€( 1õ¸cˆ<ƒ€•0 „¢Î]e(#‡?@:WeƒPˆwDP«a˜Ñò¾™ËŒ$A’Y[œ`Fv8DLâaªRª LD·]MÒbˆž—ë8ïW 9òµðÙˆ;Ä9·ò+£¹Ç“lšÐE$3‡äzÛ¤e'MÒ^õ`eÓ¤_’AÒ}óˆb +‘/µ; Üç1DñþÄõŠó©GiÇi%w¤X +©#ð‡{ÎóCk‚Äð¦ÜŸŸ&Û„ì £`F+^ÿ2 D 4A|hÅZñô\ú¬0Ô)é*« ‚»øÈ§& +$ñ¬!°ò ä*%”/9‚½‚L$üB¡ãQ«S[êt œiÃe]ƒ l *ÚI/ LŽH¼\¡‰(¬¾J«zH수ǚäÉŽC^‘·š™YÑýìXÉ™.±“b*Ñ' )!”Q %ë ä|?9"eÊÅ‚AÉ6åPBSÍb€6H7þ•¢Ðè +ªBË‘! Iã¢x  Ø!Ö’‡€±[éº/éæ ¨fÕÁv© 9ÔZDõy#ßÊ@aÃ6iKË Ù1±QÅéåx&åyÜÑ-áüDPÊÿnd´fŠ=2uplq¾¯˜¡qÜ0q’é]€í‚ý4 éF”2á +´tŒñû96þ=g2Ét™„³rán°*@¬PgQ;¢&HÍa¹ 0ѽ …–Ce¢óЀ8K—%´H-ô'Ÿ‡c ±¿çñ².ÑÇÏNvIe~|[&õ{@º“´é×@â¨\Òs®CÓFÇ¥C5ƒu‰Ú¶h“€üCj©>³ßÖúF.èmÍiÌ–ìØùx¼Ô"N>¶B­5¬æ$—¶8iyî§.•MðA®ø$¹½ÿFÛ0Ò§!þ_²|ÇÒä F›0Ïž ÀÛ:tœµ‡éNÝ;TP¤ƒji”†¶#c)Ñ«z™\X¥Mƒ”é¡OÒCbņè©]MÝ`DéŽñ/(DZJTºÈÀøŽ`XBG‚ö–7b€¸—9ÌÄÆ8Ur‰T2¢ØIBœÊçݱ 1Dâq#*‡áHÓ׆µAyQwˆt +P¸æÂ玣$}®“yÜAâ4"¡é5ï.‰€¢KY¬ˆ^%ɯ{™-YZÈÓ§ÿZ~(¢”ýKžíÐ%ÐxI4äÒ ÑcCEIynD2•÷ŽBqo{°äèß≳ xˆ™žÄ7t §žÄÆzÉ´žwt’{<‡ú¾=ßNÖž?z‰È—új]¹ùcR$1á9–ˆDëþã¹!TD¨u!iôÚÈ!Þw@ãD9{) ã$â±|bÆŠÂÇqZÑöÇò’3êM˜`xºœ9 G|Õqü D K®^„"}[ÕY’ÙnO—U½‰T$‰•;g[ È'ñƒ%ïÉ|‰ˆ=•#=c»ÂŒ‚ ÀŒe$|4;›ÂΊž8(˜’¶ÄiÆ#3–c“4ñ!êØûU"BFkYW{C’ ID9"“1†ª»„“VKŸÍ0šŠ'î ª¶ûÎóUÏ®¦ÜÇIÌ óbËQB°;ÌL›ø:b„1à©'ý0Q‡@– cH*±^sfëÕwí)çñt™<)ñEaÂÌÜ939âÈçäã‡eÍÇ\„JªÚ&SkÙ˜ä= +]œ5åy¨½4yYùÈäÚäõÜ0A"‚$å¡oÞÆáx‚CeZœOLï’™Ù31¬<:I¡Í}m8å,^fprÍ@²Ó^¥ÔI‚ˆž„ew#QuÀ£˜(•r‡4ågÿÍu–U¬èðŽD½¾W=ÒûCøH‹!|<{ß_{³Ipʶ“ÁîÐÄ¥zî{¤Ì–ž²‚ª4åô”0ĺš^r©iÅ€ûMìáåìW”°¥ÇWD1Mß>]V¯1›®®×sÓAvJ˜/·Ú—GŽâ‡ÚªÌe™«p׿D±‘t)«¤×ø³ƒ%sVz† 3óUÏlö—àÝìþuø¡½T¦ï&¢ÚGÿasJðãExwqkö—à¿«ÿŸ¾P +¤4ßãjÇ~É5-÷ø ‡äª¡)é}¨*Û8øDq”6æùŸ€ÜýVéîêùSƒ´Ãlí 0øáw#Jç‰!añˆçûî JrÄdä3·*œ×ˆ<žêéü¿(!…8*°I!ò Ãaæ18ÄB×!.W2…„Gm‰’ÿ÷Ï´cûošÑ¯ÌŸE½I +ä^øëDž#œ9…Á È\ý9š}€ÄÇò ‘ˆÌø9rÃlÐkø62ÄFO‰¡u›ùˆ_|üŸgì…÷8Ÿ§P’}z|ëx/Ø»ÆrÈ Ã…¿SNý_ â°Ïi¶ßço(’–î¥&XG]È'V9øhË|ÁZ>q†Æ/ÑEãé#ä8ÏÁÆÎTy¯!Џ¨mܽÁ¯fÿí9ÀB´÷\‹ ܾ‡SŸž?=V¬GXL­ÿ ¼Ç2È-ò¯±W£__d¾4ãÇÓBZ‹kýöxm梿Æ]Bé.x&þ ˜9—{l?ð…k³ÈQøg Ñ´öú ‰ÿÝÓž€˜=;þKpͶµû§—p~cÇk†žÃ:EŒWMlì÷¾ÀUÊ#’s„ï?N‘ +Ðéw¹ǰ_Åä u}.ÕÌÙEÐYýð눆>¤Át\Dƒ5 pÄ» +±,äöÁ 1è‚þäÏ£#Úã¹èÈØBÇ Ñ“žˆÝh"pé ºÌ’’Ù´aæá p\:1f‚Æ¥PRz¿rã‰Gm!@¹J#Òƒ Œ’HÓ5)Þ×é8FËþÔD«\€ n–$«+13Ò/ ?ÇcŒðDá.;@Ý<7ÌX: endstream endobj 84 0 obj <>stream +ñ첆V-)‘Våš/¡r( \¢g’¤3š»h¨Ì¥×*³ÎÊô’aÂÓAkAFþIK"3ª’©0ôzâÎá I›o››OAÈ‚,"à<»ŸŠàÔ¦÷tÜXŽß{dúéq`­¢à©ÂèÂèÃlO´ca(èÔÆ:œ^æÉ@FÜA$…ë˜É5töˆ„À«Œ.ãìÔrA2 ~§×sÓÖ@½s„÷$ÐæTX†;[œrÀPçÊÉ‚j\UÝÛ (±[5 e7óS²0èéf‘ãHs]ø¯‰†?P®þ˜üt®d>ÀäJã—á¢ÕÚzb¨ŽnÄz×Á‹HtE£oÑÉ.®)ˆŸÞX›rÃ< ÙûHÚL…–mn<˜é&‹ÔÁ©—ñQäbŽžïºiCÂÃ0ú‘"±£îÃ&ƒhpÂ÷µ@TÁL$øÆ"’®àû’£_òט\( ‹ÀV>kS$­;G­ÇHq ö³cSOø˜náýÛ¥A·w?°ÌÞíËö÷±üNì,dûƒy|,àÂnÊ¡’[n´³¸š˜Õ²Ey=Ú¹óeæC1>Nº.ü < /ƒj Óm,,kÓÅ +ñçhôf¢Ú¹0BRÊñµQôœ <¤Ðö2kØøË°'*_—)N£IUÞ‡KïЭÐ?·µñJ»ïõÛcIhô KÂ%{¯?°ÔÔçÙsƒîÃÓÚ³'=µçÙ“F-&Vòröğ˹x}§Ý[Ësjõ×òœÃøZŸ¼—[³)IVèyö$¶¢âù[ϳ罆oϳçö¶{‰~}ü{‰¢‚ËéÙ~{,(ï4±ÇȦyÖû%xŸÐ¬kùŸ`ó °µõúí¶ÿ·nÿÜž3{æòÙ©2_ƒšá'Óë>³{GÏoлó4Šnõ”N]”à[ÍS3¬‚VÞz'£æRjG[ö ÖÞJ ¢!¿ôèjÍ-f{fG›”úÿ?›}艹6tb‚B=>ôTmo¶Ç‘ŠÜ%L3ëÛ¡ÄÍ*‘Á¾ËÈDòýùÛcÓ·P]o´BuuÉÿ1’õÜéÊv}žT£¦LOBq Cµ³å/Â$pƱ²’C§¨åœ¸öîe¾#ÊI¢r¶Ö›p°Ã”Œƒ—’øÿe"€¢–=ˆ¸aáòH¢Pį*܆RèÚÜ{R¾ƒŒÿÓ?þ›L6¾¸ŒÒ (Ì>=üëÞC Ìt£?ÿøÿýüí_>/ ¸åˆ{µ¡þA-ƒÜÓB1Ú2q®]è¯[Ö¬Ö›‚K˜ “  bψ‘…_,6¾J½À!:ýpÞÉ`-…Ú!\èòlo¿eÐh‰´á­Ÿ/¡ÉÀŽë¥!“bõÍ"h‘òµ!Ý_&åý²­¾ÍßîO™/¹àkÜf–*}yêÀÖJìRËóÐ"úÛóK+ÚR‹ˆžŠ{‚DH‰ãˆmöçWï¤Q745ƒg0Ù6‡†;±¯üÅ Åõ^àÏ>Þ +k4þsðÕ¬³÷×`gÒa@f0óH³DgüÀ€`òô9ºîh>š•Þþ‰@ : &;Bÿ¼›³òKð¡ÿZië¼–i Áº™Ç“ˆÄïéÜwu`‡ætàÚ¡Ô™ö² Èóm`e¬¡?J¦{©ù6dÇQô¬À »õÒB‡8x<§ûû~Û‚½\²âúº%|®1ùËM0 Ð…d|c]Çžª +ºìØB@—¢Ü +ÓÖ'Ç“}PÀûþ "Œ †h‚[¨¡Õ€By=E0É 0×#|âú Bâ¾@é+’p %ï:;Ýé+±NŸOÒY•ðÝl¥ËûGgñ 9µ?¾ò=°Sú±Ãq,Ü@{V8´ÿâ½ÝeIØÏ†eÇñ…â´“bìeÏð +íQ¼sÞU¢ê#òw]m¨{´zY [W Þ}ýçÌ/Û6B™aX·D‘yîuƒí[Ö#`t¼ÑQÿ^-‡ag—ˆÊ FñG¤ª ˸¤H0¶—ExJñ©¥ÄûKûh¡c«?žÓ-{¿mA^.9p}Ý,vH¾òØèHïD‡†î ù½Ž5±(fò±„!ï‘ÆÈd%‰–æz’@°ç@%<Á†-þNªU3V!Í'É|DiÃ+q…–ç+‘þùJgq“?ÖZ‰HK/ºíøfúùd§¬Ö/Œò ß}•ÀÄ÷W~¬ìô(¾ÌAM€éäñ—¬ò[ðÇ€HI’ýÝ/~»–ƒ6&©óN¤Y².,D:c‚—±Ë•.X¡aø=1?V5Î8­Jg Âå€Rœ¬Ñ Ç/ÁW³s +~ ^´$Øÿ}2sp‰u`ø Cv"Ø ¤gŠ’Vn©Òvè¢XÛ@Ã̶½ÌÒ¹m¼iàbGneìíõÈöˆIâzÙD^}\àõmóeùI•dãiD²)A%³PAˆÊÄ*×`š~+bJiƒ##€œ&•‘Éh…”ŽUï§»sH¿p5éq¼±ŽÓ:w67áÀ!îà4A% +ÈE4‡,Ñ?þq‚nè‹1.³*ÞAðϯœS28”hQÓAöV  ³ÿˆ¾ *Öýjó~¼lB¦“üãÉñKlà¾ðì¼w6ÈèÊzü Ždm8²ýÐ(Ë“çÿ†Ø])ÉŸS&")läm„˜¨´Hº‘?¥ÅÐü×c̨h ÿ‡Ÿ/‰ôÄKOzæ&o •d0Á…úBæ ¤áô…;×e뢾2 "åg`ͤäùãÒøîÊ ;ƒé3¢Qø‚É1„”H“`&PVè8ÎSR;º¢¬iãè†&ÁrÔbÖˆDÜ%èÈø¾$½DDr”çžtÈ,—a%æ*+…O¨(f)&K](ŒNäæ ¼-Ææ¥mQ+¯å‰ÁfŠ 8É › ˆÀòuÈ>hÝ1¤´:€Ùs²ç 2× 2l»çF9«¸BSîF +seDl7ºž}<5$}ýxÕ]üã;h>îÇ€®ò +íbft]ÎâDƒùjð¬Û’A;¾‡(ôMønÞˆ^2ȳ˜ÐШ.ȧ t¬Ãö$v'›½sNw…²@±Ày5‚}­óPV5êh ƒ–FÆ’‚Z¨+‘¢Í—)&Qý žŒqPAêÀÊrE>!]ä( „9@^—%òhƒœšp‹©ÆQäç87 sbðˆò­,äš N2>µî›È'I4‘nHµw¥îu/Ë¡q¨Æ CàNâŽ8zvIÐ&còÌq`£^V–»HΣD«©òpOÚ¤‡?­p=,H-ã s,sM"dù¦Ôe˜¸Ê†n臕RP˜|?NtħA0¥ÞR4‘Fåd ¢°ÀoÌ1æY̱Ý0=0âJ­^F—ئȼòOT«Ÿ#AÁÒdày²½RJr¤ˆ¦‹ ´½®Eø—¸½a…Š) F+fEFæ<<¾‰ë(‚HÆ)ÀŽWz—²rl]§I{åÙñÀöuâ?OJš±›”4ÙçôÏÿZ× L¡IÞ]ô½BÚà (q¬ÆEs»C–wÃ,¥îö2ËûuòæïE†øïž4òýîÒ•ÃÖ¼mBN.ìú¶ù²Çˆ|äò(€[=4È¶Ž¬+]t3'nÐIrÓwT8…8²Šà¾‘–t‡ï- +%ß´É3*_ ™ù¸±C`„«;Ód@Ñ/ºÍê‰+tâÆÙ$ÿ&Ý'ËêÍÏ~µÂgO˜Rî=;÷ŸMùÏ‘Ä`3I%pqd#zÎaûÀàüKˆö:Ÿõèæ‘B™vRn’É~jħ>tBnKOYÔ2;Šy=‡ +L.<ßw‰AQɠפSMG±4™>f¾ ©@`š<Öæé"_éNa[Iôd.üääRdºDzaðüBæknBáñ„FCájqR7zñøÎÛ9%á›Èñ]Æ21!ólsÙáÅZÇ <xœÌ^î¿ý˜Í|ÌúvFÖŸ]-dר—|ñ¡¶äÐÅS£(—Y|l Ð ÉS½NSV/ &2êCÐ1ÿäTa6Q1\^Ϲòù¶ ½üã«0‘é—áoüíç#èá DY¾ß¶®À@åÓeâ“ÅÒo'¢äũܨ6ZÏW dºøÇ¯¦à‡f¨z½F€AJî²2Œ§ š”é·pÖMÔp‰’"âÙä5 N%.8ç:W¢J³;¡ØßG—¿{“]h§ÇúK∠u)z¢ÚàïV¿jû* > YZ”¯~·ÈÎ9êIážÔî;¡»ÿïä€ðY.KÓ¹÷xg*QÆŒ’¡Ýàƒ‰,d 2/—xq\\ÔO±{‚@y|¤úÜ0Ö»4'5Ç™ù¯!9¡ü¶uÒBìŸgÁ™ãÑhP÷ÓÕ“ ¹?`í‡ëËÃõ5üóЇ1µ8 T--a® krµû‚ŒJ1‚=~3~][ù:.è^QkÒü¶½ä¾ò›{]R±ïú¸Güõ´õ%ó—WŸx}Ë|É=Ÿ#· zðøÄ¾¬Fî÷Š{>=5¥ìBHé`v“ ‰â#y¢ 1¶Ò‰Žü759áˆlVö¤CØTx\ø12oçuѱ&¯¨ªMPcUNU˜ó"v@ vÚbD'Hý£½s½øG Œ 2S4œæþ·í]ªÀž–B~ÏQ´ü……2+"\š.`æáÇ£*‡à¤–xÙÕ&Ï5"SP £•ÞØ‘Äõ:šœláswé šÜ-4²Šé(%ÕŽ/wÌX¿C¡ÑýG¥ì|mRAb=D©ûÂ5@8#6•MPbÏÛèå´êšW^Ui+áÊ žÕYùhÛÔÛî)ù…GèßhÝðò@m?mÉ-zÝ-—¤%W +/‚¡­hœzŒ='eNScGbA†.êÅ…¬sÆ×0y\›04AÙ_&|ÅAºÎDSt‘ëgõ¶tgéRصÙkÑEªŒ¢Wï6ïâ¡æŠ +ä¦Ú{ôÉQÈÁØ5EZâŠõ€øÌÜdiS R¥–¼xñÁ\¤ þã& ‹Ã=‘uƒÛ|®,ѵ°Æ—\£0éý¹VFðF°Öú›ÝR!Ç3Õ™»8J F zyD˜8¾=ƒôtäWê9èš{OœÌk2éH<äaë!v×yOJÑzÙ‹YÏÜH°fȉv¥J“äÜ!š›óãÄHâ›(øÉ™]$á¢\oýEnP™ C®›ºÊÅ<4¯§–P4Âësâ¤Pxhý]ÑÄ66Þìsší±GDZÄND|ÍM&H3u)y½Ïìÿh¸H”O·ãâÝ=Ýb@Õé|'ìp­®bC­¹ Š.!Çn_òZÐhŸŽìDz/®b‘ˆrOß›6Éäߘ†±ZD(âFƒý™v(ô¢P ‚F·Ó¾æÙIf«$??)l”ãÅœ²Y‹ÔÇày­7$¢l=n»]›]Ô¢NÄ}C…‚t>¨B øÏu'*2N°ăèÆ?LÿvìÇ`Γ‘}o[ƒpœWŠÈÀQ7ëX”ö±<» b5óËmö 9ÀÇ·Tù˜÷ä +£…Ã>ª†F«A5ä†* ›8ìa£À":¯£èW8 ìÁDÁ5ãàÆýmnÉM*ñ‚›|ÖF(&í¯2Î.!Ê.c(0ÅZ `Æ\eŒbžš‰ä®k×é’vhÃâ/ˆî¦ÇôÖ¢MÊáÁ€²ó¥£w*Tøœ„?†åˆ—„¹YX:RÏ鄺~¬ÈvLJ ä{ Bö&f7Ó„¬ ÎËåÉ|ò:É“›Ù@ä¦Ò’x\¹Ú)*È•)'e¼=r¾é(½×Ǻ &…ý— Ôxå"7²F¾ï/IÆ&ÉiƒYZQß\zöÞ§²ƒÄ&Aˆf>–á¬çºÈÜLuRÇÖ)}?=’Ê!»x¨—÷3§µoçÁRÀ€ñ‡>¨]ž+Q.…%°ŒQJz´lа~IÑëišƒ·ƒ6 ÈûXá{8 *jNŒ^Ne;ÈÅ)ÒÛ¥I¾0 !Ñ“ù>p2œQêoA¿'R‰ã|Ø£º¦°E}-Rþ¾È©¼RA6ØVT²m@©…ªXßb,¶°.p"y)Ð$Ú-ha ’½stáX´Ó© iî·ã1o ì2\dm­@=9RÚ¨ 4[á—S°i"ÝE‚œ»¬V1_Ê´é™`Rlk0KƒàrÅX?^®&z–+­ê;š>_ÕûسôžÖ/#Ä¿üñó[aÓ*ÈþyÉ[Ór¾ Ú ãC$pË ÈeÐò2+zœ¸ ‰øÄ÷6UÍqøÁÔjxAÏËQlNü ³žàrôCÓÚr&½Ë!ÿu繮ωãèx­SÛÁ<î‘,皤ðÝVÇ—¡.ÎΉå\9 yÝBäØ@Ôyßš-sØÅ«tüÀPpyè.œÔHᩲ‰ß›óŸè: +¶êEŠÃÁr(¡4F°Ô¤·K\ߨ‚tiÕõ¹Z©þÝ8ý„r@4¤§|q"êwPšt1ù ÷g$·j¼¤(ð¤+A­ÝI¬ÒüÉeP¥ª]Ïç~ñ¶w/å6èý}?xËìÊ=š_³ð‡^ +õ#Jξ›I2à>ž¶£3 C©á"C¨53GI[)e5s„z4jT¬ó˜£¤ þš_` sŽ^Ïýâmï^žsd¾ïÇ€fXfOî±üš;EY_è|¿çpÎ,ëQÑ>P‘7–aÂF»Š4‰ 4g÷Q‘•]PqãÜGU-5Ç蜣×s¿xÛ»—ç™ï;çè—Ù•{4¿fÁNRÓ7¢ÞG3“dÀ}<›,˜c.‘ qÓçumÑÇžŠ™£.+» ØV9æ¨k£^¬ã tÎÑë¹_¼íÝËsŽÌ÷ýÐ ËìÉ=–_s`¦È«$ÌiÿçYpN¯r7#¸ÿØG^å5ÂÞ%d¥Éìj÷çyÕLµÏ‘W½FÂCÔ䘡×S¿xÕ»‹ÇÙ;&è1(³'÷P~M!„yÇ»ÙDÜS¥îø +.¥»CòFçB1»È«œGH4»È«~šºäcyÕ*¸CpÇ.²Ð9G¯ç~ñ¶w/ÏI2ß÷c@;.³+÷h~Í‚$„)uÖÎI2à>ž*vÇ8dA*®©šš7“¤‚>cz3s¤ú!ùšR‚÷éж:gèõÜ绞<§Ç|Ù9=÷ˆÌ~Üãø5þvzTF\öT3=܇R%.®>b7¿YH¹˜éQÇ ÙÌꆘqÕqÌj”q*ýPµ:gèõÜ/Þöîå9Iæû~ hÇevåͯY0“TÆ€4‰s’,¸gP©)Mú€TZ#ÂÀ™=T·޼±ºƒª‡Ð½Ú¥ÒU)HÒŠÇ&²Ð1EÏç¾_öìâ1AöÛŽ zŒÉìÈ=’_3ð‡žpQGæ_…dÆXárõ>ëR[ªŠp\W;ŽtrtÌtì8yîÝ0çÕ­÷×1—ËÇR–Àó±¯wõwÿøÇ™3î†Ýã1»qâÇØc*7ô:àîCbÀmσܘãí†]§Û;Ž›{/Ì!uëüu¶ÝGäõØ×»ú»‡ÇÄ\Û3Ã1{qáÇÈ›y¹NµûˆpFsxÛëL{`æH{`Çsï†9™n½¿´û¼ûzW÷ð˜˜ë4»a÷xÌn܃ø1öff®£ì>$ÜÆñ<²€9ÈnØuŽ=°ã`¹÷ÂG·Î_§Ø}D^}½«¿{xLÌu„=03³÷~Œü9/÷ùu ®a´'µ ¹N¯f¯v(÷nœ§Ð­óöèº È롯õw÷öY¹Ï­vÆìÅ=‚o¦å:´îãaÀmÍÙì@Ì‘uîëGȽæà¹õþ:¯îCòzìë]ýÝÃcf®ÃêÙñ˜Ý¸ñcìÍÌ\'Õ}H ¸£9–mÈuN=°ó˜z@ÛÉqïƒ9mn]¿©ûx¼{¿©?;wÌÉuBݰ{$fîáûu3'×ñtnChNab§vMì8,îÝ0GÌ­÷×Ét’×c_ïêï3sKÌŽÇìÆ=ˆcÎÌ}&݆ĂkíñkC®éÒÚˆ{'̹rëûuÝäùØÇ«ú³{û¬ÜgÑ »ÇbvâÀqÿ{'ÑYé2%ì?pù±½Dçqì½@‚²>Wk+…d=5>Œ2ØNK-î“Ô.Ü@Ä•­ÙÞ1zÌ sïúIe΀ÂXïç¾^æ?úøÇ?NðøºŸ¼Geöä˯9 ¶Á؈Ý5Ѹj§È€ûh69Ç\ñ2Pæ§ +$¯™"H™>¦äÜÌu.ÆÕŽ ‚8£‡óÓÏ3Ð9A¯ç¾^æŸ=<§Ç|ÙíˆÌ~Üãø5þfz2è3r~ÌÁìÌÜ#÷5âfBÀjÕÂ9òÛ6T…ª¨#Ú}(2Ö²⬈cØÇo1ß-¢®i>‡½ €RA‡1\â>þ(¶ÁÏ %ëÍo¡cüŸÏ}¾Íôò˜ù¬c£0{0‡Ì ¬nDã?ÑùTŠwHX,*>åW‰\” [uôÌÌD’&á´— +;H‰_äé!æØ€¤Ñó©)-tÎÄë¹Ï·ù^ž3a¾ïÇ€v\fWîÑüš;I`½E–Tˆ-»9 ¸'²õÙÎþã0¬Jo榠¥ + +f´üc°a޽ÊSS9¬kÑ–²…Ωy=÷ù6ÿîä93æëΙ™ƒ1;pÜ×ˆÛ AŽ2–Ž1 ±¾,¸" +“`ž=*{ee~jœ¥­õJÁPh¬¯Ƃ̟ay‚`ïJ×Fcõ§ùe¡sj^Ï}¾Íôòœó}?´ã2»ræ×,˜IªŽéÁDT³9ÇXpÏŠ¤ßŽf]Yäy¾mvŒ’©^št〧«o©t-e¸cÿÔ ‚7wÿ@ƒSôzêóUþ£‹Ç Ù;fè1(³'÷P~M¡ÈE2Êý³,¸æ²ïRhç!%ûø©ˆ lf¥¨qðu`A2ÖjV"©·¹±BK=fh(~_˜a:çèõÜçÛüG/ÏI2ß÷c@;.³+÷h~Í‚¤Ìµ9@ܺÝFÜÇsÈ[d*ÕŽøˆsþ +ó\(”b·QÑ&QgÊn#*0ÐRl@µw¥j£©žßwçÝÏ|¾ÇôïœóeçôÜ#2;rã×øÛé»n›:8ìì2à>’ijGFQ1P᧘»Ìôti²¡:¡QE m¢öA?ÝiµK›8IÔCY蜡×s_/ó}<§È|Ýí¨ÌžÜcù5fŠO )Í'2cc[pM$ÃÍ> ˆÛòàTÁS …Î)Bö'ƒ‘(Ê~ ؈ ùþýØA””GÏ¡øX„:æèùÜçÛüG/I²ßwLÒc\fWîÑüš;IÈ"î`Ù +ËW3IÜÇ32±é½Ÿ'цªºôÔ8 '٦߽w(÷Q]´÷…~C‰ƒxITø9¦FÞ?Á@ç$½žû|›ÿèå9Iæû~ hÇevåͯY°“Yhz™/BêÁ=ž³U(Wüœ t»KPP†¾{ÈøÓhÐÇö—_ÎáÞþê³Iöà\îé9¦÷‡Í÷ÍQ0ceG°Q³çòoûç7&òAÝzz^pOy äm1#éßæ?zyL„ý¾cFîa™=¹ÇòkìE°s¡£Ã.Æ_bÁ}8!³Æ)tU*N¨ðSq˜åÆqÒ!%Qé:£Ôйb …³UcÒm&]L¦ç\BˆÃþ :çèõÜçÛüG/Ï92ß÷c@;.³+÷h~Í‚$Tþ® —ckøœ$îã™qGÅÞ±Õ‡Ìä§`j ×PX£~ŠQüåèpa=ÖöáCé•©¯+¢Šâ¹ tNÒë¹Ï·ù^ž“d¾ïœ¤{\fWîÑüš;IC¢PXM°‡Þ°à>ž`)LøŒaÆ•j ÂOJÇÜaõ.M¢‚œ½Ã ˜»÷ti‹ÈOÎÕg sn^ÏÙ—ø>Sb¾æÇ€vfî±ûósJ²ãjûLèok¬ð °G§Ü ä)òfwüVÂ9Üøm˜nC2ÇaÖ÷RÙjbïÿ²òñWŸMú³ûàjOŽßî›ï›£`ÆÊŽàL¡˜äßöÏÌQC£ˆ¥ášoûo‰žÿ1¿Qm³2,¶c5±wŠ9pû«Ï&ýÙƒs¹§?æ7ó]óus ÌHÙñC>¨ƒ$Ùgû°ÛGcȧÀ§¼ëþ€†\ã‡<ñE#;$"(âjÀÝH6CŒÒi¹"° eÀŽ!ò—žó¸WIÇgèô×sŸoó½<§Á|ß9÷¸Ì®\ƒù1v‚†A0¬äì½™!î£ Ô±©*ªƒ~(;5&ÖI¬I‰÷òÇ€ ´dô(¼wêé¹Ï³Ëôzîómþ£—çŸ÷c03(³#÷H~Í€™ Úòعp!,¶åø&±ƒZ3ôzîómþ£—ç Ÿ÷c0;*³'÷X~Í¢!‡4ß0lh;C'¶æ¶%áË n"õ[é¡2¾Ïî!ÔÝA…rT«‹F °ûsëT´•‰ï´Þ¢ :'æõœ}‰ÿèÓ9ækÎ ¹GaöືÓÑ@¤k¦ÛGŠJ³àÅãä RLànöžÿ1¿¥àPÄŽãs7ôßÏÓþrñöWŸMú³çÈrOÌoæ»æëæ˜‘2ã†9ŽD:'éõÜçÛüG/ÏI2ß÷c@;.³+÷h~Í‚¤Ì] +‚ ÌAÙ`ûh‘Xn jßÃåCášîeX¾Å0@n±Œm1ÆÕ;[Æy·NÇUi´€Ëÿü>Sôzîómþ£—ç™ï;§è—Ù•k0?¦ÀNЀàÇ-%£˜©™!î£I…„+ „¢¨ðSˆÄÎfŠº6Ã0@Ìc˜÷¥„: iÔƒÙùø@Sôzîómþ£—ç™ïû1 —Ù•{4¿fÁLR7S¹SÉšc’,¸ç€Æ±´ Å1FäÁ^Ч†ÑaE]DÅí4o:Ôº¢"ˆ‘±ã3Â1}Ås¹Ä~,:&éùÜçÛüG/I²ßwLÒc\fWîÑüš;IàƒíÈgŒ¨h&É€ûx¹Û#šË0W~Š­Í$%4‰‘q¹F;ICC µ¯ÃÃ1I Ò‡S‰Ïý tNÒë¹Ï·ù^ž“d¾ïÇ€v\fWîÑüš;IC‚S¤€ÜÂÙ‚ûxf®/P("ÐØüŒ/w€\ÆéÎÁ&؇•ƒì4$­“TÑ(ž+­Ÿ_h s’^Ï}¾Íôòœ$ó}ç$Ýã2»ræ×,ØIj¨‚žŽoüÜdz¡®sA¡AT Du¥!^ª9ðG*Ç2äH­P5s„b"ÇÌt.ƒ["äÿ!Å-tÎÌë9óÿÑ£s>ÎOù1˜ùþ{ܾÆÛL8ÃQÒ¼Äaᙩ ܆üÖG|NNÌìøãТ \ÈT9'a6 pN8÷á§*èf9¶ +jDðs.žâÌ Çt¼žú|•ÿèâ1/ö㎉Yc1;pÜ×€Ûù@ºqŽ*ñCf{XpC¼Ã®G‡~$'ªüTáä¹KÚâ0öa‰ªŒÓ‘´©ØË)pA焼ž³/ñ}:'âü˜ƒÙ1˜¸GîkÄׄ  \Fb¶ƒa|B>×_ +†c$æOh,…2CI–.j¼„Î ù¿ˆîñtÀ ¨ãÀ<„qóÓ`çN®9WPŸÎ-ƒ¯úH` 8j#•s $mi`uŒV#jréå*4t P&Ž~@04®±·_*BÐw¸vpÇ=cá¿žŠŒWŒyÑsÔØQ=õÒ–%®ßÄr2¸6G'j`ÒXxþàñVi4¢¬ØÇÈ?çrN5•+ÏHòvÔмj*çu ¡6CÞ3¤Ñà9` A/Ê:ÕÈhb u·æª =\[„€Îi C™¨íP´Z‰r—¥OeW#gÿ= oñ!ý´½ëÎe»röýý'€$mÞ/É/y ˆ³QÄÀ á³ËÞ­‚€à¼}jŒ*rÎIr­–dÂz¯ñ‘“¬â¥ªX—+®¨¢è +°Œ”4RÑ7X«Ë…Ý묺’,éÚÊŒ%(@9ÀŒ¼ÈÖFˆõYäó.Œ÷ÍÉ”nš¯ç0FÄ¥bJÐÒ0¥^ü ÊõŽëJ„dë1åâßqäÈÉÉh&eQGÖhÀY£tò Ô¥…°B\ä¨qe—‡ÜâÖAD´$xˆM+jz ™èÙQË ”7¬ÜBøêÅLê÷á§š*þº ã ”ž8ˆ¶—‚Èx8¦ †F…‚ õ26uν’} H¡›Ç{,1Ú]övh;ÿßQ"‚¯´&ÿuàTýG™jŸJA©ô(5W^Õç¦îHwb°v2ê€MK¢üãÀ±Ìœ¼®¨‡˜s4yóäuM$Ì*„"ƒ„ð„Ihø hÊ ,f°`f ˆ¯`šn•´3Bú<ä´­ƒCèPM*D ¢±X`Î %7}˽·2­F¨D,{¡VFýÕñ¹‚™€¬¯!“âxÏÀÃYDš>æ™8H¸¼|¬uËnd‘×N( P¾•‹ $ÚPnâ2~ÐÄŽ%”Äñ•“ËMçá¡`•TåOL k:ø Ë¥r]}Ç#Wé2 žYtS‘%c7u«™ÛqÂë !¹vŠá!Æ )ö³¨:ƒÈ(îûxÃa™l@r¸¡'¡Íx*Å@¸¬3 Ä×OùF6D&XQîåwQ)Θ +v{'³C÷¹Œá¡™©†È™‘õÒC¡§dP¨rÎêî*™™<› ¢6k²§ù­æ¨$Â*ü­U9È e”T• h†vXtn8H0mÑQó`5|ƒ@’†à[ÁºëÖcBqµ7,9²rrºdž,b 8+ÃÏñAïwPVv*…PèÁ Œ›2·ËË<˜üˆß +k^w”²:ˆPel™F¡G猆¾d"rÃÍHR瞨´@$X€kœtŠ( Œõ÷h`¶Á +h@èüÁ'W5Œ(„P©P£Ç».iˆ»_NáØ +ÁÓÖ¡ìBDY×Ô'ç’‰bô½*ÄúZ¿Y Ò& +È2i‡ã+Î)*˜"|8´1Jd€9säÌIc4¤sÙ?Qõ¨ˆ)2e¯ÃA2*¡WL,p"Xs‚µSDÛЀóňì4’ É8=˜Zà÷ŒÓÕØOµ”!ëql Tû•Ë@«Q"¹€Î!A/Ó‚“‡nƒ³jo, +®@¬FÙ{n°•ˆ3([Üo6µ„j–„PrI ‡ÌYœ˜²*X²«&â™Îë@*!õ¤‘ß¿äÕã-£Nr˃ßzÿÇ«ÃØ\¸ª@#]Âmlh0žžræãd3JisR#ªê`s¹`ŠÑ <`²sìÁ²@ÎçA§ o!!: È:Rœô€bèRk°ê¶¡nÄÌ؇Ï iÐ*A·ÍÈiP/Ue-ø0ˆ1™àßkRaÓÆq "«™FnTò+Ùù‚êðvY'“ Ð\ÚÐ_P3ªÈ‡4GQ3G4²\:ŠA'†"p€J6zé Î@:ëž9k¼ù½ Èp +ÐËYj‰ŒYl˜ï8sæ¨1œ4ã=ÄÅqxÛ +–q-¬ BØ „Tî ¸8ä—Öô]Ÿ„bi<€©@Âãš³ñ‰¸ªíjá8W-r§­%BÝU´£–BÈ, Ç9K]+«õ¤yíò!zlšd, UPºq$] ²~^!‘KЪ#ÉØf¤ó†ÍóÎ}΀U@B)½’kFg&»Ô/Ó2P.Ȫu­åÏ*nÜŸŠùYuâU¨ÒiTH´þ¦PÃá(oaIÈHzÖ‘5%§4¶Ë +¥äœFIà‚ +ãÍfWɹØ<ä¶[kž$ƒ¹`ƒWæ©k’¸ &poCÅÅùYDÚrƇH9Q Ðqh#ý¢7(ÆKȉF„°Ó©µ¡C”ûE‡½X«õ™AÝJÙÎ'£‰ZþÅB®:XMZ⎇ e IOÈQyÀ‡3d_ë¶ÄPPóÌœ#Oÿ¹Õ ðú„ ßêœ=HFK¶ÇØ:W*’C B¶…BëÚ¥UB*¾ÁZuxpÛ÷Šl>€±k&[¸Xàšo¨K +‹™O”èõk4š!\-áô÷PùÊè2¡1@Ùèøžôè’¶S™1q +DäTÚÔ‰sý „ĸ€®ktÙD* HZ@géq±o’¶ƒ%ˆE¡XµRšAš}í1›ƒäÞ—ÝRŽ +ááˆó†V¦ê¬Ç]S Š‚B­`O …9 +ÊžÇ ± ¬,¶J({Ïv¨Å«óf hr9„qrP_ó¶f1⚦ÖÁo¹•Þ-…ó²ä³¢sQ¿jý‡+Lwç­,AÚÄ6+«B9e@A“‡ãrˆ +©Ô‡9º>ÈR¹‰¶>ä /ªQÉR•b]Õâ +Q0ŠÁ˜¤!” õ>{ž=vˆœò÷·$a ÝAð(€À…( ‚< γ·’)µ&x³È¨% ÙMY!Š%®¡ °BB O(€³’HûÚ¥¨“(_ÏïÁ%##ïP'µƒ(êðCäð¡=ªÁ«Ñ숵ìw ²Q‹m–ôÑv9‘ â. ä«þRhÑE(&Ñeñž2ÊŠ])`í‹œàŒ“¸[ßðÿ¼nlYaùÂ΋ÈKö£s–nZÖ/J¯n !µÌu{Wë£B!h«àDïð8[Ç$„B™` ¸ù]_t¤j6"D]7ÂIv—,G'ÙAy¤ÃlÅÖ¥94‘ù– à¼õ3@J^'ÿ™üèIT +ÉÑNö®VƒÀöÚÎx„h1ÄI¶¢ "wayÈQ¾º(˜àà.`„tBÈãiˆ£DîC¥,쮜„^g Ö® cÔ4©Z  J¢o¡Š½B^)[P•^tWVäXÔF‰Š„ƒZ•F*8€]Ýþ\•õ#ÛÏËÅVSƒÉ³Š¨m¡#³ÐL‘í#DÙÔ)#+=!*At¬ +€>}ª<\ņc‡ºC9‰ì1k6é +]µ™Xθ¯k…‘ª +fG +Pi#H˜Ê+ÌÓž ^XDþ=# + EÈ¢ cŒ(jÝê0e"¥l~­/¬ Åš ¹ »Ü²½Ž5Ðt(]t@²,Ã:³a‚Àg«©ðI¿y޼J«Q ‡Z?Få—`y+„ølRç÷á"G—j+FÀ¯È †›éä«P ˜ºùÌ‘•€´Å!/*~ô˜© JïF±Ú6uŽì?/›¹ªD¢ÀÄ‘—mÀQÞ~Ó_A‚Ò0NT$„nEAÏ È6ëVi" ¨†Òñæ%P§U˜ƒž$_Œ«mfp÷´wz=–E§G +w\Ü$XoÜ# ~Ó¶ ;érgÊu“¡z|Ç+>ÞJlj¡Â»bŠÀŽgPV¨²*ðEP(”'‹EÝé +†B°æ0öYôÚŽ&$–+¶P,ƒPÅ+'‚°{›L–UŠÅÖÕQ#Á!Cc'ÈI牥q¢³p:~™ë[~I³˜HЫ¤kÄrlY)—TxW0G>Æ—ÀÃapÿÒª.&Ô©ÀJš5D"%rÄ÷ÌùÆG¥ÆƒñHø#¿f]>ࡾóæ$‘µ,ÐFÁx òq‡þdG„#‚Þ±Ò™Fr“¾ÈVˆINòuŒ4ÃÜÀÚi=±vZV¿bE³`ѵÂâirY—‹i”»=²V[œìƒ¥Þ0$„òmL¡ù2†Fë›vÙ¿ùÚ zŒÒxšñnÂù!,æǺë*¦.¼B!’‘wo¹pâÞ?K•Q. ãI&¨'Ù +‚3ú®5’^NÊAµZ®J!¾¸lª¡àM[TB‚©¤6UR!Ä}n +(!Osí®¸êPèf²ê»:qd}P-9›–\ºBm´Z´k%4í`«V.P2ûÒªË +Øå» €XòÑ礪ÌÔ«ÁA{¤q{7TÔSe5pè Óa|XBZ´¤`ï'U˜ ¼0vÆz™•©p˜µ*P,®‰D˜È2pP¼ÄKæÐÓøKE”M©#Tκ ±Ä§”U‡$¤ow«â©C”ƒÂÊé:TuÆ¥cÔ¡, ­˜J”E¤M›&¨VªU '$'CÚUw…z8jü[rm7:›t Å4ÖÅ,¡Sh.ïæ B‘Otο[1¶ ðêU§V“©Õ¤®%«Ù©×$¤².5'ˆ­%Àº£ˆ§EÕBѸbÐ98Ä9%ÓÔ`鄦浙¬ö>´»¢Ú]´o1§£j…ut”è”B%/P"S±?W©0˜qª§negïeª²fUYcKÔå|Pu ñ¡Šúqªg¯H +—^]U¯ý¹è©ã1ú¸‹>ù¡ÂUá³m°â\1Í¿9Õüóì±òá@ ‰ôkÑö1^{‡y¡ªy!g~ +ÍÌÝ«Y"ÕÑ¥>“«9£ª9£Ù†þ ÿß­²_!Û´a‚¦C, ìENÖU‡R„Ï“»êE°Ñ츪l +ñ¹mÑóÁñPµ® ˆ¢…MYè²Rq[=!}ú%W6dÌŸÑ fÓàN=êËbƒš**^/PEFäxèƒX çV›Ÿ]’Öô&Ô¢>8{Ÿ•"MîàÑ¥ +p€ïŽòCQí³—Uü‚P>°±G{_´ó’Èã¦a9¤î ·1 œ­Ë@#ó +Y—ê¬~nÇ'ç`ž¹@’}ÌÓÛR”J-Ž‘sÒ@ØŽÕÆSkæÛùj³B_ºÔ •ÓVšxõí¨²}Œ.¯õ(‹B‘o›+d]jìÓ±MÂ++¾¦ÇnC #‰½’V˜ðMŠïà‰ýuñ9Øœº!ä²@îótaÒ@D ï¬]ìíÀJ…Úd×ÂåÚ,þéØ.Ìñ×@6;¬À'$j#wŽh€s”Dä·Ubiñ:Þ²¸uÇ%–ãÜÆÎY·70µÂíÛ»šeßÞ,Åà÷C¾¢.ˆ™fέ*̆E=lÑ÷è ˆa®‚9åè­?DÆ¢›¶Óì†cp|ËNû².™‘ëM;[ ëÁŠç®4ÕD¨ÎEС’zVó®B5œP4h,yu$ÄÝŒ ®68¦Ž¦£0[³Ôƒ!º:è׫p=g<¤áÑa±c »O˜úŠŸç Uˆsu…pRdxôô2»œWMÕï…:Ö©ºLêÊÑÀŠ„Æ'«‹­àù9»l\Ä‘†jýþRXµ•'§ B4r)ÅqEz + +ˆ + ¸Z]¶ƒ-t:­ÁˆÎ+&võã»C1TÞôH&2¶ ¤íÕǪ]ÖH]©=Dd/‡6¾¦ÞgÉžD²¨nrY#S!®,߆76f¤¹V@„ŸÌÎ8¦†I@úh€*~@Y%'2…#uÌ'¶‹Tz<(#!ˆe¯‚ØXõI×a5ø›wÁD:•Ûè|¬G¥ke yº0¬ÌDÓ|©´ÞÇðÖNᔀ¥ð§vuG¹C5cçÉOÑ„ë;Lú<ͯ9ýZ¤­l”qG¸f²ì2ªxó›vv%2I AÍ·ˆ8e…ø>"{Öœí@èR”*Ìl eÅyÊN$ÒÚãÄY ÛN_õðe œ¾}‡N»Y›#épôèofkfòÇ™wx#û#½ Þúö†ÎÝ\·f¯iS¡q©¾Ô½˜’L¹|€LÈEÄTËüݸô¸¾äìâ³wöÝãz–y3Šñ¸ž»…„Ö3ˆÙmx²@$ºu€*»,ÚÒoCµ¨z6µ¡¶ˆ¶ßŠä%?õ'8Ž ù+~ȧd:ÔüPQÂú¬¤£ò6*#žW£Šbªq¹Z›6 ¶‘TØòCüAý •#“/¢µåiS¶-ÝlK»ÑŒN%à"*z£Š½)°wÏ‚Øí.Ï1N9 ¹0xõQq{_M2i·‹ JÇvµõÓ’e‘bâ¸UXpiœÏ-ÖFë¾1¡ðêmzØíP”ÛØbën‡Êï|8v*:»s(A!uÞAðåØÐŽoÒ"}„:ó<6R÷º‘bôÖaOûeùÝ—ÑAi9?ÿÊtìéõ—}+ßÀRéb€ª_IÛsÙtïÌ_jvº[™Dm–†b·+ Ó‚?ØJøòŽ—ýï›ñåmF›;¸{î_{Zˆîƒ\íJ¢ãÀÂIÃÂÚªY|ïþ¥‰8±m^×—vj¼£â0*ñOÔ® ojúî¦ÇAªÄ¾T1,=•!®ù`WÒV´ÓYCªPQEm6W)8{p‚ ǺìE—œÇN§ã`M\l÷"‰4Õ«pB3ÇoÊ!u:…¾H)˜²@pü‹I. 7Á¬Sƒ2"¾µ].u@Ê@¾LÁ!e ¶ŒËŽ=¢‚5SO’l:@²$ĭФ*ôŒïxÁ™]ª[NÖšDpS÷}´Ó ”¬E„U:µ< „ ¥‡K™]Nyò­ëþ1=dqæP–AÖJíËï¯yÉU>›ˆÇ'I4Ü-ÈNÉáII$Ú&¢%÷ž ( +¿Kx˜] F[†¨*~YÙh‘3ƒqd¬[(ˆÀã÷:kÅzyë'Çb)Âï®êã£_¨›„úëjîê¼µ@c5«lj%J¡Ju J]¤i— µT3^‚†“ËÜXIË‹Àfë»u™Õžîƒõc;Ap¶KéÍ×nÐc”¿}»ƒ§3'ÿKá´LjÁ…±¨'7N ß÷6Ј¦í4J#À»0-Ðcó`1p™þýk ÑÞ®™ßnBÃå°‰”¸FÞO&±”»»h¬úÂ2…ˆá±ôUŒ'Ææú "‰èà}c)@XÔÛý\ôú4Úߟ2‘ü¥¨%&Œã¼&xz9#>ƒÈÅГÉrèÁ…Y4>ƒE}¦[ÑR'À9Ža±ŒìÈ}(çm]úü„ˆ|Mã#xâÀ;ºnÀ!äÂÔüƒµp˜Ð3#,–Eú@ l¦-ø žx—QÅñc«&x‹ˆ8u¤dN–õyb§vÍîÿÏài¬ïè³QdzbÉ_B§@Úâ4è6F: +˜jÃøkVÒ“~ƒ¦'VFsÉ +!R{*–‡vŽÏûLt ›‚S…9Ñø¾1C‹X¹2´¢@®v;ùe•Á¦‹UÆF"Q©íˆ–“½ÜËVPRý¤ÙŸa”#KB4ÿýþ¥jIñPÙa®6uç-É!CŸÎyL¬©Z†L¥šx +F‚f‹¥;fÒDN·ð â})?æé±¶‹P¼uq2¤ߌ›SôLx4nØÑVîÆ½k<äcz+™-’¦+óSÏz>Q•/ˆûèOæ/1Ÿ®ÊÇf ÁeY£”Aõ~Ý!mžG7ü9˜! ¼´”¡)±jÅë‚]ˆÞ ¿/™Ð%&„¦yÆó,5µ‡ÇЬàYSd s}s"ICQáwË׫kòI‚dŽOš-±(0f÷ÐnîÁ¤ÎGøXt¶=+}H1FÙFc°\(à:½Ý17¤ªB^PÇ$ ú˜¡ãÝÓnU ]P†ï/èÛœ«s”D¢œliTí»æ÷,È¢òÃWZO/®]ž;AéVHüûã·u‚S‹šZƒ dÅÓbvYKc½;ú¾¶3²Ú«öz÷þ|€‡saåt–ø ®ô¦…ö>c‡k¡–îÍ-u§^ßÍr»3úÈDuº}/‰˜Z¾ºn³;<¶ü+ðD,hTõͽ}‡I_Ý~wéèšÉ'ìÔ)ÖSyà r$S’© 5÷Þœ0òG ’ÖœQ¹þÀ °‚‚ùÀ‹<8”þ¾’þÌ·sGv¶M°©Õ 쎶¶ôS]¯¡{c^¦w Yn§ÜCàvm˜Ÿ÷ßN«‘ƒí—à‰Mˆ#H½ü +d±°BDb©É?Ø9×`EÊýgg‡ŸëàöGðvX,TÛUº¬ÉSùaˆ'ʺ+jÒ·Å 4µÌÚy†¹á^;ÆÑíã#G‚{¤˜ªIƒ£0¦UM y¨z%âJF­„$Fî8¥ˆ’¶þCã"¯ô¸M`¾tv"ö©2§ÄÃHî³ã,A OÓ€x\VUýù?ƒžÇ1?áP–º@X{8+·ž³áÈ–.G.¼ãÞ.Lùq‚\Û„Å$w`åj}z 2uÒ}©Á›æâûox,&ßNôÀ£ VÌ„ƒÐ³¯e¿ÏƒîšðÚÀ~•¯á )ÌyöS‡*—GWfêð!ç4údM¸3ø®ÛßOçÓª„…Àå¶Ú”"™1䃇Óâí7—;LŸùxu“hG*z”®n¶¼ñBÊpþ#X,Øþ8:dä¯ù X ±ý›I7óÍ;|߇ÍùØí»yþ~íô‘Þ +›™ä°‰Æš®ÐCG‰„ÀÈYÔÐLx¬×÷à¹Ûƒ´DWu:GêxäÆEao ~*è˜ +qò–›ÉþÍó§À¼ŠÜ×࢜‡!{s@º×*ç¼Á*’ÑF¯dôca!A‹Ö+ ÄÁn­HŠ­Ó ÅžwaÂo;ÂEs>84‹ãhFìyæ·èz‡â4 ûbáÓw0Á_¦ÂK…þ €ôºIjï@w nä«t×Ý^Q—C 䞣ĭ7:ÀØ™±†ÙÔõk–cX±¬'¦Ç”Ž”á–•™Gu +8'Fd*Âëè =‘O ½Õ žBž‘°Ç 0ò(£ï"ÿp“¢j2­ ÇXªé'¡'ñíGΩÐmmhæ|V<ç§ + H ôXœÖ¥0‚©x5Ó#ù¸âe#µ¿ÀI1µýÊVȨ|I*K»d…XPý›¶ÆîE‚6HÓ.` T†÷›:1’/ëÝ×á<%×b%ú9œõ¼Å° jWÎiÒ@,;Êxƒ˜ÝjƒŒ©²:â±]°âQ¼iñlÇ]Í¢Gíèiþ–ú.˨۟WtN‚Q”8Žá+¨B—GFþK €ÓHv NWå4|ƒvéŠ.‚è¼}͘RTFÔ,k ?½”‘Ã:9¶+a¹Èe”ô&dÎn8ßi:„a˜@H÷­‚ØÌÔƒç#3c"*ñqÍûÀ5¡ú• YùiáZ&; …s(tóÿš¿­b DÓ±épx¾;t%Ñ3æXC’öûSÀˆÔ\õt#ÝÁí.c·2Ùþ,æ ¶‚ŒœÐDÑ«D‡†Dÿüí!ÑÒ<«DÏïÛzÙ$zmÇ “èù‹&Î\%ú;´IôwðÉÊ;º~àÇ4w“¶|uÚ%z“Ö¼Ùú¶Êì÷>X¹€;F$¥wþ -ý\DúûÇ– |˜÷ÓÖ‘ùzéoSß$ú¶Éì÷NO`±­$d§Î"Ðß¡M ‚þþµe¦~2¸3²æƒäýóž6n·j:ŸÁÓañQŠùìs<ª½ïþ$³k¨c d’ÃŽ³ètr9‚Á¼nOsžOÞG0#Ò%¾éöÝ4§õ3{õ.Îk #uw‰ sã¾½žlŸšÙxºHóISyÇíøA†!Í“A}»4Ï¿fº’ƒ8OІðçùýH9sˉ°vûAœ·Œ¡6”µ]çò"Îß¡Mœ‚qžÝ5‹8¯ùI£™ƒq>iòÛ¸KóDLŠ^¤yBõ½Kó$ +CTva^YÉr/«0Oú—qÞÅy"Zqç 2)À*ÍaúØMšB‹4i>im€v©œ$ÑÊ»4¯˜RÊÒ µbÜ¥yBÆÒMš'hV…Uš×Ï©þ¶Hó„4irxSéi^?#kwi^·!ã¼Wi^ÙÉLë«8OÈdÈ!Î+‹‹»² ’zæ\ËÈ… í‚œÇ i󼳕RoÓ»ýpâóÀäÿò²!YÍ÷ûà‘ˆŠI}¯‘Áï +aéYÆdmFYëà5%ÿ÷;’Ƨ!åg Oú-qÇè¾·›LBœ‘šH©ÙL/ž.sûúv_ øû·û⑽VY,Ùzêw[r8°{÷ÝžÿZ­åȸG-TÍEô´ü!¼7Ç«‡bˆ‘ÂT‘•7”ñ®ÑÓØ ïAhMK˜À%Ô,ùTh~.ãy}ëþPoD»Pf÷fîŒý\«&4 +%GÕ ´þƒcÇv²Jz§%U1އ(2j³ªî~ˆbUÉí½ÃæºÀí½>¶¢× ‡è5·õ½²†!‡èÅ€½ÝäÚö±z;^·16­ƒxš[ÄN‘ (9Áóc;×Þ­ÈÛ³¬|‹‰ pƪ_£hh9ŽpÆœòlNÈ/“¼åa4™ûp _´>\0+éé±·ƒï"úýcÂX_ö!Z‡¾wm%Bxæ54"3«åíº®_Nžàv\h–4al¯í>6h%‰ \»ŠsFYã1pÍ×>é°èýÁE÷S;cÖþµÉäÓ(áìòqr•:ú‰"9r`“ìó ;Þ-¿ã0Þfàs*{œŽç!SÊ‘µÛyØÇy:;uÇÓÆ²Äp‡Ý8‘e&¸oþñ­ýĘC<œ4×ÌÖê"Çvª]d<œ†xIþpTò ƒÏØ‘§5>$J¼½è¹tI”xªa-É)Qâl,€å@`8Uçƒq>ÐFO휖Ë9H”°°3f“(GrȃD‰ètä˺ÖôõËϸmœë#›Py î T^“ڄʋۙp‘ðp–\¤ßÛM>mBåÅÖƒP9—ÁA¦¼VÏ&S2±êQ|»ã7‘…E˜ôç$S6³æƒ[Œ?-•5tQfMÄQ#‘4ÒEǸ`ÉOsL-ö<ˆªW·Á:Ö!*-Û€ªÚkÏ-E¦gM¹#È>ì5±êo’›ÄõÑw發£ì?"x.»U›æâyÞ4s1À\œ‰ÄM¤–HoÄrbˆ±ì…³0aÑawp£Î½Û8‡³€÷IôZ·üš3Žô:CN2ˆÇ{ ñ})ÁâJø| ¾Ô„b¡sƒŠ&ÆãR™]ÐáñY²ñæuûJd{ž®äïøñbA‰•9ä”eÈ ÓìšêzM¥,ºˆ)-x k:b¤×j +Å)ôÝ!‹gÑ€+øz€›Övïö Úpð> äêÐ{=0ëämò¨ä 0õb¹Æ¡13ý³€Žå8¸D0FK0ƒÂØÚ™8ÁÊg¡ûGÚï9‚PQ«àgÞ…³5)mçá<¬v„y¸_ƒvÑÙÑ×_0ÇBÔJHÊgè +òºÿ,ˆËƪ«átÏn?‚‡%rMå#x:IÞÑöýÂû]`ÕP½P°ƒ1ô¦I¥Ñ ‡Dä#àΚú/@#ö%IžI„Y%Ì4uÜÛ9÷ @„®c Ë&܆¿‰ÄZ%Ýϯdš«®= pG·ìÜl‰%&x6"_Pßà`±365gïd7PnÛ¬ZFAè!»ø·ÓåšüáPB u;ÙG‰2–Ùú±,c´ˆÅN“KΫ \úûÜ!„ŸÎ‰}oÙþp¯óšŸWJfšåõµa¹”ºƒ9¦±-‘"…?êqMÓ†" ˆ¸/ÆÖHZk‚J@Amœ(X€Ûºñrx%“b«mö¢àª.ŽîôK ¥·%§ls„(;i)æ0§%Œ øX¤ÿýN Ô*„¤*r}¿ÓpØcÏ7{;óÛæ@ +ñtÀuîÍ2æÕæè]j]Nëë|)(„5k)ŠØAׇdÄ » £¨[‚e¤Û‚ÝЗ.ƒ¤Ç©éî¢a&Šgš½ Ž jmA–Øäc°Œº¬p؆½§Ó¼×c´•5­4ÙÝ¡ÃZ¨7Cˆ%ÜŸA>ÂL™¢Y‚ö98èÔ4õ¤Ø÷Ieu¥½Å³âýEЬeNaúëùIÂ2–é÷v“aú¼ç¯ÎäëÛ}Aèo¿»¯ËcÈŠ–š@?Œ·}ç¾Ûñ«¿CúÄá/E¡`)‰ EùçìšñPÖµïez%Ò?à p³]š áÓÔÁރˀ^ŸF»{ð…ÝîG”9®…!ÐE»–G8£]÷ŽÇ(ëœQ–$ÈåpŠ^ÈiëLp;GǧöStðpŠÎimÇèEŒí8¼ˆx8F/âïí&Çö¯…Û » ²YYåÃÜù#=.è@Ç \É}lãÙÛÕx9TcòÝRšý|LÝÊ ûËîè<€YF3“úrj_”>œöÍjRžÚYQÊÃÇn&òÇGI}‹ÀaHéžãHgßJ?öt¢ôÇa}$«c2ûàËcp6RšÖáÐ:z²9á°ïÿZW×ÈI‰íо(x8ì/ÊŸÚM§ŒõkÆäÓQŒ9÷ãÜÂåpb„˜¿œè.Ï™•Þó#;—Îëïè¼ÝXüópÚýTclŽÐ<8º» Å­òù(¤Ãµù¬+ͧÈe3¦ù¹h`ûΟ_ÚÏ‹9ÂÃ13絟N“û™6©x: ë&öv0Öp)áÁ‰tþG‘”ã0ÜDJh²µú“HIÇÖ~8Il +Öå~È =J>NYã"%6ΟM¤D:eg¬[DÊ6ïöUŸ/·‹}1äË·Â6×üÈ&R^ƒ;ˆ”פ6‘ò"Å~ZLžN™Iú½ÝdØ)/þ^"åµ .‘òZ?›HIOZ3­{÷ÝžßDJÔønö³‰”PûÍ ƒŽ«-aµq ¢D=܈9VMJ{ûí ¢ü»´>‚ñôêö#XÇ"K2JÝ'2¹ØígoYóúŒyõæE¯%teÝ#‘‘µk-½‘yß’ó×/p¡jÈgB‰^Þ)²3þSAøo˜ ż ”(‘›"Å@ šJ,ÌŒcÉ£ì>t…j¢4l:“xkWtÀÛ4”XHøì°l„ÊJî‰:;üSdÏøØ¾ßÆ¿BüZ³ÇÐC»ñºä!9óÈT“O¼¨5ΔSUÀu]Ky|Ä<²?tа š{WBä йDÛ{°Rf'¼ãÜfŽC‘E)^pÐ~ªi'vsêêGpéõõá‹›¥2f;½³ •³›Ì ù|ÞÁÓ’–-øˆ­"øgð4aœ|¸^?ƒ§nßÍr£G‚Œš£ûyOsîZ]ü#v^ë;bMð0åäµtÕ/ÀC·og¹ÓCã² ×ã· 3Ä~ÆNÊvþ~ƒVlnrÐö8{Uð3è5µrs-ä§W·Ad¾Ä€D ïËDÞC‡¥p¦çFöì4$ðHxÑø9\ˆtnÉQSCð ð4ªªéF>bGnZAø#(“èt¦_A¼>7 â‘îY˜Vzˆ‚Ž#Äôz™L×»GD¼$mä +"óF•^°Ýq—€A†| Eb·§ƒŒ¿F‡Y¿cÀõœ–º +ǃb2â´'ˆ$Ð=]A‘ŸAPíõ€e+Á²„2‹“ÁàH7œë—%o«¥59!]5zÙ7–‘¿Ÿð¯7TuÝðrŽwMKiï·, P‹2‰/µ²•ÍpZºÖ2Å v°@ùsuB©¤±BVÊpa|Ì!ß8˜0$Ì*—U5ãAŒ!ÄÒR' G:× Š‡v%©°¼*lmXäÒ p>‡Ë(¢úHÝ@¼»Vp™ñ»¶«c9heÇÀY +í.È焘6P½gtÉBÅSÕƒ¡óņ@,Ï $±Ã™á»AžáP€{'PõFgTl¶£Féìà0{ÆwÌlÜF)u«ÒÛ Ä¶/Ö–EŽ5JßÞ~}ðÕÑe +kßÁ·FÖ>•Y•ikçÇ2Ó#Ý!¼ÙAÆtÈ¿¬a®ˆäx@QB€dÆ YWãRwr¶g] é‡6ÈÈŒ˜ÃC37ɤ=²f¹÷æø‚4ªž´EA¬€‘ÇÜŸš¸ü¥‹;¶_ó©ú™åÛb-ÍÄ ž³ðV°e݆Dü€Œ‡ï2ÇvŽÎkRÏË l¾ ºU¸•G—ôYOª4í.Õã[µU×Ç©ÆRÈ(ØtÍ+S,9ÂÔÄÙbåÑHÎDxÐï…VÕ¤ô·¢ë(Ÿ‰â\Æu.Ä;OQ !¸zT–Z@Ë¢‡ Æ­“õÖ©tðd[?ÀVBÔhŽcä/Í_X爑-àèv¨3±6±`Xq¢GÄø€äê¤Z‹PÛG— +Æ –âéŠñ³”ñéü|wîn6„tÓ»óp£]à~WzŸ´¦éGìpzD­Æ7òÞ ÜE xdÚG>ƒ§nßÍr{žòñÍ»xðó޾¼&þx\Óšd¿wWdOM¥û p—qoÝ~7)÷6“ØiI¼¡ëÆ€?t§E}Q4iR‰Ç1°€¯;xø|\Ò.Ù=°#çæpN`6ï½MÖõ´Çt]«´iß~Á) û©ÝÁ/0 Á­úÄD +×G–9 Õõz…?á[ûi_ä<¬¼ £óÂ2‚¯G·'0í¿€„XÖépŽ_Љ>7PE˜ë#«Ìú~ÎÇ7“@#¸?˨eÃýÉ$L5¡sʨ0Ïá'¶4Z±O"*ŒJ¹ø“ˆ +cZ²ý¶ˆšxõõ,¢†n*ÐÞ¬m“PïÐ&¡^à&¡†)mª@Lß}”P1H¹6 U ¹óIB S‚Ù%T¡‰jp' U@ÒI@ÔëI@ãèæ|Paª¥ÛË& †ªuÐêÔ ÜÔPµDÀAÒ’¨9ö Ÿ‚¥À$WâЛL@ÃKñ$  +¨‚ÝTtÎ×Ý]@ ¨è^Ž‚&†›N2¨±0ÅZ°bå.žÞ¡M<½ƒOñT›ÑOå—{;‹§4l›¿È§á~M/çZô?¨XæÑDÞM@‚›F° +¨q8àîj¶ƒ| +öÒÿc—O£lj¤\9ȧtO'¸Ë§N%ÏÎwgîfVøo«lL5‡Fä«pjÈÍ~9~{}û³ÿùÏ¿ÿ×øs:0Ç(ÿÐÿZþ’f/w¤_cÞ,ýãõ÷Ñl³oü/ò?üŸÿþŸ¾áIöGN¸ ~õòH°NC°ßø‹ÕqìÊqïok´¼:«ús !Q´w+‚èUþ478¯câºæ‡qi$dçÅ+)ªÃ²x<ÇÉ.èË&‘qX¯àï +6²V«0µûê´Úsª¯Ço'ʰHÞƒŒbÿÆ=ñ„E…Ü’YÉxògÅ +*!G;¸ NV!ùPÑVxdL“;4¨eYèW›l<ëäN¦ËÊI`×”“ÆF7ggEñ‰ÄÒ)X—hr§–Ü¡Ë!0l_Á²\š#¡Ë³Œ$¸Á¥k¸drìO.çþZÀfD¤ô™C lnÙkéë–‘„ìÚLêw±€JëÑ®t›o;Á 0‚îªÈúu2P#sjMâ½]Î×0ùW’b ÙòJò—ˆL2ˆÒC)À1¯’5TV¾pXâÃøŠ¾ÉÄÃfæ%BÎOTïâÅàÙYéÄXجOÆçôz€'ZXZ¢Ï”¿1¦½ñEczØ1£¡5KaNO Rµ‘\ù:õJ·4>ZD‰¿Uó4J-ÓÓ(¢:ç/(¡3vQ :ÌÞ“,û>Ï8Ä?Ȭ ­v]¹íö‘ªþa±LVÍ!E§±›.\ü8Mæµ€ ˜½ùL¸3½/vÐuInF ¥G‚HËýr¾a, q´£ µã‚ [UJýdÈ =LBñ5̓5AÕE¦¥íþâLÉvË£–v°k¨0¡ ý^bIÕ±cp^Af†`ãúŠ›ákÝGãÑ5J¼õË(ÁõÁ£ãü^ðDVL9ó̄ɣâ8w$ã@å¤Kþâ•4rZ»Ø8 ºj T´•÷a²È;>R3•ºVïÅ"Î*+kÑ.ócï _Ôa."‡š6Rw/†N²Pþ$1Ù«ùÈ84?Fõ²ûBÏ(BcÈø‡AâÉÀ8tœÝkÁv¢¨•ëHÊ3 .Ñ9iµH²¢If xBJÉÑg²™UzïP@è÷<ÒX‚`)yrÅ›'G«õ1J?ßôÅʺ’Õ? þÊ+ô5fdž<p r#èÔ"À× ’÷ „5Ï2C×U àýdÙqʯx"Uã=w ï‰%¿(¶ÐAˆï½²âò”P4n•Σ +ÒHƃT´Ucí¯Á³àU5“+ïËÁMé€ã„b–"µ¶ìªM!¦2ž#Ø% +dš”PF‡hð.¤3Öuç˜LƒÜH{ì5Ù«è¸×;Î÷µ€;ä Ío¨{æÊiö¢¤4Œ0d\<3;È4új3Y´˜phSBV$ ¦æ!«j½ÐÓ ƒµ_,ëö†—h©Ylˆoò[-¥Pí½„0NAírÏôUa'Ó¨ö¬IÁy^CQ‹ŒˆÃe@c +¥\\;LùuÇN„bê3uL¹X¦¦Œ»I”˽֧°ÇL´¨íÔqÿ¥èçnG"j!1U…·}éª\7Vä.BZY‹"¡Aé7fn†::ѹ±ÁF—h2«ÖÌbÎÍÍÖLã>»†/öÛ¼éæ +ÅÈ”ëu4§þZÀI)¦ˆ>“õÌŽ‹[ ‡gmZŒ»Êª5|rK_6P)<ÚµÎå)Já¸~ b$˜Aä´ÉS›ñt¹FìxE­+¹VEì›lKQÁŽ&ç! Ò†@í²ô±L û[Á2¦¸Y°Á1(Š…HŒ9OHÞ9 +xècL2¢Ð=RqS¶L“gÇy¿à‰^t;:ùÌœï`%G=ÊÊÔ 5ú&ï*½‚FfkÇ\_µaY,HÑFQ$¥‹sèFJ.,Á|—#~r޹3:>gd“k$­*¢ÖqÙÅq]Ð`ÞèñNîa3,AÁ:Xt®ÈTô®i·TlE7æfþZ°^0{¼!ò™9ïÏ$¡²lô•»XùmÁŒÌÖJNg™A•¥YÂB:Qì§Fäq6&»€(Ò¬‡ë°äëÊÌ Àl•åÙ«ÝÎ̱-*3Š0£ þãâÖ.h2òõ +æ1À Ž“Gâ55u7î¼9ƒ*ê’Ì à~Ì;ÎýõO4S²¡ì¹˜Çœ=È@Æ…TUŸÜ£n³‚JéѩӅœâm%ªÎ%—0††¥\±”U.¹¢Sˆ¡,…̼Ù#RLFª/Þ2“èÇôFh0ö¾¼Cù3CSpŠc r¥1]¼‹ƒ«×øq!5½Ï“w§‰¿l§ËŸ©|æÎy`O³.R'×ÞQÉYA£³6ë<Š¨ÇƒÎŠôÁÄm²÷°€©ëå°êå¦ð! ™8²…†2Äb¹ÙezÝiõsø}QÕñ£Ë¼«áNæD9R?¬í>.#ÑîÊØys +xHÁÔ=¹w˜ûëŽ(Ölr$ó‘;ïPË8!Ú¨áÍ# 0Íí´`Fgk·'AdŒ0¡¢ää שɸ/Ô´evý, +\² +ÑE+4ž¨Æ»Ä…Ï´%ìSî­2$çÑã¼kîÞåív}ä•ïó)P¡1n<ÞcÜñ&YgüZÀRo3'ò™r±ŒÙQ»œ¤ã Ïþ“gëVPé;ÚuÏIÀ§®= $~e+ŸËõæ%sV°0 +7;Y¯—˜ÂXÏŽD2Ð v£Í"Q„îY=hpó$?Ä0ír&×pϯàà}Z¢hÁ<˜t §” …^' +)оœq×É¿ãä_ðD´~àÂ]üëÜVo<˜BÉp‘ü£Þ³‚JêÑNDf™D‚E"-PÑVHÝs)ôéèøD»„„Âצ£­]ÀT!Ç$ÑmÂ`_%À k¹¸jƇ2:|@ƒ{x.ßÀÁ=0ú¦`:Âü0ÇQzM§†L? î§þZÀd|<úÌ ÿ ovø'ãøNxCJ“Ô‚VÐHmíº§Î +ךò€ð ‡VaðñâXÒ»>=‰Þ‚3üâ_WfžQµÅ®5˜2¾gçF§t3D)È220b'Qʼn Ñg]×Ú +‚ˆª-ãh½¦ŠÊÊõpžü랈&HyCê3‹&å +÷2 T£'Ec+·[šÐ +£]‚éZ ËÒ1!cR ‡½qPK†º ¯‘1¢¾ b{KÂWÁàSbëÉAYŸÎÕñ_Gh2°íØàü„*°›2w $x$µ<ûšqÈÓ¦jì;Ïüµ€;ÅzCñ«#Ïü¹ØÇ‚.b¥ +ŒÃ0Ý +èAµJéÑ®£üc (UP2X§[A@²p€| ¬A–›0ø¨`Ç¥œgú‚£Cá^É£SùÏa¡¨Úå þyT^ÁÁÀÎÝ™õñš ]r·‘ ÂWÀsOÍ@y$3ÀÙ0xœûëžhÖaw;SúÌ¡QmÌ,TTÁ~í¿„â¨+h´¶vrô`îîRÉY³É@ãvØk×¶Óå.߃7cá§¾Ž¥×w|k +}ÌË:º#ƒkˆú_±É´Ñ ‡´ç5kœ™Ã¨L 4Xãä2¸.¹Ø”ã)ð¨ñ—KIHÞÊÎwV`¦±Ýø†ð+-½Ç:„-åqXjOd° Þ¢+6¹VË©˜(=Ç "Æ}\›ã×Zš5\"æy毸SlV£<ÑùÌŸ‹}ɪÄϑˆ.öád_A£´µKZTÖe Tµ•(Jó)Õ&P É¾¾cƒ}Z™÷IPpXX®°€j¨n¼Ü]ã÷ܤ1Á3epï4ñׂ­ôÂ@F­ËÊgî\ÌËZBXî@g»É&gíQ +[ƒŽIùÙ1à…täBƒÆ°™Á4#îVãge¾.¸ aÎ#§°]USܰ†Q } +Ð2Â;l^èqEÏ 5nà`‹µDùoýоo#‘[#ÑÜT„lxŽÁj¿.ºÓÄ_wl'xVã‰À;GnÌÂfB°›’1Ê…|™ÃXŒuÂÖ.%T…3õ°ÌMÈ8#4 íℹpóƒ3rë†éO<‚”°tóù_´©DH;…¶Pæì¬Ë4ø†Óo'ßP¢– ÊÞ"ÊÔq %Mï9W€ƒê0ÙušòkWRa\r'Ÿsñ­`/…¨ådJ-xݽø†ÓuÄÖŽ†ubËõÉ1¯­Púºà Cda RåÀÈ×Wpç ˆÍY’5Ö0¬A‰ +—@ajÚ“þ2¹Ô®ßsw\¶•"ß-à yûÖ‰|ÏLùí6΀zº2Î覵ë<Ã×Ü)ƒ¡ø7ä<³áâ ‡¢Ñ¥¥Âz>«Òl• £]Êœ…e¨lSèÒ;X$º`F²p¡ èe>ªÒ; ˆáBlØŒ­ÅuMIQ8[x1vÖèñ ž±Èý +æe?:ÅŰ Í‘8ÜpÂ"7ØzM`rì4ßׂ=‰dÁgžrã7ª•CŒ+¢„Ö)wdÔ[^1#®5c>x,kf7ÁpÞOQ„1Ш„ÖV½rÚ­7 AnF ýd2¿`õ&3rç N +V–´™†ùX!„Š 6P?¼éôì·Áijëorã]-»Á”ùµ!(Žáý´@Ư—xq˜Èëí“oÈx&؉Ì7dÀEcŸ 2Çzq¡ç4òY;›˜´Z[ ª­½í²x nNŽ” +òÙV\î“'‚Ry€®Ž}™ñö™] PÄ‘é,SG—hò©·œ +ÁÀœFà9” ãtmš<®) êL¦ÐÂ¥~'ÿZÀ•hJˆoH}fÑä CÔe$´ïVäýtí#ä­Ø@Bq´ÃÓ0 Ø{{@âZUÑóç^š`½¼€8¢œ¤8!$ò)G?%%!ãVº0v¼ØèÀdDh cæŠ ®¡¼œb¬™ÕmÐ5Qé9s_o÷aã,ŠBý8¹vžðëî„jš,÷LÞ3[n\Ã!“XŒB™ïÚàð¥­*Çr9„ªÚ +Ñáâdè„ œ8:ø”uc_W0g\rXµ¡üËɉ¨!ç$ƒFìÊèò zÜ ++89ˆD#eDSlšCÁ8e(ý‚Æ ¬c +ð;ŸsèÆ@Ž&"O'h†èÓkÛ)ÕðNkd€^2Ÿî<’“¿áæ2ÚËäÈìÑåVa"Ô™ëàÄ)—2â'Ƕ#ýQ.,•ˤÖûy™´Ù—RÈãRÿ¼9ýó2ÄÁÙw `–¬Íá/y ÁS¨ñâȘMGoxôùâȤöwÈ|®¹/Žø£Žx[K 5¿>ñáuY†qó¦Âx¦ðêi¿¥i\’t}àµ~Z7’S¨"é~×ÇM ç#"5bœ)n47g|X 8‹|©}8Å£2!f×(ˆ? +ww˜¬2¾pžŠt\ˤȈ}êö‹Ü¦A)3†]Ÿ1C*+‘ýiã•i5½äɂ˂aÔ@êG¡F´¸G0 ‘ +$;*ê>NÕ˜kDe«{xPE¸ëƒâ¾üŸW¤.¤ùc‹×º¥Ã;9 7ƒ÷ ŽŠ‚43g…²Ä„¶h…XÍ+ž×#òDFYÁÅ êLæ-̪‘³ÓT¢Éh§sQ„Bn²W‘KfhìL;DÓ¶ó| ô4ÜfäªÆVr]„Û”ÖIJ#»¥|-ÑÑéNî?Z$a½s×s´Š} 9û±É|@mˆ+0”,òØU¬@\®6ømÈßÈJB»˜‡Ï5ƒØHåNîG¬Ãß­™l6§,RXæ’>1çÌÔyF^õç,ÄWc¾vý¿d²û¢ÊE¡±XZxº œ&ÐúƒÝ„ÅÖ"ãÏÁWÑŠ‘[ÈxŽ l`IÉ!‹Ïøe\ Ò8@Æèâd@~Ò‡éŽ" +ÀÔg8§®ÖlÁšA%êñÒ +'@¨).²L‡&•#ùUþ +ÃíÉO‡´†HO€y,MÆlàø€`aÄï1ˆEI ‰¤tSLfÍJ‹Ñy¨C‘ÇÁïXgœ-tÁZPÏKæ§AæHH4žN¨ãA¾ Ð°Þ "7BI£®š[¡¨ã;°R&;Yw¿õ$™…äæpYL.e±(Q ä )'[Yª3 \j2bƒÓ|øÖ Ç2¤ þ©5„!™!*:³jgB:‘!ms+ÓFuË(b÷óÑxÔ.Á¡%ôCäà¯Ú Q½1c¿9­¯z‰B$$-‚³ÄN¼ÈÒBôrâç¿ëƒî‰tw½ÝYòýÌ’#''ŸUÚÉx ’ã0ãõØrÞñ|‡þ¹‚„*B–"@)"~ HšUV÷qPï *Òà«„ÊkÊa5„ÛpÁv°ã;Of¼Ö€§­ß–G©„`L¤³qO@ÅB-£,¼îÂÖjíIúÚ¥ë¼@Lâ"£!PÊàºn`CEÙfO^ÇXóäµê×®} >I9D e„ƒy[¼Œë$ð.DÅgÏÊ­¢¯I‹F' D£Ñ‘g&NËl0º¦!†ØíVtÔwüâ‚&ÔvÅ”ô³¦òɹ#[ˆŒ1=f'ÄfV@ÇÜ‘¡eìŠ,Û©kˆ4_² «¹å¡S¨íEž2!¹¶£BLQ È£v±²8½ 2Êt&#]ØS,€•Á¨ŸÈâ®77ÂÔŠ)ÜuBà#“2%ŠÜå “ª-Œ½‡dT$SE‚ÇÌ’,Š0´Eh›ý?½n"B`w ³œxòŽ—ÆêlïÜ…¥TAC9ÿ­ÄôŠ0+HȉÂ>@|T3nÒT¯€èÉ’›ÁEr$–¢­XÑ4# g¼Ñ@­À)AÔ0š“,"´÷XCyÀdÍ~K¨ÒO)¿Ì&ŽÚïÚ¬¨ÓBþAó~¡kK†Ð“l"Àš÷¸ d,ðV‡QVñÙ ÃeXyP®Bf›mU62¾XˆBFF¨kp¢€ Ù =­ŒÑ2¡A=±½ͳٔ|8óÏØ‹ôõ8 +ªe㋉茽¸r{ÝABê‚S°²œ F䙦”Š ÙB½5é}øÞESDKÑÛHtÖ†¦Íé³àdÄ€ý¤¯C‘ÕTè9Zð`i<µË8ëåãe$‘@¥-—¦ê²’!˜`´]@ñ¤‚ŒŽY!Õ .• ½ ãΕ_ÇAŸ Óa»"£‡·%ÎÜP¤Ü•…p´¯ +(äAš¢<›@¡Ã:™“ .§îUíE„îã/Þñp²¸qFH…èÊ©IÔI£l R·.RÖyn7¹ ‚A% Ñ A ˜¯=è X$ˆ`9f1Rœ+VÍUL°K<aJ®r`ް4¦gÄ”MVü ëCôÎv<°'Jyx›u¶T ÇçYTTÑwÇ&ŽÈÉ Ð#Õ©Œ»æá+“Mœ,Œe˜ST'ln¨È“"¨_¼Œa˜©[+!>œØÈ» R8€ô®1è|dÊ‘—Æé8ø‚‚\qìaÊ-ö“ü~ ,~…W” }ñ5¥Dý[F+ D±Ÿäá«X×UØ–“ª¢’‘Ï$O‡+QcÞKoL)A-'h_ˆ”mú´Á²¬ +PÉ#sáIŒ¤œ< d1z;zŠ.w„1âÂÂv¨o8ÆŸy$–êh¤k¶IDfša¹Q“’pæ<âÆqš©—$ر_ ndûro(D¹ åøò¾†Bî8vem˜§‘̬MÈ:zðí·‘8)ÿ¯ÿ­¼+KñHÛ(Ìž$0qxY“C¬˜ß#@eÜ@š= ;+šUQ¯KâemŇPôúÑ%2-ké”;ȘŒÛüè ÚHø~ù}éÈ3§íöœÇôÛ·;¸Ìæµ€+ævÚ½£9wä ã‹r„ž°dïÔ (OƒØÑçpÜ h_Aºª³íÔ.EWÀ¡òZÀ¶°$¾ +Þ€[ 'KNíöœÇôdÉ2›'Kv*Ìì´{Gó•%y|NiaÉÞ©—m} ¸8–²¼ .,)£K p KʶKÊèKd¡1ç0þø=Yrj·ä<¦'K–Ù¼p¥ÂÁN»w4_YRí‹HÔÖ]²€wêU[Œè Í>èåüíë&i£G<®›¤m›¤¾¢ÜÜÏM²@OŽœÚí9éÉ‘e6OŽlD˜Ø)÷Žâ Cü8Õ<ƒ‰Ÿ YÁñü8C½kx¨BöEçÕoøŽS›e¿ü“#~»Iü¸@ï"~œZí_8èÁŽu*¯\I0°îÁW~Œ#Íedh_ø±€wÒÔ¥ …ꆌsW$eQvŒ†*ÕÒà²Aü¸ àþ×ã +=rj·ä<¦'G–Ù<9²a`§Ü;Н ±­t$6ˆ CðN<;>Ò픵UEŽŠ…#et‰‡×uƒl—ˆ/£/³~Ìë‰<ùqhµá< ';–©¼p%ÁÀN¸w_ùQÇCJnÝ x'ž ¾ÎËÅ·ñEÏLO~Øq-Šr,üØ®oWA¡Ùî¹óèÉ‘S»ý#ç1=Y²ÌæÉ’ +s;íÞÑ|aIpcìÅãéèÁ’¼Q/ØZJÚ¥²‘À?Yüè’¯O¯[vH𣫠iRo_ GŽíö‡ô`È:—×®4˜Ø)÷Žâÿ}rW'› šÏóMtÙÎT\|®U²¾tÝÁ—‚Ho°ƒ„Bq +1ý'rYñýåñÖ¬(—ÐLf› j”ã~= ö:ÿkÆ5¦«‰íšûQ˜Ãé3ˆ’ŒÌ—$"@[zý„!µf^*¾¼ù¢F42 <¦« ˆué”’fu»¼£8vfê£ÀZڣ跋ð¥ ÒÜ;eî¹OC¹ e +ö=¿pY×P¶õv•bÑÿW<)vË×1®*ÚMö¦‡æ¬Y¡—B5‡¾ƒ„òÈ =ÓõÀâÛ7Iw$7ôë Ó5ñS7ÉüT±ØIH3zÚØà·ÇÄЭʷw);Z§Ü¡müwpöüÚN«wäÿÌÊ +»:Ÿœ?žhNo0Ùg$Ù ~Ê‚‘V̦pÕz¼&Žk§³úh«ê:^E*—¬Üè¶Û‡O¨rGò’P š‡õôJb‹fþÎ8n²rà¥Ò˜B•íü¼wµ5ºÖD¶s£ËÌÒ #Ú +”ºÝØ9ECP)kT@ÍÝKö¦Dö"äKÛe[iJ!sû¨éUâ®VaÇ ´Ð2h?–‚*`ÿå–£ÑÑ Ü!p-ääüX +–dnb:#\'ž«W†”<ÊZö7Mòód©yŠèù†q[ñËÈáòóý¾€2’ŒÂ4}ŠSJ˜Koã_4¹ce>Ù¸ý¢ßØÓEÛá•ëÉ£Â<Ï¢ÙT?·íàlÆ£¶;òh,ë 8*¬1®£}{̘µ˜•ÐÄ]ª²&Qo#å4âZ\[.‡7Ü9sõ¸4®âKÿTk:^õ" EøË±ƒU*¨ž\+H(Ð[Z €×`¤¤öT£ÁÍ1éË2§ §—ZÓùŠWô{HˆŽ—ñ¤å jé>¾®¡¦ jÑ”ƒ_˜"cBl²f|/GV9Jp"ùÒŽš?øª†ªY•Æüu¶Š!èHv*7Ë·9¾©U"^9 ½™í†ï_°jñ]¦2sxÈf»¨Å›øœ“˜Vœ9[ù¹;ž˜5Ž™à‹Ž»Ñ +Ô- .¿ÏИ˜sZÌZUÊGGžœy©ª +ßV!y˜C9-ßšýÆ_è€_ŠRB怊 ­¯yŒ»Q8áe‹ä ¬»¢¤7<9óÒXí55«…±´ ’GÚÎÃnP¦C<±9˜Ìªq±¤{ŽXÇ‘µÉ¬Ø@umÎØw¨³‘aIJ#ÛkP:@”X0VÖ¹ÄäûðÅ ØÝˆÑòE=Lá–ìÉÎõYiæ-U4ÀN·¸Ça˜ÂŠ]f¤YÈæ ÏuìXç+jˆ|­„Çr•¢„%3hÁL{Ø }ÀÜ¥枺³NuP¬²ÓqηEÉÌ‚‡ðl°çxlø¨)š‚H.¦³þÙsfëäº-]¸ ’EtÆ\g\Æ"–òG£ñ ~ÛeçœwTSRqÐàÒßÁgœˆ² |Óv §“Ì#ÆfB‹£Ëm†¯%ÎŒ‡¯¤]¦3ÏH‡3=AÙ³tè`p×E9=ø¤UõËääX* ¯I8Þd[+ÙºÃîFw*Ôy8 y„¦âãâ×n2ü^kZF³Ud`fËRy(²ª{Ø[òÐ(ÙWEÔž4FÔå9Úõ¯Bî€%!¼Æ’ŸøðŽÆ^¡¨£ƒ{D:zúýT,&’ F„~m@Ôø‰@N&!ˬˈbxQ:Õ•"r§ò…;öáÕ “ rgÇèã3ƒ¯Ù©cê¢rêu¬ôÎz2p@l†Œ½~¬Ød„gÚ`”xœ†}3®`5 X‚-g-=}bÊ‘•“ÑLB”àŒÝ‘ù&ÂïW÷1bmû#÷ÎTœ6´ÈD +PƒKvG®Éˆ,’u0<1s»€(IÓ`]Çl ,óTPÔ· \Mì”"@‘‘*,õg +$€ê$“Ö’‚/JŠÊŸkýv®-؆”(f%<éÝ–*’SppåÀQŒÌL/ "¥á/`A5yü˜³Ïœsìã’]VHÂNâG*M¶Y×V:Ž;dšòqLÁÎlºÞ•±ú¹‡w®¼e¦òZh¥mŠÜNÙæ¢ï8´~òçHÈó~,¼›eÊë„PÁ*C äè’hìV…±@¾G u‘›ù¥ä&.ê)Ì_T/F!ÄÀ?Gê%ûLÆö’A ”¶×:X\,ÍÎú‰%iýÄÁRæ¶`•Dxˆ"ÖÏD}L¬ò‘DåùzŒC»rV¨§PškPk»n3‚,Ñ Ý6ƒÖ¦é(ŽQ°3»¯RºPµ˜ ü ¿Á`$]–2Û­Ü8sq2™ÙIQkÁ¨QY†'ØEÿì„Û-=òQõÒAЄ«zÆID{Ìr¸BcZ30Öô.ð¶gñÊèMQH¨¢?-å W Ž-ø_Óý4 &¤íçDÏY@™“ÿìq,é×ðw;¬Ê{•A,´ƒ‘ÈýѤÁ käL jú3‚sæˆw“™Ç® +ôÁzf-PWÆôcL*”A*3<“3€ª1 +Ô5ZAN;wÊ£Ë;ôoÿYž§¢˜rq°•dž‹Ý.Cˆy«Wcµì& l“”“6Ó &™Ù N€²Ú©~³yZ¯®—H?·Æ8L$ãÜÍi€L£Æ7üÄ2â«¡€Š.›yKA¬fÁߴæV–Å ø²¯QyÙ ‘[ {ØVª‹9¾Xâ´ÆÐä“«^ðµ¸ùê`šfòIQM> –D3˜šŠ²šŠr$cQG51E wÙÌQÙ~¡}A­Wè@ØÓ'‰²ËÝì^A³U4[y Ò^†ö2g£RI`³²ÉŠ“U×‚Ùæ`ü€m®©[¿·H3å%vÉà"8ð®¥ÚÿX¾²4* ›%Í…h$j¶å™BÕ¼¨ö·àmmfš1’½Ð$©|Ì&*yq桱8«ñfZã@Õ8µpˆ$ŸVN€RËn,"-y·Ú˜¸òyn–)NŽBËjÑ2z¦½XMaƒ^­ûƒ ó.—á­ÑðFQ»½Î«T=Øù!üÁ6Èßp³)þf]2ñÐbŒ´ t–\ßL˜€ê°»­¼9rÔø]˜øCí1ôsý±k,'°aRz€:ÖŒQëmk(bТŒÑªÿÓÆ¤–8¾ðqس5ËTQË3é¢Ñ0#! E-Z? Jð¨U ÚËË(ˆL»á PÔö«µ Ë/˜•Žé šïið¹±þ¤Z÷šZ÷˜ÅWMU­6Ah° >› ¶Ä<ØË$˜j|dšf_\Ÿ#×ú0Yò²ÉrŒœQ G^Yh ¶(u³½xµ½XBe€\k+¨c§5_-=ö Ól©aÈ©aÈŠaäÈÔž4œû0>y5>ù1>h©Ñ*ªÑªOú ªÔ¬]ƒ,›ŠÆ±`Æ1FKyD€#²t3©âAKœ¯j‰ÓÇN`x+¼¨<‰{Ë•hf?§f¿¢ˆq‡Ö¨ÖBK• ?¸Í̈ 3c´›Æ²Ì¨y¢-C¤lL†xâÀ;ÎMÆ6ÖË8XÍ8 >WmÖB¾×ƒ‡ä³øÁ4ÄI°BÖ°$qìH;´›H{jÉ«¹ê·AîOµo‰ÌŽ¿šÃ8ј4¯îŒõhxµ¹ÛëécÜf夶ŽÕ6ø›v‰T»Uñe žd«5’ãdš¤#7Î\4&7ÍÃ|°ãÙ¿šiˆ8?»mG©âÒÑ&¤ô¤ipµ%aœªÛl(Bx¬[íVF1Ûž‹ÅË(æÍè«¥LçÆí´Ú׬”ž;4ß²ÒÝßÛÎø•^üÁL££ã’\;„b(G£ÀBd3&]ÝLPÜ8L8¾š®ŒPT+V›—ÑI߸i+«EDpƒ`=š­Þ4jac^ä@Gý¤›A¿éá±ÙïÖlݬ~„\O»µð7íá6»ñ5¾çënžäèè¡xàÊ;nNfk…?5»T5»Xêuã™+;¨PuÃ’ Š6-AO‡,…"†Ã$³jTjjTJv41‰Y xJ‡’ç¨ÊN[÷…KÌÊÞ0¡—úC³ç+ñàEL¡9¸Xvýy¶˜ÚrjVFŠËý[z‘=Þ0Íõí‘SÁbC„ObfHÇŠ½×ÄÆ¨3Û[ÝHµ~ë ¿d÷üWÿî_ýÅßÿÃþæëþæÿýÛ¿úû?}ÿïä§?û×þý_ýå?üýßüíÿóýÏþò?üÕßýõ¿þý¯ÿößÿ¯õÿáüßÿoð'ÿÓƒsŒÁÿ1Ôúïþ(ð}­oÛýïú»¿Ö–ÿ½üO—·¨1£ÒDAX ’†‰Ö-AÂ!%ä;iˆ/ÄŒ((@ùØ ˜[¿kîáé2}réUQsØéCZh=N•ÁŒYæÇ ö Cd ª)æWèëۜرդÔú­wDüâƒQƛҿTD…N,¿§4¾9edQÑá!›’Å€´œ4Ÿ!˜=6„hú6{jVÕ1ïð­ò¢‘d‚9»3 +¸2àíúóß@rˆçûÄÆhSÛ›Ýè±~ì•Ì>MàÂlªCb³À¬"?Õ¢ä0—Ëš1b^£€ÄJ.ź´¯Uxl3︖N»r¾¾Ýg··›4Ù¿öŽ–ïe¿¿ø/-ûý&íû!í þ o•§ÝÈ^fz¹Äô:)¢³âFüùóD5á'X¶1€–„\tQ =’1¯ 9Z"s€Ö-³cå‰úÞïD³¥Uÿà2Ú×§©üþFáýe\íê&¢©&Xe½Ì"²|–«&Þ s±Q +V½ù×^ÚÜþ‡TŒp€&˜¬Ô(ÍŽž· æN JPt”c {}{‚|Aà:³ÎyuMÊÍuâÍÑòè®Ð—Ž\«MÛi‚E¯öâûÁ|”&Uì·×ã· 52r‚әƙ¤/h²~$Buô;¹@6Ý×ïS;Ø@zÒ1ÜA>¦Qa„±uæxEüâèÒ@9f˜Îf¶díJ·ƒ^³í5T_1(¹M¹`ŽÓ”‘M×H©Õ+d|ïWàmÙ½Þ¯Èñ•t‹œ™FÓCJeÚâ.P$/Ôñ‘OTÛôrç_ƒK·¶ékýK°3îÁuTÝÆ +­±Ë‚JØHb[­%ž¹ A˜,j{Ûíí{P.&M8êà¿4¿©ú»mZ®ëØNŸw û_¸5i‚ƒc§À‚% Ä|YZlõÚg•û‘…A„vƵ?¡–uÖ I懸@ÿ€§…ì°îŠu‰²ˆ„DŽ ³¦9§$Á»½C~e+8H†!.haÝÓ’ß"Ë›A¯~CYþáð¶ [õ@è/ćD¤t¹œÊxï#‘C_ Â@8ùE ®Зºý¡™ žÜœxÒåP¡Ý!ÐI+@K„)[tðåUÒ›·v‘yМ{Çq•Kÿp_ÝY–l¡„jKµÎú +’MÝš!K._¡Õt8L¾Ã˜‚©lI ŒOÂ0Öë%5?:é6æÇ,ÈVDc‰C;ز}9~ííƒ ×màÜzCQË ïùõŸ»ÿ°ïeÕhú$à\d +óypQŸ(º ·¤¥’»ž5Ã_N‚úQâ¦îI\þòGh»ÿÞ øÝ!÷«ÃÌ3ýd:à­W´¬}¥8Ixµ É&áJxG:¤>¿C«„÷)ááK¿Jj©Lr’ðÒ‘èÜNš›„wÿÁ$¼‹*—„wûm•ðЃ/1î>È]ÂÃäôr=´ë¶ºKx7h—ðnà*ábJˆ]ÂÃ@,Ÿò.áa +9Å7 d|îWàºÀÏ ò_^µ© éDDûg:õ}/jG@ñ¼GoàMA¨E ŒRÎE^ˆ˜dDô2çóÕ™Zg‡&Ô²ZÑ+êIØM3HêGn¡Û€õë}äì¯äà`¢t‰×7é²iâ B$ä(SçcvtÃr Ä=ìÑãs“`=²î%‡]ß!}46ðõéU‘€¤ 輺=Ùjଠ!æˆT*ì_±i‹$òQ‚‡`¬–iôQ‡ g’¬×êLÁÑŠ0HŒ"*6 fZ0~à\¡¡¡±É±g‘'~ öDîc±Ge‰\G‘ÈdÈS3e9¤4…;Rcª]_]3Þ˜N8ªM®áS\LÁ6¦°BF•DõöÐΜšù5©‘É:¿Bn<[Íß#uñCøÄÂÊí±ûÌz|5+Ÿ|(£¹¡‡­¶$þu:7x^{5í¢Þ1¶*ÎÝ!ŸQ¡,çÁ¢jˆPË´køšŠÔ‡­ÿîÈøÏMb‰CiçÓá9ƒ‡õ6@ØO Þ{9-:]¿àÂë‰P¡t»n ~@=V˜¤7;ž$çבý@9ä°,:r»íMú¸`·8Ÿ=7kÊ9< }­?@–LÀr¦«›|!¾û¢¼hvXÌ+͇vùڪ˷nÈ>Ä îSËšýç" +Dä7$C! îÜÔ²|ò'þÜ­œ« Ás괦߯´©ÚÜþd9Èm1V*§ÛíH·2j¹#¯˜¨êËsC<ëzÈèG•‰u½É¨ËŒõö)»ìn#›W"~CÇÑ«éÔã„N¹ëøÇ7ö9¿£•=ýÿÅ]펷 }‚}‡û'@R i4Í´¿b'‚nÚ"m€¢g›ÈÚ4íÛW‡”HÈëM +…aÀž3’çj$Ž>H§a¡S¹.‹3fâŠê”3”ŽÑn™wæ+„´´-¾$$ +jd +ÈêˆHÙOmó8:X9Aßœò¹L¹md­Ðz'Ú,'׸ü_|(†›&QlÅ[>PÐY>¨ŸÁ­œ°³|0‚fù@ë¬+gyt–®ºòß~D†c£L™óžªíŒ-òŒqAì’ëÅVIšÊZ×W0R¦*…ŠåÔ{â¹jW^&¤úÃçUh£jB+¿¢t…—¹)ßÝœ°”Ÿ´ñÎtŸDÔ\®Ñ¿ñém<–&D°[Ä ¤=p´]5¡>Ù… .]ƒzBa¥‚Ì+£€¾€C¤zÞÙ£+·Ó&K kŠ‘²úd +Æ©$&®®¼!Ì¢v \ªâ]{Å•íà2|Î/v凿Áúëí‚JN¨}´ÌOãòº3HWÒÂOºPÅq;Cðµd'`Ûû(à’¨9ºÝã2jÃùö°¥Ã#'¤Í5È1ÔY¥ºöVÙY#¤ªá‘«†/‘å¸^¯ÇˆKä/îÝÆ–^¶`ö†êXœð‘²`×uo‰^"ñXp®¢Ìøƒ/>?ÿ1üüü¿óÞ.Tg¤ÃHò‰ÄÈMÝñT¿7æþ´œC`—]nLÙoV[F©dBñƒ ÅÈJ‰]ÜA]8h:1ˆ8LÃkpÁ‡’XÄZt ”Ò%6þ·ÓÓ‘+µ“RçQÍÆÉÍtÈo¿…5„öÿv’pˆë'‡bpšvë 3àÔL³òîÍ -k÷‡´HƒÑýÝVN,Ë¿×C‡Cwd+´ƒ~$ŸáÑ|woÖç§KõwiDDù8†MOž¼ÿüùOŸ¾üñnv\˜Øfx/tò¶¿)H 7öé¡uoWà; ã—œàýM0ŽììÚ:Öv€mÚ;åýèLÓ–¦H# †½öߥíyJXxZ;~”Ò{€xT½wU_Ó…¯SÌéÉKw‚Ÿòçk¾zÃsÃâÜÞ|Öá‚X¶/R¿tHÇ›ë@–•tRÚiîuh +#/õËTž…—«­‡ç(ߘôÝëÍ䗥ÐìkïX +%ØYéùcªaV«;çîì h8Ó ÛIÅã7P2ÙœepˆH!TúÖÛý‚–ù†ÉÍGo˜Ýü5”â`‘ß&/56ªßKÒ³ñÑï½ðÐx†ï,\f¸œŸþŽ»AG1:kX»è«ü’y9赕‘„ÿû#Pje9dx©c e|Ã#',Œê®b»cŠ8x*Ö÷™Ö7âç_ÍiwOnÞzÿãüÕ‡/¾¹{öïûWï¾Ëÿrÿíw/èJâù‰Û¥~Ä.9Óßpɸz÷õÍÛ/~zøúþÕëw.w/Ðæ>ô‡¡÷¾üäî‹?¸üö¢¿»¼ýþÇ1|Uïþ¢ïŒ—÷ž¼|ù=Ï>úËåÃýðòÕ²çòùËËÓÏ>{ü¾?÷ú»¯¿¿?ÝßÏ’Ô¿_þüë¯1Ì©í!ן¾ÿÁåÇû‡~¹ïUâ+–øÿ9Ú øàNQ]b¸|rùëßÂåÜøéÍ»¥L‘bÆ}EæÛËvÔÁ±vF;Òw! åà êÔ YQmxH&ºØ{înÞþÃ;—ßÐã°þÊ‚ùuºÉvì©_©a¡Ça²Ô¾o8ðfï·mÈ‚xÔ gÁ/Î,{@‘… Ç/É:Ä]¯¶ µ¹g|2×W5(¾¥zk¤eºú©U»í#ñãðMW•.E‹½gt6ÞR!Ýê/f,GTKÎì% +Ù¡^¬Ï ’ ÉFÂÖåÁP®o§,'‰R_`Ö¬z‰•Ë&G‹ìàÃÈÕR)Ûð¸!ãT¸üþ&`ÂÏ7éáHÂèsÙx¦)0nŒ T”@*û¦BÜ©W‰P‘Õ…W¨D^3ÐóúÈÒê{rù%Æ=m +MVÒ#Üé€ýpHÌ7h£} { ÿu¸­œ!h›ù¬´<«sV¬bu UÉõ7X8êØèE(T¸cÇOù0€ùØoAIí|0UOzæêäù@u—úݶ(LÐÁƒŒÚz'%²r½…9Ú:´õ×VÖð™)à†ì+ê…PÕ†Eá¼ |N}BàÉÞf¥há¨yçÉ aFÛ™ËÁʶ¬ÑÒ8T+HÎËç¹ìwD±säd&ÊP·”-Ü/rÞ^ƒPóKíTµÃvæ}Ož²9LàÆe…à;Õ§mÌRKÔ'ľ# B¯]óͺŒ²3“3Ñ)é±Ò­å¨€ýЯáÌwD©7Á¹íê2.±å–IT¥^J [eM D_pÇKŽ\jÑ™£M 2ÉþA¯@'àv‹<H¢)§œj£Bx$RQð']·r†ÈÊî•N¬6…&+¹)/™“ƒ ó5—áˆiŸ=†cJ×Ʀµ”iÓ•‘£–.à +9 àì³j3L©•Ãê•N¬6…†ëHœoyß/rìÜÓµ‰l½âFZ×…—³‘¼ Ý6ÔØY÷°§\ÂNÓ<8] DS¤t0DY;ªRÚ8Ø£LmÛ‚s½©j€ú¡x†ZhIÙ¹ÂUý¬.`aif @C±Ïõ2(Huêê[#/£a3ôüfpÈ‘º½2™ÔBƒ•ë`9œ2ˆ| +³ŸFb—¨åF]K)mWÈȢs)X]ŠRGtÌì¨i–ÔÁ#GLhè:ôŠG*fXw:}£+…ÒÐ1ZŠDæ–ŒÒU4ã½ ¦ ºÿEÜkh‚ôCù4¾ž^Ëm¡ÑÕ¼'dP W&{Z0Á ê PŠ­=RX©*PkÅ?3öSR~1l†è‰ÝG®;ï(^&#ÛÀ¿_ç”Á2pS¸Âé0¢NkçísŠz㸢@®XN4nŠ +ÃæpªþX9qÞ*S^ +ŽÏЦ@ä”CR¤Á3KÆœu«PO¹É DkÚ™P;bu(Ý&®Ž é¢òާÄú5ŸÚ~Gʆ²ì¨sRhW`·pFhn¬9f¥Ž"A&ûÚ20ªJ!•‘C0ƒXÒ˜½Æ"j¦Ô£†*®Þ‡ÝïØñY¦Æ‘«qeàGÎÊ:âQ<€³ç¢Ì°%6:‹kVªÓá¨RÈaY§xVTî¦5Ô;i+ +¢áºV°P¢” +ÕŽá­ÝÊRæú.ÕøÀZçw 7™×öm9T+h¨Vm†jµÒP=zgå„«M —jÔMÀ'œK54ŸbœßPš†ª„Êèø ï©°Tc…•JáY¹úðСզCµ‚ÆyÕf(S+ªÕ;+'œm +¹T­8¥Ç4aÞ ÄmIk&Œ3™ç7hï`™+×EØ*²qÊq²c_ûÏÒÀú™µpšªóІÂ-2iâs€óà*•3DT6ó=9ñyÖu¦j0LF®ÁÜöbbŸK/,LÞEë—^V·þôìÛûÏ_=ûîûûW7ß¾~öÏû˳/øêþ‡Š\¾}uÿúÇ—¯î/¯ÿñòg\©"ýö·ÞúðÝüþÑk† endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 7 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 47 0 obj [/View/Design] endobj 48 0 obj <>>> endobj 45 0 obj [/View/Design] endobj 46 0 obj <>>> endobj 43 0 obj [/View/Design] endobj 44 0 obj <>>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 63 0 obj [62 0 R 61 0 R 60 0 R] endobj 85 0 obj <> endobj xref 0 86 0000000004 65535 f +0000000016 00000 n +0000000253 00000 n +0000032184 00000 n +0000000008 00000 f +0000600651 00000 n +0000600720 00000 n +0000600790 00000 n +0000000010 00000 f +0000032235 00000 n +0000000011 00000 f +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000015 00000 f +0000000022 00000 f +0000601654 00000 n +0000601685 00000 n +0000601538 00000 n +0000601569 00000 n +0000601422 00000 n +0000601453 00000 n +0000000023 00000 f +0000000024 00000 f +0000000025 00000 f +0000000026 00000 f +0000000027 00000 f +0000000028 00000 f +0000000029 00000 f +0000000030 00000 f +0000000031 00000 f +0000000032 00000 f +0000000040 00000 f +0000600861 00000 n +0000600931 00000 n +0000601002 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000601306 00000 n +0000601337 00000 n +0000601190 00000 n +0000601221 00000 n +0000601074 00000 n +0000601105 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000213251 00000 n +0000213321 00000 n +0000213392 00000 n +0000601770 00000 n +0000032638 00000 n +0000213925 00000 n +0000213812 00000 n +0000211933 00000 n +0000212690 00000 n +0000212738 00000 n +0000213696 00000 n +0000213727 00000 n +0000213580 00000 n +0000213611 00000 n +0000213464 00000 n +0000213495 00000 n +0000213999 00000 n +0000214283 00000 n +0000215835 00000 n +0000228508 00000 n +0000294096 00000 n +0000359684 00000 n +0000425272 00000 n +0000490860 00000 n +0000556448 00000 n +0000601809 00000 n +trailer <<778455F8B7094801B691C1ED43C12888>]>> startxref 602014 %%EOF \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/panel/marbles_v70.dwg b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/panel/marbles_v70.dwg new file mode 100644 index 00000000..6ad6de6c Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/panel/marbles_v70.dwg differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/pcb/marbles_v70.brd b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/pcb/marbles_v70.brd new file mode 100644 index 00000000..ea493dfb Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/pcb/marbles_v70.brd differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/pcb/marbles_v70.sch b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/pcb/marbles_v70.sch new file mode 100644 index 00000000..43e649cf Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/marbles/hardware_design/pcb/marbles_v70.sch differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/io_buffer.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/io_buffer.h new file mode 100644 index 00000000..2f37c08f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/io_buffer.h @@ -0,0 +1,109 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// I/O Buffering. + +#ifndef MARBLES_IO_BUFFER_H_ +#define MARBLES_IO_BUFFER_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/utils/gate_flags.h" + +#include + +namespace marbles { + +const size_t kNumBlocks = 2; +const size_t kBlockSize = 5; + +const size_t kNumInputs = 2; +const size_t kNumCvOutputs = 4; +const size_t kNumGateOutputs = 3; +const size_t kNumParameters = 8; + +class IOBuffer { + public: + struct Block { + uint16_t adc_value[kNumParameters * 2]; + bool input_patched[kNumInputs]; + + stmlib::GateFlags input[kNumInputs][kBlockSize]; + uint16_t cv_output[kNumCvOutputs][kBlockSize]; + bool gate_output[kNumGateOutputs][kBlockSize + 2]; + }; + + struct Slice { + Block* block; + size_t frame_index; + }; + + typedef void ProcessFn(Block* block, size_t size); + + IOBuffer() { } + ~IOBuffer() { } + + void Init() { + io_block_ = 0; + render_block_ = kNumBlocks / 2; + io_frame_ = 0; + } + + inline void Process(ProcessFn* fn) { + while (render_block_ != io_block_) { + (*fn)(&block_[render_block_], kBlockSize); + render_block_ = (render_block_ + 1) % kNumBlocks; + } + } + + inline Slice NextSlice(size_t size) { + Slice s; + s.block = &block_[io_block_]; + s.frame_index = io_frame_; + io_frame_ += size; + if (io_frame_ >= kBlockSize) { + io_frame_ -= kBlockSize; + io_block_ = (io_block_ + 1) % kNumBlocks; + } + return s; + } + + inline bool new_block() const { + return io_frame_ == 0; + } + + private: + Block block_[kNumBlocks]; + + size_t io_frame_; + volatile size_t io_block_; + volatile size_t render_block_; + + DISALLOW_COPY_AND_ASSIGN(IOBuffer); +}; + +} // namespace marbles + +#endif // MARBLES_IO_BUFFER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/makefile b/plugins/community/repos/AudibleInstruments/eurorack/marbles/makefile new file mode 100644 index 00000000..c77e4b75 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/makefile @@ -0,0 +1,57 @@ +# Copyright 2015 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. + +# System specifications +F_CRYSTAL = 8000000L +F_CPU = 168000000L +SYSCLOCK = SYSCLK_FREQ_168MHz +FAMILY = f4xx +# USB = enabled + +APPLICATION_LARGE = TRUE +BOOTLOADER = marbles_bootloader + +# Prefered upload command +UPLOAD_COMMAND = upload_combo_jtag_erase_first + +# Packages to build +TARGET = marbles +PACKAGES = marbles \ + marbles/drivers \ + marbles/ramp \ + marbles/random \ + stmlib/dsp \ + stmlib/utils \ + stmlib/system +RESOURCES = marbles/resources + +TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ + +include stmlib/makefile.inc + +# Rule for building the firmware update file +wav: $(TARGET_BIN) + python stm_audio_bootloader/qpsk/encoder.py \ + -t stm32f4 -s 48000 -b 12000 -c 6000 -p 256 \ + $(TARGET_BIN) diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/marbles.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/marbles.cc new file mode 100644 index 00000000..20baf7dd --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/marbles.cc @@ -0,0 +1,447 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. + +#include + +#include "marbles/drivers/clock_inputs.h" +#include "marbles/drivers/dac.h" +#include "marbles/drivers/debug_pin.h" +#include "marbles/drivers/debug_port.h" +#include "marbles/drivers/gate_outputs.h" +#include "marbles/drivers/rng.h" +#include "marbles/drivers/system.h" + +#include "marbles/ramp/ramp_extractor.h" +#include "marbles/random/random_generator.h" +#include "marbles/random/random_stream.h" +#include "marbles/random/t_generator.h" +#include "marbles/random/x_y_generator.h" + +#include "marbles/clock_self_patching_detector.h" +#include "marbles/cv_reader.h" +#include "marbles/io_buffer.h" +#include "marbles/note_filter.h" +#include "marbles/resources.h" +#include "marbles/scale_recorder.h" +#include "marbles/settings.h" +#include "marbles/ui.h" + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/hysteresis_quantizer.h" +#include "stmlib/dsp/units.h" + +#define PROFILE_INTERRUPT 0 +#define PROFILE_RENDER 0 + +using namespace marbles; +using namespace std; +using namespace stmlib; + +const bool test_adc_noise = false; + +const int kSampleRate = 32000; +const int kGateDelay = 2; + +ClockInputs clock_inputs; +ClockSelfPatchingDetector self_patching_detector[kNumGateOutputs]; +CvReader cv_reader; +Dac dac; +DebugPort debug_port; +GateOutputs gate_outputs; +HysteresisQuantizer deja_vu_length_quantizer; +IOBuffer io_buffer; +NoteFilter note_filter; +Rng rng; +ScaleRecorder scale_recorder; +Settings settings; +Ui ui; + +RandomGenerator random_generator; +RandomStream random_stream; +TGenerator t_generator; +XYGenerator xy_generator; + +// Default interrupt handlers. +extern "C" { + +int __errno; + +void NMI_Handler() { } +void HardFault_Handler() { while (1); } +void MemManage_Handler() { while (1); } +void BusFault_Handler() { while (1); } +void UsageFault_Handler() { while (1); } +void SVC_Handler() { } +void DebugMon_Handler() { } +void PendSV_Handler() { } + +void SysTick_Handler() { + IWDG_ReloadCounter(); + ui.Poll(); + if (settings.freshly_baked()) { + if (debug_port.readable()) { + uint8_t command = debug_port.Read(); + uint8_t response = ui.HandleFactoryTestingRequest(command); + debug_port.Write(response); + } + } +} + +} + +IOBuffer::Slice FillBuffer(size_t size) { + if (PROFILE_INTERRUPT) { + TIC; + } + IOBuffer::Slice s = io_buffer.NextSlice(size); + + gate_outputs.Write(s); + clock_inputs.Read(s, size); + + if (io_buffer.new_block()) { + cv_reader.Copy(&s.block->adc_value[0]); + clock_inputs.ReadNormalization(s.block); + } + + if (rng.readable()) { + random_stream.Write(rng.data()); + } + + if (PROFILE_INTERRUPT) { + TOC; + } + + return s; +} + +inline uint16_t DacCode(int index, float voltage) { + CONSTRAIN(voltage, -5.0f, 5.0f); + const float scale = settings.calibration_data().dac_scale[index]; + const float offset = settings.calibration_data().dac_offset[index]; + return ClipU16(static_cast(voltage * scale + offset)); +} + +void ProcessTest(IOBuffer::Block* block, size_t size) { + float parameters[kNumParameters]; + static float phase; + cv_reader.Process(&block->adc_value[0], parameters); + for (size_t i = 0; i < size; ++i) { + phase += 100.0f / static_cast(kSampleRate); + if (phase >= 1.0f) { + phase -= 1.0f; + } + block->cv_output[0][i] = DacCode( + 0, 4.0 * Interpolate(lut_sine, phase, 256.0f)); + block->cv_output[1][i] = DacCode( + 1, -8.0f * phase + 4.0f); + block->cv_output[2][i] = DacCode( + 2, (phase < 0.5f ? phase : 1.0f - phase) * 16.0f - 4.0f); + block->cv_output[3][i] = DacCode( + 3, phase < 0.5f ? -4.0f : 4.0f); + + for (int j = 0; j < 4; ++j) { + uint16_t dac_code = ui.output_test_forced_dac_code(j); + if (dac_code) { + block->cv_output[j][i] = dac_code; + } + } + + block->gate_output[0][i] = block->input_patched[0] + ? block->input[0][i] + : phase < 0.2f; + block->gate_output[1][i] = phase < 0.5f; + block->gate_output[2][i] = block->input_patched[1] + ? block->input[1][i] + : phase < 0.8f; + } +} + +Ratio y_divider_ratios[] = { + { 1, 64 }, + { 1, 48 }, + { 1, 32 }, + { 1, 24 }, + { 1, 16 }, + { 1, 12 }, + { 1, 8 }, + { 1, 6 }, + { 1, 4 }, + { 1, 3 }, + { 1, 2 }, + { 1, 1 }, +}; + +int loop_length[] = { + 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, + 10, 10, 10, + 12, 12, 12, 12, 12, 12, 12, + 14, + 16 +}; +float parameters[kNumParameters]; +float ramp_buffer[kBlockSize * 4]; +bool gates[kBlockSize * 2]; +float voltages[kBlockSize * 4]; +Ramps ramps; +GroupSettings x, y; +bool gate_delay_tail[kNumGateOutputs][kGateDelay]; + +float SineOscillator(float voltage) { + static float phase = 0.0f; + CONSTRAIN(voltage, -5.0f, 5.0f); + float frequency = stmlib::SemitonesToRatio(voltage * 12.0f) * 220.0f / kSampleRate; + phase += frequency; + if (phase >= 1.0f) { + phase -= 1.0f; + } + return 5.0f * Interpolate(lut_sine, phase, 256.0f); +} + +void Process(IOBuffer::Block* block, size_t size) { + if (PROFILE_RENDER) { + TIC; + } + + // Filter CV values (3.5%) + cv_reader.Process(&block->adc_value[0], parameters); + + float deja_vu = parameters[ADC_CHANNEL_DEJA_VU_AMOUNT]; + + // Deadband near 12 o'clock for the deja vu parameter. + const float d = fabsf(deja_vu - 0.5f); + if (d > 0.03f) { + ui.set_deja_vu_lock(false); + } else if (d < 0.02f) { + ui.set_deja_vu_lock(true); + } + if (deja_vu < 0.47f) { + deja_vu *= 1.06382978723f; + } else if (deja_vu > 0.53f) { + deja_vu = 0.5f + (deja_vu - 0.53f) * 1.06382978723f; + } else { + deja_vu = 0.5f; + } + + GateFlags* t_clock = block->input[0]; + GateFlags* xy_clock = block->input[1]; + + // Determine the clock source for the XY section (2%) + ClockSource xy_clock_source = CLOCK_SOURCE_INTERNAL_T1_T2_T3; + if (block->input_patched[1]) { + xy_clock_source = CLOCK_SOURCE_EXTERNAL; + size_t best_score = 8; + for (size_t i = 0; i < kNumGateOutputs; ++i) { + size_t score = self_patching_detector[i].Process(block, size); + if (score >= best_score) { + xy_clock_source = ClockSource(CLOCK_SOURCE_INTERNAL_T1 + i); + best_score = score; + } + } + } + + // Generate gates for T-section (16%). + ramps.master = &ramp_buffer[0]; + ramps.external = &ramp_buffer[kBlockSize]; + ramps.slave[0] = &ramp_buffer[kBlockSize * 2]; + ramps.slave[1] = &ramp_buffer[kBlockSize * 3]; + + const State& state = settings.state(); + int deja_vu_length = deja_vu_length_quantizer.Lookup( + loop_length, + parameters[ADC_CHANNEL_DEJA_VU_LENGTH], + sizeof(loop_length) / sizeof(int)); + + t_generator.set_model(TGeneratorModel(state.t_model)); + t_generator.set_range(TGeneratorRange(state.t_range)); + t_generator.set_rate(parameters[ADC_CHANNEL_T_RATE]); + t_generator.set_bias(parameters[ADC_CHANNEL_T_BIAS]); + t_generator.set_jitter(parameters[ADC_CHANNEL_T_JITTER]); + t_generator.set_deja_vu(state.t_deja_vu ? deja_vu : 0.0f); + t_generator.set_length(deja_vu_length); + t_generator.set_pulse_width_mean(float(state.t_pulse_width_mean) / 256.0f); + t_generator.set_pulse_width_std(float(state.t_pulse_width_std) / 256.0f); + t_generator.Process( + block->input_patched[0], + t_clock, + ramps, + gates, + size); + + // Generate voltages for X-section (40%). + float note_cv_1 = cv_reader.channel(ADC_CHANNEL_X_SPREAD).scaled_raw_cv(); + float note_cv_2 = cv_reader.channel(ADC_CHANNEL_X_SPREAD_2).scaled_raw_cv(); + float note_cv = 0.5f * (note_cv_1 + note_cv_2); + float u = note_filter.Process(0.5f * (note_cv + 1.0f)); + + if (test_adc_noise) { + static float note_lp = 0.0f; + float note = note_cv_1; + ONE_POLE(note_lp, note, 0.0001f); + float cents = (note - note_lp) * 1200.0f * 5.0f; + fill(&voltages[0], &voltages[4 * size], cents); + } else if (ui.recording_scale()) { + float voltage = (u - 0.5f) * 10.0f; + for (size_t i = 0; i < size; ++i) { + GateFlags gate = block->input_patched[1] + ? block->input[1][i] + : GATE_FLAG_LOW; + if (gate & GATE_FLAG_RISING) { + scale_recorder.NewNote(voltage); + } + if (gate & GATE_FLAG_HIGH) { + scale_recorder.UpdateVoltage(voltage); + } + if (gate & GATE_FLAG_FALLING) { + scale_recorder.AcceptNote(); + } + } + fill(&voltages[0], &voltages[4 * size], voltage); + } else { + x.control_mode = ControlMode(state.x_control_mode); + x.voltage_range = VoltageRange(state.x_range % 3); + x.register_mode = state.x_register_mode; + x.register_value = u; + cv_reader.set_attenuverter( + ADC_CHANNEL_X_SPREAD, state.x_register_mode ? 0.5f : 1.0f); + + x.spread = parameters[ADC_CHANNEL_X_SPREAD]; + x.bias = parameters[ADC_CHANNEL_X_BIAS]; + x.steps = parameters[ADC_CHANNEL_X_STEPS]; + x.deja_vu = state.x_deja_vu ? deja_vu : 0.0f; + x.length = deja_vu_length; + x.ratio.p = 1; + x.ratio.q = 1; + + y.control_mode = CONTROL_MODE_IDENTICAL; + y.voltage_range = VoltageRange(state.y_range); + y.register_mode = false; + y.register_value = 0.0f; + y.spread = float(state.y_spread) / 256.0f; + y.bias = float(state.y_bias) / 256.0f; + y.steps = float(state.y_steps) / 256.0f; + y.deja_vu = 0.0f; + y.length = 1; + y.ratio = y_divider_ratios[ + static_cast(state.y_divider) * 12 >> 8]; + + if (settings.dirty_scale_index() != -1) { + int i = settings.dirty_scale_index(); + xy_generator.LoadScale(i, settings.persistent_data().scale[i]); + settings.set_dirty_scale_index(-1); + } + + y.scale_index = x.scale_index = state.x_scale; + + xy_generator.Process( + xy_clock_source, + x, + y, + xy_clock, + ramps, + voltages, + size); + } + + const float* v = voltages; + const bool* g = gates; + + for (size_t i = 0; i < size; ++i) { + block->cv_output[1][i] = DacCode(1, *v++); + block->cv_output[2][i] = DacCode(2, *v++); + block->cv_output[3][i] = DacCode(3, *v++); + block->cv_output[0][i] = DacCode(0, *v++); + block->gate_output[0][i + kGateDelay] = *g++; + block->gate_output[1][i + kGateDelay] = ramps.master[i] < 0.5f; + block->gate_output[2][i + kGateDelay] = *g++; + } + + for (size_t i = 0; i < kNumGateOutputs; ++i) { + for (size_t j = 0; j < kGateDelay; ++j) { + block->gate_output[i][j] = gate_delay_tail[i][j]; + gate_delay_tail[i][j] = block->gate_output[i][size + j]; + } + } + + if (PROFILE_RENDER) { + TOC; + } +} + +void Init() { + System sys; + sys.Init(true); + settings.Init(); + + clock_inputs.Init(); + dac.Init(kSampleRate, 1); + rng.Init(); + note_filter.Init(); + gate_outputs.Init(); + io_buffer.Init(); + + deja_vu_length_quantizer.Init(); + cv_reader.Init(settings.mutable_calibration_data()); + scale_recorder.Init(); + ui.Init(&settings, &cv_reader, &scale_recorder, &clock_inputs); + + if (settings.freshly_baked()) { + settings.ProgramOptionBytes(); + if (PROFILE_INTERRUPT || PROFILE_RENDER) { + DebugPin::Init(); + } else { + debug_port.Init(); + } + } + + random_generator.Init(1); + random_stream.Init(&random_generator); + t_generator.Init(&random_stream, static_cast(kSampleRate)); + xy_generator.Init(&random_stream, static_cast(kSampleRate)); + + for (size_t i = 0; i < kNumScales; ++i) { + xy_generator.LoadScale(i, settings.persistent_data().scale[i]); + } + + for (size_t i = 0; i < kNumGateOutputs; ++i) { + self_patching_detector[i].Init(i); + } + + sys.StartTimers(); + dac.Start(&FillBuffer); +} + +int main(void) { + Init(); + while (1) { + ui.DoEvents(); + io_buffer.Process(ui.output_test_mode() ? &ProcessTest : &Process); + } +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/note_filter.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/note_filter.h new file mode 100644 index 00000000..5b1bb761 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/note_filter.h @@ -0,0 +1,82 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Low pass filter for getting stable pitch data. + +#ifndef MARBLES_NOTE_FILTER_H_ +#define MARBLES_NOTE_FILTER_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/delay_line.h" + +namespace marbles { + +// Note: this is a "slow" filter, since it takes about 10 samples to catch +// up with an edge in the input signal. +class NoteFilter { + public: + enum { + N = 7 // Median filter order + }; + NoteFilter() { } + ~NoteFilter() { } + + void Init() { + lp_1_ = 0.0f; + lp_2_ = 0.0f; + std::fill(&previous_values_[0], &previous_values_[N], 0.0f); + } + + inline float Process(float value) { + float sorted_values[N]; + + std::rotate( + &previous_values_[0], + &previous_values_[1], + &previous_values_[N]); + previous_values_[N - 1] = value; + + std::copy(&previous_values_[0], &previous_values_[N], &sorted_values[0]); + std::sort(&sorted_values[0], &sorted_values[N]); + value = sorted_values[(N - 1) / 2]; + + const float kLPCoefficient = 0.65f; + ONE_POLE(lp_1_, value, kLPCoefficient); + ONE_POLE(lp_2_, lp_1_, kLPCoefficient); + return lp_2_; + } + + private: + float previous_values_[N]; + float lp_1_; + float lp_2_; + + DISALLOW_COPY_AND_ASSIGN(NoteFilter); +}; + +} // namespace marbles + +#endif // MARBLES_NOTE_FILTER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp.h new file mode 100644 index 00000000..e62c9533 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp.h @@ -0,0 +1,40 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Timing information is represented as a ramp from 0.0 to kMaxRampValue + +#ifndef MARBLES_RAMP_RAMP_H_ +#define MARBLES_RAMP_RAMP_H_ + +#include "stmlib/stmlib.h" + +namespace marbles { + +const float kMaxRampValue = 0.9999f; + +} // namespace marbles + +#endif // MARBLES_RAMP_RAMP_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_divider.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_divider.h new file mode 100644 index 00000000..fa5d0175 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_divider.h @@ -0,0 +1,107 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Generates a ramp whose frequency is p/q times the frequency of the input. +// Phase is synchronized. + +#ifndef MARBLES_RAMP_RAMP_DIVIDER_H_ +#define MARBLES_RAMP_RAMP_DIVIDER_H_ + +#include "stmlib/stmlib.h" + +#include + +#include "marbles/ramp/ramp.h" + +namespace marbles { + +struct Ratio { + float to_float() { return static_cast(p) / static_cast(q); } + int p; + int q; + template void Simplify() { + while ((p % n) == 0 && (q % n) == 0) { + p /= n; + q /= n; + } + } +}; + +class RampDivider { + public: + RampDivider() { } + ~RampDivider() { } + + void Init() { + phase_ = 0.0f; + train_phase_ = 0.0f; + max_train_phase_ = 1.0f; + f_ratio_ = 0.99999f; + reset_counter_ = 1; + } + + void Process(Ratio ratio, const float* in, float* out, size_t size) { + while (size--) { + float new_phase = *in++; + float frequency = new_phase - phase_; + if (frequency < 0.0f) { + frequency += 1.0f; + --reset_counter_; + if (!reset_counter_) { + train_phase_ = new_phase; + reset_counter_ = ratio.q; + f_ratio_ = ratio.to_float() * kMaxRampValue; + frequency = 0.0f; + max_train_phase_ = static_cast(ratio.q); + } + } + + train_phase_ += frequency; + if (train_phase_ >= max_train_phase_) { + train_phase_ = max_train_phase_; + } + + float output_phase = train_phase_ * f_ratio_; + output_phase -= static_cast(static_cast(output_phase)); + *out++ = output_phase; + phase_ = new_phase; + } + } + + + private: + float phase_; + float train_phase_; + float max_train_phase_; + float f_ratio_; + int reset_counter_; + + DISALLOW_COPY_AND_ASSIGN(RampDivider); +}; + +} // namespace marbles + +#endif // MARBLES_RAMP_RAMP_DIVIDER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_extractor.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_extractor.cc new file mode 100644 index 00000000..632e7ba2 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_extractor.cc @@ -0,0 +1,312 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Recovers a ramp from a clock input by guessing at what time the next edge +// will occur. Prediction strategies: +// - Moving average of previous intervals. +// - Trigram model on quantized intervals. +// - Periodic rhythmic pattern. +// - Assume that the pulse width is constant, deduct the period from the on time +// and the pulse width. + +#include "marbles/ramp/ramp_extractor.h" + +#include + +#include "marbles/ramp/ramp.h" + +#include "stmlib/dsp/dsp.h" + +namespace marbles { + +using namespace std; +using namespace stmlib; + +const float kLogOneFourth = 1.189207115f; +const float kPulseWidthTolerance = 0.05f; + +inline bool IsWithinTolerance(float x, float y, float error) { + return x >= y * (1.0f - error) && x <= y * (1.0f + error); +} + +void RampExtractor::Init(float max_frequency) { + max_frequency_ = max_frequency; + audio_rate_period_ = 1.0f / (100.0f / 32000.0f); + audio_rate_period_hysteresis_ = audio_rate_period_; + Reset(); +} + +void RampExtractor::Reset() { + audio_rate_ = false; + train_phase_ = 0.0f; + target_frequency_ = frequency_ = 0.0001f; + lp_coefficient_ = 0.5f; + next_max_train_phase_ = max_train_phase_ = 0.999f; + next_f_ratio_ = f_ratio_ = 1.0f; + reset_counter_ = 1; + reset_frequency_ = 0.0f; + reset_interval_ = 32000 * 3; + + Pulse p; + p.bucket = 1; + p.on_duration = 2000; + p.total_duration = 4000; + p.pulse_width = 0.5f; + fill(&history_[0], &history_[kHistorySize], p); + + current_pulse_ = 0; + next_bucket_ = 48.0f; + + average_pulse_width_ = 0.0f; + fill(&predicted_period_[0], &predicted_period_[PREDICTOR_LAST], 4000.0f); + fill(&prediction_accuracy_[0], &prediction_accuracy_[PREDICTOR_LAST], 0.0f); + fill( + &prediction_hash_table_[0], + &prediction_hash_table_[kHashTableSize], + 0.0f); +} + +float RampExtractor::ComputeAveragePulseWidth(float tolerance) const { + float sum = 0.0f; + for (size_t i = 0; i < kHistorySize; ++i) { + if (!IsWithinTolerance(history_[i].pulse_width, + history_[current_pulse_].pulse_width, + tolerance)) { + return 0.0f; + } + sum += history_[i].pulse_width; + } + return sum / static_cast(kHistorySize); +} + +RampExtractor::Prediction RampExtractor::PredictNextPeriod() { + float last_period = static_cast(history_[current_pulse_].total_duration); + + Predictor best_predictor = PREDICTOR_FAST_MOVING_AVERAGE; + + for (int i = PREDICTOR_FAST_MOVING_AVERAGE; i < PREDICTOR_LAST; ++i) { + float error = (predicted_period_[i] - last_period) / (last_period + 0.01f); + // Scoring function: 10% error is half as good as 0% error. + float accuracy = 1.0f / (1.0f + 100.0f * error * error); + // Slowly trust good predictors, quickly demote predictors who make errors. + SLOPE(prediction_accuracy_[i], accuracy, 0.1f, 0.5f); + + // (Ugly code but I don't want virtuals for these.) + switch (i) { + case PREDICTOR_SLOW_MOVING_AVERAGE: + ONE_POLE(predicted_period_[i], last_period, 0.1f); + break; + + case PREDICTOR_FAST_MOVING_AVERAGE: + ONE_POLE(predicted_period_[i], last_period, 0.5f); + break; + + case PREDICTOR_HASH: + { + size_t t_2 = (current_pulse_ - 2 + kHistorySize) % kHistorySize; + size_t t_1 = (current_pulse_ - 1 + kHistorySize) % kHistorySize; + size_t t_0 = current_pulse_; + + size_t hash = history_[t_1].bucket + 17 * history_[t_2].bucket; + ONE_POLE( + prediction_hash_table_[hash % kHashTableSize], + last_period, + 0.5f); + + hash = history_[t_0].bucket + 17 * history_[t_1].bucket; + predicted_period_[i] = prediction_hash_table_[hash % kHashTableSize]; + if (predicted_period_[i] == 0.0f) { + predicted_period_[i] = last_period; + } + } + break; + + default: + { + // Periodicity detector. + size_t candidate_period = i - PREDICTOR_PERIOD_1 + 1; + size_t t = current_pulse_ + 1 + kHistorySize - candidate_period; + predicted_period_[i] = history_[t % kHistorySize].total_duration; + } + break; + } + + if (prediction_accuracy_[i] >= prediction_accuracy_[best_predictor]) { + best_predictor = Predictor(i); + } + } + + Prediction p; + p.period = predicted_period_[best_predictor]; + p.accuracy = prediction_accuracy_[best_predictor]; + + return p; +} + +void RampExtractor::Process( + Ratio ratio, + bool always_ramp_to_maximum, + const GateFlags* gate_flags, + float* ramp, + size_t size) { + while (size--) { + GateFlags flags = *gate_flags++; + // We are done with the previous pulse. + if (flags & GATE_FLAG_RISING) { + Pulse& p = history_[current_pulse_]; + const bool record_pulse = p.total_duration < reset_interval_; + + if (!record_pulse) { + // Quite a long pause - the clock has probably been stopped + // and restarted. + reset_frequency_ = 0.0f; + train_phase_ = 0.0f; + reset_counter_ = ratio.q; + reset_interval_ = 4 * p.total_duration; + } else { + float period = float(p.total_duration); + if (period <= audio_rate_period_hysteresis_) { + audio_rate_ = true; + audio_rate_period_hysteresis_ = audio_rate_period_ * 1.1f; + + average_pulse_width_ = 0.0f; + + bool no_glide = f_ratio_ != ratio.to_float(); + f_ratio_ = ratio.to_float(); + + float frequency = 1.0f / period; + target_frequency_ = std::min(f_ratio_ * frequency, max_frequency_); + float up_tolerance = (1.02f + 2.0f * frequency) * frequency_; + float down_tolerance = (0.98f - 2.0f * frequency) * frequency_; + no_glide |= target_frequency_ > up_tolerance || + target_frequency_ < down_tolerance; + lp_coefficient_ = no_glide ? 1.0f : period * 0.00001f; + } else { + audio_rate_ = false; + audio_rate_period_hysteresis_ = audio_rate_period_; + + // Compute the pulse width of the previous pulse, and check if the + // PW has been consistent over the past pulses. + p.pulse_width = static_cast(p.on_duration) / period; + average_pulse_width_ = ComputeAveragePulseWidth(kPulseWidthTolerance); + + if (p.on_duration < 32) { + average_pulse_width_ = 0.0f; + } + + // Try to predict the next interval between pulses. If the prediction + // has been reliable over the past pulses, or if the PW is steady, + // we'll be able to make reliable prediction about the time at which + // the next pulse will occur + Prediction prediction = PredictNextPeriod(); + frequency_ = 1.0f / prediction.period; + + --reset_counter_; + if (!reset_counter_) { + next_f_ratio_ = ratio.to_float() * kMaxRampValue; + next_max_train_phase_ = static_cast(ratio.q); + if (always_ramp_to_maximum && train_phase_ < max_train_phase_) { + reset_frequency_ = \ + (0.01f + max_train_phase_ - train_phase_) * 0.0625f; + } else { + reset_frequency_ = 0.0f; + train_phase_ = 0.0f; + f_ratio_ = next_f_ratio_; + max_train_phase_ = next_max_train_phase_; + } + reset_counter_ = ratio.q; + } else { + float expected = max_train_phase_ - static_cast(reset_counter_); + float warp = expected - train_phase_ + 1.0f; + frequency_ *= max(warp, 0.01f); + } + } + reset_interval_ = static_cast( + std::max(4.0f / target_frequency_, 32000 * 3.0f)); + current_pulse_ = (current_pulse_ + 1) % kHistorySize; + } + history_[current_pulse_].on_duration = 0; + history_[current_pulse_].total_duration = 0; + history_[current_pulse_].bucket = 0; + next_bucket_ = 48.0f; + } + + // Update history buffer with total duration and on duration. + ++history_[current_pulse_].total_duration; + if (flags & GATE_FLAG_HIGH) { + ++history_[current_pulse_].on_duration; + } + if (float(history_[current_pulse_].total_duration) >= next_bucket_) { + ++history_[current_pulse_].bucket; + next_bucket_ *= kLogOneFourth; + } + + // If the pulse width is constant, and if a clock falling edge is + // detected, estimate the period using the on time and the pulse width, + // and correct the phase increment accordingly. + if ((flags & GATE_FLAG_FALLING) && + average_pulse_width_ > 0.0f) { + float t_on = static_cast(history_[current_pulse_].on_duration); + float next = max_train_phase_ - static_cast(reset_counter_) + 1.0f; + float pw = average_pulse_width_; + frequency_ = max((next - train_phase_), 0.0f) * pw / ((1.0f - pw) * t_on); + } + + if (audio_rate_) { + ONE_POLE(frequency_, target_frequency_, lp_coefficient_); + train_phase_ += frequency_; + if (train_phase_ >= 1.0f) { + train_phase_ -= 1.0f; + } + *ramp++ = train_phase_; + } else { + if (reset_frequency_) { + train_phase_ += reset_frequency_; + if (train_phase_ >= max_train_phase_) { + train_phase_ = 0.0f; + reset_frequency_ = 0.0f; + f_ratio_ = next_f_ratio_; + max_train_phase_ = next_max_train_phase_; + } + } else { + train_phase_ += frequency_; + if (train_phase_ >= max_train_phase_) { + if (frequency_ == max_frequency_) { + train_phase_ -= max_train_phase_; + } else { + train_phase_ = max_train_phase_; + } + } + } + + float output_phase = train_phase_ * f_ratio_; + output_phase -= static_cast(static_cast(output_phase)); + *ramp++ = output_phase; + } + } +} + +} // namespace marbles \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_extractor.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_extractor.h new file mode 100644 index 00000000..5f85633e --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_extractor.h @@ -0,0 +1,132 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Recovers a ramp from a clock input by guessing at what time the next edge +// will occur. Prediction strategies: +// - Moving average of previous intervals. +// - Trigram model on quantized intervals. +// - Periodic rhythmic pattern. +// - Assume that the pulse width is constant, deduct the period from the on time +// and the pulse width. +// +// All prediction strategies are concurrently tested, and the output from the +// best performing one is selected (à la early Scheirer/Goto beat trackers). + +#ifndef MARBLES_RAMP_RAMP_EXTRACTOR_H_ +#define MARBLES_RAMP_RAMP_EXTRACTOR_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/utils/gate_flags.h" + +#include "marbles/ramp/ramp_divider.h" + +namespace marbles { + +class RampExtractor { + public: + RampExtractor() { } + ~RampExtractor() { } + + void Init(float max_frequency); + void Process( + Ratio r, + bool always_ramp_to_maximum, + const stmlib::GateFlags* gate_flags, + float* ramp, + size_t size); + void Reset(); + + private: + struct Pulse { + uint32_t on_duration; + uint32_t total_duration; + uint32_t bucket; // 4xlog2(total_duration). + float pulse_width; + }; + + struct Prediction { + float period; + float accuracy; + }; + + enum Predictor { + PREDICTOR_SLOW_MOVING_AVERAGE, + PREDICTOR_FAST_MOVING_AVERAGE, + PREDICTOR_HASH, + PREDICTOR_PERIOD_1, + PREDICTOR_PERIOD_2, + PREDICTOR_PERIOD_3, + PREDICTOR_PERIOD_4, + PREDICTOR_PERIOD_5, + PREDICTOR_PERIOD_6, + PREDICTOR_PERIOD_7, + PREDICTOR_PERIOD_8, + PREDICTOR_PERIOD_9, + PREDICTOR_PERIOD_10, + PREDICTOR_LAST + }; + + static const size_t kHistorySize = 16; + static const size_t kHashTableSize = 256; + + float ComputeAveragePulseWidth(float tolerance) const; + + Prediction PredictNextPeriod(); + + size_t current_pulse_; + Pulse history_[kHistorySize]; + float next_bucket_; + + float prediction_hash_table_[kHashTableSize]; + float predicted_period_[PREDICTOR_LAST]; + float prediction_accuracy_[PREDICTOR_LAST]; + float average_pulse_width_; + + float train_phase_; + float frequency_; + float max_output_phase_; + float max_train_phase_; + float reset_frequency_; + float target_frequency_; + float lp_coefficient_; + + float f_ratio_; + float next_f_ratio_; + float next_max_train_phase_; + int reset_counter_; + uint32_t reset_interval_; + bool audio_rate_; + + float max_frequency_; + float audio_rate_period_; + float audio_rate_period_hysteresis_; + + DISALLOW_COPY_AND_ASSIGN(RampExtractor); +}; + +} // namespace marbles + +#endif // MARBLES_RAMP_RAMP_EXTRACTOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_generator.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_generator.h new file mode 100644 index 00000000..196af991 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/ramp_generator.h @@ -0,0 +1,63 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Simple ramp generator. + +#ifndef MARBLES_RAMP_RAMP_GENERATOR_H_ +#define MARBLES_RAMP_RAMP_GENERATOR_H_ + +#include "stmlib/stmlib.h" + +namespace marbles { + +class RampGenerator { + public: + RampGenerator() { } + ~RampGenerator() { } + + void Init() { + phase_ = 0.0f; + } + + void Render(float frequency, float* out, size_t size) { + while (size--) { + phase_ += frequency; + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + *out++ = phase_; + } + } + + private: + float phase_; + + DISALLOW_COPY_AND_ASSIGN(RampGenerator); +}; + +} // namespace marbles + +#endif // MARBLES_RAMP_RAMP_GENERATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/slave_ramp.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/slave_ramp.h new file mode 100644 index 00000000..1005c2bf --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ramp/slave_ramp.h @@ -0,0 +1,132 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// A ramp that follows a mater ramp through division/multiplication. + +#ifndef MARBLES_RAMP_SLAVE_RAMP_H_ +#define MARBLES_RAMP_SLAVE_RAMP_H_ + +#include "stmlib/stmlib.h" + +#include "marbles/ramp/ramp.h" + +namespace marbles { + +class SlaveRamp { + public: + SlaveRamp() { } + ~SlaveRamp() { } + + inline void Init() { + phase_ = 0.0f; + max_phase_ = kMaxRampValue; + ratio_ = 1.0f; + pulse_width_ = 0.0f; + target_ = 1.0f; + pulse_length_ = 0; + bernoulli_ = false; + must_complete_ = false; + } + + // Initialize with a multiplied/divided rate compared to the master. + inline void Init(int pattern_length, Ratio ratio, float pulse_width) { + bernoulli_ = false; + + phase_ = 0.0f; + max_phase_ = static_cast(pattern_length) * kMaxRampValue; + ratio_ = ratio.to_float(); + pulse_width_ = pulse_width; + target_ = 1.0f; + pulse_length_ = 0; + } + + // Initialize with an adaptive slope: divide the frequency by 2 every time + // we know we won't have to reach 1.0 at the next tick. + inline void Init( + bool must_complete, + float pulse_width, + float expected_value) { + bernoulli_ = true; + + if (must_complete_) { + phase_ = 0.0f; + pulse_width_ = pulse_width; + ratio_ = 1.0f; + pulse_length_ = 0; + } + + if (!must_complete) { + ratio_ = (1.0f - phase_) * expected_value; + } else { + ratio_ = 1.0f - phase_; + } + must_complete_ = must_complete; + } + + inline void Process(float frequency, float* phase, bool* gate) { + float output_phase; + if (bernoulli_) { + phase_ += frequency * ratio_; + output_phase = phase_; + if (output_phase >= 1.0f) { + output_phase = 1.0f; + } + } else { + phase_ += frequency; + if (phase_ >= max_phase_) { + phase_ = max_phase_; + } + output_phase = phase_ * ratio_; + if (output_phase > target_) { + pulse_length_ = 0; + target_ += 1.0f; + } + output_phase -= static_cast(static_cast(output_phase)); + } + *phase = output_phase; + *gate = pulse_width_ == 0.0f + ? pulse_length_ < 32 && output_phase <= 0.5f + : output_phase < pulse_width_; + ++pulse_length_; + } + + private: + float phase_; + float max_phase_; + float ratio_; + float pulse_width_; + float target_; + int pulse_length_; + + bool bernoulli_; + bool must_complete_; + + DISALLOW_COPY_AND_ASSIGN(SlaveRamp); +}; + +} // namespace marbles + +#endif // MARBLES_RAMP_SLAVE_RAMP_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/discrete_distribution_quantizer.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/discrete_distribution_quantizer.cc new file mode 100644 index 00000000..a90e3c88 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/discrete_distribution_quantizer.cc @@ -0,0 +1,115 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Quantize voltages by sampling from a discrete distribution. + +#include "marbles/random/discrete_distribution_quantizer.h" + +#include "stmlib/dsp/dsp.h" + +#include +#include + +namespace marbles { + +using namespace stmlib; +using namespace std; + +void DiscreteDistributionQuantizer::Init(const Scale& scale) { + int n = scale.num_degrees; + + // We don't want garbage scale data here... + if (!n || n > kMaxDegrees || scale.base_interval == 0.0f) { + return; + } + + base_interval_ = scale.base_interval; + base_interval_reciprocal_ = 1.0f / scale.base_interval; + num_cells_ = n + 1; + for (int i = 0; i <= n; ++i) { + float previous_voltage = scale.cell_voltage(i == 0 ? 0 : i - 1); + float next_voltage = scale.cell_voltage(i == n ? n : i + 1); + cells_[i].center = scale.cell_voltage(i); + cells_[i].width = 0.5f * (next_voltage - previous_voltage); + cells_[i].weight = static_cast(scale.degree[i % n].weight) / 256.0f; + } +} + +float DiscreteDistributionQuantizer::Process(float value, float amount) { + if (amount < 0.0f) { + return value; + } + + float raw_value = value; + + // Assuming 1V/Octave and a scale repeating every octave, note_integral + // will store the octave number, and note_fractional the fractional + // pitch class. + const float note = value * base_interval_reciprocal_; + MAKE_INTEGRAL_FRACTIONAL(note); + if (value < 0.0f) { + note_integral -= 1; + note_fractional += 1.0f; + } + + // For amount ranging between 0 and 0.25, do not remove notes from the scale + // just crossfade from the unquantized output to the quantized output. + const float scaled_amount = amount < 0.25f ? 0.0f : (amount - 0.25f) * 1.333f; + + distribution_.Init(); + for (int i = 0; i < num_cells_ - 1; ++i) { + distribution_.AddToken(i, cells_[i].scaled_width(scaled_amount)); + } + distribution_.NoMoreTokens(); + Distribution::Result r = distribution_.Sample(note_fractional); + + float quantized_value = cells_[r.token_id].center; + float offset = static_cast(note_integral) * base_interval_; + quantized_value += offset; + + r.start *= base_interval_; + r.start += offset; + + if (amount < 0.25f) { + amount *= 4.0f; + + float x; + if (r.token_id == 0) { + x = r.fraction - 1.0f; + } else if (r.token_id == num_cells_ - 1) { + x = -r.fraction; + } else { + x = 2.0f * (fabs(r.fraction - 0.5f) - 0.5f); + } + const float slope = amount / (1.01f - amount); + const float y = max(x * slope + 1.0f, 0.0f); + quantized_value -= y * (quantized_value - raw_value); + } + + return quantized_value; +} + +} // namespace marbles \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/discrete_distribution_quantizer.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/discrete_distribution_quantizer.h new file mode 100644 index 00000000..bc1c16d4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/discrete_distribution_quantizer.h @@ -0,0 +1,75 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Quantize voltages by sampling from a discrete distribution. + +#ifndef MARBLES_RANDOM_DISCRETE_DISTRIBUTION_QUANTIZER_H_ +#define MARBLES_RANDOM_DISCRETE_DISTRIBUTION_QUANTIZER_H_ + +#include "stmlib/stmlib.h" + +#include "marbles/random/distributions.h" +#include "marbles/random/quantizer.h" + +namespace marbles { + +class DiscreteDistributionQuantizer { + public: + typedef DiscreteDistribution Distribution; + + struct Cell { + float center; + float width; + float weight; + + inline float scaled_width(float amount) { + float w = 8.0f * (weight - amount) + 0.5f; + CONSTRAIN(w, 0.0f, 1.0f); + return w * width; + } + }; + + DiscreteDistributionQuantizer() { } + ~DiscreteDistributionQuantizer() { } + + void Init(const Scale& scale); + + float Process(float value, float amount); + + private: + float base_interval_; + float base_interval_reciprocal_; + + int num_cells_; + Cell cells_[kMaxDegrees + 1]; + Distribution distribution_; + + DISALLOW_COPY_AND_ASSIGN(DiscreteDistributionQuantizer); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_DISCRETE_DISTRIBUTION_QUANTIZER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/distributions.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/distributions.h new file mode 100644 index 00000000..3ea8ced8 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/distributions.h @@ -0,0 +1,182 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Generates samples from various kinds of random distributions. + +#ifndef MARBLES_RANDOM_DISTRIBUTIONS_H_ +#define MARBLES_RANDOM_DISTRIBUTIONS_H_ + +#include "stmlib/stmlib.h" + +#include + +#include "stmlib/dsp/dsp.h" + +#include "marbles/resources.h" + +namespace marbles { + +const size_t kNumBiasValues = 5; +const size_t kNumRangeValues = 9; +const float kIcdfTableSize = 128.0f; + +// Generates samples from beta distribution, from uniformly distributed samples. +// For higher throughput, uses pre-computed tables of inverse cdfs. +inline float BetaDistributionSample(float uniform, float spread, float bias) { + // Tables are pre-computed only for bias <= 0.5. For values above 0.5, + // symmetry is used. + bool flip_result = bias > 0.5f; + if (flip_result) { + uniform = 1.0f - uniform; + bias = 1.0f - bias; + } + + bias *= (static_cast(kNumBiasValues) - 1.0f) * 2.0f; + spread *= (static_cast(kNumRangeValues) - 1.0f); + + MAKE_INTEGRAL_FRACTIONAL(bias); + MAKE_INTEGRAL_FRACTIONAL(spread); + + size_t cell = bias_integral * (kNumRangeValues + 1) + spread_integral; + + // Lower 5% and 95% percentiles use a different table with higher resolution. + size_t offset = 0; + if (uniform <= 0.05f) { + offset = kIcdfTableSize + 1; + uniform *= 20.0f; + } else if (uniform >= 0.95f) { + offset = 2 * (kIcdfTableSize + 1); + uniform = (uniform - 0.95f) * 20.0f; + } + + float x1y1 = stmlib::Interpolate( + distributions_table[cell] + offset, + uniform, + kIcdfTableSize); + float x2y1 = stmlib::Interpolate( + distributions_table[cell + 1] + offset, + uniform, + kIcdfTableSize); + float x1y2 = stmlib::Interpolate( + distributions_table[cell + kNumRangeValues + 1] + offset, + uniform, + kIcdfTableSize); + float x2y2 = stmlib::Interpolate( + distributions_table[cell + kNumRangeValues + 2] + offset, + uniform, + kIcdfTableSize); + + float y1 = x1y1 + (x2y1 - x1y1) * spread_fractional; + float y2 = x1y2 + (x2y2 - x1y2) * spread_fractional; + float y = y1 + (y2 - y1) * bias_fractional; + + if (flip_result) { + y = 1.0f - y; + } + return y; +} + +// Pre-computed beta(3, 3) with a fatter tail. +inline float FastBetaDistributionSample(float uniform) { + return stmlib::Interpolate(dist_icdf_4_3, uniform, kIcdfTableSize); +} + +// Draws samples from a discrete distribution. Used for the quantizer. +// Example: +// * 1 with probability 0.2 +// * 20 with probability 0.7 +// * 666 with probability 0.1 +// +// DiscreteDistribution d; +// d.Init(); +// d.AddToken(1, 0.2); +// d.AddToken(20, 0.7); +// d.AddToken(666, 0.1); +// d.NoMoreTokens(); +// Result r = d.Sample(u); +// cout << r.token_id; +// +// Weights do not have to add to 1.0f - the class handles normalization. +// +template +class DiscreteDistribution { + public: + DiscreteDistribution() { } + ~DiscreteDistribution() { } + + void Init() { + sum_ = 0.0f; + num_tokens_ = 1; + + cdf_[0] = 0.0f; + token_ids_[0] = 0; + } + + void AddToken(int token_id, float weight) { + if (weight <= 0.0f) { + return; + } + sum_ += weight; + token_ids_[num_tokens_] = token_id; + cdf_[num_tokens_] = sum_; + ++num_tokens_; + } + + void NoMoreTokens() { + token_ids_[num_tokens_] = token_ids_[num_tokens_ - 1]; + cdf_[num_tokens_] = sum_ + 1.0f; + } + + struct Result { + int token_id; + float fraction; + float start; + float width; + }; + + inline Result Sample(float u) const { + Result r; + u *= sum_; + int n = std::upper_bound(&cdf_[1], &cdf_[num_tokens_ + 1], u) - &cdf_[0]; + float norm = 1.0f / sum_; + r.token_id = token_ids_[n]; + r.width = (cdf_[n] - cdf_[n - 1]) * norm; + r.start = (cdf_[n - 1]) * norm; + r.fraction = (u - cdf_[n - 1]) / (cdf_[n] - cdf_[n - 1]); + return r; + } + + float sum_; + float cdf_[size + 2]; + int token_ids_[size + 2]; + int num_tokens_; + + DISALLOW_COPY_AND_ASSIGN(DiscreteDistribution); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_DISTRIBUTIONS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/lag_processor.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/lag_processor.cc new file mode 100644 index 00000000..12b412a4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/lag_processor.cc @@ -0,0 +1,88 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Lag processor for the STEPS control. + +#include "marbles/random/lag_processor.h" + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/units.h" + +#include "marbles/resources.h" + +namespace marbles { + +using namespace stmlib; + +void LagProcessor::Init() { + ramp_start_ = 0.0f; + ramp_value_ = 0.0f; + lp_state_ = 0.0f; + previous_phase_ = 0.0f; +} + +float LagProcessor::Process(float value, float smoothness, float phase) { + float frequency = phase - previous_phase_; + if (frequency < 0.0f) { + frequency += 1.0f; + } + previous_phase_ = phase; + + // The frequency of the portamento/glide LP filter follows an exponential + // scale, with a minimum frequency corresponding to half the clock pulse + // frequency (giving a roughly linear glide), and a maximum value 7 octaves + // above. + // + // When smoothness approaches 0, the response curve is tweaked to give + // immediate voltage changes, without any lag. + frequency *= 0.25f; + frequency *= SemitonesToRatio(84.0f * (1.0f - smoothness)); + if (frequency >= 1.0f) { + frequency = 1.0f; + } + if (smoothness <= 0.05f) { + frequency += 20.f * (0.05f - smoothness) * (1.0f - frequency); + } + + ONE_POLE(lp_state_, value, frequency); + + // The final output is a crossfade between a variable shape interpolation and + // the low-pass glide/lag. + float interp_amount = (smoothness - 0.6f) * 5.0f; + CONSTRAIN(interp_amount, 0.0f, 1.0f); + + float interp_linearity = (1.0f - smoothness) * 5.0f; + CONSTRAIN(interp_linearity, 0.0f, 1.0f); + float warped_phase = Interpolate(lut_raised_cosine, phase, 256.0f); + + float interp_phase = Crossfade(warped_phase, phase, interp_linearity); + float interp = Crossfade(ramp_start_, value, interp_phase); + ramp_value_ = interp; + + return Crossfade(lp_state_, interp, interp_amount); +} + +} // namespace marbles \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/lag_processor.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/lag_processor.h new file mode 100644 index 00000000..3cf14cc4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/lag_processor.h @@ -0,0 +1,61 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Lag processor for the STEPS control. + +#ifndef MARBLES_RANDOM_LAG_PROCESSOR_H_ +#define MARBLES_RANDOM_LAG_PROCESSOR_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace marbles { + +class LagProcessor { + public: + LagProcessor() { } + ~LagProcessor() { } + + void Init(); + inline void ResetRamp() { + ramp_start_ = ramp_value_; + } + + float Process(float value, float smoothness, float phase); + + private: + float ramp_start_; + float ramp_value_; + float lp_state_; + float previous_phase_; + + DISALLOW_COPY_AND_ASSIGN(LagProcessor); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_LAG_PROCESSOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/output_channel.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/output_channel.cc new file mode 100644 index 00000000..48f94f29 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/output_channel.cc @@ -0,0 +1,145 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Random generation channel. + +#include "marbles/random/output_channel.h" + +#include "marbles/random/distributions.h" +#include "marbles/random/random_sequence.h" + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/utils/random.h" + +namespace marbles { + +using namespace stmlib; + +const size_t kNumReacquisitions = 20; // 6.4 samples per millisecond + +void OutputChannel::Init() { + spread_ = 0.5f; + bias_ = 0.5f; + steps_ = 0.5f; + scale_index_ = 0; + + register_mode_ = false; + register_value_ = 0.0f; + register_transposition_ = 0.0f; + + previous_steps_ = 0.0f; + previous_phase_ = 0.0f; + reacquisition_counter_ = 0; + + previous_voltage_ = 0.0f; + voltage_ = 0.0f; + quantized_voltage_ = 0.0f; + + scale_offset_ = ScaleOffset(10.0f, -5.0f); + + lag_processor_.Init(); + + Scale scale; + scale.Init(); + for (int i = 0; i < 6; ++i) { + quantizer_[i].Init(scale); + } +} + +float OutputChannel::GenerateNewVoltage(RandomSequence* random_sequence) { + float u = random_sequence->NextValue(register_mode_, register_value_); + + if (register_mode_) { + return 10.0f * (u - 0.5f) + register_transposition_; + } else { + float degenerate_amount = 1.25f - spread_ * 25.0f; + float bernoulli_amount = spread_ * 25.0f - 23.75f; + + CONSTRAIN(degenerate_amount, 0.0f, 1.0f); + CONSTRAIN(bernoulli_amount, 0.0f, 1.0f); + + float value = BetaDistributionSample(u, spread_, bias_); + float bernoulli_value = u >= (1.0f - bias_) ? 0.999999f : 0.0f; + + value += degenerate_amount * (bias_ - value); + value += bernoulli_amount * (bernoulli_value - value); + return scale_offset_(value); + } +} + +void OutputChannel::Process( + RandomSequence* random_sequence, + const float* phase, + float* output, + size_t size, + size_t stride) { + + ParameterInterpolator steps_modulation( + &previous_steps_, steps_, size); + + // This is a horrible hack that wouldn't be here if all the sequencers + // and MIDI/CV interfaces in this world didn't have *horrible* slew on + // their CV output (I'm looking at you KORG). + // Without this hack, the shift register gets its value as soon as the + // rising edge is observed on the GATE input. Problem: the CV input is + // probably still slewing up, so we acquire the wrong value in the shift + // register. What to do then? Over the next 2ms, we'll just track the CV + // input until it reaches its final value - which means that Marbles + // output will be slewed too. Another option would have been to wait 2ms + // between the rising edge and the actual acquisition, but we don't want + // to penalize people who use tighter sequencers. + if (reacquisition_counter_) { + --reacquisition_counter_; + float u = random_sequence->RewriteValue(register_value_); + voltage_ = 10.0f * (u - 0.5f) + register_transposition_; + quantized_voltage_ = Quantize(voltage_, 2.0f * steps_ - 1.0f); + } + + while (size--) { + const float steps = steps_modulation.Next(); + if (*phase < previous_phase_) { + previous_voltage_ = voltage_; + voltage_ = GenerateNewVoltage(random_sequence); + lag_processor_.ResetRamp(); + quantized_voltage_ = Quantize(voltage_, 2.0f * steps - 1.0f); + if (register_mode_) { + reacquisition_counter_ = kNumReacquisitions; + } + } + + if (steps >= 0.5f) { + *output = quantized_voltage_; + } else { + const float smoothness = 1.0f - 2.0f * steps; + *output = lag_processor_.Process(voltage_, smoothness, *phase); + } + output += stride; + previous_phase_ = *phase++; + } +} + +} // namespace marbles \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/output_channel.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/output_channel.h new file mode 100644 index 00000000..7e7e3a58 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/output_channel.h @@ -0,0 +1,139 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Random generation channel. + +#ifndef MARBLES_RANDOM_OUTPUT_CHANNEL_H_ +#define MARBLES_RANDOM_OUTPUT_CHANNEL_H_ + +#include "stmlib/stmlib.h" + +#include "marbles/random/lag_processor.h" +#include "marbles/random/quantizer.h" + +namespace marbles { + +class RandomSequence; + +struct ScaleOffset { + ScaleOffset(float s, float o) { + scale = s; + offset = o; + } + + ScaleOffset() { scale = 1.0f; offset = 0.0f; } + + float scale; + float offset; + inline float operator()(float x) { return x * scale + offset; } +}; + +class OutputChannel { + public: + OutputChannel() { } + ~OutputChannel() { } + + void Init(); + + void LoadScale(int i, const Scale& scale) { + quantizer_[i].Init(scale); + } + + void Process( + RandomSequence* random_sequence, + const float* phase, + float* output, + size_t size, + size_t stride); + + inline void set_spread(float spread) { + spread_ = spread; + } + + inline void set_bias(float bias) { + bias_ = bias; + } + + inline void set_scale_index(int i) { + scale_index_ = i; + } + + inline void set_steps(float steps) { + steps_ = steps; + } + + inline void set_register_mode(bool register_mode) { + register_mode_ = register_mode; + } + + inline void set_register_value(float register_value) { + register_value_ = register_value; + } + + inline void set_register_transposition(float register_transposition) { + register_transposition_ = register_transposition; + } + + inline void set_scale_offset(const ScaleOffset& scale_offset) { + scale_offset_ = scale_offset; + } + + inline float Quantize(float voltage, float amount) { + return quantizer_[scale_index_].Process(voltage, amount, false); + } + + private: + float GenerateNewVoltage(RandomSequence* random_sequence); + + float spread_; + float bias_; + float steps_; + int scale_index_; + + bool register_mode_; + float register_value_; + float register_transposition_; + + float previous_steps_; + float previous_phase_; + uint32_t reacquisition_counter_; + + float previous_voltage_; + float voltage_; + float quantized_voltage_; + + ScaleOffset scale_offset_; + + LagProcessor lag_processor_; + + Quantizer quantizer_[6]; + + DISALLOW_COPY_AND_ASSIGN(OutputChannel); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_OUTPUT_CHANNEL_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/quantizer.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/quantizer.cc new file mode 100644 index 00000000..aa5fcb57 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/quantizer.cc @@ -0,0 +1,138 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Variable resolution quantizer. + +#include "marbles/random/quantizer.h" + +#include "stmlib/dsp/dsp.h" + +#include +#include + +namespace marbles { + +using namespace std; + +void Quantizer::Init(const Scale& scale) { + int n = scale.num_degrees; + + // We don't want garbage scale data here... + if (!n || n > kMaxDegrees || scale.base_interval == 0.0f) { + return; + } + + num_degrees_ = n; + base_interval_ = scale.base_interval; + base_interval_reciprocal_ = 1.0f / scale.base_interval; + + uint8_t second_largest_threshold = 0; + for (int i = 0; i < n; ++i) { + voltage_[i] = scale.degree[i].voltage; + if (scale.degree[i].weight != 255 && \ + scale.degree[i].weight >= second_largest_threshold) { + second_largest_threshold = scale.degree[i].weight; + } + } + + uint8_t thresholds_[kNumThresholds] = { + 0, 16, 32, 64, 128, 192, 255 + }; + + if (second_largest_threshold > 192) { + // Be more selective to only include the notes at rank 1 and 2 at + // the last but one position. + thresholds_[kNumThresholds - 2] = second_largest_threshold; + } + + for (int t = 0; t < kNumThresholds; ++t) { + uint16_t bitmask = 0; + uint8_t first = 0xff; + uint8_t last = 0; + for (int i = 0; i < n; ++i) { + if (scale.degree[i].weight >= thresholds_[t]) { + bitmask |= 1 << i; + if (first == 0xff) first = i; + last = i; + } + } + level_[t].bitmask = bitmask; + level_[t].first = first; + level_[t].last = last; + } + + level_quantizer_.Init(); + fill(&feedback_[0], &feedback_[kNumThresholds], 0.0f); +} + +float Quantizer::Process(float value, float amount, bool hysteresis) { + int level = level_quantizer_.Process(amount, kNumThresholds + 1); + float quantized_voltage = value; + + if (level > 0) { + level -= 1; + float raw_value = value; + if (hysteresis) { + value += feedback_[level]; + } + + const float note = value * base_interval_reciprocal_; + MAKE_INTEGRAL_FRACTIONAL(note); + if (value < 0.0f) { + note_integral -= 1; + note_fractional += 1.0f; + } + note_fractional *= base_interval_; + + // Search for the tightest upper/lower bound in the set of available + // voltages. stl::upper_bound / stl::lower_bound wouldn't work here + // because some entries are masked. + Level l = level_[level]; + float a = voltage_[l.last] - base_interval_; + float b = voltage_[l.first] + base_interval_; + + uint16_t bitmask = l.bitmask; + for (int i = 0; i < num_degrees_; ++i) { + if (bitmask & 1) { + float v = voltage_[i]; + if (note_fractional > v) { + a = v; + } else { + b = v; + break; + } + } + bitmask >>= 1; + } + + quantized_voltage = note_fractional < (a + b) * 0.5f ? a : b; + quantized_voltage += static_cast(note_integral) * base_interval_; + feedback_[level] = (quantized_voltage - raw_value) * 0.25f; + } + return quantized_voltage; +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/quantizer.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/quantizer.h new file mode 100644 index 00000000..d3b7a37c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/quantizer.h @@ -0,0 +1,122 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Variable resolution quantizer. + +#ifndef MARBLES_RANDOM_QUANTIZER_H_ +#define MARBLES_RANDOM_QUANTIZER_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/dsp/hysteresis_quantizer.h" + +#include "marbles/random/distributions.h" +#include "marbles/random/quantizer.h" + +namespace marbles { + +const int kMaxDegrees = 16; +const int kNumThresholds = 7; + +struct Degree { + float voltage; + uint8_t weight; +}; + +struct Scale { + float base_interval; + int num_degrees; + Degree degree[kMaxDegrees]; + + inline float cell_voltage(int i) const { + float transposition = static_cast(i / num_degrees) * base_interval; + return degree[i % num_degrees].voltage + transposition; + } + + void Init() { + base_interval = 1.0f; + num_degrees = 1; + degree[0].voltage = 0.0f; + degree[0].weight = 0.0f; + } + + void InitMajor() { + const uint8_t major_scale_weights[] = { + 255, 16, 128, 16, 192, 64, 8, 224, 16, 96, 32, 160, + }; + + base_interval = 1.0f; + num_degrees = 12; + for (size_t i = 0; i < 12; ++i) { + degree[i].voltage = static_cast(i) * 0.0833333333f; + degree[i].weight = major_scale_weights[i]; + } + } + + void InitTenth() { + const uint8_t major_scale_weights[] = { + 255, 255, 255, 255, 255, 255, 255, 255, 255, 25 + }; + + base_interval = 1.0f; + num_degrees = 10; + for (size_t i = 0; i < 10; ++i) { + degree[i].voltage = static_cast(i) * 0.1f; + degree[i].weight = major_scale_weights[i]; + } + } +}; + +class Quantizer { + public: + Quantizer() { } + ~Quantizer() { } + + void Init(const Scale& scale); + + float Process(float value, float amount, bool hysteresis); + + private: + struct Level { + uint16_t bitmask; // bitmask of active degrees. + uint8_t first; // index of the first active degree. + uint8_t last; // index of the last active degree. + }; + float voltage_[kMaxDegrees]; + + Level level_[kNumThresholds]; + float feedback_[kNumThresholds]; + + float base_interval_; + float base_interval_reciprocal_; + int num_degrees_; + stmlib::HysteresisQuantizer level_quantizer_; + + DISALLOW_COPY_AND_ASSIGN(Quantizer); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_QUANTIZER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_generator.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_generator.h new file mode 100644 index 00000000..a918ad78 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_generator.h @@ -0,0 +1,65 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Pseudo-random generator used as a fallback when we need more random values +// than available in the hardware RNG buffer. + +#ifndef MARBLES_RANDOM_RANDOM_GENERATOR_H_ +#define MARBLES_RANDOM_RANDOM_GENERATOR_H_ + +#include "stmlib/stmlib.h" + +#include "stmlib/utils/ring_buffer.h" + +namespace marbles { + +class RandomGenerator { + public: + RandomGenerator() { } + ~RandomGenerator() { } + + inline void Init(uint32_t seed) { + state_ = seed; + } + + inline void Mix(uint32_t word) { + // state_ ^= word; + } + + inline uint32_t GetWord() { + state_ = state_ * 1664525L + 1013904223L; + return state_; + } + + private: + uint32_t state_; + + DISALLOW_COPY_AND_ASSIGN(RandomGenerator); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_RANDOM_GENERATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_sequence.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_sequence.h new file mode 100644 index 00000000..be6b5214 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_sequence.h @@ -0,0 +1,228 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Sequence of random values. + +#ifndef MARBLES_RANDOM_RANDOM_SEQUENCE_H_ +#define MARBLES_RANDOM_RANDOM_SEQUENCE_H_ + +#include "stmlib/stmlib.h" + +#include "marbles/random/random_stream.h" + +#include + +namespace marbles { + +const int kDejaVuBufferSize = 16; +const int kHistoryBufferSize = 16; + +const float kMaxUint32 = 4294967296.0f; + +class RandomSequence { + public: + RandomSequence() { } + ~RandomSequence() { } + + inline void Init(RandomStream* random_stream) { + random_stream_ = random_stream; + for (int i = 0; i < kDejaVuBufferSize; ++i) { + loop_[i] = random_stream_->GetFloat(); + } + std::fill(&history_[0], &history_[kHistoryBufferSize], 0.0f); + + loop_write_head_ = 0; + length_ = 8; + step_ = 0; + + record_head_ = 0; + replay_head_ = -1; + replay_start_ = 0; + deja_vu_ = 0.0f; + replay_hash_ = replay_shift_ = 0; + + redo_read_ptr_ = &loop_[0]; + redo_write_ptr_ = NULL; + redo_write_history_ptr_ = NULL; + } + + inline void Record() { + replay_start_ = record_head_; + replay_head_ = -1; + } + + inline void ReplayPseudoRandom(uint32_t hash) { + replay_head_ = replay_start_; + replay_hash_ = hash; + replay_shift_ = 0; + } + + inline void ReplayShifted(uint32_t shift) { + replay_head_ = replay_start_; + replay_hash_ = 0; + replay_shift_ = shift; + } + + inline float GetReplayValue() const { + uint32_t h = (replay_head_ - 1 - replay_shift_ + \ + 2 * kHistoryBufferSize) % kHistoryBufferSize; + if (!replay_hash_) { + return history_[h]; + } else { + uint32_t word = static_cast(history_[h] * kMaxUint32); + word = (word ^ replay_hash_) * 1664525L + 1013904223L; + return static_cast(word) / kMaxUint32; + } + } + + inline float RewriteValue(float value) { + // RewriteValue(x) returns what the most recent call to NextValue would have + // returned if its second argument were x instead. This is used to "rewrite + // history" when the module acquires data from an external source (ASR, + // randomizer or quantizer mode). + if (replay_head_ >= 0) { + return GetReplayValue(); + } + + if (redo_write_ptr_) { + *redo_write_ptr_ = 1.0f + value; + } + float result = *redo_read_ptr_; + if (result >= 1.0f) { + result -= 1.0f; + } else { + result = 0.5f; + } + if (redo_write_history_ptr_) { + *redo_write_history_ptr_ = result; + } + return result; + } + + inline float NextValue(bool deterministic, float value) { + if (replay_head_ >= 0) { + replay_head_ = (replay_head_ + 1) % kHistoryBufferSize; + return GetReplayValue(); + } + + const float p_sqrt = 2.0f * deja_vu_ - 1.0f; + const float p = p_sqrt * p_sqrt; + + if (random_stream_->GetFloat() <= p && deja_vu_ <= 0.5f) { + // Generate a new value and put it at the end of the loop. + redo_write_ptr_ = &loop_[loop_write_head_]; + *redo_write_ptr_ = deterministic + ? 1.0f + value + : random_stream_->GetFloat(); + loop_write_head_ = (loop_write_head_ + 1) % kDejaVuBufferSize; + step_ = length_ - 1; + } else { + // Do not generate a new value, just replay the loop or jump randomly. + // through it. + redo_write_ptr_ = NULL; + if (random_stream_->GetFloat() <= p) { + step_ = static_cast( + random_stream_->GetFloat() * static_cast(length_)); + } else { + step_ = step_ + 1; + if (step_ >= length_) { + step_ = 0; + } + } + } + uint32_t i = loop_write_head_ + kDejaVuBufferSize - length_ + step_; + redo_read_ptr_ = &loop_[i % kDejaVuBufferSize]; + float result = *redo_read_ptr_; + if (result >= 1.0f) { + result -= 1.0f; + } else if (deterministic) { + // We ask for a deterministic value (shift register), but the loop + // contain random values. return 0.5f in this case! + result = 0.5f; + } + redo_write_history_ptr_ = &history_[record_head_]; + *redo_write_history_ptr_ = result; + record_head_ = (record_head_ + 1) % kHistoryBufferSize; + return result; + } + + inline void NextVector(float* destination, size_t size) { + float seed = NextValue(false, 0.0f); + uint32_t word = static_cast(seed * kMaxUint32); + while (size--) { + *destination++ = static_cast(word) / kMaxUint32; + word = word * 1664525L + 1013904223L; + } + } + + inline void set_deja_vu(float deja_vu) { + deja_vu_ = deja_vu; + } + + inline void set_length(int length) { + if (length < 1 || length > kDejaVuBufferSize) { + return; + } + length_ = length; + step_ = step_ % length; + } + + inline float deja_vu() const { + return deja_vu_; + } + + inline int length() const { + return length_; + } + + private: + RandomStream* random_stream_; + float loop_[kDejaVuBufferSize]; + float history_[kHistoryBufferSize]; + int loop_write_head_; + int length_; + int step_; + + // Allows to go back in the past and get the same results again from NextValue + // calls. Allows the 3 X channels to be locked to the same random loop. + int record_head_; + int replay_head_; + int replay_start_; + uint32_t replay_hash_; + uint32_t replay_shift_; + + float deja_vu_; + + float* redo_read_ptr_; + float* redo_write_ptr_; + float* redo_write_history_ptr_; + + DISALLOW_COPY_AND_ASSIGN(RandomSequence); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_RANDOM_SEQUENCE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_stream.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_stream.h new file mode 100644 index 00000000..74fc213f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/random_stream.h @@ -0,0 +1,82 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Stream of random values, filled from a hardware RNG, with a fallback +// mechanism. + +#ifndef MARBLES_RANDOM_RANDOM_STREAM_H_ +#define MARBLES_RANDOM_RANDOM_STREAM_H_ + +#include "stmlib/stmlib.h" + +#include "stmlib/utils/ring_buffer.h" + +#include "marbles/random/random_generator.h" + +namespace marbles { + +class RandomStream { + public: + RandomStream() { } + ~RandomStream() { } + + inline void Init(RandomGenerator* fallback_generator) { + fallback_generator_ = fallback_generator; + buffer_.Init(); + } + + inline void Write(uint32_t value) { + // buffer_.Swallow(1); + // buffer_.Overwrite(value); + if (buffer_.writable()) { + buffer_.Overwrite(value); + } + fallback_generator_->Mix(value); + } + + inline uint32_t GetWord() { + if (buffer_.readable()) { + return buffer_.ImmediateRead(); + } else { + return fallback_generator_->GetWord(); + } + } + + inline float GetFloat() { + uint32_t word = GetWord(); + return static_cast(word) / 4294967296.0f; + } + + private: + stmlib::RingBuffer buffer_; + RandomGenerator* fallback_generator_; + + DISALLOW_COPY_AND_ASSIGN(RandomStream); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_RANDOM_STREAM_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/t_generator.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/t_generator.cc new file mode 100644 index 00000000..62ea8dd5 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/t_generator.cc @@ -0,0 +1,414 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Generator for the T outputs. + +#include "marbles/random/t_generator.h" + +#include + +#include "stmlib/dsp/units.h" + +#include "marbles/resources.h" + +namespace marbles { + +using namespace std; +using namespace stmlib; + +/* static */ +DividerPattern TGenerator::divider_patterns[kNumDividerPatterns] = { + { { { 1, 1 }, { 1, 1 } }, 1 }, + { { { 1, 1 }, { 2, 1 } }, 1 }, + { { { 1, 2 }, { 1, 1 } }, 2 }, + { { { 1, 1 }, { 4, 1 } }, 1 }, + { { { 1, 2 }, { 2, 1 } }, 2 }, + { { { 1, 1 }, { 3, 2 } }, 2 }, + { { { 1, 4 }, { 4, 1 } }, 4 }, + { { { 1, 4 }, { 2, 1 } }, 4 }, + { { { 1, 2 }, { 3, 2 } }, 2 }, + { { { 1, 1 }, { 8, 1 } }, 1 }, + { { { 1, 1 }, { 3, 1 } }, 1 }, + { { { 1, 3 }, { 1, 1 } }, 3 }, + { { { 1, 1 }, { 5, 4 } }, 4 }, + { { { 1, 2 }, { 5, 4 } }, 4 }, + { { { 1, 1 }, { 6, 1 } }, 1 }, + { { { 1, 3 }, { 2, 1 } }, 3 }, + { { { 1, 1 }, { 16, 1 } }, 1 }, +}; + +/* static */ +DividerPattern TGenerator::fixed_divider_patterns[kNumDividerPatterns] = { + { { { 8, 1 }, { 1, 8 } }, 8 }, + { { { 6, 1 }, { 1, 6 } }, 6 }, + { { { 4, 1 }, { 1, 4 } }, 4 }, + { { { 3, 1 }, { 1, 3 } }, 3 }, + { { { 2, 1 }, { 1, 2 } }, 2 }, + { { { 3, 2 }, { 2, 3 } }, 6 }, + { { { 4, 3 }, { 3, 4 } }, 12 }, + { { { 5, 4 }, { 4, 5 } }, 20 }, + + { { { 1, 1 }, { 1, 1 } }, 1 }, + + { { { 4, 5 }, { 5, 4 } }, 20 }, + { { { 3, 4 }, { 4, 3 } }, 12 }, + { { { 2, 2 }, { 3, 2 } }, 6 }, + { { { 1, 2 }, { 2, 1 } }, 2 }, + { { { 1, 3 }, { 3, 1 } }, 3 }, + { { { 1, 4 }, { 4, 1 } }, 4 }, + { { { 1, 6 }, { 6, 1 } }, 6 }, + { { { 1, 8 }, { 8, 1 } }, 8 }, +}; + +/* static */ +Ratio TGenerator::input_divider_ratios[kNumInputDividerRatios] = { + { 1, 4 }, + { 1, 3 }, + { 1, 2 }, + { 2, 3 }, + { 1, 1 }, + { 3, 2 }, + { 2, 1 }, + { 3, 1 }, + { 4, 1 }, +}; + +/* static */ +uint8_t TGenerator::drum_patterns[kNumDrumPatterns][kDrumPatternSize] = { + { 1, 0, 0, 0, 2, 0, 0, 0 }, + { 0, 0, 1, 0, 2, 0, 0, 0 }, + + { 1, 0, 1, 0, 2, 0, 0, 0 }, + { 0, 0, 1, 0, 2, 0, 0, 2 }, + + { 1, 0, 1, 0, 2, 0, 1, 0 }, + { 0, 2, 1, 0, 2, 0, 0, 2 }, + + { 1, 0, 0, 0, 2, 0, 1, 0 }, + { 0, 2, 1, 0, 2, 0, 1, 2 }, + + { 1, 0, 0, 1, 2, 0, 0, 0 }, + { 0, 2, 1, 1, 2, 0, 1, 2 }, + + { 1, 0, 0, 1, 2, 0, 1, 0 }, + { 0, 2, 1, 1, 2, 2, 1, 2 }, + + { 1, 0, 0, 1, 2, 0, 1, 2 }, + { 0, 2, 0, 1, 2, 0, 1, 2 }, + + { 1, 0, 1, 1, 2, 0, 1, 2 }, + { 2, 0, 1, 2, 0, 1, 2, 0 }, + + { 1, 2, 1, 1, 2, 0, 1, 2 }, + { 2, 0, 1, 2, 0, 1, 2, 2 } +}; + +void TGenerator::Init(RandomStream* random_stream, float sr) { + one_hertz_ = 1.0f / static_cast(sr); + model_ = T_GENERATOR_MODEL_COMPLEMENTARY_BERNOULLI; + range_ = T_GENERATOR_RANGE_1X; + + rate_ = 0.0f; + bias_ = 0.5f; + jitter_ = 0.0f; + pulse_width_mean_ = 0.0f; + pulse_width_std_ = 0.0f; + + master_phase_ = 0.0f; + jitter_multiplier_ = 1.0f; + phase_difference_ = 0.0f; + previous_external_ramp_value_ = 0.0f; + + divider_pattern_length_ = 0; + fill(&streak_counter_[0], &streak_counter_[kMarkovHistorySize], 0); + fill(&markov_history_[0], &markov_history_[kMarkovHistorySize], 0); + markov_history_ptr_ = 0; + drum_pattern_step_ = 0; + drum_pattern_index_ = 0; + + sequence_.Init(random_stream); + ramp_divider_.Init(); + ramp_extractor_.Init(1000.0f / sr); + ramp_generator_.Init(); + for (size_t i = 0; i < kNumTChannels; ++i) { + slave_ramp_[i].Init(); + } + bias_quantizer_.Init(); + rate_quantizer_.Init(); + + use_external_clock_ = false; +} + +int TGenerator::GenerateComplementaryBernoulli(const RandomVector& x) { + int bitmask = 0; + for (size_t i = 0; i < kNumTChannels; ++i) { + if ((x.variables.u[i >> 1] > bias_) ^ (i & 1)) { + bitmask |= 1 << i; + } + } + return bitmask; +} + +int TGenerator::GenerateIndependentBernoulli(const RandomVector& x) { + int bitmask = 0; + for (size_t i = 0; i < kNumTChannels; ++i) { + if ((x.variables.u[i] > bias_) ^ (i & 1)) { + bitmask |= 1 << i; + } + } + return bitmask; +} + +int TGenerator::GenerateThreeStates(const RandomVector& x) { + int bitmask = 0; + float p_none = 0.75f - fabs(bias_ - 0.5f); + float threshold = p_none + (1.0f - p_none) * (0.25f + (bias_ * 0.5f)); + + for (size_t i = 0; i < kNumTChannels; ++i) { + float u = x.variables.u[i >> 1]; + if (u > p_none && ((u > threshold) ^ (i & 1))) { + bitmask |= 1 << i; + } + } + return bitmask; +} + +int TGenerator::GenerateDrums(const RandomVector& x) { + ++drum_pattern_step_; + if (drum_pattern_step_ >= kDrumPatternSize) { + drum_pattern_step_ = 0; + float u = x.variables.u[0] * 2.0f * fabs(bias_ - 0.5f); + drum_pattern_index_ = static_cast(kNumDrumPatterns * u); + if (bias_ <= 0.5f) { + drum_pattern_index_ -= drum_pattern_index_ % 2; + } + } + return drum_patterns[drum_pattern_index_][drum_pattern_step_]; +} + +int TGenerator::GenerateMarkov(const RandomVector& x) { + int bitmask = 0; + float b = 1.5f * bias_ - 0.5f; + markov_history_[markov_history_ptr_] = 0; + const int32_t p = markov_history_ptr_; + for (size_t i = 0; i < kNumTChannels; ++i) { + int32_t mask = 1 << i; + // 4 rules: + // * We favor repeating what we played 8 ticks ago. + // * We do not favor pulses appearing on both channels. + // * We favor sparse patterns (no consecutive hits). + // * We favor patterns in which one channel "echoes" what the other + // channel played 4 ticks before. + bool periodic = markov_history_[(p + 8) % kMarkovHistorySize] & mask; + bool simultaneous = markov_history_[(p + 8) % kMarkovHistorySize] & ~mask; + bool dense = markov_history_[(p + 1) % kMarkovHistorySize] & mask; + bool alternate = markov_history_[(p + 4) % kMarkovHistorySize] & ~mask; + + float logit = -1.5f; + logit += streak_counter_[i] > 24 ? 10.0f : 0.0f; + logit += 8.0f * fabs(b) * (periodic ? b : -b); + logit -= 2.0f * (simultaneous ? b : -b); + logit -= 1.0f * (dense ? b : 0.0f); + logit += 1.0f * (alternate ? b : 0.0f); + CONSTRAIN(logit, -10.0f, 10.0f); + float probability = lut_logit[static_cast(logit * 12.8f + 128.0f)]; + bool state = x.variables.u[i] < probability; + + if (sequence_.deja_vu() >= x.variables.p) { + state = markov_history_[(p + sequence_.length()) % kMarkovHistorySize] & mask; + } + if (state) { + bitmask |= mask; + streak_counter_[i] = 0; + } else { + ++streak_counter_[i]; + } + } + markov_history_[p] |= bitmask; + markov_history_ptr_ = (p + kMarkovHistorySize - 1) % kMarkovHistorySize; + return bitmask; +} + +void TGenerator::ScheduleOutputPulses(const RandomVector& x, int bitmask) { + for (size_t i = 0; i < kNumTChannels; ++i) { + slave_ramp_[i].Init( + bitmask & 1, + RandomPulseWidth(i, x.variables.pulse_width[i]), + 0.5f); + bitmask >>= 1; + } +} + +void TGenerator::ConfigureSlaveRamps(const RandomVector& x) { + switch (model_) { + // Generate a bitmask that will describe which outputs are active + // at this clock tick. Use this bitmask to actually schedule pulses on the + // outputs. + case T_GENERATOR_MODEL_COMPLEMENTARY_BERNOULLI: + ScheduleOutputPulses(x, GenerateComplementaryBernoulli(x)); + break; + + case T_GENERATOR_MODEL_INDEPENDENT_BERNOULLI: + ScheduleOutputPulses(x, GenerateIndependentBernoulli(x)); + break; + + case T_GENERATOR_MODEL_THREE_STATES: + ScheduleOutputPulses(x, GenerateThreeStates(x)); + break; + + case T_GENERATOR_MODEL_DRUMS: + ScheduleOutputPulses(x, GenerateDrums(x)); + break; + + case T_GENERATOR_MODEL_MARKOV: + ScheduleOutputPulses(x, GenerateMarkov(x)); + break; + + case T_GENERATOR_MODEL_CLUSTERS: + case T_GENERATOR_MODEL_DIVIDER: + --divider_pattern_length_; + if (divider_pattern_length_ <= 0) { + DividerPattern pattern; + if (model_ == T_GENERATOR_MODEL_DIVIDER) { + pattern = bias_quantizer_.Lookup( + fixed_divider_patterns, + bias_, + kNumDividerPatterns); + } else { + float strength = fabs(bias_ - 0.5f) * 2.0f; + float u = x.variables.u[0]; + u *= (u + strength * strength * (1.0f - u)); + u *= strength; + pattern = divider_patterns[static_cast( + u * kNumDividerPatterns)]; + if (bias_ < 0.5f) { + for (size_t i = 0; i < kNumTChannels / 2; ++i) { + swap(pattern.ratios[i], pattern.ratios[kNumTChannels - 1 - i]); + } + } + } + for (size_t i = 0; i < kNumTChannels; ++i) { + slave_ramp_[i].Init( + pattern.length, + pattern.ratios[i], + RandomPulseWidth(i, x.variables.pulse_width[i])); + } + divider_pattern_length_ = pattern.length; + } + break; + } +} + +void TGenerator::Process( + bool use_external_clock, + const GateFlags* external_clock, + Ramps ramps, + bool* gate, + size_t size) { + + float internal_frequency; + if (use_external_clock) { + if (!use_external_clock_) { + ramp_extractor_.Reset(); + } + + Ratio ratio = rate_quantizer_.Lookup( + input_divider_ratios, + 1.05f * rate_ / 96.0f + 0.5f, + kNumInputDividerRatios); + if (range_ == T_GENERATOR_RANGE_0_25X) { + ratio.q *= 4; + } else if (range_ == T_GENERATOR_RANGE_4X) { + ratio.p *= 4; + } + ratio.Simplify<2>(); + ramp_extractor_.Process(ratio, true, external_clock, ramps.external, size); + internal_frequency = 0.0f; + } else { + float rate = 2.0f; + if (range_ == T_GENERATOR_RANGE_4X) { + rate = 8.0f; + } else if (range_ == T_GENERATOR_RANGE_0_25X) { + rate = 0.5f; + } + internal_frequency = rate * one_hertz_ * SemitonesToRatio(rate_); + } + + use_external_clock_ = use_external_clock; + + while (size--) { + float frequency = use_external_clock + ? *ramps.external - previous_external_ramp_value_ + : internal_frequency; + frequency += frequency < 0.0f ? 1.0f : 0.0f; + + float jittery_frequency = frequency * jitter_multiplier_; + master_phase_ += jittery_frequency; + phase_difference_ += frequency - jittery_frequency; + + if (master_phase_ > 1.0f) { + master_phase_ -= 1.0f; + + RandomVector random_vector; + sequence_.NextVector( + random_vector.x, + sizeof(random_vector.x) / sizeof(float)); + + float jitter_amount = jitter_ * jitter_ * jitter_ * jitter_ * 36.0f; + float x = FastBetaDistributionSample(random_vector.variables.jitter); + float multiplier = SemitonesToRatio((x * 2.0f - 1.0f) * jitter_amount); + + // This step is crucial in making sure that the jittered clock does not + // deviate too much from the master clock. The larger the phase difference + // difference between the two, the more likely the jittery clock will + // speed up or down to catch up with the straight clock. + multiplier *= phase_difference_ > 0.0f + ? 1.0f + phase_difference_ + : 1.0f / (1.0f - phase_difference_); + + jitter_multiplier_ = multiplier; + ConfigureSlaveRamps(random_vector); + } + + if (internal_frequency) { + *ramps.external = master_phase_; + } + + previous_external_ramp_value_ = *ramps.external; + ramps.external++; + *ramps.master++ = master_phase_; + for (size_t j = 0; j < kNumTChannels; ++j) { + slave_ramp_[j].Process( + frequency * jitter_multiplier_, + ramps.slave[j], + gate); + ramps.slave[j]++; + gate++; + } + } +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/t_generator.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/t_generator.h new file mode 100644 index 00000000..6e345636 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/t_generator.h @@ -0,0 +1,206 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Generator for the T outputs. + +#ifndef MARBLES_RANDOM_T_GENERATOR_H_ +#define MARBLES_RANDOM_T_GENERATOR_H_ + +#include "stmlib/stmlib.h" + +#include "marbles/ramp/ramp_divider.h" +#include "marbles/ramp/ramp_extractor.h" +#include "marbles/ramp/ramp_generator.h" +#include "marbles/ramp/slave_ramp.h" +#include "marbles/random/distributions.h" +#include "marbles/random/random_sequence.h" +#include "stmlib/dsp/hysteresis_quantizer.h" + +namespace marbles { + +enum TGeneratorModel { + T_GENERATOR_MODEL_COMPLEMENTARY_BERNOULLI, + T_GENERATOR_MODEL_CLUSTERS, + T_GENERATOR_MODEL_DRUMS, + + T_GENERATOR_MODEL_INDEPENDENT_BERNOULLI, + T_GENERATOR_MODEL_DIVIDER, + T_GENERATOR_MODEL_THREE_STATES, + + T_GENERATOR_MODEL_MARKOV, +}; + +enum TGeneratorRange { + T_GENERATOR_RANGE_0_25X, + T_GENERATOR_RANGE_1X, + T_GENERATOR_RANGE_4X, +}; + +const size_t kNumTChannels = 2; +const size_t kMarkovHistorySize = 16; +const size_t kNumDrumPatterns = 18; +const size_t kDrumPatternSize = 8; + +struct DividerPattern { + Ratio ratios[kNumTChannels]; + int32_t length; +}; + +struct Ramps { + float* external; + float* master; + float* slave[kNumTChannels]; +}; + +const size_t kNumDividerPatterns = 17; +const size_t kNumInputDividerRatios = 9; + +class TGenerator { + public: + TGenerator() { } + ~TGenerator() { } + + void Init(RandomStream* random_stream, float sr); + void Process( + bool use_external_clock, + const stmlib::GateFlags* external_clock, + Ramps ramps, + bool* gate, + size_t size); + + inline void set_model(TGeneratorModel model) { + model_ = model; + } + + inline void set_range(TGeneratorRange range) { + range_ = range; + } + + inline void set_rate(float rate) { + rate_ = rate; + } + + inline void set_bias(float bias) { + bias_ = bias; + } + + inline void set_jitter(float jitter) { + jitter_ = jitter; + } + + inline void set_deja_vu(float deja_vu) { + sequence_.set_deja_vu(deja_vu); + } + + inline void set_length(int length) { + sequence_.set_length(length); + } + + inline void set_pulse_width_mean(float pulse_width_mean) { + pulse_width_mean_ = pulse_width_mean; + } + + inline void set_pulse_width_std(float pulse_width_std) { + pulse_width_std_ = pulse_width_std; + } + + private: + union RandomVector { + struct { + float pulse_width[kNumTChannels]; + float u[kNumTChannels]; + float p; + float jitter; + } variables; + float x[2 * kNumTChannels + 2]; + }; + + void ConfigureSlaveRamps(const RandomVector& v); + int GenerateComplementaryBernoulli(const RandomVector& v); + int GenerateIndependentBernoulli(const RandomVector& v); + int GenerateThreeStates(const RandomVector& v); + int GenerateDrums(const RandomVector& v); + int GenerateMarkov(const RandomVector& v); + void ScheduleOutputPulses(const RandomVector& v, int bitmask); + + float RandomPulseWidth(int i, float u) { + if (pulse_width_std_ == 0.0f) { + return 0.05f + 0.9f * pulse_width_mean_; + } else { + return 0.05f + 0.9f * BetaDistributionSample( + u, + pulse_width_std_, + pulse_width_mean_); // Jon Brooks + // i & 1 ? 1.0f - pulse_width_mean_); + } + } + + float one_hertz_; + + TGeneratorModel model_; + TGeneratorRange range_; + + float rate_; + float bias_; + float jitter_; + float pulse_width_mean_; + float pulse_width_std_; + + float master_phase_; + float jitter_multiplier_; + float phase_difference_; + float previous_external_ramp_value_; + + bool use_external_clock_; + + int32_t divider_pattern_length_; + int32_t streak_counter_[kMarkovHistorySize]; + int32_t markov_history_[kMarkovHistorySize]; + int32_t markov_history_ptr_; + size_t drum_pattern_step_; + size_t drum_pattern_index_; + + RandomSequence sequence_; + RampDivider ramp_divider_; + RampExtractor ramp_extractor_; + RampGenerator ramp_generator_; + + SlaveRamp slave_ramp_[kNumTChannels]; + + stmlib::HysteresisQuantizer bias_quantizer_; + stmlib::HysteresisQuantizer rate_quantizer_; + + static DividerPattern divider_patterns[kNumDividerPatterns]; + static DividerPattern fixed_divider_patterns[kNumDividerPatterns]; + static Ratio input_divider_ratios[kNumInputDividerRatios]; + static uint8_t drum_patterns[kNumDrumPatterns][kDrumPatternSize]; + + DISALLOW_COPY_AND_ASSIGN(TGenerator); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_T_GENERATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/x_y_generator.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/x_y_generator.cc new file mode 100644 index 00000000..b748d9ae --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/x_y_generator.cc @@ -0,0 +1,184 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Generator for the X/Y outputs. + +#include "marbles/random/x_y_generator.h" + +#include + +#include "stmlib/dsp/dsp.h" + +namespace marbles { + +using namespace std; +using namespace stmlib; + +void XYGenerator::Init(RandomStream* random_stream, float sr) { + for (size_t i = 0; i < kNumChannels; ++i) { + random_sequence_[i].Init(random_stream); + output_channel_[i].Init(); + } + ramp_extractor_.Init(8000.0f / sr); + ramp_divider_.Init(); + external_clock_stabilization_counter_ = 16; +} + +const uint32_t hashes[kNumXChannels] = { + 0, 0xbeca55e5, 0xf0cacc1a +}; + +void XYGenerator::Process( + ClockSource clock_source, + const GroupSettings& x_settings, + const GroupSettings& y_settings, + const GateFlags* external_clock, + const Ramps& ramps, + float* output, + size_t size) { + float* channel_ramp[kNumChannels]; + + if (clock_source != CLOCK_SOURCE_EXTERNAL) { + // For a couple of upcoming blocks, we'll still be receiving garbage from + // the normalization pin that we need to ignore. + external_clock_stabilization_counter_ = 16; + } else { + if (external_clock_stabilization_counter_) { + --external_clock_stabilization_counter_; + if (external_clock_stabilization_counter_ == 0) { + ramp_extractor_.Reset(); + } + } + } + + switch (clock_source) { + case CLOCK_SOURCE_EXTERNAL: + { + Ratio r = { 1, 1 }; + ramp_extractor_.Process(r, false, external_clock, ramps.slave[0], size); + if (external_clock_stabilization_counter_) { + fill(&ramps.slave[0][0], &ramps.slave[0][size], 0.0f); + } + } + channel_ramp[0] = ramps.slave[0]; + channel_ramp[1] = ramps.slave[0]; + channel_ramp[2] = ramps.slave[0]; + break; + + case CLOCK_SOURCE_INTERNAL_T1: + channel_ramp[0] = ramps.slave[0]; + channel_ramp[1] = ramps.slave[0]; + channel_ramp[2] = ramps.slave[0]; + break; + + case CLOCK_SOURCE_INTERNAL_T2: + channel_ramp[0] = ramps.master; + channel_ramp[1] = ramps.master; + channel_ramp[2] = ramps.master; + break; + + case CLOCK_SOURCE_INTERNAL_T3: + channel_ramp[0] = ramps.slave[1]; + channel_ramp[1] = ramps.slave[1]; + channel_ramp[2] = ramps.slave[1]; + break; + + default: + channel_ramp[0] = ramps.slave[0]; + channel_ramp[1] = ramps.master; + channel_ramp[2] = ramps.slave[1]; + break; + } + + ramp_divider_.Process(y_settings.ratio, channel_ramp[1], ramps.external, size); + channel_ramp[kNumChannels - 1] = ramps.external; + + for (size_t i = 0; i < kNumChannels; ++i) { + OutputChannel& channel = output_channel_[i]; + const GroupSettings& settings = i < kNumXChannels ? x_settings : y_settings; + + switch (settings.voltage_range) { + case VOLTAGE_RANGE_NARROW: + channel.set_scale_offset(ScaleOffset(2.0f, 0.0f)); + break; + + case VOLTAGE_RANGE_POSITIVE: + channel.set_scale_offset(ScaleOffset(5.0f, 0.0f)); + break; + + case VOLTAGE_RANGE_FULL: + channel.set_scale_offset(ScaleOffset(10.0f, -5.0f)); + break; + + default: + break; + } + + float amount = 1.0f; + if (settings.control_mode == CONTROL_MODE_BUMP) { + amount = i == kNumXChannels / 2 ? 1.0f : -1.0f; + } else if (settings.control_mode == CONTROL_MODE_TILT) { + amount = 2.0f * static_cast(i) / float(kNumXChannels - 1) - 1.0f; + } + + channel.set_spread(0.5f + (settings.spread - 0.5f) * amount); + channel.set_bias(0.5f + (settings.bias - 0.5f) * amount); + channel.set_steps(0.5f + (settings.steps - 0.5f) * \ + (settings.register_mode ? 1.0f : amount)); + channel.set_scale_index(settings.scale_index); + channel.set_register_mode(settings.register_mode); + channel.set_register_value(settings.register_value); + channel.set_register_transposition( + 4.0f * settings.spread * (settings.bias - 0.5f) * amount); + + RandomSequence* sequence = &random_sequence_[i]; + sequence->Record(); + sequence->set_length(settings.length); + sequence->set_deja_vu(settings.deja_vu); + + // When all channels follow the same clock, the deja-vu random looping will + // follow the same pattern and the constant-mode input will be shifted! + if (clock_source != CLOCK_SOURCE_INTERNAL_T1_T2_T3 + && i > 0 && i < kNumXChannels) { + sequence = &random_sequence_[0]; + if (settings.register_mode) { + if (settings.control_mode == CONTROL_MODE_IDENTICAL) { + sequence->ReplayShifted(i); + } else if (settings.control_mode == CONTROL_MODE_BUMP) { + sequence->ReplayShifted(i == 2 ? 1 : 0); + } else { + sequence->ReplayShifted(0); + } + } else { + sequence->ReplayPseudoRandom(hashes[i]); + } + } + + channel.Process(sequence, channel_ramp[i], &output[i], size, kNumChannels); + } +} + +} // namespace marbles \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/x_y_generator.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/x_y_generator.h new file mode 100644 index 00000000..ba7cd63a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/random/x_y_generator.h @@ -0,0 +1,123 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Generator for the X/Y outputs. + +#ifndef MARBLES_RANDOM_X_Y_GENERATOR_H_ +#define MARBLES_RANDOM_X_Y_GENERATOR_H_ + +#include "stmlib/stmlib.h" + +#include "marbles/ramp/ramp_divider.h" +#include "marbles/ramp/ramp_extractor.h" +#include "marbles/random/output_channel.h" +#include "marbles/random/random_sequence.h" +#include "marbles/random/t_generator.h" + +namespace marbles { + +enum VoltageRange { + VOLTAGE_RANGE_NARROW, // +2V + VOLTAGE_RANGE_POSITIVE, // +5V + VOLTAGE_RANGE_FULL // +/- 5V +}; + +enum ClockSource { + CLOCK_SOURCE_INTERNAL_T1_T2_T3, + CLOCK_SOURCE_INTERNAL_T1, + CLOCK_SOURCE_INTERNAL_T2, + CLOCK_SOURCE_INTERNAL_T3, + CLOCK_SOURCE_EXTERNAL +}; + +enum ControlMode { + CONTROL_MODE_IDENTICAL, + CONTROL_MODE_BUMP, + CONTROL_MODE_TILT +}; + +enum OutputGroup { + OUTPUT_GROUP_X, + OUTPUT_GROUP_Y, + OUTPUT_GROUP_LAST +}; + +const size_t kNumXChannels = 3; +const size_t kNumYChannels = 1; +const size_t kNumChannels = kNumXChannels + kNumYChannels; + +struct GroupSettings { + ControlMode control_mode; + VoltageRange voltage_range; + bool register_mode; + float register_value; + float spread; + float bias; + float steps; + float deja_vu; + int scale_index; + int length; + Ratio ratio; +}; + +class XYGenerator { + public: + XYGenerator() { } + ~XYGenerator() { } + + void Init(RandomStream* random_stream, float sr); + void Process( + ClockSource clock_source, + const GroupSettings& x_settings, + const GroupSettings& y_settings, + const stmlib::GateFlags* external_clock, + const Ramps& ramps, + float* output, + size_t size); + + void LoadScale(int channel, int scale_index, const Scale& scale) { + output_channel_[channel].LoadScale(scale_index, scale); + } + void LoadScale(int scale_index, const Scale& scale) { + for (size_t i = 0; i < kNumXChannels; ++i) { + output_channel_[i].LoadScale(scale_index, scale); + } + } + + private: + RandomSequence random_sequence_[kNumChannels]; + OutputChannel output_channel_[kNumChannels]; + RampExtractor ramp_extractor_; + RampDivider ramp_divider_; + + int external_clock_stabilization_counter_; + + DISALLOW_COPY_AND_ASSIGN(XYGenerator); +}; + +} // namespace marbles + +#endif // MARBLES_RANDOM_X_Y_GENERATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources.cc new file mode 100644 index 00000000..7bb05817 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources.cc @@ -0,0 +1,4767 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources + + +#include "marbles/resources.h" + +namespace marbles { + +const float lut_raised_cosine[] = { + 0.000000000e+00, 3.764908043e-05, 1.505906519e-04, 3.388077058e-04, + 6.022718974e-04, 9.409435499e-04, 1.354771661e-03, 1.843693909e-03, + 2.407636664e-03, 3.046514999e-03, 3.760232701e-03, 4.548682286e-03, + 5.411745018e-03, 6.349290921e-03, 7.361178806e-03, 8.447256284e-03, + 9.607359798e-03, 1.084131464e-02, 1.214893498e-02, 1.353002390e-02, + 1.498437340e-02, 1.651176448e-02, 1.811196710e-02, 1.978474029e-02, + 2.152983213e-02, 2.334697982e-02, 2.523590970e-02, 2.719633731e-02, + 2.922796741e-02, 3.133049404e-02, 3.350360058e-02, 3.574695976e-02, + 3.806023374e-02, 4.044307415e-02, 4.289512215e-02, 4.541600845e-02, + 4.800535344e-02, 5.066276715e-02, 5.338784940e-02, 5.618018980e-02, + 5.903936783e-02, 6.196495290e-02, 6.495650445e-02, 6.801357194e-02, + 7.113569500e-02, 7.432240345e-02, 7.757321738e-02, 8.088764722e-02, + 8.426519385e-02, 8.770534861e-02, 9.120759342e-02, 9.477140087e-02, + 9.839623426e-02, 1.020815477e-01, 1.058267862e-01, 1.096313857e-01, + 1.134947733e-01, 1.174163672e-01, 1.213955767e-01, 1.254318027e-01, + 1.295244373e-01, 1.336728642e-01, 1.378764585e-01, 1.421345874e-01, + 1.464466094e-01, 1.508118753e-01, 1.552297276e-01, 1.596995011e-01, + 1.642205226e-01, 1.687921112e-01, 1.734135785e-01, 1.780842286e-01, + 1.828033579e-01, 1.875702559e-01, 1.923842047e-01, 1.972444793e-01, + 2.021503478e-01, 2.071010713e-01, 2.120959043e-01, 2.171340946e-01, + 2.222148835e-01, 2.273375058e-01, 2.325011901e-01, 2.377051587e-01, + 2.429486279e-01, 2.482308081e-01, 2.535509039e-01, 2.589081140e-01, + 2.643016316e-01, 2.697306445e-01, 2.751943352e-01, 2.806918807e-01, + 2.862224533e-01, 2.917852200e-01, 2.973793430e-01, 3.030039800e-01, + 3.086582838e-01, 3.143414030e-01, 3.200524817e-01, 3.257906599e-01, + 3.315550733e-01, 3.373448539e-01, 3.431591298e-01, 3.489970253e-01, + 3.548576614e-01, 3.607401553e-01, 3.666436213e-01, 3.725671702e-01, + 3.785099100e-01, 3.844709459e-01, 3.904493799e-01, 3.964443119e-01, + 4.024548390e-01, 4.084800560e-01, 4.145190556e-01, 4.205709283e-01, + 4.266347628e-01, 4.327096457e-01, 4.387946624e-01, 4.448888964e-01, + 4.509914298e-01, 4.571013438e-01, 4.632177182e-01, 4.693396318e-01, + 4.754661628e-01, 4.815963885e-01, 4.877293857e-01, 4.938642309e-01, + 5.000000000e-01, 5.061357691e-01, 5.122706143e-01, 5.184036115e-01, + 5.245338372e-01, 5.306603682e-01, 5.367822818e-01, 5.428986562e-01, + 5.490085702e-01, 5.551111036e-01, 5.612053376e-01, 5.672903543e-01, + 5.733652372e-01, 5.794290717e-01, 5.854809444e-01, 5.915199440e-01, + 5.975451610e-01, 6.035556881e-01, 6.095506201e-01, 6.155290541e-01, + 6.214900900e-01, 6.274328298e-01, 6.333563787e-01, 6.392598447e-01, + 6.451423386e-01, 6.510029747e-01, 6.568408702e-01, 6.626551461e-01, + 6.684449267e-01, 6.742093401e-01, 6.799475183e-01, 6.856585970e-01, + 6.913417162e-01, 6.969960200e-01, 7.026206570e-01, 7.082147800e-01, + 7.137775467e-01, 7.193081193e-01, 7.248056648e-01, 7.302693555e-01, + 7.356983684e-01, 7.410918860e-01, 7.464490961e-01, 7.517691919e-01, + 7.570513721e-01, 7.622948413e-01, 7.674988099e-01, 7.726624942e-01, + 7.777851165e-01, 7.828659054e-01, 7.879040957e-01, 7.928989287e-01, + 7.978496522e-01, 8.027555207e-01, 8.076157953e-01, 8.124297441e-01, + 8.171966421e-01, 8.219157714e-01, 8.265864215e-01, 8.312078888e-01, + 8.357794774e-01, 8.403004989e-01, 8.447702724e-01, 8.491881247e-01, + 8.535533906e-01, 8.578654126e-01, 8.621235415e-01, 8.663271358e-01, + 8.704755627e-01, 8.745681973e-01, 8.786044233e-01, 8.825836328e-01, + 8.865052267e-01, 8.903686143e-01, 8.941732138e-01, 8.979184523e-01, + 9.016037657e-01, 9.052285991e-01, 9.087924066e-01, 9.122946514e-01, + 9.157348062e-01, 9.191123528e-01, 9.224267826e-01, 9.256775966e-01, + 9.288643050e-01, 9.319864281e-01, 9.350434956e-01, 9.380350471e-01, + 9.409606322e-01, 9.438198102e-01, 9.466121506e-01, 9.493372328e-01, + 9.519946466e-01, 9.545839915e-01, 9.571048779e-01, 9.595569258e-01, + 9.619397663e-01, 9.642530402e-01, 9.664963994e-01, 9.686695060e-01, + 9.707720326e-01, 9.728036627e-01, 9.747640903e-01, 9.766530202e-01, + 9.784701679e-01, 9.802152597e-01, 9.818880329e-01, 9.834882355e-01, + 9.850156266e-01, 9.864699761e-01, 9.878510650e-01, 9.891586854e-01, + 9.903926402e-01, 9.915527437e-01, 9.926388212e-01, 9.936507091e-01, + 9.945882550e-01, 9.954513177e-01, 9.962397673e-01, 9.969534850e-01, + 9.975923633e-01, 9.981563061e-01, 9.986452283e-01, 9.990590565e-01, + 9.993977281e-01, 9.996611923e-01, 9.998494093e-01, 9.999623509e-01, + 1.000000000e+00, +}; +const float lut_sine[] = { + 0.000000000e+00, 2.454122852e-02, 4.906767433e-02, 7.356456360e-02, + 9.801714033e-02, 1.224106752e-01, 1.467304745e-01, 1.709618888e-01, + 1.950903220e-01, 2.191012402e-01, 2.429801799e-01, 2.667127575e-01, + 2.902846773e-01, 3.136817404e-01, 3.368898534e-01, 3.598950365e-01, + 3.826834324e-01, 4.052413140e-01, 4.275550934e-01, 4.496113297e-01, + 4.713967368e-01, 4.928981922e-01, 5.141027442e-01, 5.349976199e-01, + 5.555702330e-01, 5.758081914e-01, 5.956993045e-01, 6.152315906e-01, + 6.343932842e-01, 6.531728430e-01, 6.715589548e-01, 6.895405447e-01, + 7.071067812e-01, 7.242470830e-01, 7.409511254e-01, 7.572088465e-01, + 7.730104534e-01, 7.883464276e-01, 8.032075315e-01, 8.175848132e-01, + 8.314696123e-01, 8.448535652e-01, 8.577286100e-01, 8.700869911e-01, + 8.819212643e-01, 8.932243012e-01, 9.039892931e-01, 9.142097557e-01, + 9.238795325e-01, 9.329927988e-01, 9.415440652e-01, 9.495281806e-01, + 9.569403357e-01, 9.637760658e-01, 9.700312532e-01, 9.757021300e-01, + 9.807852804e-01, 9.852776424e-01, 9.891765100e-01, 9.924795346e-01, + 9.951847267e-01, 9.972904567e-01, 9.987954562e-01, 9.996988187e-01, + 1.000000000e+00, 9.996988187e-01, 9.987954562e-01, 9.972904567e-01, + 9.951847267e-01, 9.924795346e-01, 9.891765100e-01, 9.852776424e-01, + 9.807852804e-01, 9.757021300e-01, 9.700312532e-01, 9.637760658e-01, + 9.569403357e-01, 9.495281806e-01, 9.415440652e-01, 9.329927988e-01, + 9.238795325e-01, 9.142097557e-01, 9.039892931e-01, 8.932243012e-01, + 8.819212643e-01, 8.700869911e-01, 8.577286100e-01, 8.448535652e-01, + 8.314696123e-01, 8.175848132e-01, 8.032075315e-01, 7.883464276e-01, + 7.730104534e-01, 7.572088465e-01, 7.409511254e-01, 7.242470830e-01, + 7.071067812e-01, 6.895405447e-01, 6.715589548e-01, 6.531728430e-01, + 6.343932842e-01, 6.152315906e-01, 5.956993045e-01, 5.758081914e-01, + 5.555702330e-01, 5.349976199e-01, 5.141027442e-01, 4.928981922e-01, + 4.713967368e-01, 4.496113297e-01, 4.275550934e-01, 4.052413140e-01, + 3.826834324e-01, 3.598950365e-01, 3.368898534e-01, 3.136817404e-01, + 2.902846773e-01, 2.667127575e-01, 2.429801799e-01, 2.191012402e-01, + 1.950903220e-01, 1.709618888e-01, 1.467304745e-01, 1.224106752e-01, + 9.801714033e-02, 7.356456360e-02, 4.906767433e-02, 2.454122852e-02, + 1.224646799e-16, -2.454122852e-02, -4.906767433e-02, -7.356456360e-02, + -9.801714033e-02, -1.224106752e-01, -1.467304745e-01, -1.709618888e-01, + -1.950903220e-01, -2.191012402e-01, -2.429801799e-01, -2.667127575e-01, + -2.902846773e-01, -3.136817404e-01, -3.368898534e-01, -3.598950365e-01, + -3.826834324e-01, -4.052413140e-01, -4.275550934e-01, -4.496113297e-01, + -4.713967368e-01, -4.928981922e-01, -5.141027442e-01, -5.349976199e-01, + -5.555702330e-01, -5.758081914e-01, -5.956993045e-01, -6.152315906e-01, + -6.343932842e-01, -6.531728430e-01, -6.715589548e-01, -6.895405447e-01, + -7.071067812e-01, -7.242470830e-01, -7.409511254e-01, -7.572088465e-01, + -7.730104534e-01, -7.883464276e-01, -8.032075315e-01, -8.175848132e-01, + -8.314696123e-01, -8.448535652e-01, -8.577286100e-01, -8.700869911e-01, + -8.819212643e-01, -8.932243012e-01, -9.039892931e-01, -9.142097557e-01, + -9.238795325e-01, -9.329927988e-01, -9.415440652e-01, -9.495281806e-01, + -9.569403357e-01, -9.637760658e-01, -9.700312532e-01, -9.757021300e-01, + -9.807852804e-01, -9.852776424e-01, -9.891765100e-01, -9.924795346e-01, + -9.951847267e-01, -9.972904567e-01, -9.987954562e-01, -9.996988187e-01, + -1.000000000e+00, -9.996988187e-01, -9.987954562e-01, -9.972904567e-01, + -9.951847267e-01, -9.924795346e-01, -9.891765100e-01, -9.852776424e-01, + -9.807852804e-01, -9.757021300e-01, -9.700312532e-01, -9.637760658e-01, + -9.569403357e-01, -9.495281806e-01, -9.415440652e-01, -9.329927988e-01, + -9.238795325e-01, -9.142097557e-01, -9.039892931e-01, -8.932243012e-01, + -8.819212643e-01, -8.700869911e-01, -8.577286100e-01, -8.448535652e-01, + -8.314696123e-01, -8.175848132e-01, -8.032075315e-01, -7.883464276e-01, + -7.730104534e-01, -7.572088465e-01, -7.409511254e-01, -7.242470830e-01, + -7.071067812e-01, -6.895405447e-01, -6.715589548e-01, -6.531728430e-01, + -6.343932842e-01, -6.152315906e-01, -5.956993045e-01, -5.758081914e-01, + -5.555702330e-01, -5.349976199e-01, -5.141027442e-01, -4.928981922e-01, + -4.713967368e-01, -4.496113297e-01, -4.275550934e-01, -4.052413140e-01, + -3.826834324e-01, -3.598950365e-01, -3.368898534e-01, -3.136817404e-01, + -2.902846773e-01, -2.667127575e-01, -2.429801799e-01, -2.191012402e-01, + -1.950903220e-01, -1.709618888e-01, -1.467304745e-01, -1.224106752e-01, + -9.801714033e-02, -7.356456360e-02, -4.906767433e-02, -2.454122852e-02, + -2.449293598e-16, +}; +const float lut_logit[] = { + 9.756097561e-04, 1.029841827e-03, 1.087085263e-03, 1.147506902e-03, + 1.211282784e-03, 1.278598651e-03, 1.349650476e-03, 1.424645024e-03, + 1.503800438e-03, 1.587346853e-03, 1.675527056e-03, 1.768597162e-03, + 1.866827345e-03, 1.970502590e-03, 2.079923497e-03, 2.195407119e-03, + 2.317287851e-03, 2.445918356e-03, 2.581670544e-03, 2.724936605e-03, + 2.876130082e-03, 3.035687013e-03, 3.204067123e-03, 3.381755074e-03, + 3.569261780e-03, 3.767125791e-03, 3.975914737e-03, 4.196226847e-03, + 4.428692539e-03, 4.673976092e-03, 4.932777388e-03, 5.205833741e-03, + 5.493921811e-03, 5.797859605e-03, 6.118508566e-03, 6.456775757e-03, + 6.813616142e-03, 7.190034962e-03, 7.587090215e-03, 8.005895235e-03, + 8.447621377e-03, 8.913500811e-03, 9.404829421e-03, 9.922969810e-03, + 1.046935442e-02, 1.104548875e-02, 1.165295471e-02, 1.229341403e-02, + 1.296861181e-02, 1.368038021e-02, 1.443064212e-02, 1.522141505e-02, + 1.605481500e-02, 1.693306051e-02, 1.785847665e-02, 1.883349920e-02, + 1.986067876e-02, 2.094268495e-02, 2.208231056e-02, 2.328247576e-02, + 2.454623222e-02, 2.587676715e-02, 2.727740726e-02, 2.875162262e-02, + 3.030303030e-02, 3.193539780e-02, 3.365264624e-02, 3.545885323e-02, + 3.735825534e-02, 3.935525016e-02, 4.145439785e-02, 4.366042208e-02, + 4.597821036e-02, 4.841281356e-02, 5.096944459e-02, 5.365347623e-02, + 5.647043776e-02, 5.942601054e-02, 6.252602226e-02, 6.577643982e-02, + 6.918336064e-02, 7.275300236e-02, 7.649169073e-02, 8.040584556e-02, + 8.450196469e-02, 8.878660570e-02, 9.326636540e-02, 9.794785684e-02, + 1.028376839e-01, 1.079424132e-01, 1.132685434e-01, 1.188224717e-01, + 1.246104577e-01, 1.306385847e-01, 1.369127177e-01, 1.434384597e-01, + 1.502211048e-01, 1.572655893e-01, 1.645764408e-01, 1.721577255e-01, + 1.800129939e-01, 1.881452256e-01, 1.965567737e-01, 2.052493091e-01, + 2.142237651e-01, 2.234802836e-01, 2.330181631e-01, 2.428358094e-01, + 2.529306894e-01, 2.632992903e-01, 2.739370820e-01, 2.848384876e-01, + 2.959968589e-01, 3.074044601e-01, 3.190524600e-01, 3.309309323e-01, + 3.430288657e-01, 3.553341839e-01, 3.678337753e-01, 3.805135333e-01, + 3.933584068e-01, 4.063524602e-01, 4.194789441e-01, 4.327203741e-01, + 4.460586192e-01, 4.594749964e-01, 4.729503737e-01, 4.864652765e-01, + 5.000000000e-01, 5.135347235e-01, 5.270496263e-01, 5.405250036e-01, + 5.539413808e-01, 5.672796259e-01, 5.805210559e-01, 5.936475398e-01, + 6.066415932e-01, 6.194864667e-01, 6.321662247e-01, 6.446658161e-01, + 6.569711343e-01, 6.690690677e-01, 6.809475400e-01, 6.925955399e-01, + 7.040031411e-01, 7.151615124e-01, 7.260629180e-01, 7.367007097e-01, + 7.470693106e-01, 7.571641906e-01, 7.669818369e-01, 7.765197164e-01, + 7.857762349e-01, 7.947506909e-01, 8.034432263e-01, 8.118547744e-01, + 8.199870061e-01, 8.278422745e-01, 8.354235592e-01, 8.427344107e-01, + 8.497788952e-01, 8.565615403e-01, 8.630872823e-01, 8.693614153e-01, + 8.753895423e-01, 8.811775283e-01, 8.867314566e-01, 8.920575868e-01, + 8.971623161e-01, 9.020521432e-01, 9.067336346e-01, 9.112133943e-01, + 9.154980353e-01, 9.195941544e-01, 9.235083093e-01, 9.272469976e-01, + 9.308166394e-01, 9.342235602e-01, 9.374739777e-01, 9.405739895e-01, + 9.435295622e-01, 9.463465238e-01, 9.490305554e-01, 9.515871864e-01, + 9.540217896e-01, 9.563395779e-01, 9.585456022e-01, 9.606447498e-01, + 9.626417447e-01, 9.645411468e-01, 9.663473538e-01, 9.680646022e-01, + 9.696969697e-01, 9.712483774e-01, 9.727225927e-01, 9.741232329e-01, + 9.754537678e-01, 9.767175242e-01, 9.779176894e-01, 9.790573151e-01, + 9.801393212e-01, 9.811665008e-01, 9.821415234e-01, 9.830669395e-01, + 9.839451850e-01, 9.847785850e-01, 9.855693579e-01, 9.863196198e-01, + 9.870313882e-01, 9.877065860e-01, 9.883470453e-01, 9.889545112e-01, + 9.895306456e-01, 9.900770302e-01, 9.905951706e-01, 9.910864992e-01, + 9.915523786e-01, 9.919941048e-01, 9.924129098e-01, 9.928099650e-01, + 9.931863839e-01, 9.935432242e-01, 9.938814914e-01, 9.942021404e-01, + 9.945060782e-01, 9.947941663e-01, 9.950672226e-01, 9.953260239e-01, + 9.955713075e-01, 9.958037732e-01, 9.960240853e-01, 9.962328742e-01, + 9.964307382e-01, 9.966182449e-01, 9.967959329e-01, 9.969643130e-01, + 9.971238699e-01, 9.972750634e-01, 9.974183295e-01, 9.975540816e-01, + 9.976827121e-01, 9.978045929e-01, 9.979200765e-01, 9.980294974e-01, + 9.981331727e-01, 9.982314028e-01, 9.983244729e-01, 9.984126531e-01, + 9.984961996e-01, 9.985753550e-01, 9.986503495e-01, 9.987214013e-01, + 9.987887172e-01, 9.988524931e-01, 9.989129147e-01, 9.989701582e-01, + 9.990243902e-01, +}; + + +const float* lookup_table_table[] = { + lut_raised_cosine, + lut_sine, + lut_logit, +}; + +const float dist_icdf_0_0[] = { + 0.000000000e+00, 4.087982131e-02, 4.305530135e-02, 4.446717099e-02, + 4.554461095e-02, 4.643028146e-02, 4.719036259e-02, 4.786130177e-02, + 4.846544150e-02, 4.901752808e-02, 4.952783693e-02, 5.000383245e-02, + 5.045111894e-02, 5.087401856e-02, 5.127593970e-02, 5.165962113e-02, + 5.202729920e-02, 5.238082566e-02, 5.272175258e-02, 5.305139493e-02, + 5.337087757e-02, 5.368117102e-02, 5.398311923e-02, 5.427746127e-02, + 5.456484856e-02, 5.484585871e-02, 5.512100673e-02, 5.539075414e-02, + 5.565551651e-02, 5.591566975e-02, 5.617155528e-02, 5.642348449e-02, + 5.667174243e-02, 5.691659100e-02, 5.715827167e-02, 5.739700778e-02, + 5.763300665e-02, 5.786646125e-02, 5.809755178e-02, 5.832644702e-02, + 5.855330550e-02, 5.877827655e-02, 5.900150124e-02, 5.922311321e-02, + 5.944323939e-02, 5.966200071e-02, 5.987951263e-02, 6.009588577e-02, + 6.031122633e-02, 6.052563658e-02, 6.073921527e-02, 6.095205800e-02, + 6.116425758e-02, 6.137590434e-02, 6.158708647e-02, 6.179789027e-02, + 6.200840044e-02, 6.221870034e-02, 6.242887223e-02, 6.263899748e-02, + 6.284915686e-02, 6.305943072e-02, 6.326989919e-02, 6.348064244e-02, + 6.369174088e-02, 6.390327537e-02, 6.411532743e-02, 6.432797947e-02, + 6.454131500e-02, 6.475541891e-02, 6.497037764e-02, 6.518627947e-02, + 6.540321479e-02, 6.562127634e-02, 6.584055954e-02, 6.606116275e-02, + 6.628318767e-02, 6.650673963e-02, 6.673192802e-02, 6.695886667e-02, + 6.718767432e-02, 6.741847510e-02, 6.765139910e-02, 6.788658290e-02, + 6.812417027e-02, 6.836431288e-02, 6.860717107e-02, 6.885291476e-02, + 6.910172445e-02, 6.935379229e-02, 6.960932336e-02, 6.986853705e-02, + 7.013166868e-02, 7.039897125e-02, 7.067071756e-02, 7.094720251e-02, + 7.122874586e-02, 7.151569529e-02, 7.180843008e-02, 7.210736531e-02, + 7.241295677e-02, 7.272570685e-02, 7.304617137e-02, 7.337496784e-02, + 7.371278529e-02, 7.406039621e-02, 7.441867100e-02, 7.478859585e-02, + 7.517129474e-02, 7.556805707e-02, 7.598037259e-02, 7.640997608e-02, + 7.685890539e-02, 7.732957775e-02, 7.782489202e-02, 7.834836803e-02, + 7.890434069e-02, 7.949823715e-02, 8.013698356e-02, 8.082962263e-02, + 8.158828889e-02, 8.242982515e-02, 8.337862717e-02, 8.447204952e-02, + 8.577178628e-02, 8.739155340e-02, 8.958128632e-02, 9.311481710e-02, + 1.000000000e+00, 0.000000000e+00, 3.371122655e-02, 3.513071484e-02, + 3.601706803e-02, 3.667393961e-02, 3.720074235e-02, 3.764309658e-02, + 3.802590894e-02, 3.836433481e-02, 3.866831217e-02, 3.894472555e-02, + 3.919854936e-02, 3.943349984e-02, 3.965242956e-02, 3.985757791e-02, + 4.005073651e-02, 4.023336216e-02, 4.040665606e-02, 4.057162083e-02, + 4.072910239e-02, 4.087982131e-02, 4.102439664e-02, 4.116336428e-02, + 4.129719142e-02, 4.142628787e-02, 4.155101522e-02, 4.167169419e-02, + 4.178861061e-02, 4.190202037e-02, 4.201215349e-02, 4.211921756e-02, + 4.222340057e-02, 4.232487333e-02, 4.242379152e-02, 4.252029748e-02, + 4.261452166e-02, 4.270658395e-02, 4.279659481e-02, 4.288465623e-02, + 4.297086257e-02, 4.305530135e-02, 4.313805388e-02, 4.321919583e-02, + 4.329879776e-02, 4.337692558e-02, 4.345364096e-02, 4.352900166e-02, + 4.360306187e-02, 4.367587254e-02, 4.374748157e-02, 4.381793411e-02, + 4.388727274e-02, 4.395553766e-02, 4.402276687e-02, 4.408899637e-02, + 4.415426022e-02, 4.421859075e-02, 4.428201864e-02, 4.434457305e-02, + 4.440628170e-02, 4.446717099e-02, 4.452726605e-02, 4.458659086e-02, + 4.464516829e-02, 4.470302019e-02, 4.476016742e-02, 4.481662995e-02, + 4.487242688e-02, 4.492757649e-02, 4.498209632e-02, 4.503600317e-02, + 4.508931316e-02, 4.514204178e-02, 4.519420388e-02, 4.524581377e-02, + 4.529688518e-02, 4.534743133e-02, 4.539746494e-02, 4.544699828e-02, + 4.549604316e-02, 4.554461095e-02, 4.559271264e-02, 4.564035883e-02, + 4.568755975e-02, 4.573432527e-02, 4.578066494e-02, 4.582658798e-02, + 4.587210333e-02, 4.591721960e-02, 4.596194515e-02, 4.600628806e-02, + 4.605025617e-02, 4.609385706e-02, 4.613709808e-02, 4.617998636e-02, + 4.622252880e-02, 4.626473212e-02, 4.630660282e-02, 4.634814722e-02, + 4.638937145e-02, 4.643028146e-02, 4.647088305e-02, 4.651118184e-02, + 4.655118330e-02, 4.659089274e-02, 4.663031535e-02, 4.666945615e-02, + 4.670832004e-02, 4.674691178e-02, 4.678523603e-02, 4.682329730e-02, + 4.686110000e-02, 4.689864843e-02, 4.693594675e-02, 4.697299906e-02, + 4.700980933e-02, 4.704638144e-02, 4.708271917e-02, 4.711882622e-02, + 4.715470619e-02, 4.719036259e-02, 4.722579886e-02, 4.726101836e-02, + 4.729602435e-02, 4.733082005e-02, 4.736540857e-02, 4.739979298e-02, + 4.743397625e-02, 4.746796131e-02, 8.298422555e-02, 8.303237008e-02, + 8.308083474e-02, 8.312962441e-02, 8.317874409e-02, 8.322819891e-02, + 8.327799409e-02, 8.332813502e-02, 8.337862717e-02, 8.342947618e-02, + 8.348068782e-02, 8.353226799e-02, 8.358422277e-02, 8.363655835e-02, + 8.368928111e-02, 8.374239758e-02, 8.379591448e-02, 8.384983866e-02, + 8.390417721e-02, 8.395893736e-02, 8.401412656e-02, 8.406975246e-02, + 8.412582290e-02, 8.418234597e-02, 8.423932997e-02, 8.429678342e-02, + 8.435471510e-02, 8.441313404e-02, 8.447204952e-02, 8.453147112e-02, + 8.459140868e-02, 8.465187234e-02, 8.471287254e-02, 8.477442006e-02, + 8.483652600e-02, 8.489920180e-02, 8.496245927e-02, 8.502631059e-02, + 8.509076836e-02, 8.515584555e-02, 8.522155558e-02, 8.528791233e-02, + 8.535493012e-02, 8.542262378e-02, 8.549100865e-02, 8.556010060e-02, + 8.562991607e-02, 8.570047208e-02, 8.577178628e-02, 8.584387696e-02, + 8.591676309e-02, 8.599046436e-02, 8.606500122e-02, 8.614039490e-02, + 8.621666745e-02, 8.629384184e-02, 8.637194193e-02, 8.645099256e-02, + 8.653101960e-02, 8.661205004e-02, 8.669411197e-02, 8.677723474e-02, + 8.686144897e-02, 8.694678665e-02, 8.703328123e-02, 8.712096769e-02, + 8.720988265e-02, 8.730006448e-02, 8.739155340e-02, 8.748439160e-02, + 8.757862339e-02, 8.767429534e-02, 8.777145642e-02, 8.787015820e-02, + 8.797045499e-02, 8.807240410e-02, 8.817606603e-02, 8.828150472e-02, + 8.838878779e-02, 8.849798691e-02, 8.860917803e-02, 8.872244181e-02, + 8.883786399e-02, 8.895553582e-02, 8.907555456e-02, 8.919802402e-02, + 8.932305516e-02, 8.945076680e-02, 8.958128632e-02, 8.971475057e-02, + 8.985130683e-02, 8.999111388e-02, 9.013434323e-02, 9.028118059e-02, + 9.043182743e-02, 9.058650287e-02, 9.074544579e-02, 9.090891730e-02, + 9.107720365e-02, 9.125061953e-02, 9.142951204e-02, 9.161426530e-02, + 9.180530596e-02, 9.200310981e-02, 9.220820960e-02, 9.242120466e-02, + 9.264277250e-02, 9.287368319e-02, 9.311481710e-02, 9.336718725e-02, + 9.363196749e-02, 9.391052881e-02, 9.420448640e-02, 9.451576181e-02, + 9.484666624e-02, 9.520001450e-02, 9.557928395e-02, 9.598884202e-02, + 9.643428110e-02, 9.692292814e-02, 9.746465204e-02, 9.807320583e-02, + 9.876859706e-02, 9.958160960e-02, 1.005633646e-01, 1.018086946e-01, + 1.035276807e-01, 1.063778878e-01, 1.000000000e+00, +}; +const float dist_icdf_0_1[] = { + 0.000000000e+00, 5.775967733e-02, 6.707029213e-02, 7.344987461e-02, + 7.848926629e-02, 8.273886990e-02, 8.646080382e-02, 8.980231529e-02, + 9.285512486e-02, 9.568058999e-02, 9.832196591e-02, 1.008109989e-01, + 1.031717446e-01, 1.054229108e-01, 1.075793640e-01, 1.096531351e-01, + 1.116541136e-01, 1.135905398e-01, 1.154693614e-01, 1.172964987e-01, + 1.190770435e-01, 1.208154125e-01, 1.225154661e-01, 1.241806021e-01, + 1.258138303e-01, 1.274178326e-01, 1.289950118e-01, 1.305475317e-01, + 1.320773503e-01, 1.335862472e-01, 1.350758471e-01, 1.365476389e-01, + 1.380029929e-01, 1.394431744e-01, 1.408693562e-01, 1.422826293e-01, + 1.436840117e-01, 1.450744567e-01, 1.464548594e-01, 1.478260638e-01, + 1.491888670e-01, 1.505440251e-01, 1.518922568e-01, 1.532342479e-01, + 1.545706540e-01, 1.559021043e-01, 1.572292039e-01, 1.585525369e-01, + 1.598726685e-01, 1.611901471e-01, 1.625055063e-01, 1.638192671e-01, + 1.651319394e-01, 1.664440234e-01, 1.677560117e-01, 1.690683903e-01, + 1.703816403e-01, 1.716962389e-01, 1.730126612e-01, 1.743313810e-01, + 1.756528725e-01, 1.769776111e-01, 1.783060750e-01, 1.796387462e-01, + 1.809761119e-01, 1.823186655e-01, 1.836669085e-01, 1.850213512e-01, + 1.863825142e-01, 1.877509303e-01, 1.891271455e-01, 1.905117208e-01, + 1.919052339e-01, 1.933082808e-01, 1.947214781e-01, 1.961454644e-01, + 1.975809033e-01, 1.990284850e-01, 2.004889293e-01, 2.019629884e-01, + 2.034514498e-01, 2.049551394e-01, 2.064749256e-01, 2.080117230e-01, + 2.095664970e-01, 2.111402686e-01, 2.127341198e-01, 2.143491997e-01, + 2.159867314e-01, 2.176480193e-01, 2.193344581e-01, 2.210475417e-01, + 2.227888751e-01, 2.245601857e-01, 2.263633384e-01, 2.282003509e-01, + 2.300734130e-01, 2.319849075e-01, 2.339374356e-01, 2.359338454e-01, + 2.379772658e-01, 2.400711471e-01, 2.422193075e-01, 2.444259898e-01, + 2.466959290e-01, 2.490344340e-01, 2.514474865e-01, 2.539418634e-01, + 2.565252874e-01, 2.592066160e-01, 2.619960800e-01, 2.649055891e-01, + 2.679491277e-01, 2.711432755e-01, 2.745079047e-01, 2.780671283e-01, + 2.818506217e-01, 2.858955058e-01, 2.902491089e-01, 2.949731546e-01, + 3.001503663e-01, 3.058953959e-01, 3.123740231e-01, 3.198395630e-01, + 3.287093170e-01, 3.397499388e-01, 3.546388029e-01, 3.785312373e-01, + 1.000000000e+00, 0.000000000e+00, 3.192269535e-02, 3.641890780e-02, + 3.938557046e-02, 4.166204844e-02, 4.353517362e-02, 4.514034051e-02, + 4.655306902e-02, 4.782011687e-02, 4.897259663e-02, 5.003233599e-02, + 5.101528342e-02, 5.193347290e-02, 5.279622538e-02, 5.361091873e-02, + 5.438350047e-02, 5.511884060e-02, 5.582098098e-02, 5.649331595e-02, + 5.713872582e-02, 5.775967733e-02, 5.835830054e-02, 5.893644842e-02, + 5.949574372e-02, 6.003761626e-02, 6.056333286e-02, 6.107402166e-02, + 6.157069199e-02, 6.205425076e-02, 6.252551616e-02, 6.298522905e-02, + 6.343406259e-02, 6.387263038e-02, 6.430149343e-02, 6.472116613e-02, + 6.513212133e-02, 6.553479482e-02, 6.592958916e-02, 6.631687705e-02, + 6.669700423e-02, 6.707029213e-02, 6.743704010e-02, 6.779752742e-02, + 6.815201513e-02, 6.850074756e-02, 6.884395383e-02, 6.918184901e-02, + 6.951463538e-02, 6.984250336e-02, 7.016563246e-02, 7.048419215e-02, + 7.079834256e-02, 7.110823521e-02, 7.141401358e-02, 7.171581373e-02, + 7.201376479e-02, 7.230798943e-02, 7.259860431e-02, 7.288572045e-02, + 7.316944361e-02, 7.344987461e-02, 7.372710968e-02, 7.400124068e-02, + 7.427235541e-02, 7.454053784e-02, 7.480586833e-02, 7.506842384e-02, + 7.532827811e-02, 7.558550188e-02, 7.584016300e-02, 7.609232665e-02, + 7.634205541e-02, 7.658940947e-02, 7.683444670e-02, 7.707722280e-02, + 7.731779138e-02, 7.755620413e-02, 7.779251082e-02, 7.802675946e-02, + 7.825899638e-02, 7.848926629e-02, 7.871761235e-02, 7.894407627e-02, + 7.916869835e-02, 7.939151757e-02, 7.961257162e-02, 7.983189698e-02, + 8.004952894e-02, 8.026550172e-02, 8.047984843e-02, 8.069260117e-02, + 8.090379106e-02, 8.111344828e-02, 8.132160211e-02, 8.152828097e-02, + 8.173351242e-02, 8.193732327e-02, 8.213973951e-02, 8.234078643e-02, + 8.254048860e-02, 8.273886990e-02, 8.293595357e-02, 8.313176219e-02, + 8.332631777e-02, 8.351964170e-02, 8.371175482e-02, 8.390267741e-02, + 8.409242924e-02, 8.428102958e-02, 8.446849717e-02, 8.465485032e-02, + 8.484010687e-02, 8.502428420e-02, 8.520739928e-02, 8.538946867e-02, + 8.557050852e-02, 8.575053461e-02, 8.592956232e-02, 8.610760670e-02, + 8.628468242e-02, 8.646080382e-02, 8.663598494e-02, 8.681023946e-02, + 8.698358077e-02, 8.715602196e-02, 8.732757584e-02, 8.749825492e-02, + 8.766807144e-02, 8.783703740e-02, 3.096809047e-01, 3.100096523e-01, + 3.103405866e-01, 3.106737407e-01, 3.110091485e-01, 3.113468447e-01, + 3.116868649e-01, 3.120292452e-01, 3.123740231e-01, 3.127212367e-01, + 3.130709250e-01, 3.134231281e-01, 3.137778869e-01, 3.141352437e-01, + 3.144952415e-01, 3.148579246e-01, 3.152233383e-01, 3.155915293e-01, + 3.159625452e-01, 3.163364353e-01, 3.167132498e-01, 3.170930404e-01, + 3.174758604e-01, 3.178617642e-01, 3.182508082e-01, 3.186430498e-01, + 3.190385485e-01, 3.194373653e-01, 3.198395630e-01, 3.202452062e-01, + 3.206543615e-01, 3.210670973e-01, 3.214834842e-01, 3.219035950e-01, + 3.223275046e-01, 3.227552903e-01, 3.231870319e-01, 3.236228115e-01, + 3.240627140e-01, 3.245068272e-01, 3.249552415e-01, 3.254080504e-01, + 3.258653506e-01, 3.263272421e-01, 3.267938283e-01, 3.272652161e-01, + 3.277415163e-01, 3.282228437e-01, 3.287093170e-01, 3.292010595e-01, + 3.296981990e-01, 3.302008679e-01, 3.307092039e-01, 3.312233499e-01, + 3.317434543e-01, 3.322696715e-01, 3.328021619e-01, 3.333410928e-01, + 3.338866379e-01, 3.344389785e-01, 3.349983036e-01, 3.355648102e-01, + 3.361387039e-01, 3.367201996e-01, 3.373095218e-01, 3.379069052e-01, + 3.385125955e-01, 3.391268502e-01, 3.397499388e-01, 3.403821443e-01, + 3.410237635e-01, 3.416751086e-01, 3.423365075e-01, 3.430083056e-01, + 3.436908663e-01, 3.443845734e-01, 3.450898313e-01, 3.458070679e-01, + 3.465367352e-01, 3.472793121e-01, 3.480353061e-01, 3.488052560e-01, + 3.495897342e-01, 3.503893496e-01, 3.512047511e-01, 3.520366310e-01, + 3.528857290e-01, 3.537528368e-01, 3.546388029e-01, 3.555445384e-01, + 3.564710233e-01, 3.574193139e-01, 3.583905504e-01, 3.593859671e-01, + 3.604069020e-01, 3.614548098e-01, 3.625312755e-01, 3.636380306e-01, + 3.647769723e-01, 3.659501849e-01, 3.671599661e-01, 3.684088570e-01, + 3.696996782e-01, 3.710355728e-01, 3.724200577e-01, 3.738570865e-01, + 3.753511249e-01, 3.769072442e-01, 3.785312373e-01, 3.802297637e-01, + 3.820105327e-01, 3.838825389e-01, 3.858563674e-01, 3.879445963e-01, + 3.901623353e-01, 3.925279618e-01, 3.950641455e-01, 3.977993140e-01, + 4.007698049e-01, 4.040231355e-01, 4.076231722e-01, 4.116587047e-01, + 4.162585474e-01, 4.216202624e-01, 4.280706728e-01, 4.362131524e-01, + 4.473757968e-01, 4.656744235e-01, 1.000000000e+00, +}; +const float dist_icdf_0_2[] = { + 0.000000000e+00, 2.174355841e-02, 3.092888348e-02, 3.812320475e-02, + 4.429997329e-02, 4.983386356e-02, 5.491617951e-02, 5.966017291e-02, + 6.413942945e-02, 6.840494830e-02, 7.249379666e-02, 7.643392067e-02, + 8.024701264e-02, 8.395031560e-02, 8.755781005e-02, 9.108102307e-02, + 9.452959714e-02, 9.791170021e-02, 1.012343283e-01, 1.045035331e-01, + 1.077245956e-01, 1.109021616e-01, 1.140403481e-01, 1.171428276e-01, + 1.202128970e-01, 1.232535328e-01, 1.262674371e-01, 1.292570750e-01, + 1.322247065e-01, 1.351724129e-01, 1.381021195e-01, 1.410156146e-01, + 1.439145658e-01, 1.468005346e-01, 1.496749883e-01, 1.525393111e-01, + 1.553948128e-01, 1.582427381e-01, 1.610842730e-01, 1.639205517e-01, + 1.667526626e-01, 1.695816530e-01, 1.724085344e-01, 1.752342864e-01, + 1.780598607e-01, 1.808861847e-01, 1.837141649e-01, 1.865446897e-01, + 1.893786323e-01, 1.922168535e-01, 1.950602044e-01, 1.979095281e-01, + 2.007656627e-01, 2.036294431e-01, 2.065017033e-01, 2.093832783e-01, + 2.122750063e-01, 2.151777305e-01, 2.180923013e-01, 2.210195783e-01, + 2.239604320e-01, 2.269157461e-01, 2.298864198e-01, 2.328733692e-01, + 2.358775304e-01, 2.388998611e-01, 2.419413432e-01, 2.450029856e-01, + 2.480858261e-01, 2.511909351e-01, 2.543194176e-01, 2.574724169e-01, + 2.606511180e-01, 2.638567508e-01, 2.670905940e-01, 2.703539795e-01, + 2.736482967e-01, 2.769749974e-01, 2.803356010e-01, 2.837317004e-01, + 2.871649681e-01, 2.906371632e-01, 2.941501391e-01, 2.977058516e-01, + 3.013063682e-01, 3.049538782e-01, 3.086507044e-01, 3.123993150e-01, + 3.162023386e-01, 3.200625789e-01, 3.239830333e-01, 3.279669124e-01, + 3.320176622e-01, 3.361389905e-01, 3.403348952e-01, 3.446096976e-01, + 3.489680809e-01, 3.534151336e-01, 3.579564004e-01, 3.625979410e-01, + 3.673463990e-01, 3.722090826e-01, 3.771940600e-01, 3.823102724e-01, + 3.875676695e-01, 3.929773722e-01, 3.985518702e-01, 4.043052633e-01, + 4.102535592e-01, 4.164150442e-01, 4.228107498e-01, 4.294650475e-01, + 4.364064145e-01, 4.436684375e-01, 4.512911461e-01, 4.593228202e-01, + 4.678224871e-01, 4.768634586e-01, 4.865384784e-01, 4.969674609e-01, + 5.083095845e-01, 5.207830984e-01, 5.346997151e-01, 5.505289609e-01, + 5.690311803e-01, 5.915738191e-01, 6.210652108e-01, 6.660635133e-01, + 1.000000000e+00, 0.000000000e+00, 4.922842828e-03, 6.920535491e-03, + 8.451337086e-03, 9.741940876e-03, 1.087967776e-02, 1.190917253e-02, + 1.285685991e-02, 1.373992404e-02, 1.457027778e-02, 1.535658012e-02, + 1.610535802e-02, 1.682167545e-02, 1.750955456e-02, 1.817225278e-02, + 1.881245191e-02, 1.943239104e-02, 2.003396240e-02, 2.061878220e-02, + 2.118824379e-02, 2.174355841e-02, 2.228578684e-02, 2.281586425e-02, + 2.333462012e-02, 2.384279417e-02, 2.434104942e-02, 2.482998282e-02, + 2.531013415e-02, 2.578199335e-02, 2.624600676e-02, 2.670258234e-02, + 2.715209412e-02, 2.759488605e-02, 2.803127525e-02, 2.846155484e-02, + 2.888599644e-02, 2.930485227e-02, 2.971835708e-02, 3.012672973e-02, + 3.053017474e-02, 3.092888348e-02, 3.132303539e-02, 3.171279895e-02, + 3.209833264e-02, 3.247978569e-02, 3.285729888e-02, 3.323100513e-02, + 3.360103017e-02, 3.396749301e-02, 3.433050647e-02, 3.469017759e-02, + 3.504660808e-02, 3.539989464e-02, 3.575012931e-02, 3.609739981e-02, + 3.644178975e-02, 3.678337898e-02, 3.712224374e-02, 3.745845695e-02, + 3.779208835e-02, 3.812320475e-02, 3.845187016e-02, 3.877814595e-02, + 3.910209103e-02, 3.942376194e-02, 3.974321304e-02, 4.006049656e-02, + 4.037566277e-02, 4.068876005e-02, 4.099983500e-02, 4.130893253e-02, + 4.161609594e-02, 4.192136699e-02, 4.222478600e-02, 4.252639189e-02, + 4.282622229e-02, 4.312431354e-02, 4.342070080e-02, 4.371541807e-02, + 4.400849828e-02, 4.429997329e-02, 4.458987398e-02, 4.487823025e-02, + 4.516507111e-02, 4.545042469e-02, 4.573431827e-02, 4.601677832e-02, + 4.629783056e-02, 4.657749995e-02, 4.685581073e-02, 4.713278649e-02, + 4.740845013e-02, 4.768282394e-02, 4.795592959e-02, 4.822778816e-02, + 4.849842018e-02, 4.876784563e-02, 4.903608398e-02, 4.930315419e-02, + 4.956907471e-02, 4.983386356e-02, 5.009753829e-02, 5.036011602e-02, + 5.062161343e-02, 5.088204682e-02, 5.114143208e-02, 5.139978472e-02, + 5.165711990e-02, 5.191345239e-02, 5.216879666e-02, 5.242316682e-02, + 5.267657665e-02, 5.292903964e-02, 5.318056897e-02, 5.343117753e-02, + 5.368087791e-02, 5.392968245e-02, 5.417760320e-02, 5.442465197e-02, + 5.467084031e-02, 5.491617951e-02, 5.516068067e-02, 5.540435461e-02, + 5.564721195e-02, 5.588926309e-02, 5.613051823e-02, 5.637098734e-02, + 5.661068023e-02, 5.684960647e-02, 5.289344619e-01, 5.296397483e-01, + 5.303493000e-01, 5.310631783e-01, 5.317814459e-01, 5.325041669e-01, + 5.332314071e-01, 5.339632336e-01, 5.346997151e-01, 5.354409218e-01, + 5.361869258e-01, 5.369378008e-01, 5.376936222e-01, 5.384544674e-01, + 5.392204156e-01, 5.399915479e-01, 5.407679475e-01, 5.415496997e-01, + 5.423368920e-01, 5.431296139e-01, 5.439279575e-01, 5.447320172e-01, + 5.455418899e-01, 5.463576751e-01, 5.471794748e-01, 5.480073939e-01, + 5.488415403e-01, 5.496820247e-01, 5.505289609e-01, 5.513824659e-01, + 5.522426601e-01, 5.531096675e-01, 5.539836153e-01, 5.548646348e-01, + 5.557528611e-01, 5.566484333e-01, 5.575514947e-01, 5.584621931e-01, + 5.593806809e-01, 5.603071150e-01, 5.612416577e-01, 5.621844761e-01, + 5.631357429e-01, 5.640956366e-01, 5.650643414e-01, 5.660420478e-01, + 5.670289528e-01, 5.680252600e-01, 5.690311803e-01, 5.700469320e-01, + 5.710727412e-01, 5.721088422e-01, 5.731554777e-01, 5.742128997e-01, + 5.752813695e-01, 5.763611585e-01, 5.774525485e-01, 5.785558324e-01, + 5.796713147e-01, 5.807993124e-01, 5.819401553e-01, 5.830941868e-01, + 5.842617651e-01, 5.854432635e-01, 5.866390716e-01, 5.878495963e-01, + 5.890752627e-01, 5.903165153e-01, 5.915738191e-01, 5.928476613e-01, + 5.941385522e-01, 5.954470271e-01, 5.967736481e-01, 5.981190053e-01, + 5.994837195e-01, 6.008684439e-01, 6.022738668e-01, 6.037007139e-01, + 6.051497510e-01, 6.066217877e-01, 6.081176803e-01, 6.096383355e-01, + 6.111847150e-01, 6.127578396e-01, 6.143587946e-01, 6.159887352e-01, + 6.176488931e-01, 6.193405830e-01, 6.210652108e-01, 6.228242823e-01, + 6.246194131e-01, 6.264523396e-01, 6.283249317e-01, 6.302392072e-01, + 6.321973478e-01, 6.342017182e-01, 6.362548870e-01, 6.383596517e-01, + 6.405190673e-01, 6.427364790e-01, 6.450155616e-01, 6.473603646e-01, + 6.497753664e-01, 6.522655378e-01, 6.548364188e-01, 6.574942108e-01, + 6.602458881e-01, 6.630993347e-01, 6.660635133e-01, 6.691486755e-01, + 6.723666263e-01, 6.757310625e-01, 6.792580075e-01, 6.829663828e-01, + 6.868787669e-01, 6.910224254e-01, 6.954307351e-01, 7.001452035e-01, + 7.052184107e-01, 7.107184362e-01, 7.167357856e-01, 7.233947496e-01, + 7.308731533e-01, 7.394393664e-01, 7.495289276e-01, 7.619271224e-01, + 7.783093378e-01, 8.036267830e-01, 1.000000000e+00, +}; +const float dist_icdf_0_3[] = { + 0.000000000e+00, 1.136630499e-02, 1.812428419e-02, 2.386615269e-02, + 2.905355219e-02, 3.387634622e-02, 3.843584130e-02, 4.279405263e-02, + 4.699238532e-02, 5.106020347e-02, 5.501928171e-02, 5.888633262e-02, + 6.267454085e-02, 6.639454450e-02, 7.005508997e-02, 7.366348437e-02, + 7.722591737e-02, 8.074769597e-02, 8.423341938e-02, 8.768711188e-02, + 9.111232529e-02, 9.451221931e-02, 9.788962525e-02, 1.012470972e-01, + 1.045869537e-01, 1.079113115e-01, 1.112221142e-01, 1.145211554e-01, + 1.178100986e-01, 1.210904941e-01, 1.243637928e-01, 1.276313590e-01, + 1.308944806e-01, 1.341543787e-01, 1.374122149e-01, 1.406690993e-01, + 1.439260960e-01, 1.471842290e-01, 1.504444869e-01, 1.537078276e-01, + 1.569751824e-01, 1.602474592e-01, 1.635255461e-01, 1.668103148e-01, + 1.701026226e-01, 1.734033160e-01, 1.767132325e-01, 1.800332031e-01, + 1.833640546e-01, 1.867066116e-01, 1.900616986e-01, 1.934301421e-01, + 1.968127721e-01, 2.002104243e-01, 2.036239420e-01, 2.070541778e-01, + 2.105019953e-01, 2.139682714e-01, 2.174538979e-01, 2.209597834e-01, + 2.244868553e-01, 2.280360619e-01, 2.316083747e-01, 2.352047901e-01, + 2.388263321e-01, 2.424740547e-01, 2.461490442e-01, 2.498524219e-01, + 2.535853474e-01, 2.573490208e-01, 2.611446868e-01, 2.649736376e-01, + 2.688372166e-01, 2.727368228e-01, 2.766739147e-01, 2.806500151e-01, + 2.846667162e-01, 2.887256850e-01, 2.928286693e-01, 2.969775040e-01, + 3.011741187e-01, 3.054205449e-01, 3.097189252e-01, 3.140715222e-01, + 3.184807293e-01, 3.229490820e-01, 3.274792709e-01, 3.320741560e-01, + 3.367367823e-01, 3.414703980e-01, 3.462784741e-01, 3.511647272e-01, + 3.561331444e-01, 3.611880128e-01, 3.663339513e-01, 3.715759482e-01, + 3.769194042e-01, 3.823701809e-01, 3.879346574e-01, 3.936197967e-01, + 3.994332214e-01, 4.053833037e-01, 4.114792714e-01, 4.177313327e-01, + 4.241508257e-01, 4.307503978e-01, 4.375442228e-01, 4.445482653e-01, + 4.517806065e-01, 4.592618485e-01, 4.670156219e-01, 4.750692297e-01, + 4.834544764e-01, 4.922087481e-01, 5.013764448e-01, 5.110109121e-01, + 5.211771014e-01, 5.319553204e-01, 5.434466648e-01, 5.557811429e-01, + 5.691302991e-01, 5.837277572e-01, 5.999046350e-01, 6.181552614e-01, + 6.392716828e-01, 6.646597189e-01, 6.972576369e-01, 7.454848184e-01, + 1.000000000e+00, 0.000000000e+00, 1.550327841e-03, 2.453948846e-03, + 3.211115815e-03, 3.886829909e-03, 4.507973099e-03, 5.088952189e-03, + 5.638618270e-03, 6.162898283e-03, 6.666005288e-03, 7.151068748e-03, + 7.620493191e-03, 8.076176397e-03, 8.519649257e-03, 8.952169276e-03, + 9.374785302e-03, 9.788383651e-03, 1.019372180e-02, 1.059145355e-02, + 1.098214814e-02, 1.136630499e-02, 1.174436539e-02, 1.211672159e-02, + 1.248372429e-02, 1.284568861e-02, 1.320289901e-02, 1.355561341e-02, + 1.390406656e-02, 1.424847289e-02, 1.458902894e-02, 1.492591540e-02, + 1.525929890e-02, 1.558933348e-02, 1.591616194e-02, 1.623991693e-02, + 1.656072200e-02, 1.687869240e-02, 1.719393593e-02, 1.750655353e-02, + 1.781663993e-02, 1.812428419e-02, 1.842957012e-02, 1.873257677e-02, + 1.903337876e-02, 1.933204664e-02, 1.962864722e-02, 1.992324381e-02, + 2.021589651e-02, 2.050666239e-02, 2.079559577e-02, 2.108274834e-02, + 2.136816938e-02, 2.165190589e-02, 2.193400276e-02, 2.221450288e-02, + 2.249344728e-02, 2.277087525e-02, 2.304682442e-02, 2.332133086e-02, + 2.359442921e-02, 2.386615269e-02, 2.413653326e-02, 2.440560163e-02, + 2.467338733e-02, 2.493991881e-02, 2.520522348e-02, 2.546932774e-02, + 2.573225705e-02, 2.599403601e-02, 2.625468832e-02, 2.651423690e-02, + 2.677270391e-02, 2.703011075e-02, 2.728647814e-02, 2.754182612e-02, + 2.779617410e-02, 2.804954088e-02, 2.830194469e-02, 2.855340317e-02, + 2.880393347e-02, 2.905355219e-02, 2.930227547e-02, 2.955011897e-02, + 2.979709789e-02, 3.004322703e-02, 3.028852074e-02, 3.053299299e-02, + 3.077665736e-02, 3.101952709e-02, 3.126161502e-02, 3.150293368e-02, + 3.174349528e-02, 3.198331168e-02, 3.222239447e-02, 3.246075493e-02, + 3.269840406e-02, 3.293535259e-02, 3.317161098e-02, 3.340718945e-02, + 3.364209795e-02, 3.387634622e-02, 3.410994375e-02, 3.434289983e-02, + 3.457522351e-02, 3.480692365e-02, 3.503800891e-02, 3.526848775e-02, + 3.549836843e-02, 3.572765906e-02, 3.595636754e-02, 3.618450162e-02, + 3.641206888e-02, 3.663907672e-02, 3.686553242e-02, 3.709144308e-02, + 3.731681566e-02, 3.754165698e-02, 3.776597372e-02, 3.798977244e-02, + 3.821305953e-02, 3.843584130e-02, 3.865812391e-02, 3.887991340e-02, + 3.910121570e-02, 3.932203663e-02, 3.954238188e-02, 3.976225706e-02, + 3.998166765e-02, 4.020061906e-02, 5.932174711e-01, 5.940366506e-01, + 5.948604733e-01, 5.956890038e-01, 5.965223081e-01, 5.973604536e-01, + 5.982035093e-01, 5.990515458e-01, 5.999046350e-01, 6.007628509e-01, + 6.016262690e-01, 6.024949664e-01, 6.033690223e-01, 6.042485176e-01, + 6.051335352e-01, 6.060241600e-01, 6.069204789e-01, 6.078225812e-01, + 6.087305580e-01, 6.096445030e-01, 6.105645121e-01, 6.114906839e-01, + 6.124231191e-01, 6.133619215e-01, 6.143071973e-01, 6.152590556e-01, + 6.162176085e-01, 6.171829710e-01, 6.181552614e-01, 6.191346010e-01, + 6.201211148e-01, 6.211149311e-01, 6.221161819e-01, 6.231250030e-01, + 6.241415342e-01, 6.251659192e-01, 6.261983063e-01, 6.272388479e-01, + 6.282877012e-01, 6.293450282e-01, 6.304109959e-01, 6.314857766e-01, + 6.325695479e-01, 6.336624933e-01, 6.347648022e-01, 6.358766700e-01, + 6.369982990e-01, 6.381298979e-01, 6.392716828e-01, 6.404238772e-01, + 6.415867123e-01, 6.427604276e-01, 6.439452710e-01, 6.451414997e-01, + 6.463493802e-01, 6.475691889e-01, 6.488012127e-01, 6.500457496e-01, + 6.513031090e-01, 6.525736128e-01, 6.538575955e-01, 6.551554053e-01, + 6.564674048e-01, 6.577939717e-01, 6.591354999e-01, 6.604924002e-01, + 6.618651014e-01, 6.632540516e-01, 6.646597189e-01, 6.660825933e-01, + 6.675231876e-01, 6.689820392e-01, 6.704597112e-01, 6.719567951e-01, + 6.734739116e-01, 6.750117137e-01, 6.765708882e-01, 6.781521585e-01, + 6.797562873e-01, 6.813840798e-01, 6.830363863e-01, 6.847141064e-01, + 6.864181928e-01, 6.881496555e-01, 6.899095667e-01, 6.916990663e-01, + 6.935193676e-01, 6.953717641e-01, 6.972576369e-01, 6.991784628e-01, + 7.011358238e-01, 7.031314177e-01, 7.051670694e-01, 7.072447450e-01, + 7.093665667e-01, 7.115348302e-01, 7.137520248e-01, 7.160208562e-01, + 7.183442733e-01, 7.207254987e-01, 7.231680647e-01, 7.256758556e-01, + 7.282531568e-01, 7.309047141e-01, 7.336358034e-01, 7.364523154e-01, + 7.393608574e-01, 7.423688776e-01, 7.454848184e-01, 7.487183066e-01, + 7.520803922e-01, 7.555838521e-01, 7.592435801e-01, 7.630770961e-01, + 7.671052216e-01, 7.713529908e-01, 7.758509060e-01, 7.806367088e-01, + 7.857579461e-01, 7.912758108e-01, 7.972711136e-01, 8.038540068e-01, + 8.111807607e-01, 8.194849205e-01, 8.291411365e-01, 8.408153119e-01, + 8.559016189e-01, 8.784043144e-01, 1.000000000e+00, +}; +const float dist_icdf_0_4[] = { + 0.000000000e+00, 4.318552295e-03, 8.136040937e-03, 1.180014022e-02, + 1.537593950e-02, 1.889308061e-02, 2.236853835e-02, 2.581330409e-02, + 2.923507613e-02, 3.263955250e-02, 3.603112869e-02, 3.941330696e-02, + 4.278895200e-02, 4.616045870e-02, 4.952986670e-02, 5.289894125e-02, + 5.626923179e-02, 5.964211556e-02, 6.301883064e-02, 6.640050140e-02, + 6.978815852e-02, 7.318275496e-02, 7.658517870e-02, 7.999626330e-02, + 8.341679646e-02, 8.684752728e-02, 9.028917230e-02, 9.374242061e-02, + 9.720793831e-02, 1.006863723e-01, 1.041783536e-01, 1.076845002e-01, + 1.112054199e-01, 1.147417123e-01, 1.182939709e-01, 1.218627855e-01, + 1.254487433e-01, 1.290524307e-01, 1.326744350e-01, 1.363153456e-01, + 1.399757555e-01, 1.436562621e-01, 1.473574693e-01, 1.510799879e-01, + 1.548244369e-01, 1.585914450e-01, 1.623816515e-01, 1.661957074e-01, + 1.700342766e-01, 1.738980372e-01, 1.777876823e-01, 1.817039217e-01, + 1.856474827e-01, 1.896191116e-01, 1.936195750e-01, 1.976496612e-01, + 2.017101816e-01, 2.058019722e-01, 2.099258949e-01, 2.140828399e-01, + 2.182737267e-01, 2.224995062e-01, 2.267611629e-01, 2.310597166e-01, + 2.353962250e-01, 2.397717858e-01, 2.441875393e-01, 2.486446712e-01, + 2.531444154e-01, 2.576880572e-01, 2.622769366e-01, 2.669124519e-01, + 2.715960638e-01, 2.763292995e-01, 2.811137571e-01, 2.859511110e-01, + 2.908431167e-01, 2.957916174e-01, 3.007985499e-01, 3.058659516e-01, + 3.109959686e-01, 3.161908637e-01, 3.214530258e-01, 3.267849801e-01, + 3.321893994e-01, 3.376691163e-01, 3.432271373e-01, 3.488666579e-01, + 3.545910799e-01, 3.604040301e-01, 3.663093820e-01, 3.723112797e-01, + 3.784141650e-01, 3.846228077e-01, 3.909423406e-01, 3.973782989e-01, + 4.039366650e-01, 4.106239205e-01, 4.174471056e-01, 4.244138880e-01, + 4.315326429e-01, 4.388125467e-01, 4.462636868e-01, 4.538971911e-01, + 4.617253825e-01, 4.697619638e-01, 4.780222397e-01, 4.865233873e-01, + 4.952847879e-01, 5.043284360e-01, 5.136794521e-01, 5.233667293e-01, + 5.334237613e-01, 5.438897175e-01, 5.548108582e-01, 5.662424343e-01, + 5.782512864e-01, 5.909194836e-01, 6.043495569e-01, 6.186722632e-01, + 6.340585441e-01, 6.507387983e-01, 6.690357417e-01, 6.894246183e-01, + 7.126546234e-01, 7.400290923e-01, 7.742009798e-01, 8.224738122e-01, + 1.000000000e+00, 0.000000000e+00, 2.827441263e-04, 5.309614341e-04, + 7.676889192e-04, 9.972822069e-04, 1.221734232e-03, 1.442189052e-03, + 1.659387712e-03, 1.873848346e-03, 2.085952989e-03, 2.295994583e-03, + 2.504204628e-03, 2.710770500e-03, 2.915846842e-03, 3.119563366e-03, + 3.322030365e-03, 3.523342719e-03, 3.723582879e-03, 3.922823127e-03, + 4.121127328e-03, 4.318552295e-03, 4.515148887e-03, 4.710962881e-03, + 4.906035691e-03, 5.100404952e-03, 5.294105008e-03, 5.487167322e-03, + 5.679620815e-03, 5.871492159e-03, 6.062806029e-03, 6.253585311e-03, + 6.443851288e-03, 6.633623805e-03, 6.822921401e-03, 7.011761435e-03, + 7.200160194e-03, 7.388132989e-03, 7.575694233e-03, 7.762857525e-03, + 7.949635709e-03, 8.136040937e-03, 8.322084723e-03, 8.507777990e-03, + 8.693131115e-03, 8.878153968e-03, 9.062855945e-03, 9.247246005e-03, + 9.431332697e-03, 9.615124187e-03, 9.798628284e-03, 9.981852461e-03, + 1.016480388e-02, 1.034748939e-02, 1.052991560e-02, 1.071208882e-02, + 1.089401513e-02, 1.107570038e-02, 1.125715019e-02, 1.143836999e-02, + 1.161936499e-02, 1.180014022e-02, 1.198070056e-02, 1.216105069e-02, + 1.234119514e-02, 1.252113830e-02, 1.270088440e-02, 1.288043754e-02, + 1.305980169e-02, 1.323898070e-02, 1.341797829e-02, 1.359679808e-02, + 1.377544357e-02, 1.395391815e-02, 1.413222514e-02, 1.431036773e-02, + 1.448834904e-02, 1.466617210e-02, 1.484383985e-02, 1.502135515e-02, + 1.519872080e-02, 1.537593950e-02, 1.555301389e-02, 1.572994655e-02, + 1.590673998e-02, 1.608339663e-02, 1.625991888e-02, 1.643630905e-02, + 1.661256940e-02, 1.678870216e-02, 1.696470947e-02, 1.714059345e-02, + 1.731635616e-02, 1.749199960e-02, 1.766752575e-02, 1.784293652e-02, + 1.801823379e-02, 1.819341940e-02, 1.836849515e-02, 1.854346279e-02, + 1.871832405e-02, 1.889308061e-02, 1.906773411e-02, 1.924228618e-02, + 1.941673839e-02, 1.959109229e-02, 1.976534941e-02, 1.993951122e-02, + 2.011357919e-02, 2.028755475e-02, 2.046143931e-02, 2.063523422e-02, + 2.080894086e-02, 2.098256053e-02, 2.115609454e-02, 2.132954416e-02, + 2.150291065e-02, 2.167619524e-02, 2.184939913e-02, 2.202252350e-02, + 2.219556953e-02, 2.236853835e-02, 2.254143110e-02, 2.271424887e-02, + 2.288699276e-02, 2.305966382e-02, 2.323226311e-02, 2.340479167e-02, + 2.357725051e-02, 2.374964062e-02, 6.614969627e-01, 6.624223679e-01, + 6.633524863e-01, 6.642873798e-01, 6.652271120e-01, 6.661717474e-01, + 6.671213522e-01, 6.680759940e-01, 6.690357417e-01, 6.700006659e-01, + 6.709708389e-01, 6.719463343e-01, 6.729272276e-01, 6.739135960e-01, + 6.749055184e-01, 6.759030757e-01, 6.769063506e-01, 6.779154277e-01, + 6.789303938e-01, 6.799513376e-01, 6.809783501e-01, 6.820115246e-01, + 6.830509566e-01, 6.840967440e-01, 6.851489872e-01, 6.862077892e-01, + 6.872732556e-01, 6.883454949e-01, 6.894246183e-01, 6.905107401e-01, + 6.916039775e-01, 6.927044510e-01, 6.938122844e-01, 6.949276049e-01, + 6.960505433e-01, 6.971812341e-01, 6.983198156e-01, 6.994664302e-01, + 7.006212244e-01, 7.017843491e-01, 7.029559595e-01, 7.041362158e-01, + 7.053252829e-01, 7.065233309e-01, 7.077305352e-01, 7.089470768e-01, + 7.101731424e-01, 7.114089249e-01, 7.126546234e-01, 7.139104438e-01, + 7.151765989e-01, 7.164533086e-01, 7.177408006e-01, 7.190393106e-01, + 7.203490826e-01, 7.216703692e-01, 7.230034327e-01, 7.243485446e-01, + 7.257059869e-01, 7.270760523e-01, 7.284590447e-01, 7.298552800e-01, + 7.312650868e-01, 7.326888066e-01, 7.341267954e-01, 7.355794237e-01, + 7.370470777e-01, 7.385301604e-01, 7.400290923e-01, 7.415443126e-01, + 7.430762805e-01, 7.446254761e-01, 7.461924021e-01, 7.477775853e-01, + 7.493815778e-01, 7.510049592e-01, 7.526483383e-01, 7.543123551e-01, + 7.559976831e-01, 7.577050318e-01, 7.594351494e-01, 7.611888259e-01, + 7.629668959e-01, 7.647702428e-01, 7.665998025e-01, 7.684565674e-01, + 7.703415920e-01, 7.722559979e-01, 7.742009798e-01, 7.761778124e-01, + 7.781878579e-01, 7.802325744e-01, 7.823135256e-01, 7.844323916e-01, + 7.865909811e-01, 7.887912453e-01, 7.910352942e-01, 7.933254144e-01, + 7.956640905e-01, 7.980540294e-01, 8.004981888e-01, 8.029998100e-01, + 8.055624571e-01, 8.081900628e-01, 8.108869830e-01, 8.136580625e-01, + 8.165087134e-01, 8.194450113e-01, 8.224738122e-01, 8.256028983e-01, + 8.288411587e-01, 8.321988194e-01, 8.356877362e-01, 8.393217759e-01, + 8.431173179e-01, 8.470939272e-01, 8.512752763e-01, 8.556904349e-01, + 8.603757250e-01, 8.653774745e-01, 8.707562571e-01, 8.765937281e-01, + 8.830042789e-01, 8.901563967e-01, 8.983157447e-01, 9.079445898e-01, + 9.199841476e-01, 9.370265573e-01, 1.000000000e+00, +}; +const float dist_icdf_0_5[] = { + 0.000000000e+00, 1.018114730e-03, 2.447577757e-03, 4.090490249e-03, + 5.890934762e-03, 7.819702758e-03, 9.858497479e-03, 1.199468311e-02, + 1.421897836e-02, 1.652426967e-02, 1.890493304e-02, 2.135641640e-02, + 2.387496739e-02, 2.645744780e-02, 2.910120255e-02, 3.180396430e-02, + 3.456378239e-02, 3.737896864e-02, 4.024805539e-02, 4.316976240e-02, + 4.614297046e-02, 4.916670001e-02, 5.224009373e-02, 5.536240216e-02, + 5.853297174e-02, 6.175123485e-02, 6.501670131e-02, 6.832895130e-02, + 7.168762928e-02, 7.509243873e-02, 7.854313775e-02, 8.203953521e-02, + 8.558148741e-02, 8.916889531e-02, 9.280170199e-02, 9.647989060e-02, + 1.002034825e-01, 1.039725357e-01, 1.077871436e-01, 1.116474338e-01, + 1.155535673e-01, 1.195057376e-01, 1.235041700e-01, 1.275491216e-01, + 1.316408803e-01, 1.357797652e-01, 1.399661263e-01, 1.442003443e-01, + 1.484828310e-01, 1.528140295e-01, 1.571944143e-01, 1.616244922e-01, + 1.661048023e-01, 1.706359169e-01, 1.752184425e-01, 1.798530199e-01, + 1.845403259e-01, 1.892810740e-01, 1.940760156e-01, 1.989259413e-01, + 2.038316821e-01, 2.087941115e-01, 2.138141466e-01, 2.188927501e-01, + 2.240309325e-01, 2.292297540e-01, 2.344903268e-01, 2.398138180e-01, + 2.452014519e-01, 2.506545133e-01, 2.561743506e-01, 2.617623790e-01, + 2.674200851e-01, 2.731490300e-01, 2.789508547e-01, 2.848272843e-01, + 2.907801337e-01, 2.968113131e-01, 3.029228345e-01, 3.091168186e-01, + 3.153955022e-01, 3.217612466e-01, 3.282165467e-01, 3.347640407e-01, + 3.414065214e-01, 3.481469485e-01, 3.549884613e-01, 3.619343947e-01, + 3.689882947e-01, 3.761539374e-01, 3.834353497e-01, 3.908368320e-01, + 3.983629845e-01, 4.060187359e-01, 4.138093769e-01, 4.217405974e-01, + 4.298185290e-01, 4.380497936e-01, 4.464415593e-01, 4.550016046e-01, + 4.637383928e-01, 4.726611579e-01, 4.817800062e-01, 4.911060348e-01, + 5.006514717e-01, 5.104298430e-01, 5.204561730e-01, 5.307472260e-01, + 5.413218004e-01, 5.522010904e-01, 5.634091346e-01, 5.749733794e-01, + 5.869253929e-01, 5.993017859e-01, 6.121454129e-01, 6.255069703e-01, + 6.394471608e-01, 6.540396919e-01, 6.693755400e-01, 6.855691975e-01, + 7.027681651e-01, 7.211680193e-01, 7.410376703e-01, 7.627647521e-01, + 7.869450991e-01, 8.145835948e-01, 8.476444412e-01, 8.912175164e-01, + 1.000000000e+00, 0.000000000e+00, 2.305193561e-05, 5.537266463e-05, + 9.245485435e-05, 1.330132332e-04, 1.763701639e-04, 2.220967632e-04, + 2.698934464e-04, 3.195373823e-04, 3.708554146e-04, 4.237085659e-04, + 4.779824786e-04, 5.335811724e-04, 5.904227827e-04, 6.484365446e-04, + 7.075605930e-04, 7.677403191e-04, 8.289271148e-04, 8.910773963e-04, + 9.541518332e-04, 1.018114730e-03, 1.082933522e-03, 1.148578370e-03, + 1.215021812e-03, 1.282238481e-03, 1.350204864e-03, 1.418899101e-03, + 1.488300802e-03, 1.558390906e-03, 1.629151545e-03, 1.700565930e-03, + 1.772618256e-03, 1.845293613e-03, 1.918577907e-03, 1.992457794e-03, + 2.066920620e-03, 2.141954364e-03, 2.217547593e-03, 2.293689415e-03, + 2.370369443e-03, 2.447577757e-03, 2.525304872e-03, 2.603541711e-03, + 2.682279576e-03, 2.761510126e-03, 2.841225351e-03, 2.921417557e-03, + 3.002079341e-03, 3.083203580e-03, 3.164783411e-03, 3.246812217e-03, + 3.329283615e-03, 3.412191444e-03, 3.495529747e-03, 3.579292771e-03, + 3.663474947e-03, 3.748070885e-03, 3.833075366e-03, 3.918483332e-03, + 4.004289878e-03, 4.090490249e-03, 4.177079825e-03, 4.264054125e-03, + 4.351408791e-03, 4.439139591e-03, 4.527242409e-03, 4.615713239e-03, + 4.704548185e-03, 4.793743453e-03, 4.883295347e-03, 4.973200267e-03, + 5.063454704e-03, 5.154055237e-03, 5.244998528e-03, 5.336281320e-03, + 5.427900437e-03, 5.519852774e-03, 5.612135302e-03, 5.704745061e-03, + 5.797679157e-03, 5.890934762e-03, 5.984509112e-03, 6.078399503e-03, + 6.172603289e-03, 6.267117881e-03, 6.361940745e-03, 6.457069402e-03, + 6.552501422e-03, 6.648234424e-03, 6.744266079e-03, 6.840594102e-03, + 6.937216254e-03, 7.034130340e-03, 7.131334207e-03, 7.228825745e-03, + 7.326602883e-03, 7.424663588e-03, 7.523005868e-03, 7.621627764e-03, + 7.720527356e-03, 7.819702758e-03, 7.919152117e-03, 8.018873612e-03, + 8.118865458e-03, 8.219125896e-03, 8.319653201e-03, 8.420445677e-03, + 8.521501656e-03, 8.622819498e-03, 8.724397591e-03, 8.826234350e-03, + 8.928328214e-03, 9.030677649e-03, 9.133281146e-03, 9.236137220e-03, + 9.339244408e-03, 9.442601272e-03, 9.546206395e-03, 9.650058383e-03, + 9.754155861e-03, 9.858497479e-03, 9.963081904e-03, 1.006790782e-02, + 1.017297395e-02, 1.027827900e-02, 1.038382173e-02, 1.048960090e-02, + 1.059561528e-02, 1.070186369e-02, 7.328920314e-01, 7.338950798e-01, + 7.349023549e-01, 7.359139073e-01, 7.369297885e-01, 7.379500512e-01, + 7.389747491e-01, 7.400039368e-01, 7.410376703e-01, 7.420760067e-01, + 7.431190043e-01, 7.441667225e-01, 7.452192224e-01, 7.462765658e-01, + 7.473388164e-01, 7.484060390e-01, 7.494782999e-01, 7.505556671e-01, + 7.516382097e-01, 7.527259988e-01, 7.538191070e-01, 7.549176085e-01, + 7.560215793e-01, 7.571310973e-01, 7.582462421e-01, 7.593670954e-01, + 7.604937406e-01, 7.616262636e-01, 7.627647521e-01, 7.639092961e-01, + 7.650599878e-01, 7.662169221e-01, 7.673801958e-01, 7.685499089e-01, + 7.697261634e-01, 7.709090645e-01, 7.720987200e-01, 7.732952407e-01, + 7.744987406e-01, 7.757093368e-01, 7.769271495e-01, 7.781523027e-01, + 7.793849237e-01, 7.806251437e-01, 7.818730977e-01, 7.831289247e-01, + 7.843927681e-01, 7.856647754e-01, 7.869450991e-01, 7.882338960e-01, + 7.895313284e-01, 7.908375635e-01, 7.921527739e-01, 7.934771383e-01, + 7.948108411e-01, 7.961540731e-01, 7.975070315e-01, 7.988699205e-01, + 8.002429518e-01, 8.016263443e-01, 8.030203251e-01, 8.044251298e-01, + 8.058410026e-01, 8.072681971e-01, 8.087069770e-01, 8.101576160e-01, + 8.116203991e-01, 8.130956224e-01, 8.145835948e-01, 8.160846378e-01, + 8.175990867e-01, 8.191272914e-01, 8.206696173e-01, 8.222264463e-01, + 8.237981776e-01, 8.253852292e-01, 8.269880389e-01, 8.286070659e-01, + 8.302427919e-01, 8.318957231e-01, 8.335663915e-01, 8.352553572e-01, + 8.369632105e-01, 8.386905739e-01, 8.404381048e-01, 8.422064985e-01, + 8.439964910e-01, 8.458088625e-01, 8.476444412e-01, 8.495041079e-01, + 8.513888001e-01, 8.532995179e-01, 8.552373296e-01, 8.572033784e-01, + 8.591988902e-01, 8.612251822e-01, 8.632836724e-01, 8.653758910e-01, + 8.675034929e-01, 8.696682731e-01, 8.718721829e-01, 8.741173506e-01, + 8.764061039e-01, 8.787409977e-01, 8.811248460e-01, 8.835607606e-01, + 8.860521966e-01, 8.886030082e-01, 8.912175164e-01, 8.939005915e-01, + 8.966577567e-01, 8.994953173e-01, 9.024205244e-01, 9.054417870e-01, + 9.085689472e-01, 9.118136479e-01, 9.151898297e-01, 9.187144200e-01, + 9.224083122e-01, 9.262978018e-01, 9.304167668e-01, 9.348101309e-01, + 9.395396669e-01, 9.446944290e-01, 9.504113165e-01, 9.569212379e-01, + 9.646755908e-01, 9.748442279e-01, 1.000000000e+00, +}; +const float dist_icdf_0_6[] = { + 0.000000000e+00, 1.172340652e-04, 4.021646897e-04, 8.271706545e-04, + 1.379870657e-03, 2.052359069e-03, 2.838935565e-03, 3.735208528e-03, + 4.737649774e-03, 5.843341990e-03, 7.049822176e-03, 8.354978198e-03, + 9.756977052e-03, 1.125421317e-02, 1.284527004e-02, 1.452889094e-02, + 1.630395620e-02, 1.816946515e-02, 2.012452166e-02, 2.216832231e-02, + 2.430014665e-02, 2.651934910e-02, 2.882535217e-02, 3.121764067e-02, + 3.369575685e-02, 3.625929617e-02, 3.890790372e-02, 4.164127112e-02, + 4.445913378e-02, 4.736126860e-02, 5.034749195e-02, 5.341765787e-02, + 5.657165654e-02, 5.980941299e-02, 6.313088592e-02, 6.653606673e-02, + 7.002497867e-02, 7.359767614e-02, 7.725424408e-02, 8.099479753e-02, + 8.481948121e-02, 8.872846927e-02, 9.272196506e-02, 9.680020106e-02, + 1.009634388e-01, 1.052119690e-01, 1.095461116e-01, 1.139662159e-01, + 1.184726610e-01, 1.230658561e-01, 1.277462407e-01, 1.325142854e-01, + 1.373704923e-01, 1.423153954e-01, 1.473495619e-01, 1.524735922e-01, + 1.576881214e-01, 1.629938202e-01, 1.683913954e-01, 1.738815916e-01, + 1.794651922e-01, 1.851430207e-01, 1.909159423e-01, 1.967848651e-01, + 2.027507423e-01, 2.088145736e-01, 2.149774072e-01, 2.212403422e-01, + 2.276045306e-01, 2.340711797e-01, 2.406415551e-01, 2.473169831e-01, + 2.540988542e-01, 2.609886263e-01, 2.679878281e-01, 2.750980633e-01, + 2.823210147e-01, 2.896584487e-01, 2.971122208e-01, 3.046842801e-01, + 3.123766762e-01, 3.201915649e-01, 3.281312158e-01, 3.361980196e-01, + 3.443944968e-01, 3.527233069e-01, 3.611872585e-01, 3.697893208e-01, + 3.785326358e-01, 3.874205322e-01, 3.964565406e-01, 4.056444108e-01, + 4.149881302e-01, 4.244919458e-01, 4.341603875e-01, 4.439982951e-01, + 4.540108486e-01, 4.642036030e-01, 4.745825269e-01, 4.851540477e-01, + 4.959251028e-01, 5.069031989e-01, 5.180964806e-01, 5.295138106e-01, + 5.411648636e-01, 5.530602362e-01, 5.652115788e-01, 5.776317520e-01, + 5.903350160e-01, 6.033372597e-01, 6.166562829e-01, 6.303121455e-01, + 6.443276052e-01, 6.587286739e-01, 6.735453343e-01, 6.888124785e-01, + 7.045711594e-01, 7.208702962e-01, 7.377690553e-01, 7.553402709e-01, + 7.736755330e-01, 7.928930756e-01, 8.131506561e-01, 8.346680215e-01, + 8.577696864e-01, 8.829770436e-01, 9.112476744e-01, 9.448477179e-01, + 1.000000000e+00, 0.000000000e+00, 5.694358136e-07, 1.953261497e-06, + 4.016983988e-06, 6.700024794e-06, 9.963453256e-06, 1.377896926e-05, + 1.812455522e-05, 2.298231823e-05, 2.833726704e-05, 3.417655444e-05, + 4.048897702e-05, 4.726462846e-05, 5.449464977e-05, 6.217104388e-05, + 7.028653437e-05, 7.883445544e-05, 8.780866481e-05, 9.720347348e-05, + 1.070135884e-04, 1.172340652e-04, 1.278602684e-04, 1.388878385e-04, + 1.503126630e-04, 1.621308526e-04, 1.743387201e-04, 1.869327617e-04, + 1.999096416e-04, 2.132661780e-04, 2.269993301e-04, 2.411061878e-04, + 2.555839617e-04, 2.704299740e-04, 2.856416513e-04, 3.012165168e-04, + 3.171521844e-04, 3.334463528e-04, 3.500968001e-04, 3.671013791e-04, + 3.844580125e-04, 4.021646897e-04, 4.202194622e-04, 4.386204407e-04, + 4.573657920e-04, 4.764537355e-04, 4.958825413e-04, 5.156505272e-04, + 5.357560563e-04, 5.561975354e-04, 5.769734122e-04, 5.980821741e-04, + 6.195223462e-04, 6.412924893e-04, 6.633911989e-04, 6.858171036e-04, + 7.085688635e-04, 7.316451690e-04, 7.550447398e-04, 7.787663236e-04, + 8.028086949e-04, 8.271706545e-04, 8.518510276e-04, 8.768486639e-04, + 9.021624361e-04, 9.277912394e-04, 9.537339902e-04, 9.799896263e-04, + 1.006557105e-03, 1.033435404e-03, 1.060623519e-03, 1.088120464e-03, + 1.115925272e-03, 1.144036990e-03, 1.172454685e-03, 1.201177438e-03, + 1.230204347e-03, 1.259534523e-03, 1.289167094e-03, 1.319101201e-03, + 1.349335999e-03, 1.379870657e-03, 1.410704356e-03, 1.441836291e-03, + 1.473265668e-03, 1.504991707e-03, 1.537013637e-03, 1.569330702e-03, + 1.601942153e-03, 1.634847256e-03, 1.668045285e-03, 1.701535524e-03, + 1.735317268e-03, 1.769389823e-03, 1.803752503e-03, 1.838404631e-03, + 1.873345540e-03, 1.908574572e-03, 1.944091078e-03, 1.979894417e-03, + 2.015983955e-03, 2.052359069e-03, 2.089019141e-03, 2.125963564e-03, + 2.163191736e-03, 2.200703063e-03, 2.238496959e-03, 2.276572844e-03, + 2.314930147e-03, 2.353568301e-03, 2.392486749e-03, 2.431684938e-03, + 2.471162322e-03, 2.510918362e-03, 2.550952525e-03, 2.591264284e-03, + 2.631853117e-03, 2.672718510e-03, 2.713859952e-03, 2.755276940e-03, + 2.796968976e-03, 2.838935565e-03, 2.881176221e-03, 2.923690462e-03, + 2.966477808e-03, 3.009537789e-03, 3.052869937e-03, 3.096473790e-03, + 3.140348888e-03, 3.184494781e-03, 8.049105078e-01, 8.059301109e-01, + 8.069526314e-01, 8.079780978e-01, 8.090065392e-01, 8.100379853e-01, + 8.110724662e-01, 8.121100127e-01, 8.131506561e-01, 8.141944284e-01, + 8.152413620e-01, 8.162914902e-01, 8.173448468e-01, 8.184014662e-01, + 8.194613836e-01, 8.205246349e-01, 8.215912567e-01, 8.226612862e-01, + 8.237347617e-01, 8.248117219e-01, 8.258922067e-01, 8.269762565e-01, + 8.280639127e-01, 8.291552178e-01, 8.302502149e-01, 8.313489481e-01, + 8.324514627e-01, 8.335578047e-01, 8.346680215e-01, 8.357821612e-01, + 8.369002734e-01, 8.380224085e-01, 8.391486183e-01, 8.402789558e-01, + 8.414134752e-01, 8.425522321e-01, 8.436952834e-01, 8.448426874e-01, + 8.459945041e-01, 8.471507947e-01, 8.483116222e-01, 8.494770510e-01, + 8.506471474e-01, 8.518219795e-01, 8.530016170e-01, 8.541861317e-01, + 8.553755973e-01, 8.565700896e-01, 8.577696864e-01, 8.589744680e-01, + 8.601845168e-01, 8.613999175e-01, 8.626207578e-01, 8.638471275e-01, + 8.650791195e-01, 8.663168294e-01, 8.675603558e-01, 8.688098006e-01, + 8.700652688e-01, 8.713268689e-01, 8.725947131e-01, 8.738689172e-01, + 8.751496011e-01, 8.764368888e-01, 8.777309086e-01, 8.790317936e-01, + 8.803396816e-01, 8.816547155e-01, 8.829770436e-01, 8.843068198e-01, + 8.856442042e-01, 8.869893628e-01, 8.883424688e-01, 8.897037022e-01, + 8.910732504e-01, 8.924513091e-01, 8.938380822e-01, 8.952337828e-01, + 8.966386333e-01, 8.980528667e-01, 8.994767266e-01, 9.009104685e-01, + 9.023543601e-01, 9.038086828e-01, 9.052737321e-01, 9.067498191e-01, + 9.082372715e-01, 9.097364349e-01, 9.112476744e-01, 9.127713758e-01, + 9.143079480e-01, 9.158578245e-01, 9.174214658e-01, 9.189993618e-01, + 9.205920347e-01, 9.222000421e-01, 9.238239805e-01, 9.254644892e-01, + 9.271222552e-01, 9.287980184e-01, 9.304925774e-01, 9.322067966e-01, + 9.339416143e-01, 9.356980523e-01, 9.374772266e-01, 9.392803607e-01, + 9.411088012e-01, 9.429640363e-01, 9.448477179e-01, 9.467616896e-01, + 9.487080196e-01, 9.506890424e-01, 9.527074116e-01, 9.547661657e-01, + 9.568688141e-01, 9.590194500e-01, 9.612229003e-01, 9.634849308e-01, + 9.658125334e-01, 9.682143389e-01, 9.707012325e-01, 9.732873098e-01, + 9.759914408e-01, 9.788400043e-01, 9.818721051e-01, 9.851508371e-01, + 9.887926216e-01, 9.930744994e-01, 1.000000000e+00, +}; +const float dist_icdf_0_7[] = { + 0.000000000e+00, 4.586558125e-06, 2.646347167e-05, 7.377292896e-05, + 1.526888560e-04, 2.684396949e-04, 4.256561038e-04, 6.285447692e-04, + 8.809908037e-04, 1.186624293e-03, 1.548866513e-03, 1.970963608e-03, + 2.456012062e-03, 3.006978519e-03, 3.626715580e-03, 4.317974644e-03, + 5.083416509e-03, 5.925620257e-03, 6.847090789e-03, 7.850265279e-03, + 8.937518763e-03, 1.011116901e-02, 1.137348080e-02, 1.272666973e-02, + 1.417290556e-02, 1.571431527e-02, 1.735298574e-02, 1.909096624e-02, + 2.093027063e-02, 2.287287942e-02, 2.492074165e-02, 2.707577653e-02, + 2.933987510e-02, 3.171490163e-02, 3.420269500e-02, 3.680506996e-02, + 3.952381827e-02, 4.236070985e-02, 4.531749375e-02, 4.839589916e-02, + 5.159763631e-02, 5.492439731e-02, 5.837785700e-02, 6.195967369e-02, + 6.567148991e-02, 6.951493309e-02, 7.349161627e-02, 7.760313868e-02, + 8.185108643e-02, 8.623703301e-02, 9.076253994e-02, 9.542915726e-02, + 1.002384241e-01, 1.051918691e-01, 1.102910112e-01, 1.155373597e-01, + 1.209324150e-01, 1.264776690e-01, 1.321746058e-01, 1.380247017e-01, + 1.440294259e-01, 1.501902410e-01, 1.565086032e-01, 1.629859632e-01, + 1.696237661e-01, 1.764234520e-01, 1.833864566e-01, 1.905142116e-01, + 1.978081451e-01, 2.052696818e-01, 2.129002440e-01, 2.207012515e-01, + 2.286741225e-01, 2.368202738e-01, 2.451411216e-01, 2.536380817e-01, + 2.623125702e-01, 2.711660042e-01, 2.801998019e-01, 2.894153839e-01, + 2.988141733e-01, 3.083975965e-01, 3.181670841e-01, 3.281240715e-01, + 3.382699996e-01, 3.486063158e-01, 3.591344750e-01, 3.698559403e-01, + 3.807721844e-01, 3.918846903e-01, 4.031949531e-01, 4.147044806e-01, + 4.264147957e-01, 4.383274371e-01, 4.504439617e-01, 4.627659460e-01, + 4.752949890e-01, 4.880327136e-01, 5.009807703e-01, 5.141408395e-01, + 5.275146350e-01, 5.411039080e-01, 5.549104513e-01, 5.689361044e-01, + 5.831827591e-01, 5.976523660e-01, 6.123469423e-01, 6.272685811e-01, + 6.424194615e-01, 6.578018618e-01, 6.734181744e-01, 6.892709246e-01, + 7.053627930e-01, 7.216966442e-01, 7.382755619e-01, 7.551028944e-01, + 7.721823141e-01, 7.895178952e-01, 8.071142202e-01, 8.249765284e-01, + 8.431109289e-01, 8.615247198e-01, 8.802268893e-01, 8.992289526e-01, + 9.185464667e-01, 9.382021046e-01, 9.582330668e-01, 9.787153834e-01, + 1.000000000e+00, 0.000000000e+00, 2.354013782e-09, 1.358215835e-08, + 3.786332271e-08, 7.836616211e-08, 1.377740100e-07, 2.184633114e-07, + 3.225928083e-07, 4.521560734e-07, 6.090156427e-07, 7.949267127e-07, + 1.011554405e-06, 1.260486813e-06, 1.543245157e-06, 1.861291862e-06, + 2.216037130e-06, 2.608844355e-06, 3.041034659e-06, 3.513890735e-06, + 4.028660139e-06, 4.586558125e-06, 5.188770128e-06, 5.836453932e-06, + 6.530741593e-06, 7.272741140e-06, 8.063538102e-06, 8.904196874e-06, + 9.795761953e-06, 1.073925905e-05, 1.173569612e-05, 1.278606426e-05, + 1.389133859e-05, 1.505247901e-05, 1.627043094e-05, 1.754612596e-05, + 1.888048240e-05, 2.027440599e-05, 2.172879030e-05, 2.324451729e-05, + 2.482245773e-05, 2.646347167e-05, 2.816840880e-05, 2.993810888e-05, + 3.177340205e-05, 3.367510918e-05, 3.564404219e-05, 3.768100434e-05, + 3.978679053e-05, 4.196218754e-05, 4.420797430e-05, 4.652492213e-05, + 4.891379495e-05, 5.137534953e-05, 5.391033566e-05, 5.651949637e-05, + 5.920356811e-05, 6.196328091e-05, 6.479935860e-05, 6.771251891e-05, + 7.070347367e-05, 7.377292896e-05, 7.692158522e-05, 8.015013742e-05, + 8.345927518e-05, 8.684968289e-05, 9.032203983e-05, 9.387702031e-05, + 9.751529377e-05, 1.012375249e-04, 1.050443736e-04, 1.089364954e-04, + 1.129145413e-04, 1.169791579e-04, 1.211309875e-04, 1.253706683e-04, + 1.296988343e-04, 1.341161155e-04, 1.386231380e-04, 1.432205239e-04, + 1.479088917e-04, 1.526888560e-04, 1.575610279e-04, 1.625260147e-04, + 1.675844204e-04, 1.727368454e-04, 1.779838867e-04, 1.833261381e-04, + 1.887641899e-04, 1.942986293e-04, 1.999300404e-04, 2.056590040e-04, + 2.114860979e-04, 2.174118971e-04, 2.234369732e-04, 2.295618953e-04, + 2.357872294e-04, 2.421135386e-04, 2.485413834e-04, 2.550713215e-04, + 2.617039079e-04, 2.684396949e-04, 2.752792321e-04, 2.822230667e-04, + 2.892717432e-04, 2.964258037e-04, 3.036857878e-04, 3.110522326e-04, + 3.185256728e-04, 3.261066408e-04, 3.337956666e-04, 3.415932780e-04, + 3.495000003e-04, 3.575163568e-04, 3.656428685e-04, 3.738800540e-04, + 3.822284302e-04, 3.906885114e-04, 3.992608101e-04, 4.079458365e-04, + 4.167440990e-04, 4.256561038e-04, 4.346823552e-04, 4.438233554e-04, + 4.530796047e-04, 4.624516015e-04, 4.719398424e-04, 4.815448219e-04, + 4.912670327e-04, 5.011069658e-04, 8.727107489e-01, 8.736476726e-01, + 8.745853344e-01, 8.755237357e-01, 8.764628781e-01, 8.774027631e-01, + 8.783433923e-01, 8.792847671e-01, 8.802268893e-01, 8.811697604e-01, + 8.821133821e-01, 8.830577560e-01, 8.840028839e-01, 8.849487674e-01, + 8.858954083e-01, 8.868428083e-01, 8.877909694e-01, 8.887398932e-01, + 8.896895816e-01, 8.906400366e-01, 8.915912600e-01, 8.925432539e-01, + 8.934960201e-01, 8.944495607e-01, 8.954038777e-01, 8.963589733e-01, + 8.973148495e-01, 8.982715086e-01, 8.992289526e-01, 9.001871839e-01, + 9.011462047e-01, 9.021060174e-01, 9.030666242e-01, 9.040280277e-01, + 9.049902302e-01, 9.059532343e-01, 9.069170426e-01, 9.078816575e-01, + 9.088470819e-01, 9.098133183e-01, 9.107803696e-01, 9.117482386e-01, + 9.127169282e-01, 9.136864412e-01, 9.146567808e-01, 9.156279499e-01, + 9.165999518e-01, 9.175727896e-01, 9.185464667e-01, 9.195209864e-01, + 9.204963521e-01, 9.214725674e-01, 9.224496359e-01, 9.234275613e-01, + 9.244063473e-01, 9.253859980e-01, 9.263665172e-01, 9.273479090e-01, + 9.283301777e-01, 9.293133276e-01, 9.302973631e-01, 9.312822888e-01, + 9.322681093e-01, 9.332548295e-01, 9.342424543e-01, 9.352309889e-01, + 9.362204385e-01, 9.372108085e-01, 9.382021046e-01, 9.391943325e-01, + 9.401874981e-01, 9.411816076e-01, 9.421766675e-01, 9.431726841e-01, + 9.441696645e-01, 9.451676156e-01, 9.461665447e-01, 9.471664595e-01, + 9.481673677e-01, 9.491692776e-01, 9.501721977e-01, 9.511761367e-01, + 9.521811039e-01, 9.531871089e-01, 9.541941617e-01, 9.552022727e-01, + 9.562114528e-01, 9.572217135e-01, 9.582330668e-01, 9.592455251e-01, + 9.602591016e-01, 9.612738103e-01, 9.622896657e-01, 9.633066832e-01, + 9.643248790e-01, 9.653442703e-01, 9.663648754e-01, 9.673867136e-01, + 9.684098054e-01, 9.694341727e-01, 9.704598389e-01, 9.714868291e-01, + 9.725151702e-01, 9.735448912e-01, 9.745760231e-01, 9.756085999e-01, + 9.766426582e-01, 9.776782381e-01, 9.787153834e-01, 9.797541424e-01, + 9.807945682e-01, 9.818367200e-01, 9.828806638e-01, 9.839264741e-01, + 9.849742351e-01, 9.860240431e-01, 9.870760092e-01, 9.881302632e-01, + 9.891869585e-01, 9.902462796e-01, 9.913084522e-01, 9.923737588e-01, + 9.934425643e-01, 9.945153569e-01, 9.955928249e-01, 9.966760129e-01, + 9.977667007e-01, 9.988686588e-01, 1.000000000e+00, +}; +const float dist_icdf_0_8[] = { + 0.000000000e+00, 2.499558898e-16, 5.522325275e-14, 1.298450393e-12, + 1.220058326e-11, 6.935268843e-11, 2.868692324e-10, 9.528604901e-10, + 2.695499165e-09, 6.745083776e-09, 1.532222751e-08, 3.218590475e-08, + 6.337858886e-08, 1.182091278e-07, 2.105173420e-07, 3.602675959e-07, + 5.955218045e-07, 9.548454854e-07, 1.490203567e-06, 2.270405709e-06, + 3.385163899e-06, 4.949828024e-06, 7.110868034e-06, 1.005217413e-05, + 1.400224922e-05, 1.924237054e-05, 2.611580003e-05, 3.503812543e-05, + 4.650881662e-05, 6.112408374e-05, 7.959112573e-05, 1.027438597e-04, + 1.315602227e-04, 1.671811392e-04, 2.109312467e-04, 2.643414733e-04, + 3.291735600e-04, 4.074466168e-04, 5.014658015e-04, 6.138532050e-04, + 7.475810194e-04, 9.060070596e-04, 1.092912699e-03, 1.312543263e-03, + 1.569650919e-03, 1.869540068e-03, 2.218115222e-03, 2.621931346e-03, + 3.088246559e-03, 3.625077110e-03, 4.241254441e-03, 4.946484128e-03, + 5.751406407e-03, 6.667657933e-03, 7.707934304e-03, 8.886052824e-03, + 1.021701481e-02, 1.171706669e-02, 1.340375891e-02, 1.529600160e-02, + 1.741411574e-02, 1.977987824e-02, 2.241655952e-02, 2.534895137e-02, + 2.860338336e-02, 3.220772502e-02, 3.619137160e-02, 4.058521024e-02, + 4.542156369e-02, 5.073410821e-02, 5.655776215e-02, 6.292854176e-02, + 6.988338039e-02, 7.745990758e-02, 8.569618437e-02, 9.463039168e-02, + 1.043004687e-01, 1.147436990e-01, 1.259962430e-01, 1.380926158e-01, + 1.510651111e-01, 1.649431741e-01, 1.797527258e-01, 1.955154463e-01, + 2.122480231e-01, 2.299613772e-01, 2.486598786e-01, 2.683405666e-01, + 2.889923945e-01, 3.105955182e-01, 3.331206517e-01, 3.565285139e-01, + 3.807693922e-01, 4.057828473e-01, 4.314975858e-01, 4.578315218e-01, + 4.846920480e-01, 5.119765315e-01, 5.395730457e-01, 5.673613399e-01, + 5.952140449e-01, 6.229981014e-01, 6.505763917e-01, 6.778095468e-01, + 7.045578915e-01, 7.306834868e-01, 7.560522194e-01, 7.805358885e-01, + 8.040142364e-01, 8.263768698e-01, 8.475250246e-01, 8.673731289e-01, + 8.858501289e-01, 9.029005494e-01, 9.184852738e-01, 9.325820367e-01, + 9.451856350e-01, 9.563078781e-01, 9.659773035e-01, 9.742387033e-01, + 9.811525136e-01, 9.867941361e-01, 9.912532814e-01, 9.946334519e-01, + 9.970517424e-01, 9.986392589e-01, 9.995427675e-01, 9.999291847e-01, + 1.000000000e+00, 0.000000000e+00, 1.845636753e-26, 4.077602051e-24, + 9.587562705e-23, 9.008727455e-22, 5.120898362e-21, 2.118199331e-20, + 7.035778765e-20, 1.990316106e-19, 4.980468584e-19, 1.131370278e-18, + 2.376558914e-18, 4.679779986e-18, 8.728385052e-18, 1.554428621e-17, + 2.660162358e-17, 4.397245029e-17, 7.050439418e-17, 1.100344848e-16, + 1.676435599e-16, 2.499558898e-16, 3.654888753e-16, 5.250578960e-16, + 7.422415969e-16, 1.033913117e-15, 1.420842969e-15, 1.928379500e-15, + 2.587213046e-15, 3.434230123e-15, 4.513464189e-15, 5.877149700e-15, + 7.586886413e-15, 9.714921055e-15, 1.234555368e-14, 1.557667628e-14, + 1.952145128e-14, 2.431013795e-14, 3.009207471e-14, 3.703782571e-14, + 4.534150010e-14, 5.522325275e-14, 6.693197511e-14, 8.074818544e-14, + 9.698712749e-14, 1.160020871e-13, 1.381879364e-13, 1.639849149e-13, + 1.938826584e-13, 2.284244849e-13, 2.682119478e-13, 3.139096681e-13, + 3.662504549e-13, 4.260407252e-13, 4.941662353e-13, 5.715981332e-13, + 6.593993446e-13, 7.587313037e-13, 8.708610405e-13, 9.971686360e-13, + 1.139155059e-12, 1.298450393e-12, 1.476822473e-12, 1.676185932e-12, + 1.898611688e-12, 2.146336865e-12, 2.421775176e-12, 2.727527773e-12, + 3.066394581e-12, 3.441386127e-12, 3.855735883e-12, 4.312913128e-12, + 4.816636353e-12, 5.370887215e-12, 5.979925059e-12, 6.648302023e-12, + 7.380878736e-12, 8.182840630e-12, 9.059714874e-12, 1.001738796e-11, + 1.106212392e-11, 1.220058326e-11, 1.343984253e-11, 1.478741462e-11, + 1.625126981e-11, 1.783985749e-11, 1.956212869e-11, 2.142755932e-11, + 2.344617426e-11, 2.562857223e-11, 2.798595144e-11, 3.053013611e-11, + 3.327360388e-11, 3.622951398e-11, 3.941173642e-11, 4.283488203e-11, + 4.651433334e-11, 5.046627656e-11, 5.470773443e-11, 5.925660002e-11, + 6.413167158e-11, 6.935268843e-11, 7.494036778e-11, 8.091644273e-11, + 8.730370125e-11, 9.412602628e-11, 1.014084370e-10, 1.091771310e-10, + 1.174595280e-10, 1.262843144e-10, 1.356814893e-10, 1.456824110e-10, + 1.563198462e-10, 1.676280186e-10, 1.796426607e-10, 1.924010648e-10, + 2.059421374e-10, 2.203064535e-10, 2.355363127e-10, 2.516757968e-10, + 2.687708286e-10, 2.868692324e-10, 3.060207954e-10, 3.262773313e-10, + 3.476927447e-10, 3.703230975e-10, 3.942266766e-10, 4.194640630e-10, + 4.460982029e-10, 4.741944800e-10, 9.896052010e-01, 9.898208991e-01, + 9.900338024e-01, 9.902439243e-01, 9.904512781e-01, 9.906558772e-01, + 9.908577350e-01, 9.910568652e-01, 9.912532814e-01, 9.914469974e-01, + 9.916380269e-01, 9.918263840e-01, 9.920120825e-01, 9.921951366e-01, + 9.923755605e-01, 9.925533683e-01, 9.927285745e-01, 9.929011934e-01, + 9.930712396e-01, 9.932387276e-01, 9.934036721e-01, 9.935660879e-01, + 9.937259899e-01, 9.938833928e-01, 9.940383119e-01, 9.941907621e-01, + 9.943407586e-01, 9.944883168e-01, 9.946334519e-01, 9.947761795e-01, + 9.949165150e-01, 9.950544741e-01, 9.951900724e-01, 9.953233258e-01, + 9.954542502e-01, 9.955828614e-01, 9.957091756e-01, 9.958332089e-01, + 9.959549775e-01, 9.960744978e-01, 9.961917862e-01, 9.963068591e-01, + 9.964197331e-01, 9.965304250e-01, 9.966389515e-01, 9.967453295e-01, + 9.968495760e-01, 9.969517079e-01, 9.970517424e-01, 9.971496968e-01, + 9.972455885e-01, 9.973394348e-01, 9.974312532e-01, 9.975210615e-01, + 9.976088773e-01, 9.976947184e-01, 9.977786029e-01, 9.978605486e-01, + 9.979405738e-01, 9.980186967e-01, 9.980949355e-01, 9.981693088e-01, + 9.982418352e-01, 9.983125332e-01, 9.983814216e-01, 9.984485193e-01, + 9.985138454e-01, 9.985774188e-01, 9.986392589e-01, 9.986993850e-01, + 9.987578165e-01, 9.988145730e-01, 9.988696742e-01, 9.989231400e-01, + 9.989749903e-01, 9.990252451e-01, 9.990739248e-01, 9.991210496e-01, + 9.991666401e-01, 9.992107169e-01, 9.992533007e-01, 9.992944124e-01, + 9.993340733e-01, 9.993723043e-01, 9.994091270e-01, 9.994445629e-01, + 9.994786337e-01, 9.995113612e-01, 9.995427675e-01, 9.995728748e-01, + 9.996017055e-01, 9.996292823e-01, 9.996556279e-01, 9.996807652e-01, + 9.997047176e-01, 9.997275084e-01, 9.997491612e-01, 9.997696999e-01, + 9.997891487e-01, 9.998075318e-01, 9.998248740e-01, 9.998412000e-01, + 9.998565351e-01, 9.998709047e-01, 9.998843347e-01, 9.998968510e-01, + 9.999084802e-01, 9.999192490e-01, 9.999291847e-01, 9.999383149e-01, + 9.999466675e-01, 9.999542712e-01, 9.999611549e-01, 9.999673481e-01, + 9.999728809e-01, 9.999777842e-01, 9.999820893e-01, 9.999858284e-01, + 9.999890345e-01, 9.999917418e-01, 9.999939851e-01, 9.999958008e-01, + 9.999972267e-01, 9.999983021e-01, 9.999990686e-01, 9.999995706e-01, + 9.999998558e-01, 9.999999777e-01, 1.000000000e+00, +}; +const float dist_icdf_1_0[] = { + 0.000000000e+00, 1.100527359e-01, 1.135849643e-01, 1.158490613e-01, + 1.175626723e-01, 1.189624288e-01, 1.201575147e-01, 1.212078128e-01, + 1.221499076e-01, 1.230078763e-01, 1.237984539e-01, 1.245337702e-01, + 1.252229140e-01, 1.258728819e-01, 1.264891816e-01, 1.270762321e-01, + 1.276376359e-01, 1.281763718e-01, 1.286949333e-01, 1.291954299e-01, + 1.296796639e-01, 1.301491883e-01, 1.306053521e-01, 1.310493348e-01, + 1.314821751e-01, 1.319047927e-01, 1.323180067e-01, 1.327225501e-01, + 1.331190822e-01, 1.335081984e-01, 1.338904389e-01, 1.342662957e-01, + 1.346362186e-01, 1.350006200e-01, 1.353598799e-01, 1.357143489e-01, + 1.360643520e-01, 1.364101914e-01, 1.367521485e-01, 1.370904864e-01, + 1.374254520e-01, 1.377572771e-01, 1.380861802e-01, 1.384123682e-01, + 1.387360366e-01, 1.390573717e-01, 1.393765506e-01, 1.396937426e-01, + 1.400091099e-01, 1.403228081e-01, 1.406349872e-01, 1.409457916e-01, + 1.412553615e-01, 1.415638327e-01, 1.418713372e-01, 1.421780039e-01, + 1.424839590e-01, 1.427893260e-01, 1.430942265e-01, 1.433987802e-01, + 1.437031058e-01, 1.440073206e-01, 1.443115413e-01, 1.446158843e-01, + 1.449204659e-01, 1.452254024e-01, 1.455308111e-01, 1.458368096e-01, + 1.461435172e-01, 1.464510544e-01, 1.467595435e-01, 1.470691093e-01, + 1.473798788e-01, 1.476919822e-01, 1.480055529e-01, 1.483207281e-01, + 1.486376491e-01, 1.489564623e-01, 1.492773187e-01, 1.496003756e-01, + 1.499257965e-01, 1.502537519e-01, 1.505844201e-01, 1.509179880e-01, + 1.512546519e-01, 1.515946186e-01, 1.519381062e-01, 1.522853455e-01, + 1.526365815e-01, 1.529920742e-01, 1.533521010e-01, 1.537169582e-01, + 1.540869633e-01, 1.544624570e-01, 1.548438064e-01, 1.552314079e-01, + 1.556256908e-01, 1.560271215e-01, 1.564362082e-01, 1.568535065e-01, + 1.572796262e-01, 1.577152386e-01, 1.581610858e-01, 1.586179916e-01, + 1.590868744e-01, 1.595687633e-01, 1.600648166e-01, 1.605763456e-01, + 1.611048438e-01, 1.616520232e-01, 1.622198601e-01, 1.628106539e-01, + 1.634271036e-01, 1.640724077e-01, 1.647503988e-01, 1.654657259e-01, + 1.662241093e-01, 1.670327028e-01, 1.679006264e-01, 1.688397728e-01, + 1.698660805e-01, 1.710016410e-01, 1.722784021e-01, 1.737451946e-01, + 1.754824989e-01, 1.776382869e-01, 1.805367416e-01, 1.851768742e-01, + 1.000000000e+00, 0.000000000e+00, 9.798423805e-02, 1.004320032e-01, + 1.019449101e-01, 1.030587399e-01, 1.039476089e-01, 1.046910248e-01, + 1.053322308e-01, 1.058974588e-01, 1.064038644e-01, 1.068633053e-01, + 1.072843317e-01, 1.076733195e-01, 1.080351549e-01, 1.083736678e-01, + 1.086919180e-01, 1.089923902e-01, 1.092771307e-01, 1.095478457e-01, + 1.098059729e-01, 1.100527359e-01, 1.102891848e-01, 1.105162280e-01, + 1.107346564e-01, 1.109451635e-01, 1.111483606e-01, 1.113447894e-01, + 1.115349324e-01, 1.117192212e-01, 1.118980437e-01, 1.120717494e-01, + 1.122406548e-01, 1.124050474e-01, 1.125651888e-01, 1.127213183e-01, + 1.128736549e-01, 1.130224000e-01, 1.131677387e-01, 1.133098421e-01, + 1.134488685e-01, 1.135849643e-01, 1.137182656e-01, 1.138488993e-01, + 1.139769832e-01, 1.141026276e-01, 1.142259355e-01, 1.143470034e-01, + 1.144659219e-01, 1.145827759e-01, 1.146976455e-01, 1.148106058e-01, + 1.149217279e-01, 1.150310788e-01, 1.151387218e-01, 1.152447168e-01, + 1.153491206e-01, 1.154519870e-01, 1.155533669e-01, 1.156533089e-01, + 1.157518591e-01, 1.158490613e-01, 1.159449574e-01, 1.160395870e-01, + 1.161329883e-01, 1.162251974e-01, 1.163162491e-01, 1.164061763e-01, + 1.164950108e-01, 1.165827830e-01, 1.166695218e-01, 1.167552551e-01, + 1.168400096e-01, 1.169238110e-01, 1.170066838e-01, 1.170886518e-01, + 1.171697376e-01, 1.172499632e-01, 1.173293496e-01, 1.174079170e-01, + 1.174856849e-01, 1.175626723e-01, 1.176388971e-01, 1.177143771e-01, + 1.177891289e-01, 1.178631690e-01, 1.179365131e-01, 1.180091764e-01, + 1.180811737e-01, 1.181525191e-01, 1.182232265e-01, 1.182933092e-01, + 1.183627801e-01, 1.184316517e-01, 1.184999361e-01, 1.185676451e-01, + 1.186347900e-01, 1.187013818e-01, 1.187674314e-01, 1.188329491e-01, + 1.188979450e-01, 1.189624288e-01, 1.190264102e-01, 1.190898983e-01, + 1.191529022e-01, 1.192154306e-01, 1.192774921e-01, 1.193390948e-01, + 1.194002468e-01, 1.194609560e-01, 1.195212300e-01, 1.195810762e-01, + 1.196405019e-01, 1.196995141e-01, 1.197581196e-01, 1.198163252e-01, + 1.198741374e-01, 1.199315626e-01, 1.199886069e-01, 1.200452765e-01, + 1.201015771e-01, 1.201575147e-01, 1.202130948e-01, 1.202683230e-01, + 1.203232045e-01, 1.203777446e-01, 1.204319486e-01, 1.204858213e-01, + 1.205393676e-01, 1.205925924e-01, 1.717481254e-01, 1.718128906e-01, + 1.718780767e-01, 1.719436901e-01, 1.720097375e-01, 1.720762254e-01, + 1.721431608e-01, 1.722105506e-01, 1.722784021e-01, 1.723467225e-01, + 1.724155194e-01, 1.724848006e-01, 1.725545739e-01, 1.726248475e-01, + 1.726956296e-01, 1.727669288e-01, 1.728387539e-01, 1.729111139e-01, + 1.729840178e-01, 1.730574753e-01, 1.731314960e-01, 1.732060899e-01, + 1.732812673e-01, 1.733570386e-01, 1.734334147e-01, 1.735104068e-01, + 1.735880262e-01, 1.736662848e-01, 1.737451946e-01, 1.738247681e-01, + 1.739050182e-01, 1.739859581e-01, 1.740676014e-01, 1.741499620e-01, + 1.742330546e-01, 1.743168940e-01, 1.744014955e-01, 1.744868750e-01, + 1.745730490e-01, 1.746600343e-01, 1.747478484e-01, 1.748365094e-01, + 1.749260359e-01, 1.750164471e-01, 1.751077631e-01, 1.752000046e-01, + 1.752931928e-01, 1.753873499e-01, 1.754824989e-01, 1.755786636e-01, + 1.756758686e-01, 1.757741395e-01, 1.758735029e-01, 1.759739863e-01, + 1.760756185e-01, 1.761784293e-01, 1.762824496e-01, 1.763877118e-01, + 1.764942494e-01, 1.766020974e-01, 1.767112923e-01, 1.768218722e-01, + 1.769338769e-01, 1.770473478e-01, 1.771623284e-01, 1.772788639e-01, + 1.773970020e-01, 1.775167923e-01, 1.776382869e-01, 1.777615407e-01, + 1.778866109e-01, 1.780135579e-01, 1.781424451e-01, 1.782733394e-01, + 1.784063110e-01, 1.785414342e-01, 1.786787872e-01, 1.788184528e-01, + 1.789605185e-01, 1.791050769e-01, 1.792522264e-01, 1.794020711e-01, + 1.795547219e-01, 1.797102967e-01, 1.798689213e-01, 1.800307296e-01, + 1.801958650e-01, 1.803644808e-01, 1.805367416e-01, 1.807128238e-01, + 1.808929175e-01, 1.810772274e-01, 1.812659748e-01, 1.814593989e-01, + 1.816577594e-01, 1.818613385e-01, 1.820704438e-01, 1.822854116e-01, + 1.825066102e-01, 1.827344445e-01, 1.829693608e-01, 1.832118530e-01, + 1.834624695e-01, 1.837218213e-01, 1.839905927e-01, 1.842695530e-01, + 1.845595714e-01, 1.848616356e-01, 1.851768742e-01, 1.855065851e-01, + 1.858522715e-01, 1.862156885e-01, 1.865989021e-01, 1.870043692e-01, + 1.874350429e-01, 1.878945173e-01, 1.883872296e-01, 1.889187485e-01, + 1.894961988e-01, 1.901289070e-01, 1.908294234e-01, 1.916152190e-01, + 1.925116803e-01, 1.935578145e-01, 1.948182966e-01, 1.964128743e-01, + 1.986061731e-01, 2.022235068e-01, 1.000000000e+00, +}; +const float dist_icdf_1_1[] = { + 0.000000000e+00, 1.149786663e-01, 1.284674249e-01, 1.374687029e-01, + 1.444580818e-01, 1.502765114e-01, 1.553196690e-01, 1.598078010e-01, + 1.638770833e-01, 1.676180425e-01, 1.710941509e-01, 1.743517684e-01, + 1.774258719e-01, 1.803435550e-01, 1.831262690e-01, 1.857913146e-01, + 1.883528673e-01, 1.908227023e-01, 1.932107187e-01, 1.955253276e-01, + 1.977737430e-01, 1.999622058e-01, 2.020961558e-01, 2.041803684e-01, + 2.062190622e-01, 2.082159865e-01, 2.101744909e-01, 2.120975841e-01, + 2.139879804e-01, 2.158481403e-01, 2.176803032e-01, 2.194865152e-01, + 2.212686533e-01, 2.230284454e-01, 2.247674877e-01, 2.264872595e-01, + 2.281891366e-01, 2.298744020e-01, 2.315442563e-01, 2.331998261e-01, + 2.348421719e-01, 2.364722943e-01, 2.380911407e-01, 2.396996104e-01, + 2.412985591e-01, 2.428888038e-01, 2.444711263e-01, 2.460462770e-01, + 2.476149778e-01, 2.491779255e-01, 2.507357941e-01, 2.522892374e-01, + 2.538388918e-01, 2.553853777e-01, 2.569293019e-01, 2.584712598e-01, + 2.600118365e-01, 2.615516094e-01, 2.630911489e-01, 2.646310207e-01, + 2.661717873e-01, 2.677140089e-01, 2.692582456e-01, 2.708050586e-01, + 2.723550116e-01, 2.739086721e-01, 2.754666135e-01, 2.770294160e-01, + 2.785976685e-01, 2.801719700e-01, 2.817529315e-01, 2.833411775e-01, + 2.849373479e-01, 2.865421003e-01, 2.881561111e-01, 2.897800789e-01, + 2.914147257e-01, 2.930608002e-01, 2.947190800e-01, 2.963903747e-01, + 2.980755292e-01, 2.997754269e-01, 3.014909935e-01, 3.032232014e-01, + 3.049730740e-01, 3.067416910e-01, 3.085301934e-01, 3.103397908e-01, + 3.121717672e-01, 3.140274895e-01, 3.159084159e-01, 3.178161059e-01, + 3.197522315e-01, 3.217185894e-01, 3.237171159e-01, 3.257499030e-01, + 3.278192175e-01, 3.299275228e-01, 3.320775038e-01, 3.342720969e-01, + 3.365145237e-01, 3.388083322e-01, 3.411574440e-01, 3.435662117e-01, + 3.460394873e-01, 3.485827043e-01, 3.512019780e-01, 3.539042288e-01, + 3.566973339e-01, 3.595903177e-01, 3.625935917e-01, 3.657192617e-01, + 3.689815250e-01, 3.723971930e-01, 3.759863895e-01, 3.797735003e-01, + 3.837884939e-01, 3.880688020e-01, 3.926620738e-01, 3.976303452e-01, + 4.030566040e-01, 4.090556351e-01, 4.157930345e-01, 4.235211869e-01, + 4.326546209e-01, 4.439521594e-01, 4.590664150e-01, 4.830426172e-01, + 1.000000000e+00, 0.000000000e+00, 7.443910396e-02, 8.193164811e-02, + 8.675320917e-02, 9.039464369e-02, 9.335579335e-02, 9.586964562e-02, + 9.806491533e-02, 1.000206775e-01, 1.017892043e-01, 1.034069600e-01, + 1.049004544e-01, 1.062896004e-01, 1.075897593e-01, 1.088130449e-01, + 1.099691892e-01, 1.110661357e-01, 1.121104578e-01, 1.131076605e-01, + 1.140624032e-01, 1.149786663e-01, 1.158598791e-01, 1.167090181e-01, + 1.175286848e-01, 1.183211666e-01, 1.190884864e-01, 1.198324423e-01, + 1.205546403e-01, 1.212565209e-01, 1.219393818e-01, 1.226043958e-01, + 1.232526274e-01, 1.238850452e-01, 1.245025336e-01, 1.251059026e-01, + 1.256958955e-01, 1.262731966e-01, 1.268384373e-01, 1.273922014e-01, + 1.279350298e-01, 1.284674249e-01, 1.289898540e-01, 1.295027526e-01, + 1.300065272e-01, 1.305015583e-01, 1.309882017e-01, 1.314667917e-01, + 1.319376421e-01, 1.324010480e-01, 1.328572874e-01, 1.333066225e-01, + 1.337493009e-01, 1.341855566e-01, 1.346156111e-01, 1.350396741e-01, + 1.354579446e-01, 1.358706114e-01, 1.362778541e-01, 1.366798432e-01, + 1.370767412e-01, 1.374687029e-01, 1.378558758e-01, 1.382384007e-01, + 1.386164121e-01, 1.389900384e-01, 1.393594027e-01, 1.397246225e-01, + 1.400858104e-01, 1.404430745e-01, 1.407965182e-01, 1.411462409e-01, + 1.414923379e-01, 1.418349009e-01, 1.421740179e-01, 1.425097737e-01, + 1.428422497e-01, 1.431715244e-01, 1.434976734e-01, 1.438207695e-01, + 1.441408831e-01, 1.444580818e-01, 1.447724310e-01, 1.450839939e-01, + 1.453928315e-01, 1.456990026e-01, 1.460025644e-01, 1.463035718e-01, + 1.466020783e-01, 1.468981354e-01, 1.471917930e-01, 1.474830997e-01, + 1.477721022e-01, 1.480588462e-01, 1.483433755e-01, 1.486257331e-01, + 1.489059603e-01, 1.491840975e-01, 1.494601838e-01, 1.497342571e-01, + 1.500063544e-01, 1.502765114e-01, 1.505447631e-01, 1.508111434e-01, + 1.510756851e-01, 1.513384203e-01, 1.515993804e-01, 1.518585956e-01, + 1.521160955e-01, 1.523719090e-01, 1.526260641e-01, 1.528785881e-01, + 1.531295077e-01, 1.533788489e-01, 1.536266370e-01, 1.538728967e-01, + 1.541176522e-01, 1.543609268e-01, 1.546027437e-01, 1.548431252e-01, + 1.550820932e-01, 1.553196690e-01, 1.555558735e-01, 1.557907271e-01, + 1.560242498e-01, 1.562564608e-01, 1.564873795e-01, 1.567170242e-01, + 1.569454132e-01, 1.571725643e-01, 4.129958695e-01, 4.133375854e-01, + 4.136814990e-01, 4.140276433e-01, 4.143760520e-01, 4.147267596e-01, + 4.150798017e-01, 4.154352142e-01, 4.157930345e-01, 4.161533003e-01, + 4.165160505e-01, 4.168813252e-01, 4.172491650e-01, 4.176196118e-01, + 4.179927085e-01, 4.183684992e-01, 4.187470289e-01, 4.191283440e-01, + 4.195124919e-01, 4.198995215e-01, 4.202894827e-01, 4.206824270e-01, + 4.210784072e-01, 4.214774775e-01, 4.218796936e-01, 4.222851128e-01, + 4.226937941e-01, 4.231057981e-01, 4.235211869e-01, 4.239400248e-01, + 4.243623778e-01, 4.247883139e-01, 4.252179030e-01, 4.256512172e-01, + 4.260883310e-01, 4.265293208e-01, 4.269742657e-01, 4.274232473e-01, + 4.278763495e-01, 4.283336593e-01, 4.287952663e-01, 4.292612630e-01, + 4.297317453e-01, 4.302068120e-01, 4.306865654e-01, 4.311711115e-01, + 4.316605598e-01, 4.321550238e-01, 4.326546209e-01, 4.331594731e-01, + 4.336697065e-01, 4.341854523e-01, 4.347068462e-01, 4.352340296e-01, + 4.357671489e-01, 4.363063567e-01, 4.368518113e-01, 4.374036777e-01, + 4.379621276e-01, 4.385273396e-01, 4.390995002e-01, 4.396788036e-01, + 4.402654526e-01, 4.408596590e-01, 4.414616439e-01, 4.420716386e-01, + 4.426898852e-01, 4.433166369e-01, 4.439521594e-01, 4.445967309e-01, + 4.452506436e-01, 4.459142045e-01, 4.465877360e-01, 4.472715776e-01, + 4.479660868e-01, 4.486716402e-01, 4.493886353e-01, 4.501174922e-01, + 4.508586545e-01, 4.516125923e-01, 4.523798035e-01, 4.531608164e-01, + 4.539561920e-01, 4.547665273e-01, 4.555924581e-01, 4.564346622e-01, + 4.572938640e-01, 4.581708382e-01, 4.590664150e-01, 4.599814854e-01, + 4.609170075e-01, 4.618740134e-01, 4.628536171e-01, 4.638570235e-01, + 4.648855387e-01, 4.659405818e-01, 4.670236985e-01, 4.681365765e-01, + 4.692810640e-01, 4.704591909e-01, 4.716731934e-01, 4.729255435e-01, + 4.742189836e-01, 4.755565681e-01, 4.769417126e-01, 4.783782545e-01, + 4.798705257e-01, 4.814234426e-01, 4.830426172e-01, 4.847344967e-01, + 4.865065392e-01, 4.883674397e-01, 4.903274228e-01, 4.923986277e-01, + 4.945956242e-01, 4.969361164e-01, 4.994419216e-01, 5.021403692e-01, + 5.050663525e-01, 5.082654433e-01, 5.117988091e-01, 5.157513583e-01, + 5.202460657e-01, 5.254711723e-01, 5.317373780e-01, 5.396167222e-01, + 5.503639038e-01, 5.678471904e-01, 1.000000000e+00, +}; +const float dist_icdf_1_2[] = { + 0.000000000e+00, 4.772006582e-02, 6.296615905e-02, 7.427407753e-02, + 8.365153308e-02, 9.184022598e-02, 9.920878639e-02, 1.059710445e-01, + 1.122636706e-01, 1.181800824e-01, 1.237873671e-01, 1.291355676e-01, + 1.342631566e-01, 1.392004468e-01, 1.439718144e-01, 1.485972037e-01, + 1.530931756e-01, 1.574736603e-01, 1.617505076e-01, 1.659338993e-01, + 1.700326625e-01, 1.740545113e-01, 1.780062374e-01, 1.818938596e-01, + 1.857227450e-01, 1.894977068e-01, 1.932230840e-01, 1.969028077e-01, + 2.005404557e-01, 2.041392989e-01, 2.077023394e-01, 2.112323442e-01, + 2.147318727e-01, 2.182033009e-01, 2.216488427e-01, 2.250705673e-01, + 2.284704155e-01, 2.318502134e-01, 2.352116842e-01, 2.385564595e-01, + 2.418860883e-01, 2.452020459e-01, 2.485057413e-01, 2.517985242e-01, + 2.550816910e-01, 2.583564905e-01, 2.616241292e-01, 2.648857755e-01, + 2.681425644e-01, 2.713956014e-01, 2.746459660e-01, 2.778947155e-01, + 2.811428878e-01, 2.843915047e-01, 2.876415747e-01, 2.908940958e-01, + 2.941500581e-01, 2.974104465e-01, 3.006762431e-01, 3.039484293e-01, + 3.072279889e-01, 3.105159099e-01, 3.138131873e-01, 3.171208251e-01, + 3.204398389e-01, 3.237712585e-01, 3.271161303e-01, 3.304755200e-01, + 3.338505150e-01, 3.372422278e-01, 3.406517982e-01, 3.440803970e-01, + 3.475292292e-01, 3.509995371e-01, 3.544926045e-01, 3.580097602e-01, + 3.615523827e-01, 3.651219045e-01, 3.687198171e-01, 3.723476766e-01, + 3.760071092e-01, 3.796998181e-01, 3.834275898e-01, 3.871923026e-01, + 3.909959344e-01, 3.948405726e-01, 3.987284239e-01, 4.026618262e-01, + 4.066432616e-01, 4.106753701e-01, 4.147609664e-01, 4.189030573e-01, + 4.231048628e-01, 4.273698387e-01, 4.317017032e-01, 4.361044665e-01, + 4.405824657e-01, 4.451404038e-01, 4.497833955e-01, 4.545170203e-01, + 4.593473841e-01, 4.642811920e-01, 4.693258332e-01, 4.744894827e-01, + 4.797812222e-01, 4.852111858e-01, 4.907907357e-01, 4.965326778e-01, + 5.024515263e-01, 5.085638336e-01, 5.148886044e-01, 5.214478227e-01, + 5.282671298e-01, 5.353767113e-01, 5.428124739e-01, 5.506176367e-01, + 5.588449272e-01, 5.675596847e-01, 5.768443667e-01, 5.868053100e-01, + 5.975832673e-01, 6.093706188e-01, 6.224411640e-01, 6.372056689e-01, + 6.543262046e-01, 6.749867043e-01, 7.016867178e-01, 7.417019543e-01, + 1.000000000e+00, 0.000000000e+00, 1.499541236e-02, 1.952937653e-02, + 2.281015992e-02, 2.547740008e-02, 2.776662006e-02, 2.979460053e-02, + 3.162895214e-02, 3.331281609e-02, 3.487563487e-02, 3.633852094e-02, + 3.771719963e-02, 3.902374190e-02, 4.026764332e-02, 4.145652677e-02, + 4.259661749e-02, 4.369307429e-02, 4.475022666e-02, 4.577174851e-02, + 4.676078792e-02, 4.772006582e-02, 4.865195222e-02, 4.955852581e-02, + 5.044162130e-02, 5.130286730e-02, 5.214371703e-02, 5.296547339e-02, + 5.376930967e-02, 5.455628670e-02, 5.532736725e-02, 5.608342813e-02, + 5.682527046e-02, 5.755362840e-02, 5.826917666e-02, 5.897253699e-02, + 5.966428369e-02, 6.034494854e-02, 6.101502500e-02, 6.167497195e-02, + 6.232521694e-02, 6.296615905e-02, 6.359817150e-02, 6.422160388e-02, + 6.483678414e-02, 6.544402048e-02, 6.604360288e-02, 6.663580458e-02, + 6.722088343e-02, 6.779908299e-02, 6.837063367e-02, 6.893575365e-02, + 6.949464977e-02, 7.004751833e-02, 7.059454584e-02, 7.113590964e-02, + 7.167177856e-02, 7.220231343e-02, 7.272766762e-02, 7.324798752e-02, + 7.376341294e-02, 7.427407753e-02, 7.478010916e-02, 7.528163025e-02, + 7.577875806e-02, 7.627160506e-02, 7.676027909e-02, 7.724488373e-02, + 7.772551843e-02, 7.820227881e-02, 7.867525684e-02, 7.914454098e-02, + 7.961021646e-02, 8.007236533e-02, 8.053106672e-02, 8.098639692e-02, + 8.143842953e-02, 8.188723562e-02, 8.233288381e-02, 8.277544041e-02, + 8.321496951e-02, 8.365153308e-02, 8.408519111e-02, 8.451600162e-02, + 8.494402082e-02, 8.536930314e-02, 8.579190134e-02, 8.621186654e-02, + 8.662924833e-02, 8.704409482e-02, 8.745645268e-02, 8.786636724e-02, + 8.827388250e-02, 8.867904120e-02, 8.908188489e-02, 8.948245393e-02, + 8.988078759e-02, 9.027692404e-02, 9.067090043e-02, 9.106275291e-02, + 9.145251667e-02, 9.184022598e-02, 9.222591419e-02, 9.260961384e-02, + 9.299135659e-02, 9.337117332e-02, 9.374909416e-02, 9.412514845e-02, + 9.449936484e-02, 9.487177128e-02, 9.524239502e-02, 9.561126270e-02, + 9.597840030e-02, 9.634383320e-02, 9.670758619e-02, 9.706968348e-02, + 9.743014875e-02, 9.778900512e-02, 9.814627521e-02, 9.850198111e-02, + 9.885614446e-02, 9.920878639e-02, 9.955992759e-02, 9.990958831e-02, + 1.002577884e-01, 1.006045471e-01, 1.009498836e-01, 1.012938164e-01, + 1.016363636e-01, 1.019775432e-01, 6.170366727e-01, 6.176986034e-01, + 6.183643182e-01, 6.190338707e-01, 6.197073159e-01, 6.203847098e-01, + 6.210661097e-01, 6.217515745e-01, 6.224411640e-01, 6.231349398e-01, + 6.238329646e-01, 6.245353029e-01, 6.252420205e-01, 6.259531849e-01, + 6.266688652e-01, 6.273891322e-01, 6.281140585e-01, 6.288437184e-01, + 6.295781881e-01, 6.303175458e-01, 6.310618716e-01, 6.318112478e-01, + 6.325657587e-01, 6.333254909e-01, 6.340905334e-01, 6.348609774e-01, + 6.356369166e-01, 6.364184475e-01, 6.372056689e-01, 6.379986826e-01, + 6.387975932e-01, 6.396025084e-01, 6.404135388e-01, 6.412307983e-01, + 6.420544043e-01, 6.428844774e-01, 6.437211420e-01, 6.445645263e-01, + 6.454147624e-01, 6.462719864e-01, 6.471363389e-01, 6.480079647e-01, + 6.488870134e-01, 6.497736395e-01, 6.506680025e-01, 6.515702672e-01, + 6.524806039e-01, 6.533991890e-01, 6.543262046e-01, 6.552618393e-01, + 6.562062886e-01, 6.571597547e-01, 6.581224473e-01, 6.590945838e-01, + 6.600763897e-01, 6.610680990e-01, 6.620699547e-01, 6.630822093e-01, + 6.641051252e-01, 6.651389751e-01, 6.661840432e-01, 6.672406251e-01, + 6.683090287e-01, 6.693895751e-01, 6.704825993e-01, 6.715884509e-01, + 6.727074949e-01, 6.738401130e-01, 6.749867043e-01, 6.761476867e-01, + 6.773234978e-01, 6.785145965e-01, 6.797214640e-01, 6.809446060e-01, + 6.821845537e-01, 6.834418659e-01, 6.847171313e-01, 6.860109699e-01, + 6.873240363e-01, 6.886570216e-01, 6.900106564e-01, 6.913857144e-01, + 6.927830153e-01, 6.942034290e-01, 6.956478797e-01, 6.971173506e-01, + 6.986128893e-01, 7.001356135e-01, 7.016867178e-01, 7.032674807e-01, + 7.048792730e-01, 7.065235673e-01, 7.082019481e-01, 7.099161243e-01, + 7.116679421e-01, 7.134594013e-01, 7.152926725e-01, 7.171701179e-01, + 7.190943149e-01, 7.210680840e-01, 7.230945206e-01, 7.251770328e-01, + 7.273193864e-01, 7.295257577e-01, 7.318007963e-01, 7.341497020e-01, + 7.365783167e-01, 7.390932372e-01, 7.417019543e-01, 7.444130262e-01, + 7.472362960e-01, 7.501831692e-01, 7.532669707e-01, 7.565034130e-01, + 7.599112167e-01, 7.635129523e-01, 7.673362015e-01, 7.714152009e-01, + 7.757932332e-01, 7.805262173e-01, 7.856883133e-01, 7.913810931e-01, + 7.977494403e-01, 8.050112561e-01, 8.135187408e-01, 8.239037798e-01, + 8.375058344e-01, 8.582456226e-01, 1.000000000e+00, +}; +const float dist_icdf_1_3[] = { + 0.000000000e+00, 2.816362283e-02, 4.073114933e-02, 5.066862151e-02, + 5.924514514e-02, 6.695453594e-02, 7.405075716e-02, 8.068497887e-02, + 8.695585717e-02, 9.293201726e-02, 9.866349293e-02, 1.041881077e-01, + 1.095352894e-01, 1.147284777e-01, 1.197867108e-01, 1.247257102e-01, + 1.295586440e-01, 1.342966793e-01, 1.389493894e-01, 1.435250613e-01, + 1.480309305e-01, 1.524733645e-01, 1.568580063e-01, 1.611898902e-01, + 1.654735339e-01, 1.697130145e-01, 1.739120306e-01, 1.780739538e-01, + 1.822018718e-01, 1.862986244e-01, 1.903668348e-01, 1.944089349e-01, + 1.984271885e-01, 2.024237105e-01, 2.064004834e-01, 2.103593722e-01, + 2.143021371e-01, 2.182304449e-01, 2.221458788e-01, 2.260499475e-01, + 2.299440928e-01, 2.338296971e-01, 2.377080891e-01, 2.415805505e-01, + 2.454483204e-01, 2.493126005e-01, 2.531745593e-01, 2.570353363e-01, + 2.608960459e-01, 2.647577802e-01, 2.686216132e-01, 2.724886030e-01, + 2.763597954e-01, 2.802362262e-01, 2.841189242e-01, 2.880089133e-01, + 2.919072155e-01, 2.958148532e-01, 2.997328513e-01, 3.036622398e-01, + 3.076040561e-01, 3.115593475e-01, 3.155291733e-01, 3.195146076e-01, + 3.235167413e-01, 3.275366851e-01, 3.315755718e-01, 3.356345592e-01, + 3.397148327e-01, 3.438176086e-01, 3.479441371e-01, 3.520957054e-01, + 3.562736416e-01, 3.604793180e-01, 3.647141556e-01, 3.689796277e-01, + 3.732772653e-01, 3.776086615e-01, 3.819754772e-01, 3.863794467e-01, + 3.908223843e-01, 3.953061912e-01, 3.998328630e-01, 4.044044982e-01, + 4.090233075e-01, 4.136916236e-01, 4.184119129e-01, 4.231867877e-01, + 4.280190203e-01, 4.329115582e-01, 4.378675421e-01, 4.428903247e-01, + 4.479834934e-01, 4.531508949e-01, 4.583966634e-01, 4.637252530e-01, + 4.691414745e-01, 4.746505375e-01, 4.802580996e-01, 4.859703224e-01, + 4.917939378e-01, 4.977363245e-01, 5.038055991e-01, 5.100107227e-01, + 5.163616292e-01, 5.228693780e-01, 5.295463393e-01, 5.364064191e-01, + 5.434653363e-01, 5.507409658e-01, 5.582537683e-01, 5.660273358e-01, + 5.740890907e-01, 5.824711971e-01, 5.912117649e-01, 6.003564717e-01, + 6.099607911e-01, 6.200931256e-01, 6.308393340e-01, 6.423094832e-01, + 6.546483062e-01, 6.680521651e-01, 6.827981811e-01, 6.992980564e-01, + 7.182076801e-01, 7.406831072e-01, 7.691188047e-01, 8.102844589e-01, + 1.000000000e+00, 0.000000000e+00, 5.892691047e-03, 8.442042046e-03, + 1.042264322e-02, 1.210689516e-02, 1.360095758e-02, 1.495949798e-02, + 1.621509210e-02, 1.738901806e-02, 1.849608684e-02, 1.954710177e-02, + 2.055023152e-02, 2.151183130e-02, 2.243696153e-02, 2.332972995e-02, + 2.419352551e-02, 2.503118323e-02, 2.584510333e-02, 2.663733938e-02, + 2.740966461e-02, 2.816362283e-02, 2.890056795e-02, 2.962169525e-02, + 3.032806620e-02, 3.102062864e-02, 3.170023306e-02, 3.236764610e-02, + 3.302356168e-02, 3.366861035e-02, 3.430336707e-02, 3.492835788e-02, + 3.554406552e-02, 3.615093428e-02, 3.674937415e-02, 3.733976444e-02, + 3.792245688e-02, 3.849777836e-02, 3.906603332e-02, 3.962750587e-02, + 4.018246162e-02, 4.073114933e-02, 4.127380238e-02, 4.181064007e-02, + 4.234186876e-02, 4.286768296e-02, 4.338826621e-02, 4.390379197e-02, + 4.441442436e-02, 4.492031886e-02, 4.542162290e-02, 4.591847648e-02, + 4.641101266e-02, 4.689935805e-02, 4.738363319e-02, 4.786395302e-02, + 4.834042719e-02, 4.881316040e-02, 4.928225274e-02, 4.974779992e-02, + 5.020989359e-02, 5.066862151e-02, 5.112406783e-02, 5.157631331e-02, + 5.202543542e-02, 5.247150863e-02, 5.291460450e-02, 5.335479187e-02, + 5.379213698e-02, 5.422670362e-02, 5.465855327e-02, 5.508774518e-02, + 5.551433650e-02, 5.593838240e-02, 5.635993612e-02, 5.677904912e-02, + 5.719577111e-02, 5.761015018e-02, 5.802223282e-02, 5.843206404e-02, + 5.883968741e-02, 5.924514514e-02, 5.964847812e-02, 6.004972599e-02, + 6.044892719e-02, 6.084611901e-02, 6.124133764e-02, 6.163461821e-02, + 6.202599483e-02, 6.241550065e-02, 6.280316787e-02, 6.318902780e-02, + 6.357311088e-02, 6.395544673e-02, 6.433606416e-02, 6.471499121e-02, + 6.509225518e-02, 6.546788267e-02, 6.584189957e-02, 6.621433112e-02, + 6.658520192e-02, 6.695453594e-02, 6.732235658e-02, 6.768868663e-02, + 6.805354835e-02, 6.841696347e-02, 6.877895316e-02, 6.913953814e-02, + 6.949873861e-02, 6.985657430e-02, 7.021306452e-02, 7.056822810e-02, + 7.092208347e-02, 7.127464863e-02, 7.162594120e-02, 7.197597839e-02, + 7.232477705e-02, 7.267235366e-02, 7.301872436e-02, 7.336390493e-02, + 7.370791082e-02, 7.405075716e-02, 7.439245877e-02, 7.473303017e-02, + 7.507248556e-02, 7.541083889e-02, 7.574810380e-02, 7.608429367e-02, + 7.641942162e-02, 7.675350051e-02, 6.767162794e-01, 6.774623576e-01, + 6.782123708e-01, 6.789663729e-01, 6.797244187e-01, 6.804865644e-01, + 6.812528674e-01, 6.820233863e-01, 6.827981811e-01, 6.835773132e-01, + 6.843608452e-01, 6.851488414e-01, 6.859413675e-01, 6.867384906e-01, + 6.875402796e-01, 6.883468050e-01, 6.891581389e-01, 6.899743551e-01, + 6.907955295e-01, 6.916217396e-01, 6.924530650e-01, 6.932895872e-01, + 6.941313897e-01, 6.949785585e-01, 6.958311813e-01, 6.966893486e-01, + 6.975531530e-01, 6.984226897e-01, 6.992980564e-01, 7.001793534e-01, + 7.010666838e-01, 7.019601538e-01, 7.028598723e-01, 7.037659513e-01, + 7.046785062e-01, 7.055976556e-01, 7.065235216e-01, 7.074562299e-01, + 7.083959099e-01, 7.093426953e-01, 7.102967233e-01, 7.112581358e-01, + 7.122270790e-01, 7.132037037e-01, 7.141881656e-01, 7.151806254e-01, + 7.161812491e-01, 7.171902082e-01, 7.182076801e-01, 7.192338481e-01, + 7.202689018e-01, 7.213130375e-01, 7.223664586e-01, 7.234293756e-01, + 7.245020067e-01, 7.255845781e-01, 7.266773246e-01, 7.277804898e-01, + 7.288943267e-01, 7.300190982e-01, 7.311550775e-01, 7.323025487e-01, + 7.334618078e-01, 7.346331628e-01, 7.358169346e-01, 7.370134580e-01, + 7.382230821e-01, 7.394461715e-01, 7.406831072e-01, 7.419342874e-01, + 7.432001288e-01, 7.444810678e-01, 7.457775616e-01, 7.470900899e-01, + 7.484191561e-01, 7.497652892e-01, 7.511290454e-01, 7.525110102e-01, + 7.539118007e-01, 7.553320674e-01, 7.567724975e-01, 7.582338171e-01, + 7.597167949e-01, 7.612222451e-01, 7.627510317e-01, 7.643040723e-01, + 7.658823432e-01, 7.674868841e-01, 7.691188047e-01, 7.707792903e-01, + 7.724696099e-01, 7.741911241e-01, 7.759452944e-01, 7.777336939e-01, + 7.795580188e-01, 7.814201029e-01, 7.833219325e-01, 7.852656646e-01, + 7.872536476e-01, 7.892884457e-01, 7.913728661e-01, 7.935099927e-01, + 7.957032240e-01, 7.979563194e-01, 8.002734531e-01, 8.026592799e-01, + 8.051190140e-01, 8.076585257e-01, 8.102844589e-01, 8.130043790e-01, + 8.158269562e-01, 8.187621991e-01, 8.218217550e-01, 8.250192998e-01, + 8.283710555e-01, 8.318964859e-01, 8.356192544e-01, 8.395685713e-01, + 8.437811417e-01, 8.483040732e-01, 8.531993845e-01, 8.585513239e-01, + 8.644789519e-01, 8.711594158e-01, 8.788754109e-01, 8.881261959e-01, + 8.999483706e-01, 9.172824028e-01, 1.000000000e+00, +}; +const float dist_icdf_1_4[] = { + 0.000000000e+00, 1.304208331e-02, 2.155380799e-02, 2.896488608e-02, + 3.575988175e-02, 4.214276896e-02, 4.822411052e-02, 5.407241163e-02, + 5.973386382e-02, 6.524149950e-02, 7.061999023e-02, 7.588839187e-02, + 8.106182201e-02, 8.615253946e-02, 9.117066841e-02, 9.612470122e-02, + 1.010218577e-01, 1.058683484e-01, 1.106695710e-01, 1.154302611e-01, + 1.201546074e-01, 1.248463440e-01, 1.295088222e-01, 1.341450696e-01, + 1.387578376e-01, 1.433496404e-01, 1.479227875e-01, 1.524794111e-01, + 1.570214887e-01, 1.615508624e-01, 1.660692558e-01, 1.705782880e-01, + 1.750794860e-01, 1.795742953e-01, 1.840640892e-01, 1.885501775e-01, + 1.930338132e-01, 1.975161990e-01, 2.019984935e-01, 2.064818161e-01, + 2.109672515e-01, 2.154558543e-01, 2.199486526e-01, 2.244466514e-01, + 2.289508364e-01, 2.334621764e-01, 2.379816266e-01, 2.425101306e-01, + 2.470486238e-01, 2.515980349e-01, 2.561592886e-01, 2.607333076e-01, + 2.653210148e-01, 2.699233352e-01, 2.745411980e-01, 2.791755386e-01, + 2.838273004e-01, 2.884974366e-01, 2.931869128e-01, 2.978967082e-01, + 3.026278181e-01, 3.073812557e-01, 3.121580544e-01, 3.169592699e-01, + 3.217859822e-01, 3.266392985e-01, 3.315203551e-01, 3.364303204e-01, + 3.413703972e-01, 3.463418260e-01, 3.513458877e-01, 3.563839073e-01, + 3.614572568e-01, 3.665673593e-01, 3.717156929e-01, 3.769037950e-01, + 3.821332669e-01, 3.874057788e-01, 3.927230754e-01, 3.980869817e-01, + 4.034994092e-01, 4.089623637e-01, 4.144779520e-01, 4.200483913e-01, + 4.256760179e-01, 4.313632977e-01, 4.371128377e-01, 4.429273984e-01, + 4.488099080e-01, 4.547634777e-01, 4.607914199e-01, 4.668972667e-01, + 4.730847930e-01, 4.793580409e-01, 4.857213476e-01, 4.921793781e-01, + 4.987371609e-01, 5.054001306e-01, 5.121741754e-01, 5.190656928e-01, + 5.260816543e-01, 5.332296801e-01, 5.405181277e-01, 5.479561958e-01, + 5.555540473e-01, 5.633229575e-01, 5.712754907e-01, 5.794257161e-01, + 5.877894704e-01, 5.963846830e-01, 6.052317810e-01, 6.143542001e-01, + 6.237790370e-01, 6.335378936e-01, 6.436679874e-01, 6.542136360e-01, + 6.652282839e-01, 6.767773310e-01, 6.889421867e-01, 7.018262641e-01, + 7.155641757e-01, 7.303364892e-01, 7.463947649e-01, 7.641071782e-01, + 7.840499281e-01, 8.072165153e-01, 8.356059142e-01, 8.746271312e-01, + 1.000000000e+00, 0.000000000e+00, 1.512966588e-03, 2.487670283e-03, + 3.328144398e-03, 4.092040395e-03, 4.803753636e-03, 5.476563085e-03, + 6.118725039e-03, 6.735822405e-03, 7.331856681e-03, 7.909821634e-03, + 8.472032216e-03, 9.020325964e-03, 9.556192872e-03, 1.008086266e-02, + 1.059536550e-02, 1.110057546e-02, 1.159724237e-02, 1.208601572e-02, + 1.256746291e-02, 1.304208331e-02, 1.351031945e-02, 1.397256584e-02, + 1.442917612e-02, 1.488046889e-02, 1.532673246e-02, 1.576822884e-02, + 1.620519705e-02, 1.663785591e-02, 1.706640639e-02, 1.749103364e-02, + 1.791190872e-02, 1.832919008e-02, 1.874302485e-02, 1.915354999e-02, + 1.956089323e-02, 1.996517397e-02, 2.036650401e-02, 2.076498827e-02, + 2.116072533e-02, 2.155380799e-02, 2.194432375e-02, 2.233235522e-02, + 2.271798050e-02, 2.310127354e-02, 2.348230445e-02, 2.386113977e-02, + 2.423784271e-02, 2.461247341e-02, 2.498508915e-02, 2.535574452e-02, + 2.572449160e-02, 2.609138016e-02, 2.645645775e-02, 2.681976986e-02, + 2.718136007e-02, 2.754127013e-02, 2.789954008e-02, 2.825620835e-02, + 2.861131186e-02, 2.896488608e-02, 2.931696514e-02, 2.966758188e-02, + 3.001676790e-02, 3.036455369e-02, 3.071096863e-02, 3.105604105e-02, + 3.139979831e-02, 3.174226682e-02, 3.208347212e-02, 3.242343888e-02, + 3.276219097e-02, 3.309975148e-02, 3.343614278e-02, 3.377138652e-02, + 3.410550367e-02, 3.443851459e-02, 3.477043900e-02, 3.510129604e-02, + 3.543110428e-02, 3.575988175e-02, 3.608764598e-02, 3.641441397e-02, + 3.674020228e-02, 3.706502699e-02, 3.738890373e-02, 3.771184774e-02, + 3.803387383e-02, 3.835499641e-02, 3.867522955e-02, 3.899458691e-02, + 3.931308183e-02, 3.963072732e-02, 3.994753604e-02, 4.026352035e-02, + 4.057869231e-02, 4.089306369e-02, 4.120664596e-02, 4.151945034e-02, + 4.183148778e-02, 4.214276896e-02, 4.245330435e-02, 4.276310414e-02, + 4.307217832e-02, 4.338053664e-02, 4.368818865e-02, 4.399514368e-02, + 4.430141085e-02, 4.460699910e-02, 4.491191717e-02, 4.521617363e-02, + 4.551977684e-02, 4.582273502e-02, 4.612505621e-02, 4.642674827e-02, + 4.672781892e-02, 4.702827573e-02, 4.732812609e-02, 4.762737729e-02, + 4.792603644e-02, 4.822411052e-02, 4.852160639e-02, 4.881853077e-02, + 4.911489026e-02, 4.941069131e-02, 4.970594030e-02, 5.000064344e-02, + 5.029480687e-02, 5.058843658e-02, 7.397969437e-01, 7.406082489e-01, + 7.414232903e-01, 7.422421162e-01, 7.430647755e-01, 7.438913184e-01, + 7.447217958e-01, 7.455562602e-01, 7.463947649e-01, 7.472373644e-01, + 7.480841145e-01, 7.489350721e-01, 7.497902955e-01, 7.506498443e-01, + 7.515137793e-01, 7.523821629e-01, 7.532550589e-01, 7.541325325e-01, + 7.550146505e-01, 7.559014813e-01, 7.567930950e-01, 7.576895632e-01, + 7.585909595e-01, 7.594973591e-01, 7.604088392e-01, 7.613254790e-01, + 7.622473596e-01, 7.631745642e-01, 7.641071782e-01, 7.650452892e-01, + 7.659889871e-01, 7.669383643e-01, 7.678935156e-01, 7.688545384e-01, + 7.698215329e-01, 7.707946019e-01, 7.717738512e-01, 7.727593897e-01, + 7.737513293e-01, 7.747497851e-01, 7.757548759e-01, 7.767667237e-01, + 7.777854544e-01, 7.788111975e-01, 7.798440868e-01, 7.808842600e-01, + 7.819318594e-01, 7.829870316e-01, 7.840499281e-01, 7.851207054e-01, + 7.861995250e-01, 7.872865540e-01, 7.883819652e-01, 7.894859373e-01, + 7.905986553e-01, 7.917203106e-01, 7.928511016e-01, 7.939912341e-01, + 7.951409211e-01, 7.963003840e-01, 7.974698524e-01, 7.986495647e-01, + 7.998397689e-01, 8.010407225e-01, 8.022526938e-01, 8.034759617e-01, + 8.047108171e-01, 8.059575629e-01, 8.072165153e-01, 8.084880042e-01, + 8.097723742e-01, 8.110699854e-01, 8.123812148e-01, 8.137064568e-01, + 8.150461247e-01, 8.164006519e-01, 8.177704936e-01, 8.191561274e-01, + 8.205580562e-01, 8.219768087e-01, 8.234129425e-01, 8.248670454e-01, + 8.263397384e-01, 8.278316776e-01, 8.293435579e-01, 8.308761154e-01, + 8.324301316e-01, 8.340064367e-01, 8.356059142e-01, 8.372295061e-01, + 8.388782178e-01, 8.405531242e-01, 8.422553773e-01, 8.439862129e-01, + 8.457469602e-01, 8.475390516e-01, 8.493640337e-01, 8.512235810e-01, + 8.531195104e-01, 8.550537988e-01, 8.570286033e-01, 8.590462846e-01, + 8.611094345e-01, 8.632209089e-01, 8.653838656e-01, 8.676018115e-01, + 8.698786572e-01, 8.722187850e-01, 8.746271312e-01, 8.771092876e-01, + 8.796716289e-01, 8.823214723e-01, 8.850672824e-01, 8.879189356e-01, + 8.908880683e-01, 8.939885425e-01, 8.972370812e-01, 9.006541560e-01, + 9.042652589e-01, 9.081027837e-01, 9.122089120e-01, 9.166402468e-01, + 9.214756757e-01, 9.268307039e-01, 9.328861828e-01, 9.399541098e-01, + 9.486626553e-01, 9.607131225e-01, 1.000000000e+00, +}; +const float dist_icdf_1_5[] = { + 0.000000000e+00, 4.203160627e-03, 8.440297374e-03, 1.269985348e-02, + 1.697952692e-02, 2.127832878e-02, 2.559575951e-02, 2.993155884e-02, + 3.428560274e-02, 3.865785302e-02, 4.304832972e-02, 4.745709482e-02, + 5.188424191e-02, 5.632988943e-02, 6.079417606e-02, 6.527725748e-02, + 6.977930401e-02, 7.430049894e-02, 7.884103729e-02, 8.340112485e-02, + 8.798097750e-02, 9.258082071e-02, 9.720088917e-02, 1.018414265e-01, + 1.065026852e-01, 1.111849263e-01, 1.158884195e-01, 1.206134434e-01, + 1.253602849e-01, 1.301292401e-01, 1.349206137e-01, 1.397347197e-01, + 1.445718811e-01, 1.494324308e-01, 1.543167110e-01, 1.592250739e-01, + 1.641578823e-01, 1.691155091e-01, 1.740983383e-01, 1.791067652e-01, + 1.841411966e-01, 1.892020513e-01, 1.942897607e-01, 1.994047690e-01, + 2.045475337e-01, 2.097185264e-01, 2.149182330e-01, 2.201471546e-01, + 2.254058076e-01, 2.306947252e-01, 2.360144571e-01, 2.413655711e-01, + 2.467486532e-01, 2.521643088e-01, 2.576131637e-01, 2.630958644e-01, + 2.686130798e-01, 2.741655019e-01, 2.797538469e-01, 2.853788565e-01, + 2.910412990e-01, 2.967419710e-01, 3.024816982e-01, 3.082613378e-01, + 3.140817794e-01, 3.199439470e-01, 3.258488011e-01, 3.317973404e-01, + 3.377906043e-01, 3.438296749e-01, 3.499156797e-01, 3.560497942e-01, + 3.622332451e-01, 3.684673131e-01, 3.747533362e-01, 3.810927142e-01, + 3.874869115e-01, 3.939374626e-01, 4.004459760e-01, 4.070141398e-01, + 4.136437271e-01, 4.203366023e-01, 4.270947278e-01, 4.339201712e-01, + 4.408151137e-01, 4.477818590e-01, 4.548228429e-01, 4.619406446e-01, + 4.691379987e-01, 4.764178087e-01, 4.837831619e-01, 4.912373465e-01, + 4.987838702e-01, 5.064264815e-01, 5.141691939e-01, 5.220163124e-01, + 5.299724647e-01, 5.380426363e-01, 5.462322105e-01, 5.545470145e-01, + 5.629933729e-01, 5.715781698e-01, 5.803089204e-01, 5.891938562e-01, + 5.982420248e-01, 6.074634084e-01, 6.168690662e-01, 6.264713045e-01, + 6.362838856e-01, 6.463222811e-01, 6.566039879e-01, 6.671489221e-01, + 6.779799179e-01, 6.891233682e-01, 7.006100586e-01, 7.124762717e-01, + 7.247652786e-01, 7.375293966e-01, 7.508329017e-01, 7.647562778e-01, + 7.794026379e-01, 7.949078601e-01, 8.114574692e-01, 8.293167523e-01, + 8.488896155e-01, 8.708493268e-01, 8.964919166e-01, 9.291001401e-01, + 1.000000000e+00, 0.000000000e+00, 2.077662927e-04, 4.165101518e-04, + 6.256472745e-04, 8.350530399e-04, 1.044668217e-03, 1.254457910e-03, + 1.464399060e-03, 1.674475281e-03, 1.884674324e-03, 2.094986687e-03, + 2.305404783e-03, 2.515922413e-03, 2.726534422e-03, 2.937236452e-03, + 3.148024773e-03, 3.358896158e-03, 3.569847785e-03, 3.780877171e-03, + 3.991982108e-03, 4.203160627e-03, 4.414410956e-03, 4.625731497e-03, + 4.837120796e-03, 5.048577531e-03, 5.260100492e-03, 5.471688565e-03, + 5.683340728e-03, 5.895056032e-03, 6.106833602e-03, 6.318672621e-03, + 6.530572332e-03, 6.742532026e-03, 6.954551041e-03, 7.166628755e-03, + 7.378764586e-03, 7.590957986e-03, 7.803208438e-03, 8.015515456e-03, + 8.227878580e-03, 8.440297374e-03, 8.652771426e-03, 8.865300345e-03, + 9.077883761e-03, 9.290521320e-03, 9.503212687e-03, 9.715957543e-03, + 9.928755583e-03, 1.014160652e-02, 1.035451007e-02, 1.056746597e-02, + 1.078047397e-02, 1.099353382e-02, 1.120664530e-02, 1.141980818e-02, + 1.163302224e-02, 1.184628729e-02, 1.205960312e-02, 1.227296955e-02, + 1.248638640e-02, 1.269985348e-02, 1.291337064e-02, 1.312693772e-02, + 1.334055455e-02, 1.355422098e-02, 1.376793688e-02, 1.398170210e-02, + 1.419551651e-02, 1.440937999e-02, 1.462329239e-02, 1.483725362e-02, + 1.505126354e-02, 1.526532204e-02, 1.547942903e-02, 1.569358439e-02, + 1.590778801e-02, 1.612203982e-02, 1.633633970e-02, 1.655068757e-02, + 1.676508334e-02, 1.697952692e-02, 1.719401823e-02, 1.740855719e-02, + 1.762314372e-02, 1.783777775e-02, 1.805245920e-02, 1.826718801e-02, + 1.848196410e-02, 1.869678741e-02, 1.891165788e-02, 1.912657543e-02, + 1.934154003e-02, 1.955655159e-02, 1.977161007e-02, 1.998671542e-02, + 2.020186758e-02, 2.041706649e-02, 2.063231212e-02, 2.084760440e-02, + 2.106294330e-02, 2.127832878e-02, 2.149376077e-02, 2.170923925e-02, + 2.192476417e-02, 2.214033550e-02, 2.235595319e-02, 2.257161720e-02, + 2.278732751e-02, 2.300308407e-02, 2.321888685e-02, 2.343473582e-02, + 2.365063096e-02, 2.386657221e-02, 2.408255957e-02, 2.429859299e-02, + 2.451467246e-02, 2.473079794e-02, 2.494696941e-02, 2.516318684e-02, + 2.537945022e-02, 2.559575951e-02, 2.581211469e-02, 2.602851575e-02, + 2.624496266e-02, 2.646145540e-02, 2.667799395e-02, 2.689457830e-02, + 2.711120843e-02, 2.732788431e-02, 8.046976007e-01, 8.055318708e-01, + 8.063691310e-01, 8.072094159e-01, 8.080527607e-01, 8.088992014e-01, + 8.097487747e-01, 8.106015179e-01, 8.114574692e-01, 8.123166675e-01, + 8.131791527e-01, 8.140449652e-01, 8.149141465e-01, 8.157867389e-01, + 8.166627856e-01, 8.175423308e-01, 8.184254196e-01, 8.193120980e-01, + 8.202024132e-01, 8.210964134e-01, 8.219941477e-01, 8.228956667e-01, + 8.238010217e-01, 8.247102656e-01, 8.256234523e-01, 8.265406371e-01, + 8.274618765e-01, 8.283872284e-01, 8.293167523e-01, 8.302505088e-01, + 8.311885602e-01, 8.321309706e-01, 8.330778053e-01, 8.340291315e-01, + 8.349850181e-01, 8.359455358e-01, 8.369107573e-01, 8.378807570e-01, + 8.388556115e-01, 8.398353994e-01, 8.408202015e-01, 8.418101008e-01, + 8.428051829e-01, 8.438055355e-01, 8.448112490e-01, 8.458224165e-01, + 8.468391338e-01, 8.478614995e-01, 8.488896155e-01, 8.499235864e-01, + 8.509635203e-01, 8.520095287e-01, 8.530617267e-01, 8.541202330e-01, + 8.551851704e-01, 8.562566655e-01, 8.573348494e-01, 8.584198576e-01, + 8.595118304e-01, 8.606109127e-01, 8.617172551e-01, 8.628310132e-01, + 8.639523485e-01, 8.650814285e-01, 8.662184271e-01, 8.673635248e-01, + 8.685169093e-01, 8.696787757e-01, 8.708493268e-01, 8.720287739e-01, + 8.732173371e-01, 8.744152460e-01, 8.756227397e-01, 8.768400684e-01, + 8.780674929e-01, 8.793052865e-01, 8.805537347e-01, 8.818131369e-01, + 8.830838067e-01, 8.843660734e-01, 8.856602827e-01, 8.869667982e-01, + 8.882860024e-01, 8.896182985e-01, 8.909641117e-01, 8.923238911e-01, + 8.936981115e-01, 8.950872757e-01, 8.964919166e-01, 8.979126001e-01, + 8.993499281e-01, 9.008045413e-01, 9.022771233e-01, 9.037684047e-01, + 9.052791675e-01, 9.068102508e-01, 9.083625562e-01, 9.099370554e-01, + 9.115347972e-01, 9.131569172e-01, 9.148046478e-01, 9.164793302e-01, + 9.181824289e-01, 9.199155477e-01, 9.216804495e-01, 9.234790793e-01, + 9.253135919e-01, 9.271863850e-01, 9.291001401e-01, 9.310578717e-01, + 9.330629889e-01, 9.351193720e-01, 9.372314700e-01, 9.394044253e-01, + 9.416442360e-01, 9.439579713e-01, 9.463540622e-01, 9.488427019e-01, + 9.514364139e-01, 9.541508797e-01, 9.570061896e-01, 9.600288182e-01, + 9.632549133e-01, 9.667361640e-01, 9.705512686e-01, 9.748314094e-01, + 9.798291121e-01, 9.861840124e-01, 1.000000000e+00, +}; +const float dist_icdf_1_6[] = { + 0.000000000e+00, 7.877882007e-04, 2.100042262e-03, 3.727177925e-03, + 5.600284917e-03, 7.680990070e-03, 9.944108992e-03, 1.237157422e-02, + 1.494966865e-02, 1.766755982e-02, 2.051644175e-02, 2.348899513e-02, + 2.657902868e-02, 2.978123067e-02, 3.309099055e-02, 3.650426737e-02, + 4.001749025e-02, 4.362748166e-02, 4.733139714e-02, 5.112667734e-02, + 5.501100918e-02, 5.898229420e-02, 6.303862234e-02, 6.717825014e-02, + 7.139958240e-02, 7.570115664e-02, 8.008162979e-02, 8.453976693e-02, + 8.907443134e-02, 9.368457610e-02, 9.836923661e-02, 1.031275241e-01, + 1.079586200e-01, 1.128617708e-01, 1.178362838e-01, 1.228815229e-01, + 1.279969054e-01, 1.331818987e-01, 1.384360177e-01, 1.437588223e-01, + 1.491499151e-01, 1.546089394e-01, 1.601355779e-01, 1.657295507e-01, + 1.713906139e-01, 1.771185589e-01, 1.829132107e-01, 1.887744275e-01, + 1.947020997e-01, 2.006961490e-01, 2.067565281e-01, 2.128832202e-01, + 2.190762386e-01, 2.253356261e-01, 2.316614555e-01, 2.380538287e-01, + 2.445128772e-01, 2.510387619e-01, 2.576316735e-01, 2.642918324e-01, + 2.710194891e-01, 2.778149248e-01, 2.846784516e-01, 2.916104133e-01, + 2.986111857e-01, 3.056811775e-01, 3.128208316e-01, 3.200306251e-01, + 3.273110712e-01, 3.346627198e-01, 3.420861591e-01, 3.495820169e-01, + 3.571509622e-01, 3.647937065e-01, 3.725110065e-01, 3.803036651e-01, + 3.881725346e-01, 3.961185181e-01, 4.041425733e-01, 4.122457143e-01, + 4.204290155e-01, 4.286936148e-01, 4.370407174e-01, 4.454716000e-01, + 4.539876153e-01, 4.625901972e-01, 4.712808662e-01, 4.800612357e-01, + 4.889330184e-01, 4.978980342e-01, 5.069582184e-01, 5.161156307e-01, + 5.253724659e-01, 5.347310652e-01, 5.441939291e-01, 5.537637322e-01, + 5.634433396e-01, 5.732358252e-01, 5.831444931e-01, 5.931729017e-01, + 6.033248915e-01, 6.136046164e-01, 6.240165812e-01, 6.345656840e-01, + 6.452572659e-01, 6.560971707e-01, 6.670918135e-01, 6.782482646e-01, + 6.895743487e-01, 7.010787659e-01, 7.127712393e-01, 7.246626979e-01, + 7.367655043e-01, 7.490937432e-01, 7.616635920e-01, 7.744938030e-01, + 7.876063442e-01, 8.010272681e-01, 8.147879167e-01, 8.289266439e-01, + 8.434913592e-01, 8.585434418e-01, 8.741640790e-01, 8.904652148e-01, + 9.076101613e-01, 9.258573700e-01, 9.456721333e-01, 9.681232008e-01, + 1.000000000e+00, 0.000000000e+00, 1.138721031e-05, 3.034865559e-05, + 5.384828237e-05, 8.088424301e-05, 1.108964430e-04, 1.435156424e-04, + 1.784756212e-04, 2.155731485e-04, 2.546467676e-04, 2.955643711e-04, + 3.382153826e-04, 3.825055600e-04, 4.283533932e-04, 4.756875174e-04, + 5.244448030e-04, 5.745689109e-04, 6.260091769e-04, 6.787197355e-04, + 7.326588207e-04, 7.877882007e-04, 8.440727150e-04, 9.014798922e-04, + 9.599796298e-04, 1.019543926e-03, 1.080146649e-03, 1.141763344e-03, + 1.204371066e-03, 1.267948227e-03, 1.332474479e-03, 1.397930596e-03, + 1.464298380e-03, 1.531560570e-03, 1.599700772e-03, 1.668703387e-03, + 1.738553548e-03, 1.809237072e-03, 1.880740404e-03, 1.953050575e-03, + 2.026155165e-03, 2.100042262e-03, 2.174700430e-03, 2.250118681e-03, + 2.326286445e-03, 2.403193546e-03, 2.480830178e-03, 2.559186884e-03, + 2.638254535e-03, 2.718024315e-03, 2.798487700e-03, 2.879636446e-03, + 2.961462573e-03, 3.043958350e-03, 3.127116286e-03, 3.210929116e-03, + 3.295389790e-03, 3.380491462e-03, 3.466227486e-03, 3.552591397e-03, + 3.639576915e-03, 3.727177925e-03, 3.815388478e-03, 3.904202783e-03, + 3.993615194e-03, 4.083620214e-03, 4.174212479e-03, 4.265386762e-03, + 4.357137959e-03, 4.449461090e-03, 4.542351292e-03, 4.635803816e-03, + 4.729814022e-03, 4.824377373e-03, 4.919489435e-03, 5.015145870e-03, + 5.111342437e-03, 5.208074982e-03, 5.305339441e-03, 5.403131835e-03, + 5.501448266e-03, 5.600284917e-03, 5.699638044e-03, 5.799503982e-03, + 5.899879135e-03, 6.000759976e-03, 6.102143049e-03, 6.204024959e-03, + 6.306402379e-03, 6.409272040e-03, 6.512630735e-03, 6.616475313e-03, + 6.720802682e-03, 6.825609802e-03, 6.930893687e-03, 7.036651406e-03, + 7.142880073e-03, 7.249576854e-03, 7.356738962e-03, 7.464363658e-03, + 7.572448244e-03, 7.680990070e-03, 7.789986527e-03, 7.899435048e-03, + 8.009333107e-03, 8.119678216e-03, 8.230467927e-03, 8.341699830e-03, + 8.453371551e-03, 8.565480752e-03, 8.678025130e-03, 8.791002417e-03, + 8.904410376e-03, 9.018246805e-03, 9.132509533e-03, 9.247196421e-03, + 9.362305357e-03, 9.477834264e-03, 9.593781089e-03, 9.710143811e-03, + 9.826920434e-03, 9.944108992e-03, 1.006170754e-02, 1.017971417e-02, + 1.029812699e-02, 1.041694414e-02, 1.053616376e-02, 1.065578406e-02, + 1.077580323e-02, 1.089621951e-02, 8.678412984e-01, 8.686259991e-01, + 8.694122835e-01, 8.702001660e-01, 8.709896616e-01, 8.717807851e-01, + 8.725735521e-01, 8.733679781e-01, 8.741640790e-01, 8.749618711e-01, + 8.757613707e-01, 8.765625948e-01, 8.773655604e-01, 8.781702850e-01, + 8.789767864e-01, 8.797850827e-01, 8.805951924e-01, 8.814071343e-01, + 8.822209278e-01, 8.830365923e-01, 8.838541479e-01, 8.846736150e-01, + 8.854950145e-01, 8.863183677e-01, 8.871436962e-01, 8.879710222e-01, + 8.888003685e-01, 8.896317581e-01, 8.904652148e-01, 8.913007627e-01, + 8.921384266e-01, 8.929782317e-01, 8.938202039e-01, 8.946643696e-01, + 8.955107560e-01, 8.963593907e-01, 8.972103022e-01, 8.980635194e-01, + 8.989190721e-01, 8.997769909e-01, 9.006373070e-01, 9.015000523e-01, + 9.023652599e-01, 9.032329633e-01, 9.041031972e-01, 9.049759970e-01, + 9.058513992e-01, 9.067294411e-01, 9.076101613e-01, 9.084935993e-01, + 9.093797956e-01, 9.102687921e-01, 9.111606316e-01, 9.120553585e-01, + 9.129530182e-01, 9.138536578e-01, 9.147573253e-01, 9.156640708e-01, + 9.165739455e-01, 9.174870024e-01, 9.184032963e-01, 9.193228835e-01, + 9.202458225e-01, 9.211721736e-01, 9.221019990e-01, 9.230353633e-01, + 9.239723334e-01, 9.249129784e-01, 9.258573700e-01, 9.268055825e-01, + 9.277576931e-01, 9.287137820e-01, 9.296739322e-01, 9.306382304e-01, + 9.316067665e-01, 9.325796343e-01, 9.335569314e-01, 9.345387596e-01, + 9.355252251e-01, 9.365164389e-01, 9.375125170e-01, 9.385135807e-01, + 9.395197571e-01, 9.405311796e-01, 9.415479877e-01, 9.425703286e-01, + 9.435983566e-01, 9.446322343e-01, 9.456721333e-01, 9.467182345e-01, + 9.477707294e-01, 9.488298203e-01, 9.498957220e-01, 9.509686626e-01, + 9.520488844e-01, 9.531366459e-01, 9.542322228e-01, 9.553359102e-01, + 9.564480242e-01, 9.575689045e-01, 9.586989169e-01, 9.598384564e-01, + 9.609879504e-01, 9.621478632e-01, 9.633187003e-01, 9.645010146e-01, + 9.656954124e-01, 9.669025614e-01, 9.681232008e-01, 9.693581520e-01, + 9.706083335e-01, 9.718747777e-01, 9.731586532e-01, 9.744612921e-01, + 9.757842260e-01, 9.771292318e-01, 9.784983938e-01, 9.798941871e-01, + 9.813195940e-01, 9.827782702e-01, 9.842747909e-01, 9.858150298e-01, + 9.874067737e-01, 9.890607861e-01, 9.907928124e-01, 9.926278457e-01, + 9.946110324e-01, 9.968464800e-01, 1.000000000e+00, +}; +const float dist_icdf_1_7[] = { + 0.000000000e+00, 6.592502467e-05, 2.648932647e-04, 5.975786147e-04, + 1.064331402e-03, 1.665386233e-03, 2.400913347e-03, 3.271040413e-03, + 4.275863916e-03, 5.415455870e-03, 6.689868120e-03, 8.099135249e-03, + 9.643276637e-03, 1.132229797e-02, 1.313619238e-02, 1.508494129e-02, + 1.716851510e-02, 1.938687374e-02, 2.173996707e-02, 2.422773521e-02, + 2.685010885e-02, 2.960700941e-02, 3.249834927e-02, 3.552403188e-02, + 3.868395185e-02, 4.197799505e-02, 4.540603865e-02, 4.896795119e-02, + 5.266359254e-02, 5.649281393e-02, 6.045545794e-02, 6.455135847e-02, + 6.878034070e-02, 7.314222102e-02, 7.763680698e-02, 8.226389721e-02, + 8.702328137e-02, 9.191473998e-02, 9.693804439e-02, 1.020929566e-01, + 1.073792292e-01, 1.127966052e-01, 1.183448178e-01, 1.240235905e-01, + 1.298326365e-01, 1.357716589e-01, 1.418403505e-01, 1.480383932e-01, + 1.543654584e-01, 1.608212061e-01, 1.674052852e-01, 1.741173331e-01, + 1.809569751e-01, 1.879238246e-01, 1.950174827e-01, 2.022375375e-01, + 2.095835643e-01, 2.170551248e-01, 2.246517670e-01, 2.323730249e-01, + 2.402184175e-01, 2.481874492e-01, 2.562796087e-01, 2.644943688e-01, + 2.728311856e-01, 2.812894984e-01, 2.898687288e-01, 2.985682800e-01, + 3.073875364e-01, 3.163258628e-01, 3.253826036e-01, 3.345570820e-01, + 3.438485993e-01, 3.532564337e-01, 3.627798397e-01, 3.724180470e-01, + 3.821702590e-01, 3.920356523e-01, 4.020133747e-01, 4.121025445e-01, + 4.223022486e-01, 4.326115411e-01, 4.430294416e-01, 4.535549333e-01, + 4.641869611e-01, 4.749244295e-01, 4.857661999e-01, 4.967110886e-01, + 5.077578638e-01, 5.189052422e-01, 5.301518864e-01, 5.414964006e-01, + 5.529373271e-01, 5.644731413e-01, 5.761022476e-01, 5.878229732e-01, + 5.996335626e-01, 6.115321704e-01, 6.235168542e-01, 6.355855659e-01, + 6.477361418e-01, 6.599662925e-01, 6.722735894e-01, 6.846554517e-01, + 6.971091290e-01, 7.096316833e-01, 7.222199662e-01, 7.348705940e-01, + 7.475799165e-01, 7.603439812e-01, 7.731584903e-01, 7.860187472e-01, + 7.989195932e-01, 8.118553275e-01, 8.248196073e-01, 8.378053207e-01, + 8.508044226e-01, 8.638077174e-01, 8.768045663e-01, 8.897824816e-01, + 9.027265479e-01, 9.156185622e-01, 9.284356976e-01, 9.411482986e-01, + 9.537159421e-01, 9.660795857e-01, 9.781430613e-01, 9.897144251e-01, + 1.000000000e+00, 0.000000000e+00, 1.616208035e-07, 6.494156025e-07, + 1.465058436e-06, 2.609444952e-06, 4.083202062e-06, 5.886813922e-06, + 8.020675440e-06, 1.048512026e-05, 1.328043733e-05, 1.640688145e-05, + 1.986468059e-05, 2.365404091e-05, 2.777515067e-05, 3.222818300e-05, + 3.701329820e-05, 4.213064548e-05, 4.758036439e-05, 5.336258599e-05, + 5.947743382e-05, 6.592502467e-05, 7.270546935e-05, 7.981887318e-05, + 8.726533655e-05, 9.504495534e-05, 1.031578213e-04, 1.116040223e-04, + 1.203836430e-04, 1.294967643e-04, 1.389434647e-04, 1.487238193e-04, + 1.588379011e-04, 1.692857804e-04, 1.800675251e-04, 1.911832013e-04, + 2.026328726e-04, 2.144166012e-04, 2.265344470e-04, 2.389864686e-04, + 2.517727228e-04, 2.648932647e-04, 2.783481482e-04, 2.921374257e-04, + 3.062611482e-04, 3.207193656e-04, 3.355121265e-04, 3.506394782e-04, + 3.661014671e-04, 3.818981385e-04, 3.980295365e-04, 4.144957045e-04, + 4.312966847e-04, 4.484325186e-04, 4.659032466e-04, 4.837089085e-04, + 5.018495432e-04, 5.203251887e-04, 5.391358823e-04, 5.582816607e-04, + 5.777625597e-04, 5.975786147e-04, 6.177298600e-04, 6.382163296e-04, + 6.590380569e-04, 6.801950744e-04, 7.016874143e-04, 7.235151081e-04, + 7.456781867e-04, 7.681766807e-04, 7.910106198e-04, 8.141800335e-04, + 8.376849507e-04, 8.615253998e-04, 8.857014088e-04, 9.102130052e-04, + 9.350602159e-04, 9.602430676e-04, 9.857615865e-04, 1.011615798e-03, + 1.037805729e-03, 1.064331402e-03, 1.091192843e-03, 1.118390077e-03, + 1.145923126e-03, 1.173792014e-03, 1.201996765e-03, 1.230537402e-03, + 1.259413946e-03, 1.288626419e-03, 1.318174844e-03, 1.348059242e-03, + 1.378279634e-03, 1.408836041e-03, 1.439728483e-03, 1.470956981e-03, + 1.502521555e-03, 1.534422223e-03, 1.566659006e-03, 1.599231923e-03, + 1.632140992e-03, 1.665386233e-03, 1.698967662e-03, 1.732885299e-03, + 1.767139161e-03, 1.801729266e-03, 1.836655631e-03, 1.871918272e-03, + 1.907517208e-03, 1.943452454e-03, 1.979724026e-03, 2.016331942e-03, + 2.053276216e-03, 2.090556865e-03, 2.128173903e-03, 2.166127347e-03, + 2.204417211e-03, 2.243043510e-03, 2.282006259e-03, 2.321305472e-03, + 2.360941163e-03, 2.400913347e-03, 2.441222037e-03, 2.481867246e-03, + 2.522848990e-03, 2.564167279e-03, 2.605822129e-03, 2.647813551e-03, + 2.690141559e-03, 2.732806164e-03, 9.233195393e-01, 9.239598954e-01, + 9.246000204e-01, 9.252399104e-01, 9.258795615e-01, 9.265189699e-01, + 9.271581314e-01, 9.277970420e-01, 9.284356976e-01, 9.290740941e-01, + 9.297122271e-01, 9.303500923e-01, 9.309876854e-01, 9.316250019e-01, + 9.322620373e-01, 9.328987870e-01, 9.335352462e-01, 9.341714104e-01, + 9.348072746e-01, 9.354428339e-01, 9.360780834e-01, 9.367130181e-01, + 9.373476326e-01, 9.379819219e-01, 9.386158805e-01, 9.392495030e-01, + 9.398827840e-01, 9.405157178e-01, 9.411482986e-01, 9.417805206e-01, + 9.424123780e-01, 9.430438646e-01, 9.436749744e-01, 9.443057009e-01, + 9.449360378e-01, 9.455659787e-01, 9.461955168e-01, 9.468246453e-01, + 9.474533574e-01, 9.480816459e-01, 9.487095037e-01, 9.493369234e-01, + 9.499638974e-01, 9.505904182e-01, 9.512164778e-01, 9.518420683e-01, + 9.524671815e-01, 9.530918089e-01, 9.537159421e-01, 9.543395722e-01, + 9.549626903e-01, 9.555852873e-01, 9.562073536e-01, 9.568288798e-01, + 9.574498558e-01, 9.580702717e-01, 9.586901170e-01, 9.593093812e-01, + 9.599280532e-01, 9.605461220e-01, 9.611635759e-01, 9.617804033e-01, + 9.623965920e-01, 9.630121294e-01, 9.636270027e-01, 9.642411989e-01, + 9.648547041e-01, 9.654675045e-01, 9.660795857e-01, 9.666909326e-01, + 9.673015301e-01, 9.679113623e-01, 9.685204127e-01, 9.691286646e-01, + 9.697361004e-01, 9.703427021e-01, 9.709484509e-01, 9.715533276e-01, + 9.721573120e-01, 9.727603832e-01, 9.733625197e-01, 9.739636989e-01, + 9.745638976e-01, 9.751630914e-01, 9.757612549e-01, 9.763583619e-01, + 9.769543846e-01, 9.775492945e-01, 9.781430613e-01, 9.787356535e-01, + 9.793270382e-01, 9.799171807e-01, 9.805060447e-01, 9.810935917e-01, + 9.816797815e-01, 9.822645715e-01, 9.828479167e-01, 9.834297694e-01, + 9.840100790e-01, 9.845887920e-01, 9.851658510e-01, 9.857411951e-01, + 9.863147588e-01, 9.868864723e-01, 9.874562602e-01, 9.880240412e-01, + 9.885897274e-01, 9.891532234e-01, 9.897144251e-01, 9.902732188e-01, + 9.908294791e-01, 9.913830678e-01, 9.919338312e-01, 9.924815972e-01, + 9.930261723e-01, 9.935673366e-01, 9.941048383e-01, 9.946383856e-01, + 9.951676364e-01, 9.956921838e-01, 9.962115347e-01, 9.967250788e-01, + 9.972320395e-01, 9.977313927e-01, 9.982217215e-01, 9.987009239e-01, + 9.991655225e-01, 9.996084633e-01, 1.000000000e+00, +}; +const float dist_icdf_1_8[] = { + 0.000000000e+00, 1.968089292e-12, 1.236989249e-10, 1.394171973e-09, + 7.774761039e-09, 2.948608673e-08, 8.762690108e-08, 2.200748477e-07, + 4.886614248e-07, 9.876149446e-07, 1.853266231e-06, 3.275012418e-06, + 5.507534599e-06, 8.884265230e-06, 1.383210117e-05, 2.088735797e-05, + 3.071296036e-05, 4.411686327e-05, 6.207169617e-05, 8.573562193e-05, + 1.164743992e-04, 1.558846343e-04, 2.058182045e-04, 2.684078312e-04, + 3.460937739e-04, 4.416516108e-04, 5.582210628e-04, 6.993358069e-04, + 8.689542163e-04, 1.071490946e-03, 1.311849274e-03, 1.595454079e-03, + 1.928285331e-03, 2.316911929e-03, 2.768525705e-03, 3.290975380e-03, + 3.892800228e-03, 4.583263149e-03, 5.372382848e-03, 6.270964713e-03, + 7.290630009e-03, 8.443842882e-03, 9.743934655e-03, 1.120512483e-02, + 1.284253811e-02, 1.467221678e-02, 1.671112759e-02, 1.897716234e-02, + 2.148913118e-02, 2.426674779e-02, 2.733060511e-02, 3.070214091e-02, + 3.440359170e-02, 3.845793405e-02, 4.288881201e-02, 4.772044954e-02, + 5.297754673e-02, 5.868515878e-02, 6.486855676e-02, 7.155306916e-02, + 7.876390376e-02, 8.652594909e-02, 9.486355550e-02, 1.038002958e-01, + 1.133587062e-01, 1.235600078e-01, 1.344238113e-01, 1.459678056e-01, + 1.582074332e-01, 1.711555565e-01, 1.848221170e-01, 1.992137934e-01, + 2.143336633e-01, 2.301808735e-01, 2.467503259e-01, 2.640323862e-01, + 2.820126204e-01, 3.006715698e-01, 3.199845684e-01, 3.399216129e-01, + 3.604472903e-01, 3.815207706e-01, 4.030958703e-01, 4.251211902e-01, + 4.475403321e-01, 4.702921954e-01, 4.933113546e-01, 5.165285144e-01, + 5.398710412e-01, 5.632635634e-01, 5.866286341e-01, 6.098874469e-01, + 6.329605937e-01, 6.557688520e-01, 6.782339897e-01, 7.002795709e-01, + 7.218317505e-01, 7.428200421e-01, 7.631780456e-01, 7.828441210e-01, + 8.017619977e-01, 8.198813079e-01, 8.371580374e-01, 8.535548853e-01, + 8.690415322e-01, 8.835948111e-01, 8.971987850e-01, 9.098447323e-01, + 9.215310444e-01, 9.322630430e-01, 9.420527240e-01, 9.509184378e-01, + 9.588845144e-01, 9.659808462e-01, 9.722424361e-01, 9.777089240e-01, + 9.824240998e-01, 9.864354148e-01, 9.897934981e-01, 9.925516881e-01, + 9.947655846e-01, 9.964926289e-01, 9.977917162e-01, 9.987228439e-01, + 9.993467991e-01, 9.997248862e-01, 9.999186918e-01, 9.999898822e-01, + 1.000000000e+00, 0.000000000e+00, 3.325295141e-20, 2.090024246e-18, + 2.355601095e-17, 1.313628163e-16, 4.981986486e-16, 1.480549303e-15, + 3.718397924e-15, 8.256454226e-15, 1.668680910e-14, 3.131292745e-14, + 5.533490434e-14, 9.305591864e-14, 1.501098257e-13, 2.337098359e-13, + 3.529182322e-13, 5.189370804e-13, 7.454198943e-13, 1.048804215e-12, + 1.448665073e-12, 1.968089292e-12, 2.634070617e-12, 3.477925623e-12, + 4.535730381e-12, 5.848777867e-12, 7.464056061e-12, 9.434746749e-12, + 1.182074497e-11, 1.468919909e-11, 1.811507156e-11, 2.218172014e-11, + 2.698149987e-11, 3.261638544e-11, 3.919861419e-11, 4.685134962e-11, + 5.570936541e-11, 6.591974986e-11, 7.764263094e-11, 9.105192165e-11, + 1.063360859e-10, 1.236989249e-10, 1.433603836e-10, 1.655573783e-10, + 1.905446435e-10, 2.185956003e-10, 2.500032445e-10, 2.850810550e-10, + 3.241639228e-10, 3.676091003e-10, 4.157971709e-10, 4.691330386e-10, + 5.280469386e-10, 5.929954671e-10, 6.644626325e-10, 7.429609261e-10, + 8.290324133e-10, 9.232498452e-10, 1.026217790e-09, 1.138573785e-09, + 1.260989509e-09, 1.394171973e-09, 1.538864737e-09, 1.695849135e-09, + 1.865945536e-09, 2.050014613e-09, 2.248958635e-09, 2.463722782e-09, + 2.695296480e-09, 2.944714751e-09, 3.213059588e-09, 3.501461352e-09, + 3.811100181e-09, 4.143207425e-09, 4.499067104e-09, 4.880017378e-09, + 5.287452042e-09, 5.722822042e-09, 6.187637007e-09, 6.683466806e-09, + 7.211943120e-09, 7.774761039e-09, 8.373680675e-09, 9.010528794e-09, + 9.687200478e-09, 1.040566079e-08, 1.116794648e-08, 1.197616769e-08, + 1.283250968e-08, 1.373923462e-08, 1.469868332e-08, 1.571327705e-08, + 1.678551933e-08, 1.791799783e-08, 1.911338611e-08, 2.037444563e-08, + 2.170402752e-08, 2.310507459e-08, 2.458062320e-08, 2.613380524e-08, + 2.776785012e-08, 2.948608673e-08, 3.129194547e-08, 3.318896030e-08, + 3.518077077e-08, 3.727112408e-08, 3.946387724e-08, 4.176299911e-08, + 4.417257255e-08, 4.669679661e-08, 4.933998867e-08, 5.210658665e-08, + 5.500115118e-08, 5.802836792e-08, 6.119304970e-08, 6.450013891e-08, + 6.795470968e-08, 7.156197029e-08, 7.532726543e-08, 7.925607858e-08, + 8.335403440e-08, 8.762690108e-08, 9.208059279e-08, 9.672117209e-08, + 1.015548524e-07, 1.065880004e-07, 1.118271386e-07, 1.172789479e-07, + 1.229502699e-07, 1.288481098e-07, 9.973196172e-01, 9.973819818e-01, + 9.974433736e-01, 9.975038000e-01, 9.975632687e-01, 9.976217871e-01, + 9.976793628e-01, 9.977360033e-01, 9.977917162e-01, 9.978465090e-01, + 9.979003894e-01, 9.979533648e-01, 9.980054428e-01, 9.980566311e-01, + 9.981069371e-01, 9.981563685e-01, 9.982049329e-01, 9.982526378e-01, + 9.982994909e-01, 9.983454997e-01, 9.983906719e-01, 9.984350150e-01, + 9.984785367e-01, 9.985212447e-01, 9.985631464e-01, 9.986042495e-01, + 9.986445617e-01, 9.986840906e-01, 9.987228439e-01, 9.987608291e-01, + 9.987980539e-01, 9.988345259e-01, 9.988702528e-01, 9.989052423e-01, + 9.989395020e-01, 9.989730395e-01, 9.990058625e-01, 9.990379787e-01, + 9.990693957e-01, 9.991001212e-01, 9.991301629e-01, 9.991595284e-01, + 9.991882255e-01, 9.992162617e-01, 9.992436447e-01, 9.992703823e-01, + 9.992964821e-01, 9.993219518e-01, 9.993467991e-01, 9.993710317e-01, + 9.993946572e-01, 9.994176834e-01, 9.994401179e-01, 9.994619685e-01, + 9.994832428e-01, 9.995039485e-01, 9.995240933e-01, 9.995436850e-01, + 9.995627311e-01, 9.995812395e-01, 9.995992179e-01, 9.996166738e-01, + 9.996336151e-01, 9.996500494e-01, 9.996659844e-01, 9.996814279e-01, + 9.996963876e-01, 9.997108711e-01, 9.997248862e-01, 9.997384406e-01, + 9.997515419e-01, 9.997641980e-01, 9.997764164e-01, 9.997882050e-01, + 9.997995715e-01, 9.998105234e-01, 9.998210686e-01, 9.998312148e-01, + 9.998409697e-01, 9.998503409e-01, 9.998593363e-01, 9.998679634e-01, + 9.998762301e-01, 9.998841440e-01, 9.998917128e-01, 9.998989443e-01, + 9.999058462e-01, 9.999124261e-01, 9.999186918e-01, 9.999246510e-01, + 9.999303114e-01, 9.999356806e-01, 9.999407665e-01, 9.999455767e-01, + 9.999501189e-01, 9.999544008e-01, 9.999584301e-01, 9.999622146e-01, + 9.999657619e-01, 9.999690796e-01, 9.999721756e-01, 9.999750575e-01, + 9.999777330e-01, 9.999802098e-01, 9.999824956e-01, 9.999845980e-01, + 9.999865248e-01, 9.999882836e-01, 9.999898822e-01, 9.999913282e-01, + 9.999926292e-01, 9.999937930e-01, 9.999948273e-01, 9.999957396e-01, + 9.999965377e-01, 9.999972292e-01, 9.999978219e-01, 9.999983232e-01, + 9.999987410e-01, 9.999990828e-01, 9.999993563e-01, 9.999995692e-01, + 9.999997290e-01, 9.999998433e-01, 9.999999199e-01, 9.999999663e-01, + 9.999999900e-01, 9.999999988e-01, 1.000000000e+00, +}; +const float dist_icdf_2_0[] = { + 0.000000000e+00, 2.237672937e-01, 2.285440040e-01, 2.315843188e-01, + 2.338746000e-01, 2.357386352e-01, 2.373253744e-01, 2.387163221e-01, + 2.399611778e-01, 2.410925969e-01, 2.421332450e-01, 2.430995295e-01, + 2.440037306e-01, 2.448552915e-01, 2.456616389e-01, 2.464287258e-01, + 2.471614013e-01, 2.478636718e-01, 2.485388879e-01, 2.491898826e-01, + 2.498190743e-01, 2.504285456e-01, 2.510201037e-01, 2.515953283e-01, + 2.521556093e-01, 2.527021764e-01, 2.532361239e-01, 2.537584308e-01, + 2.542699767e-01, 2.547715555e-01, 2.552638870e-01, 2.557476261e-01, + 2.562233710e-01, 2.566916700e-01, 2.571530275e-01, 2.576079089e-01, + 2.580567449e-01, 2.584999356e-01, 2.589378533e-01, 2.593708457e-01, + 2.597992386e-01, 2.602233376e-01, 2.606434306e-01, 2.610597894e-01, + 2.614726711e-01, 2.618823197e-01, 2.622889672e-01, 2.626928352e-01, + 2.630941351e-01, 2.634930699e-01, 2.638898346e-01, 2.642846170e-01, + 2.646775986e-01, 2.650689550e-01, 2.654588569e-01, 2.658474705e-01, + 2.662349577e-01, 2.666214772e-01, 2.670071847e-01, 2.673922333e-01, + 2.677767740e-01, 2.681609563e-01, 2.685449282e-01, 2.689288371e-01, + 2.693128298e-01, 2.696970532e-01, 2.700816545e-01, 2.704667816e-01, + 2.708525836e-01, 2.712392111e-01, 2.716268168e-01, 2.720155558e-01, + 2.724055857e-01, 2.727970680e-01, 2.731901676e-01, 2.735850538e-01, + 2.739819008e-01, 2.743808884e-01, 2.747822024e-01, 2.751860354e-01, + 2.755925874e-01, 2.760020669e-01, 2.764146914e-01, 2.768306888e-01, + 2.772502979e-01, 2.776737700e-01, 2.781013700e-01, 2.785333778e-01, + 2.789700899e-01, 2.794118213e-01, 2.798589071e-01, 2.803117054e-01, + 2.807705990e-01, 2.812359989e-01, 2.817083474e-01, 2.821881216e-01, + 2.826758380e-01, 2.831720572e-01, 2.836773897e-01, 2.841925025e-01, + 2.847181272e-01, 2.852550686e-01, 2.858042160e-01, 2.863665561e-01, + 2.869431883e-01, 2.875353432e-01, 2.881444058e-01, 2.887719433e-01, + 2.894197393e-01, 2.900898371e-01, 2.907845943e-01, 2.915067526e-01, + 2.922595280e-01, 2.930467297e-01, 2.938729188e-01, 2.947436250e-01, + 2.956656471e-01, 2.966474820e-01, 2.976999534e-01, 2.988371642e-01, + 3.000779982e-01, 3.014486035e-01, 3.029867529e-01, 3.047501085e-01, + 3.068335679e-01, 3.094113041e-01, 3.128640397e-01, 3.183611310e-01, + 1.000000000e+00, 0.000000000e+00, 2.071142520e-01, 2.105359226e-01, + 2.126391547e-01, 2.141820491e-01, 2.154100048e-01, 2.164347847e-01, + 2.173170522e-01, 2.180935449e-01, 2.187882558e-01, 2.194177473e-01, + 2.199939495e-01, 2.205257498e-01, 2.210199526e-01, 2.214818874e-01, + 2.219158087e-01, 2.223251688e-01, 2.227128090e-01, 2.230810969e-01, + 2.234320265e-01, 2.237672937e-01, 2.240883533e-01, 2.243964629e-01, + 2.246927174e-01, 2.249780760e-01, 2.252533839e-01, 2.255193899e-01, + 2.257767607e-01, 2.260260924e-01, 2.262679202e-01, 2.265027267e-01, + 2.267309484e-01, 2.269529818e-01, 2.271691877e-01, 2.273798958e-01, + 2.275854078e-01, 2.277860010e-01, 2.279819305e-01, 2.281734317e-01, + 2.283607223e-01, 2.285440040e-01, 2.287234639e-01, 2.288992763e-01, + 2.290716035e-01, 2.292405968e-01, 2.294063978e-01, 2.295691392e-01, + 2.297289453e-01, 2.298859327e-01, 2.300402112e-01, 2.301918842e-01, + 2.303410491e-01, 2.304877977e-01, 2.306322171e-01, 2.307743892e-01, + 2.309143920e-01, 2.310522991e-01, 2.311881805e-01, 2.313221026e-01, + 2.314541287e-01, 2.315843188e-01, 2.317127300e-01, 2.318394170e-01, + 2.319644317e-01, 2.320878237e-01, 2.322096405e-01, 2.323299273e-01, + 2.324487276e-01, 2.325660827e-01, 2.326820325e-01, 2.327966149e-01, + 2.329098666e-01, 2.330218225e-01, 2.331325163e-01, 2.332419804e-01, + 2.333502458e-01, 2.334573424e-01, 2.335632989e-01, 2.336681431e-01, + 2.337719016e-01, 2.338746000e-01, 2.339762633e-01, 2.340769152e-01, + 2.341765788e-01, 2.342752764e-01, 2.343730295e-01, 2.344698589e-01, + 2.345657846e-01, 2.346608261e-01, 2.347550022e-01, 2.348483310e-01, + 2.349408301e-01, 2.350325167e-01, 2.351234072e-01, 2.352135175e-01, + 2.353028633e-01, 2.353914596e-01, 2.354793210e-01, 2.355664616e-01, + 2.356528952e-01, 2.357386352e-01, 2.358236945e-01, 2.359080858e-01, + 2.359918212e-01, 2.360749127e-01, 2.361573718e-01, 2.362392099e-01, + 2.363204379e-01, 2.364010664e-01, 2.364811059e-01, 2.365605663e-01, + 2.366394577e-01, 2.367177895e-01, 2.367955712e-01, 2.368728117e-01, + 2.369495201e-01, 2.370257049e-01, 2.371013746e-01, 2.371765374e-01, + 2.372512014e-01, 2.373253744e-01, 2.373990641e-01, 2.374722779e-01, + 2.375450231e-01, 2.376173069e-01, 2.376891362e-01, 2.377605178e-01, + 2.378314584e-01, 2.379019644e-01, 3.023482827e-01, 3.024262900e-01, + 3.025047965e-01, 3.025838097e-01, 3.026633373e-01, 3.027433873e-01, + 3.028239676e-01, 3.029050867e-01, 3.029867529e-01, 3.030689749e-01, + 3.031517616e-01, 3.032351222e-01, 3.033190660e-01, 3.034036025e-01, + 3.034887416e-01, 3.035744933e-01, 3.036608679e-01, 3.037478761e-01, + 3.038355287e-01, 3.039238368e-01, 3.040128120e-01, 3.041024660e-01, + 3.041928108e-01, 3.042838590e-01, 3.043756232e-01, 3.044681165e-01, + 3.045613525e-01, 3.046553451e-01, 3.047501085e-01, 3.048456573e-01, + 3.049420068e-01, 3.050391725e-01, 3.051371705e-01, 3.052360172e-01, + 3.053357297e-01, 3.054363256e-01, 3.055378230e-01, 3.056402406e-01, + 3.057435976e-01, 3.058479140e-01, 3.059532104e-01, 3.060595080e-01, + 3.061668287e-01, 3.062751953e-01, 3.063846313e-01, 3.064951609e-01, + 3.066068094e-01, 3.067196027e-01, 3.068335679e-01, 3.069487330e-01, + 3.070651270e-01, 3.071827799e-01, 3.073017230e-01, 3.074219888e-01, + 3.075436110e-01, 3.076666246e-01, 3.077910660e-01, 3.079169733e-01, + 3.080443858e-01, 3.081733448e-01, 3.083038931e-01, 3.084360754e-01, + 3.085699385e-01, 3.087055310e-01, 3.088429040e-01, 3.089821107e-01, + 3.091232069e-01, 3.092662509e-01, 3.094113041e-01, 3.095584305e-01, + 3.097076976e-01, 3.098591762e-01, 3.100129406e-01, 3.101690693e-01, + 3.103276447e-01, 3.104887538e-01, 3.106524885e-01, 3.108189457e-01, + 3.109882280e-01, 3.111604442e-01, 3.113357092e-01, 3.115141453e-01, + 3.116958823e-01, 3.118810583e-01, 3.120698206e-01, 3.122623261e-01, + 3.124587426e-01, 3.126592496e-01, 3.128640397e-01, 3.130733194e-01, + 3.132873109e-01, 3.135062539e-01, 3.137304068e-01, 3.139600497e-01, + 3.141954860e-01, 3.144370455e-01, 3.146850877e-01, 3.149400053e-01, + 3.152022285e-01, 3.154722301e-01, 3.157505311e-01, 3.160377080e-01, + 3.163344003e-01, 3.166413211e-01, 3.169592681e-01, 3.172891382e-01, + 3.176319443e-01, 3.179888371e-01, 3.183611310e-01, 3.187503370e-01, + 3.191582048e-01, 3.195867759e-01, 3.200384532e-01, 3.205160924e-01, + 3.210231247e-01, 3.215637244e-01, 3.221430419e-01, 3.227675378e-01, + 3.234454730e-01, 3.241876547e-01, 3.250086151e-01, 3.259285692e-01, + 3.269768652e-01, 3.281985533e-01, 3.296682426e-01, 3.315238816e-01, + 3.340697709e-01, 3.382524533e-01, 1.000000000e+00, +}; +const float dist_icdf_2_1[] = { + 0.000000000e+00, 1.859542478e-01, 2.030266017e-01, 2.142287108e-01, + 2.228310438e-01, 2.299321245e-01, 2.360449678e-01, 2.414535080e-01, + 2.463324831e-01, 2.507975981e-01, 2.549297009e-01, 2.587876628e-01, + 2.624157784e-01, 2.658482727e-01, 2.691121802e-01, 2.722292574e-01, + 2.752172943e-01, 2.780910396e-01, 2.808628693e-01, 2.835432798e-01, + 2.861412585e-01, 2.886645665e-01, 2.911199576e-01, 2.935133508e-01, + 2.958499662e-01, 2.981344353e-01, 3.003708891e-01, 3.025630316e-01, + 3.047141989e-01, 3.068274093e-01, 3.089054052e-01, 3.109506877e-01, + 3.129655464e-01, 3.149520851e-01, 3.169122428e-01, 3.188478132e-01, + 3.207604601e-01, 3.226517321e-01, 3.245230743e-01, 3.263758395e-01, + 3.282112975e-01, 3.300306436e-01, 3.318350056e-01, 3.336254511e-01, + 3.354029929e-01, 3.371685947e-01, 3.389231755e-01, 3.406676141e-01, + 3.424027533e-01, 3.441294032e-01, 3.458483443e-01, 3.475603310e-01, + 3.492660941e-01, 3.509663435e-01, 3.526617703e-01, 3.543530494e-01, + 3.560408418e-01, 3.577257958e-01, 3.594085497e-01, 3.610897335e-01, + 3.627699702e-01, 3.644498781e-01, 3.661300719e-01, 3.678111648e-01, + 3.694937701e-01, 3.711785023e-01, 3.728659792e-01, 3.745568236e-01, + 3.762516646e-01, 3.779511393e-01, 3.796558950e-01, 3.813665906e-01, + 3.830838985e-01, 3.848085068e-01, 3.865411212e-01, 3.882824675e-01, + 3.900332933e-01, 3.917943714e-01, 3.935665017e-01, 3.953505146e-01, + 3.971472742e-01, 3.989576812e-01, 4.007826772e-01, 4.026232487e-01, + 4.044804314e-01, 4.063553153e-01, 4.082490504e-01, 4.101628522e-01, + 4.120980096e-01, 4.140558913e-01, 4.160379553e-01, 4.180457579e-01, + 4.200809652e-01, 4.221453648e-01, 4.242408801e-01, 4.263695867e-01, + 4.285337302e-01, 4.307357480e-01, 4.329782934e-01, 4.352642647e-01, + 4.375968381e-01, 4.399795076e-01, 4.424161310e-01, 4.449109856e-01, + 4.474688341e-01, 4.500950050e-01, 4.527954890e-01, 4.555770586e-01, + 4.584474150e-01, 4.614153718e-01, 4.644910869e-01, 4.676863584e-01, + 4.710150084e-01, 4.744933855e-01, 4.781410371e-01, 4.819816218e-01, + 4.860441784e-01, 4.903649284e-01, 4.949899151e-01, 4.999789916e-01, + 5.054120924e-01, 5.113995761e-01, 5.181003269e-01, 5.257559352e-01, + 5.347621208e-01, 5.458408909e-01, 5.605580193e-01, 5.836638935e-01, + 1.000000000e+00, 0.000000000e+00, 1.320233851e-01, 1.423504406e-01, + 1.488981756e-01, 1.537964510e-01, 1.577515107e-01, 1.610901466e-01, + 1.639918877e-01, 1.665665248e-01, 1.688863544e-01, 1.710016416e-01, + 1.729488204e-01, 1.747551863e-01, 1.764417447e-01, 1.780250238e-01, + 1.795182751e-01, 1.809322945e-01, 1.822759999e-01, 1.835568476e-01, + 1.847811385e-01, 1.859542478e-01, 1.870807998e-01, 1.881648030e-01, + 1.892097564e-01, 1.902187329e-01, 1.911944471e-01, 1.921393091e-01, + 1.930554691e-01, 1.939448542e-01, 1.948091983e-01, 1.956500674e-01, + 1.964688812e-01, 1.972669306e-01, 1.980453932e-01, 1.988053464e-01, + 1.995477787e-01, 2.002735989e-01, 2.009836451e-01, 2.016786915e-01, + 2.023594553e-01, 2.030266017e-01, 2.036807492e-01, 2.043224739e-01, + 2.049523133e-01, 2.055707697e-01, 2.061783132e-01, 2.067753847e-01, + 2.073623979e-01, 2.079397419e-01, 2.085077828e-01, 2.090668659e-01, + 2.096173167e-01, 2.101594431e-01, 2.106935361e-01, 2.112198714e-01, + 2.117387101e-01, 2.122503001e-01, 2.127548768e-01, 2.132526639e-01, + 2.137438743e-01, 2.142287108e-01, 2.147073665e-01, 2.151800258e-01, + 2.156468644e-01, 2.161080506e-01, 2.165637448e-01, 2.170141009e-01, + 2.174592658e-01, 2.178993806e-01, 2.183345803e-01, 2.187649946e-01, + 2.191907477e-01, 2.196119591e-01, 2.200287436e-01, 2.204412114e-01, + 2.208494687e-01, 2.212536177e-01, 2.216537566e-01, 2.220499803e-01, + 2.224423800e-01, 2.228310438e-01, 2.232160568e-01, 2.235975008e-01, + 2.239754551e-01, 2.243499962e-01, 2.247211981e-01, 2.250891322e-01, + 2.254538676e-01, 2.258154713e-01, 2.261740081e-01, 2.265295406e-01, + 2.268821296e-01, 2.272318340e-01, 2.275787108e-01, 2.279228154e-01, + 2.282642015e-01, 2.286029211e-01, 2.289390248e-01, 2.292725617e-01, + 2.296035795e-01, 2.299321245e-01, 2.302582416e-01, 2.305819748e-01, + 2.309033664e-01, 2.312224580e-01, 2.315392898e-01, 2.318539009e-01, + 2.321663295e-01, 2.324766128e-01, 2.327847869e-01, 2.330908871e-01, + 2.333949477e-01, 2.336970022e-01, 2.339970831e-01, 2.342952224e-01, + 2.345914510e-01, 2.348857992e-01, 2.351782964e-01, 2.354689717e-01, + 2.357578530e-01, 2.360449678e-01, 2.363303430e-01, 2.366140048e-01, + 2.368959787e-01, 2.371762897e-01, 2.374549623e-01, 2.377320204e-01, + 2.380074874e-01, 2.382813860e-01, 5.153214020e-01, 5.156611194e-01, + 5.160029569e-01, 5.163469462e-01, 5.166931196e-01, 5.170415101e-01, + 5.173921516e-01, 5.177450787e-01, 5.181003269e-01, 5.184579325e-01, + 5.188179326e-01, 5.191803655e-01, 5.195452700e-01, 5.199126863e-01, + 5.202826553e-01, 5.206552191e-01, 5.210304208e-01, 5.214083046e-01, + 5.217889160e-01, 5.221723014e-01, 5.225585087e-01, 5.229475870e-01, + 5.233395866e-01, 5.237345594e-01, 5.241325585e-01, 5.245336387e-01, + 5.249378560e-01, 5.253452684e-01, 5.257559352e-01, 5.261699176e-01, + 5.265872786e-01, 5.270080830e-01, 5.274323975e-01, 5.278602907e-01, + 5.282918337e-01, 5.287270992e-01, 5.291661627e-01, 5.296091018e-01, + 5.300559965e-01, 5.305069295e-01, 5.309619862e-01, 5.314212547e-01, + 5.318848262e-01, 5.323527947e-01, 5.328252576e-01, 5.333023156e-01, + 5.337840729e-01, 5.342706374e-01, 5.347621208e-01, 5.352586390e-01, + 5.357603118e-01, 5.362672639e-01, 5.367796243e-01, 5.372975271e-01, + 5.378211115e-01, 5.383505222e-01, 5.388859097e-01, 5.394274304e-01, + 5.399752472e-01, 5.405295297e-01, 5.410904546e-01, 5.416582061e-01, + 5.422329765e-01, 5.428149665e-01, 5.434043856e-01, 5.440014529e-01, + 5.446063978e-01, 5.452194600e-01, 5.458408909e-01, 5.464709541e-01, + 5.471099260e-01, 5.477580968e-01, 5.484157717e-01, 5.490832715e-01, + 5.497609341e-01, 5.504491156e-01, 5.511481915e-01, 5.518585583e-01, + 5.525806353e-01, 5.533148659e-01, 5.540617201e-01, 5.548216962e-01, + 5.555953236e-01, 5.563831648e-01, 5.571858192e-01, 5.580039255e-01, + 5.588381660e-01, 5.596892701e-01, 5.605580193e-01, 5.614452520e-01, + 5.623518694e-01, 5.632788419e-01, 5.642272167e-01, 5.651981257e-01, + 5.661927957e-01, 5.672125589e-01, 5.682588658e-01, 5.693332996e-01, + 5.704375930e-01, 5.715736485e-01, 5.727435607e-01, 5.739496441e-01, + 5.751944653e-01, 5.764808808e-01, 5.778120840e-01, 5.791916600e-01, + 5.806236539e-01, 5.821126537e-01, 5.836638935e-01, 5.852833820e-01, + 5.869780657e-01, 5.887560374e-01, 5.906268058e-01, 5.926016517e-01, + 5.946941033e-01, 5.969205837e-01, 5.993013129e-01, 6.018615930e-01, + 6.046336933e-01, 6.076597081e-01, 6.109960624e-01, 6.147209672e-01, + 6.189475113e-01, 6.238484787e-01, 6.297084304e-01, 6.370498843e-01, + 6.470149727e-01, 6.631069916e-01, 1.000000000e+00, +}; +const float dist_icdf_2_2[] = { + 0.000000000e+00, 8.118337049e-02, 1.023138483e-01, 1.174621933e-01, + 1.297526043e-01, 1.403112116e-01, 1.496887316e-01, 1.582007333e-01, + 1.660469292e-01, 1.733626958e-01, 1.802445542e-01, 1.867640456e-01, + 1.929758544e-01, 1.989228414e-01, 2.046393065e-01, 2.101531860e-01, + 2.154875781e-01, 2.206618321e-01, 2.256923431e-01, 2.305931449e-01, + 2.353763584e-01, 2.400525381e-01, 2.446309418e-01, 2.491197450e-01, + 2.535262109e-01, 2.578568297e-01, 2.621174303e-01, 2.663132738e-01, + 2.704491303e-01, 2.745293430e-01, 2.785578826e-01, 2.825383932e-01, + 2.864742311e-01, 2.903684984e-01, 2.942240718e-01, 2.980436275e-01, + 3.018296630e-01, 3.055845160e-01, 3.093103809e-01, 3.130093237e-01, + 3.166832948e-01, 3.203341406e-01, 3.239636136e-01, 3.275733819e-01, + 3.311650372e-01, 3.347401025e-01, 3.383000385e-01, 3.418462503e-01, + 3.453800924e-01, 3.489028742e-01, 3.524158648e-01, 3.559202971e-01, + 3.594173722e-01, 3.629082628e-01, 3.663941172e-01, 3.698760623e-01, + 3.733552070e-01, 3.768326452e-01, 3.803094588e-01, 3.837867203e-01, + 3.872654956e-01, 3.907468468e-01, 3.942318348e-01, 3.977215218e-01, + 4.012169739e-01, 4.047192640e-01, 4.082294738e-01, 4.117486971e-01, + 4.152780423e-01, 4.188186351e-01, 4.223716215e-01, 4.259381708e-01, + 4.295194789e-01, 4.331167715e-01, 4.367313075e-01, 4.403643831e-01, + 4.440173352e-01, 4.476915465e-01, 4.513884492e-01, 4.551095305e-01, + 4.588563379e-01, 4.626304849e-01, 4.664336572e-01, 4.702676202e-01, + 4.741342259e-01, 4.780354221e-01, 4.819732610e-01, 4.859499100e-01, + 4.899676628e-01, 4.940289525e-01, 4.981363656e-01, 5.022926583e-01, + 5.065007745e-01, 5.107638665e-01, 5.150853179e-01, 5.194687702e-01, + 5.239181535e-01, 5.284377209e-01, 5.330320886e-01, 5.377062831e-01, + 5.424657950e-01, 5.473166429e-01, 5.522654479e-01, 5.573195231e-01, + 5.624869788e-01, 5.677768502e-01, 5.731992509e-01, 5.787655604e-01, + 5.844886555e-01, 5.903831966e-01, 5.964659877e-01, 6.027564333e-01, + 6.092771266e-01, 6.160546161e-01, 6.231204220e-01, 6.305124087e-01, + 6.382766741e-01, 6.464702150e-01, 6.551647906e-01, 6.644527026e-01, + 6.744557835e-01, 6.853400369e-01, 6.973408986e-01, 7.108101706e-01, + 7.263122279e-01, 7.448505278e-01, 7.685278469e-01, 8.033973195e-01, + 1.000000000e+00, 0.000000000e+00, 3.106621173e-02, 3.865437620e-02, + 4.396047104e-02, 4.818156417e-02, 5.174682664e-02, 5.486532158e-02, + 5.765646720e-02, 6.019563397e-02, 6.253378827e-02, 6.470718680e-02, + 6.674264590e-02, 6.866062137e-02, 7.047711355e-02, 7.220490096e-02, + 7.385436959e-02, 7.543408836e-02, 7.695121930e-02, 7.841181665e-02, + 7.982104951e-02, 8.118337049e-02, 8.250264551e-02, 8.378225504e-02, + 8.502517414e-02, 8.623403642e-02, 8.741118568e-02, 8.855871805e-02, + 8.967851653e-02, 9.077227977e-02, 9.184154592e-02, 9.288771284e-02, + 9.391205503e-02, 9.491573821e-02, 9.589983160e-02, 9.686531862e-02, + 9.781310607e-02, 9.874403212e-02, 9.965887320e-02, 1.005583502e-01, + 1.014431335e-01, 1.023138483e-01, 1.031710779e-01, 1.040153682e-01, + 1.048472305e-01, 1.056671445e-01, 1.064755612e-01, 1.072729046e-01, + 1.080595746e-01, 1.088359484e-01, 1.096023824e-01, 1.103592135e-01, + 1.111067610e-01, 1.118453273e-01, 1.125751995e-01, 1.132966503e-01, + 1.140099390e-01, 1.147153123e-01, 1.154130054e-01, 1.161032423e-01, + 1.167862369e-01, 1.174621933e-01, 1.181313069e-01, 1.187937641e-01, + 1.194497437e-01, 1.200994169e-01, 1.207429477e-01, 1.213804934e-01, + 1.220122049e-01, 1.226382274e-01, 1.232587001e-01, 1.238737570e-01, + 1.244835270e-01, 1.250881342e-01, 1.256876979e-01, 1.262823335e-01, + 1.268721518e-01, 1.274572599e-01, 1.280377611e-01, 1.286137553e-01, + 1.291853386e-01, 1.297526043e-01, 1.303156423e-01, 1.308745398e-01, + 1.314293809e-01, 1.319802472e-01, 1.325272176e-01, 1.330703687e-01, + 1.336097745e-01, 1.341455069e-01, 1.346776357e-01, 1.352062283e-01, + 1.357313505e-01, 1.362530658e-01, 1.367714363e-01, 1.372865218e-01, + 1.377983809e-01, 1.383070703e-01, 1.388126451e-01, 1.393151590e-01, + 1.398146642e-01, 1.403112116e-01, 1.408048505e-01, 1.412956292e-01, + 1.417835945e-01, 1.422687921e-01, 1.427512666e-01, 1.432310613e-01, + 1.437082185e-01, 1.441827795e-01, 1.446547846e-01, 1.451242729e-01, + 1.455912828e-01, 1.460558516e-01, 1.465180159e-01, 1.469778114e-01, + 1.474352727e-01, 1.478904340e-01, 1.483433284e-01, 1.487939885e-01, + 1.492424459e-01, 1.496887316e-01, 1.501328762e-01, 1.505749091e-01, + 1.510148594e-01, 1.514527556e-01, 1.518886254e-01, 1.523224961e-01, + 1.527543942e-01, 1.531843458e-01, 6.923874374e-01, 6.929947893e-01, + 6.936054269e-01, 6.942193962e-01, 6.948367441e-01, 6.954575186e-01, + 6.960817689e-01, 6.967095451e-01, 6.973408986e-01, 6.979758819e-01, + 6.986145488e-01, 6.992569543e-01, 6.999031546e-01, 7.005532074e-01, + 7.012071718e-01, 7.018651083e-01, 7.025270786e-01, 7.031931464e-01, + 7.038633767e-01, 7.045378361e-01, 7.052165930e-01, 7.058997175e-01, + 7.065872817e-01, 7.072793592e-01, 7.079760258e-01, 7.086773593e-01, + 7.093834396e-01, 7.100943486e-01, 7.108101706e-01, 7.115309922e-01, + 7.122569024e-01, 7.129879928e-01, 7.137243574e-01, 7.144660931e-01, + 7.152132995e-01, 7.159660793e-01, 7.167245381e-01, 7.174887847e-01, + 7.182589312e-01, 7.190350932e-01, 7.198173899e-01, 7.206059441e-01, + 7.214008828e-01, 7.222023368e-01, 7.230104413e-01, 7.238253359e-01, + 7.246471650e-01, 7.254760775e-01, 7.263122279e-01, 7.271557756e-01, + 7.280068860e-01, 7.288657300e-01, 7.297324848e-01, 7.306073341e-01, + 7.314904684e-01, 7.323820852e-01, 7.332823897e-01, 7.341915948e-01, + 7.351099217e-01, 7.360376006e-01, 7.369748708e-01, 7.379219813e-01, + 7.388791914e-01, 7.398467716e-01, 7.408250034e-01, 7.418141811e-01, + 7.428146114e-01, 7.438266152e-01, 7.448505278e-01, 7.458866999e-01, + 7.469354989e-01, 7.479973096e-01, 7.490725358e-01, 7.501616011e-01, + 7.512649506e-01, 7.523830523e-01, 7.535163988e-01, 7.546655088e-01, + 7.558309295e-01, 7.570132385e-01, 7.582130461e-01, 7.594309982e-01, + 7.606677786e-01, 7.619241127e-01, 7.632007707e-01, 7.644985716e-01, + 7.658183875e-01, 7.671611482e-01, 7.685278469e-01, 7.699195457e-01, + 7.713373831e-01, 7.727825808e-01, 7.742564529e-01, 7.757604152e-01, + 7.772959967e-01, 7.788648518e-01, 7.804687753e-01, 7.821097187e-01, + 7.837898095e-01, 7.855113740e-01, 7.872769630e-01, 7.890893826e-01, + 7.909517305e-01, 7.928674385e-01, 7.948403240e-01, 7.968746515e-01, + 7.989752069e-01, 8.011473886e-01, 8.033973195e-01, 8.057319861e-01, + 8.081594140e-01, 8.106888897e-01, 8.133312474e-01, 8.160992432e-01, + 8.190080511e-01, 8.220759342e-01, 8.253251700e-01, 8.287833569e-01, + 8.324853107e-01, 8.364759073e-01, 8.408145094e-01, 8.455821903e-01, + 8.508942228e-01, 8.569233339e-01, 8.639474923e-01, 8.724627474e-01, + 8.835133158e-01, 9.001240145e-01, 1.000000000e+00, +}; +const float dist_icdf_2_3[] = { + 0.000000000e+00, 5.156460241e-02, 7.025365981e-02, 8.438877451e-02, + 9.624538510e-02, 1.066801039e-01, 1.161239739e-01, 1.248293697e-01, + 1.329588097e-01, 1.406240760e-01, 1.479058747e-01, 1.548646901e-01, + 1.615472133e-01, 1.679903684e-01, 1.742239464e-01, 1.802723945e-01, + 1.861560676e-01, 1.918921289e-01, 1.974952111e-01, 2.029779120e-01, + 2.083511730e-01, 2.136245718e-01, 2.188065524e-01, 2.239046078e-01, + 2.289254267e-01, 2.338750129e-01, 2.387587830e-01, 2.435816472e-01, + 2.483480763e-01, 2.530621582e-01, 2.577276455e-01, 2.623479963e-01, + 2.669264082e-01, 2.714658487e-01, 2.759690802e-01, 2.804386829e-01, + 2.848770741e-01, 2.892865251e-01, 2.936691765e-01, 2.980270511e-01, + 3.023620661e-01, 3.066760434e-01, 3.109707190e-01, 3.152477514e-01, + 3.195087295e-01, 3.237551791e-01, 3.279885693e-01, 3.322103186e-01, + 3.364217994e-01, 3.406243437e-01, 3.448192468e-01, 3.490077719e-01, + 3.531911539e-01, 3.573706028e-01, 3.615473075e-01, 3.657224388e-01, + 3.698971524e-01, 3.740725922e-01, 3.782498930e-01, 3.824301830e-01, + 3.866145869e-01, 3.908042285e-01, 3.950002331e-01, 3.992037304e-01, + 4.034158570e-01, 4.076377588e-01, 4.118705944e-01, 4.161155369e-01, + 4.203737774e-01, 4.246465277e-01, 4.289350232e-01, 4.332405262e-01, + 4.375643291e-01, 4.419077580e-01, 4.462721760e-01, 4.506589878e-01, + 4.550696432e-01, 4.595056417e-01, 4.639685378e-01, 4.684599455e-01, + 4.729815444e-01, 4.775350856e-01, 4.821223984e-01, 4.867453976e-01, + 4.914060916e-01, 4.961065907e-01, 5.008491176e-01, 5.056360175e-01, + 5.104697703e-01, 5.153530039e-01, 5.202885089e-01, 5.252792555e-01, + 5.303284123e-01, 5.354393669e-01, 5.406157509e-01, 5.458614661e-01, + 5.511807167e-01, 5.565780441e-01, 5.620583690e-01, 5.676270382e-01, + 5.732898805e-01, 5.790532715e-01, 5.849242090e-01, 5.909104038e-01, + 5.970203857e-01, 6.032636325e-01, 6.096507236e-01, 6.161935286e-01, + 6.229054372e-01, 6.298016449e-01, 6.368995094e-01, 6.442190028e-01, + 6.517832895e-01, 6.596194785e-01, 6.677596156e-01, 6.762420160e-01, + 6.851130922e-01, 6.944299174e-01, 7.042639193e-01, 7.147063735e-01, + 7.258768861e-01, 7.379371035e-01, 7.511141635e-01, 7.657438307e-01, + 7.823578790e-01, 8.018868686e-01, 8.262401558e-01, 8.607404527e-01, + 1.000000000e+00, 0.000000000e+00, 1.398057981e-02, 1.885775773e-02, + 2.247762213e-02, 2.546760705e-02, 2.806364241e-02, 3.038435232e-02, + 3.249914629e-02, 3.445269526e-02, 3.627570700e-02, 3.799033927e-02, + 3.961318702e-02, 4.115705152e-02, 4.263204764e-02, 4.404632838e-02, + 4.540657670e-02, 4.671834982e-02, 4.798632654e-02, 4.921448906e-02, + 5.040625923e-02, 5.156460241e-02, 5.269210797e-02, 5.379105240e-02, + 5.486344947e-02, 5.591109060e-02, 5.693557753e-02, 5.793834915e-02, + 5.892070362e-02, 5.988381679e-02, 6.082875765e-02, 6.175650138e-02, + 6.266794040e-02, 6.356389381e-02, 6.444511551e-02, 6.531230118e-02, + 6.616609438e-02, 6.700709179e-02, 6.783584783e-02, 6.865287871e-02, + 6.945866602e-02, 7.025365981e-02, 7.103828147e-02, 7.181292613e-02, + 7.257796493e-02, 7.333374698e-02, 7.408060113e-02, 7.481883757e-02, + 7.554874930e-02, 7.627061336e-02, 7.698469208e-02, 7.769123412e-02, + 7.839047540e-02, 7.908264007e-02, 7.976794123e-02, 8.044658173e-02, + 8.111875481e-02, 8.178464473e-02, 8.244442735e-02, 8.309827063e-02, + 8.374633515e-02, 8.438877451e-02, 8.502573577e-02, 8.565735985e-02, + 8.628378182e-02, 8.690513130e-02, 8.752153271e-02, 8.813310559e-02, + 8.873996484e-02, 8.934222097e-02, 8.993998036e-02, 9.053334540e-02, + 9.112241477e-02, 9.170728360e-02, 9.228804363e-02, 9.286478336e-02, + 9.343758828e-02, 9.400654092e-02, 9.457172106e-02, 9.513320582e-02, + 9.569106977e-02, 9.624538510e-02, 9.679622166e-02, 9.734364711e-02, + 9.788772701e-02, 9.842852486e-02, 9.896610226e-02, 9.950051894e-02, + 1.000318329e-01, 1.005601003e-01, 1.010853758e-01, 1.016077124e-01, + 1.021271618e-01, 1.026437739e-01, 1.031575974e-01, 1.036686798e-01, + 1.041770670e-01, 1.046828039e-01, 1.051859341e-01, 1.056865001e-01, + 1.061845433e-01, 1.066801039e-01, 1.071732212e-01, 1.076639335e-01, + 1.081522780e-01, 1.086382913e-01, 1.091220086e-01, 1.096034647e-01, + 1.100826934e-01, 1.105597275e-01, 1.110345994e-01, 1.115073404e-01, + 1.119779812e-01, 1.124465519e-01, 1.129130817e-01, 1.133775993e-01, + 1.138401327e-01, 1.143007093e-01, 1.147593557e-01, 1.152160984e-01, + 1.156709627e-01, 1.161239739e-01, 1.165751564e-01, 1.170245343e-01, + 1.174721310e-01, 1.179179696e-01, 1.183620727e-01, 1.188044622e-01, + 1.192451599e-01, 1.196841870e-01, 7.456909806e-01, 7.463571329e-01, + 7.470265510e-01, 7.476992788e-01, 7.483753609e-01, 7.490548432e-01, + 7.497377723e-01, 7.504241961e-01, 7.511141635e-01, 7.518077242e-01, + 7.525049294e-01, 7.532058313e-01, 7.539104833e-01, 7.546189402e-01, + 7.553312577e-01, 7.560474932e-01, 7.567677052e-01, 7.574919539e-01, + 7.582203006e-01, 7.589528084e-01, 7.596895418e-01, 7.604305669e-01, + 7.611759515e-01, 7.619257652e-01, 7.626800792e-01, 7.634389667e-01, + 7.642025028e-01, 7.649707644e-01, 7.657438307e-01, 7.665217828e-01, + 7.673047042e-01, 7.680926807e-01, 7.688858002e-01, 7.696841533e-01, + 7.704878332e-01, 7.712969356e-01, 7.721115591e-01, 7.729318051e-01, + 7.737577780e-01, 7.745895855e-01, 7.754273384e-01, 7.762711507e-01, + 7.771211403e-01, 7.779774286e-01, 7.788401409e-01, 7.797094063e-01, + 7.805853585e-01, 7.814681353e-01, 7.823578790e-01, 7.832547370e-01, + 7.841588615e-01, 7.850704101e-01, 7.859895456e-01, 7.869164370e-01, + 7.878512591e-01, 7.887941932e-01, 7.897454271e-01, 7.907051558e-01, + 7.916735817e-01, 7.926509150e-01, 7.936373739e-01, 7.946331856e-01, + 7.956385861e-01, 7.966538213e-01, 7.976791471e-01, 7.987148305e-01, + 7.997611495e-01, 8.008183944e-01, 8.018868686e-01, 8.029668886e-01, + 8.040587859e-01, 8.051629071e-01, 8.062796153e-01, 8.074092912e-01, + 8.085523340e-01, 8.097091631e-01, 8.108802190e-01, 8.120659654e-01, + 8.132668904e-01, 8.144835083e-01, 8.157163620e-01, 8.169660251e-01, + 8.182331038e-01, 8.195182403e-01, 8.208221152e-01, 8.221454510e-01, + 8.234890157e-01, 8.248536268e-01, 8.262401558e-01, 8.276495330e-01, + 8.290827536e-01, 8.305408836e-01, 8.320250672e-01, 8.335365346e-01, + 8.350766114e-01, 8.366467291e-01, 8.382484368e-01, 8.398834151e-01, + 8.415534919e-01, 8.432606605e-01, 8.450071012e-01, 8.467952062e-01, + 8.486276087e-01, 8.505072177e-01, 8.524372594e-01, 8.544213264e-01, + 8.564634377e-01, 8.585681112e-01, 8.607404527e-01, 8.629862668e-01, + 8.653121948e-01, 8.677258898e-01, 8.702362415e-01, 8.728536674e-01, + 8.755904988e-01, 8.784614987e-01, 8.814845727e-01, 8.846817666e-01, + 8.880807064e-01, 8.917167395e-01, 8.956362464e-01, 8.999019968e-01, + 9.046023235e-01, 9.098680170e-01, 9.159065992e-01, 9.230819916e-01, + 9.321428628e-01, 9.451837998e-01, 1.000000000e+00, +}; +const float dist_icdf_2_4[] = { + 0.000000000e+00, 2.695397666e-02, 4.110739181e-02, 5.271023992e-02, + 6.294554102e-02, 7.228895093e-02, 8.099050278e-02, 8.920152585e-02, + 9.702212136e-02, 1.045227143e-01, 1.117551555e-01, 1.187589803e-01, + 1.255651847e-01, 1.321986273e-01, 1.386796250e-01, 1.450250504e-01, + 1.512491094e-01, 1.573639064e-01, 1.633798640e-01, 1.693060405e-01, + 1.751503742e-01, 1.809198748e-01, 1.866207738e-01, 1.922586462e-01, + 1.978385079e-01, 2.033648961e-01, 2.088419351e-01, 2.142733916e-01, + 2.196627203e-01, 2.250131029e-01, 2.303274813e-01, 2.356085856e-01, + 2.408589583e-01, 2.460809752e-01, 2.512768640e-01, 2.564487197e-01, + 2.615985188e-01, 2.667281314e-01, 2.718393326e-01, 2.769338112e-01, + 2.820131792e-01, 2.870789793e-01, 2.921326916e-01, 2.971757400e-01, + 3.022094980e-01, 3.072352941e-01, 3.122544161e-01, 3.172681156e-01, + 3.222776124e-01, 3.272840979e-01, 3.322887385e-01, 3.372926793e-01, + 3.422970469e-01, 3.473029522e-01, 3.523114934e-01, 3.573237587e-01, + 3.623408286e-01, 3.673637785e-01, 3.723936814e-01, 3.774316097e-01, + 3.824786379e-01, 3.875358450e-01, 3.926043164e-01, 3.976851468e-01, + 4.027794421e-01, 4.078883217e-01, 4.130129215e-01, 4.181543958e-01, + 4.233139204e-01, 4.284926949e-01, 4.336919457e-01, 4.389129288e-01, + 4.441569331e-01, 4.494252836e-01, 4.547193448e-01, 4.600405246e-01, + 4.653902779e-01, 4.707701111e-01, 4.761815870e-01, 4.816263290e-01, + 4.871060271e-01, 4.926224433e-01, 4.981774184e-01, 5.037728783e-01, + 5.094108423e-01, 5.150934308e-01, 5.208228750e-01, 5.266015268e-01, + 5.324318701e-01, 5.383165335e-01, 5.442583041e-01, 5.502601433e-01, + 5.563252043e-01, 5.624568518e-01, 5.686586846e-01, 5.749345607e-01, + 5.812886264e-01, 5.877253491e-01, 5.942495554e-01, 6.008664749e-01, + 6.075817905e-01, 6.144016976e-01, 6.213329733e-01, 6.283830574e-01, + 6.355601490e-01, 6.428733212e-01, 6.503326593e-01, 6.579494274e-01, + 6.657362730e-01, 6.737074776e-01, 6.818792696e-01, 6.902702175e-01, + 6.989017310e-01, 7.077987082e-01, 7.169903835e-01, 7.265114597e-01, + 7.364036473e-01, 7.467178077e-01, 7.575170125e-01, 7.688810512e-01, + 7.809133174e-01, 7.937518080e-01, 8.075876893e-01, 8.226989287e-01, + 8.395172100e-01, 8.587798418e-01, 8.819520410e-01, 9.129255057e-01, + 1.000000000e+00, 0.000000000e+00, 4.436153319e-03, 6.724776836e-03, + 8.579782530e-03, 1.020018075e-02, 1.166622129e-02, 1.302018774e-02, + 1.428772259e-02, 1.548581635e-02, 1.662643929e-02, 1.771841462e-02, + 1.876847575e-02, 1.978190484e-02, 2.076293954e-02, 2.171504335e-02, + 2.264109181e-02, 2.354350451e-02, 2.442434118e-02, 2.528537304e-02, + 2.612813687e-02, 2.695397666e-02, 2.776407614e-02, 2.855948457e-02, + 2.934113737e-02, 3.010987288e-02, 3.086644598e-02, 3.161153943e-02, + 3.234577324e-02, 3.306971250e-02, 3.378387404e-02, 3.448873210e-02, + 3.518472306e-02, 3.587224962e-02, 3.655168439e-02, 3.722337291e-02, + 3.788763640e-02, 3.854477410e-02, 3.919506535e-02, 3.983877138e-02, + 4.047613696e-02, 4.110739181e-02, 4.173275189e-02, 4.235242053e-02, + 4.296658945e-02, 4.357543968e-02, 4.417914239e-02, 4.477785961e-02, + 4.537174492e-02, 4.596094408e-02, 4.654559553e-02, 4.712583097e-02, + 4.770177574e-02, 4.827354931e-02, 4.884126561e-02, 4.940503342e-02, + 4.996495668e-02, 5.052113480e-02, 5.107366292e-02, 5.162263217e-02, + 5.216812991e-02, 5.271023992e-02, 5.324904267e-02, 5.378461543e-02, + 5.431703246e-02, 5.484636523e-02, 5.537268250e-02, 5.589605048e-02, + 5.641653298e-02, 5.693419153e-02, 5.744908547e-02, 5.796127208e-02, + 5.847080666e-02, 5.897774265e-02, 5.948213171e-02, 5.998402377e-02, + 6.048346718e-02, 6.098050871e-02, 6.147519364e-02, 6.196756587e-02, + 6.245766792e-02, 6.294554102e-02, 6.343122517e-02, 6.391475917e-02, + 6.439618068e-02, 6.487552629e-02, 6.535283151e-02, 6.582813087e-02, + 6.630145792e-02, 6.677284528e-02, 6.724232470e-02, 6.770992704e-02, + 6.817568236e-02, 6.863961991e-02, 6.910176818e-02, 6.956215492e-02, + 7.002080718e-02, 7.047775130e-02, 7.093301298e-02, 7.138661729e-02, + 7.183858866e-02, 7.228895093e-02, 7.273772739e-02, 7.318494074e-02, + 7.363061317e-02, 7.407476635e-02, 7.451742143e-02, 7.495859908e-02, + 7.539831952e-02, 7.583660250e-02, 7.627346732e-02, 7.670893287e-02, + 7.714301762e-02, 7.757573964e-02, 7.800711661e-02, 7.843716584e-02, + 7.886590425e-02, 7.929334845e-02, 7.971951465e-02, 8.014441878e-02, + 8.056807640e-02, 8.099050278e-02, 8.141171289e-02, 8.183172137e-02, + 8.225054261e-02, 8.266819069e-02, 8.308467942e-02, 8.350002236e-02, + 8.391423279e-02, 8.432732375e-02, 8.019183596e-01, 8.026166567e-01, + 8.033178420e-01, 8.040219518e-01, 8.047290229e-01, 8.054390933e-01, + 8.061522014e-01, 8.068683867e-01, 8.075876893e-01, 8.083101502e-01, + 8.090358116e-01, 8.097647162e-01, 8.104969079e-01, 8.112324314e-01, + 8.119713326e-01, 8.127136583e-01, 8.134594563e-01, 8.142087757e-01, + 8.149616666e-01, 8.157181803e-01, 8.164783694e-01, 8.172422875e-01, + 8.180099898e-01, 8.187815326e-01, 8.195569738e-01, 8.203363725e-01, + 8.211197895e-01, 8.219072870e-01, 8.226989287e-01, 8.234947802e-01, + 8.242949085e-01, 8.250993827e-01, 8.259082735e-01, 8.267216535e-01, + 8.275395973e-01, 8.283621817e-01, 8.291894854e-01, 8.300215893e-01, + 8.308585769e-01, 8.317005337e-01, 8.325475479e-01, 8.333997102e-01, + 8.342571142e-01, 8.351198559e-01, 8.359880345e-01, 8.368617522e-01, + 8.377411143e-01, 8.386262295e-01, 8.395172100e-01, 8.404141714e-01, + 8.413172332e-01, 8.422265189e-01, 8.431421561e-01, 8.440642767e-01, + 8.449930171e-01, 8.459285186e-01, 8.468709272e-01, 8.478203945e-01, + 8.487770774e-01, 8.497411386e-01, 8.507127467e-01, 8.516920771e-01, + 8.526793117e-01, 8.536746395e-01, 8.546782569e-01, 8.556903686e-01, + 8.567111873e-01, 8.577409347e-01, 8.587798418e-01, 8.598281498e-01, + 8.608861101e-01, 8.619539854e-01, 8.630320505e-01, 8.641205926e-01, + 8.652199125e-01, 8.663303254e-01, 8.674521617e-01, 8.685857685e-01, + 8.697315103e-01, 8.708897703e-01, 8.720609522e-01, 8.732454813e-01, + 8.744438061e-01, 8.756564006e-01, 8.768837659e-01, 8.781264326e-01, + 8.793849630e-01, 8.806599542e-01, 8.819520410e-01, 8.832618993e-01, + 8.845902496e-01, 8.859378618e-01, 8.873055594e-01, 8.886942252e-01, + 8.901048075e-01, 8.915383267e-01, 8.929958833e-01, 8.944786672e-01, + 8.959879676e-01, 8.975251852e-01, 8.990918462e-01, 9.006896182e-01, + 9.023203291e-01, 9.039859898e-01, 9.056888200e-01, 9.074312801e-01, + 9.092161090e-01, 9.110463698e-01, 9.129255057e-01, 9.148574089e-01, + 9.168465065e-01, 9.188978685e-01, 9.210173448e-01, 9.232117431e-01, + 9.254890618e-01, 9.278588003e-01, 9.303323819e-01, 9.329237415e-01, + 9.356501662e-01, 9.385335328e-01, 9.416021983e-01, 9.448940215e-01, + 9.484614628e-01, 9.523808247e-01, 9.567706423e-01, 9.618334432e-01, + 9.679718812e-01, 9.762561128e-01, 1.000000000e+00, +}; +const float dist_icdf_2_5[] = { + 0.000000000e+00, 1.053468150e-02, 1.893424839e-02, 2.670341150e-02, + 3.410025603e-02, 4.123932205e-02, 4.818498632e-02, 5.497827400e-02, + 6.164749562e-02, 6.821330149e-02, 7.469138542e-02, 8.109405867e-02, + 8.743122657e-02, 9.371102570e-02, 9.994025655e-02, 1.061246874e-01, + 1.122692738e-01, 1.183783207e-01, 1.244556048e-01, 1.305044690e-01, + 1.365278954e-01, 1.425285640e-01, 1.485088988e-01, 1.544711060e-01, + 1.604172048e-01, 1.663490530e-01, 1.722683685e-01, 1.781767471e-01, + 1.840756778e-01, 1.899665557e-01, 1.958506934e-01, 2.017293303e-01, + 2.076036411e-01, 2.134747431e-01, 2.193437025e-01, 2.252115402e-01, + 2.310792371e-01, 2.369477377e-01, 2.428179552e-01, 2.486907742e-01, + 2.545670547e-01, 2.604476345e-01, 2.663333323e-01, 2.722249500e-01, + 2.781232753e-01, 2.840290833e-01, 2.899431390e-01, 2.958661990e-01, + 3.017990133e-01, 3.077423268e-01, 3.136968814e-01, 3.196634169e-01, + 3.256426728e-01, 3.316353900e-01, 3.376423118e-01, 3.436641855e-01, + 3.497017638e-01, 3.557558059e-01, 3.618270793e-01, 3.679163611e-01, + 3.740244391e-01, 3.801521133e-01, 3.863001978e-01, 3.924695218e-01, + 3.986609314e-01, 4.048752910e-01, 4.111134853e-01, 4.173764208e-01, + 4.236650276e-01, 4.299802616e-01, 4.363231062e-01, 4.426945749e-01, + 4.490957131e-01, 4.555276009e-01, 4.619913555e-01, 4.684881343e-01, + 4.750191374e-01, 4.815856116e-01, 4.881888530e-01, 4.948302116e-01, + 5.015110950e-01, 5.082329728e-01, 5.149973816e-01, 5.218059306e-01, + 5.286603068e-01, 5.355622819e-01, 5.425137191e-01, 5.495165810e-01, + 5.565729380e-01, 5.636849781e-01, 5.708550169e-01, 5.780855103e-01, + 5.853790668e-01, 5.927384627e-01, 6.001666588e-01, 6.076668193e-01, + 6.152423327e-01, 6.228968364e-01, 6.306342446e-01, 6.384587797e-01, + 6.463750090e-01, 6.543878876e-01, 6.625028072e-01, 6.707256544e-01, + 6.790628786e-01, 6.875215726e-01, 6.961095689e-01, 7.048355554e-01, + 7.137092154e-01, 7.227413990e-01, 7.319443343e-01, 7.413318912e-01, + 7.509199142e-01, 7.607266476e-01, 7.707732885e-01, 7.810847149e-01, + 7.916904656e-01, 8.026260868e-01, 8.139350287e-01, 8.256713978e-01, + 8.379040937e-01, 8.507232981e-01, 8.642512048e-01, 8.786610083e-01, + 8.942136605e-01, 9.113385802e-01, 9.308485605e-01, 9.547510451e-01, + 1.000000000e+00, 0.000000000e+00, 8.424954622e-04, 1.510777833e-03, + 2.126155588e-03, 2.709575813e-03, 3.270370962e-03, 3.813802212e-03, + 4.343230316e-03, 4.860978581e-03, 5.368743714e-03, 5.867815971e-03, + 6.359207543e-03, 6.843732341e-03, 7.322058131e-03, 7.794741990e-03, + 8.262255245e-03, 8.725001497e-03, 9.183329973e-03, 9.637545607e-03, + 1.008791680e-02, 1.053468150e-02, 1.097805198e-02, 1.141821870e-02, + 1.185535346e-02, 1.228961191e-02, 1.272113573e-02, 1.315005435e-02, + 1.357648646e-02, 1.400054125e-02, 1.442231949e-02, 1.484191445e-02, + 1.525941267e-02, 1.567489467e-02, 1.608843554e-02, 1.650010543e-02, + 1.690997004e-02, 1.731809103e-02, 1.772452633e-02, 1.812933049e-02, + 1.853255498e-02, 1.893424839e-02, 1.933445669e-02, 1.973322342e-02, + 2.013058989e-02, 2.052659533e-02, 2.092127702e-02, 2.131467048e-02, + 2.170680952e-02, 2.209772644e-02, 2.248745204e-02, 2.287601578e-02, + 2.326344584e-02, 2.364976921e-02, 2.403501176e-02, 2.441919828e-02, + 2.480235258e-02, 2.518449755e-02, 2.556565516e-02, 2.594584657e-02, + 2.632509215e-02, 2.670341150e-02, 2.708082354e-02, 2.745734650e-02, + 2.783299797e-02, 2.820779496e-02, 2.858175387e-02, 2.895489058e-02, + 2.932722044e-02, 2.969875830e-02, 3.006951854e-02, 3.043951509e-02, + 3.080876143e-02, 3.117727067e-02, 3.154505548e-02, 3.191212818e-02, + 3.227850073e-02, 3.264418472e-02, 3.300919144e-02, 3.337353184e-02, + 3.373721659e-02, 3.410025603e-02, 3.446266025e-02, 3.482443907e-02, + 3.518560202e-02, 3.554615842e-02, 3.590611733e-02, 3.626548757e-02, + 3.662427775e-02, 3.698249628e-02, 3.734015132e-02, 3.769725088e-02, + 3.805380273e-02, 3.840981451e-02, 3.876529362e-02, 3.912024733e-02, + 3.947468272e-02, 3.982860673e-02, 4.018202612e-02, 4.053494752e-02, + 4.088737738e-02, 4.123932205e-02, 4.159078772e-02, 4.194178045e-02, + 4.229230616e-02, 4.264237067e-02, 4.299197965e-02, 4.334113869e-02, + 4.368985322e-02, 4.403812861e-02, 4.438597007e-02, 4.473338274e-02, + 4.508037166e-02, 4.542694175e-02, 4.577309785e-02, 4.611884471e-02, + 4.646418698e-02, 4.680912922e-02, 4.715367592e-02, 4.749783147e-02, + 4.784160019e-02, 4.818498632e-02, 4.852799402e-02, 4.887062737e-02, + 4.921289040e-02, 4.955478703e-02, 4.989632116e-02, 5.023749658e-02, + 5.057831703e-02, 5.091878620e-02, 8.587453655e-01, 8.594263632e-01, + 8.601093810e-01, 8.607944415e-01, 8.614815677e-01, 8.621707830e-01, + 8.628621113e-01, 8.635555770e-01, 8.642512048e-01, 8.649490202e-01, + 8.656490489e-01, 8.663513174e-01, 8.670558526e-01, 8.677626819e-01, + 8.684718333e-01, 8.691833356e-01, 8.698972179e-01, 8.706135101e-01, + 8.713322427e-01, 8.720534469e-01, 8.727771546e-01, 8.735033983e-01, + 8.742322113e-01, 8.749636277e-01, 8.756976824e-01, 8.764344108e-01, + 8.771738496e-01, 8.779160360e-01, 8.786610083e-01, 8.794088055e-01, + 8.801594677e-01, 8.809130361e-01, 8.816695526e-01, 8.824290603e-01, + 8.831916036e-01, 8.839572277e-01, 8.847259792e-01, 8.854979056e-01, + 8.862730562e-01, 8.870514810e-01, 8.878332318e-01, 8.886183616e-01, + 8.894069249e-01, 8.901989777e-01, 8.909945777e-01, 8.917937841e-01, + 8.925966579e-01, 8.934032618e-01, 8.942136605e-01, 8.950279204e-01, + 8.958461103e-01, 8.966683007e-01, 8.974945645e-01, 8.983249770e-01, + 8.991596157e-01, 8.999985607e-01, 9.008418949e-01, 9.016897036e-01, + 9.025420753e-01, 9.033991014e-01, 9.042608765e-01, 9.051274985e-01, + 9.059990690e-01, 9.068756930e-01, 9.077574796e-01, 9.086445418e-01, + 9.095369973e-01, 9.104349678e-01, 9.113385802e-01, 9.122479663e-01, + 9.131632634e-01, 9.140846143e-01, 9.150121680e-01, 9.159460798e-01, + 9.168865118e-01, 9.178336333e-01, 9.187876212e-01, 9.197486607e-01, + 9.207169457e-01, 9.216926794e-01, 9.226760749e-01, 9.236673561e-01, + 9.246667582e-01, 9.256745288e-01, 9.266909287e-01, 9.277162330e-01, + 9.287507320e-01, 9.297947328e-01, 9.308485605e-01, 9.319125596e-01, + 9.329870961e-01, 9.340725589e-01, 9.351693623e-01, 9.362779484e-01, + 9.373987896e-01, 9.385323917e-01, 9.396792975e-01, 9.408400906e-01, + 9.420154000e-01, 9.432059051e-01, 9.444123418e-01, 9.456355094e-01, + 9.468762787e-01, 9.481356010e-01, 9.494145196e-01, 9.507141826e-01, + 9.520358589e-01, 9.533809563e-01, 9.547510451e-01, 9.561478852e-01, + 9.575734606e-01, 9.590300224e-01, 9.605201424e-01, 9.620467824e-01, + 9.636133836e-01, 9.652239848e-01, 9.668833810e-01, 9.685973419e-01, + 9.703729186e-01, 9.722188896e-01, 9.741464305e-01, 9.761701640e-01, + 9.783098958e-01, 9.805936863e-01, 9.830637927e-01, 9.857897143e-01, + 9.889029123e-01, 9.927278148e-01, 1.000000000e+00, +}; +const float dist_icdf_2_6[] = { + 0.000000000e+00, 2.669205160e-03, 6.088322551e-03, 9.863908821e-03, + 1.389246828e-02, 1.812115190e-02, 2.251727391e-02, 2.705842519e-02, + 3.172820346e-02, 3.651404450e-02, 4.140599601e-02, 4.639596910e-02, + 5.147725407e-02, 5.664419245e-02, 6.189194680e-02, 6.721633389e-02, + 7.261370088e-02, 7.808083136e-02, 8.361487268e-02, 8.921327881e-02, + 9.487376485e-02, 1.005942703e-01, 1.063729289e-01, 1.122080441e-01, + 1.180980684e-01, 1.240415859e-01, 1.300372978e-01, 1.360840101e-01, + 1.421806228e-01, 1.483261204e-01, 1.545195648e-01, 1.607600875e-01, + 1.670468840e-01, 1.733792086e-01, 1.797563692e-01, 1.861777239e-01, + 1.926426767e-01, 1.991506748e-01, 2.057012051e-01, 2.122937922e-01, + 2.189279958e-01, 2.256034087e-01, 2.323196548e-01, 2.390763876e-01, + 2.458732888e-01, 2.527100668e-01, 2.595864553e-01, 2.665022128e-01, + 2.734571211e-01, 2.804509845e-01, 2.874836295e-01, 2.945549035e-01, + 3.016646747e-01, 3.088128311e-01, 3.159992806e-01, 3.232239502e-01, + 3.304867859e-01, 3.377877523e-01, 3.451268323e-01, 3.525040275e-01, + 3.599193573e-01, 3.673728596e-01, 3.748645903e-01, 3.823946237e-01, + 3.899630524e-01, 3.975699876e-01, 4.052155592e-01, 4.128999164e-01, + 4.206232276e-01, 4.283856810e-01, 4.361874853e-01, 4.440288697e-01, + 4.519100851e-01, 4.598314042e-01, 4.677931227e-01, 4.757955598e-01, + 4.838390594e-01, 4.919239909e-01, 5.000507504e-01, 5.082197619e-01, + 5.164314786e-01, 5.246863847e-01, 5.329849966e-01, 5.413278651e-01, + 5.497155771e-01, 5.581487580e-01, 5.666280741e-01, 5.751542350e-01, + 5.837279971e-01, 5.923501663e-01, 6.010216021e-01, 6.097432215e-01, + 6.185160033e-01, 6.273409935e-01, 6.362193109e-01, 6.451521531e-01, + 6.541408043e-01, 6.631866428e-01, 6.722911505e-01, 6.814559234e-01, + 6.906826835e-01, 6.999732925e-01, 7.093297678e-01, 7.187543009e-01, + 7.282492787e-01, 7.378173088e-01, 7.474612494e-01, 7.571842443e-01, + 7.669897653e-01, 7.768816635e-01, 7.868642309e-01, 7.969422779e-01, + 8.071212275e-01, 8.174072362e-01, 8.278073465e-01, 8.383296863e-01, + 8.489837309e-01, 8.597806565e-01, 8.707338286e-01, 8.818594933e-01, + 8.931777918e-01, 9.047143078e-01, 9.165025492e-01, 9.285881864e-01, + 9.410369298e-01, 9.539509923e-01, 9.675102450e-01, 9.821140101e-01, + 1.000000000e+00, 0.000000000e+00, 7.569904464e-05, 1.726160003e-04, + 2.795722377e-04, 3.936192764e-04, 5.132475999e-04, 6.375209993e-04, + 7.657956763e-04, 8.975988670e-04, 1.032567160e-03, 1.170411605e-03, + 1.310896404e-03, 1.453825114e-03, 1.599031306e-03, 1.746371990e-03, + 1.895722862e-03, 2.046974768e-03, 2.200031014e-03, 2.354805292e-03, + 2.511220044e-03, 2.669205160e-03, 2.828696920e-03, 2.989637138e-03, + 3.151972448e-03, 3.315653711e-03, 3.480635518e-03, 3.646875770e-03, + 3.814335317e-03, 3.982977649e-03, 4.152768628e-03, 4.323676264e-03, + 4.495670505e-03, 4.668723064e-03, 4.842807265e-03, 5.017897900e-03, + 5.193971114e-03, 5.371004290e-03, 5.548975956e-03, 5.727865696e-03, + 5.907654072e-03, 6.088322551e-03, 6.269853446e-03, 6.452229854e-03, + 6.635435603e-03, 6.819455209e-03, 7.004273826e-03, 7.189877208e-03, + 7.376251674e-03, 7.563384072e-03, 7.751261751e-03, 7.939872526e-03, + 8.129204659e-03, 8.319246830e-03, 8.509988114e-03, 8.701417963e-03, + 8.893526185e-03, 9.086302923e-03, 9.279738642e-03, 9.473824113e-03, + 9.668550394e-03, 9.863908821e-03, 1.005989099e-02, 1.025648876e-02, + 1.045369420e-02, 1.065149965e-02, 1.084989763e-02, 1.104888089e-02, + 1.124844238e-02, 1.144857524e-02, 1.164927278e-02, 1.185052850e-02, + 1.205233607e-02, 1.225468932e-02, 1.245758224e-02, 1.266100896e-02, + 1.286496376e-02, 1.306944107e-02, 1.327443543e-02, 1.347994152e-02, + 1.368595417e-02, 1.389246828e-02, 1.409947890e-02, 1.430698120e-02, + 1.451497042e-02, 1.472344193e-02, 1.493239121e-02, 1.514181381e-02, + 1.535170540e-02, 1.556206172e-02, 1.577287861e-02, 1.598415199e-02, + 1.619587787e-02, 1.640805233e-02, 1.662067154e-02, 1.683373174e-02, + 1.704722923e-02, 1.726116040e-02, 1.747552170e-02, 1.769030966e-02, + 1.790552084e-02, 1.812115190e-02, 1.833719955e-02, 1.855366056e-02, + 1.877053174e-02, 1.898780998e-02, 1.920549222e-02, 1.942357544e-02, + 1.964205669e-02, 1.986093306e-02, 2.008020169e-02, 2.029985976e-02, + 2.051990453e-02, 2.074033326e-02, 2.096114329e-02, 2.118233198e-02, + 2.140389674e-02, 2.162583503e-02, 2.184814434e-02, 2.207082221e-02, + 2.229386620e-02, 2.251727391e-02, 2.274104301e-02, 2.296517116e-02, + 2.318965608e-02, 2.341449552e-02, 2.363968726e-02, 2.386522912e-02, + 2.409111894e-02, 2.431735460e-02, 9.117544630e-01, 9.123454960e-01, + 9.129372249e-01, 9.135296555e-01, 9.141227938e-01, 9.147166461e-01, + 9.153112185e-01, 9.159065173e-01, 9.165025492e-01, 9.170993205e-01, + 9.176968381e-01, 9.182951087e-01, 9.188941393e-01, 9.194939369e-01, + 9.200945088e-01, 9.206958623e-01, 9.212980048e-01, 9.219009439e-01, + 9.225046875e-01, 9.231092434e-01, 9.237146197e-01, 9.243208246e-01, + 9.249278665e-01, 9.255357539e-01, 9.261444957e-01, 9.267541006e-01, + 9.273645778e-01, 9.279759366e-01, 9.285881864e-01, 9.292013369e-01, + 9.298153980e-01, 9.304303798e-01, 9.310462927e-01, 9.316631472e-01, + 9.322809540e-01, 9.328997242e-01, 9.335194692e-01, 9.341402003e-01, + 9.347619296e-01, 9.353846690e-01, 9.360084310e-01, 9.366332282e-01, + 9.372590737e-01, 9.378859807e-01, 9.385139630e-01, 9.391430345e-01, + 9.397732096e-01, 9.404045030e-01, 9.410369298e-01, 9.416705057e-01, + 9.423052464e-01, 9.429411685e-01, 9.435782887e-01, 9.442166244e-01, + 9.448561933e-01, 9.454970138e-01, 9.461391047e-01, 9.467824854e-01, + 9.474271759e-01, 9.480731968e-01, 9.487205694e-01, 9.493693155e-01, + 9.500194578e-01, 9.506710195e-01, 9.513240247e-01, 9.519784985e-01, + 9.526344664e-01, 9.532919551e-01, 9.539509923e-01, 9.546116063e-01, + 9.552738268e-01, 9.559376845e-01, 9.566032111e-01, 9.572704397e-01, + 9.579394046e-01, 9.586101414e-01, 9.592826872e-01, 9.599570806e-01, + 9.606333619e-01, 9.613115729e-01, 9.619917576e-01, 9.626739615e-01, + 9.633582326e-01, 9.640446207e-01, 9.647331784e-01, 9.654239605e-01, + 9.661170247e-01, 9.668124316e-01, 9.675102450e-01, 9.682105320e-01, + 9.689133635e-01, 9.696188143e-01, 9.703269635e-01, 9.710378950e-01, + 9.717516978e-01, 9.724684664e-01, 9.731883015e-01, 9.739113106e-01, + 9.746376085e-01, 9.753673182e-01, 9.761005718e-01, 9.768375115e-01, + 9.775782907e-01, 9.783230757e-01, 9.790720467e-01, 9.798254001e-01, + 9.805833507e-01, 9.813461342e-01, 9.821140101e-01, 9.828872661e-01, + 9.836662221e-01, 9.844512362e-01, 9.852427119e-01, 9.860411067e-01, + 9.868469435e-01, 9.876608258e-01, 9.884834569e-01, 9.893156663e-01, + 9.901584463e-01, 9.910130034e-01, 9.918808341e-01, 9.927638409e-01, + 9.936645176e-01, 9.945862671e-01, 9.955339916e-01, 9.965153278e-01, + 9.975437379e-01, 9.986491696e-01, 1.000000000e+00, +}; +const float dist_icdf_2_7[] = { + 0.000000000e+00, 3.568661949e-04, 1.146997717e-03, 2.270594482e-03, + 3.685819090e-03, 5.366609188e-03, 7.294389619e-03, 9.454901165e-03, + 1.183666135e-02, 1.443010733e-02, 1.722707285e-02, 2.022044723e-02, + 2.340394177e-02, 2.677192315e-02, 3.031929086e-02, 3.404138463e-02, + 3.793391292e-02, 4.199289664e-02, 4.621462413e-02, 5.059561463e-02, + 5.513258823e-02, 5.982244100e-02, 6.466222396e-02, 6.964912543e-02, + 7.478045583e-02, 8.005363467e-02, 8.546617930e-02, 9.101569501e-02, + 9.669986644e-02, 1.025164499e-01, 1.084632668e-01, 1.145381973e-01, + 1.207391754e-01, 1.270641836e-01, 1.335112489e-01, 1.400784385e-01, + 1.467638567e-01, 1.535656411e-01, 1.604819596e-01, 1.675110082e-01, + 1.746510076e-01, 1.819002013e-01, 1.892568535e-01, 1.967192466e-01, + 2.042856794e-01, 2.119544654e-01, 2.197239312e-01, 2.275924142e-01, + 2.355582618e-01, 2.436198295e-01, 2.517754795e-01, 2.600235794e-01, + 2.683625008e-01, 2.767906180e-01, 2.853063069e-01, 2.939079434e-01, + 3.025939027e-01, 3.113625577e-01, 3.202122779e-01, 3.291414284e-01, + 3.381483684e-01, 3.472314504e-01, 3.563890189e-01, 3.656194090e-01, + 3.749209454e-01, 3.842919413e-01, 3.937306967e-01, 4.032354976e-01, + 4.128046145e-01, 4.224363011e-01, 4.321287927e-01, 4.418803050e-01, + 4.516890324e-01, 4.615531468e-01, 4.714707955e-01, 4.814400996e-01, + 4.914591526e-01, 5.015260178e-01, 5.116387268e-01, 5.217952774e-01, + 5.319936310e-01, 5.422317102e-01, 5.525073967e-01, 5.628185280e-01, + 5.731628947e-01, 5.835382374e-01, 5.939422431e-01, 6.043725415e-01, + 6.148267010e-01, 6.253022247e-01, 6.357965450e-01, 6.463070191e-01, + 6.568309227e-01, 6.673654444e-01, 6.779076781e-01, 6.884546163e-01, + 6.990031408e-01, 7.095500141e-01, 7.200918685e-01, 7.306251946e-01, + 7.411463279e-01, 7.516514342e-01, 7.621364928e-01, 7.725972768e-01, + 7.830293314e-01, 7.934279484e-01, 8.037881364e-01, 8.141045870e-01, + 8.243716335e-01, 8.345832036e-01, 8.447327618e-01, 8.548132406e-01, + 8.648169561e-01, 8.747355048e-01, 8.845596343e-01, 8.942790802e-01, + 9.038823556e-01, 9.133564761e-01, 9.226865916e-01, 9.318554804e-01, + 9.408428333e-01, 9.496242042e-01, 9.581693968e-01, 9.664398430e-01, + 9.743839996e-01, 9.819283633e-01, 9.889568756e-01, 9.952482425e-01, + 1.000000000e+00, 0.000000000e+00, 2.295573376e-06, 7.378816787e-06, + 1.460892969e-05, 2.371819989e-05, 3.454057630e-05, 4.695832678e-05, + 6.088161928e-05, 7.623860715e-05, 9.296990542e-05, 1.110252184e-04, + 1.303611399e-04, 1.509396455e-04, 1.727270166e-04, 1.956930488e-04, + 2.198104531e-04, 2.450543943e-04, 2.714021260e-04, 2.988326999e-04, + 3.273267294e-04, 3.568661949e-04, 3.874342829e-04, 4.190152502e-04, + 4.515943093e-04, 4.851575309e-04, 5.196917591e-04, 5.551845393e-04, + 5.916240546e-04, 6.289990700e-04, 6.672988843e-04, 7.065132861e-04, + 7.466325163e-04, 7.876472332e-04, 8.295484826e-04, 8.723276696e-04, + 9.159765344e-04, 9.604871296e-04, 1.005851800e-03, 1.052063165e-03, + 1.099114098e-03, 1.146997717e-03, 1.195707367e-03, 1.245236605e-03, + 1.295579192e-03, 1.346729082e-03, 1.398680407e-03, 1.451427472e-03, + 1.504964748e-03, 1.559286856e-03, 1.614388569e-03, 1.670264798e-03, + 1.726910588e-03, 1.784321113e-03, 1.842491668e-03, 1.901417664e-03, + 1.961094627e-03, 2.021518184e-03, 2.082684071e-03, 2.144588117e-03, + 2.207226249e-03, 2.270594482e-03, 2.334688918e-03, 2.399505746e-03, + 2.465041231e-03, 2.531291720e-03, 2.598253630e-03, 2.665923455e-03, + 2.734297755e-03, 2.803373158e-03, 2.873146357e-03, 2.943614108e-03, + 3.014773228e-03, 3.086620590e-03, 3.159153127e-03, 3.232367824e-03, + 3.306261721e-03, 3.380831908e-03, 3.456075527e-03, 3.531989765e-03, + 3.608571859e-03, 3.685819090e-03, 3.763728785e-03, 3.842298310e-03, + 3.921525078e-03, 4.001406538e-03, 4.081940181e-03, 4.163123535e-03, + 4.244954166e-03, 4.327429677e-03, 4.410547704e-03, 4.494305920e-03, + 4.578702031e-03, 4.663733773e-03, 4.749398918e-03, 4.835695265e-03, + 4.922620647e-03, 5.010172924e-03, 5.098349985e-03, 5.187149748e-03, + 5.276570159e-03, 5.366609188e-03, 5.457264834e-03, 5.548535121e-03, + 5.640418097e-03, 5.732911836e-03, 5.826014433e-03, 5.919724009e-03, + 6.014038708e-03, 6.108956694e-03, 6.204476155e-03, 6.300595299e-03, + 6.397312356e-03, 6.494625576e-03, 6.592533228e-03, 6.691033603e-03, + 6.790125009e-03, 6.889805774e-03, 6.990074245e-03, 7.090928785e-03, + 7.192367776e-03, 7.294389619e-03, 7.396992729e-03, 7.500175541e-03, + 7.603936502e-03, 7.708274080e-03, 7.813186756e-03, 7.918673027e-03, + 8.024731404e-03, 8.131360416e-03, 9.547819011e-01, 9.552076413e-01, + 9.556327336e-01, 9.560571730e-01, 9.564809544e-01, 9.569040727e-01, + 9.573265227e-01, 9.577482992e-01, 9.581693968e-01, 9.585898102e-01, + 9.590095337e-01, 9.594285620e-01, 9.598468893e-01, 9.602645099e-01, + 9.606814180e-01, 9.610976076e-01, 9.615130729e-01, 9.619278078e-01, + 9.623418059e-01, 9.627550612e-01, 9.631675672e-01, 9.635793175e-01, + 9.639903054e-01, 9.644005244e-01, 9.648099676e-01, 9.652186281e-01, + 9.656264990e-01, 9.660335730e-01, 9.664398430e-01, 9.668453016e-01, + 9.672499413e-01, 9.676537544e-01, 9.680567332e-01, 9.684588698e-01, + 9.688601560e-01, 9.692605839e-01, 9.696601449e-01, 9.700588306e-01, + 9.704566323e-01, 9.708535412e-01, 9.712495483e-01, 9.716446445e-01, + 9.720388203e-01, 9.724320662e-01, 9.728243725e-01, 9.732157292e-01, + 9.736061262e-01, 9.739955532e-01, 9.743839996e-01, 9.747714544e-01, + 9.751579068e-01, 9.755433455e-01, 9.759277588e-01, 9.763111350e-01, + 9.766934619e-01, 9.770747273e-01, 9.774549185e-01, 9.778340226e-01, + 9.782120261e-01, 9.785889157e-01, 9.789646772e-01, 9.793392964e-01, + 9.797127587e-01, 9.800850489e-01, 9.804561516e-01, 9.808260510e-01, + 9.811947306e-01, 9.815621738e-01, 9.819283633e-01, 9.822932813e-01, + 9.826569095e-01, 9.830192291e-01, 9.833802207e-01, 9.837398643e-01, + 9.840981392e-01, 9.844550242e-01, 9.848104971e-01, 9.851645353e-01, + 9.855171152e-01, 9.858682125e-01, 9.862178019e-01, 9.865658573e-01, + 9.869123515e-01, 9.872572564e-01, 9.876005428e-01, 9.879421802e-01, + 9.882821371e-01, 9.886203803e-01, 9.889568756e-01, 9.892915870e-01, + 9.896244771e-01, 9.899555065e-01, 9.902846343e-01, 9.906118173e-01, + 9.909370102e-01, 9.912601654e-01, 9.915812327e-01, 9.919001594e-01, + 9.922168894e-01, 9.925313636e-01, 9.928435193e-01, 9.931532896e-01, + 9.934606036e-01, 9.937653853e-01, 9.940675535e-01, 9.943670211e-01, + 9.946636941e-01, 9.949574712e-01, 9.952482425e-01, 9.955358883e-01, + 9.958202779e-01, 9.961012679e-01, 9.963786999e-01, 9.966523979e-01, + 9.969221654e-01, 9.971877811e-01, 9.974489936e-01, 9.977055145e-01, + 9.979570091e-01, 9.982030838e-01, 9.984432676e-01, 9.986769856e-01, + 9.989035176e-01, 9.991219315e-01, 9.993309647e-01, 9.995287935e-01, + 9.997125019e-01, 9.998764622e-01, 1.000000000e+00, +}; +const float dist_icdf_2_8[] = { + 0.000000000e+00, 4.578949286e-10, 1.356106336e-08, 9.841977600e-08, + 4.016257606e-07, 1.195494376e-06, 2.914805441e-06, 6.192491155e-06, + 1.189451001e-05, 2.115405295e-05, 3.540517636e-05, 5.641592304e-05, + 8.632096728e-05, 1.276537998e-04, 1.833784496e-04, 2.569207220e-04, + 3.521989139e-04, 4.736539483e-04, 6.262788489e-04, 8.156474560e-04, + 1.047942259e-03, 1.329981196e-03, 1.669243245e-03, 2.073892598e-03, + 2.552801189e-03, 3.115569287e-03, 3.772543877e-03, 4.534834454e-03, + 5.414325880e-03, 6.423687867e-03, 7.576380639e-03, 8.886656276e-03, + 1.036955520e-02, 1.204089727e-02, 1.391726682e-02, 1.601599106e-02, + 1.835511126e-02, 2.095334583e-02, 2.383004492e-02, 2.700513559e-02, + 3.049905709e-02, 3.433268555e-02, 3.852724747e-02, 4.310422155e-02, + 4.808522839e-02, 5.349190772e-02, 5.934578297e-02, 6.566811315e-02, + 7.247973212e-02, 7.980087556e-02, 8.765099631e-02, 9.604856875e-02, + 1.050108833e-01, 1.145538328e-01, 1.246916913e-01, 1.354368894e-01, + 1.467997859e-01, 1.587884401e-01, 1.714083878e-01, 1.846624227e-01, + 1.985503884e-01, 2.130689837e-01, 2.282115851e-01, 2.439680909e-01, + 2.603247906e-01, 2.772642626e-01, 2.947653056e-01, 3.128029055e-01, + 3.313482420e-01, 3.503687358e-01, 3.698281405e-01, 3.896866792e-01, + 4.099012258e-01, 4.304255324e-01, 4.512104996e-01, 4.722044903e-01, + 4.933536807e-01, 5.146024474e-01, 5.358937858e-01, 5.571697520e-01, + 5.783719256e-01, 5.994418841e-01, 6.203216841e-01, 6.409543406e-01, + 6.612842984e-01, 6.812578880e-01, 7.008237600e-01, 7.199332902e-01, + 7.385409519e-01, 7.566046490e-01, 7.740860056e-01, 7.909506098e-01, + 8.071682092e-01, 8.227128563e-01, 8.375630034e-01, 8.517015483e-01, + 8.651158320e-01, 8.777975896e-01, 8.897428590e-01, 9.009518493e-01, + 9.114287744e-01, 9.211816541e-01, 9.302220900e-01, 9.385650177e-01, + 9.462284425e-01, 9.532331621e-01, 9.596024801e-01, 9.653619153e-01, + 9.705389107e-01, 9.751625441e-01, 9.792632446e-01, 9.828725175e-01, + 9.860226782e-01, 9.887465981e-01, 9.910774629e-01, 9.930485441e-01, + 9.946929823e-01, 9.960435848e-01, 9.971326329e-01, 9.979916998e-01, + 9.986514750e-01, 9.991415929e-01, 9.994904595e-01, 9.997250706e-01, + 9.998708097e-01, 9.999512082e-01, 9.999876318e-01, 9.999988160e-01, + 1.000000000e+00, 0.000000000e+00, 1.999530332e-16, 5.921829667e-15, + 4.297783758e-14, 1.753815185e-13, 5.220474806e-13, 1.272836073e-12, + 2.704139742e-12, 5.194117152e-12, 9.237641924e-12, 1.546101206e-11, + 2.463645365e-11, 3.769644449e-11, 5.574787770e-11, 8.008608167e-11, + 1.122087095e-10, 1.538295096e-10, 2.068919857e-10, 2.735829565e-10, + 3.563460198e-10, 4.578949286e-10, 5.812268847e-10, 7.296357535e-10, + 9.067252057e-10, 1.116421789e-09, 1.362987935e-09, 1.651034897e-09, + 1.985535640e-09, 2.371837656e-09, 2.815675743e-09, 3.323184715e-09, + 3.900912073e-09, 4.555830619e-09, 5.295351029e-09, 6.127334378e-09, + 7.060104621e-09, 8.102461035e-09, 9.263690615e-09, 1.055358043e-08, + 1.198242996e-08, 1.356106336e-08, 1.530084170e-08, 1.721367523e-08, + 1.931203549e-08, 2.160896751e-08, 2.411810187e-08, 2.685366686e-08, + 2.983050043e-08, 3.306406231e-08, 3.657044593e-08, 4.036639041e-08, + 4.446929253e-08, 4.889721855e-08, 5.366891620e-08, 5.880382645e-08, + 6.432209539e-08, 7.024458600e-08, 7.659288998e-08, 8.338933945e-08, + 9.065701872e-08, 9.841977600e-08, 1.067022351e-07, 1.155298070e-07, + 1.249287016e-07, 1.349259395e-07, 1.455493630e-07, 1.568276486e-07, + 1.687903177e-07, 1.814677486e-07, 1.948911880e-07, 2.090927623e-07, + 2.241054894e-07, 2.399632896e-07, 2.567009979e-07, 2.743543747e-07, + 2.929601174e-07, 3.125558720e-07, 3.331802442e-07, 3.548728111e-07, + 3.776741321e-07, 4.016257606e-07, 4.267702552e-07, 4.531511908e-07, + 4.808131702e-07, 5.098018352e-07, 5.401638777e-07, 5.719470512e-07, + 6.052001820e-07, 6.399731802e-07, 6.763170509e-07, 7.142839057e-07, + 7.539269734e-07, 7.953006114e-07, 8.384603170e-07, 8.834627381e-07, + 9.303656846e-07, 9.792281395e-07, 1.030110270e-06, 1.083073438e-06, + 1.138180211e-06, 1.195494376e-06, 1.255080947e-06, 1.317006176e-06, + 1.381337568e-06, 1.448143886e-06, 1.517495167e-06, 1.589462733e-06, + 1.664119197e-06, 1.741538479e-06, 1.821795813e-06, 1.904967764e-06, + 1.991132231e-06, 2.080368462e-06, 2.172757067e-06, 2.268380026e-06, + 2.367320697e-06, 2.469663836e-06, 2.575495596e-06, 2.684903548e-06, + 2.797976686e-06, 2.914805441e-06, 3.035481688e-06, 3.160098761e-06, + 3.288751462e-06, 3.421536069e-06, 3.558550353e-06, 3.699893583e-06, + 3.845666539e-06, 3.995971523e-06, 9.993661015e-01, 9.993827027e-01, + 9.993989954e-01, 9.994149830e-01, 9.994306687e-01, 9.994460559e-01, + 9.994611479e-01, 9.994759480e-01, 9.994904595e-01, 9.995046858e-01, + 9.995186300e-01, 9.995322954e-01, 9.995456853e-01, 9.995588030e-01, + 9.995716516e-01, 9.995842345e-01, 9.995965547e-01, 9.996086155e-01, + 9.996204202e-01, 9.996319718e-01, 9.996432736e-01, 9.996543287e-01, + 9.996651403e-01, 9.996757115e-01, 9.996860454e-01, 9.996961452e-01, + 9.997060139e-01, 9.997156547e-01, 9.997250706e-01, 9.997342647e-01, + 9.997432401e-01, 9.997519997e-01, 9.997605468e-01, 9.997688842e-01, + 9.997770150e-01, 9.997849421e-01, 9.997926687e-01, 9.998001976e-01, + 9.998075318e-01, 9.998146743e-01, 9.998216280e-01, 9.998283958e-01, + 9.998349807e-01, 9.998413855e-01, 9.998476132e-01, 9.998536666e-01, + 9.998595486e-01, 9.998652620e-01, 9.998708097e-01, 9.998761944e-01, + 9.998814191e-01, 9.998864865e-01, 9.998913994e-01, 9.998961605e-01, + 9.999007726e-01, 9.999052385e-01, 9.999095609e-01, 9.999137425e-01, + 9.999177859e-01, 9.999216940e-01, 9.999254693e-01, 9.999291145e-01, + 9.999326322e-01, 9.999360252e-01, 9.999392959e-01, 9.999424469e-01, + 9.999454810e-01, 9.999484005e-01, 9.999512082e-01, 9.999539064e-01, + 9.999564977e-01, 9.999589847e-01, 9.999613697e-01, 9.999636554e-01, + 9.999658440e-01, 9.999679381e-01, 9.999699401e-01, 9.999718523e-01, + 9.999736771e-01, 9.999754170e-01, 9.999770742e-01, 9.999786511e-01, + 9.999801500e-01, 9.999815731e-01, 9.999829228e-01, 9.999842013e-01, + 9.999854109e-01, 9.999865536e-01, 9.999876318e-01, 9.999886476e-01, + 9.999896031e-01, 9.999905005e-01, 9.999913419e-01, 9.999921293e-01, + 9.999928649e-01, 9.999935507e-01, 9.999941886e-01, 9.999947808e-01, + 9.999953291e-01, 9.999958354e-01, 9.999963019e-01, 9.999967302e-01, + 9.999971223e-01, 9.999974801e-01, 9.999978053e-01, 9.999980997e-01, + 9.999983652e-01, 9.999986034e-01, 9.999988160e-01, 9.999990047e-01, + 9.999991712e-01, 9.999993170e-01, 9.999994437e-01, 9.999995529e-01, + 9.999996460e-01, 9.999997245e-01, 9.999997899e-01, 9.999998435e-01, + 9.999998867e-01, 9.999999207e-01, 9.999999467e-01, 9.999999661e-01, + 9.999999799e-01, 9.999999891e-01, 9.999999949e-01, 9.999999981e-01, + 9.999999995e-01, 1.000000000e+00, 1.000000000e+00, +}; +const float dist_icdf_3_0[] = { + 0.000000000e+00, 3.357396159e-01, 3.411985141e-01, 3.446595422e-01, + 3.472599302e-01, 3.493720818e-01, 3.511670309e-01, 3.527382471e-01, + 3.541426668e-01, 3.554176670e-01, 3.565891702e-01, 3.576759287e-01, + 3.586919685e-01, 3.596480692e-01, 3.605527042e-01, 3.614126617e-01, + 3.622334688e-01, 3.630196899e-01, 3.637751406e-01, 3.645030456e-01, + 3.652061569e-01, 3.658868431e-01, 3.665471590e-01, 3.671888999e-01, + 3.678136448e-01, 3.684227901e-01, 3.690175783e-01, 3.695991201e-01, + 3.701684133e-01, 3.707263581e-01, 3.712737701e-01, 3.718113914e-01, + 3.723398993e-01, 3.728599145e-01, 3.733720075e-01, 3.738767047e-01, + 3.743744927e-01, 3.748658234e-01, 3.753511172e-01, 3.758307664e-01, + 3.763051383e-01, 3.767745773e-01, 3.772394076e-01, 3.776999349e-01, + 3.781564483e-01, 3.786092221e-01, 3.790585167e-01, 3.795045804e-01, + 3.799476504e-01, 3.803879539e-01, 3.808257090e-01, 3.812611254e-01, + 3.816944058e-01, 3.821257461e-01, 3.825553362e-01, 3.829833611e-01, + 3.834100007e-01, 3.838354312e-01, 3.842598250e-01, 3.846833517e-01, + 3.851061783e-01, 3.855284696e-01, 3.859503892e-01, 3.863720991e-01, + 3.867937610e-01, 3.872155360e-01, 3.876375858e-01, 3.880600722e-01, + 3.884831585e-01, 3.889070092e-01, 3.893317908e-01, 3.897576723e-01, + 3.901848256e-01, 3.906134258e-01, 3.910436522e-01, 3.914756884e-01, + 3.919097233e-01, 3.923459512e-01, 3.927845730e-01, 3.932257969e-01, + 3.936698386e-01, 3.941169228e-01, 3.945672839e-01, 3.950211670e-01, + 3.954788290e-01, 3.959405398e-01, 3.964065838e-01, 3.968772614e-01, + 3.973528904e-01, 3.978338083e-01, 3.983203740e-01, 3.988129706e-01, + 3.993120078e-01, 3.998179247e-01, 4.003311941e-01, 4.008523254e-01, + 4.013818699e-01, 4.019204259e-01, 4.024686445e-01, 4.030272369e-01, + 4.035969825e-01, 4.041787390e-01, 4.047734533e-01, 4.053821758e-01, + 4.060060761e-01, 4.066464638e-01, 4.073048115e-01, 4.079827851e-01, + 4.086822801e-01, 4.094054671e-01, 4.101548498e-01, 4.109333388e-01, + 4.117443466e-01, 4.125919142e-01, 4.134808781e-01, 4.144170995e-01, + 4.154077817e-01, 4.164619233e-01, 4.175909817e-01, 4.188098774e-01, + 4.201385782e-01, 4.216047161e-01, 4.232481798e-01, 4.251298141e-01, + 4.273496630e-01, 4.300911410e-01, 4.337546001e-01, 4.395670998e-01, + 1.000000000e+00, 0.000000000e+00, 3.164971837e-01, 3.204785114e-01, + 3.229185249e-01, 3.247050209e-01, 3.261247817e-01, 3.273082344e-01, + 3.283260963e-01, 3.292211558e-01, 3.300213362e-01, 3.307459004e-01, + 3.314087154e-01, 3.320201061e-01, 3.325879739e-01, 3.331185042e-01, + 3.336166333e-01, 3.340863650e-01, 3.345309933e-01, 3.349532621e-01, + 3.353554815e-01, 3.357396159e-01, 3.361073497e-01, 3.364601388e-01, + 3.367992502e-01, 3.371257938e-01, 3.374407472e-01, 3.377449764e-01, + 3.380392521e-01, 3.383242635e-01, 3.386006291e-01, 3.388689066e-01, + 3.391296004e-01, 3.393831682e-01, 3.396300267e-01, 3.398705567e-01, + 3.401051066e-01, 3.403339963e-01, 3.405575204e-01, 3.407759503e-01, + 3.409895374e-01, 3.411985141e-01, 3.414030965e-01, 3.416034854e-01, + 3.417998679e-01, 3.419924187e-01, 3.421813009e-01, 3.423666674e-01, + 3.425486614e-01, 3.427274174e-01, 3.429030620e-01, 3.430757141e-01, + 3.432454859e-01, 3.434124834e-01, 3.435768065e-01, 3.437385499e-01, + 3.438978032e-01, 3.440546512e-01, 3.442091745e-01, 3.443614496e-01, + 3.445115491e-01, 3.446595422e-01, 3.448054948e-01, 3.449494695e-01, + 3.450915262e-01, 3.452317219e-01, 3.453701113e-01, 3.455067464e-01, + 3.456416771e-01, 3.457749510e-01, 3.459066139e-01, 3.460367096e-01, + 3.461652799e-01, 3.462923653e-01, 3.464180045e-01, 3.465422344e-01, + 3.466650910e-01, 3.467866085e-01, 3.469068199e-01, 3.470257571e-01, + 3.471434507e-01, 3.472599302e-01, 3.473752241e-01, 3.474893598e-01, + 3.476023639e-01, 3.477142618e-01, 3.478250784e-01, 3.479348374e-01, + 3.480435619e-01, 3.481512743e-01, 3.482579960e-01, 3.483637480e-01, + 3.484685504e-01, 3.485724229e-01, 3.486753844e-01, 3.487774532e-01, + 3.488786473e-01, 3.489789837e-01, 3.490784794e-01, 3.491771505e-01, + 3.492750129e-01, 3.493720818e-01, 3.494683722e-01, 3.495638985e-01, + 3.496586747e-01, 3.497527145e-01, 3.498460312e-01, 3.499386378e-01, + 3.500305467e-01, 3.501217702e-01, 3.502123202e-01, 3.503022083e-01, + 3.503914458e-01, 3.504800436e-01, 3.505680126e-01, 3.506553631e-01, + 3.507421053e-01, 3.508282492e-01, 3.509138043e-01, 3.509987802e-01, + 3.510831861e-01, 3.511670309e-01, 3.512503234e-01, 3.513330722e-01, + 3.514152857e-01, 3.514969719e-01, 3.515781390e-01, 3.516587946e-01, + 3.517389464e-01, 3.518186019e-01, 4.225662375e-01, 4.226495746e-01, + 4.227334399e-01, 4.228178411e-01, 4.229027866e-01, 4.229882845e-01, + 4.230743435e-01, 4.231609723e-01, 4.232481798e-01, 4.233359751e-01, + 4.234243677e-01, 4.235133671e-01, 4.236029832e-01, 4.236932262e-01, + 4.237841063e-01, 4.238756341e-01, 4.239678206e-01, 4.240606769e-01, + 4.241542145e-01, 4.242484452e-01, 4.243433810e-01, 4.244390343e-01, + 4.245354178e-01, 4.246325448e-01, 4.247304285e-01, 4.248290829e-01, + 4.249285221e-01, 4.250287609e-01, 4.251298141e-01, 4.252316974e-01, + 4.253344266e-01, 4.254380182e-01, 4.255424890e-01, 4.256478566e-01, + 4.257541387e-01, 4.258613541e-01, 4.259695216e-01, 4.260786610e-01, + 4.261887927e-01, 4.262999376e-01, 4.264121174e-01, 4.265253544e-01, + 4.266396718e-01, 4.267550935e-01, 4.268716442e-01, 4.269893496e-01, + 4.271082360e-01, 4.272283310e-01, 4.273496630e-01, 4.274722614e-01, + 4.275961567e-01, 4.277213807e-01, 4.278479663e-01, 4.279759475e-01, + 4.281053598e-01, 4.282362402e-01, 4.283686270e-01, 4.285025601e-01, + 4.286380809e-01, 4.287752330e-01, 4.289140612e-01, 4.290546127e-01, + 4.291969366e-01, 4.293410841e-01, 4.294871089e-01, 4.296350669e-01, + 4.297850169e-01, 4.299370201e-01, 4.300911410e-01, 4.302474470e-01, + 4.304060090e-01, 4.305669012e-01, 4.307302021e-01, 4.308959938e-01, + 4.310643632e-01, 4.312354015e-01, 4.314092052e-01, 4.315858763e-01, + 4.317655225e-01, 4.319482579e-01, 4.321342034e-01, 4.323234872e-01, + 4.325162458e-01, 4.327126240e-01, 4.329127765e-01, 4.331168680e-01, + 4.333250746e-01, 4.335375846e-01, 4.337546001e-01, 4.339763377e-01, + 4.342030308e-01, 4.344349303e-01, 4.346723077e-01, 4.349154564e-01, + 4.351646945e-01, 4.354203679e-01, 4.356828533e-01, 4.359525622e-01, + 4.362299456e-01, 4.365154987e-01, 4.368097674e-01, 4.371133552e-01, + 4.374269322e-01, 4.377512446e-01, 4.380871278e-01, 4.384355202e-01, + 4.387974820e-01, 4.391742169e-01, 4.395670998e-01, 4.399777109e-01, + 4.404078795e-01, 4.408597393e-01, 4.413358016e-01, 4.418390496e-01, + 4.423730671e-01, 4.429422123e-01, 4.435518612e-01, 4.442087546e-01, + 4.449215089e-01, 4.457013915e-01, 4.465635468e-01, 4.475290311e-01, + 4.486283968e-01, 4.499085132e-01, 4.514469445e-01, 4.533869740e-01, + 4.560443034e-01, 4.603992527e-01, 1.000000000e+00, +}; +const float dist_icdf_3_1[] = { + 0.000000000e+00, 2.436959399e-01, 2.629281909e-01, 2.754296495e-01, + 2.849701321e-01, 2.928081818e-01, 2.995291515e-01, 3.054559995e-01, + 3.107869728e-01, 3.156530579e-01, 3.201456074e-01, 3.243310302e-01, + 3.282592153e-01, 3.319686571e-01, 3.354897234e-01, 3.388468234e-01, + 3.420598935e-01, 3.451454443e-01, 3.481173156e-01, 3.509872337e-01, + 3.537652294e-01, 3.564599563e-01, 3.590789383e-01, 3.616287626e-01, + 3.641152340e-01, 3.665434972e-01, 3.689181374e-01, 3.712432613e-01, + 3.735225647e-01, 3.757593880e-01, 3.779567630e-01, 3.801174518e-01, + 3.822439806e-01, 3.843386678e-01, 3.864036479e-01, 3.884408929e-01, + 3.904522300e-01, 3.924393573e-01, 3.944038578e-01, 3.963472108e-01, + 3.982708031e-01, 4.001759380e-01, 4.020638433e-01, 4.039356792e-01, + 4.057925445e-01, 4.076354828e-01, 4.094654873e-01, 4.112835061e-01, + 4.130904463e-01, 4.148871779e-01, 4.166745375e-01, 4.184533317e-01, + 4.202243400e-01, 4.219883177e-01, 4.237459984e-01, 4.254980964e-01, + 4.272453095e-01, 4.289883205e-01, 4.307277995e-01, 4.324644059e-01, + 4.341987904e-01, 4.359315964e-01, 4.376634623e-01, 4.393950226e-01, + 4.411269101e-01, 4.428597572e-01, 4.445941980e-01, 4.463308695e-01, + 4.480704135e-01, 4.498134783e-01, 4.515607205e-01, 4.533128070e-01, + 4.550704162e-01, 4.568342410e-01, 4.586049900e-01, 4.603833899e-01, + 4.621701882e-01, 4.639661552e-01, 4.657720869e-01, 4.675888078e-01, + 4.694171738e-01, 4.712580759e-01, 4.731124434e-01, 4.749812484e-01, + 4.768655096e-01, 4.787662976e-01, 4.806847399e-01, 4.826220268e-01, + 4.845794185e-01, 4.865582514e-01, 4.885599476e-01, 4.905860229e-01, + 4.926380983e-01, 4.947179111e-01, 4.968273289e-01, 4.989683645e-01, + 5.011431940e-01, 5.033541769e-01, 5.056038796e-01, 5.078951029e-01, + 5.102309139e-01, 5.126146835e-01, 5.150501312e-01, 5.175413774e-01, + 5.200930071e-01, 5.227101455e-01, 5.253985515e-01, 5.281647303e-01, + 5.310160738e-01, 5.339610356e-01, 5.370093515e-01, 5.401723212e-01, + 5.434631723e-01, 5.468975383e-01, 5.504940960e-01, 5.542754316e-01, + 5.582692423e-01, 5.625100439e-01, 5.670416667e-01, 5.719210254e-01, + 5.772240396e-01, 5.830553878e-01, 5.895655558e-01, 5.969829811e-01, + 6.056811079e-01, 6.163396823e-01, 6.304283052e-01, 6.523853680e-01, + 1.000000000e+00, 0.000000000e+00, 1.812651769e-01, 1.934447114e-01, + 2.011068322e-01, 2.068099038e-01, 2.113974269e-01, 2.152582198e-01, + 2.186052647e-01, 2.215684999e-01, 2.242333166e-01, 2.266589793e-01, + 2.288883783e-01, 2.309536014e-01, 2.328793101e-01, 2.346848870e-01, + 2.363858554e-01, 2.379948494e-01, 2.395222956e-01, 2.409769041e-01, + 2.423660292e-01, 2.436959399e-01, 2.449720253e-01, 2.461989539e-01, + 2.473807978e-01, 2.485211311e-01, 2.496231090e-01, 2.506895313e-01, + 2.517228947e-01, 2.527254350e-01, 2.536991634e-01, 2.546458952e-01, + 2.555672751e-01, 2.564647984e-01, 2.573398280e-01, 2.581936107e-01, + 2.590272896e-01, 2.598419154e-01, 2.606384566e-01, 2.614178077e-01, + 2.621807965e-01, 2.629281909e-01, 2.636607048e-01, 2.643790025e-01, + 2.650837038e-01, 2.657753876e-01, 2.664545958e-01, 2.671218360e-01, + 2.677775848e-01, 2.684222899e-01, 2.690563729e-01, 2.696802307e-01, + 2.702942380e-01, 2.708987487e-01, 2.714940974e-01, 2.720806006e-01, + 2.726585586e-01, 2.732282561e-01, 2.737899632e-01, 2.743439369e-01, + 2.748904215e-01, 2.754296495e-01, 2.759618427e-01, 2.764872123e-01, + 2.770059601e-01, 2.775182786e-01, 2.780243520e-01, 2.785243564e-01, + 2.790184602e-01, 2.795068249e-01, 2.799896051e-01, 2.804669493e-01, + 2.809389997e-01, 2.814058930e-01, 2.818677605e-01, 2.823247284e-01, + 2.827769181e-01, 2.832244463e-01, 2.836674254e-01, 2.841059638e-01, + 2.845401658e-01, 2.849701321e-01, 2.853959596e-01, 2.858177422e-01, + 2.862355701e-01, 2.866495308e-01, 2.870597086e-01, 2.874661852e-01, + 2.878690394e-01, 2.882683477e-01, 2.886641837e-01, 2.890566192e-01, + 2.894457234e-01, 2.898315633e-01, 2.902142041e-01, 2.905937088e-01, + 2.909701387e-01, 2.913435530e-01, 2.917140093e-01, 2.920815636e-01, + 2.924462702e-01, 2.928081818e-01, 2.931673498e-01, 2.935238238e-01, + 2.938776524e-01, 2.942288826e-01, 2.945775603e-01, 2.949237301e-01, + 2.952674354e-01, 2.956087183e-01, 2.959476202e-01, 2.962841809e-01, + 2.966184396e-01, 2.969504344e-01, 2.972802022e-01, 2.976077793e-01, + 2.979332009e-01, 2.982565014e-01, 2.985777144e-01, 2.988968726e-01, + 2.992140079e-01, 2.995291515e-01, 2.998423340e-01, 3.001535850e-01, + 3.004629336e-01, 3.007704082e-01, 3.010760365e-01, 3.013798456e-01, + 3.016818621e-01, 3.019821118e-01, 5.868676982e-01, 5.871976595e-01, + 5.875296367e-01, 5.878636596e-01, 5.881997589e-01, 5.885379658e-01, + 5.888783123e-01, 5.892208311e-01, 5.895655558e-01, 5.899125205e-01, + 5.902617606e-01, 5.906133119e-01, 5.909672113e-01, 5.913234967e-01, + 5.916822068e-01, 5.920433813e-01, 5.924070609e-01, 5.927732874e-01, + 5.931421036e-01, 5.935135535e-01, 5.938876822e-01, 5.942645360e-01, + 5.946441626e-01, 5.950266107e-01, 5.954119305e-01, 5.958001737e-01, + 5.961913933e-01, 5.965856437e-01, 5.969829811e-01, 5.973834631e-01, + 5.977871491e-01, 5.981941001e-01, 5.986043791e-01, 5.990180509e-01, + 5.994351823e-01, 5.998558419e-01, 6.002801008e-01, 6.007080321e-01, + 6.011397113e-01, 6.015752162e-01, 6.020146272e-01, 6.024580274e-01, + 6.029055024e-01, 6.033571410e-01, 6.038130348e-01, 6.042732786e-01, + 6.047379704e-01, 6.052072118e-01, 6.056811079e-01, 6.061597676e-01, + 6.066433038e-01, 6.071318336e-01, 6.076254784e-01, 6.081243642e-01, + 6.086286220e-01, 6.091383878e-01, 6.096538030e-01, 6.101750145e-01, + 6.107021754e-01, 6.112354451e-01, 6.117749894e-01, 6.123209815e-01, + 6.128736019e-01, 6.134330388e-01, 6.139994892e-01, 6.145731585e-01, + 6.151542620e-01, 6.157430247e-01, 6.163396823e-01, 6.169444819e-01, + 6.175576829e-01, 6.181795573e-01, 6.188103912e-01, 6.194504852e-01, + 6.201001560e-01, 6.207597370e-01, 6.214295801e-01, 6.221100566e-01, + 6.228015589e-01, 6.235045023e-01, 6.242193264e-01, 6.249464977e-01, + 6.256865111e-01, 6.264398929e-01, 6.272072035e-01, 6.279890400e-01, + 6.287860400e-01, 6.295988851e-01, 6.304283052e-01, 6.312750833e-01, + 6.321400609e-01, 6.330241436e-01, 6.339283086e-01, 6.348536119e-01, + 6.358011976e-01, 6.367723076e-01, 6.377682939e-01, 6.387906316e-01, + 6.398409347e-01, 6.409209745e-01, 6.420327009e-01, 6.431782673e-01, + 6.443600609e-01, 6.455807378e-01, 6.468432659e-01, 6.481509758e-01, + 6.495076241e-01, 6.509174695e-01, 6.523853680e-01, 6.539168919e-01, + 6.555184798e-01, 6.571976285e-01, 6.589631422e-01, 6.608254592e-01, + 6.627970895e-01, 6.648932102e-01, 6.671324940e-01, 6.695382887e-01, + 6.721403469e-01, 6.749774446e-01, 6.781015080e-01, 6.815844332e-01, + 6.855300505e-01, 6.900967739e-01, 6.955450675e-01, 7.023522382e-01, + 7.115588721e-01, 7.263444178e-01, 1.000000000e+00, +}; +const float dist_icdf_3_2[] = { + 0.000000000e+00, 1.087346134e-01, 1.338426443e-01, 1.515211964e-01, + 1.656975989e-01, 1.777697307e-01, 1.884155353e-01, 1.980210383e-01, + 2.068292947e-01, 2.150043515e-01, 2.226627340e-01, 2.298905245e-01, + 2.367533265e-01, 2.433024186e-01, 2.495787345e-01, 2.556155350e-01, + 2.614402598e-01, 2.670758467e-01, 2.725416926e-01, 2.778543677e-01, + 2.830281571e-01, 2.880754762e-01, 2.930071956e-01, 2.978328970e-01, + 3.025610779e-01, 3.071993172e-01, 3.117544093e-01, 3.162324754e-01, + 3.206390544e-01, 3.249791803e-01, 3.292574459e-01, 3.334780575e-01, + 3.376448810e-01, 3.417614820e-01, 3.458311592e-01, 3.498569744e-01, + 3.538417778e-01, 3.577882306e-01, 3.616988241e-01, 3.655758975e-01, + 3.694216527e-01, 3.732381680e-01, 3.770274100e-01, 3.807912442e-01, + 3.845314451e-01, 3.882497043e-01, 3.919476388e-01, 3.956267976e-01, + 3.992886687e-01, 4.029346846e-01, 4.065662280e-01, 4.101846364e-01, + 4.137912073e-01, 4.173872018e-01, 4.209738491e-01, 4.245523501e-01, + 4.281238808e-01, 4.316895959e-01, 4.352506316e-01, 4.388081090e-01, + 4.423631370e-01, 4.459168148e-01, 4.494702351e-01, 4.530244866e-01, + 4.565806566e-01, 4.601398339e-01, 4.637031112e-01, 4.672715881e-01, + 4.708463735e-01, 4.744285886e-01, 4.780193698e-01, 4.816198711e-01, + 4.852312681e-01, 4.888547603e-01, 4.924915751e-01, 4.961429708e-01, + 4.998102407e-01, 5.034947172e-01, 5.071977757e-01, 5.109208396e-01, + 5.146653847e-01, 5.184329454e-01, 5.222251199e-01, 5.260435768e-01, + 5.298900621e-01, 5.337664069e-01, 5.376745361e-01, 5.416164772e-01, + 5.455943712e-01, 5.496104844e-01, 5.536672207e-01, 5.577671369e-01, + 5.619129583e-01, 5.661075982e-01, 5.703541780e-01, 5.746560516e-01, + 5.790168327e-01, 5.834404261e-01, 5.879310636e-01, 5.924933467e-01, + 5.971322945e-01, 6.018534015e-01, 6.066627045e-01, 6.115668621e-01, + 6.165732500e-01, 6.216900743e-01, 6.269265092e-01, 6.322928651e-01, + 6.378007938e-01, 6.434635448e-01, 6.492962858e-01, 6.553165095e-01, + 6.615445560e-01, 6.680042937e-01, 6.747240214e-01, 6.817376828e-01, + 6.890865389e-01, 6.968215216e-01, 7.050066409e-01, 7.137240734e-01, + 7.230820601e-01, 7.332277433e-01, 7.443692640e-01, 7.568167068e-01, + 7.710657654e-01, 7.879939684e-01, 8.094298131e-01, 8.405923610e-01, + 1.000000000e+00, 0.000000000e+00, 4.596737520e-02, 5.589988829e-02, + 6.272599951e-02, 6.809671822e-02, 7.259612350e-02, 7.650623337e-02, + 7.998705699e-02, 8.313903298e-02, 8.602976648e-02, 8.870715908e-02, + 9.120651541e-02, 9.355468145e-02, 9.577259612e-02, 9.787693857e-02, + 9.988123266e-02, 1.017966115e-01, 1.036323610e-01, 1.053963157e-01, + 1.070951527e-01, 1.087346134e-01, 1.103196750e-01, 1.118546828e-01, + 1.133434555e-01, 1.147893687e-01, 1.161954228e-01, 1.175642974e-01, + 1.188983970e-01, 1.201998880e-01, 1.214707298e-01, 1.227127014e-01, + 1.239274230e-01, 1.251163749e-01, 1.262809136e-01, 1.274222857e-01, + 1.285416394e-01, 1.296400353e-01, 1.307184547e-01, 1.317778082e-01, + 1.328189421e-01, 1.338426443e-01, 1.348496502e-01, 1.358406469e-01, + 1.368162778e-01, 1.377771461e-01, 1.387238181e-01, 1.396568266e-01, + 1.405766731e-01, 1.414838306e-01, 1.423787456e-01, 1.432618402e-01, + 1.441335138e-01, 1.449941447e-01, 1.458440920e-01, 1.466836962e-01, + 1.475132810e-01, 1.483331545e-01, 1.491436098e-01, 1.499449263e-01, + 1.507373704e-01, 1.515211964e-01, 1.522966473e-01, 1.530639553e-01, + 1.538233425e-01, 1.545750217e-01, 1.553191966e-01, 1.560560626e-01, + 1.567858071e-01, 1.575086100e-01, 1.582246439e-01, 1.589340751e-01, + 1.596370632e-01, 1.603337617e-01, 1.610243187e-01, 1.617088766e-01, + 1.623875726e-01, 1.630605392e-01, 1.637279040e-01, 1.643897902e-01, + 1.650463169e-01, 1.656975989e-01, 1.663437474e-01, 1.669848698e-01, + 1.676210698e-01, 1.682524481e-01, 1.688791020e-01, 1.695011256e-01, + 1.701186101e-01, 1.707316442e-01, 1.713403135e-01, 1.719447012e-01, + 1.725448880e-01, 1.731409521e-01, 1.737329696e-01, 1.743210142e-01, + 1.749051578e-01, 1.754854699e-01, 1.760620183e-01, 1.766348689e-01, + 1.772040856e-01, 1.777697307e-01, 1.783318650e-01, 1.788905474e-01, + 1.794458353e-01, 1.799977848e-01, 1.805464503e-01, 1.810918849e-01, + 1.816341405e-01, 1.821732675e-01, 1.827093151e-01, 1.832423313e-01, + 1.837723629e-01, 1.842994557e-01, 1.848236541e-01, 1.853450018e-01, + 1.858635413e-01, 1.863793141e-01, 1.868923607e-01, 1.874027208e-01, + 1.879104330e-01, 1.884155353e-01, 1.889180645e-01, 1.894180570e-01, + 1.899155480e-01, 1.904105723e-01, 1.909031635e-01, 1.913933549e-01, + 1.918811789e-01, 1.923666671e-01, 7.397762774e-01, 7.403398693e-01, + 7.409063870e-01, 7.414758708e-01, 7.420483622e-01, 7.426239035e-01, + 7.432025379e-01, 7.437843097e-01, 7.443692640e-01, 7.449574471e-01, + 7.455489063e-01, 7.461436900e-01, 7.467418479e-01, 7.473434305e-01, + 7.479484898e-01, 7.485570790e-01, 7.491692525e-01, 7.497850662e-01, + 7.504045773e-01, 7.510278443e-01, 7.516549273e-01, 7.522858879e-01, + 7.529207894e-01, 7.535596964e-01, 7.542026756e-01, 7.548497952e-01, + 7.555011253e-01, 7.561567379e-01, 7.568167068e-01, 7.574811081e-01, + 7.581500198e-01, 7.588235222e-01, 7.595016977e-01, 7.601846312e-01, + 7.608724102e-01, 7.615651244e-01, 7.622628664e-01, 7.629657314e-01, + 7.636738178e-01, 7.643872265e-01, 7.651060620e-01, 7.658304318e-01, + 7.665604467e-01, 7.672962213e-01, 7.680378739e-01, 7.687855263e-01, + 7.695393048e-01, 7.702993396e-01, 7.710657654e-01, 7.718387217e-01, + 7.726183527e-01, 7.734048077e-01, 7.741982412e-01, 7.749988136e-01, + 7.758066909e-01, 7.766220455e-01, 7.774450560e-01, 7.782759081e-01, + 7.791147945e-01, 7.799619158e-01, 7.808174801e-01, 7.816817043e-01, + 7.825548141e-01, 7.834370446e-01, 7.843286410e-01, 7.852298587e-01, + 7.861409647e-01, 7.870622375e-01, 7.879939684e-01, 7.889364620e-01, + 7.898900371e-01, 7.908550277e-01, 7.918317840e-01, 7.928206733e-01, + 7.938220814e-01, 7.948364138e-01, 7.958640971e-01, 7.969055805e-01, + 7.979613377e-01, 7.990318682e-01, 8.001176999e-01, 8.012193911e-01, + 8.023375326e-01, 8.034727511e-01, 8.046257114e-01, 8.057971204e-01, + 8.069877302e-01, 8.081983425e-01, 8.094298131e-01, 8.106830570e-01, + 8.119590541e-01, 8.132588559e-01, 8.145835922e-01, 8.159344802e-01, + 8.173128333e-01, 8.187200719e-01, 8.201577360e-01, 8.216274992e-01, + 8.231311847e-01, 8.246707849e-01, 8.262484829e-01, 8.278666789e-01, + 8.295280203e-01, 8.312354380e-01, 8.329921899e-01, 8.348019122e-01, + 8.366686825e-01, 8.385970963e-01, 8.405923610e-01, 8.426604130e-01, + 8.448080645e-01, 8.470431898e-01, 8.493749656e-01, 8.518141833e-01, + 8.543736642e-01, 8.570688191e-01, 8.599184190e-01, 8.629456828e-01, + 8.661798526e-01, 8.696585511e-01, 8.734314464e-01, 8.775662193e-01, + 8.821588566e-01, 8.873527672e-01, 8.933779421e-01, 9.006430751e-01, + 9.100037354e-01, 9.239177305e-01, 1.000000000e+00, +}; +const float dist_icdf_3_3[] = { + 0.000000000e+00, 7.167186913e-02, 9.471219680e-02, 1.117382035e-01, + 1.258070441e-01, 1.380505261e-01, 1.490319159e-01, 1.590782570e-01, + 1.683987305e-01, 1.771363949e-01, 1.853940284e-01, 1.932483201e-01, + 2.007582379e-01, 2.079702462e-01, 2.149217091e-01, 2.216431924e-01, + 2.281600709e-01, 2.344936805e-01, 2.406621621e-01, 2.466810932e-01, + 2.525639687e-01, 2.583225716e-01, 2.639672645e-01, 2.695072200e-01, + 2.749506061e-01, 2.803047359e-01, 2.855761907e-01, 2.907709211e-01, + 2.958943309e-01, 3.009513482e-01, 3.059464842e-01, 3.108838841e-01, + 3.157673700e-01, 3.206004778e-01, 3.253864892e-01, 3.301284590e-01, + 3.348292396e-01, 3.394915020e-01, 3.441177538e-01, 3.487103562e-01, + 3.532715380e-01, 3.578034086e-01, 3.623079694e-01, 3.667871243e-01, + 3.712426887e-01, 3.756763979e-01, 3.800899146e-01, 3.844848360e-01, + 3.888626998e-01, 3.932249899e-01, 3.975731421e-01, 4.019085486e-01, + 4.062325624e-01, 4.105465021e-01, 4.148516550e-01, 4.191492817e-01, + 4.234406189e-01, 4.277268830e-01, 4.320092734e-01, 4.362889752e-01, + 4.405671624e-01, 4.448450008e-01, 4.491236505e-01, 4.534042690e-01, + 4.576880137e-01, 4.619760446e-01, 4.662695270e-01, 4.705696344e-01, + 4.748775513e-01, 4.791944758e-01, 4.835216226e-01, 4.878602261e-01, + 4.922115434e-01, 4.965768580e-01, 5.009574825e-01, 5.053547628e-01, + 5.097700819e-01, 5.142048637e-01, 5.186605777e-01, 5.231387435e-01, + 5.276409361e-01, 5.321687910e-01, 5.367240108e-01, 5.413083712e-01, + 5.459237281e-01, 5.505720260e-01, 5.552553059e-01, 5.599757153e-01, + 5.647355186e-01, 5.695371087e-01, 5.743830203e-01, 5.792759446e-01, + 5.842187455e-01, 5.892144785e-01, 5.942664115e-01, 5.993780487e-01, + 6.045531580e-01, 6.097958022e-01, 6.151103747e-01, 6.205016414e-01, + 6.259747884e-01, 6.315354788e-01, 6.371899183e-01, 6.429449337e-01, + 6.488080653e-01, 6.547876776e-01, 6.608930937e-01, 6.671347567e-01, + 6.735244293e-01, 6.800754397e-01, 6.868029884e-01, 6.937245372e-01, + 7.008603055e-01, 7.082339156e-01, 7.158732418e-01, 7.238115502e-01, + 7.320890585e-01, 7.407551189e-01, 7.498713590e-01, 7.595163410e-01, + 7.697927392e-01, 7.808389100e-01, 7.928486219e-01, 8.061072219e-01, + 8.210646014e-01, 8.385036818e-01, 8.600192556e-01, 8.900087909e-01, + 1.000000000e+00, 0.000000000e+00, 2.215358026e-02, 2.898882354e-02, + 3.394614311e-02, 3.798105938e-02, 4.144648181e-02, 4.451774243e-02, + 4.729650110e-02, 4.984770216e-02, 5.221571184e-02, 5.443237088e-02, + 5.652141289e-02, 5.850106799e-02, 6.038568517e-02, 6.218678969e-02, + 6.391379820e-02, 6.557451766e-02, 6.717550272e-02, 6.872231759e-02, + 7.021973180e-02, 7.167186913e-02, 7.308232258e-02, 7.445424449e-02, + 7.579041793e-02, 7.709331403e-02, 7.836513831e-02, 7.960786867e-02, + 8.082328661e-02, 8.201300327e-02, 8.317848116e-02, 8.432105244e-02, + 8.544193455e-02, 8.654224335e-02, 8.762300457e-02, 8.868516351e-02, + 8.972959354e-02, 9.075710348e-02, 9.176844399e-02, 9.276431319e-02, + 9.374536167e-02, 9.471219680e-02, 9.566538662e-02, 9.660546329e-02, + 9.753292615e-02, 9.844824443e-02, 9.935185975e-02, 1.002441883e-01, + 1.011256227e-01, 1.019965342e-01, 1.028572736e-01, 1.037081735e-01, + 1.045495491e-01, 1.053816995e-01, 1.062049090e-01, 1.070194479e-01, + 1.078255736e-01, 1.086235313e-01, 1.094135549e-01, 1.101958675e-01, + 1.109706825e-01, 1.117382035e-01, 1.124986257e-01, 1.132521359e-01, + 1.139989128e-01, 1.147391281e-01, 1.154729463e-01, 1.162005255e-01, + 1.169220174e-01, 1.176375680e-01, 1.183473176e-01, 1.190514013e-01, + 1.197499491e-01, 1.204430863e-01, 1.211309337e-01, 1.218136078e-01, + 1.224912210e-01, 1.231638817e-01, 1.238316948e-01, 1.244947615e-01, + 1.251531797e-01, 1.258070441e-01, 1.264564462e-01, 1.271014748e-01, + 1.277422156e-01, 1.283787519e-01, 1.290111642e-01, 1.296395307e-01, + 1.302639270e-01, 1.308844268e-01, 1.315011013e-01, 1.321140199e-01, + 1.327232497e-01, 1.333288560e-01, 1.339309025e-01, 1.345294507e-01, + 1.351245607e-01, 1.357162908e-01, 1.363046979e-01, 1.368898372e-01, + 1.374717625e-01, 1.380505261e-01, 1.386261792e-01, 1.391987714e-01, + 1.397683512e-01, 1.403349657e-01, 1.408986611e-01, 1.414594822e-01, + 1.420174728e-01, 1.425726757e-01, 1.431251326e-01, 1.436748842e-01, + 1.442219703e-01, 1.447664296e-01, 1.453083001e-01, 1.458476188e-01, + 1.463844220e-01, 1.469187450e-01, 1.474506225e-01, 1.479800882e-01, + 1.485071752e-01, 1.490319159e-01, 1.495543420e-01, 1.500744844e-01, + 1.505923734e-01, 1.511080387e-01, 1.516215093e-01, 1.521328138e-01, + 1.526419800e-01, 1.531490351e-01, 7.879135022e-01, 7.885202823e-01, + 7.891298744e-01, 7.897423158e-01, 7.903576445e-01, 7.909758993e-01, + 7.915971200e-01, 7.922213470e-01, 7.928486219e-01, 7.934789870e-01, + 7.941124856e-01, 7.947491621e-01, 7.953890617e-01, 7.960322308e-01, + 7.966787167e-01, 7.973285680e-01, 7.979818345e-01, 7.986385668e-01, + 7.992988171e-01, 7.999626387e-01, 8.006300863e-01, 8.013012157e-01, + 8.019760844e-01, 8.026547512e-01, 8.033372764e-01, 8.040237217e-01, + 8.047141508e-01, 8.054086286e-01, 8.061072219e-01, 8.068099995e-01, + 8.075170316e-01, 8.082283907e-01, 8.089441511e-01, 8.096643892e-01, + 8.103891836e-01, 8.111186149e-01, 8.118527664e-01, 8.125917235e-01, + 8.133355743e-01, 8.140844092e-01, 8.148383217e-01, 8.155974078e-01, + 8.163617667e-01, 8.171315005e-01, 8.179067146e-01, 8.186875177e-01, + 8.194740220e-01, 8.202663434e-01, 8.210646014e-01, 8.218689198e-01, + 8.226794264e-01, 8.234962534e-01, 8.243195376e-01, 8.251494205e-01, + 8.259860487e-01, 8.268295742e-01, 8.276801544e-01, 8.285379526e-01, + 8.294031383e-01, 8.302758872e-01, 8.311563821e-01, 8.320448128e-01, + 8.329413769e-01, 8.338462796e-01, 8.347597348e-01, 8.356819654e-01, + 8.366132035e-01, 8.375536914e-01, 8.385036818e-01, 8.394634389e-01, + 8.404332387e-01, 8.414133700e-01, 8.424041351e-01, 8.434058508e-01, + 8.444188491e-01, 8.454434786e-01, 8.464801056e-01, 8.475291150e-01, + 8.485909120e-01, 8.496659235e-01, 8.507545996e-01, 8.518574158e-01, + 8.529748743e-01, 8.541075067e-01, 8.552558764e-01, 8.564205807e-01, + 8.576022545e-01, 8.588015730e-01, 8.600192556e-01, 8.612560700e-01, + 8.625128365e-01, 8.637904334e-01, 8.650898027e-01, 8.664119567e-01, + 8.677579852e-01, 8.691290643e-01, 8.705264656e-01, 8.719515676e-01, + 8.734058685e-01, 8.748910006e-01, 8.764087479e-01, 8.779610659e-01, + 8.795501050e-01, 8.811782388e-01, 8.828480968e-01, 8.845626044e-01, + 8.863250302e-01, 8.881390446e-01, 8.900087909e-01, 8.919389732e-01, + 8.939349667e-01, 8.960029571e-01, 8.981501188e-01, 9.003848467e-01, + 9.027170611e-01, 9.051586178e-01, 9.077238691e-01, 9.104304504e-01, + 9.133004115e-01, 9.163618972e-01, 9.196517386e-01, 9.232196333e-01, + 9.271352827e-01, 9.315014891e-01, 9.364806173e-01, 9.423557908e-01, + 9.497051553e-01, 9.601283182e-01, 1.000000000e+00, +}; +const float dist_icdf_3_4[] = { + 0.000000000e+00, 3.984384380e-02, 5.832579568e-02, 7.301236815e-02, + 8.571044308e-02, 9.712997207e-02, 1.076384798e-01, 1.174558331e-01, + 1.267261030e-01, 1.355498433e-01, 1.440005755e-01, 1.521340131e-01, + 1.599935925e-01, 1.676139708e-01, 1.750233381e-01, 1.822449999e-01, + 1.892984943e-01, 1.962004002e-01, 2.029649361e-01, 2.096044107e-01, + 2.161295693e-01, 2.225498639e-01, 2.288736650e-01, 2.351084323e-01, + 2.412608514e-01, 2.473369461e-01, 2.533421701e-01, 2.592814835e-01, + 2.651594167e-01, 2.709801239e-01, 2.767474293e-01, 2.824648650e-01, + 2.881357051e-01, 2.937629942e-01, 2.993495720e-01, 3.048980954e-01, + 3.104110571e-01, 3.158908025e-01, 3.213395444e-01, 3.267593757e-01, + 3.321522814e-01, 3.375201487e-01, 3.428647762e-01, 3.481878827e-01, + 3.534911140e-01, 3.587760502e-01, 3.640442118e-01, 3.692970656e-01, + 3.745360293e-01, 3.797624769e-01, 3.849777427e-01, 3.901831256e-01, + 3.953798928e-01, 4.005692836e-01, 4.057525123e-01, 4.109307719e-01, + 4.161052368e-01, 4.212770656e-01, 4.264474043e-01, 4.316173882e-01, + 4.367881454e-01, 4.419607986e-01, 4.471364678e-01, 4.523162730e-01, + 4.575013361e-01, 4.626927840e-01, 4.678917504e-01, 4.730993786e-01, + 4.783168242e-01, 4.835452571e-01, 4.887858648e-01, 4.940398548e-01, + 4.993084575e-01, 5.045929293e-01, 5.098945556e-01, 5.152146543e-01, + 5.205545791e-01, 5.259157235e-01, 5.312995247e-01, 5.367074679e-01, + 5.421410908e-01, 5.476019890e-01, 5.530918211e-01, 5.586123146e-01, + 5.641652727e-01, 5.697525810e-01, 5.753762156e-01, 5.810382514e-01, + 5.867408718e-01, 5.924863793e-01, 5.982772066e-01, 6.041159307e-01, + 6.100052865e-01, 6.159481842e-01, 6.219477273e-01, 6.280072336e-01, + 6.341302598e-01, 6.403206282e-01, 6.465824581e-01, 6.529202023e-01, + 6.593386884e-01, 6.658431677e-01, 6.724393716e-01, 6.791335790e-01, + 6.859326945e-01, 6.928443429e-01, 6.998769823e-01, 7.070400399e-01, + 7.143440786e-01, 7.218010013e-01, 7.294243053e-01, 7.372294009e-01, + 7.452340172e-01, 7.534587255e-01, 7.619276229e-01, 7.706692436e-01, + 7.797177951e-01, 7.891148743e-01, 7.989119121e-01, 8.091737631e-01, + 8.199841727e-01, 8.314544783e-01, 8.437382354e-01, 8.570575909e-01, + 8.717554671e-01, 8.884132391e-01, 9.081750309e-01, 9.340354421e-01, + 1.000000000e+00, 0.000000000e+00, 7.830181122e-03, 1.139137543e-02, + 1.418850226e-02, 1.658320402e-02, 1.871779135e-02, 2.066602660e-02, + 2.247208377e-02, 2.416493445e-02, 2.576481427e-02, 2.728652759e-02, + 2.874129788e-02, 3.013787773e-02, 3.148325148e-02, 3.278309970e-02, + 3.404211745e-02, 3.526423897e-02, 3.645280035e-02, 3.761066002e-02, + 3.874028962e-02, 3.984384380e-02, 4.092321454e-02, 4.198007405e-02, + 4.301590906e-02, 4.403204848e-02, 4.502968601e-02, 4.600989869e-02, + 4.697366232e-02, 4.792186435e-02, 4.885531475e-02, 4.977475515e-02, + 5.068086670e-02, 5.157427679e-02, 5.245556482e-02, 5.332526719e-02, + 5.418388168e-02, 5.503187125e-02, 5.586966732e-02, 5.669767277e-02, + 5.751626449e-02, 5.832579568e-02, 5.912659791e-02, 5.991898291e-02, + 6.070324421e-02, 6.147965861e-02, 6.224848746e-02, 6.300997789e-02, + 6.376436383e-02, 6.451186700e-02, 6.525269779e-02, 6.598705605e-02, + 6.671513183e-02, 6.743710601e-02, 6.815315095e-02, 6.886343102e-02, + 6.956810312e-02, 7.026731712e-02, 7.096121636e-02, 7.164993796e-02, + 7.233361327e-02, 7.301236815e-02, 7.368632331e-02, 7.435559460e-02, + 7.502029328e-02, 7.568052626e-02, 7.633639637e-02, 7.698800253e-02, + 7.763543997e-02, 7.827880045e-02, 7.891817241e-02, 7.955364111e-02, + 8.018528885e-02, 8.081319507e-02, 8.143743649e-02, 8.205808724e-02, + 8.267521901e-02, 8.328890113e-02, 8.389920066e-02, 8.450618257e-02, + 8.510990973e-02, 8.571044308e-02, 8.630784169e-02, 8.690216281e-02, + 8.749346201e-02, 8.808179319e-02, 8.866720866e-02, 8.924975924e-02, + 8.982949428e-02, 9.040646175e-02, 9.098070826e-02, 9.155227915e-02, + 9.212121850e-02, 9.268756922e-02, 9.325137305e-02, 9.381267065e-02, + 9.437150159e-02, 9.492790443e-02, 9.548191674e-02, 9.603357514e-02, + 9.658291531e-02, 9.712997207e-02, 9.767477937e-02, 9.821737033e-02, + 9.875777727e-02, 9.929603175e-02, 9.983216458e-02, 1.003662058e-01, + 1.008981849e-01, 1.014281304e-01, 1.019560706e-01, 1.024820327e-01, + 1.030060436e-01, 1.035281295e-01, 1.040483160e-01, 1.045666283e-01, + 1.050830908e-01, 1.055977276e-01, 1.061105621e-01, 1.066216173e-01, + 1.071309159e-01, 1.076384798e-01, 1.081443306e-01, 1.086484896e-01, + 1.091509774e-01, 1.096518144e-01, 1.101510205e-01, 1.106486152e-01, + 1.111446177e-01, 1.116390467e-01, 8.387148718e-01, 8.393343603e-01, + 8.399561985e-01, 8.405804153e-01, 8.412070404e-01, 8.418361039e-01, + 8.424676364e-01, 8.431016696e-01, 8.437382354e-01, 8.443773666e-01, + 8.450190967e-01, 8.456634598e-01, 8.463104909e-01, 8.469602257e-01, + 8.476127005e-01, 8.482679528e-01, 8.489260206e-01, 8.495869429e-01, + 8.502507597e-01, 8.509175116e-01, 8.515872404e-01, 8.522599890e-01, + 8.529358009e-01, 8.536147211e-01, 8.542967954e-01, 8.549820707e-01, + 8.556705953e-01, 8.563624185e-01, 8.570575909e-01, 8.577561644e-01, + 8.584581922e-01, 8.591637288e-01, 8.598728304e-01, 8.605855544e-01, + 8.613019598e-01, 8.620221073e-01, 8.627460592e-01, 8.634738795e-01, + 8.642056341e-01, 8.649413904e-01, 8.656812183e-01, 8.664251891e-01, + 8.671733768e-01, 8.679258570e-01, 8.686827080e-01, 8.694440102e-01, + 8.702098467e-01, 8.709803029e-01, 8.717554671e-01, 8.725354303e-01, + 8.733202865e-01, 8.741101326e-01, 8.749050690e-01, 8.757051991e-01, + 8.765106300e-01, 8.773214726e-01, 8.781378413e-01, 8.789598550e-01, + 8.797876365e-01, 8.806213131e-01, 8.814610171e-01, 8.823068853e-01, + 8.831590600e-01, 8.840176889e-01, 8.848829255e-01, 8.857549293e-01, + 8.866338664e-01, 8.875199097e-01, 8.884132391e-01, 8.893140423e-01, + 8.902225152e-01, 8.911388620e-01, 8.920632964e-01, 8.929960414e-01, + 8.939373306e-01, 8.948874086e-01, 8.958465316e-01, 8.968149685e-01, + 8.977930015e-01, 8.987809273e-01, 8.997790579e-01, 9.007877219e-01, + 9.018072659e-01, 9.028380553e-01, 9.038804767e-01, 9.049349386e-01, + 9.060018740e-01, 9.070817422e-01, 9.081750309e-01, 9.092822590e-01, + 9.104039795e-01, 9.115407821e-01, 9.126932977e-01, 9.138622016e-01, + 9.150482183e-01, 9.162521270e-01, 9.174747671e-01, 9.187170449e-01, + 9.199799415e-01, 9.212645218e-01, 9.225719443e-01, 9.239034737e-01, + 9.252604942e-01, 9.266445266e-01, 9.280572475e-01, 9.295005126e-01, + 9.309763844e-01, 9.324871660e-01, 9.340354421e-01, 9.356241297e-01, + 9.372565403e-01, 9.389364592e-01, 9.406682455e-01, 9.424569611e-01, + 9.443085398e-01, 9.462300117e-01, 9.482298093e-01, 9.503181901e-01, + 9.525078404e-01, 9.548147615e-01, 9.572596184e-01, 9.598698874e-01, + 9.626834653e-01, 9.657551776e-01, 9.691696553e-01, 9.730703746e-01, + 9.777396883e-01, 9.839166584e-01, 1.000000000e+00, +}; +const float dist_icdf_3_5[] = { + 0.000000000e+00, 1.718397325e-02, 2.918666384e-02, 3.982191900e-02, + 4.967010892e-02, 5.898056554e-02, 6.789035732e-02, 7.648534670e-02, + 8.482394771e-02, 9.294824662e-02, 1.008898774e-01, 1.086734061e-01, + 1.163184120e-01, 1.238408338e-01, 1.312538777e-01, 1.385686505e-01, + 1.457946137e-01, 1.529399183e-01, 1.600116548e-01, 1.670160458e-01, + 1.739585944e-01, 1.808442020e-01, 1.876772621e-01, 1.944617356e-01, + 2.012012129e-01, 2.078989648e-01, 2.145579844e-01, 2.211810228e-01, + 2.277706187e-01, 2.343291240e-01, 2.408587250e-01, 2.473614616e-01, + 2.538392428e-01, 2.602938611e-01, 2.667270044e-01, 2.731402670e-01, + 2.795351586e-01, 2.859131132e-01, 2.922754961e-01, 2.986236106e-01, + 3.049587043e-01, 3.112819738e-01, 3.175945700e-01, 3.238976024e-01, + 3.301921429e-01, 3.364792297e-01, 3.427598703e-01, 3.490350451e-01, + 3.553057095e-01, 3.615727972e-01, 3.678372223e-01, 3.740998819e-01, + 3.803616579e-01, 3.866234193e-01, 3.928860241e-01, 3.991503211e-01, + 4.054171519e-01, 4.116873524e-01, 4.179617545e-01, 4.242411878e-01, + 4.305264813e-01, 4.368184648e-01, 4.431179707e-01, 4.494258351e-01, + 4.557429002e-01, 4.620700150e-01, 4.684080375e-01, 4.747578362e-01, + 4.811202917e-01, 4.874962986e-01, 4.938867672e-01, 5.002926253e-01, + 5.067148205e-01, 5.131543219e-01, 5.196121225e-01, 5.260892413e-01, + 5.325867260e-01, 5.391056555e-01, 5.456471426e-01, 5.522123371e-01, + 5.588024289e-01, 5.654186518e-01, 5.720622868e-01, 5.787346666e-01, + 5.854371797e-01, 5.921712756e-01, 5.989384699e-01, 6.057403503e-01, + 6.125785830e-01, 6.194549198e-01, 6.263712062e-01, 6.333293900e-01, + 6.403315311e-01, 6.473798127e-01, 6.544765537e-01, 6.616242222e-01, + 6.688254515e-01, 6.760830583e-01, 6.834000624e-01, 6.907797107e-01, + 6.982255036e-01, 7.057412263e-01, 7.133309847e-01, 7.209992476e-01, + 7.287508963e-01, 7.365912828e-01, 7.445263000e-01, 7.525624649e-01, + 7.607070196e-01, 7.689680550e-01, 7.773546621e-01, 7.858771210e-01, + 7.945471389e-01, 8.033781531e-01, 8.123857236e-01, 8.215880493e-01, + 8.310066601e-01, 8.406673643e-01, 8.506015785e-01, 8.608482497e-01, + 8.714567304e-01, 8.824912671e-01, 8.940383792e-01, 9.062198336e-01, + 9.192175665e-01, 9.333279002e-01, 9.491041716e-01, 9.678856524e-01, + 1.000000000e+00, 0.000000000e+00, 1.755461680e-03, 2.974383579e-03, + 4.049409107e-03, 5.040626314e-03, 5.973930679e-03, 6.863594613e-03, + 7.718578005e-03, 8.544987597e-03, 9.347229852e-03, 1.012862089e-02, + 1.089173827e-02, 1.163863759e-02, 1.237099276e-02, 1.309019070e-02, + 1.379739745e-02, 1.449360569e-02, 1.517966971e-02, 1.585633163e-02, + 1.652424157e-02, 1.718397325e-02, 1.783603632e-02, 1.848088621e-02, + 1.911893212e-02, 1.975054348e-02, 2.037605530e-02, 2.099577264e-02, + 2.160997434e-02, 2.221891612e-02, 2.282283327e-02, 2.342194294e-02, + 2.401644609e-02, 2.460652914e-02, 2.519236551e-02, 2.577411682e-02, + 2.635193407e-02, 2.692595859e-02, 2.749632292e-02, 2.806315158e-02, + 2.862656174e-02, 2.918666384e-02, 2.974356214e-02, 3.029735520e-02, + 3.084813633e-02, 3.139599395e-02, 3.194101199e-02, 3.248327021e-02, + 3.302284447e-02, 3.355980701e-02, 3.409422669e-02, 3.462616924e-02, + 3.515569742e-02, 3.568287124e-02, 3.620774811e-02, 3.673038302e-02, + 3.725082869e-02, 3.776913565e-02, 3.828535244e-02, 3.879952567e-02, + 3.931170015e-02, 3.982191900e-02, 4.033022371e-02, 4.083665424e-02, + 4.134124911e-02, 4.184404549e-02, 4.234507920e-02, 4.284438486e-02, + 4.334199589e-02, 4.383794460e-02, 4.433226224e-02, 4.482497903e-02, + 4.531612422e-02, 4.580572615e-02, 4.629381225e-02, 4.678040914e-02, + 4.726554259e-02, 4.774923764e-02, 4.823151856e-02, 4.871240893e-02, + 4.919193163e-02, 4.967010892e-02, 5.014696240e-02, 5.062251311e-02, + 5.109678146e-02, 5.156978737e-02, 5.204155017e-02, 5.251208872e-02, + 5.298142136e-02, 5.344956598e-02, 5.391653999e-02, 5.438236037e-02, + 5.484704369e-02, 5.531060608e-02, 5.577306330e-02, 5.623443073e-02, + 5.669472336e-02, 5.715395584e-02, 5.761214249e-02, 5.806929727e-02, + 5.852543383e-02, 5.898056554e-02, 5.943470541e-02, 5.988786621e-02, + 6.034006042e-02, 6.079130022e-02, 6.124159756e-02, 6.169096411e-02, + 6.213941131e-02, 6.258695034e-02, 6.303359217e-02, 6.347934753e-02, + 6.392422694e-02, 6.436824068e-02, 6.481139886e-02, 6.525371137e-02, + 6.569518790e-02, 6.613583796e-02, 6.657567088e-02, 6.701469579e-02, + 6.745292167e-02, 6.789035732e-02, 6.832701137e-02, 6.876289229e-02, + 6.919800841e-02, 6.963236788e-02, 7.006597873e-02, 7.049884884e-02, + 7.093098592e-02, 7.136239758e-02, 8.893512326e-01, 8.899319144e-01, + 8.905140528e-01, 8.910976636e-01, 8.916827628e-01, 8.922693671e-01, + 8.928574932e-01, 8.934471581e-01, 8.940383792e-01, 8.946311744e-01, + 8.952255618e-01, 8.958215598e-01, 8.964191872e-01, 8.970184634e-01, + 8.976194078e-01, 8.982220406e-01, 8.988263822e-01, 8.994324535e-01, + 9.000402756e-01, 9.006498706e-01, 9.012612605e-01, 9.018744680e-01, + 9.024895165e-01, 9.031064296e-01, 9.037252316e-01, 9.043459474e-01, + 9.049686022e-01, 9.055932221e-01, 9.062198336e-01, 9.068484639e-01, + 9.074791408e-01, 9.081118930e-01, 9.087467494e-01, 9.093837402e-01, + 9.100228958e-01, 9.106642478e-01, 9.113078283e-01, 9.119536703e-01, + 9.126018079e-01, 9.132522756e-01, 9.139051093e-01, 9.145603455e-01, + 9.152180219e-01, 9.158781772e-01, 9.165408510e-01, 9.172060843e-01, + 9.178739189e-01, 9.185443982e-01, 9.192175665e-01, 9.198934697e-01, + 9.205721548e-01, 9.212536704e-01, 9.219380665e-01, 9.226253947e-01, + 9.233157082e-01, 9.240090618e-01, 9.247055121e-01, 9.254051178e-01, + 9.261079392e-01, 9.268140387e-01, 9.275234810e-01, 9.282363328e-01, + 9.289526634e-01, 9.296725443e-01, 9.303960498e-01, 9.311232568e-01, + 9.318542451e-01, 9.325890976e-01, 9.333279002e-01, 9.340707425e-01, + 9.348177174e-01, 9.355689216e-01, 9.363244558e-01, 9.370844250e-01, + 9.378489387e-01, 9.386181110e-01, 9.393920613e-01, 9.401709141e-01, + 9.409548000e-01, 9.417438555e-01, 9.425382238e-01, 9.433380549e-01, + 9.441435064e-01, 9.449547442e-01, 9.457719426e-01, 9.465952853e-01, + 9.474249659e-01, 9.482611893e-01, 9.491041716e-01, 9.499541421e-01, + 9.508113436e-01, 9.516760340e-01, 9.525484879e-01, 9.534289974e-01, + 9.543178747e-01, 9.552154532e-01, 9.561220906e-01, 9.570381705e-01, + 9.579641060e-01, 9.589003422e-01, 9.598473609e-01, 9.608056843e-01, + 9.617758799e-01, 9.627585673e-01, 9.637544240e-01, 9.647641946e-01, + 9.657886998e-01, 9.668288486e-01, 9.678856524e-01, 9.689602419e-01, + 9.700538890e-01, 9.711680324e-01, 9.723043116e-01, 9.734646090e-01, + 9.746511046e-01, 9.758663486e-01, 9.771133575e-01, 9.783957466e-01, + 9.797179158e-01, 9.810853170e-01, 9.825048554e-01, 9.839855139e-01, + 9.855393811e-01, 9.871834551e-01, 9.889431082e-01, 9.908596171e-01, + 9.930099575e-01, 9.955801360e-01, 1.000000000e+00, +}; +const float dist_icdf_3_6[] = { + 0.000000000e+00, 5.080117766e-03, 1.070137945e-02, 1.654833190e-02, + 2.254781636e-02, 2.866409040e-02, 3.487570194e-02, 4.116827592e-02, + 4.753148246e-02, 5.395752931e-02, 6.044032428e-02, 6.697497165e-02, + 7.355745056e-02, 8.018439980e-02, 8.685296820e-02, 9.356070740e-02, + 1.003054928e-01, 1.070854641e-01, 1.138989798e-01, 1.207445815e-01, + 1.276209654e-01, 1.345269603e-01, 1.414615086e-01, 1.484236516e-01, + 1.554125169e-01, 1.624273078e-01, 1.694672950e-01, 1.765318086e-01, + 1.836202320e-01, 1.907319966e-01, 1.978665768e-01, 2.050234861e-01, + 2.122022736e-01, 2.194025207e-01, 2.266238386e-01, 2.338658655e-01, + 2.411282650e-01, 2.484107238e-01, 2.557129503e-01, 2.630346728e-01, + 2.703756383e-01, 2.777356114e-01, 2.851143732e-01, 2.925117201e-01, + 2.999274633e-01, 3.073614276e-01, 3.148134509e-01, 3.222833839e-01, + 3.297710888e-01, 3.372764393e-01, 3.447993202e-01, 3.523396266e-01, + 3.598972638e-01, 3.674721468e-01, 3.750642003e-01, 3.826733580e-01, + 3.902995629e-01, 3.979427666e-01, 4.056029293e-01, 4.132800201e-01, + 4.209740161e-01, 4.286849029e-01, 4.364126744e-01, 4.441573325e-01, + 4.519188877e-01, 4.596973583e-01, 4.674927712e-01, 4.753051614e-01, + 4.831345724e-01, 4.909810563e-01, 4.988446736e-01, 5.067254939e-01, + 5.146235957e-01, 5.225390666e-01, 5.304720038e-01, 5.384225144e-01, + 5.463907153e-01, 5.543767340e-01, 5.623807089e-01, 5.704027895e-01, + 5.784431372e-01, 5.865019256e-01, 5.945793415e-01, 6.026755849e-01, + 6.107908703e-01, 6.189254274e-01, 6.270795016e-01, 6.352533555e-01, + 6.434472698e-01, 6.516615445e-01, 6.598965001e-01, 6.681524792e-01, + 6.764298485e-01, 6.847290001e-01, 6.930503539e-01, 7.013943600e-01, + 7.097615009e-01, 7.181522952e-01, 7.265673005e-01, 7.350071169e-01, + 7.434723924e-01, 7.519638269e-01, 7.604821785e-01, 7.690282700e-01, + 7.776029971e-01, 7.862073367e-01, 7.948423585e-01, 8.035092373e-01, + 8.122092680e-01, 8.209438843e-01, 8.297146809e-01, 8.385234402e-01, + 8.473721669e-01, 8.562631298e-01, 8.651989160e-01, 8.741825006e-01, + 8.832173385e-01, 8.923074868e-01, 9.014577740e-01, 9.106740372e-01, + 9.199634692e-01, 9.293351428e-01, 9.388008459e-01, 9.483764947e-01, + 9.580847322e-01, 9.679602881e-01, 9.780631552e-01, 9.885228861e-01, + 1.000000000e+00, 0.000000000e+00, 2.031186508e-04, 4.277904577e-04, + 6.613892216e-04, 9.009823117e-04, 1.145134937e-03, 1.392984626e-03, + 1.643952451e-03, 1.897621617e-03, 2.153677069e-03, 2.411871935e-03, + 2.672007338e-03, 2.933919501e-03, 3.197471119e-03, 3.462545351e-03, + 3.729041521e-03, 3.996871944e-03, 4.265959538e-03, 4.536235989e-03, + 4.807640322e-03, 5.080117766e-03, 5.353618842e-03, 5.628098622e-03, + 5.903516126e-03, 6.179833813e-03, 6.457017165e-03, 6.735034331e-03, + 7.013855822e-03, 7.293454263e-03, 7.573804162e-03, 7.854881727e-03, + 8.136664696e-03, 8.419132193e-03, 8.702264603e-03, 8.986043456e-03, + 9.270451332e-03, 9.555471773e-03, 9.841089200e-03, 1.012728885e-02, + 1.041405671e-02, 1.070137945e-02, 1.098924441e-02, 1.127763949e-02, + 1.156655318e-02, 1.185597446e-02, 1.214589281e-02, 1.243629815e-02, + 1.272718084e-02, 1.301853161e-02, 1.331034159e-02, 1.360260224e-02, + 1.389530535e-02, 1.418844305e-02, 1.448200772e-02, 1.477599204e-02, + 1.507038896e-02, 1.536519165e-02, 1.566039354e-02, 1.595598827e-02, + 1.625196971e-02, 1.654833190e-02, 1.684506910e-02, 1.714217573e-02, + 1.743964640e-02, 1.773747588e-02, 1.803565910e-02, 1.833419113e-02, + 1.863306719e-02, 1.893228265e-02, 1.923183299e-02, 1.953171384e-02, + 1.983192093e-02, 2.013245012e-02, 2.043329736e-02, 2.073445875e-02, + 2.103593044e-02, 2.133770871e-02, 2.163978994e-02, 2.194217058e-02, + 2.224484717e-02, 2.254781636e-02, 2.285107484e-02, 2.315461942e-02, + 2.345844697e-02, 2.376255441e-02, 2.406693876e-02, 2.437159710e-02, + 2.467652658e-02, 2.498172439e-02, 2.528718782e-02, 2.559291418e-02, + 2.589890087e-02, 2.620514532e-02, 2.651164504e-02, 2.681839755e-02, + 2.712540048e-02, 2.743265145e-02, 2.774014817e-02, 2.804788837e-02, + 2.835586984e-02, 2.866409040e-02, 2.897254793e-02, 2.928124034e-02, + 2.959016557e-02, 2.989932162e-02, 3.020870651e-02, 3.051831831e-02, + 3.082815510e-02, 3.113821503e-02, 3.144849626e-02, 3.175899699e-02, + 3.206971545e-02, 3.238064989e-02, 3.269179862e-02, 3.300315994e-02, + 3.331473222e-02, 3.362651382e-02, 3.393850315e-02, 3.425069864e-02, + 3.456309874e-02, 3.487570194e-02, 3.518850674e-02, 3.550151168e-02, + 3.581471530e-02, 3.612811617e-02, 3.644171291e-02, 3.675550412e-02, + 3.706948845e-02, 3.738366457e-02, 9.350023775e-01, 9.354762671e-01, + 9.359504151e-01, 9.364248235e-01, 9.368994943e-01, 9.373744298e-01, + 9.378496321e-01, 9.383251034e-01, 9.388008459e-01, 9.392768620e-01, + 9.397531539e-01, 9.402297240e-01, 9.407065748e-01, 9.411837086e-01, + 9.416611280e-01, 9.421388355e-01, 9.426168337e-01, 9.430951252e-01, + 9.435737127e-01, 9.440525989e-01, 9.445317866e-01, 9.450112787e-01, + 9.454910780e-01, 9.459711874e-01, 9.464516101e-01, 9.469323490e-01, + 9.474134072e-01, 9.478947881e-01, 9.483764947e-01, 9.488585305e-01, + 9.493408988e-01, 9.498236030e-01, 9.503066468e-01, 9.507900337e-01, + 9.512737675e-01, 9.517578518e-01, 9.522422905e-01, 9.527270877e-01, + 9.532122472e-01, 9.536977733e-01, 9.541836701e-01, 9.546699420e-01, + 9.551565934e-01, 9.556436288e-01, 9.561310529e-01, 9.566188703e-01, + 9.571070860e-01, 9.575957049e-01, 9.580847322e-01, 9.585741732e-01, + 9.590640331e-01, 9.595543176e-01, 9.600450322e-01, 9.605361829e-01, + 9.610277757e-01, 9.615198166e-01, 9.620123120e-01, 9.625052685e-01, + 9.629986927e-01, 9.634925915e-01, 9.639869721e-01, 9.644818417e-01, + 9.649772079e-01, 9.654730786e-01, 9.659694616e-01, 9.664663654e-01, + 9.669637985e-01, 9.674617697e-01, 9.679602881e-01, 9.684593633e-01, + 9.689590051e-01, 9.694592235e-01, 9.699600290e-01, 9.704614327e-01, + 9.709634457e-01, 9.714660798e-01, 9.719693473e-01, 9.724732607e-01, + 9.729778333e-01, 9.734830789e-01, 9.739890116e-01, 9.744956465e-01, + 9.750029992e-01, 9.755110859e-01, 9.760199236e-01, 9.765295303e-01, + 9.770399245e-01, 9.775511260e-01, 9.780631552e-01, 9.785760339e-01, + 9.790897849e-01, 9.796044321e-01, 9.801200011e-01, 9.806365186e-01, + 9.811540131e-01, 9.816725147e-01, 9.821920555e-01, 9.827126696e-01, + 9.832343935e-01, 9.837572658e-01, 9.842813285e-01, 9.848066262e-01, + 9.853332070e-01, 9.858611231e-01, 9.863904306e-01, 9.869211908e-01, + 9.874534703e-01, 9.879873420e-01, 9.885228861e-01, 9.890601910e-01, + 9.895993546e-01, 9.901404864e-01, 9.906837088e-01, 9.912291606e-01, + 9.917769992e-01, 9.923274056e-01, 9.928805899e-01, 9.934367981e-01, + 9.939963231e-01, 9.945595183e-01, 9.951268194e-01, 9.956987754e-01, + 9.962760994e-01, 9.968597547e-01, 9.974511113e-01, 9.980522715e-01, + 9.986668684e-01, 9.993027529e-01, 1.000000000e+00, +}; +const float dist_icdf_3_7[] = { + 0.000000000e+00, 8.628158357e-04, 2.475092108e-03, 4.583935209e-03, + 7.096952025e-03, 9.959998080e-03, 1.313608688e-02, 1.659774071e-02, + 2.032341622e-02, 2.429557249e-02, 2.849952084e-02, 3.292269077e-02, + 3.755413613e-02, 4.238418878e-02, 4.740420751e-02, 5.260639094e-02, + 5.798363470e-02, 6.352942037e-02, 6.923772750e-02, 7.510296296e-02, + 8.111990344e-02, 8.728364802e-02, 9.358957879e-02, 1.000333276e-01, + 1.066107481e-01, 1.133178917e-01, 1.201509869e-01, 1.271064215e-01, + 1.341807267e-01, 1.413705643e-01, 1.486727135e-01, 1.560840614e-01, + 1.636015928e-01, 1.712223819e-01, 1.789435850e-01, 1.867624336e-01, + 1.946762277e-01, 2.026823310e-01, 2.107781652e-01, 2.189612058e-01, + 2.272289774e-01, 2.355790499e-01, 2.440090350e-01, 2.525165830e-01, + 2.610993790e-01, 2.697551408e-01, 2.784816155e-01, 2.872765776e-01, + 2.961378259e-01, 3.050631818e-01, 3.140504868e-01, 3.230976006e-01, + 3.322023993e-01, 3.413627730e-01, 3.505766247e-01, 3.598418680e-01, + 3.691564257e-01, 3.785182283e-01, 3.879252121e-01, 3.973753177e-01, + 4.068664887e-01, 4.163966700e-01, 4.259638064e-01, 4.355658411e-01, + 4.452007141e-01, 4.548663610e-01, 4.645607113e-01, 4.742816867e-01, + 4.840272003e-01, 4.937951541e-01, 5.035834381e-01, 5.133899286e-01, + 5.232124861e-01, 5.330489543e-01, 5.428971575e-01, 5.527548995e-01, + 5.626199611e-01, 5.724900987e-01, 5.823630414e-01, 5.922364896e-01, + 6.021081121e-01, 6.119755439e-01, 6.218363833e-01, 6.316881896e-01, + 6.415284797e-01, 6.513547250e-01, 6.611643481e-01, 6.709547190e-01, + 6.807231513e-01, 6.904668978e-01, 7.001831457e-01, 7.098690119e-01, + 7.195215370e-01, 7.291376798e-01, 7.387143103e-01, 7.482482022e-01, + 7.577360255e-01, 7.671743367e-01, 7.765595695e-01, 7.858880232e-01, + 7.951558504e-01, 8.043590428e-01, 8.134934152e-01, 8.225545877e-01, + 8.315379644e-01, 8.404387099e-01, 8.492517217e-01, 8.579715981e-01, + 8.665926009e-01, 8.751086105e-01, 8.835130738e-01, 8.917989407e-01, + 8.999585873e-01, 9.079837220e-01, 9.158652685e-01, 9.235932192e-01, + 9.311564473e-01, 9.385424622e-01, 9.457370844e-01, 9.527240029e-01, + 9.594841532e-01, 9.659948145e-01, 9.722282370e-01, 9.781494374e-01, + 9.837123866e-01, 9.888526987e-01, 9.934712572e-01, 9.973860259e-01, + 1.000000000e+00, 0.000000000e+00, 9.067693191e-06, 2.601788078e-05, + 4.820059569e-05, 7.465261083e-05, 1.048127443e-04, 1.383002110e-04, + 1.748342306e-04, 2.141964580e-04, 2.562106769e-04, 3.007307106e-04, + 3.476327046e-04, 3.968099364e-04, 4.481691751e-04, 5.016280422e-04, + 5.571130453e-04, 6.145580775e-04, 6.739032502e-04, 7.350939699e-04, + 7.980801956e-04, 8.628158357e-04, 9.292582508e-04, 9.973678400e-04, + 1.067107694e-03, 1.138443301e-03, 1.211342297e-03, 1.285774248e-03, + 1.361710467e-03, 1.439123847e-03, 1.517988727e-03, 1.598280759e-03, + 1.679976805e-03, 1.763054835e-03, 1.847493842e-03, 1.933273767e-03, + 2.020375422e-03, 2.108780437e-03, 2.198471197e-03, 2.289430792e-03, + 2.381642973e-03, 2.475092108e-03, 2.569763141e-03, 2.665641563e-03, + 2.762713374e-03, 2.860965056e-03, 2.960383545e-03, 3.060956206e-03, + 3.162670810e-03, 3.265515512e-03, 3.369478830e-03, 3.474549630e-03, + 3.580717104e-03, 3.687970758e-03, 3.796300395e-03, 3.905696102e-03, + 4.016148234e-03, 4.127647407e-03, 4.240184482e-03, 4.353750556e-03, + 4.468336952e-03, 4.583935209e-03, 4.700537073e-03, 4.818134488e-03, + 4.936719592e-03, 5.056284701e-03, 5.176822311e-03, 5.298325087e-03, + 5.420785855e-03, 5.544197599e-03, 5.668553455e-03, 5.793846703e-03, + 5.920070764e-03, 6.047219196e-03, 6.175285686e-03, 6.304264048e-03, + 6.434148218e-03, 6.564932251e-03, 6.696610316e-03, 6.829176692e-03, + 6.962625765e-03, 7.096952025e-03, 7.232150062e-03, 7.368214563e-03, + 7.505140312e-03, 7.642922182e-03, 7.781555134e-03, 7.921034218e-03, + 8.061354566e-03, 8.202511392e-03, 8.344499989e-03, 8.487315727e-03, + 8.630954049e-03, 8.775410473e-03, 8.920680587e-03, 9.066760048e-03, + 9.213644578e-03, 9.361329967e-03, 9.509812068e-03, 9.659086794e-03, + 9.809150120e-03, 9.959998080e-03, 1.011162676e-02, 1.026403232e-02, + 1.041721095e-02, 1.057115891e-02, 1.072587250e-02, 1.088134808e-02, + 1.103758206e-02, 1.119457090e-02, 1.135231109e-02, 1.151079919e-02, + 1.167003180e-02, 1.183000553e-02, 1.199071709e-02, 1.215216320e-02, + 1.231434061e-02, 1.247724614e-02, 1.264087663e-02, 1.280522896e-02, + 1.297030006e-02, 1.313608688e-02, 1.330258642e-02, 1.346979572e-02, + 1.363771182e-02, 1.380633185e-02, 1.397565292e-02, 1.414567221e-02, + 1.431638691e-02, 1.448779426e-02, 9.697701794e-01, 9.700800780e-01, + 9.703892311e-01, 9.706976341e-01, 9.710052825e-01, 9.713121718e-01, + 9.716182971e-01, 9.719236538e-01, 9.722282370e-01, 9.725320418e-01, + 9.728350634e-01, 9.731372967e-01, 9.734387366e-01, 9.737393780e-01, + 9.740392156e-01, 9.743382442e-01, 9.746364583e-01, 9.749338526e-01, + 9.752304215e-01, 9.755261595e-01, 9.758210607e-01, 9.761151194e-01, + 9.764083299e-01, 9.767006860e-01, 9.769921818e-01, 9.772828111e-01, + 9.775725678e-01, 9.778614453e-01, 9.781494374e-01, 9.784365375e-01, + 9.787227390e-01, 9.790080350e-01, 9.792924187e-01, 9.795758831e-01, + 9.798584211e-01, 9.801400255e-01, 9.804206889e-01, 9.807004039e-01, + 9.809791628e-01, 9.812569578e-01, 9.815337811e-01, 9.818096247e-01, + 9.820844802e-01, 9.823583394e-01, 9.826311938e-01, 9.829030346e-01, + 9.831738531e-01, 9.834436402e-01, 9.837123866e-01, 9.839800831e-01, + 9.842467200e-01, 9.845122875e-01, 9.847767757e-01, 9.850401742e-01, + 9.853024728e-01, 9.855636606e-01, 9.858237269e-01, 9.860826604e-01, + 9.863404498e-01, 9.865970833e-01, 9.868525491e-01, 9.871068348e-01, + 9.873599279e-01, 9.876118155e-01, 9.878624846e-01, 9.881119215e-01, + 9.883601123e-01, 9.886070430e-01, 9.888526987e-01, 9.890970645e-01, + 9.893401250e-01, 9.895818642e-01, 9.898222658e-01, 9.900613130e-01, + 9.902989885e-01, 9.905352744e-01, 9.907701522e-01, 9.910036031e-01, + 9.912356073e-01, 9.914661446e-01, 9.916951942e-01, 9.919227342e-01, + 9.921487423e-01, 9.923731953e-01, 9.925960690e-01, 9.928173386e-01, + 9.930369779e-01, 9.932549602e-01, 9.934712572e-01, 9.936858398e-01, + 9.938986775e-01, 9.941097386e-01, 9.943189898e-01, 9.945263963e-01, + 9.947319219e-01, 9.949355283e-01, 9.951371754e-01, 9.953368212e-01, + 9.955344211e-01, 9.957299284e-01, 9.959232935e-01, 9.961144639e-01, + 9.963033839e-01, 9.964899943e-01, 9.966742319e-01, 9.968560291e-01, + 9.970353134e-01, 9.972120071e-01, 9.973860259e-01, 9.975572790e-01, + 9.977256672e-01, 9.978910825e-01, 9.980534063e-01, 9.982125075e-01, + 9.983682408e-01, 9.985204433e-01, 9.986689317e-01, 9.988134972e-01, + 9.989538995e-01, 9.990898586e-01, 9.992210430e-01, 9.993470525e-01, + 9.994673926e-01, 9.995814322e-01, 9.996883319e-01, 9.997869049e-01, + 9.998753055e-01, 9.999501124e-01, 1.000000000e+00, +}; +const float dist_icdf_3_8[] = { + 0.000000000e+00, 7.260746841e-09, 1.477806909e-07, 8.612331732e-07, + 3.007830713e-06, 7.934854247e-06, 1.752882833e-05, 3.425937221e-05, + 6.121739140e-05, 1.021490463e-04, 1.614863454e-04, 2.443748784e-04, + 3.566989945e-04, 5.051045878e-04, 6.970195392e-04, 9.406717821e-04, + 1.245104881e-03, 1.620190949e-03, 2.076640683e-03, 2.626010211e-03, + 3.280704445e-03, 4.053976533e-03, 4.959923000e-03, 6.013474119e-03, + 7.230378990e-03, 8.627184825e-03, 1.022120986e-02, 1.203050935e-02, + 1.407383400e-02, 1.637058038e-02, 1.894073253e-02, 2.180479447e-02, + 2.498371287e-02, 2.849878957e-02, 3.237158339e-02, 3.662380112e-02, + 4.127717736e-02, 4.635334302e-02, 5.187368287e-02, 5.785918196e-02, + 6.433026168e-02, 7.130660582e-02, 7.880697769e-02, 8.684902918e-02, + 9.544910331e-02, 1.046220316e-01, 1.143809287e-01, 1.247369851e-01, + 1.356992623e-01, 1.472744914e-01, 1.594668782e-01, 1.722779184e-01, + 1.857062260e-01, 1.997473774e-01, 2.143937750e-01, 2.296345338e-01, + 2.454553931e-01, 2.618386574e-01, 2.787631687e-01, 2.962043118e-01, + 3.141340558e-01, 3.325210327e-01, 3.513306529e-01, 3.705252597e-01, + 3.900643214e-01, 4.099046591e-01, 4.300007103e-01, 4.503048243e-01, + 4.707675863e-01, 4.913381680e-01, 5.119646978e-01, 5.325946486e-01, + 5.531752357e-01, 5.736538210e-01, 5.939783167e-01, 6.140975840e-01, + 6.339618206e-01, 6.535229314e-01, 6.727348788e-01, 6.915540062e-01, + 7.099393325e-01, 7.278528130e-01, 7.452595647e-01, 7.621280532e-01, + 7.784302410e-01, 7.941416955e-01, 8.092416579e-01, 8.237130726e-01, + 8.375425797e-01, 8.507204712e-01, 8.632406150e-01, 8.751003476e-01, + 8.863003401e-01, 8.968444397e-01, 9.067394917e-01, 9.159951428e-01, + 9.246236328e-01, 9.326395744e-01, 9.400597275e-01, 9.469027689e-01, + 9.531890613e-01, 9.589404239e-01, 9.641799069e-01, 9.689315719e-01, + 9.732202796e-01, 9.770714872e-01, 9.805110549e-01, 9.835650640e-01, + 9.862596462e-01, 9.886208241e-01, 9.906743645e-01, 9.924456421e-01, + 9.939595152e-01, 9.952402119e-01, 9.963112263e-01, 9.971952242e-01, + 9.979139565e-01, 9.984881808e-01, 9.989375875e-01, 9.992807325e-01, + 9.995349708e-01, 9.997163933e-01, 9.998397613e-01, 9.999184380e-01, + 9.999643114e-01, 9.999877046e-01, 9.999972617e-01, 9.999997899e-01, + 1.000000000e+00, 0.000000000e+00, 1.603794521e-14, 3.264263130e-13, + 1.902341143e-12, 6.643877156e-12, 1.752703395e-11, 3.871906265e-11, + 7.567556292e-11, 1.352253232e-10, 2.256462269e-10, 3.567342945e-10, + 5.398672505e-10, 7.880636012e-10, 1.116037950e-09, 1.540253109e-09, + 2.078969427e-09, 2.752291707e-09, 3.582213960e-09, 4.592662261e-09, + 5.809535875e-09, 7.260746841e-09, 8.976258132e-09, 1.098812053e-08, + 1.333050831e-08, 1.603975385e-08, 1.915438117e-08, 2.271513862e-08, + 2.676503061e-08, 3.134934855e-08, 3.651570105e-08, 4.231404335e-08, + 4.879670608e-08, 5.601842344e-08, 6.403636067e-08, 7.291014104e-08, + 8.270187225e-08, 9.347617228e-08, 1.053001949e-07, 1.182436543e-07, + 1.323788501e-07, 1.477806909e-07, 1.645267180e-07, 1.826971290e-07, + 2.023748002e-07, 2.236453094e-07, 2.465969581e-07, 2.713207930e-07, + 2.979106280e-07, 3.264630648e-07, 3.570775143e-07, 3.898562170e-07, + 4.249042634e-07, 4.623296138e-07, 5.022431186e-07, 5.447585373e-07, + 5.899925582e-07, 6.380648172e-07, 6.890979169e-07, 7.432174450e-07, + 8.005519927e-07, 8.612331732e-07, 9.253956390e-07, 9.931771007e-07, + 1.064718343e-06, 1.140163245e-06, 1.219658794e-06, 1.303355103e-06, + 1.391405432e-06, 1.483966199e-06, 1.581196998e-06, 1.683260620e-06, + 1.790323061e-06, 1.902553545e-06, 2.020124537e-06, 2.143211761e-06, + 2.271994210e-06, 2.406654168e-06, 2.547377223e-06, 2.694352281e-06, + 2.847771581e-06, 3.007830713e-06, 3.174728628e-06, 3.348667660e-06, + 3.529853531e-06, 3.718495373e-06, 3.914805740e-06, 4.119000622e-06, + 4.331299459e-06, 4.551925155e-06, 4.781104092e-06, 5.019066144e-06, + 5.266044692e-06, 5.522276635e-06, 5.788002404e-06, 6.063465978e-06, + 6.348914894e-06, 6.644600263e-06, 6.950776781e-06, 7.267702742e-06, + 7.595640054e-06, 7.934854247e-06, 8.285614490e-06, 8.648193601e-06, + 9.022868063e-06, 9.409918030e-06, 9.809627348e-06, 1.022228356e-05, + 1.064817792e-05, 1.108760541e-05, 1.154086475e-05, 1.200825840e-05, + 1.249009259e-05, 1.298667732e-05, 1.349832636e-05, 1.402535730e-05, + 1.456809152e-05, 1.512685422e-05, 1.570197445e-05, 1.629378508e-05, + 1.690262284e-05, 1.752882833e-05, 1.817274601e-05, 1.883472426e-05, + 1.951511532e-05, 2.021427536e-05, 2.093256448e-05, 2.167034668e-05, + 2.242798994e-05, 2.320586617e-05, 9.997964932e-01, 9.998023198e-01, + 9.998080237e-01, 9.998136065e-01, 9.998190699e-01, 9.998244155e-01, + 9.998296448e-01, 9.998347596e-01, 9.998397613e-01, 9.998446516e-01, + 9.998494321e-01, 9.998541043e-01, 9.998586698e-01, 9.998631301e-01, + 9.998674868e-01, 9.998717413e-01, 9.998758953e-01, 9.998799502e-01, + 9.998839075e-01, 9.998877688e-01, 9.998915354e-01, 9.998952090e-01, + 9.998987908e-01, 9.999022825e-01, 9.999056854e-01, 9.999090010e-01, + 9.999122307e-01, 9.999153759e-01, 9.999184380e-01, 9.999214184e-01, + 9.999243185e-01, 9.999271398e-01, 9.999298834e-01, 9.999325509e-01, + 9.999351435e-01, 9.999376626e-01, 9.999401095e-01, 9.999424855e-01, + 9.999447920e-01, 9.999470302e-01, 9.999492015e-01, 9.999513070e-01, + 9.999533481e-01, 9.999553261e-01, 9.999572421e-01, 9.999590974e-01, + 9.999608932e-01, 9.999626308e-01, 9.999643114e-01, 9.999659361e-01, + 9.999675061e-01, 9.999690226e-01, 9.999704868e-01, 9.999718998e-01, + 9.999732628e-01, 9.999745769e-01, 9.999758432e-01, 9.999770628e-01, + 9.999782368e-01, 9.999793664e-01, 9.999804525e-01, 9.999814963e-01, + 9.999824989e-01, 9.999834611e-01, 9.999843842e-01, 9.999852691e-01, + 9.999861167e-01, 9.999869283e-01, 9.999877046e-01, 9.999884467e-01, + 9.999891556e-01, 9.999898322e-01, 9.999904774e-01, 9.999910922e-01, + 9.999916776e-01, 9.999922343e-01, 9.999927633e-01, 9.999932656e-01, + 9.999937419e-01, 9.999941931e-01, 9.999946201e-01, 9.999950237e-01, + 9.999954048e-01, 9.999957640e-01, 9.999961024e-01, 9.999964205e-01, + 9.999967193e-01, 9.999969995e-01, 9.999972617e-01, 9.999975069e-01, + 9.999977356e-01, 9.999979486e-01, 9.999981465e-01, 9.999983302e-01, + 9.999985002e-01, 9.999986572e-01, 9.999988019e-01, 9.999989348e-01, + 9.999990566e-01, 9.999991680e-01, 9.999992694e-01, 9.999993615e-01, + 9.999994448e-01, 9.999995198e-01, 9.999995872e-01, 9.999996474e-01, + 9.999997010e-01, 9.999997483e-01, 9.999997899e-01, 9.999998263e-01, + 9.999998578e-01, 9.999998849e-01, 9.999999081e-01, 9.999999276e-01, + 9.999999439e-01, 9.999999574e-01, 9.999999683e-01, 9.999999771e-01, + 9.999999839e-01, 9.999999891e-01, 9.999999929e-01, 9.999999957e-01, + 9.999999976e-01, 9.999999988e-01, 9.999999995e-01, 9.999999998e-01, + 1.000000000e+00, 1.000000000e+00, 1.000000000e+00, +}; +const float dist_icdf_4_0[] = { + 0.000000000e+00, 4.467052359e-01, 4.524901822e-01, 4.561468853e-01, + 4.588886998e-01, 4.611122150e-01, 4.629993420e-01, 4.646493976e-01, + 4.661228313e-01, 4.674592991e-01, 4.686862873e-01, 4.698236689e-01, + 4.708863008e-01, 4.718855962e-01, 4.728305226e-01, 4.737282613e-01, + 4.745846574e-01, 4.754045361e-01, 4.761919299e-01, 4.769502454e-01, + 4.776823891e-01, 4.783908617e-01, 4.790778320e-01, 4.797451944e-01, + 4.803946144e-01, 4.810275646e-01, 4.816453550e-01, 4.822491559e-01, + 4.828400186e-01, 4.834188913e-01, 4.839866328e-01, 4.845440240e-01, + 4.850917777e-01, 4.856305466e-01, 4.861609307e-01, 4.866834830e-01, + 4.871987150e-01, 4.877071012e-01, 4.882090827e-01, 4.887050713e-01, + 4.891954520e-01, 4.896805860e-01, 4.901608127e-01, 4.906364524e-01, + 4.911078075e-01, 4.915751648e-01, 4.920387966e-01, 4.924989622e-01, + 4.929559091e-01, 4.934098742e-01, 4.938610847e-01, 4.943097593e-01, + 4.947561087e-01, 4.952003364e-01, 4.956426400e-01, 4.960832111e-01, + 4.965222365e-01, 4.969598984e-01, 4.973963755e-01, 4.978318429e-01, + 4.982664731e-01, 4.987004361e-01, 4.991339005e-01, 4.995670331e-01, + 5.000000000e-01, 5.004329669e-01, 5.008660995e-01, 5.012995639e-01, + 5.017335269e-01, 5.021681571e-01, 5.026036245e-01, 5.030401016e-01, + 5.034777635e-01, 5.039167889e-01, 5.043573600e-01, 5.047996636e-01, + 5.052438913e-01, 5.056902407e-01, 5.061389153e-01, 5.065901258e-01, + 5.070440909e-01, 5.075010378e-01, 5.079612034e-01, 5.084248352e-01, + 5.088921925e-01, 5.093635476e-01, 5.098391873e-01, 5.103194140e-01, + 5.108045480e-01, 5.112949287e-01, 5.117909173e-01, 5.122928988e-01, + 5.128012850e-01, 5.133165170e-01, 5.138390693e-01, 5.143694534e-01, + 5.149082223e-01, 5.154559760e-01, 5.160133672e-01, 5.165811087e-01, + 5.171599814e-01, 5.177508441e-01, 5.183546450e-01, 5.189724354e-01, + 5.196053856e-01, 5.202548056e-01, 5.209221680e-01, 5.216091383e-01, + 5.223176109e-01, 5.230497546e-01, 5.238080701e-01, 5.245954639e-01, + 5.254153426e-01, 5.262717387e-01, 5.271694774e-01, 5.281144038e-01, + 5.291136992e-01, 5.301763311e-01, 5.313137127e-01, 5.325407009e-01, + 5.338771687e-01, 5.353506024e-01, 5.370006580e-01, 5.388877850e-01, + 5.411113002e-01, 5.438531147e-01, 5.475098178e-01, 5.532947641e-01, + 1.000000000e+00, 0.000000000e+00, 4.261396487e-01, 4.304173410e-01, + 4.330330957e-01, 4.349454447e-01, 4.364635318e-01, 4.377278046e-01, + 4.388143512e-01, 4.397691782e-01, 4.406222922e-01, 4.413943829e-01, + 4.421003374e-01, 4.427512360e-01, 4.433555549e-01, 4.439199273e-01, + 4.444496452e-01, 4.449489995e-01, 4.454215198e-01, 4.458701450e-01, + 4.462973494e-01, 4.467052359e-01, 4.470956078e-01, 4.474700231e-01, + 4.478298376e-01, 4.481762385e-01, 4.485102716e-01, 4.488328629e-01, + 4.491448366e-01, 4.494469294e-01, 4.497398025e-01, 4.500240518e-01, + 4.503002164e-01, 4.505687854e-01, 4.508302039e-01, 4.510848785e-01, + 4.513331814e-01, 4.515754543e-01, 4.518120116e-01, 4.520431432e-01, + 4.522691173e-01, 4.524901822e-01, 4.527065683e-01, 4.529184900e-01, + 4.531261470e-01, 4.533297255e-01, 4.535293996e-01, 4.537253324e-01, + 4.539176767e-01, 4.541065759e-01, 4.542921649e-01, 4.544745706e-01, + 4.546539126e-01, 4.548303040e-01, 4.550038511e-01, 4.551746551e-01, + 4.553428112e-01, 4.555084100e-01, 4.556715373e-01, 4.558322746e-01, + 4.559906994e-01, 4.561468853e-01, 4.563009024e-01, 4.564528177e-01, + 4.566026947e-01, 4.567505944e-01, 4.568965748e-01, 4.570406913e-01, + 4.571829971e-01, 4.573235430e-01, 4.574623777e-01, 4.575995476e-01, + 4.577350976e-01, 4.578690706e-01, 4.580015076e-01, 4.581324484e-01, + 4.582619307e-01, 4.583899913e-01, 4.585166653e-01, 4.586419865e-01, + 4.587659875e-01, 4.588886998e-01, 4.590101536e-01, 4.591303782e-01, + 4.592494016e-01, 4.593672512e-01, 4.594839531e-01, 4.595995329e-01, + 4.597140149e-01, 4.598274229e-01, 4.599397799e-01, 4.600511080e-01, + 4.601614287e-01, 4.602707630e-01, 4.603791308e-01, 4.604865518e-01, + 4.605930448e-01, 4.606986283e-01, 4.608033200e-01, 4.609071373e-01, + 4.610100969e-01, 4.611122150e-01, 4.612135076e-01, 4.613139900e-01, + 4.614136770e-01, 4.615125833e-01, 4.616107230e-01, 4.617081097e-01, + 4.618047568e-01, 4.619006773e-01, 4.619958839e-01, 4.620903889e-01, + 4.621842043e-01, 4.622773417e-01, 4.623698125e-01, 4.624616279e-01, + 4.625527986e-01, 4.626433351e-01, 4.627332479e-01, 4.628225468e-01, + 4.629112416e-01, 4.629993420e-01, 4.630868572e-01, 4.631737963e-01, + 4.632601682e-01, 4.633459815e-01, 4.634312448e-01, 4.635159663e-01, + 4.636001541e-01, 4.636838162e-01, 5.363161838e-01, 5.363998459e-01, + 5.364840337e-01, 5.365687552e-01, 5.366540185e-01, 5.367398318e-01, + 5.368262037e-01, 5.369131428e-01, 5.370006580e-01, 5.370887584e-01, + 5.371774532e-01, 5.372667521e-01, 5.373566649e-01, 5.374472014e-01, + 5.375383721e-01, 5.376301875e-01, 5.377226583e-01, 5.378157957e-01, + 5.379096111e-01, 5.380041161e-01, 5.380993227e-01, 5.381952432e-01, + 5.382918903e-01, 5.383892770e-01, 5.384874167e-01, 5.385863230e-01, + 5.386860100e-01, 5.387864924e-01, 5.388877850e-01, 5.389899031e-01, + 5.390928627e-01, 5.391966800e-01, 5.393013717e-01, 5.394069552e-01, + 5.395134482e-01, 5.396208692e-01, 5.397292370e-01, 5.398385713e-01, + 5.399488920e-01, 5.400602201e-01, 5.401725771e-01, 5.402859851e-01, + 5.404004671e-01, 5.405160469e-01, 5.406327488e-01, 5.407505984e-01, + 5.408696218e-01, 5.409898464e-01, 5.411113002e-01, 5.412340125e-01, + 5.413580135e-01, 5.414833347e-01, 5.416100087e-01, 5.417380693e-01, + 5.418675516e-01, 5.419984924e-01, 5.421309294e-01, 5.422649024e-01, + 5.424004524e-01, 5.425376223e-01, 5.426764570e-01, 5.428170029e-01, + 5.429593087e-01, 5.431034252e-01, 5.432494056e-01, 5.433973053e-01, + 5.435471823e-01, 5.436990976e-01, 5.438531147e-01, 5.440093006e-01, + 5.441677254e-01, 5.443284627e-01, 5.444915900e-01, 5.446571888e-01, + 5.448253449e-01, 5.449961489e-01, 5.451696960e-01, 5.453460874e-01, + 5.455254294e-01, 5.457078351e-01, 5.458934241e-01, 5.460823233e-01, + 5.462746676e-01, 5.464706004e-01, 5.466702745e-01, 5.468738530e-01, + 5.470815100e-01, 5.472934317e-01, 5.475098178e-01, 5.477308827e-01, + 5.479568568e-01, 5.481879884e-01, 5.484245457e-01, 5.486668186e-01, + 5.489151215e-01, 5.491697961e-01, 5.494312146e-01, 5.496997836e-01, + 5.499759482e-01, 5.502601975e-01, 5.505530706e-01, 5.508551634e-01, + 5.511671371e-01, 5.514897284e-01, 5.518237615e-01, 5.521701624e-01, + 5.525299769e-01, 5.529043922e-01, 5.532947641e-01, 5.537026506e-01, + 5.541298550e-01, 5.545784802e-01, 5.550510005e-01, 5.555503548e-01, + 5.560800727e-01, 5.566444451e-01, 5.572487640e-01, 5.578996626e-01, + 5.586056171e-01, 5.593777078e-01, 5.602308218e-01, 5.611856488e-01, + 5.622721954e-01, 5.635364682e-01, 5.650545553e-01, 5.669669043e-01, + 5.695826590e-01, 5.738603513e-01, 1.000000000e+00, +}; +const float dist_icdf_4_1[] = { + 0.000000000e+00, 2.942760427e-01, 3.149979404e-01, 3.283773557e-01, + 3.385420074e-01, 3.468640109e-01, 3.539797032e-01, 3.602393943e-01, + 3.658577298e-01, 3.709763124e-01, 3.756937647e-01, 3.800816940e-01, + 3.841938366e-01, 3.880716133e-01, 3.917476707e-01, 3.952482270e-01, + 3.985946785e-01, 4.018047309e-01, 4.048932152e-01, 4.078726882e-01, + 4.107538836e-01, 4.135460553e-01, 4.162572435e-01, 4.188944830e-01, + 4.214639687e-01, 4.239711877e-01, 4.264210268e-01, 4.288178601e-01, + 4.311656214e-01, 4.334678633e-01, 4.357278084e-01, 4.379483903e-01, + 4.401322901e-01, 4.422819660e-01, 4.443996800e-01, 4.464875197e-01, + 4.485474179e-01, 4.505811690e-01, 4.525904443e-01, 4.545768041e-01, + 4.565417095e-01, 4.584865320e-01, 4.604125624e-01, 4.623210188e-01, + 4.642130535e-01, 4.660897592e-01, 4.679521747e-01, 4.698012900e-01, + 4.716380508e-01, 4.734633630e-01, 4.752780960e-01, 4.770830868e-01, + 4.788791426e-01, 4.806670443e-01, 4.824475489e-01, 4.842213922e-01, + 4.859892913e-01, 4.877519464e-01, 4.895100437e-01, 4.912642567e-01, + 4.930152485e-01, 4.947636734e-01, 4.965101792e-01, 4.982554083e-01, + 5.000000000e-01, 5.017445917e-01, 5.034898208e-01, 5.052363266e-01, + 5.069847515e-01, 5.087357433e-01, 5.104899563e-01, 5.122480536e-01, + 5.140107087e-01, 5.157786078e-01, 5.175524511e-01, 5.193329557e-01, + 5.211208574e-01, 5.229169132e-01, 5.247219040e-01, 5.265366370e-01, + 5.283619492e-01, 5.301987100e-01, 5.320478253e-01, 5.339102408e-01, + 5.357869465e-01, 5.376789812e-01, 5.395874376e-01, 5.415134680e-01, + 5.434582905e-01, 5.454231959e-01, 5.474095557e-01, 5.494188310e-01, + 5.514525821e-01, 5.535124803e-01, 5.556003200e-01, 5.577180340e-01, + 5.598677099e-01, 5.620516097e-01, 5.642721916e-01, 5.665321367e-01, + 5.688343786e-01, 5.711821399e-01, 5.735789732e-01, 5.760288123e-01, + 5.785360313e-01, 5.811055170e-01, 5.837427565e-01, 5.864539447e-01, + 5.892461164e-01, 5.921273118e-01, 5.951067848e-01, 5.981952691e-01, + 6.014053215e-01, 6.047517730e-01, 6.082523293e-01, 6.119283867e-01, + 6.158061634e-01, 6.199183060e-01, 6.243062353e-01, 6.290236876e-01, + 6.341422702e-01, 6.397606057e-01, 6.460202968e-01, 6.531359891e-01, + 6.614579926e-01, 6.716226443e-01, 6.850020596e-01, 7.057239573e-01, + 1.000000000e+00, 0.000000000e+00, 2.257007217e-01, 2.392522814e-01, + 2.477316055e-01, 2.540208669e-01, 2.590666306e-01, 2.633040873e-01, + 2.669711435e-01, 2.702127061e-01, 2.731238704e-01, 2.757705562e-01, + 2.782004191e-01, 2.804490771e-01, 2.825438811e-01, 2.845063102e-01, + 2.863535537e-01, 2.880995920e-01, 2.897559554e-01, 2.913322699e-01, + 2.928366589e-01, 2.942760427e-01, 2.956563678e-01, 2.969827826e-01, + 2.982597759e-01, 2.994912858e-01, 3.006807873e-01, 3.018313627e-01, + 3.029457594e-01, 3.040264374e-01, 3.050756078e-01, 3.060952664e-01, + 3.070872205e-01, 3.080531126e-01, 3.089944396e-01, 3.099125703e-01, + 3.108087590e-01, 3.116841588e-01, 3.125398319e-01, 3.133767591e-01, + 3.141958480e-01, 3.149979404e-01, 3.157838182e-01, 3.165542093e-01, + 3.173097924e-01, 3.180512014e-01, 3.187790295e-01, 3.194938321e-01, + 3.201961308e-01, 3.208864154e-01, 3.215651468e-01, 3.222327592e-01, + 3.228896622e-01, 3.235362425e-01, 3.241728657e-01, 3.247998779e-01, + 3.254176069e-01, 3.260263636e-01, 3.266264432e-01, 3.272181261e-01, + 3.278016789e-01, 3.283773557e-01, 3.289453981e-01, 3.295060368e-01, + 3.300594917e-01, 3.306059731e-01, 3.311456815e-01, 3.316788091e-01, + 3.322055395e-01, 3.327260487e-01, 3.332405052e-01, 3.337490707e-01, + 3.342519003e-01, 3.347491428e-01, 3.352409412e-01, 3.357274329e-01, + 3.362087502e-01, 3.366850201e-01, 3.371563650e-01, 3.376229028e-01, + 3.380847471e-01, 3.385420074e-01, 3.389947892e-01, 3.394431945e-01, + 3.398873216e-01, 3.403272656e-01, 3.407631181e-01, 3.411949680e-01, + 3.416229011e-01, 3.420470002e-01, 3.424673457e-01, 3.428840153e-01, + 3.432970844e-01, 3.437066258e-01, 3.441127102e-01, 3.445154062e-01, + 3.449147802e-01, 3.453108966e-01, 3.457038180e-01, 3.460936052e-01, + 3.464803171e-01, 3.468640109e-01, 3.472447423e-01, 3.476225654e-01, + 3.479975327e-01, 3.483696954e-01, 3.487391032e-01, 3.491058044e-01, + 3.494698462e-01, 3.498312743e-01, 3.501901334e-01, 3.505464670e-01, + 3.509003174e-01, 3.512517258e-01, 3.516007324e-01, 3.519473765e-01, + 3.522916962e-01, 3.526337289e-01, 3.529735109e-01, 3.533110777e-01, + 3.536464638e-01, 3.539797032e-01, 3.543108288e-01, 3.546398728e-01, + 3.549668668e-01, 3.552918414e-01, 3.556148266e-01, 3.559358520e-01, + 3.562549461e-01, 3.565721370e-01, 6.434278630e-01, 6.437450539e-01, + 6.440641480e-01, 6.443851734e-01, 6.447081586e-01, 6.450331332e-01, + 6.453601272e-01, 6.456891712e-01, 6.460202968e-01, 6.463535362e-01, + 6.466889223e-01, 6.470264891e-01, 6.473662711e-01, 6.477083038e-01, + 6.480526235e-01, 6.483992676e-01, 6.487482742e-01, 6.490996826e-01, + 6.494535330e-01, 6.498098666e-01, 6.501687257e-01, 6.505301538e-01, + 6.508941956e-01, 6.512608968e-01, 6.516303046e-01, 6.520024673e-01, + 6.523774346e-01, 6.527552577e-01, 6.531359891e-01, 6.535196829e-01, + 6.539063948e-01, 6.542961820e-01, 6.546891034e-01, 6.550852198e-01, + 6.554845938e-01, 6.558872898e-01, 6.562933742e-01, 6.567029156e-01, + 6.571159847e-01, 6.575326543e-01, 6.579529998e-01, 6.583770989e-01, + 6.588050320e-01, 6.592368819e-01, 6.596727344e-01, 6.601126784e-01, + 6.605568055e-01, 6.610052108e-01, 6.614579926e-01, 6.619152529e-01, + 6.623770972e-01, 6.628436350e-01, 6.633149799e-01, 6.637912498e-01, + 6.642725671e-01, 6.647590588e-01, 6.652508572e-01, 6.657480997e-01, + 6.662509293e-01, 6.667594948e-01, 6.672739513e-01, 6.677944605e-01, + 6.683211909e-01, 6.688543185e-01, 6.693940269e-01, 6.699405083e-01, + 6.704939632e-01, 6.710546019e-01, 6.716226443e-01, 6.721983211e-01, + 6.727818739e-01, 6.733735568e-01, 6.739736364e-01, 6.745823931e-01, + 6.752001221e-01, 6.758271343e-01, 6.764637575e-01, 6.771103378e-01, + 6.777672408e-01, 6.784348532e-01, 6.791135846e-01, 6.798038692e-01, + 6.805061679e-01, 6.812209705e-01, 6.819487986e-01, 6.826902076e-01, + 6.834457907e-01, 6.842161818e-01, 6.850020596e-01, 6.858041520e-01, + 6.866232409e-01, 6.874601681e-01, 6.883158412e-01, 6.891912410e-01, + 6.900874297e-01, 6.910055604e-01, 6.919468874e-01, 6.929127795e-01, + 6.939047336e-01, 6.949243922e-01, 6.959735626e-01, 6.970542406e-01, + 6.981686373e-01, 6.993192127e-01, 7.005087142e-01, 7.017402241e-01, + 7.030172174e-01, 7.043436322e-01, 7.057239573e-01, 7.071633411e-01, + 7.086677301e-01, 7.102440446e-01, 7.119004080e-01, 7.136464463e-01, + 7.154936898e-01, 7.174561189e-01, 7.195509229e-01, 7.217995809e-01, + 7.242294438e-01, 7.268761296e-01, 7.297872939e-01, 7.330288565e-01, + 7.366959127e-01, 7.409333694e-01, 7.459791331e-01, 7.522683945e-01, + 7.607477186e-01, 7.742992783e-01, 1.000000000e+00, +}; +const float dist_icdf_4_2[] = { + 0.000000000e+00, 1.329253218e-01, 1.610934102e-01, 1.806852421e-01, + 1.962705253e-01, 2.094622071e-01, 2.210382042e-01, 2.314396010e-01, + 2.409431685e-01, 2.497351692e-01, 2.579475763e-01, 2.656776665e-01, + 2.729994260e-01, 2.799705799e-01, 2.866371296e-01, 2.930363944e-01, + 2.991991170e-01, 3.051509596e-01, 3.109135934e-01, 3.165055077e-01, + 3.219426216e-01, 3.272387534e-01, 3.324059874e-01, 3.374549622e-01, + 3.423951013e-01, 3.472347992e-01, 3.519815725e-01, 3.566421845e-01, + 3.612227478e-01, 3.657288105e-01, 3.701654277e-01, 3.745372232e-01, + 3.788484406e-01, 3.831029882e-01, 3.873044766e-01, 3.914562515e-01, + 3.955614230e-01, 3.996228896e-01, 4.036433604e-01, 4.076253744e-01, + 4.115713170e-01, 4.154834352e-01, 4.193638510e-01, 4.232145731e-01, + 4.270375076e-01, 4.308344677e-01, 4.346071819e-01, 4.383573026e-01, + 4.420864122e-01, 4.457960304e-01, 4.494876198e-01, 4.531625910e-01, + 4.568223083e-01, 4.604680938e-01, 4.641012319e-01, 4.677229732e-01, + 4.713345385e-01, 4.749371221e-01, 4.785318955e-01, 4.821200102e-01, + 4.857026010e-01, 4.892807890e-01, 4.928556844e-01, 4.964283892e-01, + 5.000000000e-01, 5.035716108e-01, 5.071443156e-01, 5.107192110e-01, + 5.142973990e-01, 5.178799898e-01, 5.214681045e-01, 5.250628779e-01, + 5.286654615e-01, 5.322770268e-01, 5.358987681e-01, 5.395319062e-01, + 5.431776917e-01, 5.468374090e-01, 5.505123802e-01, 5.542039696e-01, + 5.579135878e-01, 5.616426974e-01, 5.653928181e-01, 5.691655323e-01, + 5.729624924e-01, 5.767854269e-01, 5.806361490e-01, 5.845165648e-01, + 5.884286830e-01, 5.923746256e-01, 5.963566396e-01, 6.003771104e-01, + 6.044385770e-01, 6.085437485e-01, 6.126955234e-01, 6.168970118e-01, + 6.211515594e-01, 6.254627768e-01, 6.298345723e-01, 6.342711895e-01, + 6.387772522e-01, 6.433578155e-01, 6.480184275e-01, 6.527652008e-01, + 6.576048987e-01, 6.625450378e-01, 6.675940126e-01, 6.727612466e-01, + 6.780573784e-01, 6.834944923e-01, 6.890864066e-01, 6.948490404e-01, + 7.008008830e-01, 7.069636056e-01, 7.133628704e-01, 7.200294201e-01, + 7.270005740e-01, 7.343223335e-01, 7.420524237e-01, 7.502648308e-01, + 7.590568315e-01, 7.685603990e-01, 7.789617958e-01, 7.905377929e-01, + 8.037294747e-01, 8.193147579e-01, 8.389065898e-01, 8.670746782e-01, + 1.000000000e+00, 0.000000000e+00, 5.996547206e-02, 7.184741903e-02, + 7.992098351e-02, 8.622724115e-02, 9.148204456e-02, 9.602905702e-02, + 1.000624113e-01, 1.037035326e-01, 1.070339066e-01, 1.101111201e-01, + 1.129775181e-01, 1.156652343e-01, 1.181992850e-01, 1.205995631e-01, + 1.228821734e-01, 1.250603540e-01, 1.271451321e-01, 1.291457991e-01, + 1.310702644e-01, 1.329253218e-01, 1.347168539e-01, 1.364499918e-01, + 1.381292403e-01, 1.397585777e-01, 1.413415371e-01, 1.428812713e-01, + 1.443806070e-01, 1.458420891e-01, 1.472680177e-01, 1.486604794e-01, + 1.500213735e-01, 1.513524339e-01, 1.526552488e-01, 1.539312764e-01, + 1.551818593e-01, 1.564082367e-01, 1.576115548e-01, 1.587928764e-01, + 1.599531886e-01, 1.610934102e-01, 1.622143982e-01, 1.633169530e-01, + 1.644018236e-01, 1.654697118e-01, 1.665212764e-01, 1.675571368e-01, + 1.685778759e-01, 1.695840429e-01, 1.705761565e-01, 1.715547064e-01, + 1.725201560e-01, 1.734729441e-01, 1.744134868e-01, 1.753421787e-01, + 1.762593951e-01, 1.771654923e-01, 1.780608098e-01, 1.789456708e-01, + 1.798203835e-01, 1.806852421e-01, 1.815405272e-01, 1.823865072e-01, + 1.832234388e-01, 1.840515676e-01, 1.848711289e-01, 1.856823480e-01, + 1.864854413e-01, 1.872806161e-01, 1.880680717e-01, 1.888479995e-01, + 1.896205835e-01, 1.903860008e-01, 1.911444216e-01, 1.918960100e-01, + 1.926409240e-01, 1.933793159e-01, 1.941113327e-01, 1.948371161e-01, + 1.955568029e-01, 1.962705253e-01, 1.969784108e-01, 1.976805830e-01, + 1.983771611e-01, 1.990682606e-01, 1.997539932e-01, 2.004344670e-01, + 2.011097868e-01, 2.017800541e-01, 2.024453673e-01, 2.031058217e-01, + 2.037615099e-01, 2.044125216e-01, 2.050589439e-01, 2.057008614e-01, + 2.063383562e-01, 2.069715083e-01, 2.076003950e-01, 2.082250919e-01, + 2.088456721e-01, 2.094622071e-01, 2.100747662e-01, 2.106834169e-01, + 2.112882249e-01, 2.118892542e-01, 2.124865671e-01, 2.130802245e-01, + 2.136702853e-01, 2.142568074e-01, 2.148398469e-01, 2.154194587e-01, + 2.159956962e-01, 2.165686117e-01, 2.171382560e-01, 2.177046789e-01, + 2.182679288e-01, 2.188280531e-01, 2.193850981e-01, 2.199391090e-01, + 2.204901300e-01, 2.210382042e-01, 2.215833738e-01, 2.221256800e-01, + 2.226651632e-01, 2.232018627e-01, 2.237358173e-01, 2.242670645e-01, + 2.247956414e-01, 2.253215840e-01, 7.746784160e-01, 7.752043586e-01, + 7.757329355e-01, 7.762641827e-01, 7.767981373e-01, 7.773348368e-01, + 7.778743200e-01, 7.784166262e-01, 7.789617958e-01, 7.795098700e-01, + 7.800608910e-01, 7.806149019e-01, 7.811719469e-01, 7.817320712e-01, + 7.822953211e-01, 7.828617440e-01, 7.834313883e-01, 7.840043038e-01, + 7.845805413e-01, 7.851601531e-01, 7.857431926e-01, 7.863297147e-01, + 7.869197755e-01, 7.875134329e-01, 7.881107458e-01, 7.887117751e-01, + 7.893165831e-01, 7.899252338e-01, 7.905377929e-01, 7.911543279e-01, + 7.917749081e-01, 7.923996050e-01, 7.930284917e-01, 7.936616438e-01, + 7.942991386e-01, 7.949410561e-01, 7.955874784e-01, 7.962384901e-01, + 7.968941783e-01, 7.975546327e-01, 7.982199459e-01, 7.988902132e-01, + 7.995655330e-01, 8.002460068e-01, 8.009317394e-01, 8.016228389e-01, + 8.023194170e-01, 8.030215892e-01, 8.037294747e-01, 8.044431971e-01, + 8.051628839e-01, 8.058886673e-01, 8.066206841e-01, 8.073590760e-01, + 8.081039900e-01, 8.088555784e-01, 8.096139992e-01, 8.103794165e-01, + 8.111520005e-01, 8.119319283e-01, 8.127193839e-01, 8.135145587e-01, + 8.143176520e-01, 8.151288711e-01, 8.159484324e-01, 8.167765612e-01, + 8.176134928e-01, 8.184594728e-01, 8.193147579e-01, 8.201796165e-01, + 8.210543292e-01, 8.219391902e-01, 8.228345077e-01, 8.237406049e-01, + 8.246578213e-01, 8.255865132e-01, 8.265270559e-01, 8.274798440e-01, + 8.284452936e-01, 8.294238435e-01, 8.304159571e-01, 8.314221241e-01, + 8.324428632e-01, 8.334787236e-01, 8.345302882e-01, 8.355981764e-01, + 8.366830470e-01, 8.377856018e-01, 8.389065898e-01, 8.400468114e-01, + 8.412071236e-01, 8.423884452e-01, 8.435917633e-01, 8.448181407e-01, + 8.460687236e-01, 8.473447512e-01, 8.486475661e-01, 8.499786265e-01, + 8.513395206e-01, 8.527319823e-01, 8.541579109e-01, 8.556193930e-01, + 8.571187287e-01, 8.586584629e-01, 8.602414223e-01, 8.618707597e-01, + 8.635500082e-01, 8.652831461e-01, 8.670746782e-01, 8.689297356e-01, + 8.708542009e-01, 8.728548679e-01, 8.749396460e-01, 8.771178266e-01, + 8.794004369e-01, 8.818007150e-01, 8.843347657e-01, 8.870224819e-01, + 8.898888799e-01, 8.929660934e-01, 8.962964674e-01, 8.999375887e-01, + 9.039709430e-01, 9.085179554e-01, 9.137727588e-01, 9.200790165e-01, + 9.281525810e-01, 9.400345279e-01, 1.000000000e+00, +}; +const float dist_icdf_4_3[] = { + 0.000000000e+00, 8.975041338e-02, 1.162473991e-01, 1.355249614e-01, + 1.512936819e-01, 1.649122887e-01, 1.770520914e-01, 1.881007254e-01, + 1.983050234e-01, 2.078331596e-01, 2.168055629e-01, 2.253118330e-01, + 2.334206861e-01, 2.411861398e-01, 2.486515363e-01, 2.558522597e-01, + 2.628176282e-01, 2.695722476e-01, 2.761370029e-01, 2.825297973e-01, + 2.887661144e-01, 2.948594524e-01, 3.008216629e-01, 3.066632201e-01, + 3.123934360e-01, 3.180206352e-01, 3.235522970e-01, 3.289951728e-01, + 3.343553839e-01, 3.396385031e-01, 3.448496230e-01, 3.499934147e-01, + 3.550741774e-01, 3.600958806e-01, 3.650622015e-01, 3.699765560e-01, + 3.748421269e-01, 3.796618880e-01, 3.844386250e-01, 3.891749545e-01, + 3.938733402e-01, 3.985361082e-01, 4.031654591e-01, 4.077634807e-01, + 4.123321577e-01, 4.168733819e-01, 4.213889598e-01, 4.258806213e-01, + 4.303500262e-01, 4.347987708e-01, 4.392283936e-01, 4.436403810e-01, + 4.480361724e-01, 4.524171643e-01, 4.567847154e-01, 4.611401499e-01, + 4.654847619e-01, 4.698198185e-01, 4.741465637e-01, 4.784662212e-01, + 4.827799977e-01, 4.870890860e-01, 4.913946678e-01, 4.956979165e-01, + 5.000000000e-01, 5.043020835e-01, 5.086053322e-01, 5.129109140e-01, + 5.172200023e-01, 5.215337788e-01, 5.258534363e-01, 5.301801815e-01, + 5.345152381e-01, 5.388598501e-01, 5.432152846e-01, 5.475828357e-01, + 5.519638276e-01, 5.563596190e-01, 5.607716064e-01, 5.652012292e-01, + 5.696499738e-01, 5.741193787e-01, 5.786110402e-01, 5.831266181e-01, + 5.876678423e-01, 5.922365193e-01, 5.968345409e-01, 6.014638918e-01, + 6.061266598e-01, 6.108250455e-01, 6.155613750e-01, 6.203381120e-01, + 6.251578731e-01, 6.300234440e-01, 6.349377985e-01, 6.399041194e-01, + 6.449258226e-01, 6.500065853e-01, 6.551503770e-01, 6.603614969e-01, + 6.656446161e-01, 6.710048272e-01, 6.764477030e-01, 6.819793648e-01, + 6.876065640e-01, 6.933367799e-01, 6.991783371e-01, 7.051405476e-01, + 7.112338856e-01, 7.174702027e-01, 7.238629971e-01, 7.304277524e-01, + 7.371823718e-01, 7.441477403e-01, 7.513484637e-01, 7.588138602e-01, + 7.665793139e-01, 7.746881670e-01, 7.831944371e-01, 7.921668404e-01, + 8.016949766e-01, 8.118992746e-01, 8.229479086e-01, 8.350877113e-01, + 8.487063181e-01, 8.644750386e-01, 8.837526009e-01, 9.102495866e-01, + 1.000000000e+00, 0.000000000e+00, 3.021113725e-02, 3.876273424e-02, + 4.487216763e-02, 4.979729147e-02, 5.399731859e-02, 5.769863847e-02, + 6.103174370e-02, 6.407960009e-02, 6.689865660e-02, 6.952928409e-02, + 7.200148168e-02, 7.433822858e-02, 7.655756669e-02, 7.867395440e-02, + 8.069918013e-02, 8.264299815e-02, 8.451358326e-02, 8.631786327e-02, + 8.806176714e-02, 8.975041338e-02, 9.138825542e-02, 9.297919519e-02, + 9.452667321e-02, 9.603374058e-02, 9.750311731e-02, 9.893723998e-02, + 1.003383009e-01, 1.017082806e-01, 1.030489753e-01, 1.043620194e-01, + 1.056489052e-01, 1.069109995e-01, 1.081495573e-01, 1.093657344e-01, + 1.105605979e-01, 1.117351350e-01, 1.128902615e-01, 1.140268282e-01, + 1.151456277e-01, 1.162473991e-01, 1.173328335e-01, 1.184025778e-01, + 1.194572384e-01, 1.204973852e-01, 1.215235538e-01, 1.225362490e-01, + 1.235359466e-01, 1.245230960e-01, 1.254981222e-01, 1.264614274e-01, + 1.274133926e-01, 1.283543795e-01, 1.292847315e-01, 1.302047748e-01, + 1.311148201e-01, 1.320151631e-01, 1.329060858e-01, 1.337878571e-01, + 1.346607338e-01, 1.355249614e-01, 1.363807745e-01, 1.372283978e-01, + 1.380680464e-01, 1.388999264e-01, 1.397242356e-01, 1.405411637e-01, + 1.413508929e-01, 1.421535983e-01, 1.429494483e-01, 1.437386048e-01, + 1.445212236e-01, 1.452974549e-01, 1.460674433e-01, 1.468313283e-01, + 1.475892444e-01, 1.483413214e-01, 1.490876846e-01, 1.498284550e-01, + 1.505637498e-01, 1.512936819e-01, 1.520183608e-01, 1.527378923e-01, + 1.534523790e-01, 1.541619199e-01, 1.548666114e-01, 1.555665464e-01, + 1.562618154e-01, 1.569525060e-01, 1.576387030e-01, 1.583204891e-01, + 1.589979443e-01, 1.596711464e-01, 1.603401709e-01, 1.610050912e-01, + 1.616659788e-01, 1.623229029e-01, 1.629759312e-01, 1.636251293e-01, + 1.642705610e-01, 1.649122887e-01, 1.655503730e-01, 1.661848727e-01, + 1.668158456e-01, 1.674433475e-01, 1.680674331e-01, 1.686881556e-01, + 1.693055671e-01, 1.699197181e-01, 1.705306581e-01, 1.711384353e-01, + 1.717430969e-01, 1.723446887e-01, 1.729432558e-01, 1.735388419e-01, + 1.741314899e-01, 1.747212417e-01, 1.753081381e-01, 1.758922193e-01, + 1.764735243e-01, 1.770520914e-01, 1.776279580e-01, 1.782011606e-01, + 1.787717352e-01, 1.793397167e-01, 1.799051395e-01, 1.804680372e-01, + 1.810284426e-01, 1.815863879e-01, 8.184136121e-01, 8.189715574e-01, + 8.195319628e-01, 8.200948605e-01, 8.206602833e-01, 8.212282648e-01, + 8.217988394e-01, 8.223720420e-01, 8.229479086e-01, 8.235264757e-01, + 8.241077807e-01, 8.246918619e-01, 8.252787583e-01, 8.258685101e-01, + 8.264611581e-01, 8.270567442e-01, 8.276553113e-01, 8.282569031e-01, + 8.288615647e-01, 8.294693419e-01, 8.300802819e-01, 8.306944329e-01, + 8.313118444e-01, 8.319325669e-01, 8.325566525e-01, 8.331841544e-01, + 8.338151273e-01, 8.344496270e-01, 8.350877113e-01, 8.357294390e-01, + 8.363748707e-01, 8.370240688e-01, 8.376770971e-01, 8.383340212e-01, + 8.389949088e-01, 8.396598291e-01, 8.403288536e-01, 8.410020557e-01, + 8.416795109e-01, 8.423612970e-01, 8.430474940e-01, 8.437381846e-01, + 8.444334536e-01, 8.451333886e-01, 8.458380801e-01, 8.465476210e-01, + 8.472621077e-01, 8.479816392e-01, 8.487063181e-01, 8.494362502e-01, + 8.501715450e-01, 8.509123154e-01, 8.516586786e-01, 8.524107556e-01, + 8.531686717e-01, 8.539325567e-01, 8.547025451e-01, 8.554787764e-01, + 8.562613952e-01, 8.570505517e-01, 8.578464017e-01, 8.586491071e-01, + 8.594588363e-01, 8.602757644e-01, 8.611000736e-01, 8.619319536e-01, + 8.627716022e-01, 8.636192255e-01, 8.644750386e-01, 8.653392662e-01, + 8.662121429e-01, 8.670939142e-01, 8.679848369e-01, 8.688851799e-01, + 8.697952252e-01, 8.707152685e-01, 8.716456205e-01, 8.725866074e-01, + 8.735385726e-01, 8.745018778e-01, 8.754769040e-01, 8.764640534e-01, + 8.774637510e-01, 8.784764462e-01, 8.795026148e-01, 8.805427616e-01, + 8.815974222e-01, 8.826671665e-01, 8.837526009e-01, 8.848543723e-01, + 8.859731718e-01, 8.871097385e-01, 8.882648650e-01, 8.894394021e-01, + 8.906342656e-01, 8.918504427e-01, 8.930890005e-01, 8.943510948e-01, + 8.956379806e-01, 8.969510247e-01, 8.982917194e-01, 8.996616991e-01, + 9.010627600e-01, 9.024968827e-01, 9.039662594e-01, 9.054733268e-01, + 9.070208048e-01, 9.086117446e-01, 9.102495866e-01, 9.119382329e-01, + 9.136821367e-01, 9.154864167e-01, 9.173570019e-01, 9.193008199e-01, + 9.213260456e-01, 9.234424333e-01, 9.256617714e-01, 9.279985183e-01, + 9.304707159e-01, 9.331013434e-01, 9.359203999e-01, 9.389682563e-01, + 9.423013615e-01, 9.460026814e-01, 9.502027085e-01, 9.551278324e-01, + 9.612372658e-01, 9.697888628e-01, 1.000000000e+00, +}; +const float dist_icdf_4_4[] = { + 0.000000000e+00, 5.193814818e-02, 7.401811327e-02, 9.120458682e-02, + 1.058663166e-01, 1.189202006e-01, 1.308362052e-01, 1.418933697e-01, + 1.522734245e-01, 1.621025549e-01, 1.714726111e-01, 1.804529204e-01, + 1.890973392e-01, 1.974486983e-01, 2.055417302e-01, 2.134050679e-01, + 2.210626508e-01, 2.285347408e-01, 2.358386713e-01, 2.429894119e-01, + 2.500000000e-01, 2.568818769e-01, 2.636451519e-01, 2.702988135e-01, + 2.768508989e-01, 2.833086329e-01, 2.896785411e-01, 2.959665446e-01, + 3.021780381e-01, 3.083179563e-01, 3.143908297e-01, 3.204008323e-01, + 3.263518223e-01, 3.322473775e-01, 3.380908251e-01, 3.438852687e-01, + 3.496336111e-01, 3.553385743e-01, 3.610027181e-01, 3.666284548e-01, + 3.722180640e-01, 3.777737050e-01, 3.832974272e-01, 3.887911812e-01, + 3.942568269e-01, 3.996961420e-01, 4.051108296e-01, 4.105025244e-01, + 4.158727991e-01, 4.212231702e-01, 4.265551027e-01, 4.318700152e-01, + 4.371692843e-01, 4.424542486e-01, 4.477262124e-01, 4.529864496e-01, + 4.582362067e-01, 4.634767063e-01, 4.687091501e-01, 4.739347217e-01, + 4.791545894e-01, 4.843699088e-01, 4.895818256e-01, 4.947914783e-01, + 5.000000000e-01, 5.052085217e-01, 5.104181744e-01, 5.156300912e-01, + 5.208454106e-01, 5.260652783e-01, 5.312908499e-01, 5.365232937e-01, + 5.417637933e-01, 5.470135504e-01, 5.522737876e-01, 5.575457514e-01, + 5.628307157e-01, 5.681299848e-01, 5.734448973e-01, 5.787768298e-01, + 5.841272009e-01, 5.894974756e-01, 5.948891704e-01, 6.003038580e-01, + 6.057431731e-01, 6.112088188e-01, 6.167025728e-01, 6.222262950e-01, + 6.277819360e-01, 6.333715452e-01, 6.389972819e-01, 6.446614257e-01, + 6.503663889e-01, 6.561147313e-01, 6.619091749e-01, 6.677526225e-01, + 6.736481777e-01, 6.795991677e-01, 6.856091703e-01, 6.916820437e-01, + 6.978219619e-01, 7.040334554e-01, 7.103214589e-01, 7.166913671e-01, + 7.231491011e-01, 7.297011865e-01, 7.363548481e-01, 7.431181231e-01, + 7.500000000e-01, 7.570105881e-01, 7.641613287e-01, 7.714652592e-01, + 7.789373492e-01, 7.865949321e-01, 7.944582698e-01, 8.025513017e-01, + 8.109026608e-01, 8.195470796e-01, 8.285273889e-01, 8.378974451e-01, + 8.477265755e-01, 8.581066303e-01, 8.691637948e-01, 8.810797994e-01, + 8.941336834e-01, 9.087954132e-01, 9.259818867e-01, 9.480618518e-01, + 1.000000000e+00, 0.000000000e+00, 1.145470721e-02, 1.622542401e-02, + 1.989663458e-02, 2.299876875e-02, 2.573727597e-02, 2.821751926e-02, + 3.050208680e-02, 3.263175676e-02, 3.463485273e-02, 3.653199618e-02, + 3.833875414e-02, 4.006722018e-02, 4.172701134e-02, 4.332592482e-02, + 4.487038640e-02, 4.636576607e-02, 4.781660603e-02, 4.922678900e-02, + 5.059966497e-02, 5.193814818e-02, 5.324479261e-02, 5.452185137e-02, + 5.577132412e-02, 5.699499524e-02, 5.819446496e-02, 5.937117492e-02, + 6.052642930e-02, 6.166141254e-02, 6.277720414e-02, 6.387479129e-02, + 6.495507948e-02, 6.601890173e-02, 6.706702641e-02, 6.810016409e-02, + 6.911897342e-02, 7.012406629e-02, 7.111601237e-02, 7.209534308e-02, + 7.306255505e-02, 7.401811327e-02, 7.496245383e-02, 7.589598635e-02, + 7.681909623e-02, 7.773214654e-02, 7.863547983e-02, 7.952941972e-02, + 8.041427232e-02, 8.129032752e-02, 8.215786021e-02, 8.301713126e-02, + 8.386838861e-02, 8.471186806e-02, 8.554779414e-02, 8.637638080e-02, + 8.719783215e-02, 8.801234305e-02, 8.882009969e-02, 8.962128013e-02, + 9.041605477e-02, 9.120458682e-02, 9.198703271e-02, 9.276354249e-02, + 9.353426017e-02, 9.429932405e-02, 9.505886707e-02, 9.581301706e-02, + 9.656189703e-02, 9.730562539e-02, 9.804431623e-02, 9.877807951e-02, + 9.950702128e-02, 1.002312439e-01, 1.009508460e-01, 1.016659232e-01, + 1.023765675e-01, 1.030828682e-01, 1.037849113e-01, 1.044827804e-01, + 1.051765561e-01, 1.058663166e-01, 1.065521377e-01, 1.072340928e-01, + 1.079122531e-01, 1.085866876e-01, 1.092574634e-01, 1.099246454e-01, + 1.105882968e-01, 1.112484789e-01, 1.119052514e-01, 1.125586721e-01, + 1.132087973e-01, 1.138556819e-01, 1.144993790e-01, 1.151399407e-01, + 1.157774172e-01, 1.164118579e-01, 1.170433105e-01, 1.176718217e-01, + 1.182974369e-01, 1.189202006e-01, 1.195401558e-01, 1.201573446e-01, + 1.207718083e-01, 1.213835869e-01, 1.219927195e-01, 1.225992444e-01, + 1.232031989e-01, 1.238046194e-01, 1.244035415e-01, 1.250000000e-01, + 1.255940289e-01, 1.261856614e-01, 1.267749300e-01, 1.273618665e-01, + 1.279465020e-01, 1.285288668e-01, 1.291089908e-01, 1.296869029e-01, + 1.302626318e-01, 1.308362052e-01, 1.314076506e-01, 1.319769946e-01, + 1.325442636e-01, 1.331094831e-01, 1.336726783e-01, 1.342338738e-01, + 1.347930939e-01, 1.353503622e-01, 8.646496378e-01, 8.652069061e-01, + 8.657661262e-01, 8.663273217e-01, 8.668905169e-01, 8.674557364e-01, + 8.680230054e-01, 8.685923494e-01, 8.691637948e-01, 8.697373682e-01, + 8.703130971e-01, 8.708910092e-01, 8.714711332e-01, 8.720534980e-01, + 8.726381335e-01, 8.732250700e-01, 8.738143386e-01, 8.744059711e-01, + 8.750000000e-01, 8.755964585e-01, 8.761953806e-01, 8.767968011e-01, + 8.774007556e-01, 8.780072805e-01, 8.786164131e-01, 8.792281917e-01, + 8.798426554e-01, 8.804598442e-01, 8.810797994e-01, 8.817025631e-01, + 8.823281783e-01, 8.829566895e-01, 8.835881421e-01, 8.842225828e-01, + 8.848600593e-01, 8.855006210e-01, 8.861443181e-01, 8.867912027e-01, + 8.874413279e-01, 8.880947486e-01, 8.887515211e-01, 8.894117032e-01, + 8.900753546e-01, 8.907425366e-01, 8.914133124e-01, 8.920877469e-01, + 8.927659072e-01, 8.934478623e-01, 8.941336834e-01, 8.948234439e-01, + 8.955172196e-01, 8.962150887e-01, 8.969171318e-01, 8.976234325e-01, + 8.983340768e-01, 8.990491540e-01, 8.997687561e-01, 9.004929787e-01, + 9.012219205e-01, 9.019556838e-01, 9.026943746e-01, 9.034381030e-01, + 9.041869829e-01, 9.049411329e-01, 9.057006759e-01, 9.064657398e-01, + 9.072364575e-01, 9.080129673e-01, 9.087954132e-01, 9.095839452e-01, + 9.103787199e-01, 9.111799003e-01, 9.119876569e-01, 9.128021679e-01, + 9.136236192e-01, 9.144522059e-01, 9.152881319e-01, 9.161316114e-01, + 9.169828687e-01, 9.178421398e-01, 9.187096725e-01, 9.195857277e-01, + 9.204705803e-01, 9.213645202e-01, 9.222678535e-01, 9.231809038e-01, + 9.241040136e-01, 9.250375462e-01, 9.259818867e-01, 9.269374450e-01, + 9.279046569e-01, 9.288839876e-01, 9.298759337e-01, 9.308810266e-01, + 9.318998359e-01, 9.329329736e-01, 9.339810983e-01, 9.350449205e-01, + 9.361252087e-01, 9.372227959e-01, 9.383385875e-01, 9.394735707e-01, + 9.406288251e-01, 9.418055350e-01, 9.430050048e-01, 9.442286759e-01, + 9.454781486e-01, 9.467552074e-01, 9.480618518e-01, 9.494003350e-01, + 9.507732110e-01, 9.521833940e-01, 9.536342339e-01, 9.551296136e-01, + 9.566740752e-01, 9.582729887e-01, 9.599327798e-01, 9.616612459e-01, + 9.634680038e-01, 9.653651473e-01, 9.673682432e-01, 9.694979132e-01, + 9.717824807e-01, 9.742627240e-01, 9.770012312e-01, 9.801033654e-01, + 9.837745760e-01, 9.885452928e-01, 1.000000000e+00, +}; +const float dist_icdf_4_5[] = { + 0.000000000e+00, 2.388903283e-02, 3.910358742e-02, 5.220819259e-02, + 6.412196115e-02, 7.523158189e-02, 8.574666414e-02, 9.579710309e-02, + 1.054704935e-01, 1.148294737e-01, 1.239208162e-01, 1.327806295e-01, + 1.414375369e-01, 1.499147229e-01, 1.582313066e-01, 1.664032957e-01, + 1.744442676e-01, 1.823658695e-01, 1.901781920e-01, 1.978900537e-01, + 2.055092223e-01, 2.130425879e-01, 2.204963009e-01, 2.278758833e-01, + 2.351863194e-01, 2.424321300e-01, 2.496174337e-01, 2.567459991e-01, + 2.638212872e-01, 2.708464889e-01, 2.778245559e-01, 2.847582274e-01, + 2.916500534e-01, 2.985024150e-01, 3.053175414e-01, 3.120975253e-01, + 3.188443366e-01, 3.255598340e-01, 3.322457755e-01, 3.389038278e-01, + 3.455355747e-01, 3.521425244e-01, 3.587261163e-01, 3.652877272e-01, + 3.718286764e-01, 3.783502312e-01, 3.848536108e-01, 3.913399911e-01, + 3.978105080e-01, 4.042662613e-01, 4.107083175e-01, 4.171377132e-01, + 4.235554577e-01, 4.299625354e-01, 4.363599089e-01, 4.427485204e-01, + 4.491292946e-01, 4.555031406e-01, 4.618709535e-01, 4.682336166e-01, + 4.745920034e-01, 4.809469789e-01, 4.872994016e-01, 4.936501252e-01, + 5.000000000e-01, 5.063498748e-01, 5.127005984e-01, 5.190530211e-01, + 5.254079966e-01, 5.317663834e-01, 5.381290465e-01, 5.444968594e-01, + 5.508707054e-01, 5.572514796e-01, 5.636400911e-01, 5.700374646e-01, + 5.764445423e-01, 5.828622868e-01, 5.892916825e-01, 5.957337387e-01, + 6.021894920e-01, 6.086600089e-01, 6.151463892e-01, 6.216497688e-01, + 6.281713236e-01, 6.347122728e-01, 6.412738837e-01, 6.478574756e-01, + 6.544644253e-01, 6.610961722e-01, 6.677542245e-01, 6.744401660e-01, + 6.811556634e-01, 6.879024747e-01, 6.946824586e-01, 7.014975850e-01, + 7.083499466e-01, 7.152417726e-01, 7.221754441e-01, 7.291535111e-01, + 7.361787128e-01, 7.432540009e-01, 7.503825663e-01, 7.575678700e-01, + 7.648136806e-01, 7.721241167e-01, 7.795036991e-01, 7.869574121e-01, + 7.944907777e-01, 8.021099463e-01, 8.098218080e-01, 8.176341305e-01, + 8.255557324e-01, 8.335967043e-01, 8.417686934e-01, 8.500852771e-01, + 8.585624631e-01, 8.672193705e-01, 8.760791838e-01, 8.851705263e-01, + 8.945295065e-01, 9.042028969e-01, 9.142533359e-01, 9.247684181e-01, + 9.358780389e-01, 9.477918074e-01, 9.608964126e-01, 9.761109672e-01, + 1.000000000e+00, 0.000000000e+00, 2.861875328e-03, 4.673544585e-03, + 6.226985886e-03, 7.633578893e-03, 8.940294528e-03, 1.017264359e-02, + 1.134646155e-02, 1.247244240e-02, 1.355824280e-02, 1.460958601e-02, + 1.563089418e-02, 1.662567510e-02, 1.759677143e-02, 1.854652807e-02, + 1.947690844e-02, 2.038957776e-02, 2.128596402e-02, 2.216730370e-02, + 2.303467659e-02, 2.388903283e-02, 2.473121412e-02, 2.556197066e-02, + 2.638197480e-02, 2.719183210e-02, 2.799209048e-02, 2.878324779e-02, + 2.956575808e-02, 3.034003700e-02, 3.110646622e-02, 3.186539734e-02, + 3.261715512e-02, 3.336204038e-02, 3.410033242e-02, 3.483229117e-02, + 3.555815906e-02, 3.627816268e-02, 3.699251418e-02, 3.770141261e-02, + 3.840504500e-02, 3.910358742e-02, 3.979720584e-02, 4.048605697e-02, + 4.117028896e-02, 4.185004206e-02, 4.252544923e-02, 4.319663666e-02, + 4.386372424e-02, 4.452682601e-02, 4.518605059e-02, 4.584150148e-02, + 4.649327746e-02, 4.714147286e-02, 4.778617786e-02, 4.842747872e-02, + 4.906545804e-02, 4.970019499e-02, 5.033176548e-02, 5.096024238e-02, + 5.158569566e-02, 5.220819259e-02, 5.282779784e-02, 5.344457367e-02, + 5.405858002e-02, 5.466987467e-02, 5.527851330e-02, 5.588454965e-02, + 5.648803555e-02, 5.708902111e-02, 5.768755469e-02, 5.828368310e-02, + 5.887745156e-02, 5.946890387e-02, 6.005808240e-02, 6.064502822e-02, + 6.122978109e-02, 6.181237958e-02, 6.239286108e-02, 6.297126187e-02, + 6.354761716e-02, 6.412196115e-02, 6.469432703e-02, 6.526474707e-02, + 6.583325262e-02, 6.639987419e-02, 6.696464143e-02, 6.752758319e-02, + 6.808872756e-02, 6.864810188e-02, 6.920573278e-02, 6.976164621e-02, + 7.031586744e-02, 7.086842111e-02, 7.141933126e-02, 7.196862130e-02, + 7.251631410e-02, 7.306243197e-02, 7.360699668e-02, 7.415002947e-02, + 7.469155112e-02, 7.523158189e-02, 7.577014159e-02, 7.630724959e-02, + 7.684292480e-02, 7.737718572e-02, 7.791005044e-02, 7.844153667e-02, + 7.897166170e-02, 7.950044247e-02, 8.002789557e-02, 8.055403723e-02, + 8.107888332e-02, 8.160244942e-02, 8.212475076e-02, 8.264580227e-02, + 8.316561858e-02, 8.368421403e-02, 8.420160267e-02, 8.471779827e-02, + 8.523281435e-02, 8.574666414e-02, 8.625936065e-02, 8.677091662e-02, + 8.728134455e-02, 8.779065671e-02, 8.829886515e-02, 8.880598170e-02, + 8.931201794e-02, 8.981698530e-02, 9.101830147e-01, 9.106879821e-01, + 9.111940183e-01, 9.117011348e-01, 9.122093433e-01, 9.127186555e-01, + 9.132290834e-01, 9.137406393e-01, 9.142533359e-01, 9.147671857e-01, + 9.152822017e-01, 9.157983973e-01, 9.163157860e-01, 9.168343814e-01, + 9.173541977e-01, 9.178752492e-01, 9.183975506e-01, 9.189211167e-01, + 9.194459628e-01, 9.199721044e-01, 9.204995575e-01, 9.210283383e-01, + 9.215584633e-01, 9.220899496e-01, 9.226228143e-01, 9.231570752e-01, + 9.236927504e-01, 9.242298584e-01, 9.247684181e-01, 9.253084489e-01, + 9.258499705e-01, 9.263930033e-01, 9.269375680e-01, 9.274836859e-01, + 9.280313787e-01, 9.285806687e-01, 9.291315789e-01, 9.296841326e-01, + 9.302383538e-01, 9.307942672e-01, 9.313518981e-01, 9.319112724e-01, + 9.324724168e-01, 9.330353586e-01, 9.336001258e-01, 9.341667474e-01, + 9.347352529e-01, 9.353056730e-01, 9.358780389e-01, 9.364523828e-01, + 9.370287381e-01, 9.376071389e-01, 9.381876204e-01, 9.387702189e-01, + 9.393549718e-01, 9.399419176e-01, 9.405310961e-01, 9.411225484e-01, + 9.417163169e-01, 9.423124453e-01, 9.429109789e-01, 9.435119644e-01, + 9.441154504e-01, 9.447214867e-01, 9.453301253e-01, 9.459414200e-01, + 9.465554263e-01, 9.471722022e-01, 9.477918074e-01, 9.484143043e-01, + 9.490397576e-01, 9.496682345e-01, 9.502998050e-01, 9.509345420e-01, + 9.515725213e-01, 9.522138221e-01, 9.528585271e-01, 9.535067225e-01, + 9.541584985e-01, 9.548139494e-01, 9.554731740e-01, 9.561362758e-01, + 9.568033633e-01, 9.574745508e-01, 9.581499579e-01, 9.588297110e-01, + 9.595139430e-01, 9.602027942e-01, 9.608964126e-01, 9.615949550e-01, + 9.622985874e-01, 9.630074858e-01, 9.637218373e-01, 9.644418409e-01, + 9.651677088e-01, 9.658996676e-01, 9.666379596e-01, 9.673828449e-01, + 9.681346027e-01, 9.688935338e-01, 9.696599630e-01, 9.704342419e-01, + 9.712167522e-01, 9.720079095e-01, 9.728081679e-01, 9.736180252e-01, + 9.744380293e-01, 9.752687859e-01, 9.761109672e-01, 9.769653234e-01, + 9.778326963e-01, 9.787140360e-01, 9.796104222e-01, 9.805230916e-01, + 9.814534719e-01, 9.824032286e-01, 9.833743249e-01, 9.843691058e-01, + 9.853904140e-01, 9.864417572e-01, 9.875275576e-01, 9.886535385e-01, + 9.898273564e-01, 9.910597055e-01, 9.923664211e-01, 9.937730141e-01, + 9.953264554e-01, 9.971381247e-01, 1.000000000e+00, +}; +const float dist_icdf_4_6[] = { + 0.000000000e+00, 7.812500000e-03, 1.562500000e-02, 2.343750000e-02, + 3.125000000e-02, 3.906250000e-02, 4.687500000e-02, 5.468750000e-02, + 6.250000000e-02, 7.031250000e-02, 7.812500000e-02, 8.593750000e-02, + 9.375000000e-02, 1.015625000e-01, 1.093750000e-01, 1.171875000e-01, + 1.250000000e-01, 1.328125000e-01, 1.406250000e-01, 1.484375000e-01, + 1.562500000e-01, 1.640625000e-01, 1.718750000e-01, 1.796875000e-01, + 1.875000000e-01, 1.953125000e-01, 2.031250000e-01, 2.109375000e-01, + 2.187500000e-01, 2.265625000e-01, 2.343750000e-01, 2.421875000e-01, + 2.500000000e-01, 2.578125000e-01, 2.656250000e-01, 2.734375000e-01, + 2.812500000e-01, 2.890625000e-01, 2.968750000e-01, 3.046875000e-01, + 3.125000000e-01, 3.203125000e-01, 3.281250000e-01, 3.359375000e-01, + 3.437500000e-01, 3.515625000e-01, 3.593750000e-01, 3.671875000e-01, + 3.750000000e-01, 3.828125000e-01, 3.906250000e-01, 3.984375000e-01, + 4.062500000e-01, 4.140625000e-01, 4.218750000e-01, 4.296875000e-01, + 4.375000000e-01, 4.453125000e-01, 4.531250000e-01, 4.609375000e-01, + 4.687500000e-01, 4.765625000e-01, 4.843750000e-01, 4.921875000e-01, + 5.000000000e-01, 5.078125000e-01, 5.156250000e-01, 5.234375000e-01, + 5.312500000e-01, 5.390625000e-01, 5.468750000e-01, 5.546875000e-01, + 5.625000000e-01, 5.703125000e-01, 5.781250000e-01, 5.859375000e-01, + 5.937500000e-01, 6.015625000e-01, 6.093750000e-01, 6.171875000e-01, + 6.250000000e-01, 6.328125000e-01, 6.406250000e-01, 6.484375000e-01, + 6.562500000e-01, 6.640625000e-01, 6.718750000e-01, 6.796875000e-01, + 6.875000000e-01, 6.953125000e-01, 7.031250000e-01, 7.109375000e-01, + 7.187500000e-01, 7.265625000e-01, 7.343750000e-01, 7.421875000e-01, + 7.500000000e-01, 7.578125000e-01, 7.656250000e-01, 7.734375000e-01, + 7.812500000e-01, 7.890625000e-01, 7.968750000e-01, 8.046875000e-01, + 8.125000000e-01, 8.203125000e-01, 8.281250000e-01, 8.359375000e-01, + 8.437500000e-01, 8.515625000e-01, 8.593750000e-01, 8.671875000e-01, + 8.750000000e-01, 8.828125000e-01, 8.906250000e-01, 8.984375000e-01, + 9.062500000e-01, 9.140625000e-01, 9.218750000e-01, 9.296875000e-01, + 9.375000000e-01, 9.453125000e-01, 9.531250000e-01, 9.609375000e-01, + 9.687500000e-01, 9.765625000e-01, 9.843750000e-01, 9.921875000e-01, + 1.000000000e+00, 0.000000000e+00, 3.906250000e-04, 7.812500000e-04, + 1.171875000e-03, 1.562500000e-03, 1.953125000e-03, 2.343750000e-03, + 2.734375000e-03, 3.125000000e-03, 3.515625000e-03, 3.906250000e-03, + 4.296875000e-03, 4.687500000e-03, 5.078125000e-03, 5.468750000e-03, + 5.859375000e-03, 6.250000000e-03, 6.640625000e-03, 7.031250000e-03, + 7.421875000e-03, 7.812500000e-03, 8.203125000e-03, 8.593750000e-03, + 8.984375000e-03, 9.375000000e-03, 9.765625000e-03, 1.015625000e-02, + 1.054687500e-02, 1.093750000e-02, 1.132812500e-02, 1.171875000e-02, + 1.210937500e-02, 1.250000000e-02, 1.289062500e-02, 1.328125000e-02, + 1.367187500e-02, 1.406250000e-02, 1.445312500e-02, 1.484375000e-02, + 1.523437500e-02, 1.562500000e-02, 1.601562500e-02, 1.640625000e-02, + 1.679687500e-02, 1.718750000e-02, 1.757812500e-02, 1.796875000e-02, + 1.835937500e-02, 1.875000000e-02, 1.914062500e-02, 1.953125000e-02, + 1.992187500e-02, 2.031250000e-02, 2.070312500e-02, 2.109375000e-02, + 2.148437500e-02, 2.187500000e-02, 2.226562500e-02, 2.265625000e-02, + 2.304687500e-02, 2.343750000e-02, 2.382812500e-02, 2.421875000e-02, + 2.460937500e-02, 2.500000000e-02, 2.539062500e-02, 2.578125000e-02, + 2.617187500e-02, 2.656250000e-02, 2.695312500e-02, 2.734375000e-02, + 2.773437500e-02, 2.812500000e-02, 2.851562500e-02, 2.890625000e-02, + 2.929687500e-02, 2.968750000e-02, 3.007812500e-02, 3.046875000e-02, + 3.085937500e-02, 3.125000000e-02, 3.164062500e-02, 3.203125000e-02, + 3.242187500e-02, 3.281250000e-02, 3.320312500e-02, 3.359375000e-02, + 3.398437500e-02, 3.437500000e-02, 3.476562500e-02, 3.515625000e-02, + 3.554687500e-02, 3.593750000e-02, 3.632812500e-02, 3.671875000e-02, + 3.710937500e-02, 3.750000000e-02, 3.789062500e-02, 3.828125000e-02, + 3.867187500e-02, 3.906250000e-02, 3.945312500e-02, 3.984375000e-02, + 4.023437500e-02, 4.062500000e-02, 4.101562500e-02, 4.140625000e-02, + 4.179687500e-02, 4.218750000e-02, 4.257812500e-02, 4.296875000e-02, + 4.335937500e-02, 4.375000000e-02, 4.414062500e-02, 4.453125000e-02, + 4.492187500e-02, 4.531250000e-02, 4.570312500e-02, 4.609375000e-02, + 4.648437500e-02, 4.687500000e-02, 4.726562500e-02, 4.765625000e-02, + 4.804687500e-02, 4.843750000e-02, 4.882812500e-02, 4.921875000e-02, + 4.960937500e-02, 5.000000000e-02, 9.500000000e-01, 9.503906250e-01, + 9.507812500e-01, 9.511718750e-01, 9.515625000e-01, 9.519531250e-01, + 9.523437500e-01, 9.527343750e-01, 9.531250000e-01, 9.535156250e-01, + 9.539062500e-01, 9.542968750e-01, 9.546875000e-01, 9.550781250e-01, + 9.554687500e-01, 9.558593750e-01, 9.562500000e-01, 9.566406250e-01, + 9.570312500e-01, 9.574218750e-01, 9.578125000e-01, 9.582031250e-01, + 9.585937500e-01, 9.589843750e-01, 9.593750000e-01, 9.597656250e-01, + 9.601562500e-01, 9.605468750e-01, 9.609375000e-01, 9.613281250e-01, + 9.617187500e-01, 9.621093750e-01, 9.625000000e-01, 9.628906250e-01, + 9.632812500e-01, 9.636718750e-01, 9.640625000e-01, 9.644531250e-01, + 9.648437500e-01, 9.652343750e-01, 9.656250000e-01, 9.660156250e-01, + 9.664062500e-01, 9.667968750e-01, 9.671875000e-01, 9.675781250e-01, + 9.679687500e-01, 9.683593750e-01, 9.687500000e-01, 9.691406250e-01, + 9.695312500e-01, 9.699218750e-01, 9.703125000e-01, 9.707031250e-01, + 9.710937500e-01, 9.714843750e-01, 9.718750000e-01, 9.722656250e-01, + 9.726562500e-01, 9.730468750e-01, 9.734375000e-01, 9.738281250e-01, + 9.742187500e-01, 9.746093750e-01, 9.750000000e-01, 9.753906250e-01, + 9.757812500e-01, 9.761718750e-01, 9.765625000e-01, 9.769531250e-01, + 9.773437500e-01, 9.777343750e-01, 9.781250000e-01, 9.785156250e-01, + 9.789062500e-01, 9.792968750e-01, 9.796875000e-01, 9.800781250e-01, + 9.804687500e-01, 9.808593750e-01, 9.812500000e-01, 9.816406250e-01, + 9.820312500e-01, 9.824218750e-01, 9.828125000e-01, 9.832031250e-01, + 9.835937500e-01, 9.839843750e-01, 9.843750000e-01, 9.847656250e-01, + 9.851562500e-01, 9.855468750e-01, 9.859375000e-01, 9.863281250e-01, + 9.867187500e-01, 9.871093750e-01, 9.875000000e-01, 9.878906250e-01, + 9.882812500e-01, 9.886718750e-01, 9.890625000e-01, 9.894531250e-01, + 9.898437500e-01, 9.902343750e-01, 9.906250000e-01, 9.910156250e-01, + 9.914062500e-01, 9.917968750e-01, 9.921875000e-01, 9.925781250e-01, + 9.929687500e-01, 9.933593750e-01, 9.937500000e-01, 9.941406250e-01, + 9.945312500e-01, 9.949218750e-01, 9.953125000e-01, 9.957031250e-01, + 9.960937500e-01, 9.964843750e-01, 9.968750000e-01, 9.972656250e-01, + 9.976562500e-01, 9.980468750e-01, 9.984375000e-01, 9.988281250e-01, + 9.992187500e-01, 9.996093750e-01, 1.000000000e+00, +}; +const float dist_icdf_4_7[] = { + 0.000000000e+00, 1.551652911e-03, 4.133543553e-03, 7.330169583e-03, + 1.100344347e-02, 1.507557444e-02, 1.949484392e-02, 2.422361887e-02, + 2.923288598e-02, 3.449935369e-02, 4.000375384e-02, 4.572977235e-02, + 5.166333810e-02, 5.779212953e-02, 6.410522016e-02, 7.059281662e-02, + 7.724606031e-02, 8.405687412e-02, 9.101784194e-02, 9.812211241e-02, + 1.053633210e-01, 1.127355261e-01, 1.202331562e-01, 1.278509658e-01, + 1.355839980e-01, 1.434275526e-01, 1.513771591e-01, 1.594285534e-01, + 1.675776573e-01, 1.758205607e-01, 1.841535061e-01, 1.925728748e-01, + 2.010751748e-01, 2.096570300e-01, 2.183151703e-01, 2.270464233e-01, + 2.358477060e-01, 2.447160180e-01, 2.536484352e-01, 2.626421034e-01, + 2.716942336e-01, 2.808020968e-01, 2.899630196e-01, 2.991743797e-01, + 3.084336028e-01, 3.177381580e-01, 3.270855557e-01, 3.364733433e-01, + 3.458991033e-01, 3.553604500e-01, 3.648550271e-01, 3.743805052e-01, + 3.839345799e-01, 3.935149689e-01, 4.031194106e-01, 4.127456619e-01, + 4.223914959e-01, 4.320547009e-01, 4.417330776e-01, 4.514244383e-01, + 4.611266045e-01, 4.708374058e-01, 4.805546780e-01, 4.902762616e-01, + 5.000000000e-01, 5.097237384e-01, 5.194453220e-01, 5.291625942e-01, + 5.388733955e-01, 5.485755617e-01, 5.582669224e-01, 5.679452991e-01, + 5.776085041e-01, 5.872543381e-01, 5.968805894e-01, 6.064850311e-01, + 6.160654201e-01, 6.256194948e-01, 6.351449729e-01, 6.446395500e-01, + 6.541008967e-01, 6.635266567e-01, 6.729144443e-01, 6.822618420e-01, + 6.915663972e-01, 7.008256203e-01, 7.100369804e-01, 7.191979032e-01, + 7.283057664e-01, 7.373578966e-01, 7.463515648e-01, 7.552839820e-01, + 7.641522940e-01, 7.729535767e-01, 7.816848297e-01, 7.903429700e-01, + 7.989248252e-01, 8.074271252e-01, 8.158464939e-01, 8.241794393e-01, + 8.324223427e-01, 8.405714466e-01, 8.486228409e-01, 8.565724474e-01, + 8.644160020e-01, 8.721490342e-01, 8.797668438e-01, 8.872644739e-01, + 8.946366790e-01, 9.018778876e-01, 9.089821581e-01, 9.159431259e-01, + 9.227539397e-01, 9.294071834e-01, 9.358947798e-01, 9.422078705e-01, + 9.483366619e-01, 9.542702276e-01, 9.599962462e-01, 9.655006463e-01, + 9.707671140e-01, 9.757763811e-01, 9.805051561e-01, 9.849244256e-01, + 9.889965565e-01, 9.926698304e-01, 9.958664564e-01, 9.984483471e-01, + 1.000000000e+00, 0.000000000e+00, 2.243749270e-05, 5.979876892e-05, + 1.061009908e-04, 1.593696159e-04, 2.185005699e-04, 2.827658621e-04, + 3.516405100e-04, 4.247236573e-04, 5.016967708e-04, 5.822991568e-04, + 6.663125529e-04, 7.535508895e-04, 8.438531901e-04, 9.370784736e-04, + 1.033101991e-03, 1.131812377e-03, 1.233109452e-03, 1.336902498e-03, + 1.443108875e-03, 1.551652911e-03, 1.662464991e-03, 1.775480799e-03, + 1.890640690e-03, 2.007889160e-03, 2.127174395e-03, 2.248447885e-03, + 2.371664095e-03, 2.496780174e-03, 2.623755707e-03, 2.752552498e-03, + 2.883134372e-03, 3.015467012e-03, 3.149517803e-03, 3.285255698e-03, + 3.422651101e-03, 3.561675755e-03, 3.702302650e-03, 3.844505932e-03, + 3.988260823e-03, 4.133543553e-03, 4.280331292e-03, 4.428602091e-03, + 4.578334827e-03, 4.729509154e-03, 4.882105455e-03, 5.036104805e-03, + 5.191488925e-03, 5.348240153e-03, 5.506341403e-03, 5.665776144e-03, + 5.826528362e-03, 5.988582541e-03, 6.151923633e-03, 6.316537037e-03, + 6.482408578e-03, 6.649524487e-03, 6.817871381e-03, 6.987436246e-03, + 7.158206422e-03, 7.330169583e-03, 7.503313729e-03, 7.677627166e-03, + 7.853098498e-03, 8.029716611e-03, 8.207470665e-03, 8.386350080e-03, + 8.566344527e-03, 8.747443920e-03, 8.929638403e-03, 9.112918345e-03, + 9.297274329e-03, 9.482697147e-03, 9.669177790e-03, 9.856707441e-03, + 1.004527747e-02, 1.023487943e-02, 1.042550503e-02, 1.061714618e-02, + 1.080979492e-02, 1.100344347e-02, 1.119808418e-02, 1.139370956e-02, + 1.159031226e-02, 1.178788507e-02, 1.198642092e-02, 1.218591284e-02, + 1.238635403e-02, 1.258773777e-02, 1.279005749e-02, 1.299330671e-02, + 1.319747908e-02, 1.340256834e-02, 1.360856837e-02, 1.381547311e-02, + 1.402327662e-02, 1.423197305e-02, 1.444155667e-02, 1.465202180e-02, + 1.486336289e-02, 1.507557444e-02, 1.528865105e-02, 1.550258742e-02, + 1.571737831e-02, 1.593301856e-02, 1.614950309e-02, 1.636682689e-02, + 1.658498504e-02, 1.680397266e-02, 1.702378498e-02, 1.724441726e-02, + 1.746586484e-02, 1.768812314e-02, 1.791118761e-02, 1.813505380e-02, + 1.835971728e-02, 1.858517371e-02, 1.881141880e-02, 1.903844831e-02, + 1.926625806e-02, 1.949484392e-02, 1.972420181e-02, 1.995432772e-02, + 2.018521766e-02, 2.041686772e-02, 2.064927401e-02, 2.088243272e-02, + 2.111634006e-02, 2.135099228e-02, 9.786490077e-01, 9.788836599e-01, + 9.791175673e-01, 9.793507260e-01, 9.795831323e-01, 9.798147823e-01, + 9.800456723e-01, 9.802757982e-01, 9.805051561e-01, 9.807337419e-01, + 9.809615517e-01, 9.811885812e-01, 9.814148263e-01, 9.816402827e-01, + 9.818649462e-01, 9.820888124e-01, 9.823118769e-01, 9.825341352e-01, + 9.827555827e-01, 9.829762150e-01, 9.831960273e-01, 9.834150150e-01, + 9.836331731e-01, 9.838504969e-01, 9.840669814e-01, 9.842826217e-01, + 9.844974126e-01, 9.847113489e-01, 9.849244256e-01, 9.851366371e-01, + 9.853479782e-01, 9.855584433e-01, 9.857680269e-01, 9.859767234e-01, + 9.861845269e-01, 9.863914316e-01, 9.865974317e-01, 9.868025209e-01, + 9.870066933e-01, 9.872099425e-01, 9.874122622e-01, 9.876136460e-01, + 9.878140872e-01, 9.880135791e-01, 9.882121149e-01, 9.884096877e-01, + 9.886062904e-01, 9.888019158e-01, 9.889965565e-01, 9.891902051e-01, + 9.893828538e-01, 9.895744950e-01, 9.897651206e-01, 9.899547225e-01, + 9.901432926e-01, 9.903308222e-01, 9.905173029e-01, 9.907027257e-01, + 9.908870817e-01, 9.910703616e-01, 9.912525561e-01, 9.914336555e-01, + 9.916136499e-01, 9.917925293e-01, 9.919702834e-01, 9.921469015e-01, + 9.923223728e-01, 9.924966863e-01, 9.926698304e-01, 9.928417936e-01, + 9.930125638e-01, 9.931821286e-01, 9.933504755e-01, 9.935175914e-01, + 9.936834630e-01, 9.938480764e-01, 9.940114175e-01, 9.941734716e-01, + 9.943342239e-01, 9.944936586e-01, 9.946517598e-01, 9.948085111e-01, + 9.949638952e-01, 9.951178945e-01, 9.952704908e-01, 9.954216652e-01, + 9.955713979e-01, 9.957196687e-01, 9.958664564e-01, 9.960117392e-01, + 9.961554941e-01, 9.962976973e-01, 9.964383242e-01, 9.965773489e-01, + 9.967147443e-01, 9.968504822e-01, 9.969845330e-01, 9.971168656e-01, + 9.972474475e-01, 9.973762443e-01, 9.975032198e-01, 9.976283359e-01, + 9.977515521e-01, 9.978728256e-01, 9.979921108e-01, 9.981093593e-01, + 9.982245192e-01, 9.983375350e-01, 9.984483471e-01, 9.985568911e-01, + 9.986630975e-01, 9.987668905e-01, 9.988681876e-01, 9.989668980e-01, + 9.990629215e-01, 9.991561468e-01, 9.992464491e-01, 9.993336874e-01, + 9.994177008e-01, 9.994983032e-01, 9.995752763e-01, 9.996483595e-01, + 9.997172341e-01, 9.997814994e-01, 9.998406304e-01, 9.998938990e-01, + 9.999402012e-01, 9.999775625e-01, 1.000000000e+00, +}; +const float dist_icdf_4_8[] = { + 0.000000000e+00, 4.402192196e-08, 7.043504723e-07, 3.565768144e-06, + 1.126953612e-05, 2.751324776e-05, 5.705045944e-05, 1.056899347e-04, + 1.802942910e-04, 2.887777918e-04, 4.401029805e-04, 6.442758075e-04, + 9.123388564e-04, 1.256362232e-03, 1.689431631e-03, 2.225633081e-03, + 2.880033782e-03, 3.668658481e-03, 4.608460747e-03, 5.717288520e-03, + 7.013843282e-03, 8.517632188e-03, 1.024891250e-02, 1.222862771e-02, + 1.447833467e-02, 1.702012127e-02, 1.987651403e-02, 2.307037524e-02, + 2.662478931e-02, 3.056293801e-02, 3.490796463e-02, 3.968282695e-02, + 4.491013944e-02, 5.061200492e-02, 5.680983645e-02, 6.352417025e-02, + 7.077447076e-02, 7.857892924e-02, 8.695425754e-02, 9.591547885e-02, + 1.054757176e-01, 1.156459913e-01, 1.264350057e-01, 1.378489582e-01, + 1.498913503e-01, 1.625628136e-01, 1.758609520e-01, 1.897802035e-01, + 2.043117246e-01, 2.194433002e-01, 2.351592823e-01, 2.514405596e-01, + 2.682645600e-01, 2.856052885e-01, 3.034334010e-01, 3.217163154e-01, + 3.404183594e-01, 3.595009551e-01, 3.789228389e-01, 3.986403148e-01, + 4.186075388e-01, 4.387768317e-01, 4.590990150e-01, 4.795237681e-01, + 5.000000000e-01, 5.204762319e-01, 5.409009850e-01, 5.612231683e-01, + 5.813924612e-01, 6.013596852e-01, 6.210771611e-01, 6.404990449e-01, + 6.595816406e-01, 6.782836846e-01, 6.965665990e-01, 7.143947115e-01, + 7.317354400e-01, 7.485594404e-01, 7.648407177e-01, 7.805566998e-01, + 7.956882754e-01, 8.102197965e-01, 8.241390480e-01, 8.374371864e-01, + 8.501086497e-01, 8.621510418e-01, 8.735649943e-01, 8.843540087e-01, + 8.945242824e-01, 9.040845212e-01, 9.130457425e-01, 9.214210708e-01, + 9.292255292e-01, 9.364758298e-01, 9.431901635e-01, 9.493879951e-01, + 9.550898606e-01, 9.603171731e-01, 9.650920354e-01, 9.694370620e-01, + 9.733752107e-01, 9.769296248e-01, 9.801234860e-01, 9.829798787e-01, + 9.855216653e-01, 9.877713723e-01, 9.897510875e-01, 9.914823678e-01, + 9.929861567e-01, 9.942827115e-01, 9.953915393e-01, 9.963313415e-01, + 9.971199662e-01, 9.977743669e-01, 9.983105684e-01, 9.987436378e-01, + 9.990876611e-01, 9.993557242e-01, 9.995598970e-01, 9.997112222e-01, + 9.998197057e-01, 9.998943101e-01, 9.999429495e-01, 9.999724868e-01, + 9.999887305e-01, 9.999964342e-01, 9.999992956e-01, 9.999999560e-01, + 1.000000000e+00, 0.000000000e+00, 2.751370195e-13, 4.402192312e-12, + 2.228609858e-11, 7.043507700e-11, 1.719606372e-10, 3.565775772e-10, + 6.606039836e-10, 1.126961231e-09, 1.805173983e-09, 2.751370191e-09, + 4.028281093e-09, 5.705241217e-09, 7.858188378e-09, 1.056966368e-08, + 1.392881150e-08, 1.803137952e-08, 2.297971869e-08, 2.888278326e-08, + 3.585613075e-08, 4.402192196e-08, 5.350892098e-08, 6.445249515e-08, + 7.699461513e-08, 9.128385479e-08, 1.074753913e-07, 1.257310052e-07, + 1.462190800e-07, 1.691146027e-07, 1.945991636e-07, 2.228609560e-07, + 2.540947767e-07, 2.885020255e-07, 3.262907055e-07, 3.676754230e-07, + 4.128773877e-07, 4.621244121e-07, 5.156509121e-07, 5.736979069e-07, + 6.365130185e-07, 7.043504723e-07, 7.774710968e-07, 8.561423233e-07, + 9.406381866e-07, 1.031239324e-06, 1.128232977e-06, 1.231912988e-06, + 1.342579805e-06, 1.460540477e-06, 1.586108656e-06, 1.719604598e-06, + 1.861355161e-06, 2.011693806e-06, 2.170960597e-06, 2.339502201e-06, + 2.517671886e-06, 2.705829525e-06, 2.904341592e-06, 3.113581164e-06, + 3.333927921e-06, 3.565768144e-06, 3.809494718e-06, 4.065507130e-06, + 4.334211467e-06, 4.616020422e-06, 4.911353286e-06, 5.220635956e-06, + 5.544300929e-06, 5.882787302e-06, 6.236540777e-06, 6.606013655e-06, + 6.991664841e-06, 7.393959841e-06, 7.813370759e-06, 8.250376305e-06, + 8.705461787e-06, 9.179119116e-06, 9.671846801e-06, 1.018414996e-05, + 1.071654029e-05, 1.126953612e-05, 1.184366235e-05, 1.243945051e-05, + 1.305743869e-05, 1.369817163e-05, 1.436220062e-05, 1.505008358e-05, + 1.576238502e-05, 1.649967605e-05, 1.726253439e-05, 1.805154433e-05, + 1.886729680e-05, 1.971038928e-05, 2.058142589e-05, 2.148101732e-05, + 2.240978088e-05, 2.336834045e-05, 2.435732654e-05, 2.537737623e-05, + 2.642913321e-05, 2.751324776e-05, 2.863037675e-05, 2.978118367e-05, + 3.096633858e-05, 3.218651815e-05, 3.344240563e-05, 3.473469088e-05, + 3.606407035e-05, 3.743124707e-05, 3.883693069e-05, 4.028183743e-05, + 4.176669010e-05, 4.329221812e-05, 4.485915750e-05, 4.646825083e-05, + 4.812024729e-05, 4.981590267e-05, 5.155597932e-05, 5.334124620e-05, + 5.517247887e-05, 5.705045944e-05, 5.897597664e-05, 6.094982579e-05, + 6.297280876e-05, 6.504573406e-05, 6.716941674e-05, 6.934467846e-05, + 7.157234745e-05, 7.385325855e-05, 9.999261467e-01, 9.999284277e-01, + 9.999306553e-01, 9.999328306e-01, 9.999349543e-01, 9.999370272e-01, + 9.999390502e-01, 9.999410240e-01, 9.999429495e-01, 9.999448275e-01, + 9.999466588e-01, 9.999484440e-01, 9.999501841e-01, 9.999518798e-01, + 9.999535317e-01, 9.999551408e-01, 9.999567078e-01, 9.999582333e-01, + 9.999597182e-01, 9.999611631e-01, 9.999625688e-01, 9.999639359e-01, + 9.999652653e-01, 9.999665576e-01, 9.999678135e-01, 9.999690337e-01, + 9.999702188e-01, 9.999713696e-01, 9.999724868e-01, 9.999735709e-01, + 9.999746226e-01, 9.999756427e-01, 9.999766317e-01, 9.999775902e-01, + 9.999785190e-01, 9.999794186e-01, 9.999802896e-01, 9.999811327e-01, + 9.999819485e-01, 9.999827375e-01, 9.999835003e-01, 9.999842376e-01, + 9.999849499e-01, 9.999856378e-01, 9.999863018e-01, 9.999869426e-01, + 9.999875605e-01, 9.999881563e-01, 9.999887305e-01, 9.999892835e-01, + 9.999898159e-01, 9.999903282e-01, 9.999908209e-01, 9.999912945e-01, + 9.999917496e-01, 9.999921866e-01, 9.999926060e-01, 9.999930083e-01, + 9.999933940e-01, 9.999937635e-01, 9.999941172e-01, 9.999944557e-01, + 9.999947794e-01, 9.999950886e-01, 9.999953840e-01, 9.999956658e-01, + 9.999959345e-01, 9.999961905e-01, 9.999964342e-01, 9.999966661e-01, + 9.999968864e-01, 9.999970957e-01, 9.999972942e-01, 9.999974823e-01, + 9.999976605e-01, 9.999978290e-01, 9.999979883e-01, 9.999981386e-01, + 9.999982804e-01, 9.999984139e-01, 9.999985395e-01, 9.999986574e-01, + 9.999987681e-01, 9.999988718e-01, 9.999989688e-01, 9.999990594e-01, + 9.999991439e-01, 9.999992225e-01, 9.999992956e-01, 9.999993635e-01, + 9.999994263e-01, 9.999994843e-01, 9.999995379e-01, 9.999995871e-01, + 9.999996323e-01, 9.999996737e-01, 9.999997115e-01, 9.999997459e-01, + 9.999997771e-01, 9.999998054e-01, 9.999998309e-01, 9.999998538e-01, + 9.999998743e-01, 9.999998925e-01, 9.999999087e-01, 9.999999230e-01, + 9.999999355e-01, 9.999999465e-01, 9.999999560e-01, 9.999999641e-01, + 9.999999711e-01, 9.999999770e-01, 9.999999820e-01, 9.999999861e-01, + 9.999999894e-01, 9.999999921e-01, 9.999999943e-01, 9.999999960e-01, + 9.999999972e-01, 9.999999982e-01, 9.999999989e-01, 9.999999993e-01, + 9.999999996e-01, 9.999999998e-01, 9.999999999e-01, 1.000000000e+00, + 1.000000000e+00, 1.000000000e+00, 1.000000000e+00, +}; + + +const float* distributions_table[] = { + dist_icdf_0_0, + dist_icdf_0_1, + dist_icdf_0_2, + dist_icdf_0_3, + dist_icdf_0_4, + dist_icdf_0_5, + dist_icdf_0_6, + dist_icdf_0_7, + dist_icdf_0_8, + dist_icdf_0_8, + dist_icdf_1_0, + dist_icdf_1_1, + dist_icdf_1_2, + dist_icdf_1_3, + dist_icdf_1_4, + dist_icdf_1_5, + dist_icdf_1_6, + dist_icdf_1_7, + dist_icdf_1_8, + dist_icdf_1_8, + dist_icdf_2_0, + dist_icdf_2_1, + dist_icdf_2_2, + dist_icdf_2_3, + dist_icdf_2_4, + dist_icdf_2_5, + dist_icdf_2_6, + dist_icdf_2_7, + dist_icdf_2_8, + dist_icdf_2_8, + dist_icdf_3_0, + dist_icdf_3_1, + dist_icdf_3_2, + dist_icdf_3_3, + dist_icdf_3_4, + dist_icdf_3_5, + dist_icdf_3_6, + dist_icdf_3_7, + dist_icdf_3_8, + dist_icdf_3_8, + dist_icdf_4_0, + dist_icdf_4_1, + dist_icdf_4_2, + dist_icdf_4_3, + dist_icdf_4_4, + dist_icdf_4_5, + dist_icdf_4_6, + dist_icdf_4_7, + dist_icdf_4_8, + dist_icdf_4_8, + dist_icdf_4_0, + dist_icdf_4_1, + dist_icdf_4_2, + dist_icdf_4_3, + dist_icdf_4_4, + dist_icdf_4_5, + dist_icdf_4_6, + dist_icdf_4_7, + dist_icdf_4_8, + dist_icdf_4_8, +}; + + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources.h new file mode 100644 index 00000000..0b53d765 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources.h @@ -0,0 +1,226 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources + + +#ifndef MARBLES_RESOURCES_H_ +#define MARBLES_RESOURCES_H_ + + +#include "stmlib/stmlib.h" + + + +namespace marbles { + +typedef uint8_t ResourceId; + +extern const float* lookup_table_table[]; + +extern const float* distributions_table[]; + +extern const float lut_raised_cosine[]; +extern const float lut_sine[]; +extern const float lut_logit[]; +extern const float dist_icdf_0_0[]; +extern const float dist_icdf_0_1[]; +extern const float dist_icdf_0_2[]; +extern const float dist_icdf_0_3[]; +extern const float dist_icdf_0_4[]; +extern const float dist_icdf_0_5[]; +extern const float dist_icdf_0_6[]; +extern const float dist_icdf_0_7[]; +extern const float dist_icdf_0_8[]; +extern const float dist_icdf_1_0[]; +extern const float dist_icdf_1_1[]; +extern const float dist_icdf_1_2[]; +extern const float dist_icdf_1_3[]; +extern const float dist_icdf_1_4[]; +extern const float dist_icdf_1_5[]; +extern const float dist_icdf_1_6[]; +extern const float dist_icdf_1_7[]; +extern const float dist_icdf_1_8[]; +extern const float dist_icdf_2_0[]; +extern const float dist_icdf_2_1[]; +extern const float dist_icdf_2_2[]; +extern const float dist_icdf_2_3[]; +extern const float dist_icdf_2_4[]; +extern const float dist_icdf_2_5[]; +extern const float dist_icdf_2_6[]; +extern const float dist_icdf_2_7[]; +extern const float dist_icdf_2_8[]; +extern const float dist_icdf_3_0[]; +extern const float dist_icdf_3_1[]; +extern const float dist_icdf_3_2[]; +extern const float dist_icdf_3_3[]; +extern const float dist_icdf_3_4[]; +extern const float dist_icdf_3_5[]; +extern const float dist_icdf_3_6[]; +extern const float dist_icdf_3_7[]; +extern const float dist_icdf_3_8[]; +extern const float dist_icdf_4_0[]; +extern const float dist_icdf_4_1[]; +extern const float dist_icdf_4_2[]; +extern const float dist_icdf_4_3[]; +extern const float dist_icdf_4_4[]; +extern const float dist_icdf_4_5[]; +extern const float dist_icdf_4_6[]; +extern const float dist_icdf_4_7[]; +extern const float dist_icdf_4_8[]; +#define LUT_RAISED_COSINE 0 +#define LUT_RAISED_COSINE_SIZE 257 +#define LUT_SINE 1 +#define LUT_SINE_SIZE 257 +#define LUT_LOGIT 2 +#define LUT_LOGIT_SIZE 257 +#define DIST_ICDF_0_0 0 +#define DIST_ICDF_0_0_SIZE 387 +#define DIST_ICDF_0_1 1 +#define DIST_ICDF_0_1_SIZE 387 +#define DIST_ICDF_0_2 2 +#define DIST_ICDF_0_2_SIZE 387 +#define DIST_ICDF_0_3 3 +#define DIST_ICDF_0_3_SIZE 387 +#define DIST_ICDF_0_4 4 +#define DIST_ICDF_0_4_SIZE 387 +#define DIST_ICDF_0_5 5 +#define DIST_ICDF_0_5_SIZE 387 +#define DIST_ICDF_0_6 6 +#define DIST_ICDF_0_6_SIZE 387 +#define DIST_ICDF_0_7 7 +#define DIST_ICDF_0_7_SIZE 387 +#define DIST_ICDF_0_8 8 +#define DIST_ICDF_0_8_SIZE 387 +#define DIST_ICDF_0_8_GUARD 9 +#define DIST_ICDF_0_8_GUARD_SIZE 387 +#define DIST_ICDF_1_0 10 +#define DIST_ICDF_1_0_SIZE 387 +#define DIST_ICDF_1_1 11 +#define DIST_ICDF_1_1_SIZE 387 +#define DIST_ICDF_1_2 12 +#define DIST_ICDF_1_2_SIZE 387 +#define DIST_ICDF_1_3 13 +#define DIST_ICDF_1_3_SIZE 387 +#define DIST_ICDF_1_4 14 +#define DIST_ICDF_1_4_SIZE 387 +#define DIST_ICDF_1_5 15 +#define DIST_ICDF_1_5_SIZE 387 +#define DIST_ICDF_1_6 16 +#define DIST_ICDF_1_6_SIZE 387 +#define DIST_ICDF_1_7 17 +#define DIST_ICDF_1_7_SIZE 387 +#define DIST_ICDF_1_8 18 +#define DIST_ICDF_1_8_SIZE 387 +#define DIST_ICDF_1_8_GUARD 19 +#define DIST_ICDF_1_8_GUARD_SIZE 387 +#define DIST_ICDF_2_0 20 +#define DIST_ICDF_2_0_SIZE 387 +#define DIST_ICDF_2_1 21 +#define DIST_ICDF_2_1_SIZE 387 +#define DIST_ICDF_2_2 22 +#define DIST_ICDF_2_2_SIZE 387 +#define DIST_ICDF_2_3 23 +#define DIST_ICDF_2_3_SIZE 387 +#define DIST_ICDF_2_4 24 +#define DIST_ICDF_2_4_SIZE 387 +#define DIST_ICDF_2_5 25 +#define DIST_ICDF_2_5_SIZE 387 +#define DIST_ICDF_2_6 26 +#define DIST_ICDF_2_6_SIZE 387 +#define DIST_ICDF_2_7 27 +#define DIST_ICDF_2_7_SIZE 387 +#define DIST_ICDF_2_8 28 +#define DIST_ICDF_2_8_SIZE 387 +#define DIST_ICDF_2_8_GUARD 29 +#define DIST_ICDF_2_8_GUARD_SIZE 387 +#define DIST_ICDF_3_0 30 +#define DIST_ICDF_3_0_SIZE 387 +#define DIST_ICDF_3_1 31 +#define DIST_ICDF_3_1_SIZE 387 +#define DIST_ICDF_3_2 32 +#define DIST_ICDF_3_2_SIZE 387 +#define DIST_ICDF_3_3 33 +#define DIST_ICDF_3_3_SIZE 387 +#define DIST_ICDF_3_4 34 +#define DIST_ICDF_3_4_SIZE 387 +#define DIST_ICDF_3_5 35 +#define DIST_ICDF_3_5_SIZE 387 +#define DIST_ICDF_3_6 36 +#define DIST_ICDF_3_6_SIZE 387 +#define DIST_ICDF_3_7 37 +#define DIST_ICDF_3_7_SIZE 387 +#define DIST_ICDF_3_8 38 +#define DIST_ICDF_3_8_SIZE 387 +#define DIST_ICDF_3_8_GUARD 39 +#define DIST_ICDF_3_8_GUARD_SIZE 387 +#define DIST_ICDF_4_0 40 +#define DIST_ICDF_4_0_SIZE 387 +#define DIST_ICDF_4_1 41 +#define DIST_ICDF_4_1_SIZE 387 +#define DIST_ICDF_4_2 42 +#define DIST_ICDF_4_2_SIZE 387 +#define DIST_ICDF_4_3 43 +#define DIST_ICDF_4_3_SIZE 387 +#define DIST_ICDF_4_4 44 +#define DIST_ICDF_4_4_SIZE 387 +#define DIST_ICDF_4_5 45 +#define DIST_ICDF_4_5_SIZE 387 +#define DIST_ICDF_4_6 46 +#define DIST_ICDF_4_6_SIZE 387 +#define DIST_ICDF_4_7 47 +#define DIST_ICDF_4_7_SIZE 387 +#define DIST_ICDF_4_8 48 +#define DIST_ICDF_4_8_SIZE 387 +#define DIST_ICDF_4_8_GUARD 49 +#define DIST_ICDF_4_8_GUARD_SIZE 387 +#define DIST_ICDF_4_0_GUARD 50 +#define DIST_ICDF_4_0_GUARD_SIZE 387 +#define DIST_ICDF_4_1_GUARD 51 +#define DIST_ICDF_4_1_GUARD_SIZE 387 +#define DIST_ICDF_4_2_GUARD 52 +#define DIST_ICDF_4_2_GUARD_SIZE 387 +#define DIST_ICDF_4_3_GUARD 53 +#define DIST_ICDF_4_3_GUARD_SIZE 387 +#define DIST_ICDF_4_4_GUARD 54 +#define DIST_ICDF_4_4_GUARD_SIZE 387 +#define DIST_ICDF_4_5_GUARD 55 +#define DIST_ICDF_4_5_GUARD_SIZE 387 +#define DIST_ICDF_4_6_GUARD 56 +#define DIST_ICDF_4_6_GUARD_SIZE 387 +#define DIST_ICDF_4_7_GUARD 57 +#define DIST_ICDF_4_7_GUARD_SIZE 387 +#define DIST__ICDF_4_8_GUARD 58 +#define DIST__ICDF_4_8_GUARD_SIZE 387 +#define DIST_ICDF_4_8_GUARD_GUARD 59 +#define DIST_ICDF_4_8_GUARD_GUARD_SIZE 387 + +} // namespace marbles + +#endif // MARBLES_RESOURCES_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources/__init__.py b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources/lookup_tables.py b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources/lookup_tables.py new file mode 100644 index 00000000..9adbe791 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources/lookup_tables.py @@ -0,0 +1,109 @@ +#!/usr/bin/python2.5 +# +# Copyright 2015 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. +# +# ----------------------------------------------------------------------------- +# +# Lookup table definitions. + +import numpy +import scipy.stats + +lookup_tables = [] +distributions = [] + +"""---------------------------------------------------------------------------- +Raised cosine +----------------------------------------------------------------------------""" + +x = numpy.arange(0, 257) / 256.0 +c = 1.0 - (0.5 * numpy.cos(x * numpy.pi) + 0.5) +lookup_tables += [('raised_cosine', c)] + +x = numpy.arange(0, 257) / 256.0 +c = numpy.sin(x * numpy.pi * 2) +lookup_tables += [('sine', c)] + + + +"""---------------------------------------------------------------------------- +Logit table +----------------------------------------------------------------------------""" + +x = numpy.arange(0, 257) / 256.0 +log_odds = x * 20.0 - 10.0 +odds = 2 ** log_odds +p = odds / (1 + odds) +lookup_tables += [('logit', p)] + + + +"""---------------------------------------------------------------------------- +Inverse CDF of Beta distribution for various combinations of alpha/beta. +Used as a LUT for inverse transform sampling. +----------------------------------------------------------------------------""" + +N_nu = 9 +N_mu = 5 + +def squash(x): + return x / (1 + x ** 2) ** 0.5 + +nu_values = 2 ** numpy.array([9, 5, 3, 2.5, 2, 1.5, 1, 0.5, -1]) +mu_values = numpy.linspace(0, 0.5, N_mu) +mu_values[0] = 0.05 +plot = False + +if plot: + import pylab + VOLTAGE_RANGE = 8 + +for i, mu in enumerate(mu_values): + row = [] + for j, nu in enumerate(nu_values): + error = numpy.exp(-(numpy.log2(nu) - 1) ** 2 / 20.0) + corrected_mu = 0.5 * (2 * mu) ** (1 / (1 + 3.0 * error)) + alpha, beta = corrected_mu * nu, (1 - corrected_mu) * nu + if plot: + x = numpy.arange(-VOLTAGE_RANGE, VOLTAGE_RANGE, 0.1) + p = scipy.stats.beta.pdf(0.5 * (x / VOLTAGE_RANGE + 1.0), alpha, beta) + pylab.subplot(N_mu, N_nu, i * N_nu + j + 1) + pylab.plot(x, p) + + body = numpy.arange(0, 129) / 128.0 + head = body / 20.0 + tail = body / 20.0 + 0.95 + values = numpy.hstack((body, head, tail)) + ppf = scipy.stats.beta.ppf(values, alpha, beta) + row += [('icdf_%d_%d' % (i, j), ppf)] + if j == N_nu - 1: + row += [('icdf_%d_%d_guard' % (i, j), ppf)] + + distributions += row + if i == N_mu - 1: + distributions += [(name + '_guard', values) for (name, values) in row] + +if plot: + pylab.show() diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources/resources.py b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources/resources.py new file mode 100644 index 00000000..f1ccbb85 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/resources/resources.py @@ -0,0 +1,79 @@ +#!/usr/bin/python2.5 +# +# Copyright 2015 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. +# +# ----------------------------------------------------------------------------- +# +# Master resources file. + +header = """// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources +""" + +namespace = 'marbles' +target = 'marbles' +types = ['uint8_t', 'uint16_t'] +includes = """ +#include "stmlib/stmlib.h" +""" + +import lookup_tables + +create_specialized_manager = True + +resources = [ + (lookup_tables.lookup_tables, + 'lookup_table', 'LUT', 'float', float, False), + (lookup_tables.distributions, + 'distributions', 'DIST', 'float', float, False) +] diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/scale_recorder.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/scale_recorder.h new file mode 100644 index 00000000..f681a9f8 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/scale_recorder.h @@ -0,0 +1,149 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Record a note CV distribution - to be used for the quantizer. + +#ifndef MARBLES_SCALE_RECORDER_H_ +#define MARBLES_SCALE_RECORDER_H_ + +#include "stmlib/stmlib.h" +#include "marbles/random/quantizer.h" + +namespace marbles { + +class ScaleRecorder { + public: + ScaleRecorder() { } + ~ScaleRecorder() { } + + struct Degree { + float average_voltage; + float total_voltage; + float count; + + bool operator< (const Degree& rhs) const { + return average_voltage < rhs.average_voltage; + } + }; + + void Init() { + Clear(); + } + + void Clear() { + num_degrees_ = 0; + current_voltage_ = 0.0f; + total_count_ = 0.0f; + } + + void NewNote(float v) { + current_voltage_ = v; + } + + void UpdateVoltage(float v) { + ONE_POLE(current_voltage_, v, 0.01f); + } + + void AcceptNote() { + const float base_interval = 1.0f; + float v = current_voltage_; + while (v < 0.0f) { + v += base_interval; + } + float octave = static_cast( + static_cast(v / base_interval)) * base_interval; + v -= octave; + + int nearest_degree = -1; + for (int i = 0; i < num_degrees_; ++i) { + float av = degrees_[i].average_voltage; + const float tolerance = 1.0f / 36.0f; + if (fabsf(v - av) < tolerance) { + nearest_degree = i; + break; + } + if (fabsf((v - base_interval) - av) < tolerance) { + v -= base_interval; + nearest_degree = i; + break; + } + } + if (nearest_degree == -1 && num_degrees_ != kMaxDegrees) { + nearest_degree = num_degrees_; + Degree* d = °rees_[nearest_degree]; + d->total_voltage = 0.0f; + d->average_voltage = 0.0f; + d->count = 0.0f; + ++num_degrees_; + } + + if (nearest_degree != -1) { + Degree* d = °rees_[nearest_degree]; + d->total_voltage += v; + d->count += 1.0f; + d->average_voltage = d->total_voltage / d->count; + total_count_ += 1.0f; + } + } + + bool ExtractScale(Scale* scale) { + if (num_degrees_ < 2) { + return false; + } + std::sort(°rees_[0], °rees_[num_degrees_]); + + float max_count = 0.0f; + for (int i = 0; i < num_degrees_; ++i) { + max_count = std::max(degrees_[i].count, max_count); + } + + scale->base_interval = 1.0f; + scale->num_degrees = num_degrees_; + for (int i = 0; i < num_degrees_; ++i) { + Degree* d = °rees_[i]; + scale->degree[i].voltage = d->average_voltage; + scale->degree[i].weight = static_cast( + 255.0f * d->count / max_count); + if (scale->degree[i].weight == 0) { + ++scale->degree[i].weight; + } + } + + return true; + } + + private: + int num_degrees_; + float current_voltage_; + float total_count_; + Degree degrees_[kMaxDegrees]; + + DISALLOW_COPY_AND_ASSIGN(ScaleRecorder); +}; + +} // namespace marbles + +#endif // MARBLES_SCALE_RECORDER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/settings.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/settings.cc new file mode 100644 index 00000000..374db219 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/settings.cc @@ -0,0 +1,246 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Settings storage. + +#include "marbles/settings.h" + +#include + +#include "stmlib/system/storage.h" + +namespace marbles { + +using namespace std; + +const Scale preset_scales[6] = { + // C major + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // C + { 0.0833f, 16 }, // C# + { 0.1667f, 96 }, // D + { 0.2500f, 24 }, // D# + { 0.3333f, 128 }, // E + { 0.4167f, 64 }, // F + { 0.5000f, 8 }, // F# + { 0.5833f, 192 }, // G + { 0.6667f, 16 }, // G# + { 0.7500f, 96 }, // A + { 0.8333f, 24 }, // A# + { 0.9167f, 128 }, // B + } + }, + + // C minor + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // C + { 0.0833f, 16 }, // C# + { 0.1667f, 96 }, // D + { 0.2500f, 128 }, // Eb + { 0.3333f, 8 }, // E + { 0.4167f, 64 }, // F + { 0.5000f, 4 }, // F# + { 0.5833f, 192 }, // G + { 0.6667f, 96 }, // G# + { 0.7500f, 16 }, // A + { 0.8333f, 128 }, // Bb + { 0.9167f, 16 }, // B + } + }, + + // Pentatonic + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // C + { 0.0833f, 4 }, // C# + { 0.1667f, 96 }, // D + { 0.2500f, 4 }, // Eb + { 0.3333f, 4 }, // E + { 0.4167f, 140 }, // F + { 0.5000f, 4 }, // F# + { 0.5833f, 192 }, // G + { 0.6667f, 4 }, // G# + { 0.7500f, 96 }, // A + { 0.8333f, 4 }, // Bb + { 0.9167f, 4 }, // B + } + }, + + // Pelog + { + 1.0f, + 7, + { + { 0.0000f, 255 }, // C + { 0.1275f, 128 }, // Db+ + { 0.2625f, 32 }, // Eb- + { 0.4600f, 8 }, // F#- + { 0.5883f, 192 }, // G + { 0.7067f, 64 }, // Ab + { 0.8817f, 16 }, // Bb+ + } + }, + + // Raag Bhairav That + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // ** Sa + { 0.0752f, 128 }, // ** Komal Re + { 0.1699f, 4 }, // Re + { 0.2630f, 4 }, // Komal Ga + { 0.3219f, 128 }, // ** Ga + { 0.4150f, 64 }, // ** Ma + { 0.4918f, 4 }, // Tivre Ma + { 0.5850f, 192 }, // ** Pa + { 0.6601f, 64 }, // ** Komal Dha + { 0.7549f, 4 }, // Dha + { 0.8479f, 4 }, // Komal Ni + { 0.9069f, 64 }, // ** Ni + } + }, + + // Raag Shri + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // ** Sa + { 0.0752f, 4 }, // Komal Re + { 0.1699f, 128 }, // ** Re + { 0.2630f, 64 }, // ** Komal Ga + { 0.3219f, 4 }, // Ga + { 0.4150f, 128 }, // ** Ma + { 0.4918f, 4 }, // Tivre Ma + { 0.5850f, 192 }, // ** Pa + { 0.6601f, 4 }, // Komal Dha + { 0.7549f, 64 }, // ** Dha + { 0.8479f, 128 }, // ** Komal Ni + { 0.9069f, 4 }, // Ni + } + }, +}; + +#define FIX_OUTLIER(destination, expected_value) if (fabsf(destination / expected_value - 1.0f) > 0.1f) { destination = expected_value; } + +void Settings::ResetScale(int i) { + persistent_data_.scale[i] = preset_scales[i]; +} + + +void Settings::Init() { + freshly_baked_ = false; + + // Set default values for all calibration and state settings. + // This settings will be written to flash memory the first time the module + // is powered on, or if corrupted data is found in the flash sector, + // following a major firmware upgrade. + CalibrationData& c = persistent_data_.calibration_data; + fill(&c.adc_scale[0], &c.adc_scale[ADC_CHANNEL_LAST], -2.0f); + fill(&c.adc_offset[0], &c.adc_offset[ADC_CHANNEL_LAST], +1.0f); + fill(&c.dac_scale[0], &c.dac_scale[DAC_CHANNEL_LAST], -6212.8f); + fill(&c.dac_offset[0], &c.dac_offset[DAC_CHANNEL_LAST], 32768.0f); + c.adc_offset[ADC_CHANNEL_T_RATE] = 60.0f; + c.adc_scale[ADC_CHANNEL_T_RATE] = -120.0f; + + for (size_t i = 0; i < kNumScales; ++i) { + ResetScale(i); + } + + state_.t_deja_vu = 0; + state_.t_model = 0; + state_.t_range = 1; + state_.t_pulse_width_mean = 128; + state_.t_pulse_width_std = 0; + + state_.x_deja_vu = 0; + state_.x_control_mode = 0; + state_.x_register_mode = 0; + state_.x_range = 2; + state_.x_scale = 0; + + state_.y_spread = 128; + state_.y_bias = 128; + state_.y_steps = 0; + state_.y_divider = 128; + state_.y_range = 2; + + state_.color_blind = 0; + + freshly_baked_ = !chunk_storage_.Init(&persistent_data_, &state_); + + if (!freshly_baked_) { + CONSTRAIN(state_.t_model, 0, 5); + CONSTRAIN(state_.t_range, 0, 2); + CONSTRAIN(state_.x_control_mode, 0, 2); + CONSTRAIN(state_.x_range, 0, 2); + CONSTRAIN(state_.x_scale, 0, 5); + CONSTRAIN(state_.y_range, 0, 2); + + CalibrationData& c = persistent_data_.calibration_data; + for (size_t i = 0; i < ADC_CHANNEL_LAST; ++i) { + if (i == ADC_CHANNEL_T_RATE) { + FIX_OUTLIER(c.adc_scale[i], -120.0f); + FIX_OUTLIER(c.adc_offset[i], 60.0f); + } else { + FIX_OUTLIER(c.adc_scale[i], -2.0f); + FIX_OUTLIER(c.adc_offset[i], +1.0f); + } + } + for (size_t i = 0; i < DAC_CHANNEL_LAST; ++i) { + FIX_OUTLIER(c.dac_scale[i], -6212.8f); + FIX_OUTLIER(c.dac_offset[i], 32768.0f); + } + } +} + +void Settings::SavePersistentData() { + chunk_storage_.SavePersistentData(); +} + +void Settings::SaveState() { + chunk_storage_.SaveState(); +} + +/* static */ +void Settings::ProgramOptionBytes() { + FLASH_Unlock(); + FLASH_OB_Unlock(); + FLASH_OB_BORConfig(OB_BOR_OFF); + FLASH_OB_Launch(); + FLASH_OB_Lock(); +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/settings.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/settings.h new file mode 100644 index 00000000..3beadd79 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/settings.h @@ -0,0 +1,152 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Settings storage. + +#ifndef MARBLES_SETTINGS_H_ +#define MARBLES_SETTINGS_H_ + +#include "stmlib/stmlib.h" + +#include "stmlib/dsp/dsp.h" +#include "stmlib/system/storage.h" + +#include "marbles/drivers/adc.h" +#include "marbles/drivers/dac.h" +#include "marbles/random/quantizer.h" + +namespace marbles { + +struct CalibrationData { + float adc_offset[ADC_CHANNEL_LAST]; + float adc_scale[ADC_CHANNEL_LAST]; + float dac_offset[DAC_CHANNEL_LAST]; + float dac_scale[DAC_CHANNEL_LAST]; +}; + +const int kNumScales = 6; + +struct PersistentData { + CalibrationData calibration_data; + Scale scale[kNumScales]; + + uint8_t padding[16]; + + enum { tag = 0x494C4143 }; +}; + +struct State { + uint8_t t_deja_vu; + uint8_t t_model; + uint8_t t_range; + uint8_t t_pulse_width_mean; + uint8_t t_pulse_width_std; + uint8_t x_deja_vu; + uint8_t x_control_mode; + uint8_t x_register_mode; + uint8_t x_range; + uint8_t x_scale; + uint8_t y_spread; + uint8_t y_bias; + uint8_t y_steps; + uint8_t y_divider; + uint8_t y_range; + + uint8_t color_blind; + + uint8_t padding[8]; + + enum { tag = 0x54415453 }; +}; + +class Settings { + public: + Settings() { } + ~Settings() { } + + void Init(); + + void SavePersistentData(); + void SaveState(); + void ResetScale(int i); + + static void ProgramOptionBytes(); + + inline const CalibrationData& calibration_data() { + return persistent_data_.calibration_data; + } + + inline CalibrationData* mutable_calibration_data() { + return &persistent_data_.calibration_data; + } + + inline const Scale& scale(int i) const { + return persistent_data_.scale[i]; + } + + inline Scale* mutable_scale(int i) { + return &persistent_data_.scale[i]; + } + + inline const State& state() const { + return state_; + } + + inline State* mutable_state() { + return &state_; + } + + inline const PersistentData& persistent_data() const { + return persistent_data_; + } + + inline bool freshly_baked() const { + return freshly_baked_; + } + + inline void set_dirty_scale_index(int i) { + dirty_scale_index_ = i; + } + + inline int dirty_scale_index() const { + return dirty_scale_index_; + } + + private: + bool freshly_baked_; + int dirty_scale_index_; + + PersistentData persistent_data_; + State state_; + + stmlib::ChunkStorage<1, PersistentData, State> chunk_storage_; + + DISALLOW_COPY_AND_ASSIGN(Settings); +}; + +} // namespace marbles + +#endif // MARBLES_SETTINGS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/fixtures.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/fixtures.h new file mode 100644 index 00000000..2dbbc323 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/fixtures.h @@ -0,0 +1,227 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.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 MARBLES_TEST_FIXTURES_H_ +#define MARBLES_TEST_FIXTURES_H_ + +#include +#include + +#include "marbles/ramp/ramp_divider.h" +#include "marbles/ramp/ramp_extractor.h" + +const size_t kSampleRate = 32000; +const size_t kAudioBlockSize = 8; + +namespace marbles { + +using namespace std; +using namespace stmlib; + +class PulseGenerator { + public: + PulseGenerator() { + counter_ = 0; + previous_state_ = 0; + } + ~PulseGenerator() { } + + void AddPulses(int total_duration, int on_duration, int num_repetitions) { + Pulse p; + p.total_duration = total_duration; + p.on_duration = on_duration; + p.num_repetitions = num_repetitions; + pulses_.push_back(p); + } + + void Render(GateFlags* clock, size_t size) { + while (size--) { + bool current_state = pulses_.size() && counter_ < pulses_[0].on_duration; + ++counter_; + if (pulses_.size() && counter_ >= pulses_[0].total_duration) { + counter_ = 0; + --pulses_[0].num_repetitions; + if (pulses_[0].num_repetitions == 0) { + pulses_.erase(pulses_.begin()); + } + } + previous_state_ = *clock++ = ExtractGateFlags(previous_state_, current_state); + } + } + + private: + struct Pulse { + int total_duration; + int on_duration; + int num_repetitions; + }; + int counter_; + GateFlags previous_state_; + + vector pulses_; + + DISALLOW_COPY_AND_ASSIGN(PulseGenerator); +}; + +enum PatternDifficulty { + FRIENDLY_PATTERNS, + FAST_PATTERNS, + TRICKY_PATTERNS, + PAUSE_PATTERNS, +}; + +class ClockGeneratorPatterns { + public: + ClockGeneratorPatterns(PatternDifficulty difficulty) { + if (difficulty == FRIENDLY_PATTERNS) { + pulse_generator_.AddPulses(800, 400, 100); + pulse_generator_.AddPulses(400, 32, 100); + for (int i = 0; i < 15; ++i) { + for (int j = 0; j < 5; ++j) { + pulse_generator_.AddPulses(600 - j * 100, 3, 2); + } + } + for (int i = 0; i < 300; ++i) { + int t = 200 + (rand() % 400); + pulse_generator_.AddPulses(t, t / 4, 1); + } + + // Completely random clock. + for (int i = 0; i < 400; ++i) { + int t = 200 + (rand() % 800); + int pw = t / 4 + (rand() % (t / 2)); + pulse_generator_.AddPulses(t, pw, 1); + } + return; + } else if (difficulty == FAST_PATTERNS) { + pulse_generator_.AddPulses(32, 16, 100); + pulse_generator_.AddPulses(16, 8, 100); + pulse_generator_.AddPulses(12, 6, 100); + pulse_generator_.AddPulses(8, 4, 100); + pulse_generator_.AddPulses(6, 3, 100); + pulse_generator_.AddPulses(4, 2, 100); + pulse_generator_.AddPulses(8, 4, 100); + pulse_generator_.AddPulses(12, 6, 100); + return; + } else if (difficulty == PAUSE_PATTERNS) { + pulse_generator_.AddPulses(800, 400, 100); + pulse_generator_.AddPulses(32000 * 5 + 10, 400, 1); + pulse_generator_.AddPulses(800, 400, 100); + } + + // Steady clock + pulse_generator_.AddPulses(400, 200, 250); + pulse_generator_.AddPulses(4000 + (rand() % 1000), 2000, 10); + pulse_generator_.AddPulses(100, 10, 50); + pulse_generator_.AddPulses(16, 5, 100); + + // Periodic clock with some jitter + for (int i = 0; i < 50; ++i) { + pulse_generator_.AddPulses(100, 10, 3); + pulse_generator_.AddPulses(400 + (i % 4), 10, 1); + pulse_generator_.AddPulses((i == 40) ? 40 : 300, 10, 1); + } + for (int i = 0; i < 50; ++i) { + pulse_generator_.AddPulses(100 + (i % 10), 10, 3); + pulse_generator_.AddPulses(200 + (i % 4), 10, 2); + pulse_generator_.AddPulses(300, 10, 1); + } + + // Really long pattern that hashes well + for (int i = 0; i < 15; ++i) { + for (int j = 0; j < 10; ++j) { + pulse_generator_.AddPulses(100 + j * 30, 10, 1); + } + } + for (int i = 0; i < 15; ++i) { + for (int j = 0; j < 6; ++j) { + pulse_generator_.AddPulses(300 - j * 50, 3, 2); + } + } + + // Random clock with reliable pulse width + for (int i = 0; i < 300; ++i) { + int t = 100 + (rand() % 400); + pulse_generator_.AddPulses(t, t / 4, 1); + } + + // Completely random clock. + for (int i = 0; i < 400; ++i) { + int t = 100 + (rand() % 400); + int pw = t / 4 + (rand() % (t / 2)); + pulse_generator_.AddPulses(t, pw, 1); + } + } + ~ClockGeneratorPatterns() { } + + void Render(size_t size) { + pulse_generator_.Render(buffer_, size); + } + + GateFlags* clock() { return buffer_; } + + private: + GateFlags buffer_[kAudioBlockSize]; + PulseGenerator pulse_generator_; + + DISALLOW_COPY_AND_ASSIGN(ClockGeneratorPatterns); +}; + +class MasterSlaveRampGenerator { + public: + MasterSlaveRampGenerator() { + ramp_extractor_.Init(4000.0f / kSampleRate); + ramp_divider_[0].Init(); + ramp_divider_[1].Init(); + } + ~MasterSlaveRampGenerator() { } + + void Process(const GateFlags* clock, size_t size) { + Ratio r = { 1, 1 }; + ramp_extractor_.Process(r, true, clock, master_ramp_, size); + + r.q = 2; + ramp_divider_[0].Process(r, master_ramp_, slave_ramp_1_, size); + + r.p = 1; r.q = 2; + ramp_divider_[1].Process(r, master_ramp_, slave_ramp_2_, size); + } + + Ramps ramps() { + Ramps r; + r.external = external_ramp_; + r.master = master_ramp_; + r.slave[0] = slave_ramp_1_; + r.slave[1] = slave_ramp_2_; + return r; + } + + float* master_ramp() { return master_ramp_; } + float* slave_ramp_1() { return slave_ramp_1_; } + float* slave_ramp_2() { return slave_ramp_2_; } + private: + RampExtractor ramp_extractor_; + RampDivider ramp_divider_[2]; + float external_ramp_[kAudioBlockSize]; + float master_ramp_[kAudioBlockSize]; + float slave_ramp_1_[kAudioBlockSize]; + float slave_ramp_2_[kAudioBlockSize]; + + DISALLOW_COPY_AND_ASSIGN(MasterSlaveRampGenerator); +}; + +} // namespace marbles + +#endif // MARBLES_TEST_FIXTURES_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/makefile b/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/makefile new file mode 100644 index 00000000..d39492e0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/makefile @@ -0,0 +1,50 @@ +PACKAGES = marbles/test stmlib/utils marbles/ramp marbles/random marbles stmlib/dsp + +VPATH = $(PACKAGES) + +TARGET = marbles_test +BUILD_ROOT = build/ +BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ +CC_FILES = marbles_test.cc \ + lag_processor.cc \ + output_channel.cc \ + quantizer.cc \ + discrete_distribution_quantizer.cc \ + ramp_extractor.cc \ + random.cc \ + resources.cc \ + units.cc \ + t_generator.cc \ + x_y_generator.cc +OBJ_FILES = $(CC_FILES:.cc=.o) +OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) +DEPS = $(OBJS:.o=.d) +DEP_FILE = $(BUILD_DIR)depends.mk + +all: marbles_test + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +$(BUILD_DIR)%.o: %.cc + g++ -c -DTEST -g -Wall -Werror -msse2 -Wno-unused-variable -O2 -I. $< -o $@ + +$(BUILD_DIR)%.d: %.cc + g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) + +marbles_test: $(OBJS) + g++ -g -o $(TARGET) $(OBJS) -Wl,-no_pie -lm -lprofiler -L/opt/local/lib + +depends: $(DEPS) + cat $(DEPS) > $(DEP_FILE) + +$(DEP_FILE): $(BUILD_DIR) $(DEPS) + cat $(DEPS) > $(DEP_FILE) + +profile: marbles_test + env CPUPROFILE_FREQUENCY=1000 CPUPROFILE=$(BUILD_DIR)/marbles.prof ./marbles_test && pprof --pdf ./marbles_test $(BUILD_DIR)/marbles.prof > profile.pdf && open profile.pdf + +clean: + rm $(BUILD_DIR)*.* + +include $(DEP_FILE) diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/marbles_test.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/marbles_test.cc new file mode 100644 index 00000000..30c9cf26 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/marbles_test.cc @@ -0,0 +1,721 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.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 "marbles/cv_reader_channel.h" +#include "marbles/note_filter.h" +#include "marbles/ramp/ramp_divider.h" +#include "marbles/ramp/ramp_extractor.h" +#include "marbles/random/distributions.h" +#include "marbles/random/output_channel.h" +#include "marbles/random/random_generator.h" +#include "marbles/random/random_sequence.h" +#include "marbles/random/random_stream.h" +#include "marbles/random/t_generator.h" +#include "marbles/random/x_y_generator.h" +#include "marbles/scale_recorder.h" +#include "marbles/test/fixtures.h" +#include "marbles/test/ramp_checker.h" +#include "stmlib/test/wav_writer.h" +#include "stmlib/utils/random.h" + +using namespace marbles; +using namespace std; +using namespace stmlib; + + +void TestBetaDistribution() { + // Plot result with: + // import numpy + // import pylab + // data = numpy.loadtxt('marbles_histograms.txt') + // n = 0 + // for i in xrange(9): + // for j in xrange(13): + // pylab.subplot(9, 13, n + 1) + // pylab.plot(data[(n * 101):((n + 1) * 101)]) + // pylab.gca().get_xaxis().set_visible(False) + // pylab.gca().get_yaxis().set_visible(False) + // n += 1 + // pylab.show() + FILE* fp = fopen("marbles_histograms.txt", "w"); + for (int i = 0; i < 9; ++i) { + for (int j = 0; j < 13; ++j) { + float bias = float(i) / 8.0f; + float range = float(j) / 12.0f; + vector histogram(101); + for (int n = 0; n < 1000000; ++n) { + float value = BetaDistributionSample(Random::GetFloat(), range, bias); + histogram[int(value * 100.0f)]++; + } + for (int n = 0; n < 101; ++n) { + fprintf(fp, "%d\n", histogram[n]); + } + } + } + fclose(fp); +} + +void TestQuantizer() { + // Plot result with: + // import numpy + // import pylab + // + // data = numpy.loadtxt('marbles_quantizer.txt') + // pylab.figure(figsize=(25,5)) + // for i in xrange(9): + // pylab.subplot(1, 9, i + 1) + // indices = numpy.where(data[:, 0] == i)[0] + // pylab.plot(data[indices, 1], data[indices, 2]) + // pylab.show() + FILE* fp = fopen("marbles_quantizer.txt", "w"); + + Quantizer q; + Scale scale; + scale.InitMajor(); + q.Init(scale); + + for (int i = 0; i <= 8; ++i) { + float amount = float(i) / 8.0f; + for (int j = 0; j <= 4000; ++j) { + float value = j / 1000.0f - 2.0f; + fprintf(fp, "%d %f %f\n", i, value, q.Process(value, amount, false)); + } + } + fclose(fp); +} + +void TestQuantizerNoise() { + // Plot result with: + // import numpy + // import pylab + // + // data = numpy.loadtxt('marbles_quantizer_hysteresis.txt') + // pylab.plot(data) + // pylab.show() + FILE* fp = fopen("marbles_quantizer_hysteresis.txt", "w"); + + Quantizer q; + Scale scale; + scale.InitTenth(); + q.Init(scale); + + for (int j = 0; j <= 4000; ++j) { + float noise = (rand() % 500) / 250.0f - 1.0f; + float tri = j / 2000.0f; + if (tri >= 1.0f) tri = 2.0f - tri; + float value = 1.0f * tri + noise * 1.0f / 60.0f; + float result = q.Process(value, 0.18f, true); + fprintf(fp, "%f %f\n", value, result); + } + fclose(fp); +} + +void TestRampExtractorClockBug() { + WavWriter wav_writer(2, ::kSampleRate, 20); + wav_writer.Open("marbles_ramp_extractor_clock_bug.wav"); + + RandomGenerator random_generator; + RandomStream random_stream; + random_generator.Init(33); + random_stream.Init(&random_generator); + + PulseGenerator pulse_generator; + for (size_t i = 0; i < 700; ++i) { + int t = (rand() % 8) + 796; + pulse_generator.AddPulses(t, t >> 1, 1); + } + + TGenerator generator; + generator.Init(&random_stream, kSampleRate); + generator.set_model(T_GENERATOR_MODEL_COMPLEMENTARY_BERNOULLI); + generator.set_rate(0.0f); + generator.set_pulse_width_mean(0.5f); + generator.set_pulse_width_std(0.0f); + generator.set_bias(0.5f); + generator.set_jitter(0.0f); + generator.set_deja_vu(0.0f); + generator.set_length(8); + generator.set_range(T_GENERATOR_RANGE_1X); + + MasterSlaveRampGenerator ms_ramp_generator; + Ramps ramps = ms_ramp_generator.ramps(); + + float phase = 0.0f; + for (size_t i = 0; i < ::kSampleRate * 10; i += kAudioBlockSize) { + phase += 0.0001f; + if (phase >= 1.0f) { + phase -= 1.0f; + } + float tri = phase < 0.5f ? 2.0f * phase : 2.0f - 2.0f * phase; + bool gate[kAudioBlockSize * 2]; + GateFlags clock[kAudioBlockSize]; + pulse_generator.Render(clock, kAudioBlockSize); + generator.set_rate(tri * 24.0f - 12.0f); + generator.Process( + true, + clock, + ramps, + gate, + kAudioBlockSize); + for (size_t j = 0; j < kAudioBlockSize; ++j) { + float s[6]; + s[0] = clock[j] ? 1.0f : 0.0f; + s[1] = ramps.external[j]; + wav_writer.Write(s, 2, 32767.0f); + } + } +} + +void TestRampExtractorPause() { + WavWriter wav_writer(6, ::kSampleRate, 10); + wav_writer.Open("marbles_ramp_pause.wav"); + + RandomGenerator random_generator; + RandomStream random_stream; + random_generator.Init(33); + random_stream.Init(&random_generator); + + TGenerator generator; + generator.Init(&random_stream, kSampleRate); + generator.set_model(T_GENERATOR_MODEL_COMPLEMENTARY_BERNOULLI); + generator.set_rate(0.0f); + generator.set_pulse_width_mean(0.0f); + generator.set_pulse_width_std(0.0f); + generator.set_bias(0.9f); + generator.set_jitter(0.0f); + generator.set_deja_vu(0.0f); + generator.set_length(8); + generator.set_range(T_GENERATOR_RANGE_0_25X); + + ClockGeneratorPatterns patterns(PAUSE_PATTERNS); + MasterSlaveRampGenerator ms_ramp_generator; + Ramps ramps = ms_ramp_generator.ramps(); + + for (size_t i = 0; i < ::kSampleRate * 10; i += kAudioBlockSize) { + bool gate[kAudioBlockSize * 2]; + patterns.Render(kAudioBlockSize); + generator.Process( + true, + patterns.clock(), + ramps, + gate, + kAudioBlockSize); + for (size_t j = 0; j < kAudioBlockSize; ++j) { + float s[6]; + s[5] = s[0] = patterns.clock()[j] & GATE_FLAG_HIGH ? 0.8f : 0.0f; + s[1] = ramps.external[j]; + s[2] = ramps.master[j]; + s[3] = ramps.slave[0][j]; + s[4] = ramps.slave[1][j]; + wav_writer.Write(s, 6, 32767.0f); + } + } +} + +void TestRampDivider(PatternDifficulty difficulty, const char* file_name) { + WavWriter wav_writer(4, ::kSampleRate, 10); + wav_writer.Open(file_name); + + ClockGeneratorPatterns patterns(difficulty); + RampExtractor ramp_extractor; + RampDivider ramp_divider; + RampDivider ramp_divider_double; + RampDivider ramp_divider_half; + ramp_extractor.Init(0.25f); + ramp_divider.Init(); + ramp_divider_double.Init(); + ramp_divider_half.Init(); + + RampChecker ramp_checker[4]; + + Ratio r8x; + r8x.p = 8; + r8x.q = 1; + + Ratio r2x; + r2x.p = 2; + r2x.q = 1; + + Ratio half; + half.p = 1; + half.q = 2; + + Ratio one; + one.p = 1; + one.q = 1; + + for (size_t i = 0; i < ::kSampleRate * 10; i += kAudioBlockSize) { + float ramp[kAudioBlockSize]; + float divided_ramp[kAudioBlockSize]; + float divided_ramp_double[kAudioBlockSize]; + float divided_ramp_half[kAudioBlockSize]; + // switch ((i / (kSampleRate / 4)) % 3) { + // case 0: + // ramp_divider.set_ratio(1, 2); + // break; + // case 1: + // ramp_divider.set_ratio(4, 1); + // break; + // case 2: + // ramp_divider.set_ratio(3, 2); + // break; + // } + patterns.Render(kAudioBlockSize); + + ramp_extractor.Process(one, true, patterns.clock(), ramp, kAudioBlockSize); + ramp_divider.Process(r8x, ramp, divided_ramp, kAudioBlockSize); + ramp_divider_double.Process(r2x, divided_ramp, divided_ramp_double, kAudioBlockSize); + ramp_divider_half.Process(half, divided_ramp, divided_ramp_half, kAudioBlockSize); + for (size_t j = 0; j < kAudioBlockSize; ++j) { + float s[4]; + s[0] = ramp[j]; + s[1] = divided_ramp[j]; + s[2] = divided_ramp_double[j]; + s[3] = divided_ramp_half[j]; + wav_writer.Write(s, 4, 32767.0f); + } + ramp_checker[0].Check(ramp, kAudioBlockSize); + ramp_checker[1].Check(divided_ramp, kAudioBlockSize); + ramp_checker[2].Check(divided_ramp_double, kAudioBlockSize); + ramp_checker[3].Check(divided_ramp_half, kAudioBlockSize); + } +} + +void TestOutputChannel() { + WavWriter wav_writer(2, ::kSampleRate, 3); + wav_writer.Open("marbles_random_voltage.wav"); + + RampExtractor ramp_extractor; + RandomGenerator random_generator; + RandomStream random_stream; + RandomSequence random_sequence; + OutputChannel output_channel; + PulseGenerator pulse_generator; + + ramp_extractor.Init(0.25f); + random_generator.Init(32); + random_stream.Init(&random_generator); + random_sequence.Init(&random_stream); + output_channel.Init(); + + // Steady clock + pulse_generator.AddPulses(400, 10, 250); + pulse_generator.AddPulses(200, 10, 250); + + output_channel.set_register_mode(false); + output_channel.set_steps(0.5f); + output_channel.set_bias(0.5f); + + Ratio one; + one.p = 1; + one.q = 1; + + for (size_t i = 0; i < ::kSampleRate * 3; i += kAudioBlockSize) { + GateFlags gate_flags[kAudioBlockSize]; + float ramp[kAudioBlockSize]; + float voltage[kAudioBlockSize]; + pulse_generator.Render(gate_flags, kAudioBlockSize); + ramp_extractor.Process(one, false, gate_flags, ramp, kAudioBlockSize); + output_channel.set_spread(wav_writer.triangle(3)); + output_channel.Process(&random_sequence, ramp, voltage, kAudioBlockSize, 1); + for (size_t j = 0; j < kAudioBlockSize; ++j) voltage[j] *= 0.1f; + wav_writer.Write(ramp, voltage, kAudioBlockSize); + } +} + +void TestXYGenerator() { + WavWriter wav_writer(4, ::kSampleRate, 10); + wav_writer.Open("marbles_xy.wav"); + + RandomGenerator random_generator; + RandomStream random_stream; + random_generator.Init(32); + random_stream.Init(&random_generator); + + XYGenerator generator; + generator.Init(&random_stream, ::kSampleRate); + + GroupSettings x_settings, y_settings; + + x_settings.control_mode = CONTROL_MODE_IDENTICAL; + x_settings.voltage_range = VOLTAGE_RANGE_FULL; + x_settings.register_mode = false; + x_settings.register_value = 0.0f; + x_settings.spread = 0.8f; + x_settings.bias = 0.8f; + x_settings.steps = 0.3f; + x_settings.deja_vu = 0.0f; + x_settings.length = 8; + x_settings.ratio.p = 1; + x_settings.ratio.q = 1; + + y_settings.control_mode = CONTROL_MODE_IDENTICAL; + y_settings.voltage_range = VOLTAGE_RANGE_FULL; + y_settings.register_mode = false; + y_settings.register_value = 0.0f; + y_settings.spread = 0.5f; + y_settings.bias = 0.5f; + y_settings.steps = 0.1f; + y_settings.deja_vu = 0.0f; + y_settings.length = 8; + y_settings.ratio.p = 1; + y_settings.ratio.q = 8; + + ClockGeneratorPatterns patterns(TRICKY_PATTERNS); + MasterSlaveRampGenerator ms_ramp_generator; + + for (size_t i = 0; i < ::kSampleRate * 10; i += kAudioBlockSize) { + patterns.Render(kAudioBlockSize); + ms_ramp_generator.Process(patterns.clock(), kAudioBlockSize); + + float samples[kAudioBlockSize * 4]; + generator.Process( + CLOCK_SOURCE_INTERNAL_T1_T2_T3, + x_settings, + y_settings, + patterns.clock(), + ms_ramp_generator.ramps(), + samples, + kAudioBlockSize); + wav_writer.Write(samples, kAudioBlockSize * 4, 3276.7f); + } +} + +void TestXYGeneratorASR() { + WavWriter wav_writer(4, ::kSampleRate, 10); + wav_writer.Open("marbles_xy_asr.wav"); + + RandomGenerator random_generator; + RandomStream random_stream; + random_generator.Init(32); + random_stream.Init(&random_generator); + + XYGenerator generator; + generator.Init(&random_stream, ::kSampleRate); + + GroupSettings x_settings, y_settings; + + x_settings.control_mode = CONTROL_MODE_IDENTICAL; + x_settings.voltage_range = VOLTAGE_RANGE_FULL; + x_settings.register_mode = false; + x_settings.register_value = 0.0f; + x_settings.spread = 0.2f; + x_settings.bias = 0.7f; + x_settings.steps = 0.5f; + x_settings.deja_vu = 0.0f; + x_settings.length = 8; + x_settings.ratio.p = 1; + x_settings.ratio.q = 1; + + y_settings.control_mode = CONTROL_MODE_IDENTICAL; + y_settings.voltage_range = VOLTAGE_RANGE_FULL; + y_settings.register_mode = false; + y_settings.register_value = 0.0f; + y_settings.spread = 0.5f; + y_settings.bias = 0.5f; + y_settings.steps = 0.1f; + y_settings.deja_vu = 0.0f; + y_settings.length = 8; + y_settings.ratio.p = 1; + y_settings.ratio.q = 8; + + ClockGeneratorPatterns patterns(TRICKY_PATTERNS); + MasterSlaveRampGenerator ms_ramp_generator; + + for (size_t i = 0; i < ::kSampleRate * 10; i += kAudioBlockSize) { + patterns.Render(kAudioBlockSize); + ms_ramp_generator.Process(patterns.clock(), kAudioBlockSize); + + float samples[kAudioBlockSize * 4]; + + x_settings.register_mode = true; + x_settings.register_value = wav_writer.triangle(1); + + generator.Process( + CLOCK_SOURCE_EXTERNAL, + x_settings, + y_settings, + patterns.clock(), + ms_ramp_generator.ramps(), + samples, + kAudioBlockSize); + wav_writer.Write(samples, kAudioBlockSize * 4, 3276.7f); + } +} + +void TestTGenerator() { + WavWriter wav_writer(6, ::kSampleRate, 10); + wav_writer.Open("marbles_t.wav"); + + RandomGenerator random_generator; + RandomStream random_stream; + random_generator.Init(33); + random_stream.Init(&random_generator); + + TGenerator generator; + generator.Init(&random_stream, kSampleRate); + generator.set_model(T_GENERATOR_MODEL_COMPLEMENTARY_BERNOULLI); + generator.set_rate(24.0f); + generator.set_pulse_width_mean(0.0f); + generator.set_pulse_width_std(0.0f); + generator.set_bias(0.9f); + generator.set_jitter(0.5f); + generator.set_deja_vu(0.0f); + generator.set_length(8); + generator.set_range(T_GENERATOR_RANGE_4X); + + ClockGeneratorPatterns patterns(FRIENDLY_PATTERNS); + MasterSlaveRampGenerator ms_ramp_generator; + Ramps ramps = ms_ramp_generator.ramps(); + + RampChecker ramp_checker[4]; + for (size_t i = 0; i < ::kSampleRate * 10; i += kAudioBlockSize) { + bool gate[kAudioBlockSize * 2]; + patterns.Render(kAudioBlockSize); + generator.Process( + true, + patterns.clock(), + ramps, + gate, + kAudioBlockSize); + if (i >= kSampleRate * 5) { + // generator.set_deja_vu(1.0f); + // generator.set_jitter(0.5f); + } + for (size_t j = 0; j < kAudioBlockSize; ++j) { + float s[6]; + s[0] = ramps.external[j]; + s[1] = ramps.master[j]; + s[2] = ramps.slave[0][j]; + s[3] = ramps.slave[1][j]; + s[4] = gate[j * 2] ? 1.0f : 0.0f; + s[5] = gate[j * 2 + 1] ? 1.0f : 0.0f; + wav_writer.Write(s, 6, 32767.0f); + } + ramp_checker[0].Check(ramps.external, kAudioBlockSize); + ramp_checker[1].Check(ramps.master, kAudioBlockSize); + ramp_checker[2].Check(ramps.slave[0], kAudioBlockSize); + ramp_checker[3].Check(ramps.slave[1], kAudioBlockSize); + } +} + +void TestTGeneratorSuperFastClock() { + WavWriter wav_writer(6, ::kSampleRate, 10); + wav_writer.Open("marbles_t_super_fast.wav"); + + RandomGenerator random_generator; + RandomStream random_stream; + random_generator.Init(33); + random_stream.Init(&random_generator); + + TGenerator generator; + generator.Init(&random_stream, kSampleRate); + generator.set_model(T_GENERATOR_MODEL_COMPLEMENTARY_BERNOULLI); + generator.set_rate(60.0f); + generator.set_pulse_width_mean(0.0f); + generator.set_pulse_width_std(0.0f); + generator.set_bias(0.5f); + generator.set_jitter(0.0f); + generator.set_deja_vu(0.0f); + generator.set_length(8); + generator.set_range(T_GENERATOR_RANGE_4X); + + ClockGeneratorPatterns patterns(FAST_PATTERNS); + MasterSlaveRampGenerator ms_ramp_generator; + Ramps ramps = ms_ramp_generator.ramps(); + + for (size_t i = 0; i < ::kSampleRate * 10; i += kAudioBlockSize) { + bool gate[kAudioBlockSize * 2]; + patterns.Render(kAudioBlockSize); + generator.Process( + true, + patterns.clock(), + ramps, + gate, + kAudioBlockSize); + for (size_t j = 0; j < kAudioBlockSize; ++j) { + float s[6]; + s[0] = ramps.external[j]; + s[1] = ramps.master[j]; + s[2] = ramps.slave[0][j]; + s[3] = ramps.slave[1][j]; + s[4] = gate[j * 2] ? 1.0f : 0.0f; + s[5] = gate[j * 2 + 1] ? 1.0f : 0.0f; + wav_writer.Write(s, 6, 32767.0f); + } + } +} + +void TestTGeneratorRampIntegrity( + bool internal_clock, + float rate, + TGeneratorModel model, + float jitter) { + printf("Testing ramp integrity for intclock = %d\trate = %04.3f\tmodel = %d\tjitter = %04.3f\n", internal_clock, rate, model, jitter); + + RandomGenerator random_generator; + RandomStream random_stream; + random_generator.Init(33); + random_stream.Init(&random_generator); + + TGenerator generator; + generator.Init(&random_stream, kSampleRate); + generator.set_model(model); + generator.set_rate(rate + 36.0f); + generator.set_pulse_width_mean(0.0f); + generator.set_pulse_width_std(0.0f); + generator.set_bias(0.7f); + generator.set_jitter(jitter); + if (internal_clock) { + generator.set_range(T_GENERATOR_RANGE_4X); + } else { + generator.set_range(T_GENERATOR_RANGE_1X); + } + + ClockGeneratorPatterns patterns(FRIENDLY_PATTERNS); + MasterSlaveRampGenerator ms_ramp_generator; + Ramps ramps = ms_ramp_generator.ramps(); + + RampChecker ramp_checker[4]; + for (size_t i = 0; i < ::kSampleRate * 10; i += kAudioBlockSize) { + bool gate[kAudioBlockSize * 2]; + patterns.Render(kAudioBlockSize); + generator.Process( + !internal_clock, + patterns.clock(), + ramps, + gate, + kAudioBlockSize); + ramp_checker[0].Check(ramps.external, kAudioBlockSize); + ramp_checker[1].Check(ramps.master, kAudioBlockSize); + ramp_checker[2].Check(ramps.slave[0], kAudioBlockSize); + ramp_checker[3].Check(ramps.slave[1], kAudioBlockSize); + } +} + + +void TestTGeneratorRampIntegrity() { + for (size_t clock_source = 0; clock_source < 2; ++clock_source) { + for (size_t model = 0; model < 6; ++model) { + for (size_t jitter = 0; jitter < 5; ++jitter) { + for (size_t rate = 0; rate < 5; ++rate) { + TestTGeneratorRampIntegrity( + clock_source, + float(rate) * 12.0f - 24.0f, + TGeneratorModel(model), + float(jitter) * 0.2f); + } + } + } + } +} + +void TestScaleRecorder() { + int prelude[] = { 0, 4, 7, 7, 12, 12, 16, 16, 7, 7, 12, 12, 16, 0, 0, 4, 16, + 4, 7, 7, 12, 12, 16, 16, 7, 7, 12, 12, 16, 0, 0, 4, 16, 2, 9, 9, 14, 14, + 17, 17, 9, 9, 14, 14, 17, 0, 0, 2, 17, 2, 9, 9, 14, 14, 17, 17, 9, 9, 14, + 14, 17, -1, 0, 2, 17, 2, 7, 7, 14, 14, 17, 17, 7, 7, 14, 14, 17, -1, -1, + 2, 17, 2, 7, 7, 14, 14, 17, 17, 7, 7, 14, 14, 17, -1, 0, 2, 17, 4, 7, 7, + 12, 12, 16, 16, 7, 7, 12, 12, 16, 0, 0, 4, 16, 4, 7, 7, 12, 12, 16, 16, 7, + 7, 12, 12, 16, 0, 0, 4, 16, 4, 9, 9, 16, 16, 21, 21, 9, 9, 16, 16, 21, 0, + 0, 4, 21, 4, 9, 9, 16, 16, 21, 21, 9, 9, 16, 16, 21, 0, 0, 4, 21, 2, 6, 6, + 9, 9, 14, 14, 6, 6, 9, 9, 14, 0, 0, 2, 14, 2, 6, 6, 9, 9, 14, 14, 6, 6, 9, + 9, 14, -1, 0, 2, 14, 2, 7, 7, 14, 14, 19, 19, 7, 7, 14, 14, 19, -1, -1, 2, + 19, 2, 7, 7, 14, 14, 19, 19, 7, 7, 14, 14, 19, -1, -1, 2, 19, 0, 4, 4, 7, + 7, 12, 12, 4, 4, 7, 7, 12, -1, -1, 0, 12, 0, 4, 4, 7, 7, 12, 12, 4, 4, 7, + 7, 12, -3, -1, 0, 12, 0, 4, 4, 7, 7, 12, 12, 4, 4, 7, 7, 12, -3, -3, 0, 12, + 0, 4, 4, 7, 7, 12, 12, 4, 4, 7, 7, 12, -10, -3, 0, 12, -3, 2, 2, 6, 6, 12, + 12, 2, 2, 6, 6, 12, -10, -10, -3, 12, -3, 2, 2, 6, 6, 12, 12, 2, 2, 6, 6, + 12, -10, -5, -3, 12, -1, 2, 2, 7, 7, 11, 11, 2, 2, 7, 7, 11, -5, -5, -1, + 11, -1, 2, 2, 7, 7, 11, 11, 2, 2, 7, 7, 11, -5, -5, -1, 11, -2, 4, 4, 7, 7, + 13, 13, 4, 4, 7, 7, 13, -5, -5, -2, 13, -2, 4, 4, 7, 7, 13, 13, 4, 4, 7, 7, + 13, -7, -5, -2, 13, -3, 2, 2, 9, 9, 14, 14, 2, 2, 9, 9, 14, -7, -7, -3, 14, + -3, 2, 2, 9, 9, 14, 14, 2, 2, 9, 9, 14, -7, -7, -3, 14, -4, 2, 2, 5, 5, 11, + 11, 2, 2, 5, 5, 11, -7, -7, -4, 11, -4, 2, 2, 5, 5, 11, 11, 2, 2, 5, 5, 11, + -8, -7, -4, 11, -5, 0, 0, 7, 7, 12, 12, 0, 0, 7, 7, 12, -8, -8, -5, 12, -5, + 0, 0, 7, 7, 12, 12, 0, 0, 7, 7, 12, -8, -8, -5, 12, -7, -3, -3, 0, 0, 5, 5, + -3, -3, 0, 0, 5, -8, -8, -7, 5, -7, -3, -3, 0, 0, 5, 5, -3, -3, 0, 0, 5, + -10, -8, -7, 5, -7, -3, -3, 0, 0, 5, 5, -3, -3, 0, 0, 5, -10, -10, -7, 5, + -7, -3, -3, 0, 0, 5, 5, -3, -3, 0, 0, 5, -17, -10, -7, 5, -10, -5, -5, -1, + -1, 5, 5, -5, -5, -1, -1, 5, -17, -17, -10, 5, -10, -5, -5, -1, -1, 5, 5, + -5, -5, -1, -1, 5, -17, -12, -10, 5, -8, -5, -5, 0, 0, 4, 4, -5, -5, 0, 0, + 4, -12, -12, -8, 4, -8, -5, -5, 0, 0, 4, 4, -5, -5, 0, 0, 4, -12, -12, -8, + 4, -5, -2, -2, 0, 0, 4, 4, -2, -2, 0, 0, 4, -12, -12, -5, 4, -5, -2, -2, 0, + 0, 4, 4, -2, -2, 0, 0, 4, -19, -12, -5, 4, -7, -3, -3, 0, 0, 4, 4, -3, -3, + 0, 0, 4, -19, -19, -7, 4, -7, -3, -3, 0, 0, 4, 4, -3, -3, 0, 0, 4, -19, + -18, -7, 4, -12, -3, -3, 0, 0, 3, 3, -3, -3, 0, 0, 3, -18, -18, -12, 3, + -12, -3, -3, 0, 0, 3, 3, -3, -3, 0, 0, 3, -18, -16, -12, 3, -7, -1, -1, 0, + 0, 2, 2, -1, -1, 0, 0, 2, -16, -16, -7, 2, -7, -1, -1, 0, 0, 2, 2, -1, -1, + 0, 0, 2, -17, -16, -7, 2, -7, -5, -5, -1, -1, 2, 2, -5, -5, -1, -1, 2, -17, + -17, -7, 2, -7, -5, -5, -1, -1, 2, 2, -5, -5, -1, -1, 2, -17, -17, -7, + 2, -8, -5, -5, 0, 0, 4, 4, -5, -5, 0, 0, 4, -17, -17, -8, 4, -8, -5, -5, 0, + 0, 4, 4, -5, -5, 0, 0, 4, -17, -17, -8, 4, -10, -5, -5, 0, 0, 5, 5, -5, -5, + 0, 0, 5, -17, -17, -10, 5, -10, -5, -5, 0, 0, 5, 5, -5, -5, 0, 0, 5, -17, + -17, -10, 5,-10, -5, -5, -1, -1, 5, 5, -5, -5, -1, -1, 5, -17, -17, -10, 5, + -10, -5, -5,-1, -1, 5, 5, -5, -5, -1, -1, 5, -17, -17, -10, 5, -9, -3, -3, + 0, 0, 6, 6, -3,-3, 0, 0, 6, -17, -17, -9, 6, -9, -3, -3, 0, 0, 6, 6, -3, + -3, 0, 0, 6, -17,-17, -9, 6, -8, -5, -5, 0, 0, 7, 7, -5, -5, 0, 0, 7, -17, + -17, -8, 7, -8, -5,-5, 0, 0, 7, 7, -5, -5, 0, 0, 7, -17, -17, -8, 7, -10, + -5, -5, 0, 0, 5, 5, -5,-5, 0, 0, 5, -17, -17, -10, 5, -10, -5, -5, 0, 0, 5, + 5, -5, -5, 0, 0, 5, -17,-17, -10, 5, -10, -5, -5, -1, -1, 5, 5, -5, -5, -1, + -1, 5, -17, -17, -10, 5,-10, -5, -5, -1, -1, 5, 5, -5, -5, -1, -1, 5, -24, + -17, -10, 5, -12, -5, -5,-2, -2, 4, 4, -5, -5, -2, -2, 4, -24, -24, -12, 4, + -12, -5, -5, -2, -2, 4, 4,-5, -5, -2, -2, 4, -24, -24, -12, 4, -12, -7, -7, + -3, -3, 0, 0, 5, 0, 5, -3, 0,-3, 0, -3, 0, -7, -3, -7, -3, -7, -3, -10, -7, + -10, -7, -10, -7, -12, -10, -24,-24, -10, 7, 7, 11, 11, 14, 14, 17, 14, 17, + 11, 14, 11, 14, 11, 14, 7, 11, 7,11, 2, 11, 2, 5, 4, 5, 2, 4, -10, 2, -24, + -24, -12, 4, 7, 12, -24, -12, 4, 7, 12 + }; + + ScaleRecorder recorder; + recorder.Init(); + for (size_t i = 0; i < sizeof(prelude) / sizeof(int); ++i) { + float voltage = prelude[i] / 12.0f + Random::GetFloat() * 0.0001f; + recorder.NewNote(voltage); + recorder.UpdateVoltage(voltage); + recorder.AcceptNote(); + } + + Scale s; + recorder.ExtractScale(&s); + + for (int i = 0; i < s.num_degrees; ++i) { + printf("%f %d\n", s.degree[i].voltage, s.degree[i].weight); + } +} + +int main(void) { + // Test distributions and value processors. + // TestBetaDistribution(); + // TestQuantizer(); + // TestQuantizerNoise(); + + // Ramp tests. + // TestRampExtractor(FRIENDLY_PATTERNS, "marbles_ramp_extractor_friendly.wav"); + // TestRampExtractor(TRICKY_PATTERNS, "marbles_ramp_extractor_tricky.wav"); + // TestRampExtractor(FAST_PATTERNS, "marbles_ramp_extractor_fast.wav"); + // TestRampDivider(TRICKY_PATTERNS, "marbles_ramp_divider_tricky.wav"); + + // TestRampExtractorClockBug(); + // TestRampExtractorPause(); + + // TestOutputChannel(); + // TestXYGenerator(); + // TestXYGeneratorASR(); + // TestTGeneratorRampIntegrity(); + TestTGenerator(); + + // TestScaleRecorder(); +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/ramp_checker.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/ramp_checker.h new file mode 100644 index 00000000..7620deca --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/test/ramp_checker.h @@ -0,0 +1,84 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.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 MARBLES_TEST_RAMP_CHECKER_H_ +#define MARBLES_TEST_RAMP_CHECKER_H_ + +#include + +namespace marbles { + +class RampChecker { + public: + RampChecker() { + previous_phase_ = 0.0f; + counter_ = 0; + average_frequency_ = 0.1f; + stall_counter_ = 0; + } + ~RampChecker() { } + + void Error(const char* message) { + printf("RAMP ERROR: %.5f %s\n", float(counter_) / kSampleRate, message); + } + + void Check(float* ramp, size_t size) { + while (size--) { + float phase = *ramp++; + float frequency = phase - previous_phase_; + if (phase < 0.0f || phase > 1.0f) { + Error("incorrect ramp value"); + } + if (frequency < 0.0f) { + if (average_frequency_ < 0.05f) { + if (previous_phase_ < 0.75f) { + Error("reset without having reached maximum value"); + } + if (phase > 0.25f) { + Error("does not reset to zero"); + } + } + } else { + average_frequency_ += 0.1f * (frequency - average_frequency_); + } + + if (frequency == 0.0f && phase < 0.01f) { + ++stall_counter_; + if (stall_counter_ == 40) { + Error("Ramp stalls after reset"); + } + } else { + stall_counter_ = 0; + } + + if (counter_ > 10 && frequency > 0.5f) { + Error("High slope"); + } + + previous_phase_ = phase; + ++counter_; + } + } + private: + size_t stall_counter_; + float previous_phase_; + float average_frequency_; + size_t counter_; + DISALLOW_COPY_AND_ASSIGN(RampChecker); +}; + +} // namespace marbles + +#endif // MARBLES_TEST_RAMP_CHECKER_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/ui.cc b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ui.cc new file mode 100644 index 00000000..77e49a9c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ui.cc @@ -0,0 +1,533 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// User interface. + +#include "marbles/ui.h" + +#include + +#include "stmlib/system/system_clock.h" + +#include "marbles/drivers/clock_inputs.h" +#include "marbles/cv_reader.h" +#include "marbles/scale_recorder.h" +#include "marbles/settings.h" + +namespace marbles { + +const int32_t kLongPressDuration = 2000; + +using namespace std; +using namespace stmlib; + +/* static */ +const LedColor Ui::palette_[4] = { + LED_COLOR_GREEN, + LED_COLOR_YELLOW, + LED_COLOR_RED, + LED_COLOR_OFF +}; + +/* static */ +AlternateKnobMapping Ui::alternate_knob_mappings_[ADC_CHANNEL_LAST]; + +void Ui::Init( + Settings* settings, + CvReader* cv_reader, + ScaleRecorder* scale_recorder, + ClockInputs* clock_inputs) { + settings_ = settings; + cv_reader_ = cv_reader; + scale_recorder_ = scale_recorder; + clock_inputs_ = clock_inputs; + + leds_.Init(); + switches_.Init(); + queue_.Init(); + + // Initialize generator from settings_->state(); + fill(&pot_value_[0], &pot_value_[ADC_CHANNEL_LAST], 0.0f); + + State* state = settings_->mutable_state(); + alternate_knob_mappings_[ADC_CHANNEL_T_BIAS].unlock_switch = SWITCH_T_MODEL; + alternate_knob_mappings_[ADC_CHANNEL_T_BIAS].destination = &state->t_pulse_width_mean; + alternate_knob_mappings_[ADC_CHANNEL_T_JITTER].unlock_switch = SWITCH_T_MODEL; + alternate_knob_mappings_[ADC_CHANNEL_T_JITTER].destination = &state->t_pulse_width_std; + alternate_knob_mappings_[ADC_CHANNEL_T_RATE].unlock_switch = SWITCH_X_MODE; + alternate_knob_mappings_[ADC_CHANNEL_T_RATE].destination = &state->y_divider; + alternate_knob_mappings_[ADC_CHANNEL_X_SPREAD].unlock_switch = SWITCH_X_MODE; + alternate_knob_mappings_[ADC_CHANNEL_X_SPREAD].destination = &state->y_spread; + alternate_knob_mappings_[ADC_CHANNEL_X_BIAS].unlock_switch = SWITCH_X_MODE; + alternate_knob_mappings_[ADC_CHANNEL_X_BIAS].destination = &state->y_bias; + alternate_knob_mappings_[ADC_CHANNEL_X_STEPS].unlock_switch = SWITCH_X_MODE; + alternate_knob_mappings_[ADC_CHANNEL_X_STEPS].destination = &state->y_steps; + + setting_modification_flag_ = false; + output_test_mode_ = false; + + if (switches_.pressed_immediate(SWITCH_X_MODE)) { + if (state->color_blind == 1) { + state->color_blind = 0; + } else { + state->color_blind = 1; + } + settings_->SaveState(); + } + + deja_vu_lock_ = false; +} + +void Ui::SaveState() { + settings_->SaveState(); +} + +void Ui::Poll() { + // 1kHz. + system_clock.Tick(); + switches_.Debounce(); + + for (int i = 0; i < SWITCH_LAST; ++i) { + if (switches_.just_pressed(Switch(i))) { + queue_.AddEvent(CONTROL_SWITCH, i, 0); + press_time_[i] = system_clock.milliseconds(); + ignore_release_[i] = false; + } + if (switches_.pressed(Switch(i)) && !ignore_release_[i]) { + int32_t pressed_time = system_clock.milliseconds() - press_time_[i]; + if (pressed_time > kLongPressDuration && !setting_modification_flag_) { + queue_.AddEvent(CONTROL_SWITCH, i, pressed_time); + ignore_release_[i] = true; + } + } + if (switches_.released(Switch(i)) && !ignore_release_[i]) { + queue_.AddEvent( + CONTROL_SWITCH, + i, + system_clock.milliseconds() - press_time_[i] + 1); + ignore_release_[i] = true; + } + } + + UpdateLEDs(); +} + +/* static */ +LedColor Ui::MakeColor(uint8_t value, bool color_blind) { + bool slow_blink = (system_clock.milliseconds() & 255) > 128; + + uint8_t bank = value >= 3 ? 1 : 0; + value -= bank * 3; + + LedColor color = palette_[value]; + if (color_blind) { + uint8_t pwm_counter = system_clock.milliseconds() & 15; + uint8_t triangle = (system_clock.milliseconds() >> 5) & 31; + triangle = triangle < 16 ? triangle : 31 - triangle; + + if (value == 0) { + color = pwm_counter < (4 + (triangle >> 2)) + ? LED_COLOR_GREEN + : LED_COLOR_OFF; + } else if (value == 1) { + color = LED_COLOR_YELLOW; + } else { + color = pwm_counter == 0 ? LED_COLOR_RED : LED_COLOR_OFF; + } + } + + return slow_blink || !bank ? color : LED_COLOR_OFF; +} + +void Ui::UpdateLEDs() { + bool blink = (system_clock.milliseconds() & 127) > 64; + bool slow_blink = (system_clock.milliseconds() & 255) > 128; + bool fast_blink = (system_clock.milliseconds() & 63) > 32; + const State& state = settings_->state(); + bool cb = state.color_blind == 1; + + LedColor scale_color = state.x_scale < 3 + ? (slow_blink ? palette_[state.x_scale] : LED_COLOR_OFF) + : (fast_blink ? palette_[state.x_scale - 3] : LED_COLOR_OFF); + + if (cb) { + int poly_counter = (system_clock.milliseconds() >> 6) % 12; + if ((poly_counter >> 1) < (state.x_scale + 1) && (poly_counter & 1)) { + scale_color = LED_COLOR_YELLOW; + } else { + scale_color = LED_COLOR_OFF; + } + } + + leds_.Clear(); + + int slow_triangle = (system_clock.milliseconds() & 1023) >> 5; + slow_triangle = slow_triangle >= 16 ? 31 - slow_triangle : slow_triangle; + int pw = system_clock.milliseconds() & 15; + bool deja_vu_glow = !deja_vu_lock_ || (slow_triangle >= pw); + + switch (mode_) { + case UI_MODE_NORMAL: + case UI_MODE_RECORD_SCALE: + { + leds_.set(LED_T_MODEL, MakeColor(state.t_model, cb)); + leds_.set(LED_T_RANGE, MakeColor(state.t_range, cb)); + leds_.set(LED_T_DEJA_VU, + state.t_deja_vu && deja_vu_glow ? + LED_COLOR_GREEN : LED_COLOR_OFF); + leds_.set(LED_X_CONTROL_MODE, MakeColor(state.x_control_mode, cb)); + leds_.set(LED_X_DEJA_VU, + state.x_deja_vu && deja_vu_glow ? + LED_COLOR_GREEN : LED_COLOR_OFF); + + if (mode_ == UI_MODE_NORMAL) { + leds_.set(LED_X_RANGE, + state.x_register_mode + ? LED_COLOR_OFF + : MakeColor(state.x_range, cb)); + leds_.set(LED_X_EXT, + state.x_register_mode ? LED_COLOR_GREEN : LED_COLOR_OFF); + } else { + leds_.set(LED_X_RANGE, scale_color); + leds_.set(LED_X_EXT, LED_COLOR_GREEN); + } + } + break; + + case UI_MODE_SELECT_SCALE: + leds_.set(LED_X_RANGE, scale_color); + break; + + case UI_MODE_CALIBRATION_1: + leds_.set(LED_T_RANGE, blink ? MakeColor(0, cb) : LED_COLOR_OFF); + break; + + case UI_MODE_CALIBRATION_2: + leds_.set(LED_T_RANGE, blink ? MakeColor(1, cb) : LED_COLOR_OFF); + break; + + case UI_MODE_CALIBRATION_3: + leds_.set(LED_X_RANGE, blink ? MakeColor(0, cb) : LED_COLOR_OFF); + break; + + case UI_MODE_CALIBRATION_4: + leds_.set(LED_X_RANGE, blink ? MakeColor(1, cb) : LED_COLOR_OFF); + break; + + case UI_MODE_PANIC: + leds_.set(LED_T_MODEL, blink ? LED_COLOR_RED : LED_COLOR_OFF); + leds_.set(LED_T_RANGE, !blink ? LED_COLOR_RED : LED_COLOR_OFF); + leds_.set(LED_X_CONTROL_MODE, !blink ? LED_COLOR_RED : LED_COLOR_OFF); + leds_.set(LED_X_RANGE, blink ? LED_COLOR_RED : LED_COLOR_OFF); + break; + } + leds_.Write(); +} + +void Ui::FlushEvents() { + queue_.Flush(); +} + +void Ui::OnSwitchPressed(const Event& e) { + +} + +void Ui::OnSwitchReleased(const Event& e) { + if (setting_modification_flag_) { + for (int i = 0; i < ADC_CHANNEL_LAST; ++i) { + cv_reader_->mutable_channel(i)->UnlockPot(); + } + setting_modification_flag_ = false; + return; + } + + // Check if the other switch is still pressed. + if (e.control_id == SWITCH_T_RANGE && switches_.pressed(SWITCH_X_RANGE)) { + mode_ = UI_MODE_CALIBRATION_1; + ignore_release_[SWITCH_T_RANGE] = ignore_release_[SWITCH_X_RANGE] = true; + return; + } + + State* state = settings_->mutable_state(); + switch (e.control_id) { + case SWITCH_T_DEJA_VU: + state->t_deja_vu = !state->t_deja_vu; + break; + + case SWITCH_X_DEJA_VU: + state->x_deja_vu = !state->x_deja_vu; + break; + + case SWITCH_T_MODEL: + { + uint8_t bank = state->t_model / 3; + if (e.data >= kLongPressDuration) { + if (!bank) { + state->t_model += 3; + } + } else { + if (bank) { + state->t_model -= 3; + } else { + state->t_model = (state->t_model + 1) % 3; + } + } + SaveState(); + } + break; + + case SWITCH_T_RANGE: + { + if (mode_ >= UI_MODE_CALIBRATION_1 && mode_ <= UI_MODE_CALIBRATION_4) { + NextCalibrationStep(); + } else { + state->t_range = (state->t_range + 1) % 3; + } + SaveState(); + } + break; + + case SWITCH_X_MODE: + state->x_control_mode = (state->x_control_mode + 1) % 3; + SaveState(); + break; + + case SWITCH_X_EXT: + if (mode_ == UI_MODE_RECORD_SCALE) { + int scale_index = settings_->state().x_scale; + bool success = true; + if (e.data >= kLongPressDuration) { + settings_->ResetScale(scale_index); + } else { + success = scale_recorder_->ExtractScale( + settings_->mutable_scale(scale_index)); + } + if (success) { + settings_->SavePersistentData(); + settings_->set_dirty_scale_index(scale_index); + } + mode_ = UI_MODE_NORMAL; + } else if (e.data >= kLongPressDuration) { + mode_ = UI_MODE_RECORD_SCALE; + scale_recorder_->Clear(); + } else { + state->x_register_mode = !state->x_register_mode; + SaveState(); + } + break; + + case SWITCH_X_RANGE: + if (mode_ >= UI_MODE_CALIBRATION_1 && mode_ <= UI_MODE_CALIBRATION_4) { + NextCalibrationStep(); + } else if (e.data >= kLongPressDuration) { + if (mode_ == UI_MODE_NORMAL) { + mode_ = UI_MODE_SELECT_SCALE; + } + } else if (mode_ == UI_MODE_SELECT_SCALE) { + state->x_scale = (state->x_scale + 1) % kNumScales; + } else { + if (!state->x_register_mode) { + state->x_range = (state->x_range + 1) % 3; + } + } + SaveState(); + break; + } +} + +void Ui::TerminateScaleRecording() { + for (int i = 0; i < ADC_CHANNEL_LAST; ++i) { + cv_reader_->mutable_channel(i)->UnlockPot(); + } + mode_ = UI_MODE_NORMAL; +} + +void Ui::NextCalibrationStep() { + switch (mode_) { + case UI_MODE_CALIBRATION_1: + cv_reader_->CalibrateOffsets(); + cv_reader_->CalibrateRateC1(); + mode_ = UI_MODE_CALIBRATION_2; + break; + + case UI_MODE_CALIBRATION_2: + cv_reader_->CalibrateRateC3(); + mode_ = UI_MODE_CALIBRATION_3; + break; + + case UI_MODE_CALIBRATION_3: + cv_reader_->CalibrateSpreadC1(); + mode_ = UI_MODE_CALIBRATION_4; + break; + + case UI_MODE_CALIBRATION_4: + if (cv_reader_->CalibrateSpreadC3()) { + settings_->SavePersistentData(); + mode_ = UI_MODE_NORMAL; + } else { + mode_ = UI_MODE_PANIC; + } + break; + + default: + break; + } +} + +void Ui::UpdateHiddenParameters() { + // Check if some pots have been moved. + for (int i = 0; i < ADC_CHANNEL_LAST; ++i) { + float new_value = cv_reader_->channel(i).unscaled_pot(); + float old_value = pot_value_[i]; + bool changed = fabs(new_value - old_value) >= 0.008f; + if (changed) { + pot_value_[i] = new_value; + AlternateKnobMapping mapping = alternate_knob_mappings_[i]; + if (switches_.pressed(mapping.unlock_switch)) { + if (mapping.unlock_switch == SWITCH_T_RANGE && new_value < 0.1f) { + new_value = 0.0f; + } + *mapping.destination = static_cast(new_value * 255.0f); + cv_reader_->mutable_channel(i)->LockPot(); + + // The next time a switch is released, we unlock the pots. + setting_modification_flag_ = true; + } + } + } +} + +void Ui::DoEvents() { + while (queue_.available()) { + Event e = queue_.PullEvent(); + if (e.control_type == CONTROL_SWITCH) { + if (e.data == 0) { + OnSwitchPressed(e); + } else { + OnSwitchReleased(e); + } + } + } + + UpdateHiddenParameters(); + + if (queue_.idle_time() > 800 && mode_ == UI_MODE_PANIC) { + mode_ = UI_MODE_NORMAL; + } + if (mode_ == UI_MODE_SELECT_SCALE) { + if (queue_.idle_time() > 4000) { + mode_ = UI_MODE_NORMAL; + queue_.Touch(); + } + } else if (queue_.idle_time() > 1000) { + queue_.Touch(); + } +} + +uint8_t Ui::HandleFactoryTestingRequest(uint8_t command) { + uint8_t argument = command & 0x1f; + command = command >> 5; + uint8_t reply = 0; + switch (command) { + case FACTORY_TESTING_READ_POT: + case FACTORY_TESTING_READ_CV: + reply = cv_reader_->adc_value(argument); + break; + + case FACTORY_TESTING_READ_NORMALIZATION: + reply = clock_inputs_->is_normalized(ClockInput(argument)) ? 255 : 0; + break; + + case FACTORY_TESTING_READ_GATE: + reply = argument >= SWITCH_LAST + ? clock_inputs_->value(ClockInput(argument - SWITCH_LAST)) + : switches_.pressed(Switch(argument)); + break; + + case FACTORY_TESTING_GENERATE_TEST_SIGNALS: + output_test_mode_ = static_cast(argument); + fill( + &output_test_forced_dac_code_[0], + &output_test_forced_dac_code_[4], + 0); + break; + + case FACTORY_TESTING_CALIBRATE: + if (argument == 0) { + // Revert all settings before getting into calibration mode. + settings_->mutable_state()->t_deja_vu = 0; + settings_->mutable_state()->x_deja_vu = 0; + settings_->mutable_state()->t_model = 0; + settings_->mutable_state()->t_range = 1; + settings_->mutable_state()->x_control_mode = 0; + settings_->mutable_state()->x_range = 2; + settings_->mutable_state()->x_register_mode = 0; + settings_->SavePersistentData(); + + mode_ = UI_MODE_CALIBRATION_1; + } else { + NextCalibrationStep(); + } + { + const CalibrationData& cal = settings_->calibration_data(); + float voltage = (argument & 1) == 0 ? 1.0f : 3.0f; + for (int i = 0; i < 4; ++i) { + output_test_forced_dac_code_[i] = static_cast( + voltage * cal.dac_scale[i] + cal.dac_offset[i]); + } + } + queue_.Touch(); + break; + + case FACTORY_TESTING_FORCE_DAC_CODE: + { + int channel = argument >> 2; + int step = argument & 0x3; + if (step == 0) { + output_test_forced_dac_code_[channel] = 0xaf35; + } else if (step == 1) { + output_test_forced_dac_code_[channel] = 0x1d98; + } else { + CalibrationData* cal = settings_->mutable_calibration_data(); + cal->dac_offset[channel] = static_cast( + calibration_data_ & 0xffff); + cal->dac_scale[channel] = static_cast( + calibration_data_ >> 16) * -0.125f; + output_test_forced_dac_code_[channel] = static_cast(cal->dac_scale[channel] + cal->dac_offset[channel]); + settings_->SavePersistentData(); + } + } + break; + + case FACTORY_TESTING_WRITE_CALIBRATION_DATA_NIBBLE: + calibration_data_ <<= 4; + calibration_data_ |= argument & 0xf; + break; + } + return reply; +} + +} // namespace marbles diff --git a/plugins/community/repos/AudibleInstruments/eurorack/marbles/ui.h b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ui.h new file mode 100644 index 00000000..04e09327 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/marbles/ui.h @@ -0,0 +1,146 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// User interface. + +#ifndef MARBLES_UI_H_ +#define MARBLES_UI_H_ + +#include "stmlib/stmlib.h" + +#include "stmlib/ui/event_queue.h" + +#include "marbles/drivers/adc.h" +#include "marbles/drivers/leds.h" +#include "marbles/drivers/switches.h" + +namespace marbles { + +class ClockInputs; +class CvReader; +class ScaleRecorder; +class Settings; + +enum UiMode { + UI_MODE_NORMAL, + UI_MODE_SELECT_SCALE, + UI_MODE_RECORD_SCALE, + UI_MODE_CALIBRATION_1, + UI_MODE_CALIBRATION_2, + UI_MODE_CALIBRATION_3, + UI_MODE_CALIBRATION_4, + UI_MODE_PANIC, +}; + +enum FactoryTestingCommand { + FACTORY_TESTING_READ_POT, + FACTORY_TESTING_READ_CV, + FACTORY_TESTING_READ_GATE, + FACTORY_TESTING_GENERATE_TEST_SIGNALS, + FACTORY_TESTING_CALIBRATE, + FACTORY_TESTING_READ_NORMALIZATION, + FACTORY_TESTING_FORCE_DAC_CODE, + FACTORY_TESTING_WRITE_CALIBRATION_DATA_NIBBLE, +}; + +struct AlternateKnobMapping { + Switch unlock_switch; + uint8_t* destination; +}; + +class Ui { + public: + Ui() { } + ~Ui() { } + + void Init( + Settings* settings, + CvReader* cv_reader, + ScaleRecorder* scale_recorder, + ClockInputs* clock_inputs); + void Poll(); + void DoEvents(); + void FlushEvents(); + uint8_t HandleFactoryTestingRequest(uint8_t command); + + bool recording_scale() const { + return mode_ == UI_MODE_RECORD_SCALE; + } + + bool output_test_mode() const { + return output_test_mode_; + } + + uint16_t output_test_forced_dac_code(int i) const { + return output_test_forced_dac_code_[i]; + } + + void set_deja_vu_lock(bool deja_vu_lock) { + deja_vu_lock_ = deja_vu_lock; + } + + private: + void UpdateLEDs(); + void OnSwitchPressed(const stmlib::Event& e); + void OnSwitchReleased(const stmlib::Event& e); + void NextCalibrationStep(); + void SaveState(); + void UpdateHiddenParameters(); + void TerminateScaleRecording(); + static LedColor MakeColor(uint8_t value, bool color_blind); + + stmlib::EventQueue<16> queue_; + + Leds leds_; + Switches switches_; + uint32_t press_time_[SWITCH_LAST]; + bool ignore_release_[SWITCH_LAST]; + + UiMode mode_; + + Settings* settings_; + CvReader* cv_reader_; + ScaleRecorder* scale_recorder_; + ClockInputs* clock_inputs_; + + static const LedColor palette_[4]; + static AlternateKnobMapping alternate_knob_mappings_[ADC_CHANNEL_LAST]; + + float pot_value_[ADC_CHANNEL_LAST]; + + bool setting_modification_flag_; + bool deja_vu_lock_; + + bool output_test_mode_; + uint16_t output_test_forced_dac_code_[4]; + uint32_t calibration_data_; + + DISALLOW_COPY_AND_ASSIGN(Ui); +}; + +} // namespace marbles + +#endif // MARBLES_UI_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/__init__.py b/plugins/community/repos/AudibleInstruments/eurorack/plaits/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/bootloader/bootloader.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/bootloader/bootloader.cc new file mode 100644 index 00000000..4338f31c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/bootloader/bootloader.cc @@ -0,0 +1,267 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. + +#include +#include + +#include "stmlib/system/bootloader_utils.h" +#include "stmlib/system/flash_programming.h" +#include "stmlib/system/system_clock.h" + +#include "stm_audio_bootloader/qpsk/packet_decoder.h" +#include "stm_audio_bootloader/qpsk/demodulator.h" + +#include "plaits/drivers/audio_dac.h" +#include "plaits/drivers/firmware_update_adc.h" +#include "plaits/drivers/leds.h" +#include "plaits/drivers/switches.h" + +extern "C" { + +void NMI_Handler() { } +void HardFault_Handler() { while (1); } +void MemManage_Handler() { while (1); } +void BusFault_Handler() { while (1); } +void UsageFault_Handler() { while (1); } +void SVC_Handler() { } +void DebugMon_Handler() { } +void PendSV_Handler() { } + +} + +using namespace plaits; +using namespace std; +using namespace stm_audio_bootloader; +using namespace stmlib; + +const double kSampleRate = 48000.0; +const double kModulationRate = 6000.0; +const double kBitRate = 12000.0; +const uint32_t kStartAddress = 0x08008000; +const uint16_t kPacketsPerPage = PAGE_SIZE / kPacketSize; + +enum UiState { + UI_STATE_WAITING, + UI_STATE_RECEIVING, + UI_STATE_ERROR, + UI_STATE_WRITING +}; + +AudioDac audio_dac; +FirmwareUpdateAdc adc; +Leds leds; +Switches switches; +PacketDecoder decoder; +Demodulator demodulator; + +int discard_samples = 8000; +int32_t peak = 0; +int32_t gain_pot = 0; +uint32_t current_address; +uint16_t packet_index; +uint8_t rx_buffer[PAGE_SIZE]; + +volatile bool switch_released = false; +volatile UiState ui_state; + +inline void UpdateLeds() { + leds.Clear(); + + // Show bargraph on the upper 4 LEDs. + int32_t pwm = system_clock.milliseconds() & 15; + leds.set(3, (peak >> 9) > pwm ? LED_COLOR_GREEN : 0); + leds.set(2, ((peak - 8192) >> 9) >= pwm ? LED_COLOR_GREEN : 0); + leds.set(1, ((peak - 16384) >> 9) >= pwm ? LED_COLOR_YELLOW : 0); + leds.set(0, ((peak - 16384 - 8192) >> 9) >= pwm ? LED_COLOR_RED : 0); + + // Show status info on the lower 4 LEDs. + switch (ui_state) { + case UI_STATE_WAITING: + { + bool on = system_clock.milliseconds() & 128; + for (int i = 4; i < 8; ++i) { + leds.set(i, on ? LED_COLOR_YELLOW : LED_COLOR_OFF); + } + } + break; + + case UI_STATE_RECEIVING: + { + int stage = (system_clock.milliseconds() >> 7) & 3; + leds.set(stage + 4, LED_COLOR_GREEN); + } + break; + + case UI_STATE_ERROR: + { + bool on = system_clock.milliseconds() & 256; + for (int i = 0; i < 8; ++i) { + leds.set(i, on ? LED_COLOR_RED : LED_COLOR_OFF); + } + } + break; + + case UI_STATE_WRITING: + { + for (uint8_t i = 4; i < 8; ++i) { + leds.set(i, LED_COLOR_GREEN); + } + } + break; + } + leds.Write(); +} + +extern "C" { + +void SysTick_Handler() { + system_clock.Tick(); + switches.Debounce(); + if (switches.released(Switch(0))) { + switch_released = true; + } + UpdateLeds(); +} + +} + +void ProgramPage(const uint8_t* data, size_t size) { + FLASH_Unlock(); + FLASH_ErasePage(current_address); + const uint32_t* words = static_cast( + static_cast(data)); + for (size_t written = 0; written < size; written += 4) { + FLASH_ProgramWord(current_address, *words++); + current_address += 4; + } +} + +void FillBuffer(AudioDac::Frame* output, size_t size) { + gain_pot = (adc.gain_pot() + 4095 * gain_pot) >> 12; + int32_t sample = 32768 - static_cast(adc.sample()); + adc.Convert(); + + int32_t gain = ((gain_pot >> 1) * gain_pot >> 21) + 128; + sample = sample * gain >> 8; + CONSTRAIN(sample, -32767, 32767) + + int32_t rect = abs(sample); + peak = rect > peak ? rect : (rect + 32767 * peak) >> 15; + + if (!discard_samples) { + demodulator.PushSample(2048 + (sample >> 4)); + } else { + --discard_samples; + } + output->l = -sample; + output->r = -sample; +} + +void InitializeReception() { + decoder.Init(1000, true); + demodulator.Init( + kModulationRate / kSampleRate * 4294967296.0, + kSampleRate / kModulationRate, + 2.0 * kSampleRate / kBitRate); + demodulator.SyncCarrier(true); + decoder.Reset(); + current_address = kStartAddress; + packet_index = 0; + ui_state = UI_STATE_WAITING; +} + +void Init() { + adc.Init(); + leds.Init(); + switches.Init(); + audio_dac.Init(48000, 1); + audio_dac.Start(&FillBuffer); + SysTick_Config(F_CPU / 1000); +} + +int main(void) { + Init(); + InitializeReception(); + + bool exit_updater = !switches.pressed_immediate(Switch(0)); + while (!exit_updater) { + bool error = false; + + if (demodulator.state() == DEMODULATOR_STATE_OVERFLOW) { + error = true; + } else { + demodulator.ProcessAtLeast(32); + } + + while (demodulator.available() && !error && !exit_updater) { + uint8_t symbol = demodulator.NextSymbol(); + PacketDecoderState state = decoder.ProcessSymbol(symbol); + switch (state) { + case PACKET_DECODER_STATE_OK: + { + ui_state = UI_STATE_RECEIVING; + memcpy( + rx_buffer + (packet_index % kPacketsPerPage) * kPacketSize, + decoder.packet_data(), + kPacketSize); + ++packet_index; + if ((packet_index % kPacketsPerPage) == 0) { + ui_state = UI_STATE_WRITING; + ProgramPage(rx_buffer, PAGE_SIZE); + decoder.Reset(); + demodulator.SyncCarrier(false); + ui_state = UI_STATE_RECEIVING; + } else { + decoder.Reset(); + demodulator.SyncDecision(); + } + } + break; + case PACKET_DECODER_STATE_ERROR_CRC: + case PACKET_DECODER_STATE_ERROR_SYNC: + error = true; + break; + break; + case PACKET_DECODER_STATE_END_OF_TRANSMISSION: + exit_updater = true; + break; + default: + break; + } + } + + if (error) { + ui_state = UI_STATE_ERROR; + switch_released = false; + while (!switch_released); // Polled in ISR + InitializeReception(); + } + } + + adc.DeInit(); + audio_dac.Stop(); + Uninitialize(); + JumpTo(kStartAddress); + while (1) { } +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/bootloader/makefile b/plugins/community/repos/AudibleInstruments/eurorack/plaits/bootloader/makefile new file mode 100644 index 00000000..ab247a26 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/bootloader/makefile @@ -0,0 +1,46 @@ +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. + +# System specifications +F_CRYSTAL = 8000000L +F_CPU = 72000000L +SYSCLOCK = SYSCLK_FREQ_72MHz +FAMILY = f37x +# USB = enabled + +# Preferred upload command +UPLOAD_COMMAND = upload_jtag_erase_first + +# Packages to build +TARGET = plaits_bootloader +PACKAGES = plaits/bootloader \ + plaits/drivers \ + stm_audio_bootloader/qpsk \ + stmlib/dsp \ + stmlib/utils \ + stmlib/system + +TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ + +include stmlib/makefile.inc diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/audio_dac.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/audio_dac.cc new file mode 100644 index 00000000..06eba4f5 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/audio_dac.cc @@ -0,0 +1,132 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the PCM5100 DAC. + +#include "plaits/drivers/audio_dac.h" + +#include + +namespace plaits { + +/* static */ +AudioDac* AudioDac::instance_; + +void AudioDac::Init(int sample_rate, size_t block_size) { + instance_ = this; + block_size_ = block_size; + callback_ = NULL; + InitializeGPIO(); + InitializeAudioInterface(sample_rate); + InitializeDMA(block_size); +} + +void AudioDac::InitializeGPIO() { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11; + GPIO_Init(GPIOA, &gpio_init); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_5); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_5); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_5); +} + +void AudioDac::InitializeAudioInterface(int sample_rate) { + RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); + SPI_I2S_DeInit(SPI2); + I2S_InitTypeDef i2s_init; + i2s_init.I2S_Mode = I2S_Mode_MasterTx; + i2s_init.I2S_Standard = I2S_Standard_Phillips; + i2s_init.I2S_DataFormat = I2S_DataFormat_16b; + i2s_init.I2S_MCLKOutput = I2S_MCLKOutput_Disable; + i2s_init.I2S_AudioFreq = sample_rate; + i2s_init.I2S_CPOL = I2S_CPOL_Low; + I2S_Init(SPI2, &i2s_init); + I2S_Cmd(SPI2, ENABLE); +} + +void AudioDac::InitializeDMA(size_t block_size) { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); + + DMA_Cmd(DMA1_Channel5, DISABLE); + DMA_DeInit(DMA1_Channel5); + + DMA_InitTypeDef dma_init; + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR); + dma_init.DMA_MemoryBaseAddr = (uint32_t)(&tx_dma_buffer_[0]); + dma_init.DMA_DIR = DMA_DIR_PeripheralDST; + dma_init.DMA_BufferSize = 2 * block_size * 2; // 2 channels, 2 half blocks. + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(DMA1_Channel5, &dma_init); + + // Enable the interrupts: half transfer and transfer complete. + DMA_ITConfig(DMA1_Channel5, DMA_IT_TC | DMA_IT_HT, ENABLE); + + // Enable the IRQ. + NVIC_EnableIRQ(DMA1_Channel5_IRQn); + + SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE); +} + +void AudioDac::Start(FillBufferCallback callback) { + callback_ = callback; + DMA_Cmd(DMA1_Channel5, ENABLE); +} + +void AudioDac::Stop() { + DMA_Cmd(DMA1_Channel5, DISABLE); +} + +void AudioDac::Fill(size_t offset) { + (*callback_)(&tx_dma_buffer_[offset * block_size_], block_size_); +} + +} // namespace plaits + +extern "C" { + +void DMA1_Channel5_IRQHandler(void) { + uint32_t flags = DMA1->ISR; + DMA1->IFCR = DMA1_FLAG_TC5 | DMA1_FLAG_HT5; + if (flags & DMA1_FLAG_TC5) { + plaits::AudioDac::GetInstance()->Fill(1); + } else if (flags & DMA1_FLAG_HT5) { + plaits::AudioDac::GetInstance()->Fill(0); + } +} + +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/audio_dac.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/audio_dac.h new file mode 100644 index 00000000..cc585136 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/audio_dac.h @@ -0,0 +1,73 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the PCM5100 DAC. + +#ifndef PLAITS_DRIVERS_DAC_H_ +#define PLAITS_DRIVERS_DAC_H_ + +#include "stmlib/stmlib.h" + +namespace plaits { + +const size_t kMaxCodecBlockSize = 24; + +class AudioDac { + public: + AudioDac() { } + ~AudioDac() { } + + typedef struct { + short l; + short r; + } Frame; + + typedef void (*FillBufferCallback)(Frame* tx, size_t size); + + void Init(int sample_rate, size_t block_size); + void Start(FillBufferCallback callback); + void Stop(); + void Fill(size_t offset); + + static AudioDac* GetInstance() { return instance_; } + + private: + void InitializeGPIO(); + void InitializeAudioInterface(int sample_rate); + void InitializeDMA(size_t block_size); + static AudioDac* instance_; + + size_t block_size_; + FillBufferCallback callback_; + + Frame tx_dma_buffer_[kMaxCodecBlockSize * 2]; + + DISALLOW_COPY_AND_ASSIGN(AudioDac); +}; + +} // namespace plaits + +#endif // PLAITS_DRIVERS_DAC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/cv_adc.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/cv_adc.cc new file mode 100644 index 00000000..93b8be87 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/cv_adc.cc @@ -0,0 +1,193 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 16-bit SDADC scanning the CVs. + +#include "plaits/drivers/cv_adc.h" + +#include + +namespace plaits { + +struct ChannelConfiguration { + CvAdcChannel map_to; + uint32_t channel; + GPIO_TypeDef* gpio; + uint16_t pin; +}; + +struct ConverterConfiguration { + SDADC_TypeDef* sdadc; + DMA_Channel_TypeDef* dma_channel; + int num_channels; + ChannelConfiguration channel[3]; +}; + +const ConverterConfiguration converter_configuration[3] = { + { + SDADC1, DMA2_Channel3, 3, { + { CV_ADC_CHANNEL_TIMBRE, SDADC_Channel_4, GPIOB, GPIO_Pin_2 }, + { CV_ADC_CHANNEL_MODEL, SDADC_Channel_5, GPIOB, GPIO_Pin_1 }, + { CV_ADC_CHANNEL_TRIGGER, SDADC_Channel_6, GPIOB, GPIO_Pin_0 } + } + }, + { + SDADC2, DMA2_Channel4, 2, { + { CV_ADC_CHANNEL_FM, SDADC_Channel_7, GPIOE, GPIO_Pin_9 }, + { CV_ADC_CHANNEL_LEVEL, SDADC_Channel_8, GPIOE, GPIO_Pin_8 } + } + }, + { + SDADC3, DMA2_Channel5, 3, { + { CV_ADC_CHANNEL_HARMONICS, SDADC_Channel_6, GPIOD, GPIO_Pin_8 }, + { CV_ADC_CHANNEL_MORPH, SDADC_Channel_7, GPIOB, GPIO_Pin_15 }, + { CV_ADC_CHANNEL_V_OCT, SDADC_Channel_8, GPIOB, GPIO_Pin_14 } + } + }, +}; + +void CvAdc::Init() { + // Power all the SDADCs. + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + PWR_SDADCAnalogCmd(PWR_SDADCAnalog_1, ENABLE); + PWR_SDADCAnalogCmd(PWR_SDADCAnalog_2, ENABLE); + PWR_SDADCAnalogCmd(PWR_SDADCAnalog_3, ENABLE); + + // Enable SDADC clock. + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDADC1, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDADC2, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDADC3, ENABLE); + RCC_SDADCCLKConfig(RCC_SDADCCLK_SYSCLK_Div12); + + // Enable DMA2 clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); + + // Enable GPIO clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE); + + // Init SDADC + SDADC_VREFSelect(SDADC_VREF_Ext); + + DMA_InitTypeDef dma_init; + GPIO_InitTypeDef gpio_init; + SDADC_AINStructTypeDef sdadc_ain; + + // Fill structures with the settings common to all channels/pins. + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + + sdadc_ain.SDADC_InputMode = SDADC_InputMode_SEZeroReference; + sdadc_ain.SDADC_Gain = SDADC_Gain_1; + sdadc_ain.SDADC_CommonMode = SDADC_CommonMode_VDDA_2; + sdadc_ain.SDADC_Offset = 0; + + int current_channel = 0; + + // Configure all SDADCs, all their input channels, and all the DMA channels. + for (int i = 0; i < 3; ++i) { + const ConverterConfiguration& config = converter_configuration[i]; + + // Wait for SDADC to stabilize. + SDADC_Cmd(config.sdadc, ENABLE); + while (SDADC_GetFlagStatus(config.sdadc, SDADC_FLAG_STABIP) == SET); + + // Configure GPIO pins. + for (int j = 0; j < config.num_channels; ++j) { + gpio_init.GPIO_Pin = config.channel[j].pin; + GPIO_Init(config.channel[j].gpio, &gpio_init); + } + + // SDADC enters initialization mode. + SDADC_InitModeCmd(config.sdadc, ENABLE); + while (SDADC_GetFlagStatus(config.sdadc, SDADC_FLAG_INITRDY) == RESET); + + // Configure DMA to read injected values into a slice of the + // values_ array. + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&(config.sdadc->JDATAR); + dma_init.DMA_MemoryBaseAddr = (uint32_t)(&values_[current_channel]); + dma_init.DMA_DIR = DMA_DIR_PeripheralSRC; + dma_init.DMA_BufferSize = config.num_channels; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(config.dma_channel, &dma_init); + + // Create a configuration and assign it to all channels used by this SDADC. + SDADC_AINInit(config.sdadc, SDADC_Conf_0, &sdadc_ain); + uint32_t channels = 0; + for (int j = 0; j < config.num_channels; ++j) { + channel_map_[config.channel[j].map_to] = current_channel++; + channels |= config.channel[j].channel; + SDADC_ChannelConfig( + config.sdadc, config.channel[j].channel, SDADC_Conf_0); + } + + // Select injected channels. + SDADC_InjectedChannelSelect(config.sdadc, channels); + + // Disable continuous mode - the conversions are restarted every time + // we render a block of samples. + SDADC_InjectedContinuousModeCmd(config.sdadc, DISABLE); + + // Terminate initialization sequence. + SDADC_CalibrationSequenceConfig(config.sdadc, SDADC_CalibrationSequence_3); + SDADC_InitModeCmd(config.sdadc, DISABLE); + while (SDADC_GetFlagStatus(config.sdadc, SDADC_FLAG_INITRDY) == SET); + + // Run calibration sequence. + SDADC_StartCalibration(config.sdadc); + while (SDADC_GetFlagStatus(config.sdadc, SDADC_FLAG_EOCAL) == RESET); + + // Enable DMA. + DMA_Cmd(config.dma_channel, ENABLE); + SDADC_DMAConfig(config.sdadc, SDADC_DMATransfer_Injected, ENABLE); + } + Convert(); +} + +void CvAdc::DeInit() { + for (int i = 0; i < 3; ++i) { + const ConverterConfiguration& config = converter_configuration[i]; + SDADC_Cmd(config.sdadc, DISABLE); + SDADC_DMAConfig(config.sdadc, SDADC_DMATransfer_Injected, DISABLE); + DMA_Cmd(config.dma_channel, DISABLE); + } +} + +void CvAdc::Convert() { + SDADC_SoftwareStartInjectedConv(SDADC1); + SDADC_SoftwareStartInjectedConv(SDADC2); + SDADC_SoftwareStartInjectedConv(SDADC3); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/cv_adc.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/cv_adc.h new file mode 100644 index 00000000..e1131534 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/cv_adc.h @@ -0,0 +1,74 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 16-bit SDADC scanning the CV inputs. + +#ifndef PLAITS_DRIVERS_CV_ADC_H_ +#define PLAITS_DRIVERS_CV_ADC_H_ + +#include "stmlib/stmlib.h" + +namespace plaits { + +enum CvAdcChannel { + CV_ADC_CHANNEL_MODEL, + CV_ADC_CHANNEL_V_OCT, + CV_ADC_CHANNEL_FM, + CV_ADC_CHANNEL_HARMONICS, + CV_ADC_CHANNEL_TIMBRE, + CV_ADC_CHANNEL_MORPH, + CV_ADC_CHANNEL_TRIGGER, + CV_ADC_CHANNEL_LEVEL, + CV_ADC_CHANNEL_LAST +}; + +class CvAdc { + public: + CvAdc() { } + ~CvAdc() { } + + void Init(); + void DeInit(); + void Convert(); + + inline int16_t value(CvAdcChannel channel) const { + return values_[channel_map_[channel]]; + } + + inline float float_value(CvAdcChannel channel) const { + return static_cast(value(channel)) / 32768.0f; + } + + private: + int channel_map_[CV_ADC_CHANNEL_LAST]; + int16_t values_[CV_ADC_CHANNEL_LAST]; + + DISALLOW_COPY_AND_ASSIGN(CvAdc); +}; + +} // namespace plaits + +#endif // PLAITS_DRIVERS_CV_ADC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_pin.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_pin.h new file mode 100644 index 00000000..6710a6be --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_pin.h @@ -0,0 +1,72 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the debug (timing) pin. + +#ifndef PLAITS_DRIVERS_DEBUG_PIN_H_ +#define PLAITS_DRIVERS_DEBUG_PIN_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace plaits { + +class DebugPin { + public: + DebugPin() { } + ~DebugPin() { } + + static void Init() { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_8; + GPIO_Init(GPIOB, &gpio_init); + } + + static inline void High() { + GPIOB->BSRR = GPIO_Pin_8; + } + + static inline void Low() { + GPIOB->BRR = GPIO_Pin_8; + } + + private: + DISALLOW_COPY_AND_ASSIGN(DebugPin); +}; + +#define TIC DebugPin::High(); +#define TOC DebugPin::Low(); + +} // namespace plaits + +#endif // PLAITS_DRIVERS_DEBUG_PIN_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_port.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_port.cc new file mode 100644 index 00000000..55927e9e --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_port.cc @@ -0,0 +1,62 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// UART driver for conversing with the factory testing program. + +#include "plaits/drivers/debug_port.h" + +namespace plaits { + +void DebugPort::Init() { + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + + // Initialize TX and RX pins. + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOB, &gpio_init); + + GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_7); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_7); + + // Initialize USART. + USART_InitTypeDef usart_init; + usart_init.USART_BaudRate = 9600; + usart_init.USART_WordLength = USART_WordLength_8b; + usart_init.USART_StopBits = USART_StopBits_1; + usart_init.USART_Parity = USART_Parity_No; + usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + usart_init.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; + USART_Init(USART3, &usart_init); + + USART_Cmd(USART3, ENABLE); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_port.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_port.h new file mode 100644 index 00000000..0824163b --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/debug_port.h @@ -0,0 +1,67 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// UART driver for conversing with the factory testing program. + +#ifndef PLAITS_DRIVERS_DEBUG_PORT_H_ +#define PLAITS_DRIVERS_DEBUG_PORT_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace plaits { + +class DebugPort { + public: + DebugPort() { } + ~DebugPort() { } + + void Init(); + + bool writable() { + return USART3->ISR & USART_FLAG_TXE; + } + + bool readable() { + return USART3->ISR & USART_FLAG_RXNE; + } + + void Write(uint8_t byte) { + USART3->TDR = byte; + } + + uint8_t Read() { + return USART3->RDR; + } + + private: + DISALLOW_COPY_AND_ASSIGN(DebugPort); +}; + +} // namespace plaits + +#endif // PLAITS_DRIVERS_DEBUG_PORT_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/firmware_update_adc.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/firmware_update_adc.cc new file mode 100644 index 00000000..cc891864 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/firmware_update_adc.cc @@ -0,0 +1,111 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 12-bit ADC used for firmware updates through the MODEL CV in. + +#include "plaits/drivers/firmware_update_adc.h" + +#include + +namespace plaits { + +void FirmwareUpdateAdc::Init() { + // Enable ADC clock. + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); + RCC_ADCCLKConfig(RCC_PCLK2_Div8); + + // Enable GPIO clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + + // Enable DMA1 clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); + + DMA_InitTypeDef dma_init; + ADC_InitTypeDef adc_init; + GPIO_InitTypeDef gpio_init; + + // Configure the two analog inputs. + gpio_init.GPIO_Pin = GPIO_Pin_1; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOB, &gpio_init); + + gpio_init.GPIO_Pin = GPIO_Pin_0; + GPIO_Init(GPIOA, &gpio_init); + + // Use DMA to automatically copy ADC data register to values_ buffer. + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; + dma_init.DMA_MemoryBaseAddr = (uint32_t)&values_[0]; + dma_init.DMA_DIR = DMA_DIR_PeripheralSRC; + dma_init.DMA_BufferSize = 2; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(DMA1_Channel1, &dma_init); + DMA_Cmd(DMA1_Channel1, ENABLE); + + // Init ADC1. + adc_init.ADC_ScanConvMode = ENABLE; + adc_init.ADC_ContinuousConvMode = DISABLE; + adc_init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; + adc_init.ADC_DataAlign = ADC_DataAlign_Left; + adc_init.ADC_NbrOfChannel = 2; + ADC_Init(ADC1, &adc_init); + + // Sample rate: 53.6 kHz + // 72000 / 6 / (12.5 * 2 + 71.5 * 2) + ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_71Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 2, ADC_SampleTime_71Cycles5); + + // Enable and calibrate ADC1. + ADC_Cmd(ADC1, ENABLE); + ADC_ResetCalibration(ADC1); + while (ADC_GetResetCalibrationStatus(ADC1)); + ADC_StartCalibration(ADC1); + while (ADC_GetCalibrationStatus(ADC1)); + ADC_DMACmd(ADC1, ENABLE); + + values_[0] = values_[1] = 32768; + Convert(); +} + +void FirmwareUpdateAdc::DeInit() { + ADC_DMACmd(ADC1, DISABLE); + ADC_Cmd(ADC1, DISABLE); + DMA_Cmd(DMA1_Channel1, DISABLE); +} + +void FirmwareUpdateAdc::Convert() { + ADC_SoftwareStartConv(ADC1); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/firmware_update_adc.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/firmware_update_adc.h new file mode 100644 index 00000000..ec0dfe21 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/firmware_update_adc.h @@ -0,0 +1,60 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 12-bit ADC used for firmware updates through the MODEL CV in. + +#ifndef PLAITS_DRIVERS_FIRMWARE_UPDATE_ADC_H_ +#define PLAITS_DRIVERS_FIRMWARE_UPDATE_ADC_H_ + +#include "stmlib/stmlib.h" + +namespace plaits { + +class FirmwareUpdateAdc { + public: + FirmwareUpdateAdc() { } + ~FirmwareUpdateAdc() { } + + void Init(); + void DeInit(); + void Convert(); + + inline uint16_t gain_pot() const { + return values_[0]; + } + + inline uint16_t sample() const { + return values_[1]; + } + + private: + uint16_t values_[2]; + DISALLOW_COPY_AND_ASSIGN(FirmwareUpdateAdc); +}; + +} // namespace plaits + +#endif // PLAITS_DRIVERS_FIRMWARE_UPDATE_ADC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/leds.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/leds.cc new file mode 100644 index 00000000..51c641ba --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/leds.cc @@ -0,0 +1,114 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the column of LEDs. + +#include "plaits/drivers/leds.h" + +#include + +#include + +namespace plaits { + +using namespace std; + +const uint16_t kPinEnable = GPIO_Pin_7; + +void Leds::Init() { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); + + GPIO_InitTypeDef gpio_init; + + // SS + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = kPinEnable; + GPIO_Init(GPIOF, &gpio_init); + + // MOSI + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_6; + GPIO_Init(GPIOF, &gpio_init); + GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_5); + + // SCK + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_12; + GPIO_Init(GPIOA, &gpio_init); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_6); + + // Initialize SPI + SPI_InitTypeDef spi_init; + spi_init.SPI_Direction = SPI_Direction_2Lines_FullDuplex; + spi_init.SPI_Mode = SPI_Mode_Master; + spi_init.SPI_DataSize = SPI_DataSize_16b; + spi_init.SPI_CPOL = SPI_CPOL_Low; + spi_init.SPI_CPHA = SPI_CPHA_1Edge; + spi_init.SPI_NSS = SPI_NSS_Soft; + spi_init.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; + spi_init.SPI_FirstBit = SPI_FirstBit_MSB; + spi_init.SPI_CRCPolynomial = 7; + SPI_Init(SPI1, &spi_init); + SPI_Cmd(SPI1, ENABLE); + Clear(); +} + +void Leds::Clear() { + fill(&colors_[0], &colors_[kNumLEDs], LED_COLOR_OFF); +} + +/* static */ +const int Leds::led_map_[8] = { + 0, 1, 2, 3, 7, 6, 5, 4 +}; + +void Leds::Write() { + uint16_t leds_data = 0; + for (int i = 0; i < kNumLEDs; ++i) { + int j = led_map_[i]; + leds_data <<= 2; + leds_data |= (colors_[j] & LED_COLOR_RED) ? 1 : 0; + leds_data |= (colors_[j] & LED_COLOR_GREEN) ? 2 : 0; + } + GPIOF->BSRR = kPinEnable; + __asm__("nop"); + GPIOF->BRR = kPinEnable; + __asm__("nop"); + SPI1->DR = leds_data; +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/leds.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/leds.h new file mode 100644 index 00000000..87300f19 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/leds.h @@ -0,0 +1,72 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the column of LEDs. + +#ifndef PLAITS_DRIVERS_LEDS_H_ +#define PLAITS_DRIVERS_LEDS_H_ + +#include "stmlib/stmlib.h" + +namespace plaits { + +const int kNumLEDs = 8; + +enum LedColor { + LED_COLOR_OFF = 0, + LED_COLOR_RED = 0xff0000, + LED_COLOR_GREEN = 0x00ff00, + LED_COLOR_YELLOW = 0xffff00, +}; + +class Leds { + public: + Leds() { } + ~Leds() { } + + void Init(); + void Write(); + void Clear(); + + void set(int index, uint32_t color) { + colors_[index] = color; + } + + void mask(int index, uint32_t color) { + colors_[index] |= color; + } + + private: + uint32_t colors_[kNumLEDs]; + + static const int led_map_[kNumLEDs]; + + DISALLOW_COPY_AND_ASSIGN(Leds); +}; + +} // namespace plaits + +#endif // PLAITS_DRIVERS_LEDS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/normalization_probe.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/normalization_probe.h new file mode 100644 index 00000000..4a12000e --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/normalization_probe.h @@ -0,0 +1,87 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the normalization probe. + +#ifndef PLAITS_DRIVERS_NORMALIZATION_PROBE_H_ +#define PLAITS_DRIVERS_NORMALIZATION_PROBE_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace plaits { + +class NormalizationProbe { + public: + NormalizationProbe() { } + ~NormalizationProbe() { } + + static inline void Init() { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_9; + GPIO_Init(GPIOA, &gpio_init); + } + + void Disable() { + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_IN; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_9; + GPIO_Init(GPIOA, &gpio_init); + } + + static inline void High() { + GPIOA->BSRR = GPIO_Pin_9; + } + + static inline void Low() { + GPIOA->BRR = GPIO_Pin_9; + } + + static inline void Write(bool value) { + if (value) { + High(); + } else { + Low(); + } + } + + private: + DISALLOW_COPY_AND_ASSIGN(NormalizationProbe); +}; + +} // namespace plaits + +#endif // PLAITS_DRIVERS_NORMALIZATION_PROBE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/pots_adc.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/pots_adc.cc new file mode 100644 index 00000000..9a2bdf4a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/pots_adc.cc @@ -0,0 +1,111 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 12-bit ADC scanning pots. + +#include "plaits/drivers/pots_adc.h" + +#include + +#include + +namespace plaits { + +using namespace std; + +void PotsAdc::Init() { + // Enable ADC clock. + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); + RCC_ADCCLKConfig(RCC_PCLK2_Div8); + + // Enable GPIO clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + + // Enable DMA1 clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); + + DMA_InitTypeDef dma_init; + ADC_InitTypeDef adc_init; + GPIO_InitTypeDef gpio_init; + + // Configure the two analog inputs. + gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | \ + GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOA, &gpio_init); + + // Use DMA to automatically copy ADC data register to values_ buffer. + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; + dma_init.DMA_MemoryBaseAddr = (uint32_t)&values_[0]; + dma_init.DMA_DIR = DMA_DIR_PeripheralSRC; + dma_init.DMA_BufferSize = POTS_ADC_CHANNEL_LAST; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(DMA1_Channel1, &dma_init); + DMA_Cmd(DMA1_Channel1, ENABLE); + + // Init ADC1. + adc_init.ADC_ScanConvMode = ENABLE; + adc_init.ADC_ContinuousConvMode = DISABLE; + adc_init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; + adc_init.ADC_DataAlign = ADC_DataAlign_Left; + adc_init.ADC_NbrOfChannel = POTS_ADC_CHANNEL_LAST; + ADC_Init(ADC1, &adc_init); + + // Sample rate: 5.10 kHz > 4kHz + // 72000 / 8 / ((12.5 + 239.5) * 7) + ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_239Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_239Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 4, ADC_SampleTime_239Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 5, ADC_SampleTime_239Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_239Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 7, ADC_SampleTime_239Cycles5); + + // Enable and calibrate ADC1. + ADC_Cmd(ADC1, ENABLE); + ADC_ResetCalibration(ADC1); + while (ADC_GetResetCalibrationStatus(ADC1)); + ADC_StartCalibration(ADC1); + while (ADC_GetCalibrationStatus(ADC1)); + ADC_DMACmd(ADC1, ENABLE); + + fill(&values_[0], &values_[POTS_ADC_CHANNEL_LAST], 32768); + Convert(); +} + +void PotsAdc::Convert() { + ADC_SoftwareStartConv(ADC1); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/pots_adc.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/pots_adc.h new file mode 100644 index 00000000..fe4422a9 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/pots_adc.h @@ -0,0 +1,71 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 12-bit ADC scanning pots. + +#ifndef PLAITS_DRIVERS_POTS_ADC_H_ +#define PLAITS_DRIVERS_POTS_ADC_H_ + +#include "stmlib/stmlib.h" + +namespace plaits { + +enum PotsAdcChannel { + POTS_ADC_CHANNEL_FREQ_POT, + POTS_ADC_CHANNEL_HARMONICS_POT, + POTS_ADC_CHANNEL_TIMBRE_POT, + POTS_ADC_CHANNEL_MORPH_POT, + POTS_ADC_CHANNEL_TIMBRE_ATTENUVERTER, + POTS_ADC_CHANNEL_FM_ATTENUVERTER, + POTS_ADC_CHANNEL_MORPH_ATTENUVERTER, + POTS_ADC_CHANNEL_LAST +}; + +class PotsAdc { + public: + PotsAdc() { } + ~PotsAdc() { } + + void Init(); + void Convert(); + + inline int32_t value(PotsAdcChannel channel) const { + return static_cast(values_[channel]); + } + + inline float float_value(PotsAdcChannel channel) const { + return static_cast(value(channel)) / 65536.0f; + } + + private: + uint16_t values_[POTS_ADC_CHANNEL_LAST]; + + DISALLOW_COPY_AND_ASSIGN(PotsAdc); +}; + +} // namespace plaits + +#endif // PLAITS_DRIVERS_POTS_ADC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/switches.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/switches.cc new file mode 100644 index 00000000..e999df4f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/switches.cc @@ -0,0 +1,72 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the 2 switches. + +#include "plaits/drivers/switches.h" + +#include + +namespace plaits { + +using namespace std; + +struct SwitchDefinition { + GPIO_TypeDef* gpio; + uint16_t pin; +}; + +const SwitchDefinition switch_definitions[] = { + { GPIOB, GPIO_Pin_7 }, + { GPIOB, GPIO_Pin_6 }, +}; + +void Switches::Init() { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_IN; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_UP; + + for (int i = 0; i < SWITCH_LAST; ++i) { + const SwitchDefinition& definition = switch_definitions[i]; + gpio_init.GPIO_Pin = definition.pin; + GPIO_Init(definition.gpio, &gpio_init); + } + fill(&switch_state_[0], &switch_state_[SWITCH_LAST], 0xff); +} + +void Switches::Debounce() { + for (int i = 0; i < SWITCH_LAST; ++i) { + const SwitchDefinition& definition = switch_definitions[i]; + switch_state_[i] = (switch_state_[i] << 1) | \ + GPIO_ReadInputDataBit(definition.gpio, definition.pin); + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/switches.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/switches.h new file mode 100644 index 00000000..30a41aa4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/drivers/switches.h @@ -0,0 +1,82 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the 2 switches. + +#ifndef PLAITS_DRIVERS_SWITCHES_H_ +#define PLAITS_DRIVERS_SWITCHES_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace plaits { + +enum Switch { + SWITCH_ROW_1, + SWITCH_ROW_2, + SWITCH_LAST +}; + +class Switches { + public: + Switches() { } + ~Switches() { } + + void Init(); + void Debounce(); + + inline bool released(Switch s) const { + return switch_state_[s] == 0x7f; + } + + inline bool just_pressed(Switch s) const { + return switch_state_[s] == 0x80; + } + + inline bool pressed(Switch s) const { + return switch_state_[s] == 0x00; + } + + inline bool pressed_immediate(Switch s) const { + if (s == SWITCH_ROW_1) { + return !GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7); + } else if (s == SWITCH_ROW_2) { + return !GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_6); + } else { + return false; + } + } + + private: + uint8_t switch_state_[SWITCH_LAST]; + + DISALLOW_COPY_AND_ASSIGN(Switches); +}; + +} // namespace plaits + +#endif // PLAITS_DRIVERS_SWITCHES_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/analog_bass_drum.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/analog_bass_drum.h new file mode 100644 index 00000000..6f9c85c2 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/analog_bass_drum.h @@ -0,0 +1,195 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808 bass drum model, revisited. + +#ifndef PLAITS_DSP_DRUMS_ANALOG_BASS_DRUM_H_ +#define PLAITS_DSP_DRUMS_ANALOG_BASS_DRUM_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/filter.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/units.h" + +#include "plaits/dsp/dsp.h" +#include "plaits/dsp/oscillator/sine_oscillator.h" + +namespace plaits { + +class AnalogBassDrum { + public: + AnalogBassDrum() { } + ~AnalogBassDrum() { } + + void Init() { + pulse_remaining_samples_ = 0; + fm_pulse_remaining_samples_ = 0; + pulse_ = 0.0f; + pulse_height_ = 0.0f; + pulse_lp_ = 0.0f; + fm_pulse_lp_ = 0.0f; + retrig_pulse_ = 0.0f; + lp_out_ = 0.0f; + tone_lp_ = 0.0f; + sustain_gain_ = 0.0f; + + resonator_.Init(); + oscillator_.Init(); + } + + inline float Diode(float x) { + if (x >= 0.0f) { + return x; + } else { + x *= 2.0f; + return 0.7f * x / (1.0f + fabsf(x)); + } + } + + void Render( + bool sustain, + bool trigger, + float accent, + float f0, + float tone, + float decay, + float attack_fm_amount, + float self_fm_amount, + float* out, + size_t size) { + const int kTriggerPulseDuration = 1.0e-3 * kSampleRate; + const int kFMPulseDuration = 6.0e-3 * kSampleRate; + const float kPulseDecayTime = 0.2e-3 * kSampleRate; + const float kPulseFilterTime = 0.1e-3 * kSampleRate; + const float kRetrigPulseDuration = 0.05f * kSampleRate; + + const float scale = 0.001f / f0; + const float q = 1500.0f * stmlib::SemitonesToRatio(decay * 80.0f); + const float tone_f = std::min( + 4.0f * f0 * stmlib::SemitonesToRatio(tone * 108.0f), + 1.0f); + const float exciter_leak = 0.08f * (tone + 0.25f); + + + if (trigger) { + pulse_remaining_samples_ = kTriggerPulseDuration; + fm_pulse_remaining_samples_ = kFMPulseDuration; + pulse_height_ = 3.0f + 7.0f * accent; + lp_out_ = 0.0f; + } + + stmlib::ParameterInterpolator sustain_gain( + &sustain_gain_, + accent * decay, + size); + + while (size--) { + // Q39 / Q40 + float pulse = 0.0f; + if (pulse_remaining_samples_) { + --pulse_remaining_samples_; + pulse = pulse_remaining_samples_ ? pulse_height_ : pulse_height_ - 1.0f; + pulse_ = pulse; + } else { + pulse_ *= 1.0f - 1.0f / kPulseDecayTime; + pulse = pulse_; + } + if (sustain) { + pulse = 0.0f; + } + + // C40 / R163 / R162 / D83 + ONE_POLE(pulse_lp_, pulse, 1.0f / kPulseFilterTime); + pulse = Diode((pulse - pulse_lp_) + pulse * 0.044f); + + // Q41 / Q42 + float fm_pulse = 0.0f; + if (fm_pulse_remaining_samples_) { + --fm_pulse_remaining_samples_; + fm_pulse = 1.0f; + // C39 / C52 + retrig_pulse_ = fm_pulse_remaining_samples_ ? 0.0f : -0.8f; + } else { + // C39 / R161 + retrig_pulse_ *= 1.0f - 1.0f / kRetrigPulseDuration; + } + if (sustain) { + fm_pulse = 0.0f; + } + ONE_POLE(fm_pulse_lp_, fm_pulse, 1.0f / kPulseFilterTime); + + // Q43 and R170 leakage + float punch = 0.7f + Diode(10.0f * lp_out_ - 1.0f); + + // Q43 / R165 + float attack_fm = fm_pulse_lp_ * 1.7f * attack_fm_amount; + float self_fm = punch * 0.08f * self_fm_amount; + float f = f0 * (1.0f + attack_fm + self_fm); + CONSTRAIN(f, 0.0f, 0.4f); + + float resonator_out; + if (sustain) { + oscillator_.Next(f, sustain_gain.Next(), &resonator_out, &lp_out_); + } else { + resonator_.set_f_q(f, 1.0f + q * f); + resonator_.Process( + (pulse - retrig_pulse_ * 0.2f) * scale, + &resonator_out, + &lp_out_); + } + + ONE_POLE(tone_lp_, pulse * exciter_leak + resonator_out, tone_f); + + *out++ = tone_lp_; + } + } + + private: + int pulse_remaining_samples_; + int fm_pulse_remaining_samples_; + float pulse_; + float pulse_height_; + float pulse_lp_; + float fm_pulse_lp_; + float retrig_pulse_; + float lp_out_; + float tone_lp_; + float sustain_gain_; + + stmlib::Svf resonator_; + + // Replace the resonator in "free running" (sustain) mode. + SineOscillator oscillator_; + + DISALLOW_COPY_AND_ASSIGN(AnalogBassDrum); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_DRUMS_ANALOG_BASS_DRUM_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/analog_snare_drum.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/analog_snare_drum.h new file mode 100644 index 00000000..58d3de6b --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/analog_snare_drum.h @@ -0,0 +1,201 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808 snare drum model, revisited. + +#ifndef PLAITS_DSP_DRUMS_ANALOG_SNARE_DRUM_H_ +#define PLAITS_DSP_DRUMS_ANALOG_SNARE_DRUM_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/filter.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/dsp/dsp.h" +#include "plaits/dsp/oscillator/sine_oscillator.h" + +namespace plaits { + +class AnalogSnareDrum { + public: + AnalogSnareDrum() { } + ~AnalogSnareDrum() { } + + static const int kNumModes = 5; + + void Init() { + pulse_remaining_samples_ = 0; + pulse_ = 0.0f; + pulse_height_ = 0.0f; + pulse_lp_ = 0.0f; + noise_envelope_ = 0.0f; + sustain_gain_ = 0.0f; + + for (int i = 0; i < kNumModes; ++i) { + resonator_[i].Init(); + oscillator_[i].Init(); + } + noise_filter_.Init(); + } + + void Render( + bool sustain, + bool trigger, + float accent, + float f0, + float tone, + float decay, + float snappy, + float* out, + size_t size) { + const float decay_xt = decay * (1.0f + decay * (decay - 1.0f)); + const int kTriggerPulseDuration = 1.0e-3 * kSampleRate; + const float kPulseDecayTime = 0.1e-3 * kSampleRate; + const float q = 2000.0f * stmlib::SemitonesToRatio(decay_xt * 84.0f); + const float noise_envelope_decay = 1.0f - 0.0017f * \ + stmlib::SemitonesToRatio(-decay * (50.0f + snappy * 10.0f)); + const float exciter_leak = snappy * (2.0f - snappy) * 0.1f; + + snappy = snappy * 1.1f - 0.05f; + CONSTRAIN(snappy, 0.0f, 1.0f); + + if (trigger) { + pulse_remaining_samples_ = kTriggerPulseDuration; + pulse_height_ = 3.0f + 7.0f * accent; + noise_envelope_ = 2.0f; + } + + static const float kModeFrequencies[kNumModes] = { + 1.00f, + 2.00f, + 3.18f, + 4.16f, + 5.62f}; + + float f[kNumModes]; + float gain[kNumModes]; + + for (int i = 0; i < kNumModes; ++i) { + f[i] = std::min(f0 * kModeFrequencies[i], 0.499f); + resonator_[i].set_f_q( + f[i], + 1.0f + f[i] * (i == 0 ? q : q * 0.25f)); + } + + if (tone < 0.666667f) { + // 808-style (2 modes) + tone *= 1.5f; + gain[0] = 1.5f + (1.0f - tone) * (1.0f - tone) * 4.5f; + gain[1] = 2.0f * tone + 0.15f; + std::fill(&gain[2], &gain[kNumModes], 0.0f); + } else { + // What the 808 could have been if there were extra modes! + tone = (tone - 0.666667f) * 3.0f; + gain[0] = 1.5f - tone * 0.5f; + gain[1] = 2.15f - tone * 0.7f; + for (int i = 2; i < kNumModes; ++i) { + gain[i] = tone; + tone *= tone; + } + } + + float f_noise = f0 * 16.0f; + CONSTRAIN(f_noise, 0.0f, 0.499f); + noise_filter_.set_f_q( + f_noise, 1.0f + f_noise * 1.5f); + + + stmlib::ParameterInterpolator sustain_gain( + &sustain_gain_, + accent * decay, + size); + + while (size--) { + // Q45 / Q46 + float pulse = 0.0f; + if (pulse_remaining_samples_) { + --pulse_remaining_samples_; + pulse = pulse_remaining_samples_ ? pulse_height_ : pulse_height_ - 1.0f; + pulse_ = pulse; + } else { + pulse_ *= 1.0f - 1.0f / kPulseDecayTime; + pulse = pulse_; + } + + float sustain_gain_value = sustain_gain.Next(); + + // R189 / C57 / R190 + C58 / C59 / R197 / R196 / IC14 + ONE_POLE(pulse_lp_, pulse, 0.75f); + + float shell = 0.0f; + for (int i = 0; i < kNumModes; ++i) { + float excitation = i == 0 + ? (pulse - pulse_lp_) + 0.006f * pulse + : 0.026f * pulse; + shell += gain[i] * (sustain + ? oscillator_[i].Next(f[i]) * sustain_gain_value * 0.25f + : resonator_[i].Process( + excitation) + excitation * exciter_leak); + } + shell = stmlib::SoftClip(shell); + + // C56 / R194 / Q48 / C54 / R188 / D54 + float noise = 2.0f * stmlib::Random::GetFloat() - 1.0f; + if (noise < 0.0f) noise = 0.0f; + noise_envelope_ *= noise_envelope_decay; + noise *= (sustain ? sustain_gain_value : noise_envelope_) * snappy * 2.0f; + + // C66 / R201 / C67 / R202 / R203 / Q49 + noise = noise_filter_.Process(noise); + + // IC13 + *out++ = noise + shell * (1.0f - snappy); + } + } + + private: + int pulse_remaining_samples_; + float pulse_; + float pulse_height_; + float pulse_lp_; + float noise_envelope_; + float sustain_gain_; + + stmlib::Svf resonator_[kNumModes]; + stmlib::Svf noise_filter_; + + // Replace the resonators in "free running" (sustain) mode. + SineOscillator oscillator_[kNumModes]; + + DISALLOW_COPY_AND_ASSIGN(AnalogSnareDrum); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_DRUMS_ANALOG_SNARE_DRUM_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/hi_hat.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/hi_hat.h new file mode 100644 index 00000000..dd08a02d --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/hi_hat.h @@ -0,0 +1,259 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808 HH, with a few extra parameters to push things to the CY territory... +// The template parameter MetallicNoiseSource allows another kind of "metallic +// noise" to be used, for results which are more similar to KR-55 or FM hi-hats. + +#ifndef PLAITS_DSP_DRUMS_HI_HAT_H_ +#define PLAITS_DSP_DRUMS_HI_HAT_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/filter.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/dsp/dsp.h" +#include "plaits/dsp/oscillator/oscillator.h" + +namespace plaits { + +// 808 style "metallic noise" with 6 square oscillators. +class SquareNoise { + public: + SquareNoise() { } + ~SquareNoise() { } + + void Init() { + std::fill(&phase_[0], &phase_[6], 0); + } + + void Render(float f0, float* temp_1, float* temp_2, float* out, size_t size) { + const float ratios[6] = { + // Nominal f0: 414 Hz + 1.0f, 1.304f, 1.466f, 1.787f, 1.932f, 2.536f + }; + + uint32_t increment[6]; + uint32_t phase[6]; + for (int i = 0; i < 6; ++i) { + float f = f0 * ratios[i]; + if (f >= 0.499f) f = 0.499f; + increment[i] = static_cast(f * 4294967296.0f); + phase[i] = phase_[i]; + } + + while (size--) { + phase[0] += increment[0]; + phase[1] += increment[1]; + phase[2] += increment[2]; + phase[3] += increment[3]; + phase[4] += increment[4]; + phase[5] += increment[5]; + uint32_t noise = 0; + noise += (phase[0] >> 31); + noise += (phase[1] >> 31); + noise += (phase[2] >> 31); + noise += (phase[3] >> 31); + noise += (phase[4] >> 31); + noise += (phase[5] >> 31); + *out++ = 0.33f * static_cast(noise) - 1.0f; + } + + for (int i = 0; i < 6; ++i) { + phase_[i] = phase[i]; + } + } + + private: + uint32_t phase_[6]; + + DISALLOW_COPY_AND_ASSIGN(SquareNoise); +}; + +class RingModNoise { + public: + RingModNoise() { } + ~RingModNoise() { } + + void Init() { + for (int i = 0; i < 6; ++i) { + oscillator_[i].Init(); + } + } + + void Render(float f0, float* temp_1, float* temp_2, float* out, size_t size) { + const float ratio = f0 / (0.01f + f0); + const float f1a = 200.0f / kSampleRate * ratio; + const float f1b = 7530.0f / kSampleRate * ratio; + const float f2a = 510.0f / kSampleRate * ratio; + const float f2b = 8075.0f / kSampleRate * ratio; + const float f3a = 730.0f / kSampleRate * ratio; + const float f3b = 10500.0f / kSampleRate * ratio; + + std::fill(&out[0], &out[size], 0.0f); + + RenderPair(&oscillator_[0], f1a, f1b, temp_1, temp_2, out, size); + RenderPair(&oscillator_[2], f2a, f2b, temp_1, temp_2, out, size); + RenderPair(&oscillator_[4], f3a, f3b, temp_1, temp_2, out, size); + } + + private: + void RenderPair( + Oscillator* osc, + float f1, + float f2, + float* temp_1, + float* temp_2, + float* out, + size_t size) { + osc[0].Render(f1, 0.5f, temp_1, size); + osc[1].Render(f2, 0.5f, temp_2, size); + while (size--) { + *out++ += *temp_1++ * *temp_2++; + } + } + Oscillator oscillator_[6]; + + DISALLOW_COPY_AND_ASSIGN(RingModNoise); +}; + +class SwingVCA { + public: + float operator()(float s, float gain) { + s *= s > 0.0f ? 10.0f : 0.1f; + s = s / (1.0f + fabsf(s)); + return (s + 1.0f) * gain; + } +}; + +class LinearVCA { + public: + float operator()(float s, float gain) { + return s * gain; + } +}; + +template +class HiHat { + public: + HiHat() { } + ~HiHat() { } + + void Init() { + envelope_ = 0.0f; + noise_clock_ = 0.0f; + noise_sample_ = 0.0f; + sustain_gain_ = 0.0f; + + metallic_noise_.Init(); + noise_coloration_svf_.Init(); + hpf_.Init(); + } + + void Render( + bool sustain, + bool trigger, + float accent, + float f0, + float tone, + float decay, + float noisiness, + float* temp_1, + float* temp_2, + float* out, + size_t size) { + const float envelope_decay = 1.0f - 0.003f * stmlib::SemitonesToRatio( + -decay * 84.0f); + const float cut_decay = 1.0f - 0.0025f * stmlib::SemitonesToRatio( + -decay * 36.0f); + + if (trigger) { + envelope_ = (1.5f + 0.5f * (1.0f - decay)) * (0.3f + 0.7f * accent); + } + + // Render the metallic noise. + metallic_noise_.Render(2.0f * f0, temp_1, temp_2, out, size); + + // Apply BPF on the metallic noise. + float cutoff = 150.0f / kSampleRate * stmlib::SemitonesToRatio( + tone * 72.0f); + CONSTRAIN(cutoff, 0.0f, 16000.0f / kSampleRate); + noise_coloration_svf_.set_f_q( + cutoff, resonance ? 3.0f + 6.0f * tone : 1.0f); + noise_coloration_svf_.Process( + out, out, size); + + // This is not at all part of the 808 circuit! But to add more variety, we + // add a variable amount of clocked noise to the output of the 6 schmitt + // trigger oscillators. + noisiness *= noisiness; + float noise_f = f0 * (16.0f + 16.0f * (1.0f - noisiness)); + CONSTRAIN(noise_f, 0.0f, 0.5f); + + for (size_t i = 0; i < size; ++i) { + noise_clock_ += noise_f; + if (noise_clock_ >= 1.0f) { + noise_clock_ -= 1.0f; + noise_sample_ = stmlib::Random::GetFloat() - 0.5f; + } + out[i] += noisiness * (noise_sample_ - out[i]); + } + + // Apply VCA. + stmlib::ParameterInterpolator sustain_gain( + &sustain_gain_, + accent * decay, + size); + for (size_t i = 0; i < size; ++i) { + VCA vca; + envelope_ *= envelope_ > 0.5f ? envelope_decay : cut_decay; + out[i] = vca(out[i], sustain ? sustain_gain.Next() : envelope_); + } + + hpf_.set_f_q(cutoff, 0.5f); + hpf_.Process(out, out, size); + } + + private: + float envelope_; + float noise_clock_; + float noise_sample_; + float sustain_gain_; + + MetallicNoiseSource metallic_noise_; + stmlib::Svf noise_coloration_svf_; + stmlib::Svf hpf_; + + DISALLOW_COPY_AND_ASSIGN(HiHat); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_DRUMS_HI_HAT_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/synthetic_bass_drum.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/synthetic_bass_drum.h new file mode 100644 index 00000000..6f61cb88 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/synthetic_bass_drum.h @@ -0,0 +1,249 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Naive bass drum model (modulated oscillator with FM + envelope). +// Inadvertently 909-ish. + +#ifndef PLAITS_DSP_DRUMS_SYNTHETIC_BASS_DRUM_H_ +#define PLAITS_DSP_DRUMS_SYNTHETIC_BASS_DRUM_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/dsp/dsp.h" +#include "plaits/resources.h" + +namespace plaits { + +class SyntheticBassDrumClick { + public: + SyntheticBassDrumClick() { } + ~SyntheticBassDrumClick() { } + + void Init() { + lp_ = 0.0f; + hp_ = 0.0f; + filter_.Init(); + filter_.set_f_q(5000.0f / kSampleRate, 2.0f); + } + + float Process(float in) { + SLOPE(lp_, in, 0.5f, 0.1f); + ONE_POLE(hp_, lp_, 0.04f); + return filter_.Process(lp_ - hp_); + } + + private: + float lp_; + float hp_; + stmlib::Svf filter_; + + DISALLOW_COPY_AND_ASSIGN(SyntheticBassDrumClick); +}; + +class SyntheticBassDrumAttackNoise { + public: + SyntheticBassDrumAttackNoise() { } + ~SyntheticBassDrumAttackNoise() { } + + void Init() { + lp_ = 0.0f; + hp_ = 0.0f; + } + + float Render() { + float sample = stmlib::Random::GetFloat(); + ONE_POLE(lp_, sample, 0.05f); + ONE_POLE(hp_, lp_, 0.005f); + return lp_ - hp_; + } + + private: + float lp_; + float hp_; + + DISALLOW_COPY_AND_ASSIGN(SyntheticBassDrumAttackNoise); +}; + +class SyntheticBassDrum { + public: + SyntheticBassDrum() { } + ~SyntheticBassDrum() { } + + void Init() { + phase_ = 0.0f; + phase_noise_ = 0.0f; + f0_ = 0.0f; + fm_ = 0.0f; + fm_lp_ = 0.0f; + body_env_lp_ = 0.0f; + body_env_ = 0.0f; + body_env_pulse_width_ = 0; + fm_pulse_width_ = 0; + tone_lp_ = 0.0f; + sustain_gain_ = 0.0f; + + click_.Init(); + noise_.Init(); + } + + inline float DistortedSine(float phase, float phase_noise, float dirtiness) { + phase += phase_noise * dirtiness; + MAKE_INTEGRAL_FRACTIONAL(phase); + phase = phase_fractional; + float triangle = (phase < 0.5f ? phase : 1.0f - phase) * 4.0f - 1.0f; + float sine = 2.0f * triangle / (1.0f + fabsf(triangle)); + float clean_sine = stmlib::InterpolateWrap( + lut_sine, phase + 0.75f, 1024.0f); + return sine + (1.0f - dirtiness) * (clean_sine - sine); + } + + inline float TransistorVCA(float s, float gain) { + s = (s - 0.6f) * gain; + return 3.0f * s / (2.0f + fabsf(s)) + gain * 0.3f; + } + + void Render( + bool sustain, + bool trigger, + float accent, + float f0, + float tone, + float decay, + float dirtiness, + float fm_envelope_amount, + float fm_envelope_decay, + float* out, + size_t size) { + decay *= decay; + fm_envelope_decay *= fm_envelope_decay; + + stmlib::ParameterInterpolator f0_mod(&f0_, f0, size); + + dirtiness *= std::max(1.0f - 8.0f * f0, 0.0f); + + const float fm_decay = 1.0f - \ + 1.0f / (0.008f * (1.0f + fm_envelope_decay * 4.0f) * kSampleRate); + + const float body_env_decay = 1.0f - 1.0f / (0.02f * kSampleRate) * \ + stmlib::SemitonesToRatio(-decay * 60.0f); + const float transient_env_decay = 1.0f - 1.0f / (0.005f * kSampleRate); + const float tone_f = std::min( + 4.0f * f0 * stmlib::SemitonesToRatio(tone * 108.0f), + 1.0f); + const float transient_level = tone; + + if (trigger) { + fm_ = 1.0f; + body_env_ = transient_env_ = 0.3f + 0.7f * accent; + body_env_pulse_width_ = kSampleRate * 0.001f; + fm_pulse_width_ = kSampleRate * 0.0013f; + } + + stmlib::ParameterInterpolator sustain_gain( + &sustain_gain_, + accent * decay, + size); + + while (size--) { + ONE_POLE(phase_noise_, stmlib::Random::GetFloat() - 0.5f, 0.002f); + + float mix = 0.0f; + + if (sustain) { + phase_ += f0_mod.Next(); + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + float body = DistortedSine(phase_, phase_noise_, dirtiness); + mix -= TransistorVCA(body, sustain_gain.Next()); + } else { + if (fm_pulse_width_) { + --fm_pulse_width_; + phase_ = 0.25f; + } else { + fm_ *= fm_decay; + float fm = 1.0f + fm_envelope_amount * 3.5f * fm_lp_; + phase_ += std::min(f0_mod.Next() * fm, 0.5f); + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + } + + if (body_env_pulse_width_) { + --body_env_pulse_width_; + } else { + body_env_ *= body_env_decay; + transient_env_ *= transient_env_decay; + } + + const float envelope_lp_f = 0.1f; + ONE_POLE(body_env_lp_, body_env_, envelope_lp_f); + ONE_POLE(transient_env_lp_, transient_env_, envelope_lp_f); + ONE_POLE(fm_lp_, fm_, envelope_lp_f); + + float body = DistortedSine(phase_, phase_noise_, dirtiness); + float transient = click_.Process( + body_env_pulse_width_ ? 0.0f : 1.0f) + noise_.Render(); + + mix -= TransistorVCA(body, body_env_lp_); + mix -= transient * transient_env_lp_ * transient_level; + } + + ONE_POLE(tone_lp_, mix, tone_f); + *out++ = tone_lp_; + } + } + + private: + float f0_; + float phase_; + float phase_noise_; + + float fm_; + float fm_lp_; + float body_env_; + float body_env_lp_; + float transient_env_; + float transient_env_lp_; + + float sustain_gain_; + + float tone_lp_; + + SyntheticBassDrumClick click_; + SyntheticBassDrumAttackNoise noise_; + + int body_env_pulse_width_; + int fm_pulse_width_; + + DISALLOW_COPY_AND_ASSIGN(SyntheticBassDrum); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_DRUMS_SYNTHETIC_BASS_DRUM_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/synthetic_snare_drum.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/synthetic_snare_drum.h new file mode 100644 index 00000000..b711c815 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/drums/synthetic_snare_drum.h @@ -0,0 +1,198 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Naive snare drum model (two modulated oscillators + filtered noise). +// Uses a few magic numbers taken from the 909 schematics: +// - Ratio between the two modes of the drum set to 1.47. +// - Funky coupling between the two modes. +// - Noise coloration filters and envelope shapes for the snare. + +#ifndef PLAITS_DSP_DRUMS_SYNTHETIC_SNARE_DRUM_H_ +#define PLAITS_DSP_DRUMS_SYNTHETIC_SNARE_DRUM_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/units.h" + +#include "plaits/dsp/dsp.h" + +namespace plaits { + +class SyntheticSnareDrum { + public: + SyntheticSnareDrum() { } + ~SyntheticSnareDrum() { } + + void Init() { + phase_[0] = 0.0f; + phase_[1] = 0.0f; + drum_amplitude_ = 0.0f; + snare_amplitude_ = 0.0f; + fm_ = 0.0f; + hold_counter_ = 0; + sustain_gain_ = 0.0f; + + drum_lp_.Init(); + snare_hp_.Init(); + snare_lp_.Init(); + } + + inline float DistortedSine(float phase) { + float triangle = (phase < 0.5f ? phase : 1.0f - phase) * 4.0f - 1.3f; + return 2.0f * triangle / (1.0f + fabsf(triangle)); + } + + void Render( + bool sustain, + bool trigger, + float accent, + float f0, + float fm_amount, + float decay, + float snappy, + float* out, + size_t size) { + const float decay_xt = decay * (1.0f + decay * (decay - 1.0f)); + fm_amount *= fm_amount; + const float drum_decay = 1.0f - 1.0f / (0.015f * kSampleRate) * \ + stmlib::SemitonesToRatio( + -decay_xt * 72.0f - fm_amount * 12.0f + snappy * 7.0f); + const float snare_decay = 1.0f - 1.0f / (0.01f * kSampleRate) * \ + stmlib::SemitonesToRatio(-decay * 60.0f - snappy * 7.0f); + const float fm_decay = 1.0f - 1.0f / (0.007f * kSampleRate); + + snappy = snappy * 1.1f - 0.05f; + CONSTRAIN(snappy, 0.0f, 1.0f); + + const float drum_level = stmlib::Sqrt(1.0f - snappy); + const float snare_level = stmlib::Sqrt(snappy); + + const float snare_f_min = std::min(10.0f * f0, 0.5f); + const float snare_f_max = std::min(35.0f * f0, 0.5f); + + snare_hp_.set_f(snare_f_min); + snare_lp_.set_f_q(snare_f_max, + 0.5f + 2.0f * snappy); + drum_lp_.set_f(3.0f * f0); + + if (trigger) { + snare_amplitude_ = drum_amplitude_ = 0.3f + 0.7f * accent; + fm_ = 1.0f; + phase_[0] = phase_[1] = 0.0f; + hold_counter_ = static_cast((0.04f + decay * 0.03f) * kSampleRate); + } + + stmlib::ParameterInterpolator sustain_gain( + &sustain_gain_, + accent * decay, + size); + while (size--) { + if (sustain) { + snare_amplitude_ = sustain_gain.Next(); + drum_amplitude_ = snare_amplitude_; + fm_ = 0.0f; + } else { + // Compute all D envelopes. + // The envelope for the drum has a very long tail. + // The envelope for the snare has a "hold" stage which lasts between + // 40 and 70 ms + drum_amplitude_ *= (drum_amplitude_ > 0.03f || !(size & 1)) + ? drum_decay + : 1.0f; + if (hold_counter_) { + --hold_counter_; + } else { + snare_amplitude_ *= snare_decay; + } + fm_ *= fm_decay; + } + + // The 909 circuit has a funny kind of oscillator coupling - the signal + // leaving Q40's collector and resetting all oscillators allow some + // intermodulation. + float reset_noise = 0.0f; + float reset_noise_amount = (0.125f - f0) * 8.0f; + CONSTRAIN(reset_noise_amount, 0.0f, 1.0f); + reset_noise_amount *= reset_noise_amount; + reset_noise_amount *= fm_amount; + reset_noise += phase_[0] > 0.5f ? -1.0f : 1.0f; + reset_noise += phase_[1] > 0.5f ? -1.0f : 1.0f; + reset_noise *= reset_noise_amount * 0.025f; + + float f = f0 * (1.0f + fm_amount * (4.0f * fm_)); + phase_[0] += f; + phase_[1] += f * 1.47f; + if (reset_noise_amount > 0.1f) { + if (phase_[0] >= 1.0f + reset_noise) { + phase_[0] = 1.0f - phase_[0]; + } + if (phase_[1] >= 1.0f + reset_noise) { + phase_[1] = 1.0f - phase_[1]; + } + } else { + if (phase_[0] >= 1.0f) { + phase_[0] -= 1.0f; + } + if (phase_[1] >= 1.0f) { + phase_[1] -= 1.0f; + } + } + + float drum = -0.1f; + drum += DistortedSine(phase_[0]) * 0.60f; + drum += DistortedSine(phase_[1]) * 0.25f; + drum *= drum_amplitude_ * drum_level; + drum = drum_lp_.Process(drum); + + float noise = stmlib::Random::GetFloat(); + float snare = snare_lp_.Process(noise); + snare = snare_hp_.Process(snare); + snare = (snare + 0.1f) * (snare_amplitude_ + fm_) * snare_level; + + *out++ = snare + drum; // It's a snare, it's a drum, it's a snare drum. + } + } + + private: + float phase_[2]; + float drum_amplitude_; + float snare_amplitude_; + float fm_; + float sustain_gain_; + int hold_counter_; + + stmlib::OnePole drum_lp_; + stmlib::OnePole snare_hp_; + stmlib::Svf snare_lp_; + + DISALLOW_COPY_AND_ASSIGN(SyntheticSnareDrum); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_DRUMS_SYNTHETIC_SNARE_DRUM_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/dsp.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/dsp.h new file mode 100644 index 00000000..48441c6c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/dsp.h @@ -0,0 +1,55 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Utility DSP routines. + +#ifndef PLAITS_DSP_DSP_H_ +#define PLAITS_DSP_DSP_H_ + +#include "stmlib/stmlib.h" + +namespace plaits { + +static const float kSampleRate = 48000.0f; + +// There is no proper PLL for I2S, only a divider on the system clock to derive +// the bit clock. +// The division ratio is set to 47 (23 EVEN, 1 ODD) by the ST libraries. +// +// Bit clock = 72000000 / 47 = 1531.91 kHz +// Frame clock = Bit clock / 32 = 47872.34 Hz +// +// That's only 4.6 cts of error, but we care! + +static const float kCorrectedSampleRate = 47872.34f; +const float a0 = (440.0f / 8.0f) / kCorrectedSampleRate; + +const size_t kMaxBlockSize = 24; +const size_t kBlockSize = 12; + +} // namespace plaits + +#endif // PLAITS_DSP_DSP_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/additive_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/additive_engine.cc new file mode 100644 index 00000000..8fc96125 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/additive_engine.cc @@ -0,0 +1,152 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Additive synthesis with 32 partials. + +#include "plaits/dsp/engine/additive_engine.h" + +#include + +#include "stmlib/dsp/cosine_oscillator.h" + +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void AdditiveEngine::Init(BufferAllocator* allocator) { + fill( + &litudes_[0], + &litudes_[kNumHarmonics], + 0.0f); + for (int i = 0; i < kNumHarmonicOscillators; ++i) { + harmonic_oscillator_[i].Init(); + } +} + +void AdditiveEngine::Reset() { + +} + +void AdditiveEngine::UpdateAmplitudes( + float centroid, + float slope, + float bumps, + float* amplitudes, + const int* harmonic_indices, + size_t num_harmonics) { + const float n = (static_cast(num_harmonics) - 1.0f); + const float margin = (1.0f / slope - 1.0f) / (1.0f + bumps); + const float center = centroid * (n + margin) - 0.5f * margin; + + float sum = 0.001f; + + for (size_t i = 0; i < num_harmonics; ++i) { + float order = fabsf(static_cast(i) - center) * slope; + float gain = 1.0f - order; + gain += fabsf(gain); + gain *= gain; + + float b = 0.25f + order * bumps; + float bump_factor = 1.0f + InterpolateWrap(lut_sine, b, 1024.0f); + + gain *= bump_factor; + gain *= gain; + gain *= gain; + + int j = harmonic_indices[i]; + + // Warning about the following line: this is not a proper LP filter because + // of the normalization. But in spite of its strange working, this line + // turns out ot be absolutely essential. + // + // I have tried both normalizing the LP-ed spectrum, and LP-ing the + // normalized spectrum, and both of them cause more annoyances than this + // "incorrect" solution. + + ONE_POLE(amplitudes[j], gain, 0.001f); + sum += amplitudes[j]; + } + + sum = 1.0f / sum; + + for (size_t i = 0; i < num_harmonics; ++i) { + amplitudes[harmonic_indices[i]] *= sum; + } +} + +inline float Bump(float x, float centroid, float slope) { + float d = fabsf(x - centroid); + float bump = 1.0f - d * slope; + return bump + fabsf(bump); +} + +const int integer_harmonics[24] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23 +}; + +const int organ_harmonics[8] = { + 0, 1, 2, 3, 5, 7, 9, 11 +}; + +void AdditiveEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + + const float centroid = parameters.timbre; + const float raw_bumps = parameters.harmonics; + const float raw_slope = (1.0f - 0.6f * raw_bumps) * parameters.morph; + const float slope = 0.01f + 1.99f * raw_slope * raw_slope * raw_slope; + const float bumps = 16.0f * raw_bumps * raw_bumps; + UpdateAmplitudes( + centroid, + slope, + bumps, + &litudes_[0], + integer_harmonics, + 24); + harmonic_oscillator_[0].Render<1>(f0, &litudes_[0], out, size); + harmonic_oscillator_[1].Render<13>(f0, &litudes_[12], out, size); + + UpdateAmplitudes( + centroid, + slope, + bumps, + &litudes_[24], + organ_harmonics, + 8); + + harmonic_oscillator_[2].Render<1>(f0, &litudes_[24], aux, size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/additive_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/additive_engine.h new file mode 100644 index 00000000..a7c7ca9c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/additive_engine.h @@ -0,0 +1,72 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Additive synthesis with 24+8 partials. + +#ifndef PLAITS_DSP_ENGINE_ADDITIVE_ENGINE_H_ +#define PLAITS_DSP_ENGINE_ADDITIVE_ENGINE_H_ + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/oscillator/harmonic_oscillator.h" + +namespace plaits { + +const int kHarmonicBatchSize = 12; +const int kNumHarmonics = 36; +const int kNumHarmonicOscillators = kNumHarmonics / kHarmonicBatchSize; + +class AdditiveEngine : public Engine { + public: + AdditiveEngine() { } + ~AdditiveEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + void UpdateAmplitudes( + float centroid, + float slope, + float bumps, + float* amplitudes, + const int* harmonic_indices, + size_t num_harmonics); + + HarmonicOscillator harmonic_oscillator_[kNumHarmonicOscillators]; + + float amplitudes_[kNumHarmonics]; + + DISALLOW_COPY_AND_ASSIGN(AdditiveEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_ADDITIVE_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/bass_drum_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/bass_drum_engine.cc new file mode 100644 index 00000000..be14bd27 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/bass_drum_engine.cc @@ -0,0 +1,96 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808 and synthetic bass drum generators. + +#include "plaits/dsp/engine/bass_drum_engine.h" + +#include + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void BassDrumEngine::Init(BufferAllocator* allocator) { + analog_bass_drum_.Init(); + synthetic_bass_drum_.Init(); + overdrive_.Init(); +} + +void BassDrumEngine::Reset() { + +} + +void BassDrumEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + + const float attack_fm_amount = min(parameters.harmonics * 4.0f, 1.0f); + const float self_fm_amount = max(min(parameters.harmonics * 4.0f - 1.0f, 1.0f), 0.0f); + const float drive = max(parameters.harmonics * 2.0f - 1.0f, 0.0f) * \ + max(1.0f - 16.0f * f0, 0.0f); + + const bool sustain = parameters.trigger & TRIGGER_UNPATCHED; + + analog_bass_drum_.Render( + sustain, + parameters.trigger & TRIGGER_RISING_EDGE, + parameters.accent, + f0, + parameters.timbre, + parameters.morph, + attack_fm_amount, + self_fm_amount, + out, + size); + + overdrive_.Process( + 0.5f + 0.5f * drive, + out, + size); + + synthetic_bass_drum_.Render( + sustain, + parameters.trigger & TRIGGER_RISING_EDGE, + parameters.accent, + f0, + parameters.timbre, + parameters.morph, + sustain + ? parameters.harmonics + : 0.4f - 0.25f * parameters.morph * parameters.morph, + min(parameters.harmonics * 2.0f, 1.0f), + max(parameters.harmonics * 2.0f - 1.0f, 0.0f), + aux, + size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/bass_drum_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/bass_drum_engine.h new file mode 100644 index 00000000..555055f0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/bass_drum_engine.h @@ -0,0 +1,64 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808 and synthetic bass drum generators. + +#ifndef PLAITS_DSP_ENGINE_BASS_DRUM_ENGINE_H_ +#define PLAITS_DSP_ENGINE_BASS_DRUM_ENGINE_H_ + +#include "plaits/dsp/drums/analog_bass_drum.h" +#include "plaits/dsp/drums/synthetic_bass_drum.h" +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/fx/overdrive.h" +#include "plaits/dsp/fx/sample_rate_reducer.h" + +namespace plaits { + +class BassDrumEngine : public Engine { + public: + BassDrumEngine() { } + ~BassDrumEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + AnalogBassDrum analog_bass_drum_; + SyntheticBassDrum synthetic_bass_drum_; + + Overdrive overdrive_; + + DISALLOW_COPY_AND_ASSIGN(BassDrumEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_BASS_DRUM_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/chord_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/chord_engine.cc new file mode 100644 index 00000000..9b0192ba --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/chord_engine.cc @@ -0,0 +1,241 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Chords: wavetable and divide-down organ/string machine. + +#include "plaits/dsp/engine/chord_engine.h" + +#include + +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +const float chords[kChordNumChords][kChordNumNotes] = { + { 0.00f, 0.01f, 11.99f, 12.00f }, // OCT + { 0.00f, 7.01f, 7.00f, 12.00f }, // 5 + { 0.00f, 5.00f, 7.00f, 12.00f }, // sus4 + { 0.00f, 3.00f, 7.00f, 12.00f }, // m + { 0.00f, 3.00f, 7.00f, 10.00f }, // m7 + { 0.00f, 3.00f, 10.00f, 14.00f }, // m9 + { 0.00f, 3.00f, 10.00f, 17.00f }, // m11 + { 0.00f, 2.00f, 9.00f, 16.00f }, // 69 + { 0.00f, 4.00f, 11.00f, 14.00f }, // M9 + { 0.00f, 4.00f, 7.00f, 11.00f }, // M7 + { 0.00f, 4.00f, 7.00f, 12.00f }, // M +}; + +void ChordEngine::Init(BufferAllocator* allocator) { + for (int i = 0; i < kChordNumVoices; ++i) { + divide_down_voice_[i].Init(); + wavetable_voice_[i].Init(); + } + chord_index_quantizer_.Init(); + morph_lp_ = 0.0f; + timbre_lp_ = 0.0f; + + ratios_ = allocator->Allocate(kChordNumChords * kChordNumVoices); +} + +void ChordEngine::Reset() { + for (int i = 0; i < kChordNumChords; ++i) { + for (int j = 0; j < kChordNumVoices; ++j) { + ratios_[i * kChordNumVoices + j] = SemitonesToRatio(chords[i][j]); + } + } +} + +const float fade_point[kChordNumVoices] = { + 0.55f, 0.47f, 0.49f, 0.51f, 0.53f +}; + +const int kRegistrationTableSize = 8; +const float registrations[kRegistrationTableSize][kChordNumHarmonics * 2] = { + { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, // Square + { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }, // Saw + { 0.5f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f }, // Saw + saw + { 0.33f, 0.0f, 0.33f, 0.0f, 0.33f, 0.0f }, // Full saw + { 0.33f, 0.0f, 0.0f, 0.33f, 0.0f, 0.33f }, // Full saw + square hybrid + { 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f }, // Saw + high square harmo + { 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f }, // Square + high square harmo + { 0.0f, 0.1f, 0.1f, 0.0f, 0.2f, 0.6f }, // // Saw+square + high harmo +}; + +void ChordEngine::ComputeRegistration( + float registration, + float* amplitudes) { + registration *= (kRegistrationTableSize - 1.001f); + MAKE_INTEGRAL_FRACTIONAL(registration); + + for (int i = 0; i < kChordNumHarmonics * 2; ++i) { + float a = registrations[registration_integral][i]; + float b = registrations[registration_integral + 1][i]; + amplitudes[i] = a + (b - a) * registration_fractional; + } +} + +int ChordEngine::ComputeChordInversion( + int chord_index, + float inversion, + float* ratios, + float* amplitudes) { + const float* base_ratio = &ratios_[chord_index * kChordNumVoices]; + inversion = inversion * float(kChordNumNotes * 5); + + MAKE_INTEGRAL_FRACTIONAL(inversion); + + int num_rotations = inversion_integral / kChordNumNotes; + int rotated_note = inversion_integral % kChordNumNotes; + + const float kBaseGain = 0.25f; + + int mask = 0; + + for (int i = 0; i < kChordNumNotes; ++i) { + float transposition = 0.25f * static_cast( + 1 << ((kChordNumNotes - 1 + inversion_integral - i) / kChordNumNotes)); + int target_voice = (i - num_rotations + kChordNumVoices) % kChordNumVoices; + int previous_voice = (target_voice - 1 + kChordNumVoices) % kChordNumVoices; + + if (i == rotated_note) { + ratios[target_voice] = base_ratio[i] * transposition; + ratios[previous_voice] = ratios[target_voice] * 2.0f; + amplitudes[previous_voice] = kBaseGain * inversion_fractional; + amplitudes[target_voice] = kBaseGain * (1.0f - inversion_fractional); + } else if (i < rotated_note) { + ratios[previous_voice] = base_ratio[i] * transposition; + amplitudes[previous_voice] = kBaseGain; + } else { + ratios[target_voice] = base_ratio[i] * transposition; + amplitudes[target_voice] = kBaseGain; + } + + if (i == 0) { + if (i >= rotated_note) { + mask |= 1 << target_voice; + } + if (i <= rotated_note) { + mask |= 1 << previous_voice; + } + } + } + return mask; +} + +#define WAVE(bank, row, column) &wav_integrated_waves[(bank * 64 + row * 8 + column) * 260] + +const int16_t* wavetable[] = { + WAVE(2, 6, 1), + WAVE(2, 6, 6), + WAVE(2, 6, 4), + WAVE(0, 6, 0), + WAVE(0, 6, 1), + WAVE(0, 6, 2), + WAVE(0, 6, 7), + WAVE(2, 4, 7), + WAVE(2, 4, 6), + WAVE(2, 4, 5), + WAVE(2, 4, 4), + WAVE(2, 4, 3), + WAVE(2, 4, 2), + WAVE(2, 4, 1), + WAVE(2, 4, 0), +}; + +void ChordEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + ONE_POLE(morph_lp_, parameters.morph, 0.1f); + ONE_POLE(timbre_lp_, parameters.timbre, 0.1f); + + const int chord_index = chord_index_quantizer_.Process( + parameters.harmonics * 1.02f, kChordNumChords); + + float harmonics[kChordNumHarmonics * 2 + 2]; + float note_amplitudes[kChordNumVoices]; + float registration = max(1.0f - morph_lp_ * 2.15f, 0.0f); + + ComputeRegistration(registration, harmonics); + harmonics[kChordNumHarmonics * 2] = 0.0f; + + float ratios[kChordNumVoices]; + int aux_note_mask = ComputeChordInversion( + chord_index, + timbre_lp_, + ratios, + note_amplitudes); + + fill(&out[0], &out[size], 0.0f); + fill(&aux[0], &aux[size], 0.0f); + + const float f0 = NoteToFrequency(parameters.note) * 0.998f; + const float waveform = max((morph_lp_ - 0.535f) * 2.15f, 0.0f); + + for (int note = 0; note < kChordNumVoices; ++note) { + float wavetable_amount = 50.0f * (morph_lp_ - fade_point[note]); + CONSTRAIN(wavetable_amount, 0.0f, 1.0f); + + float divide_down_amount = 1.0f - wavetable_amount; + float* destination = (1 << note) & aux_note_mask ? aux : out; + + const float note_f0 = f0 * ratios[note]; + float divide_down_gain = 4.0f - note_f0 * 32.0f; + CONSTRAIN(divide_down_gain, 0.0f, 1.0f); + divide_down_amount *= divide_down_gain; + + if (wavetable_amount) { + wavetable_voice_[note].Render( + note_f0 * 1.004f, + note_amplitudes[note] * wavetable_amount, + waveform, + wavetable, + destination, + size); + } + + if (divide_down_amount) { + divide_down_voice_[note].Render( + note_f0, + harmonics, + note_amplitudes[note] * divide_down_amount, + destination, + size); + } + } + + for (size_t i = 0; i < size; ++i) { + out[i] += aux[i]; + aux[i] *= 3.0f; + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/chord_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/chord_engine.h new file mode 100644 index 00000000..cd999af6 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/chord_engine.h @@ -0,0 +1,81 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Chords: wavetable and divide-down organ/string machine. + +#ifndef PLAITS_DSP_ENGINE_CHORD_ENGINE_H_ +#define PLAITS_DSP_ENGINE_CHORD_ENGINE_H_ + +#include "stmlib/dsp/hysteresis_quantizer.h" + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/oscillator/string_synth_oscillator.h" +#include "plaits/dsp/oscillator/wavetable_oscillator.h" + +namespace plaits { + +const int kChordNumNotes = 4; +const int kChordNumVoices = 5; +const int kChordNumChords = 11; +const int kChordNumHarmonics = 3; + +class ChordEngine : public Engine { + public: + ChordEngine() { } + ~ChordEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + void ComputeRegistration(float registration, float* amplitudes); + int ComputeChordInversion( + int chord_index, + float inversion, + float* ratios, + float* amplitudes); + + StringSynthOscillator divide_down_voice_[kChordNumVoices]; + WavetableOscillator<256, 15> wavetable_voice_[kChordNumVoices]; + stmlib::HysteresisQuantizer chord_index_quantizer_; + + float morph_lp_; + float timbre_lp_; + float previous_root_normalization_; + + float* ratios_; + + DISALLOW_COPY_AND_ASSIGN(ChordEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_CHORD_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/engine.h new file mode 100644 index 00000000..3b92ae33 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/engine.h @@ -0,0 +1,132 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Base class for all engines. + +#ifndef PLAITS_DSP_ENGINE_ENGINE_H_ +#define PLAITS_DSP_ENGINE_ENGINE_H_ + +#include "plaits/dsp/dsp.h" + +#include "stmlib/dsp/units.h" +#include "stmlib/utils/buffer_allocator.h" + +namespace plaits { + +inline float NoteToFrequency(float midi_note) { + midi_note -= 9.0f; + CONSTRAIN(midi_note, -128.0f, 127.0f); + return a0 * 0.25f * stmlib::SemitonesToRatio(midi_note); +} + +enum TriggerState { + TRIGGER_LOW = 0, + TRIGGER_RISING_EDGE = 1, + TRIGGER_UNPATCHED = 2, + TRIGGER_UNPATCHED_AUTOTRIGGED = 3, +}; + +struct EngineParameters { + TriggerState trigger; + float note; + float timbre; + float morph; + float harmonics; + float accent; +}; + +struct PostProcessingSettings { + // A negative value indicates that a limiter must be used. + float out_gain; + float aux_gain; + + // When this flag is set to true, the engine declares that it will + // render a signal that already has an envelope (eg: modal drum, 808 kick). + // By reporting this information, the synthesis voice upstream will + // bypass the internal envelope/LPG. + // + // This parameter can be changed on a per-call basis when calling Render() + // This is used by the speech synthesis engine, which renders either + // a continuous vowel sound (which needs to be enveloped by the LPG) + // or a word/sentence (which is already enveloped). + bool already_enveloped; +}; + +class Engine { + public: + Engine() { } + ~Engine() { } + virtual void Init(stmlib::BufferAllocator* allocator) = 0; + virtual void Reset() = 0; + virtual void Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) = 0; + PostProcessingSettings post_processing_settings; +}; + +template +class EngineRegistry { + public: + EngineRegistry() { } + ~EngineRegistry() { } + + void Init() { + num_engines_ = 0; + } + + inline Engine* get(int index) { + return engine_[index]; + } + + void RegisterInstance( + Engine* instance, + bool already_enveloped, + float out_gain, + float aux_gain) { + if (num_engines_ >= max_size) { + return; + } + engine_[num_engines_] = instance; + PostProcessingSettings* s = &instance->post_processing_settings; + s->already_enveloped = already_enveloped; + s->out_gain = out_gain; + s->aux_gain = aux_gain; + ++num_engines_; + } + + inline int size() const { return num_engines_; } + + private: + Engine* engine_[max_size]; + int num_engines_; +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/fm_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/fm_engine.cc new file mode 100644 index 00000000..c2d47274 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/fm_engine.cc @@ -0,0 +1,166 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Classic 2-op FM found in Braids, Rings and Elements. + +#include "plaits/dsp/engine/fm_engine.h" + +#include "stmlib/dsp/parameter_interpolator.h" + +#include "plaits/resources.h" + +namespace plaits { + +using namespace stmlib; + +void FMEngine::Init(BufferAllocator* allocator) { + carrier_phase_ = 0; + modulator_phase_ = 0; + sub_phase_ = 0; + + previous_carrier_frequency_ = a0; + previous_modulator_frequency_ = a0; + previous_amount_ = 0.0f; + previous_feedback_ = 0.0f; + previous_sample_ = 0.0f; +} + +void FMEngine::Reset() { + +} + +inline float FMEngine::SinePM(uint32_t phase, float fm) const { + phase += (static_cast((fm + 4.0f) * 536870912.0f)) << 3; + uint32_t integral = phase >> 22; + float fractional = static_cast(phase << 10) / 4294967296.0f; + float a = lut_sine[integral]; + float b = lut_sine[integral + 1]; + return a + (b - a) * fractional; +} + +const size_t kOversampling = 4; +const size_t kFirHalfSize = 4; + +static const float fir_coefficient[kFirHalfSize] = { + 0.02442415f, 0.09297315f, 0.16712938f, 0.21547332f, +}; + +class Downsampler { + public: + Downsampler(float* state) { + head_ = *state; + tail_ = 0.0f; + state_ = state; + } + ~Downsampler() { + *state_ = head_; + } + inline void Accumulate(int i, float sample) { + head_ += sample * fir_coefficient[3 - (i & 3)]; + tail_ += sample * fir_coefficient[i & 3]; + } + + inline float Read() { + float value = head_; + head_ = tail_; + tail_ = 0.0f; + return value; + } + private: + float head_; + float tail_; + float* state_; + + DISALLOW_COPY_AND_ASSIGN(Downsampler); +}; + +void FMEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + + // 4x oversampling + const float note = parameters.note - 24.0f; + + const float ratio = Interpolate( + lut_fm_frequency_quantizer, + parameters.harmonics, + 128.0f); + + float modulator_note = note + ratio; + float target_modulator_frequency = NoteToFrequency(modulator_note); + CONSTRAIN(target_modulator_frequency, 0.0f, 0.5f); + + // Reduce the maximum FM index for high pitched notes, to prevent aliasing. + float hf_taming = 1.0f - (modulator_note - 72.0f) * 0.025f; + CONSTRAIN(hf_taming, 0.0f, 1.0f); + hf_taming *= hf_taming; + + ParameterInterpolator carrier_frequency( + &previous_carrier_frequency_, NoteToFrequency(note), size); + ParameterInterpolator modulator_frequency( + &previous_modulator_frequency_, target_modulator_frequency, size); + ParameterInterpolator amount_modulation( + &previous_amount_, + 2.0f * parameters.timbre * parameters.timbre * hf_taming, + size); + ParameterInterpolator feedback_modulation( + &previous_feedback_, 2.0f * parameters.morph - 1.0f, size); + + Downsampler carrier_downsampler(&carrier_fir_); + Downsampler sub_downsampler(&sub_fir_); + + while (size--) { + const float amount = amount_modulation.Next(); + const float feedback = feedback_modulation.Next(); + float phase_feedback = feedback < 0.0f ? 0.5f * feedback * feedback : 0.0f; + const uint32_t carrier_increment = static_cast( + 4294967296.0f * carrier_frequency.Next()); + float _modulator_frequency = modulator_frequency.Next(); + + for (size_t j = 0; j < kOversampling; ++j) { + modulator_phase_ += static_cast(4294967296.0f * \ + _modulator_frequency * (1.0f + previous_sample_ * phase_feedback)); + carrier_phase_ += carrier_increment; + sub_phase_ += carrier_increment >> 1; + float modulator_fb = feedback > 0.0f ? 0.25f * feedback * feedback : 0.0f; + float modulator = SinePM( + modulator_phase_, modulator_fb * previous_sample_); + float carrier = SinePM(carrier_phase_, amount * modulator); + float sub = SinePM(sub_phase_, amount * carrier * 0.25f); + ONE_POLE(previous_sample_, carrier, 0.05f); + carrier_downsampler.Accumulate(j, carrier); + sub_downsampler.Accumulate(j, sub); + } + + *out++ = carrier_downsampler.Read(); + *aux++ = sub_downsampler.Read(); + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/fm_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/fm_engine.h new file mode 100644 index 00000000..53af497a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/fm_engine.h @@ -0,0 +1,70 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Classic 2-op FM, as found in Braids, Rings and Elements. + +#ifndef PLAITS_DSP_ENGINE_FM_ENGINE_H_ +#define PLAITS_DSP_ENGINE_FM_ENGINE_H_ + +#include "plaits/dsp/engine/engine.h" + +namespace plaits { + +class FMEngine : public Engine { + public: + FMEngine() { } + ~FMEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + inline float SinePM(uint32_t phase, float fm) const; + + uint32_t carrier_phase_; + uint32_t modulator_phase_; + uint32_t sub_phase_; + + float previous_carrier_frequency_; + float previous_modulator_frequency_; + float previous_amount_; + float previous_feedback_; + float previous_sample_; + + float sub_fir_; + float carrier_fir_; + + DISALLOW_COPY_AND_ASSIGN(FMEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_FM_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/grain_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/grain_engine.cc new file mode 100644 index 00000000..e6ff9023 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/grain_engine.cc @@ -0,0 +1,89 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Windowed sine segments. + +#include + +#include "plaits/dsp/engine/grain_engine.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void GrainEngine::Init(BufferAllocator* allocator) { + grainlet_[0].Init(); + grainlet_[1].Init(); + // vosim_oscillator_.Init(); + z_oscillator_.Init(); + dc_blocker_[0].Init(); + dc_blocker_[1].Init(); +} + +void GrainEngine::Reset() { + +} + +void GrainEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float root = parameters.note; + const float f0 = NoteToFrequency(root); + + const float f1 = NoteToFrequency(24.0f + 84.0f * parameters.timbre); + const float ratio = SemitonesToRatio(-24.0f + 48.0f * parameters.harmonics); + const float carrier_bleed = parameters.harmonics < 0.5f + ? 1.0f - 2.0f * parameters.harmonics + : 0.0f; + const float carrier_bleed_fixed = carrier_bleed * (2.0f - carrier_bleed); + const float carrier_shape = 0.33f + (parameters.morph - 0.33f) * \ + max(1.0f - f0 * 24.0f, 0.0f); + + grainlet_[0].Render(f0, f1, carrier_shape, carrier_bleed_fixed, out, size); + grainlet_[1].Render(f0, f1 * ratio, carrier_shape, carrier_bleed_fixed, aux, size); + dc_blocker_[0].set_f(0.3f * f0); + for (size_t i = 0; i < size; ++i) { + out[i] = dc_blocker_[0].Process(out[i] + aux[i]); + } + + const float cutoff = NoteToFrequency(root + 96.0f * parameters.timbre); + z_oscillator_.Render( + f0, + cutoff, + parameters.morph, + parameters.harmonics, + aux, + size); + + dc_blocker_[1].set_f(0.3f * f0); + dc_blocker_[1].Process(aux, size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/grain_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/grain_engine.h new file mode 100644 index 00000000..240d4e13 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/grain_engine.h @@ -0,0 +1,67 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Windowed sine segments. + +#ifndef PLAITS_DSP_ENGINE_GRAIN_ENGINE_H_ +#define PLAITS_DSP_ENGINE_GRAIN_ENGINE_H_ + +#include "stmlib/dsp/filter.h" + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/oscillator/grainlet_oscillator.h" +#include "plaits/dsp/oscillator/vosim_oscillator.h" +#include "plaits/dsp/oscillator/z_oscillator.h" + +namespace plaits { + +class GrainEngine : public Engine { + public: + GrainEngine() { } + ~GrainEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + GrainletOscillator grainlet_[2]; + // VOSIMOscillator vosim_oscillator_; + ZOscillator z_oscillator_; + stmlib::OnePole dc_blocker_[2]; + + float grain_balance_; + + DISALLOW_COPY_AND_ASSIGN(GrainEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_GRAIN_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/hi_hat_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/hi_hat_engine.cc new file mode 100644 index 00000000..50e2e130 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/hi_hat_engine.cc @@ -0,0 +1,82 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808-style HH with two noise sources - one faithful to the original, the other +// more metallic. + +#include "plaits/dsp/engine/hi_hat_engine.h" + +namespace plaits { + +using namespace stmlib; + +void HiHatEngine::Init(BufferAllocator* allocator) { + hi_hat_1_.Init(); + hi_hat_2_.Init(); + temp_buffer_[0] = allocator->Allocate(kMaxBlockSize); + temp_buffer_[1] = allocator->Allocate(kMaxBlockSize); +} + +void HiHatEngine::Reset() { + +} + +void HiHatEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + + hi_hat_1_.Render( + parameters.trigger & TRIGGER_UNPATCHED, + parameters.trigger & TRIGGER_RISING_EDGE, + parameters.accent, + f0, + parameters.timbre, + parameters.morph, + parameters.harmonics, + temp_buffer_[0], + temp_buffer_[1], + out, + size); + + hi_hat_2_.Render( + parameters.trigger & TRIGGER_UNPATCHED, + parameters.trigger & TRIGGER_RISING_EDGE, + parameters.accent, + f0, + parameters.timbre, + parameters.morph, + parameters.harmonics, + temp_buffer_[0], + temp_buffer_[1], + aux, + size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/hi_hat_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/hi_hat_engine.h new file mode 100644 index 00000000..04e80f0e --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/hi_hat_engine.h @@ -0,0 +1,62 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808-style HH with two noise sources - one faithful to the original, the other +// more metallic. + +#ifndef PLAITS_DSP_ENGINE_HI_HAT_ENGINE_H_ +#define PLAITS_DSP_ENGINE_HI_HAT_ENGINE_H_ + +#include "plaits/dsp/drums/hi_hat.h" +#include "plaits/dsp/engine/engine.h" + +namespace plaits { + +class HiHatEngine : public Engine { + public: + HiHatEngine() { } + ~HiHatEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + HiHat hi_hat_1_; + HiHat hi_hat_2_; + + float* temp_buffer_[2]; + + DISALLOW_COPY_AND_ASSIGN(HiHatEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_HI_HAT_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/modal_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/modal_engine.cc new file mode 100644 index 00000000..55855ffb --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/modal_engine.cc @@ -0,0 +1,73 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// One voice of modal synthesis. + +#include "plaits/dsp/engine/modal_engine.h" + +#include + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void ModalEngine::Init(BufferAllocator* allocator) { + temp_buffer_ = allocator->Allocate(kMaxBlockSize); + harmonics_lp_ = 0.0f; + Reset(); +} + +void ModalEngine::Reset() { + voice_.Init(); +} + +void ModalEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + fill(&out[0], &out[size], 0.0f); + fill(&aux[0], &aux[size], 0.0f); + + ONE_POLE(harmonics_lp_, parameters.harmonics, 0.01f); + + voice_.Render( + parameters.trigger & TRIGGER_UNPATCHED, + parameters.trigger & TRIGGER_RISING_EDGE, + parameters.accent, + NoteToFrequency(parameters.note), + harmonics_lp_, + parameters.timbre, + parameters.morph, + temp_buffer_, + out, + aux, + size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/modal_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/modal_engine.h new file mode 100644 index 00000000..34b0eeeb --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/modal_engine.h @@ -0,0 +1,60 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// One voice of modal synthesis. + +#ifndef PLAITS_DSP_ENGINE_MODAL_ENGINE_H_ +#define PLAITS_DSP_ENGINE_MODAL_ENGINE_H_ + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/physical_modelling/modal_voice.h" + +namespace plaits { + +class ModalEngine : public Engine { + public: + ModalEngine() { } + ~ModalEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + ModalVoice voice_; + float* temp_buffer_; + float harmonics_lp_; + + DISALLOW_COPY_AND_ASSIGN(ModalEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_MODAL_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/noise_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/noise_engine.cc new file mode 100644 index 00000000..bd842ed4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/noise_engine.cc @@ -0,0 +1,102 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Clocked noise processed by a multimode filter. + +#include "plaits/dsp/engine/noise_engine.h" + +#include "stmlib/dsp/parameter_interpolator.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void NoiseEngine::Init(BufferAllocator* allocator) { + clocked_noise_[0].Init(); + clocked_noise_[1].Init(); + lp_hp_filter_.Init(); + bp_filter_[0].Init(); + bp_filter_[1].Init(); + + previous_f0_ = 0.0f; + previous_f1_ = 0.0f; + previous_q_ = 0.0f; + previous_mode_ = 0.0f; + + temp_buffer_ = allocator->Allocate(kMaxBlockSize); +} + +void NoiseEngine::Reset() { + +} + +void NoiseEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + const float f1 = NoteToFrequency( + parameters.note + parameters.harmonics * 48.0f - 24.0f); + const float clock_lowest_note = parameters.trigger & TRIGGER_UNPATCHED + ? 0.0f + : -24.0f; + const float clock_f = NoteToFrequency( + parameters.timbre * (128.0f - clock_lowest_note) + clock_lowest_note); + const float q = 0.5f * SemitonesToRatio(parameters.morph * 120.0f); + const bool sync = parameters.trigger & TRIGGER_RISING_EDGE; + clocked_noise_[0].Render(sync, clock_f, aux, size); + clocked_noise_[1].Render(sync, clock_f * f1 / f0, temp_buffer_, size); + + ParameterInterpolator f0_modulation(&previous_f0_, f0, size); + ParameterInterpolator f1_modulation(&previous_f1_, f1, size); + ParameterInterpolator q_modulation(&previous_q_, q, size); + ParameterInterpolator mode_modulation( + &previous_mode_, parameters.harmonics, size); + + const float* in_1 = aux; + const float* in_2 = temp_buffer_; + while (size--) { + const float f0 = f0_modulation.Next(); + const float f1 = f1_modulation.Next(); + const float q = q_modulation.Next(); + const float gain = 1.0f / Sqrt((0.5f + q) * 40.0f * f0); + lp_hp_filter_.set_f_q(f0, q); + bp_filter_[0].set_f_q(f0, q); + bp_filter_[1].set_f_q(f1, q); + + float input_1 = *in_1++ * gain; + float input_2 = *in_2++ * gain; + lp_hp_filter_.ProcessMultimodeLPtoHP( + &input_1, out++, 1, mode_modulation.Next()); + *aux++ = bp_filter_[0].Process(input_1) + \ + bp_filter_[1].Process(input_2); + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/noise_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/noise_engine.h new file mode 100644 index 00000000..5d8d12d4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/noise_engine.h @@ -0,0 +1,69 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Clocked noise processed by a multimode filter. + +#ifndef PLAITS_DSP_ENGINE_NOISE_ENGINE_H_ +#define PLAITS_DSP_ENGINE_NOISE_ENGINE_H_ + +#include "stmlib/dsp/filter.h" + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/noise/clocked_noise.h" + +namespace plaits { + +class NoiseEngine : public Engine { + public: + NoiseEngine() { } + ~NoiseEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + ClockedNoise clocked_noise_[2]; + stmlib::Svf lp_hp_filter_; + stmlib::Svf bp_filter_[2]; + + float previous_f0_; + float previous_f1_; + float previous_q_; + float previous_mode_; + + float* temp_buffer_; + + DISALLOW_COPY_AND_ASSIGN(NoiseEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_NOISE_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/particle_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/particle_engine.cc new file mode 100644 index 00000000..20c287e0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/particle_engine.cc @@ -0,0 +1,99 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Clocked noise processed by a filter. + +#include "plaits/dsp/engine/particle_engine.h" + +#include + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void ParticleEngine::Init(BufferAllocator* allocator) { + for (int i = 0; i < kNumParticles; ++i) { + particle_[i].Init(); + } + diffuser_.Init(allocator->Allocate(8192)); + post_filter_.Init(); +} + +void ParticleEngine::Reset() { + diffuser_.Clear(); +} + +void ParticleEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + const float density_sqrt = NoteToFrequency( + 60.0f + parameters.timbre * parameters.timbre * 72.0f); + const float density = density_sqrt * density_sqrt * (1.0f / kNumParticles); + const float gain = 1.0f / density; + const float q_sqrt = SemitonesToRatio(parameters.morph >= 0.5f + ? (parameters.morph - 0.5f) * 120.0f + : 0.0f); + const float q = 0.5f + q_sqrt * q_sqrt; + const float spread = 48.0f * parameters.harmonics * parameters.harmonics; + const float raw_diffusion_sqrt = 2.0f * fabsf(parameters.morph - 0.5f); + const float raw_diffusion = raw_diffusion_sqrt * raw_diffusion_sqrt; + const float diffusion = parameters.morph < 0.5f + ? raw_diffusion + : 0.0f; + const bool sync = parameters.trigger & TRIGGER_RISING_EDGE; + + fill(&out[0], &out[size], 0.0f); + fill(&aux[0], &aux[size], 0.0f); + + for (int i = 0; i < kNumParticles; ++i) { + particle_[i].Render( + sync, + density, + gain, + f0, + spread, + q, + out, + aux, + size); + } + + post_filter_.set_f_q(min(f0, 0.49f), 0.5f); + post_filter_.Process(out, out, size); + + diffuser_.Process( + 0.8f * diffusion * diffusion, + 0.5f * diffusion + 0.25f, + out, + size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/particle_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/particle_engine.h new file mode 100644 index 00000000..b14dbc62 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/particle_engine.h @@ -0,0 +1,63 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Filtered random pulses. + +#ifndef PLAITS_DSP_ENGINE_PARTICLE_ENGINE_H_ +#define PLAITS_DSP_ENGINE_PARTICLE_ENGINE_H_ + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/fx/diffuser.h" +#include "plaits/dsp/noise/particle.h" + +namespace plaits { + +const int kNumParticles = 6; + +class ParticleEngine : public Engine { + public: + ParticleEngine() { } + ~ParticleEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + Particle particle_[kNumParticles]; + Diffuser diffuser_; + stmlib::Svf post_filter_; + + DISALLOW_COPY_AND_ASSIGN(ParticleEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_PARTICLE_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/snare_drum_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/snare_drum_engine.cc new file mode 100644 index 00000000..3f8b04ee --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/snare_drum_engine.cc @@ -0,0 +1,78 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808 and synthetic snare drum generators. + +#include "plaits/dsp/engine/snare_drum_engine.h" + +#include + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void SnareDrumEngine::Init(BufferAllocator* allocator) { + analog_snare_drum_.Init(); + synthetic_snare_drum_.Init(); +} + +void SnareDrumEngine::Reset() { + +} + +void SnareDrumEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + + analog_snare_drum_.Render( + parameters.trigger & TRIGGER_UNPATCHED, + parameters.trigger & TRIGGER_RISING_EDGE, + parameters.accent, + f0, + parameters.timbre, + parameters.morph, + parameters.harmonics, + out, + size); + + synthetic_snare_drum_.Render( + parameters.trigger & TRIGGER_UNPATCHED, + parameters.trigger & TRIGGER_RISING_EDGE, + parameters.accent, + f0, + parameters.timbre, + parameters.morph, + parameters.harmonics, + aux, + size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/snare_drum_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/snare_drum_engine.h new file mode 100644 index 00000000..389f41ea --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/snare_drum_engine.h @@ -0,0 +1,60 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 808 and synthetic snare drum generators. + +#ifndef PLAITS_DSP_ENGINE_SNARE_DRUM_ENGINE_H_ +#define PLAITS_DSP_ENGINE_SNARE_DRUM_ENGINE_H_ + +#include "plaits/dsp/drums/analog_snare_drum.h" +#include "plaits/dsp/drums/synthetic_snare_drum.h" +#include "plaits/dsp/engine/engine.h" + +namespace plaits { + +class SnareDrumEngine : public Engine { + public: + SnareDrumEngine() { } + ~SnareDrumEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + AnalogSnareDrum analog_snare_drum_; + SyntheticSnareDrum synthetic_snare_drum_; + + DISALLOW_COPY_AND_ASSIGN(SnareDrumEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_SNARE_DRUM_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/speech_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/speech_engine.cc new file mode 100644 index 00000000..01272ee0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/speech_engine.cc @@ -0,0 +1,143 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Various flavours of speech synthesis. + +#include "plaits/dsp/engine/speech_engine.h" + +#include "plaits/dsp/speech/lpc_speech_synth_words.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void SpeechEngine::Init(BufferAllocator* allocator) { + sam_speech_synth_.Init(); + naive_speech_synth_.Init(); + lpc_speech_synth_word_bank_.Init( + word_banks_, + LPC_SPEECH_SYNTH_NUM_WORD_BANKS, + allocator); + lpc_speech_synth_controller_.Init(&lpc_speech_synth_word_bank_); + word_bank_quantizer_.Init(); + + temp_buffer_[0] = allocator->Allocate(kMaxBlockSize); + temp_buffer_[1] = allocator->Allocate(kMaxBlockSize); + + prosody_amount_ = 0.0f; + speed_ = 1.0f; +} + +void SpeechEngine::Reset() { + lpc_speech_synth_word_bank_.Reset(); +} + +void SpeechEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + + const float group = parameters.harmonics * 6.0f; + + // Interpolates between the 3 models: naive, SAM, LPC. + if (group <= 2.0f) { + *already_enveloped = false; + + float blend = group; + if (group <= 1.0f) { + naive_speech_synth_.Render( + parameters.trigger == TRIGGER_RISING_EDGE, + f0, + parameters.morph, + parameters.timbre, + temp_buffer_[0], + aux, + out, + size); + } else { + lpc_speech_synth_controller_.Render( + parameters.trigger & TRIGGER_UNPATCHED, + parameters.trigger & TRIGGER_RISING_EDGE, + -1, + f0, + 0.0f, + 0.0f, + parameters.morph, + parameters.timbre, + 1.0f, + aux, + out, + size); + blend = 2.0f - blend; + } + + sam_speech_synth_.Render( + parameters.trigger == TRIGGER_RISING_EDGE, + f0, + parameters.morph, + parameters.timbre, + temp_buffer_[0], + temp_buffer_[1], + size); + + blend *= blend * (3.0f - 2.0f * blend); + blend *= blend * (3.0f - 2.0f * blend); + for (size_t i = 0; i < size; ++i) { + aux[i] += (temp_buffer_[0][i] - aux[i]) * blend; + out[i] += (temp_buffer_[1][i] - out[i]) * blend; + } + } else { + // Change phonemes/words for LPC. + const int word_bank = word_bank_quantizer_.Process( + (group - 2.0f) * 0.275f, + LPC_SPEECH_SYNTH_NUM_WORD_BANKS + 1) - 1; + + const bool replay_prosody = word_bank >= 0 && \ + !(parameters.trigger & TRIGGER_UNPATCHED); + + *already_enveloped = replay_prosody; + + lpc_speech_synth_controller_.Render( + parameters.trigger & TRIGGER_UNPATCHED, + parameters.trigger & TRIGGER_RISING_EDGE, + word_bank, + f0, + prosody_amount_, + speed_, + parameters.morph, + parameters.timbre, + replay_prosody ? parameters.accent : 1.0f, + aux, + out, + size); + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/speech_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/speech_engine.h new file mode 100644 index 00000000..7076229f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/speech_engine.h @@ -0,0 +1,80 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Various flavours of speech synthesis. + +#ifndef PLAITS_DSP_ENGINE_SPEECH_ENGINE_H_ +#define PLAITS_DSP_ENGINE_SPEECH_ENGINE_H_ + +#include "stmlib/dsp/hysteresis_quantizer.h" + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/speech/lpc_speech_synth_controller.h" +#include "plaits/dsp/speech/naive_speech_synth.h" +#include "plaits/dsp/speech/sam_speech_synth.h" + +namespace plaits { + +class SpeechEngine : public Engine { + public: + SpeechEngine() { } + ~SpeechEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + inline void set_prosody_amount(float prosody_amount) { + prosody_amount_ = prosody_amount; + } + + inline void set_speed(float speed) { + speed_ = speed; + } + + private: + stmlib::HysteresisQuantizer word_bank_quantizer_; + + NaiveSpeechSynth naive_speech_synth_; + SAMSpeechSynth sam_speech_synth_; + + LPCSpeechSynthController lpc_speech_synth_controller_; + LPCSpeechSynthWordBank lpc_speech_synth_word_bank_; + + float* temp_buffer_[2]; + float prosody_amount_; + float speed_; + + DISALLOW_COPY_AND_ASSIGN(SpeechEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_SPEECH_ENGINE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/string_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/string_engine.cc new file mode 100644 index 00000000..8179e8e9 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/string_engine.cc @@ -0,0 +1,91 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Three voices of string synthesis. + +#include "plaits/dsp/engine/string_engine.h" + +#include + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void StringEngine::Init(BufferAllocator* allocator) { + temp_buffer_ = allocator->Allocate(kMaxBlockSize); + for (int i = 0; i < kNumStrings; ++i) { + voice_[i].Init(allocator); + f0_[i] = 0.01f; + } + active_string_ = kNumStrings - 1; + f0_delay_.Init(allocator->Allocate(16)); +} + +void StringEngine::Reset() { + f0_delay_.Reset(); + for (int i = 0; i < kNumStrings; ++i) { + voice_[i].Reset(); + } +} + +void StringEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + if (parameters.trigger & TRIGGER_RISING_EDGE) { + // 8 in original firmware version. + // 05.01.18: mic.w: problem with microbrute. + f0_[active_string_] = f0_delay_.Read(14); + active_string_ = (active_string_ + 1) % kNumStrings; + } + + const float f0 = NoteToFrequency(parameters.note); + f0_[active_string_] = f0; + f0_delay_.Write(f0); + + fill(&out[0], &out[size], 0.0f); + fill(&aux[0], &aux[size], 0.0f); + + for (int i = 0; i < kNumStrings; ++i) { + voice_[i].Render( + parameters.trigger & TRIGGER_UNPATCHED && i == active_string_, + parameters.trigger & TRIGGER_RISING_EDGE && i == active_string_, + parameters.accent, + f0_[i], + parameters.harmonics, + parameters.timbre * parameters.timbre, + parameters.morph, + temp_buffer_, + out, + aux, + size); + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/string_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/string_engine.h new file mode 100644 index 00000000..186bada9 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/string_engine.h @@ -0,0 +1,65 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Three voices of string synthesis. + +#ifndef PLAITS_DSP_ENGINE_STRING_ENGINE_H_ +#define PLAITS_DSP_ENGINE_STRING_ENGINE_H_ + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/physical_modelling/string_voice.h" + +namespace plaits { + +const int kNumStrings = 3; + +class StringEngine : public Engine { + public: + StringEngine() { } + ~StringEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + StringVoice voice_[kNumStrings]; + + float f0_[kNumStrings]; + DelayLine f0_delay_; + int active_string_; + float* temp_buffer_; + + DISALLOW_COPY_AND_ASSIGN(StringEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_STRING_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/swarm_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/swarm_engine.cc new file mode 100644 index 00000000..84902095 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/swarm_engine.cc @@ -0,0 +1,84 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Swarm of sawtooths and sines. + +#include "plaits/dsp/engine/swarm_engine.h" + +#include + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void SwarmEngine::Init(BufferAllocator* allocator) { + const float n = (kNumSwarmVoices - 1) / 2; + for (int i = 0; i < kNumSwarmVoices; ++i) { + float rank = (static_cast(i) - n) / n; + swarm_voice_[i].Init(rank); + } +} + +void SwarmEngine::Reset() { } + +void SwarmEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + const float control_rate = static_cast(size); + const float density = NoteToFrequency(parameters.timbre * 120.0f) * \ + 0.025f * control_rate; + const float spread = parameters.harmonics * parameters.harmonics * \ + parameters.harmonics; + float size_ratio = 0.25f * SemitonesToRatio( + (1.0f - parameters.morph) * 84.0f); + + const bool burst_mode = !(parameters.trigger & TRIGGER_UNPATCHED); + const bool start_burst = parameters.trigger & TRIGGER_RISING_EDGE; + + fill(&out[0], &out[size], 0.0f); + fill(&aux[0], &aux[size], 0.0f); + + for (int i = 0; i < kNumSwarmVoices; ++i) { + swarm_voice_[i].Render( + f0, + density, + burst_mode, + start_burst, + spread, + size_ratio, + out, + aux, + size); + size_ratio *= 0.97f; + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/swarm_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/swarm_engine.h new file mode 100644 index 00000000..d1b84679 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/swarm_engine.h @@ -0,0 +1,255 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Swarm of sawtooths and sines. + +#ifndef PLAITS_DSP_ENGINE_SWARM_ENGINE_H_ +#define PLAITS_DSP_ENGINE_SWARM_ENGINE_H_ + +#include "stmlib/dsp/polyblep.h" +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/oscillator/oscillator.h" +#include "plaits/dsp/oscillator/string_synth_oscillator.h" +#include "plaits/dsp/oscillator/sine_oscillator.h" +#include "plaits/resources.h" + +namespace plaits { + +const int kNumSwarmVoices = 8; + +class GrainEnvelope { + public: + GrainEnvelope() { } + ~GrainEnvelope() { } + + void Init() { + from_ = 0.0f; + interval_ = 1.0f; + phase_ = 1.0f; + fm_ = 0.0f; + amplitude_ = 0.5f; + previous_size_ratio_ = 0.0f; + } + + inline void Step(float rate, bool burst_mode, bool start_burst) { + bool randomize = false; + if (start_burst) { + phase_ = 0.5f; + fm_ = 16.0f; + randomize = true; + } else { + phase_ += rate * fm_; + if (phase_ >= 1.0f) { + phase_ -= static_cast(static_cast(phase_)); + randomize = true; + } + } + + if (randomize) { + from_ += interval_; + interval_ = stmlib::Random::GetFloat() - from_; + // Randomize the duration of the grain. + if (burst_mode) { + fm_ *= 0.8f + 0.2f * stmlib::Random::GetFloat(); + } else { + fm_ = 0.5f + 1.5f * stmlib::Random::GetFloat(); + } + } + } + + inline float frequency(float size_ratio) const { + // We approximate two overlapping grains of frequencies f1 and f2 + // By a continuous tone ramping from f1 to f2. This allows a continuous + // transition between the "grain cloud" and "swarm of glissandi" textures. + if (size_ratio < 1.0f) { + return 2.0f * (from_ + interval_ * phase_) - 1.0f; + } else { + return from_; + } + } + + inline float amplitude(float size_ratio) { + float target_amplitude = 1.0f; + if (size_ratio >= 1.0f) { + float phase = (phase_ - 0.5f) * size_ratio; + CONSTRAIN(phase, -1.0f, 1.0f); + float e = stmlib::InterpolateWrap( + lut_sine, 0.5f * phase + 1.25f, 1024.0f); + target_amplitude = 0.5f * (e + 1.0f); + } + + if ((size_ratio >= 1.0f) ^ (previous_size_ratio_ >= 1.0f)) { + filter_coefficient_ = 0.5f; + } + filter_coefficient_ *= 0.95f; + + previous_size_ratio_ = size_ratio; + ONE_POLE(amplitude_, target_amplitude, 0.5f - filter_coefficient_); + return amplitude_; + } + + private: + float from_; + float interval_; + float phase_; + float fm_; + float amplitude_; + float previous_size_ratio_; + float filter_coefficient_; + + DISALLOW_COPY_AND_ASSIGN(GrainEnvelope); +}; + +class AdditiveSawOscillator { + public: + AdditiveSawOscillator() { } + ~AdditiveSawOscillator() { } + + inline void Init() { + phase_ = 0.0f; + next_sample_ = 0.0f; + frequency_ = 0.01f; + gain_ = 0.0f; + } + + inline void Render( + float frequency, + float level, + float* out, + size_t size) { + if (frequency >= kMaxFrequency) { + frequency = kMaxFrequency; + } + stmlib::ParameterInterpolator fm(&frequency_, frequency, size); + stmlib::ParameterInterpolator gain(&gain_, level, size); + + float next_sample = next_sample_; + float phase = phase_; + + while (size--) { + float this_sample = next_sample; + next_sample = 0.0f; + + const float frequency = fm.Next(); + + phase += frequency; + + if (phase >= 1.0f) { + phase -= 1.0f; + float t = phase / frequency; + this_sample -= stmlib::ThisBlepSample(t); + next_sample -= stmlib::NextBlepSample(t); + } + + next_sample += phase; + *out++ += (2.0f * this_sample - 1.0f) * gain.Next(); + } + phase_ = phase; + next_sample_ = next_sample; + } + + private: + // Oscillator state. + float phase_; + float next_sample_; + + // For interpolation of parameters. + float frequency_; + float gain_; + + DISALLOW_COPY_AND_ASSIGN(AdditiveSawOscillator); +}; + +class SwarmVoice { + public: + SwarmVoice() { } + ~SwarmVoice() { } + + void Init(float rank) { + rank_ = rank; + envelope_.Init(); + saw_.Init(); + sine_.Init(); + } + + void Render( + float f0, + float density, + bool burst_mode, + bool start_burst, + float spread, + float size_ratio, + float* saw, + float* sine, + size_t size) { + envelope_.Step(density, burst_mode, start_burst); + + const float scale = 1.0f / kNumSwarmVoices; + const float amplitude = envelope_.amplitude(size_ratio) * scale; + + const float expo_amount = envelope_.frequency(size_ratio); + f0 *= stmlib::SemitonesToRatio(48.0f * expo_amount * spread * rank_); + + const float linear_amount = rank_ * (rank_ + 0.01f) * spread * 0.25f; + f0 *= 1.0f + linear_amount; + + saw_.Render(f0, amplitude, saw, size); + sine_.Render(f0, amplitude, sine, size); + }; + + private: + float rank_; + + GrainEnvelope envelope_; + AdditiveSawOscillator saw_; + FastSineOscillator sine_; +}; + +class SwarmEngine : public Engine { + public: + SwarmEngine() { } + ~SwarmEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + SwarmVoice swarm_voice_[kNumSwarmVoices]; + + DISALLOW_COPY_AND_ASSIGN(SwarmEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_SWARM_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/virtual_analog_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/virtual_analog_engine.cc new file mode 100644 index 00000000..059fa440 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/virtual_analog_engine.cc @@ -0,0 +1,245 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 2 variable shape oscillators with sync, FM and crossfading. + +#include "plaits/dsp/engine/virtual_analog_engine.h" + +#include + +#include "stmlib/dsp/parameter_interpolator.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void VirtualAnalogEngine::Init(BufferAllocator* allocator) { + primary_.Init(); + auxiliary_.Init(); + sync_.Init(); + variable_saw_.Init(); + + auxiliary_amount_ = 0.0f; + xmod_amount_ = 0.0f; + + temp_buffer_ = allocator->Allocate(kMaxBlockSize); +} + +void VirtualAnalogEngine::Reset() { + +} + +const float intervals[5] = { + 0.0f, 7.01f, 12.01f, 19.01f, 24.01f +}; + +inline float Squash(float x) { + return x * x * (3.0f - 2.0f * x); +} + +float VirtualAnalogEngine::ComputeDetuning(float detune) const { + detune = 2.05f * detune - 1.025f; + CONSTRAIN(detune, -1.0f, 1.0f); + + float sign = detune < 0.0f ? -1.0f : 1.0f; + detune = detune * sign * 3.9999f; + MAKE_INTEGRAL_FRACTIONAL(detune); + + float a = intervals[detune_integral]; + float b = intervals[detune_integral + 1]; + return (a + (b - a) * Squash(Squash(detune_fractional))) * sign; +} + +void VirtualAnalogEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + +#if VA_VARIANT == 0 + + // 1 = variable waveshape controlled by TIMBRE. + // 2 = variable waveshape controlled by MORPH, detuned by HARMONICS. + // OUT = 1 + 2. + // AUX = 1 + sync 2. + const float auxiliary_detune = ComputeDetuning(parameters.harmonics); + const float primary_f = NoteToFrequency(parameters.note); + const float auxiliary_f = NoteToFrequency(parameters.note + auxiliary_detune); + const float sync_f = NoteToFrequency( + parameters.note + parameters.harmonics * 48.0f); + + float shape_1 = parameters.timbre * 1.5f; + CONSTRAIN(shape_1, 0.0f, 1.0f); + + float pw_1 = 0.5f + (parameters.timbre - 0.66f) * 1.4f; + CONSTRAIN(pw_1, 0.5f, 0.99f); + + float shape_2 = parameters.morph * 1.5f; + CONSTRAIN(shape_2, 0.0f, 1.0f); + + float pw_2 = 0.5f + (parameters.morph - 0.66f) * 1.4f; + CONSTRAIN(pw_2, 0.5f, 0.99f); + + primary_.Render( + primary_f, primary_f, pw_1, shape_1, temp_buffer_, size); + auxiliary_.Render(auxiliary_f, auxiliary_f, pw_2, shape_2, aux, size); + for (size_t i = 0; i < size; ++i) { + out[i] = (aux[i] + temp_buffer_[i]) * 0.5f; + } + + sync_.Render(primary_f, sync_f, pw_2, shape_2, aux, size); + for (size_t i = 0; i < size; ++i) { + aux[i] = (aux[i] + temp_buffer_[i]) * 0.5f; + } + +#elif VA_VARIANT == 1 + + // 1 = variable waveshape controlled by MORPH. + // 2 = variable waveshape controlled by MORPH. + // OUT = crossfade between 1 + 2, 1, 1 sync 2 controlled by TIMBRE. + // AUX = 2. + + float auxiliary_amount = max(0.5f - parameters.timbre, 0.0f) * 2.0f; + auxiliary_amount *= auxiliary_amount * 0.5f; + + const float xmod_amount = max(parameters.timbre - 0.5f, 0.0f) * 2.0f; + const float squashed_xmod_amount = xmod_amount * (2.0f - xmod_amount); + + const float auxiliary_detune = ComputeDetuning(parameters.harmonics); + const float primary_f = NoteToFrequency(parameters.note); + const float auxiliary_f = NoteToFrequency(parameters.note + auxiliary_detune); + const float sync_f = primary_f * SemitonesToRatio( + xmod_amount * (auxiliary_detune + 36.0f)); + + float shape = parameters.morph * 1.5f; + CONSTRAIN(shape, 0.0f, 1.0f); + + float pw = 0.5f + (parameters.morph - 0.66f) * 1.4f; + CONSTRAIN(pw, 0.5f, 0.99f); + + primary_.Render(primary_f, primary_f, pw, shape, out, size); + sync_.Render(primary_f, sync_f, pw, shape, aux, size); + + ParameterInterpolator xmod_amount_modulation( + &xmod_amount_, + squashed_xmod_amount * (2.0f - squashed_xmod_amount), + size); + for (size_t i = 0; i < size; ++i) { + out[i] += (aux[i] - out[i]) * xmod_amount_modulation.Next(); + } + + auxiliary_.Render(auxiliary_f, auxiliary_f, pw, shape, aux, size); + + ParameterInterpolator auxiliary_amount_modulation( + &auxiliary_amount_, + auxiliary_amount, + size); + for (size_t i = 0; i < size; ++i) { + out[i] += (aux[i] - out[i]) * auxiliary_amount_modulation.Next(); + } + +#elif VA_VARIANT == 2 + + // 1 = variable square controlled by TIMBRE. + // 2 = variable saw controlled by MORPH. + // OUT = 1 + 2. + // AUX = dual variable waveshape controlled by MORPH, self sync by TIMBRE. + + const float sync_amount = parameters.timbre * parameters.timbre; + const float auxiliary_detune = ComputeDetuning(parameters.harmonics); + const float primary_f = NoteToFrequency(parameters.note); + const float auxiliary_f = NoteToFrequency(parameters.note + auxiliary_detune); + const float primary_sync_f = NoteToFrequency( + parameters.note + sync_amount * 48.0f); + const float auxiliary_sync_f = NoteToFrequency( + parameters.note + auxiliary_detune + sync_amount * 48.0f); + + float shape = parameters.morph * 1.5f; + CONSTRAIN(shape, 0.0f, 1.0f); + + float pw = 0.5f + (parameters.morph - 0.66f) * 1.46f; + CONSTRAIN(pw, 0.5f, 0.995f); + + // Render monster sync to AUX. + primary_.Render(primary_f, primary_sync_f, pw, shape, out, size); + auxiliary_.Render(auxiliary_f, auxiliary_sync_f, pw, shape, aux, size); + for (size_t i = 0; i < size; ++i) { + aux[i] = (aux[i] - out[i]) * 0.5f; + } + + // Render double varishape to OUT. + float square_pw = 1.3f * parameters.timbre - 0.15f; + CONSTRAIN(square_pw, 0.005f, 0.5f); + + const float square_sync_ratio = parameters.timbre < 0.5f + ? 0.0f + : (parameters.timbre - 0.5f) * (parameters.timbre - 0.5f) * 4.0f * 48.0f; + + const float square_gain = min(parameters.timbre * 8.0f, 1.0f); + + float saw_pw = parameters.morph < 0.5f + ? parameters.morph + 0.5f + : 1.0f - (parameters.morph - 0.5f) * 2.0f; + saw_pw *= 1.1f; + CONSTRAIN(saw_pw, 0.005f, 1.0f); + + float saw_shape = 10.0f - 21.0f * parameters.morph; + CONSTRAIN(saw_shape, 0.0f, 1.0f); + + float saw_gain = 8.0f * (1.0f - parameters.morph); + CONSTRAIN(saw_gain, 0.02f, 1.0f); + + const float square_sync_f = NoteToFrequency( + parameters.note + square_sync_ratio); + + sync_.Render( + primary_f, square_sync_f, square_pw, 1.0f, temp_buffer_, size); + variable_saw_.Render(auxiliary_f, saw_pw, saw_shape, out, size); + + float norm = 1.0f / (std::max(square_gain, saw_gain)); + + ParameterInterpolator square_gain_modulation( + &auxiliary_amount_, + square_gain * 0.3f * norm, + size); + + ParameterInterpolator saw_gain_modulation( + &xmod_amount_, + saw_gain * 0.5f * norm, + size); + + for (size_t i = 0; i < size; ++i) { + out[i] = out[i] * saw_gain_modulation.Next() + \ + square_gain_modulation.Next() * temp_buffer_[i]; + } + +#endif // VA_VARIANT values + +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/virtual_analog_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/virtual_analog_engine.h new file mode 100644 index 00000000..1c919440 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/virtual_analog_engine.h @@ -0,0 +1,71 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 2 variable shape oscillators with sync and crossfading. + +#ifndef PLAITS_DSP_ENGINE_VIRTUAL_ANALOG_ENGINE_H_ +#define PLAITS_DSP_ENGINE_VIRTUAL_ANALOG_ENGINE_H_ + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/oscillator/variable_saw_oscillator.h" +#include "plaits/dsp/oscillator/variable_shape_oscillator.h" + +#define VA_VARIANT 2 + +namespace plaits { + +class VirtualAnalogEngine : public Engine { + public: + VirtualAnalogEngine() { } + ~VirtualAnalogEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + float ComputeDetuning(float detune) const; + + VariableShapeOscillator primary_; + VariableShapeOscillator auxiliary_; + + VariableShapeOscillator sync_; + VariableSawOscillator variable_saw_; + + float auxiliary_amount_; + float xmod_amount_; + float* temp_buffer_; + + DISALLOW_COPY_AND_ASSIGN(VirtualAnalogEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_VIRTUAL_ANALOG_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/waveshaping_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/waveshaping_engine.cc new file mode 100644 index 00000000..6a06a6ca --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/waveshaping_engine.cc @@ -0,0 +1,136 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Slope -> Waveshaper -> Wavefolder. + +#include "plaits/dsp/engine/waveshaping_engine.h" + +#include + +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/utils/dsp.h" + +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void WaveshapingEngine::Init(BufferAllocator* allocator) { + slope_.Init(); + triangle_.Init(); + previous_shape_ = 0.0f; + previous_wavefolder_gain_ = 0.0f; + previous_overtone_gain_ = 0.0f; +} + +void WaveshapingEngine::Reset() { + +} + +float Tame(float f0, float harmonics, float order) { + f0 *= harmonics; + float max_f = 0.5f / order; + float max_amount = 1.0f - (f0 - max_f) / (0.5f - max_f); + CONSTRAIN(max_amount, 0.0f, 1.0f); + return max_amount * max_amount * max_amount; +} + +void WaveshapingEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float root = parameters.note; + + const float f0 = NoteToFrequency(root); + const float pw = parameters.morph * 0.45f + 0.5f; + + // Start from bandlimited slope signal. + slope_.Render(f0, pw, out, size); + triangle_.Render(f0, 0.5f, aux, size); + + // Try to estimate how rich the spectrum is, and reduce the range of the + // waveshaping control accordingly. + const float slope = 3.0f + fabsf(parameters.morph - 0.5f) * 5.0f; + const float shape_amount = fabsf(parameters.harmonics - 0.5f) * 2.0f; + const float shape_amount_attenuation = Tame(f0, slope, 16.0f); + const float wavefolder_gain = parameters.timbre; + const float wavefolder_gain_attenuation = Tame( + f0, + slope * (3.0f + shape_amount * shape_amount_attenuation * 5.0f), + 12.0f); + + // Apply waveshaper / wavefolder. + ParameterInterpolator shape_modulation( + &previous_shape_, + 0.5f + (parameters.harmonics - 0.5f) * shape_amount_attenuation, + size); + ParameterInterpolator wf_gain_modulation( + &previous_wavefolder_gain_, + 0.03f + 0.46f * wavefolder_gain * wavefolder_gain_attenuation, + size); + const float overtone_gain = parameters.timbre * (2.0f - parameters.timbre); + ParameterInterpolator overtone_gain_modulation( + &previous_overtone_gain_, + overtone_gain * (2.0f - overtone_gain), + size); + + for (size_t i = 0; i < size; ++i) { + float shape = shape_modulation.Next() * 3.9999f; + MAKE_INTEGRAL_FRACTIONAL(shape); + + const int16_t* shape_1 = lookup_table_i16_table[shape_integral]; + const int16_t* shape_2 = lookup_table_i16_table[shape_integral + 1]; + + float ws_index = 127.0f * out[i] + 128.0f; + MAKE_INTEGRAL_FRACTIONAL(ws_index) + ws_index_integral &= 255; + + float x0 = static_cast(shape_1[ws_index_integral]) / 32768.0f; + float x1 = static_cast(shape_1[ws_index_integral + 1]) / 32768.0f; + float x = x0 + (x1 - x0) * ws_index_fractional; + + float y0 = static_cast(shape_2[ws_index_integral]) / 32768.0f; + float y1 = static_cast(shape_2[ws_index_integral + 1]) / 32768.0f; + float y = y0 + (y1 - y0) * ws_index_fractional; + + float mix = x + (y - x) * shape_fractional; + float index = mix * wf_gain_modulation.Next() + 0.5f; + float fold = InterpolateHermite( + lut_fold + 1, index, 512.0f); + float fold_2 = -InterpolateHermite( + lut_fold_2 + 1, index, 512.0f); + + float sine = InterpolateWrap(lut_sine, aux[i] * 0.25f + 0.5f, 1024.0f); + out[i] = fold; + aux[i] = sine + (fold_2 - sine) * overtone_gain_modulation.Next(); + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/waveshaping_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/waveshaping_engine.h new file mode 100644 index 00000000..59f7e9f2 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/waveshaping_engine.h @@ -0,0 +1,62 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Slope -> Waveshaper -> Wavefolder. + +#ifndef PLAITS_DSP_ENGINE_WAVESHAPING_ENGINE_H_ +#define PLAITS_DSP_ENGINE_WAVESHAPING_ENGINE_H_ + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/oscillator/oscillator.h" + +namespace plaits { + +class WaveshapingEngine : public Engine { + public: + WaveshapingEngine() { } + ~WaveshapingEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + Oscillator slope_; + Oscillator triangle_; + float previous_shape_; + float previous_wavefolder_gain_; + float previous_overtone_gain_; + + DISALLOW_COPY_AND_ASSIGN(WaveshapingEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_WAVESHAPING_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/wavetable_engine.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/wavetable_engine.cc new file mode 100644 index 00000000..21ca6510 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/wavetable_engine.cc @@ -0,0 +1,197 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 8x8x3 wave terrain. + +#include "plaits/dsp/engine/wavetable_engine.h" + +#include + +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void WavetableEngine::Init(BufferAllocator* allocator) { + phase_ = 0.0f; + + x_lp_ = 0.0f; + y_lp_ = 0.0f; + z_lp_ = 0.0f; + + x_pre_lp_ = 0.0f; + y_pre_lp_ = 0.0f; + z_pre_lp_ = 0.0f; + + previous_x_ = 0.0f; + previous_y_ = 0.0f; + previous_z_ = 0.0f; + previous_f0_ = a0; + + diff_out_.Init(); +} + +void WavetableEngine::Reset() { + +} + +inline float Clamp(float x, float amount) { + x = x - 0.5f; + x *= amount; + CONSTRAIN(x, -0.5f, 0.5f); + x += 0.5f; + return x; +} + +const size_t table_size = 256; +const float table_size_f = float(table_size); + +inline float ReadWave( + int x, + int y, + int z, + int randomize, + int phase_integral, + float phase_fractional) { + int wave = ((x + y * 8 + z * 64) * randomize) % 192; + return InterpolateWaveHermite( + wav_integrated_waves + wave * (table_size + 4), + phase_integral, + phase_fractional); +} + +void WavetableEngine::Render( + const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped) { + const float f0 = NoteToFrequency(parameters.note); + + ONE_POLE(x_pre_lp_, parameters.timbre * 6.9999f, 0.2f); + ONE_POLE(y_pre_lp_, parameters.morph * 6.9999f, 0.2f); + ONE_POLE(z_pre_lp_, parameters.harmonics * 6.9999f, 0.05f); + + const float x = x_pre_lp_; + const float y = y_pre_lp_; + const float z = z_pre_lp_; + + const float quantization = min(max(z - 3.0f, 0.0f), 1.0f); + const float lp_coefficient = min( + max(2.0f * f0 * (4.0f - 3.0f * quantization), 0.01f), 0.1f); + + MAKE_INTEGRAL_FRACTIONAL(x); + MAKE_INTEGRAL_FRACTIONAL(y); + MAKE_INTEGRAL_FRACTIONAL(z); + + x_fractional += quantization * (Clamp(x_fractional, 16.0f) - x_fractional); + y_fractional += quantization * (Clamp(y_fractional, 16.0f) - y_fractional); + z_fractional += quantization * (Clamp(z_fractional, 16.0f) - z_fractional); + + ParameterInterpolator x_modulation( + &previous_x_, static_cast(x_integral) + x_fractional, size); + ParameterInterpolator y_modulation( + &previous_y_, static_cast(y_integral) + y_fractional, size); + ParameterInterpolator z_modulation( + &previous_z_, static_cast(z_integral) + z_fractional, size); + + ParameterInterpolator f0_modulation(&previous_f0_, f0, size); + + while (size--) { + const float f0 = f0_modulation.Next(); + + const float gain = (1.0f / (f0 * 131072.0f)) * (0.95f - f0); + const float cutoff = min(table_size_f * f0, 1.0f); + + ONE_POLE(x_lp_, x_modulation.Next(), lp_coefficient); + ONE_POLE(y_lp_, y_modulation.Next(), lp_coefficient); + ONE_POLE(z_lp_, z_modulation.Next(), lp_coefficient); + + const float x = x_lp_; + const float y = y_lp_; + const float z = z_lp_; + + MAKE_INTEGRAL_FRACTIONAL(x); + MAKE_INTEGRAL_FRACTIONAL(y); + MAKE_INTEGRAL_FRACTIONAL(z); + + phase_ += f0; + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + + const float p = phase_ * table_size_f; + MAKE_INTEGRAL_FRACTIONAL(p); + + { + int x0 = x_integral; + int x1 = x_integral + 1; + int y0 = y_integral; + int y1 = y_integral + 1; + int z0 = z_integral; + int z1 = z_integral + 1; + + if (z0 >= 4) { + z0 = 7 - z0; + } + if (z1 >= 4) { + z1 = 7 - z1; + } + + int r0 = z0 == 3 ? 101 : 1; + int r1 = z1 == 3 ? 101 : 1; + + float x0y0z0 = ReadWave(x0, y0, z0, r0, p_integral, p_fractional); + float x1y0z0 = ReadWave(x1, y0, z0, r0, p_integral, p_fractional); + float xy0z0 = x0y0z0 + (x1y0z0 - x0y0z0) * x_fractional; + + float x0y1z0 = ReadWave(x0, y1, z0, r0, p_integral, p_fractional); + float x1y1z0 = ReadWave(x1, y1, z0, r0, p_integral, p_fractional); + float xy1z0 = x0y1z0 + (x1y1z0 - x0y1z0) * x_fractional; + + float xyz0 = xy0z0 + (xy1z0 - xy0z0) * y_fractional; + + float x0y0z1 = ReadWave(x0, y0, z1, r1, p_integral, p_fractional); + float x1y0z1 = ReadWave(x1, y0, z1, r1, p_integral, p_fractional); + float xy0z1 = x0y0z1 + (x1y0z1 - x0y0z1) * x_fractional; + + float x0y1z1 = ReadWave(x0, y1, z1, r1, p_integral, p_fractional); + float x1y1z1 = ReadWave(x1, y1, z1, r1, p_integral, p_fractional); + float xy1z1 = x0y1z1 + (x1y1z1 - x0y1z1) * x_fractional; + + float xyz1 = xy0z1 + (xy1z1 - xy0z1) * y_fractional; + + float mix = xyz0 + (xyz1 - xyz0) * z_fractional; + mix = diff_out_.Process(cutoff, mix) * gain; + *out++ = mix; + *aux++ = static_cast(static_cast(mix * 32.0f)) / 32.0f; + } + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/wavetable_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/wavetable_engine.h new file mode 100644 index 00000000..97de9b34 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/engine/wavetable_engine.h @@ -0,0 +1,75 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// 8x8x3 wave terrain. + +#ifndef PLAITS_DSP_ENGINE_WAVETABLE_ENGINE_H_ +#define PLAITS_DSP_ENGINE_WAVETABLE_ENGINE_H_ + +#include "stmlib/dsp/hysteresis_quantizer.h" + +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/oscillator/wavetable_oscillator.h" + +namespace plaits { + +class WavetableEngine : public Engine { + public: + WavetableEngine() { } + ~WavetableEngine() { } + + virtual void Init(stmlib::BufferAllocator* allocator); + virtual void Reset(); + virtual void Render(const EngineParameters& parameters, + float* out, + float* aux, + size_t size, + bool* already_enveloped); + + private: + float phase_; + + float x_pre_lp_; + float y_pre_lp_; + float z_pre_lp_; + + float x_lp_; + float y_lp_; + float z_lp_; + + float previous_x_; + float previous_y_; + float previous_z_; + float previous_f0_; + + Differentiator diff_out_; + + DISALLOW_COPY_AND_ASSIGN(WavetableEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENGINE_WAVETABLE_ENGINE_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/envelope.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/envelope.h new file mode 100644 index 00000000..458d83f5 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/envelope.h @@ -0,0 +1,129 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Envelope for the internal LPG. + +#ifndef PLAITS_DSP_ENVELOPE_H_ +#define PLAITS_DSP_ENVELOPE_H_ + +#include "stmlib/stmlib.h" + +namespace plaits { + +class LPGEnvelope { + public: + LPGEnvelope() { } + ~LPGEnvelope() { } + + inline void Init() { + vactrol_state_ = 0.0f; + gain_ = 1.0f; + frequency_ = 0.5f; + hf_bleed_ = 0.0f; + } + + inline void Trigger() { + ramp_up_ = true; + } + + inline void ProcessPing( + float attack, + float short_decay, + float decay_tail, + float hf) { + if (ramp_up_) { + vactrol_state_ += attack; + if (vactrol_state_ >= 1.0f) { + vactrol_state_ = 1.0f; + ramp_up_ = false; + } + } + ProcessLP(ramp_up_ ? vactrol_state_ : 0.0f, short_decay, decay_tail, hf); + } + + inline void ProcessLP( + float level, + float short_decay, + float decay_tail, + float hf) { + float vactrol_input = level; + float vactrol_error = (vactrol_input - vactrol_state_); + float vactrol_state_2 = vactrol_state_ * vactrol_state_; + float vactrol_state_4 = vactrol_state_2 * vactrol_state_2; + float tail = 1.0f - vactrol_state_; + float tail_2 = tail * tail; + float vactrol_coefficient = (vactrol_error > 0.0f) + ? 0.6f + : short_decay + (1.0f - vactrol_state_4) * decay_tail; + vactrol_state_ += vactrol_coefficient * vactrol_error; + + gain_ = vactrol_state_; + frequency_ = 0.003f + 0.3f * vactrol_state_4 + hf * 0.04f; + hf_bleed_ = (tail_2 + (1.0f - tail_2) * hf) * hf * hf; + } + + inline float gain() const { return gain_; } + inline float frequency() const { return frequency_; } + inline float hf_bleed() const { return hf_bleed_; } + + private: + float vactrol_state_; + float gain_; + float frequency_; + float hf_bleed_; + bool ramp_up_; + + DISALLOW_COPY_AND_ASSIGN(LPGEnvelope); +}; + +class DecayEnvelope { + public: + DecayEnvelope() { } + ~DecayEnvelope() { } + + inline void Init() { + value_ = 0.0f; + } + + inline void Trigger() { + value_ = 1.0f; + } + + inline void Process(float decay) { + value_ *= (1.0f - decay); + } + + inline float value() const { return value_; } + + private: + float value_; + + DISALLOW_COPY_AND_ASSIGN(DecayEnvelope); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_ENVELOPE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/diffuser.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/diffuser.h new file mode 100644 index 00000000..85c21a77 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/diffuser.h @@ -0,0 +1,108 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Granular diffuser. + +#ifndef PLAITS_DSP_FX_DIFFUSER_H_ +#define PLAITS_DSP_FX_DIFFUSER_H_ + +#include "stmlib/stmlib.h" + +#include "plaits/dsp/fx/fx_engine.h" + +namespace plaits { + +class Diffuser { + public: + Diffuser() { } + ~Diffuser() { } + + void Init(uint16_t* buffer) { + engine_.Init(buffer); + engine_.SetLFOFrequency(LFO_1, 0.3f / 48000.0f); + lp_decay_ = 0.0f; + } + + void Clear() { + engine_.Clear(); + } + + void Process(float amount, float rt, float* in_out, size_t size) { + typedef E::Reserve<126, + E::Reserve<180, + E::Reserve<269, + E::Reserve<444, + E::Reserve<1653, + E::Reserve<2010, + E::Reserve<3411> > > > > > > Memory; + E::DelayLine ap1; + E::DelayLine ap2; + E::DelayLine ap3; + E::DelayLine ap4; + E::DelayLine dapa; + E::DelayLine dapb; + E::DelayLine del; + E::Context c; + const float kap = 0.625f; + const float klp = 0.75f; + float lp = lp_decay_; + while (size--) { + float wet; + engine_.Start(&c); + c.Read(*in_out); + c.Read(ap1 TAIL, kap); + c.WriteAllPass(ap1, -kap); + c.Read(ap2 TAIL, kap); + c.WriteAllPass(ap2, -kap); + c.Read(ap3 TAIL, kap); + c.WriteAllPass(ap3, -kap); + c.Interpolate(ap4, 400.0f, LFO_1, 43.0f, kap); + c.WriteAllPass(ap4, -kap); + c.Interpolate(del, 3070.0f, LFO_1, 340.0f, rt); + c.Lp(lp, klp); + c.Read(dapa TAIL, -kap); + c.WriteAllPass(dapa, kap); + c.Read(dapb TAIL, kap); + c.WriteAllPass(dapb, -kap); + c.Write(del, 2.0f); + c.Write(wet, 0.0f); + *in_out += amount * (wet - *in_out); + ++in_out; + } + lp_decay_ = lp; + } + + private: + typedef FxEngine<8192, FORMAT_12_BIT> E; + E engine_; + float lp_decay_; + + DISALLOW_COPY_AND_ASSIGN(Diffuser); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_FX_DIFFUSER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/fx_engine.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/fx_engine.h new file mode 100644 index 00000000..9950c6cd --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/fx_engine.h @@ -0,0 +1,300 @@ +// Copyright 2014 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Base class for building reverbs. + +#ifndef PLAITS_DSP_FX_FX_ENGINE_H_ +#define PLAITS_DSP_FX_FX_ENGINE_H_ + +#include + +#include "stmlib/stmlib.h" + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/cosine_oscillator.h" + +namespace plaits { + +#define TAIL , -1 + +enum Format { + FORMAT_12_BIT, + FORMAT_16_BIT, + FORMAT_32_BIT +}; + +enum LFOIndex { + LFO_1, + LFO_2 +}; + +template +struct DataType { }; + +template<> +struct DataType { + typedef uint16_t T; + + static inline float Decompress(T value) { + return static_cast(static_cast(value)) / 4096.0f; + } + + static inline T Compress(float value) { + return static_cast( + stmlib::Clip16(static_cast(value * 4096.0f))); + } +}; + +template<> +struct DataType { + typedef uint16_t T; + + static inline float Decompress(T value) { + return static_cast(static_cast(value)) / 32768.0f; + } + + static inline T Compress(float value) { + return static_cast( + stmlib::Clip16(static_cast(value * 32768.0f))); + } +}; + +template<> +struct DataType { + typedef float T; + + static inline float Decompress(T value) { + return value;; + } + + static inline T Compress(float value) { + return value; + } +}; + +template< + size_t size, + Format format = FORMAT_12_BIT> +class FxEngine { + public: + typedef typename DataType::T T; + FxEngine() { } + ~FxEngine() { } + + void Init(T* buffer) { + buffer_ = buffer; + } + + void Clear() { + std::fill(&buffer_[0], &buffer_[size], 0); + write_ptr_ = 0; + } + + struct Empty { }; + + template + struct Reserve { + typedef T Tail; + enum { + length = l + }; + }; + + template + struct DelayLine { + enum { + length = DelayLine::length, + base = DelayLine::base + DelayLine::length + 1 + }; + }; + + template + struct DelayLine { + enum { + length = Memory::length, + base = 0 + }; + }; + + class Context { + friend class FxEngine; + public: + Context() { } + ~Context() { } + + inline void Load(float value) { + accumulator_ = value; + } + + inline void Read(float value, float scale) { + accumulator_ += value * scale; + } + + inline void Read(float value) { + accumulator_ += value; + } + + inline void Write(float& value) { + value = accumulator_; + } + + inline void Write(float& value, float scale) { + value = accumulator_; + accumulator_ *= scale; + } + + template + inline void Write(D& d, int32_t offset, float scale) { + STATIC_ASSERT(D::base + D::length <= size, delay_memory_full); + T w = DataType::Compress(accumulator_); + if (offset == -1) { + buffer_[(write_ptr_ + D::base + D::length - 1) & MASK] = w; + } else { + buffer_[(write_ptr_ + D::base + offset) & MASK] = w; + } + accumulator_ *= scale; + } + + template + inline void Write(D& d, float scale) { + Write(d, 0, scale); + } + + template + inline void WriteAllPass(D& d, int32_t offset, float scale) { + Write(d, offset, scale); + accumulator_ += previous_read_; + } + + template + inline void WriteAllPass(D& d, float scale) { + WriteAllPass(d, 0, scale); + } + + template + inline void Read(D& d, int32_t offset, float scale) { + STATIC_ASSERT(D::base + D::length <= size, delay_memory_full); + T r; + if (offset == -1) { + r = buffer_[(write_ptr_ + D::base + D::length - 1) & MASK]; + } else { + r = buffer_[(write_ptr_ + D::base + offset) & MASK]; + } + float r_f = DataType::Decompress(r); + previous_read_ = r_f; + accumulator_ += r_f * scale; + } + + template + inline void Read(D& d, float scale) { + Read(d, 0, scale); + } + + inline void Lp(float& state, float coefficient) { + state += coefficient * (accumulator_ - state); + accumulator_ = state; + } + + inline void Hp(float& state, float coefficient) { + state += coefficient * (accumulator_ - state); + accumulator_ -= state; + } + + template + inline void Interpolate(D& d, float offset, float scale) { + STATIC_ASSERT(D::base + D::length <= size, delay_memory_full); + MAKE_INTEGRAL_FRACTIONAL(offset); + float a = DataType::Decompress( + buffer_[(write_ptr_ + offset_integral + D::base) & MASK]); + float b = DataType::Decompress( + buffer_[(write_ptr_ + offset_integral + D::base + 1) & MASK]); + float x = a + (b - a) * offset_fractional; + previous_read_ = x; + accumulator_ += x * scale; + } + + template + inline void Interpolate( + D& d, float offset, LFOIndex index, float amplitude, float scale) { + STATIC_ASSERT(D::base + D::length <= size, delay_memory_full); + offset += amplitude * lfo_value_[index]; + MAKE_INTEGRAL_FRACTIONAL(offset); + float a = DataType::Decompress( + buffer_[(write_ptr_ + offset_integral + D::base) & MASK]); + float b = DataType::Decompress( + buffer_[(write_ptr_ + offset_integral + D::base + 1) & MASK]); + float x = a + (b - a) * offset_fractional; + previous_read_ = x; + accumulator_ += x * scale; + } + + private: + float accumulator_; + float previous_read_; + float lfo_value_[2]; + T* buffer_; + int32_t write_ptr_; + + DISALLOW_COPY_AND_ASSIGN(Context); + }; + + inline void SetLFOFrequency(LFOIndex index, float frequency) { + lfo_[index].template Init(frequency * 32.0f); + } + + inline void Start(Context* c) { + --write_ptr_; + if (write_ptr_ < 0) { + write_ptr_ += size; + } + c->accumulator_ = 0.0f; + c->previous_read_ = 0.0f; + c->buffer_ = buffer_; + c->write_ptr_ = write_ptr_; + if ((write_ptr_ & 31) == 0) { + c->lfo_value_[0] = lfo_[0].Next(); + c->lfo_value_[1] = lfo_[1].Next(); + } else { + c->lfo_value_[0] = lfo_[0].value(); + c->lfo_value_[1] = lfo_[1].value(); + } + } + + private: + enum { + MASK = size - 1 + }; + + int32_t write_ptr_; + T* buffer_; + stmlib::CosineOscillator lfo_[2]; + + DISALLOW_COPY_AND_ASSIGN(FxEngine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_FX_FX_ENGINE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/low_pass_gate.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/low_pass_gate.h new file mode 100644 index 00000000..c9bb6b72 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/low_pass_gate.h @@ -0,0 +1,92 @@ +// Copyright 2014 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Approximative low pass gate. + +#ifndef PLAITS_DSP_FX_LOW_PASS_GATE_H_ +#define PLAITS_DSP_FX_LOW_PASS_GATE_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/filter.h" +#include "stmlib/dsp/parameter_interpolator.h" + +namespace plaits { + +class LowPassGate { + public: + LowPassGate() { } + ~LowPassGate() { } + + void Init() { + previous_gain_ = 0.0f; + filter_.Init(); + } + + void Process( + float gain, + float frequency, + float hf_bleed, + float* in_out, + size_t size) { + stmlib::ParameterInterpolator gain_modulation(&previous_gain_, gain, size); + filter_.set_f_q(frequency, 0.4f); + while (size--) { + const float s = *in_out * gain_modulation.Next(); + const float lp = filter_.Process(s); + *in_out++ = lp + (s - lp) * hf_bleed; + } + } + + void Process( + float gain, + float frequency, + float hf_bleed, + float* in, + short* out, + size_t size, + size_t stride) { + stmlib::ParameterInterpolator gain_modulation(&previous_gain_, gain, size); + filter_.set_f_q(frequency, 0.4f); + while (size--) { + const float s = *in++ * gain_modulation.Next(); + const float lp = filter_.Process(s); + *out = stmlib::Clip16(1 + static_cast(lp + (s - lp) * hf_bleed)); + out += stride; + } + } + + private: + float previous_gain_; + stmlib::Svf filter_; + + DISALLOW_COPY_AND_ASSIGN(LowPassGate); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_FX_LOW_PASS_GATE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/overdrive.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/overdrive.h new file mode 100644 index 00000000..0ac6f22a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/overdrive.h @@ -0,0 +1,83 @@ +// Copyright 2014 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Distortion/overdrive. + +#ifndef PLAITS_DSP_FX_OVERDRIVE_H_ +#define PLAITS_DSP_FX_OVERDRIVE_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" + +namespace plaits { + +class Overdrive { + public: + Overdrive() { } + ~Overdrive() { } + + void Init() { + pre_gain_ = 0.0f; + post_gain_ = 0.0f; + } + + void Process(float drive, float* in_out, size_t size) { + const float drive_2 = drive * drive; + const float pre_gain_a = drive * 0.5f; + const float pre_gain_b = drive_2 * drive_2 * drive * 24.0f; + const float pre_gain = pre_gain_a + (pre_gain_b - pre_gain_a) * drive_2; + const float drive_squashed = drive * (2.0f - drive); + const float post_gain = 1.0f / stmlib::SoftClip( + 0.33f + drive_squashed * (pre_gain - 0.33f)); + + stmlib::ParameterInterpolator pre_gain_modulation( + &pre_gain_, + pre_gain, + size); + + stmlib::ParameterInterpolator post_gain_modulation( + &post_gain_, + post_gain, + size); + + while (size--) { + float pre = pre_gain_modulation.Next() * *in_out; + *in_out++ = stmlib::SoftClip(pre) * post_gain_modulation.Next(); + } + } + + private: + float pre_gain_; + float post_gain_; + + DISALLOW_COPY_AND_ASSIGN(Overdrive); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_FX_OVERDRIVE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/sample_rate_reducer.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/sample_rate_reducer.h new file mode 100644 index 00000000..a5f49c56 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/fx/sample_rate_reducer.h @@ -0,0 +1,136 @@ +// Copyright 2014 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Sample rate reducer. + +#ifndef PLAITS_DSP_FX_SAMPLE_RATE_REDUCER_H_ +#define PLAITS_DSP_FX_SAMPLE_RATE_REDUCER_H_ + +#include + +#include "stmlib/dsp/polyblep.h" + +namespace plaits { + +class SampleRateReducer { + public: + SampleRateReducer() { } + ~SampleRateReducer() { } + + void Init() { + phase_ = 0.0f; + sample_ = 0.0f; + next_sample_ = 0.0f; + previous_sample_ = 0.0f; + } + + template + void Process(float frequency, float* in_out, size_t size) { + if (optimized_handling_of_special_cases) { + // Use fast specialized implementations for target rates close to the + // original rates. Caveats: + // - The size argument must be a multiple of 4. + // - There will be a transition glitch between the "optimized" and the + // "common case" code, so don't use this when frequency is modulated! + // - The optimized code is not a truly variable reclocking, instead, + // this is a crossfade between reclocking at SR / 2N and SR / N. + if (frequency >= 1.0f) { + return; + } else if (frequency >= 0.5f) { + ProcessHalf(2.0f - 2.0f * frequency, in_out, size); + return; + } else if (frequency >= 0.25f) { + ProcessQuarter(2.0f - 4.0f * frequency, in_out, size); + return; + } + } else { + CONSTRAIN(frequency, 0.0f, 1.0f); + } + float previous_sample = previous_sample_; + float next_sample = next_sample_; + float sample = sample_; + float phase = phase_; + while (size--) { + float this_sample = next_sample; + next_sample = 0.0f; + phase += frequency; + if (phase >= 1.0f) { + phase -= 1.0f; + float t = phase / frequency; + // t = 0: the transition occurred right at this sample. + // t = 1: the transition occurred at the previous sample. + // Use linear interpolation to recover the fractional sample. + float new_sample = \ + previous_sample + (*in_out - previous_sample) * (1.0f - t); + float discontinuity = new_sample - sample; + this_sample += discontinuity * stmlib::ThisBlepSample(t); + next_sample += discontinuity * stmlib::NextBlepSample(t); + sample = new_sample; + } + next_sample += sample; + previous_sample = *in_out; + *in_out++ = this_sample; + } + phase_ = phase; + next_sample_ = next_sample; + sample_ = sample; + previous_sample_ = previous_sample; + } + + private: + void ProcessHalf(float amount, float* in_out, size_t size) { + // assert(size % 2 == 0); + while (size) { + in_out[1] += (in_out[0] - in_out[1]) * amount; + in_out += 2; + size -= 2; + } + sample_ = next_sample_ = previous_sample_ = in_out[-1]; + } + + void ProcessQuarter(float amount, float* in_out, size_t size) { + // assert(size % 4 == 0); + while (size) { + in_out[1] = in_out[0]; + in_out[2] += (in_out[0] - in_out[2]) * amount; + in_out[3] = in_out[2]; + in_out += 4; + size -= 4; + } + sample_ = next_sample_ = previous_sample_ = in_out[-1]; + } + + float phase_; + float sample_; + float previous_sample_; + float next_sample_; + + DISALLOW_COPY_AND_ASSIGN(SampleRateReducer); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_FX_SAMPLE_RATE_REDUCER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/clocked_noise.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/clocked_noise.h new file mode 100644 index 00000000..281e74b7 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/clocked_noise.h @@ -0,0 +1,104 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Noise processed by a sample and hold running at a target frequency. + +#ifndef PLAITS_DSP_NOISE_CLOCKED_NOISE_H_ +#define PLAITS_DSP_NOISE_CLOCKED_NOISE_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/polyblep.h" +#include "stmlib/utils/random.h" + +namespace plaits { + +class ClockedNoise { + public: + ClockedNoise() { } + ~ClockedNoise() { } + + void Init() { + phase_ = 0.0f; + sample_ = 0.0f; + next_sample_ = 0.0f; + frequency_ = 0.001f; + } + + void Render(bool sync, float frequency, float* out, size_t size) { + CONSTRAIN(frequency, 0.0f, 1.0f); + + stmlib::ParameterInterpolator fm(&frequency_, frequency, size); + + float next_sample = next_sample_; + float sample = sample_; + + if (sync) { + phase_ = 1.0f; + } + + while (size--) { + float this_sample = next_sample; + next_sample = 0.0f; + + const float frequency = fm.Next(); + const float raw_sample = stmlib::Random::GetFloat() * 2.0f - 1.0f; + float raw_amount = 4.0f * (frequency - 0.25f); + CONSTRAIN(raw_amount, 0.0f, 1.0f); + + phase_ += frequency; + + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float t = phase_ / frequency; + float new_sample = raw_sample; + float discontinuity = new_sample - sample; + this_sample += discontinuity * stmlib::ThisBlepSample(t); + next_sample += discontinuity * stmlib::NextBlepSample(t); + sample = new_sample; + } + next_sample += sample; + *out++ = this_sample + raw_amount * (raw_sample - this_sample); + } + next_sample_ = next_sample; + sample_ = sample; + } + + private: + // Oscillator state. + float phase_; + float sample_; + float next_sample_; + + // For interpolation of parameters. + float frequency_; + + DISALLOW_COPY_AND_ASSIGN(ClockedNoise); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_NOISE_CLOCKED_NOISE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/dust.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/dust.h new file mode 100644 index 00000000..9e051f7e --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/dust.h @@ -0,0 +1,48 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Randomly clocked samples. + +#ifndef PLAITS_DSP_NOISE_DUST_H_ +#define PLAITS_DSP_NOISE_DUST_H_ + +#include "stmlib/utils/random.h" + +namespace plaits { + +inline float Dust(float frequency) { + float inv_frequency = 1.0f / frequency; + float u = stmlib::Random::GetFloat(); + if (u < frequency) { + return u * inv_frequency; + } else { + return 0.0f; + } +} + +} // namespace plaits + +#endif // PLAITS_DSP_NOISE_DUST_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/fractal_random_generator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/fractal_random_generator.h new file mode 100644 index 00000000..9ebb6418 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/fractal_random_generator.h @@ -0,0 +1,73 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Stack octaves of a noise source to generate a fractal noise. + +#ifndef PLAITS_DSP_NOISE_FRACTAL_RANDOM_GENERATOR_H_ +#define PLAITS_DSP_NOISE_FRACTAL_RANDOM_GENERATOR_H_ + +#include "stmlib/stmlib.h" + +namespace plaits { + +template +class FractalRandomGenerator { + public: + FractalRandomGenerator() { } + ~FractalRandomGenerator() { } + + void Init() { + for (int i = 0; i < order; ++i) { + generator_[i].Init(); + } + } + + float Render(float frequency) { + return Render(frequency, 0.5f); + } + + float Render(float frequency, float decay) { + float gain = 0.5f; + float sum = 0.0f; + + for (int i = 0; i < order; ++i) { + sum += generator_[i].Render(frequency) * gain; + gain *= decay; + frequency *= 2.0f; + } + + return sum; + } + + private: + T generator_[order]; + + DISALLOW_COPY_AND_ASSIGN(FractalRandomGenerator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_NOISE_FRACTAL_RANDOM_GENERATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/particle.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/particle.h new file mode 100644 index 00000000..e8e47087 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/particle.h @@ -0,0 +1,93 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Random impulse train processed by a resonant filter. + +#ifndef PLAITS_DSP_NOISE_PARTICLE_H_ +#define PLAITS_DSP_NOISE_PARTICLE_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/filter.h" +#include "stmlib/utils/random.h" + +namespace plaits { + +class Particle { + public: + Particle() { } + ~Particle() { } + + inline void Init() { + pre_gain_ = 0.0f; + filter_.Init(); + } + + inline void Render( + bool sync, + float density, + float gain, + float frequency, + float spread, + float q, + float* out, + float* aux, + size_t size) { + float u = stmlib::Random::GetFloat(); + if (sync) { + u = density; + } + bool can_radomize_frequency = true; + while (size--) { + float s = 0.0f; + if (u <= density) { + s = u * gain; + if (can_radomize_frequency) { + const float u = 2.0f * stmlib::Random::GetFloat() - 1.0f; + const float f = std::min( + stmlib::SemitonesToRatio(spread * u) * frequency, + 0.25f); + pre_gain_ = 0.5f / stmlib::Sqrt(q * f * stmlib::Sqrt(density)); + filter_.set_f_q(f, q); + // Keep the cutoff constant for this whole block. + can_radomize_frequency = false; + } + } + *aux++ += s; + *out++ += filter_.Process(pre_gain_ * s); + u = stmlib::Random::GetFloat(); + } + } + + private: + float pre_gain_; + stmlib::Svf filter_; + + DISALLOW_COPY_AND_ASSIGN(Particle); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_NOISE_PARTICLE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/smooth_random_generator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/smooth_random_generator.h new file mode 100644 index 00000000..3b8ff7cc --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/noise/smooth_random_generator.h @@ -0,0 +1,69 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Smooth random generator for the internal modulations. + +#ifndef PLAITS_DSP_NOISE_SMOOTH_RANDOM_GENERATOR_H_ +#define PLAITS_DSP_NOISE_SMOOTH_RANDOM_GENERATOR_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/utils/random.h" + +namespace plaits { + +class SmoothRandomGenerator { + public: + SmoothRandomGenerator() { } + ~SmoothRandomGenerator() { } + + void Init() { + phase_ = 0.0f; + from_ = 0.0f; + interval_ = 0.0f; + } + + float Render(float frequency) { + phase_ += frequency; + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + from_ += interval_; + interval_ = stmlib::Random::GetFloat() * 2.0f - 1.0f - from_; + } + float t = phase_ * phase_ * (3.0f - 2.0f * phase_); + return from_ + interval_ * t; + } + + private: + float phase_; + float from_; + float interval_; + + DISALLOW_COPY_AND_ASSIGN(SmoothRandomGenerator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_NOISE_SMOOTH_RANDOM_GENERATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/formant_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/formant_oscillator.h new file mode 100644 index 00000000..3a5b24c1 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/formant_oscillator.h @@ -0,0 +1,133 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Sinewave with aliasing-free phase reset. + +#ifndef PLAITS_DSP_OSCILLATOR_FORMANT_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_FORMANT_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/polyblep.h" + +#include "plaits/resources.h" + +namespace plaits { + +class FormantOscillator { + public: + FormantOscillator() { } + ~FormantOscillator() { } + + void Init() { + carrier_phase_ = 0.0f; + formant_phase_ = 0.0f; + next_sample_ = 0.0f; + + carrier_frequency_ = 0.0f; + formant_frequency_ = 0.01f; + phase_shift_ = 0.0f; + } + + void Render( + float carrier_frequency, + float formant_frequency, + float phase_shift, + float* out, + size_t size) { + if (carrier_frequency >= kMaxFrequency) { + carrier_frequency = kMaxFrequency; + } + if (formant_frequency >= kMaxFrequency) { + formant_frequency = kMaxFrequency; + } + + stmlib::ParameterInterpolator carrier_fm( + &carrier_frequency_, carrier_frequency, size); + stmlib::ParameterInterpolator formant_fm( + &formant_frequency_, formant_frequency, size); + stmlib::ParameterInterpolator pm(&phase_shift_, phase_shift, size); + + float next_sample = next_sample_; + + while (size--) { + float this_sample = next_sample; + next_sample = 0.0f; + + const float carrier_frequency = carrier_fm.Next(); + const float formant_frequency = formant_fm.Next(); + + carrier_phase_ += carrier_frequency; + + if (carrier_phase_ >= 1.0f) { + carrier_phase_ -= 1.0f; + float reset_time = carrier_phase_ / carrier_frequency; + + float formant_phase_at_reset = formant_phase_ + \ + (1.0f - reset_time) * formant_frequency; + float before = Sine( + formant_phase_at_reset + pm.subsample(1.0f - reset_time)); + float after = Sine(0.0f + pm.subsample(1.0f)); + float discontinuity = after - before; + this_sample += discontinuity * stmlib::ThisBlepSample(reset_time); + next_sample += discontinuity * stmlib::NextBlepSample(reset_time); + formant_phase_ = reset_time * formant_frequency; + } else { + formant_phase_ += formant_frequency; + if (formant_phase_ >= 1.0f) { + formant_phase_ -= 1.0f; + } + } + + const float phase_shift = pm.Next(); + next_sample += Sine(formant_phase_ + phase_shift); + + *out++ = this_sample; + } + next_sample_ = next_sample; + } + + private: + inline float Sine(float phase) { + return stmlib::InterpolateWrap(lut_sine, phase, 1024.0f); + } + + // Oscillator state. + float carrier_phase_; + float formant_phase_; + float next_sample_; + + // For interpolation of parameters. + float carrier_frequency_; + float formant_frequency_; + float phase_shift_; + + DISALLOW_COPY_AND_ASSIGN(FormantOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_FORMANT_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/grainlet_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/grainlet_oscillator.h new file mode 100644 index 00000000..fa126079 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/grainlet_oscillator.h @@ -0,0 +1,199 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// A phase-distortd single cycle sine * another continuously running sine, +// the whole thing synced to a main oscillator. + +#ifndef PLAITS_DSP_OSCILLATOR_GRAINLET_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_GRAINLET_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/polyblep.h" + +#include "plaits/dsp/oscillator/oscillator.h" +#include "plaits/resources.h" + +namespace plaits { + +class GrainletOscillator { + public: + GrainletOscillator() { } + ~GrainletOscillator() { } + + void Init() { + carrier_phase_ = 0.0f; + formant_phase_ = 0.0f; + next_sample_ = 0.0f; + + carrier_frequency_ = 0.0f; + formant_frequency_ = 0.0f; + carrier_shape_ = 0.0f; + carrier_bleed_ = 0.0f; + } + + void Render( + float carrier_frequency, + float formant_frequency, + float carrier_shape, + float carrier_bleed, + float* out, + size_t size) { + if (carrier_frequency >= kMaxFrequency * 0.5f) { + carrier_frequency = kMaxFrequency * 0.5f; + } + if (formant_frequency >= kMaxFrequency) { + formant_frequency = kMaxFrequency; + } + + stmlib::ParameterInterpolator carrier_frequency_modulation( + &carrier_frequency_, + carrier_frequency, + size); + stmlib::ParameterInterpolator formant_frequency_modulation( + &formant_frequency_, + formant_frequency, + size); + stmlib::ParameterInterpolator carrier_shape_modulation( + &carrier_shape_, + carrier_shape, + size); + stmlib::ParameterInterpolator carrier_bleed_modulation( + &carrier_bleed_, + carrier_bleed, + size); + + float next_sample = next_sample_; + + while (size--) { + bool reset = false; + float reset_time = 0.0f; + + float this_sample = next_sample; + next_sample = 0.0f; + + const float f0 = carrier_frequency_modulation.Next(); + const float f1 = formant_frequency_modulation.Next(); + + carrier_phase_ += f0; + reset = carrier_phase_ >= 1.0f; + + if (reset) { + carrier_phase_ -= 1.0f; + reset_time = carrier_phase_ / f0; + float before = Grainlet( + 1.0f, + formant_phase_ + (1.0f - reset_time) * f1, + carrier_shape_modulation.subsample(1.0f - reset_time), + carrier_bleed_modulation.subsample(1.0f - reset_time)); + + float after = Grainlet( + 0.0f, + 0.0f, + carrier_shape_modulation.subsample(1.0f), + carrier_bleed_modulation.subsample(1.0f)); + + float discontinuity = after - before; + this_sample += discontinuity * stmlib::ThisBlepSample(reset_time); + next_sample += discontinuity * stmlib::NextBlepSample(reset_time); + formant_phase_ = reset_time * f1; + } else { + formant_phase_ += f1; + if (formant_phase_ >= 1.0f) { + formant_phase_ -= 1.0f; + } + } + + next_sample += Grainlet( + carrier_phase_, + formant_phase_, + carrier_shape_modulation.Next(), + carrier_bleed_modulation.Next()); + *out++ = this_sample; + } + + next_sample_ = next_sample; + } + + private: + inline float Sine(float phase) { + return stmlib::InterpolateWrap(lut_sine, phase, 1024.0f); + } + + inline float Carrier(float phase, float shape) { + shape *= 3.0f; + MAKE_INTEGRAL_FRACTIONAL(shape); + float t = 1.0f - shape_fractional; + + if (shape_integral == 0) { + phase = phase * (1.0f + t * t * t * 15.0f); + if (phase >= 1.0f) { + phase = 1.0f; + } + phase += 0.75f; + } else if (shape_integral == 1) { + float breakpoint = 0.001f + 0.499f * t * t * t; + if (phase < breakpoint) { + phase *= (0.5f / breakpoint); + } else { + phase = 0.5f + (phase - breakpoint) * 0.5f / (1.0f - breakpoint); + } + phase += 0.75f; + } else { + t = 1.0f - t; + phase = 0.25f + phase * (0.5f + t * t * t * 14.5f); + if (phase >= 0.75f) phase = 0.75f; + } + return (Sine(phase) + 1.0f) * 0.25f; + } + + inline float Grainlet( + float carrier_phase, + float formant_phase, + float shape, + float bleed) { + float carrier = Carrier(carrier_phase, shape); + float formant = Sine(formant_phase); + return carrier * (formant + bleed) / (1.0f + bleed); + } + + // Oscillator state. + float carrier_phase_; + float formant_phase_; + float next_sample_; + + // For interpolation of parameters. + float carrier_frequency_; + float formant_frequency_; + float carrier_shape_; + float carrier_bleed_; + + DISALLOW_COPY_AND_ASSIGN(GrainletOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_GRAINLET_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/harmonic_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/harmonic_oscillator.h new file mode 100644 index 00000000..0147bbfb --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/harmonic_oscillator.h @@ -0,0 +1,121 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Harmonic oscillator based on Chebyshev polynomials. +// Works well for a small number of harmonics. For the higher order harmonics, +// we need to reinitialize the recurrence by computing two high harmonics. + +#ifndef PLAITS_DSP_OSCILLATOR_HARMONIC_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_HARMONIC_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" + +#include "plaits/resources.h" + +namespace plaits { + +template +class HarmonicOscillator { + public: + HarmonicOscillator() { } + ~HarmonicOscillator() { } + + void Init() { + phase_ = 0.0f; + frequency_ = 0.0f; + for (int i = 0; i < num_harmonics; ++i) { + amplitude_[i] = 0.0f; + } + } + + template + void Render( + float frequency, + const float* amplitudes, + float* out, + size_t size) { + if (frequency >= 0.5f) { + frequency = 0.5f; + } + + stmlib::ParameterInterpolator am[num_harmonics]; + stmlib::ParameterInterpolator fm(&frequency_, frequency, size); + + for (int i = 0; i < num_harmonics; ++i) { + float f = frequency * static_cast(first_harmonic_index + i); + if (f >= 0.5f) { + f = 0.5f; + } + am[i].Init(&litude_[i], amplitudes[i] * (1.0f - f * 2.0f), size); + } + + while (size--) { + phase_ += fm.Next(); + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + const float two_x = 2.0f * stmlib::Interpolate(lut_sine, phase_, 1024.0f); + float previous, current; + if (first_harmonic_index == 1) { + previous = 1.0f; + current = two_x * 0.5f; + } else { + const float k = first_harmonic_index; + previous = stmlib::InterpolateWrap( + lut_sine, phase_ * (k - 1.0f) + 0.25f, 1024.0f); + current = stmlib::InterpolateWrap(lut_sine, phase_ * k, 1024.0f); + } + + float sum = 0.0f; + for (int i = 0; i < num_harmonics; ++i) { + sum += am[i].Next() * current; + float temp = current; + current = two_x * current - previous; + previous = temp; + } + if (first_harmonic_index == 1) { + *out++ = sum; + } else { + *out++ += sum; + } + } + } + + private: + // Oscillator state. + float phase_; + + // For interpolation of parameters. + float frequency_; + float amplitude_[num_harmonics]; + + DISALLOW_COPY_AND_ASSIGN(HarmonicOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_HARMONIC_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/oscillator.h new file mode 100644 index 00000000..62d90677 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/oscillator.h @@ -0,0 +1,254 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Single waveform oscillator. Can optionally do audio-rate linear FM, with +// through-zero capabilities (negative frequencies). + +#ifndef PLAITS_DSP_OSCILLATOR_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/polyblep.h" + +namespace plaits { + +enum OscillatorShape { + OSCILLATOR_SHAPE_IMPULSE_TRAIN, + OSCILLATOR_SHAPE_SAW, + OSCILLATOR_SHAPE_TRIANGLE, + OSCILLATOR_SHAPE_SLOPE, + OSCILLATOR_SHAPE_SQUARE, + OSCILLATOR_SHAPE_SQUARE_BRIGHT, + OSCILLATOR_SHAPE_SQUARE_DARK, + OSCILLATOR_SHAPE_SQUARE_TRIANGLE +}; + +const float kMaxFrequency = 0.25f; +const float kMinFrequency = 0.000001f; + +class Oscillator { + public: + Oscillator() { } + ~Oscillator() { } + + void Init() { + phase_ = 0.5f; + next_sample_ = 0.0f; + lp_state_ = 1.0f; + hp_state_ = 0.0f; + high_ = true; + + frequency_ = 0.001f; + pw_ = 0.5f; + } + + template + void Render(float frequency, float pw, float* out, size_t size) { + Render(frequency, pw, NULL, out, size); + } + + template + void Render( + float frequency, + float pw, + const float* fm, + float* out, + size_t size) { + if (!fm) { + Render(frequency, pw, NULL, out, size); + } else { + Render(frequency, pw, fm, out, size); + } + } + + template + void Render( + float frequency, + float pw, + const float* external_fm, + float* out, + size_t size) { + + if (!has_external_fm) { + if (!through_zero_fm) { + CONSTRAIN(frequency, kMinFrequency, kMaxFrequency); + } else { + CONSTRAIN(frequency, -kMaxFrequency, kMaxFrequency); + } + CONSTRAIN(pw, fabsf(frequency) * 2.0f, 1.0f - 2.0f * fabsf(frequency)) + } + + stmlib::ParameterInterpolator fm(&frequency_, frequency, size); + stmlib::ParameterInterpolator pwm(&pw_, pw, size); + + float next_sample = next_sample_; + + while (size--) { + float this_sample = next_sample; + next_sample = 0.0f; + + float frequency = fm.Next(); + if (has_external_fm) { + frequency *= (1.0f + *external_fm++); + if (!through_zero_fm) { + CONSTRAIN(frequency, kMinFrequency, kMaxFrequency); + } else { + CONSTRAIN(frequency, -kMaxFrequency, kMaxFrequency); + } + } + float pw = (shape == OSCILLATOR_SHAPE_SQUARE_TRIANGLE || + shape == OSCILLATOR_SHAPE_TRIANGLE) ? 0.5f : pwm.Next(); + if (has_external_fm) { + CONSTRAIN(pw, fabsf(frequency) * 2.0f, 1.0f - 2.0f * fabsf(frequency)) + } + phase_ += frequency; + + if (shape <= OSCILLATOR_SHAPE_SAW) { + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float t = phase_ / frequency; + this_sample -= stmlib::ThisBlepSample(t); + next_sample -= stmlib::NextBlepSample(t); + } else if (through_zero_fm && phase_ < 0.0f) { + float t = phase_ / frequency; + phase_ += 1.0f; + this_sample += stmlib::ThisBlepSample(t); + next_sample += stmlib::NextBlepSample(t); + } + next_sample += phase_; + + if (shape == OSCILLATOR_SHAPE_SAW) { + *out++ = 2.0f * this_sample - 1.0f; + } else { + lp_state_ += 0.25f * ((hp_state_ - this_sample) - lp_state_); + *out++ = 4.0f * lp_state_; + hp_state_ = this_sample; + } + } else if (shape <= OSCILLATOR_SHAPE_SLOPE) { + float slope_up = 2.0f; + float slope_down = 2.0f; + if (shape == OSCILLATOR_SHAPE_SLOPE) { + slope_up = 1.0f / (pw); + slope_down = 1.0f / (1.0f - pw); + } + if (high_ ^ (phase_ < pw)) { + float t = (phase_ - pw) / frequency; + float discontinuity = (slope_up + slope_down) * frequency; + if (through_zero_fm && frequency < 0.0f) { + discontinuity = -discontinuity; + } + this_sample -= stmlib::ThisIntegratedBlepSample(t) * discontinuity; + next_sample -= stmlib::NextIntegratedBlepSample(t) * discontinuity; + high_ = phase_ < pw; + } + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float t = phase_ / frequency; + float discontinuity = (slope_up + slope_down) * frequency; + this_sample += stmlib::ThisIntegratedBlepSample(t) * discontinuity; + next_sample += stmlib::NextIntegratedBlepSample(t) * discontinuity; + high_ = true; + } else if (through_zero_fm && phase_ < 0.0f) { + float t = phase_ / frequency; + phase_ += 1.0f; + float discontinuity = (slope_up + slope_down) * frequency; + this_sample -= stmlib::ThisIntegratedBlepSample(t) * discontinuity; + next_sample -= stmlib::NextIntegratedBlepSample(t) * discontinuity; + high_ = false; + } + next_sample += high_ + ? phase_ * slope_up + : 1.0f - (phase_ - pw) * slope_down; + *out++ = 2.0f * this_sample - 1.0f; + } else { + if (high_ ^ (phase_ >= pw)) { + float t = (phase_ - pw) / frequency; + float discontinuity = 1.0f; + if (through_zero_fm && frequency < 0.0f) { + discontinuity = -discontinuity; + } + this_sample += stmlib::ThisBlepSample(t) * discontinuity; + next_sample += stmlib::NextBlepSample(t) * discontinuity; + high_ = phase_ >= pw; + } + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float t = phase_ / frequency; + this_sample -= stmlib::ThisBlepSample(t); + next_sample -= stmlib::NextBlepSample(t); + high_ = false; + } else if (through_zero_fm && phase_ < 0.0f) { + float t = phase_ / frequency; + phase_ += 1.0f; + this_sample += stmlib::ThisBlepSample(t); + next_sample += stmlib::NextBlepSample(t); + high_ = true; + } + next_sample += phase_ < pw ? 0.0f : 1.0f; + + if (shape == OSCILLATOR_SHAPE_SQUARE_TRIANGLE) { + const float integrator_coefficient = frequency * 0.0625f; + this_sample = 128.0f * (this_sample - 0.5f); + lp_state_ += integrator_coefficient * (this_sample - lp_state_); + *out++ = lp_state_; + } else if (shape == OSCILLATOR_SHAPE_SQUARE_DARK) { + const float integrator_coefficient = frequency * 2.0f; + this_sample = 4.0f * (this_sample - 0.5f); + lp_state_ += integrator_coefficient * (this_sample - lp_state_); + *out++ = lp_state_; + } else if (shape == OSCILLATOR_SHAPE_SQUARE_BRIGHT) { + const float integrator_coefficient = frequency * 2.0f; + this_sample = 2.0f * this_sample - 1.0f; + lp_state_ += integrator_coefficient * (this_sample - lp_state_); + *out++ = (this_sample - lp_state_) * 0.5f; + } else { + this_sample = 2.0f * this_sample - 1.0f; + *out++ = this_sample; + } + } + } + next_sample_ = next_sample; + } + + private: + // Oscillator state. + float phase_; + float next_sample_; + float lp_state_; + float hp_state_; + bool high_; + + // For interpolation of parameters. + float frequency_; + float pw_; + + DISALLOW_COPY_AND_ASSIGN(Oscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_OSCILLATOR_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/sine_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/sine_oscillator.h new file mode 100644 index 00000000..b88a0681 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/sine_oscillator.h @@ -0,0 +1,204 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Simple sine oscillator (wavetable) + fast sine oscillator (magic circle). +// +// The fast implementation might glitch a bit under heavy modulations of the +// frequency. + +#ifndef PLAITS_DSP_OSCILLATOR_SINE_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_SINE_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/rsqrt.h" + +#include "plaits/resources.h" + +namespace plaits { + +class SineOscillator { + public: + SineOscillator() { } + ~SineOscillator() { } + + void Init() { + phase_ = 0.0f; + frequency_ = 0.0f; + amplitude_ = 0.0f; + } + + inline float Next(float frequency) { + if (frequency >= 0.5f) { + frequency = 0.5f; + } + + phase_ += frequency; + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + + return stmlib::Interpolate(lut_sine, phase_, 1024.0f); + } + + inline void Next(float frequency, float amplitude, float* sin, float* cos) { + if (frequency >= 0.5f) { + frequency = 0.5f; + } + + phase_ += frequency; + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + + *sin = amplitude * stmlib::Interpolate(lut_sine, phase_, 1024.0f); + *cos = amplitude * stmlib::Interpolate(lut_sine + 256, phase_, 1024.0f); + } + + void Render(float frequency, float amplitude, float* out, size_t size) { + RenderInternal(frequency, amplitude, out, size); + } + + void Render(float frequency, float* out, size_t size) { + RenderInternal(frequency, 1.0f, out, size); + } + + private: + template + void RenderInternal( + float frequency, float amplitude, float* out, size_t size) { + if (frequency >= 0.5f) { + frequency = 0.5f; + } + stmlib::ParameterInterpolator fm(&frequency_, frequency, size); + stmlib::ParameterInterpolator am(&litude_, amplitude, size); + + while (size--) { + phase_ += fm.Next(); + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + float s = stmlib::Interpolate(lut_sine, phase_, 1024.0f); + if (additive) { + *out++ += am.Next() * s; + } else { + *out++ = s; + } + } + } + + // Oscillator state. + float phase_; + + // For interpolation of parameters. + float frequency_; + float amplitude_; + + DISALLOW_COPY_AND_ASSIGN(SineOscillator); +}; + +class FastSineOscillator { + public: + FastSineOscillator() { } + ~FastSineOscillator() { } + + void Init() { + x_ = 1.0f; + y_ = 0.0f; + epsilon_ = 0.0f; + amplitude_ = 0.0f; + } + + static inline float Fast2Sin(float f) { + // In theory, epsilon = 2 sin(pi f) + // Here, to avoid the call to sinf, we use a 3rd order polynomial + // approximation, which looks like a Taylor expansion, but with a + // correction term to give a good trade-off between average error + // (1.13 cents) and maximum error (7.33 cents) when generating sinewaves + // in the 16 Hz to 16kHz range (with sr = 48kHz). + const float f_pi = f * float(M_PI); + return f_pi * (2.0f - (2.0f * 0.96f / 6.0f) * f_pi * f_pi); + } + + void Render(float frequency, float* out, size_t size) { + RenderInternal(frequency, 1.0f, out, size); + } + + void Render(float frequency, float amplitude, float* out, size_t size) { + RenderInternal(frequency, amplitude, out, size); + } + + private: + template + void RenderInternal( + float frequency, float amplitude, float* out, size_t size) { + if (frequency >= 0.25f) { + frequency = 0.25f; + amplitude = 0.0f; + } else { + amplitude *= 1.0f - frequency * 4.0f; + } + + stmlib::ParameterInterpolator epsilon(&epsilon_, Fast2Sin(frequency), size); + stmlib::ParameterInterpolator am(&litude_, amplitude, size); + float x = x_; + float y = y_; + + const float norm = x * x + y * y; + if (norm <= 0.5f || norm >= 2.0f) { + const float scale = stmlib::fast_rsqrt_carmack(norm); + x *= scale; + y *= scale; + } + + while (size--) { + const float e = epsilon.Next(); + x += e * y; + y -= e * x; + if (additive) { + *out++ += am.Next() * x; + } else { + *out++ = x; + } + } + x_ = x; + y_ = y; + } + + // Oscillator state. + float x_; + float y_; + + // For interpolation of parameters. + float epsilon_; + float amplitude_; + + DISALLOW_COPY_AND_ASSIGN(FastSineOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_SINE_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/string_synth_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/string_synth_oscillator.h new file mode 100644 index 00000000..85640f2f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/string_synth_oscillator.h @@ -0,0 +1,179 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// A mixture of 7 sawtooth and square waveforms in the style of divide-down +// organs: +// +// [0] [1] [2] [3] [4] [5] [6] +// Saw 8', Square 8', Saw 4', Square 4', Saw 2', Square 2', Saw 1' +// +// Internally, this renders 4 band-limited sawtooths, from 8' to 1' from a +// single phase counter. The square waveforms are obtained by algebraic +// manipulations on the sawtooths, using the identity: +// Square 16' = 2 Sawtooth 16' - Sawtooth 8' + +#ifndef PLAITS_DSP_OSCILLATOR_STRING_SYNTH_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_STRING_SYNTH_OSCILLATOR_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/polyblep.h" + +namespace plaits { + +class StringSynthOscillator { + public: + StringSynthOscillator() { } + ~StringSynthOscillator() { } + + inline void Init() { + phase_ = 0.0f; + next_sample_ = 0.0f; + segment_ = 0.0f; + + frequency_ = 0.001f; + saw_8_gain_ = 0.0f; + saw_4_gain_ = 0.0f; + saw_2_gain_ = 0.0f; + saw_1_gain_ = 0.0f; + } + + inline void Render( + float frequency, + const float* unshifted_registration, + float gain, + float* out, + size_t size) { + frequency *= 8.0f; + + // Deal with very high frequencies by shifting everything 1 or 2 octave + // down: Instead of playing the 1nd harmonic of a 8kHz wave, we play the + // second harmonic of a 4kHz wave. + size_t shift = 0; + while (frequency > 0.5f) { + shift += 2; + frequency *= 0.5f; + } + // Frequency is just too high. + if (shift >= 8) { + return; + } + + float registration[7]; + std::fill(®istration[0], ®istration[shift], 0.0f); + std::copy( + &unshifted_registration[0], + &unshifted_registration[7 - shift], + ®istration[shift]); + + stmlib::ParameterInterpolator fm(&frequency_, frequency, size); + stmlib::ParameterInterpolator saw_8_gain_modulation( + &saw_8_gain_, + (registration[0] + 2.0f * registration[1]) * gain, + size); + stmlib::ParameterInterpolator saw_4_gain_modulation( + &saw_4_gain_, + (registration[2] - registration[1] + 2.0f * registration[3]) * gain, + size); + stmlib::ParameterInterpolator saw_2_gain_modulation( + &saw_2_gain_, + (registration[4] - registration[3] + 2.0f * registration[5]) * gain, + size); + stmlib::ParameterInterpolator saw_1_gain_modulation( + &saw_1_gain_, + (registration[6] - registration[5]) * gain, + size); + + float phase = phase_; + float next_sample = next_sample_; + int segment = segment_; + while (size--) { + float this_sample = next_sample; + next_sample = 0.0f; + + const float frequency = fm.Next(); + const float saw_8_gain = saw_8_gain_modulation.Next(); + const float saw_4_gain = saw_4_gain_modulation.Next(); + const float saw_2_gain = saw_2_gain_modulation.Next(); + const float saw_1_gain = saw_1_gain_modulation.Next(); + + phase += frequency; + int next_segment = static_cast(phase); + if (next_segment != segment) { + float discontinuity = 0.0f; + if (next_segment == 8) { + phase -= 8.0f; + next_segment -= 8; + discontinuity -= saw_8_gain; + } + if ((next_segment & 3) == 0) { + discontinuity -= saw_4_gain; + } + if ((next_segment & 1) == 0) { + discontinuity -= saw_2_gain; + } + discontinuity -= saw_1_gain; + if (discontinuity != 0.0f) { + float fraction = phase - static_cast(next_segment); + float t = fraction / frequency; + this_sample += stmlib::ThisBlepSample(t) * discontinuity; + next_sample += stmlib::NextBlepSample(t) * discontinuity; + } + } + segment = next_segment; + + next_sample += (phase - 4.0f) * saw_8_gain * 0.125f; + next_sample += (phase - float(segment & 4) - 2.0f) * saw_4_gain * 0.25f; + next_sample += (phase - float(segment & 6) - 1.0f) * saw_2_gain * 0.5f; + next_sample += (phase - float(segment & 7) - 0.5f) * saw_1_gain; + *out++ += 2.0f * this_sample; + } + next_sample_ = next_sample; + phase_ = phase; + segment_ = segment; + } + + private: + // Oscillator state. + float phase_; + float next_sample_; + int segment_; + + // For interpolation of parameters. + float frequency_; + float saw_8_gain_; + float saw_4_gain_; + float saw_2_gain_; + float saw_1_gain_; + + DISALLOW_COPY_AND_ASSIGN(StringSynthOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_STRING_SYNTH_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/variable_saw_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/variable_saw_oscillator.h new file mode 100644 index 00000000..cc61c950 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/variable_saw_oscillator.h @@ -0,0 +1,165 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Saw with variable slope or notch + +#ifndef PLAITS_DSP_OSCILLATOR_VARIABLE_SAW_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_VARIABLE_SAW_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/polyblep.h" + +#include + +#include "plaits/dsp/oscillator/oscillator.h" + +namespace plaits { + +const float kVariableSawNotchDepth = 0.2f; + +class VariableSawOscillator { + public: + VariableSawOscillator() { } + ~VariableSawOscillator() { } + + void Init() { + phase_ = 0.0f; + next_sample_ = 0.0f; + previous_pw_ = 0.5f; + high_ = false; + + frequency_ = 0.01f; + pw_ = 0.5f; + waveshape_ = 0.0f; + } + + void Render( + float frequency, + float pw, + float waveshape, + float* out, + size_t size) { + if (frequency >= kMaxFrequency) { + frequency = kMaxFrequency; + } + + if (frequency >= 0.25f) { + pw = 0.5f; + } else { + CONSTRAIN(pw, frequency * 2.0f, 1.0f - 2.0f * frequency); + } + + stmlib::ParameterInterpolator fm(&frequency_, frequency, size); + stmlib::ParameterInterpolator pwm(&pw_, pw, size); + stmlib::ParameterInterpolator waveshape_modulation( + &waveshape_, waveshape, size); + + float next_sample = next_sample_; + + while (size--) { + float this_sample = next_sample; + next_sample = 0.0f; + + const float frequency = fm.Next(); + const float pw = pwm.Next(); + const float waveshape = waveshape_modulation.Next(); + const float triangle_amount = waveshape; + const float notch_amount = 1.0f - waveshape; + const float slope_up = 1.0f / (pw); + const float slope_down = 1.0f / (1.0f - pw); + + phase_ += frequency; + + if (!high_ && phase_ >= pw) { + const float triangle_step = (slope_up + slope_down) * frequency * triangle_amount; + const float notch = (kVariableSawNotchDepth + 1.0f - pw) * notch_amount; + const float t = (phase_ - pw) / (previous_pw_ - pw + frequency); + this_sample += notch * stmlib::ThisBlepSample(t); + next_sample += notch * stmlib::NextBlepSample(t); + this_sample -= triangle_step * stmlib::ThisIntegratedBlepSample(t); + next_sample -= triangle_step * stmlib::NextIntegratedBlepSample(t); + high_ = true; + } else if (phase_ >= 1.0f) { + phase_ -= 1.0f; + const float triangle_step = (slope_up + slope_down) * frequency * triangle_amount; + const float notch = (kVariableSawNotchDepth + 1.0f) * notch_amount; + const float t = phase_ / frequency; + this_sample -= notch * stmlib::ThisBlepSample(t); + next_sample -= notch * stmlib::NextBlepSample(t); + this_sample += triangle_step * stmlib::ThisIntegratedBlepSample(t); + next_sample += triangle_step * stmlib::NextIntegratedBlepSample(t); + high_ = false; + } + + next_sample += ComputeNaiveSample( + phase_, + pw, + slope_up, + slope_down, + triangle_amount, + notch_amount); + previous_pw_ = pw; + + *out++ = (2.0f * this_sample - 1.0f) / (1.0f + kVariableSawNotchDepth); + } + + next_sample_ = next_sample; + } + + + private: + inline float ComputeNaiveSample( + float phase, + float pw, + float slope_up, + float slope_down, + float triangle_amount, + float notch_amount) const { + float notch_saw = phase < pw ? phase : 1.0f + kVariableSawNotchDepth; + float triangle = phase < pw + ? phase * slope_up + : 1.0f - (phase - pw) * slope_down; + return notch_saw * notch_amount + triangle * triangle_amount; + } + + // Oscillator state. + float phase_; + float next_sample_; + float previous_pw_; + bool high_; + + // For interpolation of parameters. + float frequency_; + float pw_; + float waveshape_; + + DISALLOW_COPY_AND_ASSIGN(VariableSawOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_VARIABLE_SAW_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/variable_shape_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/variable_shape_oscillator.h new file mode 100644 index 00000000..fcb9295b --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/variable_shape_oscillator.h @@ -0,0 +1,226 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Continuously variable waveform: triangle > saw > square. Both square and +// triangle have variable slope / pulse-width. Additionally, the phase resets +// can be locked to a master frequency. + +#ifndef PLAITS_DSP_OSCILLATOR_VARIABLE_SHAPE_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_VARIABLE_SHAPE_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/polyblep.h" + +#include + +namespace plaits { + +class VariableShapeOscillator { + public: + VariableShapeOscillator() { } + ~VariableShapeOscillator() { } + + void Init() { + master_phase_ = 0.0f; + slave_phase_ = 0.0f; + next_sample_ = 0.0f; + previous_pw_ = 0.5f; + high_ = false; + + master_frequency_ = 0.0f; + slave_frequency_ = 0.01f; + pw_ = 0.5f; + waveshape_ = 0.0f; + } + + template + void Render( + float master_frequency, + float frequency, + float pw, + float waveshape, + float* out, + size_t size) { + if (master_frequency >= kMaxFrequency) { + master_frequency = kMaxFrequency; + } + if (frequency >= kMaxFrequency) { + frequency = kMaxFrequency; + } + + if (frequency >= 0.25f) { + pw = 0.5f; + } else { + CONSTRAIN(pw, frequency * 2.0f, 1.0f - 2.0f * frequency); + } + + stmlib::ParameterInterpolator master_fm( + &master_frequency_, master_frequency, size); + stmlib::ParameterInterpolator fm(&slave_frequency_, frequency, size); + stmlib::ParameterInterpolator pwm(&pw_, pw, size); + stmlib::ParameterInterpolator waveshape_modulation( + &waveshape_, waveshape, size); + + float next_sample = next_sample_; + + while (size--) { + bool reset = false; + bool transition_during_reset = false; + float reset_time = 0.0f; + + float this_sample = next_sample; + next_sample = 0.0f; + + const float master_frequency = master_fm.Next(); + const float slave_frequency = fm.Next(); + const float pw = pwm.Next(); + const float waveshape = waveshape_modulation.Next(); + const float square_amount = std::max(waveshape - 0.5f, 0.0f) * 2.0f; + const float triangle_amount = std::max(1.0f - waveshape * 2.0f, 0.0f); + const float slope_up = 1.0f / (pw); + const float slope_down = 1.0f / (1.0f - pw); + + if (enable_sync) { + master_phase_ += master_frequency; + if (master_phase_ >= 1.0f) { + master_phase_ -= 1.0f; + reset_time = master_phase_ / master_frequency; + + float slave_phase_at_reset = slave_phase_ + \ + (1.0f - reset_time) * slave_frequency; + reset = true; + if (slave_phase_at_reset >= 1.0f) { + slave_phase_at_reset -= 1.0f; + transition_during_reset = true; + } + if (!high_ && slave_phase_at_reset >= pw) { + transition_during_reset = true; + } + float value = ComputeNaiveSample( + slave_phase_at_reset, + pw, + slope_up, + slope_down, + triangle_amount, + square_amount); + this_sample -= value * stmlib::ThisBlepSample(reset_time); + next_sample -= value * stmlib::NextBlepSample(reset_time); + } + } + + slave_phase_ += slave_frequency; + while (transition_during_reset || !reset) { + if (!high_) { + if (slave_phase_ < pw) { + break; + } + float t = (slave_phase_ - pw) / (previous_pw_ - pw + slave_frequency); + float triangle_step = (slope_up + slope_down) * slave_frequency; + triangle_step *= triangle_amount; + + this_sample += square_amount * stmlib::ThisBlepSample(t); + next_sample += square_amount * stmlib::NextBlepSample(t); + this_sample -= triangle_step * stmlib::ThisIntegratedBlepSample(t); + next_sample -= triangle_step * stmlib::NextIntegratedBlepSample(t); + high_ = true; + } + + if (high_) { + if (slave_phase_ < 1.0f) { + break; + } + slave_phase_ -= 1.0f; + float t = slave_phase_ / slave_frequency; + float triangle_step = (slope_up + slope_down) * slave_frequency; + triangle_step *= triangle_amount; + + this_sample -= (1.0f - triangle_amount) * stmlib::ThisBlepSample(t); + next_sample -= (1.0f - triangle_amount) * stmlib::NextBlepSample(t); + this_sample += triangle_step * stmlib::ThisIntegratedBlepSample(t); + next_sample += triangle_step * stmlib::NextIntegratedBlepSample(t); + high_ = false; + } + } + + if (enable_sync && reset) { + slave_phase_ = reset_time * slave_frequency; + high_ = false; + } + + next_sample += ComputeNaiveSample( + slave_phase_, + pw, + slope_up, + slope_down, + triangle_amount, + square_amount); + previous_pw_ = pw; + + *out++ = (2.0f * this_sample - 1.0f); + } + + next_sample_ = next_sample; + } + + + private: + inline float ComputeNaiveSample( + float phase, + float pw, + float slope_up, + float slope_down, + float triangle_amount, + float square_amount) const { + float saw = phase; + float square = phase < pw ? 0.0f : 1.0f; + float triangle = phase < pw + ? phase * slope_up + : 1.0f - (phase - pw) * slope_down; + saw += (square - saw) * square_amount; + saw += (triangle - saw) * triangle_amount; + return saw; + } + + // Oscillator state. + float master_phase_; + float slave_phase_; + float next_sample_; + float previous_pw_; + bool high_; + + // For interpolation of parameters. + float master_frequency_; + float slave_frequency_; + float pw_; + float waveshape_; + + DISALLOW_COPY_AND_ASSIGN(VariableShapeOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_VARIABLE_SHAPE_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/vosim_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/vosim_oscillator.h new file mode 100644 index 00000000..aa51052c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/vosim_oscillator.h @@ -0,0 +1,142 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Two sinewaves multiplied by and sync'ed to a carrier. + +#ifndef PLAITS_DSP_OSCILLATOR_VOSIM_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_VOSIM_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" + +#include "plaits/dsp/oscillator/oscillator.h" +#include "plaits/resources.h" + +namespace plaits { + +class VOSIMOscillator { + public: + VOSIMOscillator() { } + ~VOSIMOscillator() { } + + void Init() { + carrier_phase_ = 0.0f; + formant_1_phase_ = 0.0f; + formant_2_phase_ = 0.0f; + + carrier_frequency_ = 0.0f; + formant_1_frequency_ = 0.0f; + formant_2_frequency_ = 0.0f; + carrier_shape_ = 0.0f; + } + + void Render( + float carrier_frequency, + float formant_frequency_1, + float formant_frequency_2, + float carrier_shape, + float* out, + size_t size) { + if (carrier_frequency >= kMaxFrequency) { + carrier_frequency = kMaxFrequency; + } + if (formant_frequency_1 >= kMaxFrequency) { + formant_frequency_1 = kMaxFrequency; + } + if (formant_frequency_2 >= kMaxFrequency) { + formant_frequency_2 = kMaxFrequency; + } + + stmlib::ParameterInterpolator f0_modulation( + &carrier_frequency_, + carrier_frequency, + size); + stmlib::ParameterInterpolator f1_modulation( + &formant_1_frequency_, + formant_frequency_1, + size); + stmlib::ParameterInterpolator f2_modulation( + &formant_2_frequency_, + formant_frequency_2, + size); + stmlib::ParameterInterpolator carrier_shape_modulation( + &carrier_shape_, + carrier_shape, + size); + + while (size--) { + const float f0 = f0_modulation.Next(); + const float f1 = f1_modulation.Next(); + const float f2 = f2_modulation.Next(); + + carrier_phase_ += carrier_frequency; + if (carrier_phase_ >= 1.0f) { + carrier_phase_ -= 1.0f; + float reset_time = carrier_phase_ / f0; + formant_1_phase_ = reset_time * f1; + formant_2_phase_ = reset_time * f2; + } else { + formant_1_phase_ += f1; + if (formant_1_phase_ >= 1.0f) { + formant_1_phase_ -= 1.0f; + } + formant_2_phase_ += f2; + if (formant_2_phase_ >= 1.0f) { + formant_2_phase_ -= 1.0f; + } + } + + float carrier = Sine(carrier_phase_ * 0.5f + 0.25f) + 1.0f; + float reset_phase = 0.75f - 0.25f * carrier_shape_modulation.Next(); + float reset_amplitude = Sine(reset_phase); + float formant_0 = Sine(formant_1_phase_ + reset_phase) - reset_amplitude; + float formant_1 = Sine(formant_2_phase_ + reset_phase) - reset_amplitude; + *out++ = carrier * (formant_0 + formant_1) * 0.25f + reset_amplitude; + } + } + + private: + inline float Sine(float phase) { + return stmlib::InterpolateWrap(lut_sine, phase, 1024.0f); + } + + // Oscillator state. + float carrier_phase_; + float formant_1_phase_; + float formant_2_phase_; + + // For interpolation of parameters. + float carrier_frequency_; + float formant_1_frequency_; + float formant_2_frequency_; + float carrier_shape_; + + DISALLOW_COPY_AND_ASSIGN(VOSIMOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_VOSIM_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/wavetable_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/wavetable_oscillator.h new file mode 100644 index 00000000..8c273ce4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/wavetable_oscillator.h @@ -0,0 +1,187 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Integrated wavetable synthesis. + +#ifndef PLAITS_DSP_OSCILLATOR_WAVETABLE_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_WAVETABLE_OSCILLATOR_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" + +#include "plaits/dsp/oscillator/oscillator.h" + +namespace plaits { + +class Differentiator { + public: + Differentiator() { } + ~Differentiator() { } + + void Init() { + previous_ = 0.0f; + lp_ = 0.0f; + } + + float Process(float coefficient, float s) { + ONE_POLE(lp_, s - previous_, coefficient); + previous_ = s; + return lp_; + } + private: + float lp_; + float previous_; + + DISALLOW_COPY_AND_ASSIGN(Differentiator); +}; + +inline float InterpolateWave( + const int16_t* table, + int32_t index_integral, + float index_fractional) { + float a = static_cast(table[index_integral]); + float b = static_cast(table[index_integral + 1]); + float t = index_fractional; + return a + (b - a) * t; +} + +inline float InterpolateWaveHermite( + const int16_t* table, + int32_t index_integral, + float index_fractional) { + const float xm1 = table[index_integral]; + const float x0 = table[index_integral + 1]; + const float x1 = table[index_integral + 2]; + const float x2 = table[index_integral + 3]; + const float c = (x1 - xm1) * 0.5f; + const float v = x0 - x1; + const float w = c + v; + const float a = w + v + (x2 - x0) * 0.5f; + const float b_neg = w + a; + const float f = index_fractional; + return (((a * f) - b_neg) * f + c) * f + x0; +} + +template< + size_t wavetable_size, + size_t num_waves, + bool approximate_scale=true> +class WavetableOscillator { + public: + WavetableOscillator() { } + ~WavetableOscillator() { } + + void Init() { + phase_ = 0.0f; + frequency_ = 0.0f; + amplitude_ = 0.0f; + waveform_ = 0.0f; + lp_ = 0.0f; + differentiator_.Init(); + } + + void Render( + float frequency, + float amplitude, + float waveform, + const int16_t** wavetable, + float* out, + size_t size) { + if (frequency >= kMaxFrequency) { + frequency = kMaxFrequency; + } + amplitude *= 1.0f - 2.0f * frequency; + if (approximate_scale) { + amplitude *= 1.0f / (frequency * 131072.0f) * (0.95f - frequency); + } + + stmlib::ParameterInterpolator frequency_modulation( + &frequency_, + frequency, + size); + stmlib::ParameterInterpolator amplitude_modulation( + &litude_, + amplitude, + size); + stmlib::ParameterInterpolator waveform_modulation( + &waveform_, + waveform * float(num_waves - 1.0001f), + size); + + float lp = lp_; + float phase = phase_; + while (size--) { + const float f0 = frequency_modulation.Next(); + const float cutoff = std::min(float(wavetable_size) * f0, 1.0f); + + const float scale = approximate_scale ? 1.0f : 1.0f / (f0 * 131072.0f) * (0.95f - f0); + + phase += f0; + if (phase >= 1.0f) { + phase -= 1.0f; + } + + const float waveform = waveform_modulation.Next(); + MAKE_INTEGRAL_FRACTIONAL(waveform); + + const float p = phase * float(wavetable_size); + MAKE_INTEGRAL_FRACTIONAL(p); + + const float x0 = InterpolateWave( + wavetable[waveform_integral], p_integral, p_fractional); + const float x1 = InterpolateWave( + wavetable[waveform_integral + 1], p_integral, p_fractional); + + const float s = differentiator_.Process( + cutoff, + x0 + (x1 - x0) * waveform_fractional); + ONE_POLE(lp, s * scale, cutoff * 0.5f); + *out++ += amplitude_modulation.Next() * lp; + } + lp_ = lp; + phase_ = phase; + } + + private: + // Oscillator state. + float phase_; + + // For interpolation of parameters. + float frequency_; + float amplitude_; + float waveform_; + float lp_; + + Differentiator differentiator_; + + DISALLOW_COPY_AND_ASSIGN(WavetableOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_WAVETABLE_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/z_oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/z_oscillator.h new file mode 100644 index 00000000..394e1571 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/oscillator/z_oscillator.h @@ -0,0 +1,209 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Sinewave multiplied by and sync'ed to a carrier. + +#ifndef PLAITS_DSP_OSCILLATOR_Z_OSCILLATOR_H_ +#define PLAITS_DSP_OSCILLATOR_Z_OSCILLATOR_H_ + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/polyblep.h" + +#include "plaits/resources.h" + +namespace plaits { + +class ZOscillator { + public: + ZOscillator() { } + ~ZOscillator() { } + + void Init() { + carrier_phase_ = 0.0f; + discontinuity_phase_ = 0.0f; + formant_phase_ = 0.0f; + next_sample_ = 0.0f; + + carrier_frequency_ = 0.0f; + formant_frequency_ = 0.0f; + carrier_shape_ = 0.0f; + mode_ = 0.0f; + } + + void Render( + float carrier_frequency, + float formant_frequency, + float carrier_shape, + float mode, + float* out, + size_t size) { + if (carrier_frequency >= kMaxFrequency * 0.5f) { + carrier_frequency = kMaxFrequency * 0.5f; + } + if (formant_frequency >= kMaxFrequency) { + formant_frequency = kMaxFrequency; + } + + stmlib::ParameterInterpolator carrier_frequency_modulation( + &carrier_frequency_, + carrier_frequency, + size); + stmlib::ParameterInterpolator formant_frequency_modulation( + &formant_frequency_, + formant_frequency, + size); + stmlib::ParameterInterpolator carrier_shape_modulation( + &carrier_shape_, + carrier_shape, + size); + stmlib::ParameterInterpolator mode_modulation( + &mode_, + mode, + size); + + float next_sample = next_sample_; + + while (size--) { + bool reset = false; + float reset_time = 0.0f; + + float this_sample = next_sample; + next_sample = 0.0f; + + const float f0 = carrier_frequency_modulation.Next(); + const float f1 = formant_frequency_modulation.Next(); + + discontinuity_phase_ += 2.0f * f0; + carrier_phase_ += f0; + reset = discontinuity_phase_ >= 1.0f; + + if (reset) { + discontinuity_phase_ -= 1.0f; + reset_time = discontinuity_phase_ / (2.0f * f0); + + float carrier_phase_before = carrier_phase_ >= 1.0f ? 1.0f : 0.5f; + float carrier_phase_after = carrier_phase_ >= 1.0f ? 0.0f : 0.5f; + float before = Z( + carrier_phase_before, + 1.0f, + formant_phase_ + (1.0f - reset_time) * f1, + carrier_shape_modulation.subsample(1.0f - reset_time), + mode_modulation.subsample(1.0f - reset_time)); + + float after = Z( + carrier_phase_after, + 0.0f, + 0.0f, + carrier_shape_modulation.subsample(1.0f), + mode_modulation.subsample(1.0f)); + + float discontinuity = after - before; + this_sample += discontinuity * stmlib::ThisBlepSample(reset_time); + next_sample += discontinuity * stmlib::NextBlepSample(reset_time); + formant_phase_ = reset_time * f1; + + if (carrier_phase_ > 1.0f) { + carrier_phase_ = discontinuity_phase_ * 0.5f; + } + } else { + formant_phase_ += f1; + if (formant_phase_ >= 1.0f) { + formant_phase_ -= 1.0f; + } + } + + if (carrier_phase_ >= 1.0f) { + carrier_phase_ -= 1.0f; + } + + next_sample += Z( + carrier_phase_, + discontinuity_phase_, + formant_phase_, + carrier_shape_modulation.Next(), + mode_modulation.Next()); + *out++ = this_sample; + } + + next_sample_ = next_sample; + } + + private: + inline float Sine(float phase) { + return stmlib::InterpolateWrap(lut_sine, phase, 1024.0f); + } + + inline float Z(float c, float d, float f, float shape, float mode) { + float ramp_down = 0.5f * (1.0f + Sine(0.5f * d + 0.25f)); + + float offset; + float phase_shift; + if (mode < 0.333f) { + offset = 1.0f; + phase_shift = 0.25f + mode * 1.50f; + } else if (mode < 0.666f) { + phase_shift = 0.7495f - (mode - 0.33f) * 0.75f; + offset = -Sine(phase_shift); + } else { + phase_shift = 0.7495f - (mode - 0.33f) * 0.75f; + offset = 0.001f; + } + + float discontinuity = Sine(f + phase_shift); + float contour; + if (shape < 0.5f) { + shape *= 2.0f; + if (c >= 0.5f) { + ramp_down *= shape; + } + contour = 1.0f + (Sine(c + 0.25f) - 1.0f) * shape; + } else { + contour = Sine(c + shape * 0.5f); + } + return (ramp_down * (offset + discontinuity) - offset) * contour; + } + + // Oscillator state. + float carrier_phase_; + float discontinuity_phase_; + float formant_phase_; + float next_sample_; + + // For interpolation of parameters. + float carrier_frequency_; + float formant_frequency_; + float carrier_shape_; + float mode_; + + DISALLOW_COPY_AND_ASSIGN(ZOscillator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_OSCILLATOR_Z_OSCILLATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/delay_line.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/delay_line.h new file mode 100644 index 00000000..ab63a3fc --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/delay_line.h @@ -0,0 +1,103 @@ +// Copyright 2014 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Delay line (same implementation as from stmlib, but does not own its buffer). + +#ifndef PLAITS_DSP_PHYSICAL_MODELLING_DELAY_LINE_H_ +#define PLAITS_DSP_PHYSICAL_MODELLING_DELAY_LINE_H_ + +#include + +#include "stmlib/dsp/dsp.h" + +namespace plaits { + +template +class DelayLine { + public: + DelayLine() { } + ~DelayLine() { } + + void Init(float* buffer) { + line_ = buffer; + Reset(); + } + + void Reset() { + std::fill(&line_[0], &line_[max_delay], T(0)); + write_ptr_ = 0; + } + + inline void Write(const T sample) { + line_[write_ptr_] = sample; + write_ptr_ = (write_ptr_ - 1 + max_delay) % max_delay; + } + + inline const T Allpass(const T sample, size_t delay, const T coefficient) { + T read = line_[(write_ptr_ + delay) % max_delay]; + T write = sample + coefficient * read; + Write(write); + return -write * coefficient + read; + } + + inline const T WriteRead(const T sample, float delay) { + Write(sample); + return Read(delay); + } + + inline const T Read(float delay) const { + MAKE_INTEGRAL_FRACTIONAL(delay) + const T a = line_[(write_ptr_ + delay_integral) % max_delay]; + const T b = line_[(write_ptr_ + delay_integral + 1) % max_delay]; + return a + (b - a) * T(delay_fractional); + } + + inline const T ReadHermite(float delay) const { + MAKE_INTEGRAL_FRACTIONAL(delay) + int32_t t = (write_ptr_ + delay_integral + max_delay); + const T xm1 = line_[(t - 1) % max_delay]; + const T x0 = line_[(t) % max_delay]; + const T x1 = line_[(t + 1) % max_delay]; + const T x2 = line_[(t + 2) % max_delay]; + const T c = (x1 - xm1) * 0.5f; + const T v = x0 - x1; + const T w = c + v; + const T a = w + v + (x2 - x0) * 0.5f; + const T b_neg = w + a; + const T f = delay_fractional; + return (((a * f) - b_neg) * f + c) * f + x0; + } + + private: + size_t write_ptr_; + T* line_; + + DISALLOW_COPY_AND_ASSIGN(DelayLine); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_PHYSICAL_MODELLING_DELAY_LINE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/modal_voice.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/modal_voice.cc new file mode 100644 index 00000000..b90609bb --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/modal_voice.cc @@ -0,0 +1,100 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Simple modal synthesis voice with a mallet exciter: +// click -> LPF -> resonator. +// +// The click is replaced by continuous white noise when the trigger input +// of the module is not patched. + +#include "plaits/dsp/physical_modelling/modal_voice.h" + +#include + +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/dsp/noise/dust.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void ModalVoice::Init() { + excitation_filter_.Init(); + resonator_.Init(0.015f, kMaxNumModes); +} + +void ModalVoice::Render( + bool sustain, + bool trigger, + float accent, + float f0, + float structure, + float brightness, + float damping, + float* temp, + float* out, + float* aux, + size_t size) { + const float density = brightness * brightness; + + brightness += 0.25f * accent * (1.0f - brightness); + damping += 0.25f * accent * (1.0f - damping); + + const float range = sustain ? 36.0f : 60.0f; + const float f = sustain ? 4.0f * f0 : 2.0f * f0; + const float cutoff = min( + f * SemitonesToRatio((brightness * (2.0f - brightness) - 0.5f) * range), + 0.499f); + const float q = sustain ? 0.7f : 1.5f; + + // Synthesize excitation signal. + if (sustain) { + const float dust_f = 0.00005f + 0.99995f * density * density; + for (size_t i = 0; i < size; ++i) { + temp[i] = Dust(dust_f) * (4.0f - dust_f * 3.0f) * accent; + } + } else { + fill(&temp[0], &temp[size], 0.0f); + if (trigger) { + const float attenuation = 1.0f - damping * 0.5f; + const float amplitude = (0.12f + 0.08f * accent) * attenuation; + temp[0] = amplitude * SemitonesToRatio(cutoff * cutoff * 24.0f) / cutoff; + } + } + const float one = 1.0f; + excitation_filter_.Process( + &cutoff, &q, &one, temp, temp, size); + for (size_t i = 0; i < size; ++i) { + aux[i] += temp[i]; + } + + resonator_.Process(f0, structure, brightness, damping, temp, out, size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/modal_voice.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/modal_voice.h new file mode 100644 index 00000000..d77d8a2e --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/modal_voice.h @@ -0,0 +1,68 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Simple modal synthesis voice with a mallet exciter: +// click -> LPF -> resonator. +// +// The click is replaced by continuous white noise when the trigger input +// of the module is not patched. + +#ifndef PLAITS_DSP_PHYSICAL_MODELLING_MODAL_VOICE_H_ +#define PLAITS_DSP_PHYSICAL_MODELLING_MODAL_VOICE_H_ + +#include "plaits/dsp/physical_modelling/resonator.h" + +namespace plaits { + +class ModalVoice { + public: + ModalVoice() { } + ~ModalVoice() { } + + void Init(); + void Render( + bool sustain, + bool trigger, + float accent, + float f0, + float structure, + float brightness, + float damping, + float* temp, + float* out, + float* aux, + size_t size); + + private: + ResonatorSvf<1> excitation_filter_; + Resonator resonator_; + + DISALLOW_COPY_AND_ASSIGN(ModalVoice); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_PHYSICAL_MODELLING_MODAL_VOICE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/resonator.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/resonator.cc new file mode 100644 index 00000000..de2d1707 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/resonator.cc @@ -0,0 +1,136 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resonator, taken from Rings' code but with fixed position. + +#include "plaits/dsp/physical_modelling/resonator.h" + +#include + +#include "stmlib/dsp/cosine_oscillator.h" +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/units.h" + +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void Resonator::Init(float position, int resolution) { + resolution_ = min(resolution, kMaxNumModes); + + CosineOscillator amplitudes; + amplitudes.Init(position); + + for (int i = 0; i < resolution; ++i) { + mode_amplitude_[i] = amplitudes.Next() * 0.25f; + } + + for (int i = 0; i < kMaxNumModes / kModeBatchSize; ++i) { + mode_filters_[i].Init(); + } +} + +inline float NthHarmonicCompensation(int n, float stiffness) { + float stretch_factor = 1.0f; + for (int i = 0; i < n - 1; ++i) { + stretch_factor += stiffness; + if (stiffness < 0.0f) { + stiffness *= 0.93f; + } else { + stiffness *= 0.98f; + } + } + return 1.0f / stretch_factor; +} + +void Resonator::Process( + float f0, + float structure, + float brightness, + float damping, + const float* in, + float* out, + size_t size) { + float stiffness = Interpolate(lut_stiffness, structure, 64.0f); + f0 *= NthHarmonicCompensation(3, stiffness); + + float harmonic = f0; + float stretch_factor = 1.0f; + float q_sqrt = SemitonesToRatio(damping * 79.7f); + float q = 500.0f * q_sqrt * q_sqrt; + brightness *= 1.0f - structure * 0.3f; + brightness *= 1.0f - damping * 0.3f; + float q_loss = brightness * (2.0f - brightness) * 0.85f + 0.15f; + + float mode_q[kModeBatchSize]; + float mode_f[kModeBatchSize]; + float mode_a[kModeBatchSize]; + int batch_counter = 0; + + ResonatorSvf* batch_processor = &mode_filters_[0]; + + + for (int i = 0; i < resolution_; ++i) { + float mode_frequency = harmonic * stretch_factor; + if (mode_frequency >= 0.499f) { + mode_frequency = 0.499f; + } + const float mode_attenuation = 1.0f - mode_frequency * 2.0f; + + mode_f[batch_counter] = mode_frequency; + mode_q[batch_counter] = 1.0f + mode_frequency * q; + mode_a[batch_counter] = mode_amplitude_[i] * mode_attenuation; + ++batch_counter; + + if (batch_counter == kModeBatchSize) { + batch_counter = 0; + batch_processor->Process( + mode_f, + mode_q, + mode_a, + in, + out, + size); + ++batch_processor; + } + + stretch_factor += stiffness; + if (stiffness < 0.0f) { + // Make sure that the partials do not fold back into negative frequencies. + stiffness *= 0.93f; + } else { + // This helps adding a few extra partials in the highest frequencies. + stiffness *= 0.98f; + } + harmonic += f0; + q *= q_loss; + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/resonator.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/resonator.h new file mode 100644 index 00000000..92ab7fc3 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/resonator.h @@ -0,0 +1,134 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resonator, taken from Rings' code but with fixed position. + +#ifndef PLAITS_DSP_PHYSICAL_MODELLING_RESONATOR_H_ +#define PLAITS_DSP_PHYSICAL_MODELLING_RESONATOR_H_ + +#include "stmlib/dsp/filter.h" + +namespace plaits { + +const int kMaxNumModes = 24; +const int kModeBatchSize = 4; + +// We render 4 modes simultaneously since there are enough registers to hold +// all state variables. +template +class ResonatorSvf { + public: + ResonatorSvf() { } + ~ResonatorSvf() { } + + void Init() { + for (int i = 0; i < batch_size; ++i) { + state_1_[i] = state_2_[i] = 0.0f; + } + } + + template + void Process( + const float* f, + const float* q, + const float* gain, + const float* in, + float* out, + size_t size) { + float g[batch_size]; + float r[batch_size]; + float r_plus_g[batch_size]; + float h[batch_size]; + float state_1[batch_size]; + float state_2[batch_size]; + float gains[batch_size]; + for (int i = 0; i < batch_size; ++i) { + g[i] = stmlib::OnePole::tan(f[i]); + r[i] = 1.0f / q[i]; + h[i] = 1.0f / (1.0f + r[i] * g[i] + g[i] * g[i]); + r_plus_g[i] = r[i] + g[i]; + state_1[i] = state_1_[i]; + state_2[i] = state_2_[i]; + gains[i] = gain[i]; + } + + while (size--) { + float s_in = *in++; + float s_out = 0.0f; + for (int i = 0; i < batch_size; ++i) { + const float hp = (s_in - r_plus_g[i] * state_1[i] - state_2[i]) * h[i]; + const float bp = g[i] * hp + state_1[i]; + state_1[i] = g[i] * hp + bp; + const float lp = g[i] * bp + state_2[i]; + state_2[i] = g[i] * bp + lp; + s_out += gains[i] * ((mode == stmlib::FILTER_MODE_LOW_PASS) ? lp : bp); + } + if (add) { + *out++ += s_out; + } else { + *out++ = s_out; + } + } + for (int i = 0; i < batch_size; ++i) { + state_1_[i] = state_1[i]; + state_2_[i] = state_2[i]; + } + } + + private: + float state_1_[batch_size]; + float state_2_[batch_size]; + + DISALLOW_COPY_AND_ASSIGN(ResonatorSvf); +}; + +class Resonator { + public: + Resonator() { } + ~Resonator() { } + + void Init(float position, int resolution); + void Process( + float f0, + float structure, + float brightness, + float damping, + const float* in, + float* out, + size_t size); + + private: + int resolution_; + + float mode_amplitude_[kMaxNumModes]; + ResonatorSvf mode_filters_[kMaxNumModes / kModeBatchSize]; + + DISALLOW_COPY_AND_ASSIGN(Resonator); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_PHYSICAL_MODELLING_RESONATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string.cc new file mode 100644 index 00000000..305712f4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string.cc @@ -0,0 +1,190 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Comb filter / KS string. "Lite" version of the implementation used in Rings. + +#include "plaits/dsp/physical_modelling/string.h" + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/dsp/dsp.h" +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void String::Init(BufferAllocator* allocator) { + string_.Init(allocator->Allocate(kDelayLineSize)); + stretch_.Init(allocator->Allocate(kDelayLineSize / 4)); + delay_ = 100.0f; + Reset(); +} + +void String::Reset() { + string_.Reset(); + stretch_.Reset(); + iir_damping_filter_.Init(); + dc_blocker_.Init(1.0f - 20.0f / kSampleRate); + dispersion_noise_ = 0.0f; + curved_bridge_ = 0.0f; + out_sample_[0] = out_sample_[1] = 0.0f; + src_phase_ = 0.0f; +} + +void String::Process( + float f0, + float non_linearity_amount, + float brightness, + float damping, + const float* in, + float* out, + size_t size) { + if (non_linearity_amount <= 0.0f) { + ProcessInternal( + f0, -non_linearity_amount, brightness, damping, in, out, size); + } else { + ProcessInternal( + f0, non_linearity_amount, brightness, damping, in, out, size); + } +} + +template +void String::ProcessInternal( + float f0, + float non_linearity_amount, + float brightness, + float damping, + const float* in, + float* out, + size_t size) { + float delay = 1.0f / f0; + CONSTRAIN(delay, 4.0f, kDelayLineSize - 4.0f); + + // If there is not enough delay time in the delay line, we play at the + // lowest possible note and we upsample on the fly with a shitty linear + // interpolator. We don't care because it's a corner case (f0 < 11.7Hz) + float src_ratio = delay * f0; + if (src_ratio >= 0.9999f) { + // When we are above 11.7 Hz, we make sure that the linear interpolator + // does not get in the way. + src_phase_ = 1.0f; + src_ratio = 1.0f; + } + + float damping_cutoff = min( + 12.0f + damping * damping * 60.0f + brightness * 24.0f, + 84.0f); + float damping_f = min(f0 * SemitonesToRatio(damping_cutoff), 0.499f); + + // Crossfade to infinite decay. + if (damping >= 0.95f) { + float to_infinite = 20.0f * (damping - 0.95f); + brightness += to_infinite * (1.0f - brightness); + damping_f += to_infinite * (0.4999f - damping_f); + damping_cutoff += to_infinite * (128.0f - damping_cutoff); + } + + iir_damping_filter_.set_f_q(damping_f, 0.5f); + + float damping_compensation = Interpolate(lut_svf_shift, damping_cutoff, 1.0f); + + // Linearly interpolate delay time. + ParameterInterpolator delay_modulation( + &delay_, delay * damping_compensation, size); + + float stretch_point = non_linearity_amount * (2.0f - non_linearity_amount) * 0.225f; + float stretch_correction = (160.0f / kSampleRate) * delay; + CONSTRAIN(stretch_correction, 1.0f, 2.1f); + + float noise_amount_sqrt = non_linearity_amount > 0.75f + ? 4.0f * (non_linearity_amount - 0.75f) + : 0.0f; + float noise_amount = noise_amount_sqrt * noise_amount_sqrt * 0.1f; + float noise_filter = 0.06f + 0.94f * brightness * brightness; + + float bridge_curving_sqrt = non_linearity_amount; + float bridge_curving = bridge_curving_sqrt * bridge_curving_sqrt * 0.01f; + + float ap_gain = -0.618f * non_linearity_amount / (0.15f + fabsf(non_linearity_amount)); + + while (size--) { + src_phase_ += src_ratio; + if (src_phase_ > 1.0f) { + src_phase_ -= 1.0f; + + float delay = delay_modulation.Next(); + float s = 0.0f; + + if (non_linearity == STRING_NON_LINEARITY_DISPERSION) { + float noise = Random::GetFloat() - 0.5f; + ONE_POLE(dispersion_noise_, noise, noise_filter) + delay *= 1.0f + dispersion_noise_ * noise_amount; + } else { + delay *= 1.0f - curved_bridge_ * bridge_curving; + } + + if (non_linearity == STRING_NON_LINEARITY_DISPERSION) { + float ap_delay = delay * stretch_point; + float main_delay = delay - ap_delay * (0.408f - stretch_point * 0.308f) * stretch_correction; + if (ap_delay >= 4.0f && main_delay >= 4.0f) { + s = string_.Read(main_delay); + s = stretch_.Allpass(s, ap_delay, ap_gain); + } else { + s = string_.ReadHermite(delay); + } + } else { + s = string_.ReadHermite(delay); + } + + if (non_linearity == STRING_NON_LINEARITY_CURVED_BRIDGE) { + float value = fabsf(s) - 0.025f; + float sign = s > 0.0f ? 1.0f : -1.5f; + curved_bridge_ = (fabsf(value) + value) * sign; + } + + s += *in; + CONSTRAIN(s, -20.0f, +20.0f); + + dc_blocker_.Process(&s, 1); + s = iir_damping_filter_.Process(s); + string_.Write(s); + + out_sample_[1] = out_sample_[0]; + out_sample_[0] = s; + } + *out++ += Crossfade(out_sample_[1], out_sample_[0], src_phase_); + in++; + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string.h new file mode 100644 index 00000000..9fe47fd9 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string.h @@ -0,0 +1,97 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Comb filter / KS string. "Lite" version of the implementation used in Rings. + +#ifndef PLAITS_DSP_PHYSICAL_MODELLING_STRING_H_ +#define PLAITS_DSP_PHYSICAL_MODELLING_STRING_H_ + +#include + +#include "stmlib/stmlib.h" + +#include "stmlib/dsp/filter.h" +#include "stmlib/utils/buffer_allocator.h" + +#include "plaits/dsp/physical_modelling/delay_line.h" + +namespace plaits { + +const size_t kDelayLineSize = 1024; + +enum StringNonLinearity { + STRING_NON_LINEARITY_CURVED_BRIDGE, + STRING_NON_LINEARITY_DISPERSION +}; + +class String { + public: + String() { } + ~String() { } + + void Init(stmlib::BufferAllocator* allocator); + void Reset(); + void Process( + float f0, + float non_linearity_amount, + float brightness, + float damping, + const float* in, + float* out, + size_t size); + + private: + template + void ProcessInternal( + float f0, + float non_linearity_amount, + float brightness, + float damping, + const float* in, + float* out, + size_t size); + + DelayLine string_; + DelayLine stretch_; + + stmlib::Svf iir_damping_filter_; + stmlib::DCBlocker dc_blocker_; + + float delay_; + float dispersion_noise_; + float curved_bridge_; + + // Very crappy linear interpolation upsampler used for low pitches that + // do not fit the delay line. Rarely used. + float src_phase_; + float out_sample_[2]; + + DISALLOW_COPY_AND_ASSIGN(String); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_PHYSICAL_MODELLING_STRING_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string_voice.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string_voice.cc new file mode 100644 index 00000000..8c9ceb86 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string_voice.cc @@ -0,0 +1,113 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Extended Karplus-Strong, with all the niceties from Rings. + +#include "plaits/dsp/physical_modelling/string_voice.h" + +#include + +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/dsp/noise/dust.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void StringVoice::Init(BufferAllocator* allocator) { + excitation_filter_.Init(); + string_.Init(allocator); + remaining_noise_samples_ = 0; +} + +void StringVoice::Reset() { + string_.Reset(); +} + +void StringVoice::Render( + bool sustain, + bool trigger, + float accent, + float f0, + float structure, + float brightness, + float damping, + float* temp, + float* out, + float* aux, + size_t size) { + const float density = brightness * brightness; + + brightness += 0.25f * accent * (1.0f - brightness); + damping += 0.25f * accent * (1.0f - damping); + + // Synthesize excitation signal. + if (trigger || sustain) { + const float range = 72.0f; + const float f = 4.0f * f0; + const float cutoff = min( + f * SemitonesToRatio((brightness * (2.0f - brightness) - 0.5f) * range), + 0.499f); + const float q = sustain ? 1.0f : 0.5f; + remaining_noise_samples_ = static_cast(1.0f / f0); + excitation_filter_.set_f_q(cutoff, q); + } + + if (sustain) { + const float dust_f = 0.00005f + 0.99995f * density * density; + for (size_t i = 0; i < size; ++i) { + temp[i] = Dust(dust_f) * (8.0f - dust_f * 6.0f) * accent; + } + } else if (remaining_noise_samples_) { + size_t noise_samples = min(remaining_noise_samples_, size); + remaining_noise_samples_ -= noise_samples; + size_t tail = size - noise_samples; + float* start = temp; + while (noise_samples--) { + *start++ = 2.0f * Random::GetFloat() - 1.0f; + } + while (tail--) { + *start++ = 0.0f; + } + } else { + fill(&temp[0], &temp[size], 0.0f); + } + + excitation_filter_.Process(temp, temp, size); + for (size_t i = 0; i < size; ++i) { + aux[i] += temp[i]; + } + + float non_linearity = structure < 0.24f + ? (structure - 0.24f) * 4.166f + : (structure > 0.26f ? (structure - 0.26f) * 1.35135f : 0.0f); + string_.Process(f0, non_linearity, brightness, damping, temp, out, size); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string_voice.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string_voice.h new file mode 100644 index 00000000..edff1fd1 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/physical_modelling/string_voice.h @@ -0,0 +1,69 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Extended Karplus-Strong, with all the niceties from Rings. + +#ifndef PLAITS_DSP_PHYSICAL_STRING_VOICE_H_ +#define PLAITS_DSP_PHYSICAL_STRING_VOICE_H_ + +#include "stmlib/dsp/filter.h" +#include "stmlib/utils/buffer_allocator.h" + +#include "plaits/dsp/physical_modelling/string.h" + +namespace plaits { + +class StringVoice { + public: + StringVoice() { } + ~StringVoice() { } + + void Init(stmlib::BufferAllocator* allocator); + void Reset(); + void Render( + bool sustain, + bool trigger, + float accent, + float f0, + float structure, + float brightness, + float damping, + float* temp, + float* out, + float* aux, + size_t size); + + private: + stmlib::Svf excitation_filter_; + String string_; + size_t remaining_noise_samples_; + + DISALLOW_COPY_AND_ASSIGN(StringVoice); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_PHYSICAL_STRING_VOICE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth.cc new file mode 100644 index 00000000..32130d98 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth.cc @@ -0,0 +1,163 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// LPC10 speech synth. + +#include "plaits/dsp/speech/lpc_speech_synth.h" + +#include + +#include "stmlib/utils/random.h" + +#include "plaits/dsp/oscillator/oscillator.h" +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void LPCSpeechSynth::Init() { + phase_ = 0.0f; + frequency_ = 0.0125f; + noise_energy_ = 0.0f; + pulse_energy_ = 0.0f; + + next_sample_ = 0.0f; + excitation_pulse_sample_index_ = 0; + + fill(&k_[0], &k_[kLPCOrder], 0); + fill(&s_[0], &s_[kLPCOrder + 1], 0); +} + +void LPCSpeechSynth::Render( + float prosody_amount, + float pitch_shift, + float* excitation, + float* output, + size_t size) { + const float base_f0 = kLPCSpeechSynthDefaultF0 / 8000.0f; + float d = frequency_ - base_f0; + float f = (base_f0 + d * prosody_amount) * pitch_shift; + CONSTRAIN(f, 0.0f, 0.5f); + + float next_sample = next_sample_; + while (size--) { + phase_ += f; + + float this_sample = next_sample; + next_sample = 0.0f; + + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float reset_time = phase_ / f; + int reset_sample = static_cast(32.0f * reset_time); + + float discontinuity = 0.0f; + if (excitation_pulse_sample_index_ < LUT_LPC_EXCITATION_PULSE_SIZE) { + excitation_pulse_sample_index_ -= reset_sample; + int8_t s = lut_lpc_excitation_pulse[excitation_pulse_sample_index_]; + discontinuity = static_cast(s) / 128.0f * pulse_energy_; + } + + this_sample += -discontinuity * ThisBlepSample(reset_time); + next_sample += -discontinuity * NextBlepSample(reset_time); + + excitation_pulse_sample_index_ = reset_sample; + } + + float e[11]; + e[10] = Random::GetSample() > 0 ? noise_energy_ : -noise_energy_; + if (excitation_pulse_sample_index_ < LUT_LPC_EXCITATION_PULSE_SIZE) { + int8_t s = lut_lpc_excitation_pulse[excitation_pulse_sample_index_]; + next_sample += static_cast(s) / 128.0f * pulse_energy_; + excitation_pulse_sample_index_ += 32; + } + e[10] += this_sample; + e[10] *= 1.5f; + + e[9] = e[10] - k_[9] * s_[9]; + e[8] = e[9] - k_[8] * s_[8]; + e[7] = e[8] - k_[7] * s_[7]; + e[6] = e[7] - k_[6] * s_[6]; + e[5] = e[6] - k_[5] * s_[5]; + e[4] = e[5] - k_[4] * s_[4]; + e[3] = e[4] - k_[3] * s_[3]; + e[2] = e[3] - k_[2] * s_[2]; + e[1] = e[2] - k_[1] * s_[1]; + e[0] = e[1] - k_[0] * s_[0]; + + CONSTRAIN(e[0], -2.0f, 2.0f); + + s_[9] = s_[8] + k_[8] * e[8]; + s_[8] = s_[7] + k_[7] * e[7]; + s_[7] = s_[6] + k_[6] * e[6]; + s_[6] = s_[5] + k_[5] * e[5]; + s_[5] = s_[4] + k_[4] * e[4]; + s_[4] = s_[3] + k_[3] * e[3]; + s_[3] = s_[2] + k_[2] * e[2]; + s_[2] = s_[1] + k_[1] * e[1]; + s_[1] = s_[0] + k_[0] * e[0]; + s_[0] = e[0]; + + *excitation++ = e[10]; + *output++ = e[0]; + } + next_sample_ = next_sample; +} + +void LPCSpeechSynth::PlayFrame(const Frame& f1, const Frame& f2, float blend) { + float frequency_1 = f1.period == 0 + ? frequency_ + : 1.0f / static_cast(f1.period); + float frequency_2 = f2.period == 0 + ? frequency_ + : 1.0f / static_cast(f2.period); + frequency_ = frequency_1 + (frequency_2 - frequency_1) * blend; + + float energy_1 = static_cast(f1.energy) / 256.0f; + float energy_2 = static_cast(f2.energy) / 256.0f; + float noise_energy_1 = f1.period == 0 ? energy_1 : 0.0f; + float noise_energy_2 = f2.period == 0 ? energy_2 : 0.0f; + noise_energy_ = noise_energy_1 + (noise_energy_2 - noise_energy_1) * blend; + + float pulse_energy_1 = f1.period != 0 ? energy_1 : 0; + float pulse_energy_2 = f2.period != 0 ? energy_2 : 0; + pulse_energy_ = pulse_energy_1 + (pulse_energy_2 - pulse_energy_1) * blend; + + k_[0] = BlendCoefficient<32768>(f1.k0, f2.k0, blend); + k_[1] = BlendCoefficient<32768>(f1.k1, f2.k1, blend); + k_[2] = BlendCoefficient<128>(f1.k2, f2.k2, blend); + k_[3] = BlendCoefficient<128>(f1.k3, f2.k3, blend); + k_[4] = BlendCoefficient<128>(f1.k4, f2.k4, blend); + k_[5] = BlendCoefficient<128>(f1.k5, f2.k5, blend); + k_[6] = BlendCoefficient<128>(f1.k6, f2.k6, blend); + k_[7] = BlendCoefficient<128>(f1.k7, f2.k7, blend); + k_[8] = BlendCoefficient<128>(f1.k8, f2.k8, blend); + k_[9] = BlendCoefficient<128>(f1.k9, f2.k9, blend); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth.h new file mode 100644 index 00000000..34c170c9 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth.h @@ -0,0 +1,110 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// LPC10 speech synth. + +#ifndef PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_H_ +#define PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_H_ + +#include "stmlib/dsp/dsp.h" + +#include "plaits/dsp/dsp.h" + +namespace plaits { + +const int kLPCOrder = 10; + +const float kLPCSpeechSynthDefaultF0 = 100.0f; + +class LPCSpeechSynth { + public: + LPCSpeechSynth() { } + ~LPCSpeechSynth() { } + + struct Frame { + // 14 bytes. + uint8_t energy; + uint8_t period; + int16_t k0; + int16_t k1; + int8_t k2; + int8_t k3; + int8_t k4; + int8_t k5; + int8_t k6; + int8_t k7; + int8_t k8; + int8_t k9; + }; + + void Init(); + + void Render( + float prosody_amount, + float pitch_shift, + float* excitation, + float* output, + size_t size); + + void PlayFrame(const Frame* frames, float frame, bool interpolate) { + MAKE_INTEGRAL_FRACTIONAL(frame); + + if (!interpolate) { + frame_fractional = 0.0f; + } + PlayFrame( + frames[frame_integral], + frames[frame_integral + 1], + frame_fractional); + } + + private: + void PlayFrame(const Frame& f1, const Frame& f2, float blend); + + template + float BlendCoefficient(X a, X b, float blend) { + float a_f = static_cast(a) / float(scale); + float b_f = static_cast(b) / float(scale); + return a_f + (b_f - a_f) * blend; + } + + float phase_; + float frequency_; + float noise_energy_; + float pulse_energy_; + + float next_sample_; + int excitation_pulse_sample_index_; + + float k_[kLPCOrder]; + float s_[kLPCOrder + 1]; + + DISALLOW_COPY_AND_ASSIGN(LPCSpeechSynth); +}; + +}; // namespace plaits + +#endif // PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_controller.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_controller.cc new file mode 100644 index 00000000..949f09a8 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_controller.cc @@ -0,0 +1,334 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Feeds frames to the LPC10 speech synth. + +#include "plaits/dsp/speech/lpc_speech_synth_controller.h" + +#include + +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/dsp/oscillator/oscillator.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +/* static */ +uint8_t LPCSpeechSynthWordBank::energy_lut_[16] = { + 0x00, 0x02, 0x03, 0x04, 0x05, 0x07, 0x0a, 0x0f, + 0x14, 0x20, 0x29, 0x39, 0x51, 0x72, 0xa1, 0xff +}; + +/* static */ +uint8_t LPCSpeechSynthWordBank::period_lut_[64] = { + 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 47, 49, 51, 53, + 54, 57, 59, 61, 63, 66, 69, 71, 73, 77, 79, 81, 85, 87, 92, 95, 99, + 102, 106, 110, 115, 119, 123, 128, 133, 138, 143, 149, 154, 160 +}; + +/* static */ +int16_t LPCSpeechSynthWordBank::k0_lut_[32] = { + -32064, -31872, -31808, -31680, -31552, -31424, -31232, -30848, + -30592, -30336, -30016, -29696, -29376, -28928, -28480, -27968, + -26368, -24256, -21632, -18368, -14528, -10048, -5184, 0, + 5184, 10048, 14528, 18368, 21632, 24256, 26368, 27968 +}; + +/* static */ +int16_t LPCSpeechSynthWordBank::k1_lut_[32] = { + -20992, -19328, -17536, -15552, -13440, -11200, -8768, -6272, + -3712, -1088, 1536, 4160, 6720, 9216, 11584, 13824, + 15936, 17856, 19648, 21248, 22656, 24000, 25152, 26176, + 27072, 27840, 28544, 29120, 29632, 30080, 30464, 32384 +}; + +/* static */ +int8_t LPCSpeechSynthWordBank::k2_lut_[16] = { +-110, -97, -83, -70, -56, -43, -29, -16, -2, 11, 25, 38, 52, 65, 79, 92 +}; + +/* static */ +int8_t LPCSpeechSynthWordBank::k3_lut_[16] = { +-82, -68, -54, -40, -26, -12, 1, 15, 29, 43, 57, 71, 85, 99, 113, 126 +}; + +/* static */ +int8_t LPCSpeechSynthWordBank::k4_lut_[16] = { + -82, -70, -59, -47, -35, -24, -12, -1, 11, 23, 34, 46, 57, 69, 81, 92 +}; + +/* static */ +int8_t LPCSpeechSynthWordBank::k5_lut_[16] = { + -64, -53, -42, -31, -20, -9, 3, 14, 25, 36, 47, 58, 69, 80, 91, 102 +}; + +/* static */ +int8_t LPCSpeechSynthWordBank::k6_lut_[16] = { + -77, -65, -53, -41, -29, -17, -5, 7, 19, 31, 43, 55, 67, 79, 90, 102 +}; + +/* static */ +int8_t LPCSpeechSynthWordBank::k7_lut_[8] = { +-64, -40, -16, 7, 31, 55, 79, 102 +}; + +/* static */ +int8_t LPCSpeechSynthWordBank::k8_lut_[8] = { + -64, -44, -24, -4, 16, 37, 57, 77 +}; + +/* static */ +int8_t LPCSpeechSynthWordBank::k9_lut_[8] = { + -51, -33, -15, 4, 22, 32, 59, 77 +}; + +void LPCSpeechSynthWordBank::Init( + const LPCSpeechSynthWordBankData* word_banks, + int num_banks, + BufferAllocator* allocator) { + word_banks_ = word_banks; + num_banks_ = num_banks; + frames_ = allocator->Allocate( + kLPCSpeechSynthMaxFrames); + Reset(); +} + +void LPCSpeechSynthWordBank::Reset() { + loaded_bank_ = -1; + num_frames_ = 0; + num_words_ = 0; + fill( + &word_boundaries_[0], + &word_boundaries_[kLPCSpeechSynthMaxWords], 0); +} + +size_t LPCSpeechSynthWordBank::LoadNextWord(const uint8_t* data) { + BitStream bitstream; + bitstream.Init(data); + + LPCSpeechSynth::Frame frame; + frame.energy = 0; + frame.period = 0; + frame.k0 = 0; + frame.k1 = 0; + frame.k2 = 0; + frame.k3 = 0; + frame.k4 = 0; + frame.k5 = 0; + frame.k6 = 0; + frame.k7 = 0; + frame.k8 = 0; + frame.k9 = 0; + + while (true) { + int energy = bitstream.GetBits(4); + if (energy == 0) { + frame.energy = 0; + } else if (energy == 0xf) { + bitstream.Flush(); + break; + } else { + frame.energy = energy_lut_[energy]; + bool repeat = bitstream.GetBits(1); + frame.period = period_lut_[bitstream.GetBits(6)]; + if (!repeat) { + frame.k0 = k0_lut_[bitstream.GetBits(5)]; + frame.k1 = k1_lut_[bitstream.GetBits(5)]; + frame.k2 = k2_lut_[bitstream.GetBits(4)]; + frame.k3 = k3_lut_[bitstream.GetBits(4)]; + if (frame.period) { + frame.k4 = k4_lut_[bitstream.GetBits(4)]; + frame.k5 = k5_lut_[bitstream.GetBits(4)]; + frame.k6 = k6_lut_[bitstream.GetBits(4)]; + frame.k7 = k7_lut_[bitstream.GetBits(3)]; + frame.k8 = k8_lut_[bitstream.GetBits(3)]; + frame.k9 = k9_lut_[bitstream.GetBits(3)]; + } + } + } + frames_[num_frames_++] = frame; + } + return bitstream.ptr() - data; +} + +bool LPCSpeechSynthWordBank::Load(int bank) { + if (bank == loaded_bank_ || bank >= num_banks_) { + return false; + } + + num_frames_ = 0; + num_words_ = 0; + + const uint8_t* data = word_banks_[bank].data; + size_t size = word_banks_[bank].size; + + while (size) { + word_boundaries_[num_words_] = num_frames_; + size_t consumed = LoadNextWord(data); + + data += consumed; + size -= consumed; + ++num_words_; + } + word_boundaries_[num_words_] = num_frames_; + loaded_bank_ = bank; + return true; +} + +void LPCSpeechSynthController::Init(LPCSpeechSynthWordBank* word_bank) { + word_bank_ = word_bank; + + clock_phase_ = 0.0f; + playback_frame_ = -1; + last_playback_frame_ = -1; + remaining_frame_samples_ = 0; + + fill(&sample_[0], &sample_[2], 0.0f); + fill(&next_sample_[0], &next_sample_[2], 0.0f); + + gain_ = 0.0f; + + synth_.Init(); +} + +void LPCSpeechSynthController::Render( + bool free_running, + bool trigger, + int bank, + float frequency, + float prosody_amount, + float speed, + float address, + float formant_shift, + float gain, + float* excitation, + float* output, + size_t size) { + const float rate_ratio = SemitonesToRatio((formant_shift - 0.5f) * 36.0f); + const float rate = rate_ratio / 6.0f; + + // All utterances have been normalized for an average f0 of 100 Hz. + const float pitch_shift = frequency / \ + (rate_ratio * kLPCSpeechSynthDefaultF0 / kCorrectedSampleRate); + const float time_stretch = SemitonesToRatio(-speed * 24.0f + + (formant_shift < 0.4f ? (formant_shift - 0.4f) * -45.0f + : (formant_shift > 0.6f ? (formant_shift - 0.6f) * -45.0f : 0.0f))); + + if (bank != -1) { + bool reset_everything = word_bank_->Load(bank); + if (reset_everything) { + playback_frame_ = -1; + last_playback_frame_ = -1; + } + } + + const int num_frames = bank == -1 + ? kLPCSpeechSynthNumVowels + : word_bank_->num_frames(); + + const LPCSpeechSynth::Frame* frames = bank == -1 + ? phonemes_ + : word_bank_->frames(); + + if (trigger) { + if (bank == -1) { + // Pick a pseudo-random consonant, and play it for the duration of a + // frame. + int r = (address + 3.0f * formant_shift + 7.0f * frequency) * 8.0f; + playback_frame_ = (r % kLPCSpeechSynthNumConsonants); + playback_frame_ += kLPCSpeechSynthNumVowels; + last_playback_frame_ = playback_frame_ + 1; + } else { + word_bank_->GetWordBoundaries( + address, + &playback_frame_, + &last_playback_frame_); + } + remaining_frame_samples_ = 0; + } + + if (playback_frame_ == -1 && remaining_frame_samples_ == 0) { + synth_.PlayFrame( + frames, + address * (static_cast(num_frames) - 1.0001f), + true); + } else { + if (remaining_frame_samples_ == 0) { + synth_.PlayFrame(frames, float(playback_frame_), false); + remaining_frame_samples_ = kSampleRate / kLPCSpeechSynthFPS * \ + time_stretch; + ++playback_frame_; + if (playback_frame_ >= last_playback_frame_) { + bool back_to_scan_mode = bank == -1 || free_running; + playback_frame_ = back_to_scan_mode ? -1 : last_playback_frame_; + } + } + remaining_frame_samples_ -= min(size, remaining_frame_samples_); + } + + ParameterInterpolator gain_modulation(&gain_, gain, size); + + while (size--) { + float this_sample[2]; + copy(&next_sample_[0], &next_sample_[2], &this_sample[0]); + fill(&next_sample_[0], &next_sample_[2], 0.0f); + + clock_phase_ += rate; + if (clock_phase_ >= 1.0f) { + clock_phase_ -= 1.0f; + float reset_time = clock_phase_ / rate; + float new_sample[2]; + + synth_.Render( + prosody_amount, + pitch_shift, + &new_sample[0], + &new_sample[1], 1); + + float discontinuity[2] = { + new_sample[0] - sample_[0], + new_sample[1] - sample_[1] + }; + this_sample[0] += discontinuity[0] * ThisBlepSample(reset_time); + next_sample_[0] += discontinuity[0] * NextBlepSample(reset_time); + this_sample[1] += discontinuity[1] * ThisBlepSample(reset_time); + next_sample_[1] += discontinuity[1] * NextBlepSample(reset_time); + copy(&new_sample[0], &new_sample[2], &sample_[0]); + } + next_sample_[0] += sample_[0]; + next_sample_[1] += sample_[1]; + const float gain = gain_modulation.Next(); + *excitation++ = this_sample[0] * gain; + *output++ = this_sample[1] * gain; + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_controller.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_controller.h new file mode 100644 index 00000000..4651b8d0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_controller.h @@ -0,0 +1,197 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Feeds frames to the LPC10 speech synth. + +#ifndef PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_CONTROLLER_H_ +#define PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_CONTROLLER_H_ + +#include "plaits/dsp/speech/lpc_speech_synth.h" + +#include "stmlib/utils/buffer_allocator.h" + +namespace plaits { + +class BitStream { + public: + BitStream() { } + ~BitStream() { } + + inline void Init(const uint8_t* p) { + p_ = p; + available_ = 0; + bits_ = 0; + } + + inline void Flush() { + while (available_) { + GetBits(1); + } + } + + inline uint8_t GetBits(int num_bits) { + int shift = num_bits; + if (num_bits > available_) { + bits_ <<= available_; + shift -= available_; + bits_ |= Reverse(*p_++); + available_ += 8; + } + bits_ <<= shift; + uint8_t result = bits_ >> 8; + bits_ &= 0xff; + available_ -= num_bits; + return result; + } + + inline const uint8_t* ptr() const { return p_; } + + private: + inline uint8_t Reverse(uint8_t b) const { + b = (b >> 4) | (b << 4); + b = ((b & 0xcc) >> 2) | ((b & 0x33) << 2); + b = ((b & 0xaa) >> 1) | ((b & 0x55) << 1); + return b; + } + + const uint8_t* p_; + int available_; + uint16_t bits_; + + DISALLOW_COPY_AND_ASSIGN(BitStream); +}; + +const int kLPCSpeechSynthMaxWords = 32; +const int kLPCSpeechSynthMaxFrames = 1024; +const int kLPCSpeechSynthNumVowels = 5; +const int kLPCSpeechSynthNumConsonants = 10; +const int kLPCSpeechSynthNumPhonemes = \ + kLPCSpeechSynthNumVowels + kLPCSpeechSynthNumConsonants; +const float kLPCSpeechSynthFPS = 40.0f; + +struct LPCSpeechSynthWordBankData { + const uint8_t* data; + size_t size; +}; + +class LPCSpeechSynthWordBank { + public: + LPCSpeechSynthWordBank() { } + ~LPCSpeechSynthWordBank() { } + + void Init( + const LPCSpeechSynthWordBankData* word_banks, + int num_banks, + stmlib::BufferAllocator* allocator); + + bool Load(int index); + void Reset(); + + inline int num_frames() const { return num_frames_; } + inline const LPCSpeechSynth::Frame* frames() const { return frames_; } + + inline void GetWordBoundaries(float address, int* start, int* end) { + if (num_words_ == 0) { + *start = *end = -1; + } else { + int word = static_cast(address * static_cast(num_words_)); + if (word >= num_words_) { + word = num_words_ - 1; + } + *start = word_boundaries_[word]; + *end = word_boundaries_[word + 1] - 1; + } + } + + private: + size_t LoadNextWord(const uint8_t* data); + + const LPCSpeechSynthWordBankData* word_banks_; + + int num_banks_; + int loaded_bank_; + int num_frames_; + int num_words_; + int word_boundaries_[kLPCSpeechSynthMaxWords]; + + LPCSpeechSynth::Frame* frames_; + + static uint8_t energy_lut_[16]; + static uint8_t period_lut_[64]; + static int16_t k0_lut_[32]; + static int16_t k1_lut_[32]; + static int8_t k2_lut_[16]; + static int8_t k3_lut_[16]; + static int8_t k4_lut_[16]; + static int8_t k5_lut_[16]; + static int8_t k6_lut_[16]; + static int8_t k7_lut_[8]; + static int8_t k8_lut_[8]; + static int8_t k9_lut_[8]; +}; + +class LPCSpeechSynthController { + public: + LPCSpeechSynthController() { } + ~LPCSpeechSynthController() { } + + void Init(LPCSpeechSynthWordBank* word_bank); + + void Render( + bool free_running, + bool trigger, + int bank, + float frequency, + float prosody_amount, + float speed, + float address, + float formant_shift, + float gain, + float* excitation, + float* output, + size_t size); + + private: + float clock_phase_; + float sample_[2]; + float next_sample_[2]; + float gain_; + LPCSpeechSynth synth_; + + int playback_frame_; + int last_playback_frame_; + size_t remaining_frame_samples_; + + LPCSpeechSynthWordBank* word_bank_; + + static const LPCSpeechSynth::Frame phonemes_[kLPCSpeechSynthNumPhonemes]; + + DISALLOW_COPY_AND_ASSIGN(LPCSpeechSynthController); +}; + +}; // namespace plaits + +#endif // PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_CONTROLLER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_phonemes.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_phonemes.cc new file mode 100644 index 00000000..6cecd314 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_phonemes.cc @@ -0,0 +1,126 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// This is a table with vowels (a, e, i, o, u) and a random selection of +// consonnants for the LPC10 speech synth. + +#include "plaits/dsp/speech/lpc_speech_synth_controller.h" + +namespace plaits { + +/* static */ +const LPCSpeechSynth::Frame + LPCSpeechSynthController::phonemes_[kLPCSpeechSynthNumPhonemes] = { + { + 192, + 80, + -18368, 11584, 52, 29, 23, + 14, -17, 79, 37, 4 + }, + { + 192, + 80, + -14528, 1536, 38, 29, 11, + 14, -41, 79, 57, 4 + }, + { + 192, + 80, + 14528, 9216, 25, -54, -70, + 36, 19, 79, 57, 22 + }, + { + 192, + 80, + -14528, -13440, 38, 57, 57, + 14, -53, 7, 37, 77 + }, + { + 192, + 80, + -26368, 4160, 11, 15, -1, + 36, -41, 31, 77, 22 + }, + { + 15, + 0, + 5184, 9216, -29, -12, 0, + 0, 0, 0, 0, 0 + }, + { + 10, + 0, + 27968, 17856, 25, 43, -24, + -20, -53, 55, -4, -51 + }, + { + 128, + 160, + 14528, -3712, -43, -26, -24, + -20, -53, 55, -4, -51 + }, + { + 128, + 160, + 10048, 11584, -16, 15, 0, + 0, 0, 0, 0, 0 + }, + { + 224, + 100, + 18368, -13440, -97, -26, -12, + -53, -41, 7, 57, 32 + }, + { 192, + 80, + -10048, 9216, -70, 15, 34, + -20, -17, 31, -24, 22 + }, + { 96, + 160, + -18368, 17856, -29, -12, -35, + 3, -5, 7, 37, 22 + }, + { 64, + 80, + -21632, -6272, -83, 29, 57, + 3, -5, 7, 16, 32 + }, + { + 192, + 80, + 0, -1088, 11, -26, -24, + -9, -5, 55, 37, 22 + }, + { + 64, + 80, + 21632, -17536, -97, 85, 57, + -20, -17, 31, -4, 59 + } +}; + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_words.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_words.cc new file mode 100644 index 00000000..ae3c3459 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_words.cc @@ -0,0 +1,1573 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// LPC10 encoded words extracted from various TI ROMs. + +#include "plaits/dsp/speech/lpc_speech_synth_words.h" + +namespace plaits { + +/* extern */ +const uint8_t bank_0[] = { + // red + 0x30, 0x4a, 0x57, 0xd8, 0x23, 0x2c, 0xc9, 0xa9, + 0x62, 0xa1, 0x88, 0xb2, 0x36, 0xa7, 0xca, 0x95, + 0xc3, 0xc3, 0x66, 0x9f, 0xb2, 0x64, 0x09, 0x4f, + 0x9b, 0x7d, 0x8a, 0x52, 0x24, 0x35, 0xb3, 0xec, + 0xc9, 0x6b, 0x92, 0xb2, 0xe8, 0xb0, 0x27, 0xcf, + 0x41, 0x2a, 0x63, 0xcc, 0x9e, 0x22, 0x3b, 0x8d, + 0xf2, 0x0e, 0x7b, 0xca, 0x1c, 0x34, 0xca, 0xda, + 0xec, 0x29, 0xb3, 0xb7, 0x28, 0x6b, 0xb3, 0xa7, + 0xce, 0xc1, 0xbc, 0xb2, 0xad, 0x9e, 0x2e, 0x05, + 0xcd, 0x8c, 0x96, 0x7a, 0xfa, 0xe4, 0xcd, 0x3b, + 0xd3, 0xcc, 0xe9, 0x8b, 0x76, 0xab, 0xa8, 0xd2, + 0x67, 0xac, 0x5e, 0xdc, 0x63, 0xe2, 0x9c, 0xa9, + 0x45, 0x71, 0xd3, 0x8e, 0x72, 0xa6, 0xee, 0x44, + 0x43, 0x6a, 0x2a, 0xc0, 0x98, 0x07, 0x0b, 0xb5, + 0xb0, 0x38, 0x6d, 0xae, 0x5a, 0x38, 0x7d, 0x8a, + 0x00, 0x00, 0xfc, + // orange + 0xa3, 0x0d, 0xa3, 0x9a, 0x39, 0x23, 0x9f, 0xcc, + 0xd7, 0x0d, 0x57, 0x8b, 0x73, 0x92, 0x50, 0x2e, + 0x8d, 0xad, 0xc9, 0x89, 0x43, 0x99, 0x74, 0x8c, + 0xba, 0x23, 0xf6, 0xc3, 0xd3, 0xc8, 0x1b, 0x8d, + 0xc4, 0x4f, 0xb7, 0x64, 0x9d, 0x3c, 0x92, 0x30, + 0x92, 0x4b, 0x69, 0xf2, 0xc8, 0xc2, 0x54, 0x69, + 0x91, 0x39, 0xab, 0x08, 0xc3, 0xa9, 0x8c, 0xeb, + 0x8e, 0x3a, 0x4e, 0xaa, 0xc2, 0x2c, 0xd3, 0xda, + 0x38, 0xb0, 0x92, 0xb3, 0xe8, 0xe8, 0x63, 0xa3, + 0x0a, 0x8d, 0x30, 0xa3, 0x4f, 0x85, 0xda, 0x3d, + 0x83, 0xac, 0x21, 0x67, 0x6a, 0xb3, 0x0a, 0xb3, + 0x86, 0x92, 0xb0, 0xdc, 0x33, 0xcc, 0x18, 0xb3, + 0xa3, 0x8c, 0xd6, 0xc0, 0x6b, 0x2c, 0x01, 0xd3, + 0x3a, 0x2d, 0x8d, 0x29, 0x4b, 0x4a, 0x5d, 0xb5, + 0x5c, 0x66, 0xcb, 0x6d, 0xd9, 0x2c, 0x49, 0x99, + 0x8d, 0xb4, 0xd1, 0x34, 0x36, 0x69, 0xe1, 0xc6, + 0x2a, 0xd2, 0x91, 0xa4, 0x95, 0x1b, 0xcf, 0xce, + 0x82, 0xdb, 0xd6, 0x28, 0x39, 0xbc, 0xc5, 0xb1, + 0x03, 0x02, 0xe5, 0x48, 0xc0, 0x0c, 0x42, 0x0e, + 0x18, 0xa7, 0x4b, 0x01, 0x73, 0xa7, 0x01, 0x00, + 0xfc, + // yellow + 0xa9, 0xda, 0x94, 0xdc, 0x32, 0xe4, 0xb6, 0xaa, + 0x03, 0xf2, 0xe8, 0xb2, 0x3b, 0x8a, 0x01, 0xb8, + 0xb2, 0xc7, 0xea, 0xca, 0x33, 0x36, 0xef, 0x0e, + 0x31, 0x27, 0x2f, 0x92, 0x3d, 0x3b, 0xa5, 0x9c, + 0xac, 0x78, 0xca, 0xae, 0xb0, 0x7c, 0xb2, 0x1a, + 0x39, 0x23, 0xd3, 0xca, 0xc9, 0x4a, 0x96, 0x28, + 0x6b, 0x2b, 0x27, 0xcb, 0x59, 0x33, 0xac, 0xc2, + 0x9c, 0x3c, 0x57, 0x2b, 0xb3, 0xb6, 0x72, 0xf2, + 0xd4, 0x2c, 0xdd, 0x2a, 0xcc, 0xca, 0x63, 0x4e, + 0x37, 0x8d, 0x28, 0xad, 0x08, 0x3e, 0x9a, 0xa4, + 0x23, 0x8f, 0x3a, 0xd4, 0x0a, 0xe6, 0xae, 0xdc, + 0x6a, 0x5f, 0xcb, 0x59, 0x3a, 0xca, 0x68, 0x43, + 0x19, 0x55, 0xa9, 0xb2, 0xa3, 0x0b, 0x3d, 0xd5, + 0x3c, 0xa3, 0xae, 0x2e, 0x94, 0x51, 0xf3, 0x8a, + 0xb2, 0xfa, 0x58, 0xd3, 0xdc, 0x2a, 0xec, 0xe9, + 0x53, 0x8a, 0x92, 0x68, 0x2b, 0x67, 0x48, 0x29, + 0x53, 0xbd, 0xc2, 0x9c, 0x21, 0x87, 0x4a, 0xd3, + 0x18, 0x73, 0xc6, 0x1c, 0xb2, 0x5c, 0x7d, 0xcc, + 0x19, 0xb3, 0xaf, 0x72, 0x93, 0x31, 0x6b, 0xcc, + 0x3e, 0xda, 0x55, 0xa6, 0xac, 0x29, 0xbb, 0x2a, + 0x33, 0xae, 0x3c, 0xa6, 0xe4, 0x2b, 0x4d, 0xa5, + 0x72, 0x9b, 0x63, 0xee, 0x14, 0xb1, 0xca, 0x61, + 0x8d, 0xb5, 0x9d, 0x58, 0x2a, 0x9b, 0x29, 0x84, + 0x0a, 0x64, 0xae, 0xa2, 0xa6, 0xe8, 0xda, 0xd0, + 0xc9, 0x0a, 0x00, 0xc0, 0xff, + // green + 0x80, 0x1a, 0xf0, 0xd7, 0x88, 0x25, 0x8d, 0x68, + 0x40, 0x37, 0x9f, 0x4a, 0x4b, 0xa5, 0xce, 0x37, + 0xdd, 0xd5, 0x62, 0xaf, 0xb2, 0x94, 0x74, 0x17, + 0xb6, 0x3d, 0x6a, 0x1f, 0xdc, 0xc2, 0x23, 0x4e, + 0x2b, 0x4d, 0xe5, 0xcc, 0x08, 0x27, 0xa5, 0xb0, + 0x05, 0xab, 0xcd, 0x63, 0xb7, 0xc2, 0x47, 0x8a, + 0x71, 0x2f, 0xb2, 0x0a, 0xef, 0xd4, 0xb6, 0x38, + 0xf4, 0x2a, 0x92, 0x21, 0xdf, 0xb4, 0xc0, 0xa7, + 0xc8, 0x9a, 0x6c, 0x5b, 0x43, 0x9f, 0x22, 0x6b, + 0xb2, 0x19, 0x0b, 0x7d, 0xea, 0xaa, 0x48, 0x7b, + 0xdc, 0xf4, 0xe9, 0xaa, 0x22, 0xeb, 0x36, 0x2b, + 0x67, 0x68, 0x86, 0x34, 0xdb, 0xac, 0x9c, 0xa1, + 0x1b, 0x92, 0x6c, 0x8b, 0x73, 0x86, 0x61, 0x98, + 0xb3, 0x3d, 0xce, 0x19, 0xba, 0x25, 0x8d, 0x8c, + 0x28, 0x67, 0xea, 0x9e, 0x2c, 0x3c, 0xe3, 0x8c, + 0xa9, 0x7a, 0x92, 0xd4, 0x2c, 0x33, 0xa6, 0xe2, + 0xd0, 0x5c, 0x3b, 0xea, 0x98, 0x6b, 0x40, 0x57, + 0x1b, 0x3b, 0x6b, 0xae, 0x91, 0x4c, 0xb4, 0x93, + 0xb6, 0x29, 0x19, 0x0a, 0x8f, 0x56, 0x92, 0xca, + 0xa0, 0xc5, 0xad, 0x3c, 0x76, 0xf0, 0x9b, 0x56, + 0x47, 0xb7, 0x35, 0x00, 0x00, 0xff, + // blue + 0xa2, 0x81, 0x39, 0xd2, 0x2c, 0xa3, 0xa8, 0x12, + 0x14, 0x2f, 0xf5, 0xb4, 0xa2, 0x4a, 0xd2, 0x39, + 0x3d, 0xcd, 0x71, 0xcb, 0xbb, 0x4e, 0x17, 0xb5, + 0x26, 0x2b, 0x8b, 0x2a, 0xd3, 0xc2, 0xcb, 0xac, + 0x3a, 0xe8, 0x4d, 0x53, 0xab, 0xda, 0x2a, 0xaf, + 0xde, 0xd1, 0xa3, 0x72, 0x29, 0x9d, 0xfc, 0x20, + 0xf7, 0x3a, 0xa5, 0x70, 0x62, 0x4b, 0x5d, 0xe3, + 0x94, 0x5c, 0x9b, 0x09, 0x53, 0xaf, 0x33, 0x72, + 0xa7, 0x3a, 0xc4, 0xa3, 0xce, 0x28, 0x8c, 0xdb, + 0x70, 0xc9, 0xd2, 0xa3, 0x50, 0x61, 0x3a, 0x39, + 0x2a, 0xaf, 0x5a, 0xfb, 0xae, 0xd2, 0x2a, 0x7c, + 0x5a, 0xe7, 0xc2, 0x23, 0xbb, 0xd2, 0xe9, 0x92, + 0x72, 0x77, 0xcf, 0x45, 0xa7, 0xcf, 0xca, 0x4d, + 0xc3, 0x57, 0x9e, 0x3e, 0x49, 0x0b, 0x0f, 0x5b, + 0x78, 0x86, 0xa4, 0x2d, 0xdc, 0xec, 0xf6, 0x1a, + 0xa2, 0xf6, 0x70, 0xb5, 0xdb, 0x6d, 0x08, 0x3e, + 0x5d, 0xd9, 0x6e, 0xb7, 0x31, 0xa4, 0x54, 0x56, + 0xaf, 0x13, 0x46, 0xef, 0xd2, 0x4c, 0xb5, 0xb6, + 0x99, 0xa2, 0x0b, 0x55, 0xe5, 0x70, 0x66, 0x8e, + 0xc9, 0x82, 0x49, 0xa3, 0xb2, 0x49, 0x07, 0x4d, + 0x61, 0xb7, 0x0b, 0x00, 0xf0, + // indigo + 0xae, 0xa8, 0x86, 0xbc, 0x33, 0x94, 0x9e, 0x62, + 0x04, 0x43, 0x8b, 0xae, 0x7b, 0x8a, 0xa6, 0x48, + 0x63, 0xda, 0xca, 0xc9, 0x47, 0x74, 0x62, 0xef, + 0x26, 0x27, 0xef, 0x8a, 0xd5, 0xbb, 0x2d, 0x8f, + 0x2c, 0x49, 0x72, 0xef, 0xb2, 0x3d, 0x92, 0x20, + 0x39, 0xb3, 0xd2, 0x76, 0x4b, 0x9c, 0x92, 0xf2, + 0x4d, 0x86, 0x25, 0x51, 0x56, 0xc6, 0x57, 0x6c, + 0xa5, 0x8c, 0x26, 0x1f, 0x2b, 0x72, 0x14, 0x32, + 0x12, 0xa2, 0xd3, 0x9d, 0xce, 0xca, 0x87, 0x4d, + 0x15, 0x6d, 0xab, 0xa7, 0xa8, 0x86, 0xcd, 0x6a, + 0x6c, 0x9f, 0x2a, 0x1b, 0xb6, 0xae, 0xb6, 0x72, + 0xaa, 0x62, 0xd8, 0xb2, 0xdb, 0xce, 0x69, 0xab, + 0x65, 0xa9, 0x9c, 0x28, 0xad, 0xcf, 0x9a, 0x22, + 0xbd, 0x95, 0xa8, 0x91, 0x29, 0xeb, 0xc9, 0x90, + 0x4c, 0x00, 0x6c, 0xa9, 0x03, 0x90, 0x03, 0xf9, + 0xca, 0x8b, 0x13, 0xce, 0xec, 0x2a, 0x67, 0x28, + 0x4a, 0xad, 0x3d, 0x8b, 0x9c, 0x21, 0x5b, 0xb7, + 0xf0, 0xae, 0x72, 0x86, 0xe8, 0x2c, 0x23, 0x26, + 0xca, 0x19, 0x83, 0x2f, 0x0f, 0xef, 0xd2, 0x67, + 0x8c, 0x21, 0x3d, 0xbc, 0xaa, 0x9c, 0x31, 0xa4, + 0x54, 0x8f, 0xaa, 0x72, 0xc6, 0x10, 0x46, 0xdd, + 0x73, 0xd2, 0x19, 0x83, 0x5f, 0x35, 0xcf, 0xca, + 0x67, 0x4c, 0x31, 0x8a, 0xa5, 0x5a, 0x9d, 0x29, + 0xc6, 0x2c, 0xd6, 0x6c, 0x39, 0xa6, 0x98, 0x33, + 0x49, 0x6b, 0xe5, 0x98, 0x42, 0xaa, 0x44, 0x8d, + 0x56, 0x63, 0x0a, 0xb9, 0x02, 0x35, 0x5b, 0x8e, + 0xc5, 0xd5, 0x74, 0xd6, 0x6e, 0xa4, 0x96, 0xe4, + 0xc3, 0xcd, 0x3c, 0x09, 0x00, 0xfc, + // violet + 0xa9, 0x11, 0x36, 0xb3, 0x5c, 0x23, 0xa6, 0x2e, + 0x48, 0x73, 0x55, 0x4b, 0x5a, 0x9a, 0xa4, 0x5d, + 0x4d, 0xd9, 0xc9, 0x68, 0xaa, 0x32, 0x77, 0x27, + 0x2b, 0xab, 0xae, 0x32, 0x22, 0x1c, 0x1d, 0x9f, + 0x32, 0xd9, 0x88, 0x14, 0xa9, 0x73, 0xca, 0x18, + 0xcb, 0x43, 0x6d, 0xea, 0xa9, 0xe2, 0x28, 0x0d, + 0xcd, 0x2a, 0xa7, 0x8a, 0x3b, 0xb8, 0x22, 0x43, + 0x9f, 0x3c, 0xf6, 0xd2, 0xd2, 0x1c, 0x7d, 0xf2, + 0xd8, 0xd2, 0x4b, 0xaa, 0xf4, 0xc9, 0x53, 0x1e, + 0xa9, 0xb4, 0x4a, 0x27, 0x4f, 0x2d, 0x74, 0xd2, + 0x23, 0x9f, 0x3c, 0xd5, 0xd0, 0xf1, 0x0c, 0x73, + 0xca, 0x9c, 0x2c, 0xca, 0x26, 0xcc, 0xa9, 0x4a, + 0x74, 0x2b, 0x9b, 0x2a, 0xa7, 0xc9, 0xd1, 0x3c, + 0x7d, 0xad, 0x9c, 0x2e, 0x9b, 0xd2, 0xb4, 0x2a, + 0x7d, 0xfa, 0x24, 0x47, 0xc3, 0xa3, 0xca, 0xe9, + 0x33, 0x1f, 0x57, 0xb5, 0x39, 0x6b, 0x88, 0xba, + 0xdc, 0xb8, 0xea, 0x9c, 0x21, 0xe9, 0x54, 0xd7, + 0xae, 0x72, 0x86, 0xa4, 0x53, 0x43, 0xbb, 0xca, + 0x19, 0x8a, 0xd2, 0x28, 0xe9, 0x2a, 0x67, 0x2c, + 0xd6, 0xcc, 0x6d, 0xaa, 0x9e, 0x39, 0x6b, 0xd7, + 0xb0, 0x1a, 0x72, 0xd6, 0x64, 0xdc, 0xc2, 0x6b, + 0x6c, 0x1a, 0xa2, 0x57, 0xb5, 0x98, 0xa2, 0xa6, + 0x51, 0xcd, 0xc3, 0x35, 0xac, 0x08, 0x20, 0x11, + 0x4d, 0x06, 0x34, 0x2e, 0xc6, 0x80, 0x2c, 0xdc, + 0x08, 0x90, 0x94, 0x39, 0x00, 0xc0, 0xff +}; + +/* extern */ +const uint8_t bank_1[] = { + // zero + 0x69, 0xfc, 0x59, 0xdd, 0x51, 0xd5, 0xd7, 0xa1, + 0x8f, 0x0a, 0x78, 0xc0, 0x52, 0x01, 0x0f, 0x50, + 0xac, 0xfc, 0xa8, 0x16, 0x15, 0xf2, 0x7b, 0xb2, + 0x19, 0x47, 0xd0, 0x64, 0xeb, 0x4d, 0x77, 0xba, + 0xb3, 0x91, 0x97, 0x24, 0x6e, 0x62, 0x6d, 0x5b, + 0x15, 0x0a, 0xa7, 0xb9, 0xc5, 0xab, 0xd5, 0xaa, + 0x63, 0xf0, 0xf0, 0xe2, 0x6c, 0xb3, 0x19, 0x5d, + 0x52, 0x1d, 0x19, 0x94, 0x6f, 0x76, 0x7d, 0xe8, + 0x43, 0x19, 0x83, 0xdc, 0x48, 0xc7, 0x2e, 0x71, + 0x8c, 0x93, 0x9f, 0xe0, 0xff, + // one + 0xa6, 0x4e, 0xa8, 0x7a, 0x8d, 0xed, 0xc4, 0xb6, + 0xd5, 0x89, 0xd4, 0xbc, 0xa2, 0xdb, 0x91, 0x25, + 0xbe, 0x33, 0x4c, 0xd9, 0x4f, 0x92, 0x4d, 0x57, + 0x8a, 0x76, 0xbe, 0xf1, 0x89, 0xaa, 0x2e, 0x4f, + 0xd5, 0xcd, 0x37, 0xd9, 0x45, 0x6b, 0x87, 0x13, + 0x4c, 0x0d, 0xa7, 0xb5, 0xab, 0x7d, 0x1e, 0xe3, + 0x18, 0x67, 0x3f, 0xa7, 0xa5, 0xf9, 0xd0, 0x30, + 0x5b, 0x1d, 0x96, 0x9a, 0x34, 0x44, 0xbc, 0xb6, + 0x5d, 0xe0, 0xff, + // two + 0x06, 0xb8, 0x59, 0x34, 0x00, 0x27, 0xd6, 0x38, + 0x60, 0x58, 0xd3, 0x11, 0x55, 0x2d, 0xaa, 0x65, + 0x9d, 0x4f, 0xd2, 0xb8, 0x39, 0x17, 0x67, 0xbf, + 0xc9, 0xce, 0x5a, 0x1e, 0xb5, 0x7a, 0x06, 0xf6, + 0xa9, 0x75, 0xed, 0x52, 0x6f, 0x55, 0xa5, 0x26, + 0x75, 0xc9, 0x93, 0x9f, 0xfc, 0x6c, 0x16, 0x63, + 0x3a, 0x34, 0x70, 0xaf, 0x5e, 0xe1, 0xff, + // three + 0x0c, 0xe8, 0x2e, 0x94, 0x01, 0x4d, 0xba, 0x4a, + 0x40, 0x03, 0x16, 0x68, 0x41, 0x36, 0x1c, 0xe9, + 0xba, 0xb8, 0x45, 0x39, 0x70, 0x72, 0x84, 0xdb, + 0x11, 0xa7, 0xa8, 0x4e, 0xa3, 0xc9, 0x77, 0xbc, + 0x92, 0xd6, 0x52, 0xa8, 0x71, 0xed, 0x4a, 0x7a, + 0x4b, 0xa6, 0xe0, 0x37, 0x37, 0x5d, 0xe5, 0x48, + 0x8e, 0x94, 0xf1, 0x64, 0x76, 0xad, 0x1f, 0x55, + 0x91, 0xbc, 0x6e, 0xd7, 0xb1, 0xce, 0x75, 0xad, + 0x5b, 0xda, 0xc7, 0x70, 0x22, 0xcd, 0xc7, 0x79, + 0x8f, 0x3b, 0xfc, + // four + 0x08, 0x68, 0x21, 0x0d, 0x03, 0x1c, 0x90, 0xc0, + 0x70, 0x93, 0xb2, 0x29, 0x87, 0x76, 0x2b, 0x28, + 0x5c, 0x7b, 0x06, 0xd9, 0xed, 0x60, 0x04, 0x51, + 0x54, 0x4d, 0xa2, 0xba, 0x19, 0xb5, 0x2c, 0xf8, + 0xea, 0x74, 0xca, 0xd3, 0xeb, 0xde, 0x97, 0x29, + 0xa4, 0xd4, 0x4e, 0xc9, 0x5f, 0xa7, 0xb2, 0xa5, + 0x9c, 0x1c, 0x63, 0xde, 0xf2, 0x91, 0xce, 0x34, + 0x84, 0x27, 0x2d, 0x4b, 0xb8, 0x52, 0x09, 0x9c, + 0x0e, 0xb7, 0xee, 0xcc, 0x5b, 0x70, 0xdd, 0xb2, + 0xc0, 0xff, + // five + 0x08, 0x68, 0x4e, 0x9d, 0x02, 0x1c, 0x60, 0xc0, + 0x8c, 0x69, 0x12, 0xb0, 0xc0, 0x88, 0xaa, 0x8c, + 0x9c, 0xc0, 0x2d, 0x3b, 0x3a, 0x41, 0x31, 0x15, + 0xa3, 0xb6, 0xe4, 0x46, 0x37, 0xda, 0xc9, 0xce, + 0x56, 0xde, 0x54, 0x5b, 0x85, 0xbe, 0xd9, 0xd5, + 0x6c, 0x47, 0xdf, 0x6d, 0xb1, 0xa5, 0xbf, 0x99, + 0x7d, 0x1b, 0x5b, 0x30, 0x09, 0xaf, 0x2f, 0x6d, + 0xea, 0x31, 0xc4, 0x5c, 0xbe, 0xd6, 0x29, 0x2d, + 0xad, 0x88, 0x87, 0xe2, 0xd2, 0xb2, 0xf6, 0xe0, + 0x16, 0x2a, 0xb2, 0xe3, 0x6a, 0x57, 0xb9, 0xf2, + 0x15, 0xfe, + // six + 0x04, 0xf8, 0xb9, 0x55, 0x01, 0xbf, 0xa5, 0x1b, + 0xe0, 0x37, 0x0f, 0x03, 0xfc, 0x96, 0x61, 0x80, + 0xdf, 0x3c, 0x0c, 0xf0, 0x93, 0xda, 0xea, 0x86, + 0x49, 0x53, 0x91, 0x37, 0xab, 0x6b, 0xd2, 0x55, + 0x23, 0xde, 0xac, 0xb9, 0xb9, 0x16, 0x09, 0xff, + 0xb2, 0xf6, 0x66, 0x93, 0x3c, 0x63, 0xf3, 0xbc, + 0x11, 0x3e, 0x45, 0xa9, 0x0a, 0xd5, 0x00, 0x00, + 0x02, 0x14, 0x97, 0xaa, 0x80, 0xab, 0x6b, 0x0d, + 0xf0, 0x63, 0xa5, 0x01, 0x7e, 0xcb, 0x30, 0xc0, + 0x6f, 0xe9, 0x0a, 0xf8, 0x25, 0x93, 0x01, 0x3f, + 0x57, 0xc0, 0xff, + // seven + 0x0c, 0x78, 0xc6, 0x95, 0x01, 0x3f, 0xa5, 0x28, + 0xe0, 0xb7, 0x52, 0x0b, 0x04, 0xe0, 0xb7, 0x54, + 0x07, 0xfc, 0x52, 0x66, 0x80, 0x9f, 0xcb, 0x56, + 0x5d, 0x6c, 0x98, 0x47, 0x3e, 0x59, 0x5d, 0x89, + 0x69, 0x66, 0xb9, 0x7a, 0x74, 0x39, 0x86, 0x9b, + 0xd9, 0xa6, 0x34, 0xe4, 0x10, 0xae, 0xca, 0xad, + 0xc7, 0x90, 0x5d, 0x9a, 0xa9, 0xae, 0x1a, 0x6d, + 0xb1, 0xa5, 0x66, 0xf9, 0xb2, 0xb4, 0x4d, 0x63, + 0xb6, 0x84, 0x9a, 0x52, 0x77, 0x45, 0x11, 0x1a, + 0xaa, 0x4b, 0x35, 0x0c, 0x79, 0x4a, 0xb0, 0x49, + 0xd5, 0x50, 0xa2, 0x41, 0xa1, 0xc9, 0xe5, 0xd9, + 0xab, 0x89, 0x56, 0x04, 0xf8, + // eight + 0x6d, 0x18, 0xde, 0x58, 0x23, 0x17, 0xaf, 0x61, + 0xe8, 0x20, 0xeb, 0x5c, 0xbc, 0xba, 0x61, 0x03, + 0xad, 0x73, 0xf6, 0x6a, 0x66, 0x4a, 0xd0, 0xcc, + 0xd9, 0xab, 0x1b, 0x45, 0xc1, 0xa3, 0x66, 0xaf, + 0x69, 0x36, 0x03, 0x8b, 0x5a, 0x9c, 0xd6, 0x51, + 0x04, 0xa2, 0x66, 0x96, 0x7b, 0xba, 0x47, 0xec, + 0xed, 0x8a, 0x08, 0x9a, 0xa2, 0x54, 0x85, 0x6a, + 0x00, 0x80, 0x02, 0x86, 0x74, 0x63, 0xc0, 0xe6, + 0x6a, 0xf0, + // nine + 0xa2, 0x73, 0xdc, 0x33, 0xb5, 0x62, 0xb9, 0x36, + 0x0b, 0x8e, 0x34, 0x8f, 0xd3, 0xea, 0xae, 0x59, + 0xd2, 0x34, 0xe9, 0xa8, 0x86, 0x27, 0xc9, 0xd0, + 0x78, 0x2b, 0x6f, 0xce, 0xc2, 0x45, 0x1b, 0xaf, + 0xb4, 0xf8, 0x51, 0x73, 0x9d, 0xb3, 0xd2, 0x12, + 0xc7, 0x2c, 0x6d, 0xc9, 0x4a, 0x72, 0x4b, 0xf3, + 0x88, 0x26, 0x2b, 0xc9, 0x2d, 0xcc, 0x23, 0xea, + 0xac, 0x34, 0xb7, 0xd0, 0x88, 0x98, 0xb3, 0xf2, + 0x5c, 0x43, 0x32, 0x7d, 0xce, 0x2a, 0x4b, 0x0a, + 0xcd, 0xf4, 0x39, 0xab, 0xae, 0x3e, 0x24, 0xcb, + 0x67, 0xaf, 0xae, 0xd9, 0xe4, 0x18, 0x5f, 0xb4, + 0x86, 0x6e, 0x92, 0x62, 0x7d, 0xd1, 0x18, 0xbb, + 0x09, 0xf2, 0x8d, 0x59, 0x6d, 0xec, 0x3a, 0xd8, + 0x27, 0x16, 0xa6, 0xa5, 0x7b, 0xf2, 0x74, 0x4f, + 0x92, 0xd6, 0x1e, 0xc8, 0x4a, 0xc3, 0x49, 0x5a, + 0x9b, 0x25, 0x2b, 0xf5, 0x24, 0x69, 0xe9, 0xd1, + 0x24, 0x25, 0x27, 0xba, 0xa5, 0x25, 0x51, 0xd3, + 0xaa, 0x24, 0xe6, 0x5e, 0x54, 0x55, 0x3a, 0x14, + 0xfc, + // ten + 0x0a, 0xd8, 0x5c, 0x4d, 0x03, 0x2b, 0xa8, 0x5e, + 0xc4, 0x33, 0x2b, 0xaf, 0x78, 0x84, 0x12, 0x0d, + 0x7b, 0xb3, 0xe2, 0x66, 0x43, 0xa2, 0xe3, 0xf6, + 0x4a, 0xaa, 0x4e, 0xc9, 0x89, 0xdb, 0x2b, 0x6b, + 0xba, 0xc5, 0xdb, 0x66, 0xaf, 0xb6, 0xe8, 0xe6, + 0x4c, 0xbf, 0x3d, 0xda, 0x6a, 0xc4, 0x4b, 0xca, + 0x49, 0x19, 0xba, 0x61, 0x2b, 0x09, 0x25, 0x6d, + 0xea, 0x5a, 0xb4, 0xc4, 0xed, 0xa6, 0x65, 0x18, + 0xe1, 0x56, 0xb7, 0x9a, 0x96, 0xa6, 0x44, 0x47, + 0xdc, 0x6e, 0x5e, 0xc2, 0xda, 0xa5, 0xf0, 0xb8, + 0xd9, 0x85, 0xff +}; + +/* extern */ +const uint8_t bank_2[] = { + // a + 0xa5, 0x2f, 0x96, 0xad, 0x7b, 0x6a, 0x9f, 0x6a, + 0xe4, 0x20, 0x8d, 0x9c, 0x73, 0xf3, 0x9b, 0xdd, + 0xec, 0xe6, 0x37, 0xbf, 0xe5, 0xaa, 0x66, 0x28, + 0xa0, 0xce, 0xd5, 0xbb, 0xd9, 0xed, 0xee, 0x66, + 0x3f, 0x87, 0x36, 0xce, 0x9c, 0x80, 0x51, 0x8b, + 0xeb, 0x54, 0xe7, 0xbc, 0xc2, 0xff, + // b + 0xa6, 0x2a, 0xaa, 0x05, 0x5c, 0xd6, 0x8c, 0xb8, + 0xc7, 0x16, 0x70, 0x59, 0x33, 0xa2, 0x95, 0x0b, + 0xc1, 0xfd, 0xcd, 0x8c, 0x66, 0x38, 0xe3, 0x91, + 0xad, 0x98, 0x00, 0x55, 0x8b, 0x67, 0xd1, 0xdb, + 0xde, 0xd5, 0xa9, 0xce, 0x75, 0x2e, 0xeb, 0x2c, + 0x4d, 0x60, 0xbe, 0x26, 0xef, 0xf1, 0x88, 0x27, + 0xfc, + // c + 0x04, 0xf8, 0xa5, 0x83, 0x03, 0x12, 0xb0, 0x80, + 0x07, 0x22, 0xb0, 0x9c, 0xee, 0x8d, 0x45, 0x7d, + 0xc9, 0x8a, 0x66, 0x29, 0x42, 0xf5, 0x35, 0x3b, + 0xda, 0xd1, 0x88, 0x67, 0x0d, 0x40, 0xcf, 0xd7, + 0x33, 0x19, 0xf9, 0xac, 0x06, 0x14, 0xb5, 0x68, + 0xd6, 0xbd, 0xeb, 0x7d, 0x1f, 0xd3, 0x32, 0x5b, + 0x02, 0x44, 0xbd, 0xce, 0x6b, 0x5e, 0xf3, 0x96, + 0xb6, 0x55, 0x0a, 0xc1, 0x73, 0x4d, 0xde, 0xf3, + 0x0e, 0xff, + // d + 0x08, 0x20, 0xba, 0x0d, 0x03, 0x6d, 0x38, 0x2c, + 0x55, 0x45, 0xb3, 0x8c, 0xba, 0x05, 0x65, 0xd5, + 0x78, 0x32, 0xaa, 0xee, 0x85, 0x34, 0xf2, 0xf6, + 0xa8, 0x87, 0x33, 0xe0, 0xca, 0xc7, 0xad, 0x9e, + 0xce, 0x81, 0xbb, 0x66, 0xb7, 0x76, 0x06, 0x07, + 0xee, 0x9c, 0xd5, 0xba, 0xa9, 0x1d, 0x65, 0x72, + 0x11, 0xfc, + // e + 0xa2, 0x5a, 0x95, 0x51, 0xba, 0x17, 0xf7, 0x62, + 0xe5, 0xab, 0x38, 0x42, 0xe4, 0x92, 0x9d, 0xef, + 0x6c, 0x65, 0x33, 0x3b, 0x50, 0xd6, 0x92, 0x9d, + 0xaf, 0x62, 0xc5, 0x04, 0xa8, 0x5a, 0xbc, 0xcb, + 0x5d, 0xed, 0x7a, 0x37, 0xbb, 0xdd, 0xc3, 0x1e, + 0xf6, 0x34, 0xa7, 0xbe, 0xf4, 0xa5, 0xad, 0xb3, + 0x34, 0x81, 0xf9, 0x1a, 0xf8, + // f + 0xab, 0x1a, 0x61, 0x94, 0xdd, 0xd6, 0xdc, 0xf6, + 0x54, 0xdd, 0x37, 0xb9, 0xe7, 0xea, 0x53, 0x35, + 0xb3, 0x1c, 0xe1, 0xaf, 0x6f, 0x75, 0xdb, 0x35, + 0xd4, 0xe0, 0x56, 0x9c, 0x77, 0xdb, 0x58, 0x9d, + 0xeb, 0x98, 0x8c, 0x61, 0xc0, 0x30, 0xe9, 0x1a, + 0xb0, 0x80, 0x05, 0x14, 0x30, 0x6d, 0xbb, 0x06, + 0x24, 0x20, 0x01, 0x0e, 0x10, 0xa0, 0x06, 0x35, + 0xf8, + // g + 0x6e, 0x3e, 0x29, 0x8d, 0x98, 0x95, 0xcd, 0x39, + 0x00, 0xab, 0x38, 0x95, 0xf4, 0xd4, 0xeb, 0x34, + 0x81, 0x7a, 0xe2, 0x51, 0x53, 0x50, 0x75, 0xeb, + 0x8e, 0x76, 0xb4, 0xc3, 0x15, 0x8d, 0x92, 0x48, + 0x99, 0xab, 0x77, 0xbc, 0xd3, 0x5d, 0x8e, 0x76, + 0x96, 0x04, 0x8c, 0x5a, 0x3c, 0xfb, 0xd9, 0xf7, + 0xa9, 0x4e, 0x75, 0x2b, 0xdb, 0x2a, 0x85, 0xe0, + 0xb9, 0x26, 0x1e, 0xf1, 0x80, 0xff, + // h + 0xa5, 0x1d, 0x6d, 0x90, 0x2d, 0xd6, 0xec, 0xf2, + 0xe6, 0x37, 0xbb, 0xe9, 0x2e, 0x46, 0x3b, 0xa3, + 0x01, 0x6d, 0x2d, 0xce, 0xa3, 0x5d, 0xdd, 0xdc, + 0x3c, 0x61, 0x76, 0xc5, 0x25, 0xb3, 0x08, 0xe5, + 0x2e, 0x22, 0x1b, 0x00, 0x80, 0x01, 0x2b, 0x87, + 0x38, 0x60, 0xe5, 0xed, 0x08, 0x58, 0xc0, 0x02, + 0x16, 0xb0, 0x80, 0x06, 0x34, 0x40, 0x80, 0x76, + 0xd3, 0xe0, 0xff, + // i + 0x2a, 0x8b, 0x63, 0xa8, 0xaa, 0x66, 0xad, 0xb6, + 0xa8, 0xcb, 0x08, 0xdd, 0x7c, 0x8b, 0x9b, 0xde, + 0xf4, 0x66, 0x37, 0x3b, 0x59, 0xb5, 0xa3, 0x15, + 0xba, 0xf8, 0xe6, 0xbb, 0xd8, 0xcd, 0x6e, 0x57, + 0xdf, 0x5c, 0x49, 0xa5, 0x2d, 0xde, 0x63, 0x1b, + 0x6b, 0x76, 0x29, 0xaf, 0xc7, 0x6d, 0xec, 0x31, + 0xd8, 0x5c, 0x1e, 0xf7, 0xb1, 0x4e, 0x75, 0x4a, + 0xf3, 0x28, 0x89, 0xe2, 0xf2, 0x38, 0x2f, 0x79, + 0x85, 0xff, + // j + 0xae, 0x5e, 0xc1, 0x99, 0x54, 0xb2, 0x09, 0x60, + 0x49, 0x22, 0x07, 0xec, 0xa8, 0x16, 0x80, 0x5d, + 0x26, 0x47, 0xd5, 0xa3, 0x92, 0x78, 0x74, 0x3e, + 0x71, 0x2f, 0x21, 0x6a, 0xb1, 0xfa, 0xc6, 0x37, + 0xbe, 0xf1, 0x4d, 0x6f, 0x7a, 0xf3, 0x5d, 0x8d, + 0x7e, 0xb4, 0x22, 0x36, 0x7f, 0x53, 0xe7, 0xbe, + 0xb4, 0x6d, 0x96, 0x61, 0x34, 0xdb, 0x52, 0xb7, + 0xb4, 0x8f, 0xdc, 0x88, 0xe1, 0x5f, 0xf2, 0x9a, + 0x57, 0xf8, + // k + 0x01, 0x18, 0x91, 0xb9, 0x00, 0x4d, 0x91, 0x46, + 0x60, 0x05, 0x2d, 0xb3, 0xb8, 0x67, 0xed, 0x13, + 0xf7, 0x14, 0x64, 0x11, 0x4b, 0x6e, 0x7c, 0xe3, + 0x1b, 0xdf, 0xf8, 0x14, 0xc3, 0x05, 0x6a, 0xe7, + 0xea, 0x5d, 0xef, 0x7a, 0xf7, 0x6d, 0x1a, 0xb1, + 0x00, 0x2b, 0xdf, 0xf4, 0xa9, 0x4d, 0xb3, 0x24, + 0x60, 0xd4, 0xe2, 0xba, 0xe6, 0x35, 0x6f, 0x69, + 0x1b, 0x43, 0x48, 0xa3, 0xeb, 0xe4, 0x0d, 0xfe, + // l + 0xab, 0x6c, 0x2e, 0xd8, 0x2a, 0x37, 0xdf, 0xe2, + 0x16, 0xa7, 0xa8, 0x21, 0xbc, 0xc4, 0x17, 0xdf, + 0xe2, 0x16, 0xa7, 0xcc, 0x6a, 0xc3, 0x4d, 0x3a, + 0xdf, 0x72, 0xd5, 0x95, 0x6c, 0xa6, 0x71, 0x9e, + 0xd1, 0x35, 0x98, 0x53, 0x49, 0x5e, 0x7b, 0x57, + 0xc6, 0x0a, 0x7a, 0x43, 0xd9, 0x4f, 0x1c, 0xc3, + 0x54, 0xe0, 0xf4, 0x08, 0xf9, 0x09, 0x53, 0x03, + 0x31, 0x19, 0xa2, 0x25, 0x4e, 0xf0, + // m + 0x29, 0xea, 0xc5, 0xd8, 0x73, 0x16, 0xcf, 0xe8, + 0x56, 0x37, 0xbf, 0xd9, 0x49, 0xbb, 0x6f, 0xf1, + 0xf0, 0xd5, 0x37, 0xbd, 0xd9, 0xce, 0x47, 0x55, + 0x63, 0x72, 0x98, 0x58, 0xee, 0x6d, 0xef, 0xdb, + 0xd0, 0x62, 0x72, 0x98, 0x58, 0xae, 0x63, 0x1d, + 0xd3, 0x58, 0x45, 0x72, 0x93, 0xd8, 0x8d, 0x93, + 0x9d, 0xec, 0x64, 0xe7, 0x30, 0x97, 0x58, 0xe1, + 0xa2, 0x4d, 0xe2, 0x12, 0x57, 0xf8, + // n + 0x81, 0xed, 0xd1, 0xc8, 0xb3, 0x16, 0xef, 0xe2, + 0x64, 0xc3, 0x35, 0x59, 0xc4, 0xe3, 0x9b, 0xde, + 0xf4, 0xa6, 0x3b, 0x5f, 0xf9, 0x92, 0xcd, 0x91, + 0xb4, 0x78, 0xb7, 0xa3, 0x1f, 0x9e, 0x38, 0x2c, + 0x9c, 0xce, 0xbe, 0x0f, 0x75, 0x0e, 0xf3, 0xb0, + 0xc2, 0x61, 0x1e, 0x35, 0xce, 0x71, 0x89, 0x6b, + 0xdc, 0xd2, 0xd6, 0x4d, 0x49, 0xb8, 0xce, 0x0e, + 0xdb, 0x34, 0xad, 0x16, 0xbc, 0x19, 0xfe, + // o + 0xa3, 0x68, 0xb4, 0xba, 0x8d, 0xbc, 0xad, 0xbc, + 0x92, 0xec, 0x0e, 0xf2, 0xb6, 0xd3, 0x1d, 0x8f, + 0xb8, 0xe0, 0xee, 0x16, 0xf6, 0x3f, 0x93, 0x59, + 0xcf, 0xa6, 0x0c, 0x91, 0xe5, 0x0c, 0x8b, 0xbf, + 0x30, 0x39, 0xd3, 0x1d, 0x28, 0x59, 0xe2, 0xe2, + 0x17, 0xbb, 0xfa, 0x1d, 0xfe, + // p + 0x02, 0x88, 0x26, 0xd4, 0x00, 0x6d, 0x96, 0xb5, + 0xb8, 0x25, 0x05, 0x89, 0x6c, 0x3d, 0x92, 0xe6, + 0x51, 0xb3, 0xa6, 0xf4, 0x48, 0x66, 0x09, 0xa0, + 0x8c, 0xc7, 0x33, 0x9d, 0x79, 0xcb, 0x67, 0x0e, + 0x80, 0xca, 0xd7, 0xbd, 0x6c, 0xe5, 0x72, 0x06, + 0xb4, 0xb5, 0xba, 0x37, 0xbd, 0xab, 0x53, 0x5d, + 0xf2, 0x9e, 0xf7, 0x78, 0xc0, 0xff, + // q + 0x0e, 0x98, 0xd5, 0x28, 0x02, 0x11, 0x18, 0xc9, + 0xcc, 0x46, 0x98, 0xf1, 0x66, 0x27, 0x27, 0x19, + 0x21, 0x99, 0x92, 0xb6, 0xdc, 0x6c, 0xe7, 0xab, + 0x28, 0xd2, 0x2d, 0x13, 0x3b, 0xef, 0xb2, 0xb5, + 0xce, 0x94, 0x47, 0xd0, 0xee, 0xda, 0xc7, 0x31, + 0xcf, 0x61, 0x31, 0x31, 0xa2, 0x50, 0xb6, 0xf8, + 0xd5, 0xef, 0xf0, + // r + 0x2b, 0xce, 0x72, 0x33, 0x93, 0xbb, 0xdc, 0xf2, + 0x16, 0x37, 0xbf, 0xd9, 0x28, 0x52, 0x5c, 0xa9, + 0xa6, 0x4d, 0xb3, 0x6c, 0x5d, 0x0a, 0xcb, 0x71, + 0xd8, 0xbb, 0x0f, 0x7d, 0x2a, 0x73, 0xb6, 0xc7, + 0xf4, 0x94, 0x37, 0x2d, 0xa9, 0x34, 0xf8, 0x53, + 0x97, 0xb8, 0xc2, 0xff, + // s + 0xab, 0x6f, 0xd9, 0x34, 0x6c, 0xe6, 0xdc, 0xe2, + 0x16, 0x37, 0xbf, 0xf9, 0x69, 0xaa, 0x0f, 0x2d, + 0xda, 0x25, 0x7b, 0x18, 0x53, 0x4d, 0x9a, 0xa2, + 0xe7, 0xb8, 0x2d, 0x23, 0xa5, 0x26, 0x71, 0x2a, + 0x03, 0xfc, 0x94, 0xe6, 0x01, 0x0f, 0x68, 0x40, + 0x03, 0x12, 0xe0, 0x00, 0x07, 0x30, 0x00, 0xff, + // t + 0x01, 0xd8, 0xb6, 0xdd, 0x01, 0x2f, 0xf4, 0x38, + 0x60, 0xd5, 0xd1, 0x91, 0x4c, 0x97, 0x84, 0xe6, + 0x4b, 0x4e, 0x32, 0xb2, 0x10, 0x67, 0xcd, 0x19, + 0xc9, 0x2c, 0x01, 0x94, 0xf1, 0x78, 0x26, 0x33, + 0xe9, 0x69, 0x2f, 0x7b, 0x53, 0xbb, 0x36, 0xae, + 0x52, 0x08, 0x9e, 0x6b, 0xea, 0x5c, 0x97, 0xba, + 0x95, 0x7d, 0x45, 0x47, 0xac, 0x5a, 0x9c, 0x0f, + 0xf8, + // u + 0xa1, 0x99, 0x9c, 0x94, 0x72, 0x26, 0x8d, 0x6a, + 0x07, 0x55, 0x90, 0x78, 0x3c, 0x8b, 0x99, 0x9f, + 0xac, 0x87, 0x60, 0x76, 0xda, 0x72, 0xb3, 0x93, + 0x35, 0xa5, 0x64, 0x2d, 0x7b, 0x6e, 0xbe, 0x9a, + 0x24, 0xdc, 0x32, 0xb1, 0x73, 0xef, 0xfa, 0x10, + 0x46, 0xab, 0xc6, 0xca, 0xe0, 0xb5, 0x5f, 0xcc, + 0xaa, 0xd4, 0x78, 0x1b, 0xb6, 0x53, 0xbb, 0x74, + 0xa7, 0x21, 0xbc, 0x04, 0xfe, + // v + 0x66, 0xf0, 0xd2, 0x38, 0x43, 0xb3, 0xd8, 0x21, + 0xf4, 0x4d, 0xbb, 0x70, 0xb0, 0xdb, 0xd0, 0x0f, + 0x17, 0x2c, 0x26, 0xae, 0x53, 0x37, 0x6c, 0xbb, + 0x32, 0xab, 0x19, 0x75, 0xf7, 0x21, 0x6c, 0x9c, + 0xe5, 0x64, 0x33, 0xb6, 0x80, 0xcb, 0x9a, 0x1b, + 0xae, 0x60, 0xe5, 0x42, 0x70, 0x7f, 0xb3, 0x83, + 0xed, 0xef, 0x70, 0x25, 0x2b, 0x26, 0x40, 0xd5, + 0xe2, 0x99, 0xf7, 0xba, 0xb7, 0x75, 0xa8, 0x63, + 0x9d, 0xca, 0x32, 0x4b, 0x13, 0x98, 0xaf, 0xa9, + 0x4b, 0xde, 0xf3, 0x91, 0x8e, 0x19, 0x0b, 0x31, + 0xf3, 0x0d, 0xfc, + // w + 0x21, 0xdb, 0xc2, 0x44, 0xc2, 0xfc, 0x9c, 0x64, + 0x88, 0x70, 0x09, 0x59, 0x7b, 0xe2, 0xca, 0x3b, + 0x3d, 0xa4, 0xcf, 0x0d, 0x56, 0x90, 0xc4, 0xa6, + 0xbb, 0xf4, 0x6e, 0x41, 0xe2, 0x9d, 0xea, 0xe2, + 0x4a, 0x65, 0x12, 0x65, 0xbb, 0xb3, 0xeb, 0x91, + 0x55, 0x12, 0x99, 0xc1, 0xd9, 0x6e, 0xb1, 0x9b, + 0xd1, 0x36, 0x92, 0x6a, 0xc9, 0x9b, 0x47, 0x3b, + 0x4c, 0x12, 0x46, 0x6c, 0x99, 0x5d, 0xef, 0x5b, + 0xdf, 0x92, 0x92, 0x64, 0x6c, 0xee, 0x43, 0x19, + 0x6b, 0x22, 0x71, 0x8f, 0xcf, 0x65, 0x29, 0x41, + 0xd4, 0xdd, 0x36, 0xa5, 0x2d, 0x19, 0xf5, 0x0c, + 0xee, 0x13, 0xb7, 0x7c, 0x98, 0xc3, 0x85, 0xc8, + 0x62, 0xee, 0x6d, 0x4f, 0xf8, + // x + 0xad, 0x69, 0xc9, 0xc5, 0x32, 0x56, 0xdf, 0xfe, + 0x74, 0x2d, 0x35, 0x7b, 0xf8, 0xea, 0xdb, 0xdd, + 0xe1, 0x6c, 0x6d, 0x04, 0xa6, 0xc5, 0xea, 0xb9, + 0x87, 0xa3, 0x75, 0x23, 0x37, 0x4f, 0x83, 0x60, + 0x11, 0xca, 0x5d, 0x44, 0x36, 0x00, 0x28, 0xa0, + 0xe6, 0x31, 0x0f, 0x68, 0xc0, 0x00, 0xbf, 0x8d, + 0x79, 0xc0, 0x03, 0x16, 0xd0, 0x00, 0x07, 0xe0, + 0xff, + // y + 0xaa, 0xb3, 0xa2, 0xa7, 0x95, 0xd2, 0xd8, 0x2e, + 0x57, 0x23, 0x2f, 0xb2, 0x7a, 0x1c, 0xb3, 0xde, + 0xec, 0xa4, 0x45, 0x6d, 0x56, 0xca, 0x9a, 0x9b, + 0xde, 0xf4, 0xe6, 0xbb, 0xd8, 0xc5, 0xaa, 0x8a, + 0x6f, 0x2b, 0xf3, 0x37, 0xbb, 0x1b, 0x5d, 0xd3, + 0x25, 0x39, 0xfa, 0xb9, 0x0f, 0x6d, 0xe8, 0x31, + 0xc4, 0x5c, 0x1e, 0xf7, 0xa1, 0x4f, 0x65, 0x1e, + 0xa5, 0x48, 0x5c, 0x1e, 0xd7, 0x25, 0x2f, 0x79, + 0x81, 0xff, + // z + 0xad, 0xfb, 0xc6, 0x5c, 0x95, 0xd5, 0xf5, 0xce, + 0x02, 0xbb, 0x5b, 0xf9, 0x51, 0x2d, 0x2a, 0xe4, + 0x77, 0xe5, 0xa3, 0x3a, 0xb1, 0xfa, 0x9b, 0x9d, + 0xec, 0x78, 0xc5, 0x33, 0x27, 0x60, 0xd4, 0xe2, + 0x99, 0xce, 0x74, 0xd6, 0xb3, 0x9b, 0x43, 0x9f, + 0xfa, 0x54, 0xe6, 0x55, 0x0a, 0xc1, 0x73, 0x4d, + 0x9d, 0xeb, 0x92, 0xd6, 0x15, 0x12, 0xa0, 0x6b, + 0x75, 0x5e, 0xe1, 0xff +}; + +/* extern */ +const uint8_t bank_3[] = { + // alpha + 0x63, 0xac, 0x21, 0xb4, 0x3c, 0x16, 0xaf, 0xb2, + 0x84, 0xd2, 0x0a, 0x5f, 0xb3, 0xf2, 0xe2, 0xda, + 0x32, 0xf4, 0xcd, 0xca, 0x92, 0xdf, 0x28, 0xd7, + 0x27, 0x2b, 0xcd, 0xe2, 0x5b, 0x93, 0x57, 0xaf, + 0xac, 0xd0, 0x1b, 0x0b, 0xee, 0xb2, 0xb2, 0x24, + 0xae, 0xc3, 0x28, 0x4b, 0x29, 0x0a, 0xaf, 0x0e, + 0x13, 0x47, 0x02, 0xa8, 0xa6, 0x4c, 0x00, 0x4d, + 0x57, 0x08, 0xa0, 0x99, 0x0c, 0x01, 0x74, 0xed, + 0xb1, 0x8a, 0x22, 0xba, 0xd4, 0xa9, 0xcd, 0x2a, + 0x2a, 0xef, 0xd6, 0xe0, 0xbd, 0x6b, 0x6c, 0xac, + 0x5a, 0x83, 0xf7, 0xae, 0xad, 0xb1, 0x6a, 0x0b, + 0xde, 0x32, 0x96, 0xa2, 0x3a, 0xc2, 0x79, 0x73, + 0xdd, 0xf3, 0x01, 0xff, + // bravo + 0x02, 0x10, 0x2c, 0x34, 0x94, 0x46, 0xaf, 0xc8, + 0x8a, 0xbd, 0x54, 0x84, 0xa9, 0xe6, 0x2d, 0xfc, + 0x46, 0x1e, 0x7b, 0x48, 0x87, 0x2a, 0x5f, 0x59, + 0x76, 0x13, 0xe9, 0xba, 0x7a, 0xa7, 0x3b, 0x9d, + 0x59, 0x29, 0xa3, 0xab, 0x48, 0xd7, 0xd5, 0xb1, + 0x0e, 0x6d, 0xf7, 0xa1, 0xe6, 0x2a, 0x3b, 0xb6, + 0xa5, 0x0d, 0xa9, 0x52, 0x55, 0x56, 0x8d, 0xb2, + 0x92, 0x6a, 0x77, 0xf1, 0xbb, 0xda, 0x86, 0xb2, + 0x3a, 0x44, 0xfd, 0xec, 0xdb, 0x50, 0x48, 0xd7, + 0x38, 0xb9, 0xef, 0x73, 0x9d, 0xc3, 0xec, 0x7d, + 0x67, 0xb0, 0xf4, 0x89, 0x6b, 0xdc, 0xe0, 0xff, + // charlie + 0x06, 0xd8, 0x2d, 0x2c, 0x01, 0x33, 0xb7, 0x67, + 0xa0, 0xb9, 0xc5, 0x8d, 0xc8, 0xb2, 0xb7, 0x16, + 0x16, 0xbf, 0x26, 0x87, 0xf9, 0x5a, 0x94, 0xf3, + 0xb0, 0x1f, 0x75, 0x19, 0x51, 0xce, 0xcd, 0x71, + 0xd4, 0x65, 0xc4, 0x39, 0x8e, 0xda, 0x71, 0xb6, + 0x91, 0xc7, 0x30, 0xe9, 0x6e, 0x69, 0x4b, 0x5b, + 0x51, 0x8f, 0x15, 0x66, 0x49, 0xe3, 0x80, 0x31, + 0xa2, 0xe6, 0x7d, 0xcd, 0x55, 0xb6, 0x59, 0xd8, + 0xea, 0xb1, 0x0e, 0xde, 0xca, 0xe5, 0x9b, 0xc7, + 0xd6, 0x65, 0x92, 0x55, 0x6c, 0x2e, 0xfb, 0x30, + 0x49, 0x92, 0xb1, 0x3a, 0xed, 0xc3, 0x04, 0x72, + 0xe7, 0xe6, 0x70, 0x74, 0xeb, 0xa8, 0x93, 0xab, + 0xe1, 0xff, + // delta + 0x0a, 0x28, 0x30, 0x6c, 0x8d, 0xc3, 0xa7, 0xaa, + 0x70, 0xd7, 0x55, 0x76, 0x5d, 0x22, 0xee, 0x5b, + 0x57, 0xd6, 0xf9, 0xb8, 0xa6, 0x6d, 0x59, 0x59, + 0x16, 0x9b, 0xa1, 0xde, 0x7b, 0x15, 0x99, 0x6d, + 0xa5, 0x58, 0xde, 0x55, 0x64, 0x11, 0x5d, 0xc2, + 0x69, 0x4a, 0x3b, 0x25, 0x5b, 0x85, 0x32, 0x21, + 0x40, 0x96, 0x26, 0x0e, 0x58, 0x4a, 0x33, 0x00, + 0x4b, 0xb5, 0xad, 0xaa, 0x9a, 0xf0, 0x30, 0xdf, + 0xb2, 0xbb, 0xd1, 0x37, 0x55, 0xe9, 0x21, 0x5d, + 0x7b, 0x3f, 0x96, 0xaa, 0xc6, 0x3c, 0xa5, 0x73, + 0x5f, 0xe1, 0xff, + // echo + 0x2b, 0x6e, 0xb1, 0xd9, 0xd3, 0x36, 0xdf, 0xf2, + 0x16, 0x37, 0x27, 0xa9, 0x08, 0xe5, 0x2e, 0x22, + 0x1b, 0x20, 0x00, 0x25, 0xac, 0x2a, 0x20, 0xcf, + 0xd3, 0x92, 0x45, 0x53, 0x6a, 0xa9, 0x9e, 0x4f, + 0x99, 0x54, 0x47, 0xb9, 0xe4, 0xdf, 0xed, 0x6c, + 0x47, 0x9b, 0x45, 0x65, 0xbb, 0x78, 0x9f, 0xc3, + 0x1c, 0xd2, 0xe8, 0x43, 0x67, 0xb0, 0xe5, 0xcd, + 0x73, 0x58, 0x9d, 0xad, 0x2c, 0x15, 0x37, 0x71, + 0x85, 0xff, + // foxtrot + 0x04, 0x18, 0xb6, 0x82, 0x00, 0xd3, 0x57, 0x08, + 0x60, 0xba, 0xf4, 0x91, 0xc7, 0x58, 0x15, 0xca, + 0x8b, 0x47, 0x9e, 0xfc, 0x64, 0x1a, 0xaf, 0x19, + 0x45, 0x4a, 0x9d, 0xa1, 0xfa, 0x64, 0x14, 0xa9, + 0x65, 0x86, 0xe4, 0xe2, 0x51, 0xa5, 0xee, 0x99, + 0x92, 0xab, 0x04, 0xe0, 0xa2, 0x93, 0x04, 0x08, + 0x90, 0x9d, 0x33, 0x03, 0x9e, 0x71, 0x65, 0xc0, + 0x4f, 0x29, 0x0a, 0xf8, 0xad, 0xd4, 0x02, 0x08, + 0x9e, 0xa2, 0x54, 0x85, 0x6a, 0x80, 0x00, 0x86, + 0x21, 0x57, 0xc0, 0x48, 0x53, 0x01, 0x18, 0x36, + 0xbc, 0x15, 0xa9, 0x4b, 0xaa, 0x4b, 0x9b, 0xd6, + 0xc7, 0xee, 0x11, 0x41, 0x6b, 0xdb, 0x9a, 0xec, + 0x94, 0x36, 0xed, 0x6d, 0x5b, 0x76, 0x93, 0x9e, + 0xfc, 0xa5, 0x5d, 0xd9, 0x4d, 0x58, 0xea, 0x9a, + 0x7e, 0xb5, 0x37, 0xc5, 0x76, 0x4f, 0x7f, 0x14, + 0xfe, 0xd8, 0xcd, 0x2b, 0x7a, 0xb2, 0xfa, 0x9b, + 0xf2, 0x88, 0xf0, 0xae, 0x08, 0x16, 0xa1, 0xdc, + 0x45, 0x64, 0x03, 0x80, 0x00, 0x8e, 0xe0, 0x30, + 0xc0, 0xb2, 0x53, 0xf0, + // golf + 0x0a, 0x88, 0xa1, 0x71, 0x65, 0x85, 0x76, 0x45, + 0x8a, 0xff, 0x9b, 0xde, 0x78, 0xc5, 0x99, 0x5c, + 0xb7, 0x72, 0xde, 0x1d, 0xef, 0x7c, 0xd7, 0xb3, + 0x6f, 0x63, 0x54, 0x35, 0x63, 0xe4, 0xa6, 0xae, + 0x79, 0x33, 0x47, 0x94, 0x39, 0x63, 0xe4, 0x86, + 0x1f, 0x04, 0x98, 0x34, 0xdd, 0x02, 0x0e, 0x98, + 0x32, 0x5d, 0x03, 0x12, 0xe0, 0x00, 0xfc, + // hotel + 0x08, 0xc8, 0x4a, 0x0c, 0x01, 0xc5, 0x74, 0x11, + 0xa0, 0xca, 0xea, 0xd1, 0x35, 0x5a, 0xdd, 0x46, + 0xde, 0x56, 0x5d, 0x49, 0x76, 0x07, 0x79, 0xdb, + 0xd5, 0xa8, 0x0a, 0xee, 0x6e, 0x61, 0xff, 0xbd, + 0xaa, 0x2d, 0x82, 0x44, 0x70, 0x17, 0x11, 0xd9, + 0x00, 0x02, 0xe8, 0x54, 0x2d, 0x00, 0xd5, 0x84, + 0x05, 0x60, 0x2a, 0xb3, 0x93, 0x37, 0x67, 0x66, + 0x9c, 0x6b, 0x4e, 0x5e, 0xbd, 0x9b, 0x6a, 0xdd, + 0x39, 0x79, 0xf1, 0xae, 0x6e, 0xbd, 0xf8, 0x54, + 0xc5, 0xa7, 0x85, 0xe5, 0xe2, 0x53, 0x17, 0xd5, + 0x9e, 0x2e, 0x9f, 0xcf, 0x58, 0xe4, 0xa6, 0x07, + 0xbf, 0x59, 0x5b, 0xc5, 0x33, 0x19, 0xd8, 0xa5, + 0x9c, 0x89, 0xce, 0x94, 0x61, 0x9b, 0x74, 0x79, + 0xdd, 0x13, 0xc4, 0x4b, 0xfc, 0xe5, 0x2e, 0xa7, + 0xae, 0x0a, 0xa5, 0x0d, 0xfc, + // india + 0xa3, 0x98, 0xd6, 0x99, 0x32, 0x17, 0x8f, 0x7c, + 0x86, 0x16, 0x74, 0x5f, 0xb3, 0xf2, 0xe1, 0x4a, + 0xc4, 0xf4, 0xce, 0x4e, 0x47, 0xdc, 0x1d, 0x5a, + 0x46, 0x3a, 0x99, 0x71, 0x8b, 0xab, 0x82, 0xac, + 0x08, 0x27, 0x3e, 0x5d, 0xe5, 0x0c, 0x25, 0x42, + 0xbc, 0x7b, 0x55, 0xd3, 0x17, 0x61, 0xf8, 0x96, + 0x5d, 0xed, 0x7a, 0xf4, 0xcd, 0x8a, 0x44, 0xc6, + 0xe3, 0x31, 0x55, 0x1b, 0x62, 0x69, 0xaf, 0xc7, + 0x92, 0x9c, 0x7b, 0x66, 0x2c, 0x6e, 0x5b, 0xf6, + 0x69, 0x11, 0xf6, 0xaa, 0x1c, 0x29, 0xa4, 0x87, + 0xdb, 0xe7, 0x74, 0xe6, 0x14, 0x1e, 0x1a, 0xab, + 0xdd, 0x95, 0x62, 0x7a, 0x68, 0xac, 0x82, 0xff, + // juliet + 0x61, 0x5d, 0x96, 0x49, 0x34, 0xd2, 0x06, 0x60, + 0xc7, 0x90, 0x0c, 0x8c, 0x66, 0xf6, 0x15, 0x22, + 0x4d, 0x37, 0xaa, 0x6a, 0xc8, 0x2c, 0x6d, 0xcd, + 0x28, 0xb2, 0x15, 0x8b, 0xe4, 0x35, 0xb3, 0x68, + 0x79, 0x51, 0xe6, 0xda, 0x9c, 0xbe, 0x15, 0x43, + 0x89, 0xf0, 0xa2, 0xdb, 0x95, 0x77, 0xa7, 0xa6, + 0x66, 0x49, 0x77, 0xb1, 0x9a, 0x9e, 0x0a, 0xd5, + 0x75, 0xeb, 0xee, 0xf6, 0xb0, 0xc6, 0xe6, 0x83, + 0xd2, 0xe3, 0xeb, 0x5e, 0xd7, 0xda, 0x5c, 0x48, + 0x87, 0x6d, 0x9e, 0x7b, 0xdf, 0xf3, 0x89, 0x40, + 0x11, 0xca, 0x5d, 0x44, 0x36, 0x00, 0x38, 0x60, + 0xea, 0x8c, 0x00, 0x2c, 0xb3, 0x6d, 0x01, 0x01, + 0x14, 0x5f, 0x8e, 0x01, 0xf8, + // kilo + 0x06, 0xe8, 0x12, 0xd9, 0x02, 0x12, 0x68, 0xee, + 0x8c, 0x86, 0xd4, 0xf5, 0x76, 0x7a, 0xd3, 0x1d, + 0xee, 0x74, 0x4a, 0x54, 0x1e, 0x6f, 0xfa, 0x2b, + 0x5c, 0xdc, 0x42, 0x93, 0xb2, 0xed, 0x66, 0xb5, + 0x95, 0x7b, 0x8e, 0x53, 0xdf, 0x3d, 0xac, 0xa1, + 0xb0, 0xcc, 0x2a, 0xee, 0xbb, 0xa7, 0xb6, 0x24, + 0x53, 0xd9, 0x4a, 0x7d, 0xfb, 0x52, 0x36, 0x1f, + 0x2b, 0x1b, 0x75, 0x4d, 0xdc, 0xe2, 0x1e, 0x8e, + 0xa0, 0xa6, 0x32, 0xc8, 0xaf, 0xbb, 0x92, 0x18, + 0xaf, 0x20, 0x7d, 0xf0, + // lima + 0xa1, 0x5f, 0x90, 0xba, 0xc0, 0xd7, 0xa6, 0x7e, + 0x00, 0x19, 0x85, 0x6a, 0xda, 0xca, 0xcd, 0x24, + 0xd9, 0xcc, 0xcb, 0x4a, 0x47, 0x76, 0x66, 0xf5, + 0x37, 0x3b, 0x9e, 0xe1, 0x88, 0x7a, 0x50, 0xd4, + 0x8e, 0xd9, 0x3d, 0xad, 0x45, 0x2b, 0xb3, 0x62, + 0xee, 0xf4, 0xb8, 0xb5, 0xac, 0xf5, 0xa8, 0x1b, + 0xaf, 0xcc, 0xa2, 0xce, 0xbb, 0xdd, 0xcb, 0xd8, + 0xb2, 0xda, 0xc8, 0xd0, 0x55, 0xfd, 0xac, 0x57, + 0xbd, 0xe0, 0xff, + // mike + 0x66, 0x31, 0x3c, 0x7c, 0x52, 0xe3, 0xc4, 0x69, + 0xf5, 0x85, 0x57, 0x86, 0x51, 0xaa, 0xd3, 0x56, + 0x75, 0xa1, 0x69, 0x9d, 0x6f, 0x7d, 0xca, 0x6a, + 0x57, 0x23, 0x6d, 0xf5, 0xcd, 0x57, 0xd1, 0x4b, + 0x50, 0x78, 0x2c, 0xda, 0x75, 0x69, 0x46, 0x77, + 0xb4, 0xce, 0xdb, 0xb1, 0x45, 0xad, 0x08, 0xe5, + 0x2e, 0x22, 0x1b, 0x00, 0x18, 0xd0, 0x3c, 0x91, + 0x03, 0x5a, 0x09, 0xb1, 0x80, 0x00, 0xb2, 0x13, + 0x86, 0xff, + // november + 0x66, 0x2c, 0x02, 0x62, 0x4b, 0xe3, 0x8e, 0xa1, + 0xeb, 0x10, 0x77, 0x6e, 0xb3, 0xb2, 0x2a, 0x2a, + 0x39, 0x74, 0xcb, 0x4a, 0x0b, 0xcb, 0xb2, 0xe4, + 0xae, 0x2b, 0x4d, 0xbc, 0xdb, 0x9c, 0xfa, 0xb6, + 0x2c, 0x8a, 0x29, 0x33, 0xee, 0x93, 0xf2, 0xa0, + 0xa6, 0xc4, 0xb9, 0x55, 0xa8, 0x92, 0xa8, 0x54, + 0xa7, 0xc4, 0xae, 0x1d, 0x32, 0xcc, 0x54, 0x2d, + 0xb7, 0xb1, 0xa9, 0x72, 0x53, 0x51, 0xbc, 0xb2, + 0xe2, 0x53, 0x2c, 0xb4, 0xf5, 0x4a, 0x8b, 0x2b, + 0xb5, 0xd2, 0xd5, 0x2b, 0x2d, 0xa6, 0xd4, 0xda, + 0x5a, 0xaf, 0x34, 0xfb, 0x32, 0x2b, 0x4b, 0xd3, + 0xd2, 0x14, 0xdc, 0xda, 0xc8, 0x4e, 0xc9, 0x52, + 0x24, 0x6b, 0x53, 0xb9, 0xaa, 0xf5, 0x51, 0xb5, + 0x42, 0xe9, 0x31, 0xc0, 0x9b, 0xb0, 0xd4, 0xa7, + 0xa6, 0xd4, 0x85, 0x6f, 0xca, 0x58, 0xc2, 0x0a, + 0x2e, 0xe6, 0x6b, 0x6b, 0x89, 0xc3, 0xb4, 0xd8, + 0x2f, 0x6d, 0x25, 0x0d, 0xd3, 0x52, 0xdf, 0x74, + 0x14, 0xdf, 0x44, 0x47, 0xfb, 0xd2, 0x51, 0x72, + 0xa2, 0x1e, 0x75, 0x09, 0x47, 0x89, 0x8d, 0x7c, + 0xb4, 0x07, 0xfe, + // oscar + 0xab, 0xcd, 0xe2, 0xb2, 0x42, 0x3a, 0xdf, 0xe2, + 0xa6, 0x27, 0x49, 0xae, 0x7d, 0xc4, 0x17, 0xb7, + 0x38, 0x45, 0xaf, 0xa4, 0xb6, 0x6d, 0x80, 0x03, + 0xd8, 0x0c, 0xf0, 0xa7, 0x9b, 0x07, 0x3c, 0xe0, + 0x80, 0xeb, 0xb5, 0x11, 0x38, 0x45, 0xa9, 0x0a, + 0xd5, 0x00, 0x02, 0x34, 0x75, 0x65, 0xe6, 0xa6, + 0xae, 0xa2, 0x34, 0x6e, 0xaa, 0x8b, 0x9b, 0x24, + 0x13, 0xa5, 0xad, 0xca, 0xa9, 0xc8, 0x86, 0xf3, + 0xce, 0x7a, 0x76, 0x6d, 0xcc, 0xcd, 0xb0, 0x5a, + 0x7a, 0xcf, 0xb9, 0x2e, 0x75, 0x4b, 0x47, 0x89, + 0x83, 0x3a, 0xa9, 0x37, 0xdf, 0xe1, 0x29, 0xad, + 0x48, 0x87, 0xb3, 0xc0, 0xff, + // papa + 0x0a, 0x28, 0x56, 0xb9, 0xe5, 0x45, 0x55, 0x84, + 0x49, 0xcc, 0x93, 0x67, 0xd7, 0x19, 0x26, 0x4b, + 0x4e, 0x91, 0xdd, 0x44, 0xba, 0xae, 0xbe, 0xc5, + 0x2c, 0x10, 0x24, 0x42, 0xb9, 0x8b, 0xc8, 0x06, + 0x60, 0x80, 0xf1, 0xe9, 0xab, 0xc9, 0xa6, 0x23, + 0xd4, 0x36, 0xdf, 0xe9, 0xcc, 0x55, 0x74, 0x86, + 0x6b, 0x9f, 0x71, 0x66, 0xbd, 0xe1, 0xe6, 0xbb, + 0xdb, 0x9f, 0x53, 0x45, 0x88, 0xcf, 0xae, 0x3f, + 0xfc, + // quebec + 0x0c, 0x88, 0x7e, 0x8c, 0x02, 0xa5, 0x0c, 0x31, + 0xdd, 0x5c, 0xb2, 0xac, 0x3a, 0x5b, 0xcf, 0x4c, + 0xee, 0xbb, 0xbb, 0xde, 0xa5, 0xcd, 0xa8, 0xb4, + 0x75, 0x4d, 0x1c, 0xb7, 0xd1, 0xd5, 0x28, 0xee, + 0xe6, 0x5b, 0x76, 0x73, 0xea, 0x1a, 0xc4, 0x33, + 0xf3, 0xf1, 0xad, 0x77, 0x37, 0xa7, 0xb6, 0xb6, + 0xec, 0x12, 0x91, 0x9b, 0xf2, 0x8e, 0x40, 0x11, + 0xca, 0x5d, 0x44, 0x36, 0x80, 0x00, 0x7a, 0x2f, + 0x53, 0x40, 0x2d, 0x24, 0x14, 0x80, 0xff, + // romeo + 0x22, 0xd7, 0x39, 0x38, 0xca, 0xec, 0xdb, 0xbe, + 0xb4, 0xa1, 0x98, 0x5a, 0xb9, 0xf2, 0x53, 0x46, + 0x6f, 0xe9, 0x69, 0xca, 0x4e, 0xd6, 0x89, 0x57, + 0x0e, 0x69, 0x3f, 0x71, 0x61, 0xd9, 0x95, 0x98, + 0x65, 0x87, 0x25, 0x6c, 0x86, 0x64, 0x4c, 0xac, + 0xf5, 0xf8, 0xa4, 0xcd, 0x86, 0x7a, 0xd0, 0xe6, + 0x55, 0x4f, 0xd7, 0x02, 0xa5, 0x7b, 0x76, 0xbd, + 0xdb, 0xdd, 0xaf, 0xa1, 0xaa, 0x54, 0x1d, 0xdb, + 0xb2, 0xa6, 0xec, 0xc3, 0xd3, 0x64, 0x73, 0x99, + 0x62, 0xc8, 0x2c, 0xd5, 0xdf, 0x69, 0x09, 0xa1, + 0x33, 0xd8, 0xf2, 0xe6, 0x25, 0xae, 0x6e, 0x0f, + 0xb6, 0xb2, 0x54, 0xdc, 0xf8, 0x1d, 0xfe, + // sierra + 0x0c, 0xf8, 0xad, 0x54, 0x03, 0x06, 0xf8, 0x2d, + 0xd5, 0x01, 0xbf, 0x94, 0x39, 0xe0, 0xe7, 0x32, + 0x0b, 0xb4, 0xb0, 0x3b, 0x25, 0x75, 0x5f, 0xbd, + 0xe2, 0x11, 0x0d, 0x39, 0x63, 0xf5, 0x48, 0x46, + 0x34, 0xe0, 0xea, 0x4d, 0x23, 0x1d, 0x49, 0x91, + 0xbb, 0x56, 0x8d, 0x6c, 0x78, 0x45, 0xd9, 0x7c, + 0xb2, 0xf2, 0xe1, 0x9c, 0x78, 0xe2, 0xf1, 0xc9, + 0x87, 0x09, 0x92, 0xb1, 0xd7, 0x27, 0x6b, 0x2e, + 0xd9, 0xc7, 0x5e, 0x9f, 0xac, 0x84, 0xe4, 0x1c, + 0x79, 0xbd, 0xd2, 0xd4, 0xc4, 0xb2, 0x79, 0xcd, + 0xc8, 0x52, 0x97, 0xf0, 0xa6, 0x3c, 0xa3, 0x4c, + 0x53, 0xc3, 0x9a, 0xf2, 0x8c, 0x26, 0x55, 0x0b, + 0x1d, 0xea, 0xb3, 0xa6, 0x14, 0x3d, 0x2d, 0x35, + 0xcf, 0x99, 0xb2, 0x1b, 0xf3, 0xd0, 0x3e, 0x6b, + 0x29, 0x7a, 0xdc, 0x53, 0x36, 0x8f, 0x35, 0xc5, + 0xd6, 0x70, 0x7f, 0xd5, 0xf6, 0x14, 0xdb, 0xc2, + 0x7c, 0x55, 0x39, 0x73, 0x4c, 0x2f, 0xf1, 0x97, + 0xe9, 0xca, 0x6a, 0xb5, 0xc2, 0x76, 0x96, 0x2b, + 0x87, 0xd2, 0xd2, 0x58, 0x09, 0xff, + // tango + 0x0e, 0xd8, 0x5c, 0xcd, 0x03, 0xcb, 0x2b, 0xd9, + 0xd4, 0x23, 0x2b, 0xad, 0xa8, 0x26, 0x57, 0x8f, + 0x58, 0xb2, 0xe2, 0x56, 0x5c, 0x2d, 0x63, 0xf6, + 0x8a, 0x5b, 0x36, 0xf5, 0xcc, 0x59, 0x2b, 0x6e, + 0x91, 0xb5, 0xdb, 0x42, 0xb7, 0xa4, 0x5a, 0xea, + 0x34, 0x57, 0x5d, 0xb2, 0x62, 0x68, 0x5c, 0x55, + 0xb5, 0x2b, 0xa2, 0xa2, 0x09, 0x13, 0xa7, 0xa5, + 0xad, 0x2a, 0x98, 0x53, 0x56, 0x8f, 0xbe, 0xb2, + 0x30, 0x19, 0xdd, 0xb3, 0xfa, 0x22, 0xcb, 0xa4, + 0xb4, 0xeb, 0xe8, 0xb2, 0xea, 0x90, 0x92, 0x2e, + 0x6d, 0x0a, 0xbe, 0xc3, 0x52, 0x3a, 0xa7, 0x35, + 0xc4, 0x0a, 0x4b, 0xd9, 0x5b, 0xf6, 0x50, 0x32, + 0x3c, 0xa4, 0x73, 0xb8, 0x43, 0x0b, 0x37, 0x93, + 0xd5, 0xe6, 0xf6, 0x35, 0xdd, 0x95, 0x7f, 0xab, + 0xdb, 0x87, 0xf2, 0x34, 0xde, 0x07, 0xff, + // uniform + 0xa1, 0x3f, 0x56, 0x98, 0xd4, 0xb6, 0xe6, 0xae, + 0xd5, 0xc7, 0xa8, 0x01, 0xc5, 0xda, 0x53, 0x2d, + 0x97, 0x06, 0x12, 0xd9, 0x4f, 0xdc, 0x6d, 0x30, + 0xa6, 0x65, 0xdf, 0x61, 0xf3, 0x8b, 0x11, 0xcf, + 0xe0, 0xae, 0xc9, 0xcf, 0x4e, 0x5d, 0x38, 0xea, + 0x75, 0xff, 0x04, 0x45, 0x47, 0x84, 0xca, 0xe6, + 0x1d, 0xf7, 0x8c, 0x01, 0xcd, 0x97, 0x6a, 0x40, + 0x03, 0x1a, 0x28, 0x45, 0xd0, 0xdb, 0x61, 0xec, + 0x7d, 0x17, 0xbb, 0x3e, 0x4d, 0x16, 0xdb, 0x9a, + 0xea, 0xf5, 0x76, 0xab, 0x2f, 0x6a, 0x43, 0x46, + 0xbc, 0xcd, 0xb9, 0x6d, 0xd9, 0xb5, 0xda, 0x70, + 0xdf, 0xb2, 0xe6, 0x94, 0xea, 0xcd, 0x9d, 0xdd, + 0x9a, 0xbc, 0x73, 0xa9, 0x28, 0x35, 0x5b, 0x12, + 0x41, 0xe1, 0x96, 0xd4, 0x6d, 0x4d, 0x24, 0xa7, + 0x8a, 0x94, 0xb8, 0xfb, 0x3d, 0x1c, 0xcd, 0x76, + 0x78, 0x50, 0xea, 0x78, 0xc0, 0xff, + // victor + 0xae, 0x6f, 0x52, 0x55, 0xcd, 0xdd, 0xa8, 0xb9, + 0x72, 0x55, 0x95, 0x70, 0xe3, 0xe6, 0xe9, 0xdd, + 0xd4, 0x84, 0x4e, 0x99, 0xa7, 0x4b, 0x0b, 0x65, + 0xa5, 0x2b, 0x6c, 0x2e, 0x4d, 0x42, 0xb6, 0xac, + 0xa8, 0xdb, 0x12, 0x49, 0x5d, 0xbd, 0xe2, 0x1e, + 0x02, 0x2d, 0x6c, 0x35, 0x30, 0xa0, 0x72, 0x46, + 0x04, 0x4e, 0x51, 0xaa, 0x42, 0x35, 0x00, 0x40, + 0x01, 0x33, 0x49, 0x3a, 0x60, 0x5a, 0xf1, 0xd2, + 0x95, 0x6c, 0x2c, 0x2d, 0x5d, 0x5a, 0x9f, 0x63, + 0x21, 0x9f, 0xe6, 0x2f, 0x73, 0x29, 0x4d, 0xbc, + 0x94, 0xaf, 0x2d, 0xa5, 0x34, 0xf1, 0x72, 0xb6, + 0xb4, 0x94, 0xba, 0x82, 0xc3, 0xfe, 0xcb, 0x5a, + 0x46, 0x93, 0x34, 0xe5, 0x2b, 0x5b, 0xe9, 0x85, + 0x5a, 0xe2, 0xc7, 0xed, 0xe5, 0x0a, 0xa7, 0x4b, + 0x27, 0xf8, + // whiskey + 0x04, 0x88, 0xae, 0x8c, 0x03, 0x12, 0x08, 0x5e, + 0x74, 0x65, 0xe9, 0xec, 0x68, 0x04, 0x59, 0x46, + 0x78, 0x41, 0xd7, 0xe3, 0x37, 0x6d, 0x62, 0xc3, + 0x5b, 0xaf, 0xdf, 0xc2, 0xea, 0x54, 0xd2, 0xe3, + 0x89, 0x01, 0x7e, 0x2b, 0xf7, 0x80, 0x07, 0x14, + 0xd0, 0xe5, 0x15, 0x38, 0x60, 0x8c, 0x70, 0x03, + 0x04, 0x29, 0x36, 0xaa, 0x5e, 0x14, 0x34, 0x72, + 0xf6, 0xa8, 0xa6, 0x6f, 0x82, 0xf4, 0x2d, 0xb3, + 0xeb, 0x4b, 0x5a, 0x67, 0x6a, 0xc0, 0xf0, 0x2f, + 0x71, 0x4f, 0xc7, 0xa8, 0x8a, 0x1c, 0xb9, 0xd8, + 0xdf, 0xee, 0x1e, 0xbb, 0x59, 0xd0, 0xd6, 0xc2, + 0xff, + // xray + 0x2b, 0xae, 0xde, 0xb4, 0x62, 0x66, 0x9f, 0xb0, + 0x75, 0x73, 0xd3, 0x6e, 0x72, 0xfc, 0x56, 0x54, + 0xcb, 0xba, 0xb6, 0x01, 0x92, 0xc7, 0x26, 0x40, + 0x4b, 0x43, 0x0c, 0xc8, 0x29, 0xc5, 0x01, 0xcf, + 0xb8, 0x1a, 0xe0, 0xa7, 0x14, 0x07, 0xfc, 0x56, + 0xea, 0x01, 0x05, 0x98, 0x60, 0x5a, 0x92, 0xd4, + 0x29, 0xb5, 0xb8, 0xeb, 0xc8, 0x52, 0x17, 0xb3, + 0x96, 0x6e, 0x23, 0x2f, 0x29, 0x54, 0x5b, 0xf6, + 0x8d, 0xae, 0xa9, 0x32, 0x5e, 0xdb, 0x37, 0xfa, + 0xa1, 0xdb, 0xb1, 0x74, 0xcb, 0x68, 0xbb, 0x49, + 0x91, 0xf6, 0xcd, 0x63, 0x1e, 0x3a, 0x85, 0x3a, + 0x56, 0xb7, 0x79, 0x98, 0x62, 0xea, 0xf8, 0xdc, + 0xf6, 0x9e, 0x83, 0xd4, 0xe3, 0x49, 0x38, 0x7a, + 0x71, 0x54, 0xaf, 0xd9, 0xe1, 0xe8, 0x53, 0x55, + 0xb8, 0xe7, 0xc2, 0xff, + // yankee + 0x6e, 0xe8, 0x42, 0x58, 0xb6, 0x6b, 0xa7, 0x61, + 0x68, 0x25, 0xcc, 0x59, 0xb4, 0x86, 0x11, 0x82, + 0xc8, 0x6a, 0xf1, 0x2a, 0x47, 0x2e, 0x12, 0x8d, + 0x37, 0x27, 0xef, 0xc9, 0xc9, 0xa3, 0x6e, 0x9f, + 0x6c, 0xd4, 0x22, 0x73, 0x7f, 0xb4, 0x92, 0x51, + 0x0b, 0x2d, 0x62, 0xe2, 0x48, 0x46, 0x43, 0xd7, + 0x2e, 0x29, 0x2e, 0x4b, 0x92, 0xaa, 0x28, 0x5c, + 0x8b, 0xa6, 0x6a, 0xeb, 0x24, 0x95, 0xe3, 0x80, + 0x1d, 0x93, 0x35, 0x90, 0xf2, 0x59, 0x03, 0x45, + 0xb3, 0x75, 0x29, 0x47, 0x27, 0x96, 0x98, 0xc5, + 0x65, 0x18, 0xcd, 0x88, 0xbc, 0x16, 0xd7, 0x21, + 0xad, 0x63, 0x10, 0x49, 0x6e, 0xed, 0xb8, 0xf9, + 0x1d, 0xfe, + // zulu + 0x6d, 0xf8, 0xde, 0xc4, 0xc4, 0xe8, 0x29, 0x60, + 0x00, 0x2e, 0x0f, 0x9c, 0x78, 0x29, 0x71, 0x2a, + 0x4e, 0x77, 0xc3, 0x15, 0x74, 0x2a, 0xae, 0xc3, + 0xce, 0x76, 0x30, 0xc2, 0xa5, 0x44, 0x78, 0xd1, + 0x6d, 0x4f, 0x46, 0x39, 0xb8, 0xbb, 0x07, 0xf6, + 0x5b, 0x6d, 0x91, 0x6e, 0xa9, 0xf2, 0x65, 0xf4, + 0xc9, 0x98, 0x97, 0x69, 0x9f, 0x3a, 0xe7, 0x2d, + 0x6c, 0xc1, 0x9a, 0x8f, 0xca, 0xde, 0x70, 0x04, + 0x9d, 0xee, 0xc9, 0x79, 0xe2, 0xe1, 0x1f, 0xf8 +}; + +/* extern */ +const uint8_t bank_4[] = { + // analog + 0xa7, 0xa8, 0x51, 0xc3, 0x3b, 0xa4, 0x9c, 0xbc, + 0x66, 0x73, 0x8f, 0xb2, 0x73, 0xf2, 0x1a, 0x35, + 0xbc, 0x52, 0xf6, 0x49, 0x6b, 0x32, 0xf3, 0x48, + 0xc9, 0x27, 0xa9, 0x5e, 0xd3, 0x3a, 0x64, 0x9f, + 0xa4, 0x78, 0x75, 0x8f, 0xb2, 0x72, 0xd2, 0x6c, + 0xa4, 0x35, 0x43, 0xce, 0xc8, 0x82, 0xd6, 0xd6, + 0x30, 0x27, 0x2d, 0xf3, 0x5a, 0x5b, 0x22, 0x92, + 0x8e, 0xdc, 0x1b, 0x6d, 0x33, 0x73, 0xb2, 0x0a, + 0x6f, 0x23, 0x4d, 0xcd, 0xf1, 0xa8, 0x7c, 0x8d, + 0x20, 0xcb, 0xd4, 0xa3, 0xf6, 0x35, 0x9d, 0x25, + 0x13, 0xb7, 0xda, 0xc6, 0x35, 0x96, 0x98, 0xda, + 0x3a, 0x67, 0xce, 0x59, 0x7c, 0xce, 0xe8, 0x6c, + 0x58, 0x67, 0xae, 0x2a, 0xa7, 0x8b, 0x6e, 0x53, + 0x39, 0xa3, 0x9d, 0x3e, 0xba, 0x4d, 0xa5, 0x1a, + 0x7d, 0xfa, 0x18, 0x36, 0x94, 0xab, 0xca, 0xe9, + 0x93, 0xbb, 0x50, 0xce, 0x51, 0x67, 0x48, 0xe1, + 0xc2, 0x38, 0xc7, 0x9c, 0x21, 0xf9, 0x0b, 0x15, + 0x9f, 0x7c, 0xc6, 0x58, 0x56, 0xcd, 0x7c, 0xf2, + 0x19, 0x93, 0xbb, 0x30, 0xd3, 0xd9, 0x67, 0x2c, + 0x66, 0x32, 0x54, 0xe6, 0x9c, 0xb9, 0xa8, 0x8a, + 0x52, 0x99, 0x7d, 0xd6, 0x22, 0x53, 0x8b, 0x65, + 0x4e, 0xd9, 0xa2, 0x35, 0x4b, 0xa8, 0xb9, 0x6a, + 0x83, 0xc9, 0x4f, 0xd4, 0xed, 0x98, 0x0d, 0xa6, + 0x9a, 0x64, 0x89, 0xac, 0x00, 0x27, 0x78, 0x08, + 0x20, 0x04, 0x1d, 0x00, 0xc0, 0xff, + // circuit + 0x0c, 0x98, 0xb2, 0x4d, 0x00, 0x47, 0x85, 0x0b, + 0xe0, 0xe8, 0x0c, 0x03, 0xbc, 0x90, 0xe1, 0x80, + 0x6f, 0xdd, 0x03, 0x70, 0xb5, 0x79, 0x01, 0x2a, + 0x51, 0x3f, 0x65, 0x72, 0xea, 0xe9, 0x19, 0xfb, + 0x94, 0x29, 0x8a, 0x57, 0x58, 0xa3, 0x53, 0xa5, + 0x42, 0x5e, 0x6e, 0x8d, 0x4f, 0x95, 0x0a, 0xeb, + 0x38, 0x2f, 0x59, 0x75, 0xac, 0xa4, 0x6b, 0x32, + 0x65, 0xd4, 0x79, 0x62, 0x0c, 0xc6, 0xe8, 0xd6, + 0xe6, 0x8d, 0x3e, 0x14, 0xb3, 0x08, 0xc0, 0x13, + 0x36, 0x01, 0x54, 0xc1, 0x02, 0x05, 0x54, 0xa3, + 0x62, 0x80, 0x20, 0x25, 0x4f, 0xdf, 0x2d, 0x8b, + 0x67, 0x46, 0x3e, 0x43, 0x73, 0x22, 0x9a, 0x59, + 0xe7, 0xcc, 0xcd, 0x8a, 0x5a, 0x66, 0xe5, 0xb3, + 0x34, 0x2f, 0x66, 0x59, 0x55, 0xcf, 0x5a, 0x3d, + 0xbb, 0x57, 0x85, 0x3d, 0x6b, 0x35, 0x62, 0x11, + 0x55, 0xf9, 0x6c, 0xd5, 0xa8, 0x46, 0x56, 0xe9, + 0xb6, 0x44, 0x61, 0xd5, 0x69, 0xa6, 0x08, 0xe0, + 0x70, 0x0c, 0x01, 0x06, 0xa6, 0x6a, 0xf1, 0xf6, + 0xa6, 0x91, 0x11, 0x6b, 0xc5, 0x4b, 0xa9, 0x79, + 0x66, 0x64, 0xa3, 0x36, 0x11, 0xdc, 0x5d, 0xb5, + 0x00, 0x00, 0xfe, + // clock + 0xa0, 0x80, 0x72, 0x35, 0x14, 0x90, 0x36, 0xa5, + 0x01, 0xf2, 0x75, 0x35, 0x40, 0x32, 0x4b, 0x06, + 0x88, 0xba, 0x59, 0x01, 0xca, 0xb6, 0xb6, 0xda, + 0x84, 0x35, 0xd5, 0xb4, 0x57, 0x6a, 0x53, 0xc7, + 0x58, 0xc7, 0x4e, 0xab, 0x5c, 0x2b, 0x32, 0x6d, + 0x6b, 0xa3, 0xf2, 0x23, 0x54, 0xb5, 0x9d, 0xac, + 0x2a, 0xce, 0x0c, 0xf1, 0x55, 0xba, 0x9a, 0xb8, + 0x22, 0x39, 0x47, 0xf1, 0xe9, 0xe2, 0x8c, 0xe4, + 0x6c, 0xc5, 0x67, 0x88, 0xdb, 0x4b, 0x3a, 0x9c, + 0xac, 0x39, 0x1e, 0x0f, 0xf7, 0x92, 0xd3, 0xb6, + 0x58, 0x23, 0x95, 0xc3, 0x4a, 0x3b, 0x73, 0x8a, + 0x72, 0x0a, 0xcb, 0xe3, 0xaf, 0xc9, 0x26, 0x38, + 0x22, 0x1b, 0x20, 0x78, 0x11, 0x01, 0x04, 0xaf, + 0x44, 0x80, 0x10, 0x04, 0x08, 0x10, 0xb3, 0x12, + 0x01, 0x1c, 0x77, 0x41, 0x7e, 0x13, 0x6e, 0x51, + 0x9e, 0xb8, 0xf8, 0xb5, 0xb5, 0x86, 0x7b, 0x9c, + 0xe6, 0xb7, 0xde, 0xe4, 0xee, 0x75, 0x14, 0x50, + 0x92, 0xa9, 0x02, 0x6a, 0x61, 0x61, 0x40, 0x89, + 0xcc, 0x04, 0x48, 0x5a, 0x89, 0x00, 0xd1, 0x08, + 0x03, 0x00, 0xfc, + // control + 0x50, 0x82, 0xda, 0x56, 0x32, 0x3d, 0xce, 0x09, + 0x5a, 0x38, 0xb1, 0x72, 0xcb, 0x27, 0x69, 0x75, + 0x4d, 0x4d, 0x93, 0x9e, 0xb2, 0x06, 0x55, 0x57, + 0xaf, 0x75, 0x9a, 0x1a, 0x45, 0x2d, 0x22, 0xd6, + 0x69, 0x6a, 0x10, 0x55, 0x8f, 0xc6, 0xa7, 0xa9, + 0x96, 0x9c, 0x23, 0x13, 0xae, 0x36, 0x4a, 0xca, + 0xf0, 0xb2, 0x3d, 0x9a, 0xa8, 0xa8, 0x2c, 0xda, + 0xd1, 0x68, 0x82, 0xe4, 0xd4, 0x1c, 0x45, 0xa3, + 0x89, 0x9a, 0x9d, 0xa7, 0x1d, 0xb5, 0xc6, 0x2b, + 0x09, 0xed, 0x95, 0x33, 0x9a, 0xa2, 0xd0, 0x2c, + 0x33, 0x69, 0x00, 0x66, 0x11, 0x0a, 0xc0, 0x9c, + 0x1d, 0x09, 0x98, 0x7d, 0x3c, 0x01, 0xbd, 0xa7, + 0x25, 0xa0, 0xd7, 0xb4, 0x00, 0xb4, 0x14, 0x71, + 0xd2, 0x16, 0xc2, 0x55, 0x55, 0xee, 0x49, 0x63, + 0xe1, 0xb0, 0x30, 0xb7, 0x27, 0x8b, 0x5d, 0xd2, + 0x4c, 0xd2, 0x9e, 0x22, 0x36, 0x69, 0x31, 0x69, + 0xbd, 0xca, 0x30, 0x2c, 0xc5, 0xb4, 0xd5, 0xa9, + 0x43, 0xcb, 0x10, 0xd3, 0x4e, 0xa7, 0x0d, 0xa5, + 0x43, 0x55, 0x56, 0x9d, 0x2e, 0xe4, 0x09, 0x76, + 0x5d, 0xb8, 0xfa, 0x90, 0x36, 0xc9, 0x75, 0xd5, + 0xea, 0x43, 0xda, 0x24, 0xd7, 0x55, 0x63, 0xf0, + 0x75, 0x9c, 0xdc, 0x66, 0xb6, 0xd1, 0x5f, 0x17, + 0xa9, 0x2a, 0xdc, 0x46, 0x77, 0x43, 0xa4, 0xb2, + 0x50, 0x99, 0xdc, 0x09, 0x92, 0xf1, 0xd0, 0x65, + 0xf2, 0x7d, 0x0c, 0xcb, 0x4b, 0x95, 0xd9, 0xcd, + 0x36, 0xf2, 0xa8, 0x99, 0x16, 0xdb, 0x46, 0xa1, + 0xa2, 0x66, 0x5a, 0x6c, 0xda, 0x00, 0xf3, 0x59, + 0x69, 0x35, 0x71, 0x0b, 0xcc, 0x6b, 0x13, 0x00, + 0x6f, 0x67, 0x00, 0xf8, + // digital + 0x20, 0x80, 0xc4, 0x6c, 0x4e, 0xb6, 0x9c, 0xb2, + 0x69, 0xc6, 0x39, 0x79, 0x77, 0xc2, 0x1a, 0x13, + 0xe7, 0xe4, 0xdd, 0x2a, 0x9b, 0x77, 0x95, 0x93, + 0x37, 0xab, 0xe4, 0x59, 0x95, 0x4f, 0xde, 0xad, + 0x91, 0x46, 0x4d, 0x3e, 0x79, 0xb7, 0xca, 0xea, + 0x5d, 0xa5, 0xe5, 0x99, 0xb3, 0x67, 0x56, 0xa0, + 0x50, 0x1a, 0xe6, 0x95, 0x13, 0x42, 0x52, 0x59, + 0x31, 0x46, 0x75, 0xd7, 0x6e, 0xe9, 0x72, 0xca, + 0xa4, 0x9e, 0x24, 0x00, 0x8d, 0xa2, 0x25, 0xa0, + 0x10, 0x8c, 0xd3, 0x8c, 0xa0, 0x2a, 0x66, 0xad, + 0x4e, 0x57, 0xa4, 0x9a, 0x65, 0xa5, 0x3a, 0x5d, + 0x51, 0xe2, 0xd2, 0xde, 0x38, 0x00, 0x2a, 0x50, + 0x05, 0x40, 0x46, 0xee, 0xd5, 0x87, 0x2c, 0xa1, + 0x13, 0x8e, 0xcf, 0xe0, 0x93, 0xa6, 0x79, 0xd4, + 0x5e, 0x83, 0xef, 0x6a, 0xd6, 0x19, 0x65, 0x0d, + 0x3e, 0xa7, 0x71, 0x65, 0xa5, 0x31, 0xf8, 0xe1, + 0xa2, 0x5d, 0x61, 0xd7, 0x10, 0x52, 0x05, 0x79, + 0x8d, 0x5e, 0x63, 0xb4, 0x5d, 0x24, 0x7e, 0x7b, + 0x8d, 0xd1, 0x75, 0x13, 0xfb, 0xec, 0x35, 0x46, + 0x37, 0xc5, 0xec, 0x93, 0xc6, 0x14, 0xec, 0x34, + 0x71, 0x4c, 0x19, 0x53, 0x70, 0xd3, 0xc8, 0x39, + 0xa6, 0x4c, 0xc1, 0xcd, 0x20, 0xe7, 0x59, 0x00, + 0x80, 0xff, + // electronic + 0xa7, 0xef, 0xd2, 0xc5, 0xdd, 0x2b, 0x9f, 0xbe, + 0x78, 0x17, 0xaf, 0x8a, 0x72, 0xba, 0x62, 0x5d, + 0xcd, 0xb3, 0xcc, 0xe9, 0xb2, 0xf6, 0x50, 0xab, + 0x29, 0xab, 0x8f, 0xdc, 0xd3, 0x35, 0xa6, 0x8e, + 0x3e, 0xd0, 0x0e, 0x33, 0x1f, 0xd3, 0x3a, 0x4f, + 0x36, 0xb9, 0xa2, 0x76, 0xeb, 0x3c, 0x5d, 0x97, + 0x88, 0x29, 0xab, 0x0d, 0x36, 0xcd, 0x6c, 0xc2, + 0x9e, 0x36, 0x79, 0x37, 0x8d, 0x91, 0x72, 0xda, + 0x1c, 0xdd, 0xb5, 0x46, 0xca, 0x69, 0x4b, 0x32, + 0xf7, 0x6a, 0xd9, 0xa7, 0x2d, 0x51, 0xc3, 0xb2, + 0x2c, 0x9f, 0xa6, 0x26, 0x0e, 0x89, 0x92, 0x1d, + 0xea, 0xec, 0xd5, 0x53, 0xdd, 0x32, 0xa9, 0x9b, + 0x32, 0xcd, 0x8a, 0x34, 0x0a, 0x68, 0x8e, 0x95, + 0x01, 0x99, 0x53, 0x10, 0x20, 0x11, 0x0a, 0x07, + 0x34, 0xa3, 0x9d, 0x80, 0x55, 0xd3, 0x13, 0x30, + 0xfa, 0x54, 0x02, 0x5a, 0xeb, 0x4c, 0x40, 0x8e, + 0x6c, 0x27, 0xcf, 0x8d, 0xdd, 0xd3, 0xec, 0x9c, + 0x22, 0x35, 0xae, 0x70, 0x4d, 0x73, 0x8a, 0xd4, + 0xb4, 0xcd, 0xad, 0xc9, 0x29, 0x52, 0xf5, 0x76, + 0x8d, 0x29, 0xa7, 0x48, 0x35, 0x33, 0x38, 0xab, + 0x9c, 0x32, 0xe5, 0xca, 0xe4, 0xa8, 0x7a, 0x9a, + 0x94, 0x2a, 0x5d, 0x32, 0xca, 0xe9, 0x52, 0x8b, + 0x34, 0x2f, 0x39, 0xa7, 0x4f, 0x39, 0xc3, 0x35, + 0xac, 0x9c, 0xb1, 0x84, 0x28, 0x0d, 0xb7, 0xbc, + 0xe6, 0x6a, 0xa5, 0x78, 0x24, 0x74, 0xdb, 0x82, + 0x92, 0x94, 0x76, 0x2b, 0x6b, 0x2f, 0xca, 0x4a, + 0x2b, 0x44, 0x9f, 0x2d, 0x1b, 0xb7, 0x8a, 0x10, + 0x73, 0xf6, 0x1a, 0x54, 0x2b, 0x3d, 0xf0, 0xd9, + 0x5b, 0x11, 0x8d, 0xf0, 0xd0, 0x67, 0x6b, 0x4d, + 0xc4, 0xdd, 0x4b, 0x0b, 0xc0, 0x6a, 0x32, 0x02, + 0xc8, 0xe0, 0x4e, 0x00, 0x6a, 0xd3, 0x13, 0xd9, + 0xc7, 0x79, 0x98, 0x2a, 0x29, 0x64, 0x6f, 0xcd, + 0x6a, 0xde, 0x44, 0x01, 0x3d, 0x3a, 0x29, 0xa0, + 0x79, 0x25, 0x01, 0x14, 0xc3, 0xcc, 0x80, 0xac, + 0x54, 0x08, 0x90, 0x0d, 0x09, 0x00, 0xc0, 0xff, + // filter + 0x8c, 0x9f, 0x69, 0x2a, 0x3d, 0xe2, 0x38, 0x7e, + 0xfa, 0x9d, 0x72, 0x8f, 0xab, 0x80, 0x11, 0xca, + 0x05, 0xd0, 0x4d, 0x9a, 0x02, 0x86, 0x73, 0x73, + 0x40, 0x57, 0x69, 0x09, 0x90, 0x2a, 0xe2, 0x14, + 0x45, 0xbb, 0x86, 0x66, 0xe5, 0x53, 0x45, 0x33, + 0x1a, 0x9e, 0x45, 0x56, 0x15, 0xe4, 0xa7, 0xa9, + 0x95, 0x5a, 0x55, 0x12, 0xb1, 0x45, 0x52, 0x7b, + 0x55, 0x81, 0x6d, 0x07, 0x4b, 0x95, 0x51, 0x05, + 0xbe, 0x9d, 0xa0, 0x93, 0x4b, 0xe5, 0xc5, 0x85, + 0x92, 0xcf, 0x31, 0x5d, 0x04, 0x91, 0xe9, 0xe1, + 0x14, 0x1c, 0xd0, 0x58, 0x59, 0x00, 0x36, 0x31, + 0x4f, 0x40, 0xc6, 0x66, 0xa7, 0xcf, 0xc1, 0xcc, + 0xdd, 0x2b, 0x9f, 0xbe, 0x24, 0x89, 0x08, 0x8d, + 0xb3, 0xa6, 0x54, 0xa8, 0xc2, 0xac, 0xca, 0x9a, + 0x53, 0xa3, 0x2a, 0xf5, 0xca, 0x63, 0x8e, 0x85, + 0xb3, 0x5d, 0x26, 0x8d, 0x39, 0x57, 0xec, 0x52, + 0x1b, 0xd2, 0xe6, 0x5c, 0xb1, 0xda, 0x74, 0x50, + 0x5b, 0x52, 0xa1, 0x2c, 0xd3, 0x08, 0x65, 0xc9, + 0x05, 0x23, 0x4d, 0x23, 0xa6, 0x35, 0x67, 0xf4, + 0x70, 0xac, 0xe4, 0xd6, 0x14, 0x31, 0xdc, 0xa8, + 0x8a, 0x28, 0x63, 0x80, 0x52, 0xd7, 0xb0, 0x62, + 0xce, 0x11, 0x4c, 0x5d, 0x2a, 0x03, 0x00, 0xfc, + // frequency + 0x04, 0xe8, 0x21, 0x9c, 0x00, 0xa3, 0x94, 0x33, + 0x60, 0x78, 0x33, 0x03, 0x54, 0x13, 0xe6, 0x80, + 0x61, 0x22, 0x1c, 0xd0, 0x6d, 0x78, 0x00, 0x9a, + 0x0a, 0x73, 0x40, 0xd3, 0x61, 0x27, 0x2e, 0x2a, + 0xdc, 0xdd, 0x9c, 0x8c, 0x30, 0x4c, 0xb4, 0x34, + 0x5d, 0xbd, 0x82, 0xd8, 0xc8, 0xc3, 0x74, 0xca, + 0x09, 0x72, 0x25, 0x0d, 0xd7, 0xc5, 0x27, 0xa8, + 0x95, 0xc4, 0xdd, 0x6e, 0x9f, 0xb0, 0x26, 0xe2, + 0xcc, 0x98, 0x72, 0xa2, 0xea, 0x89, 0x27, 0x73, + 0x54, 0x4a, 0x8a, 0x27, 0x2e, 0xa9, 0xb1, 0xac, + 0x60, 0xb6, 0xad, 0xc2, 0x6a, 0x97, 0x28, 0xe7, + 0xb2, 0x0e, 0x4f, 0x32, 0xdc, 0x94, 0xca, 0x4b, + 0x34, 0x76, 0xcb, 0xb3, 0x2b, 0x77, 0x05, 0xc7, + 0xab, 0x8f, 0xc9, 0xc2, 0x30, 0xe6, 0x9c, 0x3e, + 0x59, 0x8e, 0x56, 0x9b, 0x7d, 0xfa, 0xe2, 0x28, + 0x43, 0xab, 0xca, 0x19, 0x8a, 0x23, 0x77, 0x9f, + 0x28, 0x6b, 0xcc, 0x86, 0x22, 0x6c, 0xa3, 0x8c, + 0x31, 0x6a, 0xca, 0xf4, 0xb5, 0x3c, 0xa6, 0x24, + 0x29, 0x56, 0xc7, 0x6c, 0x99, 0x82, 0xe4, 0x7a, + 0x49, 0xb1, 0x63, 0xec, 0xc4, 0x45, 0xc3, 0x13, + 0x2b, 0xa0, 0x00, 0x77, 0x05, 0x2c, 0x16, 0xae, + 0x80, 0x23, 0xcd, 0x15, 0xb0, 0x78, 0xa8, 0x01, + 0x96, 0x4c, 0x75, 0x40, 0xc1, 0xae, 0x09, 0x10, + 0xd6, 0xf3, 0x8c, 0xdd, 0x2a, 0x79, 0xd4, 0x94, + 0x33, 0x76, 0x23, 0x14, 0x59, 0x93, 0xcf, 0xd4, + 0x8d, 0x50, 0x54, 0x4d, 0x3e, 0x53, 0x37, 0x42, + 0xd1, 0x35, 0xe5, 0xcc, 0x4d, 0x33, 0x67, 0x4f, + 0xd9, 0x33, 0x37, 0xc3, 0x1c, 0xbd, 0xa5, 0xc7, + 0x52, 0x24, 0x66, 0x4d, 0x84, 0x19, 0x4b, 0xb7, + 0x28, 0xb1, 0x19, 0x65, 0x2c, 0xc3, 0x22, 0xfb, + 0x76, 0x98, 0xb6, 0x0c, 0x03, 0x62, 0x5b, 0x61, + 0xcb, 0xd2, 0x0d, 0xa8, 0x5f, 0x85, 0x29, 0x6b, + 0x65, 0xa4, 0x7d, 0x1e, 0x06, 0x00, 0xe0, 0xff, + // generator + 0xc8, 0x29, 0x98, 0xcb, 0x23, 0x24, 0x1b, 0x60, + 0x7a, 0xce, 0x04, 0xac, 0x28, 0x9a, 0x80, 0xd5, + 0xdb, 0x0b, 0x90, 0x05, 0xc5, 0x49, 0x8b, 0x67, + 0x8d, 0xce, 0xca, 0x27, 0x2d, 0x5e, 0x34, 0x23, + 0x2b, 0x9d, 0x34, 0x07, 0xb5, 0xf2, 0x8a, 0x74, + 0xd2, 0x12, 0xcd, 0xda, 0x32, 0xf2, 0x49, 0x73, + 0xd4, 0x28, 0xab, 0xc8, 0x27, 0xcb, 0xc9, 0xa2, + 0xb4, 0x2c, 0x9f, 0x2c, 0x45, 0x4d, 0xf3, 0xb0, + 0xb5, 0x8a, 0xec, 0xa5, 0xb1, 0x35, 0xd2, 0x29, + 0x72, 0x90, 0xa2, 0xd6, 0xca, 0xa7, 0xcc, 0x49, + 0x52, 0x86, 0x8b, 0xae, 0x2a, 0x17, 0x2a, 0x2d, + 0x1a, 0xbb, 0x9a, 0xd4, 0x29, 0xbd, 0xb0, 0xe1, + 0x68, 0x53, 0xc7, 0x31, 0xb5, 0x1a, 0xad, 0x8d, + 0x1d, 0xc7, 0xd4, 0x6a, 0xb6, 0x2e, 0x36, 0x1c, + 0x31, 0xab, 0x3c, 0xba, 0xdc, 0x31, 0xc3, 0x6d, + 0xc8, 0xe9, 0x52, 0x14, 0xeb, 0xe6, 0x4a, 0xa7, + 0xcb, 0x81, 0xbd, 0xc3, 0x4b, 0x9f, 0xbe, 0x18, + 0x89, 0x0e, 0x0b, 0x73, 0xfa, 0x62, 0x54, 0x27, + 0x2d, 0xf2, 0xe9, 0xb3, 0x32, 0xef, 0xb2, 0x30, + 0xa7, 0xcf, 0xc6, 0xb4, 0xd3, 0xcd, 0x9c, 0x3e, + 0x19, 0xb1, 0xca, 0x8c, 0x74, 0xfa, 0xe2, 0xd9, + 0xad, 0xb2, 0xd2, 0xe9, 0x93, 0x93, 0xf4, 0x76, + 0x5b, 0x67, 0xc8, 0x99, 0xd2, 0xdb, 0x63, 0xad, + 0x21, 0x65, 0x8a, 0x18, 0x89, 0x3c, 0x86, 0x5c, + 0x30, 0xb3, 0x65, 0x52, 0x1b, 0x52, 0xa6, 0xc8, + 0xe6, 0x21, 0x6d, 0xc8, 0x95, 0x2c, 0x97, 0x86, + 0xb4, 0xb1, 0x2c, 0x4c, 0x0f, 0x3d, 0xda, 0xc6, + 0xb2, 0x30, 0x3c, 0xf4, 0x70, 0x19, 0x4b, 0x27, + 0xf3, 0xe4, 0x23, 0x69, 0xac, 0x0b, 0x53, 0xcc, + 0x86, 0x86, 0xb1, 0x66, 0x0c, 0x75, 0x29, 0xea, + 0x96, 0x92, 0x39, 0xd4, 0xb9, 0x28, 0x01, 0xb8, + 0xc7, 0x02, 0x00, 0xf8, + // instrument + 0x27, 0x2f, 0x82, 0xbd, 0xa6, 0xac, 0x9c, 0x7c, + 0x48, 0x61, 0xe9, 0x9a, 0x73, 0xf2, 0xee, 0x58, + 0xb4, 0xb2, 0xca, 0xc8, 0xbd, 0xe5, 0x6c, 0x6d, + 0xa6, 0x2d, 0x97, 0xd6, 0xda, 0xdd, 0xd5, 0xac, + 0x34, 0x13, 0xb3, 0x48, 0x0f, 0x9d, 0x80, 0x06, + 0x30, 0x02, 0xb0, 0x9d, 0x40, 0x00, 0x5e, 0x2d, + 0x0f, 0xc0, 0xee, 0xe3, 0x06, 0x58, 0xad, 0x52, + 0x01, 0x63, 0x76, 0x18, 0xa0, 0xcf, 0xee, 0x00, + 0xf4, 0x39, 0x55, 0x80, 0x5e, 0x55, 0x4e, 0x51, + 0xa3, 0xaa, 0x84, 0xa7, 0x3a, 0x55, 0xca, 0x98, + 0x51, 0x9e, 0xf8, 0xd4, 0x29, 0x63, 0x44, 0x79, + 0xe2, 0xd5, 0xa4, 0x44, 0x69, 0xa1, 0x8d, 0x5b, + 0x1b, 0x1d, 0xb4, 0x47, 0xd4, 0x6e, 0x6d, 0x72, + 0xd0, 0x1e, 0x59, 0x7b, 0xf4, 0xc9, 0x41, 0x69, + 0x54, 0xec, 0xd5, 0x17, 0x8f, 0x29, 0x19, 0x55, + 0x4e, 0x5f, 0x3c, 0xb9, 0xb9, 0xd7, 0x3e, 0x7d, + 0x8d, 0x66, 0xea, 0x56, 0xeb, 0xf4, 0x35, 0x9b, + 0x59, 0x78, 0x99, 0x33, 0xd4, 0xa2, 0x6e, 0x1e, + 0x61, 0xcf, 0x58, 0x93, 0x99, 0x46, 0x9a, 0x3e, + 0x63, 0x4d, 0x66, 0x96, 0x61, 0xe5, 0x8c, 0x2d, + 0x9a, 0xa9, 0x97, 0x95, 0x33, 0xb6, 0x60, 0xaa, + 0x56, 0x56, 0xda, 0x54, 0x2c, 0x05, 0x75, 0xca, + 0x6a, 0x63, 0x31, 0x98, 0xd2, 0x41, 0x2b, 0xf5, + 0x51, 0x61, 0xea, 0xb4, 0xec, 0x54, 0x55, 0x6e, + 0x1e, 0x61, 0xb6, 0x4f, 0xb2, 0x9c, 0x97, 0x55, + 0x99, 0x56, 0x40, 0xe1, 0x11, 0x00, 0x00, 0xff, + // knob + 0xad, 0x31, 0xd2, 0xb3, 0x35, 0xa2, 0x96, 0x5a, + 0x4a, 0xef, 0x33, 0x37, 0x5b, 0x2a, 0xad, 0x64, + 0x32, 0x8b, 0xe1, 0xa8, 0x02, 0x57, 0xef, 0xcc, + 0x52, 0xa7, 0x48, 0x81, 0x25, 0x2a, 0xac, 0x9c, + 0x3c, 0x7b, 0x0d, 0xcb, 0x94, 0x7c, 0xb2, 0x50, + 0xdd, 0xc5, 0x42, 0xf2, 0xc9, 0x62, 0x0f, 0x09, + 0x0b, 0xb3, 0x27, 0x8b, 0x23, 0x29, 0xd2, 0xcc, + 0xac, 0x2c, 0x2e, 0x93, 0x8c, 0x10, 0xbb, 0xb2, + 0xb8, 0x4d, 0x32, 0x5c, 0xec, 0x2a, 0xe2, 0x32, + 0x93, 0x72, 0x29, 0xab, 0x8e, 0xd3, 0x4d, 0x32, + 0xc4, 0x9e, 0x26, 0xcd, 0xd0, 0x88, 0x30, 0x73, + 0xfa, 0x54, 0x2b, 0x4c, 0x2b, 0xec, 0x19, 0x52, + 0xae, 0x08, 0xcd, 0x30, 0x67, 0x48, 0x39, 0x23, + 0x34, 0xc2, 0x9c, 0x29, 0x95, 0x0a, 0xd7, 0x0c, + 0x73, 0xe6, 0x94, 0x2a, 0x42, 0xbd, 0xcc, 0x99, + 0x53, 0xcc, 0x70, 0xf5, 0x32, 0x63, 0x49, 0x2e, + 0x33, 0x54, 0xc7, 0x98, 0x85, 0x04, 0x2f, 0xd1, + 0xae, 0x62, 0x26, 0x9e, 0x43, 0xc3, 0xdd, 0x0e, + 0x01, 0xc0, 0x4b, 0x23, 0x80, 0x8c, 0x16, 0x04, + 0x10, 0xd1, 0x02, 0x00, 0xfe, + // machine + 0xad, 0x4a, 0x1a, 0xdb, 0x2c, 0xe4, 0x94, 0xd6, + 0x49, 0xda, 0xf4, 0x92, 0x53, 0x5a, 0x23, 0x79, + 0xca, 0xc6, 0x74, 0x6b, 0x83, 0xc6, 0xae, 0x68, + 0x4b, 0xab, 0x8a, 0x96, 0x2a, 0xd3, 0x4b, 0xae, + 0x3a, 0x19, 0x8a, 0x1a, 0x29, 0x72, 0xea, 0x1e, + 0x44, 0x78, 0x74, 0x4c, 0x00, 0xbc, 0xc0, 0x28, + 0xc0, 0x08, 0x42, 0x05, 0x98, 0xb3, 0x2c, 0x01, + 0xf3, 0x74, 0x24, 0x60, 0xae, 0xcd, 0x04, 0xac, + 0xbd, 0x99, 0x80, 0x39, 0x4b, 0x4e, 0xdc, 0x3d, + 0x71, 0x64, 0xd4, 0x59, 0x71, 0x92, 0xec, 0xb3, + 0x16, 0x7a, 0xc5, 0x49, 0x72, 0xec, 0x9a, 0xa8, + 0x95, 0x64, 0x49, 0xbe, 0x13, 0x46, 0x57, 0x96, + 0x39, 0xfb, 0xae, 0x88, 0x59, 0x79, 0x11, 0xe4, + 0xd7, 0x26, 0xfe, 0xe4, 0x4d, 0xa1, 0x4e, 0x59, + 0x94, 0x53, 0x0d, 0x4f, 0x9c, 0x15, 0x56, 0x4f, + 0xdb, 0x3d, 0x6a, 0x46, 0xd8, 0x3d, 0x7d, 0xd3, + 0x68, 0x1d, 0x2e, 0xf7, 0x0c, 0x85, 0x4b, 0x94, + 0x9b, 0x9d, 0x33, 0x76, 0x43, 0x1e, 0x1e, 0x76, + 0xd6, 0x58, 0x3d, 0xa9, 0x6a, 0xdb, 0x19, 0x63, + 0x71, 0xe8, 0x52, 0x65, 0xbb, 0x8d, 0xd9, 0x60, + 0x6a, 0x95, 0xe3, 0x36, 0x65, 0x8b, 0xa1, 0x5d, + 0xb6, 0xc7, 0x54, 0x1c, 0x9a, 0x44, 0x39, 0x4a, + 0x53, 0x50, 0x94, 0xd6, 0x19, 0xab, 0x3c, 0x49, + 0x60, 0xf9, 0x14, 0x6d, 0x02, 0x78, 0x2e, 0x0d, + 0x00, 0xf0, + // modular + 0xad, 0x8e, 0x86, 0xd2, 0xd3, 0x9d, 0x8c, 0x3a, + 0x69, 0xb2, 0xf0, 0x4a, 0xb2, 0xaa, 0xa4, 0xd8, + 0x42, 0xd3, 0xe9, 0x2a, 0x83, 0xe4, 0x48, 0x2f, + 0xa7, 0x23, 0xb7, 0x56, 0x3d, 0x34, 0x93, 0x9d, + 0x3c, 0x84, 0x08, 0x13, 0x89, 0x73, 0xe2, 0x54, + 0xaa, 0x55, 0x3d, 0xca, 0x89, 0x52, 0xcd, 0x16, + 0x8f, 0x28, 0x27, 0x4c, 0x2d, 0x5b, 0x2d, 0xe2, + 0x9c, 0x30, 0x8d, 0x28, 0xf1, 0xb2, 0x7b, 0xa2, + 0xb4, 0x22, 0xd5, 0xdb, 0xca, 0x89, 0xe3, 0x8c, + 0x74, 0x69, 0xab, 0x27, 0x4d, 0x35, 0xca, 0xb9, + 0xa3, 0x9c, 0x32, 0x47, 0xed, 0x90, 0x8e, 0xd2, + 0xda, 0x96, 0xa8, 0x45, 0x2d, 0xf1, 0x1a, 0xd7, + 0x70, 0x22, 0x8f, 0xc4, 0x67, 0x18, 0x86, 0x39, + 0x3a, 0x62, 0x9f, 0xbe, 0x2a, 0x72, 0xef, 0x6c, + 0xb0, 0xfa, 0x24, 0x24, 0xb3, 0x2b, 0xc2, 0xea, + 0xa3, 0xb4, 0x8c, 0xc9, 0x52, 0x6b, 0x88, 0xca, + 0x3c, 0xab, 0x0a, 0xaf, 0x21, 0xe8, 0xf0, 0xa8, + 0x8c, 0xbc, 0xc6, 0xe0, 0x33, 0xd8, 0xb2, 0xca, + 0x1a, 0x42, 0xa8, 0x10, 0xaf, 0xd8, 0x6b, 0x88, + 0x2e, 0x5b, 0xcc, 0x6b, 0x8e, 0x21, 0x86, 0x28, + 0x75, 0x8d, 0xb9, 0x86, 0xe4, 0x3c, 0x2d, 0x25, + 0xc5, 0x18, 0x72, 0xa1, 0xd2, 0xf4, 0x50, 0x63, + 0x28, 0x99, 0xdd, 0x53, 0x46, 0x8d, 0x21, 0x47, + 0xce, 0x08, 0x2a, 0x3d, 0xc6, 0x32, 0xd9, 0x2c, + 0x79, 0xd4, 0x1a, 0x6b, 0xe3, 0xb0, 0xe0, 0x8a, + 0x6d, 0xac, 0x1d, 0x53, 0x4d, 0x43, 0x97, 0xa9, + 0x54, 0x0c, 0x37, 0x1a, 0x52, 0xa6, 0x52, 0xd1, + 0xcd, 0x78, 0x48, 0x99, 0x6a, 0x27, 0x57, 0xe5, + 0xb1, 0x61, 0xa8, 0x9d, 0x5c, 0x95, 0xc7, 0x00, + 0x00, 0xfc, + // modulator + 0xad, 0x0e, 0x9a, 0xd2, 0xd3, 0x9d, 0x8c, 0x2a, + 0x69, 0xb2, 0xb0, 0x4a, 0x72, 0xaa, 0xa4, 0xd8, + 0x42, 0xd3, 0xe9, 0x28, 0xbd, 0x94, 0x28, 0xab, + 0x64, 0x2b, 0x0f, 0x8a, 0xb3, 0xbc, 0x92, 0xad, + 0xcc, 0x68, 0x8b, 0xf2, 0xac, 0x7b, 0xe2, 0xd0, + 0xbd, 0xd8, 0xc3, 0xc9, 0x89, 0xe3, 0x8c, 0x10, + 0x73, 0x3b, 0x27, 0x4a, 0x23, 0x4d, 0x35, 0xec, + 0x9c, 0x30, 0xd5, 0x16, 0x33, 0x8f, 0x72, 0xc2, + 0x34, 0xdd, 0xdc, 0xcd, 0xca, 0x89, 0x52, 0xf5, + 0x34, 0x8b, 0x28, 0x27, 0xc9, 0x59, 0x5b, 0xbc, + 0xac, 0x9c, 0xac, 0x44, 0x09, 0xc9, 0xa8, 0xd2, + 0x9a, 0xe4, 0xb4, 0x54, 0xd9, 0x4e, 0xa9, 0xab, + 0x50, 0xd7, 0x30, 0xcb, 0xa7, 0xd9, 0x6b, 0x4b, + 0x59, 0x28, 0x9f, 0x6e, 0x59, 0x51, 0x89, 0x48, + 0x7d, 0xba, 0x6a, 0xc5, 0x3c, 0x33, 0xd6, 0xe9, + 0x5b, 0x54, 0x17, 0xf3, 0x59, 0xa7, 0xaf, 0x4e, + 0xc2, 0x3c, 0xa2, 0x8c, 0x21, 0xca, 0x2a, 0x65, + 0x5b, 0xd2, 0x06, 0x1f, 0xcb, 0xc9, 0xb3, 0xea, + 0xe8, 0x43, 0x28, 0xe5, 0x88, 0xaa, 0xab, 0x8f, + 0x21, 0xd4, 0xdc, 0xab, 0x9e, 0x3e, 0x05, 0x37, + 0x8b, 0x8c, 0x7b, 0xfa, 0x6a, 0xd5, 0xcd, 0xb3, + 0xce, 0xe9, 0xab, 0x13, 0xf3, 0xa8, 0xaa, 0xa7, + 0x2f, 0x9e, 0x2d, 0xb2, 0xa2, 0x9e, 0xa1, 0x58, + 0xd6, 0xca, 0x2a, 0xbd, 0x86, 0xa4, 0xc4, 0xb7, + 0x22, 0xe4, 0x18, 0x92, 0xe6, 0x8c, 0xaa, 0x4a, + 0x63, 0xc8, 0x86, 0xc2, 0x2b, 0x63, 0xad, 0xa1, + 0x44, 0x0a, 0x6b, 0xaf, 0xb5, 0x86, 0x92, 0x30, + 0xbd, 0xbc, 0xd6, 0x1a, 0x4a, 0x23, 0xf7, 0xd2, + 0x49, 0x63, 0x2c, 0x03, 0xd3, 0xdc, 0x27, 0x8d, + 0xb1, 0x4c, 0xb2, 0x48, 0xbe, 0xd4, 0xc6, 0xb2, + 0xb0, 0xd5, 0x7d, 0x58, 0x1a, 0x53, 0x26, 0xcd, + 0xc1, 0x4a, 0x65, 0xca, 0x89, 0xd5, 0x0b, 0x4b, + 0x85, 0xb1, 0x64, 0x54, 0x0f, 0xa9, 0xe5, 0xe6, + 0x52, 0x29, 0x54, 0xcc, 0x92, 0x9a, 0x4a, 0xc5, + 0x30, 0x93, 0x22, 0x04, 0xa0, 0x0e, 0x9b, 0x00, + 0xc0, 0x4a, 0x01, 0x00, 0xfc, + // operator + 0x09, 0x70, 0x9d, 0x2d, 0x00, 0x61, 0x91, 0x9e, + 0x2c, 0xe5, 0xca, 0x14, 0xab, 0x72, 0x92, 0xd4, + 0xa3, 0x8c, 0x2b, 0xec, 0x89, 0xd3, 0xf2, 0x52, + 0x2b, 0x73, 0x2b, 0x8a, 0xcf, 0x2c, 0x3c, 0xc2, + 0xac, 0x38, 0x3e, 0xe7, 0x2c, 0x8b, 0xd2, 0xe2, + 0xb0, 0x2c, 0xcd, 0x2a, 0xac, 0xc9, 0x42, 0xa3, + 0x94, 0x08, 0x29, 0x24, 0x53, 0x6e, 0x42, 0x59, + 0x9d, 0x32, 0xa0, 0x28, 0x55, 0x06, 0x64, 0xad, + 0xca, 0x00, 0x6f, 0xc4, 0x5a, 0x15, 0x9b, 0x99, + 0xb8, 0xdb, 0x2e, 0xa5, 0x1d, 0xec, 0x51, 0xee, + 0xa4, 0xb5, 0x61, 0x93, 0x95, 0xbb, 0xdd, 0xd2, + 0xba, 0x89, 0xde, 0xe9, 0x71, 0x52, 0xab, 0x3a, + 0x65, 0xa5, 0xa5, 0x5e, 0x6d, 0xac, 0x6c, 0x59, + 0x9a, 0xa6, 0x74, 0x2e, 0xf3, 0x86, 0x5b, 0x91, + 0xd1, 0xfb, 0xe0, 0xd1, 0x45, 0x95, 0x47, 0x1f, + 0x83, 0xe8, 0x0c, 0x97, 0x39, 0x7d, 0x8d, 0x18, + 0x5a, 0x55, 0x7b, 0xf5, 0x35, 0x60, 0x58, 0x75, + 0xe5, 0xd1, 0x47, 0xc7, 0x55, 0x1d, 0xb6, 0xc6, + 0x90, 0x2c, 0x55, 0x5c, 0x58, 0x6c, 0x7d, 0xab, + 0xec, 0x64, 0xde, 0x78, 0xf5, 0xc5, 0xb1, 0xd9, + 0x44, 0xad, 0x31, 0x44, 0xc3, 0x59, 0x27, 0xa1, + 0xc6, 0x90, 0x02, 0x79, 0x8e, 0xcf, 0x1c, 0x63, + 0x8a, 0x98, 0x39, 0x36, 0xab, 0x8d, 0x31, 0x62, + 0x57, 0xf9, 0xa4, 0x36, 0xc6, 0x88, 0xd9, 0x6d, + 0x33, 0xdb, 0x54, 0x26, 0x36, 0x65, 0x05, 0x6b, + 0x53, 0x59, 0x58, 0x62, 0x31, 0xb4, 0x4d, 0x65, + 0x60, 0xa9, 0x45, 0xe9, 0x34, 0x95, 0x81, 0x29, + 0x16, 0xc5, 0xcc, 0x9c, 0x33, 0xba, 0x99, 0x0d, + 0x25, 0x00, 0xf0, 0x34, 0x00, 0x00, 0xff, + // oscillator + 0x27, 0x4d, 0xa5, 0x23, 0x3d, 0x6b, 0x9f, 0x34, + 0xad, 0xb4, 0x8c, 0x8a, 0x72, 0xd2, 0x34, 0x2a, + 0xc2, 0x2a, 0xca, 0x49, 0xd3, 0x8c, 0x34, 0xef, + 0x28, 0x27, 0x8e, 0x3b, 0x34, 0xa2, 0xcd, 0x9c, + 0x38, 0x4e, 0x0f, 0x8b, 0x96, 0x7a, 0xa2, 0x94, + 0x7d, 0x28, 0x5b, 0x8a, 0x00, 0x98, 0x6c, 0x13, + 0x40, 0x27, 0x69, 0x02, 0xd8, 0x22, 0x5c, 0x01, + 0x5b, 0x84, 0x2b, 0xe0, 0x48, 0x0f, 0x03, 0x0c, + 0xda, 0xe6, 0x80, 0x28, 0x3c, 0x4f, 0x1b, 0x5c, + 0xbb, 0x6a, 0x54, 0x1e, 0xad, 0xf3, 0x23, 0x6e, + 0x51, 0x77, 0xb5, 0x51, 0x76, 0x18, 0xc6, 0x9c, + 0xd5, 0x26, 0x59, 0x65, 0x18, 0x73, 0x4e, 0x5b, + 0x44, 0x85, 0xb3, 0xd7, 0x3d, 0x6d, 0x51, 0xe5, + 0x2e, 0x51, 0xf7, 0xb4, 0xd5, 0xb9, 0x19, 0x77, + 0x9d, 0xd3, 0x36, 0x6f, 0xe6, 0xdc, 0x55, 0x4f, + 0xdf, 0xa3, 0x72, 0x68, 0x4d, 0x39, 0x7d, 0x0f, + 0x46, 0xe1, 0x39, 0xe5, 0xf4, 0x2d, 0x89, 0xa4, + 0xd5, 0x98, 0xd3, 0xf7, 0xa8, 0x9c, 0x96, 0x67, + 0x56, 0x5f, 0x03, 0x9b, 0x59, 0x54, 0x3e, 0x7d, + 0x4b, 0x6c, 0x5a, 0x36, 0xfb, 0xf4, 0xb5, 0xb0, + 0x5a, 0xd9, 0xa2, 0xd3, 0xd7, 0x46, 0xee, 0xe9, + 0xb3, 0x4f, 0x5f, 0x3a, 0x5a, 0x86, 0xce, 0x1e, + 0x7d, 0xe9, 0x68, 0x99, 0x72, 0x79, 0xf5, 0xa5, + 0xa3, 0x57, 0xc8, 0xa5, 0xd1, 0x97, 0x81, 0x11, + 0x6a, 0x63, 0xda, 0x50, 0x16, 0x36, 0x45, 0x15, + 0x6b, 0x43, 0x99, 0x58, 0x62, 0x31, 0xb4, 0x0c, + 0x65, 0x40, 0x89, 0x47, 0xb1, 0x34, 0x94, 0x8e, + 0x29, 0x16, 0xc5, 0xcc, 0x98, 0x33, 0x9a, 0x99, + 0x0d, 0x05, 0x00, 0x80, 0xff, + // patch + 0xc8, 0x2b, 0x2a, 0x3c, 0xcd, 0x12, 0x23, 0x2f, + 0xba, 0xca, 0xf4, 0xb0, 0xa3, 0xbc, 0xa1, 0xdc, + 0xc3, 0xd3, 0x8a, 0x01, 0x82, 0x09, 0x0f, 0x40, + 0xf4, 0xee, 0xa7, 0xae, 0x51, 0xd2, 0xcd, 0x25, + 0x9d, 0xa6, 0x46, 0x2d, 0x8f, 0x90, 0x7c, 0x9a, + 0x9a, 0xb4, 0x2c, 0x42, 0xca, 0x69, 0x4a, 0xd6, + 0xb6, 0x0c, 0xcb, 0xa7, 0x2b, 0xd5, 0xca, 0xa3, + 0xec, 0x9c, 0xbe, 0x54, 0x6b, 0xad, 0x92, 0x73, + 0xfa, 0x52, 0xad, 0xb5, 0x4a, 0xf1, 0x19, 0x4b, + 0xb5, 0x96, 0x4e, 0xc5, 0x67, 0x2e, 0x4d, 0x5b, + 0x26, 0x55, 0x9f, 0x25, 0x37, 0x1d, 0x59, 0x57, + 0x75, 0xd6, 0x52, 0xb4, 0x65, 0x42, 0xf1, 0x39, + 0x6b, 0xd4, 0x72, 0x6f, 0x3b, 0xe7, 0xaa, 0x41, + 0x53, 0xb3, 0x2c, 0x9f, 0xab, 0x1a, 0x49, 0x8d, + 0x8a, 0x92, 0xd6, 0xac, 0xdd, 0x2c, 0xc3, 0x8a, + 0xe9, 0xaa, 0xac, 0x31, 0xf3, 0x38, 0x25, 0xdd, + 0x25, 0xcb, 0x32, 0xe2, 0x38, 0x60, 0x79, 0xb1, + 0x00, 0xec, 0xde, 0xe6, 0x80, 0xbd, 0xc7, 0x1d, + 0xb0, 0x7b, 0x87, 0x01, 0x56, 0x16, 0x04, 0x40, + 0x74, 0x57, 0x61, 0x6e, 0x66, 0x1b, 0xfe, + // sequencer + 0x41, 0xba, 0xbe, 0xdd, 0xdd, 0x93, 0x28, 0x60, + 0x09, 0x35, 0x05, 0x4c, 0x69, 0xa2, 0x80, 0xa5, + 0x8c, 0x0d, 0x30, 0x85, 0x8b, 0x03, 0x96, 0x73, + 0x09, 0xc0, 0xb4, 0xc2, 0x27, 0xa8, 0x92, 0x35, + 0xa3, 0xad, 0xac, 0xa0, 0x28, 0x8c, 0xb8, 0x60, + 0x7c, 0x82, 0xa6, 0xc8, 0x7c, 0x4b, 0xd6, 0x09, + 0x9a, 0x24, 0x8b, 0x2b, 0x59, 0x2b, 0x6a, 0x8c, + 0x35, 0x37, 0xad, 0xac, 0xb4, 0x7b, 0xe4, 0xe8, + 0x8a, 0x32, 0xb2, 0x1e, 0x50, 0xbc, 0x2b, 0x8a, + 0x00, 0xb8, 0xd2, 0x14, 0x40, 0x94, 0xcc, 0x0c, + 0xc8, 0xdc, 0x90, 0x00, 0xbe, 0x2a, 0xa7, 0xde, + 0x16, 0xd6, 0x4c, 0x6f, 0x5c, 0x46, 0x55, 0xa4, + 0x39, 0x36, 0x6c, 0x19, 0x65, 0xb2, 0x71, 0xe9, + 0xc2, 0x67, 0x4c, 0x56, 0xbd, 0x4c, 0x67, 0x9f, + 0xb9, 0x05, 0x65, 0x8f, 0x28, 0x73, 0xe6, 0x62, + 0x59, 0x3d, 0xaa, 0xf4, 0x9a, 0xb3, 0x42, 0xeb, + 0xa8, 0xda, 0x6d, 0x76, 0x52, 0x6a, 0x3c, 0xcd, + 0xb4, 0xd9, 0x09, 0xcd, 0xb1, 0x0a, 0x2d, 0x00, + 0x8e, 0xa6, 0x15, 0xf0, 0x25, 0xa9, 0x03, 0x9e, + 0x55, 0x3f, 0xe3, 0xd2, 0xa2, 0x5a, 0x96, 0xfa, + 0x8c, 0xd9, 0xaa, 0x5b, 0x79, 0xa2, 0x31, 0x9b, + 0x14, 0x51, 0x29, 0x96, 0xc6, 0xec, 0xa3, 0x56, + 0x15, 0xd9, 0x6e, 0x73, 0x28, 0x34, 0x99, 0x1a, + 0x6a, 0xcc, 0x29, 0x51, 0x67, 0xf2, 0x90, 0x36, + 0xa7, 0x44, 0x9d, 0xc9, 0x43, 0xdb, 0x1c, 0x13, + 0xad, 0xba, 0x87, 0x19, 0x6b, 0xce, 0x38, 0xee, + 0x16, 0xaa, 0xad, 0xa9, 0xe2, 0x68, 0x58, 0xd0, + 0xb2, 0x96, 0x86, 0x83, 0xe5, 0x54, 0xc2, 0x5c, + 0x2a, 0x24, 0x59, 0xdb, 0x21, 0x00, 0x88, 0xb4, + 0x00, 0x08, 0xed, 0x32, 0xcc, 0xcd, 0x6d, 0xc3, + 0xff, + // synthesizer + 0x0c, 0xe8, 0x22, 0x54, 0x01, 0x93, 0x87, 0x2a, + 0x60, 0x0b, 0x57, 0x01, 0x1c, 0x1b, 0x2e, 0x80, + 0x2b, 0x3c, 0x46, 0xf8, 0x5c, 0x5a, 0xb8, 0xc6, + 0x1e, 0xd6, 0x15, 0x6e, 0xa6, 0x56, 0xfb, 0x44, + 0xc9, 0x49, 0x68, 0xa7, 0xa2, 0x13, 0xa5, 0xc0, + 0x91, 0xd9, 0xac, 0x4f, 0x94, 0x22, 0x7b, 0x66, + 0x33, 0x49, 0xb1, 0xb3, 0x5c, 0xb2, 0xe9, 0xca, + 0xc5, 0x34, 0x7a, 0x9b, 0xa7, 0x6a, 0x00, 0x05, + 0x04, 0x6b, 0xb1, 0xca, 0xe4, 0x24, 0x34, 0x47, + 0xce, 0xa9, 0xb2, 0x91, 0x70, 0x5b, 0x3b, 0xa7, + 0x4a, 0x56, 0xdc, 0xfc, 0xec, 0x8c, 0x3a, 0x59, + 0x35, 0x8f, 0x29, 0xab, 0x00, 0xc9, 0xca, 0x15, + 0xd0, 0x80, 0xbb, 0x00, 0x36, 0x73, 0x55, 0xc0, + 0x96, 0xe5, 0x06, 0xd8, 0xb2, 0xdc, 0x01, 0x81, + 0x97, 0x9d, 0xa6, 0x78, 0x4b, 0xb7, 0x8c, 0x72, + 0x9a, 0xec, 0x3d, 0x5d, 0x2b, 0xca, 0xe9, 0x52, + 0xcc, 0x08, 0xad, 0xca, 0xa7, 0x4b, 0xb9, 0x22, + 0x34, 0x2b, 0xaf, 0x3e, 0xb6, 0x68, 0x89, 0xb6, + 0x7a, 0xfa, 0x14, 0x23, 0x8b, 0x33, 0xca, 0xea, + 0x63, 0x2c, 0x6b, 0x77, 0x2b, 0xa7, 0xcf, 0xc1, + 0xb5, 0x2c, 0x43, 0x9f, 0xa1, 0x78, 0xf5, 0xf2, + 0x32, 0x72, 0x86, 0x12, 0xc4, 0x3c, 0x2a, 0xcc, + 0x1a, 0xb2, 0x31, 0x4d, 0x9d, 0x30, 0x6d, 0xc9, + 0x3c, 0x28, 0x2b, 0x46, 0x19, 0x20, 0x82, 0x4e, + 0x03, 0x2c, 0xc0, 0x66, 0x80, 0x2f, 0xc9, 0x03, + 0x50, 0x80, 0xf5, 0x19, 0xaa, 0x72, 0xd3, 0xb0, + 0xc4, 0x6b, 0xc8, 0x81, 0x22, 0x3c, 0x1b, 0x8d, + 0x21, 0x79, 0x4a, 0x4f, 0x8f, 0x35, 0x86, 0x9c, + 0x30, 0x23, 0xad, 0xd6, 0x18, 0x4a, 0xc1, 0xf4, + 0xb0, 0xca, 0x6d, 0xc8, 0x19, 0xcb, 0xd3, 0x2a, + 0x95, 0x31, 0x25, 0x2c, 0x77, 0x8f, 0x5c, 0xc6, + 0x52, 0x31, 0xcd, 0xad, 0x52, 0x19, 0x6b, 0x47, + 0x57, 0x97, 0x49, 0x61, 0x2c, 0x8d, 0x54, 0x5d, + 0x63, 0xb8, 0xb1, 0x24, 0x52, 0x73, 0xb3, 0xe1, + 0xe6, 0x5a, 0xd8, 0xc9, 0x24, 0x91, 0x1b, 0x6a, + 0x70, 0x65, 0x51, 0x3b, 0x00, 0x00, 0xff, + // vca + 0x69, 0x10, 0x36, 0xb2, 0x5c, 0x23, 0xa6, 0xc1, + 0xab, 0x70, 0x75, 0x8b, 0x93, 0xfa, 0xa0, 0xcc, + 0x54, 0xd5, 0xcd, 0x6a, 0x5b, 0x0e, 0x55, 0x15, + 0xdb, 0x2b, 0xef, 0xb1, 0x55, 0x99, 0xec, 0x9c, + 0xac, 0x5a, 0x66, 0x2b, 0xaf, 0x72, 0xb2, 0xac, + 0xd8, 0x72, 0x32, 0xcc, 0xca, 0x92, 0x10, 0xef, + 0xf5, 0x30, 0x2b, 0x2f, 0x1a, 0x3d, 0xa6, 0xcc, + 0x8c, 0xb2, 0x70, 0xcc, 0x9e, 0x92, 0xbc, 0xea, + 0xca, 0xc9, 0xba, 0x5b, 0xca, 0x6a, 0x86, 0x21, + 0xf6, 0x1a, 0xcb, 0xab, 0xde, 0x26, 0x48, 0x34, + 0x62, 0x07, 0x60, 0x72, 0x23, 0x03, 0x6c, 0xe5, + 0xe2, 0x80, 0xa5, 0x5d, 0x1c, 0x30, 0x5c, 0x52, + 0x00, 0x88, 0x89, 0x59, 0x7d, 0x92, 0x94, 0x3d, + 0x45, 0x7b, 0x74, 0x81, 0x79, 0x5e, 0x39, 0xdd, + 0xd1, 0x45, 0xae, 0xb1, 0x93, 0x74, 0x56, 0x9b, + 0x88, 0xe6, 0x74, 0x49, 0x3d, 0x6d, 0x61, 0xac, + 0xb5, 0x2d, 0xfb, 0x34, 0x9d, 0xb3, 0xe4, 0xae, + 0x95, 0xd3, 0x34, 0xc5, 0x9c, 0xd3, 0x76, 0x4e, + 0xdd, 0x03, 0xb3, 0x57, 0x5b, 0x39, 0x45, 0x4f, + 0xc2, 0x99, 0x61, 0xf9, 0x14, 0x3d, 0x92, 0x45, + 0x85, 0x9d, 0x93, 0xf7, 0x40, 0x96, 0x99, 0x76, + 0x4f, 0xde, 0x23, 0x59, 0x56, 0xda, 0x39, 0x55, + 0x4f, 0xac, 0x9e, 0x65, 0xe5, 0x34, 0xdd, 0xb1, + 0x44, 0x76, 0xa4, 0xd3, 0x8d, 0x20, 0x6c, 0x59, + 0x95, 0xce, 0x30, 0x02, 0x93, 0x57, 0x55, 0x3a, + 0x53, 0xf7, 0x24, 0x9e, 0x5d, 0xe9, 0xac, 0xcd, + 0xa2, 0x65, 0x4d, 0xe4, 0xb3, 0x35, 0x8b, 0x56, + 0xd5, 0x91, 0xcf, 0x31, 0x12, 0x8a, 0x77, 0xd7, + 0x4a, 0x7d, 0x33, 0x98, 0x95, 0x61, 0x15, 0x00, + 0xe0, 0xff, + // voltage + 0xae, 0x75, 0x45, 0x13, 0x86, 0xdd, 0xa4, 0xd6, + 0xe7, 0x70, 0x72, 0x1b, 0x9f, 0x9a, 0xe0, 0x32, + 0x98, 0xa5, 0xf2, 0xa8, 0x86, 0x09, 0x57, 0x17, + 0xc5, 0xa7, 0x48, 0x3e, 0xc3, 0x4d, 0xa3, 0x9c, + 0x32, 0xc6, 0x31, 0x09, 0x49, 0x72, 0xca, 0x68, + 0x27, 0xd5, 0x64, 0xd6, 0x28, 0x7d, 0x9c, 0x12, + 0xf1, 0x4b, 0xa3, 0x74, 0x79, 0x53, 0xc4, 0x2e, + 0x95, 0xd2, 0x8c, 0x49, 0x94, 0x1c, 0x5d, 0x0a, + 0xdd, 0xce, 0x48, 0x72, 0x54, 0x29, 0x55, 0x5f, + 0x67, 0xca, 0xda, 0xad, 0xf4, 0x66, 0xc3, 0x28, + 0xa2, 0x96, 0xaa, 0xe0, 0xcc, 0x50, 0x49, 0x02, + 0xe0, 0x80, 0xca, 0x52, 0x1c, 0x70, 0x98, 0x59, + 0x02, 0x02, 0x76, 0x3b, 0x7d, 0xf7, 0xaa, 0xae, + 0x3e, 0xfb, 0xf4, 0xdd, 0xaa, 0x58, 0xf8, 0xec, + 0xd3, 0x77, 0xa7, 0x62, 0xe1, 0x53, 0x4e, 0xd7, + 0x83, 0x88, 0x79, 0xcc, 0x3e, 0x7d, 0x77, 0xaa, + 0xea, 0xb1, 0x68, 0x0d, 0x23, 0x91, 0x8a, 0xfa, + 0xaa, 0x31, 0x8c, 0x80, 0x46, 0x96, 0x8d, 0xc3, + 0xd8, 0x34, 0xa4, 0xe6, 0x54, 0x5c, 0xcb, 0x74, + 0xec, 0x1a, 0x2a, 0xc7, 0x01, 0xd3, 0x10, 0x05, + 0x60, 0x4e, 0xa7, 0x00, 0xcc, 0x99, 0x1a, 0x80, + 0x35, 0x3a, 0x02, 0x30, 0x47, 0x6a, 0x00, 0x66, + 0x4b, 0x75, 0xc0, 0x1c, 0xc6, 0x0e, 0x18, 0x51, + 0x58, 0x00, 0x23, 0x8b, 0x00, 0xc0, 0xff, + // waveform + 0xa9, 0x65, 0xd3, 0xc3, 0xc2, 0x22, 0xbb, 0x96, + 0x3e, 0x53, 0x8d, 0xb0, 0x12, 0x6a, 0x7e, 0x59, + 0x2d, 0xd2, 0x4a, 0xaa, 0xd8, 0x34, 0x33, 0x4d, + 0xdb, 0xad, 0x10, 0xcd, 0x43, 0xcd, 0xed, 0x8e, + 0xdc, 0x74, 0xa3, 0x9a, 0x8c, 0x3d, 0x32, 0x5b, + 0xc5, 0xab, 0x22, 0xec, 0x8a, 0xbd, 0xf1, 0xce, + 0xf0, 0x32, 0x27, 0x0e, 0x5a, 0xb3, 0x22, 0xca, + 0x9e, 0x38, 0x29, 0xee, 0x69, 0xb7, 0x73, 0x82, + 0x9e, 0x48, 0xbc, 0x3b, 0xf6, 0x09, 0x7a, 0x44, + 0xc9, 0x9a, 0xd8, 0x27, 0x6a, 0x8e, 0x34, 0xa7, + 0x63, 0x9f, 0xa4, 0x79, 0x94, 0xaa, 0x89, 0x73, + 0xf2, 0x16, 0x50, 0xaa, 0xa6, 0x4a, 0x2b, 0xb2, + 0x41, 0xcb, 0xa8, 0xaa, 0xa5, 0x0d, 0x5a, 0xb5, + 0xd2, 0xaa, 0xa4, 0x21, 0x0a, 0xd1, 0x6e, 0x2d, + 0xd3, 0x86, 0xa1, 0x55, 0xc4, 0x2c, 0xb6, 0x00, + 0x02, 0x13, 0x15, 0x40, 0x15, 0x26, 0x02, 0xe8, + 0xc6, 0xb5, 0x54, 0xc3, 0xb6, 0xb9, 0x7b, 0xdc, + 0x56, 0x65, 0x6e, 0x11, 0xe9, 0x51, 0x56, 0xef, + 0x43, 0x97, 0x9a, 0x26, 0x6e, 0x83, 0x8b, 0xd3, + 0x2c, 0xd6, 0xba, 0x0c, 0xb6, 0x6c, 0x91, 0x78, + 0x9b, 0x32, 0x9a, 0x3a, 0x45, 0xea, 0x69, 0xda, + 0xe8, 0x73, 0x8e, 0xb0, 0xb6, 0x6e, 0x63, 0xc8, + 0xbe, 0x24, 0xda, 0x78, 0x8c, 0x61, 0xba, 0x9b, + 0x78, 0xa3, 0x31, 0xc5, 0xee, 0x9e, 0xaa, 0x0d, + 0xc7, 0x14, 0xbb, 0x85, 0x9b, 0x54, 0x1a, 0x4b, + 0x8a, 0x12, 0xe9, 0x94, 0x6a, 0x2c, 0xd1, 0x8a, + 0x46, 0x88, 0xe7, 0xb6, 0x44, 0xc7, 0xe6, 0xc1, + 0xa9, 0xca, 0xec, 0x2d, 0x65, 0xba, 0x36, 0x2e, + 0x4b, 0x32, 0x18, 0x11, 0x56, 0xbb, 0x2c, 0xd9, + 0xa2, 0x45, 0x59, 0xcd, 0x50, 0x07, 0x45, 0xd5, + 0xa5, 0x0d, 0xcc, 0x62, 0xb4, 0x65, 0x8c, 0x1e, + 0x54, 0x4b, 0x94, 0xe2, 0x3e, 0x3a, 0x1a, 0x00, + 0xe0, 0xff +}; + +/* extern */ +LPCSpeechSynthWordBankData word_banks_[] = { + { bank_0, 1233 }, + { bank_1, 900 }, + { bank_2, 1552 }, + { bank_3, 2524 }, + { bank_4, 4802 }, +}; + +} // namespace plaits \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_words.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_words.h new file mode 100644 index 00000000..ecb80162 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/lpc_speech_synth_words.h @@ -0,0 +1,48 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// LPC10 encoded words extracted from various TI ROMs. + +#ifndef PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_WORDS_H_ +#define PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_WORDS_H_ + +#include "plaits/dsp/speech/lpc_speech_synth_controller.h" + +namespace plaits { + +#define LPC_SPEECH_SYNTH_NUM_WORD_BANKS 5 + +extern const uint8_t bank_0[1233]; +extern const uint8_t bank_1[900]; +extern const uint8_t bank_2[1552]; +extern const uint8_t bank_3[2524]; +extern const uint8_t bank_4[4802]; + +extern LPCSpeechSynthWordBankData word_banks_[LPC_SPEECH_SYNTH_NUM_WORD_BANKS]; + +} // namespace plaits + +#endif // PLAITS_DSP_SPEECH_LPC_SPEECH_SYNTH_WORDS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/naive_speech_synth.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/naive_speech_synth.cc new file mode 100644 index 00000000..90504c00 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/naive_speech_synth.cc @@ -0,0 +1,160 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Naive speech synth - made from "synthesizer" building blocks (pulse +// oscillator and zero-delay SVF). + +#include "plaits/dsp/speech/naive_speech_synth.h" + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/units.h" +#include "stmlib/utils/random.h" + +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +/* static */ +NaiveSpeechSynth::Phoneme NaiveSpeechSynth::phonemes_[][kNaiveSpeechNumRegisters] = { + { + { { { 74, 255 }, { 83, 114 }, { 97, 90 }, { 98, 90 }, { 100, 25 } } }, + { { { 75, 255 }, { 84, 128 }, { 100, 114 }, { 101, 101 }, { 103, 20 } } }, + { { { 76, 255 }, { 85, 128 }, { 100, 18 }, { 102, 16 }, { 104, 3 } } }, + { { { 79, 255 }, { 85, 161 }, { 101, 25 }, { 104, 4 }, { 110, 0 } } }, + { { { 79, 255 }, { 85, 128 }, { 101, 6 }, { 106, 25 }, { 110, 0 } } } + }, + { + { { { 67, 255 }, { 91, 64 }, { 98, 90 }, { 101, 64 }, { 102, 32 } } }, + { { { 67, 255 }, { 92, 51 }, { 99, 64 }, { 103, 51 }, { 105, 25 } } }, + { { { 69, 255 }, { 93, 51 }, { 100, 32 }, { 102, 25 }, { 103, 25 } } }, + { { { 67, 255 }, { 91, 16 }, { 100, 8 }, { 103, 4 }, { 110, 0 } } }, + { { { 65, 255 }, { 95, 25 }, { 101, 45 }, { 105, 2 }, { 110, 0 } } } + }, + { + { { { 59, 255 }, { 92, 8 }, { 99, 40 }, { 102, 20 }, { 104, 10 } } }, + { { { 61, 255 }, { 94, 45 }, { 101, 32 }, { 103, 25 }, { 105, 8 } } }, + { { { 60, 255 }, { 93, 16 }, { 101, 16 }, { 104, 4 }, { 105, 4 } } }, + { { { 65, 255 }, { 92, 25 }, { 100, 8 }, { 105, 4 }, { 110, 0 } } }, + { { { 60, 255 }, { 96, 64 }, { 101, 12 }, { 106, 12 }, { 110, 1 } } } + }, + { + { { { 67, 255 }, { 78, 72 }, { 98, 22 }, { 99, 25 }, { 101, 2 } } }, + { { { 67, 255 }, { 79, 80 }, { 99, 64 }, { 101, 64 }, { 102, 12 } } }, + { { { 68, 255 }, { 79, 80 }, { 100, 12 }, { 102, 20 }, { 103, 5 } } }, + { { { 69, 255 }, { 79, 90 }, { 101, 40 }, { 104, 10 }, { 110, 0 } } }, + { { { 69, 255 }, { 79, 72 }, { 101, 20 }, { 106, 20 }, { 110, 0 } } } + }, + { + { { { 65, 255 }, { 74, 25 }, { 98, 6 }, { 100, 10 }, { 101, 4 } } }, + { { { 65, 255 }, { 74, 25 }, { 100, 36 }, { 101, 51 }, { 103, 12 } } }, + { { { 66, 255 }, { 75, 25 }, { 100, 18 }, { 102, 8 }, { 104, 5 } } }, + { { { 63, 255 }, { 77, 64 }, { 99, 8 }, { 104, 2 }, { 110, 0 } } }, + { { { 63, 255 }, { 77, 40 }, { 100, 4 }, { 106, 2 }, { 110, 0 } } } + }, +}; + +void NaiveSpeechSynth::Init() { + pulse_.Init(); + frequency_ = 0.0f; + click_duration_ = 0; + + for (int i = 0; i < kNaiveSpeechNumFormants; ++i) { + filter_[i].Init(); + } + pulse_coloration_.Init(); + pulse_coloration_.set_f_q(800.0f / kSampleRate, 0.5f); +} + +void NaiveSpeechSynth::Render( + bool click, + float frequency, + float phoneme, + float vocal_register, + float* temp, + float* excitation, + float* output, + size_t size) { + if (click) { + click_duration_ = kSampleRate * 0.05f; + } + click_duration_ -= min(click_duration_, size); + + if (click_duration_) { + frequency *= 0.5f; + } + + // Generate excitation signal (glottal pulse). + pulse_.Render( + frequency, 0.5f, excitation, size); + pulse_coloration_.Process( + excitation, excitation, size); + for (size_t i = 0; i < size; ++i) { + excitation[i] *= 4.0f; + } + + float p = phoneme * (kNaiveSpeechNumPhonemes - 1.001f); + float r = vocal_register * (kNaiveSpeechNumRegisters - 1.001f); + + MAKE_INTEGRAL_FRACTIONAL(p); + MAKE_INTEGRAL_FRACTIONAL(r); + + fill(&output[0], &output[size], 0.0f); + for (int i = 0; i < kNaiveSpeechNumFormants; ++i) { + const Formant& p0r0 = phonemes_[p_integral][r_integral].formant[i]; + const Formant& p0r1 = phonemes_[p_integral][r_integral + 1].formant[i]; + const Formant& p1r0 = phonemes_[p_integral + 1][r_integral].formant[i]; + const Formant& p1r1 = phonemes_[p_integral + 1][r_integral + 1].formant[i]; + + float p0r_f = p0r0.frequency + \ + (p0r1.frequency - p0r0.frequency) * r_fractional; + float p1r_f = p1r0.frequency + \ + (p1r1.frequency - p1r0.frequency) * r_fractional; + float f = p0r_f + (p1r_f - p0r_f) * p_fractional; + + float p0r_a = p0r0.amplitude + \ + (p0r1.amplitude - p0r0.amplitude) * r_fractional; + float p1r_a = p1r0.amplitude + \ + (p1r1.amplitude - p1r0.amplitude) * r_fractional; + float a = (p0r_a + (p1r_a - p0r_a) * p_fractional) / 256.0f; + + if (f >= 160.0f) { + f = 160.0f; + } + f = a0 * stmlib::SemitonesToRatio(f - 33.0f); + if (click_duration_ && i == 0) { + f *= 0.5f; + } + filter_[i].set_f_q(f, 20.0f); + filter_[i].ProcessAdd(excitation, output, size, a); + } +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/naive_speech_synth.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/naive_speech_synth.h new file mode 100644 index 00000000..823a48b0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/naive_speech_synth.h @@ -0,0 +1,85 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Naive speech synth - made from "synthesizer" building blocks (pulse +// oscillator and zero-delay SVF). + +#ifndef PLAITS_DSP_SPEECH_NAIVE_SPEECH_SYNTH_H_ +#define PLAITS_DSP_SPEECH_NAIVE_SPEECH_SYNTH_H_ + +#include "stmlib/dsp/filter.h" + +#include "plaits/dsp/dsp.h" +#include "plaits/dsp/oscillator/oscillator.h" + +namespace plaits { + +const int kNaiveSpeechNumFormants = 5; +const int kNaiveSpeechNumPhonemes = 5; +const int kNaiveSpeechNumRegisters = 5; + +class NaiveSpeechSynth { + public: + NaiveSpeechSynth() { } + ~NaiveSpeechSynth() { } + + void Init(); + + void Render( + bool click, + float frequency, + float phoneme, + float vocal_register, + float* temp, + float* excitation, + float* output, + size_t size); + + private: + struct Formant { + uint8_t frequency; + uint8_t amplitude; + }; + + struct Phoneme { + Formant formant[kNaiveSpeechNumFormants]; + }; + + Oscillator pulse_; + float frequency_; + size_t click_duration_; + + stmlib::Svf filter_[kNaiveSpeechNumFormants]; + stmlib::Svf pulse_coloration_; + + static Phoneme phonemes_[kNaiveSpeechNumPhonemes][kNaiveSpeechNumRegisters]; + + DISALLOW_COPY_AND_ASSIGN(NaiveSpeechSynth); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_SPEECH_NAIVE_SPEECH_SYNTH_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/sam_speech_synth.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/sam_speech_synth.cc new file mode 100644 index 00000000..8b725e44 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/sam_speech_synth.cc @@ -0,0 +1,183 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// SAM-inspired speech synth (as used in Shruthi/Ambika/Braids). + +#include "plaits/dsp/speech/sam_speech_synth.h" + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" + +#include "plaits/dsp/oscillator/oscillator.h" +#include "plaits/resources.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void SAMSpeechSynth::Init() { + phase_ = 0.0f; + frequency_ = 0.0f; + pulse_next_sample_ = 0.0f; + pulse_lp_ = 0.0f; + + fill(&formant_phase_[0], &formant_phase_[3], 0); + consonant_samples_ = 0; + consonant_index_ = 0.0f; +} + +// Phoneme data + +/* static */ +SAMSpeechSynth::Phoneme SAMSpeechSynth::phonemes_[] = { + { { { 60, 15 }, { 90, 13 }, { 200, 1 } } }, + { { { 40, 13 }, { 114, 12 }, { 139, 6 } } }, + { { { 33, 14 }, { 155, 12 }, { 209, 7 } } }, + { { { 22, 13 }, { 189, 10 }, { 247, 8 } } }, + { { { 51, 15 }, { 99, 12 }, { 195, 1 } } }, + { { { 29, 13 }, { 65, 8 }, { 180, 0 } } }, + { { { 13, 12 }, { 103, 3 }, { 182, 0 } } }, + { { { 20, 15 }, { 114, 3 }, { 213, 0 } } }, + { { { 13, 7 }, { 164, 3 }, { 222, 14 } } }, + { { { 13, 9 }, { 121, 9 }, { 254, 0 } } }, + { { { 40, 12 }, { 112, 10 }, { 114, 5 } } }, + { { { 24, 13 }, { 54, 8 }, { 157, 0 } } }, + { { { 33, 14 }, { 155, 12 }, { 166, 7 } } }, + { { { 36, 14 }, { 83, 8 }, { 249, 1 } } }, + { { { 40, 14 }, { 114, 12 }, { 139, 6 } } }, + { { { 13, 5 }, { 58, 5 }, { 182, 5 } } }, + { { { 13, 7 }, { 164, 10 }, { 222, 14 } } } +}; + +/* static */ +float SAMSpeechSynth::formant_amplitude_lut[] = { + 0.03125000f, 0.03756299f, 0.04515131f, 0.05427259f, 0.06523652f, + 0.07841532f, 0.09425646f, 0.11329776f, 0.13618570f, 0.16369736f, + 0.19676682f, 0.23651683f, 0.28429697f, 0.34172946f, 0.41076422f, + 0.49374509f +}; + +void SAMSpeechSynth::InterpolatePhonemeData( + float phoneme, + float formant_shift, + uint32_t* formant_frequency, + float* formant_amplitude) { + MAKE_INTEGRAL_FRACTIONAL(phoneme); + + const Phoneme& p_1 = phonemes_[phoneme_integral]; + const Phoneme& p_2 = phonemes_[phoneme_integral + 1]; + + formant_shift = 1.0f + formant_shift * 2.5f; + for (int i = 0; i < kSAMNumFormants; ++i) { + float f_1 = p_1.formant[i].frequency; + float f_2 = p_2.formant[i].frequency; + float f = f_1 + (f_2 - f_1) * phoneme_fractional; + f *= 8.0f * formant_shift * 4294967296.0f / kSampleRate; + formant_frequency[i] = static_cast(f); + + float a_1 = formant_amplitude_lut[p_1.formant[i].amplitude]; + float a_2 = formant_amplitude_lut[p_2.formant[i].amplitude]; + formant_amplitude[i] = a_1 + (a_2 - a_1) * phoneme_fractional; + } +} + +void SAMSpeechSynth::Render( + bool consonant, + float frequency, + float vowel, + float formant_shift, + float* excitation, + float* output, + size_t size) { + if (frequency >= 0.0625f) { + frequency = 0.0625f; + } + + if (consonant) { + consonant_samples_ = kSampleRate * 0.05f; + int r = (vowel + 3.0f * frequency + 7.0f * formant_shift) * 8.0f; + consonant_index_ = (r % kSAMNumConsonants); + } + consonant_samples_ -= min(consonant_samples_, size); + + float phoneme = consonant_samples_ + ? (consonant_index_ + kSAMNumVowels) + : vowel * (kSAMNumVowels - 1.0001f); + + uint32_t formant_frequency[kSAMNumFormants]; + float formant_amplitude[kSAMNumFormants]; + + InterpolatePhonemeData( + phoneme, + formant_shift, + formant_frequency, + formant_amplitude); + + ParameterInterpolator fm(&frequency_, frequency, size); + float pulse_next_sample = pulse_next_sample_; + + while (size--) { + float pulse_this_sample = pulse_next_sample; + pulse_next_sample = 0.0f; + const float frequency = fm.Next(); + phase_ += frequency; + + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float t = phase_ / frequency; + formant_phase_[0] = static_cast( + t * static_cast(formant_frequency[0])); + formant_phase_[1] = static_cast( + t * static_cast(formant_frequency[1])); + formant_phase_[2] = static_cast( + t * static_cast(formant_frequency[2])); + pulse_this_sample -= ThisBlepSample(t); + pulse_next_sample -= NextBlepSample(t); + } else { + formant_phase_[0] += formant_frequency[0]; + formant_phase_[1] += formant_frequency[1]; + formant_phase_[2] += formant_frequency[2]; + } + pulse_next_sample += phase_; + + float d = pulse_this_sample - 0.5f - pulse_lp_; + pulse_lp_ += min(16.0f * frequency, 1.0f) * d; + *excitation++ = d; + + float s = 0; + s += lut_sine[formant_phase_[0] >> 22] * formant_amplitude[0]; + s += lut_sine[formant_phase_[1] >> 22] * formant_amplitude[1]; + s += lut_sine[formant_phase_[2] >> 22] * formant_amplitude[2]; + s *= (1.0f - phase_); + *output++ = s; + } + pulse_next_sample_ = pulse_next_sample; +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/sam_speech_synth.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/sam_speech_synth.h new file mode 100644 index 00000000..4f3c107e --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/speech/sam_speech_synth.h @@ -0,0 +1,90 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// SAM-inspired speech synth (as used in Shruthi/Ambika/Braids). + +#ifndef PLAITS_DSP_SPEECH_SAM_SPEECH_SYNTH_H_ +#define PLAITS_DSP_SPEECH_SAM_SPEECH_SYNTH_H_ + +#include "plaits/dsp/dsp.h" + +namespace plaits { + +const int kSAMNumFormants = 3; +const int kSAMNumVowels = 9; +const int kSAMNumConsonants = 8; +const int kSAMNumPhonemes = kSAMNumVowels + kSAMNumConsonants; + +class SAMSpeechSynth { + public: + SAMSpeechSynth() { } + ~SAMSpeechSynth() { } + + void Init(); + + void Render( + bool consonant, + float frequency, + float vowel, + float formant_shift, + float* excitation, + float* output, + size_t size); + + private: + void InterpolatePhonemeData( + float phoneme, + float formant_shift, + uint32_t* formant_frequency, + float* formant_amplitude); + + struct Formant { + uint8_t frequency; + uint8_t amplitude; + }; + struct Phoneme { + Formant formant[kSAMNumFormants]; + }; + + float phase_; + float frequency_; + + float pulse_next_sample_; + float pulse_lp_; + + uint32_t formant_phase_[3]; + size_t consonant_samples_; + float consonant_index_; + + static Phoneme phonemes_[kSAMNumPhonemes]; + static float formant_amplitude_lut[16]; + + DISALLOW_COPY_AND_ASSIGN(SAMSpeechSynth); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_SPEECH_SAM_SPEECH_SYNTH_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/voice.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/voice.cc new file mode 100644 index 00000000..dff22b6c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/voice.cc @@ -0,0 +1,241 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Main synthesis voice. + +#include "plaits/dsp/voice.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +void Voice::Init(BufferAllocator* allocator) { + engines_.Init(); + engines_.RegisterInstance(&virtual_analog_engine_, false, 0.8f, 0.8f); + engines_.RegisterInstance(&waveshaping_engine_, false, 0.7f, 0.6f); + engines_.RegisterInstance(&fm_engine_, false, 0.6f, 0.6f); + engines_.RegisterInstance(&grain_engine_, false, 0.7f, 0.6f); + engines_.RegisterInstance(&additive_engine_, false, 0.8f, 0.8f); + engines_.RegisterInstance(&wavetable_engine_, false, 0.6f, 0.6f); + engines_.RegisterInstance(&chord_engine_, false, 0.8f, 0.8f); + engines_.RegisterInstance(&speech_engine_, false, -0.7f, 0.8f); + + engines_.RegisterInstance(&swarm_engine_, false, -3.0f, 1.0f); + engines_.RegisterInstance(&noise_engine_, false, -1.0f, -1.0f); + engines_.RegisterInstance(&particle_engine_, false, -2.0f, 1.0f); + engines_.RegisterInstance(&string_engine_, true, -1.0f, 0.8f); + engines_.RegisterInstance(&modal_engine_, true, -1.0f, 0.8f); + engines_.RegisterInstance(&bass_drum_engine_, true, 0.8f, 0.8f); + engines_.RegisterInstance(&snare_drum_engine_, true, 0.8f, 0.8f); + engines_.RegisterInstance(&hi_hat_engine_, true, 0.8f, 0.8f); + for (int i = 0; i < engines_.size(); ++i) { + // All engines will share the same RAM space. + allocator->Free(); + engines_.get(i)->Init(allocator); + } + + engine_quantizer_.Init(); + previous_engine_index_ = -1; + engine_cv_ = 0.0f; + + out_post_processor_.Init(); + aux_post_processor_.Init(); + + decay_envelope_.Init(); + lpg_envelope_.Init(); + + trigger_state_ = false; + previous_note_ = 0.0f; + + trigger_delay_.Init(trigger_delay_line_); +} + +void Voice::Render( + const Patch& patch, + const Modulations& modulations, + Frame* frames, + size_t size) { + // Trigger, LPG, internal envelope. + + // Delay trigger by 1ms to deal with sequencers or MIDI interfaces whose + // CV out lags behind the GATE out. + trigger_delay_.Write(modulations.trigger); + float trigger_value = trigger_delay_.Read(kTriggerDelay); + + bool previous_trigger_state = trigger_state_; + if (!previous_trigger_state) { + if (trigger_value > 0.3f) { + trigger_state_ = true; + if (!modulations.level_patched) { + lpg_envelope_.Trigger(); + } + decay_envelope_.Trigger(); + engine_cv_ = modulations.engine; + } + } else { + if (trigger_value < 0.1f) { + trigger_state_ = false; + } + } + if (!modulations.trigger_patched) { + engine_cv_ = modulations.engine; + } + + // Engine selection. + int engine_index = engine_quantizer_.Process( + patch.engine, + engine_cv_, + engines_.size(), + 0.25f); + + Engine* e = engines_.get(engine_index); + + if (engine_index != previous_engine_index_) { + e->Reset(); + out_post_processor_.Reset(); + previous_engine_index_ = engine_index; + } + EngineParameters p; + + bool rising_edge = trigger_state_ && !previous_trigger_state; + float note = (modulations.note + previous_note_) * 0.5f; + previous_note_ = modulations.note; + const PostProcessingSettings& pp_s = e->post_processing_settings; + + if (modulations.trigger_patched) { + p.trigger = rising_edge ? TRIGGER_RISING_EDGE : TRIGGER_LOW; + } else { + p.trigger = TRIGGER_UNPATCHED; + } + + const float short_decay = (200.0f * kBlockSize) / kSampleRate * + SemitonesToRatio(-96.0f * patch.decay); + + decay_envelope_.Process(short_decay * 2.0f); + + const float compressed_level = max( + 1.3f * modulations.level / (0.3f + fabsf(modulations.level)), + 0.0f); + p.accent = modulations.level_patched ? compressed_level : 0.8f; + + bool use_internal_envelope = modulations.trigger_patched; + + // Actual synthesis parameters. + + p.harmonics = patch.harmonics + modulations.harmonics; + CONSTRAIN(p.harmonics, 0.0f, 1.0f); + + float internal_envelope_amplitude = 1.0f; + if (engine_index == 7) { + internal_envelope_amplitude = 2.0f - p.harmonics * 6.0f; + CONSTRAIN(internal_envelope_amplitude, 0.0f, 1.0f); + speech_engine_.set_prosody_amount( + !modulations.trigger_patched || modulations.frequency_patched ? + 0.0f : patch.frequency_modulation_amount); + speech_engine_.set_speed( + !modulations.trigger_patched || modulations.morph_patched ? + 0.0f : patch.morph_modulation_amount); + } + + p.note = ApplyModulations( + patch.note + note, + patch.frequency_modulation_amount, + modulations.frequency_patched, + modulations.frequency, + use_internal_envelope, + internal_envelope_amplitude * \ + decay_envelope_.value() * decay_envelope_.value() * 48.0f, + 1.0f, + -119.0f, + 120.0f); + + p.timbre = ApplyModulations( + patch.timbre, + patch.timbre_modulation_amount, + modulations.timbre_patched, + modulations.timbre, + use_internal_envelope, + decay_envelope_.value(), + 0.0f, + 0.0f, + 1.0f); + + p.morph = ApplyModulations( + patch.morph, + patch.morph_modulation_amount, + modulations.morph_patched, + modulations.morph, + use_internal_envelope, + internal_envelope_amplitude * decay_envelope_.value(), + 0.0f, + 0.0f, + 1.0f); + + bool already_enveloped = pp_s.already_enveloped; + e->Render(p, out_buffer_, aux_buffer_, size, &already_enveloped); + + bool lpg_bypass = already_enveloped || \ + (!modulations.level_patched && !modulations.trigger_patched); + + // Compute LPG parameters. + if (!lpg_bypass) { + const float hf = patch.lpg_colour; + const float decay_tail = (20.0f * kBlockSize) / kSampleRate * + SemitonesToRatio(-72.0f * patch.decay + 12.0f * hf) - short_decay; + + if (modulations.level_patched) { + lpg_envelope_.ProcessLP(compressed_level, short_decay, decay_tail, hf); + } else { + const float attack = NoteToFrequency(p.note) * float(kBlockSize) * 2.0f; + lpg_envelope_.ProcessPing(attack, short_decay, decay_tail, hf); + } + } + + out_post_processor_.Process( + pp_s.out_gain, + lpg_bypass, + lpg_envelope_.gain(), + lpg_envelope_.frequency(), + lpg_envelope_.hf_bleed(), + out_buffer_, + &frames->out, + size, + 2); + + aux_post_processor_.Process( + pp_s.aux_gain, + lpg_bypass, + lpg_envelope_.gain(), + lpg_envelope_.frequency(), + lpg_envelope_.hf_bleed(), + aux_buffer_, + &frames->aux, + size, + 2); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/voice.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/voice.h new file mode 100644 index 00000000..f6041318 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/dsp/voice.h @@ -0,0 +1,236 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Main synthesis voice. + +#ifndef PLAITS_DSP_VOICE_H_ +#define PLAITS_DSP_VOICE_H_ + +#include "stmlib/stmlib.h" + +#include "stmlib/dsp/filter.h" +#include "stmlib/dsp/limiter.h" +#include "stmlib/utils/buffer_allocator.h" + +#include "plaits/dsp/engine/additive_engine.h" +#include "plaits/dsp/engine/bass_drum_engine.h" +#include "plaits/dsp/engine/chord_engine.h" +#include "plaits/dsp/engine/engine.h" +#include "plaits/dsp/engine/fm_engine.h" +#include "plaits/dsp/engine/grain_engine.h" +#include "plaits/dsp/engine/hi_hat_engine.h" +#include "plaits/dsp/engine/modal_engine.h" +#include "plaits/dsp/engine/noise_engine.h" +#include "plaits/dsp/engine/particle_engine.h" +#include "plaits/dsp/engine/snare_drum_engine.h" +#include "plaits/dsp/engine/speech_engine.h" +#include "plaits/dsp/engine/string_engine.h" +#include "plaits/dsp/engine/swarm_engine.h" +#include "plaits/dsp/engine/virtual_analog_engine.h" +#include "plaits/dsp/engine/waveshaping_engine.h" +#include "plaits/dsp/engine/wavetable_engine.h" + +#include "plaits/dsp/envelope.h" + +#include "plaits/dsp/fx/low_pass_gate.h" + +namespace plaits { + +const int kMaxEngines = 16; +const int kMaxTriggerDelay = 8; +const int kTriggerDelay = 5; + +class ChannelPostProcessor { + public: + ChannelPostProcessor() { } + ~ChannelPostProcessor() { } + + void Init() { + lpg_.Init(); + Reset(); + } + + void Reset() { + limiter_.Init(); + } + + void Process( + float gain, + bool bypass_lpg, + float low_pass_gate_gain, + float low_pass_gate_frequency, + float low_pass_gate_hf_bleed, + float* in, + short* out, + size_t size, + size_t stride) { + if (gain < 0.0f) { + limiter_.Process(-gain, in, size); + } + const float post_gain = (gain < 0.0f ? 1.0f : gain) * -32767.0f; + if (!bypass_lpg) { + lpg_.Process( + post_gain * low_pass_gate_gain, + low_pass_gate_frequency, + low_pass_gate_hf_bleed, + in, + out, + size, + stride); + } else { + while (size--) { + *out = stmlib::Clip16(1 + static_cast(*in++ * post_gain)); + out += stride; + } + } + } + + private: + stmlib::Limiter limiter_; + LowPassGate lpg_; + + DISALLOW_COPY_AND_ASSIGN(ChannelPostProcessor); +}; + +struct Patch { + float note; + float harmonics; + float timbre; + float morph; + float frequency_modulation_amount; + float timbre_modulation_amount; + float morph_modulation_amount; + + int engine; + float decay; + float lpg_colour; +}; + +struct Modulations { + float engine; + float note; + float frequency; + float harmonics; + float timbre; + float morph; + float trigger; + float level; + + bool frequency_patched; + bool timbre_patched; + bool morph_patched; + bool trigger_patched; + bool level_patched; +}; + +class Voice { + public: + Voice() { } + ~Voice() { } + + struct Frame { + short out; + short aux; + }; + + void Init(stmlib::BufferAllocator* allocator); + void Render( + const Patch& patch, + const Modulations& modulations, + Frame* frames, + size_t size); + inline int active_engine() const { return previous_engine_index_; } + + private: + void ComputeDecayParameters(const Patch& settings); + + inline float ApplyModulations( + float base_value, + float modulation_amount, + bool use_external_modulation, + float external_modulation, + bool use_internal_envelope, + float envelope, + float default_internal_modulation, + float minimum_value, + float maximum_value) { + float value = base_value; + modulation_amount *= std::max(fabsf(modulation_amount) - 0.05f, 0.05f); + modulation_amount *= 1.05f; + + float modulation = use_external_modulation + ? external_modulation + : (use_internal_envelope ? envelope : default_internal_modulation); + value += modulation_amount * modulation; + CONSTRAIN(value, minimum_value, maximum_value); + return value; + } + + AdditiveEngine additive_engine_; + BassDrumEngine bass_drum_engine_; + ChordEngine chord_engine_; + FMEngine fm_engine_; + GrainEngine grain_engine_; + HiHatEngine hi_hat_engine_; + ModalEngine modal_engine_; + NoiseEngine noise_engine_; + ParticleEngine particle_engine_; + SnareDrumEngine snare_drum_engine_; + SpeechEngine speech_engine_; + StringEngine string_engine_; + SwarmEngine swarm_engine_; + VirtualAnalogEngine virtual_analog_engine_; + WaveshapingEngine waveshaping_engine_; + WavetableEngine wavetable_engine_; + + stmlib::HysteresisQuantizer engine_quantizer_; + + int previous_engine_index_; + float engine_cv_; + + float previous_note_; + bool trigger_state_; + + DecayEnvelope decay_envelope_; + LPGEnvelope lpg_envelope_; + + float trigger_delay_line_[kMaxTriggerDelay]; + DelayLine trigger_delay_; + + ChannelPostProcessor out_post_processor_; + ChannelPostProcessor aux_post_processor_; + + EngineRegistry engines_; + + float out_buffer_[kMaxBlockSize]; + float aux_buffer_[kMaxBlockSize]; + + DISALLOW_COPY_AND_ASSIGN(Voice); +}; + +} // namespace plaits + +#endif // PLAITS_DSP_VOICE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/Plaits.xlsx b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/Plaits.xlsx new file mode 100644 index 00000000..dd313a02 Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/Plaits.xlsx differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/panel/plaits_v50.ai b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/panel/plaits_v50.ai new file mode 100644 index 00000000..f4101f55 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/panel/plaits_v50.ai @@ -0,0 +1,1025 @@ +%PDF-1.5 %âãÏÓ +1 0 obj <>/OCGs[5 0 R 6 0 R 26 0 R 27 0 R 46 0 R 47 0 R 66 0 R 67 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + 2017-09-15T13:35:22+02:00 + 2018-09-10T14:26:26+02:00 + Adobe Illustrator CC 2017 (Macintosh) + 2018-09-10T14:26:26+02:00 + + + + 256 + 20 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAFAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7HqetXAv2t7UX1tEVlC2 wSQuSjMocRkMxQ9WPTY75TKwRy6+5ysYjISu7jw+/ex3+Wz0K3CCCPgGVOI4q9eQFOh5b1+eXOKq Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXEgCp6Y qtMsYpVwK9Nxiry651XRvq128l0Fuk+vLB60sZkBlkjEPxmTgPhlPLl7+2UEg9O/oXMgCOUufD/E On42emafNHNYW00dTHJEjoWIZuLKCKlSwJ+ROXuIVfFDsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVadEdGR1DIwIZSKgg7EEHFUMdJ0o0rZQGnT90n9MVY pqH/ACrb9HzfXvQ9L1H9X+b1OW9fS2r06+1cpHB5X8HLl4v9Kv8AOplmmfVP0bafU/8AeT0Y/q// ABj4jh/wuWjk4suaJwodirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdir/9k= + + + + Adobe PDF library 10.01 + application/pdf + + + 160416_proto_PRINT_Plaits + + + 1 + False + False + + 60.599920 + 128.500011 + Millimeters + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + R=37 G=123 B=121 + PROCESS + 100.000000 + CMYK + 80.868202 + 29.807001 + 49.185899 + 15.356700 + + + R=177 G=28 B=83 + PROCESS + 100.000000 + CMYK + 21.728800 + 97.680598 + 41.480100 + 13.714799 + + + + + + + xmp.did:69dde91d-395b-4419-a00c-e9ee83423106 + uuid:d47dc2d4-7d30-164a-bbb6-f0cf1229095f + xmp.did:0180117407206811822A8E0FA0EE55EA + proof:pdf + + uuid:a01960f9-5cbc-cc4d-9bbd-f299045627bb + xmp.did:0180117407206811822ACC6FA7222A5F + xmp.did:0180117407206811822A8E0FA0EE55EA + proof:pdf + + + + + saved + xmp.iid:0180117407206811822A8E0FA0EE55EA + 2013-01-22T19:05:32+01:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:69dde91d-395b-4419-a00c-e9ee83423106 + 2017-09-15T13:35:22+02:00 + Adobe Illustrator CC 2017 (Macintosh) + / + + + + Document + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/Properties<>>>/Thumb 72 0 R/TrimBox[0.0 0.0 171.779 364.252]/Type/Page>> endobj 69 0 obj <>stream +H‰¼—ÑŽk; †ïç)zÔî8Žíä–ÄBˆ `‹éÀûKøwV§NOWgu΀Fjëiš•8þüÿùöÇï§oø^N¿ýÝ÷Ó[9Åß…Oÿxûöû?—ÓßþóFZ/£è©Ê¥ò8IÚ¥0êéß}ûéígÿ3_XùDF³qêî _ÿåô¯·ŸO³ú/.ÔHOÜÊ¥öVO?þô× Õv:û›?½úwgŒa,ÅAóüðÖ;B39Ñ¥’$ÿ•?ú¢˜‚.Rš$_²!4éx®/ê\/¥šMAì=ôw™›'\#ðG{ † ùÿ0Ð|fµŒ‚bz‘:·Èø_Js§W<¶é+E"¢HXákðãÍCV8Fê×€|ξ1pŒùˆ9ËhñeÅÊ¥÷øŽb;1–9(&m#"ÇW;‚æ‰ÁBÉåaœ¶P$E ‚á‰G¶d"ø® õ¤ð–e#Dtæ_c`£8*á(‹‡Ø0Ž4¶/Ù󿛆ô5Ž@}^_2„ßÊÜ qtxÉ`7sÿæßb£=ö/×÷Òç (âÁ}n™ÞóéÓµ˜×c”åI%ÒSڈȫ¤ø°¿¿ýô›·?%r(oì[œ_7Óû+pHxÅÁÎts¨º!ÁŠZÄ('§Ò^*öú¬QRžö*”€Éä ~Ó;^Ù]£jýÇ4ü#ÕùÀ.ˆšÿÜM[Zu¥*±öQÍýhƒôByáC‡îþŠQþ/£`ëÈ£¦[ãâïÕ¶-ž¯åy¥a ϾV¬ž¶¢÷i]#ð§Éü„¡žYõ0Û¢O2PtÞüc<Ë“GXò0$´y7AºÐ|c3êíË™ÜAƒ|÷^9ýŒ/˜È=<ǯ +_z9xÙWÿÑ`A}G埞cî +ËÇSF jÑá8&¤èMhusIX°ÆMâPB]ù©ôÉZ“è>“o´HѶâßד¥€ª`ì GmEµ>ôS^wÆ*¼§ +§\á©¶5ªýZáKÓ­À-Õ·ìÕwMå-KyËÃò®´WÞ½§únGê»S®ïÖ?,p¦\àœ üq}ÇœŸ*pn®©À%øø¸À©§ +×Ý +×TáíVá­/%®·"¾Ö¸ìÕ¸¥ïKÓã§¥Æõ¥'Ÿ ){ì€ì¨Z® ’­×†ž,Ðâ€ø‰âì€êj,[ þ̵Až\–{ƒf 4hÏÉjx±@5[ :žY {bêb$[ w¨-H³ÂØlF¶@š-PϨ±Ü,g 4V ”%¤«âì€jv@vç€ä‰Ò;4¤‹º¿<ÔlŽ òvAþäÿÙÝA¾úîðYr–ËCß'gdrÚ.9}¼<¢Ÿc³Þ](„…¢!áëT-(r‰ÎãðÁ§ÎÎ%Û±a\ÇñŒ9 +¶Ü‰q õ‰cŸÃ˜Ã[›ëëñÚWì#¸¡Ùšã6‹Äà˜Zú’¯É )H]ñŽ%±ä) õ¾Þf‡™Ÿ1ò¹‘acl7õF…ˆ/ü›0¢Fê‚*“4 ÊÇ4åì(%ø¾n2U·Lˆ…7Tï¨!E-ê}“ð#sŽˆ/›í‰ûEWBs¯Ñ‹ê¤P…r£i¥°f +3„º@˜ížŽa{¡½ +!-Æp:›+„–!¬ „vƒ0Žá%e°¿aë—Qú£ûÖ½ãÓäøøˆã3Zߟí¾~3|5ù=^üž%¿W¾°þWÇײå Õz`ù:eË'ÉñÑÇGÙñeÃÇ÷†³w½h5{ºgöF2{²cöz2{ºgö®½êÎìÉâõ4y=M^O³×³dõF²zzÄêñ¯°zÕ¯4æÊÆ +‡£È*³é‹Ý^)hÅÓÐyÊvÂpE :†# è7ev?«3`×ö¤NqÁyâm蔚«½n­Üq £ÏÇjj¬£ÑxSò€þ|{“©&^þçi¤ÃßÕ›ààmŒx›óEcó_XLk¶‰Ú’¿ ±èKg?G- àu.ÖûðåkV?Ì9êÒƒmVß÷…*ÛbDów%Ž–æóÑ:¦ð¦…pG+ˆšÅÉ´Ød©›‘0” +OµÙDÞ¡ð†GM:},çhyH>ΠF£Âï¥Ïƒž#­OÃáM$"‰ãš†Jãml‰ã‡ cZžžFb"ñ]: Ò9f±âJ…='°¨†j›§© +ë?™:]hB'ƒé#aBSàg:·þYÛLnC¡›I@Ô¦/œêŽªx܆?ë@#¨¹Œã@žv‚ö´hîóö:/`¤N`/4‚z×di¹ôÃm ôÏ÷šûÀûd¨w}€—>0žôÎ} å> ÿ%¾Ü’$ •º•Þ@›á<ÜaO³ÿïA‚Hœ¼AtT͘ݟ¶È*:‹€#¹Ôvð.^Û€yèÁd÷Ù| yˆïm@wh› Øl m6`6P7H_66(› äÝâæöà¶™@ÝL Ý›@A¾èøßq·º¸+§¸Ëïã®ÜÇ]Ûâ®®¸+ÕåݲåÝr›w£ly×VÞmoân–SÜÍÕåÝô"ï–SޕHhŸy‹Ë¼íyCý +½ÑeÞè2o<†^=…Þ¼Boq™·øÌËúwzë)ô¦¶B¯l¡7¯Ð›þzµ_ Õ;Ì©‘ògM¼OIĶKáK„ƒQC d½ŒþjøØ…6¨¼Ä»LcäiÀ[éµN) +&¡/õ·7c×Ê4B©oÜ2Ê…S)Ð×TÖ|ë÷3²°æëⰰ₦ý”€‚Çh?¸™±pl>mÎëÊûÔB+K‘ÒžR•Jì®YÕ7ðU˜Ë]#7$x˜Î¥Lû@<¤®ÏX•ËG&õRŒ0‰O%ÁÜF¥ÄÏßy’kbr¸™~Ü¿³¿e¦BÞUëÔî°„4¢‰#xñ0lŽM`Ûu3–h\v¥¬hNðøˆóœ¶ ¿Ã©ÃÆq1ó\y16ÂPÖÆ+ãµçÂû éÊKXÈ1<¬!ŽÕß­¦?£󧲪rŽ$ƒ0qlãðh½1â"¯¡U\@ÁaóMUÈËåä˜ùprè,ò=ûnV‰áï.Éȸö;&Fùqíü?„ÍüP;Ëû°ÃæjgyL›{í|jºÅÍú_hú>m†vnú6÷Öß·N}ß:aòokçcܬOqso?‰›¿o?‰›?iå}딃XŸ2ù`©9ß~ù@yïéË6ˆ› Ä/È› ”-âcé·6ðåÉ»€=Ú@Ül o­Sí. 3m.ðev6¯Ê)G(¶™@hu+º¹@üryïµyÍ»€èn©yÈïm m6 _6`6ðÝ:í½ ŒDz°øeºÙ@y²}°Cï´ÖûH?…ûÞ™WïÌ®v¦­v¦CíL[íL®vÆcשׂwFùiïL[ïl÷½S·Þ™½3ùÞYþY;cóµS\íÔê{gY½3Ï@½•ζJ§FW:£oâJgs¥³¹Ò]ç4×9ó}笮sn•SWå,«qÎK¹*§­ÊÉß\S}ç´U9UŽ•3­Êɘ;+gÚ*g]•³¸Êy¼<ÞUÎ0zêExªqÙ‡ø"œ}.‹ðQ&á²®‹p©Žðt$ü¸ØxY€×ê÷€³NÀ ˸ç;מä à±µà¹^˜[ò´ ï§µ yhŽòì(7G¹4‡yr˜ËÂ\Ôq^^pNF/Ðëzv Û tÕE:i¸HWOzm‹ôd‹tÙH/‹tY¤87ÜW~Á¹.ιçÑç즗•¿â¼œ8ÑqÿÍ9Äê8·çqsòè@· K› â ´GG»Eoç²ì|ÁÞ6Ø‹ƒ½-Ø­n°×7°›ƒ=;Ø£ƒ½:Ø—”suÑnŽö³­{Ú½­§7¶®'[?ÞìÑÙú ÷†Ìu.÷°ï¬·7¬P× õüÊÒóBÇ}ËúÉÓóS·öCWßcˉó;W—#äå¹Dytyù¡£;ÈU6ȳƒ¼-=:ÈõhéÍYz=Rî o òqý¡K åq^žý³ +¿­ŽÈ_ó48Þr +#ºgö +¦õ¢ü`”œµYγØè&| ÆõZ¦4«l¸†w©Æê¸ûÝ–Ù߀kÿw”&Å3j ú•âð4•±ývâèe¼\VÜá,M0É.šÀn—#&¿Œei Òlì¯ò6ayã=òX×ïf@7ná”Àbª>´Ëì;AÍá½€%­Ì<8U!”TÈó« Ù)»Ô2. ÅyáÇ‚¯Œœ£#õÄ2”fÔ9:$¾ÛU’$¨# ðæG‡A{„Ìõûïг~ëlâ{âå'–xiãCèLè¥,N³(¦¡"<òZæ¡æÊ¹Y-³6Þo=Óþ,¤ùe¼À¬$'l´Õ+󧨪²Â&r¤K©à-ëð1 Ý¿–#!Ö‹ç"„7W®Bêê?£' kËø‘o*—1ÿ(æAÄ žô§NÙôWŽú‹»þÚÒŸÔ·¯À¶+0;šW`Ú(ï¨NÉ Pwf/Àìø%Áv’`ôÌNå¤À’.Ö+—AÑKÐ>Œâ$¸)PÓR`l»Ó/$hâ$¨»‹“àHkÏ´ä%X6 –è%¨^‚i“ ýBÉ)0n +ŒKÍ)0m +¬÷ +D?¹Õ ô¯¨ñ®ÕÌ îf`ò¬»Ík°x ê¦ÁìFà6Ë.Áâ%$ØNÌ»í(Áê%ؼ£Óà× T/Áô Áã܆`qt +ŒÛ ´»hõ^ŽS¦›ãýü–`öÌ^‚m“`=MÁú0ÓG‚!ŸE(^„ú Âú ÂìTXÅ«P_©páÒ`9jÐMÁÜÞh°’êaÖ·9´y Ú9‡fy—CËq Ö³ÛÃôA”÷w;ÅK0û1Xw V¯Áz¢ÕK°ƒh½¢¿Ž¡~Ú>} §@ÛXO +̲)°† í +´94{ý¯?Ûõ—½þÌ믇à“üœúä”BK½×ŸlúËN¶ôw¯¾ÒY¬ýEÿS|ØT›6ŒuRl#ᦒá¯_Á“n¡ø½ôµCeªxÍ¢ØfÈ8§.žŠUýirid|Á30î; v]R_Ìl…gÉœ£ _DrG-s[Vžç—ø\/!hœ Ê +ÇÊå.€}$îtQX:&÷…€gæŒÇyîxJùS¿p*ØÒ{¡wì#.£ ØVADfÂØÆh!èœ1aÍ:•)÷±mÐÌ%á$p8‰ &žGÇš[Jä&μl‰d#êÈ¥rQVðšy¤8eiøÜC¶i‰›26l67Ü݈‡ ndK¼©TÐ^Hç‰ÐOdž€‚dó”®¡ƒÃ¼E³ŸPhwÙìMÓWlÚ‰Msh¦#šÕ¡Y<šÅ¡™šêÑ Í¡_¡9œw¢Y<šºÐ,M]hvKˆ÷x¦ºñŸÑᙎglÏvÂsÌÀ‰§.<ã†gzg\|ªã3z>ÉÊ ¡é¡v@T™ãOÑ…Üá”x·W¤ý;þB -#ºÐÆ1‰10˜qpª/\̈.…“5p¼%ÞgætÒˆmZ˜cÌH` œNUp$(q +Ì.5Îì’`¿ ;Üq¹€búgÄ”^lاœ’Œ}acxI3¾à¿'怿¸Pö˜ç ‡>¶à`µpÒˆñ[Î=ó ¶»À'¨Bk³„u”åÊ #Ïð>aeŽGÑ¡…è3̘«)^!&DbÊüð?ø ‰‰¦q„ÎámvåØÞÛ.zMFÒqׂçTf¾ŠXÇkà3Æ(Xà놦ã-À{—CmW–H,…é.q°ÂDDº„ÉÂâÂA¿Õ M¶Ñý¸0sÞ‚´‘{û3õ/ È®9ì †r‹•³V,š,7¬Ì7VFbeFVFɬˆDV,±²i06³úÛ¯âç“«ÞkCk=Ðï±áN +wظLkÕ6Ø‘ Iµ³ã!Xko;Ø[qEwvxL@@B+_…¨¬{ =ÀIš™·aœr]#*o5Ä#’ò󙚣Q…æy§c½"lôPßµ3£kÑõœwÖ +)XèEÚ8íl-Ÿ\Q²XøbîcXʲ«•˜n=¥4¨a™¾Í J°PW"%ÃÊ9d­š\¯ß) J±FŠî¥§ÐN¾“c_8Œ(ë¼757âÁ›0?­Ýæ–B¯„.±^¯Ù•/~Qêpã„CV~.,+…t®›“ÑÀ…¡2;.xÞJŒ}K©G ;Eý1¹ÓŸ±öµ®²ó9-¤³^édò>Æ3¤³¥tÖ+m†t–m:GHgé¬!Òi)!œåQ8MC8[ §}‡SGH§]éd¥¹Ú¯„êL •MB5%Ô®„š\ Õ¾Mè µ”PýœÐšÚ¿jWBûL ½ÚC@%TB@ÇÐú$ ýs@ǵzà#¸ÆL®á"ÿrr#èã¡ ×h²×½ ¬ó¡ »™¾„£ßz‹Â1_ÂQߌ£ì ýãèÑÐû¡K2KÆQߌC’qÈqh4Ž•cFåxhý\£Ÿ×Ê¡”CoõÜ’ž·7=ïQ9$)‡n˜éKŽÝPûósĸ¬ŸÄÈø7ý¯úÜzû+†~;ÑöÄK{ãÅžO´[C·?1t ¼È³yö£¢?᥿ñÒž+úŸŒ³ë1†îùI‚š jAÑ%IPy$麑t}¤AIÒÛFÒûVÒ5zPy$éú{IoIƒ(E´Y‘D}ëé%X% jŸ=¿ù½§ÏdAò3Oï[O¿,h jO,Hwd—m,}BÇê“Ò¶•P íÛ€nóÙ6ùœ1Ÿödˆ\ÿ²ñôm>-ÄÓb<Û¥é3äs~Ðô_òI±¿ZC@C>[Êg –^B>GÌg™!Ÿó§sdOùßùl!Ÿ5å³þtŽl:~?GÎùO›çHöIF¼zenvæõëUQo™…Ih®KOÞHÓŒªoœ´("<Íz°´Â 8ºßÖ…Eö Ã Á߯`g˜§›ÁSxBkŸ÷@¼ʇ¹¤Øycë~<.&£óÜŠ ÏC§ßXÏ“Ÿ®=(SêíõèœéΕ´‰û†Q ¼FKgÒg­„ãl‚ ë‹{£àᨧ}iÇáã'Oóxg´[¯åNKuZBCrÖ¶Ê|ÅðóðYðßjØ´cò3ÑvNKwãèl>“¥¦¼.J,Ld}TsC8Xò‹¯ã00åþ$^fóuÔFCÓYBªnš߇o`a¥a¸Pº +¹â}VpŽeë , ^xc­ôKŸþ&Øk=PðŒZÍ·}¾áPJî¬ç‰ lÁôXEyøR´!jX¼IGAÕŽ#)Ç G`°ŽÉì%º)òÞ„Å™¢ViQ³ðÿºoßÄgâ‰GÁ]x‘²üUêŽeóËÖY…‰Ö¨~¸À—€ÆÓZyk=‹FÇwž sL}ý5^ø»7Þ)¯äñ®÷ëÜ0¬ á6ñaÕwoM(_Ê(c×Ö¾ÎR细_ò¡ê'¥Œ-€Xë¼ç,¨½t¿wˆŸXãƒÎ+¨/îõ1/yê‘,X}µúZ#t¾ƒÌîÕŸ ƒ ãX;‘/Í©öü¢ ù$ƒüž”é™ s:0Óp;ÍO޵¦>lôrcœ‡Åù8 +ÿU÷3Ç ÚdŽuF޽Z}s\2Ç2Ç cÍkâx)E丼q,‘cµÄqÉ™8¶È±nYÈ’@–7#Çø’‹cGõâX3Èš@~ãØÇ’8.o—È16#p,™c,)€l dÉ KY#ÈA¶þräÝ)€ld'ñ›ä’HÎ 'Ž5q\2ÇÇŒûÕ‹c?ÓÀ±&Ž%r|&éâXÇ%rÜfæØ[Î7Ç’8.™ã³¿8–ıdŽ]L¿9NËN“; +z{4Á¶ É’-¹oXÍ–|I²>_{´d½™_G´ä™-Ù¢%×hÉ}?¿Zž¼ªØ³ùµdQÖ(Ê%вlXA”-‰ò¢Lyì&X ¢Ü·ì#Q®Q”Går3ÁŽý›<¹ÞL°3ŠrÙN°7¢lw‚Ep}œ`%™rßL°›»&ѵµëô7hêÍcd6kd³E6KfS.8k€“85Â9"œ7lÎÈfÍljd³E6kfsD6çf†}C³D4õf†•€æZÐv†í͚МgØGdŽGdÎ@æÍ [šz3ÃZDóÍÙÔÈf¿aS›væD6[f3¢Y"ššÑ”Ï3ìÜ’©»¶0çæ†K]oUÜL°z3Á¶Û 6«ï¼›`Ëó Vg2ßö6ÁJ2ßžÌwÜŽ°Ù|íù뺶ag2ßò×FXIêÛÿx„µóÍ#¬¼™oRßr;Ãöù|ˆ­7Cìxbkb% ±åvˆµÛ!Ö~0ÄÊy/—,)r%ˆÎY€£ÿg=Léé[ÿ“]󨊀* iº'Y©Œ”\ææ×~bÇ ±íA¿ýVÖYÚ{­\磕ü‡"lþíû7ìø¦û½Ëþõ»]Ü?ÀÖ{ÏýèâöÃ;ÿF€­6®6Öþù[¿éâùèâö¯Øñ£üê›~ɯû›®÷>Wõ_ä×úók;W#›øž‘õ T¬…e%‹ô;gKÉŒP‡VupºCÄs,¢‹à°x cœ3H-M$“¡!O×SáFÍzÝ'i%ÁL“E’kÅmx2W‘Mi¶4»Zð]&+¯×¶áÁœšÛÆ ãèU·þÙ·!Û µ'žÌF%!è’M²ç€zô–BWEß+Ýì*j?­w&‹ŸNdèuÙ®€ ¾b¦ÇІŽÀ«ªÎüòáü­l@^…‰µE`jøß쨂¾ž&wQFТ1>Ú¾´Hù蛊ªÈìTÉØ„6%’Aiá^6^ë`çŒêYŒLÖÐÝv͋ώC@î/ü.)ͨSŠÌô)¶)qÿŠ8ç«8ÚoßÒæ~W›å&Îþçzg¹isßµ9nÚl7m®‡6ËM›í®ÍüÔfÿm®ŸjósJí¦Ïýž>ËMŸwއ@Ç;ÝwÖüŽ@×] ½Ý:^Ú~_ ý&Ïñg»És¿Ê³?äYnúÜ?Õ§¯¬ò~è3{ËnÒ}¤Jœ8³:ÃËÐÆƒ€¸ÖÙºµ9%E€„¸:Ó¢õŽZÍ?Ù"Ôm (HÙ³g÷‰xh¹xaóD;;WáŠ'2rÝæêsn¾‚ªãŠH\šHQ(dZ¦ú#aÒ¾LÕ¾­j¶I£’[™Òe«M–ç¸æ‘N< Ü>Á5ňViÚ"­å…’ðÁˆ„9¥LnÑA7?ñԺƒKi;´Mù7gÚâð!¢Ð¼a”j•m MÃý—™×Iõ"俱t;5ùªÕ»zßýzì9ÑÒïÓÍLÝŽ,CGO£\x£+op¢Šmm*K÷ „ÕÏ|Ò»kTý½*ÁäÊ:ñÞ‘œ‰z[æ0Dc–5Âm(ã¹o´Á±òãgpÕ®êG +P½"Jó…Â)eLªH9à…¾†yŸ›4ÝoϬCÿìlS’ezÏCOkÓwÙ3yá(™fhÖ¸Tp +t³oºY7ÝÔwu³nºiwÝŒ›nÆM7ùÒ$ò½næ«nÆC7¯Z)P[èf±jë†ûСÏë:ßN~ÎM7ó=ݬ›nÚÛº)a6%êÂîã1›éub™Þ²Ãw±eþ«k†q,½Û±+Î==™ùâÞaÆ%M³ãðØ‹<7Ó€òòê¥ÃWªü$A1´2_ß,T³y® ¾¿+£2›:cë5cmñ//¦oÙþ01-™w’vŒËÞù´MN~¤¾¹·qÀç:@T™(h ö;Ì9é,l¦@ „Χ12ø—dþméKCS¿ë%Ý»ðræÝ˜<¾¤º.ëL¼Ì–ÔT:\5̄ąö]\$.pP±Ü  5÷ÀQqŠBòÅæ’Og„Úãʲ7PÍGóe«²’·E8×Q•2Z‡úzˆPJ@2µ–ä“Ebçé9Ž“I³A=ƒ®èŠÍÀÈ'GášÃ5–ï›(TL™‰ìÃe&ˆXffÎpº¹¬¿ K8AÑ4.õ†4¢ËЛƸÞÓ 3Ó[×ñÉ0}®aN?_S¥‘¤ôã °ˆhÚYòÆ+W¢ðí²Ó# +Mr]öµÌ¬Þ—±V Üb»ÝI©£î0IÍ«v1öh$k¹7A!3+ +^`Aã!R?1 ¤ª«Ô6BKž?5à#¼Oo.uFç·UQdèL~f4VM†&H°ÓˆÑm¸p‘$-øgÉÉà•?>çË·öUÇiGå’c_SU¾±WñX,öp 7fôt¯NrÀÙRÛ.‡Žœ]í´‰+;èšÀ¼ç¿Ô(‡ch³ÚF–I­Z®€Yß¾ˆM¤Éž±ÓÜÖu&PÖ²<ÀñÉ®_€”ê•´ê´CTù,îÔ$#Oßr[!bÁ´Î¡t=jayÜp¹ùiÂÁ“¶m—jW– ýõÁ­ðÉ¥šœÔƒ…”Ôí%ƒnÒEuû±gظ|ˇëÕ’Þ1”iàáÝ/ü¡úÊ;c']¤÷–|ÏÉWmD/~Û b1;tOª–'Tå–cí²VëĹeº­l¹æÓÅ/è2³ãd`KK7›s4¾¬$r98MæÁF[ó<ŠÓC.Î!$0@qÆ„úå•ÅÎ ´÷’ö Ä9c_44L]I²uÊäZr¯èÖ}÷Æ‘«a={cw^%Q¶ ‹!½  „¥PÒÕ$‹\#D®ŸQ†#+ÒóªºË.P! +ŸŠ¼B.Ѷ裼K4)/˜<ýP wI«ÍÓI•&úαDý2OÒ¢¤{.í7! m‡;%S¤˜¯š z‹Ò +¡*Y„ÅÙ)n»I¼4L‡¯àÇùñ…±r(aºd·öïÀøD04áqòÕÜ“üòÜô]!‹Í #Ž¥qA»xi&¼Æ6®·`bÊ õ4¯sЉ^qèʳ’þ®y•4w#6zAÃôˆ¯\êùè ùŒt›ùžiœ‡u˾ǰ¹¹øL ÍU2ŒŽ¨.ƯÝ0_âsM–¡ +äziÙ¶å$&ü6[îʸ¯×䞈Ý8%d³O²`M n`.g›laocáSa™ÊpJô^"s¥—ògú7¹„§*§¿ÄøF°»Z]1áÜF¬Tqr’pŸrbÆÕh†âc)µàr½•’c¨Ó›u»yìµFû¨ ¼"c%TlS~ñ''¬å+q0b L»oï¶~Ñ’*…q,3¦‡Ú¡8lU$y¡.ùÜèþ?éU›îª®‚G´×#™Ñ™ÿn€XÁc¼]ûüiµM­’÷ÓåjáAËh—› u‡»îˆdîL§Äš>ÏDÈ6,«™ÑÅ&»œÝržÐ²[«§‚„hq|g7é¡mÄP1"ü + +,Ÿ +`Á1 +š FÆc ªm3Tãš~A^£‹Þ@&§½ùÕ5pML—»ŠD2àBðGˆâÖÎ:3Îzk³*:}Ôºàâð>"z¬žtD‹<\_}¾´å†Ñ9ûG@˼ +h3Ù¬À°°‡Ú®ñûg7ý_=ËYÆ…\%R@dÏáˆ>+V8¢çI?Ãèd渞*å’ñ® б‰êg£Ç‡t–(ŽÁ¥ +0$&rS?7ÎWºìÅ~y׋}ÍTÐþCÖU}xr69ŽM27¡\AZ–Œ¯,Möw·1ŒSpCr ÅÒ1tñÄN܈|ËLŒiøBqÙZßMÍ9».zmýt¸‰~ëôž;pœÖÓFÐ]pµ—ÕníluÒ±t­µ­ø³âÞœNÓO§4‡ˆµÖ¼Ð]ô7 qá³ÍyÍXim¬ðwÄìßk'ÖXA–Ó7Äóö=<ŸuèOÔH{è0ìØŽP’ÏTΩ^2ÿ™Òúè‰#37Z|À ‰9MR}@:ãÍ +ÇJà ([B€3ÌÀ'Àza´àhO½¬a¬‘x‚îh;ŽŸ©ÐÝcžáÉ*.Åþx+âåÉB؆$t©B7J[çXq¡ÏË ¿™Æ{™¢7aCä®mvç<çôqD;[;³¾mó[äŸ@K?à<wŸ8ñ…ž æÄeFóŸa™…üyíÔ®¸Ï¨a¿ç0#ÛÈyf 2:Ž!Ø•ÑÓ›eŒy¹ûˆŠ­Úݵcä"Q?[Ô²R8 ’”MRÒV[…P<ðôêO,ì¥æÀ°—lÈ’»¦Ø‡ËûŸÏ­í ÷°<§]W⊬!¤p„;µr#Ý\öÏ¿‰3¬5Á†8ú-q2o(óF+o4óF3o òF2o(ñ&RîÅʼ¡LzaŽ&æð s2qäoˆC{âง¶Ä¡B‹?‰8üJIÄñ±&êTæôÌœöœ‘˜#˜™Ó s0‡qZ%m‰Ã•8Ä/̑ʜðÄsZaN¯Ì ü0 s`Ã/^ÏÄ[âP%eæôÌœ±gΞ8œiÃ/´ÑLù–6#ÑF mFfdÚŒL›™6¼ç Ÿ¼9 +edO²§Ì(ŒÁ̘ίŒ¡oÓ3cô…1”3¾cŒTƴ̘–3nŒ©^#¯Œ/Œácô…1´a ·ùÀóV&>&c´Pæ0z€:c¬qÎk‘¼”™pÙ“[„šwž^Í!@^ÝZ_ó¦eêàÀ_5Óœ=¢mt.Z-mÞ9¹ 냭ËTí•fv"Ãëü1Ú!`ü¡µTãÂ0ôÛ¡ÕªºæÞk÷>ÐÎâyd}¢Ê£°a~Σ_…“ϼâ®M’½âóÝÊ]ãIâ æØ®£ÙŠ,0·caÞĉÅû8òœ; vDÌc±o¬UÙÎÚ¡ÿ՞ݙ5+2¹Û´LÚÄe¾O²ûèTÙ~n¹ŒÍú5×Ð$ž …|f‰íÛ9&îqþÊ.m«º mÕ„™0‚•0£ÂôB˜±‹S:-{úðseÀM ‚R(U†Ô ªTRœ’§Æ¦/PÉSòØ<_JS_€¨°xNTJ%QéC¢ZÎQbÕß•£–L¥)Sé®8äæÐS¤)RáÅAS¢’mqçHU‹CÛ$*Ù4‡—@W¢r½^‘ª•H%¿‰T2%ᘃ~zK@× èZªaª}‹tz†:¨K‚:&¨súHPo_t‡‘éx!½AB:d¤s:}Q¶ §'r~.ä‡n@Þso”ãå-¡2ÊsoàÈ%|$s9&”„rÍ(/½.”SA¹>¢Üûˆó6¨ëSòý;7ëó +î;³–cmt‹lÆnÅ6 Ooá[L§Á¸ï`[öæÛƒÚ›9ûAüDc­FšRu=È£éY‰ÃLÝt=!EÙž‰{¼™ÈÞc©PøõˆÄtx’í+éúïzx^®ûù_êe‡ÂÇͺ½€ÐòSÅSc…_ÏOF›?LKV}­ÅHT1Qϵ“m݇'+ª¬ÈÚïº%öÆb`Ó‡( +1‚Ã9lˆä³Eì(^›Ç b)¬ÞK‰¯¶®rf®ö9µ‡%œEŠ3%=^$Fö„l'¯`h³¦A>qK¥Çz¥(;‡ÃÙvbU¹®ßvX‡½wãæ\;ÉK¾öˆ {¯±I="Zo±ÒïˆÀ«™!±ÔѲ2Áº5_+ä€0yµŒæ„½ÇZ¯U "~/PÇ¢¹vÚoOZ­_PPNüÛÞóˆqÞ5NÿoË1Ü‚ÇZ +‘€(\©n§ͺ m4 níÔÉ"0n" YFqVD@Šô›ô,1ÛS´ŠÀà"šD ÃM8‹@¹©€fˆ^°SÍ* Yà¦#k€ h7Ð,‚Y‚æI¤ˆÀ(" 7À¬ ² +HU–U€² V8ª`Q½)A/J Y V%P”³ V%h””@Šh‚@ÊGF‚¨k—FN!žB P„ƒÈ!Ð"7%*JÀE zU,B0^„  ô‚Q„€v©—çfL8ü—z)õŽ+õŠîR¯hн¼kx ÿ©áÉ•zUwô·±žcoév-Å^Ñœ{ùʽ‡PBo¿B¯¤Ì‹Ûf')ôê.ôJ +½ðEèÝW;M©KìåM·ã]·ßt;ŸÕcêå+õÂÿívl&5dãwÙîàÍî(Ù]¼}ìN^3/»Ó7»#ÍvÇ7»Ãïí®f^-vÕîªÛAv»8»ÜŽKæå×ÌÛ³ßQñ;ºùíC/¶›ßõâwRü^ý.Û]±;~±»cŒ}î•×Ü[ÜNû/Ünn‡9÷r±»^í®¸”ØÛonWÌ®„^½…ÞQ¼®¯k¯^׊×ÑÍë ˜]/f'ß›]ÛÉÀ¼?“ÑoboÑ~Ó–co/:Ðn:Pd‹ ´› à>õ¶› P‘‘eo2Њ Œ7´|tà-ô¶"ò½ ´×ØÛJì…רKEú« @–êY¨êeÀÿ±^Ùnã:gÙ@ú ’ëéiïüYÙ"”'µ_~Od˦e¨ R‹íÕû:`—:PShߨ’êÀƒémßp½=¹Þ'Ó[ûƒé½O… ] +<˜^Ï…@ÆC!°T|¤Bà©´;×ÛùÒõ"Ïoï[`3PÃàƒa ‹„“ëø¨U^]ßv·w˜åÉC‡C_û¸¶û‰AðF2æazá—*]´0é­ +Üc­lf‡Ï(aÞ.›aÑ·³A@ÇélXÚ—Zh•gçcôpe%F,= .=ÀNÚrcˆð‡…~ÅlòDÖIY ;¼ ¸Š k¬†Â! +¬vÁ Ã-–ñÌÕ0H:{ä¶G‡„‹à¿Æˆá¬uexØŽ£”H£`HK¸¤šì%Î'‡ùáë™—µÿÆH¦_A}f}¹¿yØw}¢ ©wЬ˜Ž¥È¯¡‘š~Bã– ‘¾AÓçMÍÐÈnÐhKÔÜA# šÞvjd§¦&jÜ6jÂŽ¾¨‘LMÝ©±šš¨A&~§¦Ì 5vOMÓLÍÔšºA3[†Æ43A3/Ðh‚Ævhâ»74elÐŒ¹C£;4½ÔÔ¹S£™ߨ‘{j6hB¹/h$Cnú &hÆš¾Cã;3C23¢;3–˜¹³êuý× 0í¦ËxÏÀ̽Ë|ÚdÚÎ˸ãEÆŒf`R›Ùy±ÌK߻̎‹f\lÇÅw\Zn2ºã2^MF?ÇÅæ¥Éô;\4ãR.=áâ\jÂ¥þ=¦ß6™–qi.;-õ¶Ç„p^¸XàR_¸Ø.ý‚‹§Ó/O-¦&\ü—%@™w¾¬îÄÌ[bT˜¾3w[¦·&µ˜–}™ìÄØŸ sñesG¦èËæg¶¬?Ú²¹Û²ù12íùCdtGf$[&2º#3wd쮿$b¼\™=“€‘oó SöY™kZú<9¶&þê.ØI$õH¼M}z´Ÿ\4â‡0{Øç‘úî±O Ž4ê† ¿µ~­DÜÚ±vÄ·£1%*Y1–-µ/Œ•†ê<4¢Üᯓ'±Öí=øðã°á#>¾ô"±Öâ~†&$¦‰ Ûë®¶ûe]b ÷Ù,<^ØÏ“‘ŽÍØ+º£ÓåY¡/p¶4·ƒ§VÂ\…8j#½³³žiL6b/q5b£‡¡"U%ìF«'}‡byûÏW‘}ú¾9¶NÜå•ÂÄ{”3iqÆxžgøf˜`;âñªaãG|èZÁu, ë瑾°‡5ïDmÝ2ßY­=- \G¬õèwÅñHu=JåKBÇ$Ž„HÛQ}­s¾ÐP¦F•’(“ÐÜCñRaãe¸šÄ-b9"oü/-ÑÙúQ¥Ä-ÀéýçWøÙ¯16a¼¡¸&ŠeÇX=c®ò±%Œçãþ€q¿`ÜvŒÃ¼0n5c<5a<Æ~ÁØwŒkM· ƾcFêñ¼`ÜÆ3a,Ž}çx´Ä±_@öd¯ äžAvÛAÌß Ïò¨䶃teùFW¶‡®ìÜ”ëÈc©æÞ[ëCW®’íd¿<É5¡ì]9‘¬’-‘ì‰äþØ”Èv¹%’wÛ…ã™8ö'c²%Œ¯ÎÚ0ö‹³žGŽmçØ>ç8¦Ü7Çþè¬ûÇ’8¶Äq»p\SCN· Æ#aœ¬õ¸PìýØ.ÏD±?ö㌱>öcIײⰋìŒãõÛe§–Öx†ëz­DAã_[¢Ê×kÇG­òêXÚßcü*Lâß?„~ExŒu¦µa YþSÙª1ub¸ë®®¶xQ®¹RعG©k'kï+\xg,Ì…­h·…Fn+•†­®ë:Ýl/sÙØ»©å²ä±äÊo ß„‰?¿N½6Ä›uBû‚¢T7Š,«¨®»%O0€èÂM­·ˆ/Ö´Ž}ÌÞJ»â½¯x®c;v®3‚€VY4–¢‘êh‰œŸ€Ï¿D©X²['¯ Ôßñ~ x“»ŠÉrÄï;¾ ¨4¢„a‘­ +·âÍ âr?Œ£ X`Sø1ÊRòS8."]GÔÆÓÍ%ÇÇgÀc ÀÓP]"x…˜z„)Ôº¢7îf?Wxññ>Û©Ïžês¨lmI ² tÓgMúôMŸãÔgé»>Û>m×çúÉ©OÝôéšôéòÖg“MŸm×§½õ¹ë[ jI v +Tú©Ð:’Du“è¦Ð–j›B7Ž$Ðz +´ô[nú´SŸ-éÓßúl›>kÒ§¼ôisW¨í +ýZŸ’ôyÊsé­Ï~W>¥­\.Hf’§”H••9¢¯VJ“ …õCþ<Œº5ˆ)¨1ž`.ÂË@Ù0:ìÖÕÊî!!A#¸ŠAñzÇÖ˜hDc¡)­‰F­¾YËüùö2Ñ=ì-ò£á{˜ 7þ¼S‡á‘pËÐ{ÑÕ±°°Ö‘,Á¥ǺVH'Ò99¦Pœ·×ðG54igziƈ…JßSVüÑW;np Xº¥xàŠtå­3%6! «ñfZ¤œŽõ¤ñfâWeЭÂÄ…ÅÃá@O¥¾ÌN‰Ï¸„îm…䬣2egèÿ¯‡[)-6êaw'c„½ Ý/ÃIAÌ03†˜´x_”%Œ7­E|j|W!©LŒ4ly†S™µÒ¡ÒjöñZÆËÖ6¿D sÖô¯Kô`‘ç3f”¬ÊkљԞÂñmÉŸ©„PN|Ûú½°î +í’ðwkó\Ûâ„.FS9ò +£­…Ïe%gœPtågAõ‰xG5Ç¢N8:ߣ¬Òc433 +šf ºJUl¾£2vƒ\ü(‡³RrUôÖ&ã¿ÃíEë¦úQrŒ]¦0éÿ#¼J’åÈmè^§Ðä H‚Ã1¼òöÆ’#ì…Ïï7 ë×o«C»B%“I€À¦ŽÕ´ ñ´¡•챉°0µaòœ]?™²ÒìKG¿Ç~ýŽ+,¼žGÜ Qh!!uà·i3$ßlæF]!58®Cëc ÆÕ¡yjñg8É_öÎØœ¼ý'.rˆ£_»H¹r0í£É8ûq‘zšZJB¡¦¾e"õèÞrP½õGKS[LAåýÕðÒu„¿ìL¹¡jOõ‹&QOžæ¿CP6r×N²7Eg×Z6m‡àè‹D!Ù E{—…Ì,G¸¬Š†ú^§Ý²+C‚ß8"{Ó¨^Òk‘¡êµaÀìöœzDÃ$G fÑÝÕ7¹ƒOÐóei¢Ljû9¬í‰MÕsCoòý´S5°YÉÛ]!½¹T®(GÔ¯/Ay6»)W‘™-SÜ´?*»´´i×£i" _Çï—˜¼ˆF¹¡8èÕí¾ºéÂÙép¸¦Ìw»°2q·-)Šº1ø.5†ÍÐ Î6…åê¡)ÄJ»ÂyŒuC¶m +Úò:¡Ë— +¢ç.MãÖ ;'ù ë¨Pin>îŽ!IpGiR°…Ç#š!ƒk¥n[J‘p„Szdöe1ÙÕ™RQzᨠD±~U Ì6Šˆpx|;¡¯.zÈýĨ¾Â¶c‰´ÑSÌF6 Œ­;ìÛG¼³»2451’ëÓ•¢ÖyP¾æ§Fœƒ°µ›únmóè2'neºKÔðw˜S¯itN³­àé•ô-7un³·êÛ%W‘Ïö´KgŽÔíåZZÝÝÑ•y+¼:Ë52–å4ÂÍô|ŠÅ岨nÔŒåµ'µáð¬<×ê©hú,Œ‹úx¨Ž6enªfiìñF8âkí‚=×ã\ø9ñû˳d—¿*¨X¬¿Ö4¡dòS|¾$±¶H˜hÊ㊯­Ç%F»¥]‹Qä»fó´L‘Ú¼R>‡Ô5¯e]‘úõª›½¨W#á žéܼZki‚)›02¡{>ò.¿{¦|ÙHvµª,eåKÁÌU”ºqô'°Õ¾÷’Ù㜯$s<¸ª5®ê¾bZÀOcôý—¼I×DÉEyüN›œ§¦®°Ò\­õºq±³· ÿkº[~-ëÆ§„í%±u§ŒQø|5ç¡×Ö +÷›DK!_¢¸êÛliZÔ—·%l— +¦f2•°ÒSµõáÎy¥ÈÛæ<¬…¬AÛ·ÒD@÷ÊyмX‰‰€þ ÞjBé¥HD8„kxò_>¡9Â5Ls¤µúÐVZ6nÖÜÈGÏÔ°aß´dB3–%¡Ä‘K½çz\©Õ¹ªVzíZðË‘Þ!ЏSëFÉ™µ5FÃn°ï‚i Ÿ¢Rµ‡Mò˜>×–TÝ…sFµq¡{@Õr͆ÍBSãö¨2úqÀÿ9„Ä€à-©<‚Òg•gþéþœ!‹½Á“˜f‡Uý‰f"}´" Js¦g1c+Ã.?ªH˜qGšBrYæ ¯§†ó%³PZ—oyRÿÕš-ß°Ò3‚_óŒ‘~<Gï«#º´=£®ûÖ”iZº-?©4Ø»¦ñ¥VÊÌGð¨ÏvÓÓÑäïÓžv1½ôڱƱuW§{7*ÐÂÕÞžÝZ‡]_y/=z4é ¿ ¿»4¦¯Q}¾ý¥„³¢«h ÅZÊ{Ð5kÛᦜö¬%ûóÙ¶›óŠ‹Ã\É{SŽ­¨íšÚ„#”n&_Dkc(ú£m”ÒLuIÛ.Áunw¼™oT=ª磨®KUßh[+>Fdžƒ"h,6[¯âøúŸ¿ùÇë逴Ç)ÿðô¯š Ž×?¿ Ï,¼°„+eŸ–yöDzN½öœW2ºµÝÀà]ˆA\€§žúÙFûû{à…xߟ‡8‰é:¿=°@Äÿ¶Y6»hLjµ_â¢MPìß"fVþæ1ˆ4’f \¶~} þIïòþæxÞü7>2y[oÚ8ôêóVüíë¿ÞÎúM@¦ÀU7è—wxT+Úx°ÕJèŸo ÃlRM õOh­¬·Ió^÷਀ðÝ÷yo¿ó|çÖª,þñåù³+Äo£Ä‹ÍaÜ*t^èþŠåÓÂLgá¿5µmT".Äϵý‚ÄuͯiÉñÒ!½,§¡¶…ÇVߺ×2s„Cq\Ú6†NŸÝ)f¦œé¦×©lW©Iºé,¤Oc]§ä×"+CŒû¤û©Ö»b”½%RÔ¤.ñ{ß0]F9 p¢ë)ÓÒ‡€•B-2'œâ·a“à`عî8ó*Ð!΢q+I ¨Ló–@˜B +¾7tJÝsN' KI·Qá–ÿë¯t>•W¤•…\ÅÐ0o®sTÇx«ýíé·QÆO¼x%Û÷R…@“àÉO\>vRUñÄnÑO!è'óR~ÉGœ +™O^¢u¸Rš&šd#×é #×pZŒ äÙ‡WÊÃKäu89d +¿øYÊðBÀˆ©]Nt,®ÍÛÊæÚ‘>úé^+Üg xÀ„p.Éç‚Ñz¦J4TןˆÕøÏ¿HØ%æ‘gõ£-0ÚŽù‘[ÛLïHhã`²hXqRqŸn o–Š%ºR[¸á#ˆ³ø¤&Zp$ïƒkõÊ=kì0qÆ©è¢å€;Ó'h·4~"î˜ÓDœ× +n{¨™×­}¯ó:ÜvíóV÷j}ÿ²¤¾Eª$?‡>ëxÙ Z¸BŸ¥¨ Ô¦â‰=¸Æ;äÚ\ŽºŠ’žÄ ºõ‰pÐþZ:ÕÅ\ºU{@¹@AþŠˆkz=#+À[ ï +¯±Pš£è,g*ŸÅ$7b§é´[k‡ó¤PâÚÔ„¤ºZyº&ïûþåè‡Ùú‰XR¹â:×ÓdtÚUÔeRwY\€o‚´ð7IáFl¸Œ®hÂv‡¢>S¯Jù#fA·’T„~À¶£ieö–àñâµüÙ…~!Žúˆ P{jly–ãwøþàÎ2¶•ÜçÔ· òÅÅj,ûùå"¯øŠ´¡Ý€଼Ë5Ò1™ ~m“×éXHmq'‰|˜cÍwŬˆ„·SXø}]ð­‰ ªµë}KeÁð!˜ØýÕ¤’nU90ÃYõ~.瀛 êŸx%ø‡ü±¼—«$¸Nr!íŽ×QÚº[œ ™©Þ"X²õ:ý§Ž ªåñ‘@žQ:\]»uµ1 ÕoOR â¸Ú}«çâ”Pá +?}Ö!„ÁfI‰†?røõƒc¸œKà‚¸œ8Ü›îMï÷úƒ"*hcïG¦Ÿ+ånؽcÝáܽ´¿ÿ ´Ò‚0¦—· ¿‡Ï-/tÜ«ZRbŒ¯‚Q?çPq¹ÞY^½/ÄŠÄϱnôO÷?ªË9²¢¾VÑè‰Ë?¹Œ·†Ž˜£eÌþ—'“*•¢ )qIâC0Œ|= úÔšýMïâ/‚ÞJÔqu‚”ÂJ c S:ÅúÇDU¨ +#î4Æ.ÉË»³ïÁÐòq½OªÔô¬—À¼$zeW1\驯]ïÁÆú±IÀØä­IÝQZ±zÆØU¯ör¯‚n ‚‡ÚÝp®Ø¾üú Âå{Ù*³O'íà¤iÝ%¡…BèpÔŽ© *ì…ºwËÑ{gõ)þÃ_Qx’–‹µxUÛŽÃ&Ró=D mûÜïÕ¦mعR»NL[޲¢=üZêŠË¥O` Ý©ú8§TRh‰ý¶‰nÉæÀñµ|·4“Ȳâɬ{ÒCïê™Õ+Ä+Á&aÄ÷%˘n3I + ÇŒgݧÐÚݳãØÎa­|Çèg µZ\èÔg>ôP²³)‚²3'TÕ:Y µ£•f]$=ò¹UˆÛàr ˆB~»N{ÀöH¯dõ®9•òÞù>¬aÆj\©ç#« —§S6±!cžÀSwL]3¶÷¾åÖBÛžMûòrô=8{Ð~´Ç#Ë'‚ÆK¸ï6,Ü‚ ‡‹¼óndóë8˜ÎjA?Êä4ìçbÓIP»=÷Ä+k|Œ®Øº{Ëé®]0è .:;¾«q€Ôý•kfù©±®NGêì«]à +[åÁ#5¥Ï5q(²U+A¨7LÌUD5þ½é=ˆ>œ²Óª‹Ú§•Íư‘ÏŒbøAö´êúme›/ÁÃ@+(C›Š]·jó‡àÚ×4:[£:H›Ž¦1pÆ/^̇1ò/Á#›áMV' ++{G–:·Ú#¸KŽâ3‹›BC9²Çg­x9T©š¤1x®!Œ)¨¹ah¯ýŒà=åô¾-!]ß°´o$€¤J뾨ëv·@7ñ×Xˆ¢eS;Ì#8k¢Ð™+µ¹„ÿ(ÔãÕ"KÊië†gެîÍšº5Ïà%Žbù“Ï„£a.ÜpSQ/ðÕ‡ÿåá{¬§òY¼ MŸ¶Ò1‹€ûña´½¿nSzÜ×!`k!¡¿ è´ y·»~!¸Î.+Ÿº¯“=ÖÒH)bš à²Wjü¿b²v¾ÃýŽJ’I$×D:‚=û[µ£\uîìì[bøæé@Ä6Ò¸?—íY@zøæi9ó޳^¯¸^j8ô}0˜üýÎìí²H0œÛ/uа\ý‰¤mߎd›C€ŽÜ¶^þ¥¿ï›³#XÓç/?gŸ3ý:óçãÿýøçãÿ¿Ê¯G?3®¶Ñ6½q%Õç_>?~?î`éпU:(ôîíWÈð+Íü–ué”ÿçdPáT½ç&s{*—çùr^_†¿°åKϹ«ôCö}驨ı¶ À Õ‰a +y ÷ë6š÷ÛºÖ÷|öÒ¤]Qà—ѳt²y¬x: F]õöêÖ­Vš0^tZ¼¥¨A8×›÷Õ+™<•'Ë ûc¼ŽÁG,ŠãyO„ïA²*¶TÁÁáöîðw8â" =U¢ã>×ð÷¥\a«G¿¨fç¦]N +ø¾ ¢0w™UîZÊýu=%ÏÖJ÷¹……+O½O×Á:ƒw}‹É[Älíá ñM¹ôLVv£yü| +& ¹Ÿn Z"O7Ôni„heü­ž§gmÅUú·åô&*¡EÎ…åD¢¹™šÎRúã{ƒ +Ó§¯ÜLñ>l?‡prãÀ§îcO¿Þøz¡Õú:îRݱMáö¼ØÜ‹©;g-£QÍhsæãœ÷Z×Ìö]|ëÇÏç¥÷(jy¿4ÜîOÓ/5ÓC5$/Òü mW¯t²z¿Ê¬Ç\ãJ\(“+Úü@‹¬š¦ÆÅ[Üͧ3Î×µ­“ùÂ=ÔéSlpÄÍšÐl7?V½g¹ýSdcIqß“!ØZËòsýv“,’\qÓ$èš„—îW$¨qrw¯51}Gè=‚Z-jñYÃÛ?t?±.Ù‰ ±Íp¬žý¤,‚¶ÌM +m©w»‘+ +å¼ê†¥‚9¼¼Ùñî¹ãҜШ÷pÚS [d’ãò‚ƒ‘ã{ùùp¸ù5h¸o{­ÊÔ› sGІ x_¿{v?)mKi¥×ç°ÔÚöõ¦÷0jùN¡)bU½’OÕ¾D;9AVæ…}Ÿ´ø9laeÿó˜$§Q@y°>A¨ÏË?™¥m*˜Kφ‡ƒWH0¨Ͱv—’å}úðòJi\Ë2eM¥ð®Þ4Ö®mžðfعÇ×þòõ=P©Ê9^¶›ÝOKª‰4°Sð9ìXûëŒéDWèÂ}®Ö‚u„­Ú:ÆÏ63Ñ0Û\ú ^÷BÆ1“óR…&¶ž´-‚;$¨Qrü3ý½ô(oËEÁ¥ [FV/‡{»S²²Ý¯ÃÍõñŒñÃÛ÷xà]usþ»ÂÂÍRI¤Ï¼p%êeqávq›_gŒ™3. 8¹È–ì)JxŽT¸ryJî4·]’,?où{‰º?9£œ/ÞoÆý9÷ ¿|N­©xO`Ž.©àØTêÝ0 5~Ôý¥t]OŸ[%i†Þ< gЊRn#8DK Ã^ ¸qp¥’炼ê?ÞÐ)šŒ¢5 ÕZ…c„vnL›e})õ‘Ì~r {Íßñ5¶%i*³A¹7dbg$-)ÇžÓk„µm=CßmBTû{<•UWg'%ľ|ç_~ÿŒ 'Œ»A%`˜ñ!-²÷JÀf—pœ@áê„fvÎðµv)gR_£Òõ\F¸?A᎑{]N]ù¾n_62¹Hbw…ËuËMXé7pÚ‘þÒ·ÒQú­01ªæÂO î)©Ôël¾¬¿)añú¹%îY?¢ò7Žý¹WU¼ŽÛ®¼À^.žÁ#è™÷€U#™}\n𯭅šf ¦?ÍŽa þiÆ\M hÆóR­˜½gG_)»eEÏeÍ»aÜ ªÉ'’å¦Sا:ê™)5\_;f¼ôÄGÑpàÀ‘䨼L)Ernàjü~ü¿ãöXvˆX)³•ÊâHïè46²Í+¯"±‚z¶kæ(Õ’íwFÃ_Œí ¼K8+íêsƒVioò¶eu¿2ð¥0UßMðãŽwÒÊÜË=¬•R²|U+)¥eĦVëUê~W’5®N÷v8R¢Ã­Ê·×oA‰›¶­=ž`>-™´)W&é#´½î×t-¢*æE$¥®[:°€šÊ}F1ë\Çô­ +PÃó¼·Êõ/×e’$ÉŽ‚á}ž".PaÈ5£ÏPf½éz‹^öíøABei–á¸k`ø„òôÞÏ<ÞcÂhÐz†ÍG¨Ë×ãkävkÖð}½°zz"Öq­Å• +¬•3¯ÙiáÎVy,\oÄ0âðA6ÃÌnÐAæí¶êX8JìÖ-éÙë;¿¿Ú~ã²U³&SÜfÆšÉ8ÌvO ŒðÛ.s²Ê _OËh¢·ò’˜àÕµP¸àAø¬ÂýèÐ +y‘ ½á Â)/f<3¹° õžðô`3|Õ-ÓÛš _zǦòŽÿ$l±Z‹€¿nAò ¬iÌ <ê›—¡Ã‹òÙÞø‘tg¦Û¹»þ¶ü÷Ï¿þõóß}ý£ÏÔ Y"#õ1—þþçǾ¨‡¿òž>¼»3Z>º*öãÍŽ?àzIJAþÿ÷Oy³‡a¦}ÃÛ??g‡ÜÔþt„êÿ}2.ù†ú;Úsêó‹|¹|•} ü‹¶F&ŸA{.”úÅ¡SìR6\µªXªÕPÓÅóvÔ¯¶ÕôX1O°¦gáÝóCµ¶{m\#Wl\>Ûg£øllÕzñY¿|æÑïG1„.í¹¡ØHµFõÙ€}#}F-°í*^[Åkk+6/¯M¬:«×fzm¯­Tn¯­ê5z>P +Êݰѡ*nTx»€û‹8 W™Kè*u;ÚÜÑy´Ñ£KÏ­e¥*~tø£@ +éB6ƒT ¤M! éâ°Zêy£H‡Eª0Ò¡‘*ŽtóH$")¤Â$(iSI–\Ò“+˜œ`R%“*štؤN +:é“6ŸT¥M(Déb”QÎ|øWB,ñJ‰‡Q®ŒòÍ(;£\å`” £\SãÉwrÌì¸åKÏ­ee”+£|å›QFùb”7£\åÍ(Fùb”±Zêy3ʇQ®Œòa”+£|3ÊÎ(F9åÂ(Fy3Ê£ŒòfT*£’Œre”+£|å›QFùb”7£\åÍ(FùbTœQ FåfT£R•èTFåfTœQ)ŒJ0*…Q)ŒÊfT.F%•ͨ\zn-+£R•rÿu‘çM~_åç./ŒÊfT +£r1*X-õ¼•èTFå0*•Q¹gT +£ŒJaT +£²•‹Q Fe3Ú*£-•ʨTFå0*7£ŒÊŨlF¥0*›Q)ŒÊÅhsF[0ÚnFÛa´UFÛa´UFÛÍhsF[a´£­0Ú +£m3Ú.F[0ÚÀ¨UëÏ×ÖZ¾ÆóùO©ÞéѶrŒõá1¼ã©Õ;Y›¦U¿Dan‹shv1 >ë~Ë©ÜíÔ ?Ç&-¸LÍð ²ç¦ÁÔç·c–tûD/ÉlÜëO³â‘Фù¡äðG×UÔ+oŠ“UdñŽWÏpz¢O›e¸__Bà`²åÛˆ`OVsgeúqŒÄ×÷Y¶íyLõØëÊS;UÂIèS> 4&xö㇣ÞðÍAMRì®5L0’-C‘g$Ë–¥X;{gyŒD>È*–iÜ!Šá«š°å½ÐVHÚ¶e1t!(tžQ!¹æ“ KY¾^®Ê3RT{iÏ‚ BÀV˜:í"›Fî¬yT ÜnǵÍoV“—4j9h?,S›†HðÜöC¸:Ü‚ÿüµ¯7Ò“ñ„Âoð*n~Øw'Üt†gŒ¦½íU1J­ñ½Ùuø£¿PJb”Ä<‰•8 ÃŽ¿°o »tû´Ýbv‹Õð]=cÏ7,~·nïÖ÷Ý6¼a1öañð}{XÜ÷è¾Wè{Õß{„Å#,ž1jƼ+°x„Å„X¯0y…É+†¯˜¾b¹&¯0™eÊ0Ó‰3@Ó‰4e¨ ±¦ 6E´w¸K¼KÀKÄ3䄘S2ê”a§Œ;eà)#Oz +52ø”ѧ ?eü) $€ +:ÐÁ€” P¨‘(X „ tp Ã%"(‘ d‚ +J*(± ä‚ ”dP¢AÉ%”tPâAɃN>øðÁ‡>|pòÁ‘ v2œ|ðáƒ|øà"'ì¤|pòÁÉïİ3CòÁ¡FòÁÉ'œ|pòÁÉ'*$|øàÃ>8ùàP#ù`ðÁÉ>øðÁ‡N>|pòÁÉ'œ|pòÁÉ'>8ùà䃓N>8ùà䃓’|ÈáCrøäCÀ‡¶³Oﮊ•ïúÅ +™ ä||ýäCÀG¬äêhA¤µ‚}Ò¢ç„^Œ†à›`üóÙÚàºõ®Ãµ¿z—ñ~§U½jн_—®<~ +G5RÆ^j5:WJQÿŸ¯¢½ûþÍg5ÅD«Þìi¬ W“Ë.Á·/Œ’euÐ_íõ¢h²Ï± +‚œ¦<¾)ãbB£|ÞÛ¦(ÃkmiVsr½Øž-”èvJóÛ¨³Æ½âðÍÆãI­²Zy«¶pùö´åU³÷3³³+vÝF]ðx½ôÂMo>ï!>ÞX/uãëMˆxƒ!Qg’_ýññä=…e÷xÆ‚)õ׫K+Ó‡¯Â}Ƴ jªJ~yË„÷Zêõ<>'ZÛV:Ÿ•4ì¯y¨QÛÛCÔJT¬J·ú͵ê'B‰*NßMñ®Ð;K[/$ÛñvzAM­å<¹$$ß SB…ª^©_;7H÷±¡ÇJ ^úëÐ<äúšÞg¹<½ƒ$öCÓ":G'‡_´œˆ§µ +ÞDÄXAª.÷(ïôþq:ÐŽYp6'ù¤öp•hE+‚ý&5èbíM•(ÆÂˆî–µÿ^%¹rä:pß§¨ ³Må³PÁ€H‰ïš—»¿ªsd…ÿIŸ~A®ª“­Û.Jà…ݳ-&½³å¯ŸÄjÙÿ †då3—¡]<ì¬â‹½øCˆÇ35F˜¿ Q®×Å\‰—wn-ŸÀžýò—Fä¾$MÜˤföÊÞ˜<¬˜‹a+sÔ‘ @Ê .Ó Õ¹^n†=€t}·É*$:¦6MÍñˆG(q“ÊÔ H«ã¹ ˜'_ ÆÂÙ#pQëÔš‹ˆ8Á/ÜmíEâ§°ÊMâsme_zƒ!Õ ÚÅ—údQ%Ê*aÉÉÖnç3@7û²4ÐÚý›êTƒºÖ¥D­˜*û*ÇÝjƒ¶Ð¶œ¿[$wƽ›sÃK‘B­ ¯RáIQa\ ¯=TOe‰ërƒŸ´Ê“S'}ª<9±˜Ö!íôÂM!/©0jbƒ5hGTNY. ¬=}ݧÞFeõåïfãÜo y,žÌjn`ÜR¼æ‚<^ÿ×_ž\Œg:ƒÝ(4"Í,™³ + šW¡ÞIŠÎ[ORH3°Yn/—Ó8¶òÓ$ãzÜuü²9²–hšÑËÈJ¼xº¦Oýïo™ ñèc-~ÇøjÅ­ÁªHz›‹{·Ô}¸"¸ÐbǪ‘ÄIjô†ˆß‰µgôÊßN–ÇÔ²ë˜ó_¤´P¿¤ÂÀ!ý‰®’ôÑ:N³Úß¡uO«jq.ó" ² +2Âú ZYš^Ÿ&ÙÀôƒ¬ƒoMX¿.ð‹Û*Ñw•¶õŒe& lAs¸ Õ7Ø9Ç(¤C®8âeÏ—‹| $½X¯@Îl%—½5ÔŽB~–d\‰»‚ÿÕpìe­™å +#6¦”Åǽå¨à¦jE5ÒÑPßxðöV±:…(¿ ¹hÚüßhE°þ€á^´)ótzÎ…Ÿ>y©MŸÌ7µ3¹ZbßE÷ž>ÄOñ~=¡Sb¬6gC5ö/l›- auóåÇFBîg|Ĺ_(›¯7ø“¯t´UÁd‡æ˜Èò`0ð;‹Í=)¡ô~f-øw?’Ž´%³-°¡<•4WeúÁ>凨×í0¹@ò}>Iò³|Ÿ† ™,×0ñ˜Sýªì­ Ùí“%ÌF­×&£Ò©‰ÙTðGÀÌ,I.½¨¢Cmdþ²x—J–›Pqt¸Àg0Ÿk–ì‘"šõ’¬á hcSV3ç2i‘t>·Q®d_aj·÷âÈÈy+X×ÔPÀ8EÄïÄδ³ËÍ‹ïœg¸gž+ UŠu¤bG!&×â¦ßWŽhœØìŸ­pîÒÞ±U¾¿#K8ÓÛ½Åd6×Ô¡ +.·]žª;‘cßÈ,û5Æz=°i/¾b%;]0›½€–ªàÙ¶ú š¦;}飼uòY¡¸wV€×Ôûš_5’©¾aRëhhR õ*1…İ\FãØN—ÙÌnx¥ÖHjqßå;w:½©ÙÝÍe*YX‡? + äÊ›XÈT] +±Ž²Ž GIUTÉ/ ÜR@‡I¤‡Ç^þ+EÍdíÉôs°º²é#¹–*Ûk¹ãÖ•C-Ô×v†11òùŸ².r€ö;0óm õ‡Îšo»YÛÏÎo5ïü”ØÁCé£4 ?)Mõ/Ó£rÓ-™šQËtÉNîgQ5È_ªt›³Ytb*Ïî)ÑqÍT¥UzúæÅ|€k·:ÏÿlØ\äíçP‡AzÜu¤ÏP”o—{ÜûÍ(‹…ÿdþ¼ªÐÓqzòö +yEv2¹YvάäRå*kÓ"m‘=¦"ΚÕX6o¼òˆÛj-¶i±MÖ[ÆB­?߯rMº'ÕâNÚH‰3t8—½†úÙmh¯¸Á‡®pn[¹¹W8Vºüñ§+ 2ì‰:¹ŒY±Ÿ±RÁäǪéßðräÒ£Y8G,Ãr™„šrl*¤´Y½÷I¨ÝÂ+·˜Cj—C­ÔkCܰÄav|k//X9moK’+ùi)çðPy[;=(7Ó {øAl€Š¿ôÌÙ? ¬vMÊ;bB¥ŠY]š"#,rí s­s(ìx%3ñ8ê²ô +9ª?a^©ýrÂêÆL/œïÝX^­ãJ‹ÖÏ32UÍjLjd®—‹±ÌÔsW!¾ãIØ<3‡œcOA?OB®É]KïÇÜ-ïXÎ ÈxP3îSËóƒµEw²ÉÛ09a¬ë>º-zƒ––_£X’iè'J´ø[TãgI³ £oynf’?ö=‰]P ïÈ …,0‘fÚ‹ï"ò<¤b;ºá:{,'•B»{a¹\Žg5ò‚¯§•¿ß`~[ Qj7˜µ¶G¡LÍm«¡}zªjeÎPÜD0…«ç˜ºg[ÁšÏŠTåaiü,e™®´c53Âuú;ÖzZ#÷õ–M¡ašå Lo2GòÑÑÕ¡]ªÿŸý*É‘í6‚{Ÿ¢/ÐÇ™< @€åï¿p IÖ«ª–ÁáüU½(NÉÌdd$5YµF”7¾¦,Ë»bÂ9øÍ¹¥â%ã*ße4õïŒÛˆìS[†Ó­™aþZÊ™lxY÷"ãîŸ'Á1©ÝÓ¹‘£¯bO7þz¢WªZD˜iRZÝg%H-6­óTJh…š@üzi¢Æ†‘öª¤À^›„ƒS€q™ö½FQ‘†Ù˜}[ýØ+y÷¹·¤ZÓsyµ%´M!‹_yÛÈ„GV?£žÊ…×cGX˜ú>`nCü½4òb‰ïv2?K¢Môž¤hUé2ùàò«¨!#SÞÈú¨­3Фiga¦äÚ›þâ"!A·Ô=N7‘ͽ„ÐqiàËK a†™‹›b`D±äðãP›B[¢ÀÙP9ó3úz^ä›ïý°ÃZq¿ó¶!À60 ­÷¢¸Ø“'ßÔOmàüöÝCÔÅøÀÀã~;„QEJo÷ÏÛ£à:u™íV¹Ü£¦šgôxb©N‘]®ãkHªÄ{ú¿ÅœÛ-ï½85k}z„=· ©0N9;®=×­¹xÂr]ZM¼—6@¸Wh3B¸rL«Ônvf±äBÕš›e4-h_C­0†ß9ƒðRl¤}ÄŠþo¡XÑG³Q.Ô*Á‰ì"­\×þŽÖ² eXQóœ‚ jõÉds6;J«…¤öQν A+Ëc‰67¿Eîˆ,žq4OK»¥sn/Õ<šèo^«õyFx)¤¬ä;¯ësXD‰¡îÑNº$,á<¨Ì?ôm€N@$ß&ë©‹´ +5iZãwmÉI»ÖÚéÃS~\)Û•úØ#ìOäÕ+÷åŽÌˆ~õe³ò†1׿ÒhnVK糑YýâHQ¾–ÊÖ ŒˆŠá1tæO«y+Sj¥4¤ syÀåÁf¸©WÞLÿ(šýÆe î‘ÄaP#¡ÕçIe&D>©\Ÿx[ŒÒꬨìxõܹw×®Dƒw¯ðš,Ÿ®ß.8«dªM®Ù¬/veNÞfaUôJ¯¾Ù²ÈNЋÛ²â¢¢š]“/­çç”¶ÕÕÿºrhž"… úxßo ­×.­Ï‘\â.ÏúˆBB¼bðû$&¯à‘"(Ë“øÌ9;‡I½ŸA[ÂRA@¥‹ËšÔßg}ƒl%Fw|E³ã"ùR¤'?iú(úbÇc…ÕF~AWÔ‰üô¹ç +ËxAŠ;%FWЇJ]ÏÌ´jUáÊBð‹t~t‰¬«T#UmÎHÛcêµ?~{£÷ì(Œ””;kCõ¥ÌÈåö^ÍÝ=*á%ÖŠU|BáÜ~ÞÂ8—¬%–ù{ïhäü$¬¸[ø%¬îÈ[ˆÌ¹~\i=¾:{AŒÃ-ÿTÖ?•õ£¬3Ë-^/³7±Š=e/¥.b¢ªV+£Yš ˜%pfÊlÂß7d^´¹ ~~ÂÜ*pœ" +΢‹”Íô¸”9Cj¸¨LX|Å`×¼²¶Ob~BwI¤ ‡Û2äítCÁ½ÐÁŒPÀÇÌß0I˸~ðÍ? 72ô¬PŒëýSª21i¢ýè+°/ÐRÊkTQöfq•·@¢ŽÔôïøt“X¡3Ÿ¤Í•½=#öL]K/ÈânÏ|F—qÀ3ø†> ‚5ê÷uàO©ølÌ_Ðw4Í®B¢O¨íÜîÇ|î{†|~ÁQÿùÎîŸêiNý}gÀÂóGª¾@Î?_QðªôåËýãSr êš[=ØÁE%†«®§š7y=½p¶®¸+ÂãôW|Ü‘¥'_ñ¾:8*Z ;‚¼a”ÔŠá´ø:¶Ä¥Z +ÍÊ6‡Þøš²,×n=Únq±k3Ÿäøè жíÎÇIòï_1ãö6&¤6$|‡DŸ×zâ¸ÚÄÌÔöŸâ¹î° $2Èå âܪ׫’„·Y5Æ–éê°‘è”ÖDkCjœ=EÞiÄÄ‹ÝäÌEh jÚ;V©`Qeã±’+XU³âî‰V¨ ä9"ü“mLôeS£Q¼ßéRÐ1«Rq™dÄ©BëÚ»ˆå—(BcY ÚJ*ÃýÉT¨ø:tZ¿T)/qVÍœû&‡Ö«vÔ‹Ò¥WO³&V l„;Ê0Ðà™=Æ]{Šu{ƪ«tÍ¡`7µÖú®b ^Bwò HýÚ•öMíí%µv]Ûh±FM»4=óCŵ'j ’4ÏTþ.¬ã:ùOŽù, ùµPbßÌ–¼8=Ò]Ü·¶ОO$_E†õûáÊ9ÊÿíìzÀãûÁ\Ö¡$rÿoN¨TáK’ü7\)íX¬<^¡b½'áw>oñ㤸uݾþrÇVÉ‘Ôk‰ìPžEïHâ7¼pfI·ÂúÚÌñB/@1¹¬])Y]/ÝZÌèÅt ‡RoøRû :™.ð×Ü%xŽÇÌw1ƒÙ«'Éö†Ìú)&þK1q÷í@/Á–蛄>U·™CÅ+JÂ,ëÑT•[‰5TLÑÚîŸ'¿1©Ý³©‘i‰½‘Æ_ÏóŽõc eI®lÖîÍEkšj|ªëèUw“j ¢zi¢Æv…Õª¤À^ÑV•ÐèÌÆ%AÔ¼Fh·©òåî$Ymî-©Ö|TtvŠSj‡¦µ+o;©bóQOåÂë±#,L}G¹´ ñ÷6ÒȈ%¾ÛÉ|k¶Ù—X@:ZK2Я¢®rŒ4Ò…J[g4Ysy!²³µ½©dÏÔ™nHúi3t\dÅ^Q a†‰‹›b`dÏáGzÕ¶ÀÅ«oC äÌKÄDèëy‘o¾÷K¡hx¿ó¶!À60 ­÷¢¸Ø“'_ÑPvÿ%"ã;¢ßQ÷æz.k¸ÁÃMÉR²‹±ó˜½í× _ +4#£lý|ˆ?âó×EÙ“ô +Ù=y;ÍxPû–³ý!ÐónàÔæ-ëªÕ>ÜÅÈ_z`ÿ†²Aª¹Íµ÷ƒfëÍÎK‚Íí-h_c2)üË‹ÒmFð5܂ՓrÚG¬éìZ[F¤‡Ù(Û+ë36Ÿí‹Ïñºö·"ÂX~º¿«à‡ªZ‰( Gಮp éŠ£œ{&jX…;‡¹#¢?ãh÷–ÉôàœXm4Ñß¼ß#¼B]%åûŒs¨‚ "±¡vsŸ{µ~dÞK*4¼nòâ$©¶»4z(9+’WtÍL¼…WgE‡Hm ÜññÏ»¾IEßt÷õ\ H“—¤È¤Š +E0*+Ý1CÐ_ŸGð +!Q7© ƒ¯–G‹X-b;žù¯i,rB|¤¾ºùŒÑýT­¼—¼Ð)Ž"ú¨è7lE€mb@Û«|µØqß;N³O¶£¾‹5Û$4dx÷ïz<ü›äö+jêÇiÞ…tR|Þ +¸sxf>öuzÀG÷ÂäÇ]­¡QBÚ¸«åëY.sÃ"ZUá'¼)ä–ådo¥TöS’‹1VSKcˆ;2Aš48™mNŸÔõóòØô,4ð¦˜ix¬úx…IévƒŒ‡3‡*Êâ®6À»‚Hj”´j“CÀsž¯øAŸ Wh#Ât©`$Ñ ½ŒfNUåG‹çŒ·H‡útRç-:MO³,ȦA¢Œ>² 2½}öì쀹¡¾ö÷c+ByÃçÐ8çvÕÒ%KN¸GØ +BšNDËÄêq xYPLíŒWdÕ8k˜~زÐÞ½Âô >]Ù‘ 3NØaä<˜¨ÎvVn‘ü8Õ×½9¤ò!’Žpà¿ݯøY ìxä? „ì͵~•QãRbžÅ üµwædÈa—²–4:3+Ó”b3By¬cÏÍ,Ó3Uq[Mg[¤taEàùRÃ"¨ÍµÁFœëûìQ]u/”»B§Ç™@ù?ìWKŽd¹ Ü÷)úÕÐÿsžÂxfãû/̈ õ”Y=0 Û€ ô¦J‘O”B$KÐx¸ +ÇId§¼œûù͘šhnÓâWws”•µÂv7ÝLM…?º=Ù¾/¶L 2«NÇeÛ½ÓØ¨– ,íùZxH¨ b¯ÀÁ%ðß,.Æ8xZœ—X̶úü&(&8ZÞa ñ¿Ïúyåóü’Í—I::€ÜmæDÈ^µ…ŠUvYö4Þa1ˆ—“^†ÿ¬ñZÃúŽºßÑÏZ¸mdUYî%êEÏr“’”)ãš¼ð-¸ê~ ]KmÏdÁä*Üú=¼òÜkšk9a…䋌te¹\ÞÐÏÎQPgLÓ…iA üe W¾à§†+ÜcUÁ´'— o¼ñýûo6å¡h‘פ‰#–ù?éëü†~æk“\KöVÂOËœé¥uS¯t0Y±¢­«ì€P%ªgÒ%|/œFhÿ¤ÛhÂÄõå I{«èœ¾<)ÜÖSÐbˆnV‡½†öTV@ï@lwõojGf—;êšaל<çDeý!ò0˜åk÷w|¸‰}__p›‡Ú¸|6^|Æ01ÝžO:¶Nl­yûlê|3|–¯жûòÚ¾¼¶±õâµ¥U×íµ^[×vÛ×öíµœ¾‹”Ƚ[~¢-ßá–¯x{ ¸·ˆSÈÝ1AwGÝvùÄ]~ ¼ì‘—Oè垇å}ù¿üÄ_~ Àì˜_B0ŸÌWæ…ù +Ãü‡Y«õ/2YQ$×_ŠóKq~)Î/Åùï)NœØ¨ØÏ»ÈJÛ]‡©Â¶ kÜeZD•‚øÚja§ŸtøÁk×1øo›ŠaNcMœ ÑJCÍÕè<òÞjç’¾ª¦¬ÝQ«S[[Ä©±­Ë§G eX¹ïØòÀɦ8δ½ûr¬9ÉZ=–‡fYi³;Œ¾‚²ýÄšÖãp+ƒo ¾ˆ ýеé%Û¢SlÍvõ‡®Mï9èÚRuŠ.Ú”t­ðe“æt­k ²Å~(AÖ¢±Ô‡,V+AÖöÙ+ÈÚ»>d+)9Y ¯ÃµþØm?\›%Œ\›qÊßž5EÁµYg5"¸ûäýÌBáî^.ÝÇ4ÉöÊ“ÏO¾È§UæØzÍïƒÚŸèºE¢àG·0“Újë6¯Y[#Òd_øÝ®M% ùz´°ˆ5…´lœÇÍñ=±O#bi¶ìjN/_Ÿ¯>cî¿tUÁT—·ü«VÇÊ„’bmÉ%iµ@Ÿ˜›k¹¾æ¥¹¥è“¤Öð&žƒé±Ö&q˜7J¾le½‘R#Á|–ÅÙJÐ`dî6â[áK“QŒ±ç-mWŠ m‹OÓa™|©C~^ásœÈE!ñé›òáÞì([ÿSg²ÌcèÞlÓÔνTlqGzƒcf{ºÒ<“-¤ò> „hKœí¡ ]+ùŽM#LcoœõÆá:RòùÙ½TÜÎÀÕ9Ç…¥qœÂ&=ÇýÎiÐädjú'üÚí­AcÝí­AVq p`Z(¹ùDn…b'î„-_U!JËœ¨O™b¿9NƒbS™ÖSœ-D"Ÿ±]?ϘÆ£ù©æ†QŠx_&NÈ«” +˜nU `$@'–þ[ZŸæ±A&ñåøºê¤êØ¥øÞR—ÒyÌ,Á€,öÁÇ\&t! 8ø6q‹ìª‰Çá4yÆÒ ùßrLî?:…yºÖ¼Ó.µ÷Ô Þ²³ÕVóEÁ±uŠ Ý°R_cž&ˆEµ¡ŒœÉÍò‹Ü[ñU-Jò(`úk#Çn ñPàý¼óZ„Žà¢Pê–ù+ùV„ϯ6[UÉj@Ø"öU ‡·žB@ã(…ðe³Î,àPðÓhIµ èáóÍ\6>ôÕq£°p +==%†;Šls¿¢,moÉ“›<5EЇ£[±eÚÚÊ©@pUž"üKØ ø’ÚL&Îâf¨h˜c¹PΰžÄ%T;øß³ W° s3ß`æ¨ß‚å*µUl‰&݉ ôdu9ò”ß÷þŠ5ý¼)_¿¶X—»X炤ÿèH0Ð03¢D;+àUÒ‡•jhÙhÐémù˜,‹]ÂáÜ&y…U<¶{ö‰ß)¾6½±§4¬2Z×+,Gpk¨í~¸ÞÈ̈zÂl¢½ªWs…!W- bQ!ßOF-:ƒ‡¥‚Á>—÷·Ž+'û=[l”µìx_^EZQyšÜÆjY^ª¨£þC…K— ¨âá¯6{jv µN Ì‚‹¡ ÎVnƒ”=¶#îºëB={Çà¸P0Ý0© Û1æCý›·Ce^À×"6IÕædk ™±Š1ùTÖR¼aÖÆn:ÕPÚpÀž¼—´.;ÔÜgê|KÖÁŒO–\þø¯…Eßh—ÿ& Uã}‰ì\_‡£«Ñs½I]1¯à^äÏVKç´7æÌSYâ«JµµÿOÈ^•'ö ¸ACE iti@‰æ«—3€6FhløÃ3V‚œ:. dšýq jàkŠÿ qDÔÄnÂmC ±ˆyEÚP“ôÙsQâÓ­]…¢ˆZµ™‚\QêÙ7jr—´e¤¡² tð³Æñ¯3o»¾!×Ú!©œP0Šm vf¾Sjˆo£æ5^ÞßfÎgçãq)Ä#dô.Wmí¢³Ž|Ö¤È9%ý’hìyÛ¥‘˧Ñà¶ØðfW`«FýXØ ÷æÁçjÞ‰ð +µ£F¼Bs/º]êÜÏZð]Gf6\ÛíÒü“vii°IÊb+™ZgQ³ó[Ãí°S;HžGŠBLÐ`£…nÛ§ä6+–Œ¿ØRë€4p5P·ie&y‡Üó¥¼0fRX¼Gï^ĤC¹®$„Ö¾èwã¦T'¿kš3ö[1ÎG–•½­ÇÚV@lÛÔ£3 ‘‡´T¡ö¨_ˆàÎáÏí‰ØøvnÑ×þÞAÃ|{[ë–ÔÒ¥ÅÈÀÖŸöKqD,ñŒ6">f.X)ÑgÉŠF„j¤i´üá<£¾}¨-¥Å÷<úٟ˸eI•ГPÐÝ&û¶NKÇ8K9×sÈÈјð®,9«²¸¥] _¾‘»³cۀ߂œÂ^¯Ï,5{›-°,6Ë"³{ñÒÓÇ*œ9ý¬16ÒMR®½B²ì’ö?hÑú“F VuVµ|P`£›;k¶ËÕh"½‡V£²‘Ö¹íÕòRÛ–dE£n-æi^6XFÉ^µyqñ$2ª®E¹>àõ{%!; õZ92ØQ”„XdÞ›¹óƒlÜSTk.¡5„–~¯Ât«.@©Ã¸T½¨Nb+f–Ð|êJâÝš<öÖ|$Ùóm­öÔäÂnƒ¹©^«Vâ¤u‡vɵa J™à†@aê|ìl2·˼sO¯—Û Ö{µ\¯ ±ß)Öû¦0ðrsá5{û„˜$ñÝ’õ¡îßmåH++1ÈG?2Cà nhÙA†µÜ›»'^¾Š‡É`àz Á¤a%sðú 1[ ’,Ó½WWû¤ÑÄ|ÉÕb9óÖªG¼r±Vîˆ=sÕkuµ¶OV:vË­VÊB©§‰ä1»Íe@û¢Çºô².TÁÈÎ}g‚Þè!UBjÎ}¯ª±OÔ2¬óJö‹ñ&âÅ€!þx‚<÷,é{5‡ËøvmÒCÙ[Wy«´aP¶9ÛcKmîU„5öI’9.cSxÌ£¹•°'C=üüû7/M¦Äß­ô±6‹ÔÏ>2BÔˆ;—aƒeÒéåç¢êP‰¹ñ!t€‚?ÉÚËfDVe›V‡Ë$`CË5zGSB$¡«ã!7ä6’Ô}hÑÊÒALõ‰‡õpóØÿÒ£aŒË2ôXHÆÏŽŠç{ì¨ÏúÀ6ÈêŽÑú‡îõ úžEÇW¶ÕqíxéSg¶ò2º2»‰6œ‰f’µXWL9ºA:÷è7AsáäS|èKÓSGBYz9°£?üþÚ” ëö8-6”~B8Ño³%­ÇÔ„•s4`ˆÞ¨:»a/Ã󹆻$üéÔXo:Ùæ¿¯'ßîQ®©rM»"riÌk”³.ÈÑåŒP] ¹[0ÁMV¶¹,rËrzQº1ÐÙYе;h2WÔ!#4tŽ©Um:ÝÐf[ÝY1Ðág›Ålãp•ôa´_6¦/¨púq`*PhŠv4Õšœ#e «Õ~­P'ì7Sç‚賑Ǧ"¯8 “\Òm¥ V@_’Sߢ[±¿?_ÿ‡ÖÑ®„ÂA¾A¨1:µA¨·t‡}Œä|Ç IGiK±×À}L¤#S¹øüíþÙñwH$¢2q+n Y5NXHNæ¦Ñì¹ûdÛ?öc TKLˆ`‘{8øpÑ÷ `iP€X8%L â<}pzØ ¾}bÀ\áüçÂb…·û>ý§µþé@ýpyPÒC»Ãs˳~Ù碮ýçþp;2lÞíºì;噈òÌDy§¢¼sQÉ(Ïl”w:Ê3å‘òÎHy§¤9ËwÎò³|p–OÎò³|r–Îò³|ç,Ÿœå“³|ç,ß9Ë'gùä,ß9ËŸÞÏó½½ ŸžÐÛzp–ïœå;gùä,ŸœåÅÙ[¿z4 ý|®0±_s¥Il:m$Wrm©)|·–Í´ŽÏnª±Æd•ˆœ½Ó%ÖÆJšµo*¿ ¥t\«iÉ9Ë{º¤¢4Wý¬ç»ºŸ*Iÿ@dþ]í‘Í®ª9D%¾±Y…ME »4“kMô#«˜„{…uN'³T<ÚRÌFë¸Mõ± ÅN¶Mõ¹ØÏŽfG«Ä¶ òëôÕ\uèá£hCÙ“± þ¨‹*‚ÔAÄ|˜5Ì(¦o¡‚R5P¬RQpEvL‡È†%ɬf¢UwÈf—Î~)æDó L‰²A³¹œÌ¥œíOI}j·Ó[»•ŠöEà©óð¨/2ÆôýGék¬…»Åºi îO^s4û éžÓ²Ð÷e¡ŸÂ¹sÙ4ÖžnÚq¶dz=¼§yÃF¸I(õ-IîýãûÕS¾_¦ µ ôÍK¬s´ÿÕóýËž–fK»6ûñv°õ¬Nvõ—3fÙ–©u—?Ûå’õ4öãõ@mè5}A„F]ŽºaœªL`y-ÂÅkó1÷ó"éG阗ÓXNUÃN×E*ó»®JbF%±‰…­œPâ'6àþs-`ÊBÏg…¤Úý±Læs´ L^÷¤&¼<ófà¦n&›GÛ„·ÝâX'YÓü«9±³ÿ}ª}ËXë=¿Ü,wnYî·‚i»&ßî 9ôÿ·J†F}”¿-IÑ‹€Ùß 5í±SgJ.PJö–/SËäxy?¸ÍõÕŸ˜Ózr± Ó ¡yH/mpÅÝɧHW3*gO/²Øá™gÁ%Z†¶²e¥!0\/FÒÇÚ¯ úÅÙJf–êäfKÖ®5Éÿ*a”§nÜ–ÝÔ-ÿìˆÑgÖ>-½€^4#r6Õ‡/ȇ¡ÏGJkl%@Éï¦F܇—?­x೪w# +.E¬ÿ•5~ÔfÔĽÕ†#õÙï;¢Üô¥³ +òçÌ‹M]¼¨Î¯/ + +ÌFAüîç|ß4kF3¿$\&—Wê4+zíUi†²nÕ.hE$Ÿ”©óRþd'OP­ÉÊ¢î_ôÄm.„=S±IöG¸ê¬4Ë“ôw?{½ýôÇo¯Ÿ~þF¯ßü¼…/Rqñ•»aYÓR:øÇ_ÞþüúE%WrÉewØ<Ìüúƒ¾xåõO@ýþýþuhE•Çvþ€ë «J ã°½cÒ4¤,ãû[óšîæÄ¾V¹¡ï…Š· #°­¯A~IžÛùØÂ‡“Ür|…×^:…ô ˆ¢Þå)C­C­˜LÙì•^T¹l ©\R‰RÙJ+Û놓èOQ(¢ÐCz>‚ÐÛ¢zL® ¨µƒÐÛ„žcúƒBW +}ƒåÿS&B1˜V &‹Á‚`1˜f ÂŒCð8„ƒ~…À Ì8„§€Rª((Ë”*ÊŠ­Ê®á~ÃÌ5DqFéPí6u°¼­UÓÂNduÜMo­K¾nX¤;úèû›5fߤ>ø¯½N¨_,MAàç ‚F¹@°V’C_  #ë#°a¨`¨yÁ¨yÃÐ=/ zÜÒäÒä ­jÑh>m - Ú”D àR‚w6©åbrcÁº { -_@ +]@<­€P‚Úg€ä€L’÷@ò~¼o’;ޝâ±Iþ#ÆC8À ŒtÀ`‰0X,F +0è€!|Ááø*ŒÆ`àµG?…üâ£V‘ +b¤Ëž9vIžaÂ1¸[Æ4 dm´–LË·ÁL7 d +.Ï—éVÕ7ô¡"°TSÃWú¯½>1ƒ‰Ç¿AƃŒÿ ZÖ&ðE (hý„Ñ ¼¬f€ÑŒaÐ8ZÀѾÀÁIu(ÔkÊú¨Ô³àšG­©âïÚTP2gAË‚æX¶f(—µpZZò­…u³ ³æF×év<Ö®ÓR4zä4Ý_æãµã=,*€µÛ}ÄÓ"‰xnhÚF4r¢‘ˆ¦E4'‰XZÀÒ¾ÀÂ@€¼äNx¥†œË +h/Ф¹³•´V£³¹L£}âüs]+ÝÐ2ãPX_Â> éš²¶tC‘´e¸¾ÄÇs¯[HÛu=ü Sr"É冄øDÒ(ýÀÒâ&—L@Ãt¡azFS1åWHùy°¾j—ÐZ +úS$MûÑf4#u¦ „¼êË&M¶ÖMKŸ±ê/ŽšÙ¶žë°Èì{úøû›ç–ûáKÒüßw; ÂS3ø‰)­…D.çqÂå¹#ÑJw!AKxƒº‘X#»8ÿ£R$²q¹ ÉTZHºn‡˜Êx8#D„í)f{Mᜠ¾(”{üý­ZD§Ù?z¦µÈ l£=Á›[ø"/_¢+šoæC¤žã–oÓm´¶yv¾uÔnŸ‰Î§à|:OÁy]´WÆmçA–å|îÛy^Ϋ5/¼·mž¯¢ª-?8_£órù.‡ë<¯Áó=Ïãò’vy^zô¼ôqZ9Ã0E¯Â ªÆIgXrÿëÔ bK²aŦT_£²Ï>¼ëò¦[Álu»÷#´:òêàÕíKÞ^S;¢]¢]R»D;¼½®Û«lªcßìùÃ{#ï²òŽðŽä3ï¿ÿŸßøb¿ñq¹ÂOï¼ü.ä]²waï´üàø^ˆößøîàK¸ëü]ìP³kr",žÉ_Ì'ô ô…·W’Ó[¨oI}óñ5è|^4Í/ŠmÔ{Ÿ¹ç|P>r>8P~bo‡j¸ñ%/>þûy‡Æ?_›} o¿„X endstream endobj 72 0 obj <>stream +8;VGPbH\r=#XrIE=_6jRm77+''j)us#^='::!h/foQU5[&.+)BF!X>0ZRk6Yi\d_* +osq4IO&&FJ2aUtX"<'iCZfW)-bf(Jsh7LA:),l]XFP@G#:74^PFFS/O?TiJ\;Cdh" +]^'p2b13ksS--a_5['Si;U38kf:eI4r/A1!rokk):LfU6.8ne/_`,l8aC6[,=)"1p +Rj&a(jeaGcl&Bb@J0![]mCZq6CK48],=9a/!5;=3dt@8ggr'l(A/?T*:Rk>?TtQT4 +'+.:nUaJq3h.,nrGO75TS6\377u1a0]K-]=WnH"Q4`H;@2N=TURPXW6]R&KU +c'Pp.4eM^DKla\tIisqhr&4W.04lm~> endstream endobj 73 0 obj [/Indexed/DeviceRGB 255 74 0 R] endobj 74 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 66 0 obj <> endobj 67 0 obj <> endobj 77 0 obj [/View/Design] endobj 78 0 obj <>>> endobj 75 0 obj [/View/Design] endobj 76 0 obj <>>> endobj 71 0 obj <> endobj 70 0 obj <> endobj 79 0 obj <> endobj 80 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 21.1.0 %%For: (Olivier) () %%Title: (plaits_v50.ai) %%CreationDate: 10/09/2018 14:26 %%Canvassize: 16383 %%BoundingBox: 2198 -295 7030 62 %%HiResBoundingBox: 2198.7373 -294.8984 7029.5449 61.6854999999996 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 326 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 0.217288002371788 0.976805984973908 0.414801001548767 0.13714799284935 (R=177 G=28 B=83) %%+ 0.808682024478912 0.298070013523102 0.49185898900032 0.153567001223564 (R=37 G=123 B=121) %%+ 1 1 1 1 ([Registration]) %AI3_Cropmarks: 2198.7373 -298.7559 2370.5166 65.4961000000003 %AI3_TemplateBox: 419.5 297.5 419.5 297.5 %AI3_TileBox: 1996.62695 -523.4049 2572.62695 295.8151 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: 1948 122 2 2548 1290 18 1 0 36 43 0 0 0 0 1 0 1 1 0 0 %AI17_Alternate_Content %AI9_OpenToView: 1948 122 2 2548 1290 18 1 0 36 43 0 0 0 0 1 0 1 1 0 0 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 77 %%PageOrigin:114 -99 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 81 0 obj <>stream +%%BoundingBox: 2198 -295 7030 62 %%HiResBoundingBox: 2198.7373 -294.8984 7029.5449 61.6854999999996 %AI7_Thumbnail: 128 12 8 %%BeginData: 1798 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFA8FFA8FD7CFFA8A8A1A8A8FD7CFFA7C9A8FD7CFF7D83A0A2A8FD %7BFFCA84C3A8FD79FFA8FFA8A8A8A1CAA8FD77FFA8FFA8FFA8A8CAA7FD7C %FFA1CAA8A8A8FD7BFFA8A1CAA1FD7CFF7DA17C76A1FD7BFFCAA8CA7DCAFD %7BFFCAFFA8FFCAFD7AFFFF %%EndData endstream endobj 82 0 obj <>stream +%AI12_CompressedDataxœäýç~ú¸0 +¿7À=@BÛôzKBB1%ÔØ0³çùp®ýHr7®ÀÿÌÞÏ;ó› `y-iiuiIv[£åËM¶#ÒôcV‹Ý^ Èá~K%¬èWëýju ÷üÉÙtYñ¨r÷±Û°CRôb»IX Ü£‡eø¶³¾Züµ )—Õ鿵û ~Ý­†‹==ø+Œù‡ ‡¼_îÁs `ñá1+JØ`¸ùkHÓ‹ÿG‚± ø-¿=l&‹Í,¿ýÄY}D¬É;AmÇ$M¶«-E'¬…†ëÓpž ­=rµÚþmͯ†ã¥%<(/V$ÿz¸·âAHÜ=N ò‡Åjò|XH@™ Vî>8@ _i €…ŸáÏÑÁýüÒ"÷{Ðu€R´ðÔ{÷üê'ð(‹aŒâÑX üFbX , Æ1øKÅ0Ãðp(DÁ/8hŠÆãh [Í;<µV5 Âñ€f1,‰ +Ecqœ€èâ1, + ÃDÇà/¡8 :Æ1 Âðp0m|AàA'‚8Nà tœý×ùÞ$g Ä[`þ?],Q¨ín=¤–´lÊÀ§p8n£Åüa<±F 08æŸ óz›\Û“hÎC8˜^+‚¿¢ÏlK0S¨æÛ!"€|`pþ‚G öGÀYþÆ™×¶ {ÿ°>o7$3÷9jßbØ4Â0æ/ó¤yX‘Ôëp>xŠ3“ÿ´+0Pþýòjˆæý‹ ™í!5#÷€³·«ÃÉ\ŒÃ˜«6ü‡„Š áÑAPwðlö »ƒÅtð#©ƒÙ>G¹~Ôwä¦½í ¡àñ;‚°‚Ãècà¡.#ÖPíÓ)\èÀ–[íIj(Ïa¼,øÒf2`5 9£#7þh°YÈPZ +$p™À¡ 9&AD Lƒ@˜œ@<òhŒ¹‚d3=aÂûª±Jÿ!Ç(GлŠÚÀ"q‘6l-Ö»¯ 1k0<àÓ™ÅÙqDv&lQE^a-;Õ@€=©À`æÄz,fú`%þ¤QøŸ×|§ +Ýÿßh%()‘h‹áPÛÇ‚áHÍ `.¬Kót ÅÅøõüZYmÿ¾”"†hÌ  x„Ñ9ZmÔÈGq ‹¢DW(B„ãÐE<‡nôxE±> +3šl´jùÕ:vtFì¯7÷Óv7£†¶ïl’g:ªµôŸÝ…¸±æh‘ûg4ýñ‰[_húϤ®I Cã_ Aðc„ñugõIÐuØô_æh8¼ñžÈ¿«Éþ&è!´­Ð{"f”ÿ¸\€¾üuåÿ)¥§ÿ[ãY èÕbü¿®‹}Ñh”àÕé54µÿ¶ÞõEcñÞPþ12”þí¡ ÓzC™“0Ø02®åÿÀ þ^Lös#cbþËCââOµáŒPB†æL²ÁÈÈŽßù/0ùH×µ¶jL¢ úQ{ÿÛÙC£TaŠ XÈ)_a`„Ä­ÿ]ÇžŠÇµG›Û¹ýÏ÷E#£;~ç>:ÇôÁfû“S¨~À¤íÿ倿ºŒþ1ÀækSƒ\ÿ× Ó³Kp!”Ûòe@…‹ZÿëÓfLr="'÷…BƒÚB­cdtG¯ü»CŒèé¨ßÃæa oú_îWlwûÅ}”¨ñ93î¨íŒ"izñ—!F”4ÿ/p’t=‚ÿÏÒRûo÷†e@´ÿßÒ'zú÷¿Ý…5¹N†ûá¹ýˆŸÙë »úmDæDá/p‡G¥É<&HÀí kâMNAaÞËVaÛvS´xX­1\a,FX*B_ß Ç¼êÇT·‡ý +qÑh§Zän¨DÕ´ÈUu¸/nÇ`ä$u_¤ÑS%¥Ä·¬mÇÃ\¸·7hÃ#ÄÊÎ ñcþ hú–¹ûòaµâ¶5°û°ÀÓãáEDÃnö +°€CvdAU’AÚ²YcäÚ“ÿÑðŠç ¤:±h•µ<“¹Íl%7™’UîF± 7™ÍìÅê³"‚]¡HN¸8çB¶= ÖýáÎÕ‡†`JƦÜ[ØUd϶ƒ2#ˆ®ÔÏî|1žõ3¦9â5yÍenw$†µš +¢­Òª-r}p½ÕùRw,±x0!õ¶°ÈMqAï…ͦ¶ ÀE~0m¶À‚rlªS Z„ÀC Eܪ.3°¡LdBáXT .â.©héÎé”&÷Gº Uî ¡[jomo­…VKÆüL‹ܬžç¨ýh;¤&*JUöÀÌ5αªÚ~ªYóÃñr†Šz¬¢ØRÐÊM™šiXú&•' ÀVén/ñ˜PûWšdÁæhÑ˼:W-8HFÈ °WMܴדрÖ'fßîýÅmsþGq@âFÝÅf²ý›–CÔB¢leØ¢´£év ü#¶€¿ŠýBæYc«° /ëâýf¼:€°æí©¡ÌgÛÝ?GÓ §’Ì{køì +Üä- p»;¡Ê²†YI6õRHª ½D°/a¦ÞÂYJÄM½”ú•z/ÑVÁ0I¿èIoE”DTï%ŒEeŽì1—kPA©SÅÃnµ-!z#OÎ>祲ٔEÓîê½c‡3óΆÊT×}/tâ{ÊR¢öš;é¢ +*3¼î{¸|žU{'kˆš°\!UÝJ&kÕ oCǦ†o×^#°¸lܳ®¤Î…Ò+Ha> wíãt’bsFmr§•èÃg»TZïöÿÀ0ÀÈp+[xvgxD ˆ\ö@€VJ*SyØ0xÚó´‚çßh»pQLjŽÕ'ˆ—e’Š eÏø­åGÜ0Á““r9dŠëŽÂB¹zˆÇ£sºR,Dýa,—»¦¢½ÍRTÀ½Ý­†ÿ< á!Èär.—5·Ž¡yÄB'` Â~Î —/knäšì„ð; ‡= Ýi’«ö¶Ét…ñš·ô‚w“9-ÄŸ%?Ê0$\Ææ÷470¶pA¼ ›¶…(‡1¹û8ì¬e>ÞGÙ‹\4\Šá€žHznm¢ýÜl:P„K9HÞ¨ö»Ã^çÑÆñ£ÎÕ†›Ù¹öÛ<-Cž®À­\B˺P¡©ÁÒ/tr’Fãåf;^nA×fÌ)Re#Ÿ»#Pqën¸£ëÃJ¤¯TýùájÁjŽC`JÆ ôn»‘5›ì~úõf5@0Â{7œˆ#kî°ßòd笱h|{j¸¡wCŠÜŒÿ4XL¬4ßNW:L’H<Ö*ø:ð$À„š05–£Ò|Æ# É—ÊÉ+us¢–7Åò@9þQm^º§¸ý{Ãl§|\pQ‰P ¡ô–Pº*7¸¤iD<:O’²SjMÀÖÀ9AUSà ±¨Bg@[ÄÆ5·öü°m† ÎІ(I&L¥wZ¹M­¡Ñ“´”/J•b(PØnØÃú[à>þÇ‘0%DLâ¤Lm×9æð.˜¦aõñ±òUÂÌ–7þ#è\ƒ/I¸#HõH,¼êE/ˆÇg£ÈaûB¤¸ýDX‹µáoILÀ‚@ÈIÄuYŽ}åáµX,üÛè$|ކ‘H‰š£î1TÜÌ’/< Zˆž<–”lêÀìK'JajO˜Ù4°X˜w ±ØhˆNRrÜ¡Q _0sE¡Yű¤õ§„é2úÄCdJ¿2l4¿c¨²l\ãG%°Š"±ÐÀÉÇĺcÆŠ$‡#Ç0fظ®DT™¤ò¼c(&&¢IB +"#íMÇÌð´ )j,Hàda¶$³š¸5‡”È)ˆJ’ïaƒW “¢¬ì#°æI­Í/ˆäˆŠ2ËcJ + MslÈL /CŒ¶D}lFb¸«Ž>1ä‡Ã@‡úR×Ïkw7嬃lOJˆ F<·¶rV+?õe›Û¬WŒ³ö¾à¹—Ùîõ묰ødKãåï-cÊDîDxßPgÄn‡§‹Â‹IÔÑâÌçÊ0®_ãÞõ!Ø8I´…]g;g¼0?4ûÅÇÇß¼x@ù™knŠõlë‹v•]ãR,;$ž±Õ åû.oåOW®w„vv¥±·ÈG¼„O7âùѬHºKUÁ·‚žÒÃ!.†õÂ>buQè&v"@h +cÛøª¼2îÙ€·xÍ· <5?r°_ÀSÞz¸Npb 4žÒ™Á‰Ð„õúxõÁ¡1!³$öýZ +Jl姪ì¼Ú—¬ôöGn¬@'Ôÿ]‘ +¤¹xªúQ|ÌGk”ɾ»ó/öÏ=r‡¡ªˆ*ÐI‹ ¶OGýÅûŸèP ˆ, áXòç6ÕhgUkçꯀÝt2Ì)tD-¨`虎DܼTò«Èìyÿ»àÿw”¬+K; Äë%“cðÉ»¯ì®Fñ¸'z–‚­©))£a*¹Ö*ëoÏ~ñq3S'²¯¶8©¶Ý$ Ö2¤ôýåuaþaK€ÜìúÁpý@öóË'DÓ/ |å—ÄMxÀ3;–˜¬Wœ¦IŒÉ—S¥?%Zþút_—K›JÂ_ÇÎòÞÞcÑqí!ÿÒÈkÑ[?³=ôì¹—çVÆÚ܃îO¥ñö‹.£VÛùWºNR2̬TÊp_³Åγd9KQó×Pâ©›A’X&ù £»6îE°ë»|5:ä1ÜûJÛ$sðþ•‹'}üƒvè׿ȡX¬äÍRWÕ²Ûå uÕñw²Ö©Y.\¶9i0›}m²ÝÏmbîi-€ñ‹ÿ >iç£FÕW| Üß sŒ­”fZòò+fLz‰HîY@˜‡Ñ“ß tÔ–^QG ô‚Pp;-,èEf|ïMì¡ô[A4å‹À¾Ø€åæ¤7Ü—Çj’Àc6àó—]½Æ>÷ØÃ'Ì4Þ=>OŠ“uÜË1Ÿó +Äé¬X¨^3ÆÈ·µ¥ýL"€Éžuï òû–déTmò+@[ävXì ÆçרgiðeŸÙ²¿ù/'o±æ<ß­¹±JÄï¡Í™•FþBêà ýŽbwÖ^×fÀSŠvŸv-©ífZFSÁYúªÀ7IB…3u•Æì#rÆ_€úëÆ_€E¼Î¦2¯·Åûõâ=î¼ùs/îÆ,×l{@dQ±W>£ù%>¡Ä® +cPîÅû÷š:MÔhçTK©ó±öíM«<¸¾í§€^ùUìÆ[|pºœÈ¹áey3ûðDü*9½i͆€mÒ%;2›78W»Aþ+Û¹ÙïyÌ50Å3[d_+7'‡Û~Ÿä‘ÆݿWR,Þ¾¢ íÓÏtšX8^ž€KçÍ•‹½ª[ih’vaÅžüܾh5긣Ïãd]Ö$I~¹–(–xž%%ï¶ÍÆs­pù³²Þ»°Ý§aޏèš¶äiÎ82™È[¥ð\èdd¼Á®^P¶wà6ÿ6Á$gEÞ! +óòvw;ZQ˜?ÏÇHä®ü[MWµ°à³“øum+N[ßÛÂâê& ;TÏmÒ÷[%‚ó™®¾ïâOÓž«'JÙd~'ö¼Ùž¥œYÊ?@œÍE?'ÏÅiü;Pê“û[=ã?”£ ìþW/·×Ý€bRfáÝ%ôõCè<èTæ^Ä%é»HP‰AâË\©‹Æ›Èm§/4°ÈŒª`{[½.rŸ³r!;kVoîðû\<°Ì)7ɹ²öý°œ*îE½šøú*›è’³llG P^ò èÜh®5æFGʸyR(©ÊêiíIG+U`_~ûÉ?QA (K4LÓ¿îø¹Ív¦íƒv:òp(ú›_6ñü³9çàO;rUÞØ¥^\s0zͯõ“ß± +ÌɯoŽÔdHLŽjýP¬~ÑtÑ;*—R®û+àÅÞo~]O‡ùåå +˜¯ezJIÜ ô\È\µv 8mS ØÃ¦k‘ÞÓŸß{Ùö˜¥®¿öÅé–ò+0lXÍ™ ®í¼• ÓLP6~ÎA&b«|óö³Àˆðr^¬¤í$p1â&;îôil²ì¼ŸtapùuÄ[‘L}ÁPáà@n•'èvºba*Ù^Qå'WÇóAfg–ÙTzw-–EÎ Ÿ&1ÚÛ¤_C¥\Ø÷ø~Œ5Bý*mE›tU®mJãð`öù] +Är䢭§2˜ƒ^#·ÍMÊXåcj œÀ{Âf‰'OXÒö­Í¤JØž™5Æç“ïØq{“ÈLù0Õ7V÷¨p1[Ýýr½[èÐEFªô²+´pÈzž»‡þƒˆ:Àê|æWÑì +%Ø…Ì\\ˆºP_4¾iŠâG*NAÿFPЋèã€'À>]ø#©§\Ë›ó2soÄXs–Ƈ«A.æó_A‡0"c/`Ž6d>´œL"×ÏN,š)T ó÷ÉŒ°®²©—àWññ1uÅ/Ë_þXyx[Ê&?_Û}ñ`„÷w ´| lît—k®Â]‰¾ei×ÛUññ!Øþ:¿SR¨Üª}£m‹´,ÜgáÈUÊ{øXDҿܿåTyÌr#¯ŸxÕÄé$VÑlPѸõÜe£WE´wtä³mM¶)àïn¾|Br31™ŒÛ bènäW>¼]yë¿mÀ¼ìóB6iòü5:”¿?s¸ÛÂb#߯Û¡‰O6/{afcðuÁÄ¿:s›ÑŒæu›â±F6P´ÇB¶œ×¯ `ÏÔÚËAxÊðX7×~¶ÚÅ—ÙŸùº+IYB*w‰ÚatK=ïD9QD¬¼#Õ.ºqÊÛ{ÌçbÞ{ïvÆ‚d•wˆÔ(ÏMëá•€3•çêU¸\:ëA:’.½\ã@¾'‡Ýíˆ^¥{¹ß.J_oóW p|=…æß‘×úû«ajåUØe×>¹-#®pþÉåZD7÷/‰Ë³Ñ/Àî?•€oú%_/6ˇºAŸhö_ÞY®]¤Ý‘ßÇaæÄÆN\¥p)>ŠûÈË(±¼+~.z×"Fãá °ØœµˆàKažøŠ÷«BWfò1âåãºì|ÌÇÀ¼4úÞ­hü’tª”°æ2$ý8Ê©À9ˆM¤9—DiøýãÍm2¶FùÛùI@aø(>ئ˜Ð=öà+y_¯6#‰·× Yf]DÀj¬¶xÀf`ö›ç>ĹúHâúÓÐÖ¢p|à)=yâ@ê<^ Cmº4NW¨×ÛÝMüµô~ŸuAŒ zV…yyÿW®=ïaÿŸ4WŒ†Ö‡íÈZGû1ik™%)|;:Že3d÷6F£Q¡¤RHTü(ìtevØù¶£-ÓLr"… ‚°MQ§h,¢¸s±Y®è½ü/èŸRäïA(RÚm(n¾§†;¥C¾ÔÚÃÒÀéa36ÖžµW*g÷fKñgyè“Vio¤¸¹ ¾6q0“ÄÁdƒÕ†Ž›„ŽË  › %nŽqYå­Mô†07±`´G' «ÍÑ‚¯ÿá¶Âû£ŠbÈrC ç¹ù#¸KJ_Ðçpµ¯¨ W“¦|(»¤« $ u§Ÿi2Ô;j­-Fšµâ.‹*ôøoŒª$¹"ǵ“4m}ÎÈä(Dµñ +§œ#c¤áZÆf4(žQmê2ê™|BFžÂ?Ã.m0môªá Ã¥‚gŒñnÐ 7¥Œƒû£zÀåò¬9E&É Ω\G¦T .¯Çˆ¸ Õ‚K¹Ëà8͵66õ„lê³3ðÔ¶œ„ ["e%þ7/½§ŽM&÷‹”W =rÅ\6­çÍI”¦æh%¤Ñö‚"Šó]ʯ†ã¥n‚¢%Ù£5î7K+¼¾Õ*lŠ©ú÷óíßÕÅDá ¸á_äÓaµ_ìV$wÄËñExX8&¤±ø¹ðáõÕG L«!~Àp£;_¬È§-¬¨ì†û9­Ó†&g¢—œ„7ì ycJ'®(Ž© x‡äBvšjCzÏ5à®UЉK”Ø„>þÑb¿ÂB5ùA+Ç ½›­—þ,(ÛN§þ‘¨MQ/¢ækX'&o®$ˆRàšäª75ªyÇk?wY©D©+GŒøÚMÕv4w¸FrO™*ŽF/Rïá=ñÆß`.–ÎÝW" Àz;Ѳ cjâ‡÷¸®†;ÿ_ZU¼ÿÙùg +\ 1O:mvÀÑ[hÖ2äDʼnz<·âë~ 4Þs€ p§)À”Pjô^«ø5¥D—s®†òq¨ù„œÂ¢uѽHŠÏŽöÃzÇ ÐÕøiÿ +£³lÔM7{?}ÑM ›íE‡ÈàÊ5ê° õåyQ¯ÝÜ oϵûFw+­¸Ða,?“YQà¬ñF‹Ö†œ …SÞÔh:Yí¨éöè@Éãf‚Œà7wF 5zl©ŒÂ´E88~þècîa[¥úZtÇÕ¦7eÔLsºV‰RSlÁz/0ã¢U4ÍáûK›=€@íæ[êÿÒÎÐjj»Y°"šèÚŪd t ÔƒV”\5+1 hÏfÑnÀÒ ”¡>¡¥p4† +Äín¬¡ãAx:ŽIóˆ)‰ÓAQ¥Ñóᄤ´Žø@€&v*MÊ^מ\jBÍÊgùu/Ó†­6×Ò¿¨¡Ä™PÑ(4¹—js&E€‡› wLœ²ŸŽZ1ކzäœ xH9éf%o½/"x<ñ~\§Özi"IÐñä¶û¹Vöij Y-n-t„Õ ù¹Ò²£$¤‰ù•M2h†´–zMη¢óÓ¹ŽÞx1FDý žÊ];ÙáXØ i·§ŽD•7dј:Ø +Èâ‡ýð¤?e¼"¯E‡ƒéýÊ¿ÛM )XmŒžy_b& ¼ÊÒ-„ûcqµþˆoÌTRp K¢‘Ž3çÊ ýŽëÎ…à‚:ß/{ˆ†x L¿ôøT4K¶ÒËÔx^‡Â¼±ÒL,ªmW'è,‘ç¢$Ý<Ì{…¥8ý€Îü³æ¸Ö¢,„äSœ°æî­j8®’u¸™°§ÀicʼTƒgJø½„Žj=:"D‚ ·–-Ó¨˜·ôqIÏ5…ïÔÙc¯ÚbÛ®Ò¦¥zÎqŽA{zW«¡4O£Öœ^.vÀÝäŽCÒƒªÍ/ j$uÖaK(Nü5|@n4” Q¶²¨³@ÄE ¥¼ø°Á“wÄœ(¬d³ÓÁùá +9®j‘ƒÇ^æä~ß1æñÄ«8H’S€!t£ÅËîLcæü±@‡9]'/öpqy—Ð¥ ö4Á¦ø4AéáIµÇ#Ôï>B¢up±ø¨ÞÍÖÊ<ð\* F¡óÌHÕ{/šA†ô² <"„¢ÀI·4€VÆH«˜HÌ­V- ’?ÿ÷H‚“; Ã ´™ðîÑ^*0àAŒoY‡{fAÇ"‰Q<˜È“G=™Î(€Of¾ÂOD(õ’ò^øOèA2˜iïóÅi¼²¬^7ï†ptšJxîš‘¹Íéûþ°¹W{‹ÝæûŸm^¢\¶ÙIç]ׯ»UM@j± héë¯H^ i5ýÝt”‘†\ožä¸þ¤ˆôªü²Øeh¤X9ÿ˜UA¹¾ÙP®;¤½/¬<}n HÑÑg<ÚŠ-u‹? ÚŠH+U¢­J^¢Ÿn#¤¸;7*IÉ ä…ú8¤k­ëxV½àû +w¤¡íѬÖ0޼ ‡C†4^vRÀc´ês¾i« Í#Ñò ®ˆô+óÝTC +xì&èL~(5eû¤¯çdSéKÁ•þ½Y×”z’«DZ@ +æE:«×¿‡~Ti¨÷Ž•S E¤WåuÜz.¾(!²_Þ.Tƹ¾}ª“5¤$Vy¹î+ô¹‹Ù—N î,vZÚQY¤=ŸS†4ü»l5¤¥eY‚´ŸÆj÷ñ Dê–!µØé«êò7ÊgB­œkë)©Š4öTú©!ýÂê«:XD&'ð££ÿè÷o)E¤­§`Ti­z )!òB…ÞCXû¾åR+@zØ·j•÷¨"Ò¶_¨"m“Ï9Bj±õýë|9ÒÊHkqGÇi{Î("íú:·JHN†h»9gòZ…Àï ¬ï½ûRFú|OþØÆn§"ÒÏÑÕB +íËñX—‰•ãAéGûúÊ…”‘Ö=W;7IRXàÑ~ßœª¾ê}¹ÊHS6E•KˆÔs$4u"빊¥Æ@*'·‰_¹V:à›‹twËþ¢k +!%igUjižÄv_‚H½Rh÷YmìõÅS ÍÒr—žw‹tŸñÈT¡»0BC|îRõð‚•J¯eè…Z~ÙX©Ã·Ýæ Ñ@Z>ÈUá]À×efðGŸ éUû¡Í¨‡`æµV“y}û(ìÇ)vDàNðãç­˜r¤69y)ªäáÌ[c-{j#â÷SÁ»8~ßûTŸßr»ÒxÚ¸¥„§GÚ+¥&^îyëÈ,ײÕwîiG®à±Z³=PzÊqrmò=Vûɶši< ÝøÕŸÖËbÇÏ[x\ãé¼”WÚnnëÂÓ#ŠQ{/ÁµJïX=¾F¹§r1Ã:³ÂAé)G±îMãFýínäéñ´:/ª?í‡ß=ÅŽŸ.uõ§_ÎЛÆÓÙ)<=¢0ïé´êÛx¨ãª?½óO_5(†çã¡úÛÏéàVýiý7‘T}š¸Ým³Ýz +aî递?½yJ/¹§#¹æ³Xq-<=¢˜'EÔŠªo{RÉfYút'£C^ä"6ù°ý–õƹàìiswIbÍ»vq‰ò‡nñš|hà²ÕŽùl·ð©Ò±´£P~û(O€5¸*¢×€k‡ -E)ƒëÀânä,pUÖ Ó”èMêŠpÜ5|l°Óé5D#M_(d‚Dá½'¶û§ØÆîÞ(Ü䘦”kÀU‘beÌý¤‚4r ¼ñhÓõ) • í}¨"Žñ.¨Ž´rÝ•p²­ã~äŸqH++1Ò”Í%Fj݈ÉÛ"¤“ÛÛk)ð`Ñ[Mƒ¤á¹Ë™y_)# ¹>Õ‘^•‡~‰Ý—¢E±ƒ +ÒÈ5Œ¾UöªH¡7^¹‰¨ŽÅ*Hcü‘¡Ò¦€”ñ.$~~ì¨#…‰”•nàS/ÿÉǺZ|öUZ ˜ˆØ·;‘ÓnÇjKäª ú&àB¢ ‘Dpˆ:éxõæñ~:^y+Ž vÉ”§ÓÞÊ(‚ÿ1 +>wõ_˜ ø­)H jØåÉoég¦àS†ÿ%„Y¦˜ú×øzkG¾åÁÍ!`\h¨?Ûפ•'ÒÃÂv»ð'½sNÚ¬·Í%²øÜh:šýeI2¡¨ËùÀœ,ÚáŸkž:n¥¬&Á{Þ8ª< !«»œ.ÙÙ?Þ§­R§$]*Óš]ºÆ½¯¸þyGù1>c#M "¢gœ¥Gm¢³†oE!&—Ø8ÂàMò±&ŒPy|ðÞü9®”æÍ( +“å³+ŽˆÆ]_SóÇFâJ3ˆ‘?dÇ ±Ô™GI/»zÀ 1û/}Ò%º[ìf9+é7 92º‹(&¥ü€ºŒä`Ó‚Ÿãäˆ%S=¥´[ªzJ‚êádŸ¿ÉÙèy) ùKg¿á¿eœ²cÚ•`$~/z[Þ›ÁÁtû“—§SU*¿JÄç!ÿ¨¬¸¥’Éæ) Íw¥4´#©ÔZ&ñò¤14F†\·H†„ŽHµeÏ»ãeLkT•Ç[vö˜½ôQôÉ$Öü†CA1Ÿób(áó[ø§ÉÚ—c&ÿ*aSüªgž02²VšYMÚ鼓e›»§7t&!¤ ,ß?¨˜|”Å®L&wëŠG*we¹ÉW“:‹®Ém¹ƒ‡¦xÑVJ֮Ĝ ::¸ÒŸP;3¡¢$öo”t ?/èy#÷¯£ž‚.E†^=ªƒ Ì·ž;Á(¦1%Œ§(™’Šž&Q=ŒŸ¬¨|@óIwçÊÊï,ªzŒ+¶Œíµ “ùEAç¿Jf ãvä?izO¹ž>&–[lvA—,ÇkÁL§È+5[™å{c¨KСSµ•õ&¯tŒš?m‡N×ç5_Æí'Οte„!VÇw1fè0Š^ÏÐî—Å0ì’Ã/G1â’ žG1Ö,³Œæ=\gUlâ–´£‹ï˜È¿M5‡’C«¦Çö›a[Y*gUi$~ŽTî37&e´–«Ècù·½ýêÀÞÜÊz£ìiS#‡ƒWƒ¡BSu,I6ÔI€½ Ý®(tDGpeQò-AWd¾åII*»ëF'6^í+ +&ªŠR×Xú–,§{dInñ'g‘"þ^õö“žíò"ãÃ(¦5u~îUƒkåКÁX>é_U¯«wIUðñ¾A|³¬¤T|˜Ï½óö2ã f:í'f^Î": ù\×"˹VÅ—¿GK‚'ŽO¼ë›:~ßLä3TbrÀû{!­ÈE§+d€,‰eHÄ•™¸d],ƒ?Ð2ÞÄwý M'»„2$멈ŸKÞ$œ7ª½±ØÍò”¬r"à(%«¤ù×Rþ´¡…œÂÐ$R©–àPêˆÜ,k¦7ø±ÈØ8HCÊ“ÿ ÊãÖP7…Ÿ5^NÁ¾¼u/á߃YS°…æ­„£åßµbÎþ½ +g 5÷€#õïÕl¡Ú*X »¬¡¶-”®ñ}»| +ÖðÍèv$U[(xJJÊ÷aðÞ`¢®*YI÷LLLA Õ2€t¤îQ +²m±nln@ Õe[œUÀ–êYt3jûM&à2Š™ +.”!Ÿ—ߥ¦˜s‚Âà×H]›Ø™‡âJÐ) —UßÕ”›¥-3Kˈ¾Lº†”ЉHÖë“í]Ó’­‘<.&§¤Ê,½ î¶ÀN[½QìW¬]&C2¢ 哹™„XTv!¹ Ú|‹€©¸p?¦‘ƒ•p„òr…¬KªöÃèŠ#¸¬XÀ‰¨E•# Iµ\tú>ûåNËbÏöùZ‰úºœSC§]A';%àä:í +:f…÷ü:í +:T_y:í +:iµàé5tÚtûejè´+莪O¬¡Ó® Úò"5tÚtÇÕ‚§ÕÐiWÐIvœQC§]A']Id?PC§»^y~ lCò±½æöÀ»sw;ý°WìשW`õ|Y—¤VL·S\— +ÚõD×õΣT1E_f3¬B¦WŸN*±mQní¥SÇeá Ñ©¥½ÏLN'•5qXY&5ôÇ[‹@oŒáµ6Ò5¾søIo3>ýš­Ê9£ãcrJţ̕ ¢Ëº¤´¹Oº2b˜è:™+My1S4§æ6+²ëÑn[û^^$c6ë÷U’©V…êZ£›¢{>›Ñµ9‹NÚ ­g ”Hgh»©Í jÅn: ÿƒÅnzc™^XìvvªªçÝiúüÆ £¾à †(qrQ}ØFºËÍz°'bXÖ‹É ©‡²,èUÈ {Q—Œ–˜Zt‹LGį–“d(q&x€XŒ$Τ‹h!Qöž×ÉËuwŒêM®±ÅÕ‚æêÀÜ.ÕÙÕ­ã“]p¢jEu|qúȺN¥iÒŽ²=ð&Š a—®U»$LlþTëø¤L­£tæf05kÞ Ë礢]Ãø–&€iŸ‚ Ji2¦} +‚™~A›r1ŠiV̘¥˜ÆRˆyŠÉ4š¹AÊ¿ûô/ÚÓ+©žÉ¿}™s•åjŸ•d+W ®B¯ZN@a]lŸQÝÉ Ús¥µìÏ>7Œ·È‰çùehj[öPFÑ ‡&^l†¶.ó§xç0œsÛµêêŽ6Í*zºuuf÷®GI0†JHt÷b@ÚD q²ÁmëN…uÔ–þy}ÆÖÊŒÖÃéœ×w¡z8f-I^wéz8ó•Àý‚¥p(o©½ŸY +§W^¼N)«pùR8ÆVJ]CýR8cŽ¡pˆ°bmµ¹á¡O¬s"¼ÒiÀUb'¨¦4/Ø….ž€ÕkðËø0ÔÐZ’M —ûuÎR=&XTÞÓ4zæŒì’ˆ#¤;"ÌìA¤Þ§ÈÎì 0·Êô ^‹>°y;_%›/ü‚÷ —àµáèFô¼E¼ ÿdáõâ6o±Y€à…œñ~:oef? ¨+äõqÅ=4n_»'­P +]‰¸rÝYêêVëº8¿O£ÂΓ"f/*H#×ðRíwµb·¾F…}UþѪ°›>·T‘ÂKµÇjH'Ò +;y5V¾%B*+vƒWMóHå`ðªi~¤ò +»«§ŠøN½Â+DZg¤è>¾æšøR«;Ó¬°£CêH+Þôø>>Ò«ÝÇç×BZs¨"òB¿¦mªcµe?}mɬ’q=úÄN„«ÐŸ¬UÛ!ÙçZ~Ö]ˆ‘ë߯Ò[]·]xÎòN/,:úÈÉ\Qn Çy|¤aù ~K’Ò–Û£³Ô¤¬ÂÑ{QïØÿc{­vUÃQ÷ñôK¿lbÏ•ziÔÖÝsu‰›ä”¼_ÑZÒ…n’K+Ü#wj®h|‹¤ö~x/š[5äRØ×§}ïÛÅ.‘SÝ<Í{ã†K“º7ªOi2¼¬Mû®ã] +ÈÖ‘O&º­”Få%©{ŠÂŽf~9õú.XM'ï!Ì;Ÿ‡9ª¦SЏÈârÕtJ /É]œ©¦SJ9+œé‘_Þ›<ºI5J°76 +Gµð©$/œÕñ.N¸¯NÉáÑò.N»¯NŻн¯Î(ª]­%¡“¾c¡ÈÇ÷W~ÒsÃy +.ñª@éL{=¾”vɈ0‹*S´:¥çèt‰Ó0 S†ÅY¯KµÐ‡A #V™Òˆèn/ˆ`Q•Þz¥±4Øy×ܱÓ¾èÎŒK®xÍÎ=#jä7yÍÊmYÒ‹îN,zDøôýÉf®¹ÓØŸ,\twF™sÍÝÙEC×ÜY mC9÷š;~/ûŽâEwgoö`¼¾GyÞàfH¼¨'ÁLÖY3¯Qůr—[q]ìQu °™¡¹4ö*˜(¤“zÞ'íµsNš=†_©ŒN¾ÆwâuF*`uªÒU·šÚD†|~Xfhâ†-½z¢áÀ! ”™»Ò\Ú£6fè`y ŠÔ™ÚÞX_p7v©ÝPµÁÝPÚeÑ»! T>ºÎ.î- j—ûl8ºçHG[„ã=±7²{]Fn'3°³ ‚òÒ– k]Çvï­}ÁS0ƒõ&'mƒÊLl»¤¤”ÌËä–0tOŽ(Ô,dàbc¿&´—÷Œ¥þ*Ù9µ§U¦ó¦3f½]7R`†®–5vƒ!½T߯jøÖ"ù¹Ç'W>šp'Ôwu¾^bqA¹À)ŽÉB¥ÝŽòåZ'2¸sIùz¥ :bx¼¯Vâv:ñ‹A1Ô»áÎX}å¹7ÜÉkß IŽéîNõÆÍÝp§YùxºJ ÀÚêKÀÑ«'2zSÞyõDÂMyêbxþ wŠÆà ÖÆo¸;áTsXýÔ4p8†žë^®°¶‹Ü‰¼œ^XÛÕŽªÞõüñ{ÎùT¢ÊGß +k¥l–É=W ÓÌ£Ü8çüÂZEó\8sõíðº<õ…hvk ³SÅ`Ó€:Cð›~^Ëb7 †`T節)b’Z±„Óà±éŠ˜”|^N>xÓÛ-÷e(M­š·”R,r™¸ÌdÇg"®TQ\o¦Š˜X,š:ÿ }Q”ä òo=Ÿ¼ÆU~ÐñIŽ!{SÞåj\{J®Bda¶Æ5ÿ¶ÔÞ4+Z±açE½ÆU¾k㤣©Øs®°½ÏÌ€ÓSªp=ù¦<£×=jžÞo¤»Èu\Eê%j\‡n¯­ÑŠ{HX?*ÙÜIéÁ²¾–Í;˜´mîv.?5ØÚ¾ÇA ¼-£¬á¹Û.Åã²KBå¬LٜꗿÅLLOé5wŽ›íNlè$÷°9G7Í¥8—–¦}hÝ8÷åSEŠ•ó‘ºR‹¹ènLÔÊð¾4Vlau¤• +Õe®äex׿‘ÇZišF=\ì%Û!åKÓÅP•crõªV†ž»³]÷N­O½òw†I¬˜¼öﳪVp¹¶/‘Ò¡RTYŒ%”ÆÊ‘ήU‘Ú>®#¯jäõ"¤¢ +néXïoe³ +EӇУO\ æab ÅNÇêפˆWõ;›vÔa°´‹ò' '¹œè‚·½N™éÔ +ŸêMk'»Ñ@æ­6nײõ £Üé·˜íLnR¯þ­¦x‹™Ñ[¾toŒáº˜UõÒ&S[«T=]tÞø­ÎS£™$@§†â4ÅštrèÞÝ`¸*ÍÜÖ*0^Uš ~JzµÇgto,qSÙ²i`|’+Ð)¿y¢+wI²ãCvb›9¢c—’¥}Z¼âzUÞ+SV=ïæèΔe¾@޹ç•׿œƒ-™JnißýôUºÌº5S]{e fÕšæY6óc=ïwGjé£hdqW÷F=å̲H[«<éZ©­„1X/¦µ@Pü.-…<ŒÑ+¹ù(ÏŠ+˶L+®VÒ0ë·Ã…bäòeNYDy~Xr§¾kÎ\" ¬t¾øv9I;ér›çxÁ¤¢tê‚,Ïo´º-¦~K¯¡3"D›åÙÊÓ ÉŽÏ;£üHÕyŸ£(äð4ª÷™5£fÀ—vJ¢ïuJ5 oôë÷ —rntj¨ØÜ¸¡RN•BÌ ¯à®x¤7ŸU¢È'PÕï3¬§}·9ŠéÕò˜¢˜ÎÊ¥™A²í2#UuDV¼þÂS÷Uª³H^N®4ZhèT 5†oÔãïG>© +Ð\>ùÔ*@ŸN  ôv³U€Fk-ösªÖZΪ4JOd‘O®4Z(‘ÍUj8‹ª«oÚU€loŽGeàR>ù-æR>)'ëTm|)Ÿ$²øc—ò)fá.~)ŸÞ=ï—¹”Ð^ÜKCÓ‹_ʧš…»è¥|Š5#¿”ï"÷Wê^Ê';o\«S¾3Óݳ¡Î¾×OûV¿ Tr]ìl(ý{ýŒŸ uν~ÂÐ.p6”ê½~ÚY!¹Ÿ|ê½~Ú·út6”½~Úé2µúJ³÷úißêg„“ mYÔ¼ÕOñ”æîõ;·’ë»ÙJ® "©ÝêgîþJõ{ýLä-ϸ×O:çog0}¯Ÿùª§Üë§Tލ¿Îì½~zœ|™{ý´ EgiÍè½~ªÒ.p¯W¿¥|«Ÿ<Ïê½~æyì”{ý”Ê/Qó.½×OŠþ}|ç^eËÝÇw‰{ý´ ßù«3ïõÓÞæ¦| +ù{ý´#µã½Ö§Ýë§,ÑÜ­~úu¯ÆîõÓ&¥°’xÞ½~Ú®-GaÊi÷ú™©J»T݃üV?UßÒä½~çȾñ{ý4Ë$=¢ŠÔ³àhŸâaâ>¾ ÜcEžy¯ŸEiÙŠ’μ×OûV?FöÏ¿×O;W`±_æ^?5fgnõÓ¬2q¯Ÿöz³¢;á^?3»N¿×O¼ƒúøV¿Óïã3s¹¦Ö}|gˆ¡ +Â3OoàïõÓÈ öEÛµ7p¯Ÿ¹uN½×O; æ5Ì™÷úñõ[Š&âèÕhJZé^?m7í·¼À½~Ú·ú]æ>>½*\£÷ñ—Íîã;ï^?Šr®©=W +÷ú+†WÌŸp¯Ÿv1µø Øë‹§&r÷Ä^\]êZ¬â6Ï*ô"¹²F£[=©”/¬˜±9À€o±ï'ç‹öH=Éq¼‹eÒX¹Ý-c•ëmƒ¢cÝ ª$å+RC®¶ç.àC·Q^15‰¥ÒO€¢?¶IøÛµÌag¤DŸôÝÎ.ʬ¢U6ÛZ‹Kâ%J¸?Ëx7æs}¦÷©ûfsú†W°ÄöþIÂ+56_àö ’- ïÚü€iÆaçmïäv§“ûl ÍVn½­Ñ¹Çn÷ËSôÚegõþD ëòÀõþdº†Ç Ô0 àþ¾ö1‘S:üAïV‡«þÂR>¬`6^«Su3u¿Àb{áW/ûµà÷ï~þÅ€§Ôy«ÂÞ|3]¾°p,9ùn~b§3@Š¥ná^úJ¤¸w²^á0oµ4÷ ì=ø<|e¹5Lx  ‡X* «KÀ ~ËzÚ‰1WÊ>áò§Áoµc•:OƒóÀåîó3S <ØÑ—}˜MÖløõŃŠñчÁ^|ü ÞŽ´zÂ/~¦É8R àW î0¡ðqµŽ¾2`ñqÿG¡ è•=ð.ÎÖ2ž·™9 \‘Ä„CÚö3X0×M #V-{Éw}e“XçFm|{6Œ§ÄðÔ¤9 À.V +ã|\Ó)Ïk’Ф_CϹèçĉ¬áê·l¥ñò7ÆÿNðóò¼I¥¾w&KŽ]¯ D±zçGòÒõ3Ä*öïqFŠã:+ÅÕ+Á~:¼!sC”\Ãû‰˜…!€0`ÐÏBŽïûáÕK[b°¾ |ÄbƒC“…ýíz›sýé¢þ|''?üƒ/*#ÑX¾»¶ÔÉ`¦½oæWþ™;×OkÅÇ{[K\aÇíø8öV¦ðæ4h?Ü“ÒÏFð–x ¡¾o“ïaöSq¸@íÅ>ƒlËÎ:'ïO½Ðþ,WWã\³ýá(|Ù.Ô‚)xÚ:'%û]¤\"žbJÞŸ‡A¦5C'ËíLí»x]}”ã¶Òwáó~UÌ>ÆétáóáÙŒ1”^¯àÜ ´×>Àu?‚ÌÇ‚±Èë]¢{½Mn¢±´vȼ‡W£Ém±_îµ=ñŸÆJw6"˜}q:EDXç|¸yyå,®€bÀ¬­÷æôÓ,§‡ýÌÙ:(Î_C.t*ð ³ðkƒƒ0 Íx¼ñot0Æ5€‘´•~´®€W¾ü} ë+(çWª˜‚Zƒ¨ö÷b›oN£=2ž î-Øwl‡ãÇŒnš¸kþ‚îXxôéýè9IÞ]+>¤¶hRÇ“ÏLÃ*•;77¾gš]&HÀvýÙÇìé¥ðÊ.š¢já{™#>œÚVš"ØÁÌ«í€Y·4‰´“…T ï`ÞIwC)ȹ·Ø$€÷èx¶yúÎ,tºËP àWs?;p&Ÿ¡(Ø\î¼j™« ,2tE3Œ·.ættä á`ŽÖ`ÑxÚ@>ð‰4FwÈlçñî¾<Ø·Ôçå·z«ÏRµ\»º)N_è&«ùiÛ§£ˆMì›"¯ú×ò Ø8Òâ&_odE +‡¿síä³xÿy°Øs­ƒó*›Ê”ý¼ ý"*#‘ Ìí +0q+t*fbâ§O÷©<–I¼°'ɈRŒ¶tr‡»n zÆ/núUôá„Y‘kºäYôç¹v§K%É8µ#µ9ú[mÖJáÃ_êO®æH%A8m75ÓJÔ¶ØO¤wúuà.aò ¤Tά&ºÑˉ‘ ýÄ[ìüÐ "ßÃïyÞ¯ñ™T£˜Íû»ë2j8SI -­Û»×ø¨•ç Ô°-̧០õߪ6Eym^Û·ޝcŠ€E>WØ 0ŸEu²€ò¥evóøè›=¾õžªaÎ. ˜‚v3ŠÙèpÑÉ`PÆ:7pCsœà½Ãªæ'bV3°b +£†Ê¬a@ÚÌñØYjÝ€R‡³oÖŠ›·á\þÂEÆm0£øœE;Ô¦† âJµ+2Úi˜æ71É +r•[ŸÉcÐ_;Ç[„‹=Ó9ýRnƒ£Ý,šøl<ÅAÉ‚?©|þûùú}—b¢>à-âµj ¶Ë<æªaUø|(¶ò%¢šµØA£±·D}%¾Ä_øËèÝ…}’ˆáÚ +”fϳ+òÃÍ<-øµls¥žp[vvêO1Ïñ´ ä±Ëæ)þ@žß [¥šç?9R='F>Ï‹†’buðuÚPŠT€×wv.,ÓtäÚ¯?_ªŽöŽò"Ž>•6¸ŸtÄY°±~I>ϕ˕»œ[ 4r°‚nCŸ˜½¸¶»þ–Ý¡À™7v®ñ‰,­ÃYXØÞ]Fýaç¬˼٘-Qù·¹MÆm¨N\WÐp¹/Ì£Ÿ¤A«ò‹ ÀOë7Û6ІUœD-Áî7­àõ'^ê]ü©‰×Xå¹àÄË|Ë?4ñhÚ™uä?8ñhÚ™SšÿàÄ£içeÿOM<šv0ûvâÑ´CŠýщ׵/™x4íPöYמÐÙA%ìS̳1$:†žXf¯‚G\[ƒÈTBÍm@ìy7âB¦p$ð#XiŒ¼ +Tì^{è¹øÂ­5QqGˆT¦%qÿáõKAÌÙ¸‹‚^%×Q¡‡Fä¥Ýö‰Ñø™ZˆT]ñr âp-P½­ +U;h¿¡‡¹cˆÝlè}&àUÍ@ x«øÉÏÿàÃÀ§½“bvîaN_&RÌTö”훽ØèûŽ`WFøûÀ>À”…*àî—L2Úm‹t· Þ–"¾¯ð˜@¦ M„”½ªíS ‚& üïC-Pboþýé½ãƒìcìƒM -D¿ßò$x“ñä´Ft.ÇJj¬$!ÐÚ(³o:~è”>ð;"˜£SN–îêgå>0ùdýa kkO&%{ç™Ã ÷Ú}`äEsó˜J`e2W§ht¦R—m¤ùÕ¤»ÑÛ¡àcw®†i ~•ûpÌŠ7B#JD_‹”$-ÌC1…Ùp߈@d +¿[ ˆ¹Sɦj~y/–‡óÔLck“Ñ£˜aÙhPWˆÞZèV}ê%>ÓÏ9½1Ť7=–ƒ>iª7[±“Ó#Uä˜Iy“±ioNŸ'®½¥ˆAÄ31ŒÍÁ”¸²Þ…e;s‡+53*ñýëk½>ô‡ÀæèÌ[R‹<`*­>ŒÈ_¥>XìÚ½€˜f*Yx‹Î•"G]¢ªf8îÜA$z4¼)Üq +>Q]s¾ÿšáÜDuÍ7ÉYŽ{ «Z‚‰€ÊSO ° ºfîJÁ+*xa®Üûa9©Äö¯ýç€J—`Í·¯fš°èøÅ-*ŸÍ<Ìþ±/[ª|M°3è}Ú2uRcߌU^l­sæNØ Î¾ñòŠÀ»yS׳^jkg }!8m˜UŠh%åˆò +Ya£ *Rã ÉìÒ?²cŸò„«ZN1RyY°/µ;Yé¤Å^ùìÇf¹ÖáfQêO°J®ó•sßâ‚öÞWcñvH\ל‰Žù‚g[ÚüR€õgÝWÁ >Ø£Oü„s€]tÔÇ~ +òŸB ˆRrêYYˆƒqNNŸ?  ñŸpÔ‹­k&¾|]sP\ð\\Þ°¢²ü scéGL•ËZìú³¢²¾à­«‰ú þôºðêOœÿDˆÛ=Í`ý>[l˯¾qå¶JŶX`¿cä(¼êçë¶û07•§™JË»£p@´œs27GÇÖŽm4ü…œÞ£€ö +9aJ†½ƒ=G1x4T²@gyXu$ÔY¬Æêmý(J8²¶O¸šàz„ç3xÑa€©R÷ÅÛÞϰé›ð zV MJJØ3çG¡’–=ŒÎ9yX¢Rp=æÎý¿Ä½{»gGqü æ;Lãp‘Žvß»°-FÜŒŒý‚…1vL`ƒ&øIòO>ûÛuéÞ¿]µöX)ðc$¦æì³/ݵªWU­j³w[·ü]u +o}èY¾{öEþüâÛÞ?vofxp.ßúú¿Õ¹s~ù·¼’© \ŸÎ~wug¾zKþì§ò“??ÆÞëë?úÇýúoþäão†o¿ýMò?ß{¼öé̶äÇÿý‹­µø²ç>^¾óýÿ͇¿ÿÛßÿê—¿úøå[/þë‹wÞýN|üóß~ó÷~ø÷þï?¼÷Û×ÿþчÿá埿|çݼúÎwzyïÃ׿ýù‡/ß–ý\ oë­*Mø¨€táÅE¼÷‹ñ­_û?ÿk?}ïÇ?þ…TIßþ"|_:5¿*• oý_MÓÿÅÓúÊ¿ÿùkßûOoyíÝ6à þãúÑ¿úöÿæoÛ?¤ãç&EG÷_|ígï¾õ»ïý5÷ã÷oõž¾ùÛç~ã÷ÿüホé¿ùµw¿öš¿ÿU´çAåͺ(óY> e”ÅÁß袨¯úÔÊ(oÖEYµŸVåͺ(;ïÓ(£¼YeEÏQF™1×;ßú ²³{Œ‹þîÕW诼¥þâï¾óöV˜#ñ9Ù*÷þÿ¥ù ~4ãã¿ûþA$bÐvê¿û‘\öQ¡àOŸ¾´4R¾Ã_ò+qÏ?þí“þ–?NBÀºÅ3ðß]ïŞŠbñß_ýöÝß½û÷ï~ü§@‚z÷ø¥×?Ú¨û÷éŒ ¿ïÏÞ?C¾ŸÎïiBêϾÏ^ò-oü%ù·ŸþÉßæ›¯ü_æ£9u?Nßæ¦I†þ7ý´?ûeáý¢1ç¯?x"EذõÞf°“{ˆ3ýÓSÀågŒ;®ÿõ/óʃ2Ê_~ðÍo¯´åß~ïŸ~õÏþü—ÿ—¾ùÕoä5z ¬,¡êÅò_*‰|ÎFxÿ««ñÿôãø¼ïw¿,ÿöþë¯È¿=Ü÷~™øÏâ×ÿñ+ß0wSüÑ·óÞ/¾ð?ÿþÅþê«ù£üîwtPÃÐ+Ó›ü_Tq•_}áÏ8ú…Í~·³|}K³}ïL8=TÔþ•žeƒ’£|ï?ýé{ý«Ûoþ%þZS§á/jÒ¾üoÿù÷;1¹SxïüË&lM¾ò7ëÆþÛ¿,m¯^ؤ÷ò6íÔC´bþò¾ñS <æ)ëI½%Å)Ó[¾uõ–ïÄ÷Þþ'î¥(_{kG9oóÁaþÙ«'ûÑù¾¤zÀå›ï`åùys_Ÿ Ó¿òÄÅ|2ΕŸuú¶Ÿÿßrxëý¯PöÝ·5lùå×ÞYÚ^•¦wýFB‹·ÿô;[æç{_ÒŽ U‡xÿOžø Ù›Ò÷ýŽU4cºQòh‡êSÕè{ò*÷ëûçµU êgÿò…·4ùVyã£äåŸ}òdårL(Y©½­(]ù&+)º¸IW~†ÉÊ]Ü¥+?Ãd¥v6£tåg˜¬¼rù–¹ý¬’•óÝ¥+?ÃdåüúwéÊÏ0Y©+¥+?ÃdåC·–MW~†ÉÊOšaûtÉJ>mãtåg˜¬ü¶Ï YyVo=ó1>Q²ò»ò3KV~ŠìÇ‘¬¼Ë°}ë7Ÿ2mpIV^³Ÿ8QøG&+Aöc¥+?Ãd%̰½ñM<'YyÍ~\Ò•Ÿa²ò©Gx~²rg?|ºò3LV^ߨ%]ù&+Aw¥+?Ãdåa{V²Ò¼±_ÿqùìOš¬¤5ö‰ãÙÉʽÆ|ºò3LVnDþ…Ÿ.Yɵ®8]ù&+_Þ˜2ý ’•Ÿ æå3HVBDþHA²òËãFÉÊNDäû¬Éç8¢ñ¶¸.qy"ùø~ZVÿ¯ä˜_|ÚñS“Ž›‡ù*ǼËÿ9f%5ÇòfÚñS“Ž/¾ð hÇOM:¾ø$´ã§&—:ËiÇOM:ÊwùhÇOM:ÊoùhÇOM:ÊÞÿhÇOM:ʳü´ã'$i®Â‡_ÿÊC¯„ø®Ú–­4¿°d*ú'Í_è+ë/ýðߨ>à‰<Õ<Õv.š,á‹¢ ûåw¿6!¯4~>šöƒ¬ºÂäzÿmUOüÕÛܳ@µ?þÊ_¼õÃ߯\cûª°£¿øàÏÿ ÎùÅ¿üÕ?Û¬0hŽÐù”ÿî—•^Ç(Qúݯì[þoó¦¾ó;.º`&6û¯…×{ë_ÚÌþîq¦-¢üÉëÍ·ÓEü;|ëƒ/vN\s§9Ðoý2“ˆø÷ž”ÜûÓ¿ZÜâô^ì«:VÞ„¿þW4«öÛÿû/þë‹/P"ò'ßøøçIÈ_øÂü“|ø‡ÿý…ò“¯øË_}üþOÿχ¿^ÊÿóÿÂËø²—±úÇñ²Ð¾ÿ³_üÍOöáoþç—^¾ÿñ‹ãå»ßxñ…Ÿ¼óîïÿðÞ¯^ÿáW¿ýø§¿ÿ?/'<ü$¼|çë¿ýío^~ñÝïüà›ÿðòÿûw¿ýý^òoyù÷¿}ùê?ø%?òÎþæý¾óÞË?¹¯û_é‡Âñ“yÑi‘¿ö¦ËýðWÿóW?û͇—ËÎgÿ ÝÝüÿý/ú—_üû|ºw÷âÐÇ›†ÿ3ÿÇ_Ïù×ùGÿëe8^þÍËúoÇËŸÓ}ÿEí½<åšûË·G}ŠååGój{Š}„õGï?þQoO9×8ô?•­ûo¶®Ëñ+¥›üþ‹ã©½öxÄœÛüñåñG?Úq„Tb +ýI¡—>ú8Ž#Ñ„’J¥¿ãü—üò‹ßÿZj/¿õµÓ˯Ïÿ_’‡ÿî|=ü_éúS땞*?PÖ=ŽÄÏÜÂS›ÿúö8žJIóÒòŸüò7ÆòtÌ{]ÿIbÌO=ÏG}»÷§’÷³vµ‚ŸýÁúfó™C‹½GL-´Þç#ŽVûQÆüá–ÆA’CîG˜]roµÑk˜;·1âü[©Ð[^Cìó-ô´_ÂÁ/ µ§r¤ÁϘӱŸ±Ë èOóÐëIO±æz¾÷Å:zMàgÙ:žZ¬õægûü‘ùß7?ÛÃS<ÆÝ†§Q梸ùÑøTGIw?›æZLùîgóSG†?ûƒЦyÁoïç/êË/~éåþan¶Çwæwmû¢´ˆÈ~^ÖÚߟöïÍåøÅw?þíÇ/Cˆ_ôƒC/ÿ¸ë8êÓ1?íã¶œ›k®Ä˶Ü„6Þy7[?ßmÙÇSªãn[Žø”æ’ÆÛrѶœ˜S¼Û–ÛúùoËÑçÔ»m9­=¶»m9ÆSiÇͶœŸåi~©‚váé(±Ýý,¹¼›_;ŽøTR¾Ù–ã˜?"îþl~:b»½åüÔZú£·åùá¶|¸ì§Ü–±>Õt¼C¼)ÏË~ÊM™gpâeSÆñt¤~Ù”ûà¶Û×x³õóÝ”iî·yÉ›M™ÒÜS7!ìiDÛ2Õ§2Iá¶ÜÖÏ[¦1_?Zâ‰q^çnWæãi"ÀÝÏá)·»vä8Ÿ®ÞíÊi¥ÝýhzjÇ];r¦Åv·+s™Áä]KÖùÈÝß°+÷+Ä›ò¼ê§Ü”óÄØF½lÊ<žj¼°çÁm·¯ñfëç»)K˜~·ßmÊ2ñ&€=hS–öz¸ÃÊmýü7eO=•;¬¬óÁ[½Û•5̵ß-ñgˆÚïvå´vú›7?;^º`k~Š=ÝmË:ßi¼`§µµr{ÏÓ[ÆøGoËó%â}y^öSî˹šR—}Ùæ:9Òe_î?‚;o_ãÍÖÏw_isÜF°mžŽq³/·íË6ÝÎü®7ûr[?ÿ}I¼Kèwû²O·Uúݾ$âå¸a‰xÉñn_öô”zºÛ—ÄÜl6özÃöòTC¸Û–½Îpò6†+u…ÿèmy¾C¼-ÏË~ªm9®ÏSÓ5†ÏÑz»lËýG`ã=\ãÍÖÏw[ޏãÝÏæùJo‚Øi%w÷“õéH7!,[[»áЦµÍhòÖ‘Äþ[ø£7åù +ñ®2=ö:ÑK6uçW„X«rþ‘7ÊÒSð& :¯ô&4! »G±‰´ª1ŠÅ¹†oP,=­÷h0,ÉÆÇ6=¶"•±,[ +XžoýÄèøtb3 n3>F 6£»0Œ×E~y@ +ûn0¬ÈIÄaØ+¹$QbÓBƒ 6/©þâ +bzÉ ç0l>vxs6_Ö|\bú&gŸ ˆåy ‚Ø<Ü–n@l!4@±¤—(6‘¶õņF1ZËe@›¦z cˉ£ÐªcSÏ…`Œ]=»CclšX`ŒL#´‹äÍD±¸‡b‘Þ.@1½äàç(6ã8â +Š%!Š%b€by.Ø ŠeIGc£µW:D±é3(ÿ‡PŒ8—4nvxzª´ûŽ“3 +ıùºŽ’<Žé»¬5ˆcQ‚ „c‘¤Ç1]Ccî€c;’ð8¶—¥Ã1½$¡¾‡1†vFTc‚ú@Ä +[2ÂÙVñÆîPçÙ06[Ô0–%†E0–e™ ›– ²"‘/2JãNÏŒ€lnl¾dscS@€€ŒÜç µÈÓXÓ­¬ÉQ!Y#æŸÅ¦§ˆ­Ak‘¨q¾TÁã Ž5©C@V%ØA@6_V§Ncõ)s-# #HÉY‘3Ä1ÂïÚ!ŽÍe’C…8–%4Ä8¶ à-æÒ!Že¡W1Ž-7 +ÀŠJÿŽMi4ŒM_å×9Kûጥ Ñ}xÓ›”6À±,,:±¬çyˆcsós+ä«3ı¾ÃX (Vç‚ ÅæK¢ä4F±ªË XÕÃ$@±¹&)Ÿw§þ¦Åæ¢,%A›/+¦xƒb™¹bsm©A›_”xt|›8R€ –ö¡ÊXR4‡16êÉÉ¡XâEQ,Éy£Ø¼Ë–€Q<£Ÿ{è<ÅæâXLùÄóý$ÆÈ{êº\ÙcfwaWë4•.Áòü®ÇùŠ_ˉÔ'#ýóq'Ò#‰¿{ô\lOÎ]|þ.z‹sµ¥˜êÊù +7j¥²É^¢l›‰Hýñ-²Q˜ÁùŒ!] `šê!AcM^†MýŒ=Í]²ÊÁi~ò‹¿¦eŸ=ðÉ]-ò6 iœ¿J¯ÇÅü´ S=/8ÿ¨¶Î;{hÊãÝÓ»¢3=}ŸZ_äôî̘ØeLGŒíòsò±kãŸÓ7]Ÿš]YgšâÑ~l¦nhÆr½K]´/.M×O(C"Mè)7!E.y71éÏ¿ï2î»åÁ“2Ö4ö]–ãq½–wÉ1¯‘™¦ãá»ìa頻¦*»>Wðy(!Ìï²^ã‹L¬ÕZÝr-ÓMó¯õ!Õ5Ô1f Ñ/!6+1?uy•ô⣘ÊÅ]ð%éy;CGž_ü²œg@ßc•å|Ýø9èÑ{n‚ù¿Î}ª—\Ä‚ÛÄA’ô•ã1¹d’(®Ϧ—¬Q…Ù”ôtúsÓÓ†ó…É;ér8-îŠóU–Έoо +­JòOã\&úućÎ诹ç>ó«‹zi)ðq±ÒÞÛ¿m¼|ð†8 2f¡¹C;WsÒŸ[ôx|¸M]•ãƒî¦êœQü­Æ0zx-PñS÷MaߣÇ02R»À02UE‹adrIa´–CÇF”NÄæâšqÜ ˆEñ…Ä"Ÿz ˆQ2VLÄÒtË@9Kþ[GSbópÚ*İi)¹@ Kòá0†Q‡¤Ù†Í‡ã°`Xzšw;<ˆ½ÖWÙ%3ì@,J”‡@,ªµ ¦—<ˆa´JÈö3DF;m.„a|¤Ka™<Š‘gžA;!€ ƒÎsQ,Ìÿ• +&Ã!þ‰êí¬ì‡P:L a–Kœ–Âìªçùëp“ qo*Ë%ÊdXÙhÕõ›Êްò.žKä +¶—H‰zròY±@9ĈÈD¶4XÙA¿Œ¹PD&Òг2qšW™Hoë&'6MG”<ˆ¥çXGZK%N“ü.Ä%ê×T"-’Raa­È>@Jì•.W~ÿžJ䕜“H–C¢BÀ$ŽW\Ø1Ï´„EØÙkA*‘"^ÙÚŽJûá•8?9`JllÇå¨Ä±)HK%Î?8F…´»‰Tb8ôhä©DªBR»á¹DÚé”XФ §‰{U!™ÈK/úd +‘‰t#wu[A# À%Òªd7ï¹Dz[óØ„+;õ±¸²cðއd"}Ó*;ôƒ—X3$碭‚ÈÄùÀM~ +dĆxJD&!¦™(ô ™H‘ ªÑWð°¦;Ìy6†E =0ˆEÞNÄ"¯„aQv>ư¤y@bIö±rу%Œݬ¹&€aTs½à¼7XØA¦, á†LÓ‡²ž§„eeW!„å§3D°ùÔ¡@ËSAKOƒ)Taih„%9Å`KrB@•òµD bXTjÃ!XÔD%€°¸óE¶õ8EŽ‹[¡‰„°p¼ÂBØÏf!Œ[*F0º“`Qûø‹:(ôSòÉ0zËs—A‹z.¶NaÁ’‚0@0M¸ K¼Þn,IMB°yœ*7–¤¢¦ÃÂCɲ…0R+’¢FaÄÍ䛢Ž¥¿@-¯¬•lÂè£]!ŒBÃ,çn a+ж–%„0ÂîÚ‚‘…X)€` øé¦¨#(wŒ`*¨Ç¦;Äy6™…?Âdb”@dbÜûÔ‘‰Z“‚ÙD:Z§ÙD-ïAlbÔddµ1 ±‰D`èÑÂ^2 '…ÙĬ§Ç%N|(Z`e¹Ä¬Ì7ä3QN’‰Y9l@&f37d"áºT;21I75"ÓÄåšnÈD’zR)G&æH}¨c£’qMŒr^AlbÜ;DZ‰º*1›(, "Ïj.G&†3*ôtbÜq¡¥ £¤q)IgfÕQ"6qšú ›H7RrØD¢À0™Hux¥C21kÈÉÄ,g;D&f)Î\"ÕĦpÃ%ɸ".±È¹q‰å‰4zn¸Ä2£F¥)ì&¥-i´dbÑô$I±Q +›™8ŸNΑ‰ó•hú +dIJ’"€LÌ›¨pdb– (Έ¥mrlbÚ!cӎנËX©(Ç&&ý¬€ML›õä +(Ã(k›0ê<ÆH´B3QÆÈ¨thˆí²k9k½Ú¹O«š8ÝD‘¨ýÞµpc¡Àßcƒ!›â!-@´»Î/0Ms õÄo¤·ÇáKžKÈ~œš¥MŸãÍ«_ž&ù8sá5cÔ¬gÒQŒ—h§Ò‰Eê÷FÙ»q™„„™'œ9¶š¤aóêëêK›Ûª^wx¥†AÔù7LÁ#Í ˜ÃSU_ 6?ý”fGo"¦‘UŒ©X,wyh=ó8Cß&¦|$ÎõÇn£ za‡”{5sh¯rḣ¿¢¸QrÌeØ –ÍÝØýM«KK¥& +¤Ë÷.r¾&ˆ(J/Ù8SH±h»œg¦©kŠ$2q˜mMüqêNpY$ÍRÃ&!ŸÚÖÊÙ!ºÉy,X¶.?Ö5õ˜šÙ¨UÎóZ±`>wÝÍ<‡ ˜éþéøMq‹ 2蹫œ<æç;η¥¯rÅ;Ôg~î~ù:TO°Û‡Ù$¹œÁ²–§I/)‹™D¡N§Ýe,vß½i.¤ Ñ\2ïDC0gÛi’¶;»?Ø“p#TÓy®<½äJ§'s.01±¯Ÿ&sgÁ!É3´ýqö»¤¦ù}”i1·Ò”UIþ·­J˜«×~-ï’S²ì¾âË–o°ŠSÊõ@9MEiiú§ß<ƒb +åºç&¨D©}¥öÁËý“¬2þƒS´ ÈŒë/§FZ±œ|¡•Û›l’Ð… +Ùí9b›&ý®­ëbâÌ€²*;"8ÝeKÁió"ø-à>Á[Ý„‘GðV…±Ñijb±çÐVâÐ9´5ÝŒþÚH{lµ_AgšÉËÁs(i#I²ÙC[—t”?…N‹PÑ)´õÍîØshëJOùshº5Ð9´ ¼ü9”. Óˆl’@ÛžC_Ë]ækZZßU›öJïŠêbá1´µ]aÃú6z|µÇPúÜDXÃcè4JñŸ?†ÒÚb„ðÇе&á1”Œš(±çP2‘[çÐiʽܔµ´ÿ,¢Î¬jiM‹Ñ9”Œ=!Ôo¤ ‘:†’I“þJU vì9´õ]VdÏ¡´¸èðÏ¡´bkí9´ )©Ñi’ÐDÛFí‡$QÀ9´³KÇçÐi\ùG»‰É´J¡Í9”.yˆùsh£ŽúÑ9”$çõçì9”^ SPè:‹ ³çPÚúA;Í9”ö÷s‚?‡ÒWU7jãTZ Ú¹iϡˢc(o~mË1'ÖÎó˜9†’I1Àƒmd·pS´y 9ÏÆ°$•zÃ’TBƒS(™¢–ènIâox +mQó_þ:M Ÿí)´­~Ut +mQ;ü)´­Òd +m$¤!á˜?…6åêÁ)´‘óÑÖ!s +mDÃKÜõª— ʵÚSh;Æü)´hø3(_p¹ú3(™$YèÀûД:‚¶3¥o íÐpÌAéîÕßù#(½-5Ú#(anÝ%£ø xåeR2:„6*ž“…=„Òzíròó‡Ð–v«ƒ=„’)WXcI&Ä—¾–+r•.¿¼u(€Iž"­Ùý´c*go{%/Â3(݉ž†í”î_ƒ{mJ9À3(½æ€N ôi´èמ@•|¶*- öüIkD™÷>¢r†èüÙâS{þ¤)™t{ü$åRö’èøÉ³h":}¶ !8}’I“ýþôÙVy™?}’³Ëâìé³¥lþôI»æX|=}Òû×Ô°=}¶Ef¡Ó'­.ðÇOÒÞâ”™?~ÒÊR5ð¹‰â‹?i±ö„NŸ-k „NŸdÔâ3{ú¤½µÕBX^Éy€ÛYœ Bç´û€ ãì³;hÞw8Í÷Y»ëžú±ÁwØÅ¸Ýè€{É%Aà¦i(²JpzèôñXgVÀk™b)ÿ/-ŠŽ=;¹âq»®ð°Çä(¤EѱǴ­1n×Õ_ ¸ã®›pÇ]±rÇ]ë£w,%H;^Ñ5䎇F\¸á–pÓ8ñò¸i™Ü·tn!ÜZˆq;H…(Âí [·ƒÔ­`à’¶GèLÉ߀ºQŸwÜÝ‹©kî;Jº#wÜÝ’¹ƒøW„Ürn¾Aî Àî°ûNv™»-ÁäÀû;Aà}¨‚à-}”ˆ;ÚJ¸ã±“C€;JcîxHM ⎧‰ó„½çM7è}žÈzÚÀaÑ{½Ê#DïcW}9ô›qè´y wPèرޠ÷ [ô”æÐ;JS0‚ï%Gá;*3àûÌÕ: ÓóÆï(]¢£Ãî|&Œ¶Ï.bj󗛞þLL„œ»]SÓE Š˜º„󸈩ÆÂ®þÜwhâÊ”(…5LÚyj˜´¹Õ0}5Ls ¶õjº+°­š¢vayö¸"¥„ª˜–:$¨b"¯ÓMÓÐÂ(PÅ44µ ª˜ºf3aÓ٣滛º¤©PSß@ ª˜šDõ¨Š©I,ª˜tYâ*¦“ueLÓtdØÙ?M¥•lœÆ¡u®X©‹_À¦u— Ž©kÔ1i|…ê˜ú>°ƒ:¦±Ë¾\!ÓØU–@¦%«bPž@¦E[…ú·r9´ù×ÈÓ´²ž@.ÇÖ6³ 2MÄaîävqg§Qʽ}@Z4ö r [`Ô3È%l¥Ë ÓÓÉAÚÈôJrÄüq¡SDý´ùŒ;û¸Ã:¦¡½9 ŽiìL›«c껹8®å  Ži¥ª@Sß@ê˜úV©uÅJ]µƒ€éxž‹d±nqßQ2kógsê"S–ýmcßX%ûžå{}“±J½mFÓJÏòûÆ"Ç?VtxŒMø’$Ò©ýJåÒKÏŠ—y½²OÓ¡J=Û˜õs~Û—çÎòJh›ÚW’UÙ“dFf¹‰^R¢„1íÁȦU¦q˜è*®¢©N,û·és'-îòÁo\,Ïh¾ø'2iÝÄ¥¥gݤÖiÐë6·”àR½ï4ì0 q>½ÓÃ4½¤z…k Â=ÐÏoó¸mbÑ"€†n±hÜØüû_%˜múûf¿¶8× +´$¹Âln…qE¿Xµ6¥²S¿ T-ÐÁ@U^«ÄUë0@4PwDïâ¶'j€»l*¬â=Õ¢x€x1ÐÝÉùÁÅ'ãâ®è%“Œâpá@×3ú‰˜>8õ!]<ÐOjÍâú¾tÅ0ðcM¨ hgðáæõ h§ö…õÊM’8¨Úºû^\8P5mlãÝ;rLñ@Ñ· â"m¤8È[1ÝÅyóÒ."ÈÊÈ Kâ ™e·P<…m<ðZ9«ÞÆY rd™ûã¢ê~ (Úl‚*ä ªÀ¢€€–@ì0 ¨¿â€  Ñ‚¦Åû hDp÷›€ ‰X +Ú™å²A[5! ôßÅ-cïgÓÜC³æZ‚hî¡•€æ”ÀÅ,7Qnšn¶,wÑÙ0€å&I™lOsg4wYê(žæ.A¨RHsOc×,£¹ÃN);š;î>?@sÇ­™dXnº¢&€-Ë=M[ØÉVE¨€å& +O#zËrÓÛJáFø¯Jëx–›èPm›·$÷P†’ÜCSÊ€äÖD"¹uQb’[¹?DréQF$÷Ø- ¹Ç™&»hý.6ñð0Hr“‘=—'¹ËÁ%S€ã.*t +9nú¨ÊÔYŽ»„=-ÎqÜaW°Ž; +WŠ8î•¡wTõ#ÈqÏóioPù¯Ð9s`ŽûœÞ8îÄÔˆâNZŸ(î¤5GâN¢©î¸k?Ž:!Ç}–¸:Ž;îN‹e•Ÿ!Ž»ð QÜäÖ´…ÆRÜÛ"Š›Œ»$øJq“ié§Š›¥‚€§¸Ë±‹•=TZš0è<»U7‰›(VÓSúi÷»î¦$nVZդ͠Q7é¡4ê&MÂFݨ)ШKÕ)¸O7Šš®´Š|F…Vç‚t…Va$A¡UxÈ ›B«°%,\¡•ÎÆÄ¥Vá„L[j%ê(¨Ò*h#.¬´:çÙ¹J« âY¨Ò*èVZ%áA—nÜÝ)î’QθO7©‚èÓM* út“Ђ¸OWUPQŸ®ªz >ÝôÐTëútµ75ãæ“•ò¦q‹´«5êfE*Ш›E;7êæÕŽäút³Ô >]×Â}ºi‰»6ݤÙ2Ц›4ÙÛt“ú€6ݨ2_ M7ª²•V¯es€J­¢ ¨´ŠÊ`ÀJ«¸qÖZEU=…VqϺMºq—L¹&ݨõ—®E7ínBТ»ú]@‹nR"´è¦«‹žhÑMZ0ztóÎR¹Ý,ï +¶èfm@-ºYªåA‡nÞÀ :tuö (²â.oeR,†e=XÀÝ,n 3=¶6 ;ÓÎ>{rJ>K6MFÕÖ¶Ä_ÊR¤œ™ôàÉè´Ú&<ζ ë-¦‰Žf˜ŽNšttt:;a,=M">øè¤;ÑÓÑiMô|t +›Ñ¹òÑ´qÒR¥ó|t +Ò‹äéè´:©‚Ö{wA&Ö¶t4™T!˽élâ°tt +*lëéhz%ªâéhz“±Àät"ì–¡¥£§iÕW‚»|˜¾h?Á:tx:šV׸ÉN§¤*_ž¦õªU™†ŒN$å#‚þŒLÆ^ ÍÛ£‚ÈVLüq´¨À“Ñd x çÃ}xYFzìÕ—énSdžN«ã±ÑIÕLÒÒQ·Œ }PU(÷d4íÓU³iØZx  t8â¢SØZLSx’øÚ2ÑIYÈDOc òs–‰N‡®qÏD§Cõ&MÆ*옥¢L–‹æK¦ŠsÓI5‡ŽSqÄpÑéØQΕ‹ÖKå(,M/9ÈP(7ú%ˆÒ)ä¢ÉÏð¸%ÏEÏÏÍm×€‹&W¢biž‹&g¢Š`å5I›Z*šÖ䎓-MFÎŽz*:ét@E§m9ÇEoðó”3¹ •av¦;ô~v8PÏÖKÔ-àço• +ôa8P¶* Šªz‚p hv†Yi È[#Û…Yj +\8ðZ.)%J ÈšÈñ@Ò¦/¤=JÊÅIed@@°Ä¬`@°p¤Ý¿å‚$ùu¤-³îâ´eÖ]<™j¾‰æ«Ì0;M_@*é]4…çÅÑ@Ö2* ”}pÑ€–žàp œâÂ68Uç\¨«yP¶v`‘¢S[ú&NÁKäPïõØ&NÂklå2 á5䤲ÓýXR¦69M«+ç›,^²x¶j» Ã&§§iþÝ›¬®­×HÂkÍf^¤X×€Õ#só(OÕã&p^”œ+89MwðhUz8õ &9Mo¤Ý xõ Å¨>9M[_ç³[„ G£ÙEŸœîçè* ¨äØÂ€×C=‘WðÊÒ¯qF†VÁklÄãff8ä +Lvž‹cô² hõGbÔ1©ÆÈÁêÄ. cômn†!ði b´£"­Ú5ÛŠ@¬ÓÑXÑZ­ öÏ%>禸Ÿá«±Ä… ¬zÒ¦9bü ‹RV ,êak€Ç°v‘‹Å0zY宋˜viÀ]ÄômR‡“Uéc7©ÊòÖÏ’!‹a+Œ¶V¤Ã°×{`X?ç¸Z cÄ7iß+ ¢Ï b½.Mûz ëA&‚ ë§~ˆÅ02õã¦ÂŠVóg«öÈ󸆩X=ư´™"‡aëÜ0,íþb€aIƒ[€aDŠä1,ïÚ«+†ñ«¤]°ÀŠ,¹À+º¢ŽzF• + B±KN§72ÐdÕõ&+.°¢_pmðtW`Õ×É`XPXô¶½!Â0ÞýVX‘)p<8-JÔ&¼°;á«~ÜŽI¸EœgCX½éWþHŒ’”Våp Œ„¬uz­1j“„V·€—[«uK° k¼Ü †µSJÒ^²k-İ®ƒ6†õÝIë0¬¯@ÍŽk bX߯±N°€²>7M΂ ÖVg“Ã°Æ¼Ë †’ÈÃ*³Jè•6Þ)Ó"©R¦¥•DíÉa-ÉÐð9¬éa@6MM~›Ã0âBïæƒÓ#<ч¼âÑá½í»Ö¶¾£Ã°¶É‡aMÎòÃæWpÃÚ®yr ¦JÄhÉ(¥Ü»2Äh$c¾‘RžÆ5ÑÞM+ÖRTP3nbC¢$„bÓTÖR¦I¼ÑRžF>Ì##Aôµ”{×>=c}7°;ëç[ c}QLÅšþ:€bm×ø8[þ¢X“ñ¦€Ø4…ÅûÅ7ç +Ni²­nD2nAçÙ(ÖnJ’?’OC¸QŒRI†1ª`Ë7„"}RM’8 ë{f@¦X€lsplHÂ1"gŽBq*ÆêqlP¸!¡8Í" ›Æ|tH(NÓ +{-Ñ”r£éD{ŸÅÆž-éplh[8ıÎó9!޵œ ŸHŸ›AâX?…O,Žõ=»ÍáX;ë^=޵Mî;£ï!ŸH¦e¸â–” J"=x‡L#95½Icý W“aÍγ 6T{ ‚ØØ,ª1jÕ©p-­1næðz£±q(ãàAl=u TÙ1lÐÙ´7„aƒŽwdâ8çŠÛ-L¦U)o0Œ.Ù†°8?Ž lœ:OÂè¤ã†MœÆz$È&’¿Bmnv¡ÃèÍgÌ&Ž=IÆa˜ºBaCóÃÆîÃp66 ›N†´£®¥½EœgBX:âMqîGjÔñr¦×…M ª +“iõdº^—¹ +æ¢#Ua2q¸ï{]È”µ8ÑõºQ‚×ë2Ÿ8.ßìB&!zA³ e”ëv!ÓZ“¦Û…LKÍu»ñ<û]ᛢ´Ý.ƒ +üÃÍ@€iܘiº]È”2ÞùCšQ» ý¾–¡°ð ¨7Aaaz€Ü±°0¿0·iÚ]öçñí.ôQ“š\»‹¬”R@» ™†L· ¯ØQ±°0cP –k· › +Ln±©ß “±&(,L¦ušt¦¤Ï  –Qq×Þ2 X¹Š56Õ„……ùV4^óïüИ‚5²¤ ±Žívá÷¬ÙÓxmwá“¡®0™$¢í.d,©!aa^'A2Ãî•õC@X˜–Þ@ºÂ¼&YÄu»ic¦­²"£t<ºr56©†‰)ÉaS”`Ùµ»ð=*ícÚ]Øç•†t…ÙWë +óÎáS•kxaÏ|¤^ø» ,+Ì{ Éx”Æã ‚LY³9T~¹Iêù­’:º„zIq'Ôðbz”à;'Zæóy±¬0µ6Üt¼ðöH É +³©ã°r+á7YnzaîáöÙøUñâ7àw4·M:WÈ=5žå¿©` ^U2í:C‹ßI~¿O*Þáw¤O4·_òqßT•§ùˆë’hÓÁwTcßááÈk\öt]IhVßì¸2FoÞ§:Ï 7›t¬¤Ao¾b<ÀÌ’å'Õãôæ¯À ¶Õ[ôž/¥hž|œ£·nŒÞIuz'QTEð·>€ï,! ‚ïijÍó!ÓžWçÐ;ïâÑgœ3•‡€À¡w‘Ò„ÞEJ;zÓ´o=Î{ôÎBÇ#ôÎ"øÎzb‡ðMy8Ô¬ÊGC2‡ÞIÎ2¼“tìN;Ó™# ìÖȪkk¬Cï¨a@ï¨Ú^½)ÖÑAO5ŽCèõÄÑ; +!„Ð;©_è­!Fï¤Q=@o?…Л:»Ž;øÎzÄðuº€omׯðwÑÁ7µŠt™ƒï¢ù_ßeë­:ø.çÕYÑÁ†¾óov ï¦ÍÞÃí³ñ{úÕ0p"”Œç¤AãÆbÜS]¯¾ÇÖŽsð=ÄÑ øî§®‡o’_ Âw—‚ ß]s¼¿Iç>#±‰yÏs1Ë¢tøÝ¶Ê)Àï¦iv€ßm³Ò¿Ûà¼É€*€ßšlCøÝ”7øÝf¢ )‹ßM‹ ~·­ð›d e@Ãoú:Í„'“$@üJKü οç $Æoâ´ÍÌâ÷Xªf½‡Ô |‡ƒSN¢Ã!}ÆØÔw}Eo2i[³`E¦ÔP·™šÎ4ðèt(@o¾ÿ z+Ù‚Ñ{H!‚ï±';ø:3 â÷ÐÅ ¼kð®^¾Uø\”\|¼ïø8e!R3eSƧï.ÌÆï®§W€ßóᆶÏú_&•>¿Ç.œuø=¶$Ãï±Qà7¥©‚ð{®¡Cx¿Ã¡úX¿§qeP-~Óæ‰¢êiñ;R³ñ;xü&Síð ƒð›6OÉ(ÌÞ+†ö;¸}.~‡p3ð#5jÛâw8˾Üc‡=ò×x\8ð;„šXü¦ÙÛ }NŽvÀoZ K)×à7½ãÔîÎßC5h~¯Ù\¿Á ñ›ÆÓI­®ÃïA) ŒßcÚ¿©=§¢¹|¼‹;,þàŸRøPt>ø°‰ð{n}&Þ ~eå<~‡cçŽí%×ÎøÍ %AöœV—è$Zø¦¥¬q<|“±aö<á>€“IÏÃÀã.Jr0­•àØtÆÁãn|qNE·’=vÅc`ª=7YX±Çö¶ÈçzèîÑ­¬T&/ŠâiXm™†qŒ«§ïª 8 ¤ë¼«´ªs•]O1^:²tؤ#K_,ÝH°Óu[3UøEû1ºiÒZ÷ÈY ú­ ‡ôÜ—h£ò±{hDØù’õM&êæfå ­•f­‹{Úу´#éËi×BÞ;_Þ¡ÍåצY\¥H½H/VS¹žs\ªHqlÅ›b´/ë¡.H;Ò*=Ö° }l°C¦¥ÅÜÍ ”5ЊÏڪ歌 LÀŸ„ýØ "šóA «’Ø5H\‹âªÐøÕìq‚ÎxA}·(¬ ªê€€ ª%€‚‡…g‚z, ЗÑú¬f ‡Â±) UáÀ£Š†’a<0tä5ˆ††V  ×[p8PÏFWÔcÓ¤6àÍv ÐüU¶Ñ­­ ,©hI®á„>"Ƈ¢X‡‚øÁ.ˆ²”Q0·¾¥ƒîMi‚` ‰Ä1ú±t*NzSPÕm ¬y H;.qÁ@Ú¡ˆâ.—rÑ@ÔéÈ ˆ¢UŒ£¸1ß…A6>è{§»p ®¡ > ‡=d 9šè¬_ÃþZÂá@=Îòv;îäX#j|4Àñ¤Ù‰,Ç“JÔÚTÓ°X^ Ð-jÁê¡£Ûm,°âL ð) +¯£¡X€7é],@_”ˆ¨îÈ0ˆ»òÄQ{€P îŠ_ +Ð4)X¡ K5Ž ÒÖNu¡@ºÅm¹ XÞGÇŠLwÈýìP iœ Cád`(ÐNU' 4íI…Á@S˜Á@[ƒ6\,@Ó†Ê 9P«Ðö ¨2 …EU/a(Pö¼n +”­µäbòT»ÔùX`…Bò±À4ÍÛN(¨ª·ƒšrã@Á™É +¹)kEkíP00kZ— ê9þØÓT˜B‚Ñ@‘RU ÔÝ{㢺«CA8Pg€*Ãî]8ÐöqÝ…mK¿‚p@¥°P8Ðv=‘‹šÌÂñ@ß éâ©æ€èÝ¥à}K¢ŸS`0  Úјa@Ð51‚®¹XtPbÈîâ&øâ&‰d4Ékáp íò7,ö„U©:ÄLãêw¾²êQ„õ,À÷ñ@ÝcØ]-«žôZNAM=¢ªoWù4IóÆáôöŽ®T)ÚÜÔ©'Â;#„Ë’äÞ?ÙˆÕvp{ÜÁ¼x*v`µÖh­×u›$f\)𸴸±FzŽmX5[ܤ턦Xíàß"EíZi·:\i{;å¿c…O<ÖáÞôàZ8m5¾¨›ãNÕí¨ºkIE»VDQ¿³F]vBÛÑtrÏ .¡ÕkýàU:æ‡Q¤…¢Ñ¦¹4M»aí2ðõZ²EòTFèî¨[úÅÎE#“¦û®&½dÔ&83¡í(*4 MEüX26mmJÁ¦©jÙ¥‘e$Ëíð|Ö§Wì]œI5±ÎQy·ôÕ™%DuŸ¾uãõÚÝ¢Ç`‡€qKygž¯165°W!«¯5’º½[£­í£¤ ©Õ¸ÉcæÜ®H~N{tí(Ë£mþžr²—K6íùÆ?-'¤ê3®9Ì%YÖš"£KJkRÛͯ›ê•¼Ëœ¤‡½˜Z£î +Ðf½I‘Á\Óø¸¿_Ë÷– Á?]ÑRÁˆNʺSìkØ«—ÌK·ÔçdÒ¹J¶*LÚLïGªÑ#hÏ9ØÄqåż £Î³a¬ï™ ƺÊôãªCë;Ápl«‹plH]2±¡ÓoŽ…cOCµ@Æ=pRWjŒûÄ„—J. +ç a dA²Ç¨-Sç;Ûý}ÆèÇ–(ñAÜè)àçaŒ{‚µÕÀw¯yqW£¦:= {£v<`í`lh2€1•,p0¶¾·–ú;ë»Þ-ó®+!Œô“ƒ±®uèÆúÎŒù± Û‘°j:Y –¤)@±¶«fŠ5+Æš¶5ZÓ€ ëÈScMäýŠu¥X-ŽéSK˜pLÕ˜Ž McYÓp‰(:Úäq,œÒªÇ´œ áØàjBcCÅ Œ =Ë;Ã[c]©c}«:ë»—ÊÁXãÆucº„ªê†ærscm÷Vk"«‡`¬íÑJÆÚêœ(Öd’‚ª._Ø„AçÙ:þk4Ôñ_Šž%“ٶɧ¯™³¨É§Ç‰ÚŸ=­Ì÷øt·›|:µ° ”f'EQj°}>=k§0êó™Æì&œáû|zÞÛÔ÷ùLcÒ¬¥íó™wÉÒ° Ï§ËHoØæ³Æ86Ÿù*·Ì ‹§ +Þñm>lÄM ´Nfxn2m'‘7íé„ð㡨чž­ƒ ©>÷%6}>Ó´:U ¥E2äö}ŸÏZ& Ï‡¦vµÛ@y‘ˆ–ïóéY&O‚FŸ^¶æ…ÍAô¢Ò°¨Ñ§õ>Ó´ÚGm§ÏšÃ;}h*ˆÊ€ØNžú3`«™âqÓJwÉ*3¾Õ§—­úi ­^¶„ѵÕçµ¾Kžåä[}¦ItS|«}~6ÔêCŸµ4ØÚO•WÛë³= êöé ‘¦Û‡—¥&²L,M¦ÛI/ÔŠ†gŠÕp˜°C6BÐhwóÊò© l"oa‡ykâ„È›5q‘Un@Dæ/yetuQ¤–ADat uÏ%s±È"k°„ˆª’C"Î î ¢èðFˆºuFäÝXá0"Ôo«‘Ýà™§H ˆÈ{ö€ˆü0~Ò@Ä9ÇÝA„–aŒ(§ò­Åˆ"£HÌW°Ü¬Ø +JNTGã8ˆ¨RBˆP: ÕuØ +Ú×9"%Žˆ¶±ÃDÛK DÓ DÛ³•@ÌKæpÓ JOE‹Ö­Ÿ¦ó%@´­‘ã{AiŽÞ!Õ  ªj?€¨z +…±ÚK@”-èæ¢lGbc‡í kM"€(·î\"ÎQ¡PyÑÔð˜°;‡þ\„ù,wLØ4F¥»,6Müºò=6ÓýÄ„…¢ gÂBÑÜ6dÂÊæuVw £cÂêî‹LX=u_,¦Åˆˆ +«»paUN½ˆ ›?§ÝŽ «¬wÃ…Uu¸°ºE'V´Öûp%¡èoóL}Ñ­·D}6m•ñD}nÀj‰0Z&ª'aOÊ´(¹êa!Ÿ#| F¦CÛ— 6M‡ê=9,$#<Ý’&õ¡I ”=Ò)ülÜ9™4Ûl‰°iZò–ž£;á_O„MSÕßæÖOÒZiÄ„ÑöÖøÉ2aÓTuZ!Âæç‹eu iLºÈ-@‡óሰ"5(£…·å®D]R+.,WD‹²IòÕ=é +’´±DXXñ«'Âèe‘ avxà|Í\@ˆ°p*Y"Œ>©6 y",œîáæ¢þR@„Ñ¢Tý_ÆDƸ´€¯Hç:ƒì!J +dÂBÂ,™lª}Ô÷ÛbγA¬î§ &…Ä*« «»ìŠa¯åŠZ††Q)qƒU AvÙ †µÅé:ëÒ… ¬kù.„0ŠÑ +†0-ŸC¦µÜºâ€°®ú?ÂúVvÖ8ëò*„5¤Ó9M±¦> XÛÝEÅ»¬J …²¤ í2Ÿ«² +)zE±WkÉÞ X=E8,ŠÕ³½ÈU%l7 +°ªlé,gÊ»¬àØÒ(8Vtn"À±¢º¨.n…SqÇÊιE$G8 c+È0¶ª8Ž5é>À8Ö´Ø +à˜¦ Ž5FÂ8¦ÇšŠåk»JÈgthYj޲3ºu@V5C¬l}dE+>évÀ@FCbt¶GéCóúȲhȲ3 Ë{B«2â¬ÈDWEêô‘éxžMØ Í»ºnIPºn쳤£ë†Œy‡tÝP¹~@×í™Çž®£²:øÊÓuci(xºn„ÝpoéºVAºgëu`רº¥Ë“uÓ²v©'ëæo“Ú"OÖÑÈÚ&]î–¬£A±©Ý$t†ª‘²Ž^òÒ­öÓyŒ&ë†ÔÉ!²nl jÇÖ7ôwCD?[Gß;±uôl:ÂʳuãØ‰ bÜ-…£C]O~—¢iíéºqjZ¾nmPó|-~†|ÝPa@ØMÓr¢–°ë<†»‘NÆ×®”´ó…–±›¦‰G3vÓ¨c×,aG`à ;º¢]ó„ÝÐ| ìFÚù#KØÍW²Å=a72ÉÍv´yØ‹'ìx— »v£%ìh-$ñˆ–°§Z‹'ìȘ¥Èv¼,5Ùcjø¬Õ›ž°#·àäDÞâ:ØvØ¡?Ö€AÆvÀ”?9XMÐ[„ Óˆ7)ÿ!rð ¢v4€ˆ{ 1ˆ¨¯Äš[ BO“!æé[Gž8„ ´Æ€)ÿiZ#ËD$ÕSqîn‘¦CÜ „î„QæF„:\"Äxn`w÷4ÕSþl3†2biúÜÃC|ZåžÞ£ÅsŒ‚E‡(ÃÕ:Ðk<â :¤=«Ð¡CÒv%€DÐH\ Ð!Ëtx„4'üGÑMÑA‡&"t(8:”½´:œ¢ŠBZÛ^]Z’ÒLæ©Úkw ñr¨UwšÊÛcÓƒ8ÍŒ:uÇÐqw/‡ž8P«.û¥;†Œº15tz{%—T¶ºdÑ˱<|§.=\ËP¹ƒÞHÁÊô&ùˆ‰¤;è 0°ûV]ú¦mu{_[uGßÊ0ž8«ÑÌ÷êŽEû^Ý¡}…°W—3·&ø^]òA|Œñ½ºƒ¸aö½ºd,Ôî«­ÍwëÒoK2”ȷ뎶3¼¶]—¶ÜQ vÇ8ç‰úv]Úœôíºôšï }Ze2¹ïÖ¥¯Z°xÇ 2|,Þ1ú–ôͺsU.mÛ¬;ÆÖˆ´Íºc¨ jÖçpYêŒ=­Ï6ëÒ¶‚ó~ÖÞ¹™1NÊy  £÷³§ôû±Á”Þã,¿.s2­ò?°I§#¹p€Œ‡ÎYtáÀØ¥™. úZæ‚x`/‹‚¡zX è +U0 8@\@ÐUÇ ]Zöp@pÎøtAÛŸ. h›gAÓê'4móAÓs2Œšÿ‚ ËÜ:ô=eÄ]G‰ƒ˜€Ú¢3ô¢muÜ z!Ç  =Ź˜€×¥¶d¸ €—º vžó±'á¹ÉÞÇ›˜€Œk@® +æÙAcÁÉ$M1Î<‚¶‹b’ }¥W¬Pì›Mž$;)2ìÊüpš±1A¿’& &(à·<ñüqùMPÀu@¹o6w½‘cìéÑ.( `@ÅjmP0´CO: (è;qAA×Q°0(èÊ6‚  ëá]‹¥aP0ö¬BLŒjx¬˜cé‹»˜`H// + +ÆÎ¹ €?]+Hƒ÷·Ä¹ €Lk𽋠+È8Td²Ú1¥a—‹™¨€LQùRð^MHÑ‹- )zñÖ,ÀÚ:˜à­sàÁ¿wþ\† jº–ÊLcÕ"¢yŒRI®×àð4ÑTMr —5÷J®¸j:{º¦¨c"<ìõZ…ƒÌK88e~݈1h/øa‡:’IŠvwb™¦¨º=×ѾzI)\@±Œ´ã¡¥™ƒgžS‘ÓpìfÜ1Ù„† fSREÁÃlÑxh!Cç¢ÉëÖ&ãPÁSÕr¨peÁȤõ£nD:ߥßjðå ,Ýt9–ï‹M]E¯£3׫Ô!=ÃðÎô †ÈþŽr‰0è»uqWj\¯¸jRÝš *„7½ÅuB,­;9ÃQ)É0EÓ¨[û:]Y–²¶í\gžÊÞPÒ3Èdl²ñ¯\0›äþEöÑì©5ΗÞІ[U@¦d‡6Õ€Å<‘’ tg¿Ö7©ç#÷s¦z]æa¿:Ê-ÓX+h ºæPd{ht~u®l’ª"j_°§±@e]dò.hlZq¯emÃØsshæùáô’«û¿ùZkµÎŒ”z,UbÓš—u„ænRJ´ºy‚‹idw“‡ÖÝ]éý×rÉ lE8®øL7yh÷àq%ÀÉÄ)×a`Jïr õ:ï˜?Á!ç{—ä T?ïZ”£¼Š¨I Æù2g‹Ã¿+MƒÔƒeY-×3,tÉåA—ÉѲô’”™¤å4U-!ÍÅy߇¼Øu®7›ö`Ó+sE&%ä˃hc-™?SD>£TPVô°}6zç­?Ð;«0.@)>‡Þ™õ°0zç]ÍêÐ;1GƒÀ;i΢·‘Dèt @金p½£N(è½|/@ï5ÄÂw”º¾ã$|ë ßQrß‘§+!ô^ÃD!zG Ð[ƒ5„Þqóè4趤†ƒïÕ#aáûµ\rUãºE™D¶ 7õqÈ0j€ÞywU9ø^ú¾³^‚ðuB€ï¼gw;øÎ{j€ï¬ª§lóæ))í¶apɤ¼ü¹Ódp˜Ê¤6àw<™Öj÷Ç—çà;¨L‚oŠ$´KÖÂ7Eî½ ô&G¯cnø¡Uiމ'#Sž‰'ÓJ˜;&^Ûq1_TãPñUoPñÔ$£ªžŠ¯›¯vT|ÕTàÍ)íŠRð|ɶ»áÜÏ5ˆM!$ðÛ^é%5yï¸ø&ƒß´2rñ*ȉ¸x쀸xÿÄ\|ÙšŽ‹/BI#.¾˸xv6åçÉÂžŠ§+ž Pñd”‚GÅ“‰ÑÃSñdZù;GųQéCÅó%¹ÞÙQñlRmSGÅó]jA¡âÙ‘ê­*žßI”VpGųw^±Õ•‹ç·¬BZ†‹—­*D àâË8t\üÜtMÊõ_wZpñsÓiM˜ãâëšÓà¨øªHůê ÀÅ×Mü;2žv*®åNKœ1îu×»9Ó„?;&hû©ALÐÎ~»ÌÛ®æv1Á’Ô…1Á9ÁËÅmÚ» €hÒ%‚%b‚ºÇÁº˜ jHc‚sݹ  jñ +Ö/PqŽ Ên¬p1AÙã5ALP´–ÄE„ØPLPžn†mÉVŽÏF* ‚¢š0  Å‘+ ê–ÓpA•Æ 4iˆAAÛÙr´S+Îtˆ”ÈÝMoý…]@°Ë]Ó΀ÛO‡² nì>i@îEÄí©‚Cäþ!LîÕõä>½iÜtä~×)¬Üï§”¹%÷÷ Çí÷=upûMKS·ßt4<àö›žÊ!·ßTU pûä erŽ#÷u^$&÷›Š49jÍ,Ôþ©¥¨ý³èÑQû}k9jì„ ö‡*Ðj¨"9àö‡*…@nŸÔ²…5·Üþ\æ¢Íí¹}Ú*å¹}Ú9ʶ[n?- }ÏíÓ^TÅOÄÓ­T­œµDüسi©t$Ïñj½K¨@E–Œ3óc¿Àì÷=‘×Qû]¥Gµß4q©ý&”.¢öÛŽy·ßöÔZÀí×-äâ¸}=+j¿ +Ù‹©ýªG@íWÑGÔ~U-”™'c“I ŽÛ'Å·‘ ¹OSŠS¼¡÷›(8!z¿=é<<{M¤Ô0¹?_<•F r¿KQ"÷Iä—r¿Ëù‘ûCdh¹?¤† “û:Ý‘ûTˆ©ý¡gHíÓûC9{Á>([u´Ïî¸d¤pGç€;êü[Ü)lÕwZ5 ¹SØcn-rOSÌ7Yù´×Êw:dú5îiâ‚ ÜÓH°Œ€;“K,r“gÍwÀ=t$;î±CÜC„ì n]äæpû,5r¸=ö´,€ÛC‡…{äæ8-Ã’:ZšÊ÷ÈΚX‹ÜÓ¤ªH¸Ó¡“AQIÝüÜâ}ÑãA°}6ÆØŽ{6‰ƒí¨·`;êôtÛa FX¥ÛÏ0#Ÿ‚ÖFß\1Ü(n]LÕ.òõJvW+§Bt¶+3šÆ5dÎjãÓB8°6>½Ê(d³×SÉ*+ôT¦©kþßê©Ð2Ñ’^ݹ®ÌVNeZFÂêø¹©D%’SÉÄw(O&É/[5•i)°ÜZ¯XU]Ôª©)B­-ºb‘pSy-WL‹ãOÓšhg;ŒsUñr$¦’ÉMh¥SÉšáb*Y¡˜Êü¦mÀá)´V¤f´TØÉÜH© êl­™¼J&ÍÑq3蘼ŠxÛiÚÛHOÿ ŽüÙÈPöÜ9€ eÓTʪ¨tÀPvªCÝý*êLà€¡*¥‘¡í ÛæÊèÂ9ph¢ÏÁ¡+¶p誕À¡ëæ…à䇈CÓ©ãÚ>°pÐ]ƒÀ¡ò°J„ {F€†²¥¬ÝÎ.Bâ"l8²lxµØPµ`C§…±¡î±zæn_pc±¡I1Æ]'hг€Ã†¾KF6t¦Eàе󀃒 ¨»GZ×6Œ †F,ÆÉZp:¾ ÃØ +÷h¢·¸5tv 9tèâ­!8tFY„ ]+6ô]A°¡í.0n=CphÛÏ_Ñáµ,JÎû |ÐE‰ð¡ÞzsqzÊl;¨ûÐíLwþü™Hù éx£úÈB|$ÆÖTXçB;±‰ëyÉT.Þ‰L+óO}Éçw{M—R—D¾ëš›%“ ,>¬D|àFlÓbzÈ¿ÒÇ9Ž=j:Ôt<ÜJ\Š ‡ki§íCØ»+3¦W¬,(7üÔîcþý,SŒÇ£Îè ÇêtÙS|É ´¹€«;$ÓÐ6rm@§Ön©´™ûØ]0 ©¾³«ügâ?›¡«_ oî ŵ.É ëNŒèu¼sØÅÃÉTåvUB×K®´ ©BœŽß¤È|[xõNôq8ÝÎ¥3& `­‹ É;‚÷PæTux‘HwÏUd\¥Ô­7S"‹rÈo3‡LYëè®w¹Ö¹ÊÒ´kXnK&Úû+:¹ØÉè¼­’TÐç˯“͸†Ù]`ÞÂÌ)Ó©÷‘®ÒK¶¥‚Ó/Å lÒ® ùá7Õv®táÕ‹‹‘àž›ÿÁÔ¬[{4]µïõ’M'ó”‹jþËÊÌå-w­¶äüôUrž¿ŽŽ ‡ñ^Cüuûšy © +ks¤u*«2ù—nˆjÖ{Q ’ Q:Â&Ý䪘#.ãòJh»HÙ\™,}n‘!†¼T¯-5Ó†g<1âð•oÆë{¾`‹™q;Ï­A¥9-MŽ%×ZÀÄÈ BÚ¦jš–jÓuøˆ˜”3ÏÉ€ÑðšÕÛwͬ¤Ÿ´ðó +l‰CjI¯›ƒ¯¥´žœ^¸ÀØ qTÆ·³VëÃÎ!“¤|;…Û¦Ð1Uâê6'“¬„Î%ÄÆ´ÔWz1I2rÝ=Ç”—3›´yì05„tIšØH&W·DÆ.lŠ-¾¥»daÔáJ^CPI‘aòPzɪڎÇ4¡¼f=sñ2¬LÒ‚!y,óÁ£L]&ŠÛ”PÑh!æ£)“¹¯(—L{œñÂu i7^*ídé©°¼Í½Ð¹äòqÈ«ãqÍÛ¦ƒ¦ß\Š L©§««d£JŸÐ”§W#Û*êøápýài÷êÌSMsw™´-ÂÄ€ü*y΃;<ñÒ‰”ü²Œ"E ꎧi-”c¸*+¯3Eþè…ä’QÆÒ™l ߊ²Ë&oD¦E„¹<ôà‡ÊζËÏ¥Ý_fÎj¼4"uŽs1ë% ïÇfs9ü ´›ÍœŸN‡ØÌ¬/.þk:·PÖ¤µ+ñpúßiªÇ×Çe鞋߮Õx½;—þ\2¬Ð(Ú(9"ÃJ9Ç™L)êçÐBSaTV$>Æ&¯å’2H§º ¹ÈôBjû¸¼ây-¢ƒN¶¥ê©Ý~66µ›„¾WåÔR·Š•ŸçSHœ³êðáÇÅ%¦%‚c˜·Òtú_3ðZ.É#æ@¦šx›®3ŽÈÄÛ”™4 +•¶›0ú5Þ!ÓZ“5_uaËÛVæ=„”Žñš ,]“ tê/íòšÉÈlÃ鞎óÙô’#ȹ6ì¹¾¦iìIŠWÈ&y'”‹h&ª$c” eÈ$ò?v¼Yr¿áè&S‡šž¥o­` +ì|á%›ô]3%|ÁþpAØøÚj»ÜcØã·|Y^¯ÖÓ5÷K=—Ó"ŸÇ¥C/(ÚÜ„Ìý13´Žv€Ö:zÝ»R7{^/ßMU+9í`§¢ù¸ê£=tÜè%…ЦÞ!ó¶êž7f­•ºø6Äñã1í¥ì[q¦;OùlE÷´ç0E÷´S6ÖõÒÄ•§µ®—L ¦Öõ¾’KŽ=/Ï˵*ë{÷D(ß¶[ß;41 |ï(Û«yßKó”ɰ¾—§$Ȉ?ë{G9Éç{ÉØr½£Hü +\/)³«´¼w½C3AÞó’þºÊÎ[ÏËÊòe`Ï;´m x^RÀשÖónÝ|äyIEZÕˆ­çeávUG4ž÷ð÷Ž—lzdtóš.¼ç'õ Ô”›Òk@2¹jK<4I"¼ä™o³ž—4õ×àãKh‘´°çe£ Žu°CÇWߘ’^²'+v]TC­šõ%ë\³‰ÖùŽÕJˆœ/ &IRgï4ûØn´|³–÷y×K&ÍòÚ·•¥?x^rõ&ÿKcB4RpŸ4Áoð’ÏÚ:6„¶ˆÊ>:`÷Y/òÑ5v¢aÔ±yÙÎA|%—L:Ýê(“ð£²û-]“–aìóóuž)y´i\Sjí'a8 +ª¨"Ípê$¤§ć“f' f×ãƒ|]¿@råJl.~l-æK®Ð϶°²©ëù³ñâîhܬjR_©à×/ÆÔöDï2ô]²lSÊ<ùV4Æ®}z—<©9 —8gæÃkó5‰ÀWléÐWmf¨d;ñb»@wàíf``¨2É•ÇW=ôP%Ëî[iÙDuž°JneÕ7ÙÑ—m%Ì¥¿¡î_WU}Ÿ`¿wTÉì‡ ‹I0d£~ïULEãÌ×%u,ñV­5ªóü½å.Kº\ïrÕ—TíjÞß/u±²`%ivÍ\¬u®‹ÈBmb0‡|ÞpI—‚e0XÖ² +EfK'Âu;ô*U÷S» +ÔõS·›·Îòxßù/ßzávŽ€¾rʼnñèH—ƒ-š£·Alk*°FÅÁùʶqý_)(6%)°ùÐÖö^µséDD›õou·ZÙU;MI&jx ÿVUC´² +Méx[².Íá¿’KÊɼ¹IAmMlnAK¬FK$ÚpÚ‚$–s¼†BmiTvWÞ5MMåíü´2ê\ {Ð!“N†>Lá5™tD³ *mé?çɤª—và:ß”Ywi/ºµÈOuN·îôm¦^~-íêüQܶÉÚ_v˜_'ŸT5¾›ÁÛiZaeZ̾¡’CïGyÙQm#l×z$Z«MRŽÃì͵M8k¢•jAÃj½¤ô¿ ³«äãhg +DŸT»ÓýLÉT¤õ•KóMWl•ðŸÎÕ¦ãš×b3 z¸]”¤*MQÓˆ¬ eªÃ§ÝsÓè*¹®õ‚1=ð(f\j»lÿê¿e ëd+ݦû;kãåU‹M+æ’Nù­–,7LnPbÂb¿@—&ÉÃÖ4²+ÔY¬×‚!½àÒ²¦~Ö©vbTû’we¾íhUq’í’J Ø.Ýœëc;^‹¢Ãcc;2iŠínAìŒíæÊ\ÅûWþ#1ÊY«;Ú0Í”]ê–ê¡ÒÿÓ-_ªE2×C›xqê˹géΡµf±´ªæ]¹'/é$Ý v4¦¤ó²¤çllGëb¾¤…MÊ_dû%šBhæÜ±¶{ +œ®ä§Ê´¸4—K ýQ8]ËÙ¸”mÃOê{hº)Þâ A•!š{•]¥ †«¾æW(+×TÊÛRK¼¾>¸ô)Z‚Ÿ–òã×g{êüdÑÝmTGŒ"ùU¸@Ó"¢ ĈÖ*o¢¹=‡Žº ä«•‹ü Us<>"™’¤é¦³¾tÀ‡qXð‰ƒ!ïÓIa¬ñHóô½îcÑ©«,áº4_²úXz¸N$òVþö›3ç+\Ý¥Cj±ÈMÊBl§ç(䩇Y`¡omÚîä!8!f5MD»(Å$fè!e"V'»K=…vöáÄ«.Ih»Ç&lÉ´&ÆûÏÝ”Qt‹Dñ™ªÆðð‚uOáFx!Ô=—ëš-ù¡ü\+Òi`)­PU©Åg€é.µöÆ»ÄÐö`~ ôuI‘V4Ü,%0‚Ž8»,å•ÀÐr+ERCµºÜ ©®'¬fV—®“¾4?JjæV„` U›68ÖøÛ‹*éë•üã{ô)CmD³ØBXkë®z>z=ÙTõ w0¹=Ùš#h7Tj¦Ûè€<—ÖaÙáž”˜U­7;þ’Ó x ½$gÜ@›MIå5të_?EwÓ¸~Q-â,h&ID*±éVŸ“ð©Ü“…kœô®$ü÷}<î½b_ª¼¦)‹9ˆ·©vHãæ«L®–2ZëL&Ž +‹T•äºð¤" ŸdÔ±¾ÖrARÔAYfºxaM[îÌ˦”•lMK܇/ýÐÙ ¦úMÔ@‘¿[åTuÔ=1¸§¡}#ÉTµÔ-FAµ4×E>ªËók6CÕUð–s{¦@ˆ*#H*kÍÎü[*šaª¦´`-.UÒ„=ÓZuÄ´º.Þ¤`¤;×À{znwÂmk˹oJ,8Ÿ”lGUa±Òõa<Éz“EB@Ûq®Ùp¹FNšC¬6ÛX"þ¤·‹î蜕Lem8î¤ìp9!qý¿.«ÖEU@$¬Hñ²cª©Ü°‰À´-Yúer05*â +W«þ%RÓÚÆFµOd´NiO +¹Êã‰I—£lÉF²Î¬ p­ !ɯƒ6þ[gþìú|mw·ñ‘¹^›Ý¤«w>´$Ér‹¥oÏ{7-…æ¹zäÌQ›K¡Uj<\©­Ò¥³“( WqQú)(cX ªF×f;¶~PÕ“Z¹Ì²IƒÏ¾ç¯ÓâjaÄša™K“é—p+R u}B_ì¢l¿©L:É4òzäz-—”côp ™ÒöŒNË®Sg‚Î<¼öLj1tYjŽöhƒ<¹5²”"Ì/k=ØÂ¯R¶¶¼¥k¨ZK’l®vš¸ßm½äN >ÄUz+2Ô™4VðA =BBûŠüбb6jY…å0j!c pæ½f•ï´aKQ¥YÆSËŠQ»øÓ2-­(¢b£–R%ÈQËãõ&…U¥¨ÅìªC¶©ÊéêEË;d+’t¥³bQ>Å ²¯ú—b¢KwõÙzIδqØâ¶±ÌôŽø¡.]–) —œãpï™ýɈríVä–ŠÊkñCk’œ-¢+·£¤Ûd€üÕ‹Ýo‚úX³W-…vëÑï!âƒd÷îû~Ë}…k +Ušt?Φ¨!š©%é‰úèù•\’) 0ƒ"´Mý“ÀôÃç''ˆ¸éÔp¨‰ÏÛÂ/7Û0ÜwO¼fdüè‹«fàUÎä•|ñ"i5 KÖÉ1VÌNe¶SØt±V"V×(‚L„³®þDLºIýtç’vÕ +MO½ +*¬)ë=^ur^ËkLAgÖ]óPlÒr +«-WVÝ6)ê—Y±òUa‘×ÁŠè­¶--"Ö³û¬ëg>um‰2<yXñáTV)ô0‘|ɺUY¯5µljšvçÓá4J y4#—RYEˆÝïarýAÊ¢ƒÑëû^µ~øVtl6e9'F~'œòAI…¢Ãì›M'ñÞŽ¢èMñÞ^"_öóŽL¿Ýé +í¬µå'WYéUû…Mj¿ð¢T ð’¦ä—ì¼eò *DLqž `eŒV¶>µƒ°" ‹ ŒøÐÿŸµoG¶]בAÍ¡í2nHüÓ¾e¶[=ÑÞ™¿Û‘„\'*vôs^ÅCm%‰b‚ Sÿªú–õF¡& ¬ª÷ƒ0ð¨šUm„mœ@XGÆE!¬k'ƒ°®í ¤Ϳ¤/¶µ¢„uX0ëo/®ÉnûÂÚš‘¦ÖTP–"XC/!A°ª*Ú Á*€"DÊ„Õ]†U0ìóëfV_GVaÐçäV—–:ªªY ÉFq}C1Ñ˜è¬ t…úU)Š5À"Á°f™rÀ°®C‚ Ãt@æ †uURc6Ìþ/`Ø€.:Űa##öZ<Á°¡§n +aÃ(…ð 8‡H])€ æ 6´ªÏl@ËÛØ$ºá„u“Ô Ö±‡z Ã%oì¢äÓ_÷ì€aÍhe²_4è kpe%Ö †U#PU­!!:¿E±$­œ”àþhpw(2±Bœš‰2ô9¥H&6T ™Ø^QkO&vôéP2òSŒLì(86ñm !lâ®»6±›„v`Ášó²Ø0Ù÷À&¨›(r’ߪb2—;%¥UJ-è™Ø‘X±ª˜8Ž«ßCà<Â%6(…R.±™”Oà«‘‚žKL¯náíû+W°_´Á#½îtžL”¾ïH&>Á ªŒž3L†4”¡éÄ$io£ ÚoŽN|B£O±(&?¥ÞŒMLÇŽÈ&¦ +ÝÖß‘ªÉ›>±šÁGàß©TÂ'Šû˜òßO”ºK¥ýI:Uò‚ð‰Í +¹OlVH|¢œ ¯/\ 9#ë"¡(«(MýºàOôž”CkßK´í|5}ª*C”…–BtãTQBMI?wÊ>Õc}­äCH/÷Bµˆ±|N"˶ÖLQ†W¯‘І: W(! NÅ+ý4z\ãü‡ß‡Õç!rö¯^½ÆÞšO~äæs¶YBºZ§3ÐÅ£Ül«ÓšYog©\á’{¨lËÕ©oéBÑ"žÿ¸ey¡kê>¥ÖR†æGñ;+hS3‡„&úP<IÈÚ?Ü´ñÞÖr¾î'Ðh¡î %0P kÇm/N&x…´^ØÝGzk×”„áP\pÏõ¸yâõã×ÌÌ%gþ#Å›†J¹×úö‘íˆàÙûí¯Ð"ú1ïw„¡­FqN!ã’ ôe¨þT‹—´I~ÿDúÄ&4W“ãyÉ>MÄÚ)PIHGðü×±B{îmx½ïù9. - zBîô-¡¡€îE_×ç±6½±›ÝO U²û×äËÁiøÜ±ôY&˜HÏSc½ƒ¦e¼~J­®7nºVg8°¾œ©eCï*¡1a¤îΡ3âØ9tîÞøx}Bi YÚÎLjëB¢OpÀÎDg~öµh —Ì8£²ƒ¨èaÝ´½Eôf;Ï¡¢“eÊ¢~=Á=ŒíÏ¡rIZP\¿C³lýÑYqPðçÐ'¤ H<ˆÊÓJzb‰Ñ'¸LÍÈATÞŽˆ­‘ƒ¨¼ṗăè³PT¸6Deya ÇD÷²¤Q ¢`â¢Ú’ î ú„Ö~HÁqnôúÜÛv"¡ýã1T‚cŸlOØŸ0ò ÇP ¡¡òRѼã¡ËƱvv 袣Çеd¡™ã—PÑù„x +…;ƒŠ¾$ütVsñgP‘SÃTO<ƒŠÔÊáÞÅÞxÕd`ãTÄâà íÏ ¢?‡j»?ƒÊY ;ƒ.CL%­ýt~x˸3¨|ÞkegPy§ØF}š:aˆNΠ¶²3¨÷qÌudåÑM "ˆÉ×Aû7uSøÒ½ùs~}ª¯N æ¡ä:ÌÅ4@÷>­“#èÖ&GЮÓÿì*C«éæGÐÑmªÇ¿—ÑmÙïÈ£©ö=‚ަû9‚UI''ÐÑ–pu<⊩ÞìúDÀâtTÏ ÐuÅÝë B±Ðõúrü” Æ3þü9ª©d…ÃbÃÈ0;޶·Aü\oF‘áŠÝT·ÈñSš +HÃñs¨Á5;~»"ÇÏa³áø9Ì€(?‡©u‘ãçX™5=eªNû—P…&>9€Nk" Щe=vê`Ê ÓšVÃt ?A‡1³ä:ÌÎ A!¨ÃŽ ÒJ¦sä@Ò_IGwݸðLú?éËt@v‹@Ƕ ‹С2–ôü9¶wn<Žö¹ó§„’Ž+Åóç@—Y<~ŽíROŽŸèäÇÏnDo8~ªW3=~n.‹?‡,Âñsl¤púvö!/[¾›>'-Éásšr9|Î×zÏ>'’#‚`S¿n~øœºÑ°æ°¢0ûkØn:,Æq[JÆ8W{Ü~›xÃ]7+än8䮿{>Pä®h È]1L»Ø‰• w1¡ì€Üvº‹: +sèÞÙ)Áîjœ`w6U ‚Ý{Ô’`w¶:`w@SôÎѽ Æ— z›5&è] Bà~ó ¾·Â%…ïº%lz7Ýhz7UÙåè-[P\öè­Vì½ÛÔônvè-ÕßÌ™å®M½_ñd‚T›5è­Bð_л¯£ E了7 ½­ô¼²$Þ͆Ox·ŠkØÏ«5Þð®ë—0ì®æ€HÐRY ½«*¤0ô.P¢ð] ?Oà»@ÑžÀwUŠÞUµB|Wì̾+Š£¾÷“yPønèÌ&ða ß T/ï#øÝL¬Ÿ&k7jÀ;ä~€oq: +àÜ8ð·R ¬[“8ðn4j@éfCð$Ä÷·ÞZo‚·*±ÇOH†"{ܲ©iDöø ¦>é€Ë;9 ­ +›'eäqÃ6!æ¬ yÜÊ?ߦû[U±{Â7Lßî¸U¬ŠÜqÛFÉ‘;n[*2rÇ­@Ÿ‘õ0=A•o‹ÜñÚMóž;–‡…™îÈ·¼äw,ïÛ²çŽåu§þeº_– Ž…ž;–Å…qvÏïEI¹ãö’¯ž;–ä‘oTŸ×â×Ó¡Ÿ’ÊÃfʤ çý)OH,¶5kîÇغd7_ÕqÚŠhHÅë¦;H(I¦Gi?ª’?f¸‡»â0ego²n F§4¥uc8°Z›ü>ý,ÝT¥EùÎË'¶c˨Ðgu¾Yk«ÙcéäŒÖ_Ô[Ûe°]qØQ1#.iŒ¨i·~š%ímc?åÈà5Ôofw±BЂ3:†€qGö¡rœþ „ÿ:'Èo§eÌ ²ù”„í7ë÷Ír‚ Ã0šdMôXNtŒ“åÉø°˜$œ?HJL×+¤ Ö,%x~œŠøÄ”`mÌz%i’ꥲ” lÓ˜¬Y2t»”`/šÈ#DIÚçZ +,1'0pd9üJˆ=ûœ@×K ä‘4íéŽ)<Ê=ÛêS‚ÛBJtú…ç !’$Èˤ ™MI +²M „¤à¥cBR—bÈ pE5V!9¾–ä5cN!wFr‚¬iö÷w” ÇÈß%Š )Azý’cJ Ü}F^% ¿-'$Ó4%x›l|J°²+-?ù”@>ªÕëSì½»6åS‚P(v)Áb„t¬/¦²ÅL­I‡”`b“”`‚.¦)Áį$)Á†')Á´¡¥¨ëš?Æá]N 7pÑ”@"C L1%-y¥cJ OyÕÈbJ o§UžÈF#åj’ÈNã¤ÜZ:àAR¾›eÉΨ!#Hª{Â3‚ŸS’¤·Öå3‚ôšÉÆŒ`ãý¬óS<Äü×|wQŽ“óÝýX„ï.Æ›¾»ÂÚ‚òÝÕ¼ß]Íü8ÐZPÝà„w5ÕÚ@xo¹Bx·ñ£@y7œ"åÝ­¼(ïnã~„òÞ¶=„òîV ”w{Õž"wÕ°{Ê»Yb(ïªz˜œò®h)&”wµ6¢@yWðÅ”ò.fc(ïUt`„7V%'¼Á2»¬ieÆw ÛP¾»|ó¾[w½õ£chÿHÂwW³\ |·t*ØTý”ÓÝMçÌÝÝÌG.ÐÝÐ|åtwWÒ”ÑÝä¡»;Æ )ÝÝM =ÐÝ2Çœ©`“)»û‹¢mÛ–v„îš“¶{˜# a»xÂvwm²cl÷í¤l÷ö#lwׂc»›É¶»­´œ²ÝÍæiÛ]M‡„ìGÂvW¼UÂvW³ l÷«O(í +½aú;¿Å±>¬Ý)âX ŠW2…ij\-!Há†Ô‡YMøÆ+™™¶L˪JV¡ÝŽœ ívœBÉÐîjø6´ ë6´û®É0´Ûí4û®z³2±Ù•ÅzÓŽé'”ë·Žé.æì_Fv›¹g…‘ݦS¹tb÷£tæGvw78ÙmàYéÈ®`~¥»ÝÆTÈð:#О+Y$}Ò–éAÒt%‹â±éj [7Ú2-¡1)É4² Øú¦«=¨IÀOÆIÑéš®.­àó¦+Lc²¦« CW¤éJ+´çJfW1—ä{®ä÷/0rLåÚt%_~åC»òvàêî›®d ||Ú]së혖…Õ0´+õ96]ýè¢lf¬åfv;ƒÌìvTeéÌnGšMfv;ÔÐÉÌn7 <2³Û±Ñ“™ÝŽ]9v]ÉF™µk,6M÷=ÿ»®úØ4¾éJÔ n›®:¼IÓ•¨"ÜÙíO‹5]Ù¬rlº’O'i§“oº’1f€wlº’án´Fû¦+ 5i"âÛ®.‚·|;_TçåÆG£àýkMKÏ·ƒ3ÒÒó²ñà|uÁ=-­fJœ•æ Xéw"°Ò…JK?ßð}wJKwpf´tGQÒÒûc$´ôv$´tSá]ÏJ/öfKÔVz[<VZ»S9)ÝÐLHéfšÛ”†æ'¥m¦#pÒ-•„”î6¨LH鎉BJÚ‘Ò]»™8)=ÙRz˜ g ¥ò8JJÉõœô@pÒ¹%¥§iÄRz"ý#¤ô4' BJc:‰‘ÒÓZ[»üþ¨Ò(÷ÍËÔãe=' Ù+ÎIŒåRzX½90ƒSð””îès"¤tßí “np0¢œtSÆI7ÜœtÕt€RÒuÑ2Œ’.«B;S +¡oØýkÉûÆ É€!”ç7^ m1?— <¡ ý˜ ÔKÛêI6P/ ÙÀºÓý­omâœF²iºÙ!˜º‚B6ð£—ÌÀî L”3I600ÎHÓa^ñ!–˜„t`k[Ñ|ù7I†Ms…t`À=ˆ¦ô×C> ª••ö­•m:LóiÚ!˜ÖXò¹‡'É|Ý-ý¢¼ÐⳊš ”%zX0c!’^ņɃ¤W±ÊKï)ÆKI¯bÒ&AÒ«Zó +Ñjz¬%Š^UU7Hz¶=½š#QôÚ™4Qôªêfʽª•‰>O5#(zUó² Š^)Uô*FÑE¯bðAÑ+ÿ3¿KË*ÉÉZ’j‰Îdí5IKÔKé¨s=¯¬Û©QKèú6“%¿rÜ”p—ÛÎ75]•‡…_I½ŠÉ]E¯·Æ½Ší\DÑ«êQŸ©g5qï è)®èÕŒw Š^ÍÐ#Hz5äTÔ ³ØLÔk“LDÔ«Û¸õêêOCŠU‚VAõêhe§¢^"|ÒèL–Ü]t&KžI¯_f²&ˆ¦×– "š^ðEãš^¯©UÐôªzD"E굪×=Ù3>œ«¼¦Wy³C¯êU ˆªWùâh§Ã?»¯°ók«_T¬ÿhp›¨«öDŽU+m“—šh³Õ„ï'ñ2•âXCpl›“Ïšö¥Ùj¾Il²nr<ÉT2(’í Y7g¡€dæ(ɺÀ’5-¯2$k6ÞF¬©0C2€ É*€€b™5(«»5* Y5Þ'ž÷÷ͬªC²ºê$«6ï઩ ;‘ p ÉÐEà 5Žd‚d¨Ì0$ƒ„=G²aœQ@²Ýc‚dÆtÉPÊbH¶é‚dÓ:±N$[Ïr~m»PáârÉz1ŸÃfš’ è$X¦H&ÌÎEû­äãoÈà‹Æìõ´ +@Ö·VÀ±½Rûð­ò8Öp4'8Ö Ž5³Ñ `U¿š'|…_7 7óå!MÃcTí Ïß!mŠi¢ uöH7.žqÝMÓ´®ÉߟŽPÖ+$Z9ûU»Šâ/×­Ï¢>Úõt«®[mû öœµô6ÀÐJ3GûhíBSaG÷¯´+î`Õ¿Óc¸V '4ME9²€m;sLéŒö?Eϡ҇3RHî­«kãÝnÖ§¨}/ÏO<›n›ª§ïKE¢z‹ðz¬9Þu›4$£EjgÒÌÚ4ä¶µ×uûºï”YýbÈ04xκMº77D¤Ó¤°usÃñü­â+k'·êk[Z±­é“ýw›$t=#l[ìÝÓ1è²ôº*û{ŸË½*%äÊ3¼8iÈí:€Ëºneš@õ3Hˆoé¿Æˆa>Â#†ãõ$àEF1⨠#¶á +Áˆi²#¦©›xŒèÛÑ*bÄÒ¶†ýR>‰`ÄMÏ3#úm¤gï‚æ@Ĉõ«dMÀˆi³U#ðé0Œ¶¿#PÁà14»b1LQ(`ÄÐÞrŽãcÂÂaÄP†S·#¤‚z%ŠÓ& FL­ëðîÔËúk=FôK%õFtTÁ(Jô]èŽ(Ñ·pED‰~ãÛ§('†É$ D²Â3A‰Ew‚ ²±%¦£Jȯ\Àˆý†ŽhD y&Æñ%äYvÍ=Jô I[D ûŒJÈk…6P@‰i&·%¦µ”˜Ö8Pb¾3Ä%æ×-]S :€¡[é5©þ×Mý×c.°tl£Z—ÚíØŸ^‘¤G‘Ð|ûݲ왎âÞÍi¨ù„O§<;ÔW\Ý6RáŸé\AP/Ë=ìl=[£ò 3Yw!Y“cž}¾,óâ·Î†ö¬}8K’d~¬\rÏt¤£E{}q[Û¶ú *™ßRk²'SÖ多$Ô'uÚ–KömŒÐ1i—Ôxqw—L¶ÉÛæÊ½MÝØj0ý–gÙTt|f·N áU4g=V×[GªÓûi?ÁŠV_oÞ÷<ãóÙ×Z— ÇsïÃúË‚[a¼§â‡x´Z¡UUXð÷Ù¢ó£—4K`ç…Ü«õ›…™ŽwÂð ­K6kÃ&÷M€Wuîo^©òw˜êÄuÉQÃ0û£2·kûÁ³T=GM™ÞŰB*^ïå1C{æ$µ÷ëª8’ýû®è´ólŸ¾ñ„CøHnŸ½fêˆÒÙC¥{M×ûã+^‘åΰz¹>Ûÿ±Îµ%Æ­2ãH{¹žPØEìå’àFi?‘ÍE¼û9°ŒYÁáˆëý+áY]ó›l£èzÍ.Iï¯Ö÷=.?ºQ”FXÍ\'§*Ouõy|tøPçő޿jçšö¬¡ GöÛ'éÕF)FõMÎòÑ]°QñcbRû„óëFëMUछ˷^É· +ß·ð4SÒ=Ÿ—~;T +ÿH¨ò‡‰j½j$Äü×)†íhFЭQ-,ómA2QGVþdÍÜ€BJ ¯DÓµ4Ì]Ò” ™·oH ´>Ã2‚ÝlMS‚wÝ…” ¾†>%¨Ú‡ÃS‚‚^A’«.‡” åBR‚‚ÉK’H +ÓrŸ˜iJPðU‘”  »")AE圦Õ„›BJP9 )Á[#)Aƒé7I 3Á’‚¦§ž#¡M`dæ÷]’‚¾êû<'躚YNЭã,øø2̹.‰1½/×/ž -bðœ`˜œ[È Æ;í-|—Ï :/HNÐ-— 9A×N)žˆqü,4'èhµ#9Aƒ;.Í š;„œ A…$“‹>)@8ò—¤`[€¤ Úð(I +ªi(†¤`‹“¤à mî7&Õ¾|NЬñ5äfÝER‚f&z!%h8~” YEˆ¤(³”@Lʤ)A7CT’tLÜ‘” «8K ´ØiNð’Ð!'àUHN°e9hN° Šð÷/\Àwÿµ­N²2+±ÕI ~bN ¡]fu9Á2©Ö<Áí¹ãs‚'tCÇ•XñªÜË ¶Ç5É Ìú7&OH§ÒXR ¾ÓÊöI˜ê­}ú¤@ ©‡fÓ1)—Miø¤@<Æ·€°K +dà?iZ“‚±[ìcR°<ÍSgIÁÒP5ÿ˜˜isL +Æ+Pæ“1mN:“yЪ‡æs‚G’ˆÁò g98—URò9,¯¤2>'»g·BN0^Öà¿”ðSbNð„FÛ\€O +F6àôIÁâ=<+Ô)€KöJ5#$2Ú·’1T3"«å"É ä’³L–H¨A˜4ärsP{ó9<èк”@ž$¦ÿbJ oœ‘O ä½!wô)lCðUŒ)ÁLàÃ|J { DN|J0à +Ly‚!å‹t³”@ú­F>%ßr˜àÄ”`y{+àS‚±E¨cJ ÿhǘŒÛ¸EŸÈ>Š3Ï Ä·¼•Ì“ù1ñâ“‚±Ë1)/UŸbN oU»$}J0’©:ù”@Îæ1%x‚Vè>%õºhŽ˜<¡vÄS‚±Iœ˜È÷ħê¬Íh:Týa….jðóÿuN°ÐhNP¬ɯòòЦû” ¼J­1%(HóHJPô¨ÆR‚×'‚¤ÙôÄBJ— +M ²"ÍÞ…2‚ô:MúŒ@v®ëKå`Íÿ%#H¯|°ÏüÊ—Êì]¥ÑÊÁJ¡ ~î3‚- K3‚d> !#HÖ·2‚?jš$cTCJÍ{"¤ÙäHJU¥…¥eÜCFP¬o‰dE›YFPÔÍ‚eåÁá’¾dÕˆ‡Ô·¿Êãwµy’ÀCÿ]¿¾¤›Œ¡)AµúÔ?¤`´¼(’lï’T‹ +9 +Ü%æ?x=¥ÐÒÁr·Ì´tð„´iŽæÅLçCN·XTH 0XÄS‚¼+a¯Ìæ›2‚l¶~$#ÈÆå‡Œ ›—BȲy‚‘Œ µ2‚lê!#ȺÐyF°mHFP”ÞaL§xJP0æ@r‚¢Cf,'¨6mHr‚ŠŽ:’¼Ê‹!'¨[—›¤ÕšÇBJ N§• MÖ^¼?ü%%(è,¡!Žà¿M Ò^¦‘ òO¶…t«ÕµÌFÔs§d…Û³½Bn;%›ßðëü ­fàåhsî)›çvü¼S¶yÉyßÇ¢|B_cs© ¼/Ê~¢þ î.°Sb…^n'Uù„2ä¼/ ìn. nÕqׯ&¡mû×Ï><ù× õØÃl„ÜZ«‹ËOäÆÑXíU'SF‹Ër?q‘2,Á¤úì“zBj‹Ðƒ†Âóæt¬Vx½ÏëoÒõÓ[ÈJA'ºŸ‡–uyoÁûÏ,ðG×åþ°ü(€„ á… $DEŽpÉ|k£¤×PH—…’Ðn€‰*Mìhbu bé²sDv£+ZâÂÈ~Êià’úNÍåñ­¯ïÛþd ©ÖIs{eÚ¸9VËÝ»ð°*µsi¹™çÛd¾àçqÉçw|Äǵ÷!OÖá6ôz¡¹ñ-Y•F=5|;÷?Ðׯ®Å0áL/¹ßN.8Z½ŽŸø¾îô*ÜÜ«ÀsÎå躃–ÿ™ýâ’¯ó™¢KsϾUPBÛf:È-¬MT5•·•ÀÉNç×H–÷°²×f3Y6ª/Y6 XdDÈ +,D UÈSQ «pW#@V1E€¬¢(íl]òú +@Ö ®O€ íBÈšù~ û&ö{PSÍ7Šc»Á±Š'‚cµŠcÕó<ŒücÆ +Ú<Œí÷ ‰êcÅÄyÂ*ÏD¤0–-™ 0–áÛB`,[…,êö¬mT9¯€UÉ$I¨B‘ÀX²FÚcÉ úŒÁa7ÀR‚ U¢cVÆÆ2Ò=ŒáƵ’ÀXбbÝš'Ž! ìXèÇ +ƇU¸HP «¯k…²ËXdªˆÈ +N4ÈÊëàå,ƒC @†P†dÙ¦­’ÉKíȰ†V™d•âXRÝCŽcÉ,ÔŽ¥eõÄ`L@ÿ"±Ó–]ó‰_qزœ¡Î¯åº9l¹ƒn4²'bg·,ÛÍ- +Åf€d¾w©iÄ ˆ3@2Iœó—9ѹ§‘â Ðj¾:›š2­ÃÐqè ªxUœš¼{œš2äW¿Ì‰Î‰ß84'˜Ø84‡¹†Ä y*ð>÷3@³ƒÎ‹3@¢g" ?šÈ%‹yn]Í8$¡¯ij(Ø8½€®CÃdHî ;qH¦ÎíÓ9g€æÐ¾v24‡ÙËÄ ©šhlH&êû¤s¢²NVêKf€ž‡®¥ó8$¡íàÊÒó™’àk5t¬ ©¼x˜z–¹­¯0$AåÑ Ðú»y 2´B8Ô‡ õ+Sa“¢ªÐ‡vÄ–„vóÂ9ôƒg9/:):çúÚØ ÐúŒó—Iѹ‡Oã ,†ÍÚyý‘ 64?F&Ý ÐZ—¨ä¹„ZBШ'j¯æq èjïÀC|Wÿõagêq™Ÿv¦}Žá´3áNN;ÓörÚ™0ʈ§üü°ÕO;ù²]/žvòe'wÚÉ7Ôtâiç i· ;íä[Y‰xØÉh;!‡'´;þâa'Ëø\egù³%°Ï:Ú>Já°“oëô‡|ë“$‡|ÃÎv~ôIȧûÓŽ¼KsfÚ‘÷†þhrÚ™*‰O;s‡TH”N¾1vó=—ø£ÎÔ£9éÌ·)?žt†•‰Ãqæã³¡ÝŠFN:ÃŒÏÃIgXI!œt¶=é ›' 'a g8é¼i9éL“L 'í’O:ùZZ1œ±Ë×Võ/H(ăÎêðˆYw ÐýAG.‰Âš? ¬% '†ê‹¬yÏ“ƒÎ|=!üAg‚ºˆŠÖ\Âuì 3Ð$E:COËü¤34e'ÁXý»pÔ§8-X§¡#ì¨3ôhËÎ:CšŸu†iŒ„¯X“eú:¿E±gWÛ·QL@Ë£˜l”“Ÿäƒ (ö£—TIv‚b ÷FP,½~UÅ6«BP,C7” X¶ù ‚bù£-ù¿Ó’1´îq˦{p,XË&#Bpì-#{¹ü€cÉœ~#i÷Í>ÄãX¿Fp,Y3yÄ1Áoœa=ÉJ)¼ø”w²÷¢EÉA™„ Öä±LB»RŠO²•Â,ЖlÍÐO!¡k±,Ë—ùu{,Ë—¹•x,”¨Ê6H wÝCÙÚíõ kè5’ŽP¶ò¼‹Öž$MÚƒˆÊÒj6åH–Tª‰A™˜SÊ.ï>;Šdè6eH–ðn’%䌲˨$“E¹~’ÉÃÚ¿É$™žŸdq­ÞžˆdòJ¡Ý‘LÀµ‚Ó{àÈ#™,Ê]D +H&Á‘LBËs5"YÞçv†dò+÷h¶ÿŠ%A™”Ðû +<¿F²níɺRÅ‹E®œXäÓÆ.w3Â>M/þÕ+î3×Ènuí2ZŠ"šb•ô]&pë’Ú,£ÍU§SZ†ÎQ¹B—W†©ätn™¸âC\;û³LœkñÕëKæ +Áÿe¥æ¶\U"Z>¸æn»Âè`\Íèêùj>DbqIE0o^=—'ë !0*ÑÆN~%±ŽO^k…:¬œ¹h~k`§ž¤€÷õ•׬¶ÿ¬±£US^f²O:—TN¨³5©ÉâwzÚ. +ÆÂàîÙÔüÔá9Üœg©.f°&Õ9<ÈG¡(ÊöHpÀ«Ë9<ó”n"#©!”ê0vT €ÚM³„„î­Kü7äi@)9üÝgèôßg¥déÝ¡¹_ÏÖj9©kýBVÕ°»FµÒ¶%QTõ=l¹¨áÊpùáŠh}iš,¿2Ñ]z_®¸+°§¼ì +i­NXùÓæ ™’Ñu÷ð#U¾f¸;@ T%üJíô„ê^rKß×YÆ_¹¾ð„T%´™Ý¶ß‚DUøÌÓE'W +¿Óê²Ã)UÙà‰QGªl Sûâ¼C§,~4–<É¿uòZø}ê9¯¥§å8_,’w7 ÙŒ¹ÿPªÐ©OºóS³y#‚ß]_éþ¥éä/pûküž_Š4Ø¡(öÊií4ÀauÊ|Úq3øTžƒ¸>pUúcø=æühÍ¥>t!x5”=‚ ÜÌòÁ;¤ï ‚÷Jï¯GðíëIüu +Þ_UæàýÝ×<€£ŽÇ¼›ÒAð¡¹ða] À‡NÚÿÑ+îÃrX”ÚÀe§û +àÓªÀ§ž~OèáPüžÖ¨ð{k”üž6@Mð{b…€í4Ǻ¶ä’ã5Oð7ÐVBð{¬6ßÄU|÷­bÐûÍ»z7kª ðÝ2øn&=Bà»éðƒïf N€ï€£ðÝ 5C໩gƒïöÑÞékËòï¡-Æ£·t©a€É£wC7/Eï¶«D¼¡CÁÀ^]¼»’ ¼û* 1ì@>ŠÝpÝbà=T¯’÷xmf"x5û`àý) êÀ{Ød endstream endobj 83 0 obj <>stream +ï©/Ž!ôüÒjó¬ýµvµ¢&±Â® Vv—ª%‚Ý¥šÁWÄîRÌéÞcw)Zö Øý„YD±»K½‹ÉyôÎhh%è­­* w6µ@‚ÞÒ5’)xgãð .¾mZ½³).ôÎïDŠGïçPR 4Ñ» EÐâ ½‹&½_©é€ÞÕxÏ€ÞÕÌ"~«º"ƒï¦5 ¾›ËrønJR2ønÚÉà»™2iDo¸¡1ˆî_êåÛߢw6ÇUêåÇU$„ù6ÿ ëë²ÇU*Z›sWyB»Ü«<¡½_bYs™”U°5»àYOlÍnÌVQ[³ÛØå`kv›(G°5»1hGmÍn3ž +¶f佈eÍÙX6®R§ +l“qyÌPëñã*½©t\¥Â´tqHSÂ~\e…Fâã*õ£éЫÈ7‡öêÃØƒÇR¬ÓD„ƒeÍ‘ZbYsÁµžÚš]¦!¶f—Ö˜­Ù;NŒÍnmjeÆfIÇ良ÙÛ’kZ‚"yt¬i{È3:ÖH¨·/Ž5-Y‹ w¬‘´i¼c\²VâXó£—,µQÇš'´³Ààkvcš€úšÝø)Ä×ìF'&ñ5»a +F}Í.›¦ Ž5ÏZØ)›w¬Ù{ u¬¹ Dk°,3q¬¹LÀ6N«ÈÆw_Td¦NcGBèÛ¦þk_³Ëæ}‰¯Ù‡¼†÷5»­Œ|Íö,56»Aôc³[ϯ%äƒÚ=OP"™eM@‰A‚IÇf8JdA‰Œ™‚1E‰ü:z”H|"(‘ìKŒÍnÓè Æf7\Eˆ±ÙeÚ¤ÄØìNŒÍ.« c³ 6ÁÔØì£¡Ï›ÝÖäŒÍn%v)JÈŽrw +I¥ƒH$3c& ]@ié1ŒÈV&"!rˆÚ0B„óôÄ@b£$vS‰bø@¢~(F,(PÏ" Qlô„€„¨)áÛñKèm! + ‘1cOA"Ã;’€ÄVR# !qÿ‚Éš¿F$õg±wG­nŒÀªdqÝÐuÛËܤÝv¡o[úo1âÎÖ­+]Rïý£ÁUý^³ ŸDÔ +M”C³3’¿ËªWí2ßš<È[Êqz¦œNvîVbK6<÷杖Îèü¡+·.X-—»Áù]ÍûÜkÞÕšeNª —T²l†–õ»ZÁÍïw·L4Õƒ9>©uIȰȨ޹ÞÍÄˤıC¡©“š§­;®ˆ¶z¿Æï·ù`”³s^þh¥©Ã^ûŠûˆ4¯Ö_2T +Ñ㢄P<ÇpÉå"Ÿu:ë}sëIÂJávÛ¤¼›Õp(#—ËîíÞƒùü½ÍRz\‹DfÎμîms*mê’\Cè=¾œbf†ç¯Ü«ü^ßowùÓ]ìÓnñŠZw6ÓKRÉ7¥*‰¥¸wƒª‡ddŽ–ÏwušÈû$®~ðm$yã”d”\Óç7…í"{EÆÿãŠvéûå„zØÒ>Bç4Ê¿{R-ÊẕàÆõu?Çp÷/(aô0r¿Ý³÷6®Ñûð”«õ´õxßîÂîfvÇZߨ•Oøöéß]M Ñcþó+%AZYÄÉLßÅŠ‚'§…û^Þµ«Ëës1`ÃVýÏ8<\d®ä#ØÝ<à¬ø‘¬¯ˆók®ËrbÃu­u»¢Ž8€Ã}:yGa@—YòÒ}Opëƒ3ûcä sÔã¶ÅÛuí½Ôˆ¤ƒ,sGL÷-/ÛšsJê]ÒÉüÔ2¼­|„ç¥ÚÝŠ¾¶3‹N˜·îî÷ÿè%3æÝ}QGl4¡æ=ÝD™„`:AÛÓªù­[p‹YÌ>Q'zRÕÓBI,B“JއSN‡âõêB=9ß¾UÌ›Ôôã)g5^’-ûú<[¬KÈGé@Îçæµì7uš<—ë¼d1ÍÛçŒä¶ŒŽ<ˆdÂ<‡ÿt$´ž%õ¿1ˆ7Ùf/H(Áñ\qëŠ üßG¶#/å¥ÖÛ±›È2Ùé÷±¼pÉ­÷9ûIòKí§$´ç_桎K¾&Λ:¡U±…)á¾E6³ŽºiÇ«[¡^”eò³týV^tøú‡X<.©âôb\êØmž~²µß¶†Èë¹ ³D^ëõÅOù/»å¯{øåB¬Ûaõð#a&'ˆ\µÝ˜M3VÏ;F ÿÕ+è}z±{*+:Ùs˜oÓ +Òå™WOw±ùt¿Îs±‚•ÏÜs±¾…+èççmÏ]²kÒ`·¶››‹‰Øù³kΦEÙ®tö˜â'¡êÕÜl>}. +îx–p«!¼•„0¼ÐƒˆÌ§CßÙ“S9£cæŠÃÙ2’½ú¹Ì§ëÁ°w×ÒšlÔ&õ³6Ù¢Œ!Á3ߣ +©¡=üâ¬2Œ"xKn2“žÐw›^¿ ʯq¼d~…ÆLKb%ª¬Ìu.sÙ*7ò¡ìKB`rÇÊÃëÖyŒ~äk\_£ÄɯêÃQ‰×õ +Êó€´×9Ö8KÚu2Åú½íÆíþ™îàŠkúe•Oz6%Ø“,&õK^NUöR«Nå³Ð·­ò°÷>ÿõŸßå ¡”ZþhpOþy#ƒ O-r°BxÀúláû¯ ÷|’ðS9ÅVH»œG`]æî¬ì$Éš74Ýz”ÜÛââ=,Ûyã_ëÄjeÞ˜Olkœõ]Oèz¥ÍÊÙ…ô„êAçk]ò‚ãäjÈîï6§rî*ó2z§óZ*zÖ¨§®ÞÇ1¤žûúJÐ+?ùi\r›5×5æÛÌìVÆT'¢î:ä¾ÇĸWî-CË +«‡Ç9‡@…P–Iò©à°Æ{þŸÒ™aó,¾4¶áä`0‡]Œ÷yè‘Ð…–×ï!!ðòW÷Íq£›{™ß%„¡:¯·2Þ¾g•¸•.7^U¢Ð¯={`­ç9ð mÔYýÇ3¦ÊœHsü{úV¡"ÐêŽi½Ò å>žK¥ÏÂŽºB7¼i’Œ‘ ÌØ~5/ÉçÜ}*õ]:^¶j;N…ð‚Oѽ@ï\—ò£óÁ3tòõis8~%ÒêõL|_é¼1¥{9Ë¡R=Ýç.K9Joþ[<´OÝf2aïé–ºl—ãóœ™l²·®“èá7äçÊŽ¿ËÛ òvĘl÷»ïì°aù0¿›çrì šƒ¶|E´ûý—þÔ×€çó|óO{©äN§}³B»yÖ‹­½V|O‘*| »çÿî i“Ã>Ò•1Ìêk¶àé3­f¬m¦Ù…G*Œiý'Á„Kpê—ë0•ï ÜïñP}Väö “eòìG§:(ôZ–ÓY“g üëzÐ +òÑe]·Ab¾Ù{ÂíOv•°„ÂÏþ»ÜDêí8É–Ö‘<æéÓ‘ÛÌ“š#0çkÓ&5çã_û¶.eéþçÿO²ÿúÚ¤Wv‰#ædRùœ¬ˆoÄœ¬n‚—ådµàÇœ¬¾Ž5>'«û0Çr²º›bNV?h6—“ÕŒÍçd’šÔ¤©+';bMÛ ªÖ“ ®{ú¤îT‚P2ñ4nM&âS²š¬‘å4 Ä%wÌÙNð„¶# o€Y¡­r~+ë’·Õ‹0;Ø­zë0˜(ƒõ‚b•Û¿… ¤^ª%/[ƒ¾zÁee KßQ½T-t8® WÜ +_¾owb´}<ÀwþƲu‡åÃô¬W™6øÔ—Y á _€{ eB$X{ß׆K*:–гû)¥*ºùžý —ÖéŠ>¸bE²v»Í½ltiìqà +U€gÿïŸ96žä»Æó«Òwƒ¾DïåV/’‰žõ†R—4 ö²€–ÐÕ?Ö²Cƒäð‰h½u‚]’'çêYaO´ŽÌçˀƞgwuuÊúA­8yBùüqÚÉ(É' ““€ÃǸu?OÈÚùØt§Ù„.u·ìÇA ûÚN «Y‹îòöVmõ_z”ÍoBÙÔŒ§+Êæ‹°æŸòÛ3¼'hb•.ëÅüÁ}ŠW_ÓŠ˜â ê éS< ¡õͧxßpìÍðê+W;ÇçÃþƒ} +£–žI\kZ¡.àËmž6©7Uï×Kí8±­ÎqHQ,ìÏÚ(RTÝ¥cõ~ýi\¡YÖôj,íÁ¼°n'µN*®uZ zžÅ@ Ñ(þE$¨®twüØßÂÚW$w:¹‚šl¶åÏ\‹S«z#T\W°Üèyôíè˜%¹“»üv÷ð,3în†¶çWîÉ—' ƒ¬ÉV½#¡b„TÝ^ +m ‘cþç-J(£ûì´QÎź8â‰4sòÌRÞy¤Pc¶Ä6˺‹fç‚@e7Ð{zÞöBeÌ¿õEƒÀ;š3Á.kñ"vòå¼ï{^Q‘]È#*Ääc6×V!\ü&Ôœ[­T'ÕX=*Û½ ¹ùù݉êîLÄ2JCð!¯;aþ…,“ôE/½Zûô’·ÍAÞ^}å6%À³Šòôï”ÜkL_ÇFcuX~å­Gq[”»ÃÓ3È·Nä­É¶«®¡šLÇbÞe¬¢Š>•”²”‚2NÆ9«»Å…·:1{XóA~ÉZ¾ )j ·5®}vjüì‚`Ò±×XHܰ_ä†`Å9\ü£ÍqæÛWýª•õ}M\44gÇÌ'¹Z§€7f–r-´'¼w1JÉqú÷£#—^ ý<7ß/tCû \ÒØòï?e½2v!!˜gFw{¹æOµî{ÙØ®ÐÉõWÚÿÜÌôQ.##2F+OÓ&î$Øï]kާé¯iƒøÞ£ò×ã<µIÃŽŽî|¬Ÿ=;|»Z’„ £u¹J­,­¦§ô£0N0ÓvgŒÕŒ¤íè§Ð‚†¶µE÷õä¾}õä$¾a)Rh7Ì™ØKÜPÏ|¤\Ø0V¿HxÌ+„M­¦ä[ër+d4çG¯¸9}ß„l†¶ÜÒ’~¶ÔøÑnvc‹¼˜§?#}ÝÌ¿£ÃÿÇ$ÿ×_¸Ýˆ$© IRµ;äls|@äžÃ¦šÎàÿþ ¦|/û×`¼ìÿýË|ûé+ño'þÙ¯ ÁÏŸ.¹¾—ýk0^–üô÷½üý5( /︑‰aÊ î¶Ž“£Rc¹Ô´xy&b˰ Spg*ÿ¯Ä¥®3Ýý¤™%¤:~Rd9¾Ðr% 6_+WÛ¡¤—LÈ ÅKñò·eäêup±ÒІLh×3Ï_Á®}gnP©\ÙŒ|Ü>²BuÁéÆa$¨vPcåï[ÔÐ,P¿8ò¦uI4¿%ËÜJYå8–ë}CkÃHH:.Wæ=lÓš÷¾ä&T„·<ž×“µ(€Ú“”4y½¸¬='©9H×®GŸP?OËdpwœæËÙSÈg ëG—eE]áNÇS—óEL·4T÷éßy˜HP²Ov ‹ÎU£¡’ú©W âØšì   +7íî¼¼˜ ^­ ÝèòS@|xq ª˜s××½¥Kû…®öYöÁo=v×·^ÏTÂŽx9ª2¡×rèZ­Ä:.)ºiZ~tÁ²ôàðuNxàŠÞÉ +=i€–$ÎLsýøj%O³¬e9Ô]¸žÚVë¾aÆàêÆkå =œ}Kx”¹¨ôuØl`vht5œ¼:Æ=$«AÄ1Öáè零 ÆöP=Á±ª{!DZ×Î-àX5ç€cÕü:ŽU,‚cÛÝ‹àXµ>‚cõŸ[Ý_Œ‰œ‰¶€{= ŒL“¢$„5=Œe³Â‡±…Äð4 0–íP`,OÉaló˧"0–ÍúÀX6w¬€U»6 }CßÂØÒ%&#Ö4¶ÕçÎû„†µøå*9PŸ«Gžãªe Æ$Ê.N igN]^eu»hÐÿ%O3@—œ&~|NK¹ÌE¦œ eÑÔšI ‰Þ/n…¶¢Ì8†ãqÉ=þãÆ½%´%µOøÓr«úÅ)¢¼n|BM`ú¶¾¢²¸:t{Ê­Ç%Çœu#®ñ¿d¸ÅË­¸Å ý8­ãÓ,ëw¨3¸ä¥×î[2¬¬Êí ¹{U/ÈþƒÛP½véÎR@Ñ–Ë£#A#)óªÌú‰È{]5gÝu)Lt=«‰ÐçÂ27aгN¸B[³îœ^!U.~$c-ed˧:Ò +mS¿ÖÂj}²OˆÆ;ëݵ^±¿ºÖ\ m±W§;TV‰_CÕÏ藵媽ÚÙÔ¶Bièä‹«BLA­ 9åe êI„oXB "ógB¦W,šá=õ©ÂQ +××}f”ZÿÔ–szl=è6aõ(‘x¨*×nww¿õqC‰)N HiÙù#uÊN›Vޱ—w+ôšë{Ÿ„š†“dX¡õNCÓÊZ“À€ ɰöå4ˆ^ƒî iw|‡œ_CØÔM‹c˜tDà‘x › +³Ö427Õ÷‘¯7ŠôÛcØš”ƒE¹_¬—éwF +—m<†•M€G +7r.Ša¯TmÀ°×v‚a #¸öˆÁ04Â3 »ß^X” Ã䯡?ì1LÚ 0k1l)ê©5µÇ0y=KH bØ’µÐ¿"†;bSébX—Å>¿o†bRL@›Œ‡±©½sÆV²0Æéï²@ í_qL‚[ÀáX¹ÌŠÕãØÒ9€L²½û +·eõÈ ß)%5_#8ö +NKæ @plK.ËH ŽÉµ}±Œ³>±¬ä,±ljƒÆDÌ“˜Æ^ë²c RÆ~ð ¡)`,iŽÇpìÆ>êqìG_wÃNêq¬@—œÙÚ±íÄ:·öpdk$hWœO “€ Y¹Œ?ðhµz 'šú<¿æß õÈ)Þ—ÍyNñþ˜Pwœâ}©ŠåïË2GÏ)Þ:aÎHų}”T¼oSð¤âP»¤âÖ=qRñNP‹¤âýŽ“{RñyNKc7J‰„T¼·F[$å’Š‘S”;ò0áïwðÖsŠò´f!Mx”SŠ÷mçZÏ)Þ7þ1Æ)î÷M8Åû2Ë‹À)Š‘A!…±±d·®ºç'ê–„SœJípNñY½±F ¥Ý×ïCÃÆQ ©8lŒ5°ŠÃî.°Š¢D{ñõS*íñž>«8×”3ïñ/|ÍïDZñ¾pDŠ´â-²þ¥Ç㾡öiEYD×M{<îÛœ#­(‡j®§ŸÐ®(xZQ~ÈÂú…#Í ¼¢¬Ëžh“‡<®Ò¾5yÀÝ™ñŠ"¢s§W|~]ÛŽ$¡¸1uàñŠ"³RX“ÇZ—[T:–Ç>ÈÏ+%¨¯8tšžóŠS‹ßŒ<œØ¸iˆ#Ïo¡Lv¶oV÷œƒ7yH\zoÊ’~üÊ`öÁ  ÒN ʲJs(ÛYÊ +*OÊÞÖ²Ðw†@ÙžC#PV ”çgPVp¸"P¶9)–èH,+èª$X–‘`Q,Ëï$§³lÜf»‡“‚YÒÓ³dÎÌdé¡I"‚™Áq³•×LÚå!!‘"˜ÙVK¶Ä–xèÒf3 +fìíó¸_½|fßÀìÖ9f–kD0»!Dkdò '-‘Iª¤j)ÊÞNYehL Lj0™vzÜy»ê$ËVÑ H–1xHL Xü‹r72{$Ã@C²{‰;ð +Ù [!‚d7¤T ’ÝrPÉ$I\ZžÉv6Al-JïÉî: &(‹¦"H&¡Ì6ö¢„‹­‡«ûƾMCÿ_}ß× 6W¢üGƒ˜ž^|Bû˜èÅ„%DéŤ^„]DËc“y‡vqûŸvq7&v1ƒ¦ìb¶ƒK` Ôø»X” §äby»=¹˜Ñ3MÈÅüöTF¢àùö§2ˆ\Ì»¸ÅdŸ„[Lª‡È¸EõбÄÀ-B_‡r‹2:„[Üü.á÷¢¤Üâæ\·(_ÅÔÍs‹å~³ÃÈ-ÞKˆ€ˆP«æ!ÓÜ"¶JÆ-&mÐaÜbÒñmÎ-æ•;QníyŒ[,¯mwä‹M¸r±è9‚‘‹­‡”\,°° äbÅL5!+ö)»X¡¸IØÅúOÞ-"ž^¬&:BèÅj"Z^É.ˆ•xz±@œVÉ +8B/£-½˜U…UÉ–súÈ”]Ì–Òv1YÂF6´«S\Lx©„\L„\Lk„™’‹ š$ô v~‹c­Zm*âXÛ½I^a…¶àÃa|­‘ªÎ«)¬ŸVÍ>ùÔ¸~B¯T‡³@—Ð܈óB+Ü"lþÝ´bâ~cnï¦ÇAÔÒÐH´´9 ©Ókw +¤+´Í#¯ò9/þ£—T¶á5$Šõuµ,?ÅÃVHÛ*‰WÑ +jω?<µd­Œþ×?BupjCÿêGFËÉáã°~ãçs]îl‰L­îŸdÈ㺆j€¹ƒ{+†á’Ÿ˜SýïÛFnÜ×-« ÝS÷éÞ´–rÝæªNèbmtæ°ËЖ÷xÔê+wîgÂ%¸«]ÿš2Ù,ð +é3´mM‹Eåöº+„RdîîCm6^\×OÁ€þ^70T¼¡»4Cn¼«ñÚ§Õ"ÃG<ÑÒÏ¡rIètÆshŸ:”FΡO(ß +þ*O’ÜñÚ‡ñaþ*ßþ­<š?‡Ê>ç—ƒ¨¼Tl£>U•í‚Ñ¥;ˆÚvÈ¢¼;³ÐZKokðQ‰"Šõ=g¡Jö…/œ_Aç×(–´{£Ø.ăhgw=x‹hf”âITĆ »æO¢¢Ò„ö'ÑŽ)Vvi& ù„WsÛ`rØ–!©B¢|=9ˆŠË"TWýAT<ѦÇÑuÉkuÓs¨htÝMw+Hd›Ý{˜³ŒQ ¡f¾ü …víÈ‘xÝŠ`ä$*7êp•Ç-7w•wS;=‡Š6ˆÝx]«ä캔ã´FáÏ¡²\%פçÐ¥T—‰a—†êE{.%„sa<‡Š–•ìj ý²ÉS„P1ß‚µÅ:Jý™«b»shW§Zz í˜Å#ÇPùýIZ í¯ºu<†Ês¾µÍCåí ØCE×Oè1t)*2úc¨,p á‘ÜʲSèÒà«™BeU¢¤îO¡ý6ÿùx +• ü)T|o÷§Ðå˪…ÿx +íè8‹‡Ð~[eÖBûÛÞ¡Ëår6v•70é´oR‹AûÖƒŠgP輑#¨¬­‰^ø¶3ñãT–ëPõP]’—*Ù D3š?‚Ê×±µˆ<Še+ÑðκÓ0„Î6Bß°ö×à}AUœ‚÷õޛ﷣7ÜöÛÏKÀû².Þ— ð¾0;@i乕&‹ñ/îÔƒOüÏ·š¦*¯²†¦ici¡¡iB±‘64MôH‘†¦¡t¬£i˜éhª$Ê:šºmÌ¡£©“ަ¾{ÖÐÔ5—` Mº*y?ÓK†~¦¾-’C;SÿøíL]«¬g©ë®ÀBcÿFÒÍ4P %ÝLãu¶öÝLÃÎ줛iXûWèfšÖݺ™æjáýÒÍ4¡)9dqC[CÁ‘D®—•6"‹,¦3M;<‹,VH¥Ñ‘±zC—Ad‘ëmMæþ#®È»‹\/lçŒE®—53z¹^vŽö,²<“5&F»™¦š °n¦ù϶;òÍLÛ™v3M ën¦r[èe6kDö‹®PÒÌ´ËU¤™if¦Žš9éXêºòxˆbÎo1,55ü Ó%©Ù—ïœ:W¨@(Ûe½©i^Bɹ—Tá¼æÍVh·Hø¬7USÕ?{¢×%‹9èžmä+´û^®Ó½TB Þl Z+š!yBë™äŸI†à§b%‘õú,Í|hÿKh÷j8—M iQYfŸ>ç(pɺèì˜÷¦Íq i0<¶' abóœïÙ¿ÝÒžënrÅÎ_A"ÛÊ÷t|ƣܛ™¬Ð#š§…¯„´ ³YÑë d%¤í ]¦Î^±½6r„e /£6OøKoÓ…Ø 7^¡݈ºŽ|ðR^Î|o_ˆv$ž< ¾«ŠQOçÓ»‚×9ì¼Ö%±½9~ÇúÁ}¯†òwu+ž®îøÙÌ)žän2ãïm{óœŽW+æ0ɧŠÛ®.É[_cY­…κS–ònƒ8§=~t«ŽyçÂ'´Ûç¯Ã+÷ %xÁè-Á-îG¥R2?<¡àÞŸ²Bú©ýÃ% <ˆÇéóšîñqÉ8°’>†¹G¸$ô–ͺ5Ì✯x”Ö‘áÀê © + 0,o§@<«|";^øje’íþ°®Ð½f»)¤“.’íF§Ó;=¯ e›¡øµWlÎ%ä÷ŒÕ »hŸO÷À½ !õuÞºÒÕÕÄç-ÚYaPÇ 0NãÈ6T0àCß0ü×IÁx»-cR0БH’‚¡8K +†Êzò¤ ÿ³[<ü—ÓÍU5ä]‹¹<'h8{œ ™poÈ \ +hNÐT0åÍF² i¯"Í hJR‚jÙIH °FxJPÑ;LR‚ +³;’T(.Ó” šøsH ª‰?‡œ`÷:М ¡!ƒä „É œÜiNÐ ¼Er=Ù²” C¡“¦/R‚—‰ )AÇYƧ¸¤š¬”`˜sxH Æ ›1%xå#CJ0^vÍcûûCHNÐdôïL×'ݘtm$ )A{1ü¶Üt”“§ Ó1$%h6R‚j¦ŽgJ€u®‡5’TA¨îi^µ„êžÖé¨î‰œPÝËŽQÝõ2¥Ou×-š©nq”RÝõÆ!"RÝb4ŽÊ²§ºÅh3‘ê®÷+§ä¨îå]ž¨¸m½_ѧ@]UTQ Õ-\òzOuËãÊ•3ÝõÁC˜î‰ÆaÂtO0Å”éž(,ªÕFucYr® ãºç?ÈE×=-¹%\7ꌌО2µgH¨Ï6¾Ýœlj…Vë!»%TóY@y© í<Ù]o3•ód·¬®<¾ÈÊ’¥ƒ»bc_;U¬ ¢H”êNp +#T·œ53§º“ZwS¦;éX5cºÓ¶dDwB‹Ý z{„èNÚ`Ljî-ßɈî*f`7U”S? êîAcLwշ̘nÙÖ0Oã¹îúj”‘ ãÂA'rÝZs£‘ë–5  \÷4ß»@hO]x<ÄQç׃»Âú|ƒ±–ÑñCw3:wȰ“ôŠö/ýÒOp;O„É]8°’–+™Dm_'wª ¤ç*-;oÚsu«Î﹂“ ë¹zWe蹺í8Iz®î +±ë¹ºMÔ"ô\]  =W—XÏÕe^Z¡çê‚'í¹zmïBÏÕ¥ºZ¬çêÖƒm¹ºÁÈ“–«dÃ*áŠÐV壻 ªdt7CY’Œîæ×7ŽîªL*›Ü…ΛÜÍßÝœmX“çUâ¡öl÷D&›Ü-:zEwËÒ•äs»Åf“ÂÜ.ÆPÙÜ.ä¶øÜn6ä0·›Q:#s» …?:·›0OGæv”¿HÇUZÙZh¸úÑ+®ƒ5\%€i¸ºESêKÃt»_°õ W7´ÑIÃÕm~x¤ájû°’†«d­˜al7¡Í”Žíî2¶›·%M˜ÚͰ”§S»Sdj7[Á*LífU¤ýV2® ™†0µ[Ð;O¦v‹á7™Ú-æÑ¦v zbm :µ[t§! -7>¾ ô~ƒÛ_ëÓ?ÿVEßHà¥%ùmÏæüJ„»#«·¥¥sÆÔhä¥ó;GáwŒœÔÙŽòÒùÓˆîä¥ó;ãyé'¤ÕŒ—Î7–Wä¥ó½ŽÏŒ—ηù’¼ô^2o‡1GLçÓI‘˜Î{ºŠÓùF3rÜ2$ùmOLç=ËňéüÎtxbZ+§'¦ómò ‘˜–g™Õå×Óò.ì&Ž˜ÎÉz-ɯLÈo#1“µØyf:KRÓú¸ý>Áuü#Ì´,Y &zfú Õ¬RŽDD?ƒ¯ˆÌôúB&ÉpßïŠ2Óy÷DfZBÜ{úó‡D½F¹ñI‹ÜÏ£4ÙÓ9Ùè}d¦3ÄN 5“é­{‚PÞ)”Ì#5½>ÖÔ5½¾G€„£¦å»j*Щé|™Ê„Õ|©¡¦ó…£ £¦óµN~ŒšÎV:¡¦§JQRfz‚¯'ÌôÔÆLO´P°bu†.1a¦óõŠ‘8f:_–ðœÔ4.YÁXxj:_(ÝDj:oMFMËf£¦‘ž™~"k›0Ó9¡TʨiÙPr'RóŠònZV¥eÌž›–àh“qÓF„›Î²s›6 Œ´lCj&!Žá¿N +ê;’“‚jê~a÷­vÛ!)¨HúiVPM­ d’Ÿ$+xÎ:)}é`ËÅÁBVPLG;dE› BVð£/g›„†¬`»8’¬ cŒf½U$+Ș!YÁ–º¢Yòp’dé +IAFµ&Ù´ØCRM‹=$Ò×¾%yéõÒ¤ Xs}H +ŠÒ¾<)(Ú[Er‚bµˆ …çõÕö9Á«Hr‚jNÝÄ®¢UˆäÕ´nBNP_ØŒ9ÁÛƒr‚ªdÛßß‹Õò5Â9$ü]yª}NPÞ$æÓ8$'(VvsABMs‚V˜äù•{ò9A†KÍ „ª´ƒ-¿íf!'H¤9&àXN°ÐcN_¦ &‚€êòI„æM;Øä’÷øÒÁ&AÌu„¤Nð$'HèJdåêœL¾%ä Œ=É ¶')Í ²À,í`ËùµŠñIAF•˜&Å„wÈÚÛÖ4!)(x!)(Ú-Ä’¬t–ý !g6 #Á%h'aæü0Z?çVäjú¢>,OÞœnf½ÇÝ%%´ý›Ã(Œ.”›LÂHd§¸I TÃ$Ì +&œãÎQ˜ÚîÇ'"­üÂ(Ìó?h-"" „–%#é}¼]AÔÔÝàÇ +AêØ5±IH +É0Ìú)¨á»a˜uÖŸp$rãS›×Ã,Ìúúa®ífaÖÛ)‰KHÓz2 #Aí¤ ³0k W3<’ ³ãD}X‚Ú†aÖªÄ4·†‘PÚ³g¾óJ‚¦ø}6±­æD]Î +AŸÍϬ òÇͬ›k…ͬ½vA|x}:ëlfaÖÎŒñR7 #!íå"Ã0ë+À0k¾çç9B–Ð…ºŽ”ÃŽ_¹Ç‚›Ë@°*uCâÂmé æE‚ß×çIBB«–͆aVpûÙ4·öX/epa¾~ +úðLKhŸ—CèàþÁó»¼?´Î|àˆDn[‡a8€gH" ‚€'=ÿQüNÈ €'OvF%ðàºw 6ʪ(ðÅ>`m^ûàëöì–G¿uç‚Æ¢Çïõ¡v:ɺBÈsø½.™Èî´¿nly¾WȰV0£Pô^D‹K¼“ªÓ0ðN&sLÀ;«6:Cïl¦°½3P…¢w^ ïl +.¼3Ln(xkT ýöʑЛð.ÚåÁÀ»h—ï²(tåãtcLAwÖÍŽc7Fuv絸)vgœd(vgt¼ìNVm éLK|ŽuÃøÝ Yî'›¹¿Ì±jªCçX-cÐp^¡Ø´³›@w2áäÝÉ,tgäôºaTÅ {û¹SèÎ8ßèF *ƒî‚C …îb º š’t¿"Ð]L“5@wy¨Ê*Ðpè._¬iWè‹1íw¤ý5tOSØ Ð½Õõ t¿MPá¶ß(‚ÝÓÄåvo9ì€ÜÍ–º‡º˜2èÞªsº;꼺»õÁèî˜\$ÐÝe©_ »£ÖN°»m^:@w3³wÝ ÆºQlcÐÝÀ™Pình4#ØÝÐ`@°»­K}ï-kHÐ[ÞÎMÁ{èüU ¼§9ñðž:€ÈÁ55†ÞÓfÜzO=¤qôžZu"}_ÿp?[‰,‰; +Þ÷e¹ª$$bc¼%tiKR„ïûÒߊn¾AµpøžÚÇà{š·q€ï +ß«™À÷Xo“Â÷€x=zC7–áw7Ñ€ßÏv`µñ»¿ÞòRwÅ“àwWb„ã÷ÀÑ•øsw³N +àCû}(~˘Zž¿‡ª 2üž†ú¿Ÿ¤7 +ßRÙ¾'¤p(|Oì'¾×§£óß¾ï Åoß÷…ä$·„:…1ùtRå5àõé4æê§÷!oâ`û[ô¾ï/&DÛ£÷ý¶~…Û¾Í8¢÷sÛ[?Ä£÷ýJ|yü–'9¿÷­wA&ßã÷¶·"ø=Q× ø y?†ß;ÁïÍ.SüžÚ"ø=`xD|XžM|˜/BðaöØÀ‡‘øÀ:ì€Ãv·Û¶…ø–Í$>uÚŽ øþv(‚ËJ¹èé[–×à.‹¾9À%ˆ3¶ðû¶y4à7_ +à÷m]I¦ÑÎCoN|ÓÁÓš¦žtÏàžlæÆ#¸ÜÀ”;¿•m¡.Ÿ?Ú<€ß·¦ÓÀŸ§8Àô}oc,àk÷m ¿e«o7Þ]»/ôG~O¤¿'œ‹(~Oc³~#—cø=ÿéßNßÓLvåuÉ=v"}=PZ‚²\Ó©ðU_I…ÔÛG²°.™q¢«gc«þ’&ÃáÊ +5LŒGI‚ +ÆWv“ÙÏŸ’T«KîžÇ„ºÜ >îvU°˜ÏO<‹ï×Z>Êå®™¿€Të’ÒÚ’1¶xjàUÌÅ­èþ™Ò¬Ð`GMüÊ×ÁΉß*€°.YýbX@òWÇwŠ7nÓ*é:º¸jÒZ‘8‘g‰žâ¨‡¸VŠN¹\w:äÉ´’*$ª‰€‰‚SÅ,HàËa ‘Õ^žæé8H$ebH$íþb ñ6çÈÊï$²Z[2ȺwqÈ+E¥ !4ÀE“@X) $Šº|3€( 1¨*/G0bOfQŒh˜Ý%Ñ >F4ä.#šˆF4kx Ñ^×ňM̓FˆYR§Qu*–CDÓA ¢"g#QÑH!¢@‘„@D|ˆ½ÕPˆ(à} D`U2ˆ(_7tÍ30ú€ cô„¾mé¿Æˆ‰©XŠÓd3oï²M« |Lì•ò$o¿WNè·4GǬÐVšŸŽðY:ï?Ž€uÉa|ñs=—аârØØ†É'OßðZõœ¼嘟çF ™ s?GjWU@YçíóHŒKjýOøËþ3õïvó]õûS‡²òòóö‹²Aß]¦OÎA‹‚€wTè8AM·uáWZñ#…»S÷àéÄÿôÞ€çWµŸeÓÔÌn¡ÀZxÍ)\çòÖ‰ùÀà›„5tA€x´Sܬ¾F+·ÔíÎÍ;^õCB—l°ös0uZûŽã$´›_NuëŸÿXòûk9¯ è¾>ŠƒNOþ2™ç3„Kö›uØj$ôv ‰úËÀØÏÏ4ôi®©›`IÐáërÊâ’ê0¯. ïrX¡íºs + +êc^?är#]ûõ€“Ìñ7øÁœÃ.úÆ“ùÜ#yÀ6~rj:ênÓµ¹§ò +­žã%.ùÉ(a#*hè ÛåÀ™&ŠKÖñö»qI n vjírÉÝ_ïºò%5ƒôe–É!õúÓ¥éÃÔ|îqd 'Œà‚»Înô×¹c“šh£eê’òîf†¼ä´ÿÜøê´¡÷vYz»¬uuT/¼Ü ¿!ðâÍ+.SéNó Upi¹y)HùX—C I„¶bóp¶)èdªRÁ8HÑ_¦Ò‚o(þk—™Ûn›¸ÌÜ0qˆiA»Mß§íF†ËÒ‚†* I Ú!#î,aXZ o7>-h—ÒÂ$+˜Ö¢i-¼Lȇ¬`ZO É +öô É +¦I$„¬`çB²‚ÅP’ ò YÁÀ‘™fó-©ø¬`"Á"YÁDËÍ +¦5nø¬ Á„‰dòQ¡Ç3fbwbŸÈ꺕<õYA»Í-&f²šáL܈KŸˆQý–$]Ì,)HG‡àBs²Ö\²Ö¹«¡-ICòÜ$)Øö$)H¯ …O +’åP$)HkV„åIç¤INÐv-•åðûœ`ù:%"¬§ï»¨ÒyÌ Ú6xˆ9lÚSç²}N èq‘3'@Ê–!¾öÊ ‡Ø˜ÈV¿{èCN (swŸHJú>'Ðæ~CNÐPN)A»L‡×§íÚÂH1#ñR*Íg²Ÿc°Ægí¶šPÌä¥BRÂgòÅMŒQú” YK,I vï4I ’õ‡” É'3¾¤ rp$%HV )AúŠßúS¸„”àFó qÿuJБ0Ó” «âK º•CJСôCS‚¦hK2‚f®!#h6?M2‚-¨D2‚ +»˜´ +iL–<ÁEs’œà eˆ[ûœà ¥/<ÁR:)f­X§ ÏÄ… ù~H–)Ò 4„¶D…÷e+ UXBÐ +Ò˜´×6Ù'Ï­iKä)kòª©Ëš5’| ÙÄfÈšÛC>ÐM–ä]¯Y>ЭÍ(äݺ„IBÐ 4CBп¨ >¡¡z!%uš¾ÔÚÜ’” Ã㜤]ÁŠfïÊ AG"G2‚n#~$'x‰þ4kö9ð'Íú¡BRÐl)$ }4)hø®HRÐLE8$²ý–/µy–颵ùPaK²‚W¸Šd¢P$+ûÜ’‚iK$)xåäCR0ñKHR0Uň'Óx‡L !Þ/©@’b¹¤¿PýÒµ÷%Ôñð¯^R‰òeù‰O +úe9I +¦é}„¤`š‰mÈ +dn0—˜àYnèYÁDCÉ +ÊiV ý!–d³QÛÀå€'}ª“Ó“ÎÝ‘œ ¿Íþ1'èæ©r‚'Ôµ‹8äÍ84'èh÷'9Á0»½ Ó!9ÁP6†åoU7äÃÚÊHN0!ºN’‚©z%$'˜v4'9Áîð&9Á´–eŸôKëË,%è—õŽù”@BEC>%ê ~ë—ƒÄ%àþ4â„8‚ÿ6%¸š‡D#»'h nW¸®µ—¤z.ó'´7óÁâ_½ä“÷Ëüê˜í¸‚ß‘KúuË Ì[æ}krÍêÇØ\¯‡LÞ@è.Woð%³7è;-éV¨C}ÿ>§Ÿ$¤ º¬hû¼Ñ͵†‡ÔÆrº66 ! —æ¦ÏE¹f`õcìAЦ¥"O·Yé¨&ÆI““+@„LKO.èg›”ÌCwµ×ð†nOH[Dº8¥~$ ?xáM‡ë¦Ó”…‚NtïÍ$ËrO´N‚?{ÍêwåUð®fª0ÞFMBÔuu]²šó†wt{BÊÓÐn€‰¾±D—ªo{BÛd;;ÝF ­1çû:ÌýpÉ2ÕM·¹ŒçªÀˆ×PE/ŽïÀ³TŸ¾<îÊ÷u¦Ú2äãô³k(c¥û¶?YDŠÍí•W·qõº÷äóÇ\‘w¿¼ºÙ¨IQÞ]RÇB¦Û¢ö>a:ܦåkÉœx©¬¼¡âçg…K^Z¨¨®ÅðªÖÚývR—ýÁjuüü¾±(Õ¥áŽ÷Va=u;MJ]w*¤}¦¾¸âµeM]~.!80ùNA aÚ>z¯É `$=|ÄUǨYèìüÇÆ¾kcÏ*-”ðº†1}ņÕ Š evŠMmWf(6á•KQlڑˣؚÓ*—G1™"9•Ct¿¶ÃÅnf ŠÉÐæ6[(¶Æÿrg(&·õêÜdà Ålf8¢˜M ›(¤P›fy`lb %0Eƒcûc Àذ^ù°Ì‡žð8Œ½$T€±ucÃêcÑEtí¢š•ËnˆŽLÚ ƺ™Âë–úë|ô0ö£—,ðH 0Öu>ˆÁXÙêa ¯Gû Œ lçƦWœ0ö£‹(c©›"8öJ¯CñW)<ìõ[íŸâØÀ†à˜d¸ý¦86À Pë˜\#@ÖmÖ*Y×^º€d¸¤ +šŒ^zò Ǻ _ ë0é#@ÖÍ€)Y³©sdUÿwmc¡/¸ók­ÿíßEµþ·œ`äa%„4Û Ô² ‘,õ#@fjG€Ä×(÷/s¢c#Å e±TèœèRj64Êšþf#@O(a®Î¢*rtè ªbTz~Šò°qHŒ ÐÂG€¤%ÉÐH¯a4÷ê(ÇÅ \²–%u!Ïv¯PÿÒ?<Ò‡™¦ËO:4LF€äÞ0¯G€Ä˾œsè í/Îo¢ëY^_æD÷J!#@bï“?$ëD‹qh@ŽLb²¾1êúœøÐÌp…ðÐ8*ÄÀãÐöê¡#@Ë;$Ó1Qù»Íº ¡c ŽÉ¯Løxüª& +êi­ñö.œ3@?x–èõõ3@OHµUâ ÐúŠ•Î‹3@òVÁÙù Y ›³ó惡d"Ámáîf€dYöNÇD%ᢣ/ÍBÌjSwRdQÀ§Ã@¢àpN@"«ˆ! ÈmTL`dû ‘Í Œ€Dùð©t ñÚ¾@ ‰òªãz(ê¡È@¢j =‰ª© $ªÚB0hÈ+)J45d(! ™‚Ä>ìPè ØHtÃÝ–‰ꚀD7/æÝ*È$ú¢HF4xPŒxkÙqNTìön>'*Ÿãj• Ñà½A1¢š¾xÀˆjºo#Šíõ# +F] F`U2Œ(_7tý¿\X зý·qÿ?ξ%Y’7vÚÃkPÁ?Ç¥-H8ã»ÿé NDð¼Öv4iS£OTfI‡ûÇö±'¸6_{BBϾ"vËcEì –ÊÄžÈ:'±»¢ÇÍ +bw5–v(ˆUè4‘‚X³iIRk([“‚˜‰¬ ÖŒN +bÂ*ãõ°óvRk–’‘zX3¶x¨‡UÓŒ÷õ°'´ißWàÜ;Œõ0yÛmÁÕÃäÅi$–Ãî¢Â­¤&Ë$Ñj˜¬É +[ôP [ W »_)d_ {BªËªaOpÛ÷ù’×ý‘úP2²r¬†Ý镇v§¹„Zî¬v'…V “O’Ô¤ÏÞPº·‘[A´iV “í‘g_ » îû±ö„ú.¶†žÎ]– ©…ÝïÂמPÚrjieá™ÂY “G‚yáëEkMÂ.ºzÎ]¬¼æka²(×à_¬…ɯ•´í]Ÿàâ’“ZØýŠùZ˜¼S ÅZØ`ö«a²„H5LV%L"£I‚iNV “l\=²ßÉ<îb5ìN&CE¶qÞšQd‡SÔù5ŒUûÚƪ¥”ÆÐód0Ö,·=aìGßÜ¥'Üâ!zSzÂÝ-s'8Ö­²p¬ÃéàXŸ—☴.JO¸Á¥c8&ìîÜ¿àØ@Ÿ™ˆJOGBgŠÙK4@Öõ·d@ÖáÙÆ;wÇ¿G€¬ã%@ÖlÚˆ Y³2g@²¦fŽ Ê*œÝ=”áhk˜jPV_eõ6 +ü„u”&Ú½‘£[$´I¶ʶ’²b‰v€²Í ÆO‚馀eÕ:aa½~‚eÕu–5œéËšz +Q(kp!XÖ—P=ƒ²WÕŸ@&”5Ü/”5´RY[GV%¦r”½n€²Š>…2ØaHVAþ$HVtø#Y1#;‚Óýý€dEkhÉŠ +:3$+fål×v)’½Õ²‹×E”‡8ðüºf7­ÿJjv[¬šÔìæ¾N†’Ý4ù~%Ç+²Wó6鼚ñäu÷Aûþ²Û`ULð!½ãþ sÉð!+ë‚ãCÆl>Á‡]."øŸ¥|éûÏ Ùu¸B"Á)ž„î‚ò+¯{yˆ ÿiŠóÃÁoïÛÔ•=BHˆ:m\lÔ¦h½ðÊÛþó•y&ñ¡â"Yû> DR±AŽÉL BdX„x–‰ +‘€Èj"Ï¢@=–„Ürú—¶ÿ„¹"Cˆbà¢Úê"QM%=@D…’>ˆç_ÃU™@úm "Ê+mè!¢@â‹BDÁ}˜` .Fd ‘­k0"Y“%`D²³ž`DBëŒ`–%Èôõ@×sŽðd‹cà€„ø‘þkŒ¡«omÿÙѧ‹ã»³7,àGÇYÉÆwŸ`¿0½ëv\‡-æíÓXd…¶]àˆ°³e.E—á°‘Ð’0Zýl:Bfê7³AÄ:ŽïÎöúO»ÔlàÞ²ñÝYÑù‹ã»óë÷ã»OhËôÅñÝYÍrÈï®ÐE5=ä‘Tì0¾;!iLÆwçÛóã»Oh«{Æñ]ù-µÅí§wåíÜ“jzÌ®ÅH:½;û[OuÜOhß°ýøîÄD-È.ØÔO7¾+¡¥VÇwŸÐ«|ísèÀßöx7§‡t|W‚ƒ^È& ¦¾„¨–è_}¢Y.¸éÝõÈÎêàò1PãûòÝPþðûsìv®ŸÝ•r]5™¢Ç¦Íágw宆BœÝ}BÛÂ9–Ïçž;‹³»sWƒãðîĘ!Þ•Å<Uô˜ š8½û„*¬îãô®k§ŠsO¹Åé]ùײZðÆéÝ'¸›½~zW¶Ü5©¢Ç| •qzWvcåŠò3ou~7½»6êø¢è1»“âðîËωMï>¡mf§wç°ÒºŸÞ?IœÞ}B´8¾;_+ÚðL³÷óã»ó•·&)j0Ø`õÐð_gÓ¾5ÉæË÷Ë|0d2—<¾zÌW_<¤ÓXš!%˜P²£)Áñ›¤ÏJHé¦)ÁØ“á$#x^Èö<É /N‚þò.|BðÎô‡„ [¹…$(’tÌ{„3 +÷·§’°EbÂuU±³&!pIƒ£úú” àÔñYl]¡¤bÀùtN^? ¤O§M<±ÃÈgºú³¼èLôçNðy®É{ÉqÖÈñ¾7;5¬ÊÛfHîÓPVBz‰BÉt\‡'8³VóN;f]Íá9MRWh‹ŽÄB²ÁÐ>Kº­`ö-Tn[m÷¸ÈÀ‘=·É@޹#ÛêË´vB?4„~ð[¢æHþî µs¥ßö›Èýp‡¦ííÝ!HÐÏ3v-K5ºß{»§yßžL´Úɯ¯ÞÞÓ¼u¤nÿ¾9Ͷ@½Êɹ—VQN.d¶Z×Ýݧ¸ì ÷ŽÐ,îS±ø:ÿ>²£bq_'N˧„±²œ~ŸëRB{ÎpøX~0<²Éë@8|ʉVüåø9xã‹$\´ÏÿùÈu6t«9݇×ÉPõ‘ó¸­á‘ê .T¡ÃlZŸòz| StÒRà üÑ$;­ÀWȼPÏò•„à7©B²µ¶üŸãɱA5PþráåË$ú?ܤpZ+ ÏVQ%žÙ0<›#OÀðl” ‚áy÷D„'øO‰£žàaB0|Ÿ¿÷é'Åð[ïkÃåüE6á1<Áã€b¸ Ò™s‡á‚?ˆÇð÷Q +á7 ä„cªœax2ß?‚áI³!áÉ46„ï‰ á?úº7/7,Ê 1;áy÷—‚gmJ3/ÊÒ$^àÌD¼À½x1·ïàŬý€h¡´ÍætCB{ˆ˜<mnþwÉÄ]oêðd?ÀÓöÔóø-™×â´2ü–TbhÑËãwº‘4Gü–ƒ÷ވߒ•¡wV"ŽÞùC™ß¡wÖim†Þ  pôθoˆÎ_„_þl‰Þõªê¶Îjò+ˆ€«4­ÐÅ(À)•÷èë‚»©ÈKè¾wùg‡!Ù$y ê q¨ÈKh)ÇŠ|½2pR’—à€*„+ÉKH‡CI^B:GAjò,0©u5y mmnW“Ö“É䇚¼•èjò+4TÃÕä×#» +‚†š¼|E¤P“—вFˆ5ùõݾøn¬Ÿ¬%W’_o§êDš+ÉK ¡"/±U¯ˆyYB»kîJòkQvH ø’üZË›ÆïKòU? ©È×çäò¥"߬*òͪZ¡~þä¬ '6Þ‡_¡ZyE¾}qôü‹GîCÍWä›±Š|³é=R‘ofä*òU-àXE¾Úa*òëå@‚"Ç÷]ѹqùõ¾Så³Úk€‹â*ò²ºÉ –ä%´Î5R‘—˜…’¼„tÄ’¼„ÐÄ ùCÞUä×+ȯRìP_Ÿ¤W_g¨~W_¿GVÒ^¨Ç¯sj$®¿NsÈj¹züÂÔäB=~½·©ÁP¯êàÊêñÍÚâ¤/r*Ìrc­VQä`åø†¦ ­Çoú©Ç7+þ‡zük+EêñMõúY=~˺Ðï_gݾ6Éú;öãy7bwH¶¾.Í^_¯4#݇| Aó“æÐDaù@ƒ+É*zš¼+/ä{²’äÛØ‹æ/Ã.äÕ¦,B>PÌ|“äÅfB>P^TŸ”ni>P1ÕAò- +Mòj¶$!x~KÖ¡¯[ ›¥¯ÕÉààÃònMóôW<.æ2Pg¯.Ih•y Aÿ€átëú‡„@\zX~…*í¯GŽuhù³Nm¸$ÄÝ<ÿêÛõ¥E?Ôî%ð¬æ ”NYBЗH˺µâH>Ð ôC>ÐÁã'ùÔµy>Ðá|Lò¦–`øž' ’4+ò…„`Ó]iFЬ 2ˆD±” a†¦Íh=!%h&rä›<'hÖû 9A3µ˜ÓI ºjÖŒ`ó„HFЭ/N2‚a¬ デ”`€×MS‚aC[!%¸ ’”ൕ")ToîwÌtÐGð_—÷çi4¨‡/)ïOhaåýi')ïOȤ‘òþT«OVÞ¥„—÷t>H}بT¨ïX´ÒúþxEÎ}}G=«ïwsã õýGURßï0'õýŽŠ/­ïw茑úþ¶ õýnCn¤ÀßM¹)ø·£)ð¿â¤À¿mOH…˜pP¨ðÝ þav«dYî¡ÀPàŸ¸ÄÑ +ÿÔœ€Uø'$»I‰š†)ñO+º‡ÿ´i¢PâŸàŠÓzüÔŠ/)ÇOs®%¡Mx%OÔ±DúwÚ*®R?ì'!þa޽¡ÂßQC#%þmâAKüm•uY…_ðHËê¡Âß¶«-)ð7Óu þf´ôPàošÊñÃ]‡ø›òI}¿AT‹õçÓ†oRàoP:%þ" -ð7(û‘‡ù7)ð‹a!Jy±Àß1“B +ü`˜³¿\Œò—úþÐÙ%Vß:OÎ +üCÙL¼ÀïGVàz¯bþ±”Òx}®­K‹øó‹”Õ¿ íoá;ß&-áû vü9™ï]øôèoMu(zçÍeˆèõ +ÀÐ;_z’PôÎ&¯"z?¡eMÐû -æEï'x)Bð~}MxO3!!à=1nCÀ{ZÀ{âMÁ{ªÏ2ï—vÀ{š•ï‰AHÞ*°{ZK?bw~I²»ŸÐJòØ·0#Øå GPï 68oYxè,àý£«òI0(x?¡¥ÓCÀ;¿Ã²¼eë óíÁ[BàÞyð–ÝêµòQÆ ;ù• j=¡­AyÁIþî3t¢°¼ü&½óe"æ½§YÙôÞÞ%½ü† |óžð=Ì€–à÷Q–à÷0yÀoL rüp&ø=Œë qÏðP> +ª ÀÇk£âVêÀ¯ÀáGÊ|jNÀ|ÂM8áÀå^øÇ\Ά>(Án-¾N v‚³|!ØÉzF«Ë#¸„2Gp Õo;ÙZ™ãt¾¿hxý âþÂKFO„Í=A¥ÄÙ¸’ +ëI aj1ª­”l—¯¶RÊÇæ?ìÒËÔVJ1v¯¶RªŽãµ•Ra ÄÔVJÝ,4/¶òD¶‘¬[)ÍŒd£ØÊów-sýüRM§Ò‹­”bÅ…(¶RŠº2µù•/M‡¼ÚJ\.U[‘`Öåå•2$j§W[‘PÝ,?«]¾‰ëë ϪñêÕVJùTñÔ£'¸ýè¼~~yu÷½ÚJ)ÖSj+k¡tªŸÿ„ +8^mE– x¾ÄK3óf/·RÚVfój+¥az‰©­”·”ìÕVʶ&‹j+¢,l<2A}Ô«­H~Ê^mEÙtœj+?ú½§ÖvÃjæ}çgŸÐž‹b+¥)Ï—ˆ­ÈvÜvNl¥@’Š­”j'^lE–ÂNÚœØÊ:i¾éçKpá{[Ù«2G±•R ëÄ&«åØãUڵÑ´‘?ÒÕLêFT«]Œ¨Æ¶ âLjŠZÁˆªšü #*M#š9rŒØö§#º²2(Dtµ¸bÑUãœ@ÄBDÇ„ˆh!ÑìK ;‡ADÕ>7ƒˆjúŠ"ªI^‡ý]? âõo%ñ!0ê!¢‚"O ]0êEÀ¢)í!ÄËu"!ËÍFR ¯ º‘@ Uºb1Lš- Ä.ŒR„Ø£?!¦G@ˆi«‹ Ä´ò¡ˆ ÏKÓ”ð @ ¨ê„x‡‰B œØ!t% BtÐB¼j!ºÍˆ„h褄hvÒŸdÔöAˆöA†uѾçzè¡Ü` Úœ„øþ[jèàý'¿â jµlñ÷ŽÞòÚÝSÚ]CkX[(7¾©¾¼'0/qÖ¨$´]¼S?¶~½oÓ×nⱄ$¨Bßk½Ø9:ôïöŒž,ø_RBZBÒñrì‘û†ÆÉð‡×óÿ˜Çc;(+´gÛ8=ëWÔ‘ºáÁj…@Ÿ¿1cù«LlKÅLÏi‹c,=‘H¾Àv[ö%PùâzÞBpØÁ¢?؆« ®Ç½‡«Ÿ¥U<µç îÚou]i1oÈ3[öÄýH½Ý‹kä¾økȘö‚.>\Οæ]ÏïR_<–O©õ¿ÿu¯³ú†V½à –|„òø¤íGbª¼ä³Ã/k¨ó“°žo<ÿ9—«»O™4C—úŠEöï¥:ÚwÖ @{9Çe™vÍÛS¹dÏa\ÓíÔÛ†¼gùdJì'¢©ëªªë“T6#‘EÄ^Ä7O´û «]óó'Ñ„}rz ©†CëÃ>GÙïF¯VÝ×ÃÖ ÈTò=»ûûuãøzΓ°LPóvíƒ÷ü¯´OÜÿ\”!1>ÎíÖÜ¡÷íHÿí-¢S3Ž·ˆ'Ø0w»®Éê{"Í °=¡«³œ>ím+ûòÝ\^«ñ<d MøòÆœ 6d<þÍ­ÔÖR˜§$]m(½wb˜P›ræÖÒû\_+¤ô0¡žw–ºíæºû?úÈåâCÚ&µÁ"[B§…Dmب¢bæëŸµÃöòù +×ÙȨãç‹—Sq¯ns¾NË%e†³¤ZjÉ’gÕ~üÌ»’Ÿæ3y_O|¥Ôä?ß¶BÛ«ê<WhB¬ë®Ý¼%z´OË$]o_"¡š¾dlU™•$+«/s,„„Û“¿ÈvWد»ôë½ÝP"ë­Ÿ¿ÑÛÜêª|ƒg ½6›—"¡­C1j+©ͲÎÎ[’„à¼ímd{l½´ ,T›•ÚñêV(U$gQ¢Âó(«"ê»þê™±.yòRýïUÍÐÅ;ÙHKˆ¼mLÞjµBßË_Ëã¥ítAÔñ²U¼üá+ªüþ󇯄p¾ž‡ï_}ä>a™&9Lzüá; ,¦©>ò;‹ç_xØúÃW„¡«VãỄ¨Û`‡ïDA˜¾³ZJ_ N8ñxQò +öxøŠð-”{ãá;+εxøŠº-d}ýá+궸ìUuðáÉá+ +Æö‡¯é³ÓW4:¡õèO_ÑèÔ‰ +ø~($ÇÃW‚¸7‰ê¾Šìð•PúB{]Z¨ Ùù©¦ƒ†4r¡uNžXíÌó‡¯Hoehw˜È*Ùö­áð»OØ —Ð/!”ŸçÈ^H´B¦¹õ¥ CEþð{Bƒ¾"ýomø>¡Ôñ§¯ˆª£îO_ n: ÿÁŠé†ùÓW ZçÀ9¤â䵿/2çßË_Óœ/›½Œ,gȽ­á‡£¸ ¡ŒÛ«w޹¡¶{ÜŸ~Sò¥ou5’Ê®7Žš«¯¹î gÍ÷‰hgüržq?úÀ-]í¹hîÜú¥rhE¤œ¬+h_ÞÂâ3¬Èe q À +éÜts[x¤y^º²Ü RŸüÝ•ŽóN,ý†’¥øë¾ø¶T–ÂñSã€ù’¼„ ÞrNLàSªrÞ u÷»›ÒcÐ=êš„*ÀzdW2—¼Öî¼»š +ßÊ:IýÀï»m‰ÑˆëÛÙü”›•ÐVÿqÂâw{ç—¢÷XS¦!5ÜýõsŠ!í°ÒGâ +±¾Â‰ÑÚ­ˆè4©3Þ·«9þì·ÛÑrÂ÷²“LúS:Uß{˜ƒÉu´ðÂw›þ¹0øåüJÂógèÄKuî³w¶W:VÑÜê`†ºËþÚrE‡Ão_ÊX¢aKóͧ{šÙuø-¡¸Å_Ï4FM`¢^J\â!zVþgïóÿýõ î¯ÏæY2þGƒ R-^‡TBèrøL¶w¨×Èë(gÕE‚›FyÖ¢žPƒäæBª´ñN2¬'¦jÚ=ôMz3·:¿l{ÅÄH':ÉÃñ’ÑÓ)ô mëZN†e¯fÞž„¼ù§œV`/v»Jå¶JuªPãó±ÜÍîÌÇ$-Y…OMžºã¿Èÿ6¡õ>NÈõ?Ö„%VM3ܪHµY–Ž-f šGãÜ´¾“&µB[»þ¤õ­Ðö‚)¾Û+Á ³êOÂsRö+œGûòx÷ß +m5–ç<˜ïw[¬ªÌÓݵþ‰l¯@ñZ:÷Q.je3\•i=°˜‘ºŸF(ÐõˆûˆÅÆÅ‰ï á‰{¢³¹*f.¯²‚ÿA2”t*ý}më‘­§±D’ÍîÌŸ¨‚‹ÄG¦ +ôd’÷<㞎 ?ÄMatd›&Øx¤jNN·­ôå€mímr5 +H4ðÊ–èÂttGU/rËvm²îÁ]Ã'¡`´®Äi¦/ÖVSºxøâmj=ï³2÷ƒ­³ë*Ît'7#AžG¸îah8Ÿå·¿zd\i9ÅGVHs±éî#«…2ÀEñµâÅŽÒ¤°ú7Ð1}r-6çñoaJii 4 ~°ô(J,PRîaó?òËtŒé,ð©³Ä>½ËPr ù]ž6øó;yÔ|~§—–Þ}ƒ±7»ËÕ¸gaþ fˆ'ù*âZÑܵ4旅“‹í”54M8ïj+”Lk*ÏEÍËÚQ'Ä·nšÔ;Ž“Cªq.d¹™3Ê9…'ª3w`¹¬JÅ¿…f’,çµcïƒu¦Hât äQ«¸ ,Ñc­ÈüxFâô9N‰GnE,ϞΛ¢0<›kå {Ÿ²cìszb™„ö²uÄõÅ/u*Gƾ)Œ~ør¿,!”ËÏo÷/«ò?KᆭuR¾’ŸC¡èuì¶—Ÿ5ÇÚÚ8g³ïïnM xÎóJ­Ÿ'+<& ïù*YÇ6ÂÄïKJ÷0+ŠgÕﲋ«›¨p.T•7+xÜÓ×k+8þ­¯0*wã|W•¡|çéÉ«i¡_|º5&…êí†oï±3Ìæâ÷š²V†‰s™’ÆÄŒ¨þ²šÓ9ø}wc5û®„¶Go|ßÝÊ‹aAyHóxúÈf’ç··hfƒr¶OþOÿ.C—Ý·îf­ßÐ0ƒÖª¬¡p.ʷï9ŽäAŒ©$Wª½;Fœ»ëŠYG£«ø Ë$¥£Aâê‘0'./,%ÉÝ<u/YÎ×¶3qm„ÚŠ8Ú~’4~v;°há;¶7·ßcŒìcîNÕ4-ugI±Öíãit*ÏE’Þéuãæ3„eò¢›Î{ªI¯s­Þvlu49ˆþîÖ0e­“¬œûl}=dÍJjqô %p@ÆsfVA0ú¦7¼ºòK†‹ü™èÏÖ¨sêÀþŸçG©¦~ +{¾Ó¢>ç^îï%EMB°ZÞ~Áçï¿øF: t®;¥EˆǺ4G®Åµº±çy¸xJJ÷v®UwÊå¶"èFW¯Ê}Ÿ‘¢:׎¿" Ò÷a  “Ñ÷dåî¨.³X’ΞK|yˆß‚v.¶Ð\Ý>GjšªÓñ®ÙÞ1_O¥•­-(–Ñ!´MEZåõ`ñž0âï ÛcX¾x¸æÎfv᥾Õð6ÏÑl½ÜI²ËÕ×¾Â×|“½“é¦ï.'M ÜÆ¦µŸG£)‰iàm¡ÉVü5w­Êœ˜ÎÜÓµñ¾gl¼u:{¯ÔƳ¸5%ÙÅØ ^E¸AC5 J¨Z qi EÚÄj ×œÔ= Yð™°á‘‹/"AÏ|Ê&Í~Êéé»—^¨ÞJÎä^4hÚl4òëqþkîþxÛRLJøGƒ›†ámMŸÐþ}‰Qxлnqû6˜Ð¼×)z… ÷bI«²ë}¸ªi¾Ö@Âõž‡q• a©ë¬· +bõrêºäý8ðÄ]J˜nþw±®µ,Ö]­YXöb6Fwbm°¢Ž–­FÈŽ;QØÓY‹wí;ùÑGêmz†ÎLmf‰æ‹ì2±ƒ©sœŸòÞ’Yþ `äPN5—²<¡åþ·Æg=ì îÖWl„#Ò—ëÚÖ¢Üü°þ×?ú¨iÕÀß !›„„f"B?ú!3NóðwÕÌ|Ö²éæ4k‘àBԦË<&-Uõüšúª˜ÐÞ»¦Og‰TT0ísáÑ70›Ž¹T|F-¬JÎâvN3—™Ë±xêöxð %|Ê5½)©‰+C­)UÔ8Æ44 a¹a7®nÛJ[Â.VÕ;Tdv™I¾½Ó¹œ Vü½B­½”üÈËh ¥ÿ詶Ÿ=«®~UÕÖA“ÂUµm +…­óa>w¾öõ8ÿŽÿû_ó?›®¦å¸®Ôïkã+4›9©„fÓÜøÌšÿÊ#›Qè¼Ò÷ uÎÕ¯ç$pWa5…ê +¨ÕJâP{ù¿ÛYˆWZ_÷lMlÒQZp~ò[B:¢3ýò\¡ª†¼çìä>ó‘^uE*´ÄNó{ÏɯjÕ¹ÓåËíÞQ9J‚ú½AbHcœs‚]+ÀRÿÿ¼fà‰JÍbëçøí +=wq-Ÿ²lòÞô[ëgªå}k%í¼ïHDÓÇ&s"g¨‚1Ð\çüGåf«ßé(nébΤFµ"• à‰ åWˆªwYÉù—Ю­½Ü Yûù1³[ìË9±@ -™ì@Ã#•óÐâðjµ‰‡³L¸BÚ°:Üg³_¼C¨Çråí¨Æ±mÀ!ÝŒµ 9yʬÐö¹u²º”¡¨ZÍî‹ËÒÃܱsê#²û®æ¢«rÆíýƒE¹7gDpìiI…^þ\k2*$‰ÔÑ…ÃO©Ä³+ž4×÷œýZó-KÔ%|ÊbmDww\k¨jaÂñlY®æãçp:iµÿV‹Š—èsqË7kx-ËfIÅÚW€â°ókE‹þºcDMŒáX_ c]³{c8³Œ -V2{5ë ŒM£e›Ðº 067,.s±PáÌ£Øò€¿ˆI¤"ðWŸ¸íé<Š­²í<Š­G*açD1|í¡¹bSsRb.ÜŠá‰[X* Øž&(6Р(6l´-ÀX·‘ãcÝHËÆ€ÃÅ  Í`¬C0ÂX·‰²€Uï0 •ʺ08Í·]E€1©©ß•ÂXSæ E±ÆA±O‚bÝåN>¨A±—òPl k¤(6ÄÅL ŠMôº(Ší¥GPl@–ž ØS“ÂØ@[”ÀX ’ÀX7buòd ê­“ÀXW:c —c;#€'j€1d ÆšiTS (ÖTê—¡˜.Ç/(ÖLü<@úü<ÄAç×(¶¥w)Šék¦(6u™0›Ví‹0&‡6°ÊØøË®"0–^ñöcb°ŒÚµ‡1±GË/.qÞþIá6&>âIIÇn#É »Õ‚]ÆÄg8sOT Y*êpìíŽáXzÕq<‰²+y[nÔú9âm,m1ïˆcéz©ÑÇ0Ea,]Ö06ÍE(ÀØ]’ÂØFb‚cXÌ Ç¦:®q›ß(š[Mqc_4 Œa8ÁØ€·±ª*HZŸóÇPb8ööÆ ŽMh0›ð?Œ8&óÈ =E“M¬Xcbú=ˆ¥ òš ÄdÝÁ(ȃØr×¹b²$gþž¤nïÀb¯ÿB±ibÄæ¶ !Ùò¿¸€aCÝyøUl˜ánÀ°aWª€a0âW±ñ¶žbj’Ñ“ 6lÄœ€Ø€z%Aª=ÛMCs~ b5ë*ú†Ö´t6ÖV<–ëÊÆÖð«µfsD­ïW~Éšíœq-& Õ¤!G—ÐrGê‘YZkA=¥ûR²„”ìÈèuõ0 +æc¼N˜¨[ax¦8¹BiTÀ«³9{À +SãEWõ²p­²Oq %Œä{7ù ›~;¥|…¾{ËÎ°ï ­ô)O's¨?WÓæx +¶‚Ï,­¤¥ë³¼ht'è'/ÜñSÕT¥îÛHh{m{e»½,‹÷·ùÁšE—Øg;ÚêºÎSBبÑ@³f£xãMùâ›FCfp¨æ`¥/»¯ØZ!Ð(¼Ø\Ý}s?£ˆ7¾æSqq…vVïÅæd}5f®‰uYÑÛñ®Òp„IÕs <Ë­ó4`äzdèÐt„ÚÒ9•éÛ›ªknk:íJõ•µ€4É Ü½'¢·±ÙÇå¢r˜J”/·–% ŠœÊé̵ÕÖÑÐ +õ»üŠ<¿†²b®|ÊŠju0(«f ¬nòê'XÖ;-Zn HVmR+,WÔR9”5ëÛ(ÛUpe ™…²®]pe]~”uxR(ÛÒQʺVÏ”õ·…e3æ~€²¶fP(”UhÌR(« («kƒ!d-9’}ØXx$+ÖH†Uìs3$+¯éG2ˆvr$«*íÌમ9¹/¡×*/ YUï+†dâ¾Þ)UÃFdÍ’ædÍRûd]sÈ^ édݬ uÓt'@6T¨˜™Tót|*ÙÀ œÙØÕ…°‹‡Ù³ÓùÆ/86¶`o€±®­}cßÇ~ðK.%‚cÝfœŽuœ¢Ç~ô}C€6ÀØËó0Ö¬ÄLNŒ +åc¶wƪ¡±jÓ«^I¹ú†:¿…±Tפ­*¦jÊd¾ªø„Ž_U|B™(©* +7¤Ò¢"æ:XQ±zH‹Š£bEÅWT"_b)*vøÚ‘¢b7UíPTDñœwǺ)Á‡ª"øŒ¬ªØ×ì—ªbÇ,©* +Oê¢å€Û É¿¥ÖÐHYÄ2VVl˜¦uÅjª>¾®( e{/¸ºbz• oÏ­\Á•dĺâZÍliE°½cY1ÓNòµÃ'”©ãʯÂl¨+¦bã?¾®˜Š}9_W|B7æžbL>Jå,'¤wXWLú;Œå‘ª©žûºbÚ´RWl&èNêŠÍl¨Ba±™Ùb(-‚ÈK‹ÍZº¡´Ø¬¥J‹òË·o[I)-ʲìÒ<äç*ó Í#“Ù §ê Ò¢¼ÓÖË/ܸ´®´( S¾´¸–%D‰B{,åׄǿÕü’ ] ++¡ÄØûSNf¨ßB_pç×8ÖŒYH€l÷' õuçb8ÖuçsëFn @6 àD€ìû#@6–1²‰Æ²—BVùÔIp‚cséÕPCýœãØ„3 Á±‰[Á± ÙcŠcó-x›0Ž!86[QÊb86ìfplà_£8Öõ¢Àp¬£üIp¬ƒ2Fq¬Y•#àØkK€¬Y ‰Y3+Ï€VÍj#!TMJ™™¤¾™òAU=&…ʼnQJRXœ¯Elm­RXœV±…Åc”6ȆµžBeqXR*‹Ý26rftëK…Êb7­äPY[Ú¯•Ån^:¡|Ø1êMBßpç·@6.kKE “ J£NÌ^BÙ~‘Óq¼Ê),¡'xcxÆ»ëõi ®Ü Þ7°B¯+‘“x’`ñŠ9}®¡Î¨ýÜ +Ñ=7JP¯}]ö>Ê>Ô²v-æCIOBÚ­^²>ëîG™oTcÎá_ me¨S²ð ÉÐ\ô4å[„{ìbw ÜÉ÷~ïÖœ‡ÊÙ_}¤j—Ï`Ù'ŸòÖ§J(¡-M¼¼ÅúÁPpuB3úvà¤ì9—,»œÌuú'N+áøý-« ªûTyXk¹1g,Êwtæpç‘P½9 IÈH nÒX‚/ ä|ßã~5üc¨%2)½>ä½õ]œTðŠ@'$w·MoåOâ°¼>Æ{Ü8ñúø«‰·HGŽ!_»ëÍ£ÜNËkí}¤;)éÚ¸0|­…ô¹ÌÇeBç2^·jaM¯/¡]ç÷¿IŸ¦F-…ÎðHœ^€JBª8ï·ÇZÉ{ü-x‰¯ ªŸã0çÒЫ±4j°EŸýíe_×ö˜JG«Û[*ûm-æ<³ô‘[§$Æz›¨rª­®‡Út­Î}`m Gçê7Üö;•ÜWhBp,¾ïq›š·D•[u°ÆýKh«ÝFÿÕqÛˆŒTWŽï}¿²hÇn+×Gø–O‰f„ÇhÙ;7õþ޶¿†ï=l +ß“¾»yÂ…¯ýæ:¾·œb„ïÑí»yø2ý3*‡ïÑŒíá{4éòø=šÊ2ø¨røíu‹sðý„ä¦á{=²ª€ïQp¾¤Å=zã‰LlÞB­Õ£·„ ªÑ[þ9(÷{ô~B[`ÄC­|þ5}ÅÐ[~¯Åwè=–Ybè=º)–Dø^ë¤d +ß]]C|‹‡è‘¿‡‘F~¥¶1ü[é„À÷s„`ôP +$ M|oŠßÓH8À§F€Oµ„ã>Œô| ¿O|ØÝ–x79èà]ï À»z¬2ü"V|nycøE!ßš%¾eQ&Èq;øÍDÃ#|˜Fôíep;ô–„#zÝ¥è=¶óoDïy3ŠÞ£Û]9Àw_>k¾÷]€Â÷6G#ø=Pr$ø=ÔσÂ÷“﯃À÷øÓ9ẋQ𯉑ïi~®ÅæÚÜ»_sâÐÜ!ô jÝMY÷»›ú¢1ìÞŒPò­«•— vWkŽìÞŽ§»«9ì®è-ì.&*°»À‚w1‰ÑÞ +`¼Ëó®ù¼3J;¼3 + ¼³ÍôÞ#+½³1~zg4EïlÐ;ëï aU +ÞC×¼aàËÀ»*˜ƒwÕÎï +¹(ÞMå 9xKÞõ¼›¶Dx·¨ è3›A´ô,'SB]YjfÚª@±= °ª¿fP½»V»8zÃ6ž¡wSU_†ÞÛ$¢wE–DлÚO@ïúQ´çy5êBÀ徭áw1)‚ßeÑ |øÞr¾ ¤{ ~ˆü.FÜ#ø] ¸@ð»âl&ø½-§=~ïŸrÌLñ{ûüV:5‡ï†»2ï$#ðÝL蘼ïí Fð»A9 x‡R EðWB< ø[ê&÷ÐͲ#ÞL½>àt³iBâˆû[oÛ¦Aø,¸~û6ðÚnó¾ ü„ö\rl?Á1”çèÛÀ-YzÚ=fÔ¬ Ü0ÊFÚÀ Ój¤ ÜŠÝCc¸ÈÄ6pÃi?¡MMmà¶m'cX )ßnBW¬üU +'öŸ/¾y‡¾,?fãb¸m]ÙØ–׃“Ù÷åKƒöŸàJìIXÖÆ}x¯KÚnp¤$` Ý•|BªìËÐQ>%¨#UŸßd <”ëÕx'X‚}PìoȰH'XB¸·ÇN°¼V4Î}+Xˆ1¾,ëëV¦`lË¢í™N˜4äQ¤Ü*4 h+¸šbLhWLï“Vp³ö i7c腌싵‚ÎtÚ +®˜BŒ­àVõv;ÁmO5³Npƒì:éËî¿aüæ:Á²Åáz;ÁòVq–úlUÖÂ,tTÒNDÖ –à¢ÔÄN°¬=xPøN°„Ëd‡ VgÖ£áæUæ¯Ðó[,“ãéhäæÊƒÝïÌWHØ|ö»nÐjOÎ˵.}M/ÇÇ,o‡Ég¿k޵ßNF¹©‹0wxÕüñ9Îо7(áï.“‰;-¸±É?¥"9ºlQp)Z!T#[vª~ïê=Ùh˜AtV‹u› +-<Ù]åj—ÔÃÝPÐ B‰×ámú„º9ì¯_ vØ¥zšyVkÙ¬e×¼ rõ"z0èñÄmK7NEv ÁSÌ]#Ö#5ÑŽLßü17Â#·R¥S†__ ZÌ©’Ÿ³¯ÕU„×]þÒdº|â:Þö ™;g9²Î™MªLgÉ(«=†&ÓÎÚa'¢¥†E ÀN§ìZ“P†?,&ö„Ä×¹-ë*/Ê8qI‹|_(êE†³¡_¤1/q÷Fæqþ½ä—¥Ó¿³t ëæfù@†Ñ +Í’æx,H:Ãò¤ý\ž$\=b>ðü+[ÅçOHÅCX>°˜ì£³|@V&Ùmï̘”Ë\7}>P.KM|>°W Í–„¶¤}> !Wû|`!#ò}¶[5Ó'ë:¥GOä7iz»ˆ ü–{8Èe²è ßäS‚'´èÃ<%Hh‘” a:Ÿ¤É´¾IJðÖcBJðVcBJq™ñ)Á_Ý=*NORl–ä5cN¡Cr‚ü–Ø<¶¿„ä HFþ.™æ^È Òë8s‚ô¢»Ï Ò;Kìs‚d^Õ1'ݺ§&\R°6¤¶K}R°ûˆY–zÇªÏ +äL‡ìdÈ +¦äð¬`¢FE²‚iõéLÔ‹iZ0ÑD#i +IV0ø5òV!L§ CV0Mø3dSÝ‹iV Ç+¬¬}Z°úªàÓy;]›L1-(êíÅÒyáðöi(P8‹i) ¾Ó~íݦ!Ò‚gYUœ%yA2£™¤·ßåó‚B,Í 6 +ðOÊAg¡o0þë’wÅ-y—m*Þ4 +Rñ. §ï²6!­xäá¤â­s˼à]M0¼÷¼9)x7-šò‚wÃ=‚¼›5˜CÁ»ÙÈ)xÃý€Ô»Ûn‡rw{å2b᪙Ûq(wWKìC¹»ª¢/wW%¨²r÷ë*ÊݵbZîÞÖr¤Ü–+wós#ånY¹»è¼+w31"åîòÍä‡Y˜4ߘTå¢ÐŒà‰™b£Ëê+äãS‚'¤ª5Œ¼&›`y Å”`ï’`SÑŒ@þ¬ J^«0,$Èþñ9b£Z6ãÍœãt3neOŸL£Ö’Œ`¾RÓ>#˜Öp§òî’Ò”@fÃ;ÍÆ+”á3xÎÓ„`IBÐMÿ5$º(4!ÀKúh …|à-| ™ÀIÈšND°| [žäÝȵ!غ$è&ùBÚÔ¢?‰4›þÊ0ƒùÀPžH…à¦ìµ2L]ß§SXžLX6‘t`š˜Èæ«Ò #Y’L3ÜéÀ„îK ý"æË£*âèýë&u3-MÒ¤Þ zSý|ÛÒ˘T›gõIÀ÷±Üî8\ óšrô¦SÅÕÀrd—³IÚTÈj‰å~V‘ÐsRùÚ(–Û¶w‰\ÏòMÈdx¿}tÐËh8ËÌç +jÛ*s¸Òó +u +sÚÔÇÆ~~”Ž‹Î:hCH¾›ÚÏÞíf1m*?Ÿðló6+Lß mÐÊõ¥l<ÒÈ®º¹BSÓåy +ÛJh|S¾”ÕÐYP_83ˬ~-L¨ÐÞ×ïûu)>…Å[ß +–>SX?$ *C™{--«_w:r5i„ŠïœAÏGs!m³_DºíšH£·£YÕ&ˆ_30ÛÔ³Ph»R­Gn½*éòºe2-Iõ‚ÄmÂaEü@ÃO9M5Ï‹IK¨6™]“qšfÞÙ³Á#+Ƥš&äãß +³àð‘ˆâ·Tνì×”Ý +–=$°k×®•g/°Ý¶š‡ +Œì¿C7z 7ùüÃN9ü¦Ë×dím S§Ç²”ˆ» +H +¤Ų̈8ôy…À¢ÿ ñý×1Ìúƒ@Ä0 ²ãcžÃAÄ–¦A["‘@İ–,ˆiãt"T?‘ D¿P$cñ3†Þ=Bt!ù䯢_¯cl]r!1Aå%1ÊG ;‡AÄøpêp|™CDWåjÃXD e3pˆø +"†)•ˆZ™æñiì0bª + ¸)SŒ˜»™ bª‚ˆŽ …ˆŽŠJDˆ~£p¢ßØø !:Ü×#@<‘ ú¬…Ä\½òwJ $tÃr-„|È›DIð ºYáóB~ÉQˆ~!]‹a[˜Ä4EÀá@L«f€˜J”c5Éb~=Î5Ë t=EïLiÿå@ÿ5I¨€FIBÅ:"·ãuJèRá +½ ð,¿äíOÊb ¢â^N/êzÀºÃâ +Ç“Ïßzb6K¿{¦saP>÷pªõü6Åg ôd³ô{’㳫œÔµH@§;îDÒz¯¬ó6?Ézd2Q:ø+´µ”ª;Ÿz2uÔeO¦åøì á>å¥-F“¬–z]xâ*ÆË)ä‰! ¬¼\.žêÙL·©öOÙ4‡Ù­Ì‹/æu®®üLïó¬“}eïîÓ_úìsw¡¶'Õžúûká‘]Ç»—¬¼æÙ÷å·À4ùÄÏZð2¸ÌÂÃY—ôºû#ô²YÏž¸õÿÉß}Ó{ê0~ä´£ªwB îõÃj<ðÌt¬ìvåeÍÞu²bRã>(ZíåÉ@¡%IŠòàH.P¬ÎBrz/Éž,RB2°í?i2PÌ,$yIäܽï/É@A7‡$uWKC.âÏšš«³\ ™TÈš^x.ÐtB˜%:¯ÄríU~ɺ®e– tkjä–Ê&sPÀ#;æ}ØßõÁó„þšŽÅd ›n@Hú‡[{pÚP×rš t V‘d [’¦=jž Ȉœº¤‡l ¡C²×-ޤÍDC:P1}GÒ +v¬O«4ÔÂI¹¥fI:P LÒjZ!!ØŠS$!¨êˆÊ3‚úÒ +}FP·ŒGH^‘x’lçr’4\%xBÛä3¦bA6Ÿ,›•nð9Á²“ÒêrÌ –«îïÌW§Ê'B¦4)Ø,’HW\•.BR0QO¡I¼UbN0Þ)xŸŒ g–Èï v¶Ï äí Õâ÷IÁÐ!XžˆÁPU½ŸÈêK’È‚ÝäÀHÓ4Aè;á£Ä¬à -r9Í +žàFNŸŒ¬SáOhYlѬ@‚–…Ä¿ûâU8v†JBçåîA’‚õD-:ø¤@BM‹&1)/IŸÈO²&bR ?%ø¥1)W€r‘O +äÅ!{ôIC0ðˆIÁ¸ak“9l0Jç“1Ì™%óÁ¸Íþ0–®41)‡!ˆ-Ǥ@\xP +ðIÁ¸ÌÍ'ò¯¡à“‚q[UÑ'râNã³qêWçYÁ2üª,)ÖdŸ®21K ä&õQö)ÁH6<ìSY\¸˜Ç”à ÎíëÕçµÈS‚'´åßbJ0´~ÙH?|B ¡þ­c0^¹ ùœÐ#¢!Žß¿NŠ}i’”—vä×xyµù|BP^A ˜ddy$!Ès"A†r ͲM­‡Œ aÆ‹d HE3‚wá…Œ ½Ž&>#½¦ú¥e0¬cF §Óªrl¶¢]ˆ˜,·¯I[+t³„`lõ!–¬\hË@ö0F«BFTQŽgÉj©!#H¦p2‚l#¨$#È: È2‚l7÷c+‘Œ ,n6KŠj¦²„ | pHŠBBPŒSåÁ»šðÉ ÔÏÿ.C‰Ž…:Éþê÷¸FÈê‡âv0ôÚÙɶº4É^•H¬“Ž~ÉÅ%#é@ÑÏÒ–M2¦§H:m9¤%;š$k5»Ó–fé@2ó’$«ã‡t ™dgH’ÉΓt [a1¤ÙƧB:Í`™¤[zšäY«;,#ÈÆ$#ÁóZë]hFP¬2‚bI$#( Ñ‘Œ ¢ÊA2‚jâo$#¨Æ 9AÅ\ É *ºU4'(–·à/Ê(¡Žà¿M Ò ’8LJP“$çBº—£š0ºë¹ÌŸÈîÖž¬ +ùÒIÇ:ü2B–®^Ò!Aãîï”÷`ñ¼ïcI>‘Œ½Ø¿ã iO_¬ÒýÀÆܼ¯sÂh…4kŸkÕ~.­'4!wY`ó·$¸…íqMBMi;"’ö¹$å_ÛfçAìH¾¨ÔÅå&òÅ·Ù¹;1R±E¨a"R‚è¼Ô¡OrÔÒ|­‡ 'T`™¦÷•N¯8âtúI²PÀ<÷„{Y•iK*~¦€?{ÉfH1žÒ>Ohù¹ Ñ!ÚõH¹Vu6¡“.ó¢!¡Mz‰cÀZÖò¬°'´/ÙIQ%™AмÃZxdÅøpséNÚT¬×Ð¥ü›¾ ò]Bø%u쪇!tc YæKÎ<ûy¥[ãdLb mGÏó“%„AºæÊ´QóÙ±'»¨¸©Ÿ'´+ùâcå¹ëøç µ¡1 ûèû•Ûwrl ¾’Ô°wn…9¾±0]Æíþ<¹tÞo?w8VeAz¾ÝeÖ$§Ò–®<¨Ež©/ùÚ„ º„¬ICPBí›îcú°÷ÛXj#èž‘Nqç×@–M+Ùëä€,«Ü"C²l"CÉ2´® ’¸Ô$+¦HV áO ¬BÊž@Y9ÄCÙzä;I ¬ª‚#A2°„8’U $û¾ò§ÐVx£HVq°$«˜j"HVÁ§¤HV^cdÿA²RƒG²ýÂAþH–mü3¬ól/ÉÞ"T@² q`‚dÙdq2TNÒŒùUWiËnÈfl$K¦ò,Yê,‚ŸH†¤ bì5 YÒÖ9C²dÚp'”áíl9¤e“´ÊŠ‘4O(ûÑ5T°Ò”L (++¥PVLÕ#YQS"d¢Y«!dz…Èò«ï,£‚@ ´OdÉÆ«¥WõÁˆ¹Â&Nð ¡o°ókš +qæplÂ\ˆàØ´öÁ± ‘=‚cSýõŽeÌòSË—eeÇž +EË7º¨ Çòœ3âXF?‘Y¾-Œ@–oµŠ%@–oŒËF “GÂX7Y¾èá,_ð*Œ@–/èK{ ûÑßRÿ½dò´‘plíऎM ë|€;Bql¼ ãql˜´kÀ±ñÒ-#Ž s$ hõ1üæC}Ó ŽuóN +8Ö­`pl+ùR6%plþ`=ñ•èuc’$íñ‡cùVDZ[…7Ž¥%ŸDq,AgâhD Ç&_#ŽÉY÷Bv!ËÚ!8¶òÛB ‹òc•Ñ8ŽIzx%ZX”Å•nZX\¯t’Â"–ЮË^~& ǦÒ*9ŽM“£ 8¶-ïŽM9 8&_›ÆÈ÷ «þu~ c}7ºŠu“ :µÉVh›iÜãÁ–v&\tN¹¼õ¥›Ý¹Fv ¨iÿxɯ;„h ©–3Ô§‚4ž¸Xëå +:Ë¢2 ïú÷¹‚Å5ÖþzdÅ>KJf›þ]•I˜#Nà W uso@ðÄ6«äÔSX!ÕH›Ñ·˜L®àÄ»èÖ# Àƒ Ü_—Æ9ue™J(ˆ`˧0Š'Öñö„ÒXŠ7Çî~Ë›§š590?iI^âbŸõààä†4¢; ¼o5ÅèqQ6pÍdž¢í‹l¥ÙÏ‘æ þ#ô§ß®e¨ÌVolÚíU$8 ôëM;²ïø¡¡É,ßðÈ´'Þ=Ô¶=ƒN"}[Äá¾õK^ßþn zá¾ÅÐGŠöMÛ9˜½?¥Ht{¬bpwüƒµ(U,Bšð·“ê™®–GÐ>Èoå3·—#1ö#wiýtZ¹¡aEfÅ™!çÅ]2•Ý}Æ 5‚á¾BèŒ;»+ UÝ852~ô‘Ûkþ¾N +‹|Ƶ½g0½‘ж áì-HRç*ç¿{_ߘõáSbQÎ×`z#Ç‚jéUg®°NÅ|/ퟫõ ŸßÈ¿/ì>­öÊ+wþ‘ňñ±Ì~r3¼÷ÙÈŸ:bîêÔŒDN°»é«cÝ¿4¿cí¯±{~)éþ£Áœ6ÓݓӺ¤¼Õ#c÷°{fÀnQÌÚÖ)»‡ž2¼!ÙÄÀ{@l‡€wኂw× Þûè%àÝ×iü½» +Ø1ôn–Gôn¸DSôÞ¦½›:fðn°ª¥àý:~ðî ðCÀ»#"àÝ_##ÞCç'zÿè ßå°*‡ŽcðêMÌÁ{˜1|@ï‰{Aïi÷>‚Þƒ½·ÚAïiSq½'Ü–Ö'!¹ Ñ¿Ón!ï­Má»ïYù€ÞÝDiz¿YA3‚ÞMóeÞ꾃 xWÆbà]­zÀ»à(|W¨ø®Ö ð]?x;^âJ‚®Ò¾…~)zW¥iQðnÖ! +àébÞùåà-~&j¶лkóˆ¡wôQôîæÐ{¨üCïaÒº½‡Ú0ô_Mó0Ê7Aï£/Ñ“wPÿlí£S­£I|tŠ:¦ô.E¯T½K1màßOY½ŸÈˆ%èý„Ìî7 wÉ–xô~B2¥MÀû‰è3o±Ë…ç¤ïbŠÝ„ðŒÇî²Yy¼ úï¼åS6ŠÝ%éÈcwyëØ»Ë&Gì~B»Aç±û mÄØ]2ü "v—‚¹éÞ²ìpßà]„h¢IÞ¥˜@¼oÙ(öFð–8õà]Š¥ +¼e3¢ÚNrU` |——táñ{从ß[[‚À & €ËÁ‡³àæ;\Î(Žx—“ +ÓÀålXFíÀ×âÓ‘qàZoø]0$Ið» Að[BÐg!¦7¨ÄÙ¦|éÿ ÞþÀ;/à/ün¯H?+›™ÝünflMð{×*€7`e^õ áçqà¹Á+,À(‚Wóe þò„—MÖ%^ nB¼X.¼¬Êðï6àoI1x±©àe!7Eð‚Û+Að—ãK|s¢ ‚WkM¯(°Úù[½<®Ê{©covç=üGWåvkÞÌQ: x³65Að†kAð'42±ËV?Ì›¸m_,íô |Câ3úÈŠæ ù»ÏCâj¿ AðjsèÁ q‚¿¹Aðbî0Á³)4Ï6©M<Ë„0­ž ´ a<›AðŒÙ|‚àÙ +ùóM+ x61«€àùe{Ïë”ü‚à½,‚àÞe^4)àn¢À«•?€WÓÿ&å,àÕÕÀ«ŽCqå]‚WeF2¯_=ætg­'éö¥gþpíZ7lâ,êEÔñJJ:Qˆ:0é=ê«=*Ü­sô ¨o}Ð{<¡mK=ê„LIp ¸ÔïŠxÔ\8‚¨GÍe%æàQsÛ¼uð¨¹!BN=j.³ d[¢AdOp.ù¡Ãà*ˆ©aãÝ@iÈ“8V¤Q I +ÔÆ¡Ó1·möNÕ/„ív ê4uHo@ áÎÔ€@~ʬ¥¤h@pAu€8\Ú`&5ïÄ1©¹—“0ó¨¹1!I$Œ|Ⱥ)<¤×€ÊÃC‚Œ1¨¹íæJ jn] 5â‰AÍebsÄ æÒâ9ñ§¹LI/øÓÈ€sý¢WÓ>˜|ÞŸæ6Ÿ™àOskY—ÂCÃÈ9zÁûþ4¢]©_€à”ž>$U—aø¬GDð!««,©>iM.Ä.˜R€(P%Q6v€(HZ(@«)€(Ø Qlà„„hd(I(¬¡—?"ëà$Ҭ`¶6‡„b6…‡d¼¯€‚oz,ƒš}Îx„øÑEiŽ³Þ ‹’ „,å/ǹz™ Ò·Ë®Þ$Äôß"Ħ[Úg1â ®Æ÷š9[ŸPC'4×óx’ÂS¿ÜÚ-wy½IN'%t£¢%'žû%ŸÐj€É^<Œ´ñÈÈÝ-_ÇG©Êº‚ÐÓ]+M¯Ÿàv¨ö\õ»Z¿ÍŸx·0nUè:{ +ÜN–©œÇá]M”Føµ;T‚4ܳÈÜ¥0£n~™ß/÷`”“37ä¨Ã•ºðH»ÍëˆñIÊÍ€QB§<'ð½—_¹×YÕ½_}ìÛ”òvÖY"­øËeOPÙkX𘠸‹ù{U©½Jä49XÿXBÛÖÀ[zßr/=¾bÞTç§´…®ý¶îR¨;Ûþnþ‘m§ç€ +Z#²± ~UŠ{=hy,.à™xÉ&îPÑ<ŠVx¤ÖŠÚšlò›¬tx2¿‡FöJ[ÿë +ïçÝþ¡¶Ð9Œ‚Gj‰\=–¥žÍ½9»fù¹–®† œúû¥ÏÞ.½’7Žþwø™ŸE”;ÌäÃÿ`º;(»?Èì®f}«ö ìâÛç€w1:üw1Ç|ué»XSð¬gíï}iÿâ,aâÜÖÓÒW %.2Vòìnð]üDÖWàùõ]gZyœÜu¦•´n×Ñ;Wx‰&§‚(Vw4ñä…™ú…©¥ÆÍ,îŸÖãIÍú”¶—®EYå®&Ý·þïš)MHßÉð”Ø ®²•܆‹þúŠlêy¯’PSòãùùô‘Ãî¾£#¶hin LB°|›¡6Û“r¸ä+¸µ,æmµnÅYcˆåÆ×ÂU§CÉTèaÎ ½ouÚ&Lñ|Úé ùH×ûÝÖ#³ê‚´µñ>Ï®e§†)ŠrOÜÚMJ£îÀèÈ…Hê(!Ð'î`Ê¥¿$55x"8d³%¡Í=¢Ür±rß¿„GÞZK­·ã,‘U²sðcuaUBÉmö³º¿"Z”&¡=ü2EXJöš¶k4bÝQZÓ;k“úÉŸ½mYF„àö¡:ÚÓ/Na:Cþ›Sr“N/0âmÒ=}ï1Úv‡ê§„ Q¼ôAÖqÌu9sÙú6©¸ˆünºcíéǧ¼Ž²Þ¸ÎØÊ~l~9›äÃÑ…×%«´îó‚´:V™8[7iù$͉Hä—¹Ý?Ó½efuŽÏm.Z `?eÑ& ;EÕqØ[ý!~ZþÇïóÿýõž §Šçýü£A\\œ&Ä„Q +¹ÙÏ„Ñ éK”à¯>0C$ÿ~X¡Ké¾ì27­²“ kÊV„®Ž+.Î-Ûâ}B—ÎÙFùüya:±-»ÀwA¬2@Ä»ì¤Í˼ªÏ»©.bR'ÌÙýÝøTÎ#EB@ñ(b7`“¾®õÈ^ÆÇ ¤žÇº„ C{Ö§ñÈíXÑjÌ—Ëìx*c‚ÂÒçG¾øÈr{”ä_rJÞq‚ðc;%§äÓÀÑõnݳәnÃ,¾4¶…Ø`ªâðû[ïó¾#!(B\Žå!!”å¯îIq£›?%ÔÁÙ÷¢ïïß³HÜ:ïèŸ_zû÷\=¯€chV¿sÆPyÉ^ŽNß)ôºƒÜ1põϪêß½‚yγt…úÔ¤íl}È’„r¤\M˜¬ ÿ}$¤²§¶0…+eÊ^Äjm7ÙÃÚìò¥9ÙøSÑã,Êi!²õsx*é¼1œ{9ÿˆRyÄç.åH†æ½fþVùÙ'ló6™ÖéÖ¸’Pàóu29Z“ ¢ÓLªµ*?ÓÿÝ6ûº]1LNyè¥_‡¨>¹Ý žËGrŸR˱‡ônÇîÿ÷?úõ_;…Ï{Í?øµKYLŠSîf½¾M—õºA²Œ†2ˆOU*,ÚÝ{ó7&¨ SîøGŽ2†Ù¶Ì†5‹ƒQÁ4ë×â* cËâ,*áSÔÒ/Ç)Ó +6žÕ; ô(¥ÛS$ÇDg±ËpÔ§J´,馳-'xA‡’ëú™ÕÊï  nB=ta'4¨³w÷Ù›uµ®¤lŸý#wåôvUþ¬–Ï®ó)Èm>ÍU,§ùíȲw'_“²lÿûÿÓ ì¾òе5b&A”ÏÃjÜFÌÃê®è²<¬}¿1 «¯û€ÏÃj6嘇U0bV?Êj. « ÿ˜ÏÃ$©iÙÜ­4ì\ƒ5™£G­g=ºîa“Fj¥ÜJ‘®j[oÓ ñiX½¼rz>á‘>)+RQž99/+´åN΂'ÞÐëíìÃÕ ã_}ùÁ½›o…*¶åmÿÖ¦J^ª +œ{hÕkUsÖþrr}e¾¦²)Œ¯ÍWÐË“t§N³Ë$öùËEyCxâtj®zY Ú ëßý"eª$¢œÂ¡ AXzÏãßÓPÓΪ?M%´Ìö¦kòà‘7R´Ûìe¢°)t7š0á÷&„ÖÏÄÔAëév•¾½+O½l&&Ú7ÕËŠVÍÑðŸÐºÈÕÚyÈÂÛŒÈáÓÏz¯™uÉšœ;›,æ¤"Äþ{¯-СλÆdý¨¥81µáÞ;öÖSͩݞxšÌÔû}\¡ŠMw‘CHß«ú—sx¤æ„Õ¿€´ºìòû;Ì­àô/éÉæ lCtÓõ ŸPé«ùßøåÅÜ®¾Žñ>·«Å\^}nW_õñ˜Û â õès; ìæs»¯ öævõ¦ãó·þGƒ[—=¢/ôm"…HŹYÝÅ <ÕûuÅ9ni+¤#Ò ç³E¢»D¬Þ¯Í€ë+Ë’.jTèM¨êöÄ餿Z·5‰€çÙû“jÅ¿‰2+Ý]<öVX§Š$Ngy n[Äá”2WH›x#ôW×"¼ ˜¸çÙŒ’{v_ ¿¬â~Ë„o7Ñ£n¯j¹ž +ÖÕj,O¿to#Fû2½¬J~~»Y—ÿY~÷5¯“²ø¾ç¬šKà R™Æ UT…¢º¶t$º +}ß·S™†ÂÐÓ 3cmÄÛ¨Ô9aÜà«IY¤TÃl‰í¢ên“ ÅäÍš÷ôuÚ†^˜ë«ò«%»ƒ¹kÉCû”žÖ´zTÑ£üî–Æ‹Š0ÙrÌæhRDßE4g<( ‰=;;PɾœèD~n<ÑØ0m÷*´ÉÚuä}'v!Ëäþ"€—^a}úÄÛfo/·òaÞu‹ÿ§WT+7èߘÍॠ«EÌx*æmHª +†ÇKMxd_c4LJ܎¼ÝµÂv´Ï$¥¥¢d—1å\“¥Ý‘iu3–Éfí|e{œ“ÄhT6H1ß¾ÑW¬ï»àÒ1½p>EÈÕT½Å¦th¡6áM(å<Üã¨Ç!ô÷£#LÚëÝÖ8®#ôíˆýmczÑ(0öt´"ÿQ²ÄD÷Ùû˜>¡¾OÜR(;1½}S$ËŒñ +•ð/˜æ÷yƒéY©‚K=Ø÷ÖúnÆì´'cÅzsàÍÚëFÿÌðÈ/z9r£tLg¬žuxMGÅÙ”Ž©ƒJ~ m¶GT[î·ù°¶cÌ<£Oøº[¿MèÑQ„ …KÝÉÁÛüª­à_JaË-Ë­É~é ø¿Ì¯×'å¿@—Ï—äû´À#/Ð%ÊÇÆÁGQË8m!!Ø EŸbù +‚›üïú6Sv%¢þ*ùŸ:ÞÎò·"3³ò+CÂ_ûmFBñî#´šžˆ‹1èo:ƒrˆÊÓihYÌ||Ê=,|»6’¬!Èg]®?Û÷•Õ÷ž7ÓhuŸ¯pÕØ$$ ¥ó‚Ò!’ø ØŽj“tsÙ©[&Ëå÷ÂŒ›ÚüÈ·÷6—“!õø;¯È>ÙjJžP·xÜöð£'ÛVâôt 9m-¸åUT¡ãÆzÙžþ¢ôõ@ÿ-BH}~‘5*õeLñ÷QíU—¡u¿|Ö'žP»Š–4âË:"è-{^Q)Ú˜¡ +®¶,woô®ÝÃÛ^¥›†Gæåñ®e?¯g?³ºZÊåÑåîs§õcͽ|yOh;]ƒ‰Gª†ÙÔ¾)nmÍ\ŽÖ$$k÷õÔÊÀ#¥o¹ Å•tæëG:ÜxŠ4×PnKÁ{&XË\¡É-¯§¸ë_¢Ž ;øhmVCSr‰¯ôÊúÊh¥:ßë2hïüì>eB1î<&ºJtßý6ºå+ÜNòÉo…ÂÎLö)OÊòþ–Fq1_G9¯¢#!pjJhÆÉkM +ç@ÌZ wéëõ´–ì“z(ë,©¬E«A_˜Êa3 šLЂVVãY™SôÔ4*¾{YþÀ?Íg ³üÁÈÑ•¼ÂÆ,ð²q‹‘ŽñÙ¿ë­-HϸžB…ì:ç}Ÿtxùfø;OÑ“ßãÖ¦Q$qËîy1ÙZCþ¤Ÿ{þ¤ay¥8H§ÿ”BZR_²ÐïÜÇ¡—×Ù¤¥®¼ÏÁ•PiÔ²ZBtš;g <Ñv1n:êýw~ dYO.d¯¬^²¼ÍoŽe3ï©¡‰ ïLy¿³U+æ¨Þ…±gá¥qS+0%0Va´Ja¬j§€ÁXÕ~ƒ11Ýíß`¬j‡ÁX5žm€±í¥ÅäôÕ/Pì5*(VÕð’£XU'C±¶»ÅÚzÔk½!(ÖPƒ"0&ãŽ}~Á±fz›aoQ4‚dMßG²U³ÊÉÜÚ’5LÞx$ûÑßrÙ+1$«Ö0 +HVõõ@†'naÖd¢‰Ö²‚v ²ògyÛSÿÇÊ—™ó àýâ`•áµJCv~cUM±8޽ârÇ*DDU»« ƒF$C²·ˆI`Gîø_¬-v E²fÕÛðH-è~A²Ž „ ™bõbL†b!‘¬#K%HÖá@lÛ0P$“õ])I_I…€d(äHVÕ%—!Y…J*A²jªÉ*¼¶’U«j$«&gB û›!Y]ÞnÉ$«ïä^µ?åž +ñpUÿà†"Í>$²fªðǤ_8Ž5£akʶd8öjöƒ DZ®Ç!ñþºyKÁè Ž‰di£06@ë"06 RMaL˜ð +,a£Ëv_=¢Ø‹Œ Ø@Ï– ˜ —^žÈ}¬¿“ź&z źI1‘ûX³›N€±fR'ÆšN5Skv +0ÖðN Œ5Ó$0V—%ƒªjƒ$ÄAç—(Öîa— €b+v#k+d?È!i%¡Ý7K~I°T€ß!X"‘E '«,¡=”øíîèçvÿj$¤Ä§0 "!è ÝÔRwšËO¨a¦»é†‚bñU>;R?ÿµb-7Üþ޳PB*ðìŠ+$Œ?ª²‚ û8ÔÚ§¬Ê¹ïW×Ðyšþê#u¾]àô˜_ŸRªO‘„(¡mô”|Ëvý^9­SÍõ•õí\ÊYóìjϺ$¶§äPo;Ísw¯Õ5µŒŸº0kÁöAF7ðÈo'ººB(}:8Z!«7ºÆÓƒAG÷Ƨ–‘yh¨]ÁkÛ¢“©ÈÝíÔ©ÕúBÇÖGA‡Ïu—Ö¸T˼Ÿ9ÆúâS+Ìåvܵý‘î¤t¤kz``ýÝu*ðJ(ÃV$è}Kpá¾´XÏ!1Y)ë£Äi é9¤îSî‘ýq²–%î~çY! 'Òz+¸äUtŽÞ +Í?¤Cc[BùÖŠi÷Dïõ!Áš“¹÷QôhNñC7Ï–+:Níü”àÎC¡^_Á.Œžüêõ⺖¼Nqñ½yn½QæÓ,]ÖÚ¤u7¸¥ËkdÕà/|®»Ñ‚Sqi­Ø®çÁ‚ÊQö—ˆkJRsâûkƒÀð,@ÙDmšøúcw0-¡-¯Bß÷·žšØ(‚Kp›©8Oûò¿vz³ˆài lEOuÀ3OUGø(„§Š_„ð´; +ÂÜ'(„KðR 5áOHj#„'!%ÞwÄp<òî•ÙÕ?‡P.bxz-I»Ÿ,•`Sè÷.4><„ËoƒŽ.Á™‚?‘Ñ”óïáV>>&õ"‚ËoÒT€Î#¸¼œ®…ØðÈ­ŒÎ|­“»3O}#žšŽ”P— `Ú#¸„úÍ +£ZšiÁŸ`¯¬ÛR×~mEøàÌÐyp`%¡=‘êü ‰XðÔ­Êì\>Q]Pà©ÙÕ6¸ìþ¬³Àåí,#ø੾6¡áp»ÀŒ}` í{hèKPÕWC¸]àÌÄ>°„6"ô%xãJìúÀë‘)1b®|Õ%}` nQ×–Ð § ×^?˜˜¡,Á:¡@ìòë¶“Ù5‚ׯ@Tß^+ÓÖH¨®lë’5‚W®¼B§pà¢÷Þý)©ÿ†~ñDçA$ÔÚàÄÜÜþ¢ú/¤W±¼BzoàõVÑ8w` -M¢Ø ^Ë+ÎË]k–ñ™$ Ì½Ð–Ѐ8CèKPµáC#¸]Âñª¤,‘ÝŸ }` .šÉE/Í»bx=q礼>Èb¼†>ðún÷d¼Üõ‹,þ<éKp{h»>ðÚù £¸>ð:g¶Ð‹ï¯ísÔç©W²§ë¿§!i¯`ꌗ»B«¥ÁkI"ŽÉÑ|UŠcr,äAqì+ìüÇ’\ÇÒ«Gãq,¡4Bp,-aÕ/8&/•s׎J™s×"±lC$ÆŠ >‘°eŒh®«vg 0V +A`L4a‡áa¬Ø /ÀØöµ¥0VÌH3ÀØs×7‡±¬ÔtcY[O ƲÕŒ%`…±d}Æ’ùéòä0–Ì@;ÀXR"ƒ±ô:7EÃ5‚aUÖêíOI`,¿&›ƲŽ2Ã0DZ¢<†c¯jÀ±5ƒÁQ µV†c¼=‚c¯“ Á± +/ ‚c PÈ„ƒP8/W‚æ%í·±Ü:nÆË]\UEŠd ”W‚dwÉ6…ž"Ùë%l{P$Û%fŠde­ŠdÅzÉ@%çH–1=@,›DB@²üU’]Oçô®ÒF[úØù5£é5´&Œ¦w#Âhj›ºÀÒRoBhz~öÜi;T83פíP10š*ÔFMÙ!a4ÕgskÉ40šDa|i‡ŠѺ;FÓ»$£©,ñ ^MÏ»þ9K1éÛ@i* å²rªï‹SšŠ9SJSk‰Rš>òbOiÚÍ^Bi’[þÒ•ìRÿ»@iªæâJXRkºSšd¥dÚ•õ%Ô FiRçò/”¦åO¢w3­ö@ijü£@iê6ñxKÝî“!ô,žtAÛÍUa”¦n²ñÒÔµhÇ)M];ÿŒÒÔUüˆQš„×—¾tDåÀ,R 45\‰ ¥©!¯§”¦†Š¡4Uý(ŒÒTÕ=2ÔTt]¶{ÐŽèr0»iGT,ä +æY"§©"Ý&œ¦ª]uÆiÚ®t”ÓTqÞNÓ¶ž#œ¦†Šå4m’ á45§©™ëá45”G §©o §©›ÈyãÝ4´§i‹pNS7'¤¦acBj’‹N¢ÑE®lßHMÝìds©ãt&¡o˜ûëËh±IrÝžà¼Bµ@¾þ\]×Ö#"~À+ùBíÚ鸿÷¼à¼=Pƒ°×ð\~ÀšsjOÔùKhK.?` vÜ+°„´oDyÛÕÁg;üÚ|ø`,!]èÁVe}7p<ƒ!°¦¿W'†Àò3o#áé¯;E€Wx=ª¤5NÍióµÑ5È} |k‹î2÷λ8GàõÝÀ"ŽÀëRP1y:KhO 8-jý-õ +Ál­ÜóNGàuáéj®ì×:Áe.8ËrÐiÖà,¡ªrKþ„º:ü²‰!°•£ Û5pnc@ é@q^A0ß>Õ +A6Ñ9¯xïgf¶?åÍã%žó–H¯/¯rhßÍÙ(Ê Ð”à¬{X½C‚X´Þoµ(æ4×m´ËêkCû¤!žñ+x?2]Q ‹2[·ÂØ&¹æU3¦ ·¹‚ö& ñ#ý× À1¢ƒ8`DC=ƒ`Äžþ£>È=å@0¢ÛÍ‹`D·‚xÀŒ@0Œ¦”K0bè$>ˆcãUíˆ1ÀE#1 uM¢k.ʇ„z±R€h&1E¢éØ)ˆfͧMë ¾ˆf‚| ºÚ€&'sŒ_Í€ÒšÇù)Sþ‚ÝîkÆ”< ØÓSx˜%ð0Uu›áÃľ§ø€¹†Ó ÃãÃ}!maøp_KΔჄó;âƒ<2«`Á‡i–¹a MÎB<_¸æú!&&¥ B äk!°ƒ)@ ãó€¾|ا Ň®39 °(>ô¯‡¹&œ«ÁO@ IDCü8ÿu!0«3­æ×ÇÒ5o$”´iè‘ãN:ä•!½C¸+'«:o UÐLÃÕ/Á1C.œõ”Ô”àVp +øíÖ&w00Y»òÎP´»× ´ôÇçyaÉCÜIº«ÜJ—“5Þœ‚Ÿì©]#<*VhS «;œîË&›zX’÷eSã´sX¡ … _(»psšÑ_M‚ÛðÀ7˜žÐv>*þ(¹AEó6–û§š¿:Ñïõr:(xí:WW‚¶Ù%â˧J§KVÃçO¶V:d÷á]¯«‹Áóz­æ`ñãüʬݗßi>|Ö#~ô‰5o%NWRAëŸU߆UÐý\ÁÌù˜Ëºþkh‰„ðÂbÑ iÿIÈDéB)YµÙ¼´'~J¥ýÜ+íyWƒþ&P$êÕUT3‚+J‰®à­JœÙ¿ð íUß­Ó^pû>,'°†Zoé +—P‚äÓ¾•»&yd•$¬ô-ËÛä /_¹ºA¾ѵX‚[¦zøúÚÛLpZ!4zèX˧ÔCÊÙG­c´)F;mèõ“(%ü—¯&³†ð-Q9Ð×b_™ÍqB%GïÞPk½TÛûXzB#ªJ¡wù¹¬.Ôä‚“ {ÂÌo9ˆPŽªº9ånYè×¥j>¹þÈU¶îÜÅ8—ç¦!60±·ÎżÀW¨ÐjäwÿuBPÍãœdUw’\ÅHFPL–Ÿdå¹Ìè­0dÂØP±‰ôñhFMI#d¨ƒ¦yš¼ /äùö9A†ä$Í „§]iJPé&)A²Z I Úx$%Ø„$%H¸(Ó” aW‘” irE2‚çè] Í2ú½$#ÈïP¼Ï +&øhFPTeE%%XFPÖU€'EÐYBfKªÎ¾òŒ êbfAÅ "o)mV"„–ÎÕØ¥†¨‚ø +©Ë9ÍÔƒfíCà/èel)s’T0¨HFP-• Áó[&¥“ŒàyY‡6CFPtﳌª<#(62‚¦É2:`>#@¨Cì$#À˜I²5!IBQp$ Áf’„ ›È%I²Íz†Œ C¦šdï”7I Š …” ˜'tH Šu‚HJP`œLR‚ºØQÿŸµwÙµ%×­¿ ÿ!ÛN"ô–š…}š«S »àöŒjxªuû÷|H!‘#fú,TöÆ׌PèÁAQƒ$4 ÊÊ=L‚¢±ãÀ$(ÂG&AQÆ>4 ï³3 ª:U€I0i^Ð&˜q¬ø‹Vì†"Œá?¾¼„œ‡ƒ//uüx£€D¥B3‰‚ˆ¼Qp Wú?cÜ">«!£`p¹ £`,/²3 +†–{FÁ›‹ /Fµ³úJ8éìÙ/ö@_Q™Î è+¥Š3ºF!Aƒ é 0nѬçó]ï ‚™]sM‹ ë3´ºF—‹`¨;XCë@‹`hñoÐÒÊšýÈX´$g%gÐPÆŒ ѽž’ Æ$ˆ×–§Öš1l@L,[) +¾ ˤñ& — â~'ÅÙ°¨½q}I˜ôÖÀ˜üÈÚ‘I@á; +dD©(ŽL“,™­I@c©”joШËÈš4­j;Z“àÍÞ$ˆ—&¦&Á/2 †:í “`Ìì…Î"z &ÁÐ2’Ð$Zv˜ce1s&ÁÐ4rÐ$˳èL‚¡÷¤À$÷Joo^‚¡‡CoÐ(_R:ך´Uµò—7 hV³DÓ[“ ^‹$lM‚ÖÑÜ›Q+ +“ †•†Þš1Hù;dÄéÁñ‰Ôþ°‰ÆÛ½íÈ"âï0ô€ÿØ"˜óÐ"ˆ÷ÈZqÝ+;‹ jShD5ó€E0«U@Ü ÉEâ§[‹€V½4ÆQªx«`[xÖ*ˆ×“ÄX47ZƒÅ[¤¡ØÐðVAÔšTÈ*\XùÅ*‹嬂¡u¬U0Ô–@Vu…·•· +h÷ +ýôm­¼ÜÐXª?ÕZ4;Z|ÍZ¼á„iê­J1"¼9ˆqÝUp/Ë"…O€U¥ª² +(TRÙ¾Ö*ˆOÎ_gÄåzpFAzxUÁÓŠñFÆÚãßÍ8V$‚ܯ_òH¾*BFAÚ¢f]R®iC£@BDIëØ™QR&9“@GRèdÀ$ˆ²õ‘I•*Mªš×Ὡe[“€¦÷ô&A ë¾Áéʰ¢«­MÃÊÿàm‚–+ßÚôHpkH#ǽM@¨“°M…¨l‰Tð&A «¢3 ¢¸wI ¡ÉØ$ˆ«Ò¦3 ¢TT@&AZé€I”GL‚´ú;“ éí2´ Òb9› =e­MôÆ +Úi.ø£ÒJ Cø“ýkȲ XØ +rPšj©_í¸f,R–„ãšqzk¥}®™¤Ñ¯ˆkÆIɉJЏfœ{\­QÃ5ã¬ÞZµÍpÍH44ç¡¥šÝëpUà6\3ÍMeØf$âèKÄ6#áä‹¶õ¤j‘+[©>ý¾€m&ùÅ+b›ñ(+ÚŸOž.ˆm&ÂØf,ÒœÀƾbQ‹/5©¨BEB™p¥¶[–«Ç6ã¬ë±Íh¼ÄÉìØf<”¥`¶™¬“†ØfœO^¢†m&«d`¶/†:ÛŒDCóN:¶Ù¥4YÈ6»ôB°Í.­› ØÈ×Z]€|M‚°##_OšNKF¾ô~ɒ;剜Ó‘Í®•×Û(Q’™âÈ‘ÍHXgˆ_0™í‡Þƒ9²ÏN•ªÖŽmÆ“ªä$[✖B•`b+oô•ßÏÑÍxé)ÍÐÍÖªôt3^Êê~‰ôÛ*qîÒåS,-ª‡öA£ÿ"d`„è+Û’Cˆ®‰·B )ÉBÓs#„šQ ÄÐ ÈF¾Ý̱‘¯UºÓ±‘/ 4Älä°rý8:rÐ@o@Hº…!!ùz¢ ,!ùR{ ’/Ƀ€!b,›ƒˆ±ª5:ˆè˵ bK7o!¢/Ç©ƒˆÎ1È!†~@ˆÁ%@Ü_6aÅÄÐ4~!†°úù’Ä«˜¬gzÄG¾äÉjºcBrкր|ÚJÁsuçCˆˆz¿ ".ôp¡i#0DÄEvÕô%àB•T–„"¢²W9¬ì;€4àð‘ç)ð‘i‹Ë’¯U"Ä’¯•òÍ1’§¦±ñ-˒ïDè²D1^õ¹˜òxƒÈ?zÕè?Xyʘ€€•¾ŽÈS¨qA¸ZÑ8 ˆ^ô4vDÌ~Ë%¸âˆÁÅûßÃÀ„ö™ ØÍ¶šk´JŽ4','9A ½âÒ;ÛÆÛõÜ8$¬3²/¡’}…äOŽÅH¤ÙaÏø–GÆ,—žÃ^z^z²%QˆæmJö=ˆ®ÜªÜ‰^å¼ãžþ(ÞpGˆ­$m±ÔÓGé>¢‰ÏŸÞÛj²èD¡}Ëíñ­ð®çÓô‘3°—ÌÜm)3í8éå~6iâ“EøÖS2™¼«™XÙ„¨ˆ™‚#+§öF +1´»Û+xˆ‚†¸G^+ú8Ýzm×½4qš@«ÚTת1x®.}dLºAL’&)o‰4Bz.S}dP6à('þ‘¨Ìì.á2”Ò'xî±ÌÊzL‹fz°l|ÌÆC^_Ò'Gò}dÖ¬”.+ÌX.+ÌX#Ò5#ˆùè/a$”åÿ@ûÞÿüÛ«NAxªtE°£Òo•)-Ùú“ÞhsUBñî½°YôáéÒ²Œ‰u¨ôt­Ä +Öÿy‹„öÐÀ³VIsFA«ä'±žß±heMóCý¦T½ô:]’}%»+·¸Ç-š1EériûÊVM$éú¢œLÏïX´Êˆ†ý·¼ËÍ‚[{sÀᡈ(k¿˜èg.#)-r™×±HrŒ_Îp¬Ê¶zgº_s Iìþ­IÏ¡T/HæX,ËRWèâöŽ„õÛ´o²w4ê»(î+3kò™±ûrW’oïèåÐ^^|zôrhp,I´>øàBw‘öúfŒF9çãl‡åù nsìÜjOîhî?2 ”¥RQ‰x³O\Ò<¶tëˆ3éb&gÀa7‰Y¡å#œ}Ñ=àRL¦ç’éFÀC3è%$õ rÊŸÿ”®>—^;¶þ–ÁÎZž'_éLß•´ICk.ºf¿¸Ìe¥.ÜÞ•˜f§åfPF÷'ÉÈp) c{Ò:Ûû¤¶(úÙ´±-/iô·^mÕ^¸ÊivÇ¾Ž T Ú|xÌrÇVƒ»¢êêh.[í¼ ‡{Ø€æárÙwÍó$JÄìtá}4çFaŒÔºÇ!eîX­§Ñc²ÛRΫöËy=¤vó0ÆHó²^æ*óaFÐQþØ oË’Vî¿ýûßÙaÿ|ĉ§ti/‹0jjgG’6”ª±è\¡A!X¥JÇ&fF^>\IO/žvrHI”`,W^BÎÞwI4Û*.næ’dUD€êÍÆšÏ È3+›ØÕ'ísf^¢¼óåÙî§h þç3í0mp-Rwƒ ˆ•×l6A5éŒ1}ññt#ÑàvàÃÿ5T5ˆ;¯×J0$ÙøÂÁž>Ÿy»mÖ9ëí¨zû4^Uúi˜c¥4Ì¡±=>9Y™š‹Çæ#O׊G9ó‘‹ 6ý:ÈU™M>z‹r•`-^êùð Ér{E ÉSKý„’§°Ò-Ø„ä)rÞG†xC·JQ*O$”œ~§¦uh¥¨¾Ÿœ:¢\p—Z8ñùÈÉîbæÛ|ä4ZU‚á}>òt­„BöhM³“”Woò‘Ó„79Ãø|äñ©µló‘³›EÂ%és,îà™ü[×leo󑓨èþ°´Â1µ `#Ž×MLß­`DÁѦ#O—D¨„ ‘4Útäéz.4íO«ù’+M›Žü Ó§#OqE¾ú„ä¼dEhIt)й’§¸’yø„ä)é}ºOHž’ºY|Bò”ÔÏ’§¤G3Ÿ–˜D`’Ó#Ù«Ž’§´ø6!9}þÎ&$O36º¾ ±¬r}a’Óæ/’‡È*{Úá™è’ÓWUjéÔ´Ô±nXK!¢„ä$,âã·®çt=U7Œë™ÖåK5FÑΊÖ¿Lª¡¢Û½ÈóS(£=Þ²™’ºW'¥…²[Ä ž”ÅéKkФj†ƒ²¨wcÊâÊ ,®ºeÊ“Z ”%¡`(K3a‡C²¬eO’QÄòxC²¼Â‰’¥uþpHFy]úx²¤lKeI/ ”Eñ’ñryèŒôˆÆc[ Ëjñ(»EÓóP–Õù Œu]‚®Å¬Ij’ñeø-’eÍ“ŒFKIÉò$´$Z^ ÙÐ4¨Ɇ\ #$+ÒÙ!™®JŒdc¥/sH64‹(@2 +x t¦N®´m­†”2¢¬\EdùZåu-eåF #é dŒRº©©7èZÔ dùIÏk,Gõt:×UšÖ‡N“°KâwKÎ%Qm(r:Ϻ•¨”}€žÜª+” γ^= +¾…Ìì¡Óy:Þ|è4oáöLK“š`)§œWŠ9=Õ *åD ¯£¸éµ$“ã$ÑKœ—kbۃÛ.ÿ18ä•ü€C^qß²ÖœwÐ0ï< 4Ì¢®ŠæQÐPÔÓ±¡®´òœKÕue{àÐV¤¢‡¦5Â8´‡®äÑ¡ªã C}èç~ÓÏÜ t× t "’ ‚Cþk’”4d¹kCØ—ËÊaC^Dq€ Eû°¡ˆ—aCyÉ‹¬œuÙ6h̆*ñ3ª26T¹kFØÐ8â4’aC[û6h&„†¾*b9hè 56t1X 4p´ +̼D?ëríê°²†*'ÁcÃŒòØÐ5ÿ:À†¶Šlhr;  ¡© ¡­tlê +ówØ0± `ÃT3ª :”­ôA‡òªËźh^Ø 8ÊÿU›ÿø2§¬tGà2§¬B;èRÿ‚G‡ô|˜Çº„Ӛźº+ÁŸØÂ <ðT†Žà€ÒË-<°¿ìÊ(öM x™&ž^àÖ°fÇ7è@¥|\‹4Hœ1¡üÕ8Ð!Xt ÙN8éËôjÞîmÍÈžHô ‘ÊF03—$e,<ЗMеSj©®Šåh%„Z<ÐH&Étëáo¨/¬_„Z$UøXÓ´¨4G’…‡¤)s<¤'VÕÂǛ׎àAo° <¤±Œyr;‹ÚÂCš9&QÖ%ú{MÌà–P_Åf,<¤.H©©¦¡ÅvlK|¨ÅÞÁáÈá4Äž·ø@Mêµ±ø°ô Â*xX|˜«àÝèIÜ‘T H!ES +CVç?Ƈ¶J¬|h:sš’Z@´U~DÓ‹­Ü1Btå.C„è‹é¢¯#‡c%1Ö•¾Cˆ¡þ\€C÷0Dˆ'NÝA'”"úªa ¢ @D[q%"š\ÜaŒhJ±Ñ Ùa„&’Ä¡õ•F´upÑ_ʯêwsÄ<Â)GÑ%cD×ñ#´Bº&xñ.Ñbà|àq­ {îq­lâàA1 ’†Õ!®î¡—Cø –UïΔê!cÿÒ¥î1ô ]óØ3Ä¥·à q­+vp†¸ÔC@b¨Á@b¬:¤$ÆÊ~ã@‚PN/ ,HLURóñÚã;}•¸p Ñ_5ºè=ÍÐå É!‹°Nÿ±©.¯?ð1Õu°¹ùÈC©2›œqšCÌ'çããŸd]‚NÁF›œ¡oîD5Ø@n>:´kmo››æ#Fœ›æ ¥æ[sŸšDµáÌ|·l• +±Nš¾2[ÙÌ|¹/ö>¸¹¼›Pj¾<‰|>5_¦ä&â˜^¦!§š/Ï4>5_yòÉù¼]·0kq=›š¯<õklj¾[4/ç|j¾2+²ø G¢¬ÕíMj>iH™ß‹åz­Å[®uÑæô¾Š]Cèɧ棉SšŒMÍGËdj.—š…ÂüwTŒ®ER:¥æã%+~]›šDš\Ú¦æ£Ý1ÄàSóå¾ìJ›š/÷E²©ùÈñ–²ÞþÚÔ|´ù•|ênÛò©¸Ûß¶âTÀôõ‹j'‰7ø%tòUWþTùòzE$÷ß"œÅÝl:˜r üeŸ†–r’C¶OC[•îÑA:˜r­²ëŽà4„®ÓÁÐ&(#¢t0¤kºVr·<Ý0Lžå|:˜µw|:R–-œ&K~i fí*Ÿ †¶€òj}6Úz¥l³Áä¾ÊÅÙl0„:œ‚eƒÉý ·SÐ4¦Ïgƒ¡[¡¥ l2˜¬yù²OCË\KØd0tÿ’.PwAÝ©l¨fŸ$ƒD &ê^W:N¤&A|©•¬æìsÁ°Æˆ ˜_ŸÈ)‰©?T+“Ü„Dº«|.R^óÛä‚É}‘l2Ò†UXd> -rdfŸ †–Ð¥¥“L6iåŸ †–l}e³Á°®§—ÍC{à’Ÿ &KÝ0” &•êϦƒ!dÈQÔ§ƒ!Å —:Žù8–f³é`È:©œ¿E³iðªÍSf=H¿ºØ’h/ܺiK€…^f2+Ÿ æU£ÿ"N)ü[eEléûãeN"µ?B;½#…#­#˜•¶ +ñæt+*UƒÅÅîßUI©«ŽQo{7ø‘•ÝÖgd°û–H¾AŸ4´™jb¥¹y «¦À¦²2ûª+e^H ã!¸%’ZšjëîÀñ-OŒ’4Ôfê,Eý³&û¦)z¹Jå#{)?1¯T£t„}¦MDÊÔ³¼ÀÂÀt^?׿ä’ȶÆXÎêø¤Œa'Q÷õú:vË?¦Á’Ÿ}q»'Ö'ü8¾é\wMHc™¥=ªb\é˜ì&é²Íî©+rf;Ï+"‚ÙÀDÔê 8”&Ì}¤ú*DœÚëŠþ\_˜Ô‘¥¯hËÔÌí+Å{­¨+ +ÝJ“ê4ïthäÒ”JEå(l¦QèYy9ž§šÍ"v…½œOꌸ?qCg|æÍµ¹„i¥¨oÊIýK½¥Ùæ”,U3‚v¡›ŽÌœŒÃ8Ÿî¥¬ù¦½s¶ÌÐaÊé<oÐ-’ë~)ï}l²‚PÚš™5ue<%r¼Ù“ ˜ìÛæ-D7Úú[·ó2IuÅi†dÓoÏ>]ÒV’Rl2jÚ±7qš»åªÜ¾œ©}emÍ:~¶û P±¾MZ­èg µ2yö˜¯O¼õ“ÜÌT³îúº…pÖ?\¾”§ +“;Ë?é­è%sÿÏ`»æ—˜Îß"ìZ Äâ6‰fqóÕ$RH÷È} Å/å‘û¥VpßÉ„€»&=Oyä®i»·?‘»&BFÈ} ¥à¯Gî:ÃZi¨\âñ%N@wÕ,5ºé‘Qn•Y&z“pò– R‘HO‹½kYE}=zW¢É‰!aÑ›>`Rš zW5× zÓö× º½izªÑ,z×¼â3½>¿…ô‰½k^–£“¤záwMZúÁã7­KMŠcñûÍlà$dóN"¥Y'óŸ€S/Éiœ¾®Kån àU)È¿ió¤>~WÊ€!7 ¿k^ë¿i‡Ô4~ß EAx¯O60á¿Ë"8oq=[¯eå§óNÛ@oÍ €×E +sHVeƒCü¦­“ Œ"¥ÏÖl:Nô†·?ðH‰î_2%°ªmbœHà­ÀÏ~êö+U‚ðȪ"x\åz‚-ï«Ú+õ©ð$  àd{iòS àIØdÀÓ†¶ÀÓòz:”~ò 9‘d½Âø—ïÏBU^^ßY\]¾“”Gð$» ‚ï´Xç¾£ÚI¾ãJÒïà;*fBø&36ußQº‚à;,Ž;€oJj¢kÙÂ÷–ÒÄÂw‹ ß}ªÀ^ÔWèe½(zYi3œý *ƒ÷%A¯J ]ºÐŸÐ7àB¿ñFŽÙ΃^5ÿ@²ªgèA¯z«ÜäE3a¼ý1€‡uPH¨Ìµ`ò‘() ÐD6” ±“Äñ v™‡…î¶Ê`‚œ¶[U'!Fö#«rªÖÅ #äærm•ÕNFh¹žõ:,Ú³K·ÞÇ1ßÄÓêâ–L )RÍ‘žžŽ1Ñ=[UxZz\.6üv¬K°æƒ.ÇòÙß°iÙdâüé>= ñI²¦…sßCÄ Ä&7 ñJ Ó}è©eÂ÷K ü†X´†;§ºÎõ5k…\Dƒ4Œ«$•X6–´÷d” +T·åñí ÁßµªÔGršFpcê…U¶ä¤Ä°¨/?ù®N¾Å +êÏ/—шQü‡Á£¦ÒB$.f üñõTO[A1èÓÔèu›‹)Õ·’·gî’“¦¥O”œRþ`Ð*Îx›fØìE‘IàøV4Q¼Ž£Vh<X‰*’ˆ˜J½ž‹²I +IöÂÁ®]ÃNNOc$Fh—‚E' Lz³†š;eIµº­Ek•Gò4_b’²»˜,tƒ3} ¯%Mo›I]7&j EÇ–¡$=Ê™œn£À„•Ç}úe<,Ê€ÍF*]YDã:kÃÒFÊRs•9iV£xÞóÚúºôȱ¢îVÙ@«KÕ—%¾…\ƉÀÅžèvP’—# ‹f†ûTm±Ïò8“m0N‰ët~Ž—ˆ {}î”-…%´%>@øm‚´b€MÄb&°@&Á-Ò»`¬\/Î" ï§Äá8‹@•¶f†C`DÍÈ ,‚ ¶42¶eg V]J*1)® ›Û…üyØ íT½­AP4})²Ê¥§oo°…ízbTåäìÞÀR4ÔÚ%¨måíR½Yªx{€†2ôí(¼dD½ë…ö@”<ÈHÌ:DæÀ½&§×Ý›÷¸6ÒKr1O›Y32²ÞVðÎ+0˜zVÿkWÅö@~(¾ÞÐŒíȸE¡thdQ…Ø È‹ží ‚¼ 9gÜc™¤œ7°’æMAZ¿Î"H«4°Òº(r•}KÐ ˆzxµkšhÜiʸŠã:{ .÷°¢Ð‘=0Ó0{ ®¬•Àˆ‹àì¨HÀxAÀ ' ðœ=ôìì´Âé€A4}0’ªƒ /’0²ÒŒ€A—sÚZh=ÌYÓtƒ s^ ‚Éx°Ÿ$ü‹0€ÿØ"ŒÛ/ÁÐ;i` ¾HEÁx2Í9ƒ ¯+|gtÍæÙ‘3³4°”sŒ,‚¦éÎEÐVŽq`4MÄ L‚&f°(b@ i`´uƒï,‚:¹·Î ¨z]-J{A‰²á­E iu°E09´À"¨šoX÷§ ½Mo!AÐVXŒ3h^̾ +~;s  óÙcqÁ=0–ŸÛÙ㯈ãÉÄã­±ÓYƒ¢!?¾^ÓšñÆ@Õ\óøg‰Š/¢þvaPŸ°Ö`ŠÇ1@ÑúÛÀ+hÌO£3†\Âcc@±‘104Ôc±41Ð5 0ºæ-Ö@Wgt4 Dæ@[i)œ9ÐÄŒÃæ@ÓgD½©‚,À0íÇô +«"ý¸LÔýÏ¿½[C¯6]v­þ[…z—e×_ }F@iVÌûضelû%ŒŠ‚Ñä)©}±iìª]Ì dRª3²¹Ükµ+³•iœ–Amú¶òÊÆ«\‹ñXÒMóDÑY¼œöK[eUÒåH¯M„d/õdH¤ylÒšZ׺=(²Æ¬Ëç’b9’Ý¢^ÕÎ-ñ¤§S,ºf—:ò{é#§Qê˜ÓuQT{=³íÕºbÃåhÎEÊ[ƒ€ +¥‘ýe5~Y\ˆè£ˆ¦EÄ£ ßPnXw‰6k^A @s¨3Ÿ )“׌㗚d´lþ¼²›_ „Í3g¨;aN:©à.°#‹„R!&[j‚¢4W]ys¸ÎLo¤~듼ªs#á‹—ËuC¡HõÒ#Æ„¯+‰ÀÉñú5W8'nãáÊ*ê„ÒÁ´3;d}’ç,›­S9¡'[/õ¬TF[§OðdÉ4è’§Þ·Uã%”b÷·tòâ¡£“M"˜xH¢ï5Ië‘-ëµWÒ4Q)ç#…eírÉÊ©N]dD_¼‡]çOzdRÃÇÄ aš’ïü.u–«œñÀünºôlJ$ÒèUÖ¹+ÖWe˜”/$J´Iµ^a‡ð,üùOùúÇhÚ3˜ýá¥!ÀùJgJ[•)†©XF«%È]åiìê*Ë“ód§­(h¤¬ÓÙpõÝHõ]Z[Ð$e]îf“6°ÖUå)z³©®ð®«œÉ k]¡kÝ$ãí%©kp6Î-ìYÒDšÚcu¦|kÞ¬ ?ópÑ2M ÖK&³‰ÄoÐ\²Z†Hž?ÎñsËjÌ^É>r&œ &«#íÊ™¥fXSä©ûP/c +?kÊ{|¼ìmYÒÊý·ÿ;c쟯†X×üÐEs÷ç’ë[·³öYÛ–í¤žÎÚ¨GÙÎoybWnÍjGv˜æmu‘€CË…¡²·0 Ãæ®ªã¯‰óæíZÀë‹vÞB¡„øªíZÕmÕÎv=Ur'˜~Çŵ}ÕÎvi_µ“:»V:´%øÚµ®IìÁhèyÄí¤±bBE;IƒSNTP´“æ&ׄŠvÒtwA'_´³>IzlÑN6Ÿ» ²Ûë˧píÔÄE…²¯ÚI¢š±»¡‹9‚Ý]jÉ"÷Æýá/¥©ëØ<¶jgeC +Æb9eº„d"êBàðE;i1‡«v¶keͶU;iuq–Ý®U4¢X»Vn:ÂnG(F Oã]-ŒñÎÓì —8kÐáØ,p,®[?€cqY–Ç¢^&‹jCA‹Ë½ïuÐÌkq¬‘òW.·Ã1Ò]¹A£Ù¡ˆD€c4áWyÁ1Z(M|ÇØ”#¤Å±¹,ŽíÛà‰:Ʊ¦‰ÇHhr Vôá/…©[xJ9#áŠ<¬…E"°@FÓ£Ð茵ï Q2­Òg,J™M d÷šÍ’ÑY’ó1²ü lÒÈ’%‰1@H–´ +D²Ú ,­ò»É’VjH–$‡,B²$YÆí©½ö'~ëP*ÅÉYÔTBÈ¢*R dúÈ ªÔ­…ŠŒb¼^ŒØLØf¬M®±G2)x$#í¬)d,^Ѿrí_‘çÇPFž”-ï·cÁH×¶C²8OjÈž¸d| \{€:C± +YZWØÈÒbq¸Gf5v eµ@ÍbðȈ»,®dYìT€cYŠñÛÂ|ýŠÌË3æp,-ŽœÃ1­ÛŽq,iF€c3„ àXT€8ÏÌᘚÇ¢*Ä1ÝÝÇn‘ž«Ž‘U?À¹j.å‚×Íôác@©µ<9tÇ’–8–Ö½·Ã±¤éù!ŽiÎ2„cYÜÃÆ²dXÁ0–E"£Ltâ +t0Vn¾Ò Œi*ceeÓw0V´T„±Â)Š•U'Ø¡XÑÓD±2oOˆ•çÚ΢Ø="9—ãX^Ô‡bYì<„byeÚDZÀ¯~MÎÃWWÀ/zbxñ'Ml¬ä)Àž«`ýÉ¢å¬+qX—kQ`³°¾R‘:krŸ€L$°¦ÑCÀÚº9tÖ¤Œ0âè!o£|¸æO¢VC{°¾më¢ì€õ§0‚°±ß˜QAFëK3éx£5ÛµV«YDýR—ƒG°[ÔG~ñ(öIØñÖépÚ K±½¯BÖƒ˜HÂú–Í@=2¤—bË~µÖéb A—bŸ¾„aý’ÄvÃ:'¼.Å~½À×Xåá~ ø5u!į¾²h9üê+k¹Ã¯¾ô?°¾Ê™:”šÅkè o~ `c‹€ h6ôÈ£aß#£ù úiGqÍEb´@¸vB1ÚSr÷eA¬«K X§ì ãÅØÃb÷9#C?Bwâ-š€±¨ô|cQ˼yë[ÂD·(igÁ* c´GÙ#ía¬Ï*1ƺRÇŒÑì(ÅÂÂM8c„±±*v;SKÁØØBgŒéG064ó€1"Í½ÂØX%©,VчãB³4Z+ZÉ¢X—qB(F¢œá1¬ë +D±©yŠõ & B±¸*ª‹¢ŠEõ7‹rA‡Q,­²ÃÅ’Š%Í‹Q,É)¡˜æDE(–$—1Í—Š@L㚆M¿?İ(í†E1ó†U£Èhƒ«"µ@ÖÕ“ €¬_«Þ5Ð×*¥dŒDAò9[ ë³ö.2ÒÍã’b(8çw~ +d¬ _²sÐîЯ6Ȧ?tg[pœ Bƒ•|Áqž8Ify "|ÁqZ$\B¿…R»ÖïÓµï Ž÷$u§P½ñžV@Œ­7~‹ä÷¬Gd”ޝ?)ömµñžtEújã]ãâ3ª6ÎûFü‚¶Üø=Æ|Á˜}¹q²P5`Ò×’íšC$ûrã]Óg_nœD㥠-…—*7Þ‹²|¹ñ[ôT`: зHnP¹qD‚ìå)¨bŠ“Hó@žTggí5»‚²^ˆûbã4"³ZŒ+6~ ™Ì“|±ñ®þ6_kœ7pÑ: ¶ø4Í©V¶µÆ ƒåªÆ–_JÆ–×59 öÚRãsM&_ù˜D/yÄ(®¼Pêà„Eÿ¿æsœË£CÒièÔè0¯: :$±!8d &àÕÓÁ!¯ó³‡Â‡"EyðŠ’:Mçð¡>$%E=ÎfŽj€Y‹ç@|Ð}ƒð! ÅáC’èkŒI.Ù>¤§æŸÅ‡$vˆôZÿGjÈ:l¸?«÷ð‚ Yî˜6høÂÍ籡È!aCYù&6©±¡®šªf6ØPu×Cl˜õæ6´šš,4J¡CÓ-%b/èP5ï*@‡*i°:TUת:Õ:¶Ô8Ìý Á¡h„‡ n¦–èåÐaÕtÈoª\¬ x #ÌöûªÌì£ íô‚$¬z,2è@7ù!BthÏ—yt Ë·Y§ÞÀ_ò·Œà®L»Þä8x ÛÃK³?x +Ge”[xhZ} ÂC«+Ýž…‡ö„HXx¸E²H<´§Â¦…º¢U®…ú¶òrzàÛO©GjÑF9 ˆÄAÊ”–™Ü%½’·»›E¢‰*JP«½|KMO®Ç ôm ÔœÖùæ= â…X@Ð@æú¼Lº’|Þ-’v½­-ûm¢5MÜé¢5Õ“ Ú“É]Si½ ó ¹ÔÕ ·Á÷eøø@¬Ä·<2kœ­[BMï3<@´ª¹p@ܦơˆ6«Ýzˆà=|5 Ìn¸"‚Z 긱±4 ‚Z{C„.K€´–1¯L”^ÄÛM(bVè?FÝ!ŠÎ@ˆª\€UC!ª^%„¨šª DUÊ2Dˆ¶¨!Ú +rÑVÀ8ˆ¾.ô@ôUåÔD_Õ•@ôÇ7`bfÑä¶#DU.@ˆº‚IB¹ºÃQ”Z ¢,ò±Cˆ"ŒŒU? D]‡‡uÕ +Q×Å‹ƒˆ¦ FF4)ò!¢1_!„æêBÑI¤„è3‘‰º'“㢈¡~\Ä~kBï†0@ŒeÓ;€Z +ÄP÷ +p+hèeˆ¾®×@tuЀxÒ78€è+9ˆ¶rL9€h« ¶ˆ¶’]¡ÈÈÞRº(B´W}.VFÆé>hƒ÷ŽïØß4ú]Leyý‹©<™Lª¹É)ËAM2:ÃeIzÖ£ùžÞ›K {|öèåÈú°¡ð̨ö­“ëÌqÐ)Ó¦`Dç½jo+mX÷>‚¦siÖÁœ0Æx´Ú*Rw~À·”&po¹x’1úÐÂK¶H‹æí\(mS'úÈ™iÅÛ‡^¹’“çÌB" %Gúñš‘ÿþº·êº½¯Z²à‘í)"x«¶]gÐÄ)S¦Úë̶" Îå¥LQwˆec49,¢eÁ¢1ýLMöÿ}| ¦+”uFîqÃe)és*È[Õë2,ë1w,š< l²Á‘ï-'½ÿÝ/Ùõ‘å +ðú·.¯Š»þ­+>ÌN‘Ô!hV vý|P–?Ö¾C‚Y¥â·gz9›÷ìÍø3›ˆV2íoÊ`lÂÚ©šrÏy‰$ur鯮§I¦ŒJ‰O&¹Ä-ZÙÙ QfnŽÌ…›¶e§k²)_~X[ʼnšÉEª²‹+æÔyúȬî[›Õmm*b…øe®´Ú[›n›JzÐKe›Ã£O[b¸ôXäæÔÃØ;Éf,¸ƒª±|õzÌxy2î›,‘ðVK&˜Ü-´Ì‡pvlŠŸ^DÁ:Û]ŸÈ¦* -¤È ë½Òq"5 +pQ£ÇÜmŽEÕ€oû­ +£7Lcª×Êdð$Ñ +ë´rHwÍ;ìz– $3CÏH÷$KHÓhÓ ›ÙC–X™`/Üšf òµIÔf""×˦±¢å˜<±±-§×YfOÑCs:¹¨r£«GÒX_~–jof§Î’—·³½ìëZÇ‘ûRmå`T‰uÒ87~Ë#gÐj^%®Å`–×ÃߎåäVúÐÂáLÌ8¯uÞtú;Hüûã„‹ðçÿñÿþ…5r¶Šˆ©'<„!)h¼ðkæhLʯí±…à±ÿ÷ÿ×ÿÂÑûÿÓöþ¢Þ?ˆn¼‹1]ßõ@åïA¼¿á¶þLã×ÑHUêZ_k€¥Ïs>K×ÿË÷€rãNFª[!¾µ%w1PÊ[ݭƯ³±¯ÆõcÐ4ú¯t†Nçt—t î <í‘Ó­_Gkn°øu<·>OøWú•5åõ1LlåövÓÖøŒÉösØø¯ •,-âíÐõë±´z2_G#Z<Ïs>K´´8â¤åsÔfPí1j[ã3@ÛÏaãOØH·É'›e[`#ÚÖ¯£u_JÏpëÏØÐê³ÇPÀÄÖs¨¶ÆgT¶ŸÃÆy%2Ö®['î ,Ñ6:¿ŽF°„¶ç|–þd¥D¡…»¢¢NÆ!Y÷QÛ×í?‡?X`é~R.)œ ,åf[¿ŽÖm)mOÀ­?Z`‰Ê¾Ž«žC•«ÄCµ5>£²ý6þO†ÊæÞMFµââmüüã>fݦè²q8ën¤ºo¥!‹Z"A²\é°Ímëa·yÉF ·ÝænÍ»»&ð6¡²‘t¨a)W5å¶>z–¶0n«‚;Jç m£">ßÒ}*¬,¥èÞ6°>1“Ûš¹­Òßý’?Ýå “/m%³N>Œ që‘x“Ad1—I;ÈW'pƒÔVx“áy!£Žå”ü'*Bçt‘Ãìiä¦Òr”6ö)pùï¦È.÷9K\ƒž[éìÌáÙî¿DF!E*ër¦ãVò뀆¬Ye)<ƒl'Cçè¡qqÿucüžC*ëE[¹m®¡{rJ›m:J—áuš(¯ñ½é3ˆs–®›4r­ù91Ò¸ïHuއ6Q`Í·.r§p+gû”ºU±´Ý[@gˆ\PÒVÁlð¦äÞ†ôxç´ÜúJG"ßÖçQ.‹“§RéY¿™«ÎÞçÁ9ba©šÐì(šñ^óR$ôþä+æù ÓU»•²ŒïXÆÔ9n«åâhr5ò-O©WÓÖÖ–Ï*È/Je«|ÐÝ,&µ…R¥½ú”œŠþ¥*>úK™GŽn‘–È«4qêÌï¹2F–ÖÝ $#ùvå!Dé”ÅÐdÑðµðóÝú4æú²4¥|»[6÷}¾€?L>±>KKt;U²øqjÒaßâŽtí’ÓVdtÁ¡O‹ñjs¢.Ó%ÎwŽ&ñ}úeypýôÆ“L™pïá×eŸ$fëÝF¡¯!JÛmdi#×37A摯S‘Ö\{ßWCç$ä,J¡ë3¸8·…íw>¬ô‹‘I§íÛ²¤ó¥8ÒNFýs&—êÊŠW—Æ|µ¹õ¯ne +ûêYÚÚvjeàåדWVöEúÕ׳*¯¨F<4ýñ`ÕHåjû¢Ìšx™emt}H‰QGbh)LÞ5ÌйŸ›‹ ÌÇ<¹Õ™¦«bYsÉ;¹KuI/½eM>e\ěۨ +Ž´íjX!ÞÒzÉ §Çò‰ÕC¶çmGˆ”© ÜÆeo¹mËU¬ï—ï‰â6ÓuAdi¥Õ.2JwÍ"snšû=îœ ÿ¬Õ´¤»Y\3¼ŽKÔ! ]æžR¤¦Ÿý\Êëk§Ö¸‡0Œµr.sØOॎֈ¦äÓtétVNtMr†ýå“é¬ópc¥,»A-‰ŒÆœ›¸Ò7%2@¾å!Y±]OùûÛüÕG°íÀmTÆÚ(·öù ¾”àÖF¼BiË¢è¯iõòk”¶-5̧Ü00D(öX>Q×þÝ–ëÑ?rûW•¥Úâù´ÆÉ¨YÈ¥¸)ªp‰AÅm©Ž ]o#ͳ{V>ýÊúkºÜÕáSÕ endstream endobj 84 0 obj <>stream +H—Qçg»úݺÀ'išŸ0Oçcy›»—Y×Uq«UÊ3ðÑäêæ·´ª»g¶r[àEp7ÝFrØ_r«5RŠ,£©çf¡š«I¥áJ§Û&S¶°LìïIöËöévû9Ž‘5™r;j†+Kf–ÆkÃ¥…DN¸¹è>ˆŒ¾ñ|ê­•O0õ'§qþ’9î,£ÅÌMj+’ó{‡R}ØC2ù¿ç3877±+I—¶‘·[[SÖùá‹éœÖ>gfvuÖ)ʈ71¾œªö$™Ž¼”eó‰MR\IÛÅpI÷ ÷Ηiëcî}q½O•ù$Rº´Ü§6®©¥‹›Þ¤/Ѹ­’ný–žòͷWœ GdÄ,ïÌæ[¦.§„¬Å}¹õžò8&ëpî!;­¥mÈ3ɖ˺H™3Ímœ·]{Æ–£Œ!=·µ–óÛ¸¾ÌˆÎØ}2,]Ç„S]ü–Ö*Šq¶r§fâ¶ÙoÊ8=ôï‚Ò"©•Iwë½Ènèš®^j +» +/B +âf¤â˜ÈÓê'š#»C)¤ë tfäÅïê‰ÎAH^"Kbbè ®ÎãRŽz²$iJ$êRŠC…ÖhŠrEϲ­ú@YÈ2¿D§-ÚñH‡S]QL:æÎÝ‹"ÙQ6ó!óÄ÷Ʋ²d‡û-­M6ˆ6rSì„¥¶ë)l£2Õ‰™Ë^ñ(0Á¢¼h›émÁÜ™o+·O$o'1JoY7 ?…cƒôä®y@¤•7H"›ê‚ÝÂŽ–ô99éssNº´B™¼j¥êrb¶·òPÚÄmI_’Ïi¹Ôô¦hµ²¹¿¾õrj“Рë4•0ƒlfCgI3]q§øõê†Î¢[+·‰ß†Û"Ÿ1¹Þ†ì†¸×š¸£ZJBÁËQ¯\F*Í™"Ô&Åø³uCá('X»AƒXvWi"=\„Òß(¶øôµi¶í% ¤¿}¸ÔE;»+‰,DJܹºòêvm¬¦éaUöväÚœÒá®ö'ñ`û:-sük3+:[÷þŒØTòÒÙÒ#ÏÓÊm­UmÛË䉌ù¶,Û +ZÊÊJEê,°4ldù%1ÑEvÉé/Ñq”?”Š|4ú”D]nfvåÕ;eÏÓÂÄê“ÜPÆ‹ù‡=ŠXMUBÍo«TÌ”·‘îæ6¦ËpÛ^€Kdâî#Ùa_êÓJã³}Wºôi¥5]U×}l7Oës…rp>…y³2;¹—󡈪zfÓÍ»®‡,ÆÑ?±¡ïA^Ïù-Rq};)ËÔSG2Rw[ª·åÝå>SÀ`Ñ_X5˜¦Bìj9¤$˜ÉmlíëS˜°s·’%x]çSrc"BuËó)‡ò@Öƒ>eˆECüêÝkÈ_åDJ²z¸=h¼(£_V‚®”(Ùûnyã¤7‡›Tmy)˘fÁ2ª“$mLXä¶”/(ŒPnåýÇm·…¥í*çLÝj¶ðQ˜B)ÈÝ£O¡i­µŽójå6:ôÊÞˆT:0JÛqˆÑ§•Â<… +m>ù%d"ãžðÊzÞ~ØêºînÐU)çýã¶ Ú”û{ÜñÜ2VwêózZYÇë:O²‰Ò5å6GøÔ”†„uÏH}ú»¶–Üô ‡ø…á¼¾¬]1|.Ü;Š_ÏÌý)E9)ËøôN‘lM0" —Û®>t½®@K­yºàR˜DŠL#ϴɲÊéücºëcÀãÔÚñiÄ/ úàË|v˜¾Ž(-«+zУùå´AoSA ‰Së—*mC7%•Pϵö¢×+DZ²â£HÔ8tS¨ýJ_´{àtÉF9çÒ°ˆÈ¿:€~¦ºŒ‹ø/µ/]Ž¢Ôzž;R˜'i8y/Ӯ˂®Zº(§8Ýý–VΤõ´r›jzºRã"5]|AÙâG?KIÊk‹”#‰¤M rÊ7.Fç¥6¥¿Úüé5d1k™\ùi‘–Z=ê­8n ýž_&ŠDªØš¥j$°[û”QC}wk-Lð½WÀY š¢ º« {Øõ×zV Ú=ûòdñÝÓÀnTxù2õ7Ó<¤ì«YIÒ|^I–ØOxÌ ™ëµâÅwTéd‡_¥Êq &/edzŒAOÚtŠõ¦æ—<¥FVõTƒŒZ•qWXÇQ%¡ÓÕM©L€¸ezéJË"kK6ޱg-Rá! KÒÑp[ì|ã–. ]ã6Æ’_òk½@iRk[9}-76cõ‘lˆ_ÑÐ%§e¤b~vXaÔØçŠ£ÎéûdÈdE®NÝïçíõï9ʬ[­”eYûT5TÜFwgVà¶=ëw=j=2–²PÚäÒñn#Þ½¶É= Õ#¸§ˆ«‚ +4’Ræ]IµîåBõi\KWdûNŸš¡E}Z}¨¿S…ùÔ^ÒqH⬔³4 :í¢ÓªÃë´ëU•q4ç™kRäh€Å~¤ ÙMmE(ÖÜz­¿¬L¹ O{Nž×5írù¨Bî~M«ó~[HYÆW?,Ët%¨móiìJÓ=ʶŠÅ1wèl;|ÑúNÖM•&kï—­eΘÎõú»©ËýS7 ÷Agiëí~øšÒõ}êx¸Äñ%ãqqÜGvpÙ±úþ8Î_O5ÍYuo`¦Ô ç6,WO~O¡Ð]ŒTdJ{1²ÿ-¿œlª"^yjâHwe,‘ýÅmóí¼4ÉoåvUhP¢í¸5Uåg1Ý]ÞÒ…G“Õ¤NAãø”ØB­)æ8¹ZUÿ²ð,§‹îª¸M)TtìjÒ¡þô2î4¡/ö‡a¶ßjL¬¿—ñƒÏŠ~*vþ"õüÖÖª·‘‡MÛ®Ù&4—$d™oÁ^Âlå-OmrÅ(L¤¬=«]þ.Ê¡Qg¥)E,²!½:¬³ÓZ(;1Šg‚/à˜@u¨™‘”²UNæY`³\H[ûÝÉäbWÈ^WѶ$³F–NsÚ*³-„A–ܯJ¥šé#yúí¨žã¿æE¼ü;[Š[¯ƒ,Å­cQˆ$/êå$ɤ #Ù\2Ø“‰$ 0—ôSõlcYOúÉA¼Ccí¥+Eî5'ŸŠ‡1&åXM济1ÿR(Z7`þEÎÑ?7*·É1C9_Ü1Îÿ[6z˜vˆ³lD2™×VíšÁÖIr¬S®L=І¥¹ ûR„œ3v1Ræ3õ™WË`/?óÚ®6„.4ÕÆÃ«²FKõÿVbú­WÐG¤”M7&ibµuqu01jÄ9Ür³ODªýú…d©©¨§>ÎÞŒÉBG"â ?äĨÊìÚ-^–]JÄbžË|X½&£*TíÙòj‡ëŽd¥Í¡`ò¥>¥È šlETؘ3žE<ÿk}èÉcãJqkLqk•’C ãìÈ_óï•åC­9O®ð¸¯rÝáøCü÷a(ËG GÜØ“þ@˜I<Yè3“Á$C)/{¸Nܱ(Ã5YQ)^R^d£NQ[”{•cE­EH“ŒEM5GýñÉÝâ?§›0Èú"©:fOŒÛhZÉÔ>߈hÒÑ |*a¬ñÍ!}&ËL«Lw¤€?Ù¤I ë·´özí­Üv[“‹ãµKs3¦£KYx,DêÉ|C“ݘΛ­+*Š;õKÖ”c•5 "r¢2™â¹}c+J™¢³"µ1GÉUA =1C•ŒµÁ(ËšžLÞÊÚVűÃt¯¤{A *¥ˆF%Kïóˆ~®p¸‡¡G;¶ftv(elPÊ’å?‘T/¬‡†d”åOÀ½¡ UGžµÃßž«>5é‚ +’5lãQ§¤>˜CüìR”O$#é‹ ìä"qßåî—H*&§§=‘lêàI“¢¶^šR¡,±*Å4¯â‹Ú„´[ô±‡ÚÅOÖ0I`Ô6ùq–4ƽ«]¹K“dF­z5ÂÉÌcY†Süiúuy$ŽºýS¨2äÙú-­zq¯ÜtŸ‹ÆŸÊ½9pë–Qp럓¬3æ˜Å>=•Sš:±‹) ?–éfºP5.M'ð‹Ìk9.ZyIÙȸnœ0š¢Õ›I <áB ž’û\s±Þq§HV®‡uõ„ñËÓò­.ô;i +]Û˜E!I—RɵÝÒþ’‡„1t s1QyÒ™~V “ÖÍÿ>Kf:uš‹ºÒ˜f£ˆéD<âÖÊm)”Iֹ¡o å§Äsʼ’`’Ðî‡g™>sÏ”¡ÏTNåçñ”2m&.µ32-Ò­ðµ¨Nän¹w&´?5Šd\tEÉTQ¹®¹­Gpºü‚/Á”®•MW×ò¾­Hºó×s]3%……öôtþ-SЏ­‰+ïýsštöš|ž²nfeˆikå6½Ÿêó–‹Ú.¡†3ã'ÇùÙJºfެPJr•µžë“•sEÇ#KÕLa"ÓuOo©ºJ™ú$;¤Oö&S¥Øt”¸¦-NU8Ž$Í!*ã‰\©ûdôE­¡¤Ù#í=מн„UÄ]êYWÖ5$2ˆZõ¼Ñ«[©M2¿šá6£6 /9:fô㤙)Ë‚˜œLõÙ¯}9@R©ŽDjsT&oHE1ž£"Fsίbø*k)é4)¡ §˜g`f'j[IäK“+ÔÅ¡¢¶I!dJåó}Ôar –Ii)ïS•®µC‰ÕÅÖ==MwÌÿ +möt*XR«ãÄ=:@t"ÜÇbÅÒÀA™.™Î$ùûþ,]"užÁc*= >ǬIœ{³Ln“£áÆÙ¡þu¹Nu,–)W²ƒH&øhEô*%n;Bw#v• ‰?%ÄIª2”'†"¢e>R¾¼ÊŠ×‘ªHÖu=+›7Íž ‹Úž÷Ÿ„/’]2ºQÄçÝä G*“÷'6½W¢6 1Üèj‰“@¶9#Äk£¦É¾C³ú²t½´­ øR)µyv”–Åɘ:©:$›Ãÿ{xE ;:޾iÒ‡äï'«ÊŽXÚÒAQâIIÂ&›T&î‹ãCzâÞ‡K©?B¢¶¦|/K§Jœ T9(“EÙH¨X柀±E²$¤mÇôâßÅÙ¥É £ÖÛ0ÒÎ ‰ŒÚ&up’͸Mrfl´4î rh&?¨¼ÎÞ˼ëºè36{#LñG‰!¾è6ò¡}Rpzè”Z†°ƒ!ˆz§¯±<"™Mâ?ëš|+¡(q›jÑIeâ¶'áJIO<ður®–” CW™Ý§L¼%+I!×I¹:\”€† ønt/jS;ûá…q£Ç'}ŒŸ[£~¡°Ì¸M™˜ž—Æ©rrWŠ–^ÉrâuA›}þÌLë + CZŸŒC—âw‹ãÉq{XV?¨Ï¦(Èâ Ioš²‘ŒOˆz%AF‹”Dm%N>iÕ_ú )™D§¯ùètP¢d¸ÚŸÊœbï%͈ð׊¤¹°>Xܬĩ*/ýÅÉåJTô M)aܪ“©D1MFÄ1m¥ŒÚøÒŽéël¬ÙJ™· L±”•«#ä°H(Ø‹ÀÃmÊMz¨>܉(Z¤ ^dâœv$¢mNڑΗ^XL†’ÎפYN“l>*T ú“áS2’gOñ$ÉÖñ®H¦î¢ÅÓâÌPî˜],mÊ“*7•ÉÊ· ÷Ì’”Ë=hiÜM šÇÓ‚çsÍw;¥dueDþùï?tÕ÷I£2¦VŸ4ÈE36ßuØà¿·ªÎÖ“üÄï×é™T)ùžƒf¥£v­dú><×ôD÷ßÖ{ºÓý·}'ÓÅøm™õ©£—}ï_?"LQº»ªÄ.†ÌoiešÆÓÊm“BÒ,söUúû_˜V~Ê×Ùz–Rÿóxo•ç=Ô¶oyÊ(Ÿzþ²|xr±}áÛï/Ûê¿t¾w3†Â"ÜÚ‹<ÝŒmÙ¾1¬¿Ì¯c[¶ž?­yëùÞš^Ç6ƒžk›Ûç/ˇ'Û3¶e›ýòñKç{ ˜ý2ŸmÆ6Áu›ÀºuŒïC†Öm„ë6|X·ô<ÀuÀºõO.¶/fl#\·èKç{˜ýô²n/¸n/°n¯ëöë–©]nl™Òõ2¶Lí2=_mÇØîY><¹Ø¾˜±½àºE_:Çö³ÁuËÜ 7¶«õ“w}Ë<%0¶Hß2}êul½¾]mfl½¾EO.¶/ÇØ®~ÙÖ·u{ŽŒC7¶Hß®ÖcLÞõ­0„üØ"}K­ïëÖëÛÕfÆÖë[ôäbûbÆé[ü¥ó½^ß®67¶Hß®ÖcLÞõ-ÉкEú–˜ïëÖëÛÕfÆÖë[ôäbûbÆé[ü¥ó½^ß®67¶Hß®ÖcLÞõ-“püØv¨oû}Û¾íPßv oÁ“‹í‹[¤oñ—αõúvµÙ±íPßv oû}Û¡¾íPßöú¶}Û¡¾í@ß‚'Û—sl;Ô·ðKç{¾í/ú¶C}Û¾íôm‡ú¶C}Û?èÛôm‡ú¶} ž\l_ÌØB} ¿t¾èÛþ¢o;Ô·èÛþAßv¨o;Ô·ýƒ¾í@ßv¨o;зàÉÅöÅŒ-Ô·ðKç{¾í/ú¶C}Û¾íôm‡ú¶A}Û>èÛômƒú¶} ž\l_ÌØB} ¿tŽ-зýEß6¨oз탾mPß6¨oÛ}Û€¾mPß6 oÁ“‹íË9¶ ê[ø¥ó½@ß¶}Û ¾m@ß¶ú¶A}Û ¾mômú¶A}Û€¾O.¶/fl¡¾…_:ß ôm{Ñ· êÛô­ ?dhÝB}Û>èÛômƒú¶} ž\l_ÌØB} ¿t¾èÛö¢oÔ· èÛöAß6¨o+Ô·õƒ¾­@ßV¨o+зàÉÅöÅŒ-Ô·ðKçØ}Û^ôm…ú¶}[?èÛ +õm…ú¶~зèÛ +õmú<¹Ø¾œc[¡¾…_:ß ôm}Ñ·êÛ +ômý o+Ô·êÛúAßV o+Ô·è[ðäbûbÆê[ø¥ó½@ßÖMß¾^TüÅú§ÜRüþ¼þ÷ÿ•û¹` •¡ä{bg®ûŸ(…cò¼•µR©j#4Â#ëä.☱¼.ð$›Òɤ©ØØóº˜ï¥úÜüQ"ŒÙO'âg%]ø¦‹ +Ä5ô¾Gú¹„èûæëа¼ç÷=E×= üóÀ°Uóºî•Ä5ƒn߉o©®Ú*5ÇÙF×{Húå„•UvÑ•ì Æú%ã[zþÄYb¨kz*ŠÖÙ¨JiI9!EøœeId(ZL.N²Ã¡Bñ,iÉñ˜»JËX/â©nšë‰‰žkǤ2e¥n„Æ2ŸZ´”Å_é( ú%ÒÄ··ŒE—·³q¾,”~¤0Mh³$‹[díä\:”Ÿá¹ˆþ%gŒùÃvTçåE0´÷té…ª2ÎDM=Übò|ª°9)à.·U¨O'§Jq^ÌOÄá5–”“'܆–´T;$)±I¶Åd‘…̳jeߨ4#©Êzêÿ–_J¸)KÃꯤò×à0 ŠY»õÛ1#eÖ̉¾Ž/I¹Ö*M®O¹÷:KUå8š™þ¢YÍxúszÈ2!óóôuT$û¦›þoyè5¦´¶Sä™÷"”ƒ ²\å…WÛæÿ% +W.÷)ô¨"ý¥Ò »™Ô>‹Cdšc‚BÕ.ÓŸZÙµWÿ–§J $m¨³X.É8€ù”½˜ÚZhéÔ›j*‹KÑ0É»A1ŸÛì¯)åz%ŸB¡»‘¾©›”eøÅÙµfwªHªPÞHgKŠXá‹°IÒ£ŽãÌdŠ1s +è+LAZÞrìCq°éáàåµU{”y†RÉsÄÛÍâK‘À⽉LHåú¶"‹O~ÞÕŸÆi…¢’²ÔÔ „#ë;úÄ3©5Ä|áTÏüµ°CÙÒ»åušÛ,˜¦¹qT8žè$³œi’J| +šê6ÃâIš7í!°£ñoœ cþ2O¸’H$f¬=2EYtÊÎñco Q%§ÓØÉÌW]R)®áQ¤¯xn?@}•Ø`Ûñyè„ý&•±¹Iœs:$µ¤LåÈÚê°þR‹ŠA*Äüaâ‘"ScË‘Ô6bFJoÇ ¾Ú=ßb¾:ZÍVÝ-j™.Õ·*>¿E*L{'åêLBžåº.’¡óh+ûßÓ:¤÷ãŠLF”¥É¾ J‡—ý::n¥_"•lÝø¹cýòéÆÓæ;¾Kç§®7€¡yÔUnJ¿ :WÄÒ/‘Öˆg„Šà¬ÓnmîéÅz¹§gpF®·ùšUüœ/)g»q´ùÙ¥sFÖÀŒ¼Ž¸–hocþ[¤/¿ÖJ=ámFªïæÑæg¤ú¡X/3Ò>í‘ç«ÐŒP5£·¡‚<®ýãRê`ñ­7€¡yñU¤åÓÉ÷H~ß#t3ü° †"¿ï‘üi<_g¤¼ï‘\ÀÂ(—R‹¯¼ï‘÷׉÷Hü¸Gâû  ›áã‡0ï8’?âÈóUpFÒ‡=’ÀÂH—R‹/}Ø#¯#®3òGÒGIï8’ޤ8’ޤwIq$Ä‘üG2À‘üG2À‘üGÞG|Ùø°GÒGIï8’ޤ8’ޤwIq$}Ä‘ôGÀ‘ôGÀ‘ôGÞG\gä#ޤ8’Þq$Iq$Iï8’>âHúˆ#éŽ$€#é#Ž$€#é޼ø*Pði|Ä‘ôŽ# àHúˆ# àHzÇ‘ôGÒGIp$Iq$Ipä}ÄW–ï{$~Ä‘øŽ#àHüˆ#àH|Ç‘øGÒGIp$Iq$Ipä}Ä5§óG‰q$¾ãH8?âH8ßq$~Ä‘øGâ‰GâG‰Gâyq‘8?âH|Ç‘p$~Ä‘p$¾ãHüˆ#ñ#ŽÄ8ŽÄ8ŽÄ8ò>â:#q$~Ä‘øŽ#àHüˆ#àH|Ç‘øGâG‰p$‰q$‰pä}ÄuF>âHøˆ#áGÀ‘ðGÀ‘ðŽ#á#ŽÄ8?àH8?âH8?àÈûˆÿO™ Ä[¸êýÿ²(G€Ô¶DÌ¢I-+E_)ƒ›ÔútWûK¹ Ô“Öyaõ²šæ›ƒ¿¬3¥:xã’¡¾.)øÊõF0:ïãú0(+_²hÊÓ§W¿E*Yq(½é–ô‡Ÿž´ì%Ýí—†,“ gNö­óÍYÐ/ƒæM£d­W9nŧ¶Ú.+ø©SJ{‹rážOÕÌ?ƒ MΧf•]zeFÃ5ee>•1ÊÝJxòEFù¥&-Þsªò=\»f²L+û–%͉^~™4}ë^R„‹.€MJ̃ã#/½Ë¹(}ÒqÍC«=èÏNïLeÖØ_VUè…»ÌwuIiTËuÎÕ­‚\·×Qµ²9UR} ü’R +Kr³¿UT:‡IT g»5×§JâBÊ[‘ÎAš$.w¯VpÊÀT-©î¤Â3§÷K}ÙœŠ‹’‡U ûÑ7’@‘îá(?Åê:Ë*g…Š”8ÎÌù’ÁÞmÒ|¥õÔ!¿äÔü$³†¤‹&[,º•$üŠ&¯B/Ûd ›K¸>Á¡*ò¼ø \Ý é‹ÊÛ//'`½Òì²ü{ë´í¡Æeº«íÇGMQaVÚ|ù•J]¡r•§[/)…ê$-Ø)uNtPêü5οï~.!ú¾ùºg0ÎÛès³Le¡:û;~OiSiï놿È`H/’‘fWj U¤˜Mʈ‘¼3çßq~+n:,Ë(o Ëö ~¥ôpFtßÝIé)AÞ[I'÷$k"|º>0æ?ä—R—¶P6Í£NÉ(ËHKí‹|Ìj¤·ŒAëKÊÆ"ÕÈw…Eñ³”‡˜d±§`^¨‰ŸoýtIÁC× Í}œ¾ñâb†æœL‡d'Ÿbö5‘R¨JA8Y¢kP¨Œu>)‡k8/ÃØÒ§¦ÞåT^ÂôG*ñZžÏTnAѽN‘¾¬¸×Ji04ǹ0È„>ÆÎ5HˆÆöλùÚW(I·¤“k•§W—wý5·ÑuXZ£ÙtÜÙ°h©ÉÉÀ"¼T…“â_ö©œ¶Ï-Ÿÿ8~Ie +ü/±øO>â§+SY˜’8Ñܳ~[i|H¶Ê”BA$KGŠu–Ê,ãdJ2kÄøzù¡¬vzáNZng%Y蛉?ùŽœíÙ}ˆRåJÉ2 ÷^ÞVŸÐè8-Ñ<²èü¡ ¼.ãw™%Myýªh,Nîª4Ib‘”`•~¸p†oé–EW”#¥È¬2ũͮâƒuFÑŒå¤,`­÷œy²f§9[U‘ÚwÏÍ&¢KÑî>4Ê3´EKϧmC˜©LÙ4»>4ZEùLשÝ)œŸ/S6+C£.ÏæM¡nœÂ9áTÐŒ¤ñIg;SC>RšÝOýϹT†¼3¤]ù}ÍÕYä[nḫɟÂÔÌo·]ÎFÖù܄ӯ²"åV7flãÖ·÷=¢³Ÿ“@NÂL™$ÇæøÚ…í¯næ«/·¬Õý‡›)fEJ¸”¯G?ÔACï›"ÛÏ_ŸfâK&ŠªeP‚=§4€BÒnê«KŽ<¤ì¸:ÔZò[ž¹:l‘¾cÈKŸEv³kŠ”ž²š„ƒÔž²2/Î!XÎdšÚ )ç Ö¦J/ŰÛzJ!•,æ .WŸËõ<”Òš‚ª2ÊJ,¿s;»kÉj–>Æúüå5q0<Ð­ìø’ÂQh6|Á;{ýè„ùN¬wéÛ°vó_™¦Ž:dßsÔÃë³Zv÷‡¬ ™!3%ÌÎ<çȶ—ûhIãLÀ1ò¹Õæ:vPõ<am—04ÒF«ý T»–9CpL¥ Uƒ;§r˜ͳçÌÜ †õ`^¼ª‚oQCò¯ÓÎom ©áãÑД©èX5Ýõî@¦'f.„ÄKûzÒ\NV4×# cÞe&@ )²¬:U8´äé®ôd1Ÿ„j.PŒ`‘RFM9–®ôÓr†:§Vd±½Š8ÆÀ=tv– ƒðá»U3!„)ÛCŒÌŸ †?çºÌ¨ãí±~ Îóøø5ÔMÄg!£áfÒR>a=Ñ]Me)u ûÞýå—\»†e&|‹dó¸÷Ôܘ‘s¸/щŽT‚¯Éßׂ¶Gb=Ý +à0=¸ =>„­!…ﳆ!:ø-êŠC6ð‹ÖZÔ9)ÖsÃê‡3Áß:ÑqŸôep/ö\I!ú\EÕI¿)YqéD yžüYêŸü_âpn\i+E¬Á‘Riìçp'ý:¤õV\ûªü:žüYêŸü_Ⳏ"§bmᤎWÔóŒ“~ÒdÌG}3ûù> 3¹Ží÷®>}–ú>ý×áåÝîÊÒ= ­lN£ãÒI·›D*@üô>L¹ý@7_s/}’•wIfüÏÂdîT§f™;å“”`—­õþIVÿ´QQèsðIJÕ>œ&]sÿYêç^ÉÃ$rÆ÷5÷¬Œ¼»û‹PêÌ;i”Hk:6U*ÎfBô7YyêÏÍ$›´çQžnïolÞ8»jEz:—2è‡O¼ø…› tu“º\o„ƒƒGõÛ©Öés¨‰#6矆é¿M¬;œ4’g˜ï×kæ;è)J»~ÓJm‰£ÛëudKÓ™7ûiEó„ÄÂè‡T»â÷Mìç‚ï[¯Ãò6žÛÅÚœ¤PɹH{½”‡®q½ÎŽŸÖ픽 ºJ¥4ôÑãõÆ|T"ÊûB²¢y2g[ýð>P… øÂ%{w•‚\oƒó6ªàÞøø°~t]ç€ Õ8!‹âȲ6·C¿kIÛQÜ-ý¹½Ðš¤ÇgóY¬€Ðﺔ8¯[2ØÑ%Ÿ8_FæmDÁÂoT™q¾õŠSÙG.ÿî¤Q|Ñ¡aíºd/£®Ò¹Dæîš šŒÝÕ2øaÓ¢.è…Kö¢ìUú BÀà¼êûÂ'ýDÉ6úæ£;¨NùÒ2ÕxAü¬)ìþæl¾Ž(WGZ›§ŸNt&üùÁ¿ï~>Bð}óuhXÞÆÓ,{®v€“êš«^Hzˈz$Ú.Å|¦7™"8äS˜¥¹¿.qýÔùC]Ñ@k1ýåšW¨4ï{Dpȧ|ßz–·ñü†f§.ýwbëÆzv“³Ž€L³d-ôH=]h½Ð…V¿ _hçÐ/ç1½qÉP_—|åsdcbGî8,ryñ±îÞquÛô¢äžS*¤TVcäŽ6zâ–Å ®µs}ËS¯KçÁÜ5ª²[åÂu˜D^ÏWXÙ$öÉ7±¿ šÿßxâ.9jJÚ×ô§|Åí+Oçc£‰ hìø@[¯ˆFî×»4˜; =ÑJuk'’¬¸)ÿˆ£ÞÆÕ§{j6ù¡—ù&“ 36õòÜ&OÛÇ<û1¿ç9‡ˆÉKš¡ò¿ÄfåÎí)Ïô9c^d¸¯ÊzHG£±V¯•ýú¸¶¿Î´*þ[˜êôç?8Põ‡,IªB™Î²ÉüEæ ÝS ©Ê8¹² AÙ´&8Cú¥Ö•7>)iôBI¸¸ôø‡?oIºnåkìët¬7uJ«”M +§ÕW+›FmC¿¤Ñ‰2: +½ëz^ÜÆu·T}u½ÝÞÆ¯#4ÍÑX”Ÿ,”`*’ÌõËzëm²¥púڤݕ::åÖ¢œA÷>Ú×-¯îÏ`5ñÌËþ%V6WWNF¿¤ù¤+[zcz*¤åc%Ü} ¥¯ÀwàîóæÅ)gBÓ´úÐשøž,3æLÐÀyºtÿ*¹è¥ñ¡êðÌ·o²3嘮É%½B°Ô}cö—V³«Vô=·:ݼã^™nØð — vuIÁGêáààQ}÷ Êr6ÆâqjpÒÇú'a67éSTMÄÍ~j ËÞ¦O&¨$K½¨{ÙM×Õtœž?\V¾î#ýy„à;ækÐç¿Ûv:xL:–Ä$P¦¤ül&F0µÚ¤¬z%ÍYƒe¾QmÑ€ô료•Ù¤O~‘J—în·¸tõ¢· ™n—ko©ëŠC<Ðïî•0~ÍÕ2”ˇ-³¤ùîÖÎ0Ø^†üm® âšÊчk=R¨û—”êŒîù*EƒseOòI~ÐýÕë~J¹ˆ7I¿è}Kf{zÙBè[ÐË—‘Ò¶8Þ©½)fÙí_aeÁäûÁ/׸÷m²³§ßœRÇŸuZIÖõ$e¶Ý,ÿú¸^/E ¦¥ yç}šÖII5íï W0IÖ‹;…ùÖ‘ñ$ŠÍ×õÊœ‰c—h?èмþ‡K“ú÷="ÐÏ%Dß·ÜA`XÞÆóÈ}1M©ß'ÉšVoãÚ¶"ÍGIÚ<µeùŸHÓ_…j©ë}YKdÙÞBçLmR¥—{åvzv•´I¢#9íÎèÄÝQZêß ÏÇ.µ_Uzä²–]ÍZŸ¾£ïL;Q˜I>±|Ê_lBØò:ü­01ÏçYC3Ô§R|•ßy +OÝNiàYv[»Ö©² °3FAŠØ"± ØÎsÕY‘ºÒø»Ñï³|ðë–lïßj¤,ׯ‡64H‡²ͩ¶0ù×ÜšÿõqG¨Ûö 5±ëâ¶ñݤ“²LO·ŒjG¥¢2ò¾,ûa„yq»¤ñ¡IM‹GßH¬7ß]µ¢I«æ_ôÃ{3Ña½ïŽN!øÂõ:82xH¿×y•×ö¾læµ!»5œ”×p›k8Ž'Jµ²sÑ·¹KŠ]T÷aÈ2o§ +I&möN˜¿ŸIxú¬ì™§9\"m1Ù‹¥kN{Nf?o2¸`®¹Ôjn§=Zï‡Uùðø>ÑLÏ` ~Ø$ý5zß½,˜)t_Hçìþ22SÙÛ!=ÀNÆ„ž>^f‘lŸð2ûKvê k*-·¾&Ñ­Ë·MëÝ™IÛ!/kMõLªœ‰››dÆÇ+ÎËÎH”<„{ÂÚõT;W¹0ûž¤3µhˆ"µ•XóúËbú4: ..õqk)§%ñ6x]Œt¾·+ç÷´éjû´F,¤~|þ6B§ÚᆲgÍü¡4OÄ€³C-J[î!ŸêìXi*ûOýô 2ö£é ]ú´-baÕˆ…3‘[©zÆÓ²öç¾RÂï/€‰{þ¬’ç[Ÿ¥´†ÄŒÜ»[$\bʵ\´ñ1±iZøX±7»–8½Ãø÷‡…*1Õ{·´éôu¬?|*«¬çmMëµ[ÛÓ»Çs²¾Á|êa>ß;¢‚™Só9p¹+ŒRe¥ê4ä|éÈl—ðÔĺ" ®*ÃeÿEI@_çç¹ k%ιæ·ýYa»PŸV×­äÜßír理Y1=ÍrÉŠ>,+¯t2éßÖù”ÝKÁÉžqþ,uÏUßçÜ¿ËuF~Ï·Å­ñëhÜUÙýE%dßZzÙu¤ÒÔk!”sL¯½&ÂÒÀs6.ŽóÜ’&OžvêmªÄÂ^*~VÉ%úøXOèÝ´[;{;äRzÿ¨¡‰N¥?Gt3ÊwæßRï§@_DZ³Õ ýïCJd«ë±Fé½·™¯N»¿‘Ú'³4iÍ…¿‘ÊUá÷lžüYš<}tû¢ÏRød +R ño¥ð‹^Çù¿OÂLL\¹‰#÷ДPEšÈi(¬·˜A§l*‡G"i àŽ£€]ì|Ïý"¥d?µ——§œ*I£x€4Ýaâ|òë÷ÒÐ0æÑó#_ïRŃçD?‚ŒÉmxÌÝÖAßFl¤/O6sIGgÕy›œJ‡ì!1¿e§ò«Šò|ÿF +)s¤ùßJáðWÊpõ¶nï/ºM• ¤·Œnê‚×tJuªÿõCv\Kâ/{ï@{î3šü@JFÝŸÕ#ok¢hb5œOúåý‚ôöñ¯S²­:ÅKÚ÷;‚ßÇÈ[é9/‰Í"7¶EÉ/@xŸ»[ˆ@Ê2J'òxdqÚeûÐnéI_4 /²_ðáÓ¿ÑúNiæ²@ëû‘J6·ósÓm!ðEl¡ãúüÅR +¹L¯Ò¥^à“—.Êàö®¸–­~zrѤ‘L‘—åé¹ûÒѵ›ï}•о:¥¨Ïï³àÐ"‘ v‰bÇñÿ·H•xR)Lnwé¦ÔÕ…J/iG”É®ÂÄ+£¥È‰Ú{Ä¿¤{„_X§š¶]å‡ ¦çõÑN]C²iiô³ŠÙ&K&@r>uæI9Ýûû#'Aš¿ G_od»ê&ÄOI©ŸWô›ÛôëGøñ6ªVÆ]ó~9‘{ãZ¨«™éŽ~$ÉÊÀƒóÈа>R?!ÏÁD¾®Ö參iªNK”ò­°ÔÐ HvO•š=.W;dpE/©‹ÙÞX8Ö”•£¯eyÑžo£zO µ>K‡¤³iL+Ó…¬Ó©ÓÞ¸&~ïᬘŠ>ið=Š%ƒƒ¸¤`ø×Á´½®Mˆ¦™S`½€)—„Ñ’Ù×!E‘‡Õý­AO¦¨¿7ÄËÄQHbÁR ø£„N)ümùdg>RØå·‘r€GÅ©zyÔ%…} $-õí˜òHa_ßëºH<[.¡çð‘ºx«÷WÜ%nïˆ>)÷Çà ‰à“Jñýк$ãt¦H[/ÔóK +b½ Ëê+¤ç+=š=£ãQðW„Ÿš ÿ’¶˜¦9¼h;³Œx¿@èS#×uÒ/‘júÄûå±î©?¨·‹1…¾DŠxuª£ÁýòÒ˜ü•‰šªÎÑæÀVDâ¢sšÓã$-³ì>V5¨ZÔkÞç…rŸìIVž®Ÿ1kû´bRKìCâ1åL„FÏ4€_®é+¶ å6ñöù©kÑXéÿ±/·*)4eurQX´ë_õÅ·S-…sü¼©–r¯‰öò’¬GIµô'C‘- çïV%Ç ¢Y(-ö”ŠO‰¾¿ÄF5Œ‡þþÚÚÛ¤UMz ~XiOÈœ•dí&»Ú¾õ¡*ÍfI‹Œ«/““蹿ô©M’¬döþOYX]]YàL zjqmÑàE^I¶ÖW²iãixÔNÊhÐË´ó²1xB¨;Ë®vð¹y*9xž&üÈj¦½  ”v(tz˜`c²õs7™u¡éSæÖqðþIÖs{QÙ÷Zä°O¬ìëô&€_Òíõ¥IÏ*÷$AÓÅœìM~*…·kÖ·“©û¥ï,ê)ã f,Ç(&× ˜þ—ôKrC2é<Ï%ö‡…“vkó”Õ#Õµ>tI{ع4,‹¡ÈGÞë®™§J0T|ãF?,ãô±cÉèþn“¶[!0ãd{Ó¸5kH}Ó6úu â¢ùÃ{©¶ÑÎ>m  ›Ôuþyûæ÷Ñz.ÖCVŠuf “¥8(ý:¥¼§uqÜ*¨òeøK+zRÔ\s'ÝŸ4™Þ[+ZšÄyIºÖØÕÎmÊäðàÛâX›Fö-c×3³~À/‹ò"ùMý!—ª¬\sû ˜àFÙSûç<Óƒ[Ýp}¾ æÏMZ*žtÄֱ߇´÷#ºJÞ{ÝPÒ¸Õ©ý^ãÖ4åUÚ9nèåÉÔöŠ¥m¢>K;%[ˆþÉŒ¥Cožï-Ç&À\&)2³ýæ^ŽZžä“õô}ì­O¶¼ÄTÑŸRšS™2M¥¨L`KùOn»­~e”\I¼˜î™ˆ[›ê"¥$m™WÍœç‰Y#ìÖ»¿e·³.¹'·ßqê™RXÞ²kÄ~´Ý»ß¥¬g©”˜>õÏçñý¶æt Gwúbæ&Ôè•3þ¹(MYxû̶ï?öÁÛþr òöÄ5°’-÷¾iríSŸ&46Kºæz}·R–o?É©c[n„0WSTY"Òà|­Ô™]¿›4}Oe•‹ù»K¸AÛã¨Ëÿ×Ù×öh—Ûæý‚ùóÅ€]ô™½ë$Ÿœ‰ 8½Ói ( +c;Þ¸vìbãÆð¿¯HQ")Q÷8Ýõ®÷ÑuK|‘DéH9ô¢ÈSÏ•îVáì¹ÿ>gRÞË"KU¼Á");¿{DD= ˆ-0T«³6 ºI³^¥Ü7¬¨bî«9·`Ô*iÖ¨Iý`Лýgrš)Ц%c¦'R–n&f*•Qî…IivÕqdY'ã˜0‘á‹m;2Ò%^uýR+eB¤4M«‰ì‰êR´ ä»íÓî;žLïD-«Í-›(§ŽZP) åç7…›q‘#sÛ\Ý¥°¢#\(ÃΠrÐ'[”ÝýäoÔž¥wt”=‘Z„A"žD¾zgÛ><ÕÑ„‡¶Ô7D]ua:c—£ëL íá-=*®âÒ,ûèêö—Jªô†,^±ŽRjA•NZ£T²%Æò*…he²JMÈ WGÛíÃSúO¢›ÐuM²“ýŠ±î¹´bxšWI¡I*²°¸×g +¶§H„ð{ÖÈÿT¨9Bá÷/Aew$Šy*­mÎÓ+²ÖB¬{*…x¾NÏ8ÑÒSTuûäôPjÌì³Þ¶M•¿) ¾­â‰ZJ ׯ~J¶ƒ§$§RK˜#‡?|½³dâ ü¸ùT¥ ÎCi›Š÷T:Z˜»V¸Ä?•ÖVËñÈС¦ò5*[ÜøßwÅãµÙdû³ÛvÆc®FM <4àëñ+T*k…¦Hm^øOèÝLÏŠ°¯¤ ¶p¢ÓX€ÐÜ1ó:J +jõŠ”*ž‘Výå5‚#=a¦j­öÑÂnšþw••òœé65©:•õ ßÞ9®Z£–hß§m(òןr`ô¾@¨²©-U*ŸE½J +ƒgK:Û\»NBE.µ†A[{R®/PÙ;ݬ•´Ÿ„e |]ͽ^€'pE5o>ôN!d®+öAæóX5#eÏôì¸Ö^†Ûäh¤âƒ“„I…!´±×#Îcú(·Bt™ãW(¢ôÎóÜrë3Lû(Xð·týž ͉g¡(æÉ?å§\•舂©¥ûè:ï±u¬špÖWɺÁc9(ƒd&÷°iìÛn/¶g飗–ŒiXas”~Gý°_aÈö—K‚S*£~Lm­¿ .gc_•0¨Õ F!}œòR~»]ݵ†! h^•ÉäRýÜðUQ€ÉÉi^¤gC⺕ªS)e€7ñÚÜò8_0ÒýXJöšYL³èœú4¦›ZõŽâcAOFOž\<‚ áû¾V”Ää'#³3$Ò¦iðn—š\i¼Ô9ÿíRÿæÀ…ÿ‡µòëJ© >ìBë ·›Ý9Ýd°©Š#þœ²š\jÙEp`šsõ + V1瘗âkTXÜÇÍâÆD雵³Ôdô¦ØT_¡bõŒíTØ:Ö]u©m Ku_£¾gSÑ š…–â&·_ R­›Î6µÂÝf€/,¥V”ww+)›»ékÌT'øÚ¬Áý*Þû┓ÏÁ…§Bõ4ÞÐQ®X[¹‡)Á.d[^vG¡Ù(,Q_ƒbˆ¤ÜÖ×kÝ‹q©56ZC=ëÊW¨$¢E»Ô“áç èêMc›Nó…q×¥r©¥¸ 9£/ÿ%j± ×1ûàW¨bçñËO:ôŸî_ØÆ«@ëòå7é¡Ð¾þ Ôø ‡wzkþ5¾…%Ýç(Ÿ$HIìR£¥»¿ëp#PS‚£^wÿS|fÀRÆw¬ZÅme'[Ús › F×÷ì4¼Ñ¥•%yßÃY&¸µÒt³á“°ü´*Bž‹“îèÉ7PÚ*¼´p;K©”#ºµh>Ń”W·©d¼¸i·)yUWÚJMÀãªtÔÐDMíÞ”ÔÖDÁS¾Tsä€Qd=·^IÞðH >úq¤.­WR5 Y‰-=pÈ娅a4†S›ƒ¤`‡ Ö'šÃâ^‡?µþùŒQ–6ËÛFƪÃÑ’B´8í|Fºaî'몈57 K_ÔT³ãlÛÉtú‡Õ.™W¾Ÿ +5®½Ñ7+G2ë•9ºï¹q‡µ£ÓX ÐìO?oŒŸ¢æ†÷zîp‚~=ª‰¸NGäzš3©PŽÈ/P“×£î7;±óã%/µ¡{Ú2_ãUǺ¯e›Ð<Œkò¯yjËêPÚæºzo_³mL…•ZL÷´Ž|¡žd Óî—º€åy\‹2ãÚN¢tÏ,l×Ò‚%ãB[1¯À…°óª\¨E\ª Š_NE‹g—Xig¬£væz?jgi÷sÖ“uÔÎ6jÎ1(Î>4yÍ”%\Jdâ¢.“úâRÖìlÑè‰m<±wF“¯Û…yÿÙK!’ž:ª‡·˜D@é ݉à ª®°¬Q“-¶^¹¼[ÿ«§/,ãð0L!ÿE™Ô—n‡ÿ‚Âææ,x +x=£ûmJ±ͳÔû‘¾˜‹ÆekÖ¨9{ È}gñ) µ%%„7Ù«v“úäRÖt¤Î¤V.ºL¥ÒGï¡1t/|»Ó¹É˜°\Np8òë= |<ç[ßÂцØDS±°¬‡—Ün©•±¹4åü[œêõ¸œE²ÿfá>â¹ùy(—Ìú~È¢³x*ÇœÿSfM¶®Ü*¾wØ"v'wò‚þð"‡Ek÷Ö®Ä8œœ} ž°ë›RŒ³‡ µ•û—Ê-âZ¯çÕ{ˆKåõB,…{õ¥Ævó¯ö”ímÜŸÑñï·Ò#ßy +ó7G5šPjEÎ/0š„þHuÂ"&nÚÕØ(œÞîв@-ñÀªÇ£–â ‡O'›qòÁÇ4—?H î‡:°êá®ô+Ôàõ¬ý½£€¡rŸ: +Ü|ó‘ £‹ãZÐF!ŽTÈŠX¹©Ù\BUE8˜r!¼´Ug׸PL'üFÄ¢«vIašøI!µÈu‹@޽æ”ßB¿@eMˆ¡µ´6Њ¡£ukCòE§Ïzƒ¯M!ÆwŒá`! +{êá| ##ЄV÷ ·l¡™Â¾¬ BÚéªênB`±û†|¼,¥Ayv +B‹ÏdïIº`Ìõ¬3ÐS’ÉE7ÙÑ‚ŽºAUØÏÆF!• ÇÓ@ZÊ®H—A¢´é#iʳ¡ÛƒHæ­fÛaôO6s>·DèáåöK—S©5÷ïá“ôjÌ}ØctÏ3… ··µ~5 ¹ÑÝÏS>UÑc´, +ÛÆ§G˜wtüZ1—Q +j‹…ãá8µ2,´!äYÕüŽZåÓ&Fhؘ«M2UïÔ!5lƒ9å` ˆÝ%Ñ<öúÂV`B•²pÉ'msõ(º=n{ãÓ¸eÔ1§è/A--§áÈùŠîe£Á1ŽÌÂî +¬yàvž£ldÛf¡5 :Ü32e mk«[¢û. +ÓÇವƒ“«Ú‹™hÛ2øœO-3º‹çt=ËWè>z¾¦WU%èÝê äƒ ƒô4áòkÔâô¨û=J3Yø jÛG|v”òãA’"øÖö“&w§gh\¦ŠF¬§#Þ08$jÛî³7kÂvîgˆ’O 7Þ 5_)F5¶Œeãs‡Ýº¬íÊ8h°­ð':©–cw˜R¼´-£ï1ÇÓp#›1½ ÞzðX¡•^„Ê`5Îß±¶¹9î¦ çh^óE=(Ë!Ê É:uÅ O•žˆÈ>âúµmgè.4xàx&ÑFÑq¨Y×Uæ'd[‹Ýª&,£A3æÕøÝõ{œ)£Ýq99¡6ú‹] Ú +ýòòC‰U?8F3KMP‚¯¹tkž0sÈleHÑ“êV +!ðhWëmèhÁhL ­Z5Goìô¸ÿ$‡®ÇR²øþÈ”1KkŒîúfJÜ?Û˜²so5ÖJ9ìFá‘åÜÙŽm'¤0 +y |«Ô°¨p›’õÙ´ †­†¯îÐo¢­7ºCÿ¶Ť0!Ƚ¨(šû'Q6v¢Ðꈭ»îDQe=4£Ø‰B#c|XÕ̯×ð«*Z›ÍO­ß}$Ñ}·)[¶QÊùºíE‘ïþ$mÛ‹JLèR꽨$´îEŸo'¹Á¸î´#À”¥xËv‰-^IE©Õ3÷Œ +ý5ÆžàÂB}[.kOƒw|c‡ð£ÖÆâv "ÑþüA"±-ñrX¨å0ЄºŒ&Ð$TÌ-ÊRX½ü-–ÅìÈÈ¡ƒ*³–(:X«–·‘t–ÎIm¥Žægò§Fá³@¤òáXhŒ#x|ÜCª}Zãh6üœ_:’i³Ðj¦¶ÝÔé\\¢÷G ÊÝòQ &Ü_·ºxî:ò Ù>JѪÞó—Ùe¿–øÝû‹*ͽöc-Åp<ŠNîõGTöÑ9¢¯õK«Å…öû‹*%>kéˆé°ä›ŽÞñ.V”§Þꢻ49eÙÛ÷Ó¦»(8•¥ÁÐ$O]u N©lÑü¥ÕâB{Ñ]½y1dôfm.ºóæ¸óƸóƸóæ¸sæ¸sƸs§ÎwÎwÎwÎwÞwÞwÞèMw—9î.cÜ]û¸ ·5îÂm;8¤\u×ÐÓQ¦u§~iµ¸ÐÖº|.º»Œqw½yÙã.˜ö.ö.ö.˜ö.˜ö.ö.ö.˜ö.ö.ö.˜ö.˜ö.ö.ö.ì]0í]0ì]0ì]0í]0í]0ì]0ì]0í]0ì]0ì]0í]0í]0ì]0ì]8Ø»`Ú»`Ø»`Ø»`Ú»þH¸Õ9^jFKs +‹âæož5ÈÔÅ™Æ.Æ.Æ.c‡þàó«ß¼ä“ÃÎ?(§L¬r½£Á ‹˜º’×utÊ¿ì¬é²¡iYÊ3\—öù(éŒy+9âޝ zþ%œ¸­-ª²1od)Ïp]J :RòEG8Je9Ïp)S2…ùK·éŽg¸. †îÆ|”t‚Á)Ïp)Óü¥}¶¨Ê‚¡;žá²tJ$è$£7å —åÞwÞwÞwÞwÎwÎwÎàÔ™ãÎãÎãΙãΛãÎãνéãî2ÇÝeŒ»kwbG£Kq7÷‚ÎܧŽÄŽFÈÄ¿dÙ¹EUfŒ;±£‘º»Œqw½yÙã.˜ö.ö.ö.˜ö.˜ö.ö.ö.˜ö.ö.ö.˜ö.˜ö.ö.ö.ì]0í]0ì]0ì]0í]0í]0ì]0ì]0í]0ì]0ì]0í]0í]0ì]0ì]8Ø»`Ú»`Ø»`Ø»`Ú;zÕ, +Ö ˆ$…»Éíh¤@ý7Bê­AùUq¦± †± †±û‹v4ôZ¶3îµ5—Û¿bûìiЧs÷‚»™d”b4»Çlê}®ôäæŽøžh`Aap"S—‚ê½—d˜‚¢»\æ&xœeÐJ‡÷ â—ù­íDƒÝòÄ,žÝ¥™” -œõÇ™ï +ùÏ}»«|tÚSë +ôÆÀ2M½õ»’<)ÄÙ:i˜”8Op_"BR£\gi´8ßkø°„Þä€Ýœ´'c*ÌÐ[eYn˜£0 ÷TŪëÒ}¨LuôDµ¡?ŠÀd…Å‘»tÓ\JYæEfàìû®x+ÂÕˆÓt•^Ñ_N¦ÏFÅapD¨éRPX o™‚œñÅFèZ(ÜGU +çg©àãtCÜut9í£¼ŸùªQ8 a„8{Z ¬Ý2¥­Ppí/ +…^Á5¥Î˼èµàe»µS¯ÞÍ„¼UêµÍˆËëD­B¯$£àE¥×¼¹©9ˆØTEÚX­×´Œ+­àüæjIRÁp4Ÿ<·&œÑC™'›V0ð˜dþg¡`¸‹då+Mçf£È«5•IM'ùýR#8µ_§.ë¢iˆüº›…®éˆaÐlM7‚%Î^X5ß$V}¨Â c²c²µPÁ¹østœÅ\ôÑÛH|mÔïò“f³âãý©¤§5ßJÁð:×b¢?_*Þ\lÀãå§ÿùg¯ÿîß° ^p~†J]¾õ:¸Ãb9kk6^-:+¦F«æXæ,Š3y¨!å¤h©ç‰jÅy½Ýö-Þát=ÃH›DÝ© "ðó¸ÈôRÉAX=¼uƒ†ž~Ãoc”bmtL|þ‰¥ëÌFÐãú +‹½Á.¡ƒjiˢØ0¨©ªÍEä¶ä8·÷  Í1^õŽE‹’‚W€™}0Ùüh•6(UOý´$nD—ð–òs m̘½­!m{uÃæÕ2 ¢šuZn4 É#ÍZ9&lp¯Jy F¦¢ÇU±k^n¹mŠ=ØÍÆë;t¾ð˜ eyR Ë›³´@h÷÷ýIRèÉÖóŠÒßë/ÿ@Ê¥>’{K<…çaÓëõ·þm๙cˆ&ûaø÷/"è` "Ðó ­ÓƒÑœó=ö…¦&F WHUõÙoØû°ˆÝ6-裣=j¸Õ®ŸVmg‡±E¢ÙÑŒqö>ìnà_¡w[Æè(A£¥Í7z: Ú XEE„®Ü«-uõU¬š­³¶±úþ¢P`y“QW÷A„ìddzÝwA6Lõõ†R_g xiµÛfõØÆC‹D²Ð@ðÆðj;ÑÏP»«-m[0*G2/%'TQÞzlL‡ #ë‹óȪ8¦ŸE1««Óú¡§}[_s[¯©vªzÚ·í#<óº—ÓÎ_TE!熑qî²kæ#Ám¬¾¿(4‹µè§ù[’Þòý°”G@ÌU{뛟åÒæÚa$ꆹ,ͦñF[ö Ÿ[5Áö{¢ä:#æXãUÄ„ʃ€i‚zá7µï“«hÅ2"7Ê Dl}îŒÏ_ó}ô n#Æq±MÛ†‘~Ð&ÚÑ c «ïÒÃë´2Ý-ç^£bBƒ6r} Ã`Æù X+¬Ãó‰­QÐØ_}k5JỸˆQö9í ¼  wš‘š^ÕÔÛm;cðUl·ÞŸNÚÇî)õÕ§ YbÌà®ês(®ÊRì[ Uà p[QIÚ$tCÈC›Tè×·H¢ù¶mÉãs0Bedrw¾¿ŒþÍj™1ÉŠ,]yg +,ê¦ñáà†Ol£»ª¡0×c]Ò>boÅÃvO9µ{,ïń۪a׃¹(¨ŒfEÉW¿,·_œE;œs«,ئ‚þ +¾Ó :b9‘†}{‘0Jûκ§fB\d1&Ñ! 7Ì3 R5m¹ðÁ²ú%='Q-r™ÅÃ@Ó£a)Û¢…¯nÿíóÊ(íšv]Â9 z­ŽÒÇZÛ5J¹»”Zø§/¾>ÆpWÅG*óð¢.0£._‚.óh*Ô …Ã4÷˜¢Ûƒz*âsõ³q† [ã2&+ +'³¹)Å&­0 œz«…bZ Š š²éª•ù€oK¡j q—¯ÎyìÔdžJS4>,0¦ã©”Z ¥šéZ— ?xj2_Q0äóÝS6·.„Ìñⱡw¼âEÊc àñJ_ö{t… ¢Î¦*-ó´Â+6æ´ÃÔJFMHJ —yƒ7ÔuÛ$9|×brÎ(«bëñÇašyGÖ†w›Rwû'Ñ´‚SrX;áb¯¤ù%3ÃÙ&,+Ú0ß·œlÖbBʽÌÃæ>u&X!~¨†çÛ“\¼Ô·bÄça›7}«b¸ðÄ¢ÇÁ'ƒ†|ƒœ¥–“>yÃùaþx‘(µ…©ªIãv³È¼®µÚƒ!Ù5};aS$ìÀëD )‰¢©ƒ^û¦áŽ”œBCÜÉ3Žz‡Ø9ˆP)xV˜ñ-ä`7-Ø~W'QWÓ¼s˯Šà±5ƒXôѹö˜%Dý.zx8lµ*0ƒn’B›Žª›ªÅä¢/,nš…×Ï`#7±þ0½aúRRcâ1ã%m¢ÏK$ªI!ëqÔ†d°ºB¤Ÿ|Ñ®ˆ±EM‚3Xè&ä¤h(ç¤URzêAß!8V⛲—ƒSÓYs“îçéêNoBŸ´ääL½U*Îeëô ƒø±kªó@¥ÛnèƒÖ0Ãú†"Ÿ( #åa j’ˆ×Î5tÔr¡sm¹v4ÃC<¸cŽmÿ\§ôh±í±—Ûà›?× o¼·ï·ûòcè–j¢ß9œÖÖ¨`ZÿÆ‘Y÷\„±?¶'~kàæ`Jˆfû±ÆŠÑAB‡š=ôaÀwDƒ¢£ƒ„¾Wj=™Ùõ?vé3žè +‰g´ô¹Ç»ÇǼq›¬/®¾ˆ5›iµ³ZSš–¶G  ÖQEùÓ¼÷¡Øƒ‚AÄ âô iÃw:pæî§“©§í{Â6&d-ήy¿uD¹îFìA:°}hZÖ„8N´÷Ý<ž/‚!Y˜z¢ÜÙ7TÜøæÉ/Ë2aøµx³·ÿhCA¿á4sêt¼Ø¼n˜òf·jŽkb‹âÄ,^Ý¥œ íœõªîž{Zœ 9?×O¼Ï'±õíÞJ¸íÎ0|“ú w‡LX¼ä˕ᘃ;ƒ†:wÅsO6Ó°a»ýÒj?äݰáæi¦­šžÜ/,Šmålç^A‡W²¥ljuÜÒD;ƒ ‹ pàÒÆª8¼«-‚W†~`õœ7¶Ã4Ô +ï­/Kqt/kF͆ÕL5ërþ$±|­Nt}+')Æ'¼Æ}\è±yªYoXI€×ýÉ_›t‘4·¹íg¾GpôusŒ4xÒq¬µzÇìšž§ÖFÑãÉ0ñZ×—¡÷§–!%<6p¶rÄÌ2ÔÚ3@Ú5Ç‹ ‹ lJÒQ­‘gÖ&$\«ÝµN‹eª5Ù•ÀC˜*åÛ͹Q¬nGG½…¿k÷ 9YƃMýžÒ„·ž KN67¨í…À©°NÔõ5hìŽÉ°„T9© {"ï ñS‡{y­i-êþŒ§6’ƒüéqò2™ö”v|ÃÆÓÁrYÊ@,Üî@±ÍƒìŽòz:õµ W]\ŠJÄ-Ù<äBKlPw´´¸vxs’·Ù(|þdÕ E~•·ÎóKO4Žhà@½ã©E¿;ÏÝ ƒ¥”ötÅ´íßk²oê,Ó¾o½™K·V … ÂeÞ;eûárñÄëŠÍÕugÖ$g•we>t‚ÃPÐ\(s·?\ïh«®ºÄ†.îƒ6cuE – øš94ØLè…++×Þ“Y"@°e8—µ…o¯lìš}ݤèdžÂäÞ~ù>ýʾ·ì'‹ˆùªZm«‰ ÷©ÕÐóá˜ü„žäÏ”#t§ìƒÀ2»b$§Z‹`$edu~ð\Ó÷»xšU)æ)dì5Kõ}®æÝL“_±¹D•æB“Ñ*±Ö4Ö¾å· +§z^M¨óBrX‚Ö%ª}%ªÐ +´D%¼MßЮm|(Þ0¶õ"¬-B?dj­óó(Í.ì‘pªx)ÇÀ"t&ޝHqïùè_3\qù]¿èÄF9öîxw„¯ïmv=:[ØÁAª¥€ð†±g7ˆu˜Ó®HÖm#çɹßft¤ ·D„7š¹(xÊȦ4çñ!¨úUÁ7¨v£´±=°“0Œ-Hng‰ï{*уâîÍìšï߈¢öƒ˜Ôy-ë÷º¤,k0„xéŒPŠ£,5{&/øØ‰+F­Â–ðT³«ÁÛ fvVÛ˜ºrµ…lÅx (t"ƿ㿔—ßõ”aV³žr“Ù y6É›(~,s†¦ñ0uçéÓȬH‹¤IóšY <7!ÓЫßÍ.ë²³ÜzÜÁ§x¦fó³¡gŒE~ÖckXw0ï J¢ýNË÷Ac½25(÷µ]1á)ºM0ûtæ´`F[Ěɪø}©÷b©§Ã.ù»fßj^u¤xb(òÞ$‰ýšÜRÀÜ$™ª;ÌÕÄ£ø¾– >c¼7Ȩ[<<ËaKqÜÆ}¨ç}€%«ÂñRGÌŸã£ï6ô¡Pˆ-÷m{}Úmö-Vøã¶ÜÄ,1y˜-:éÃy–r–˜4íýYR×zñ‘ô©©-­­^k?ž¶=iÏþ,»ìÜYek€ôCn õHxŽî ëYk.ú4Ø}ñ 5ù:Ò]µå–Ù`ê~(è)¸j¤Ó2žWãU8]ʸgêZlCe¨¦[>rÖX…gªø1êk±Úón›: XÛwtœwŸ—zݸaêZ̪9.·,гxåðP»”|·kç¬Wq-–(e…[®u,–»q,7F.\Àh÷9j4ŒæZÆù)N¦m1uæø›µŸ£Ž§d²'6Òæ´šœ@ÒÓiL‘OzލÖ%©‡'ƒ C1Œlx¹”b ˆEª©¾£Æ.]ïýE ymõ¡Ñ¶†1z^ÇÁO^Û’lØGϾ×ú3Ù5óŠùÄëû‹@79Ý54ø±5{èÊ72ð´RU}¶¡B·Q_ +GY’2jI:Pp¯;õYx"醩>³jæ'ó‰WÕg›œîüØš=ôÉÒgþé<ÛP¡[ÿdžù§óÌ=gîÉñªúl“ó¡Ñó<³5{è“¥Ï.¤:\1K]:m‡Y»Ä­ã¼$ŸïÞ¯½ZU¯5.¡¿&?›«k*BÒ ’]fÕËgjùĦì°]ćB åŒ;hõÔ#ºËü*‹ì° dµz¸SŸ!—tëZ²³ÂÚäCk˜¶ÉJXe6Hö•U/Ÿ©å—²«6ù +ÜõB¬ØÚ´{AwR\)ÊNÚ@ÖgêÃf0£!K Z˜Ï*Ÿ%Ü ÙIV½|¦–\ÊNÚä{(p× ±bkÓîÝIåÙLÚ@ÖgÑ#FCOfR}6“êy&Õ³„$;ɪ—ÏÔòKÙI›|îz!VlmÚ½ ;é~6“6P¬"—2^C:Ê…ì$×­>ƒjiÂÕBœk‰¥É­¡3xiZ!µ4õò™Z>p);i“ï¡ÁM/ÄŠ­M»t'9¿P”´BŸÚøz 0X2XN–F…+¤:ɨ—ÏÔòKÕI«| nz¬˜Ú´{av:Ì;¸ÀºEšê¤ÔþsÃÁ|AzNßäñˆ$-ùO>z‹xýç ¾rDAîòØzuw Æ_‡s#•p›Œx_îàÝÑŒ–Ú«E<Áã„ë¾ÊÒ"†Jm_ßõ£pí×ÂcÏAŽ6b‚4($å}¾Ç„c*/•¨IŒçàÿËtÌ qÁ 'p+·4€D&‚#·‹Â>ïP¥N²Òëݨ“+«\.Èå]{'ù ¸¬à? Ê–ƒPŸT{,ØCˆFXè§÷ M8Œúìeå\ÖK’ïIwUÀ$ €™Å䣷“ +(ÂK'ÎÎBßL€”×*BáêÇqÚšDgcU0ÿùömÜÁaL©\³"ž¸µï¯›Á&ØzÀÕS †×À ‚Tq<²;—xžùÏ—ëc¼b‹âî.¤.¸þnPòD ^A:ã]Lïûq"Äe‚PûÑ2æIé%EO8§f®2ëãÉàí/DÔV…¬{[ )¾á jR‡Ù8d®¦a |t0åw¡Ñ(Ü/(U È8<—`ÐN˜Z±¨Uª¥¡w)ß +>:˜ÝíÌFÝltc…!C7U¶‰>¨ +;õBï$_ýðÙA»î£ƒ×¡“àiþÓ Y +pÕ̤¶ësriuÒ”Ïê$çãv'AV¿+÷“q6ACôAÍPØ©¨“ò“™äÓ“™ÔÀÓLjБÓôLÂtÖL:ΤɥÙIùÉLòù8“t/ùÙ8Ëçñ™3éØ ÔIáÙL +ÏfR8Ï$æÔ?“П5Î3)<›IáÙLŠç™Ïã%>gñ<>ãy&z:éٚ䟭Iþ¼&ùóšäŸ­Iþ¼&ùóšäŸ­IþÙšäÏk’?¯IþÙšäÏk’?¯IÇ^èäž­IîÙšäÎk’;¯IîÙšäÎk’;¯IîÙšäž­Iî¼&¹óšäž­Iî¼&¹óštì…¿4E¬ >Ô>Wñ*ýf[W¿pÝójÃÚ70¼¥¾ê¶š¡²ÇVb,†À¸E'bè“áµ.ˆÇ B¦ž”ÀªWàý‹Eªƒíb :†2Ž:äxDpÀD÷æw +Âíÿ³ƒ)ÝÅ5È(%A¶4øÂ¼nù  ˆN,XDÓý žƒ·ûðE{ßêû"´Ã|­õp¿øµ¾)@Ö×ÁõH¡)“H»þ½èƵQÚýT®ù©Û?+è#~Yo*%çC»dí¬Ên£üôiŸ^¢w?;˜\Ã¥Ðw"ʰu}cÞ¹5#©¥â!¤KBÀ.{©¥[ 9ÐB·kpF)Òù›lNé ¡ÖRËÞÉàËåп#½2&Ôdi½†ž1AEÝ(¶¢nNä¡Ï]’ªc÷K)lgÑ4¤ñ)8É +çú¹§ µv¯v§‹Ä <+­ú‡d`Ýg:Ç8o—šÀ$~øß*’u?0hXªˆùÕüÂI˜÷ØàÍý:·ÄÏ Ëñ ˆQáêv¢ÃÕ!"»×³?l—|îÑ>àMNô㇎|ðeIŠ·ö—[½fÑv¼+ +ËK½÷F¶*’%>šC•ZEnÐvxd‘ÄØ ñN=ÚõŽÔüË÷w +5TC̘*=våu$ܯ‚ȾÚ@Ö)¤A–‰´ ¦Ìç~ +)Õ째6Êlì'»Þ‘š?p)ûi“Ov“¡âÄÒå©t¥• ì¢ du&2{%S>󳩔ÏS)ŸÜ ÙEv½#5àRvÑ&ßC›ZˆK—§>Ð]TžÍ¢ du–ã,ªÏfQ}6‹êyÝg7Hv‘]ïH͸”]´É'»ÈP qbéòÔO?;xáZ½ÈïñµêaƒÐägв¹7FV¨¦­fÌZÆj.c n³apc,GC sÃxØpÝbÖ;R+.ß_´—1F Õ3¦Jñ>‚‰#n.cC;†é:Ýíõ@ÌeŒAc2¸M‰Á‰± Ìel¨Æ®w¤V\Ê~2—±j!N,]žú@w‘¹Œ Ŧw¨s·×ŒXòh.c §’± Ìel(Æ®w¤V\Ê.2—17µ'–.O} »È\Ɔb Ó;Ô¹Ûë˜ËƒOf‘±° NŒåhH`.cC1v½#µràRv‘¹Œ ÐP qbéòÔÿŸË˜ëν¯ß’_âÈ|*4@°qÀ+Š"nÆ%ÖÛCµüÍ‹g ¢#žÒ¨k+¾Ì§‚($•º¾FWm<žêêñ´ý´ ¢ +a”6Q­ô¶åÇLôW6x‚I£Ÿ£¦ðç |šÂWмf£7…MÙPï= W™ "¶ðÙFU˜ƒhÅ8Õ¸<38Š$ þFCB|oí•‚ZÅd0?<×åm¨¿(ؾ-û±G óúë[Ð@ÏÿlN†©yspL4,ÙªåZ1FÒ†v¾iB€­ESކãÔ¬( ÊùBRYù&ù뼿탋–;œ†7£Ö@òmŽÅ¿µ”ì!Æ$ý…€ðeJßmŠ4®ž‚p9X—¡Ãí>GR. Oyž£Ö=ky³7þÆ6£÷ûgGý,‚oà}/j«owILÎìTc¦a=¢6°À‰°/˜y…ál,ý]¥Y³@Z(„R,*Œ Ü“ƒ©ÌÅ¢"¢F±‡w e14¹gR‡üÚ}Š¡¶ æÓPzþ:A¿¼7—ä<QÑ)F!ãu^žèN 1Mý¤^¥b.ܧðˆ*]±ÞQ˜mÛªxSÚG‹à¹Oœ†fŠM©UFÀ0V¦¡Æ,¥2—a/)‚K¢Žö 9 |:`õÖïô±fO¹‘ÖÌt§s€-<8ĤÔm¸W~ ŸÍw"+x³gcî]#©InKRÄݶb4*†ÿ²j¶^6Á6Nàzig•õWÓòrRj`'X–TtŒ™Sa¢oN–aÛ ¦-« sš8D×”,aàï¥)Rn\¶UØK…Ñ èíš=`ÝptPr}¸Q×\ÔjOŸ’ ÈNî•d3Іçà*”$ :^³õ ÔÚúAú¼`m_híüZ»¯ûKÔÚú͆Ÿ‚ÖÆ¥yŽZÛÂ³Ž·maý\Ýá…ˆïûeH£-£ѽ¥ìNŸ¡Œš]9¿£M4ŽÏ”6$Èÿ² fÝ·Ô÷—¨ÉóQW»ZïÒŶŒ±-6?n÷©+EB4¶¾±`*œÃÖ·¡}›ºï|J9›[_Ƭ•„Ñ}ƒ7 îûBæÔÚQ²Œû^”u³ïaY«Öæ7Aô"Üdì5¡·cîÝžôÀzª±m±¤Vi^ÑGG{¨Løšöʸ-˜ÄØÕ¡$·µW$ýÐ2lÔœ› ßÓamRº'AiŽ?Á“©‚{ñË!ìÞ0ëÁ§SyÖ8u÷3™Ø‡ÛäÚ¦SL£ÞÐŽAmBÆ0ep8“Ú>Ü&—Ö0ÒYõH%;±˜ƒÔƒ+=fb‚E ©o +ÀãCÃr‰×ýâã¹B,<¸¬îWE=ù,£ z_8ø—p€„gÞ¢E.ÚN„=§ã¨¶•š³å% +¶HQbÌÓŠáLŸR5§Ô;E-¼v=Fp +«#äá€lBjèÄ|ßJ;°Oá^ô˜ +f!P¿Ì®¿Y–-r™¥GnR1…]Ì“¥G–b¯ÉRïfê±´Mup«¡óë +©Ë=ÖPÖNmKC½Ó¢Çzw)yƒçRNªE.³ô(ÐM*¦°kƒy²ôÈRì5Yê¢À,=†«@Ž’¢õ¥xíÆBã ŒÆ6u¯}0I¡T"<Ñô—‹øÂ×7nmà*·¾i¹1ÔÇÜïõ¦¬;5†LÝExèê¢;(MA˜fHÞ"Þq +­´:Í8¯êƒS~¦!™*f"V-r™¥AnB1…]Ì“¥D–¨9¥Þ) +̜˼¶\ßù-k‹/À¢öêÓ:ƒßCt^ÙóQ¦×þ%¯{ËŒ/pV¤×˜ bÞ¸(×–ö}Éú¢äa–©µDþrJÇ-Š2¢½®R?l!w)Øê²Ôl§¥~زó/y%Ø[fLêG”NifËBêɃÒÏäVü’¥ãE™Ò¯R?lùv)Øš²Ôl¥~Øbó/ÙÂï-3&õ#J§4³e!õäAégr+~ÉÒq‹¢LêGØx¡6n›l-§Ìl]…rØóï¦íÞ[ÐŒ(bÌVYÚI]ªer)~7eâÖ¸Hé„m·Ô [ª}¶~,-ÛK©¶°üK¶È{ËŒI͈Ò)ÌlYÈú}`OjT M¨ ’)B¢Ì«½ÞÚD„(÷óˆ÷UR‚cBW¢dmÑjA²ˆN™÷†…>–È2Á+ÛË/Z„œ Ö;!\›ã¡À÷³¡ ¶ +–o8#¿£æ k1\Ç J¢ÌP#£»´L‰µÃ¼I=²4üK–zoYhÄÒ#Ę)˜§Qê1`*á ˆS[³¥Œ€#C0a0l–UÑi2LJ¢lW£@7a¥©Á›P£†9…Þf}˜ƒ|3ñF΂”ÍgG=äÿn·ÆJ­}fCô^(Ko>Ï»P5³Wˆfv‰Þ›árù®ŠÎ(ºáÀnÍ—8ÀZq ¦ó« ¹K®,’¥1DÓ¼ fTz0è hã“)8¸Â¥_D+.kSp0Ö“Çïz#ÂÐ0Ö„wFM¸\òEE–†'¸KÌdvE1ƒ–ŠY4£æT…Aqb¶’áä¶ §!,­Y^Ï + K¢úîïæ¿ûW)*{0DáÃýã +ÑÂÒ–EoVlS¹©À™'†›™\÷ãE¢˜¸s€˜ã}RÌxÏ=?¥¢`uƒ†ÓÊhTª1èMhe”Æuý£ÆP9¢èM·«âÌ]_ÃP]5 ÖÈRzˆ‚E8³fÌ”Р81KéÝ”ÀwÝ1¯–ÖYJ£æÔŽA‘1Sﳑö¨‹:zég‹ƒWŽ<Àƒ˜P ý oHQ›†j¢œYpÆ»!¸fçžÉتv÷¤a± Y©}èD‘Õz6h¢ÖL18oŽz…™ÜüÐ$ÙŒjC#±©¬•É®èö%Ös¶XŠnàíïbÉ~ƒßRM–ÆàÔo™wM·QöÖ–‡`Ô Wës¸Þ©1dÅBà.ü¤f¨lpiªzHgÔ:1T=ÕuP5\‭ëžÊ¨[ú@Ñ…*W­QÈi˜a/G1:=oB7 ?áá6Òƒ[5[D2) S±Ê «t0ÐQøZÍó¾'c«ƒ"^Y5±ˆ¤K’ÙÄv‡œfÝ¡ ‹èÀ6vÕ·–+È 2JõÞ¯z™%ˆ]·¼ê§Ö ¦ToÕœ +4(ÌAÔnv)KZõpë‚rmáÒ5&Z~«,˜R¼UshÇ¢8±•×Eï°¹ñƳEé=@,£eš ŽÚ†`Í(8eÙ0¥w«æÐžEqbà_%Ø•Þ1İóŒJŠW3¦2 –äuŔޭšS;ʼn­¼.zO¬.o’fí´ÛõÉQÂÏw§8²l˜Ò»UshÏ¢8± Û-½9 Q]‚v ŠWª,y“× Sz·jN[bPœš[y]ôž”æy­ô_Ò³O0<sYà“þ,›²l˜Ò»UshÏ¢81à5.>)ŒB¯,f® ˆGß:óóäuÔޭšS;ʼn­¼.z¯îM,sä¾7kCjÌ»*WÛÉQ§Ÿ$,˜eÔޭšC{ʼnµDq:¸¹X”Û÷aL"‰žìiðg¬jJŽ"¥eñ»¹»0šêYZ”{ƒã´DJ¹w]¢Ée¥}Žc:K±Q‘R¥øÝЃÕìÄ â¼tžW¼ã² “Û¡éãËû'*R¿›rÍNlehÑ ƒ˜ð=©4×X’ŒÒ<¯.+Õ2­;ñ˹I0Zf̽xð£·×Ýv$.¨íÄUà5ìźLo'ŒšSjA‰5A<ޮ׿{½^ÿùÕ½þiºÂçbpì#5ÝFW`õ7͹Ç8œFÁúC¸Úô—ᘺºbìQ!ÆÏÇŸ¹¡þä¿|÷ÛïÿÛßýî‡ï|ùí¿|÷¯ß¿~÷ûßÿáßýñûÿÓ×ßþøý¿üñ?~ÿú/ÿû‚’Veüü'?ùÅ?üÇ—ÿU)U endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 26 0 obj <> endobj 27 0 obj <> endobj 46 0 obj <> endobj 47 0 obj <> endobj 57 0 obj [/View/Design] endobj 58 0 obj <>>> endobj 55 0 obj [/View/Design] endobj 56 0 obj <>>> endobj 37 0 obj [/View/Design] endobj 38 0 obj <>>> endobj 35 0 obj [/View/Design] endobj 36 0 obj <>>> endobj 17 0 obj [/View/Design] endobj 18 0 obj <>>> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 68 0 obj [67 0 R 66 0 R] endobj 85 0 obj <> endobj xref 0 86 0000000004 65535 f +0000000016 00000 n +0000000241 00000 n +0000010025 00000 n +0000000007 00000 f +0000217976 00000 n +0000218045 00000 n +0000000009 00000 f +0000010076 00000 n +0000000010 00000 f +0000000011 00000 f +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000019 00000 f +0000218965 00000 n +0000218996 00000 n +0000218849 00000 n +0000218880 00000 n +0000000020 00000 f +0000000021 00000 f +0000000022 00000 f +0000000023 00000 f +0000000024 00000 f +0000000025 00000 f +0000000028 00000 f +0000218111 00000 n +0000218181 00000 n +0000000029 00000 f +0000000030 00000 f +0000000031 00000 f +0000000032 00000 f +0000000033 00000 f +0000000034 00000 f +0000000039 00000 f +0000218733 00000 n +0000218764 00000 n +0000218617 00000 n +0000218648 00000 n +0000000040 00000 f +0000000041 00000 f +0000000042 00000 f +0000000043 00000 f +0000000044 00000 f +0000000045 00000 f +0000000052 00000 f +0000218248 00000 n +0000218318 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000218501 00000 n +0000218532 00000 n +0000218385 00000 n +0000218416 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000052021 00000 n +0000052091 00000 n +0000219081 00000 n +0000010464 00000 n +0000052503 00000 n +0000052390 00000 n +0000050958 00000 n +0000051460 00000 n +0000051508 00000 n +0000052274 00000 n +0000052305 00000 n +0000052158 00000 n +0000052189 00000 n +0000052577 00000 n +0000052795 00000 n +0000054300 00000 n +0000056312 00000 n +0000121900 00000 n +0000187488 00000 n +0000219113 00000 n +trailer <<8C6AA3A1E80848BE8C37D676D821F01F>]>> startxref 219321 %%EOF \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/panel/plaits_v50.dwg b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/panel/plaits_v50.dwg new file mode 100644 index 00000000..9ab8b78b Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/panel/plaits_v50.dwg differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/pcb/plaits_v50.brd b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/pcb/plaits_v50.brd new file mode 100644 index 00000000..690b0460 Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/pcb/plaits_v50.brd differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/pcb/plaits_v50.sch b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/pcb/plaits_v50.sch new file mode 100644 index 00000000..0f4db978 Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/plaits/hardware_design/pcb/plaits_v50.sch differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/makefile b/plugins/community/repos/AudibleInstruments/eurorack/plaits/makefile new file mode 100644 index 00000000..3e025f3c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/makefile @@ -0,0 +1,61 @@ +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. + +# System specifications +F_CRYSTAL = 8000000L +F_CPU = 72000000L +SYSCLOCK = SYSCLK_FREQ_72MHz +FAMILY = f37x +# USB = enabled + +APPLICATION_LARGE = TRUE +BOOTLOADER = plaits_bootloader + +# Prefered upload command +UPLOAD_COMMAND = upload_combo_jtag_erase_first + +# Packages to build +TARGET = plaits +PACKAGES = plaits \ + plaits/drivers \ + plaits/dsp \ + plaits/dsp/fx \ + plaits/dsp/drum_modelling \ + plaits/dsp/engine \ + plaits/dsp/physical_modelling \ + plaits/dsp/speech \ + stmlib/dsp \ + stmlib/utils \ + stmlib/system +RESOURCES = plaits/resources + +TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ + +include stmlib/makefile.inc + +# Rule for building the firmware update file +wav: $(TARGET_BIN) + python stm_audio_bootloader/qpsk/encoder.py \ + -t stm32f3 -k -s 48000 -b 12000 -c 6000 -p 256 \ + $(TARGET_BIN) diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/plaits.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/plaits.cc new file mode 100644 index 00000000..3c6ab769 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/plaits.cc @@ -0,0 +1,144 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. + +#include + +#include "plaits/drivers/audio_dac.h" +#include "plaits/drivers/debug_pin.h" +#include "plaits/drivers/debug_port.h" + +#include "plaits/dsp/dsp.h" +#include "plaits/dsp/voice.h" +#include "plaits/settings.h" +#include "plaits/ui.h" + +using namespace plaits; +using namespace stmlib; + +// #define PROFILE_INTERRUPT 1 + +const bool test_adc_noise = false; + +AudioDac audio_dac; +DebugPort debug_port; +Modulations modulations; +Patch patch; +Settings settings; +Ui ui; +Voice voice; + +char shared_buffer[16384]; +uint32_t test_ramp; + +// Default interrupt handlers. +extern "C" { + +void NMI_Handler() { } +void HardFault_Handler() { while (1); } +void MemManage_Handler() { while (1); } +void BusFault_Handler() { while (1); } +void UsageFault_Handler() { while (1); } +void SVC_Handler() { } +void DebugMon_Handler() { } +void PendSV_Handler() { } +void __cxa_pure_virtual() { while (1); } + +} + +void FillBuffer(AudioDac::Frame* output, size_t size) { +#ifdef PROFILE_INTERRUPT + TIC +#endif // PROFILE_INTERRUPT + + IWDG_ReloadCounter(); + + ui.Poll(); + + if (test_adc_noise) { + static float note_lp = 0.0f; + float note = modulations.note; + ONE_POLE(note_lp, note, 0.0001f); + float cents = (note - note_lp) * 100.0f; + CONSTRAIN(cents, -8.0f, +8.0f); + while (size--) { + output->r = output->l = static_cast(cents * 4040.0f); + ++output; + } + } else if (ui.test_mode()) { + // 100 Hz ascending and descending ramps. + while (size--) { + output->l = ~test_ramp >> 16; + output->r = test_ramp >> 16; + test_ramp += 8947848; + ++output; + } + } else { + voice.Render(patch, modulations, (Voice::Frame*)(output), size); + ui.set_active_engine(voice.active_engine()); + } + + if (debug_port.readable()) { + uint8_t command = debug_port.Read(); + uint8_t response = ui.HandleFactoryTestingRequest(command); + debug_port.Write(response); + } + +#ifdef PROFILE_INTERRUPT + TOC +#endif // PROFILE_INTERRUPT +} + +void Init() { + NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); + IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); + IWDG_SetPrescaler(IWDG_Prescaler_16); + + BufferAllocator allocator(shared_buffer, 16384); + voice.Init(&allocator); + + volatile size_t counter = 1000000; + while (counter--); + + bool freshly_baked = !settings.Init(); + + if (freshly_baked) { +#ifdef PROFILE_INTERRUPT + DebugPin::Init(); +#else + debug_port.Init(); +#endif // PROFILE_INTERRUPT + } + + ui.Init(&patch, &modulations, &settings); + + audio_dac.Init(48000, kBlockSize); + + audio_dac.Start(&FillBuffer); + IWDG_Enable(); +} + +int main(void) { + Init(); + while (1) { } +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/pot_controller.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/pot_controller.h new file mode 100644 index 00000000..17d5a28d --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/pot_controller.h @@ -0,0 +1,171 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Handles the "hold button to tweak a hidden parameter" behaviour of pots. +// A pot can be in 4 states: +// - POT_STATE_TRACKING: the main parameter tracks the position of the pot. +// - POT_STATE_LOCKING: the main parameter no longer tracks the position of +// the pot. We wait for the pot to move further from its original position +// to start modifying the hidden parameter. +// - POT_STATE_HIDDEN_PARAMETER: the hidden parameter tracks the position of +// the pot. +// - POT_STATE_CATCHING_UP: the pot adjusts the main parameter in a relative +// way, until the position of the pot and the value of the parameter match +// again. + +#ifndef PLAITS_POT_CONTROLLER_H_ +#define PLAITS_POT_CONTROLLER_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/dsp/dsp.h" + +namespace plaits { + +enum PotState { + POT_STATE_TRACKING, + POT_STATE_LOCKING, + POT_STATE_HIDDEN_PARAMETER, + POT_STATE_CATCHING_UP +}; + +class PotController { + public: + PotController() { } + ~PotController() { } + + inline void Init( + float* main_parameter, + float* hidden_parameter, + float scale, + float offset) { + state_ = POT_STATE_TRACKING; + was_catching_up_ = false; + + main_parameter_ = main_parameter; + hidden_parameter_ = hidden_parameter; + + value_ = 0.0f; + stored_value_ = 0.0f; + previous_value_ = 0.0f; + scale_ = scale; + offset_ = offset; + } + + inline void Lock() { + if (state_ == POT_STATE_LOCKING || state_ == POT_STATE_HIDDEN_PARAMETER) { + return; + } + if (hidden_parameter_) { + was_catching_up_ = state_ == POT_STATE_CATCHING_UP; + state_ = POT_STATE_LOCKING; + } + } + + inline bool editing_hidden_parameter() const { + return state_ == POT_STATE_HIDDEN_PARAMETER; + } + + inline void Unlock() { + if (state_ == POT_STATE_HIDDEN_PARAMETER || was_catching_up_) { + state_ = POT_STATE_CATCHING_UP; + } else { + state_ = POT_STATE_TRACKING; + } + } + + inline void Realign() { + state_ = POT_STATE_TRACKING; + } + + inline void ProcessControlRate(float adc_value) { + ONE_POLE(value_, adc_value, 0.01f); + if (state_ == POT_STATE_TRACKING) { + *main_parameter_ = value_ * scale_ + offset_; + } + } + + inline void ProcessUIRate() { + switch (state_) { + case POT_STATE_TRACKING: + previous_value_ = value_; + break; + + case POT_STATE_LOCKING: + if (fabsf(value_ - previous_value_) > 0.03f) { + stored_value_ = previous_value_; + *hidden_parameter_ = value_; + state_ = POT_STATE_HIDDEN_PARAMETER; + previous_value_ = value_; + } + break; + + case POT_STATE_HIDDEN_PARAMETER: + *hidden_parameter_ = value_; + previous_value_ = value_; + break; + + case POT_STATE_CATCHING_UP: + { + if (fabsf(value_ - previous_value_) > 0.005f) { + float delta = value_ - previous_value_; + + float skew_ratio = delta > 0.0f + ? (1.001f - stored_value_) / (1.001f - previous_value_) + : (0.001f + stored_value_) / (0.001f + previous_value_); + CONSTRAIN(skew_ratio, 0.1f, 10.0f); + + stored_value_ += skew_ratio * delta; + CONSTRAIN(stored_value_, 0.0f, 1.0f); + + if (fabsf(stored_value_ - value_) < 0.005f) { + state_ = POT_STATE_TRACKING; + } + previous_value_ = value_; + *main_parameter_ = stored_value_ * scale_ + offset_; + } + } + break; + } + } + + private: + PotState state_; + bool was_catching_up_; + + float* main_parameter_; + float* hidden_parameter_; + float value_; + float stored_value_; + float previous_value_; + float scale_; + float offset_; + + DISALLOW_COPY_AND_ASSIGN(PotController); +}; + +} // namespace plaits + +#endif // PLAITS_POT_CONTROLLER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources.cc new file mode 100644 index 00000000..f02299df --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources.cc @@ -0,0 +1,13757 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources + + +#include "plaits/resources.h" + +namespace plaits { + +const float lut_sine[] = { + 0.000000000e+00, 6.135884649e-03, 1.227153829e-02, 1.840672991e-02, + 2.454122852e-02, 3.067480318e-02, 3.680722294e-02, 4.293825693e-02, + 4.906767433e-02, 5.519524435e-02, 6.132073630e-02, 6.744391956e-02, + 7.356456360e-02, 7.968243797e-02, 8.579731234e-02, 9.190895650e-02, + 9.801714033e-02, 1.041216339e-01, 1.102222073e-01, 1.163186309e-01, + 1.224106752e-01, 1.284981108e-01, 1.345807085e-01, 1.406582393e-01, + 1.467304745e-01, 1.527971853e-01, 1.588581433e-01, 1.649131205e-01, + 1.709618888e-01, 1.770042204e-01, 1.830398880e-01, 1.890686641e-01, + 1.950903220e-01, 2.011046348e-01, 2.071113762e-01, 2.131103199e-01, + 2.191012402e-01, 2.250839114e-01, 2.310581083e-01, 2.370236060e-01, + 2.429801799e-01, 2.489276057e-01, 2.548656596e-01, 2.607941179e-01, + 2.667127575e-01, 2.726213554e-01, 2.785196894e-01, 2.844075372e-01, + 2.902846773e-01, 2.961508882e-01, 3.020059493e-01, 3.078496400e-01, + 3.136817404e-01, 3.195020308e-01, 3.253102922e-01, 3.311063058e-01, + 3.368898534e-01, 3.426607173e-01, 3.484186802e-01, 3.541635254e-01, + 3.598950365e-01, 3.656129978e-01, 3.713171940e-01, 3.770074102e-01, + 3.826834324e-01, 3.883450467e-01, 3.939920401e-01, 3.996241998e-01, + 4.052413140e-01, 4.108431711e-01, 4.164295601e-01, 4.220002708e-01, + 4.275550934e-01, 4.330938189e-01, 4.386162385e-01, 4.441221446e-01, + 4.496113297e-01, 4.550835871e-01, 4.605387110e-01, 4.659764958e-01, + 4.713967368e-01, 4.767992301e-01, 4.821837721e-01, 4.875501601e-01, + 4.928981922e-01, 4.982276670e-01, 5.035383837e-01, 5.088301425e-01, + 5.141027442e-01, 5.193559902e-01, 5.245896827e-01, 5.298036247e-01, + 5.349976199e-01, 5.401714727e-01, 5.453249884e-01, 5.504579729e-01, + 5.555702330e-01, 5.606615762e-01, 5.657318108e-01, 5.707807459e-01, + 5.758081914e-01, 5.808139581e-01, 5.857978575e-01, 5.907597019e-01, + 5.956993045e-01, 6.006164794e-01, 6.055110414e-01, 6.103828063e-01, + 6.152315906e-01, 6.200572118e-01, 6.248594881e-01, 6.296382389e-01, + 6.343932842e-01, 6.391244449e-01, 6.438315429e-01, 6.485144010e-01, + 6.531728430e-01, 6.578066933e-01, 6.624157776e-01, 6.669999223e-01, + 6.715589548e-01, 6.760927036e-01, 6.806009978e-01, 6.850836678e-01, + 6.895405447e-01, 6.939714609e-01, 6.983762494e-01, 7.027547445e-01, + 7.071067812e-01, 7.114321957e-01, 7.157308253e-01, 7.200025080e-01, + 7.242470830e-01, 7.284643904e-01, 7.326542717e-01, 7.368165689e-01, + 7.409511254e-01, 7.450577854e-01, 7.491363945e-01, 7.531867990e-01, + 7.572088465e-01, 7.612023855e-01, 7.651672656e-01, 7.691033376e-01, + 7.730104534e-01, 7.768884657e-01, 7.807372286e-01, 7.845565972e-01, + 7.883464276e-01, 7.921065773e-01, 7.958369046e-01, 7.995372691e-01, + 8.032075315e-01, 8.068475535e-01, 8.104571983e-01, 8.140363297e-01, + 8.175848132e-01, 8.211025150e-01, 8.245893028e-01, 8.280450453e-01, + 8.314696123e-01, 8.348628750e-01, 8.382247056e-01, 8.415549774e-01, + 8.448535652e-01, 8.481203448e-01, 8.513551931e-01, 8.545579884e-01, + 8.577286100e-01, 8.608669386e-01, 8.639728561e-01, 8.670462455e-01, + 8.700869911e-01, 8.730949784e-01, 8.760700942e-01, 8.790122264e-01, + 8.819212643e-01, 8.847970984e-01, 8.876396204e-01, 8.904487232e-01, + 8.932243012e-01, 8.959662498e-01, 8.986744657e-01, 9.013488470e-01, + 9.039892931e-01, 9.065957045e-01, 9.091679831e-01, 9.117060320e-01, + 9.142097557e-01, 9.166790599e-01, 9.191138517e-01, 9.215140393e-01, + 9.238795325e-01, 9.262102421e-01, 9.285060805e-01, 9.307669611e-01, + 9.329927988e-01, 9.351835099e-01, 9.373390119e-01, 9.394592236e-01, + 9.415440652e-01, 9.435934582e-01, 9.456073254e-01, 9.475855910e-01, + 9.495281806e-01, 9.514350210e-01, 9.533060404e-01, 9.551411683e-01, + 9.569403357e-01, 9.587034749e-01, 9.604305194e-01, 9.621214043e-01, + 9.637760658e-01, 9.653944417e-01, 9.669764710e-01, 9.685220943e-01, + 9.700312532e-01, 9.715038910e-01, 9.729399522e-01, 9.743393828e-01, + 9.757021300e-01, 9.770281427e-01, 9.783173707e-01, 9.795697657e-01, + 9.807852804e-01, 9.819638691e-01, 9.831054874e-01, 9.842100924e-01, + 9.852776424e-01, 9.863080972e-01, 9.873014182e-01, 9.882575677e-01, + 9.891765100e-01, 9.900582103e-01, 9.909026354e-01, 9.917097537e-01, + 9.924795346e-01, 9.932119492e-01, 9.939069700e-01, 9.945645707e-01, + 9.951847267e-01, 9.957674145e-01, 9.963126122e-01, 9.968202993e-01, + 9.972904567e-01, 9.977230666e-01, 9.981181129e-01, 9.984755806e-01, + 9.987954562e-01, 9.990777278e-01, 9.993223846e-01, 9.995294175e-01, + 9.996988187e-01, 9.998305818e-01, 9.999247018e-01, 9.999811753e-01, + 1.000000000e+00, 9.999811753e-01, 9.999247018e-01, 9.998305818e-01, + 9.996988187e-01, 9.995294175e-01, 9.993223846e-01, 9.990777278e-01, + 9.987954562e-01, 9.984755806e-01, 9.981181129e-01, 9.977230666e-01, + 9.972904567e-01, 9.968202993e-01, 9.963126122e-01, 9.957674145e-01, + 9.951847267e-01, 9.945645707e-01, 9.939069700e-01, 9.932119492e-01, + 9.924795346e-01, 9.917097537e-01, 9.909026354e-01, 9.900582103e-01, + 9.891765100e-01, 9.882575677e-01, 9.873014182e-01, 9.863080972e-01, + 9.852776424e-01, 9.842100924e-01, 9.831054874e-01, 9.819638691e-01, + 9.807852804e-01, 9.795697657e-01, 9.783173707e-01, 9.770281427e-01, + 9.757021300e-01, 9.743393828e-01, 9.729399522e-01, 9.715038910e-01, + 9.700312532e-01, 9.685220943e-01, 9.669764710e-01, 9.653944417e-01, + 9.637760658e-01, 9.621214043e-01, 9.604305194e-01, 9.587034749e-01, + 9.569403357e-01, 9.551411683e-01, 9.533060404e-01, 9.514350210e-01, + 9.495281806e-01, 9.475855910e-01, 9.456073254e-01, 9.435934582e-01, + 9.415440652e-01, 9.394592236e-01, 9.373390119e-01, 9.351835099e-01, + 9.329927988e-01, 9.307669611e-01, 9.285060805e-01, 9.262102421e-01, + 9.238795325e-01, 9.215140393e-01, 9.191138517e-01, 9.166790599e-01, + 9.142097557e-01, 9.117060320e-01, 9.091679831e-01, 9.065957045e-01, + 9.039892931e-01, 9.013488470e-01, 8.986744657e-01, 8.959662498e-01, + 8.932243012e-01, 8.904487232e-01, 8.876396204e-01, 8.847970984e-01, + 8.819212643e-01, 8.790122264e-01, 8.760700942e-01, 8.730949784e-01, + 8.700869911e-01, 8.670462455e-01, 8.639728561e-01, 8.608669386e-01, + 8.577286100e-01, 8.545579884e-01, 8.513551931e-01, 8.481203448e-01, + 8.448535652e-01, 8.415549774e-01, 8.382247056e-01, 8.348628750e-01, + 8.314696123e-01, 8.280450453e-01, 8.245893028e-01, 8.211025150e-01, + 8.175848132e-01, 8.140363297e-01, 8.104571983e-01, 8.068475535e-01, + 8.032075315e-01, 7.995372691e-01, 7.958369046e-01, 7.921065773e-01, + 7.883464276e-01, 7.845565972e-01, 7.807372286e-01, 7.768884657e-01, + 7.730104534e-01, 7.691033376e-01, 7.651672656e-01, 7.612023855e-01, + 7.572088465e-01, 7.531867990e-01, 7.491363945e-01, 7.450577854e-01, + 7.409511254e-01, 7.368165689e-01, 7.326542717e-01, 7.284643904e-01, + 7.242470830e-01, 7.200025080e-01, 7.157308253e-01, 7.114321957e-01, + 7.071067812e-01, 7.027547445e-01, 6.983762494e-01, 6.939714609e-01, + 6.895405447e-01, 6.850836678e-01, 6.806009978e-01, 6.760927036e-01, + 6.715589548e-01, 6.669999223e-01, 6.624157776e-01, 6.578066933e-01, + 6.531728430e-01, 6.485144010e-01, 6.438315429e-01, 6.391244449e-01, + 6.343932842e-01, 6.296382389e-01, 6.248594881e-01, 6.200572118e-01, + 6.152315906e-01, 6.103828063e-01, 6.055110414e-01, 6.006164794e-01, + 5.956993045e-01, 5.907597019e-01, 5.857978575e-01, 5.808139581e-01, + 5.758081914e-01, 5.707807459e-01, 5.657318108e-01, 5.606615762e-01, + 5.555702330e-01, 5.504579729e-01, 5.453249884e-01, 5.401714727e-01, + 5.349976199e-01, 5.298036247e-01, 5.245896827e-01, 5.193559902e-01, + 5.141027442e-01, 5.088301425e-01, 5.035383837e-01, 4.982276670e-01, + 4.928981922e-01, 4.875501601e-01, 4.821837721e-01, 4.767992301e-01, + 4.713967368e-01, 4.659764958e-01, 4.605387110e-01, 4.550835871e-01, + 4.496113297e-01, 4.441221446e-01, 4.386162385e-01, 4.330938189e-01, + 4.275550934e-01, 4.220002708e-01, 4.164295601e-01, 4.108431711e-01, + 4.052413140e-01, 3.996241998e-01, 3.939920401e-01, 3.883450467e-01, + 3.826834324e-01, 3.770074102e-01, 3.713171940e-01, 3.656129978e-01, + 3.598950365e-01, 3.541635254e-01, 3.484186802e-01, 3.426607173e-01, + 3.368898534e-01, 3.311063058e-01, 3.253102922e-01, 3.195020308e-01, + 3.136817404e-01, 3.078496400e-01, 3.020059493e-01, 2.961508882e-01, + 2.902846773e-01, 2.844075372e-01, 2.785196894e-01, 2.726213554e-01, + 2.667127575e-01, 2.607941179e-01, 2.548656596e-01, 2.489276057e-01, + 2.429801799e-01, 2.370236060e-01, 2.310581083e-01, 2.250839114e-01, + 2.191012402e-01, 2.131103199e-01, 2.071113762e-01, 2.011046348e-01, + 1.950903220e-01, 1.890686641e-01, 1.830398880e-01, 1.770042204e-01, + 1.709618888e-01, 1.649131205e-01, 1.588581433e-01, 1.527971853e-01, + 1.467304745e-01, 1.406582393e-01, 1.345807085e-01, 1.284981108e-01, + 1.224106752e-01, 1.163186309e-01, 1.102222073e-01, 1.041216339e-01, + 9.801714033e-02, 9.190895650e-02, 8.579731234e-02, 7.968243797e-02, + 7.356456360e-02, 6.744391956e-02, 6.132073630e-02, 5.519524435e-02, + 4.906767433e-02, 4.293825693e-02, 3.680722294e-02, 3.067480318e-02, + 2.454122852e-02, 1.840672991e-02, 1.227153829e-02, 6.135884649e-03, + 1.224646799e-16, -6.135884649e-03, -1.227153829e-02, -1.840672991e-02, + -2.454122852e-02, -3.067480318e-02, -3.680722294e-02, -4.293825693e-02, + -4.906767433e-02, -5.519524435e-02, -6.132073630e-02, -6.744391956e-02, + -7.356456360e-02, -7.968243797e-02, -8.579731234e-02, -9.190895650e-02, + -9.801714033e-02, -1.041216339e-01, -1.102222073e-01, -1.163186309e-01, + -1.224106752e-01, -1.284981108e-01, -1.345807085e-01, -1.406582393e-01, + -1.467304745e-01, -1.527971853e-01, -1.588581433e-01, -1.649131205e-01, + -1.709618888e-01, -1.770042204e-01, -1.830398880e-01, -1.890686641e-01, + -1.950903220e-01, -2.011046348e-01, -2.071113762e-01, -2.131103199e-01, + -2.191012402e-01, -2.250839114e-01, -2.310581083e-01, -2.370236060e-01, + -2.429801799e-01, -2.489276057e-01, -2.548656596e-01, -2.607941179e-01, + -2.667127575e-01, -2.726213554e-01, -2.785196894e-01, -2.844075372e-01, + -2.902846773e-01, -2.961508882e-01, -3.020059493e-01, -3.078496400e-01, + -3.136817404e-01, -3.195020308e-01, -3.253102922e-01, -3.311063058e-01, + -3.368898534e-01, -3.426607173e-01, -3.484186802e-01, -3.541635254e-01, + -3.598950365e-01, -3.656129978e-01, -3.713171940e-01, -3.770074102e-01, + -3.826834324e-01, -3.883450467e-01, -3.939920401e-01, -3.996241998e-01, + -4.052413140e-01, -4.108431711e-01, -4.164295601e-01, -4.220002708e-01, + -4.275550934e-01, -4.330938189e-01, -4.386162385e-01, -4.441221446e-01, + -4.496113297e-01, -4.550835871e-01, -4.605387110e-01, -4.659764958e-01, + -4.713967368e-01, -4.767992301e-01, -4.821837721e-01, -4.875501601e-01, + -4.928981922e-01, -4.982276670e-01, -5.035383837e-01, -5.088301425e-01, + -5.141027442e-01, -5.193559902e-01, -5.245896827e-01, -5.298036247e-01, + -5.349976199e-01, -5.401714727e-01, -5.453249884e-01, -5.504579729e-01, + -5.555702330e-01, -5.606615762e-01, -5.657318108e-01, -5.707807459e-01, + -5.758081914e-01, -5.808139581e-01, -5.857978575e-01, -5.907597019e-01, + -5.956993045e-01, -6.006164794e-01, -6.055110414e-01, -6.103828063e-01, + -6.152315906e-01, -6.200572118e-01, -6.248594881e-01, -6.296382389e-01, + -6.343932842e-01, -6.391244449e-01, -6.438315429e-01, -6.485144010e-01, + -6.531728430e-01, -6.578066933e-01, -6.624157776e-01, -6.669999223e-01, + -6.715589548e-01, -6.760927036e-01, -6.806009978e-01, -6.850836678e-01, + -6.895405447e-01, -6.939714609e-01, -6.983762494e-01, -7.027547445e-01, + -7.071067812e-01, -7.114321957e-01, -7.157308253e-01, -7.200025080e-01, + -7.242470830e-01, -7.284643904e-01, -7.326542717e-01, -7.368165689e-01, + -7.409511254e-01, -7.450577854e-01, -7.491363945e-01, -7.531867990e-01, + -7.572088465e-01, -7.612023855e-01, -7.651672656e-01, -7.691033376e-01, + -7.730104534e-01, -7.768884657e-01, -7.807372286e-01, -7.845565972e-01, + -7.883464276e-01, -7.921065773e-01, -7.958369046e-01, -7.995372691e-01, + -8.032075315e-01, -8.068475535e-01, -8.104571983e-01, -8.140363297e-01, + -8.175848132e-01, -8.211025150e-01, -8.245893028e-01, -8.280450453e-01, + -8.314696123e-01, -8.348628750e-01, -8.382247056e-01, -8.415549774e-01, + -8.448535652e-01, -8.481203448e-01, -8.513551931e-01, -8.545579884e-01, + -8.577286100e-01, -8.608669386e-01, -8.639728561e-01, -8.670462455e-01, + -8.700869911e-01, -8.730949784e-01, -8.760700942e-01, -8.790122264e-01, + -8.819212643e-01, -8.847970984e-01, -8.876396204e-01, -8.904487232e-01, + -8.932243012e-01, -8.959662498e-01, -8.986744657e-01, -9.013488470e-01, + -9.039892931e-01, -9.065957045e-01, -9.091679831e-01, -9.117060320e-01, + -9.142097557e-01, -9.166790599e-01, -9.191138517e-01, -9.215140393e-01, + -9.238795325e-01, -9.262102421e-01, -9.285060805e-01, -9.307669611e-01, + -9.329927988e-01, -9.351835099e-01, -9.373390119e-01, -9.394592236e-01, + -9.415440652e-01, -9.435934582e-01, -9.456073254e-01, -9.475855910e-01, + -9.495281806e-01, -9.514350210e-01, -9.533060404e-01, -9.551411683e-01, + -9.569403357e-01, -9.587034749e-01, -9.604305194e-01, -9.621214043e-01, + -9.637760658e-01, -9.653944417e-01, -9.669764710e-01, -9.685220943e-01, + -9.700312532e-01, -9.715038910e-01, -9.729399522e-01, -9.743393828e-01, + -9.757021300e-01, -9.770281427e-01, -9.783173707e-01, -9.795697657e-01, + -9.807852804e-01, -9.819638691e-01, -9.831054874e-01, -9.842100924e-01, + -9.852776424e-01, -9.863080972e-01, -9.873014182e-01, -9.882575677e-01, + -9.891765100e-01, -9.900582103e-01, -9.909026354e-01, -9.917097537e-01, + -9.924795346e-01, -9.932119492e-01, -9.939069700e-01, -9.945645707e-01, + -9.951847267e-01, -9.957674145e-01, -9.963126122e-01, -9.968202993e-01, + -9.972904567e-01, -9.977230666e-01, -9.981181129e-01, -9.984755806e-01, + -9.987954562e-01, -9.990777278e-01, -9.993223846e-01, -9.995294175e-01, + -9.996988187e-01, -9.998305818e-01, -9.999247018e-01, -9.999811753e-01, + -1.000000000e+00, -9.999811753e-01, -9.999247018e-01, -9.998305818e-01, + -9.996988187e-01, -9.995294175e-01, -9.993223846e-01, -9.990777278e-01, + -9.987954562e-01, -9.984755806e-01, -9.981181129e-01, -9.977230666e-01, + -9.972904567e-01, -9.968202993e-01, -9.963126122e-01, -9.957674145e-01, + -9.951847267e-01, -9.945645707e-01, -9.939069700e-01, -9.932119492e-01, + -9.924795346e-01, -9.917097537e-01, -9.909026354e-01, -9.900582103e-01, + -9.891765100e-01, -9.882575677e-01, -9.873014182e-01, -9.863080972e-01, + -9.852776424e-01, -9.842100924e-01, -9.831054874e-01, -9.819638691e-01, + -9.807852804e-01, -9.795697657e-01, -9.783173707e-01, -9.770281427e-01, + -9.757021300e-01, -9.743393828e-01, -9.729399522e-01, -9.715038910e-01, + -9.700312532e-01, -9.685220943e-01, -9.669764710e-01, -9.653944417e-01, + -9.637760658e-01, -9.621214043e-01, -9.604305194e-01, -9.587034749e-01, + -9.569403357e-01, -9.551411683e-01, -9.533060404e-01, -9.514350210e-01, + -9.495281806e-01, -9.475855910e-01, -9.456073254e-01, -9.435934582e-01, + -9.415440652e-01, -9.394592236e-01, -9.373390119e-01, -9.351835099e-01, + -9.329927988e-01, -9.307669611e-01, -9.285060805e-01, -9.262102421e-01, + -9.238795325e-01, -9.215140393e-01, -9.191138517e-01, -9.166790599e-01, + -9.142097557e-01, -9.117060320e-01, -9.091679831e-01, -9.065957045e-01, + -9.039892931e-01, -9.013488470e-01, -8.986744657e-01, -8.959662498e-01, + -8.932243012e-01, -8.904487232e-01, -8.876396204e-01, -8.847970984e-01, + -8.819212643e-01, -8.790122264e-01, -8.760700942e-01, -8.730949784e-01, + -8.700869911e-01, -8.670462455e-01, -8.639728561e-01, -8.608669386e-01, + -8.577286100e-01, -8.545579884e-01, -8.513551931e-01, -8.481203448e-01, + -8.448535652e-01, -8.415549774e-01, -8.382247056e-01, -8.348628750e-01, + -8.314696123e-01, -8.280450453e-01, -8.245893028e-01, -8.211025150e-01, + -8.175848132e-01, -8.140363297e-01, -8.104571983e-01, -8.068475535e-01, + -8.032075315e-01, -7.995372691e-01, -7.958369046e-01, -7.921065773e-01, + -7.883464276e-01, -7.845565972e-01, -7.807372286e-01, -7.768884657e-01, + -7.730104534e-01, -7.691033376e-01, -7.651672656e-01, -7.612023855e-01, + -7.572088465e-01, -7.531867990e-01, -7.491363945e-01, -7.450577854e-01, + -7.409511254e-01, -7.368165689e-01, -7.326542717e-01, -7.284643904e-01, + -7.242470830e-01, -7.200025080e-01, -7.157308253e-01, -7.114321957e-01, + -7.071067812e-01, -7.027547445e-01, -6.983762494e-01, -6.939714609e-01, + -6.895405447e-01, -6.850836678e-01, -6.806009978e-01, -6.760927036e-01, + -6.715589548e-01, -6.669999223e-01, -6.624157776e-01, -6.578066933e-01, + -6.531728430e-01, -6.485144010e-01, -6.438315429e-01, -6.391244449e-01, + -6.343932842e-01, -6.296382389e-01, -6.248594881e-01, -6.200572118e-01, + -6.152315906e-01, -6.103828063e-01, -6.055110414e-01, -6.006164794e-01, + -5.956993045e-01, -5.907597019e-01, -5.857978575e-01, -5.808139581e-01, + -5.758081914e-01, -5.707807459e-01, -5.657318108e-01, -5.606615762e-01, + -5.555702330e-01, -5.504579729e-01, -5.453249884e-01, -5.401714727e-01, + -5.349976199e-01, -5.298036247e-01, -5.245896827e-01, -5.193559902e-01, + -5.141027442e-01, -5.088301425e-01, -5.035383837e-01, -4.982276670e-01, + -4.928981922e-01, -4.875501601e-01, -4.821837721e-01, -4.767992301e-01, + -4.713967368e-01, -4.659764958e-01, -4.605387110e-01, -4.550835871e-01, + -4.496113297e-01, -4.441221446e-01, -4.386162385e-01, -4.330938189e-01, + -4.275550934e-01, -4.220002708e-01, -4.164295601e-01, -4.108431711e-01, + -4.052413140e-01, -3.996241998e-01, -3.939920401e-01, -3.883450467e-01, + -3.826834324e-01, -3.770074102e-01, -3.713171940e-01, -3.656129978e-01, + -3.598950365e-01, -3.541635254e-01, -3.484186802e-01, -3.426607173e-01, + -3.368898534e-01, -3.311063058e-01, -3.253102922e-01, -3.195020308e-01, + -3.136817404e-01, -3.078496400e-01, -3.020059493e-01, -2.961508882e-01, + -2.902846773e-01, -2.844075372e-01, -2.785196894e-01, -2.726213554e-01, + -2.667127575e-01, -2.607941179e-01, -2.548656596e-01, -2.489276057e-01, + -2.429801799e-01, -2.370236060e-01, -2.310581083e-01, -2.250839114e-01, + -2.191012402e-01, -2.131103199e-01, -2.071113762e-01, -2.011046348e-01, + -1.950903220e-01, -1.890686641e-01, -1.830398880e-01, -1.770042204e-01, + -1.709618888e-01, -1.649131205e-01, -1.588581433e-01, -1.527971853e-01, + -1.467304745e-01, -1.406582393e-01, -1.345807085e-01, -1.284981108e-01, + -1.224106752e-01, -1.163186309e-01, -1.102222073e-01, -1.041216339e-01, + -9.801714033e-02, -9.190895650e-02, -8.579731234e-02, -7.968243797e-02, + -7.356456360e-02, -6.744391956e-02, -6.132073630e-02, -5.519524435e-02, + -4.906767433e-02, -4.293825693e-02, -3.680722294e-02, -3.067480318e-02, + -2.454122852e-02, -1.840672991e-02, -1.227153829e-02, -6.135884649e-03, + -2.449293598e-16, 6.135884649e-03, 1.227153829e-02, 1.840672991e-02, + 2.454122852e-02, 3.067480318e-02, 3.680722294e-02, 4.293825693e-02, + 4.906767433e-02, 5.519524435e-02, 6.132073630e-02, 6.744391956e-02, + 7.356456360e-02, 7.968243797e-02, 8.579731234e-02, 9.190895650e-02, + 9.801714033e-02, 1.041216339e-01, 1.102222073e-01, 1.163186309e-01, + 1.224106752e-01, 1.284981108e-01, 1.345807085e-01, 1.406582393e-01, + 1.467304745e-01, 1.527971853e-01, 1.588581433e-01, 1.649131205e-01, + 1.709618888e-01, 1.770042204e-01, 1.830398880e-01, 1.890686641e-01, + 1.950903220e-01, 2.011046348e-01, 2.071113762e-01, 2.131103199e-01, + 2.191012402e-01, 2.250839114e-01, 2.310581083e-01, 2.370236060e-01, + 2.429801799e-01, 2.489276057e-01, 2.548656596e-01, 2.607941179e-01, + 2.667127575e-01, 2.726213554e-01, 2.785196894e-01, 2.844075372e-01, + 2.902846773e-01, 2.961508882e-01, 3.020059493e-01, 3.078496400e-01, + 3.136817404e-01, 3.195020308e-01, 3.253102922e-01, 3.311063058e-01, + 3.368898534e-01, 3.426607173e-01, 3.484186802e-01, 3.541635254e-01, + 3.598950365e-01, 3.656129978e-01, 3.713171940e-01, 3.770074102e-01, + 3.826834324e-01, 3.883450467e-01, 3.939920401e-01, 3.996241998e-01, + 4.052413140e-01, 4.108431711e-01, 4.164295601e-01, 4.220002708e-01, + 4.275550934e-01, 4.330938189e-01, 4.386162385e-01, 4.441221446e-01, + 4.496113297e-01, 4.550835871e-01, 4.605387110e-01, 4.659764958e-01, + 4.713967368e-01, 4.767992301e-01, 4.821837721e-01, 4.875501601e-01, + 4.928981922e-01, 4.982276670e-01, 5.035383837e-01, 5.088301425e-01, + 5.141027442e-01, 5.193559902e-01, 5.245896827e-01, 5.298036247e-01, + 5.349976199e-01, 5.401714727e-01, 5.453249884e-01, 5.504579729e-01, + 5.555702330e-01, 5.606615762e-01, 5.657318108e-01, 5.707807459e-01, + 5.758081914e-01, 5.808139581e-01, 5.857978575e-01, 5.907597019e-01, + 5.956993045e-01, 6.006164794e-01, 6.055110414e-01, 6.103828063e-01, + 6.152315906e-01, 6.200572118e-01, 6.248594881e-01, 6.296382389e-01, + 6.343932842e-01, 6.391244449e-01, 6.438315429e-01, 6.485144010e-01, + 6.531728430e-01, 6.578066933e-01, 6.624157776e-01, 6.669999223e-01, + 6.715589548e-01, 6.760927036e-01, 6.806009978e-01, 6.850836678e-01, + 6.895405447e-01, 6.939714609e-01, 6.983762494e-01, 7.027547445e-01, + 7.071067812e-01, 7.114321957e-01, 7.157308253e-01, 7.200025080e-01, + 7.242470830e-01, 7.284643904e-01, 7.326542717e-01, 7.368165689e-01, + 7.409511254e-01, 7.450577854e-01, 7.491363945e-01, 7.531867990e-01, + 7.572088465e-01, 7.612023855e-01, 7.651672656e-01, 7.691033376e-01, + 7.730104534e-01, 7.768884657e-01, 7.807372286e-01, 7.845565972e-01, + 7.883464276e-01, 7.921065773e-01, 7.958369046e-01, 7.995372691e-01, + 8.032075315e-01, 8.068475535e-01, 8.104571983e-01, 8.140363297e-01, + 8.175848132e-01, 8.211025150e-01, 8.245893028e-01, 8.280450453e-01, + 8.314696123e-01, 8.348628750e-01, 8.382247056e-01, 8.415549774e-01, + 8.448535652e-01, 8.481203448e-01, 8.513551931e-01, 8.545579884e-01, + 8.577286100e-01, 8.608669386e-01, 8.639728561e-01, 8.670462455e-01, + 8.700869911e-01, 8.730949784e-01, 8.760700942e-01, 8.790122264e-01, + 8.819212643e-01, 8.847970984e-01, 8.876396204e-01, 8.904487232e-01, + 8.932243012e-01, 8.959662498e-01, 8.986744657e-01, 9.013488470e-01, + 9.039892931e-01, 9.065957045e-01, 9.091679831e-01, 9.117060320e-01, + 9.142097557e-01, 9.166790599e-01, 9.191138517e-01, 9.215140393e-01, + 9.238795325e-01, 9.262102421e-01, 9.285060805e-01, 9.307669611e-01, + 9.329927988e-01, 9.351835099e-01, 9.373390119e-01, 9.394592236e-01, + 9.415440652e-01, 9.435934582e-01, 9.456073254e-01, 9.475855910e-01, + 9.495281806e-01, 9.514350210e-01, 9.533060404e-01, 9.551411683e-01, + 9.569403357e-01, 9.587034749e-01, 9.604305194e-01, 9.621214043e-01, + 9.637760658e-01, 9.653944417e-01, 9.669764710e-01, 9.685220943e-01, + 9.700312532e-01, 9.715038910e-01, 9.729399522e-01, 9.743393828e-01, + 9.757021300e-01, 9.770281427e-01, 9.783173707e-01, 9.795697657e-01, + 9.807852804e-01, 9.819638691e-01, 9.831054874e-01, 9.842100924e-01, + 9.852776424e-01, 9.863080972e-01, 9.873014182e-01, 9.882575677e-01, + 9.891765100e-01, 9.900582103e-01, 9.909026354e-01, 9.917097537e-01, + 9.924795346e-01, 9.932119492e-01, 9.939069700e-01, 9.945645707e-01, + 9.951847267e-01, 9.957674145e-01, 9.963126122e-01, 9.968202993e-01, + 9.972904567e-01, 9.977230666e-01, 9.981181129e-01, 9.984755806e-01, + 9.987954562e-01, 9.990777278e-01, 9.993223846e-01, 9.995294175e-01, + 9.996988187e-01, 9.998305818e-01, 9.999247018e-01, 9.999811753e-01, + 1.000000000e+00, +}; +const float lut_fm_frequency_quantizer[] = { + -1.200000000e+01, -1.200000000e+01, -1.200000000e+01, -1.184000000e+01, + -1.184000000e+01, -1.184000000e+01, -1.111000000e+01, -1.038000000e+01, + -9.650000000e+00, -8.920000000e+00, -8.190000000e+00, -7.460000000e+00, + -6.730000000e+00, -6.000000000e+00, -6.000000000e+00, -6.000000000e+00, + -5.545511612e+00, -5.091023223e+00, -4.636534835e+00, -4.182046446e+00, + -4.182046446e+00, -4.182046446e+00, -3.659290641e+00, -3.136534835e+00, + -2.613779029e+00, -2.091023223e+00, -1.568267417e+00, -1.045511612e+00, + -5.227558058e-01, 0.000000000e+00, 0.000000000e+00, 0.000000000e+00, + 1.600000000e-01, 1.600000000e-01, 1.600000000e-01, 8.900000000e-01, + 1.620000000e+00, 2.350000000e+00, 3.080000000e+00, 3.810000000e+00, + 4.540000000e+00, 5.270000000e+00, 6.000000000e+00, 6.000000000e+00, + 6.000000000e+00, 6.454488388e+00, 6.908976777e+00, 7.363465165e+00, + 7.817953554e+00, 7.817953554e+00, 7.817953554e+00, 8.285529931e+00, + 8.753106309e+00, 9.220682687e+00, 9.688259065e+00, 9.688259065e+00, + 9.688259065e+00, 1.026619430e+01, 1.084412953e+01, 1.142206477e+01, + 1.200000000e+01, 1.200000000e+01, 1.200000000e+01, 1.216000000e+01, + 1.216000000e+01, 1.216000000e+01, 1.262977500e+01, 1.309955001e+01, + 1.356932501e+01, 1.403910002e+01, 1.403910002e+01, 1.403910002e+01, + 1.490761987e+01, 1.577613972e+01, 1.664465957e+01, 1.751317942e+01, + 1.751317942e+01, 1.751317942e+01, 1.800000000e+01, 1.800000000e+01, + 1.800000000e+01, 1.850977500e+01, 1.901955001e+01, 1.901955001e+01, + 1.901955001e+01, 1.981795355e+01, 1.981795355e+01, 1.981795355e+01, + 2.066386428e+01, 2.150977500e+01, 2.150977500e+01, 2.150977500e+01, + 2.213233125e+01, 2.275488750e+01, 2.337744375e+01, 2.400000000e+01, + 2.400000000e+01, 2.400000000e+01, 2.450977500e+01, 2.501955001e+01, + 2.501955001e+01, 2.501955001e+01, 2.547403840e+01, 2.592852679e+01, + 2.638301517e+01, 2.683750356e+01, 2.683750356e+01, 2.683750356e+01, + 2.735032035e+01, 2.786313714e+01, 2.786313714e+01, 2.786313714e+01, + 2.839735285e+01, 2.893156857e+01, 2.946578428e+01, 3.000000000e+01, + 3.000000000e+01, 3.000000000e+01, 3.075000000e+01, 3.150000000e+01, + 3.225000000e+01, 3.300000000e+01, 3.375000000e+01, 3.450000000e+01, + 3.525000000e+01, 3.600000000e+01, 3.600000000e+01, 3.600000000e+01, + 3.600000000e+01, +}; +const float lut_fold[] = { + -9.980545825e-01, -9.970653772e-01, -9.960649692e-01, -9.950532582e-01, + -9.940301939e-01, -9.929957802e-01, -9.919500809e-01, -9.908932239e-01, + -9.898254054e-01, -9.887468930e-01, -9.876580288e-01, -9.865592310e-01, + -9.854509946e-01, -9.843338912e-01, -9.832085672e-01, -9.820757409e-01, + -9.809361977e-01, -9.797907840e-01, -9.786403995e-01, -9.774859869e-01, + -9.763285207e-01, -9.751689938e-01, -9.740084017e-01, -9.728477255e-01, + -9.716879129e-01, -9.705298570e-01, -9.693743743e-01, -9.682221804e-01, + -9.670738649e-01, -9.659298654e-01, -9.647904408e-01, -9.636556431e-01, + -9.625252914e-01, -9.613989436e-01, -9.602758714e-01, -9.591550347e-01, + -9.580350590e-01, -9.569142144e-01, -9.557903981e-01, -9.546611197e-01, + -9.535234911e-01, -9.523742208e-01, -9.512096130e-01, -9.500255727e-01, + -9.488176173e-01, -9.475808937e-01, -9.463102039e-01, -9.450000364e-01, + -9.436446065e-01, -9.422379038e-01, -9.407737471e-01, -9.392458479e-01, + -9.376478811e-01, -9.359735625e-01, -9.342167345e-01, -9.323714562e-01, + -9.304321011e-01, -9.283934575e-01, -9.262508342e-01, -9.240001674e-01, + -9.216381294e-01, -9.191622368e-01, -9.165709565e-01, -9.138638086e-01, + -9.110414630e-01, -9.081058297e-01, -9.050601387e-01, -9.019090092e-01, + -8.986585056e-01, -8.953161780e-01, -8.918910851e-01, -8.883937990e-01, + -8.848363883e-01, -8.812323792e-01, -8.775966932e-01, -8.739455595e-01, + -8.702964016e-01, -8.666676980e-01, -8.630788161e-01, -8.595498195e-01, + -8.561012493e-01, -8.527538811e-01, -8.495284571e-01, -8.464453973e-01, + -8.435244910e-01, -8.407845708e-01, -8.382431741e-01, -8.359161932e-01, + -8.338175206e-01, -8.319586927e-01, -8.303485360e-01, -8.289928229e-01, + -8.278939413e-01, -8.270505833e-01, -8.264574602e-01, -8.261050485e-01, + -8.259793727e-01, -8.260618323e-01, -8.263290765e-01, -8.267529332e-01, + -8.273003972e-01, -8.279336816e-01, -8.286103366e-01, -8.292834393e-01, + -8.299018559e-01, -8.304105799e-01, -8.307511441e-01, -8.308621097e-01, + -8.306796276e-01, -8.301380721e-01, -8.291707415e-01, -8.277106225e-01, + -8.256912103e-01, -8.230473793e-01, -8.197162939e-01, -8.156383519e-01, + -8.107581485e-01, -8.050254496e-01, -7.983961624e-01, -7.908332902e-01, + -7.823078566e-01, -7.727997861e-01, -7.622987256e-01, -7.508047928e-01, + -7.383292372e-01, -7.248949979e-01, -7.105371474e-01, -6.953032052e-01, + -6.792533125e-01, -6.624602549e-01, -6.450093250e-01, -6.269980173e-01, + -6.085355495e-01, -5.897422068e-01, -5.707485064e-01, -5.516941858e-01, + -5.327270153e-01, -5.140014423e-01, -4.956770752e-01, -4.779170191e-01, + -4.608860753e-01, -4.447488219e-01, -4.296675951e-01, -4.158003906e-01, + -4.032987090e-01, -3.923053718e-01, -3.829523325e-01, -3.753585132e-01, + -3.696276948e-01, -3.658464920e-01, -3.640824427e-01, -3.643822430e-01, + -3.667701571e-01, -3.712466318e-01, -3.777871433e-01, -3.863413015e-01, + -3.968322361e-01, -4.091562858e-01, -4.231830080e-01, -4.387555229e-01, + -4.556912047e-01, -4.737827239e-01, -4.927994449e-01, -5.124891750e-01, + -5.325802587e-01, -5.527840042e-01, -5.727974254e-01, -5.923062779e-01, + -6.109883621e-01, -6.285170609e-01, -6.445650789e-01, -6.588083399e-01, + -6.709300033e-01, -6.806245487e-01, -6.876018827e-01, -6.915914142e-01, + -6.923460464e-01, -6.896460314e-01, -6.833026329e-01, -6.731615438e-01, + -6.591060076e-01, -6.410595911e-01, -6.189885640e-01, -5.929038395e-01, + -5.628624373e-01, -5.289684349e-01, -4.913733765e-01, -4.502761195e-01, + -4.059220990e-01, -3.586020036e-01, -3.086498600e-01, -2.564405314e-01, + -2.023866445e-01, -1.469349657e-01, -9.056225673e-02, -3.377064458e-02, + 2.291744737e-02, 7.896475831e-02, 1.338249802e-01, 1.869488164e-01, + 2.377902398e-01, 2.858128778e-01, 3.304964479e-01, 3.713431643e-01, + 4.078840357e-01, 4.396849726e-01, 4.663526243e-01, 4.875398649e-01, + 5.029508548e-01, 5.123456023e-01, 5.155439593e-01, 5.124289894e-01, + 5.029496521e-01, 4.871227568e-01, 4.650341465e-01, 4.368390827e-01, + 4.027618100e-01, 3.630942908e-01, 3.181941105e-01, 2.684815644e-01, + 2.144359470e-01, 1.565910778e-01, 9.553010345e-02, 3.187963220e-02, + -3.369674102e-02, -1.005054456e-01, -1.678304053e-01, -2.349408810e-01, + -3.010995956e-01, -3.655710438e-01, -4.276298873e-01, -4.865693337e-01, + -5.417093944e-01, -5.924049204e-01, -6.380533123e-01, -6.781018093e-01, + -7.120542597e-01, -7.394772881e-01, -7.600057749e-01, -7.733475770e-01, + -7.792874237e-01, -7.776899338e-01, -7.685017108e-01, -7.517524823e-01, + -7.275552655e-01, -6.961055475e-01, -6.576794884e-01, -6.126311602e-01, + -5.613888527e-01, -5.044504876e-01, -4.423781911e-01, -3.757920909e-01, + -3.053634092e-01, -2.318069348e-01, -1.558729654e-01, -7.833881626e-02, + 0.000000000e+00, 7.833881626e-02, 1.558729654e-01, 2.318069348e-01, + 3.053634092e-01, 3.757920909e-01, 4.423781911e-01, 5.044504876e-01, + 5.613888527e-01, 6.126311602e-01, 6.576794884e-01, 6.961055475e-01, + 7.275552655e-01, 7.517524823e-01, 7.685017108e-01, 7.776899338e-01, + 7.792874237e-01, 7.733475770e-01, 7.600057749e-01, 7.394772881e-01, + 7.120542597e-01, 6.781018093e-01, 6.380533123e-01, 5.924049204e-01, + 5.417093944e-01, 4.865693337e-01, 4.276298873e-01, 3.655710438e-01, + 3.010995956e-01, 2.349408810e-01, 1.678304053e-01, 1.005054456e-01, + 3.369674102e-02, -3.187963220e-02, -9.553010345e-02, -1.565910778e-01, + -2.144359470e-01, -2.684815644e-01, -3.181941105e-01, -3.630942908e-01, + -4.027618100e-01, -4.368390827e-01, -4.650341465e-01, -4.871227568e-01, + -5.029496521e-01, -5.124289894e-01, -5.155439593e-01, -5.123456023e-01, + -5.029508548e-01, -4.875398649e-01, -4.663526243e-01, -4.396849726e-01, + -4.078840357e-01, -3.713431643e-01, -3.304964479e-01, -2.858128778e-01, + -2.377902398e-01, -1.869488164e-01, -1.338249802e-01, -7.896475831e-02, + -2.291744737e-02, 3.377064458e-02, 9.056225673e-02, 1.469349657e-01, + 2.023866445e-01, 2.564405314e-01, 3.086498600e-01, 3.586020036e-01, + 4.059220990e-01, 4.502761195e-01, 4.913733765e-01, 5.289684349e-01, + 5.628624373e-01, 5.929038395e-01, 6.189885640e-01, 6.410595911e-01, + 6.591060076e-01, 6.731615438e-01, 6.833026329e-01, 6.896460314e-01, + 6.923460464e-01, 6.915914142e-01, 6.876018827e-01, 6.806245487e-01, + 6.709300033e-01, 6.588083399e-01, 6.445650789e-01, 6.285170609e-01, + 6.109883621e-01, 5.923062779e-01, 5.727974254e-01, 5.527840042e-01, + 5.325802587e-01, 5.124891750e-01, 4.927994449e-01, 4.737827239e-01, + 4.556912047e-01, 4.387555229e-01, 4.231830080e-01, 4.091562858e-01, + 3.968322361e-01, 3.863413015e-01, 3.777871433e-01, 3.712466318e-01, + 3.667701571e-01, 3.643822430e-01, 3.640824427e-01, 3.658464920e-01, + 3.696276948e-01, 3.753585132e-01, 3.829523325e-01, 3.923053718e-01, + 4.032987090e-01, 4.158003906e-01, 4.296675951e-01, 4.447488219e-01, + 4.608860753e-01, 4.779170191e-01, 4.956770752e-01, 5.140014423e-01, + 5.327270153e-01, 5.516941858e-01, 5.707485064e-01, 5.897422068e-01, + 6.085355495e-01, 6.269980173e-01, 6.450093250e-01, 6.624602549e-01, + 6.792533125e-01, 6.953032052e-01, 7.105371474e-01, 7.248949979e-01, + 7.383292372e-01, 7.508047928e-01, 7.622987256e-01, 7.727997861e-01, + 7.823078566e-01, 7.908332902e-01, 7.983961624e-01, 8.050254496e-01, + 8.107581485e-01, 8.156383519e-01, 8.197162939e-01, 8.230473793e-01, + 8.256912103e-01, 8.277106225e-01, 8.291707415e-01, 8.301380721e-01, + 8.306796276e-01, 8.308621097e-01, 8.307511441e-01, 8.304105799e-01, + 8.299018559e-01, 8.292834393e-01, 8.286103366e-01, 8.279336816e-01, + 8.273003972e-01, 8.267529332e-01, 8.263290765e-01, 8.260618323e-01, + 8.259793727e-01, 8.261050485e-01, 8.264574602e-01, 8.270505833e-01, + 8.278939413e-01, 8.289928229e-01, 8.303485360e-01, 8.319586927e-01, + 8.338175206e-01, 8.359161932e-01, 8.382431741e-01, 8.407845708e-01, + 8.435244910e-01, 8.464453973e-01, 8.495284571e-01, 8.527538811e-01, + 8.561012493e-01, 8.595498195e-01, 8.630788161e-01, 8.666676980e-01, + 8.702964016e-01, 8.739455595e-01, 8.775966932e-01, 8.812323792e-01, + 8.848363883e-01, 8.883937990e-01, 8.918910851e-01, 8.953161780e-01, + 8.986585056e-01, 9.019090092e-01, 9.050601387e-01, 9.081058297e-01, + 9.110414630e-01, 9.138638086e-01, 9.165709565e-01, 9.191622368e-01, + 9.216381294e-01, 9.240001674e-01, 9.262508342e-01, 9.283934575e-01, + 9.304321011e-01, 9.323714562e-01, 9.342167345e-01, 9.359735625e-01, + 9.376478811e-01, 9.392458479e-01, 9.407737471e-01, 9.422379038e-01, + 9.436446065e-01, 9.450000364e-01, 9.463102039e-01, 9.475808937e-01, + 9.488176173e-01, 9.500255727e-01, 9.512096130e-01, 9.523742208e-01, + 9.535234911e-01, 9.546611197e-01, 9.557903981e-01, 9.569142144e-01, + 9.580350590e-01, 9.591550347e-01, 9.602758714e-01, 9.613989436e-01, + 9.625252914e-01, 9.636556431e-01, 9.647904408e-01, 9.659298654e-01, + 9.670738649e-01, 9.682221804e-01, 9.693743743e-01, 9.705298570e-01, + 9.716879129e-01, 9.728477255e-01, 9.740084017e-01, 9.751689938e-01, + 9.763285207e-01, 9.774859869e-01, 9.786403995e-01, 9.797907840e-01, + 9.809361977e-01, 9.820757409e-01, 9.832085672e-01, 9.843338912e-01, + 9.854509946e-01, 9.865592310e-01, 9.876580288e-01, 9.887468930e-01, + 9.898254054e-01, 9.908932239e-01, 9.919500809e-01, 9.929957802e-01, + 9.940301939e-01, 9.950532582e-01, 9.960649692e-01, 9.970653772e-01, + 9.980545825e-01, 9.990327291e-01, 1.000000000e+00, 1.000000000e+00, +}; +const float lut_fold_2[] = { + 1.000000000e+00, 9.992967758e-01, 9.985815484e-01, 9.978540078e-01, + 9.971138332e-01, 9.963606927e-01, 9.955942426e-01, 9.948141269e-01, + 9.940199768e-01, 9.932114103e-01, 9.923880310e-01, 9.915494283e-01, + 9.906951760e-01, 9.898248319e-01, 9.889379369e-01, 9.880340145e-01, + 9.871125695e-01, 9.861730874e-01, 9.852150334e-01, 9.842378513e-01, + 9.832409624e-01, 9.822237646e-01, 9.811856308e-01, 9.801259079e-01, + 9.790439155e-01, 9.779389442e-01, 9.768102539e-01, 9.756570727e-01, + 9.744785949e-01, 9.732739786e-01, 9.720423447e-01, 9.707827737e-01, + 9.694943044e-01, 9.681759305e-01, 9.668265989e-01, 9.654452060e-01, + 9.640305956e-01, 9.625815548e-01, 9.610968112e-01, 9.595750288e-01, + 9.580148040e-01, 9.564146617e-01, 9.547730501e-01, 9.530883359e-01, + 9.513587989e-01, 9.495826263e-01, 9.477579060e-01, 9.458826201e-01, + 9.439546371e-01, 9.419717041e-01, 9.399314380e-01, 9.378313157e-01, + 9.356686640e-01, 9.334406481e-01, 9.311442591e-01, 9.287763006e-01, + 9.263333739e-01, 9.238118615e-01, 9.212079094e-01, 9.185174075e-01, + 9.157359677e-01, 9.128589003e-01, 9.098811874e-01, 9.067974538e-01, + 9.036019347e-01, 9.002884395e-01, 8.968503119e-01, 8.932803854e-01, + 8.895709331e-01, 8.857136124e-01, 8.816994016e-01, 8.775185304e-01, + 8.731603996e-01, 8.686134921e-01, 8.638652705e-01, 8.589020627e-01, + 8.537089293e-01, 8.482695142e-01, 8.425658723e-01, 8.365782715e-01, + 8.302849649e-01, 8.236619269e-01, 8.166825462e-01, 8.093172692e-01, + 8.015331811e-01, 7.932935143e-01, 7.845570677e-01, 7.752775176e-01, + 7.654025961e-01, 7.548731062e-01, 7.436217337e-01, 7.315716072e-01, + 7.186345391e-01, 7.047088637e-01, 6.896767601e-01, 6.734009108e-01, + 6.557202943e-01, 6.364448402e-01, 6.153485688e-01, 5.921606903e-01, + 5.665539193e-01, 5.381289295e-01, 5.063933787e-01, 4.707331500e-01, + 4.303722225e-01, 3.843155503e-01, 3.312659247e-01, 2.694998552e-01, + 1.966767932e-01, 1.095358294e-01, 3.393987745e-03, -1.040028802e-01, + -1.920923242e-01, -2.656393469e-01, -3.279705091e-01, -3.814696578e-01, + -4.278897766e-01, -4.685487258e-01, -5.044563616e-01, -5.363995499e-01, + -5.650004958e-01, -5.676277376e-01, -5.456089430e-01, -5.216251172e-01, + -4.954009254e-01, -4.666070735e-01, -4.348464092e-01, -3.996354923e-01, + -3.603798149e-01, -3.163399611e-01, -2.665845916e-01, -2.099238522e-01, + -1.448129904e-01, -6.920937281e-02, 1.895794740e-02, 1.019348852e-01, + 1.729075540e-01, 2.343052184e-01, 2.879430943e-01, 3.352048344e-01, + 3.771635871e-01, 4.146644691e-01, 4.483820782e-01, 4.788614349e-01, + 5.065476686e-01, 5.318078998e-01, 5.549476117e-01, 5.762230650e-01, + 5.958508275e-01, 6.140151734e-01, 6.308738858e-01, 6.465628523e-01, + 6.611997355e-01, 6.748869294e-01, 6.877139581e-01, 6.925931401e-01, + 6.755415987e-01, 6.569329565e-01, 6.365437238e-01, 6.141054921e-01, + 5.892930521e-01, 5.617085284e-01, 5.308598832e-01, 4.961313087e-01, + 4.567416977e-01, 4.116851906e-01, 3.596440735e-01, 2.988577649e-01, + 2.269196964e-01, 1.404511108e-01, 3.455499060e-02, -8.308691439e-02, + -1.798594632e-01, -2.595549970e-01, -3.263272740e-01, -3.830839556e-01, + -4.319212812e-01, -4.743886570e-01, -5.116560503e-01, -5.446234410e-01, + -5.739944533e-01, -6.003271365e-01, -6.109475507e-01, -5.895686806e-01, + -5.661619434e-01, -5.404244477e-01, -5.119898195e-01, -4.804106515e-01, + -4.451347882e-01, -4.054727657e-01, -3.605522997e-01, -3.092533873e-01, + -2.501136501e-01, -1.811866822e-01, -9.982372580e-02, -2.325458569e-03, + 9.596728942e-02, 1.779431078e-01, 2.473476588e-01, 3.068667711e-01, + 3.584720417e-01, 4.036434517e-01, 4.435136052e-01, 4.789639990e-01, + 5.106909591e-01, 5.392518362e-01, 5.650980300e-01, 5.885990231e-01, + 6.100601564e-01, 6.297359696e-01, 6.478403436e-01, 6.645543074e-01, + 6.585194180e-01, 6.406121537e-01, 6.211278553e-01, 5.998486007e-01, + 5.765143776e-01, 5.508124062e-01, 5.223630380e-01, 4.907008769e-01, + 4.552491217e-01, 4.152841095e-01, 3.698853971e-01, 3.178639957e-01, + 2.576567279e-01, 1.871664560e-01, 1.035128010e-01, 2.628828896e-03, + -9.918255595e-02, -1.835455764e-01, -2.545841775e-01, -3.152240342e-01, + -3.675927060e-01, -4.132744159e-01, -4.534730876e-01, -4.891200006e-01, + -5.209468346e-01, -5.495364245e-01, -5.753587781e-01, -5.987971175e-01, + -6.201670260e-01, -6.397307408e-01, -6.255537426e-01, -6.058657960e-01, + -5.844073505e-01, -5.609283358e-01, -5.351292603e-01, -5.066483683e-01, + -4.750445715e-01, -4.397744409e-01, -4.001606981e-01, -3.553483015e-01, + -3.042420289e-01, -2.454157756e-01, -1.769773894e-01, -9.636135435e-02, + 0.000000000e+00, 9.636135435e-02, 1.769773894e-01, 2.454157756e-01, + 3.042420289e-01, 3.553483015e-01, 4.001606981e-01, 4.397744409e-01, + 4.750445715e-01, 5.066483683e-01, 5.351292603e-01, 5.609283358e-01, + 5.844073505e-01, 6.058657960e-01, 6.255537426e-01, 6.397307408e-01, + 6.201670260e-01, 5.987971175e-01, 5.753587781e-01, 5.495364245e-01, + 5.209468346e-01, 4.891200006e-01, 4.534730876e-01, 4.132744159e-01, + 3.675927060e-01, 3.152240342e-01, 2.545841775e-01, 1.835455764e-01, + 9.918255595e-02, -2.628828896e-03, -1.035128010e-01, -1.871664560e-01, + -2.576567279e-01, -3.178639957e-01, -3.698853971e-01, -4.152841095e-01, + -4.552491217e-01, -4.907008769e-01, -5.223630380e-01, -5.508124062e-01, + -5.765143776e-01, -5.998486007e-01, -6.211278553e-01, -6.406121537e-01, + -6.585194180e-01, -6.645543074e-01, -6.478403436e-01, -6.297359696e-01, + -6.100601564e-01, -5.885990231e-01, -5.650980300e-01, -5.392518362e-01, + -5.106909591e-01, -4.789639990e-01, -4.435136052e-01, -4.036434517e-01, + -3.584720417e-01, -3.068667711e-01, -2.473476588e-01, -1.779431078e-01, + -9.596728942e-02, 2.325458569e-03, 9.982372580e-02, 1.811866822e-01, + 2.501136501e-01, 3.092533873e-01, 3.605522997e-01, 4.054727657e-01, + 4.451347882e-01, 4.804106515e-01, 5.119898195e-01, 5.404244477e-01, + 5.661619434e-01, 5.895686806e-01, 6.109475507e-01, 6.003271365e-01, + 5.739944533e-01, 5.446234410e-01, 5.116560503e-01, 4.743886570e-01, + 4.319212812e-01, 3.830839556e-01, 3.263272740e-01, 2.595549970e-01, + 1.798594632e-01, 8.308691439e-02, -3.455499060e-02, -1.404511108e-01, + -2.269196964e-01, -2.988577649e-01, -3.596440735e-01, -4.116851906e-01, + -4.567416977e-01, -4.961313087e-01, -5.308598832e-01, -5.617085284e-01, + -5.892930521e-01, -6.141054921e-01, -6.365437238e-01, -6.569329565e-01, + -6.755415987e-01, -6.925931401e-01, -6.877139581e-01, -6.748869294e-01, + -6.611997355e-01, -6.465628523e-01, -6.308738858e-01, -6.140151734e-01, + -5.958508275e-01, -5.762230650e-01, -5.549476117e-01, -5.318078998e-01, + -5.065476686e-01, -4.788614349e-01, -4.483820782e-01, -4.146644691e-01, + -3.771635871e-01, -3.352048344e-01, -2.879430943e-01, -2.343052184e-01, + -1.729075540e-01, -1.019348852e-01, -1.895794740e-02, 6.920937281e-02, + 1.448129904e-01, 2.099238522e-01, 2.665845916e-01, 3.163399611e-01, + 3.603798149e-01, 3.996354923e-01, 4.348464092e-01, 4.666070735e-01, + 4.954009254e-01, 5.216251172e-01, 5.456089430e-01, 5.676277376e-01, + 5.650004958e-01, 5.363995499e-01, 5.044563616e-01, 4.685487258e-01, + 4.278897766e-01, 3.814696578e-01, 3.279705091e-01, 2.656393469e-01, + 1.920923242e-01, 1.040028802e-01, -3.393987745e-03, -1.095358294e-01, + -1.966767932e-01, -2.694998552e-01, -3.312659247e-01, -3.843155503e-01, + -4.303722225e-01, -4.707331500e-01, -5.063933787e-01, -5.381289295e-01, + -5.665539193e-01, -5.921606903e-01, -6.153485688e-01, -6.364448402e-01, + -6.557202943e-01, -6.734009108e-01, -6.896767601e-01, -7.047088637e-01, + -7.186345391e-01, -7.315716072e-01, -7.436217337e-01, -7.548731062e-01, + -7.654025961e-01, -7.752775176e-01, -7.845570677e-01, -7.932935143e-01, + -8.015331811e-01, -8.093172692e-01, -8.166825462e-01, -8.236619269e-01, + -8.302849649e-01, -8.365782715e-01, -8.425658723e-01, -8.482695142e-01, + -8.537089293e-01, -8.589020627e-01, -8.638652705e-01, -8.686134921e-01, + -8.731603996e-01, -8.775185304e-01, -8.816994016e-01, -8.857136124e-01, + -8.895709331e-01, -8.932803854e-01, -8.968503119e-01, -9.002884395e-01, + -9.036019347e-01, -9.067974538e-01, -9.098811874e-01, -9.128589003e-01, + -9.157359677e-01, -9.185174075e-01, -9.212079094e-01, -9.238118615e-01, + -9.263333739e-01, -9.287763006e-01, -9.311442591e-01, -9.334406481e-01, + -9.356686640e-01, -9.378313157e-01, -9.399314380e-01, -9.419717041e-01, + -9.439546371e-01, -9.458826201e-01, -9.477579060e-01, -9.495826263e-01, + -9.513587989e-01, -9.530883359e-01, -9.547730501e-01, -9.564146617e-01, + -9.580148040e-01, -9.595750288e-01, -9.610968112e-01, -9.625815548e-01, + -9.640305956e-01, -9.654452060e-01, -9.668265989e-01, -9.681759305e-01, + -9.694943044e-01, -9.707827737e-01, -9.720423447e-01, -9.732739786e-01, + -9.744785949e-01, -9.756570727e-01, -9.768102539e-01, -9.779389442e-01, + -9.790439155e-01, -9.801259079e-01, -9.811856308e-01, -9.822237646e-01, + -9.832409624e-01, -9.842378513e-01, -9.852150334e-01, -9.861730874e-01, + -9.871125695e-01, -9.880340145e-01, -9.889379369e-01, -9.898248319e-01, + -9.906951760e-01, -9.915494283e-01, -9.923880310e-01, -9.932114103e-01, + -9.940199768e-01, -9.948141269e-01, -9.955942426e-01, -9.963606927e-01, + -9.971138332e-01, -9.978540078e-01, -9.985815484e-01, -9.992967758e-01, + -1.000000000e+00, -1.000691521e+00, -1.001371627e+00, -1.001371627e+00, +}; +const float lut_stiffness[] = { + -6.250000000e-02, -5.859375000e-02, -5.468750000e-02, -5.078125000e-02, + -4.687500000e-02, -4.296875000e-02, -3.906250000e-02, -3.515625000e-02, + -3.125000000e-02, -2.734375000e-02, -2.343750000e-02, -1.953125000e-02, + -1.562500000e-02, -1.171875000e-02, -7.812500000e-03, -3.906250000e-03, + 0.000000000e+00, 0.000000000e+00, 0.000000000e+00, 0.000000000e+00, + 1.009582073e-03, 2.416076364e-03, 4.002252878e-03, 5.791066350e-03, + 7.808404022e-03, 1.008346028e-02, 1.264915914e-02, 1.554263074e-02, + 1.880574864e-02, 2.248573583e-02, 2.663584813e-02, 3.131614488e-02, + 3.659435812e-02, 4.254687278e-02, 4.925983210e-02, 5.683038428e-02, + 6.536808837e-02, 7.499649981e-02, 8.585495846e-02, 9.810060511e-02, + 1.119106556e-01, 1.274849653e-01, 1.450489216e-01, 1.648567056e-01, + 1.871949702e-01, 2.123869891e-01, 2.407973346e-01, 2.728371538e-01, + 3.089701187e-01, 3.497191360e-01, 3.956739150e-01, 4.474995013e-01, + 5.059459012e-01, 5.718589358e-01, 6.461924814e-01, 7.300222738e-01, + 8.245614757e-01, 9.311782340e-01, 1.000037649e+00, 1.005639154e+00, + 1.048005353e+00, 1.183990632e+00, 1.457101344e+00, 2.000000000e+00, + 2.000000000e+00, +}; +const float lut_svf_shift[] = { + 7.500000000e-01, 7.591880421e-01, 7.683455389e-01, 7.774424499e-01, + 7.864497239e-01, 7.953397451e-01, 8.040867240e-01, 8.126670211e-01, + 8.210593968e-01, 8.292451828e-01, 8.372083767e-01, 8.449356653e-01, + 8.524163823e-01, 8.596424124e-01, 8.666080494e-01, 8.733098228e-01, + 8.797462999e-01, 8.859178746e-01, 8.918265520e-01, 8.974757332e-01, + 9.028700082e-01, 9.080149595e-01, 9.129169800e-01, 9.175831064e-01, + 9.220208696e-01, 9.262381615e-01, 9.302431183e-01, 9.340440198e-01, + 9.376492031e-01, 9.410669892e-01, 9.443056230e-01, 9.473732226e-01, + 9.502777394e-01, 9.530269262e-01, 9.556283121e-01, 9.580891845e-01, + 9.604165758e-01, 9.626172547e-01, 9.646977214e-01, 9.666642057e-01, + 9.685226683e-01, 9.702788030e-01, 9.719380415e-01, 9.735055596e-01, + 9.749862835e-01, 9.763848977e-01, 9.777058532e-01, 9.789533760e-01, + 9.801314757e-01, 9.812439545e-01, 9.822944161e-01, 9.832862746e-01, + 9.842227627e-01, 9.851069409e-01, 9.859417053e-01, 9.867297957e-01, + 9.874738036e-01, 9.881761792e-01, 9.888392394e-01, 9.894651739e-01, + 9.900560522e-01, 9.906138300e-01, 9.911403551e-01, 9.916373732e-01, + 9.921065333e-01, 9.925493929e-01, 9.929674233e-01, 9.933620136e-01, + 9.937344761e-01, 9.940860496e-01, 9.944179041e-01, 9.947311441e-01, + 9.950268127e-01, 9.953058946e-01, 9.955693195e-01, 9.958179650e-01, + 9.960526598e-01, 9.962741861e-01, 9.964832825e-01, 9.966806459e-01, + 9.968669346e-01, 9.970427696e-01, 9.972087374e-01, 9.973653916e-01, + 9.975132546e-01, 9.976528197e-01, 9.977845524e-01, 9.979088923e-01, + 9.980262540e-01, 9.981370293e-01, 9.982415876e-01, 9.983402778e-01, + 9.984334293e-01, 9.985213529e-01, 9.986043419e-01, 9.986826732e-01, + 9.987566083e-01, 9.988263939e-01, 9.988922628e-01, 9.989544348e-01, + 9.990131175e-01, 9.990685067e-01, 9.991207871e-01, 9.991701333e-01, + 9.992167099e-01, 9.992606725e-01, 9.993021676e-01, 9.993413338e-01, + 9.993783018e-01, 9.994131950e-01, 9.994461297e-01, 9.994772160e-01, + 9.995065576e-01, 9.995342523e-01, 9.995603927e-01, 9.995850659e-01, + 9.996083544e-01, 9.996303357e-01, 9.996510834e-01, 9.996706665e-01, + 9.996891506e-01, 9.997065972e-01, 9.997230647e-01, 9.997386078e-01, + 9.997532786e-01, 9.997671260e-01, 9.997801962e-01, 9.997925329e-01, + 9.998041771e-01, 9.998151678e-01, 9.998255416e-01, 9.998353332e-01, + 9.998445753e-01, 9.998532986e-01, 9.998615323e-01, 9.998693039e-01, + 9.998766393e-01, 9.998835630e-01, 9.998900981e-01, 9.998962664e-01, + 9.999020885e-01, 9.999075839e-01, 9.999127708e-01, 9.999176666e-01, + 9.999222876e-01, 9.999266493e-01, 9.999307661e-01, 9.999346519e-01, + 9.999383196e-01, 9.999417815e-01, 9.999450491e-01, 9.999481332e-01, + 9.999510443e-01, 9.999537919e-01, 9.999563854e-01, 9.999588333e-01, + 9.999611438e-01, 9.999633246e-01, 9.999653831e-01, 9.999673260e-01, + 9.999691598e-01, 9.999708907e-01, 9.999725245e-01, 9.999740666e-01, + 9.999755221e-01, 9.999768960e-01, 9.999781927e-01, 9.999794167e-01, + 9.999805719e-01, 9.999816623e-01, 9.999826915e-01, 9.999836630e-01, + 9.999845799e-01, 9.999854454e-01, 9.999862623e-01, 9.999870333e-01, + 9.999877611e-01, 9.999884480e-01, 9.999890964e-01, 9.999897083e-01, + 9.999902860e-01, 9.999908312e-01, 9.999913458e-01, 9.999918315e-01, + 9.999922900e-01, 9.999927227e-01, 9.999931311e-01, 9.999935167e-01, + 9.999938805e-01, 9.999942240e-01, 9.999945482e-01, 9.999948542e-01, + 9.999951430e-01, 9.999954156e-01, 9.999956729e-01, 9.999959157e-01, + 9.999961450e-01, 9.999963613e-01, 9.999965656e-01, 9.999967583e-01, + 9.999969403e-01, 9.999971120e-01, 9.999972741e-01, 9.999974271e-01, + 9.999975715e-01, 9.999977078e-01, 9.999978364e-01, 9.999979579e-01, + 9.999980725e-01, 9.999981807e-01, 9.999982828e-01, 9.999983792e-01, + 9.999984701e-01, 9.999985560e-01, 9.999986370e-01, 9.999987135e-01, + 9.999987857e-01, 9.999988539e-01, 9.999989182e-01, 9.999989789e-01, + 9.999990362e-01, 9.999990903e-01, 9.999991414e-01, 9.999991896e-01, + 9.999992351e-01, 9.999992780e-01, 9.999993185e-01, 9.999993568e-01, + 9.999993929e-01, 9.999994269e-01, 9.999994591e-01, 9.999994895e-01, + 9.999995181e-01, 9.999995452e-01, 9.999995707e-01, 9.999995948e-01, + 9.999996175e-01, 9.999996390e-01, 9.999996593e-01, 9.999996784e-01, + 9.999996964e-01, 9.999997135e-01, 9.999997296e-01, 9.999997447e-01, + 9.999997591e-01, 9.999997726e-01, 9.999997853e-01, 9.999997974e-01, + 9.999998088e-01, 9.999998195e-01, 9.999998296e-01, 9.999998392e-01, + 9.999998482e-01, 9.999998567e-01, 9.999998648e-01, 9.999998724e-01, + 9.999998795e-01, +}; + + +const float* lookup_table_table[] = { + lut_sine, + lut_fm_frequency_quantizer, + lut_fold, + lut_fold_2, + lut_stiffness, + lut_svf_shift, +}; + +const int16_t lut_ws_inverse_tan[] = { + -32767, -26872, -24921, -23661, + -22748, -22047, -21486, -21026, + -20640, -20310, -20025, -19775, + -19554, -19358, -19181, -19021, + -18875, -18742, -18620, -18507, + -18402, -18304, -18213, -18128, + -18047, -17971, -17900, -17832, + -17767, -17706, -17647, -17591, + -17537, -17485, -17435, -17387, + -17341, -17296, -17253, -17211, + -17170, -17130, -17092, -17054, + -17017, -16981, -16945, -16911, + -16877, -16843, -16810, -16778, + -16746, -16715, -16683, -16652, + -16622, -16592, -16561, -16531, + -16502, -16472, -16442, -16413, + -16384, -16354, -16325, -16295, + -16265, -16236, -16206, -16175, + -16145, -16115, -16084, -16052, + -16021, -15989, -15957, -15924, + -15890, -15856, -15822, -15786, + -15750, -15713, -15675, -15637, + -15597, -15556, -15514, -15471, + -15426, -15380, -15332, -15282, + -15230, -15176, -15120, -15061, + -15000, -14935, -14867, -14796, + -14720, -14639, -14554, -14463, + -14365, -14260, -14147, -14025, + -13892, -13746, -13586, -13409, + -13213, -12992, -12742, -12457, + -12127, -11741, -11281, -10720, + -10019, -9106, -7846, -5895, + 0, 5895, 7846, 9106, + 10019, 10720, 11281, 11741, + 12127, 12457, 12742, 12992, + 13213, 13409, 13586, 13746, + 13892, 14025, 14147, 14260, + 14365, 14463, 14554, 14639, + 14720, 14796, 14867, 14935, + 15000, 15061, 15120, 15176, + 15230, 15282, 15332, 15380, + 15426, 15471, 15514, 15556, + 15597, 15637, 15675, 15713, + 15750, 15786, 15822, 15856, + 15890, 15924, 15957, 15989, + 16021, 16052, 16084, 16115, + 16145, 16175, 16206, 16236, + 16265, 16295, 16325, 16354, + 16384, 16413, 16442, 16472, + 16502, 16531, 16561, 16592, + 16622, 16652, 16683, 16715, + 16746, 16778, 16810, 16843, + 16877, 16911, 16945, 16981, + 17017, 17054, 17092, 17130, + 17170, 17211, 17253, 17296, + 17341, 17387, 17435, 17485, + 17537, 17591, 17647, 17706, + 17767, 17832, 17900, 17971, + 18047, 18128, 18213, 18304, + 18402, 18507, 18620, 18742, + 18875, 19021, 19181, 19358, + 19554, 19775, 20025, 20310, + 20640, 21026, 21486, 22047, + 22748, 23661, 24921, 26872, + 32767, +}; +const int16_t lut_ws_inverse_sin[] = { + -32767, -30921, -30153, -29561, + -29060, -28617, -28215, -27843, + -27496, -27169, -26858, -26561, + -26276, -26001, -25736, -25479, + -25229, -24986, -24748, -24517, + -24290, -24068, -23850, -23636, + -23425, -23218, -23014, -22813, + -22614, -22419, -22225, -22034, + -21845, -21657, -21472, -21288, + -21106, -20926, -20747, -20569, + -20393, -20218, -20043, -19870, + -19698, -19527, -19357, -19188, + -19019, -18851, -18684, -18517, + -18351, -18185, -18020, -17855, + -17691, -17527, -17363, -17199, + -17036, -16873, -16709, -16546, + -16384, -16221, -16058, -15894, + -15731, -15568, -15404, -15240, + -15076, -14912, -14747, -14582, + -14416, -14250, -14083, -13916, + -13748, -13579, -13410, -13240, + -13069, -12897, -12724, -12549, + -12374, -12198, -12020, -11841, + -11661, -11479, -11295, -11110, + -10922, -10733, -10542, -10348, + -10153, -9954, -9753, -9549, + -9342, -9131, -8917, -8699, + -8477, -8250, -8019, -7781, + -7538, -7288, -7031, -6766, + -6491, -6206, -5909, -5598, + -5271, -4924, -4552, -4150, + -3707, -3206, -2614, -1846, + 0, 1846, 2614, 3206, + 3707, 4150, 4552, 4924, + 5271, 5598, 5909, 6206, + 6491, 6766, 7031, 7288, + 7538, 7781, 8019, 8250, + 8477, 8699, 8917, 9131, + 9342, 9549, 9753, 9954, + 10153, 10348, 10542, 10733, + 10922, 11110, 11295, 11479, + 11661, 11841, 12020, 12198, + 12374, 12549, 12724, 12897, + 13069, 13240, 13410, 13579, + 13748, 13916, 14083, 14250, + 14416, 14582, 14747, 14912, + 15076, 15240, 15404, 15568, + 15731, 15894, 16058, 16221, + 16384, 16546, 16709, 16873, + 17036, 17199, 17363, 17527, + 17691, 17855, 18020, 18185, + 18351, 18517, 18684, 18851, + 19019, 19188, 19357, 19527, + 19698, 19870, 20043, 20218, + 20393, 20569, 20747, 20926, + 21106, 21288, 21472, 21657, + 21845, 22034, 22225, 22419, + 22614, 22813, 23014, 23218, + 23425, 23636, 23850, 24068, + 24290, 24517, 24748, 24986, + 25229, 25479, 25736, 26001, + 26276, 26561, 26858, 27169, + 27496, 27843, 28215, 28617, + 29060, 29561, 30153, 30921, + 32767, +}; +const int16_t lut_ws_linear[] = { + -32767, -32511, -32255, -31999, + -31743, -31487, -31231, -30975, + -30719, -30463, -30207, -29951, + -29695, -29439, -29183, -28927, + -28671, -28415, -28159, -27903, + -27647, -27391, -27135, -26879, + -26623, -26367, -26111, -25855, + -25599, -25343, -25087, -24831, + -24575, -24319, -24063, -23807, + -23551, -23295, -23039, -22783, + -22527, -22271, -22015, -21759, + -21503, -21247, -20991, -20735, + -20479, -20223, -19967, -19711, + -19455, -19199, -18943, -18687, + -18431, -18175, -17919, -17663, + -17407, -17151, -16895, -16639, + -16384, -16128, -15872, -15616, + -15360, -15104, -14848, -14592, + -14336, -14080, -13824, -13568, + -13312, -13056, -12800, -12544, + -12288, -12032, -11776, -11520, + -11264, -11008, -10752, -10496, + -10240, -9984, -9728, -9472, + -9216, -8960, -8704, -8448, + -8192, -7936, -7680, -7424, + -7168, -6912, -6656, -6400, + -6144, -5888, -5632, -5376, + -5120, -4864, -4608, -4352, + -4096, -3840, -3584, -3328, + -3072, -2816, -2560, -2304, + -2048, -1792, -1536, -1280, + -1024, -768, -512, -256, + 0, 256, 512, 768, + 1024, 1280, 1536, 1792, + 2048, 2304, 2560, 2816, + 3072, 3328, 3584, 3840, + 4096, 4352, 4608, 4864, + 5120, 5376, 5632, 5888, + 6144, 6400, 6656, 6912, + 7168, 7424, 7680, 7936, + 8192, 8448, 8704, 8960, + 9216, 9472, 9728, 9984, + 10240, 10496, 10752, 11008, + 11264, 11520, 11776, 12032, + 12288, 12544, 12800, 13056, + 13312, 13568, 13824, 14080, + 14336, 14592, 14848, 15104, + 15360, 15616, 15872, 16128, + 16384, 16639, 16895, 17151, + 17407, 17663, 17919, 18175, + 18431, 18687, 18943, 19199, + 19455, 19711, 19967, 20223, + 20479, 20735, 20991, 21247, + 21503, 21759, 22015, 22271, + 22527, 22783, 23039, 23295, + 23551, 23807, 24063, 24319, + 24575, 24831, 25087, 25343, + 25599, 25855, 26111, 26367, + 26623, 26879, 27135, 27391, + 27647, 27903, 28159, 28415, + 28671, 28927, 29183, 29439, + 29695, 29951, 30207, 30463, + 30719, 30975, 31231, 31487, + 31743, 31999, 32255, 32511, + 32767, +}; +const int16_t lut_ws_bump[] = { + 0, -36, -150, -348, + -636, -1017, -1496, -2074, + -2752, -3528, -4401, -5366, + -6417, -7548, -8750, -10013, + -11327, -12679, -14056, -15444, + -16829, -18197, -19530, -20816, + -22039, -23185, -24239, -25190, + -26025, -26733, -27306, -27736, + -28018, -28214, -28391, -28550, + -28690, -28810, -28912, -28994, + -29056, -29099, -29122, -29125, + -29109, -29073, -29017, -28941, + -28846, -28732, -28599, -28446, + -28275, -28085, -27877, -27651, + -27407, -27145, -26867, -26572, + -26260, -25933, -25590, -25233, + -24861, -24475, -24075, -23663, + -23238, -22802, -22354, -21896, + -21428, -20951, -20465, -19971, + -19469, -18961, -18447, -17928, + -17404, -16877, -16346, -15813, + -15278, -14742, -14206, -13670, + -13136, -12603, -12073, -11547, + -11025, -10507, -9995, -9489, + -8990, -8499, -8015, -7541, + -7076, -6621, -6178, -5745, + -5324, -4916, -4521, -4140, + -3773, -3420, -3082, -2760, + -2454, -2165, -1892, -1636, + -1398, -1178, -976, -792, + -627, -481, -354, -246, + -158, -89, -39, -10, + 0, 10, 39, 89, + 158, 246, 354, 481, + 627, 792, 976, 1178, + 1398, 1636, 1892, 2165, + 2454, 2760, 3082, 3420, + 3773, 4140, 4521, 4916, + 5324, 5745, 6178, 6621, + 7076, 7541, 8015, 8499, + 8990, 9489, 9995, 10507, + 11025, 11547, 12073, 12603, + 13136, 13670, 14206, 14742, + 15278, 15813, 16346, 16877, + 17404, 17928, 18447, 18961, + 19469, 19971, 20465, 20951, + 21428, 21896, 22354, 22802, + 23238, 23663, 24075, 24475, + 24861, 25233, 25590, 25933, + 26260, 26572, 26867, 27145, + 27407, 27651, 27877, 28085, + 28275, 28446, 28599, 28732, + 28846, 28941, 29017, 29073, + 29109, 29125, 29122, 29099, + 29056, 28994, 28912, 28810, + 28690, 28550, 28391, 28214, + 28018, 27736, 27306, 26733, + 26025, 25190, 24239, 23185, + 22039, 20816, 19530, 18197, + 16829, 15444, 14056, 12679, + 11327, 10013, 8750, 7548, + 6417, 5366, 4401, 3528, + 2752, 2074, 1496, 1017, + 636, 348, 150, 36, + 0, +}; +const int16_t lut_ws_double_bump[] = { + 32767, 32745, 32678, 32567, + 32412, 32213, 31971, 31685, + 31356, 30985, 30571, 30117, + 29621, 29085, 28510, 27896, + 27245, 26556, 25832, 25072, + 24279, 23452, 22594, 21705, + 20787, 19841, 18868, 17869, + 16846, 15800, 14732, 13645, + 12539, 11417, 10278, 9126, + 7962, 6786, 5602, 4410, + 3212, 2009, 804, -402, + -1608, -2811, -4011, -5205, + -6393, -7571, -8739, -9896, + -11039, -12167, -13279, -14372, + -15446, -16499, -17530, -18537, + -19519, -20475, -21403, -22301, + -23170, -24007, -24811, -25582, + -26319, -27019, -27683, -28310, + -28898, -29447, -29956, -30424, + -30852, -31237, -31580, -31880, + -32137, -32351, -32521, -32646, + -32728, -32765, -32757, -32705, + -32609, -32469, -32285, -32057, + -31785, -31470, -31113, -30714, + -30273, -29791, -29268, -28706, + -28105, -27466, -26790, -26077, + -25329, -24547, -23731, -22884, + -22005, -21096, -20159, -19195, + -18204, -17189, -16151, -15090, + -14010, -12910, -11793, -10659, + -9512, -8351, -7179, -5998, + -4808, -3612, -2410, -1206, + 0, 1206, 2410, 3612, + 4808, 5998, 7179, 8351, + 9512, 10659, 11793, 12910, + 14010, 15090, 16151, 17189, + 18204, 19195, 20159, 21096, + 22005, 22884, 23731, 24547, + 25329, 26077, 26790, 27466, + 28105, 28706, 29268, 29791, + 30273, 30714, 31113, 31470, + 31785, 32057, 32285, 32469, + 32609, 32705, 32757, 32765, + 32728, 32646, 32521, 32351, + 32137, 31880, 31580, 31237, + 30852, 30424, 29956, 29447, + 28898, 28310, 27683, 27019, + 26319, 25582, 24811, 24007, + 23170, 22301, 21403, 20475, + 19519, 18537, 17530, 16499, + 15446, 14372, 13279, 12167, + 11039, 9896, 8739, 7571, + 6393, 5205, 4011, 2811, + 1608, 402, -804, -2009, + -3212, -4410, -5602, -6786, + -7962, -9126, -10278, -11417, + -12539, -13645, -14732, -15800, + -16846, -17869, -18868, -19841, + -20787, -21705, -22594, -23452, + -24279, -25072, -25832, -26556, + -27245, -27896, -28510, -29085, + -29621, -30117, -30571, -30985, + -31356, -31685, -31971, -32213, + -32412, -32567, -32678, -32745, + -32767, +}; + + +const int16_t* lookup_table_i16_table[] = { + lut_ws_inverse_tan, + lut_ws_inverse_sin, + lut_ws_linear, + lut_ws_bump, + lut_ws_double_bump, + lut_ws_double_bump, +}; + +const int8_t lut_lpc_excitation_pulse[] = { + 0, 0, 0, 0, + 1, 1, 1, 2, + 3, 3, 4, 5, + 6, 7, 8, 9, + 10, 12, 13, 15, + 17, 19, 21, 23, + 25, 28, 30, 33, + 36, 38, 41, 44, + 48, 51, 54, 57, + 61, 64, 68, 71, + 75, 78, 82, 85, + 89, 92, 95, 99, + 102, 105, 108, 110, + 113, 115, 118, 120, + 121, 123, 124, 125, + 126, 127, 127, 127, + 127, 126, 125, 124, + 122, 121, 118, 116, + 113, 110, 107, 104, + 100, 96, 92, 87, + 83, 78, 73, 68, + 63, 58, 53, 47, + 42, 37, 31, 26, + 21, 16, 11, 6, + 1, -3, -8, -12, + -16, -20, -23, -26, + -29, -32, -35, -37, + -39, -40, -42, -43, + -43, -44, -44, -44, + -44, -44, -43, -42, + -41, -40, -39, -38, + -36, -35, -33, -32, + -30, -29, -27, -26, + -24, -23, -22, -20, + -19, -18, -18, -17, + -16, -16, -16, -16, + -16, -16, -17, -17, + -18, -19, -20, -21, + -23, -24, -26, -27, + -29, -30, -32, -34, + -35, -37, -39, -40, + -42, -43, -44, -46, + -47, -48, -48, -49, + -49, -50, -50, -50, + -49, -49, -48, -47, + -46, -45, -44, -42, + -41, -39, -37, -35, + -33, -31, -29, -27, + -25, -23, -20, -18, + -16, -14, -13, -11, + -9, -8, -7, -6, + -5, -4, -3, -3, + -3, -3, -3, -4, + -5, -6, -7, -9, + -10, -12, -14, -16, + -18, -21, -23, -26, + -29, -32, -34, -37, + -40, -43, -46, -49, + -51, -54, -56, -59, + -61, -63, -65, -67, + -68, -70, -71, -72, + -72, -73, -73, -73, + -73, -72, -72, -71, + -70, -69, -67, -66, + -64, -63, -61, -59, + -57, -54, -52, -50, + -48, -45, -43, -41, + -39, -37, -35, -33, + -31, -29, -27, -26, + -25, -23, -22, -21, + -20, -20, -19, -19, + -19, -18, -18, -18, + -19, -19, -19, -20, + -20, -21, -21, -22, + -22, -23, -23, -24, + -24, -25, -25, -25, + -26, -26, -26, -25, + -25, -25, -24, -24, + -23, -22, -21, -20, + -19, -18, -16, -15, + -13, -12, -10, -8, + -6, -4, -3, -1, + 1, 3, 5, 7, + 8, 10, 12, 13, + 15, 16, 17, 18, + 19, 20, 21, 21, + 22, 22, 22, 22, + 22, 22, 22, 22, + 21, 21, 20, 19, + 19, 18, 17, 16, + 15, 14, 14, 13, + 12, 11, 10, 10, + 9, 9, 8, 8, + 8, 8, 8, 8, + 8, 8, 8, 9, + 9, 10, 11, 12, + 13, 14, 15, 16, + 17, 18, 19, 21, + 22, 23, 24, 26, + 27, 28, 29, 30, + 31, 32, 33, 33, + 34, 35, 35, 35, + 36, 36, 36, 36, + 35, 35, 35, 34, + 34, 33, 33, 32, + 31, 30, 30, 29, + 28, 27, 26, 25, + 25, 24, 23, 22, + 22, 21, 20, 20, + 19, 19, 19, 19, + 19, 19, 19, 19, + 19, 19, 20, 20, + 21, 21, 22, 22, + 23, 23, 24, 25, + 25, 26, 27, 27, + 28, 29, 29, 29, + 30, 30, 30, 31, + 31, 31, 31, 30, + 30, 30, 29, 29, + 28, 28, 27, 26, + 26, 25, 24, 23, + 22, 21, 20, 19, + 18, 17, 16, 15, + 15, 14, 13, 12, + 12, 11, 10, 10, + 10, 9, 9, 9, + 9, 9, 9, 9, + 9, 10, 10, 10, + 11, 11, 12, 12, + 12, 13, 13, 14, + 14, 14, 15, 15, + 15, 15, 15, 15, + 15, 15, 15, 15, + 14, 14, 14, 13, + 12, 12, 11, 10, + 9, 8, 8, 7, + 6, 5, 4, 3, + 2, 1, 0, -1, + -2, -3, -4, -4, + -5, -6, -6, -7, + -7, -8, -8, -8, + -9, -9, -9, -9, + -9, -9, -9, -9, + -8, -8, -8, -7, + -7, -7, -6, -6, + -5, -5, -5, -4, + -4, -4, -3, -3, + -3, -2, -2, -2, + -2, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -2, -2, + -2, -2, -2, -2, + -2, -2, -2, -2, + -2, -2, -2, -2, + -2, -2, -2, -2, + -2, -2, -2, -2, + -2, -1, -1, -1, + -1, -1, -1, 0, + 0, 0, 0, 0, +}; + + +const int8_t* lookup_table_i8_table[] = { + lut_lpc_excitation_pulse, +}; + +const int16_t wav_integrated_waves[] = { + -20784, -20822, -20847, -20860, + -20860, -20847, -20822, -20784, + -20734, -20671, -20596, -20509, + -20409, -20297, -20172, -20036, + -19887, -19727, -19554, -19370, + -19174, -18966, -18747, -18517, + -18276, -18024, -17760, -17486, + -17202, -16907, -16602, -16287, + -15962, -15628, -15284, -14931, + -14569, -14198, -13819, -13431, + -13035, -12632, -12220, -11802, + -11376, -10944, -10504, -10059, + -9607, -9150, -8687, -8219, + -7746, -7268, -6786, -6300, + -5810, -5317, -4820, -4321, + -3818, -3314, -2808, -2299, + -1790, -1279, -768, -256, + 256, 768, 1279, 1790, + 2299, 2808, 3314, 3818, + 4321, 4820, 5317, 5810, + 6300, 6786, 7268, 7746, + 8219, 8687, 9150, 9607, + 10059, 10504, 10944, 11376, + 11802, 12220, 12632, 13035, + 13431, 13819, 14198, 14569, + 14931, 15284, 15628, 15962, + 16287, 16602, 16907, 17202, + 17486, 17760, 18024, 18276, + 18517, 18747, 18966, 19174, + 19370, 19554, 19727, 19887, + 20036, 20172, 20297, 20409, + 20509, 20596, 20671, 20734, + 20784, 20822, 20847, 20860, + 20860, 20847, 20822, 20784, + 20734, 20671, 20596, 20509, + 20409, 20297, 20172, 20036, + 19887, 19727, 19554, 19370, + 19174, 18966, 18747, 18517, + 18276, 18024, 17760, 17486, + 17202, 16907, 16602, 16287, + 15962, 15628, 15284, 14931, + 14569, 14198, 13819, 13431, + 13035, 12632, 12220, 11802, + 11376, 10944, 10504, 10059, + 9607, 9150, 8687, 8219, + 7746, 7268, 6786, 6300, + 5810, 5317, 4820, 4321, + 3818, 3314, 2808, 2299, + 1790, 1279, 768, 256, + -256, -768, -1279, -1790, + -2299, -2808, -3314, -3818, + -4321, -4820, -5317, -5810, + -6300, -6786, -7268, -7746, + -8219, -8687, -9150, -9607, + -10059, -10504, -10944, -11376, + -11802, -12220, -12632, -13035, + -13431, -13819, -14198, -14569, + -14931, -15284, -15628, -15962, + -16287, -16602, -16907, -17202, + -17486, -17760, -18024, -18276, + -18517, -18747, -18966, -19174, + -19370, -19554, -19727, -19887, + -20036, -20172, -20297, -20409, + -20509, -20596, -20671, -20734, + -20784, -20822, -20847, -20860, + -10278, -10353, -10403, -10428, + -10428, -10403, -10353, -10278, + -10178, -10054, -9905, -9732, + -9537, -9318, -9076, -8813, + -8529, -8224, -7899, -7555, + -7193, -6814, -6418, -6007, + -5581, -5142, -4690, -4227, + -3754, -3272, -2782, -2286, + -1783, -1277, -767, -256, + 256, 767, 1277, 1783, + 2286, 2782, 3272, 3754, + 4227, 4690, 5142, 5581, + 6007, 6418, 6814, 7193, + 7555, 7899, 8224, 8529, + 8813, 9076, 9318, 9537, + 9732, 9905, 10054, 10178, + 10278, 10353, 10403, 10428, + 10428, 10403, 10353, 10278, + 10178, 10054, 9905, 9732, + 9537, 9318, 9076, 8813, + 8529, 8224, 7899, 7555, + 7193, 6814, 6418, 6007, + 5581, 5142, 4690, 4227, + 3754, 3272, 2782, 2286, + 1783, 1277, 767, 256, + -256, -767, -1277, -1783, + -2286, -2782, -3272, -3754, + -4227, -4690, -5142, -5581, + -6007, -6418, -6814, -7193, + -7555, -7899, -8224, -8529, + -8813, -9076, -9318, -9537, + -9732, -9905, -10054, -10178, + -10278, -10353, -10403, -10428, + -10428, -10403, -10353, -10278, + -10178, -10054, -9905, -9732, + -9537, -9318, -9076, -8813, + -8529, -8224, -7899, -7555, + -7193, -6814, -6418, -6007, + -5581, -5142, -4690, -4227, + -3754, -3272, -2782, -2286, + -1783, -1277, -767, -256, + 256, 767, 1277, 1783, + 2286, 2782, 3272, 3754, + 4227, 4690, 5142, 5581, + 6007, 6418, 6814, 7193, + 7555, 7899, 8224, 8529, + 8813, 9076, 9318, 9537, + 9732, 9905, 10054, 10178, + 10278, 10353, 10403, 10428, + 10428, 10403, 10353, 10278, + 10178, 10054, 9905, 9732, + 9537, 9318, 9076, 8813, + 8529, 8224, 7899, 7555, + 7193, 6814, 6418, 6007, + 5581, 5142, 4690, 4227, + 3754, 3272, 2782, 2286, + 1783, 1277, 767, 256, + -256, -767, -1277, -1783, + -2286, -2782, -3272, -3754, + -4227, -4690, -5142, -5581, + -6007, -6418, -6814, -7193, + -7555, -7899, -8224, -8529, + -8813, -9076, -9318, -9537, + -9732, -9905, -10054, -10178, + -10278, -10353, -10403, -10428, + -6725, -6838, -6913, -6950, + -6950, -6913, -6838, -6725, + -6577, -6393, -6174, -5921, + -5637, -5322, -4978, -4607, + -4211, -3793, -3354, -2896, + -2423, -1937, -1440, -936, + -426, 85, 597, 1105, + 1607, 2100, 2583, 3051, + 3502, 3935, 4346, 4734, + 5096, 5430, 5735, 6009, + 6250, 6458, 6630, 6767, + 6867, 6930, 6955, 6942, + 6892, 6804, 6680, 6519, + 6323, 6093, 5830, 5535, + 5210, 4857, 4478, 4074, + 3649, 3203, 2740, 2263, + 1773, 1273, 767, 256, + -256, -767, -1273, -1773, + -2263, -2740, -3203, -3649, + -4074, -4478, -4857, -5210, + -5535, -5830, -6093, -6323, + -6519, -6680, -6804, -6892, + -6942, -6955, -6930, -6867, + -6767, -6630, -6458, -6250, + -6009, -5735, -5430, -5096, + -4734, -4346, -3935, -3502, + -3051, -2583, -2100, -1607, + -1105, -597, -85, 426, + 936, 1440, 1937, 2423, + 2896, 3354, 3793, 4211, + 4607, 4978, 5322, 5637, + 5921, 6174, 6393, 6577, + 6725, 6838, 6913, 6950, + 6950, 6913, 6838, 6725, + 6577, 6393, 6174, 5921, + 5637, 5322, 4978, 4607, + 4211, 3793, 3354, 2896, + 2423, 1937, 1440, 936, + 426, -85, -597, -1105, + -1607, -2100, -2583, -3051, + -3502, -3935, -4346, -4734, + -5096, -5430, -5735, -6009, + -6250, -6458, -6630, -6767, + -6867, -6930, -6955, -6942, + -6892, -6804, -6680, -6519, + -6323, -6093, -5830, -5535, + -5210, -4857, -4478, -4074, + -3649, -3203, -2740, -2263, + -1773, -1273, -767, -256, + 256, 767, 1273, 1773, + 2263, 2740, 3203, 3649, + 4074, 4478, 4857, 5210, + 5535, 5830, 6093, 6323, + 6519, 6680, 6804, 6892, + 6942, 6955, 6930, 6867, + 6767, 6630, 6458, 6250, + 6009, 5735, 5430, 5096, + 4734, 4346, 3935, 3502, + 3051, 2583, 2100, 1607, + 1105, 597, 85, -426, + -936, -1440, -1937, -2423, + -2896, -3354, -3793, -4211, + -4607, -4978, -5322, -5637, + -5921, -6174, -6393, -6577, + -6725, -6838, -6913, -6950, + -4912, -5061, -5161, -5211, + -5211, -5161, -5061, -4912, + -4716, -4475, -4191, -3866, + -3504, -3108, -2682, -2231, + -1758, -1268, -766, -256, + 256, 766, 1268, 1758, + 2231, 2682, 3108, 3504, + 3866, 4191, 4475, 4716, + 4912, 5061, 5161, 5211, + 5211, 5161, 5061, 4912, + 4716, 4475, 4191, 3866, + 3504, 3108, 2682, 2231, + 1758, 1268, 766, 256, + -256, -766, -1268, -1758, + -2231, -2682, -3108, -3504, + -3866, -4191, -4475, -4716, + -4912, -5061, -5161, -5211, + -5211, -5161, -5061, -4912, + -4716, -4475, -4191, -3866, + -3504, -3108, -2682, -2231, + -1758, -1268, -766, -256, + 256, 766, 1268, 1758, + 2231, 2682, 3108, 3504, + 3866, 4191, 4475, 4716, + 4912, 5061, 5161, 5211, + 5211, 5161, 5061, 4912, + 4716, 4475, 4191, 3866, + 3504, 3108, 2682, 2231, + 1758, 1268, 766, 256, + -256, -766, -1268, -1758, + -2231, -2682, -3108, -3504, + -3866, -4191, -4475, -4716, + -4912, -5061, -5161, -5211, + -5211, -5161, -5061, -4912, + -4716, -4475, -4191, -3866, + -3504, -3108, -2682, -2231, + -1758, -1268, -766, -256, + 256, 766, 1268, 1758, + 2231, 2682, 3108, 3504, + 3866, 4191, 4475, 4716, + 4912, 5061, 5161, 5211, + 5211, 5161, 5061, 4912, + 4716, 4475, 4191, 3866, + 3504, 3108, 2682, 2231, + 1758, 1268, 766, 256, + -256, -766, -1268, -1758, + -2231, -2682, -3108, -3504, + -3866, -4191, -4475, -4716, + -4912, -5061, -5161, -5211, + -5211, -5161, -5061, -4912, + -4716, -4475, -4191, -3866, + -3504, -3108, -2682, -2231, + -1758, -1268, -766, -256, + 256, 766, 1268, 1758, + 2231, 2682, 3108, 3504, + 3866, 4191, 4475, 4716, + 4912, 5061, 5161, 5211, + 5211, 5161, 5061, 4912, + 4716, 4475, 4191, 3866, + 3504, 3108, 2682, 2231, + 1758, 1268, 766, 256, + -256, -766, -1268, -1758, + -2231, -2682, -3108, -3504, + -3866, -4191, -4475, -4716, + -4912, -5061, -5161, -5211, + -3796, -3980, -4104, -4167, + -4167, -4104, -3980, -3796, + -3554, -3259, -2916, -2528, + -2102, -1645, -1163, -663, + -154, 358, 865, 1358, + 1831, 2277, 2688, 3059, + 3383, 3657, 3876, 4037, + 4137, 4174, 4149, 4062, + 3913, 3706, 3442, 3127, + 2765, 2362, 1923, 1455, + 965, 460, -51, -562, + -1064, -1550, -2013, -2446, + -2841, -3194, -3499, -3752, + -3948, -4084, -4159, -4172, + -4122, -4010, -3837, -3607, + -3322, -2988, -2609, -2190, + -1738, -1261, -764, -256, + 256, 764, 1261, 1738, + 2190, 2609, 2988, 3322, + 3607, 3837, 4010, 4122, + 4172, 4159, 4084, 3948, + 3752, 3499, 3194, 2841, + 2446, 2013, 1550, 1064, + 562, 51, -460, -965, + -1455, -1923, -2362, -2765, + -3127, -3442, -3706, -3913, + -4062, -4149, -4174, -4137, + -4037, -3876, -3657, -3383, + -3059, -2688, -2277, -1831, + -1358, -865, -358, 154, + 663, 1163, 1645, 2102, + 2528, 2916, 3259, 3554, + 3796, 3980, 4104, 4167, + 4167, 4104, 3980, 3796, + 3554, 3259, 2916, 2528, + 2102, 1645, 1163, 663, + 154, -358, -865, -1358, + -1831, -2277, -2688, -3059, + -3383, -3657, -3876, -4037, + -4137, -4174, -4149, -4062, + -3913, -3706, -3442, -3127, + -2765, -2362, -1923, -1455, + -965, -460, 51, 562, + 1064, 1550, 2013, 2446, + 2841, 3194, 3499, 3752, + 3948, 4084, 4159, 4172, + 4122, 4010, 3837, 3607, + 3322, 2988, 2609, 2190, + 1738, 1261, 764, 256, + -256, -764, -1261, -1738, + -2190, -2609, -2988, -3322, + -3607, -3837, -4010, -4122, + -4172, -4159, -4084, -3948, + -3752, -3499, -3194, -2841, + -2446, -2013, -1550, -1064, + -562, -51, 460, 965, + 1455, 1923, 2362, 2765, + 3127, 3442, 3706, 3913, + 4062, 4149, 4174, 4137, + 4037, 3876, 3657, 3383, + 3059, 2688, 2277, 1831, + 1358, 865, 358, -154, + -663, -1163, -1645, -2102, + -2528, -2916, -3259, -3554, + -3796, -3980, -4104, -4167, + -3028, -3247, -3395, -3471, + -3471, -3395, -3247, -3028, + -2743, -2400, -2004, -1565, + -1092, -595, -85, 426, + 928, 1410, 1862, 2273, + 2635, 2940, 3181, 3354, + 3454, 3479, 3429, 3304, + 3108, 2845, 2520, 2141, + 1715, 1252, 762, 256, + -256, -762, -1252, -1715, + -2141, -2520, -2845, -3108, + -3304, -3429, -3479, -3454, + -3354, -3181, -2940, -2635, + -2273, -1862, -1410, -928, + -426, 85, 595, 1092, + 1565, 2004, 2400, 2743, + 3028, 3247, 3395, 3471, + 3471, 3395, 3247, 3028, + 2743, 2400, 2004, 1565, + 1092, 595, 85, -426, + -928, -1410, -1862, -2273, + -2635, -2940, -3181, -3354, + -3454, -3479, -3429, -3304, + -3108, -2845, -2520, -2141, + -1715, -1252, -762, -256, + 256, 762, 1252, 1715, + 2141, 2520, 2845, 3108, + 3304, 3429, 3479, 3454, + 3354, 3181, 2940, 2635, + 2273, 1862, 1410, 928, + 426, -85, -595, -1092, + -1565, -2004, -2400, -2743, + -3028, -3247, -3395, -3471, + -3471, -3395, -3247, -3028, + -2743, -2400, -2004, -1565, + -1092, -595, -85, 426, + 928, 1410, 1862, 2273, + 2635, 2940, 3181, 3354, + 3454, 3479, 3429, 3304, + 3108, 2845, 2520, 2141, + 1715, 1252, 762, 256, + -256, -762, -1252, -1715, + -2141, -2520, -2845, -3108, + -3304, -3429, -3479, -3454, + -3354, -3181, -2940, -2635, + -2273, -1862, -1410, -928, + -426, 85, 595, 1092, + 1565, 2004, 2400, 2743, + 3028, 3247, 3395, 3471, + 3471, 3395, 3247, 3028, + 2743, 2400, 2004, 1565, + 1092, 595, 85, -426, + -928, -1410, -1862, -2273, + -2635, -2940, -3181, -3354, + -3454, -3479, -3429, -3304, + -3108, -2845, -2520, -2141, + -1715, -1252, -762, -256, + 256, 762, 1252, 1715, + 2141, 2520, 2845, 3108, + 3304, 3429, 3479, 3454, + 3354, 3181, 2940, 2635, + 2273, 1862, 1410, 928, + 426, -85, -595, -1092, + -1565, -2004, -2400, -2743, + -3028, -3247, -3395, -3471, + -2460, -2713, -2885, -2973, + -2973, -2885, -2713, -2460, + -2136, -1748, -1309, -831, + -329, 183, 689, 1176, + 1627, 2031, 2375, 2649, + 2844, 2957, 2982, 2919, + 2770, 2540, 2235, 1864, + 1439, 971, 474, -37, + -546, -1040, -1502, -1921, + -2283, -2578, -2797, -2933, + -2984, -2946, -2821, -2614, + -2330, -1977, -1565, -1108, + -618, -110, 402, 901, + 1374, 1807, 2186, 2501, + 2742, 2903, 2978, 2966, + 2866, 2681, 2418, 2084, + 1688, 1243, 760, 256, + -256, -760, -1243, -1688, + -2084, -2418, -2681, -2866, + -2966, -2978, -2903, -2742, + -2501, -2186, -1807, -1374, + -901, -402, 110, 618, + 1108, 1565, 1977, 2330, + 2614, 2821, 2946, 2984, + 2933, 2797, 2578, 2283, + 1921, 1502, 1040, 546, + 37, -474, -971, -1439, + -1864, -2235, -2540, -2770, + -2919, -2982, -2957, -2844, + -2649, -2375, -2031, -1627, + -1176, -689, -183, 329, + 831, 1309, 1748, 2136, + 2460, 2713, 2885, 2973, + 2973, 2885, 2713, 2460, + 2136, 1748, 1309, 831, + 329, -183, -689, -1176, + -1627, -2031, -2375, -2649, + -2844, -2957, -2982, -2919, + -2770, -2540, -2235, -1864, + -1439, -971, -474, 37, + 546, 1040, 1502, 1921, + 2283, 2578, 2797, 2933, + 2984, 2946, 2821, 2614, + 2330, 1977, 1565, 1108, + 618, 110, -402, -901, + -1374, -1807, -2186, -2501, + -2742, -2903, -2978, -2966, + -2866, -2681, -2418, -2084, + -1688, -1243, -760, -256, + 256, 760, 1243, 1688, + 2084, 2418, 2681, 2866, + 2966, 2978, 2903, 2742, + 2501, 2186, 1807, 1374, + 901, 402, -110, -618, + -1108, -1565, -1977, -2330, + -2614, -2821, -2946, -2984, + -2933, -2797, -2578, -2283, + -1921, -1502, -1040, -546, + -37, 474, 971, 1439, + 1864, 2235, 2540, 2770, + 2919, 2982, 2957, 2844, + 2649, 2375, 2031, 1627, + 1176, 689, 183, -329, + -831, -1309, -1748, -2136, + -2460, -2713, -2885, -2973, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -10278, -10353, -10403, -10428, + -10428, -10403, -10353, -10278, + -10178, -10054, -9905, -9732, + -9537, -9318, -9076, -8813, + -8529, -8224, -7899, -7555, + -7193, -6814, -6418, -6007, + -5581, -5142, -4690, -4227, + -3754, -3272, -2782, -2286, + -1783, -1277, -767, -256, + 256, 767, 1277, 1783, + 2286, 2782, 3272, 3754, + 4227, 4690, 5142, 5581, + 6007, 6418, 6814, 7193, + 7555, 7899, 8224, 8529, + 8813, 9076, 9318, 9537, + 9732, 9905, 10054, 10178, + 10278, 10353, 10403, 10428, + 10428, 10403, 10353, 10278, + 10178, 10054, 9905, 9732, + 9537, 9318, 9076, 8813, + 8529, 8224, 7899, 7555, + 7193, 6814, 6418, 6007, + 5581, 5142, 4690, 4227, + 3754, 3272, 2782, 2286, + 1783, 1277, 767, 256, + -256, -767, -1277, -1783, + -2286, -2782, -3272, -3754, + -4227, -4690, -5142, -5581, + -6007, -6418, -6814, -7193, + -7555, -7899, -8224, -8529, + -8813, -9076, -9318, -9537, + -9732, -9905, -10054, -10178, + -10278, -10353, -10403, -10428, + -10428, -10403, -10353, -10278, + -10178, -10054, -9905, -9732, + -9537, -9318, -9076, -8813, + -8529, -8224, -7899, -7555, + -7193, -6814, -6418, -6007, + -5581, -5142, -4690, -4227, + -3754, -3272, -2782, -2286, + -1783, -1277, -767, -256, + 256, 767, 1277, 1783, + 2286, 2782, 3272, 3754, + 4227, 4690, 5142, 5581, + 6007, 6418, 6814, 7193, + 7555, 7899, 8224, 8529, + 8813, 9076, 9318, 9537, + 9732, 9905, 10054, 10178, + 10278, 10353, 10403, 10428, + 10428, 10403, 10353, 10278, + 10178, 10054, 9905, 9732, + 9537, 9318, 9076, 8813, + 8529, 8224, 7899, 7555, + 7193, 6814, 6418, 6007, + 5581, 5142, 4690, 4227, + 3754, 3272, 2782, 2286, + 1783, 1277, 767, 256, + -256, -767, -1277, -1783, + -2286, -2782, -3272, -3754, + -4227, -4690, -5142, -5581, + -6007, -6418, -6814, -7193, + -7555, -7899, -8224, -8529, + -8813, -9076, -9318, -9537, + -9732, -9905, -10054, -10178, + -10278, -10353, -10403, -10428, + -6725, -6838, -6913, -6950, + -6950, -6913, -6838, -6725, + -6577, -6393, -6174, -5921, + -5637, -5322, -4978, -4607, + -4211, -3793, -3354, -2896, + -2423, -1937, -1440, -936, + -426, 85, 597, 1105, + 1607, 2100, 2583, 3051, + 3502, 3935, 4346, 4734, + 5096, 5430, 5735, 6009, + 6250, 6458, 6630, 6767, + 6867, 6930, 6955, 6942, + 6892, 6804, 6680, 6519, + 6323, 6093, 5830, 5535, + 5210, 4857, 4478, 4074, + 3649, 3203, 2740, 2263, + 1773, 1273, 767, 256, + -256, -767, -1273, -1773, + -2263, -2740, -3203, -3649, + -4074, -4478, -4857, -5210, + -5535, -5830, -6093, -6323, + -6519, -6680, -6804, -6892, + -6942, -6955, -6930, -6867, + -6767, -6630, -6458, -6250, + -6009, -5735, -5430, -5096, + -4734, -4346, -3935, -3502, + -3051, -2583, -2100, -1607, + -1105, -597, -85, 426, + 936, 1440, 1937, 2423, + 2896, 3354, 3793, 4211, + 4607, 4978, 5322, 5637, + 5921, 6174, 6393, 6577, + 6725, 6838, 6913, 6950, + 6950, 6913, 6838, 6725, + 6577, 6393, 6174, 5921, + 5637, 5322, 4978, 4607, + 4211, 3793, 3354, 2896, + 2423, 1937, 1440, 936, + 426, -85, -597, -1105, + -1607, -2100, -2583, -3051, + -3502, -3935, -4346, -4734, + -5096, -5430, -5735, -6009, + -6250, -6458, -6630, -6767, + -6867, -6930, -6955, -6942, + -6892, -6804, -6680, -6519, + -6323, -6093, -5830, -5535, + -5210, -4857, -4478, -4074, + -3649, -3203, -2740, -2263, + -1773, -1273, -767, -256, + 256, 767, 1273, 1773, + 2263, 2740, 3203, 3649, + 4074, 4478, 4857, 5210, + 5535, 5830, 6093, 6323, + 6519, 6680, 6804, 6892, + 6942, 6955, 6930, 6867, + 6767, 6630, 6458, 6250, + 6009, 5735, 5430, 5096, + 4734, 4346, 3935, 3502, + 3051, 2583, 2100, 1607, + 1105, 597, 85, -426, + -936, -1440, -1937, -2423, + -2896, -3354, -3793, -4211, + -4607, -4978, -5322, -5637, + -5921, -6174, -6393, -6577, + -6725, -6838, -6913, -6950, + -4912, -5061, -5161, -5211, + -5211, -5161, -5061, -4912, + -4716, -4475, -4191, -3866, + -3504, -3108, -2682, -2231, + -1758, -1268, -766, -256, + 256, 766, 1268, 1758, + 2231, 2682, 3108, 3504, + 3866, 4191, 4475, 4716, + 4912, 5061, 5161, 5211, + 5211, 5161, 5061, 4912, + 4716, 4475, 4191, 3866, + 3504, 3108, 2682, 2231, + 1758, 1268, 766, 256, + -256, -766, -1268, -1758, + -2231, -2682, -3108, -3504, + -3866, -4191, -4475, -4716, + -4912, -5061, -5161, -5211, + -5211, -5161, -5061, -4912, + -4716, -4475, -4191, -3866, + -3504, -3108, -2682, -2231, + -1758, -1268, -766, -256, + 256, 766, 1268, 1758, + 2231, 2682, 3108, 3504, + 3866, 4191, 4475, 4716, + 4912, 5061, 5161, 5211, + 5211, 5161, 5061, 4912, + 4716, 4475, 4191, 3866, + 3504, 3108, 2682, 2231, + 1758, 1268, 766, 256, + -256, -766, -1268, -1758, + -2231, -2682, -3108, -3504, + -3866, -4191, -4475, -4716, + -4912, -5061, -5161, -5211, + -5211, -5161, -5061, -4912, + -4716, -4475, -4191, -3866, + -3504, -3108, -2682, -2231, + -1758, -1268, -766, -256, + 256, 766, 1268, 1758, + 2231, 2682, 3108, 3504, + 3866, 4191, 4475, 4716, + 4912, 5061, 5161, 5211, + 5211, 5161, 5061, 4912, + 4716, 4475, 4191, 3866, + 3504, 3108, 2682, 2231, + 1758, 1268, 766, 256, + -256, -766, -1268, -1758, + -2231, -2682, -3108, -3504, + -3866, -4191, -4475, -4716, + -4912, -5061, -5161, -5211, + -5211, -5161, -5061, -4912, + -4716, -4475, -4191, -3866, + -3504, -3108, -2682, -2231, + -1758, -1268, -766, -256, + 256, 766, 1268, 1758, + 2231, 2682, 3108, 3504, + 3866, 4191, 4475, 4716, + 4912, 5061, 5161, 5211, + 5211, 5161, 5061, 4912, + 4716, 4475, 4191, 3866, + 3504, 3108, 2682, 2231, + 1758, 1268, 766, 256, + -256, -766, -1268, -1758, + -2231, -2682, -3108, -3504, + -3866, -4191, -4475, -4716, + -4912, -5061, -5161, -5211, + -3028, -3247, -3395, -3471, + -3471, -3395, -3247, -3028, + -2743, -2400, -2004, -1565, + -1092, -595, -85, 426, + 928, 1410, 1862, 2273, + 2635, 2940, 3181, 3354, + 3454, 3479, 3429, 3304, + 3108, 2845, 2520, 2141, + 1715, 1252, 762, 256, + -256, -762, -1252, -1715, + -2141, -2520, -2845, -3108, + -3304, -3429, -3479, -3454, + -3354, -3181, -2940, -2635, + -2273, -1862, -1410, -928, + -426, 85, 595, 1092, + 1565, 2004, 2400, 2743, + 3028, 3247, 3395, 3471, + 3471, 3395, 3247, 3028, + 2743, 2400, 2004, 1565, + 1092, 595, 85, -426, + -928, -1410, -1862, -2273, + -2635, -2940, -3181, -3354, + -3454, -3479, -3429, -3304, + -3108, -2845, -2520, -2141, + -1715, -1252, -762, -256, + 256, 762, 1252, 1715, + 2141, 2520, 2845, 3108, + 3304, 3429, 3479, 3454, + 3354, 3181, 2940, 2635, + 2273, 1862, 1410, 928, + 426, -85, -595, -1092, + -1565, -2004, -2400, -2743, + -3028, -3247, -3395, -3471, + -3471, -3395, -3247, -3028, + -2743, -2400, -2004, -1565, + -1092, -595, -85, 426, + 928, 1410, 1862, 2273, + 2635, 2940, 3181, 3354, + 3454, 3479, 3429, 3304, + 3108, 2845, 2520, 2141, + 1715, 1252, 762, 256, + -256, -762, -1252, -1715, + -2141, -2520, -2845, -3108, + -3304, -3429, -3479, -3454, + -3354, -3181, -2940, -2635, + -2273, -1862, -1410, -928, + -426, 85, 595, 1092, + 1565, 2004, 2400, 2743, + 3028, 3247, 3395, 3471, + 3471, 3395, 3247, 3028, + 2743, 2400, 2004, 1565, + 1092, 595, 85, -426, + -928, -1410, -1862, -2273, + -2635, -2940, -3181, -3354, + -3454, -3479, -3429, -3304, + -3108, -2845, -2520, -2141, + -1715, -1252, -762, -256, + 256, 762, 1252, 1715, + 2141, 2520, 2845, 3108, + 3304, 3429, 3479, 3454, + 3354, 3181, 2940, 2635, + 2273, 1862, 1410, 928, + 426, -85, -595, -1092, + -1565, -2004, -2400, -2743, + -3028, -3247, -3395, -3471, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -2599, -2499, -2303, -2019, + -1657, -1231, -758, -256, + 256, 758, 1231, 1657, + 2019, 2303, 2499, 2599, + 2599, 2499, 2303, 2019, + 1657, 1231, 758, 256, + -256, -758, -1231, -1657, + -2019, -2303, -2499, -2599, + -897, -1293, -1577, -1726, + -1726, -1577, -1293, -897, + -424, 86, 588, 1039, + 1401, 1643, 1743, 1692, + 1496, 1172, 746, 256, + -256, -746, -1172, -1496, + -1692, -1743, -1643, -1401, + -1039, -588, -86, 424, + 897, 1293, 1577, 1726, + 1726, 1577, 1293, 897, + 424, -86, -588, -1039, + -1401, -1643, -1743, -1692, + -1496, -1172, -746, -256, + 256, 746, 1172, 1496, + 1692, 1743, 1643, 1401, + 1039, 588, 86, -424, + -897, -1293, -1577, -1726, + -1726, -1577, -1293, -897, + -424, 86, 588, 1039, + 1401, 1643, 1743, 1692, + 1496, 1172, 746, 256, + -256, -746, -1172, -1496, + -1692, -1743, -1643, -1401, + -1039, -588, -86, 424, + 897, 1293, 1577, 1726, + 1726, 1577, 1293, 897, + 424, -86, -588, -1039, + -1401, -1643, -1743, -1692, + -1496, -1172, -746, -256, + 256, 746, 1172, 1496, + 1692, 1743, 1643, 1401, + 1039, 588, 86, -424, + -897, -1293, -1577, -1726, + -1726, -1577, -1293, -897, + -424, 86, 588, 1039, + 1401, 1643, 1743, 1692, + 1496, 1172, 746, 256, + -256, -746, -1172, -1496, + -1692, -1743, -1643, -1401, + -1039, -588, -86, 424, + 897, 1293, 1577, 1726, + 1726, 1577, 1293, 897, + 424, -86, -588, -1039, + -1401, -1643, -1743, -1692, + -1496, -1172, -746, -256, + 256, 746, 1172, 1496, + 1692, 1743, 1643, 1401, + 1039, 588, 86, -424, + -897, -1293, -1577, -1726, + -1726, -1577, -1293, -897, + -424, 86, 588, 1039, + 1401, 1643, 1743, 1692, + 1496, 1172, 746, 256, + -256, -746, -1172, -1496, + -1692, -1743, -1643, -1401, + -1039, -588, -86, 424, + 897, 1293, 1577, 1726, + 1726, 1577, 1293, 897, + 424, -86, -588, -1039, + -1401, -1643, -1743, -1692, + -1496, -1172, -746, -256, + 256, 746, 1172, 1496, + 1692, 1743, 1643, 1401, + 1039, 588, 86, -424, + -897, -1293, -1577, -1726, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + -1287, -1091, -729, -256, + 256, 729, 1091, 1287, + 1287, 1091, 729, 256, + -256, -729, -1091, -1287, + 416, -86, -559, -844, + -844, -559, -86, 416, + 778, 878, 682, 256, + -256, -682, -878, -778, + -416, 86, 559, 844, + 844, 559, 86, -416, + -778, -878, -682, -256, + 256, 682, 878, 778, + 416, -86, -559, -844, + -844, -559, -86, 416, + 778, 878, 682, 256, + -256, -682, -878, -778, + -416, 86, 559, 844, + 844, 559, 86, -416, + -778, -878, -682, -256, + 256, 682, 878, 778, + 416, -86, -559, -844, + -844, -559, -86, 416, + 778, 878, 682, 256, + -256, -682, -878, -778, + -416, 86, 559, 844, + 844, 559, 86, -416, + -778, -878, -682, -256, + 256, 682, 878, 778, + 416, -86, -559, -844, + -844, -559, -86, 416, + 778, 878, 682, 256, + -256, -682, -878, -778, + -416, 86, 559, 844, + 844, 559, 86, -416, + -778, -878, -682, -256, + 256, 682, 878, 778, + 416, -86, -559, -844, + -844, -559, -86, 416, + 778, 878, 682, 256, + -256, -682, -878, -778, + -416, 86, 559, 844, + 844, 559, 86, -416, + -778, -878, -682, -256, + 256, 682, 878, 778, + 416, -86, -559, -844, + -844, -559, -86, 416, + 778, 878, 682, 256, + -256, -682, -878, -778, + -416, 86, 559, 844, + 844, 559, 86, -416, + -778, -878, -682, -256, + 256, 682, 878, 778, + 416, -86, -559, -844, + -844, -559, -86, 416, + 778, 878, 682, 256, + -256, -682, -878, -778, + -416, 86, 559, 844, + 844, 559, 86, -416, + -778, -878, -682, -256, + 256, 682, 878, 778, + 416, -86, -559, -844, + -844, -559, -86, 416, + 778, 878, 682, 256, + -256, -682, -878, -778, + -416, 86, 559, 844, + 844, 559, 86, -416, + -778, -878, -682, -256, + 256, 682, 878, 778, + 416, -86, -559, -844, + -2665, -2964, -3170, -3276, + -3276, -3170, -2964, -2665, + -2288, -1848, -1364, -856, + -344, 152, 614, 1026, + 1376, 1655, 1858, 1984, + 2034, 2017, 1940, 1815, + 1654, 1471, 1277, 1085, + 905, 746, 612, 506, + 429, 379, 352, 342, + 342, 345, 343, 330, + 301, 251, 177, 80, + -40, -180, -336, -502, + -671, -839, -997, -1141, + -1264, -1362, -1432, -1473, + -1482, -1461, -1411, -1334, + -1232, -1109, -967, -811, + -642, -465, -281, -94, + 94, 281, 465, 642, + 811, 967, 1109, 1232, + 1334, 1411, 1461, 1482, + 1473, 1432, 1362, 1264, + 1141, 997, 839, 671, + 502, 336, 180, 40, + -80, -177, -251, -301, + -330, -343, -345, -342, + -342, -352, -379, -429, + -506, -612, -746, -905, + -1085, -1277, -1471, -1654, + -1815, -1940, -2017, -2034, + -1984, -1858, -1655, -1376, + -1026, -614, -152, 344, + 856, 1364, 1848, 2288, + 2665, 2964, 3170, 3276, + 3276, 3170, 2964, 2665, + 2288, 1848, 1364, 856, + 344, -152, -614, -1026, + -1376, -1655, -1858, -1984, + -2034, -2017, -1940, -1815, + -1654, -1471, -1277, -1085, + -905, -746, -612, -506, + -429, -379, -352, -342, + -342, -345, -343, -330, + -301, -251, -177, -80, + 40, 180, 336, 502, + 671, 839, 997, 1141, + 1264, 1362, 1432, 1473, + 1482, 1461, 1411, 1334, + 1232, 1109, 967, 811, + 642, 465, 281, 94, + -94, -281, -465, -642, + -811, -967, -1109, -1232, + -1334, -1411, -1461, -1482, + -1473, -1432, -1362, -1264, + -1141, -997, -839, -671, + -502, -336, -180, -40, + 80, 177, 251, 301, + 330, 343, 345, 342, + 342, 352, 379, 429, + 506, 612, 746, 905, + 1085, 1277, 1471, 1654, + 1815, 1940, 2017, 2034, + 1984, 1858, 1655, 1376, + 1026, 614, 152, -344, + -856, -1364, -1848, -2288, + -2665, -2964, -3170, -3276, + -1692, -2044, -2292, -2421, + -2421, -2292, -2044, -1692, + -1259, -771, -259, 247, + 716, 1125, 1451, 1682, + 1810, 1835, 1765, 1613, + 1395, 1133, 848, 560, + 288, 48, -151, -302, + -404, -461, -480, -471, + -444, -410, -381, -364, + -364, -383, -421, -474, + -534, -594, -646, -680, + -689, -667, -612, -521, + -398, -248, -76, 109, + 298, 481, 649, 794, + 911, 993, 1039, 1048, + 1020, 958, 865, 745, + 603, 443, 271, 91, + -91, -271, -443, -603, + -745, -865, -958, -1020, + -1048, -1039, -993, -911, + -794, -649, -481, -298, + -109, 76, 248, 398, + 521, 612, 667, 689, + 680, 646, 594, 534, + 474, 421, 383, 364, + 364, 381, 410, 444, + 471, 480, 461, 404, + 302, 151, -48, -288, + -560, -848, -1133, -1395, + -1613, -1765, -1835, -1810, + -1682, -1451, -1125, -716, + -247, 259, 771, 1259, + 1692, 2044, 2292, 2421, + 2421, 2292, 2044, 1692, + 1259, 771, 259, -247, + -716, -1125, -1451, -1682, + -1810, -1835, -1765, -1613, + -1395, -1133, -848, -560, + -288, -48, 151, 302, + 404, 461, 480, 471, + 444, 410, 381, 364, + 364, 383, 421, 474, + 534, 594, 646, 680, + 689, 667, 612, 521, + 398, 248, 76, -109, + -298, -481, -649, -794, + -911, -993, -1039, -1048, + -1020, -958, -865, -745, + -603, -443, -271, -91, + 91, 271, 443, 603, + 745, 865, 958, 1020, + 1048, 1039, 993, 911, + 794, 649, 481, 298, + 109, -76, -248, -398, + -521, -612, -667, -689, + -680, -646, -594, -534, + -474, -421, -383, -364, + -364, -381, -410, -444, + -471, -480, -461, -404, + -302, -151, 48, 288, + 560, 848, 1133, 1395, + 1613, 1765, 1835, 1810, + 1682, 1451, 1125, 716, + 247, -259, -771, -1259, + -1692, -2044, -2292, -2421, + -1090, -1491, -1780, -1932, + -1932, -1780, -1491, -1090, + -613, -101, 402, 855, + 1221, 1476, 1603, 1600, + 1476, 1252, 953, 612, + 261, -68, -351, -569, + -713, -782, -782, -727, + -633, -519, -402, -297, + -214, -157, -126, -114, + -114, -115, -106, -79, + -28, 48, 148, 263, + 383, 498, 595, 661, + 688, 670, 606, 499, + 353, 181, -8, -199, + -380, -539, -667, -756, + -802, -804, -763, -683, + -569, -427, -264, -89, + 89, 264, 427, 569, + 683, 763, 804, 802, + 756, 667, 539, 380, + 199, 8, -181, -353, + -499, -606, -670, -688, + -661, -595, -498, -383, + -263, -148, -48, 28, + 79, 106, 115, 114, + 114, 126, 157, 214, + 297, 402, 519, 633, + 727, 782, 782, 713, + 569, 351, 68, -261, + -612, -953, -1252, -1476, + -1600, -1603, -1476, -1221, + -855, -402, 101, 613, + 1090, 1491, 1780, 1932, + 1932, 1780, 1491, 1090, + 613, 101, -402, -855, + -1221, -1476, -1603, -1600, + -1476, -1252, -953, -612, + -261, 68, 351, 569, + 713, 782, 782, 727, + 633, 519, 402, 297, + 214, 157, 126, 114, + 114, 115, 106, 79, + 28, -48, -148, -263, + -383, -498, -595, -661, + -688, -670, -606, -499, + -353, -181, 8, 199, + 380, 539, 667, 756, + 802, 804, 763, 683, + 569, 427, 264, 89, + -89, -264, -427, -569, + -683, -763, -804, -802, + -756, -667, -539, -380, + -199, -8, 181, 353, + 499, 606, 670, 688, + 661, 595, 498, 383, + 263, 148, 48, -28, + -79, -106, -115, -114, + -114, -126, -157, -214, + -297, -402, -519, -633, + -727, -782, -782, -713, + -569, -351, -68, 261, + 612, 953, 1252, 1476, + 1600, 1603, 1476, 1221, + 855, 402, -101, -613, + -1090, -1491, -1780, -1932, + -343, -816, -1179, -1375, + -1375, -1179, -816, -343, + 169, 644, 1012, 1224, + 1256, 1111, 820, 435, + 17, -369, -671, -853, + -900, -821, -642, -402, + -145, 89, 269, 378, + 415, 391, 326, 243, + 164, 104, 69, 56, + 56, 55, 40, 1, + -64, -149, -242, -326, + -381, -394, -354, -261, + -124, 42, 213, 367, + 481, 539, 533, 462, + 335, 169, -16, -199, + -357, -475, -539, -546, + -496, -395, -254, -87, + 87, 254, 395, 496, + 546, 539, 475, 357, + 199, 16, -169, -335, + -462, -533, -539, -481, + -367, -213, -42, 124, + 261, 354, 394, 381, + 326, 242, 149, 64, + -1, -40, -55, -56, + -56, -69, -104, -164, + -243, -326, -391, -415, + -378, -269, -89, 145, + 402, 642, 821, 900, + 853, 671, 369, -17, + -435, -820, -1111, -1256, + -1224, -1012, -644, -169, + 343, 816, 1179, 1375, + 1375, 1179, 816, 343, + -169, -644, -1012, -1224, + -1256, -1111, -820, -435, + -17, 369, 671, 853, + 900, 821, 642, 402, + 145, -89, -269, -378, + -415, -391, -326, -243, + -164, -104, -69, -56, + -56, -55, -40, -1, + 64, 149, 242, 326, + 381, 394, 354, 261, + 124, -42, -213, -367, + -481, -539, -533, -462, + -335, -169, 16, 199, + 357, 475, 539, 546, + 496, 395, 254, 87, + -87, -254, -395, -496, + -546, -539, -475, -357, + -199, -16, 169, 335, + 462, 533, 539, 481, + 367, 213, 42, -124, + -261, -354, -394, -381, + -326, -242, -149, -64, + 1, 40, 55, 56, + 56, 69, 104, 164, + 243, 326, 391, 415, + 378, 269, 89, -145, + -402, -642, -821, -900, + -853, -671, -369, 17, + 435, 820, 1111, 1256, + 1224, 1012, 644, 169, + -343, -816, -1179, -1375, + 106, -406, -834, -1076, + -1076, -834, -406, 106, + 584, 919, 1039, 926, + 613, 182, -264, -624, + -822, -826, -653, -356, + -14, 291, 497, 571, + 515, 362, 163, -29, + -173, -247, -253, -210, + -145, -86, -48, -34, + -34, -31, -9, 39, + 108, 184, 241, 258, + 218, 122, -16, -168, + -299, -377, -382, -307, + -165, 15, 196, 341, + 421, 420, 339, 195, + 17, -162, -310, -400, + -419, -364, -247, -87, + 87, 247, 364, 419, + 400, 310, 162, -17, + -195, -339, -420, -421, + -341, -196, -15, 165, + 307, 382, 377, 299, + 168, 16, -122, -218, + -258, -241, -184, -108, + -39, 9, 31, 34, + 34, 48, 86, 145, + 210, 253, 247, 173, + 29, -163, -362, -515, + -571, -497, -291, 14, + 356, 653, 826, 822, + 624, 264, -182, -613, + -926, -1039, -919, -584, + -106, 406, 834, 1076, + 1076, 834, 406, -106, + -584, -919, -1039, -926, + -613, -182, 264, 624, + 822, 826, 653, 356, + 14, -291, -497, -571, + -515, -362, -163, 29, + 173, 247, 253, 210, + 145, 86, 48, 34, + 34, 31, 9, -39, + -108, -184, -241, -258, + -218, -122, 16, 168, + 299, 377, 382, 307, + 165, -15, -196, -341, + -421, -420, -339, -195, + -17, 162, 310, 400, + 419, 364, 247, 87, + -87, -247, -364, -419, + -400, -310, -162, 17, + 195, 339, 420, 421, + 341, 196, 15, -165, + -307, -382, -377, -299, + -168, -16, 122, 218, + 258, 241, 184, 108, + 39, -9, -31, -34, + -34, -48, -86, -145, + -210, -253, -247, -173, + -29, 163, 362, 515, + 571, 497, 291, -14, + -356, -653, -826, -822, + -624, -264, 182, 613, + 926, 1039, 919, 584, + 106, -406, -834, -1076, + 556, 92, -420, -751, + -751, -420, 92, 556, + 768, 641, 240, -249, + -609, -689, -470, -65, + 339, 567, 537, 285, + -59, -339, -445, -354, + -133, 105, 259, 280, + 188, 47, -72, -127, + -116, -73, -33, -16, + -16, -10, 22, 75, + 125, 134, 81, -25, + -144, -219, -207, -102, + 58, 207, 278, 236, + 93, -93, -245, -300, + -236, -79, 109, 253, + 298, 230, 76, -104, + -243, -291, -232, -88, + 88, 232, 291, 243, + 104, -76, -230, -298, + -253, -109, 79, 236, + 300, 245, 93, -93, + -236, -278, -207, -58, + 102, 207, 219, 144, + 25, -81, -134, -125, + -75, -22, 10, 16, + 16, 33, 73, 116, + 127, 72, -47, -188, + -280, -259, -105, 133, + 354, 445, 339, 59, + -285, -537, -567, -339, + 65, 470, 689, 609, + 249, -240, -641, -768, + -556, -92, 420, 751, + 751, 420, -92, -556, + -768, -641, -240, 249, + 609, 689, 470, 65, + -339, -567, -537, -285, + 59, 339, 445, 354, + 133, -105, -259, -280, + -188, -47, 72, 127, + 116, 73, 33, 16, + 16, 10, -22, -75, + -125, -134, -81, 25, + 144, 219, 207, 102, + -58, -207, -278, -236, + -93, 93, 245, 300, + 236, 79, -109, -253, + -298, -230, -76, 104, + 243, 291, 232, 88, + -88, -232, -291, -243, + -104, 76, 230, 298, + 253, 109, -79, -236, + -300, -245, -93, 93, + 236, 278, 207, 58, + -102, -207, -219, -144, + -25, 81, 134, 125, + 75, 22, -10, -16, + -16, -33, -73, -116, + -127, -72, 47, 188, + 280, 259, 105, -133, + -354, -445, -339, -59, + 285, 537, 567, 339, + -65, -470, -689, -609, + -249, 240, 641, 768, + 556, 92, -420, -751, + 606, 352, -160, -562, + -562, -160, 352, 606, + 426, -50, -476, -551, + -238, 225, 505, 417, + 49, -324, -443, -249, + 93, 333, 321, 97, + -157, -267, -185, -1, + 143, 163, 78, -25, + -75, -63, -28, -10, + -10, 0, 36, 77, + 77, 11, -86, -144, + -105, 21, 150, 186, + 92, -75, -201, -194, + -52, 130, 228, 174, + 4, -169, -230, -142, + 36, 189, 220, 112, + -65, -199, -208, -87, + 87, 208, 199, 65, + -112, -220, -189, -36, + 142, 230, 169, -4, + -174, -228, -130, 52, + 194, 201, 75, -92, + -186, -150, -21, 105, + 144, 86, -11, -77, + -77, -36, 0, 10, + 10, 28, 63, 75, + 25, -78, -163, -143, + 1, 185, 267, 157, + -97, -321, -333, -93, + 249, 443, 324, -49, + -417, -505, -225, 238, + 551, 476, 50, -426, + -606, -352, 160, 562, + 562, 160, -352, -606, + -426, 50, 476, 551, + 238, -225, -505, -417, + -49, 324, 443, 249, + -93, -333, -321, -97, + 157, 267, 185, 1, + -143, -163, -78, 25, + 75, 63, 28, 10, + 10, 0, -36, -77, + -77, -11, 86, 144, + 105, -21, -150, -186, + -92, 75, 201, 194, + 52, -130, -228, -174, + -4, 169, 230, 142, + -36, -189, -220, -112, + 65, 199, 208, 87, + -87, -208, -199, -65, + 112, 220, 189, 36, + -142, -230, -169, 4, + 174, 228, 130, -52, + -194, -201, -75, 92, + 186, 150, 21, -105, + -144, -86, 11, 77, + 77, 36, 0, -10, + -10, -28, -63, -75, + -25, 78, 163, 143, + -1, -185, -267, -157, + 97, 321, 333, 93, + -249, -443, -324, 49, + 417, 505, 225, -238, + -551, -476, -50, 426, + 606, 352, -160, -562, + 124, 450, 146, -366, + -366, 146, 450, 124, + -367, -338, 156, 416, + 95, -339, -287, 150, + 354, 66, -285, -223, + 128, 270, 41, -210, + -153, 91, 176, 24, + -124, -85, 44, 81, + 14, -37, -25, -5, + -5, 11, 41, 24, + -48, -74, 9, 101, + 61, -78, -123, 4, + 139, 88, -90, -153, + -7, 153, 109, -82, + -164, -28, 145, 126, + -58, -163, -56, 122, + 141, -21, -154, -90, + 90, 154, 21, -141, + -122, 56, 163, 58, + -126, -145, 28, 164, + 82, -109, -153, 7, + 153, 90, -88, -139, + -4, 123, 78, -61, + -101, -9, 74, 48, + -24, -41, -11, 5, + 5, 25, 37, -14, + -81, -44, 85, 124, + -24, -176, -91, 153, + 210, -41, -270, -128, + 223, 285, -66, -354, + -150, 287, 339, -95, + -416, -156, 338, 367, + -124, -450, -146, 366, + 366, -146, -450, -124, + 367, 338, -156, -416, + -95, 339, 287, -150, + -354, -66, 285, 223, + -128, -270, -41, 210, + 153, -91, -176, -24, + 124, 85, -44, -81, + -14, 37, 25, 5, + 5, -11, -41, -24, + 48, 74, -9, -101, + -61, 78, 123, -4, + -139, -88, 90, 153, + 7, -153, -109, 82, + 164, 28, -145, -126, + 58, 163, 56, -122, + -141, 21, 154, 90, + -90, -154, -21, 141, + 122, -56, -163, -58, + 126, 145, -28, -164, + -82, 109, 153, -7, + -153, -90, 88, 139, + 4, -123, -78, 61, + 101, 9, -74, -48, + 24, 41, 11, -5, + -5, -25, -37, 14, + 81, 44, -85, -124, + 24, 176, 91, -153, + -210, 41, 270, 128, + -223, -285, 66, 354, + 150, -287, -339, 95, + 416, 156, -338, -367, + 124, 450, 146, -366, + -17647, -17712, -17754, -17776, + -17776, -17754, -17712, -17647, + -17562, -17456, -17329, -17181, + -17013, -16825, -16617, -16390, + -16144, -15879, -15597, -15297, + -14980, -14646, -14297, -13933, + -13554, -13161, -12755, -12336, + -11906, -11465, -11013, -10552, + -10082, -9604, -9119, -8628, + -8132, -7631, -7125, -6617, + -6107, -5596, -5084, -4572, + -4062, -3553, -3047, -2544, + -2046, -1552, -1065, -583, + -109, 358, 817, 1266, + 1706, 2136, 2555, 2963, + 3360, 3745, 4117, 4476, + 4822, 5155, 5474, 5779, + 6070, 6347, 6609, 6856, + 7089, 7307, 7510, 7699, + 7873, 8032, 8177, 8308, + 8425, 8528, 8617, 8693, + 8756, 8807, 8845, 8871, + 8885, 8889, 8882, 8865, + 8838, 8802, 8757, 8704, + 8644, 8576, 8502, 8423, + 8337, 8247, 8153, 8056, + 7955, 7852, 7747, 7640, + 7533, 7426, 7319, 7213, + 7108, 7005, 6904, 6807, + 6712, 6622, 6535, 6453, + 6376, 6304, 6238, 6177, + 6122, 6074, 6032, 5997, + 5969, 5948, 5934, 5926, + 5926, 5934, 5948, 5969, + 5997, 6032, 6074, 6122, + 6177, 6238, 6304, 6376, + 6453, 6535, 6622, 6712, + 6807, 6904, 7005, 7108, + 7213, 7319, 7426, 7533, + 7640, 7747, 7852, 7955, + 8056, 8153, 8247, 8337, + 8423, 8502, 8576, 8644, + 8704, 8757, 8802, 8838, + 8865, 8882, 8889, 8885, + 8871, 8845, 8807, 8756, + 8693, 8617, 8528, 8425, + 8308, 8177, 8032, 7873, + 7699, 7510, 7307, 7089, + 6856, 6609, 6347, 6070, + 5779, 5474, 5155, 4822, + 4476, 4117, 3745, 3360, + 2963, 2555, 2136, 1706, + 1266, 817, 358, -109, + -583, -1065, -1552, -2046, + -2544, -3047, -3553, -4062, + -4572, -5084, -5596, -6107, + -6617, -7125, -7631, -8132, + -8628, -9119, -9604, -10082, + -10552, -11013, -11465, -11906, + -12336, -12755, -13161, -13554, + -13933, -14297, -14646, -14980, + -15297, -15597, -15879, -16144, + -16390, -16617, -16825, -17013, + -17181, -17329, -17456, -17562, + -17647, -17712, -17754, -17776, + -15118, -15208, -15268, -15299, + -15299, -15268, -15208, -15118, + -14999, -14850, -14673, -14468, + -14236, -13977, -13694, -13385, + -13054, -12700, -12325, -11931, + -11518, -11089, -10645, -10186, + -9715, -9234, -8743, -8245, + -7741, -7233, -6722, -6210, + -5699, -5189, -4683, -4182, + -3688, -3201, -2723, -2256, + -1800, -1357, -927, -512, + -113, 270, 637, 986, + 1317, 1629, 1923, 2198, + 2453, 2690, 2907, 3106, + 3286, 3447, 3591, 3717, + 3826, 3918, 3995, 4057, + 4105, 4140, 4162, 4172, + 4172, 4163, 4145, 4119, + 4087, 4049, 4007, 3962, + 3914, 3865, 3815, 3766, + 3718, 3673, 3630, 3592, + 3558, 3529, 3506, 3490, + 3480, 3477, 3482, 3495, + 3516, 3546, 3583, 3629, + 3683, 3745, 3815, 3893, + 3977, 4069, 4167, 4272, + 4381, 4496, 4615, 4737, + 4863, 4990, 5120, 5250, + 5380, 5509, 5637, 5763, + 5886, 6005, 6120, 6229, + 6333, 6431, 6522, 6605, + 6680, 6747, 6806, 6855, + 6894, 6924, 6944, 6954, + 6954, 6944, 6924, 6894, + 6855, 6806, 6747, 6680, + 6605, 6522, 6431, 6333, + 6229, 6120, 6005, 5886, + 5763, 5637, 5509, 5380, + 5250, 5120, 4990, 4863, + 4737, 4615, 4496, 4381, + 4272, 4167, 4069, 3977, + 3893, 3815, 3745, 3683, + 3629, 3583, 3546, 3516, + 3495, 3482, 3477, 3480, + 3490, 3506, 3529, 3558, + 3592, 3630, 3673, 3718, + 3766, 3815, 3865, 3914, + 3962, 4007, 4049, 4087, + 4119, 4145, 4163, 4172, + 4172, 4162, 4140, 4105, + 4057, 3995, 3918, 3826, + 3717, 3591, 3447, 3286, + 3106, 2907, 2690, 2453, + 2198, 1923, 1629, 1317, + 986, 637, 270, -113, + -512, -927, -1357, -1800, + -2256, -2723, -3201, -3688, + -4182, -4683, -5189, -5699, + -6210, -6722, -7233, -7741, + -8245, -8743, -9234, -9715, + -10186, -10645, -11089, -11518, + -11931, -12325, -12700, -13054, + -13385, -13694, -13977, -14236, + -14468, -14673, -14850, -14999, + -15118, -15208, -15268, -15299, + -11738, -11879, -11974, -12021, + -12021, -11974, -11879, -11738, + -11553, -11323, -11053, -10744, + -10398, -10020, -9612, -9177, + -8720, -8244, -7752, -7250, + -6741, -6229, -5718, -5212, + -4713, -4226, -3754, -3299, + -2865, -2452, -2064, -1703, + -1368, -1061, -783, -534, + -313, -121, 45, 184, + 298, 390, 460, 511, + 545, 564, 571, 568, + 557, 542, 523, 504, + 487, 473, 465, 463, + 470, 486, 513, 550, + 599, 660, 733, 817, + 911, 1016, 1130, 1253, + 1382, 1517, 1656, 1798, + 1941, 2084, 2225, 2363, + 2496, 2623, 2743, 2854, + 2956, 3048, 3129, 3199, + 3257, 3304, 3339, 3363, + 3376, 3380, 3373, 3359, + 3337, 3308, 3275, 3237, + 3197, 3155, 3114, 3074, + 3036, 3002, 2972, 2948, + 2930, 2919, 2916, 2921, + 2934, 2955, 2984, 3022, + 3066, 3118, 3176, 3239, + 3307, 3378, 3451, 3526, + 3601, 3675, 3746, 3814, + 3878, 3936, 3988, 4032, + 4068, 4096, 4115, 4125, + 4125, 4115, 4096, 4068, + 4032, 3988, 3936, 3878, + 3814, 3746, 3675, 3601, + 3526, 3451, 3378, 3307, + 3239, 3176, 3118, 3066, + 3022, 2984, 2955, 2934, + 2921, 2916, 2919, 2930, + 2948, 2972, 3002, 3036, + 3074, 3114, 3155, 3197, + 3237, 3275, 3308, 3337, + 3359, 3373, 3380, 3376, + 3363, 3339, 3304, 3257, + 3199, 3129, 3048, 2956, + 2854, 2743, 2623, 2496, + 2363, 2225, 2084, 1941, + 1798, 1656, 1517, 1382, + 1253, 1130, 1016, 911, + 817, 733, 660, 599, + 550, 513, 486, 470, + 463, 465, 473, 487, + 504, 523, 542, 557, + 568, 571, 564, 545, + 511, 460, 390, 298, + 184, 45, -121, -313, + -534, -783, -1061, -1368, + -1703, -2064, -2452, -2865, + -3299, -3754, -4226, -4713, + -5212, -5718, -6229, -6741, + -7250, -7752, -8244, -8720, + -9177, -9612, -10020, -10398, + -10744, -11053, -11323, -11553, + -11738, -11879, -11974, -12021, + -8792, -9006, -9151, -9224, + -9224, -9151, -9006, -8792, + -8514, -8178, -7790, -7360, + -6895, -6405, -5899, -5387, + -4878, -4381, -3903, -3451, + -3032, -2650, -2309, -2011, + -1756, -1545, -1375, -1244, + -1149, -1084, -1044, -1025, + -1020, -1025, -1032, -1039, + -1039, -1029, -1005, -967, + -912, -839, -749, -644, + -524, -393, -253, -107, + 41, 188, 331, 466, + 591, 703, 801, 883, + 950, 1000, 1036, 1057, + 1066, 1065, 1056, 1043, + 1027, 1011, 999, 991, + 991, 1000, 1019, 1049, + 1089, 1140, 1201, 1270, + 1346, 1427, 1510, 1594, + 1676, 1755, 1827, 1892, + 1948, 1993, 2028, 2052, + 2065, 2068, 2062, 2049, + 2030, 2006, 1981, 1955, + 1931, 1911, 1897, 1889, + 1889, 1897, 1915, 1940, + 1974, 2015, 2062, 2114, + 2168, 2223, 2278, 2330, + 2377, 2418, 2452, 2478, + 2494, 2501, 2499, 2489, + 2470, 2444, 2412, 2377, + 2339, 2301, 2265, 2231, + 2203, 2180, 2164, 2156, + 2156, 2164, 2180, 2203, + 2231, 2265, 2301, 2339, + 2377, 2412, 2444, 2470, + 2489, 2499, 2501, 2494, + 2478, 2452, 2418, 2377, + 2330, 2278, 2223, 2168, + 2114, 2062, 2015, 1974, + 1940, 1915, 1897, 1889, + 1889, 1897, 1911, 1931, + 1955, 1981, 2006, 2030, + 2049, 2062, 2068, 2065, + 2052, 2028, 1993, 1948, + 1892, 1827, 1755, 1676, + 1594, 1510, 1427, 1346, + 1270, 1201, 1140, 1089, + 1049, 1019, 1000, 991, + 991, 999, 1011, 1027, + 1043, 1056, 1065, 1066, + 1057, 1036, 1000, 950, + 883, 801, 703, 591, + 466, 331, 188, 41, + -107, -253, -393, -524, + -644, -749, -839, -912, + -967, -1005, -1029, -1039, + -1039, -1032, -1025, -1020, + -1025, -1044, -1084, -1149, + -1244, -1375, -1545, -1756, + -2011, -2309, -2650, -3032, + -3451, -3903, -4381, -4878, + -5387, -5899, -6405, -6895, + -7360, -7790, -8178, -8514, + -8792, -9006, -9151, -9224, + -6114, -6437, -6663, -6779, + -6779, -6663, -6437, -6114, + -5710, -5247, -4748, -4236, + -3734, -3263, -2840, -2477, + -2180, -1953, -1790, -1686, + -1629, -1606, -1603, -1606, + -1603, -1584, -1542, -1473, + -1378, -1259, -1122, -974, + -824, -680, -549, -436, + -347, -282, -240, -218, + -212, -215, -222, -224, + -218, -199, -165, -114, + -49, 29, 114, 202, + 287, 365, 432, 485, + 523, 545, 554, 553, + 545, 536, 529, 528, + 537, 557, 589, 633, + 685, 743, 804, 864, + 918, 963, 998, 1022, + 1033, 1035, 1028, 1016, + 1003, 992, 986, 988, + 1000, 1021, 1051, 1090, + 1133, 1178, 1222, 1262, + 1295, 1319, 1333, 1337, + 1332, 1320, 1304, 1287, + 1272, 1261, 1257, 1262, + 1275, 1297, 1326, 1359, + 1394, 1428, 1459, 1482, + 1498, 1505, 1502, 1491, + 1474, 1454, 1432, 1411, + 1396, 1387, 1385, 1392, + 1407, 1429, 1455, 1483, + 1509, 1532, 1549, 1558, + 1558, 1549, 1532, 1509, + 1483, 1455, 1429, 1407, + 1392, 1385, 1387, 1396, + 1411, 1432, 1454, 1474, + 1491, 1502, 1505, 1498, + 1482, 1459, 1428, 1394, + 1359, 1326, 1297, 1275, + 1262, 1257, 1261, 1272, + 1287, 1304, 1320, 1332, + 1337, 1333, 1319, 1295, + 1262, 1222, 1178, 1133, + 1090, 1051, 1021, 1000, + 988, 986, 992, 1003, + 1016, 1028, 1035, 1033, + 1022, 998, 963, 918, + 864, 804, 743, 685, + 633, 589, 557, 537, + 528, 529, 536, 545, + 553, 554, 545, 523, + 485, 432, 365, 287, + 202, 114, 29, -49, + -114, -165, -199, -218, + -224, -222, -215, -212, + -218, -240, -282, -347, + -436, -549, -680, -824, + -974, -1122, -1259, -1378, + -1473, -1542, -1584, -1603, + -1606, -1603, -1606, -1629, + -1686, -1790, -1953, -2180, + -2477, -2840, -3263, -3734, + -4236, -4748, -5247, -5710, + -6114, -6437, -6663, -6779, + -3934, -4390, -4733, -4917, + -4917, -4733, -4390, -3934, + -3422, -2914, -2463, -2106, + -1857, -1713, -1651, -1638, + -1639, -1624, -1572, -1477, + -1346, -1196, -1046, -917, + -822, -764, -740, -737, + -739, -731, -702, -649, + -573, -484, -395, -318, + -262, -229, -216, -217, + -220, -216, -196, -159, + -105, -43, 20, 74, + 112, 133, 139, 136, + 132, 134, 148, 177, + 218, 266, 314, 354, + 382, 396, 397, 392, + 386, 387, 398, 421, + 454, 493, 531, 562, + 582, 591, 589, 582, + 575, 574, 582, 601, + 629, 661, 692, 717, + 732, 736, 732, 723, + 715, 712, 718, 734, + 757, 784, 810, 830, + 840, 841, 834, 823, + 814, 809, 814, 827, + 847, 870, 891, 907, + 914, 911, 902, 889, + 878, 872, 874, 885, + 903, 923, 941, 953, + 956, 950, 938, 923, + 910, 903, 904, 913, + 928, 945, 960, 969, + 969, 960, 945, 928, + 913, 904, 903, 910, + 923, 938, 950, 956, + 953, 941, 923, 903, + 885, 874, 872, 878, + 889, 902, 911, 914, + 907, 891, 870, 847, + 827, 814, 809, 814, + 823, 834, 841, 840, + 830, 810, 784, 757, + 734, 718, 712, 715, + 723, 732, 736, 732, + 717, 692, 661, 629, + 601, 582, 574, 575, + 582, 589, 591, 582, + 562, 531, 493, 454, + 421, 398, 387, 386, + 392, 397, 396, 382, + 354, 314, 266, 218, + 177, 148, 134, 132, + 136, 139, 133, 112, + 74, 20, -43, -105, + -159, -196, -216, -220, + -217, -216, -229, -262, + -318, -395, -484, -573, + -649, -702, -731, -739, + -737, -740, -764, -822, + -917, -1046, -1196, -1346, + -1477, -1572, -1624, -1639, + -1638, -1651, -1713, -1857, + -2106, -2463, -2914, -3422, + -3934, -4390, -4733, -4917, + -2173, -2685, -3158, -3442, + -3442, -3158, -2685, -2173, + -1759, -1513, -1424, -1416, + -1405, -1333, -1201, -1048, + -926, -863, -849, -850, + -827, -766, -677, -592, + -537, -517, -518, -512, + -482, -426, -361, -311, + -287, -284, -285, -271, + -236, -187, -141, -114, + -106, -108, -104, -84, + -47, -8, 22, 34, + 33, 32, 42, 67, + 101, 131, 147, 149, + 145, 148, 164, 191, + 219, 238, 244, 241, + 239, 247, 267, 293, + 313, 323, 321, 317, + 319, 332, 354, 375, + 387, 388, 384, 381, + 388, 405, 425, 439, + 444, 440, 435, 437, + 448, 465, 481, 489, + 487, 481, 478, 484, + 498, 514, 524, 525, + 519, 513, 514, 524, + 538, 550, 554, 549, + 542, 538, 544, 556, + 568, 575, 572, 564, + 557, 558, 567, 579, + 587, 588, 580, 571, + 567, 572, 582, 592, + 595, 590, 580, 572, + 572, 580, 590, 595, + 592, 582, 572, 567, + 571, 580, 588, 587, + 579, 567, 558, 557, + 564, 572, 575, 568, + 556, 544, 538, 542, + 549, 554, 550, 538, + 524, 514, 513, 519, + 525, 524, 514, 498, + 484, 478, 481, 487, + 489, 481, 465, 448, + 437, 435, 440, 444, + 439, 425, 405, 388, + 381, 384, 388, 387, + 375, 354, 332, 319, + 317, 321, 323, 313, + 293, 267, 247, 239, + 241, 244, 238, 219, + 191, 164, 148, 145, + 149, 147, 131, 101, + 67, 42, 32, 33, + 34, 22, -8, -47, + -84, -104, -108, -106, + -114, -141, -187, -236, + -271, -285, -284, -287, + -311, -361, -426, -482, + -512, -518, -517, -537, + -592, -677, -766, -827, + -850, -849, -863, -926, + -1048, -1201, -1333, -1405, + -1416, -1424, -1513, -1759, + -2173, -2685, -3158, -3442, + -1197, -1479, -1991, -2415, + -2415, -1991, -1479, -1197, + -1153, -1138, -1021, -869, + -796, -794, -767, -682, + -602, -578, -578, -542, + -476, -432, -428, -421, + -381, -332, -311, -312, + -297, -257, -223, -216, + -216, -194, -158, -139, + -139, -133, -107, -79, + -70, -72, -60, -33, + -15, -13, -12, 5, + 28, 38, 37, 42, + 62, 80, 83, 82, + 92, 112, 123, 122, + 123, 137, 154, 159, + 156, 162, 178, 189, + 189, 188, 198, 213, + 219, 216, 218, 230, + 242, 244, 241, 246, + 259, 267, 265, 264, + 272, 284, 287, 283, + 285, 296, 304, 303, + 300, 305, 316, 320, + 316, 316, 324, 333, + 333, 328, 331, 340, + 345, 342, 339, 344, + 353, 354, 349, 349, + 356, 362, 360, 355, + 358, 366, 368, 363, + 360, 365, 372, 371, + 365, 365, 371, 375, + 371, 366, 368, 375, + 375, 368, 366, 371, + 375, 371, 365, 365, + 371, 372, 365, 360, + 363, 368, 366, 358, + 355, 360, 362, 356, + 349, 349, 354, 353, + 344, 339, 342, 345, + 340, 331, 328, 333, + 333, 324, 316, 316, + 320, 316, 305, 300, + 303, 304, 296, 285, + 283, 287, 284, 272, + 264, 265, 267, 259, + 246, 241, 244, 242, + 230, 218, 216, 219, + 213, 198, 188, 189, + 189, 178, 162, 156, + 159, 154, 137, 123, + 122, 123, 112, 92, + 82, 83, 80, 62, + 42, 37, 38, 28, + 5, -12, -13, -15, + -33, -60, -72, -70, + -79, -107, -133, -139, + -139, -158, -194, -216, + -216, -223, -257, -297, + -312, -311, -332, -381, + -421, -428, -432, -476, + -542, -578, -578, -602, + -682, -767, -794, -796, + -869, -1021, -1138, -1153, + -1197, -1479, -1991, -2415, + -11906, -12065, -12173, -12228, + -12228, -12173, -12065, -11906, + -11699, -11450, -11164, -10847, + -10505, -10147, -9778, -9404, + -9033, -8669, -8316, -7978, + -7657, -7355, -7071, -6803, + -6551, -6309, -6076, -5845, + -5612, -5372, -5120, -4852, + -4563, -4250, -3910, -3543, + -3147, -2724, -2275, -1804, + -1315, -812, -301, 211, + 718, 1213, 1691, 2144, + 2569, 2959, 3312, 3625, + 3897, 4127, 4317, 4469, + 4587, 4674, 4736, 4779, + 4808, 4831, 4852, 4877, + 4912, 4961, 5027, 5113, + 5220, 5348, 5494, 5658, + 5836, 6022, 6212, 6401, + 6581, 6746, 6891, 7010, + 7096, 7147, 7158, 7127, + 7052, 6935, 6775, 6575, + 6339, 6071, 5776, 5461, + 5132, 4794, 4455, 4121, + 3797, 3487, 3197, 2928, + 2683, 2463, 2267, 2093, + 1940, 1803, 1678, 1561, + 1447, 1330, 1206, 1070, + 918, 747, 554, 338, + 99, -162, -443, -740, + -1049, -1366, -1683, -1995, + -2295, -2575, -2830, -3053, + -3239, -3382, -3480, -3530, + -3530, -3480, -3382, -3239, + -3053, -2830, -2575, -2295, + -1995, -1683, -1366, -1049, + -740, -443, -162, 99, + 338, 554, 747, 918, + 1070, 1206, 1330, 1447, + 1561, 1678, 1803, 1940, + 2093, 2267, 2463, 2683, + 2928, 3197, 3487, 3797, + 4121, 4455, 4794, 5132, + 5461, 5776, 6071, 6339, + 6575, 6775, 6935, 7052, + 7127, 7158, 7147, 7096, + 7010, 6891, 6746, 6581, + 6401, 6212, 6022, 5836, + 5658, 5494, 5348, 5220, + 5113, 5027, 4961, 4912, + 4877, 4852, 4831, 4808, + 4779, 4736, 4674, 4587, + 4469, 4317, 4127, 3897, + 3625, 3312, 2959, 2569, + 2144, 1691, 1213, 718, + 211, -301, -812, -1315, + -1804, -2275, -2724, -3147, + -3543, -3910, -4250, -4563, + -4852, -5120, -5372, -5612, + -5845, -6076, -6309, -6551, + -6803, -7071, -7355, -7657, + -7978, -8316, -8669, -9033, + -9404, -9778, -10147, -10505, + -10847, -11164, -11450, -11699, + -11906, -12065, -12173, -12228, + -7811, -8116, -8333, -8447, + -8447, -8333, -8116, -7811, + -7440, -7030, -6605, -6187, + -5791, -5427, -5094, -4788, + -4497, -4204, -3895, -3557, + -3179, -2758, -2297, -1805, + -1295, -783, -286, 184, + 614, 1000, 1341, 1641, + 1910, 2156, 2389, 2616, + 2842, 3065, 3281, 3479, + 3649, 3779, 3860, 3886, + 3855, 3772, 3645, 3488, + 3316, 3143, 2982, 2840, + 2719, 2616, 2519, 2415, + 2288, 2122, 1905, 1631, + 1300, 922, 512, 93, + -311, -673, -971, -1187, + -1312, -1344, -1292, -1172, + -1005, -815, -625, -457, + -324, -235, -189, -178, + -189, -205, -210, -188, + -129, -28, 113, 289, + 485, 689, 885, 1059, + 1202, 1311, 1385, 1430, + 1455, 1471, 1488, 1513, + 1552, 1604, 1663, 1721, + 1767, 1790, 1780, 1731, + 1641, 1514, 1360, 1190, + 1020, 863, 732, 633, + 566, 529, 508, 490, + 458, 394, 287, 128, + -83, -337, -619, -910, + -1183, -1416, -1584, -1673, + -1673, -1584, -1416, -1183, + -910, -619, -337, -83, + 128, 287, 394, 458, + 490, 508, 529, 566, + 633, 732, 863, 1020, + 1190, 1360, 1514, 1641, + 1731, 1780, 1790, 1767, + 1721, 1663, 1604, 1552, + 1513, 1488, 1471, 1455, + 1430, 1385, 1311, 1202, + 1059, 885, 689, 485, + 289, 113, -28, -129, + -188, -210, -205, -189, + -178, -189, -235, -324, + -457, -625, -815, -1005, + -1172, -1292, -1344, -1312, + -1187, -971, -673, -311, + 93, 512, 922, 1300, + 1631, 1905, 2122, 2288, + 2415, 2519, 2616, 2719, + 2840, 2982, 3143, 3316, + 3488, 3645, 3772, 3855, + 3886, 3860, 3779, 3649, + 3479, 3281, 3065, 2842, + 2616, 2389, 2156, 1910, + 1641, 1341, 1000, 614, + 184, -286, -783, -1295, + -1805, -2297, -2758, -3179, + -3557, -3895, -4204, -4497, + -4788, -5094, -5427, -5791, + -6187, -6605, -7030, -7440, + -7811, -8116, -8333, -8447, + -5340, -5732, -6033, -6196, + -6196, -6033, -5732, -5340, + -4911, -4490, -4108, -3770, + -3463, -3158, -2824, -2438, + -1995, -1504, -992, -490, + -26, 383, 732, 1030, + 1294, 1538, 1771, 1991, + 2185, 2336, 2428, 2453, + 2412, 2318, 2190, 2047, + 1904, 1763, 1621, 1467, + 1288, 1081, 849, 607, + 375, 174, 18, -89, + -156, -199, -239, -286, + -343, -399, -432, -418, + -341, -199, -6, 204, + 392, 520, 566, 529, + 431, 312, 220, 198, + 269, 431, 659, 906, + 1122, 1264, 1307, 1249, + 1113, 934, 750, 593, + 478, 404, 353, 303, + 234, 137, 15, -116, + -235, -322, -366, -367, + -334, -285, -238, -202, + -179, -161, -132, -80, + 3, 116, 245, 374, + 484, 563, 609, 630, + 640, 657, 689, 738, + 790, 829, 835, 795, + 709, 589, 461, 351, + 279, 253, 262, 278, + 268, 198, 52, -167, + -432, -699, -915, -1036, + -1036, -915, -699, -432, + -167, 52, 198, 268, + 278, 262, 253, 279, + 351, 461, 589, 709, + 795, 835, 829, 790, + 738, 689, 657, 640, + 630, 609, 563, 484, + 374, 245, 116, 3, + -80, -132, -161, -179, + -202, -238, -285, -334, + -367, -366, -322, -235, + -116, 15, 137, 234, + 303, 353, 404, 478, + 593, 750, 934, 1113, + 1249, 1307, 1264, 1122, + 906, 659, 431, 269, + 198, 220, 312, 431, + 529, 566, 520, 392, + 204, -6, -199, -341, + -418, -432, -399, -343, + -286, -239, -199, -156, + -89, 18, 174, 375, + 607, 849, 1081, 1288, + 1467, 1621, 1763, 1904, + 2047, 2190, 2318, 2412, + 2453, 2428, 2336, 2185, + 1991, 1771, 1538, 1294, + 1030, 732, 383, -26, + -490, -992, -1504, -1995, + -2438, -2824, -3158, -3463, + -3770, -4108, -4490, -4911, + -5340, -5732, -6033, -6196, + -3884, -4315, -4679, -4889, + -4889, -4679, -4315, -3884, + -3468, -3107, -2792, -2479, + -2118, -1684, -1189, -677, + -198, 212, 549, 831, + 1082, 1316, 1523, 1680, + 1763, 1761, 1688, 1571, + 1436, 1298, 1154, 990, + 797, 579, 356, 156, + 1, -106, -176, -228, + -275, -312, -323, -290, + -206, -81, 57, 183, + 283, 361, 440, 537, + 653, 770, 853, 876, + 836, 756, 679, 640, + 642, 654, 619, 486, + 244, -71, -380, -595, + -660, -571, -382, -177, + -30, 25, 3, -43, + -57, -6, 107, 244, + 362, 433, 457, 458, + 463, 489, 529, 558, + 554, 504, 421, 326, + 245, 187, 145, 100, + 37, -44, -128, -192, + -219, -207, -173, -137, + -113, -100, -81, -37, + 40, 140, 239, 312, + 349, 358, 363, 384, + 428, 476, 498, 468, + 386, 278, 185, 143, + 155, 190, 189, 102, + -88, -344, -590, -740, + -740, -590, -344, -88, + 102, 189, 190, 155, + 143, 185, 278, 386, + 468, 498, 476, 428, + 384, 363, 358, 349, + 312, 239, 140, 40, + -37, -81, -100, -113, + -137, -173, -207, -219, + -192, -128, -44, 37, + 100, 145, 187, 245, + 326, 421, 504, 554, + 558, 529, 489, 463, + 458, 457, 433, 362, + 244, 107, -6, -57, + -43, 3, 25, -30, + -177, -382, -571, -660, + -595, -380, -71, 244, + 486, 619, 654, 642, + 640, 679, 756, 836, + 876, 853, 770, 653, + 537, 440, 361, 283, + 183, 57, -81, -206, + -290, -323, -312, -275, + -228, -176, -106, 1, + 156, 356, 579, 797, + 990, 1154, 1298, 1436, + 1571, 1688, 1761, 1763, + 1680, 1523, 1316, 1082, + 831, 549, 212, -198, + -677, -1189, -1684, -2118, + -2479, -2792, -3107, -3468, + -3884, -4315, -4679, -4889, + -2955, -3384, -3793, -4047, + -4047, -3793, -3384, -2955, + -2588, -2274, -1942, -1531, + -1039, -527, -69, 300, + 594, 849, 1079, 1264, + 1366, 1368, 1288, 1165, + 1031, 888, 720, 520, + 303, 107, -40, -134, + -194, -239, -268, -261, + -200, -92, 36, 152, + 247, 334, 430, 533, + 617, 653, 636, 586, + 533, 490, 441, 360, + 239, 107, 7, -39, + -48, -63, -108, -161, + -166, -82, 71, 209, + 243, 145, -17, -121, + -74, 121, 365, 531, + 549, 440, 293, 191, + 154, 143, 106, 24, + -73, -137, -144, -110, + -75, -58, -52, -26, + 36, 123, 201, 248, + 264, 274, 295, 322, + 333, 306, 246, 177, + 123, 89, 56, 5, + -61, -119, -144, -131, + -99, -74, -65, -52, + -10, 66, 152, 213, + 233, 231, 241, 280, + 325, 332, 274, 177, + 100, 90, 133, 153, + 68, -139, -396, -573, + -573, -396, -139, 68, + 153, 133, 90, 100, + 177, 274, 332, 325, + 280, 241, 231, 233, + 213, 152, 66, -10, + -52, -65, -74, -99, + -131, -144, -119, -61, + 5, 56, 89, 123, + 177, 246, 306, 333, + 322, 295, 274, 264, + 248, 201, 123, 36, + -26, -52, -58, -75, + -110, -144, -137, -73, + 24, 106, 143, 154, + 191, 293, 440, 549, + 531, 365, 121, -74, + -121, -17, 145, 243, + 209, 71, -82, -166, + -161, -108, -63, -48, + -39, 7, 107, 239, + 360, 441, 490, 533, + 586, 636, 653, 617, + 533, 430, 334, 247, + 152, 36, -92, -200, + -261, -268, -239, -194, + -134, -40, 107, 303, + 520, 720, 888, 1031, + 1165, 1288, 1368, 1366, + 1264, 1079, 849, 594, + 300, -69, -527, -1039, + -1531, -1942, -2274, -2588, + -2955, -3384, -3793, -4047, + -2342, -2744, -3179, -3475, + -3475, -3179, -2744, -2342, + -2015, -1682, -1252, -740, + -244, 156, 460, 717, + 940, 1092, 1130, 1062, + 941, 806, 655, 467, + 254, 60, -75, -154, + -205, -236, -228, -159, + -43, 79, 182, 273, + 370, 465, 524, 527, + 487, 437, 388, 319, + 216, 98, 5, -44, + -71, -101, -128, -116, + -49, 43, 113, 152, + 197, 279, 367, 398, + 351, 284, 276, 318, + 306, 139, -149, -393, + -437, -277, -63, 46, + 22, -33, -13, 89, + 192, 233, 225, 226, + 259, 287, 266, 199, + 131, 92, 66, 22, + -43, -93, -102, -78, + -55, -45, -27, 21, + 91, 148, 173, 181, + 198, 221, 224, 188, + 130, 84, 58, 30, + -19, -75, -103, -90, + -60, -45, -42, -16, + 50, 125, 165, 164, + 163, 198, 241, 233, + 157, 73, 60, 111, + 119, -17, -266, -467, + -467, -266, -17, 119, + 111, 60, 73, 157, + 233, 241, 198, 163, + 164, 165, 125, 50, + -16, -42, -45, -60, + -90, -103, -75, -19, + 30, 58, 84, 130, + 188, 224, 221, 198, + 181, 173, 148, 91, + 21, -27, -45, -55, + -78, -102, -93, -43, + 22, 66, 92, 131, + 199, 266, 287, 259, + 226, 225, 233, 192, + 89, -13, -33, 22, + 46, -63, -277, -437, + -393, -149, 139, 306, + 318, 276, 284, 351, + 398, 367, 279, 197, + 152, 113, 43, -49, + -116, -128, -101, -71, + -44, 5, 98, 216, + 319, 388, 437, 487, + 527, 524, 465, 370, + 273, 182, 79, -43, + -159, -228, -236, -205, + -154, -75, 60, 254, + 467, 655, 806, 941, + 1062, 1130, 1092, 940, + 717, 460, 156, -244, + -740, -1252, -1682, -2015, + -2342, -2744, -3179, -3475, + -1895, -2258, -2699, -3032, + -3032, -2699, -2258, -1895, + -1575, -1166, -654, -164, + 207, 487, 728, 903, + 952, 880, 756, 618, + 448, 240, 45, -87, + -159, -202, -214, -164, + -55, 66, 167, 261, + 358, 431, 446, 411, + 362, 307, 222, 111, + 14, -42, -73, -101, + -109, -67, 11, 81, + 131, 188, 261, 309, + 299, 260, 237, 215, + 149, 49, -15, -16, + -19, -70, -101, -23, + 116, 146, 1, -159, + -124, 102, 301, 306, + 179, 88, 83, 76, + 8, -67, -79, -44, + -24, -25, 1, 68, + 129, 150, 154, 173, + 191, 170, 117, 72, + 48, 16, -35, -73, + -72, -51, -38, -27, + 11, 70, 113, 127, + 136, 157, 165, 134, + 84, 51, 33, -1, + -52, -78, -61, -35, + -31, -23, 28, 97, + 127, 118, 128, 173, + 186, 120, 43, 52, + 108, 53, -170, -390, + -390, -170, 53, 108, + 52, 43, 120, 186, + 173, 128, 118, 127, + 97, 28, -23, -31, + -35, -61, -78, -52, + -1, 33, 51, 84, + 134, 165, 157, 136, + 127, 113, 70, 11, + -27, -38, -51, -72, + -73, -35, 16, 48, + 72, 117, 170, 191, + 173, 154, 150, 129, + 68, 1, -25, -24, + -44, -79, -67, 8, + 76, 83, 88, 179, + 306, 301, 102, -124, + -159, 1, 146, 116, + -23, -101, -70, -19, + -16, -15, 49, 149, + 215, 237, 260, 299, + 309, 261, 188, 131, + 81, 11, -67, -109, + -101, -73, -42, 14, + 111, 222, 307, 362, + 411, 446, 431, 358, + 261, 167, 66, -55, + -164, -214, -202, -159, + -87, 45, 240, 448, + 618, 756, 880, 952, + 903, 728, 487, 207, + -164, -654, -1166, -1575, + -1895, -2258, -2699, -3032, + -1585, -1921, -2358, -2728, + -2728, -2358, -1921, -1585, + -1220, -722, -210, 174, + 454, 689, 825, 806, + 692, 556, 387, 177, + -10, -119, -175, -201, + -166, -60, 61, 162, + 260, 351, 392, 369, + 321, 263, 173, 63, + -19, -60, -88, -99, + -59, 17, 82, 136, + 202, 258, 263, 232, + 204, 166, 89, 11, + -23, -37, -65, -68, + -8, 59, 83, 114, + 194, 237, 186, 143, + 192, 189, -21, -291, + -325, -118, 45, 20, + -32, 34, 129, 144, + 130, 158, 180, 138, + 78, 53, 32, -21, + -61, -51, -29, -23, + -1, 54, 99, 111, + 120, 139, 131, 88, + 50, 30, -3, -47, + -61, -43, -30, -21, + 16, 68, 95, 100, + 117, 129, 103, 58, + 35, 19, -24, -60, + -50, -25, -24, -12, + 46, 98, 95, 93, + 137, 149, 75, 21, + 72, 85, -100, -338, + -338, -100, 85, 72, + 21, 75, 149, 137, + 93, 95, 98, 46, + -12, -24, -25, -50, + -60, -24, 19, 35, + 58, 103, 129, 117, + 100, 95, 68, 16, + -21, -30, -43, -61, + -47, -3, 30, 50, + 88, 131, 139, 120, + 111, 99, 54, -1, + -23, -29, -51, -61, + -21, 32, 53, 78, + 138, 180, 158, 130, + 144, 129, 34, -32, + 20, 45, -118, -325, + -291, -21, 189, 192, + 143, 186, 237, 194, + 114, 83, 59, -8, + -68, -65, -37, -23, + 11, 89, 166, 204, + 232, 263, 258, 202, + 136, 82, 17, -59, + -99, -88, -60, -19, + 63, 173, 263, 321, + 369, 392, 351, 260, + 162, 61, -60, -166, + -201, -175, -119, -10, + 177, 387, 556, 692, + 806, 825, 689, 454, + 174, -210, -722, -1220, + -1585, -1921, -2358, -2728, + -23754, -23844, -23909, -23944, + -23944, -23909, -23844, -23754, + -23644, -23515, -23367, -23201, + -23018, -22820, -22608, -22382, + -22142, -21889, -21625, -21348, + -21061, -20762, -20452, -20133, + -19804, -19466, -19119, -18763, + -18399, -18027, -17647, -17259, + -16865, -16463, -16055, -15640, + -15220, -14793, -14360, -13923, + -13480, -13032, -12579, -12121, + -11659, -11193, -10723, -10249, + -9771, -9290, -8806, -8319, + -7829, -7336, -6841, -6344, + -5844, -5342, -4839, -4334, + -3827, -3320, -2811, -2301, + -1790, -1279, -768, -256, + 256, 768, 1279, 1790, + 2301, 2811, 3320, 3827, + 4334, 4839, 5342, 5844, + 6344, 6841, 7336, 7829, + 8319, 8806, 9290, 9771, + 10249, 10723, 11193, 11659, + 12121, 12579, 13032, 13480, + 13923, 14360, 14793, 15220, + 15640, 16055, 16463, 16865, + 17259, 17647, 18027, 18399, + 18763, 19119, 19466, 19804, + 20133, 20452, 20762, 21061, + 21348, 21625, 21889, 22142, + 22382, 22608, 22820, 23018, + 23201, 23367, 23515, 23644, + 23754, 23844, 23909, 23944, + 23944, 23909, 23844, 23754, + 23644, 23515, 23367, 23201, + 23018, 22820, 22608, 22382, + 22142, 21889, 21625, 21348, + 21061, 20762, 20452, 20133, + 19804, 19466, 19119, 18763, + 18399, 18027, 17647, 17259, + 16865, 16463, 16055, 15640, + 15220, 14793, 14360, 13923, + 13480, 13032, 12579, 12121, + 11659, 11193, 10723, 10249, + 9771, 9290, 8806, 8319, + 7829, 7336, 6841, 6344, + 5844, 5342, 4839, 4334, + 3827, 3320, 2811, 2301, + 1790, 1279, 768, 256, + -256, -768, -1279, -1790, + -2301, -2811, -3320, -3827, + -4334, -4839, -5342, -5844, + -6344, -6841, -7336, -7829, + -8319, -8806, -9290, -9771, + -10249, -10723, -11193, -11659, + -12121, -12579, -13032, -13480, + -13923, -14360, -14793, -15220, + -15640, -16055, -16463, -16865, + -17259, -17647, -18027, -18399, + -18763, -19119, -19466, -19804, + -20133, -20452, -20762, -21061, + -21348, -21625, -21889, -22142, + -22382, -22608, -22820, -23018, + -23201, -23367, -23515, -23644, + -23754, -23844, -23909, -23944, + -13775, -13967, -14111, -14197, + -14197, -14111, -13967, -13775, + -13542, -13271, -12969, -12638, + -12281, -11900, -11498, -11077, + -10640, -10187, -9721, -9244, + -8757, -8262, -7760, -7253, + -6743, -6231, -5719, -5209, + -4701, -4199, -3704, -3218, + -2744, -2283, -1841, -1421, + -1035, -686, -361, -58, + 224, 486, 729, 952, + 1156, 1337, 1494, 1617, + 1713, 1790, 1849, 1894, + 1925, 1945, 1956, 1957, + 1951, 1939, 1921, 1900, + 1874, 1847, 1819, 1790, + 1763, 1739, 1719, 1706, + 1706, 1720, 1741, 1769, + 1802, 1840, 1882, 1929, + 1979, 2034, 2092, 2154, + 2220, 2289, 2363, 2442, + 2525, 2615, 2710, 2813, + 2925, 3053, 3201, 3359, + 3522, 3688, 3854, 4017, + 4175, 4324, 4462, 4584, + 4678, 4743, 4791, 4825, + 4847, 4859, 4862, 4858, + 4846, 4829, 4806, 4778, + 4746, 4710, 4671, 4629, + 4585, 4539, 4492, 4444, + 4395, 4346, 4298, 4250, + 4204, 4159, 4118, 4080, + 4045, 4016, 3994, 3979, + 3979, 3994, 4016, 4045, + 4080, 4118, 4159, 4204, + 4250, 4298, 4346, 4395, + 4444, 4492, 4539, 4585, + 4629, 4671, 4710, 4746, + 4778, 4806, 4829, 4846, + 4858, 4862, 4859, 4847, + 4825, 4791, 4743, 4678, + 4584, 4462, 4324, 4175, + 4017, 3854, 3688, 3522, + 3359, 3201, 3053, 2925, + 2813, 2710, 2615, 2525, + 2442, 2363, 2289, 2220, + 2154, 2092, 2034, 1979, + 1929, 1882, 1840, 1802, + 1769, 1741, 1720, 1706, + 1706, 1719, 1739, 1763, + 1790, 1819, 1847, 1874, + 1900, 1921, 1939, 1951, + 1957, 1956, 1945, 1925, + 1894, 1849, 1790, 1713, + 1617, 1494, 1337, 1156, + 952, 729, 486, 224, + -58, -361, -686, -1035, + -1421, -1841, -2283, -2744, + -3218, -3704, -4199, -4701, + -5209, -5719, -6231, -6743, + -7253, -7760, -8262, -8757, + -9244, -9721, -10187, -10640, + -11077, -11498, -11900, -12281, + -12638, -12969, -13271, -13542, + -13775, -13967, -14111, -14197, + -6355, -6632, -6843, -6975, + -6975, -6843, -6632, -6355, + -6026, -5652, -5243, -4804, + -4340, -3857, -3360, -2853, + -2342, -1830, -1323, -826, + -346, 111, 531, 901, + 1231, 1516, 1749, 1941, + 2097, 2215, 2288, 2327, + 2338, 2325, 2291, 2237, + 2160, 2063, 1959, 1854, + 1758, 1688, 1635, 1592, + 1559, 1536, 1525, 1531, + 1550, 1576, 1610, 1650, + 1695, 1744, 1799, 1865, + 1944, 2020, 2086, 2125, + 2138, 2137, 2122, 2096, + 2057, 2009, 1947, 1873, + 1779, 1667, 1545, 1416, + 1283, 1150, 1018, 892, + 775, 678, 606, 542, + 481, 409, 330, 251, + 175, 104, 41, -12, + -50, -63, -40, 0, + 48, 95, 137, 161, + 154, 128, 86, 29, + -48, -143, -248, -358, + -468, -577, -675, -756, + -828, -898, -969, -1053, + -1139, -1215, -1264, -1291, + -1307, -1313, -1312, -1304, + -1291, -1274, -1254, -1231, + -1206, -1181, -1155, -1130, + -1106, -1085, -1068, -1057, + -1057, -1068, -1085, -1106, + -1130, -1155, -1181, -1206, + -1231, -1254, -1274, -1291, + -1304, -1312, -1313, -1307, + -1291, -1264, -1215, -1139, + -1053, -969, -898, -828, + -756, -675, -577, -468, + -358, -248, -143, -48, + 29, 86, 128, 154, + 161, 137, 95, 48, + 0, -40, -63, -50, + -12, 41, 104, 175, + 251, 330, 409, 481, + 542, 606, 678, 775, + 892, 1018, 1150, 1283, + 1416, 1545, 1667, 1779, + 1873, 1947, 2009, 2057, + 2096, 2122, 2137, 2138, + 2125, 2086, 2020, 1944, + 1865, 1799, 1744, 1695, + 1650, 1610, 1576, 1550, + 1531, 1525, 1536, 1559, + 1592, 1635, 1688, 1758, + 1854, 1959, 2063, 2160, + 2237, 2291, 2325, 2338, + 2327, 2288, 2215, 2097, + 1941, 1749, 1516, 1231, + 901, 531, 111, -346, + -826, -1323, -1830, -2342, + -2853, -3360, -3857, -4340, + -4804, -5243, -5652, -6026, + -6355, -6632, -6843, -6975, + -5406, -5724, -5968, -6124, + -6124, -5968, -5724, -5406, + -5034, -4615, -4163, -3683, + -3186, -2677, -2165, -1655, + -1160, -684, -249, 134, + 461, 732, 953, 1118, + 1242, 1324, 1362, 1369, + 1352, 1313, 1252, 1180, + 1115, 1072, 1043, 1026, + 1026, 1043, 1073, 1115, + 1173, 1253, 1347, 1445, + 1543, 1635, 1716, 1775, + 1813, 1838, 1847, 1839, + 1804, 1745, 1676, 1605, + 1539, 1471, 1399, 1316, + 1229, 1160, 1111, 1070, + 1038, 1012, 993, 981, + 981, 992, 1006, 1021, + 1034, 1041, 1040, 1018, + 974, 930, 889, 844, + 789, 715, 623, 518, + 391, 247, 100, -38, + -161, -247, -276, -278, + -263, -238, -208, -185, + -177, -177, -180, -184, + -184, -181, -184, -199, + -239, -293, -348, -397, + -446, -497, -554, -625, + -702, -775, -833, -881, + -933, -987, -1018, -1031, + -1035, -1030, -1020, -1005, + -987, -967, -945, -923, + -902, -882, -867, -855, + -855, -867, -882, -902, + -923, -945, -967, -987, + -1005, -1020, -1030, -1035, + -1031, -1018, -987, -933, + -881, -833, -775, -702, + -625, -554, -497, -446, + -397, -348, -293, -239, + -199, -184, -181, -184, + -184, -180, -177, -177, + -185, -208, -238, -263, + -278, -276, -247, -161, + -38, 100, 247, 391, + 518, 623, 715, 789, + 844, 889, 930, 974, + 1018, 1040, 1041, 1034, + 1021, 1006, 992, 981, + 981, 993, 1012, 1038, + 1070, 1111, 1160, 1229, + 1316, 1399, 1471, 1539, + 1605, 1676, 1745, 1804, + 1839, 1847, 1838, 1813, + 1775, 1716, 1635, 1543, + 1445, 1347, 1253, 1173, + 1115, 1073, 1043, 1026, + 1026, 1043, 1072, 1115, + 1180, 1252, 1313, 1352, + 1369, 1362, 1324, 1242, + 1118, 953, 732, 461, + 134, -249, -684, -1160, + -1655, -2165, -2677, -3186, + -3683, -4163, -4615, -5034, + -5406, -5724, -5968, -6124, + -3350, -3726, -4019, -4211, + -4211, -4019, -3726, -3350, + -2921, -2448, -1951, -1439, + -929, -431, 32, 436, + 763, 1015, 1194, 1308, + 1361, 1364, 1326, 1254, + 1163, 1070, 989, 927, + 894, 881, 890, 916, + 958, 1021, 1090, 1154, + 1201, 1224, 1227, 1201, + 1149, 1091, 1017, 918, + 807, 692, 579, 480, + 392, 316, 254, 217, + 185, 153, 129, 123, + 140, 149, 133, 96, + 43, -8, -67, -147, + -231, -318, -400, -476, + -532, -569, -593, -607, + -609, -601, -571, -533, + -504, -470, -436, -421, + -421, -420, -424, -435, + -467, -523, -601, -680, + -745, -768, -725, -651, + -563, -472, -398, -336, + -287, -232, -167, -105, + -58, -31, -13, -10, + -24, -46, -55, -41, + -19, -9, -2, 17, + 47, 85, 139, 199, + 254, 299, 355, 404, + 443, 480, 495, 499, + 495, 486, 474, 459, + 444, 429, 415, 406, + 406, 415, 429, 444, + 459, 474, 486, 495, + 499, 495, 480, 443, + 404, 355, 299, 254, + 199, 139, 85, 47, + 17, -2, -9, -19, + -41, -55, -46, -24, + -10, -13, -31, -58, + -105, -167, -232, -287, + -336, -398, -472, -563, + -651, -725, -768, -745, + -680, -601, -523, -467, + -435, -424, -420, -421, + -421, -436, -470, -504, + -533, -571, -601, -609, + -607, -593, -569, -532, + -476, -400, -318, -231, + -147, -67, -8, 43, + 96, 133, 149, 140, + 123, 129, 153, 185, + 217, 254, 316, 392, + 480, 579, 692, 807, + 918, 1017, 1091, 1149, + 1201, 1227, 1224, 1201, + 1154, 1090, 1021, 958, + 916, 890, 881, 894, + 927, 989, 1070, 1163, + 1254, 1326, 1364, 1361, + 1308, 1194, 1015, 763, + 436, 32, -431, -929, + -1439, -1951, -2448, -2921, + -3350, -3726, -4019, -4211, + -2231, -2653, -2988, -3213, + -3213, -2988, -2653, -2231, + -1761, -1256, -744, -241, + 223, 610, 897, 1091, + 1197, 1229, 1197, 1119, + 1009, 896, 803, 734, + 698, 690, 705, 739, + 790, 836, 860, 858, + 823, 770, 686, 581, + 458, 323, 200, 92, + -5, -62, -99, -127, + -133, -128, -123, -126, + -139, -162, -205, -251, + -307, -380, -464, -519, + -530, -529, -528, -513, + -484, -439, -390, -346, + -310, -289, -273, -264, + -263, -272, -278, -283, + -272, -248, -212, -168, + -125, -59, 27, 101, + 161, 203, 230, 262, + 282, 277, 239, 175, + 115, 91, 134, 201, + 272, 321, 347, 363, + 382, 404, 413, 401, + 372, 326, 281, 241, + 193, 125, 74, 64, + 71, 71, 68, 69, + 67, 51, 51, 43, + 10, -36, -77, -121, + -168, -209, -248, -277, + -292, -293, -289, -280, + -269, -256, -245, -237, + -237, -245, -256, -269, + -280, -289, -293, -292, + -277, -248, -209, -168, + -121, -77, -36, 10, + 43, 51, 51, 67, + 69, 68, 71, 71, + 64, 74, 125, 193, + 241, 281, 326, 372, + 401, 413, 404, 382, + 363, 347, 321, 272, + 201, 134, 91, 115, + 175, 239, 277, 282, + 262, 230, 203, 161, + 101, 27, -59, -125, + -168, -212, -248, -272, + -283, -278, -272, -263, + -264, -273, -289, -310, + -346, -390, -439, -484, + -513, -528, -529, -530, + -519, -464, -380, -307, + -251, -205, -162, -139, + -126, -123, -128, -133, + -127, -99, -62, -5, + 92, 200, 323, 458, + 581, 686, 770, 823, + 858, 860, 836, 790, + 739, 705, 690, 698, + 734, 803, 896, 1009, + 1119, 1197, 1229, 1197, + 1091, 897, 610, 223, + -241, -744, -1256, -1761, + -2231, -2653, -2988, -3213, + -1957, -2399, -2755, -2997, + -2997, -2755, -2399, -1957, + -1471, -959, -454, 18, + 405, 687, 865, 954, + 966, 921, 835, 743, + 671, 630, 621, 641, + 687, 750, 812, 853, + 867, 848, 796, 715, + 610, 500, 391, 299, + 226, 172, 139, 122, + 109, 117, 107, 78, + 37, -22, -91, -167, + -245, -308, -357, -388, + -398, -398, -399, -376, + -327, -295, -290, -290, + -304, -328, -355, -382, + -399, -399, -386, -363, + -322, -268, -209, -154, + -111, -79, -51, -29, + -31, -34, -20, -4, + 27, 56, 85, 129, + 185, 237, 257, 236, + 197, 181, 211, 252, + 277, 268, 247, 240, + 247, 265, 281, 285, + 293, 299, 289, 269, + 232, 173, 121, 100, + 77, 41, 22, 15, + 11, -2, 5, 7, + 2, -16, -43, -76, + -117, -153, -191, -223, + -249, -258, -257, -251, + -241, -230, -220, -211, + -211, -220, -230, -241, + -251, -257, -258, -249, + -223, -191, -153, -117, + -76, -43, -16, 2, + 7, 5, -2, 11, + 15, 22, 41, 77, + 100, 121, 173, 232, + 269, 289, 299, 293, + 285, 281, 265, 247, + 240, 247, 268, 277, + 252, 211, 181, 197, + 236, 257, 237, 185, + 129, 85, 56, 27, + -4, -20, -34, -31, + -29, -51, -79, -111, + -154, -209, -268, -322, + -363, -386, -399, -399, + -382, -355, -328, -304, + -290, -290, -295, -327, + -376, -399, -398, -398, + -388, -357, -308, -245, + -167, -91, -22, 37, + 78, 107, 117, 109, + 122, 139, 172, 226, + 299, 391, 500, 610, + 715, 796, 848, 867, + 853, 812, 750, 687, + 641, 621, 630, 671, + 743, 835, 921, 966, + 954, 865, 687, 405, + 18, -454, -959, -1471, + -1957, -2399, -2755, -2997, + -1321, -1795, -2185, -2456, + -2456, -2185, -1795, -1321, + -814, -302, 166, 531, + 764, 884, 903, 850, + 747, 643, 567, 530, + 530, 560, 611, 657, + 675, 656, 597, 506, + 392, 267, 153, 63, + -4, -35, -49, -46, + -47, -59, -88, -134, + -203, -262, -323, -367, + -390, -390, -371, -333, + -286, -249, -223, -209, + -209, -218, -251, -261, + -226, -192, -152, -92, + -37, 24, 72, 102, + 125, 131, 127, 121, + 121, 129, 142, 165, + 197, 228, 249, 258, + 249, 235, 218, 184, + 158, 144, 132, 119, + 120, 132, 131, 83, + 6, -47, -42, -29, + -42, -85, -117, -127, + -128, -134, -137, -134, + -133, -143, -162, -183, + -193, -222, -242, -213, + -176, -149, -112, -84, + -53, -43, -31, -25, + -25, -29, -24, -13, + 10, 43, 75, 110, + 140, 164, 174, 173, + 167, 158, 149, 141, + 141, 149, 158, 167, + 173, 174, 164, 140, + 110, 75, 43, 10, + -13, -24, -29, -25, + -25, -31, -43, -53, + -84, -112, -149, -176, + -213, -242, -222, -193, + -183, -162, -143, -133, + -134, -137, -134, -128, + -127, -117, -85, -42, + -29, -42, -47, 6, + 83, 131, 132, 120, + 119, 132, 144, 158, + 184, 218, 235, 249, + 258, 249, 228, 197, + 165, 142, 129, 121, + 121, 127, 131, 125, + 102, 72, 24, -37, + -92, -152, -192, -226, + -261, -251, -218, -209, + -209, -223, -249, -286, + -333, -371, -390, -390, + -367, -323, -262, -203, + -134, -88, -59, -47, + -46, -49, -35, -4, + 63, 153, 267, 392, + 506, 597, 656, 675, + 657, 611, 560, 530, + 530, 567, 643, 747, + 850, 903, 884, 764, + 531, 166, -302, -814, + -1321, -1795, -2185, -2456, + -12553, -12666, -12742, -12780, + -12780, -12742, -12666, -12553, + -12403, -12217, -11997, -11743, + -11456, -11140, -10795, -10423, + -10026, -9607, -9167, -8710, + -8237, -7752, -7256, -6752, + -6243, -5731, -5219, -4709, + -4204, -3706, -3216, -2738, + -2273, -1823, -1389, -973, + -577, -201, 154, 486, + 795, 1081, 1343, 1581, + 1796, 1987, 2156, 2302, + 2426, 2530, 2613, 2678, + 2726, 2757, 2773, 2775, + 2766, 2746, 2716, 2679, + 2636, 2588, 2537, 2484, + 2430, 2378, 2326, 2278, + 2234, 2194, 2161, 2133, + 2112, 2098, 2092, 2093, + 2102, 2119, 2144, 2176, + 2215, 2261, 2312, 2370, + 2433, 2499, 2570, 2643, + 2718, 2795, 2872, 2948, + 3024, 3097, 3168, 3235, + 3298, 3357, 3411, 3459, + 3501, 3537, 3566, 3589, + 3604, 3614, 3616, 3612, + 3602, 3586, 3565, 3538, + 3507, 3472, 3434, 3392, + 3348, 3303, 3257, 3211, + 3166, 3121, 3078, 3038, + 3001, 2967, 2937, 2911, + 2890, 2874, 2863, 2858, + 2858, 2863, 2874, 2890, + 2911, 2937, 2967, 3001, + 3038, 3078, 3121, 3166, + 3211, 3257, 3303, 3348, + 3392, 3434, 3472, 3507, + 3538, 3565, 3586, 3602, + 3612, 3616, 3614, 3604, + 3589, 3566, 3537, 3501, + 3459, 3411, 3357, 3298, + 3235, 3168, 3097, 3024, + 2948, 2872, 2795, 2718, + 2643, 2570, 2499, 2433, + 2370, 2312, 2261, 2215, + 2176, 2144, 2119, 2102, + 2093, 2092, 2098, 2112, + 2133, 2161, 2194, 2234, + 2278, 2326, 2378, 2430, + 2484, 2537, 2588, 2636, + 2679, 2716, 2746, 2766, + 2775, 2773, 2757, 2726, + 2678, 2613, 2530, 2426, + 2302, 2156, 1987, 1796, + 1581, 1343, 1081, 795, + 486, 154, -201, -577, + -973, -1389, -1823, -2273, + -2738, -3216, -3706, -4204, + -4709, -5219, -5731, -6243, + -6752, -7256, -7752, -8237, + -8710, -9167, -9607, -10026, + -10423, -10795, -11140, -11456, + -11743, -11997, -12217, -12403, + -12553, -12666, -12742, -12780, + -14967, -15112, -15210, -15259, + -15259, -15210, -15112, -14967, + -14776, -14540, -14263, -13946, + -13593, -13208, -12794, -12354, + -11893, -11414, -10922, -10419, + -9910, -9398, -8886, -8378, + -7875, -7380, -6894, -6421, + -5959, -5511, -5076, -4655, + -4247, -3853, -3470, -3099, + -2737, -2385, -2040, -1701, + -1368, -1039, -714, -391, + -70, 249, 566, 881, + 1193, 1502, 1806, 2103, + 2394, 2674, 2944, 3200, + 3441, 3664, 3867, 4049, + 4208, 4342, 4449, 4529, + 4581, 4604, 4599, 4566, + 4505, 4418, 4307, 4173, + 4019, 3847, 3661, 3463, + 3258, 3048, 2838, 2631, + 2431, 2241, 2065, 1906, + 1767, 1650, 1557, 1491, + 1453, 1443, 1462, 1511, + 1588, 1693, 1824, 1979, + 2157, 2354, 2569, 2798, + 3038, 3286, 3538, 3792, + 4044, 4292, 4532, 4762, + 4979, 5183, 5370, 5541, + 5693, 5827, 5943, 6040, + 6120, 6182, 6229, 6262, + 6282, 6292, 6293, 6286, + 6275, 6260, 6244, 6228, + 6213, 6201, 6193, 6188, + 6188, 6193, 6201, 6213, + 6228, 6244, 6260, 6275, + 6286, 6293, 6292, 6282, + 6262, 6229, 6182, 6120, + 6040, 5943, 5827, 5693, + 5541, 5370, 5183, 4979, + 4762, 4532, 4292, 4044, + 3792, 3538, 3286, 3038, + 2798, 2569, 2354, 2157, + 1979, 1824, 1693, 1588, + 1511, 1462, 1443, 1453, + 1491, 1557, 1650, 1767, + 1906, 2065, 2241, 2431, + 2631, 2838, 3048, 3258, + 3463, 3661, 3847, 4019, + 4173, 4307, 4418, 4505, + 4566, 4599, 4604, 4581, + 4529, 4449, 4342, 4208, + 4049, 3867, 3664, 3441, + 3200, 2944, 2674, 2394, + 2103, 1806, 1502, 1193, + 881, 566, 249, -70, + -391, -714, -1039, -1368, + -1701, -2040, -2385, -2737, + -3099, -3470, -3853, -4247, + -4655, -5076, -5511, -5959, + -6421, -6894, -7380, -7875, + -8378, -8886, -9398, -9910, + -10419, -10922, -11414, -11893, + -12354, -12794, -13208, -13593, + -13946, -14263, -14540, -14776, + -14967, -15112, -15210, -15259, + -13027, -13226, -13361, -13429, + -13429, -13361, -13226, -13027, + -12768, -12454, -12090, -11683, + -11240, -10769, -10277, -9772, + -9260, -8748, -8242, -7746, + -7264, -6800, -6354, -5929, + -5523, -5135, -4764, -4407, + -4061, -3723, -3391, -3060, + -2729, -2396, -2058, -1716, + -1368, -1017, -664, -311, + 37, 378, 706, 1017, + 1305, 1568, 1798, 1994, + 2151, 2267, 2340, 2370, + 2358, 2305, 2215, 2090, + 1938, 1762, 1571, 1370, + 1167, 969, 784, 617, + 475, 364, 287, 248, + 248, 288, 368, 485, + 638, 821, 1031, 1262, + 1508, 1763, 2021, 2275, + 2520, 2752, 2966, 3157, + 3325, 3468, 3585, 3677, + 3746, 3793, 3824, 3840, + 3846, 3848, 3848, 3851, + 3860, 3880, 3911, 3956, + 4016, 4090, 4176, 4274, + 4379, 4489, 4599, 4704, + 4800, 4883, 4947, 4989, + 5005, 4992, 4949, 4874, + 4769, 4633, 4471, 4284, + 4078, 3858, 3629, 3399, + 3172, 2956, 2758, 2582, + 2435, 2320, 2242, 2202, + 2202, 2242, 2320, 2435, + 2582, 2758, 2956, 3172, + 3399, 3629, 3858, 4078, + 4284, 4471, 4633, 4769, + 4874, 4949, 4992, 5005, + 4989, 4947, 4883, 4800, + 4704, 4599, 4489, 4379, + 4274, 4176, 4090, 4016, + 3956, 3911, 3880, 3860, + 3851, 3848, 3848, 3846, + 3840, 3824, 3793, 3746, + 3677, 3585, 3468, 3325, + 3157, 2966, 2752, 2520, + 2275, 2021, 1763, 1508, + 1262, 1031, 821, 638, + 485, 368, 288, 248, + 248, 287, 364, 475, + 617, 784, 969, 1167, + 1370, 1571, 1762, 1938, + 2090, 2215, 2305, 2358, + 2370, 2340, 2267, 2151, + 1994, 1798, 1568, 1305, + 1017, 706, 378, 37, + -311, -664, -1017, -1368, + -1716, -2058, -2396, -2729, + -3060, -3391, -3723, -4061, + -4407, -4764, -5135, -5523, + -5929, -6354, -6800, -7264, + -7746, -8242, -8748, -9260, + -9772, -10277, -10769, -11240, + -11683, -12090, -12454, -12768, + -13027, -13226, -13361, -13429, + -12809, -13061, -13233, -13321, + -13321, -13233, -13061, -12809, + -12486, -12101, -11666, -11194, + -10696, -10185, -9673, -9170, + -8684, -8222, -7788, -7383, + -7008, -6660, -6334, -6025, + -5728, -5436, -5143, -4843, + -4533, -4210, -3872, -3521, + -3159, -2791, -2422, -2058, + -1708, -1377, -1073, -802, + -569, -377, -226, -116, + -43, -4, 9, 4, + -10, -25, -31, -18, + 19, 87, 189, 327, + 500, 705, 937, 1188, + 1449, 1711, 1964, 2197, + 2401, 2568, 2691, 2766, + 2792, 2768, 2698, 2587, + 2444, 2276, 2096, 1913, + 1740, 1586, 1462, 1376, + 1334, 1339, 1394, 1496, + 1644, 1831, 2051, 2295, + 2554, 2819, 3080, 3330, + 3561, 3769, 3949, 4101, + 4224, 4320, 4394, 4451, + 4497, 4536, 4577, 4623, + 4680, 4749, 4834, 4931, + 5041, 5157, 5275, 5388, + 5488, 5568, 5620, 5637, + 5614, 5546, 5434, 5276, + 5075, 4838, 4571, 4284, + 3987, 3692, 3411, 3155, + 2936, 2762, 2642, 2581, + 2581, 2642, 2762, 2936, + 3155, 3411, 3692, 3987, + 4284, 4571, 4838, 5075, + 5276, 5434, 5546, 5614, + 5637, 5620, 5568, 5488, + 5388, 5275, 5157, 5041, + 4931, 4834, 4749, 4680, + 4623, 4577, 4536, 4497, + 4451, 4394, 4320, 4224, + 4101, 3949, 3769, 3561, + 3330, 3080, 2819, 2554, + 2295, 2051, 1831, 1644, + 1496, 1394, 1339, 1334, + 1376, 1462, 1586, 1740, + 1913, 2096, 2276, 2444, + 2587, 2698, 2768, 2792, + 2766, 2691, 2568, 2401, + 2197, 1964, 1711, 1449, + 1188, 937, 705, 500, + 327, 189, 87, 19, + -18, -31, -25, -10, + 4, 9, -4, -43, + -116, -226, -377, -569, + -802, -1073, -1377, -1708, + -2058, -2422, -2791, -3159, + -3521, -3872, -4210, -4533, + -4843, -5143, -5436, -5728, + -6025, -6334, -6660, -7008, + -7383, -7788, -8222, -8684, + -9170, -9673, -10185, -10696, + -11194, -11666, -12101, -12486, + -12809, -13061, -13233, -13321, + -13403, -13692, -13892, -13995, + -13995, -13892, -13692, -13403, + -13037, -12610, -12138, -11638, + -11126, -10616, -10120, -9644, + -9194, -8769, -8365, -7978, + -7599, -7219, -6830, -6425, + -5998, -5548, -5075, -4584, + -4083, -3582, -3093, -2628, + -2201, -1822, -1501, -1242, + -1048, -916, -840, -809, + -811, -830, -852, -861, + -843, -786, -684, -533, + -333, -89, 189, 491, + 803, 1110, 1399, 1655, + 1870, 2036, 2149, 2211, + 2226, 2202, 2148, 2077, + 2002, 1933, 1880, 1852, + 1852, 1881, 1936, 2012, + 2100, 2189, 2269, 2329, + 2361, 2357, 2315, 2235, + 2120, 1980, 1825, 1668, + 1525, 1410, 1337, 1318, + 1362, 1474, 1654, 1899, + 2200, 2546, 2923, 3314, + 3703, 4075, 4415, 4711, + 4957, 5149, 5287, 5374, + 5419, 5430, 5420, 5398, + 5375, 5359, 5357, 5372, + 5402, 5443, 5489, 5531, + 5558, 5561, 5530, 5457, + 5337, 5170, 4958, 4708, + 4430, 4136, 3843, 3566, + 3321, 3123, 2984, 2912, + 2912, 2984, 3123, 3321, + 3566, 3843, 4136, 4430, + 4708, 4958, 5170, 5337, + 5457, 5530, 5561, 5558, + 5531, 5489, 5443, 5402, + 5372, 5357, 5359, 5375, + 5398, 5420, 5430, 5419, + 5374, 5287, 5149, 4957, + 4711, 4415, 4075, 3703, + 3314, 2923, 2546, 2200, + 1899, 1654, 1474, 1362, + 1318, 1337, 1410, 1525, + 1668, 1825, 1980, 2120, + 2235, 2315, 2357, 2361, + 2329, 2269, 2189, 2100, + 2012, 1936, 1881, 1852, + 1852, 1880, 1933, 2002, + 2077, 2148, 2202, 2226, + 2211, 2149, 2036, 1870, + 1655, 1399, 1110, 803, + 491, 189, -89, -333, + -533, -684, -786, -843, + -861, -852, -830, -811, + -809, -840, -916, -1048, + -1242, -1501, -1822, -2201, + -2628, -3093, -3582, -4083, + -4584, -5075, -5548, -5998, + -6425, -6830, -7219, -7599, + -7978, -8365, -8769, -9194, + -9644, -10120, -10616, -11126, + -11638, -12138, -12610, -13037, + -13403, -13692, -13892, -13995, + -9896, -10290, -10574, -10722, + -10722, -10574, -10290, -9896, + -9424, -8914, -8402, -7923, + -7504, -7161, -6900, -6715, + -6591, -6506, -6436, -6356, + -6245, -6087, -5876, -5608, + -5291, -4932, -4546, -4142, + -3732, -3323, -2916, -2512, + -2106, -1695, -1277, -850, + -421, 3, 409, 781, + 1103, 1360, 1542, 1646, + 1674, 1637, 1555, 1449, + 1346, 1268, 1237, 1264, + 1355, 1505, 1699, 1917, + 2134, 2326, 2470, 2550, + 2558, 2496, 2375, 2214, + 2035, 1864, 1724, 1632, + 1599, 1625, 1701, 1812, + 1935, 2046, 2124, 2151, + 2118, 2023, 1875, 1692, + 1497, 1315, 1172, 1089, + 1080, 1152, 1299, 1509, + 1762, 2034, 2300, 2537, + 2726, 2856, 2923, 2931, + 2888, 2809, 2709, 2602, + 2501, 2413, 2341, 2284, + 2239, 2200, 2161, 2122, + 2083, 2050, 2031, 2036, + 2076, 2160, 2291, 2466, + 2676, 2905, 3130, 3324, + 3463, 3523, 3489, 3353, + 3120, 2806, 2437, 2046, + 1671, 1349, 1115, 991, + 991, 1115, 1349, 1671, + 2046, 2437, 2806, 3120, + 3353, 3489, 3523, 3463, + 3324, 3130, 2905, 2676, + 2466, 2291, 2160, 2076, + 2036, 2031, 2050, 2083, + 2122, 2161, 2200, 2239, + 2284, 2341, 2413, 2501, + 2602, 2709, 2809, 2888, + 2931, 2923, 2856, 2726, + 2537, 2300, 2034, 1762, + 1509, 1299, 1152, 1080, + 1089, 1172, 1315, 1497, + 1692, 1875, 2023, 2118, + 2151, 2124, 2046, 1935, + 1812, 1701, 1625, 1599, + 1632, 1724, 1864, 2035, + 2214, 2375, 2496, 2558, + 2550, 2470, 2326, 2134, + 1917, 1699, 1505, 1355, + 1264, 1237, 1268, 1346, + 1449, 1555, 1637, 1674, + 1646, 1542, 1360, 1103, + 781, 409, 3, -421, + -850, -1277, -1695, -2106, + -2512, -2916, -3323, -3732, + -4142, -4546, -4932, -5291, + -5608, -5876, -6087, -6245, + -6356, -6436, -6506, -6591, + -6715, -6900, -7161, -7504, + -7923, -8402, -8914, -9424, + -9896, -10290, -10574, -10722, + -7185, -7596, -7895, -8052, + -8052, -7895, -7596, -7185, + -6701, -6189, -5694, -5257, + -4908, -4667, -4538, -4515, + -4577, -4697, -4846, -4991, + -5106, -5172, -5178, -5119, + -5002, -4837, -4636, -4413, + -4178, -3939, -3697, -3450, + -3193, -2920, -2629, -2317, + -1989, -1656, -1333, -1037, + -788, -604, -496, -470, + -520, -635, -794, -968, + -1128, -1247, -1300, -1274, + -1163, -974, -725, -440, + -151, 112, 321, 457, + 509, 479, 379, 231, + 62, -98, -223, -291, + -291, -222, -95, 70, + 248, 411, 531, 588, + 572, 481, 326, 128, + -84, -279, -427, -500, + -482, -366, -155, 136, + 483, 859, 1233, 1579, + 1874, 2106, 2270, 2370, + 2418, 2430, 2425, 2421, + 2430, 2463, 2523, 2608, + 2712, 2830, 2954, 3081, + 3213, 3354, 3513, 3704, + 3936, 4220, 4558, 4947, + 5374, 5818, 6251, 6641, + 6957, 7169, 7259, 7216, + 7047, 6768, 6410, 6013, + 5621, 5280, 5028, 4894, + 4894, 5028, 5280, 5621, + 6013, 6410, 6768, 7047, + 7216, 7259, 7169, 6957, + 6641, 6251, 5818, 5374, + 4947, 4558, 4220, 3936, + 3704, 3513, 3354, 3213, + 3081, 2954, 2830, 2712, + 2608, 2523, 2463, 2430, + 2421, 2425, 2430, 2418, + 2370, 2270, 2106, 1874, + 1579, 1233, 859, 483, + 136, -155, -366, -482, + -500, -427, -279, -84, + 128, 326, 481, 572, + 588, 531, 411, 248, + 70, -95, -222, -291, + -291, -223, -98, 62, + 231, 379, 479, 509, + 457, 321, 112, -151, + -440, -725, -974, -1163, + -1274, -1300, -1247, -1128, + -968, -794, -635, -520, + -470, -496, -604, -788, + -1037, -1333, -1656, -1989, + -2317, -2629, -2920, -3193, + -3450, -3697, -3939, -4178, + -4413, -4636, -4837, -5002, + -5119, -5178, -5172, -5106, + -4991, -4846, -4697, -4577, + -4515, -4538, -4667, -4908, + -5257, -5694, -6189, -6701, + -7185, -7596, -7895, -8052, + -2946, -3276, -3520, -3649, + -3649, -3520, -3276, -2946, + -2567, -2179, -1823, -1532, + -1328, -1219, -1200, -1253, + -1349, -1454, -1534, -1560, + -1508, -1370, -1147, -851, + -505, -135, 230, 567, + 856, 1088, 1265, 1395, + 1494, 1581, 1674, 1787, + 1928, 2095, 2281, 2468, + 2639, 2771, 2849, 2861, + 2806, 2692, 2535, 2359, + 2191, 2058, 1979, 1967, + 2024, 2137, 2286, 2440, + 2563, 2623, 2590, 2447, + 2188, 1821, 1371, 869, + 357, -124, -535, -848, + -1047, -1131, -1113, -1021, + -890, -760, -669, -649, + -720, -891, -1153, -1487, + -1863, -2246, -2599, -2892, + -3100, -3214, -3232, -3166, + -3037, -2871, -2695, -2532, + -2399, -2305, -2249, -2220, + -2203, -2177, -2126, -2034, + -1893, -1705, -1478, -1228, + -976, -743, -545, -394, + -292, -234, -201, -173, + -123, -27, 136, 375, + 692, 1073, 1494, 1925, + 2329, 2670, 2918, 3054, + 3071, 2976, 2790, 2546, + 2282, 2039, 1854, 1754, + 1754, 1854, 2039, 2282, + 2546, 2790, 2976, 3071, + 3054, 2918, 2670, 2329, + 1925, 1494, 1073, 692, + 375, 136, -27, -123, + -173, -201, -234, -292, + -394, -545, -743, -976, + -1228, -1478, -1705, -1893, + -2034, -2126, -2177, -2203, + -2220, -2249, -2305, -2399, + -2532, -2695, -2871, -3037, + -3166, -3232, -3214, -3100, + -2892, -2599, -2246, -1863, + -1487, -1153, -891, -720, + -649, -669, -760, -890, + -1021, -1113, -1131, -1047, + -848, -535, -124, 357, + 869, 1371, 1821, 2188, + 2447, 2590, 2623, 2563, + 2440, 2286, 2137, 2024, + 1967, 1979, 2058, 2191, + 2359, 2535, 2692, 2806, + 2861, 2849, 2771, 2639, + 2468, 2281, 2095, 1928, + 1787, 1674, 1581, 1494, + 1395, 1265, 1088, 856, + 567, 230, -135, -505, + -851, -1147, -1370, -1508, + -1560, -1534, -1454, -1349, + -1253, -1200, -1219, -1328, + -1532, -1823, -2179, -2567, + -2946, -3276, -3520, -3649, + -12803, -13002, -13147, -13223, + -13223, -13147, -13002, -12803, + -12572, -12329, -12094, -11884, + -11707, -11563, -11446, -11339, + -11226, -11085, -10896, -10647, + -10330, -9946, -9504, -9020, + -8515, -8012, -7532, -7091, + -6698, -6354, -6053, -5780, + -5517, -5244, -4942, -4596, + -4201, -3756, -3272, -2763, + -2251, -1758, -1304, -906, + -571, -301, -89, 81, + 229, 374, 536, 731, + 966, 1241, 1549, 1873, + 2194, 2492, 2746, 2942, + 3071, 3135, 3142, 3106, + 3050, 2994, 2959, 2960, + 3007, 3100, 3231, 3387, + 3547, 3692, 3802, 3863, + 3867, 3815, 3716, 3586, + 3444, 3314, 3215, 3163, + 3166, 3225, 3333, 3475, + 3630, 3779, 3901, 3982, + 4014, 3996, 3938, 3854, + 3764, 3689, 3649, 3659, + 3727, 3852, 4027, 4236, + 4458, 4672, 4859, 5001, + 5092, 5129, 5122, 5084, + 5036, 4997, 4987, 5021, + 5107, 5243, 5422, 5628, + 5840, 6037, 6199, 6310, + 6362, 6355, 6295, 6199, + 6086, 5977, 5891, 5844, + 5844, 5891, 5977, 6086, + 6199, 6295, 6355, 6362, + 6310, 6199, 6037, 5840, + 5628, 5422, 5243, 5107, + 5021, 4987, 4997, 5036, + 5084, 5122, 5129, 5092, + 5001, 4859, 4672, 4458, + 4236, 4027, 3852, 3727, + 3659, 3649, 3689, 3764, + 3854, 3938, 3996, 4014, + 3982, 3901, 3779, 3630, + 3475, 3333, 3225, 3166, + 3163, 3215, 3314, 3444, + 3586, 3716, 3815, 3867, + 3863, 3802, 3692, 3547, + 3387, 3231, 3100, 3007, + 2960, 2959, 2994, 3050, + 3106, 3142, 3135, 3071, + 2942, 2746, 2492, 2194, + 1873, 1549, 1241, 966, + 731, 536, 374, 229, + 81, -89, -301, -571, + -906, -1304, -1758, -2251, + -2763, -3272, -3756, -4201, + -4596, -4942, -5244, -5517, + -5780, -6053, -6354, -6698, + -7091, -7532, -8012, -8515, + -9020, -9504, -9946, -10330, + -10647, -10896, -11085, -11226, + -11339, -11446, -11563, -11707, + -11884, -12094, -12329, -12572, + -12803, -13002, -13147, -13223, + -9202, -9566, -9825, -9959, + -9959, -9825, -9566, -9202, + -8758, -8265, -7753, -7250, + -6780, -6357, -5991, -5682, + -5421, -5199, -5000, -4811, + -4618, -4413, -4191, -3953, + -3702, -3445, -3189, -2941, + -2706, -2486, -2279, -2081, + -1887, -1689, -1482, -1263, + -1032, -792, -552, -321, + -109, 72, 214, 315, + 374, 398, 396, 384, + 376, 387, 429, 509, + 629, 783, 960, 1145, + 1321, 1469, 1576, 1630, + 1629, 1575, 1478, 1353, + 1220, 1098, 1005, 955, + 955, 1006, 1101, 1227, + 1367, 1503, 1616, 1693, + 1723, 1704, 1641, 1545, + 1431, 1317, 1222, 1161, + 1145, 1180, 1264, 1391, + 1549, 1724, 1899, 2060, + 2198, 2305, 2381, 2428, + 2455, 2471, 2487, 2511, + 2551, 2609, 2684, 2773, + 2869, 2964, 3052, 3126, + 3185, 3230, 3264, 3292, + 3322, 3358, 3404, 3459, + 3516, 3567, 3597, 3591, + 3534, 3414, 3223, 2960, + 2634, 2258, 1856, 1455, + 1086, 778, 556, 440, + 440, 556, 778, 1086, + 1455, 1856, 2258, 2634, + 2960, 3223, 3414, 3534, + 3591, 3597, 3567, 3516, + 3459, 3404, 3358, 3322, + 3292, 3264, 3230, 3185, + 3126, 3052, 2964, 2869, + 2773, 2684, 2609, 2551, + 2511, 2487, 2471, 2455, + 2428, 2381, 2305, 2198, + 2060, 1899, 1724, 1549, + 1391, 1264, 1180, 1145, + 1161, 1222, 1317, 1431, + 1545, 1641, 1704, 1723, + 1693, 1616, 1503, 1367, + 1227, 1101, 1006, 955, + 955, 1005, 1098, 1220, + 1353, 1478, 1575, 1629, + 1630, 1576, 1469, 1321, + 1145, 960, 783, 629, + 509, 429, 387, 376, + 384, 396, 398, 374, + 315, 214, 72, -109, + -321, -552, -792, -1032, + -1263, -1482, -1689, -1887, + -2081, -2279, -2486, -2706, + -2941, -3189, -3445, -3702, + -3953, -4191, -4413, -4618, + -4811, -5000, -5199, -5421, + -5682, -5991, -6357, -6780, + -7250, -7753, -8265, -8758, + -9202, -9566, -9825, -9959, + -11375, -11720, -11964, -12090, + -12090, -11964, -11720, -11375, + -10950, -10470, -9963, -9451, + -8955, -8490, -8063, -7677, + -7327, -7005, -6700, -6401, + -6098, -5784, -5455, -5111, + -4755, -4394, -4032, -3676, + -3332, -3001, -2685, -2382, + -2087, -1797, -1509, -1220, + -931, -643, -362, -95, + 151, 370, 557, 709, + 829, 920, 993, 1056, + 1120, 1197, 1294, 1414, + 1556, 1715, 1881, 2042, + 2182, 2289, 2352, 2364, + 2326, 2241, 2122, 1982, + 1839, 1712, 1617, 1566, + 1566, 1618, 1715, 1847, + 1998, 2151, 2290, 2400, + 2472, 2502, 2490, 2445, + 2377, 2300, 2230, 2179, + 2159, 2173, 2225, 2311, + 2422, 2548, 2680, 2805, + 2916, 3007, 3076, 3125, + 3158, 3180, 3200, 3221, + 3249, 3284, 3327, 3374, + 3419, 3459, 3488, 3503, + 3503, 3490, 3468, 3441, + 3415, 3393, 3377, 3367, + 3358, 3340, 3303, 3234, + 3123, 2959, 2738, 2460, + 2133, 1770, 1391, 1019, + 681, 402, 202, 98, + 98, 202, 402, 681, + 1019, 1391, 1770, 2133, + 2460, 2738, 2959, 3123, + 3234, 3303, 3340, 3358, + 3367, 3377, 3393, 3415, + 3441, 3468, 3490, 3503, + 3503, 3488, 3459, 3419, + 3374, 3327, 3284, 3249, + 3221, 3200, 3180, 3158, + 3125, 3076, 3007, 2916, + 2805, 2680, 2548, 2422, + 2311, 2225, 2173, 2159, + 2179, 2230, 2300, 2377, + 2445, 2490, 2502, 2472, + 2400, 2290, 2151, 1998, + 1847, 1715, 1618, 1566, + 1566, 1617, 1712, 1839, + 1982, 2122, 2241, 2326, + 2364, 2352, 2289, 2182, + 2042, 1881, 1715, 1556, + 1414, 1294, 1197, 1120, + 1056, 993, 920, 829, + 709, 557, 370, 151, + -95, -362, -643, -931, + -1220, -1509, -1797, -2087, + -2382, -2685, -3001, -3332, + -3676, -4032, -4394, -4755, + -5111, -5455, -5784, -6098, + -6401, -6700, -7005, -7327, + -7677, -8063, -8490, -8955, + -9451, -9963, -10470, -10950, + -11375, -11720, -11964, -12090, + -11010, -11365, -11617, -11747, + -11747, -11617, -11365, -11010, + -10576, -10088, -9576, -9065, + -8574, -8118, -7702, -7326, + -6983, -6660, -6346, -6026, + -5691, -5334, -4954, -4554, + -4141, -3727, -3321, -2934, + -2575, -2247, -1951, -1684, + -1441, -1214, -995, -777, + -557, -333, -108, 115, + 329, 529, 711, 871, + 1012, 1138, 1257, 1377, + 1508, 1659, 1834, 2034, + 2254, 2484, 2709, 2912, + 3076, 3185, 3227, 3196, + 3096, 2934, 2729, 2502, + 2279, 2084, 1940, 1863, + 1863, 1940, 2086, 2285, + 2515, 2753, 2974, 3156, + 3284, 3349, 3349, 3290, + 3185, 3049, 2902, 2760, + 2639, 2549, 2494, 2475, + 2486, 2520, 2567, 2618, + 2664, 2701, 2727, 2744, + 2757, 2770, 2788, 2815, + 2853, 2899, 2949, 2994, + 3028, 3040, 3024, 2977, + 2897, 2789, 2659, 2516, + 2371, 2233, 2108, 1998, + 1901, 1809, 1712, 1596, + 1446, 1251, 1002, 698, + 344, -47, -454, -853, + -1217, -1519, -1735, -1847, + -1847, -1735, -1519, -1217, + -853, -454, -47, 344, + 698, 1002, 1251, 1446, + 1596, 1712, 1809, 1901, + 1998, 2108, 2233, 2371, + 2516, 2659, 2789, 2897, + 2977, 3024, 3040, 3028, + 2994, 2949, 2899, 2853, + 2815, 2788, 2770, 2757, + 2744, 2727, 2701, 2664, + 2618, 2567, 2520, 2486, + 2475, 2494, 2549, 2639, + 2760, 2902, 3049, 3185, + 3290, 3349, 3349, 3284, + 3156, 2974, 2753, 2515, + 2285, 2086, 1940, 1863, + 1863, 1940, 2084, 2279, + 2502, 2729, 2934, 3096, + 3196, 3227, 3185, 3076, + 2912, 2709, 2484, 2254, + 2034, 1834, 1659, 1508, + 1377, 1257, 1138, 1012, + 871, 711, 529, 329, + 115, -108, -333, -557, + -777, -995, -1214, -1441, + -1684, -1951, -2247, -2575, + -2934, -3321, -3727, -4141, + -4554, -4954, -5334, -5691, + -6026, -6346, -6660, -6983, + -7326, -7702, -8118, -8574, + -9065, -9576, -10088, -10576, + -11010, -11365, -11617, -11747, + -9937, -10252, -10472, -10585, + -10585, -10472, -10252, -9937, + -9544, -9092, -8601, -8090, + -7578, -7078, -6601, -6150, + -5729, -5335, -4966, -4617, + -4285, -3966, -3659, -3365, + -3084, -2818, -2571, -2342, + -2132, -1938, -1756, -1582, + -1410, -1233, -1047, -849, + -636, -411, -179, 57, + 289, 509, 713, 895, + 1054, 1191, 1309, 1413, + 1508, 1602, 1699, 1801, + 1910, 2023, 2134, 2236, + 2323, 2387, 2422, 2424, + 2396, 2339, 2263, 2178, + 2094, 2025, 1980, 1968, + 1993, 2055, 2150, 2272, + 2408, 2549, 2683, 2800, + 2892, 2957, 2993, 3005, + 2998, 2979, 2958, 2940, + 2931, 2933, 2948, 2970, + 2996, 3020, 3035, 3037, + 3021, 2987, 2937, 2875, + 2806, 2736, 2673, 2622, + 2585, 2565, 2559, 2564, + 2574, 2583, 2584, 2572, + 2542, 2492, 2421, 2329, + 2217, 2088, 1942, 1778, + 1594, 1388, 1155, 889, + 588, 250, -125, -531, + -959, -1394, -1821, -2219, + -2569, -2851, -3049, -3151, + -3151, -3049, -2851, -2569, + -2219, -1821, -1394, -959, + -531, -125, 250, 588, + 889, 1155, 1388, 1594, + 1778, 1942, 2088, 2217, + 2329, 2421, 2492, 2542, + 2572, 2584, 2583, 2574, + 2564, 2559, 2565, 2585, + 2622, 2673, 2736, 2806, + 2875, 2937, 2987, 3021, + 3037, 3035, 3020, 2996, + 2970, 2948, 2933, 2931, + 2940, 2958, 2979, 2998, + 3005, 2993, 2957, 2892, + 2800, 2683, 2549, 2408, + 2272, 2150, 2055, 1993, + 1968, 1980, 2025, 2094, + 2178, 2263, 2339, 2396, + 2424, 2422, 2387, 2323, + 2236, 2134, 2023, 1910, + 1801, 1699, 1602, 1508, + 1413, 1309, 1191, 1054, + 895, 713, 509, 289, + 57, -179, -411, -636, + -849, -1047, -1233, -1410, + -1582, -1756, -1938, -2132, + -2342, -2571, -2818, -3084, + -3365, -3659, -3966, -4285, + -4617, -4966, -5335, -5729, + -6150, -6601, -7078, -7578, + -8090, -8601, -9092, -9544, + -9937, -10252, -10472, -10585, + -7063, -7314, -7486, -7574, + -7574, -7486, -7314, -7063, + -6739, -6354, -5918, -5443, + -4943, -4431, -3920, -3422, + -2948, -2508, -2108, -1754, + -1450, -1196, -991, -833, + -718, -640, -593, -570, + -565, -570, -580, -590, + -595, -592, -579, -555, + -520, -476, -423, -364, + -301, -237, -174, -114, + -58, -7, 39, 80, + 117, 151, 184, 218, + 255, 296, 344, 398, + 459, 528, 604, 685, + 771, 858, 946, 1032, + 1113, 1188, 1256, 1314, + 1363, 1403, 1433, 1456, + 1472, 1484, 1493, 1502, + 1512, 1527, 1546, 1572, + 1604, 1643, 1688, 1738, + 1792, 1848, 1903, 1956, + 2006, 2050, 2088, 2120, + 2146, 2166, 2181, 2195, + 2208, 2223, 2243, 2269, + 2304, 2348, 2401, 2462, + 2529, 2599, 2667, 2729, + 2778, 2808, 2811, 2781, + 2712, 2599, 2436, 2222, + 1955, 1636, 1270, 860, + 415, -57, -544, -1035, + -1516, -1974, -2396, -2769, + -3083, -3327, -3495, -3579, + -3579, -3495, -3327, -3083, + -2769, -2396, -1974, -1516, + -1035, -544, -57, 415, + 860, 1270, 1636, 1955, + 2222, 2436, 2599, 2712, + 2781, 2811, 2808, 2778, + 2729, 2667, 2599, 2529, + 2462, 2401, 2348, 2304, + 2269, 2243, 2223, 2208, + 2195, 2181, 2166, 2146, + 2120, 2088, 2050, 2006, + 1956, 1903, 1848, 1792, + 1738, 1688, 1643, 1604, + 1572, 1546, 1527, 1512, + 1502, 1493, 1484, 1472, + 1456, 1433, 1403, 1363, + 1314, 1256, 1188, 1113, + 1032, 946, 858, 771, + 685, 604, 528, 459, + 398, 344, 296, 255, + 218, 184, 151, 117, + 80, 39, -7, -58, + -114, -174, -237, -301, + -364, -423, -476, -520, + -555, -579, -592, -595, + -590, -580, -570, -565, + -570, -593, -640, -718, + -833, -991, -1196, -1450, + -1754, -2108, -2508, -2948, + -3422, -3920, -4431, -4943, + -5443, -5918, -6354, -6739, + -7063, -7314, -7486, -7574, + -3720, -3997, -4187, -4284, + -4284, -4187, -3997, -3720, + -3368, -2952, -2487, -1990, + -1478, -968, -476, -17, + 396, 753, 1046, 1270, + 1425, 1510, 1531, 1494, + 1407, 1281, 1126, 954, + 775, 600, 438, 295, + 177, 89, 30, 2, + 2, 27, 72, 131, + 200, 272, 343, 408, + 462, 505, 534, 549, + 551, 541, 523, 499, + 473, 447, 425, 408, + 399, 398, 407, 423, + 446, 474, 505, 535, + 563, 587, 604, 612, + 612, 604, 587, 563, + 535, 505, 474, 446, + 423, 407, 398, 399, + 408, 425, 447, 473, + 499, 523, 541, 551, + 549, 534, 505, 462, + 408, 343, 272, 200, + 131, 72, 27, 2, + 2, 30, 89, 177, + 295, 438, 600, 775, + 954, 1126, 1281, 1407, + 1494, 1531, 1510, 1425, + 1270, 1046, 753, 396, + -17, -476, -968, -1478, + -1990, -2487, -2952, -3368, + -3720, -3997, -4187, -4284, + -4284, -4187, -3997, -3720, + -3368, -2952, -2487, -1990, + -1478, -968, -476, -17, + 396, 753, 1046, 1270, + 1425, 1510, 1531, 1494, + 1407, 1281, 1126, 954, + 775, 600, 438, 295, + 177, 89, 30, 2, + 2, 27, 72, 131, + 200, 272, 343, 408, + 462, 505, 534, 549, + 551, 541, 523, 499, + 473, 447, 425, 408, + 399, 398, 407, 423, + 446, 474, 505, 535, + 563, 587, 604, 612, + 612, 604, 587, 563, + 535, 505, 474, 446, + 423, 407, 398, 399, + 408, 425, 447, 473, + 499, 523, 541, 551, + 549, 534, 505, 462, + 408, 343, 272, 200, + 131, 72, 27, 2, + 2, 30, 89, 177, + 295, 438, 600, 775, + 954, 1126, 1281, 1407, + 1494, 1531, 1510, 1425, + 1270, 1046, 753, 396, + -17, -476, -968, -1478, + -1990, -2487, -2952, -3368, + -3720, -3997, -4187, -4284, + -4143, -4494, -4741, -4869, + -4869, -4741, -4494, -4143, + -3711, -3226, -2714, -2203, + -1718, -1278, -898, -584, + -339, -158, -35, 42, + 84, 102, 106, 104, + 100, 99, 101, 108, + 118, 131, 146, 162, + 178, 193, 206, 214, + 214, 202, 174, 127, + 57, -35, -148, -275, + -408, -536, -645, -720, + -747, -715, -614, -440, + -196, 114, 478, 881, + 1305, 1732, 2145, 2528, + 2869, 3163, 3404, 3594, + 3737, 3837, 3900, 3930, + 3930, 3900, 3837, 3737, + 3594, 3404, 3163, 2869, + 2528, 2145, 1732, 1305, + 881, 478, 114, -196, + -440, -614, -715, -747, + -720, -645, -536, -408, + -275, -148, -35, 57, + 127, 174, 202, 214, + 214, 206, 193, 178, + 162, 146, 131, 118, + 108, 101, 99, 100, + 104, 106, 102, 84, + 42, -35, -158, -339, + -584, -898, -1278, -1718, + -2203, -2714, -3226, -3711, + -4143, -4494, -4741, -4869, + -4869, -4741, -4494, -4143, + -3711, -3226, -2714, -2203, + -1718, -1278, -898, -584, + -339, -158, -35, 42, + 84, 102, 106, 104, + 100, 99, 101, 108, + 118, 131, 146, 162, + 178, 193, 206, 214, + 214, 202, 174, 127, + 57, -35, -148, -275, + -408, -536, -645, -720, + -747, -715, -614, -440, + -196, 114, 478, 881, + 1305, 1732, 2145, 2528, + 2869, 3163, 3404, 3594, + 3737, 3837, 3900, 3930, + 3930, 3900, 3837, 3737, + 3594, 3404, 3163, 2869, + 2528, 2145, 1732, 1305, + 881, 478, 114, -196, + -440, -614, -715, -747, + -720, -645, -536, -408, + -275, -148, -35, 57, + 127, 174, 202, 214, + 214, 206, 193, 178, + 162, 146, 131, 118, + 108, 101, 99, 100, + 104, 106, 102, 84, + 42, -35, -158, -339, + -584, -898, -1278, -1718, + -2203, -2714, -3226, -3711, + -4143, -4494, -4741, -4869, + -25224, -25391, -25558, -25691, + -25691, -25558, -25391, -25224, + -25030, -24812, -24589, -24348, + -24088, -23820, -23540, -23244, + -22939, -22626, -22298, -21962, + -21619, -21263, -20900, -20530, + -20151, -19763, -19371, -18970, + -18562, -18148, -17729, -17302, + -16870, -16434, -15990, -15543, + -15092, -14634, -14173, -13708, + -13239, -12765, -12290, -11810, + -11326, -10840, -10352, -9860, + -9366, -8870, -8371, -7871, + -7369, -6865, -6359, -5853, + -5345, -4836, -4327, -3817, + -3306, -2795, -2284, -1772, + -1261, -750, -239, 271, + 780, 1290, 1797, 2303, + 2809, 3313, 3814, 4315, + 4814, 5309, 5804, 6296, + 6785, 7271, 7755, 8236, + 8713, 9188, 9658, 10125, + 10588, 11048, 11502, 11953, + 12399, 12840, 13277, 13708, + 14134, 14555, 14970, 15379, + 15781, 16178, 16568, 16951, + 17328, 17697, 18058, 18412, + 18758, 19095, 19425, 19745, + 20056, 20358, 20650, 20931, + 21202, 21463, 21711, 21948, + 22173, 22385, 22583, 22768, + 22938, 23092, 23231, 23352, + 23453, 23535, 23595, 23629, + 23629, 23595, 23535, 23453, + 23352, 23231, 23092, 22938, + 22768, 22583, 22385, 22173, + 21948, 21711, 21463, 21202, + 20931, 20650, 20358, 20056, + 19745, 19425, 19095, 18758, + 18412, 18058, 17697, 17328, + 16951, 16568, 16178, 15781, + 15379, 14970, 14555, 14134, + 13708, 13277, 12840, 12399, + 11953, 11502, 11048, 10588, + 10125, 9658, 9188, 8713, + 8236, 7755, 7271, 6785, + 6296, 5804, 5309, 4814, + 4315, 3814, 3313, 2809, + 2303, 1797, 1290, 780, + 271, -239, -750, -1261, + -1772, -2284, -2795, -3306, + -3817, -4327, -4836, -5345, + -5853, -6359, -6865, -7369, + -7871, -8371, -8870, -9366, + -9860, -10352, -10840, -11326, + -11810, -12290, -12765, -13239, + -13708, -14173, -14634, -15092, + -15543, -15990, -16434, -16870, + -17302, -17729, -18148, -18562, + -18970, -19371, -19763, -20151, + -20530, -20900, -21263, -21619, + -21962, -22298, -22626, -22939, + -23244, -23540, -23820, -24088, + -24348, -24589, -24812, -25030, + -25224, -25391, -25558, -25691, + -13816, -13892, -13957, -14012, + -14050, -13802, -13604, -13363, + -13134, -12884, -12636, -12376, + -12113, -11844, -11568, -11291, + -11006, -10722, -10428, -10137, + -9836, -9539, -9233, -8930, + -8619, -8311, -7997, -7684, + -7368, -7051, -6732, -6412, + -6092, -5769, -5448, -5124, + -4801, -4476, -4153, -3827, + -3503, -3177, -2854, -2529, + -2206, -1882, -1560, -1238, + -917, -597, -277, 41, + 358, 673, 988, 1300, + 1612, 1921, 2230, 2535, + 2840, 3141, 3442, 3739, + 4035, 4328, 4619, 4907, + 5192, 5476, 5755, 6033, + 6306, 6578, 6845, 7111, + 7371, 7630, 7884, 8135, + 8382, 8625, 8864, 9100, + 9331, 9558, 9782, 10000, + 10215, 10424, 10629, 10829, + 11025, 11214, 11401, 11580, + 11756, 11924, 12089, 12247, + 12400, 12546, 12687, 12822, + 12949, 13072, 13186, 13296, + 13397, 13492, 13579, 13660, + 13732, 13798, 13854, 13904, + 13944, 13976, 14000, 14014, + 14019, 14014, 14000, 13974, + 13939, 13891, 13834, 13762, + 13679, 13580, 13468, 13338, + 13187, 13012, 12822, 12616, + 12396, 12164, 11918, 11662, + 11393, 11116, 10825, 10528, + 10218, 9902, 9573, 9239, + 8893, 8542, 8180, 7812, + 7435, 7052, 6660, 6262, + 5857, 5443, 5026, 4599, + 4170, 3728, 3288, 2833, + 2381, 1915, 1452, 974, + 500, 12, -473, -970, + -1468, -1970, -2482, -2631, + -2664, -2748, -2804, -2890, + -2959, -3049, -3130, -3225, + -3315, -3417, -3516, -3622, + -3730, -3842, -3958, -4075, + -4198, -4320, -4449, -4577, + -4712, -4845, -4985, -5123, + -5268, -5411, -5560, -5708, + -5860, -6013, -6168, -6325, + -6483, -6644, -6804, -6968, + -7131, -7298, -7463, -7632, + -7799, -7969, -8138, -8309, + -8479, -8651, -8822, -8994, + -9166, -9338, -9510, -9680, + -9852, -10021, -10192, -10360, + -10529, -10695, -10862, -11025, + -11189, -11349, -11509, -11666, + -11822, -11975, -12125, -12273, + -12417, -12559, -12696, -12831, + -12961, -13087, -13208, -13325, + -13435, -13541, -13639, -13732, + -13816, -13892, -13957, -14012, + -25128, -25554, -25909, -26345, + -26345, -25909, -25554, -25128, + -24731, -24292, -23869, -23417, + -22976, -22511, -22055, -21579, + -21111, -20627, -20149, -19657, + -19171, -18673, -18181, -17678, + -17180, -16674, -16172, -15662, + -15158, -14647, -14140, -13628, + -13120, -12608, -12100, -11589, + -11082, -10572, -10066, -9559, + -9055, -8550, -8050, -7549, + -7052, -6555, -6062, -5570, + -5082, -4596, -4114, -3633, + -3157, -2683, -2213, -1746, + -1284, -825, -371, 80, + 526, 968, 1405, 1838, + 2265, 2688, 3105, 3518, + 3925, 4326, 4722, 5112, + 5496, 5874, 6246, 6611, + 6970, 7322, 7668, 8006, + 8339, 8663, 8981, 9290, + 9593, 9887, 10174, 10452, + 10724, 10985, 11240, 11484, + 11721, 11947, 12167, 12375, + 12576, 12764, 12946, 13114, + 13276, 13424, 13565, 13691, + 13811, 13915, 14012, 14093, + 14167, 14224, 14273, 14305, + 14330, 14335, 14333, 14311, + 14282, 14230, 14173, 14091, + 14003, 13888, 13769, 13619, + 13467, 13278, 13092, 12859, + 12637, 12352, 12099, 11723, + 11723, 12099, 12352, 12637, + 12859, 13092, 13278, 13467, + 13619, 13769, 13888, 14003, + 14091, 14173, 14230, 14282, + 14311, 14333, 14335, 14330, + 14305, 14273, 14224, 14167, + 14093, 14012, 13915, 13811, + 13691, 13565, 13424, 13276, + 13114, 12946, 12764, 12576, + 12375, 12167, 11947, 11721, + 11484, 11240, 10985, 10724, + 10452, 10174, 9887, 9593, + 9290, 8981, 8663, 8339, + 8006, 7668, 7322, 6970, + 6611, 6246, 5874, 5496, + 5112, 4722, 4326, 3925, + 3518, 3105, 2688, 2265, + 1838, 1405, 968, 526, + 80, -371, -825, -1284, + -1746, -2213, -2683, -3157, + -3633, -4114, -4596, -5082, + -5570, -6062, -6555, -7052, + -7549, -8050, -8550, -9055, + -9559, -10066, -10572, -11082, + -11589, -12100, -12608, -13120, + -13628, -14140, -14647, -15158, + -15662, -16172, -16674, -17180, + -17678, -18181, -18673, -19171, + -19657, -20149, -20627, -21111, + -21579, -22055, -22511, -22976, + -23417, -23869, -24292, -24731, + -25128, -25554, -25909, -26345, + -15827, -16119, -16363, -16665, + -16665, -16363, -16119, -15827, + -15557, -15260, -14977, -14674, + -14381, -14073, -13774, -13463, + -13159, -12845, -12538, -12223, + -11915, -11599, -11289, -10974, + -10665, -10351, -10043, -9730, + -9424, -9114, -8810, -8504, + -8203, -7900, -7603, -7304, + -7012, -6718, -6430, -6142, + -5859, -5576, -5300, -5023, + -4753, -4484, -4220, -3958, + -3702, -3447, -3198, -2951, + -2711, -2472, -2241, -2011, + -1788, -1567, -1354, -1142, + -939, -737, -544, -353, + -170, 11, 183, 352, + 513, 671, 820, 967, + 1104, 1238, 1362, 1485, + 1596, 1706, 1804, 1900, + 1984, 2068, 2137, 2208, + 2261, 2319, 2355, 2404, + 2410, 2522, 3034, 3518, + 4009, 4481, 4953, 5410, + 5864, 6305, 6741, 7165, + 7583, 7988, 8388, 8775, + 9155, 9523, 9883, 10232, + 10572, 10900, 11219, 11526, + 11824, 12109, 12384, 12646, + 12898, 13137, 13364, 13578, + 13780, 13968, 14143, 14304, + 14451, 14583, 14700, 14800, + 14884, 14951, 14998, 15024, + 15024, 14998, 14951, 14884, + 14800, 14700, 14583, 14451, + 14304, 14143, 13968, 13780, + 13578, 13364, 13137, 12898, + 12646, 12384, 12109, 11824, + 11526, 11219, 10900, 10572, + 10232, 9883, 9523, 9155, + 8775, 8388, 7988, 7583, + 7165, 6741, 6305, 5864, + 5410, 4953, 4481, 4009, + 3518, 3034, 2522, 2410, + 2404, 2355, 2319, 2261, + 2208, 2137, 2068, 1984, + 1900, 1804, 1706, 1596, + 1485, 1362, 1238, 1104, + 967, 820, 671, 513, + 352, 183, 11, -170, + -353, -544, -737, -939, + -1142, -1354, -1567, -1788, + -2011, -2241, -2472, -2711, + -2951, -3198, -3447, -3702, + -3958, -4220, -4484, -4753, + -5023, -5300, -5576, -5859, + -6142, -6430, -6718, -7012, + -7304, -7603, -7900, -8203, + -8504, -8810, -9114, -9424, + -9730, -10043, -10351, -10665, + -10974, -11289, -11599, -11915, + -12223, -12538, -12845, -13159, + -13463, -13774, -14073, -14381, + -14674, -14977, -15260, -15557, + -15827, -16119, -16363, -16665, + -13598, -13858, -14077, -14350, + -14350, -14077, -13858, -13598, + -13360, -13099, -12852, -12589, + -12337, -12073, -11818, -11555, + -11299, -11038, -10782, -10523, + -10269, -10013, -9762, -9510, + -9262, -9014, -8771, -8529, + -8291, -8054, -7821, -7591, + -7365, -7141, -6922, -6706, + -6494, -6286, -6081, -5882, + -5685, -5495, -5307, -5126, + -4947, -4775, -4606, -4445, + -4286, -4135, -3986, -3846, + -3707, -3579, -3451, -3334, + -3217, -3113, -3007, -2917, + -2822, -2745, -2661, -2599, + -2525, -2482, -2410, -2406, + -2148, -1636, -1192, -719, + -279, 173, 603, 1038, + 1454, 1872, 2274, 2676, + 3062, 3448, 3819, 4188, + 4543, 4894, 5234, 5568, + 5890, 6206, 6511, 6810, + 7097, 7377, 7646, 7907, + 8158, 8399, 8631, 8853, + 9065, 9267, 9459, 9641, + 9812, 9973, 10123, 10262, + 10391, 10507, 10614, 10707, + 10792, 10861, 10922, 10967, + 11004, 11023, 11035, 11028, + 11014, 10979, 10938, 10874, + 10805, 10710, 10612, 10482, + 10355, 10184, 10031, 9796, + 9796, 10031, 10184, 10355, + 10482, 10612, 10710, 10805, + 10874, 10938, 10979, 11014, + 11028, 11035, 11023, 11004, + 10967, 10922, 10861, 10792, + 10707, 10614, 10507, 10391, + 10262, 10123, 9973, 9812, + 9641, 9459, 9267, 9065, + 8853, 8631, 8399, 8158, + 7907, 7646, 7377, 7097, + 6810, 6511, 6206, 5890, + 5568, 5234, 4894, 4543, + 4188, 3819, 3448, 3062, + 2676, 2274, 1872, 1454, + 1038, 603, 173, -279, + -719, -1192, -1636, -2148, + -2406, -2410, -2482, -2525, + -2599, -2661, -2745, -2822, + -2917, -3007, -3113, -3217, + -3334, -3451, -3579, -3707, + -3846, -3986, -4135, -4286, + -4445, -4606, -4775, -4947, + -5126, -5307, -5495, -5685, + -5882, -6081, -6286, -6494, + -6706, -6922, -7141, -7365, + -7591, -7821, -8054, -8291, + -8529, -8771, -9014, -9262, + -9510, -9762, -10013, -10269, + -10523, -10782, -11038, -11299, + -11555, -11818, -12073, -12337, + -12589, -12852, -13099, -13360, + -13598, -13858, -14077, -14350, + -12912, -12947, -12977, -13001, + -13013, -12744, -12532, -12277, + -12047, -11793, -11555, -11301, + -11060, -10807, -10564, -10314, + -10072, -9824, -9586, -9342, + -9107, -8868, -8638, -8404, + -8180, -7953, -7735, -7515, + -7304, -7091, -6888, -6684, + -6489, -6294, -6108, -5922, + -5746, -5569, -5403, -5237, + -5082, -4926, -4782, -4638, + -4505, -4372, -4251, -4130, + -4022, -3913, -3818, -3721, + -3640, -3555, -3489, -3416, + -3366, -3303, -3273, -3215, + -3223, -2920, -2408, -1963, + -1490, -1050, -599, -171, + 262, 675, 1091, 1489, + 1887, 2268, 2649, 3014, + 3376, 3724, 4069, 4399, + 4726, 5038, 5346, 5639, + 5928, 6203, 6472, 6728, + 6978, 7213, 7443, 7659, + 7868, 8063, 8252, 8426, + 8593, 8745, 8891, 9021, + 9145, 9253, 9354, 9438, + 9517, 9578, 9633, 9669, + 9700, 9711, 9718, 9702, + 9685, 9641, 9600, 9526, + 9465, 9346, 9569, 9940, + 10247, 10567, 10852, 11137, + 11393, 11644, 11867, 12082, + 12270, 12446, 12595, 12728, + 12827, 12904, 12955, 12988, + 12999, 12995, 12969, 12930, + 12871, 12799, 12708, 12605, + 12484, 12351, 12201, 12039, + 11861, 11671, 11465, 11249, + 11017, 10775, 10517, 10250, + 9966, 9675, 9367, 9051, + 8720, 8381, 8026, 7664, + 7286, 6902, 6501, 6096, + 5673, 5247, 4802, 4357, + 3888, 3426, 2933, 2814, + 2793, 2728, 2673, 2594, + 2517, 2422, 2324, 2211, + 2094, 1963, 1828, 1680, + 1526, 1361, 1190, 1007, + 819, 620, 415, 200, + -22, -253, -491, -738, + -991, -1253, -1522, -1799, + -2082, -2375, -2672, -2979, + -3291, -3612, -3937, -4271, + -4611, -4958, -5310, -5670, + -6035, -6408, -6785, -7170, + -7559, -7955, -8355, -8763, + -9174, -9593, -10014, -10443, + -10875, -11314, -11756, -12189, + -12228, -12214, -12221, -12223, + -12234, -12246, -12263, -12282, + -12306, -12331, -12361, -12392, + -12426, -12461, -12500, -12539, + -12580, -12622, -12665, -12708, + -12751, -12793, -12835, -12875, + -12912, -12947, -12977, -13001, + -13569, -13832, -14054, -14334, + -14334, -14054, -13832, -13569, + -13330, -13069, -12825, -12565, + -12320, -12063, -11818, -11565, + -11323, -11075, -10837, -10595, + -10363, -10127, -9902, -9673, + -9455, -9235, -9025, -8814, + -8612, -8411, -8219, -8027, + -7846, -7664, -7494, -7323, + -7164, -7005, -6858, -6711, + -6576, -6441, -6319, -6197, + -6089, -5980, -5886, -5789, + -5711, -5627, -5565, -5492, + -5450, -5384, -5377, -5205, + -4693, -4237, -3759, -3311, + -2854, -2419, -1981, -1561, + -1141, -737, -336, 51, + 435, 804, 1169, 1521, + 1867, 2200, 2528, 2842, + 3151, 3446, 3735, 4010, + 4280, 4535, 4784, 5019, + 5248, 5462, 5669, 5863, + 6049, 6221, 6385, 6535, + 6678, 6805, 6925, 7029, + 7127, 7208, 7282, 7339, + 7390, 7421, 7449, 7454, + 7461, 7431, 7465, 7879, + 8280, 8673, 9048, 9414, + 9762, 10099, 10420, 10728, + 11020, 11299, 11561, 11809, + 12040, 12257, 12456, 12640, + 12806, 12955, 13086, 13198, + 13291, 13364, 13416, 13444, + 13444, 13416, 13364, 13291, + 13198, 13086, 12955, 12806, + 12640, 12456, 12257, 12040, + 11809, 11561, 11299, 11020, + 10728, 10420, 10099, 9762, + 9414, 9048, 8673, 8280, + 7879, 7465, 7431, 7461, + 7454, 7449, 7421, 7390, + 7339, 7282, 7208, 7127, + 7029, 6925, 6805, 6678, + 6535, 6385, 6221, 6049, + 5863, 5669, 5462, 5248, + 5019, 4784, 4535, 4280, + 4010, 3735, 3446, 3151, + 2842, 2528, 2200, 1867, + 1521, 1169, 804, 435, + 51, -336, -737, -1141, + -1561, -1981, -2419, -2854, + -3311, -3759, -4237, -4693, + -5205, -5377, -5384, -5450, + -5492, -5565, -5627, -5711, + -5789, -5886, -5980, -6089, + -6197, -6319, -6441, -6576, + -6711, -6858, -7005, -7164, + -7323, -7494, -7664, -7846, + -8027, -8219, -8411, -8612, + -8814, -9025, -9235, -9455, + -9673, -9902, -10127, -10363, + -10595, -10837, -11075, -11323, + -11565, -11818, -12063, -12320, + -12565, -12825, -13069, -13330, + -13569, -13832, -14054, -14334, + -12634, -12876, -13084, -13353, + -13353, -13084, -12876, -12634, + -12420, -12191, -11982, -11765, + -11564, -11361, -11172, -10983, + -10807, -10634, -10472, -10316, + -10169, -10030, -9899, -9780, + -9666, -9565, -9469, -9389, + -9311, -9252, -9191, -9156, + -9112, -9103, -9069, -9108, + -8893, -8424, -8028, -7608, + -7224, -6832, -6467, -6101, + -5758, -5417, -5096, -4781, + -4483, -4194, -3919, -3655, + -3405, -3168, -2942, -2731, + -2529, -2345, -2169, -2013, + -1862, -1734, -1607, -1509, + -1406, -1341, -1255, -1243, + -982, -470, -33, 425, + 843, 1266, 1660, 2051, + 2418, 2778, 3116, 3445, + 3755, 4053, 4333, 4599, + 4850, 5085, 5305, 5507, + 5697, 5867, 6026, 6163, + 6291, 6393, 6491, 6558, + 6627, 6654, 6700, 6668, + 6883, 7345, 7728, 8130, + 8490, 8850, 9178, 9500, + 9794, 10078, 10336, 10582, + 10804, 11011, 11196, 11363, + 11510, 11637, 11745, 11831, + 11899, 11943, 11970, 11969, + 11955, 11908, 11850, 11754, + 11653, 11501, 11359, 11128, + 11128, 11359, 11501, 11653, + 11754, 11850, 11908, 11955, + 11969, 11970, 11943, 11899, + 11831, 11745, 11637, 11510, + 11363, 11196, 11011, 10804, + 10582, 10336, 10078, 9794, + 9500, 9178, 8850, 8490, + 8130, 7728, 7345, 6883, + 6668, 6700, 6654, 6627, + 6558, 6491, 6393, 6291, + 6163, 6026, 5867, 5697, + 5507, 5305, 5085, 4850, + 4599, 4333, 4053, 3755, + 3445, 3116, 2778, 2418, + 2051, 1660, 1266, 843, + 425, -33, -470, -982, + -1243, -1255, -1341, -1406, + -1509, -1607, -1734, -1862, + -2013, -2169, -2345, -2529, + -2731, -2942, -3168, -3405, + -3655, -3919, -4194, -4483, + -4781, -5096, -5417, -5758, + -6101, -6467, -6832, -7224, + -7608, -8028, -8424, -8893, + -9108, -9069, -9103, -9112, + -9156, -9191, -9252, -9311, + -9389, -9469, -9565, -9666, + -9780, -9899, -10030, -10169, + -10316, -10472, -10634, -10807, + -10983, -11172, -11361, -11564, + -11765, -11982, -12191, -12420, + -12634, -12876, -13084, -13353, + -23573, -23992, -24504, -24963, + -24963, -24504, -23992, -23573, + -23115, -22626, -22179, -21722, + -21239, -20780, -20324, -19845, + -19381, -18925, -18451, -17984, + -17529, -17061, -16594, -16140, + -15677, -15212, -14760, -14303, + -13842, -13391, -12941, -12485, + -12037, -11593, -11143, -10699, + -10261, -9817, -9378, -8946, + -8510, -8076, -7650, -7223, + -6795, -6375, -5957, -5536, + -5123, -4713, -4300, -3894, + -3493, -3089, -2690, -2298, + -1904, -1513, -1129, -745, + -363, 12, 385, 758, + 1124, 1487, 1850, 2206, + 2558, 2910, 3257, 3597, + 3939, 4275, 4605, 4934, + 5260, 5578, 5895, 6209, + 6516, 6820, 7123, 7418, + 7709, 7999, 8283, 8560, + 8837, 9108, 9372, 9635, + 9894, 10144, 10393, 10637, + 10874, 11107, 11338, 11560, + 11778, 11994, 12202, 12404, + 12604, 12796, 12982, 13166, + 13343, 13512, 13678, 13838, + 13990, 14138, 14281, 14415, + 14543, 14668, 14783, 14892, + 14996, 15092, 15179, 15263, + 15337, 15402, 15462, 15513, + 15553, 15587, 15612, 15623, + 15623, 15612, 15587, 15553, + 15513, 15462, 15402, 15337, + 15263, 15179, 15092, 14996, + 14892, 14783, 14668, 14543, + 14415, 14281, 14138, 13990, + 13838, 13678, 13512, 13343, + 13166, 12982, 12796, 12604, + 12404, 12202, 11994, 11778, + 11560, 11338, 11107, 10874, + 10637, 10393, 10144, 9894, + 9635, 9372, 9108, 8837, + 8560, 8283, 7999, 7709, + 7418, 7123, 6820, 6516, + 6209, 5895, 5578, 5260, + 4934, 4605, 4275, 3939, + 3597, 3257, 2910, 2558, + 2206, 1850, 1487, 1124, + 758, 385, 12, -363, + -745, -1129, -1513, -1904, + -2298, -2690, -3089, -3493, + -3894, -4300, -4713, -5123, + -5536, -5957, -6375, -6795, + -7223, -7650, -8076, -8510, + -8946, -9378, -9817, -10261, + -10699, -11143, -11593, -12037, + -12485, -12941, -13391, -13842, + -14303, -14760, -15212, -15677, + -16140, -16594, -17061, -17529, + -17984, -18451, -18925, -19381, + -19845, -20324, -20780, -21239, + -21722, -22179, -22626, -23115, + -23573, -23992, -24504, -24963, + -12500, -12788, -13172, -13549, + -13641, -13370, -13039, -12757, + -12430, -12065, -11717, -11349, + -10950, -10557, -10156, -9729, + -9303, -8874, -8425, -7973, + -7522, -7055, -6583, -6114, + -5633, -5145, -4661, -4170, + -3671, -3176, -2677, -2170, + -1667, -1163, -652, -143, + 363, 875, 1386, 1892, + 2403, 2913, 3417, 3923, + 4430, 4930, 5430, 5930, + 6423, 6914, 7405, 7889, + 8369, 8848, 9320, 9786, + 10250, 10709, 11159, 11605, + 12047, 12478, 12904, 13325, + 13736, 14139, 14536, 14923, + 15299, 15670, 16029, 16376, + 16715, 17042, 17356, 17660, + 17952, 18228, 18491, 18741, + 18974, 19191, 19392, 19574, + 19736, 19879, 19999, 20092, + 20160, 20191, 20177, 20133, + 20062, 19965, 19848, 19711, + 19553, 19379, 19189, 18981, + 18759, 18524, 18273, 18009, + 17734, 17447, 17147, 16838, + 16518, 16186, 15846, 15498, + 15138, 14772, 14398, 14015, + 13624, 13229, 12824, 12413, + 11998, 11576, 11147, 10715, + 10278, 9834, 9388, 8938, + 8482, 8025, 7565, 7099, + 6632, 6164, 5692, 5219, + 4745, 4269, 3791, 3315, + 2837, 2357, 1881, 1403, + 925, 451, -23, -497, + -967, -1434, -1900, -2362, + -2820, -3276, -3727, -4172, + -4614, -5050, -5479, -5902, + -6320, -6728, -7128, -7522, + -7905, -8276, -8640, -8990, + -9327, -9652, -9961, -10251, + -10524, -10776, -10999, -11184, + -11340, -11471, -11582, -11678, + -11755, -11819, -11872, -11910, + -11937, -11956, -11965, -11962, + -11954, -11939, -11913, -11884, + -11849, -11805, -11758, -11708, + -11650, -11589, -11528, -11460, + -11389, -11319, -11244, -11166, + -11090, -11012, -10930, -10851, + -10771, -10689, -10609, -10531, + -10450, -10372, -10298, -10222, + -10149, -10081, -10013, -9946, + -9887, -9829, -9771, -9723, + -9677, -9632, -9597, -9567, + -9537, -9517, -9505, -9494, + -9491, -9500, -9510, -9528, + -9560, -9596, -9637, -9695, + -9760, -9828, -9915, -10013, + -10113, -10232, -10368, -10504, + -10660, -10839, -11018, -11214, + -11444, -11673, -11915, -12207, + -12500, -12788, -13172, -13549, + -17282, -17604, -17961, -18265, + -18265, -17961, -17604, -17282, + -16920, -16525, -16141, -15738, + -15309, -14883, -14450, -13994, + -13539, -13081, -12606, -12128, + -11651, -11162, -10668, -10178, + -9678, -9174, -8674, -8169, + -7658, -7153, -6646, -6134, + -5626, -5120, -4611, -4105, + -3604, -3101, -2601, -2108, + -1615, -1125, -644, -164, + 312, 779, 1241, 1699, + 2147, 2587, 3022, 3447, + 3862, 4270, 4667, 5051, + 5426, 5788, 6136, 6471, + 6792, 7095, 7382, 7653, + 7900, 8126, 8329, 8501, + 8631, 8723, 8785, 8819, + 8835, 8829, 8803, 8762, + 8706, 8632, 8547, 8449, + 8336, 8213, 8081, 7936, + 7782, 7621, 7450, 7270, + 7085, 6892, 6691, 6486, + 6276, 6058, 5837, 5612, + 5382, 5149, 4915, 4675, + 4434, 4192, 3948, 3702, + 3457, 3211, 2965, 2720, + 2476, 2233, 1992, 1755, + 1518, 1286, 1059, 834, + 615, 402, 194, -7, + -200, -385, -563, -728, + -884, -1029, -1160, -1276, + -1378, -1461, -1521, -1560, + -1560, -1521, -1461, -1378, + -1276, -1160, -1029, -884, + -728, -563, -385, -200, + -7, 194, 402, 615, + 834, 1059, 1286, 1518, + 1755, 1992, 2233, 2476, + 2720, 2965, 3211, 3457, + 3702, 3948, 4192, 4434, + 4675, 4915, 5149, 5382, + 5612, 5837, 6058, 6276, + 6486, 6691, 6892, 7085, + 7270, 7450, 7621, 7782, + 7936, 8081, 8213, 8336, + 8449, 8547, 8632, 8706, + 8762, 8803, 8829, 8835, + 8819, 8785, 8723, 8631, + 8501, 8329, 8126, 7900, + 7653, 7382, 7095, 6792, + 6471, 6136, 5788, 5426, + 5051, 4667, 4270, 3862, + 3447, 3022, 2587, 2147, + 1699, 1241, 779, 312, + -164, -644, -1125, -1615, + -2108, -2601, -3101, -3604, + -4105, -4611, -5120, -5626, + -6134, -6646, -7153, -7658, + -8169, -8674, -9174, -9678, + -10178, -10668, -11162, -11651, + -12128, -12606, -13081, -13539, + -13994, -14450, -14883, -15309, + -15738, -16141, -16525, -16920, + -17282, -17604, -17961, -18265, + -14325, -14664, -15031, -15339, + -15339, -15031, -14664, -14325, + -13942, -13522, -13111, -12679, + -12220, -11764, -11299, -10813, + -10327, -9840, -9337, -8833, + -8333, -7822, -7310, -6804, + -6294, -5782, -5279, -4776, + -4273, -3781, -3294, -2808, + -2335, -1871, -1412, -966, + -534, -112, 296, 684, + 1057, 1412, 1742, 2050, + 2332, 2578, 2785, 2936, + 3037, 3105, 3147, 3161, + 3152, 3125, 3079, 3015, + 2939, 2848, 2743, 2629, + 2506, 2372, 2230, 2083, + 1928, 1768, 1606, 1439, + 1269, 1099, 928, 756, + 586, 419, 252, 92, + -63, -215, -358, -491, + -617, -732, -832, -920, + -993, -1044, -1076, -1083, + -1059, -994, -874, -717, + -532, -324, -95, 152, + 412, 688, 976, 1273, + 1579, 1895, 2217, 2543, + 2876, 3211, 3548, 3889, + 4230, 4570, 4910, 5248, + 5582, 5914, 6242, 6562, + 6877, 7186, 7486, 7776, + 8057, 8325, 8580, 8823, + 9050, 9259, 9450, 9621, + 9766, 9887, 9977, 10030, + 10030, 9977, 9887, 9766, + 9621, 9450, 9259, 9050, + 8823, 8580, 8325, 8057, + 7776, 7486, 7186, 6877, + 6562, 6242, 5914, 5582, + 5248, 4910, 4570, 4230, + 3889, 3548, 3211, 2876, + 2543, 2217, 1895, 1579, + 1273, 976, 688, 412, + 152, -95, -324, -532, + -717, -874, -994, -1059, + -1083, -1076, -1044, -993, + -920, -832, -732, -617, + -491, -358, -215, -63, + 92, 252, 419, 586, + 756, 928, 1099, 1269, + 1439, 1606, 1768, 1928, + 2083, 2230, 2372, 2506, + 2629, 2743, 2848, 2939, + 3015, 3079, 3125, 3152, + 3161, 3147, 3105, 3037, + 2936, 2785, 2578, 2332, + 2050, 1742, 1412, 1057, + 684, 296, -112, -534, + -966, -1412, -1871, -2335, + -2808, -3294, -3781, -4273, + -4776, -5279, -5782, -6294, + -6804, -7310, -7822, -8333, + -8833, -9337, -9840, -10327, + -10813, -11299, -11764, -12220, + -12679, -13111, -13522, -13942, + -14325, -14664, -15031, -15339, + -12818, -13174, -13552, -13866, + -13866, -13552, -13174, -12818, + -12417, -11977, -11544, -11090, + -10610, -10132, -9647, -9143, + -8642, -8141, -7629, -7120, + -6618, -6111, -5609, -5119, + -4632, -4151, -3687, -3233, + -2791, -2369, -1967, -1582, + -1227, -901, -606, -354, + -170, -48, 33, 75, + 92, 84, 51, 0, + -65, -149, -244, -347, + -462, -585, -711, -843, + -979, -1113, -1248, -1383, + -1511, -1635, -1754, -1863, + -1960, -2047, -2117, -2168, + -2200, -2207, -2180, -2117, + -1994, -1807, -1585, -1332, + -1052, -751, -434, -99, + 248, 604, 970, 1344, + 1721, 2103, 2487, 2871, + 3252, 3634, 4009, 4378, + 4741, 5095, 5437, 5768, + 6084, 6382, 6661, 6920, + 7152, 7356, 7525, 7651, + 7713, 7711, 7666, 7586, + 7479, 7345, 7188, 7014, + 6823, 6616, 6398, 6169, + 5930, 5684, 5434, 5177, + 4918, 4659, 4400, 4142, + 3889, 3640, 3397, 3165, + 2943, 2732, 2538, 2362, + 2206, 2076, 1979, 1916, + 1916, 1979, 2076, 2206, + 2362, 2538, 2732, 2943, + 3165, 3397, 3640, 3889, + 4142, 4400, 4659, 4918, + 5177, 5434, 5684, 5930, + 6169, 6398, 6616, 6823, + 7014, 7188, 7345, 7479, + 7586, 7666, 7711, 7713, + 7651, 7525, 7356, 7152, + 6920, 6661, 6382, 6084, + 5768, 5437, 5095, 4741, + 4378, 4009, 3634, 3252, + 2871, 2487, 2103, 1721, + 1344, 970, 604, 248, + -99, -434, -751, -1052, + -1332, -1585, -1807, -1994, + -2117, -2180, -2207, -2200, + -2168, -2117, -2047, -1960, + -1863, -1754, -1635, -1511, + -1383, -1248, -1113, -979, + -843, -711, -585, -462, + -347, -244, -149, -65, + 0, 51, 84, 92, + 75, 33, -48, -170, + -354, -606, -901, -1227, + -1582, -1967, -2369, -2791, + -3233, -3687, -4151, -4632, + -5119, -5609, -6111, -6618, + -7120, -7629, -8141, -8642, + -9143, -9647, -10132, -10610, + -11090, -11544, -11977, -12417, + -12818, -13174, -13552, -13866, + -10401, -10502, -10697, -10910, + -10935, -10626, -10248, -9891, + -9484, -9037, -8597, -8135, + -7646, -7160, -6669, -6158, + -5653, -5150, -4638, -4132, + -3637, -3140, -2653, -2183, + -1722, -1274, -851, -447, + -64, 284, 597, 873, + 1086, 1215, 1293, 1328, + 1325, 1298, 1245, 1167, + 1075, 968, 844, 711, + 572, 423, 271, 119, + -37, -191, -338, -481, + -618, -741, -852, -948, + -1023, -1074, -1100, -1087, + -1031, -904, -709, -473, + -204, 91, 411, 747, + 1100, 1466, 1842, 2223, + 2613, 3005, 3397, 3790, + 4180, 4563, 4942, 5311, + 5668, 6012, 6341, 6649, + 6936, 7198, 7430, 7624, + 7778, 7868, 7875, 7832, + 7748, 7628, 7481, 7311, + 7118, 6908, 6683, 6445, + 6196, 5940, 5677, 5409, + 5140, 4871, 4603, 4340, + 4083, 3833, 3596, 3372, + 3163, 2975, 2812, 2676, + 2577, 2524, 2546, 2631, + 2756, 2914, 3096, 3303, + 3527, 3766, 4018, 4280, + 4548, 4823, 5100, 5378, + 5655, 5930, 6198, 6460, + 6713, 6954, 7181, 7393, + 7585, 7754, 7898, 8011, + 8086, 8119, 8085, 7970, + 7807, 7604, 7366, 7101, + 6814, 6504, 6176, 5836, + 5481, 5116, 4744, 4366, + 3983, 3599, 3215, 2832, + 2455, 2084, 1720, 1369, + 1032, 711, 410, 135, + -112, -323, -483, -567, + -593, -578, -532, -462, + -368, -256, -131, 7, + 155, 309, 468, 632, + 794, 956, 1116, 1269, + 1414, 1552, 1677, 1786, + 1882, 1956, 2007, 2033, + 2029, 1983, 1895, 1738, + 1501, 1218, 896, 541, + 157, -247, -674, -1119, + -1576, -2046, -2528, -3015, + -3508, -4008, -4507, -5004, + -5502, -5995, -6478, -6956, + -7422, -7870, -8305, -8720, + -9105, -9463, -9786, -10052, + -10242, -10380, -10476, -10540, + -10584, -10603, -10602, -10593, + -10570, -10532, -10494, -10452, + -10399, -10352, -10310, -10261, + -10222, -10199, -10173, -10161, + -10177, -10195, -10229, -10309, + -10401, -10502, -10697, -10910, + -11910, -12282, -12670, -12991, + -12991, -12670, -12282, -11910, + -11492, -11034, -10583, -10112, + -9616, -9124, -8628, -8116, + -7611, -7111, -6605, -6108, + -5626, -5148, -4683, -4241, + -3814, -3408, -3036, -2695, + -2392, -2148, -1989, -1886, + -1829, -1808, -1812, -1843, + -1896, -1962, -2044, -2140, + -2242, -2349, -2464, -2579, + -2691, -2804, -2910, -3005, + -3093, -3166, -3219, -3253, + -3263, -3236, -3170, -3042, + -2834, -2580, -2292, -1975, + -1633, -1275, -900, -512, + -117, 285, 693, 1101, + 1507, 1913, 2312, 2702, + 3083, 3451, 3802, 4135, + 4446, 4727, 4979, 5191, + 5351, 5431, 5444, 5411, + 5342, 5244, 5120, 4974, + 4812, 4635, 4444, 4246, + 4041, 3830, 3617, 3406, + 3195, 2991, 2795, 2607, + 2434, 2278, 2142, 2030, + 1951, 1909, 1924, 2022, + 2169, 2353, 2568, 2807, + 3064, 3338, 3626, 3922, + 4225, 4534, 4844, 5153, + 5462, 5764, 6058, 6344, + 6617, 6873, 7113, 7330, + 7520, 7681, 7803, 7878, + 7878, 7803, 7681, 7520, + 7330, 7113, 6873, 6617, + 6344, 6058, 5764, 5462, + 5153, 4844, 4534, 4225, + 3922, 3626, 3338, 3064, + 2807, 2568, 2353, 2169, + 2022, 1924, 1909, 1951, + 2030, 2142, 2278, 2434, + 2607, 2795, 2991, 3195, + 3406, 3617, 3830, 4041, + 4246, 4444, 4635, 4812, + 4974, 5120, 5244, 5342, + 5411, 5444, 5431, 5351, + 5191, 4979, 4727, 4446, + 4135, 3802, 3451, 3083, + 2702, 2312, 1913, 1507, + 1101, 693, 285, -117, + -512, -900, -1275, -1633, + -1975, -2292, -2580, -2834, + -3042, -3170, -3236, -3263, + -3253, -3219, -3166, -3093, + -3005, -2910, -2804, -2691, + -2579, -2464, -2349, -2242, + -2140, -2044, -1962, -1896, + -1843, -1812, -1808, -1829, + -1886, -1989, -2148, -2392, + -2695, -3036, -3408, -3814, + -4241, -4683, -5148, -5626, + -6108, -6605, -7111, -7611, + -8116, -8628, -9124, -9616, + -10112, -10583, -11034, -11492, + -11910, -12282, -12670, -12991, + -10544, -10955, -11376, -11718, + -11718, -11376, -10955, -10544, + -10085, -9589, -9104, -8605, + -8093, -7598, -7116, -6639, + -6194, -5785, -5412, -5099, + -4894, -4786, -4733, -4733, + -4759, -4808, -4880, -4961, + -5042, -5128, -5205, -5266, + -5308, -5325, -5295, -5215, + -5038, -4757, -4425, -4054, + -3653, -3229, -2797, -2354, + -1910, -1472, -1046, -633, + -248, 105, 415, 668, + 816, 863, 854, 797, + 711, 600, 470, 330, + 188, 43, -93, -215, + -317, -392, -423, -404, + -285, -65, 207, 519, + 860, 1223, 1597, 1980, + 2364, 2742, 3109, 3462, + 3786, 4081, 4331, 4523, + 4612, 4599, 4530, 4413, + 4268, 4096, 3907, 3708, + 3505, 3300, 3105, 2923, + 2761, 2627, 2536, 2495, + 2555, 2715, 2926, 3179, + 3461, 3763, 4077, 4401, + 4725, 5043, 5351, 5643, + 5908, 6143, 6333, 6465, + 6495, 6423, 6293, 6117, + 5912, 5680, 5432, 5173, + 4910, 4645, 4391, 4148, + 3926, 3733, 3582, 3481, + 3481, 3582, 3733, 3926, + 4148, 4391, 4645, 4910, + 5173, 5432, 5680, 5912, + 6117, 6293, 6423, 6495, + 6465, 6333, 6143, 5908, + 5643, 5351, 5043, 4725, + 4401, 4077, 3763, 3461, + 3179, 2926, 2715, 2555, + 2495, 2536, 2627, 2761, + 2923, 3105, 3300, 3505, + 3708, 3907, 4096, 4268, + 4413, 4530, 4599, 4612, + 4523, 4331, 4081, 3786, + 3462, 3109, 2742, 2364, + 1980, 1597, 1223, 860, + 519, 207, -65, -285, + -404, -423, -392, -317, + -215, -93, 43, 188, + 330, 470, 600, 711, + 797, 854, 863, 816, + 668, 415, 105, -248, + -633, -1046, -1472, -1910, + -2354, -2797, -3229, -3653, + -4054, -4425, -4757, -5038, + -5215, -5295, -5325, -5308, + -5266, -5205, -5128, -5042, + -4961, -4880, -4808, -4759, + -4733, -4733, -4786, -4894, + -5099, -5412, -5785, -6194, + -6639, -7116, -7598, -8093, + -8605, -9104, -9589, -10085, + -10544, -10955, -11376, -11718, + -2289, -2355, -2422, -2510, + -2576, -2620, -2643, -2644, + -2623, -2581, -2518, -2434, + -2330, -2205, -2061, -1898, + -1717, -1518, -1301, -1068, + -819, -555, -277, 15, + 319, 636, 962, 1299, + 1645, 1998, 2358, 2725, + 3096, 3470, 3848, 4227, + 4606, 4985, 5362, 5737, + 6108, 6474, 6834, 7188, + 7533, 7870, 8197, 8513, + 8818, 9109, 9388, 9652, + 9901, 10134, 10350, 10550, + 10731, 10894, 11038, 11162, + 11266, 11350, 11414, 11456, + 11476, 11475, 11453, 11409, + 11342, 11254, 11144, 11013, + 10859, 10685, 10489, 10273, + 10036, 9779, 9503, 9207, + 8893, 8562, 8213, 7847, + 7466, 7069, 6658, 6234, + 5797, 5348, 4889, 4420, + 3942, 3456, 2963, 2464, + 1961, 1454, 944, 433, + -79, -591, -1101, -1608, + -2111, -2610, -3103, -3589, + -4067, -4536, -4995, -5444, + -5881, -6305, -6716, -7113, + -7494, -7860, -8209, -8540, + -8854, -9150, -9426, -9683, + -9920, -10136, -10332, -10506, + -10660, -10791, -10901, -10989, + -11055, -11100, -11122, -11123, + -11103, -11060, -10997, -10913, + -10809, -10685, -10541, -10378, + -10197, -9997, -9781, -9548, + -9299, -9035, -8756, -8464, + -8160, -7844, -7517, -7180, + -6835, -6481, -6121, -5755, + -5384, -5009, -4632, -4253, + -3873, -3494, -3117, -2742, + -2372, -2005, -1645, -1292, + -946, -609, -282, 34, + 338, 630, 908, 1172, + 1421, 1654, 1871, 2070, + 2251, 2414, 2348, 2282, + 2216, 2149, 2083, 2017, + 1951, 1884, 1818, 1752, + 1686, 1619, 1553, 1487, + 1421, 1354, 1288, 1222, + 1156, 1089, 1023, 957, + 891, 824, 758, 692, + 626, 559, 493, 427, + 361, 295, 228, 162, + 96, 30, -37, -103, + -169, -235, -302, -368, + -434, -500, -567, -633, + -699, -765, -832, -898, + -964, -1030, -1097, -1163, + -1229, -1295, -1362, -1428, + -1494, -1560, -1627, -1693, + -1759, -1825, -1892, -1958, + -2024, -2090, -2157, -2223, + -2289, -2355, -2422, -2510, + -2904, -2959, -3013, -3040, + -3095, -3122, -3121, -3093, + -3036, -2953, -2844, -2708, + -2548, -2363, -2155, -1924, + -1672, -1400, -1109, -800, + -475, -135, 218, 584, + 959, 1343, 1734, 2130, + 2530, 2932, 3334, 3735, + 4132, 4524, 4910, 5287, + 5654, 6010, 6353, 6681, + 6993, 7288, 7564, 7820, + 8055, 8268, 8458, 8623, + 8764, 8878, 8967, 9028, + 9062, 9069, 9048, 8998, + 8921, 8816, 8683, 8522, + 8334, 8120, 7880, 7615, + 7325, 7011, 6675, 6317, + 5939, 5542, 5126, 4695, + 4248, 3787, 3314, 2831, + 2338, 1839, 1333, 824, + 313, -199, -710, -1218, + -1721, -2218, -2707, -3187, + -3655, -4110, -4551, -4977, + -5385, -5775, -6145, -6494, + -6821, -7126, -7406, -7661, + -7891, -8095, -8272, -8421, + -8543, -8637, -8704, -8742, + -8752, -8734, -8689, -8617, + -8518, -8393, -8242, -8067, + -7868, -7646, -7402, -7138, + -6854, -6552, -6234, -5899, + -5551, -5191, -4819, -4438, + -4050, -3656, -3257, -2856, + -2453, -2052, -1653, -1259, + -871, -490, -118, 242, + 590, 925, 1243, 1545, + 1829, 2093, 2337, 2559, + 2758, 2933, 3084, 3209, + 3308, 3380, 3425, 3443, + 3433, 3395, 3328, 3234, + 3112, 2963, 2786, 2582, + 2352, 2097, 2042, 1987, + 1932, 1877, 1822, 1767, + 1712, 1657, 1602, 1547, + 1492, 1437, 1383, 1328, + 1273, 1218, 1163, 1108, + 1053, 998, 943, 888, + 833, 778, 723, 668, + 613, 558, 503, 448, + 393, 338, 284, 229, + 174, 119, 64, 9, + -46, -101, -156, -211, + -266, -321, -376, -431, + -486, -541, -596, -651, + -706, -761, -815, -870, + -925, -980, -1035, -1090, + -1145, -1200, -1255, -1310, + -1365, -1420, -1475, -1530, + -1585, -1640, -1695, -1750, + -1805, -1860, -1914, -1969, + -2024, -2079, -2134, -2189, + -2244, -2299, -2354, -2409, + -2464, -2519, -2574, -2629, + -2684, -2739, -2794, -2849, + -2904, -2959, -3013, -3040, + -3437, -3466, -3495, -3560, + -3589, -3582, -3540, -3463, + -3352, -3207, -3029, -2820, + -2581, -2312, -2017, -1696, + -1351, -985, -600, -197, + 220, 650, 1089, 1536, + 1988, 2442, 2896, 3346, + 3791, 4228, 4654, 5066, + 5464, 5843, 6202, 6539, + 6851, 7138, 7397, 7626, + 7825, 7992, 8126, 8226, + 8291, 8321, 8316, 8275, + 8199, 8087, 7941, 7761, + 7547, 7301, 7023, 6716, + 6381, 6019, 5632, 5222, + 4792, 4343, 3877, 3397, + 2906, 2406, 1899, 1388, + 876, 366, -141, -641, + -1133, -1612, -2078, -2527, + -2958, -3367, -3754, -4116, + -4452, -4759, -5036, -5282, + -5496, -5676, -5823, -5934, + -6010, -6051, -6057, -6026, + -5961, -5861, -5727, -5560, + -5362, -5132, -4873, -4587, + -4274, -3937, -3578, -3199, + -2802, -2389, -1963, -1527, + -1082, -631, -178, 276, + 728, 1175, 1615, 2045, + 2462, 2865, 3250, 3616, + 3961, 4282, 4577, 4845, + 5085, 5294, 5472, 5616, + 5728, 5805, 5847, 5853, + 5824, 5760, 5660, 5525, + 5356, 5153, 4918, 4651, + 4354, 4027, 3674, 3295, + 2893, 2469, 2026, 1565, + 1090, 603, 105, -400, + -429, -458, -487, -516, + -545, -573, -602, -631, + -660, -689, -718, -747, + -776, -805, -834, -863, + -892, -921, -950, -978, + -1007, -1036, -1065, -1094, + -1123, -1152, -1181, -1210, + -1239, -1268, -1297, -1326, + -1355, -1383, -1412, -1441, + -1470, -1499, -1528, -1557, + -1586, -1615, -1644, -1673, + -1702, -1731, -1759, -1788, + -1817, -1846, -1875, -1904, + -1933, -1962, -1991, -2020, + -2049, -2078, -2107, -2136, + -2164, -2193, -2222, -2251, + -2280, -2309, -2338, -2367, + -2396, -2425, -2454, -2483, + -2512, -2541, -2569, -2598, + -2627, -2656, -2685, -2714, + -2743, -2772, -2801, -2830, + -2859, -2888, -2917, -2946, + -2974, -3003, -3032, -3061, + -3090, -3119, -3148, -3177, + -3206, -3235, -3264, -3293, + -3322, -3350, -3379, -3408, + -3437, -3466, -3495, -3560, + -2580, -2580, -2580, -2629, + -2629, -2579, -2479, -2330, + -2134, -1893, -1608, -1283, + -921, -525, -100, 352, + 825, 1315, 1817, 2327, + 2839, 3348, 3850, 4340, + 4813, 5265, 5691, 6087, + 6449, 6774, 7058, 7300, + 7496, 7644, 7744, 7795, + 7795, 7745, 7645, 7497, + 7301, 7060, 6776, 6452, + 6090, 5694, 5269, 4818, + 4345, 3856, 3354, 2845, + 2333, 1824, 1322, 833, + 360, -91, -516, -912, + -1274, -1598, -1882, -2123, + -2319, -2467, -2567, -2617, + -2617, -2566, -2466, -2318, + -2122, -1880, -1596, -1271, + -909, -513, -87, 365, + 838, 1328, 1830, 2339, + 2851, 3361, 3863, 4353, + 4826, 5278, 5703, 6099, + 6461, 6786, 7071, 7312, + 7508, 7657, 7757, 7807, + 7808, 7758, 7658, 7510, + 7314, 7073, 6789, 6464, + 6102, 5707, 5282, 4831, + 4358, 3868, 3367, 2857, + 2346, 1837, 1335, 845, + 373, -79, -504, -899, + -1261, -1586, -1870, -2111, + -2306, -2455, -2554, -2604, + -2604, -2604, -2604, -2604, + -2603, -2603, -2603, -2603, + -2603, -2602, -2602, -2602, + -2602, -2602, -2601, -2601, + -2601, -2601, -2601, -2600, + -2600, -2600, -2600, -2600, + -2600, -2599, -2599, -2599, + -2599, -2599, -2598, -2598, + -2598, -2598, -2598, -2597, + -2597, -2597, -2597, -2597, + -2596, -2596, -2596, -2596, + -2596, -2595, -2595, -2595, + -2595, -2595, -2594, -2594, + -2594, -2594, -2594, -2593, + -2593, -2593, -2593, -2593, + -2592, -2592, -2592, -2592, + -2592, -2591, -2591, -2591, + -2591, -2591, -2590, -2590, + -2590, -2590, -2590, -2590, + -2589, -2589, -2589, -2589, + -2589, -2588, -2588, -2588, + -2588, -2588, -2587, -2587, + -2587, -2587, -2587, -2586, + -2586, -2586, -2586, -2586, + -2585, -2585, -2585, -2585, + -2585, -2584, -2584, -2584, + -2584, -2584, -2583, -2583, + -2583, -2583, -2583, -2582, + -2582, -2582, -2582, -2582, + -2581, -2581, -2581, -2581, + -2581, -2580, -2580, -2580, + -2580, -2580, -2580, -2629, + -1800, -1814, -1829, -1904, + -1918, -1871, -1765, -1600, + -1379, -1106, -786, -423, + -22, 408, 863, 1335, + 1817, 2301, 2780, 3246, + 3692, 4111, 4498, 4844, + 5146, 5398, 5597, 5739, + 5822, 5845, 5806, 5707, + 5548, 5332, 5061, 4740, + 4374, 3966, 3525, 3055, + 2564, 2059, 1547, 1035, + 532, 45, -420, -855, + -1255, -1613, -1924, -2184, + -2389, -2536, -2623, -2650, + -2615, -2520, -2366, -2157, + -1894, -1583, -1228, -834, + -409, 42, 511, 991, + 1475, 1956, 2425, 2876, + 3301, 3694, 4049, 4360, + 4623, 4833, 4986, 5081, + 5116, 5089, 5002, 4855, + 4650, 4390, 4079, 3721, + 3322, 2886, 2422, 1934, + 1431, 920, 408, -97, + -589, -1058, -1500, -1907, + -2274, -2595, -2865, -3081, + -3240, -3340, -3378, -3356, + -3273, -3131, -2932, -2680, + -2378, -2031, -1645, -1226, + -779, -313, 165, 151, + 137, 123, 108, 94, + 80, 66, 51, 37, + 23, 9, -6, -20, + -34, -48, -63, -77, + -91, -105, -120, -134, + -148, -162, -177, -191, + -205, -219, -234, -248, + -262, -276, -290, -305, + -319, -333, -347, -362, + -376, -390, -404, -419, + -433, -447, -461, -476, + -490, -504, -518, -533, + -547, -561, -575, -590, + -604, -618, -632, -647, + -661, -675, -689, -704, + -718, -732, -746, -761, + -775, -789, -803, -817, + -832, -846, -860, -874, + -889, -903, -917, -931, + -946, -960, -974, -988, + -1003, -1017, -1031, -1045, + -1060, -1074, -1088, -1102, + -1117, -1131, -1145, -1159, + -1174, -1188, -1202, -1216, + -1231, -1245, -1259, -1273, + -1288, -1302, -1316, -1330, + -1344, -1359, -1373, -1387, + -1401, -1416, -1430, -1444, + -1458, -1473, -1487, -1501, + -1515, -1530, -1544, -1558, + -1572, -1587, -1601, -1615, + -1629, -1644, -1658, -1672, + -1686, -1701, -1715, -1729, + -1743, -1758, -1772, -1786, + -1800, -1814, -1829, -1904, + -1087, -1092, -1097, -1200, + -1205, -1111, -922, -645, + -292, 125, 589, 1081, + 1583, 2076, 2539, 2956, + 3310, 3587, 3776, 3870, + 3865, 3761, 3562, 3275, + 2912, 2485, 2012, 1510, + 998, 495, 22, -404, + -768, -1055, -1254, -1357, + -1362, -1268, -1079, -802, + -449, -32, 432, 924, + 1426, 1919, 2382, 2799, + 3153, 3430, 3619, 3713, + 3708, 3604, 3405, 3118, + 2755, 2328, 1855, 1353, + 841, 338, -135, -561, + -925, -1212, -1411, -1514, + -1519, -1425, -1236, -959, + -606, -189, 275, 767, + 1269, 1762, 2225, 2642, + 2996, 3273, 3462, 3556, + 3551, 3447, 3248, 2961, + 2598, 2171, 1698, 1196, + 684, 181, -292, -297, + -302, -307, -312, -316, + -321, -326, -331, -336, + -341, -346, -351, -356, + -361, -366, -370, -375, + -380, -385, -390, -395, + -400, -405, -410, -415, + -420, -424, -429, -434, + -439, -444, -449, -454, + -459, -464, -469, -473, + -478, -483, -488, -493, + -498, -503, -508, -513, + -518, -523, -527, -532, + -537, -542, -547, -552, + -557, -562, -567, -572, + -577, -581, -586, -591, + -596, -601, -606, -611, + -616, -621, -626, -630, + -635, -640, -645, -650, + -655, -660, -665, -670, + -675, -680, -684, -689, + -694, -699, -704, -709, + -714, -719, -724, -729, + -734, -738, -743, -748, + -753, -758, -763, -768, + -773, -778, -783, -787, + -792, -797, -802, -807, + -812, -817, -822, -827, + -832, -837, -841, -846, + -851, -856, -861, -866, + -871, -876, -881, -886, + -890, -895, -900, -905, + -910, -915, -920, -925, + -930, -935, -940, -944, + -949, -954, -959, -964, + -969, -974, -979, -984, + -989, -994, -998, -1003, + -1008, -1013, -1018, -1023, + -1028, -1033, -1038, -1043, + -1047, -1052, -1057, -1062, + -1067, -1072, -1077, -1082, + -1087, -1092, -1097, -1200, + -225, -225, -224, -419, + -418, -222, 141, 614, + 1126, 1599, 1961, 2158, + 2158, 1963, 1603, 1131, + 621, 149, -212, -406, + -406, -209, 153, 626, + 1138, 1611, 1973, 2170, + 2171, 1976, 1615, 1143, + 633, 161, -199, -394, + -393, -197, 165, 638, + 1150, 1623, 1986, 2182, + 2183, 1988, 1627, 1156, + 645, 174, -187, -382, + -381, -185, 177, 650, + 1162, 1636, 1998, 2194, + 2195, 2000, 1639, 1168, + 657, 186, -175, -370, + -369, -368, -368, -367, + -366, -365, -364, -364, + -363, -362, -361, -361, + -360, -359, -358, -358, + -357, -356, -355, -355, + -354, -353, -352, -351, + -351, -350, -349, -348, + -348, -347, -346, -345, + -345, -344, -343, -342, + -342, -341, -340, -339, + -338, -338, -337, -336, + -335, -335, -334, -333, + -332, -332, -331, -330, + -329, -329, -328, -327, + -326, -325, -325, -324, + -323, -322, -322, -321, + -320, -319, -319, -318, + -317, -316, -316, -315, + -314, -313, -312, -312, + -311, -310, -309, -309, + -308, -307, -306, -306, + -305, -304, -303, -303, + -302, -301, -300, -299, + -299, -298, -297, -296, + -296, -295, -294, -293, + -293, -292, -291, -290, + -290, -289, -288, -287, + -286, -286, -285, -284, + -283, -283, -282, -281, + -280, -280, -279, -278, + -277, -277, -276, -275, + -274, -274, -273, -272, + -271, -270, -270, -269, + -268, -267, -267, -266, + -265, -264, -264, -263, + -262, -261, -261, -260, + -259, -258, -257, -257, + -256, -255, -254, -254, + -253, -252, -251, -251, + -250, -249, -248, -248, + -247, -246, -245, -244, + -244, -243, -242, -241, + -241, -240, -239, -238, + -238, -237, -236, -235, + -235, -234, -233, -232, + -231, -231, -230, -229, + -228, -228, -227, -226, + -225, -225, -224, -419, + -204, -206, -208, -571, + -573, -214, 294, 652, + 650, 288, -224, -587, + -589, -230, 278, 637, + 635, 272, -240, -603, + -605, -246, 262, 621, + 619, 256, -256, -619, + -621, -262, 246, 605, + 603, 240, -272, -635, + -637, -278, 230, 589, + 587, 224, -288, -650, + -652, -294, 214, 573, + 571, 208, 206, 204, + 202, 200, 198, 196, + 194, 192, 190, 188, + 186, 184, 182, 180, + 178, 176, 174, 172, + 170, 168, 166, 164, + 162, 160, 158, 156, + 154, 152, 150, 148, + 146, 144, 142, 140, + 138, 136, 134, 132, + 130, 128, 127, 125, + 123, 121, 119, 117, + 115, 113, 111, 109, + 107, 105, 103, 101, + 99, 97, 95, 93, + 91, 89, 87, 85, + 83, 81, 79, 77, + 75, 73, 71, 69, + 67, 65, 63, 61, + 59, 57, 55, 53, + 51, 49, 47, 45, + 43, 41, 39, 37, + 35, 33, 31, 29, + 27, 25, 23, 21, + 19, 17, 15, 13, + 11, 9, 7, 5, + 3, 1, -1, -3, + -5, -7, -9, -11, + -13, -15, -17, -19, + -21, -23, -25, -27, + -29, -31, -33, -35, + -37, -39, -41, -43, + -45, -47, -49, -51, + -53, -55, -57, -59, + -61, -63, -65, -67, + -69, -71, -73, -75, + -77, -79, -81, -83, + -85, -87, -89, -91, + -93, -95, -97, -99, + -101, -103, -105, -107, + -109, -111, -113, -115, + -117, -119, -121, -123, + -125, -127, -128, -130, + -132, -134, -136, -138, + -140, -142, -144, -146, + -148, -150, -152, -154, + -156, -158, -160, -162, + -164, -166, -168, -170, + -172, -174, -176, -178, + -180, -182, -184, -186, + -188, -190, -192, -194, + -196, -198, -200, -202, + -204, -206, -208, -571, + -3907, -3940, -3972, -4003, + -4035, -4023, -3968, -3871, + -3733, -3556, -3340, -3088, + -2800, -2480, -2129, -1750, + -1346, -917, -469, -2, + 479, 973, 1475, 1984, + 2496, 3008, 3517, 4021, + 4516, 4999, 5469, 5921, + 6355, 6767, 7156, 7519, + 7853, 8159, 8433, 8676, + 8884, 9058, 9196, 9299, + 9365, 9394, 9387, 9344, + 9264, 9150, 9000, 8817, + 8602, 8355, 8078, 7774, + 7443, 7088, 6711, 6313, + 5897, 5465, 5019, 4563, + 4098, 3626, 3151, 2674, + 2199, 1727, 1261, 803, + 355, -80, -500, -904, + -1289, -1654, -1998, -2318, + -2613, -2883, -3126, -3342, + -3529, -3687, -3816, -3916, + -3987, -4028, -4040, -4023, + -3979, -3907, -3809, -3686, + -3539, -3368, -3176, -2965, + -2734, -2487, -2225, -1950, + -1663, -1367, -1063, -753, + -439, -124, 191, 504, + 813, 1117, 1413, 1700, + 1977, 2241, 2491, 2726, + 2945, 3147, 3329, 3493, + 3636, 3759, 3860, 3939, + 3997, 4032, 4044, 4035, + 4003, 3950, 3876, 3782, + 3667, 3533, 3381, 3212, + 3026, 2825, 2611, 2383, + 2144, 1896, 1638, 1373, + 1102, 827, 549, 269, + -11, -290, -566, -838, + -1106, -1367, -1620, -1865, + -2101, -2325, -2539, -2740, + -2929, -3104, -3265, -3411, + -3543, -3659, -3761, -3847, + -3918, -3974, -4016, -4042, + -4054, -4053, -4038, -4011, + -3972, -3921, -3859, -3788, + -3708, -3620, -3525, -3423, + -3316, -3204, -3089, -2972, + -2853, -2733, -2613, -2495, + -2378, -2264, -2154, -2047, + -1946, -1850, -1760, -1677, + -1601, -1532, -1471, -1417, + -1373, -1336, -1308, -1288, + -1277, -1275, -1280, -1294, + -1315, -1344, -1380, -1423, + -1473, -1528, -1589, -1655, + -1726, -1801, -1879, -1960, + -2044, -2130, -2217, -2305, + -2393, -2482, -2570, -2657, + -2743, -2827, -2909, -2989, + -3067, -3141, -3213, -3282, + -3347, -3410, -3469, -3525, + -3578, -3628, -3675, -3719, + -3761, -3800, -3837, -3873, + -3907, -3940, -3972, -4003, + -2454, -2471, -2490, -2510, + -2530, -2488, -2385, -2224, + -2007, -1738, -1420, -1057, + -655, -220, 243, 728, + 1229, 1738, 2250, 2758, + 3256, 3737, 4195, 4625, + 5022, 5381, 5697, 5967, + 6188, 6356, 6471, 6531, + 6536, 6486, 6381, 6223, + 6015, 5758, 5457, 5116, + 4737, 4327, 3890, 3432, + 2958, 2473, 1984, 1496, + 1015, 547, 96, -332, + -732, -1100, -1432, -1725, + -1975, -2181, -2340, -2452, + -2515, -2529, -2496, -2415, + -2290, -2122, -1914, -1668, + -1390, -1082, -749, -395, + -26, 354, 740, 1127, + 1510, 1883, 2243, 2585, + 2905, 3198, 3462, 3692, + 3887, 4045, 4162, 4240, + 4275, 4269, 4222, 4134, + 4007, 3842, 3642, 3410, + 3148, 2860, 2549, 2219, + 1874, 1518, 1156, 791, + 429, 73, -273, -606, + -920, -1214, -1484, -1726, + -1940, -2123, -2273, -2389, + -2470, -2517, -2530, -2508, + -2453, -2366, -2250, -2105, + -1936, -1743, -1531, -1302, + -1059, -807, -548, -286, + -24, 233, 484, 724, + 950, 1161, 1352, 1523, + 1670, 1793, 1890, 1960, + 2002, 2016, 2002, 1961, + 1893, 1799, 1681, 1541, + 1380, 1200, 1003, 793, + 571, 341, 105, -134, + -373, -610, -843, -1067, + -1282, -1485, -1674, -1847, + -2003, -2140, -2257, -2354, + -2430, -2485, -2519, -2532, + -2525, -2498, -2453, -2391, + -2313, -2221, -2117, -2002, + -1879, -1749, -1614, -1477, + -1339, -1203, -1070, -942, + -822, -709, -606, -515, + -435, -368, -315, -276, + -252, -242, -246, -264, + -296, -341, -398, -467, + -545, -633, -729, -831, + -939, -1050, -1165, -1280, + -1396, -1510, -1622, -1731, + -1835, -1933, -2026, -2112, + -2190, -2261, -2324, -2379, + -2426, -2465, -2496, -2520, + -2536, -2547, -2552, -2551, + -2546, -2537, -2526, -2512, + -2496, -2480, -2464, -2448, + -2433, -2420, -2410, -2401, + -2395, -2393, -2393, -2396, + -2402, -2412, -2423, -2437, + -2454, -2471, -2490, -2510, + -1811, -1828, -1844, -1859, + -1873, -1808, -1664, -1445, + -1159, -811, -410, 35, + 513, 1014, 1526, 2038, + 2538, 3015, 3460, 3862, + 4212, 4504, 4731, 4888, + 4972, 4982, 4918, 4782, + 4577, 4307, 3978, 3599, + 3176, 2720, 2241, 1747, + 1251, 762, 290, -154, + -562, -926, -1238, -1492, + -1685, -1812, -1871, -1863, + -1789, -1651, -1452, -1199, + -897, -554, -178, 222, + 638, 1060, 1478, 1882, + 2265, 2618, 2932, 3202, + 3422, 3587, 3693, 3740, + 3725, 3650, 3517, 3329, + 3089, 2805, 2481, 2125, + 1745, 1348, 944, 541, + 146, -231, -583, -903, + -1186, -1424, -1615, -1755, + -1842, -1875, -1853, -1780, + -1656, -1486, -1274, -1026, + -747, -444, -126, 202, + 532, 856, 1166, 1457, + 1721, 1954, 2149, 2304, + 2415, 2479, 2496, 2466, + 2389, 2268, 2105, 1905, + 1671, 1410, 1126, 826, + 516, 202, -108, -408, + -693, -956, -1194, -1400, + -1573, -1708, -1804, -1859, + -1873, -1848, -1784, -1684, + -1550, -1387, -1199, -990, + -766, -532, -294, -58, + 173, 391, 593, 773, + 929, 1057, 1154, 1218, + 1249, 1245, 1209, 1139, + 1039, 910, 757, 581, + 388, 181, -36, -257, + -478, -694, -902, -1098, + -1277, -1437, -1574, -1687, + -1774, -1834, -1867, -1872, + -1852, -1806, -1738, -1648, + -1541, -1419, -1286, -1145, + -999, -852, -709, -571, + -442, -326, -224, -139, + -72, -25, 1, 7, + -7, -42, -95, -166, + -252, -352, -463, -583, + -708, -838, -968, -1096, + -1221, -1339, -1448, -1547, + -1635, -1710, -1771, -1818, + -1851, -1870, -1876, -1869, + -1851, -1822, -1785, -1740, + -1691, -1637, -1582, -1526, + -1472, -1421, -1373, -1332, + -1296, -1268, -1247, -1234, + -1228, -1231, -1241, -1258, + -1281, -1309, -1342, -1378, + -1417, -1458, -1499, -1540, + -1580, -1618, -1654, -1687, + -1718, -1745, -1770, -1791, + -1811, -1828, -1844, -1859, + -1170, -1183, -1194, -1204, + -1214, -1106, -888, -571, + -173, 287, 786, 1298, + 1798, 2262, 2666, 2992, + 3223, 3350, 3365, 3269, + 3068, 2770, 2391, 1950, + 1467, 967, 472, 8, + -406, -749, -1006, -1166, + -1222, -1174, -1024, -781, + -459, -73, 355, 805, + 1254, 1680, 2063, 2382, + 2624, 2777, 2833, 2791, + 2653, 2425, 2121, 1753, + 1341, 904, 464, 41, + -346, -677, -939, -1119, + -1210, -1209, -1118, -942, + -691, -378, -20, 365, + 758, 1139, 1489, 1792, + 2032, 2199, 2284, 2284, + 2199, 2035, 1798, 1502, + 1160, 789, 407, 32, + -318, -627, -881, -1069, + -1183, -1219, -1176, -1058, + -872, -629, -340, -21, + 312, 641, 951, 1227, + 1454, 1623, 1725, 1756, + 1714, 1603, 1428, 1197, + 923, 618, 298, -23, + -329, -606, -842, -1026, + -1151, -1212, -1207, -1138, + -1009, -828, -605, -352, + -82, 191, 454, 693, + 898, 1057, 1164, 1214, + 1204, 1136, 1014, 844, + 633, 394, 136, -126, + -382, -620, -828, -997, + -1121, -1195, -1216, -1185, + -1105, -980, -819, -630, + -423, -209, 2, 197, + 369, 508, 609, 666, + 677, 642, 563, 445, + 294, 116, -79, -282, + -483, -673, -844, -989, + -1101, -1176, -1212, -1208, + -1166, -1090, -984, -855, + -710, -556, -402, -256, + -125, -16, 67, 120, + 140, 127, 81, 7, + -93, -213, -347, -490, + -633, -771, -898, -1008, + -1098, -1163, -1202, -1214, + -1200, -1163, -1105, -1031, + -944, -850, -755, -664, + -580, -509, -454, -417, + -400, -402, -425, -465, + -521, -590, -667, -750, + -835, -917, -994, -1061, + -1118, -1163, -1193, -1210, + -1214, -1205, -1187, -1160, + -1128, -1092, -1056, -1022, + -991, -966, -947, -936, + -933, -937, -948, -965, + -986, -1010, -1037, -1063, + -1089, -1113, -1135, -1154, + -1170, -1183, -1194, -1204, + -864, -876, -885, -893, + -900, -753, -467, -68, + 409, 921, 1424, 1873, + 2230, 2465, 2558, 2501, + 2300, 1973, 1548, 1061, + 556, 73, -345, -664, + -859, -914, -826, -605, + -271, 146, 607, 1074, + 1504, 1862, 2116, 2245, + 2238, 2096, 1833, 1471, + 1042, 582, 130, -274, + -598, -816, -910, -873, + -712, -441, -85, 324, + 749, 1153, 1502, 1765, + 1921, 1955, 1866, 1662, + 1361, 990, 579, 165, + -218, -539, -770, -893, + -900, -792, -579, -283, + 71, 451, 823, 1155, + 1418, 1590, 1657, 1613, + 1463, 1220, 906, 547, + 174, -181, -489, -724, + -867, -909, -847, -689, + -449, -150, 181, 515, + 823, 1078, 1258, 1348, + 1341, 1238, 1049, 790, + 483, 156, -165, -452, + -683, -838, -905, -882, + -771, -585, -339, -58, + 234, 511, 750, 929, + 1033, 1054, 991, 850, + 643, 389, 109, -173, + -434, -651, -808, -893, + -900, -830, -692, -498, + -267, -20, 222, 437, + 606, 715, 756, 725, + 626, 468, 264, 32, + -208, -435, -633, -783, + -876, -905, -869, -773, + -627, -446, -245, -43, + 142, 294, 400, 452, + 445, 380, 265, 109, + -75, -270, -461, -631, + -767, -859, -901, -891, + -831, -729, -594, -440, + -281, -131, -3, 92, + 145, 153, 116, 38, + -75, -212, -362, -511, + -649, -764, -847, -893, + -900, -869, -804, -713, + -605, -490, -379, -282, + -206, -159, -145, -162, + -211, -285, -378, -483, + -590, -690, -776, -843, + -885, -901, -890, -857, + -806, -741, -671, -601, + -539, -490, -458, -445, + -452, -477, -519, -573, + -633, -696, -756, -809, + -851, -881, -897, -899, + -891, -873, -848, -822, + -795, -773, -755, -745, + -743, -747, -759, -774, + -793, -813, -832, -850, + -864, -876, -885, -893, + -779, -780, -784, -789, + -795, -630, -312, 121, + 622, 1134, 1601, 1973, + 2209, 2284, 2191, 1940, + 1559, 1090, 583, 94, + -325, -631, -792, -792, + -634, -336, 68, 531, + 1003, 1432, 1771, 1984, + 2047, 1955, 1718, 1362, + 927, 460, 10, -374, + -652, -795, -790, -639, + -362, 11, 438, 870, + 1261, 1568, 1758, 1810, + 1719, 1497, 1168, 767, + 339, -72, -420, -670, + -797, -788, -646, -390, + -47, 342, 735, 1088, + 1363, 1530, 1572, 1485, + 1278, 976, 610, 221, + -150, -464, -687, -798, + -786, -654, -420, -109, + 243, 596, 912, 1156, + 1302, 1335, 1251, 1062, + 786, 456, 106, -227, + -506, -703, -799, -784, + -664, -452, -173, 141, + 454, 733, 947, 1073, + 1097, 1019, 846, 599, + 304, -7, -300, -545, + -717, -799, -784, -675, + -486, -240, 36, 310, + 552, 736, 843, 860, + 787, 633, 415, 156, + -116, -371, -583, -730, + -799, -783, -687, -523, + -309, -72, 163, 369, + 524, 612, 623, 557, + 422, 233, 10, -222, + -439, -618, -742, -799, + -784, -701, -561, -382, + -183, 12, 183, 310, + 380, 386, 328, 212, + 53, -133, -326, -505, + -652, -753, -798, -785, + -716, -602, -457, -297, + -140, -5, 94, 147, + 149, 99, 5, -124, + -273, -426, -568, -683, + -762, -797, -786, -733, + -646, -535, -413, -296, + -195, -123, -86, -88, + -128, -201, -298, -410, + -524, -628, -713, -770, + -796, -789, -752, -692, + -615, -533, -454, -388, + -342, -320, -324, -353, + -404, -470, -544, -619, + -686, -740, -777, -794, + -792, -772, -740, -699, + -655, -615, -583, -562, + -554, -560, -578, -605, + -639, -675, -710, -741, + -766, -783, -793, -796, + -795, -790, -785, -781, + -779, -780, -784, -789, + -681, -692, -700, -707, + -712, -528, -182, 279, + 791, 1285, 1694, 1963, + 2057, 1965, 1698, 1294, + 806, 301, -156, -505, + -700, -717, -557, -244, + 180, 656, 1119, 1507, + 1767, 1866, 1791, 1552, + 1183, 733, 261, -169, + -501, -693, -721, -584, + -301, 87, 526, 957, + 1322, 1572, 1674, 1615, + 1403, 1068, 654, 218, + -185, -500, -687, -723, + -607, -355, -3, 401, + 800, 1141, 1379, 1482, + 1437, 1250, 948, 571, + 169, -204, -500, -681, + -725, -627, -404, -87, + 280, 646, 963, 1187, + 1289, 1257, 1094, 824, + 483, 116, -227, -503, + -676, -725, -645, -450, + -167, 164, 497, 788, + 997, 1097, 1075, 935, + 696, 390, 59, -254, + -509, -672, -724, -660, + -492, -242, 52, 352, + 616, 808, 904, 891, + 772, 563, 293, -3, + -285, -517, -669, -723, + -673, -530, -313, -54, + 211, 447, 622, 712, + 707, 607, 427, 191, + -70, -320, -528, -667, + -721, -684, -564, -380, + -156, 75, 282, 437, + 520, 520, 438, 286, + 84, -141, -359, -541, + -666, -718, -693, -596, + -442, -253, -57, 121, + 255, 329, 333, 267, + 141, -28, -217, -402, + -558, -667, -716, -700, + -624, -499, -346, -184, + -37, 75, 139, 145, + 94, -7, -143, -297, + -449, -578, -670, -713, + -705, -648, -553, -433, + -307, -191, -102, -51, + -44, -82, -159, -264, + -383, -500, -601, -674, + -711, -709, -670, -602, + -516, -425, -341, -276, + -239, -234, -260, -315, + -389, -473, -556, -628, + -681, -709, -711, -689, + -648, -595, -539, -487, + -448, -426, -424, -441, + -474, -518, -568, -616, + -658, -689, -707, -712, + -705, -689, -669, -647, + -629, -617, -612, -614, + -623, -636, -652, -667, + -681, -692, -700, -707, + -410, -419, -426, -431, + -434, -147, 331, 836, + 1198, 1295, 1096, 668, + 156, -269, -465, -371, + -20, 465, 920, 1192, + 1188, 913, 458, -22, + -368, -465, -285, 109, + 582, 972, 1149, 1054, + 720, 260, -171, -431, + -434, -184, 234, 675, + 990, 1075, 900, 527, + 80, -290, -461, -379, + -75, 346, 740, 975, + 972, 733, 339, -77, + -376, -461, -305, 34, + 441, 777, 929, 846, + 559, 163, -208, -431, + -434, -220, 136, 513, + 783, 854, 705, 386, + 5, -310, -457, -388, + -130, 227, 561, 759, + 756, 553, 220, -132, + -385, -456, -326, -41, + 300, 581, 708, 639, + 397, 66, -244, -431, + -434, -257, 39, 352, + 575, 633, 509, 245, + -70, -331, -452, -396, + -185, 107, 381, 543, + 539, 373, 100, -187, + -393, -452, -347, -117, + 159, 386, 487, 431, + 236, -31, -281, -431, + -434, -293, -58, 190, + 367, 413, 314, 104, + -146, -352, -448, -405, + -240, -12, 201, 326, + 323, 193, -19, -241, + -401, -448, -368, -192, + 18, 190, 267, 223, + 74, -128, -317, -431, + -434, -330, -155, 29, + 159, 192, 118, -37, + -221, -373, -444, -413, + -295, -131, 21, 110, + 106, 13, -138, -296, + -410, -443, -389, -268, + -123, -6, 46, 15, + -87, -225, -354, -431, + -434, -366, -252, -133, + -49, -29, -78, -178, + -296, -394, -439, -422, + -349, -250, -159, -106, + -110, -167, -257, -351, + -418, -439, -409, -343, + -264, -201, -175, -193, + -248, -322, -390, -431, + -434, -402, -349, -294, + -257, -249, -273, -319, + -372, -414, -435, -430, + -404, -370, -339, -323, + -326, -347, -377, -406, + -427, -435, -430, -418, + -405, -397, -395, -401, + -410, -419, -426, -431, + -5085, -5094, -5107, -5123, + -5164, -5158, -5105, -5008, + -4867, -4685, -4464, -4204, + -3910, -3583, -3226, -2840, + -2430, -1997, -1544, -1075, + -591, -96, 407, 916, + 1428, 1940, 2449, 2954, + 3451, 3938, 4413, 4874, + 5318, 5744, 6151, 6535, + 6897, 7235, 7547, 7832, + 8091, 8321, 8524, 8697, + 8842, 8958, 9045, 9104, + 9135, 9139, 9115, 9066, + 8991, 8893, 8771, 8628, + 8464, 8281, 8080, 7863, + 7631, 7386, 7129, 6861, + 6585, 6301, 6012, 5718, + 5422, 5124, 4827, 4530, + 4236, 3946, 3661, 3382, + 3110, 2846, 2590, 2344, + 2108, 1882, 1668, 1465, + 1274, 1095, 928, 773, + 631, 501, 382, 276, + 181, 97, 24, -39, + -92, -136, -171, -197, + -217, -229, -235, -236, + -231, -223, -210, -195, + -177, -157, -136, -114, + -92, -70, -49, -29, + -11, 6, 20, 32, + 41, 48, 51, 52, + 49, 43, 34, 22, + 7, -11, -31, -54, + -80, -108, -138, -169, + -202, -236, -272, -307, + -344, -380, -416, -452, + -487, -521, -555, -587, + -617, -646, -673, -698, + -721, -742, -761, -778, + -793, -805, -816, -824, + -831, -836, -839, -841, + -842, -841, -840, -838, + -836, -834, -831, -830, + -828, -828, -829, -832, + -837, -843, -852, -863, + -877, -894, -914, -938, + -965, -996, -1030, -1069, + -1111, -1157, -1208, -1262, + -1320, -1383, -1449, -1519, + -1593, -1670, -1751, -1835, + -1922, -2011, -2104, -2198, + -2295, -2393, -2493, -2594, + -2696, -2799, -2902, -3005, + -3107, -3209, -3310, -3410, + -3508, -3605, -3699, -3792, + -3881, -3968, -4052, -4133, + -4211, -4285, -4356, -4423, + -4487, -4546, -4602, -4654, + -4702, -4747, -4787, -4824, + -4858, -4888, -4915, -4939, + -4960, -4978, -4993, -5006, + -5017, -5027, -5034, -5041, + -5046, -5050, -5054, -5058, + -5062, -5066, -5071, -5077, + -5085, -5094, -5107, -5123, + -1780, -1805, -1829, -1854, + -1869, -1776, -1582, -1295, + -930, -500, -25, 479, + 991, 1492, 1966, 2395, + 2765, 3066, 3289, 3430, + 3488, 3464, 3364, 3196, + 2972, 2704, 2406, 2094, + 1781, 1483, 1213, 983, + 802, 677, 613, 611, + 670, 785, 951, 1159, + 1397, 1655, 1920, 2178, + 2419, 2630, 2802, 2925, + 2993, 3003, 2953, 2843, + 2676, 2459, 2198, 1903, + 1583, 1251, 917, 592, + 288, 14, -221, -410, + -549, -635, -666, -645, + -574, -458, -305, -121, + 84, 302, 523, 738, + 939, 1117, 1267, 1384, + 1464, 1507, 1510, 1477, + 1410, 1314, 1194, 1055, + 906, 752, 602, 460, + 333, 226, 143, 86, + 58, 58, 85, 137, + 210, 301, 405, 516, + 628, 738, 838, 925, + 994, 1042, 1067, 1068, + 1043, 994, 922, 831, + 722, 600, 469, 333, + 198, 66, -57, -169, + -266, -346, -408, -451, + -474, -480, -468, -442, + -403, -355, -301, -243, + -185, -130, -81, -39, + -7, 15, 25, 24, + 11, -12, -43, -83, + -128, -176, -227, -277, + -324, -368, -407, -439, + -465, -483, -493, -497, + -494, -487, -475, -460, + -444, -428, -413, -401, + -392, -387, -388, -394, + -406, -423, -445, -472, + -502, -536, -571, -608, + -645, -681, -716, -749, + -780, -807, -832, -855, + -874, -891, -907, -920, + -933, -945, -958, -970, + -983, -997, -1013, -1029, + -1046, -1064, -1083, -1102, + -1120, -1138, -1155, -1170, + -1184, -1196, -1205, -1213, + -1219, -1223, -1226, -1228, + -1229, -1231, -1233, -1236, + -1241, -1248, -1257, -1269, + -1284, -1302, -1323, -1346, + -1371, -1397, -1425, -1453, + -1482, -1509, -1535, -1559, + -1581, -1600, -1617, -1630, + -1641, -1649, -1655, -1659, + -1661, -1663, -1665, -1667, + -1670, -1675, -1682, -1692, + -1704, -1720, -1738, -1758, + -1780, -1805, -1829, -1854, + -1191, -1218, -1246, -1274, + -1284, -1139, -855, -458, + 17, 529, 1036, 1499, + 1882, 2160, 2318, 2350, + 2264, 2078, 1819, 1517, + 1208, 927, 702, 558, + 510, 562, 711, 940, + 1229, 1548, 1866, 2152, + 2377, 2518, 2559, 2493, + 2323, 2061, 1725, 1340, + 937, 544, 191, -98, + -305, -418, -436, -362, + -210, 0, 246, 503, + 746, 953, 1106, 1194, + 1211, 1160, 1049, 892, + 708, 516, 337, 190, + 90, 47, 67, 148, + 283, 461, 665, 878, + 1082, 1258, 1393, 1474, + 1496, 1457, 1362, 1219, + 1041, 841, 637, 442, + 272, 137, 44, -3, + -6, 30, 97, 185, + 281, 375, 454, 510, + 537, 532, 495, 431, + 344, 245, 140, 42, + -43, -106, -143, -150, + -128, -80, -10, 75, + 167, 259, 342, 410, + 459, 485, 488, 468, + 429, 375, 311, 243, + 176, 116, 65, 27, + 2, -11, -12, -6, + 5, 16, 26, 30, + 26, 14, -8, -36, + -72, -111, -151, -189, + -224, -253, -276, -290, + -297, -298, -294, -287, + -278, -270, -263, -260, + -259, -261, -266, -273, + -280, -286, -291, -293, + -293, -290, -286, -281, + -277, -275, -276, -283, + -295, -314, -339, -368, + -401, -436, -471, -503, + -532, -554, -569, -577, + -579, -575, -567, -557, + -548, -541, -540, -545, + -557, -578, -605, -639, + -675, -713, -750, -782, + -808, -825, -832, -830, + -818, -799, -774, -747, + -721, -698, -682, -674, + -677, -690, -714, -746, + -786, -830, -874, -917, + -954, -983, -1004, -1014, + -1014, -1005, -989, -969, + -948, -928, -912, -904, + -905, -916, -937, -967, + -1004, -1046, -1090, -1133, + -1172, -1204, -1229, -1243, + -1248, -1244, -1233, -1216, + -1196, -1176, -1158, -1146, + -1140, -1141, -1151, -1168, + -1191, -1218, -1246, -1274, + -1405, -1419, -1432, -1443, + -1455, -1342, -1114, -785, + -374, 95, 599, 1111, + 1606, 2063, 2460, 2783, + 3021, 3168, 3225, 3196, + 3089, 2918, 2695, 2438, + 2162, 1883, 1614, 1365, + 1147, 962, 814, 701, + 619, 563, 527, 503, + 485, 468, 446, 419, + 385, 347, 309, 275, + 252, 246, 263, 309, + 386, 496, 638, 808, + 1000, 1206, 1416, 1619, + 1803, 1956, 2069, 2132, + 2140, 2089, 1979, 1814, + 1599, 1344, 1061, 762, + 462, 175, -84, -305, + -476, -592, -647, -641, + -576, -458, -296, -100, + 119, 348, 574, 785, + 972, 1125, 1238, 1309, + 1336, 1321, 1267, 1182, + 1072, 944, 809, 672, + 543, 425, 325, 243, + 182, 140, 116, 105, + 104, 108, 113, 116, + 113, 102, 83, 56, + 23, -13, -50, -82, + -106, -118, -116, -97, + -62, -9, 59, 138, + 224, 313, 398, 473, + 533, 573, 588, 578, + 539, 473, 382, 270, + 141, 2, -141, -280, + -409, -522, -613, -679, + -716, -724, -704, -657, + -588, -502, -404, -301, + -198, -102, -19, 48, + 95, 120, 123, 104, + 65, 10, -58, -134, + -214, -294, -370, -438, + -496, -542, -576, -597, + -608, -610, -605, -596, + -585, -575, -569, -567, + -571, -580, -595, -615, + -637, -660, -682, -701, + -715, -723, -723, -716, + -702, -681, -655, -628, + -600, -574, -554, -542, + -539, -547, -567, -599, + -642, -696, -757, -823, + -891, -958, -1021, -1078, + -1125, -1160, -1183, -1192, + -1188, -1173, -1147, -1112, + -1073, -1031, -989, -950, + -918, -893, -877, -872, + -878, -894, -920, -954, + -993, -1037, -1083, -1129, + -1173, -1213, -1248, -1277, + -1300, -1317, -1328, -1334, + -1337, -1337, -1335, -1334, + -1333, -1335, -1338, -1344, + -1353, -1364, -1377, -1390, + -1405, -1419, -1432, -1443, + -5893, -5945, -5994, -6041, + -6087, -6020, -5845, -5572, + -5217, -4794, -4322, -3820, + -3308, -2805, -2330, -1899, + -1527, -1224, -1000, -858, + -800, -825, -925, -1094, + -1319, -1588, -1885, -2196, + -2503, -2792, -3048, -3257, + -3409, -3494, -3506, -3442, + -3301, -3086, -2801, -2454, + -2055, -1615, -1147, -663, + -178, 296, 746, 1161, + 1532, 1850, 2110, 2310, + 2448, 2527, 2549, 2521, + 2451, 2347, 2220, 2080, + 1937, 1803, 1688, 1600, + 1547, 1535, 1568, 1649, + 1778, 1953, 2172, 2429, + 2718, 3032, 3361, 3698, + 4032, 4356, 4661, 4939, + 5183, 5389, 5553, 5673, + 5748, 5778, 5767, 5719, + 5638, 5530, 5402, 5261, + 5115, 4971, 4836, 4716, + 4615, 4540, 4492, 4474, + 4487, 4529, 4599, 4694, + 4810, 4942, 5084, 5231, + 5377, 5516, 5642, 5750, + 5835, 5894, 5925, 5924, + 5893, 5831, 5739, 5621, + 5479, 5317, 5139, 4952, + 4758, 4564, 4375, 4194, + 4026, 3873, 3739, 3625, + 3532, 3460, 3407, 3373, + 3354, 3348, 3352, 3361, + 3372, 3380, 3383, 3375, + 3354, 3318, 3264, 3190, + 3097, 2984, 2851, 2701, + 2535, 2355, 2165, 1968, + 1767, 1565, 1366, 1173, + 989, 816, 657, 512, + 382, 268, 170, 86, + 16, -43, -93, -137, + -176, -213, -253, -296, + -345, -402, -469, -548, + -638, -740, -854, -979, + -1115, -1259, -1410, -1565, + -1723, -1882, -2038, -2190, + -2336, -2474, -2602, -2720, + -2826, -2920, -3002, -3073, + -3134, -3184, -3227, -3263, + -3294, -3323, -3350, -3378, + -3409, -3444, -3483, -3529, + -3583, -3643, -3711, -3786, + -3868, -3955, -4048, -4143, + -4241, -4340, -4437, -4532, + -4623, -4709, -4789, -4862, + -4928, -4986, -5035, -5077, + -5112, -5140, -5162, -5179, + -5193, -5205, -5215, -5225, + -5237, -5251, -5268, -5288, + -5314, -5344, -5379, -5418, + -5462, -5510, -5561, -5615, + -5671, -5727, -5783, -5839, + -5893, -5945, -5994, -6041, + -1305, -1303, -1303, -1304, + -1314, -1174, -898, -512, + -47, 460, 972, 1453, + 1872, 2206, 2440, 2571, + 2601, 2544, 2418, 2247, + 2052, 1857, 1680, 1534, + 1425, 1354, 1316, 1298, + 1289, 1273, 1237, 1170, + 1067, 926, 753, 557, + 353, 156, -15, -145, + -220, -232, -179, -61, + 110, 323, 560, 801, + 1029, 1225, 1377, 1475, + 1517, 1504, 1445, 1350, + 1234, 1113, 1002, 911, + 851, 825, 833, 868, + 920, 978, 1027, 1054, + 1047, 999, 904, 765, + 587, 382, 165, -49, + -242, -397, -501, -545, + -524, -439, -296, -106, + 117, 355, 591, 808, + 992, 1131, 1219, 1253, + 1236, 1174, 1077, 956, + 824, 692, 569, 463, + 378, 314, 269, 238, + 215, 194, 166, 128, + 76, 9, -69, -155, + -241, -319, -381, -419, + -427, -401, -341, -249, + -130, 8, 154, 299, + 430, 537, 614, 655, + 658, 623, 555, 461, + 349, 229, 111, 2, + -89, -160, -206, -231, + -236, -227, -210, -192, + -180, -179, -192, -221, + -264, -319, -381, -443, + -498, -541, -565, -567, + -545, -499, -432, -349, + -256, -161, -72, 5, + 62, 96, 104, 85, + 42, -21, -100, -188, + -277, -364, -441, -506, + -556, -590, -612, -621, + -624, -622, -621, -623, + -630, -645, -666, -692, + -720, -746, -768, -781, + -783, -771, -746, -707, + -658, -602, -544, -488, + -439, -403, -382, -379, + -395, -430, -481, -544, + -617, -692, -767, -836, + -895, -942, -976, -997, + -1005, -1003, -993, -980, + -967, -956, -949, -948, + -953, -964, -979, -995, + -1012, -1026, -1035, -1037, + -1033, -1021, -1004, -982, + -959, -937, -918, -905, + -901, -907, -922, -947, + -981, -1021, -1065, -1111, + -1155, -1196, -1231, -1259, + -1280, -1294, -1302, -1305, + -1305, -1303, -1303, -1304, + -612, -600, -591, -591, + -595, -305, 177, 689, + 1070, 1216, 1115, 848, + 548, 353, 349, 541, + 853, 1158, 1330, 1290, + 1036, 639, 220, -101, + -240, -181, 27, 290, + 512, 624, 610, 507, + 383, 308, 326, 441, + 613, 784, 896, 913, + 835, 692, 528, 386, + 289, 240, 222, 213, + 198, 176, 160, 168, + 211, 285, 374, 450, + 490, 487, 452, 411, + 393, 419, 483, 561, + 612, 599, 504, 339, + 145, -21, -106, -83, + 38, 210, 372, 462, + 451, 347, 196, 64, + 12, 70, 226, 426, + 599, 677, 624, 452, + 214, -13, -157, -177, + -76, 99, 274, 382, + 381, 273, 102, -63, + -157, -141, -17, 172, + 360, 482, 497, 403, + 236, 55, -80, -130, + -90, 13, 130, 211, + 222, 159, 48, -70, + -152, -169, -118, -20, + 90, 174, 207, 187, + 127, 53, -7, -38, + -37, -15, 10, 22, + 13, -16, -54, -87, + -107, -110, -101, -90, + -84, -85, -89, -90, + -79, -57, -28, -4, + 2, -18, -62, -119, + -171, -201, -199, -168, + -123, -85, -73, -99, + -156, -226, -285, -308, + -286, -224, -143, -72, + -39, -56, -119, -206, + -287, -334, -332, -285, + -213, -148, -117, -135, + -198, -287, -370, -419, + -418, -369, -291, -214, + -167, -165, -208, -280, + -355, -405, -416, -386, + -331, -274, -239, -240, + -279, -341, -407, -454, + -470, -453, -413, -367, + -334, -325, -342, -378, + -418, -448, -460, -453, + -432, -409, -394, -393, + -408, -433, -459, -480, + -492, -494, -490, -486, + -485, -488, -495, -502, + -506, -507, -506, -506, + -510, -519, -531, -543, + -551, -553, -550, -543, + -538, -541, -552, -571, + -593, -612, -622, -621, + -612, -600, -591, -591, + -434, -459, -484, -497, + -501, -150, 362, 769, + 884, 705, 403, 214, + 292, 620, 1017, 1249, + 1168, 798, 316, -45, + -136, 35, 315, 504, + 477, 253, -19, -156, + -52, 263, 640, 898, + 928, 749, 488, 301, + 278, 400, 556, 617, + 514, 279, 23, -131, + -117, 40, 244, 390, + 424, 362, 279, 252, + 315, 440, 558, 602, + 547, 420, 278, 178, + 142, 151, 169, 165, + 134, 97, 83, 108, + 165, 231, 282, 311, + 324, 336, 354, 367, + 357, 313, 238, 159, + 106, 96, 118, 143, + 139, 97, 37, 0, + 21, 107, 223, 315, + 337, 281, 184, 105, + 91, 146, 229, 276, + 240, 123, -23, -124, + -127, -34, 101, 199, + 207, 126, 10, -60, + -34, 81, 222, 308, + 283, 156, -7, -120, + -129, -39, 85, 159, + 133, 16, -124, -204, + -175, -49, 104, 201, + 191, 85, -51, -137, + -124, -27, 91, 151, + 112, -12, -155, -241, + -227, -128, -7, 65, + 49, -41, -147, -204, + -176, -80, 28, 83, + 55, -41, -152, -218, + -211, -144, -66, -27, + -55, -133, -217, -258, + -236, -165, -88, -46, + -61, -119, -184, -218, + -206, -162, -116, -100, + -126, -181, -237, -267, + -259, -226, -191, -176, + -187, -216, -244, -254, + -242, -218, -197, -193, + -206, -229, -251, -263, + -264, -261, -262, -269, + -280, -290, -294, -293, + -290, -290, -295, -301, + -303, -299, -291, -285, + -289, -304, -324, -342, + -348, -341, -329, -323, + -330, -352, -377, -394, + -392, -374, -350, -336, + -342, -366, -395, -414, + -412, -393, -370, -360, + -372, -403, -437, -458, + -456, -435, -410, -398, + -408, -435, -465, -481, + -476, -456, -433, -424, + -434, -459, -484, -497, + -6397, -6430, -6465, -6503, + -6557, -6386, -6071, -5675, + -5230, -4758, -4267, -3766, + -3259, -2748, -2236, -1724, + -1214, -707, -203, 298, + 794, 1286, 1772, 2254, + 2730, 3201, 3666, 4124, + 4577, 5024, 5464, 5898, + 6324, 6744, 7156, 7559, + 7954, 8339, 8711, 9069, + 9405, 9706, 9949, 10127, + 10263, 10373, 10466, 10547, + 10615, 10671, 10714, 10741, + 10744, 10714, 10637, 10514, + 10354, 10164, 9940, 9677, + 9376, 9047, 8701, 8346, + 7986, 7624, 7260, 6897, + 6535, 6175, 5817, 5462, + 5111, 4763, 4420, 4083, + 3752, 3429, 3119, 2830, + 2576, 2368, 2193, 2035, + 1888, 1748, 1613, 1481, + 1353, 1228, 1105, 985, + 867, 752, 638, 527, + 419, 313, 211, 111, + 17, -72, -152, -219, + -268, -299, -318, -329, + -335, -336, -333, -325, + -308, -279, -233, -168, + -94, -20, 39, 71, + 81, 79, 71, 60, + 46, 31, 15, -3, + -21, -40, -60, -80, + -101, -123, -146, -168, + -192, -216, -241, -266, + -291, -318, -344, -372, + -400, -428, -457, -487, + -517, -548, -580, -613, + -649, -687, -730, -773, + -809, -828, -830, -824, + -814, -802, -791, -780, + -771, -764, -761, -763, + -773, -795, -831, -877, + -931, -988, -1048, -1110, + -1174, -1238, -1303, -1368, + -1434, -1500, -1566, -1632, + -1699, -1766, -1833, -1900, + -1968, -2037, -2106, -2177, + -2249, -2326, -2409, -2504, + -2613, -2729, -2848, -2969, + -3089, -3209, -3328, -3445, + -3558, -3667, -3775, -3880, + -3985, -4088, -4191, -4292, + -4393, -4493, -4592, -4690, + -4787, -4883, -4978, -5071, + -5162, -5251, -5337, -5418, + -5493, -5560, -5620, -5676, + -5728, -5778, -5826, -5871, + -5912, -5945, -5969, -5988, + -6003, -6018, -6032, -6046, + -6061, -6075, -6090, -6106, + -6122, -6139, -6157, -6176, + -6195, -6215, -6237, -6259, + -6283, -6309, -6336, -6366, + -6397, -6430, -6465, -6503, + -2674, -2708, -2733, -2754, + -2775, -2441, -1999, -1516, + -1015, -505, 7, 518, + 1026, 1528, 2024, 2509, + 2980, 3426, 3804, 3996, + 4014, 3932, 3822, 3699, + 3569, 3434, 3297, 3157, + 3016, 2875, 2734, 2597, + 2477, 2444, 2482, 2508, + 2586, 2692, 2799, 2904, + 3008, 3110, 3209, 3306, + 3399, 3486, 3559, 3590, + 3502, 3373, 3224, 3035, + 2742, 2410, 2070, 1728, + 1389, 1053, 723, 400, + 88, -199, -401, -523, + -616, -679, -688, -612, + -425, -201, 35, 274, + 513, 750, 982, 1203, + 1389, 1483, 1547, 1601, + 1648, 1687, 1712, 1692, + 1599, 1486, 1367, 1246, + 1127, 1011, 908, 867, + 878, 898, 920, 939, + 950, 944, 923, 936, + 998, 1070, 1142, 1212, + 1275, 1311, 1278, 1224, + 1165, 1103, 1040, 975, + 909, 839, 757, 628, + 461, 288, 116, -44, + -154, -224, -284, -339, + -391, -440, -483, -520, + -541, -543, -524, -455, + -359, -262, -183, -156, + -143, -135, -129, -124, + -120, -117, -115, -114, + -115, -121, -139, -198, + -267, -304, -313, -318, + -321, -325, -328, -332, + -337, -344, -354, -371, + -396, -423, -443, -441, + -467, -501, -536, -572, + -608, -644, -680, -716, + -751, -787, -822, -856, + -890, -921, -939, -967, + -998, -1031, -1063, -1095, + -1127, -1159, -1190, -1220, + -1250, -1278, -1304, -1326, + -1356, -1408, -1452, -1473, + -1489, -1503, -1516, -1530, + -1543, -1555, -1568, -1580, + -1592, -1603, -1609, -1594, + -1567, -1541, -1532, -1539, + -1551, -1564, -1578, -1593, + -1608, -1624, -1641, -1660, + -1682, -1715, -1770, -1832, + -1895, -1953, -1996, -2027, + -2055, -2082, -2108, -2134, + -2159, -2184, -2207, -2226, + -2231, -2226, -2220, -2214, + -2209, -2209, -2223, -2244, + -2267, -2290, -2314, -2339, + -2364, -2390, -2422, -2465, + -2510, -2553, -2595, -2636, + -2674, -2708, -2733, -2754, + -1833, -1850, -1853, -1854, + -1868, -1479, -1005, -503, + 7, 519, 1028, 1528, + 2012, 2455, 2675, 2639, + 2543, 2431, 2312, 2190, + 2066, 1943, 1828, 1751, + 1855, 2074, 2363, 2556, + 2696, 2816, 2925, 3025, + 3109, 3125, 2987, 2796, + 2452, 2066, 1674, 1284, + 898, 522, 166, -82, + -227, -340, -367, -272, + -137, 64, 331, 614, + 885, 1031, 1125, 1204, + 1257, 1185, 1073, 954, + 835, 721, 636, 676, + 741, 814, 896, 1031, + 1259, 1494, 1718, 1908, + 1997, 1952, 1881, 1800, + 1711, 1603, 1397, 1156, + 913, 680, 521, 429, + 348, 272, 201, 140, + 120, 185, 262, 330, + 314, 276, 259, 272, + 296, 319, 332, 269, + 176, 99, 107, 133, + 161, 191, 221, 253, + 289, 351, 480, 585, + 621, 646, 666, 680, + 681, 657, 615, 561, + 450, 359, 307, 259, + 212, 166, 122, 77, + 34, -6, -35, -65, + -105, -146, -185, -224, + -262, -297, -327, -344, + -337, -311, -301, -293, + -285, -277, -270, -264, + -258, -256, -274, -326, + -332, -331, -327, -324, + -320, -316, -312, -304, + -264, -204, -189, -207, + -232, -260, -288, -318, + -350, -388, -469, -562, + -645, -686, -717, -745, + -773, -798, -821, -833, + -804, -768, -734, -724, + -735, -742, -748, -754, + -763, -789, -846, -907, + -967, -1018, -1035, -1043, + -1049, -1053, -1053, -1028, + -985, -940, -896, -856, + -836, -840, -849, -866, + -891, -947, -1013, -1079, + -1145, -1210, -1268, -1298, + -1320, -1339, -1350, -1334, + -1313, -1292, -1270, -1250, + -1233, -1229, -1244, -1264, + -1294, -1343, -1391, -1438, + -1484, -1529, -1573, -1612, + -1629, -1639, -1631, -1612, + -1592, -1572, -1553, -1534, + -1517, -1502, -1497, -1509, + -1540, -1576, -1613, -1650, + -1688, -1727, -1765, -1801, + -1833, -1850, -1853, -1854, + -1889, -1885, -1882, -1883, + -1898, -1519, -1050, -551, + -42, 470, 980, 1486, + 1985, 2473, 2942, 3345, + 3571, 3752, 3910, 4044, + 4133, 4080, 3779, 3376, + 2949, 2519, 2114, 1851, + 1657, 1477, 1304, 1136, + 973, 815, 661, 514, + 377, 253, 142, 67, + 110, 192, 287, 387, + 489, 593, 698, 804, + 917, 1061, 1329, 1625, + 1921, 2208, 2474, 2676, + 2771, 2776, 2704, 2604, + 2480, 2260, 1975, 1679, + 1383, 1087, 794, 505, + 222, -53, -316, -552, + -697, -659, -560, -389, + -180, 40, 262, 485, + 705, 921, 1129, 1316, + 1406, 1462, 1507, 1543, + 1566, 1554, 1470, 1359, + 1219, 1035, 844, 706, + 627, 557, 491, 426, + 364, 302, 242, 184, + 128, 76, 25, -40, + -98, -145, -165, -157, + -140, -120, -98, -75, + -48, -11, 89, 217, + 348, 476, 598, 698, + 746, 771, 785, 787, + 757, 679, 544, 400, + 254, 107, -39, -183, + -325, -464, -597, -721, + -813, -806, -764, -711, + -653, -584, -497, -403, + -309, -215, -125, -42, + -1, 10, 15, 16, + 11, -5, -58, -128, + -203, -279, -355, -423, + -459, -492, -522, -552, + -582, -611, -640, -668, + -695, -722, -747, -781, + -813, -843, -870, -897, + -919, -933, -939, -944, + -946, -945, -920, -871, + -818, -766, -717, -675, + -657, -655, -658, -664, + -674, -695, -752, -822, + -896, -971, -1046, -1120, + -1194, -1266, -1335, -1401, + -1457, -1469, -1454, -1433, + -1410, -1386, -1362, -1336, + -1308, -1276, -1245, -1216, + -1199, -1204, -1213, -1224, + -1237, -1254, -1284, -1327, + -1373, -1419, -1464, -1504, + -1523, -1538, -1555, -1573, + -1592, -1610, -1629, -1647, + -1665, -1683, -1700, -1721, + -1741, -1761, -1780, -1798, + -1816, -1834, -1851, -1867, + -1881, -1892, -1899, -1895, + -1889, -1885, -1882, -1883, + -5622, -5649, -5676, -5705, + -5749, -5433, -5018, -4559, + -4076, -3577, -3070, -2558, + -2046, -1537, -1032, -537, + -57, 393, 757, 862, + 740, 524, 283, 35, + -215, -465, -712, -955, + -1192, -1423, -1643, -1849, + -2022, -2075, -1975, -1785, + -1453, -1077, -691, -301, + 87, 472, 853, 1228, + 1595, 1953, 2293, 2590, + 2750, 2846, 2907, 2881, + 2755, 2606, 2448, 2289, + 2129, 1971, 1816, 1666, + 1523, 1396, 1332, 1361, + 1415, 1483, 1579, 1770, + 2017, 2276, 2537, 2797, + 3054, 3308, 3555, 3793, + 4007, 4141, 4233, 4311, + 4381, 4439, 4459, 4389, + 4287, 4177, 4064, 3951, + 3839, 3730, 3630, 3562, + 3555, 3562, 3574, 3589, + 3609, 3640, 3717, 3861, + 4020, 4182, 4343, 4500, + 4651, 4788, 4878, 4937, + 4987, 5031, 5069, 5101, + 5122, 5124, 5061, 4949, + 4819, 4678, 4527, 4370, + 4221, 4102, 3988, 3873, + 3756, 3638, 3519, 3401, + 3288, 3194, 3158, 3143, + 3132, 3121, 3104, 3062, + 3000, 2934, 2866, 2798, + 2728, 2658, 2586, 2512, + 2430, 2322, 2168, 2003, + 1837, 1680, 1545, 1419, + 1294, 1171, 1049, 927, + 807, 689, 572, 459, + 355, 285, 245, 209, + 162, 104, 43, -18, + -79, -140, -201, -262, + -323, -385, -448, -514, + -590, -702, -824, -937, + -1045, -1153, -1259, -1366, + -1471, -1577, -1681, -1784, + -1887, -1988, -2088, -2183, + -2264, -2322, -2378, -2434, + -2489, -2543, -2597, -2650, + -2703, -2756, -2809, -2861, + -2914, -2967, -3021, -3077, + -3144, -3228, -3316, -3404, + -3492, -3580, -3668, -3755, + -3841, -3927, -4011, -4095, + -4178, -4259, -4341, -4422, + -4481, -4529, -4573, -4614, + -4653, -4690, -4724, -4755, + -4783, -4808, -4831, -4851, + -4869, -4883, -4897, -4916, + -4953, -4994, -5036, -5079, + -5122, -5165, -5208, -5250, + -5293, -5336, -5379, -5423, + -5469, -5515, -5559, -5595, + -5622, -5649, -5676, -5705, + -1547, -1557, -1568, -1579, + -1591, -1184, -700, -195, + 317, 828, 1335, 1832, + 2310, 2702, 2908, 3069, + 3140, 3005, 2822, 2624, + 2414, 2177, 1872, 1682, + 1509, 1341, 1178, 1027, + 911, 953, 1058, 1152, + 1090, 981, 865, 749, + 634, 524, 426, 370, + 414, 530, 631, 729, + 826, 924, 1022, 1119, + 1212, 1296, 1309, 1216, + 1117, 1052, 1094, 1156, + 1209, 1214, 1147, 1094, + 1157, 1234, 1310, 1383, + 1449, 1496, 1456, 1369, + 1253, 1015, 753, 488, + 228, -24, -254, -419, + -520, -582, -496, -303, + -92, 123, 339, 554, + 765, 971, 1164, 1288, + 1342, 1378, 1390, 1333, + 1239, 1082, 892, 700, + 541, 466, 402, 342, + 284, 230, 185, 180, + 198, 202, 122, 29, + -64, -149, -210, -217, + -204, -183, -152, -65, + 12, 86, 159, 231, + 302, 372, 438, 497, + 497, 460, 416, 371, + 330, 257, 174, 91, + 11, -36, -30, -19, + -6, 6, 16, 22, + 6, -29, -83, -195, + -312, -420, -496, -544, + -583, -617, -646, -662, + -612, -530, -441, -352, + -263, -175, -90, -8, + 66, 92, 92, 77, + 25, -61, -156, -254, + -351, -444, -507, -539, + -567, -593, -617, -641, + -662, -674, -678, -696, + -747, -789, -806, -813, + -818, -821, -823, -823, + -815, -773, -735, -698, + -662, -626, -592, -559, + -528, -505, -520, -560, + -621, -686, -744, -800, + -854, -907, -957, -982, + -991, -997, -1002, -1008, + -1013, -1020, -1031, -1047, + -1073, -1106, -1129, -1149, + -1168, -1187, -1204, -1221, + -1236, -1243, -1224, -1196, + -1167, -1139, -1111, -1083, + -1058, -1036, -1024, -1048, + -1084, -1123, -1163, -1208, + -1253, -1299, -1343, -1384, + -1409, -1426, -1441, -1456, + -1471, -1484, -1497, -1507, + -1511, -1515, -1526, -1536, + -1547, -1557, -1568, -1579, + -816, -827, -820, -814, + -820, -351, 159, 671, + 1160, 1351, 1269, 1166, + 1059, 976, 1116, 1293, + 1409, 1507, 1487, 1299, + 918, 474, 43, -167, + -314, -328, 11, 375, + 532, 672, 781, 693, + 667, 790, 916, 1040, + 1270, 1209, 1087, 957, + 820, 581, 443, 317, + 197, 84, -27, -29, + 53, 148, 251, 490, + 604, 701, 792, 864, + 770, 785, 734, 652, + 604, 691, 716, 631, + 535, 315, 52, -182, + -242, -188, 36, 276, + 505, 593, 628, 528, + 421, 317, 311, 423, + 528, 625, 714, 758, + 558, 339, 120, -92, + -263, -182, -33, 153, + 338, 437, 370, 274, + 176, 86, 112, 208, + 364, 469, 540, 497, + 427, 257, 84, -30, + -78, -112, -44, 46, + 82, 110, 134, 82, + 10, 31, 58, 87, + 142, 225, 227, 197, + 161, 118, 73, 37, + 2, -32, -70, -113, + -141, -141, -124, -78, + -15, 6, 23, 37, + -20, -78, -70, -62, + -71, -14, 41, 24, + -3, -52, -160, -266, + -313, -334, -287, -201, + -113, -49, -42, -103, + -170, -236, -292, -273, + -196, -126, -72, -26, + -85, -174, -264, -353, + -435, -420, -374, -323, + -260, -204, -210, -266, + -324, -380, -397, -389, + -330, -267, -211, -217, + -234, -294, -365, -429, + -447, -461, -455, -419, + -408, -417, -418, -424, + -468, -473, -472, -471, + -467, -430, -428, -429, + -435, -447, -468, -481, + -493, -506, -519, -557, + -571, -583, -593, -593, + -561, -559, -560, -562, + -578, -614, -623, -625, + -626, -600, -576, -567, + -576, -590, -631, -673, + -710, -721, -722, -701, + -679, -656, -657, -682, + -713, -743, -772, -781, + -762, -741, -721, -705, + -703, -732, -761, -790, + -816, -827, -820, -814, + -626, -635, -654, -665, + -670, -188, 324, 824, + 933, 840, 738, 653, + 935, 1339, 1499, 1564, + 1277, 814, 354, 38, + -44, 56, 174, 206, + 252, 141, 45, 182, + 404, 794, 1147, 1277, + 1294, 962, 711, 573, + 495, 583, 483, 352, + 176, -140, -155, -59, + 92, 382, 496, 600, + 664, 664, 751, 813, + 772, 698, 598, 495, + 373, 268, 171, 80, + 3, 1, 68, 145, + 290, 371, 447, 517, + 456, 515, 557, 512, + 582, 513, 437, 338, + 120, 42, -24, 0, + 141, 196, 245, 165, + 79, 126, 188, 381, + 562, 597, 534, 338, + 149, 87, 105, 189, + 264, 216, 54, -84, + -175, -136, 27, 197, + 354, 379, 289, 194, + 97, 123, 204, 284, + 351, 213, 54, -104, + -245, -177, -64, 71, + 186, 112, 27, -55, + -76, 46, 174, 288, + 272, 146, 12, -116, + -148, -88, -20, 34, + 6, -84, -163, -191, + -170, -69, 37, 66, + 78, 12, -64, -88, + -108, -56, -9, -31, + -59, -155, -215, -236, + -236, -159, -138, -126, + -118, -170, -163, -154, + -143, -87, -101, -119, + -140, -182, -202, -220, + -238, -257, -273, -276, + -269, -256, -249, -243, + -245, -248, -244, -238, + -207, -209, -223, -240, + -303, -330, -346, -357, + -319, -319, -323, -329, + -377, -387, -384, -354, + -302, -286, -286, -329, + -387, -414, -423, -391, + -358, -355, -373, -428, + -482, -501, -479, -436, + -394, -378, -413, -454, + -493, -509, -475, -445, + -417, -415, -461, -508, + -552, -561, -536, -510, + -482, -495, -529, -563, + -594, -584, -556, -527, + -505, -518, -554, -590, + -611, -610, -592, -575, + -580, -596, -626, -653, + -658, -654, -637, -623, + -626, -635, -654, -665, + -31488, -32000, -32512, -32008, + -31504, -31000, -30496, -29992, + -29488, -28984, -28480, -27975, + -27471, -26967, -26463, -25959, + -25455, -24951, -24447, -23943, + -23439, -22935, -22431, -21927, + -21423, -20919, -20415, -19910, + -19406, -18902, -18398, -17894, + -17390, -16886, -16382, -15878, + -15374, -14870, -14366, -13862, + -13358, -12854, -12350, -11845, + -11341, -10837, -10333, -9829, + -9325, -8821, -8317, -7813, + -7309, -6805, -6301, -5797, + -5293, -4789, -4285, -3780, + -3276, -2772, -2268, -1764, + -1260, -756, -252, 252, + 756, 1260, 1764, 2268, + 2772, 3276, 3780, 4285, + 4789, 5293, 5797, 6301, + 6805, 7309, 7813, 8317, + 8821, 9325, 9829, 10333, + 10837, 11341, 11845, 12350, + 12854, 13358, 13862, 14366, + 14870, 15374, 15878, 16382, + 16886, 17390, 17894, 18398, + 18902, 19406, 19910, 20415, + 20919, 21423, 21927, 22431, + 22935, 23439, 23943, 24447, + 24951, 25455, 25959, 26463, + 26967, 27471, 27975, 28480, + 28984, 29488, 29992, 30496, + 31000, 31504, 32008, 32512, + 32000, 31488, 30976, 30464, + 29952, 29440, 28928, 28416, + 27904, 27392, 26880, 26368, + 25856, 25344, 24832, 24320, + 23808, 23296, 22784, 22272, + 21760, 21248, 20736, 20224, + 19712, 19200, 18688, 18176, + 17664, 17152, 16640, 16128, + 15616, 15104, 14592, 14080, + 13568, 13056, 12544, 12032, + 11520, 11008, 10496, 9984, + 9472, 8960, 8448, 7936, + 7424, 6912, 6400, 5888, + 5376, 4864, 4352, 3840, + 3328, 2816, 2304, 1792, + 1280, 768, 256, -256, + -768, -1280, -1792, -2304, + -2816, -3328, -3840, -4352, + -4864, -5376, -5888, -6400, + -6912, -7424, -7936, -8448, + -8960, -9472, -9984, -10496, + -11008, -11520, -12032, -12544, + -13056, -13568, -14080, -14592, + -15104, -15616, -16128, -16640, + -17152, -17664, -18176, -18688, + -19200, -19712, -20224, -20736, + -21248, -21760, -22272, -22784, + -23296, -23808, -24320, -24832, + -25344, -25856, -26368, -26880, + -27392, -27904, -28416, -28928, + -29440, -29952, -30464, -30976, + -31488, -32000, -32512, -32008, + -25923, -26274, -26624, -26112, + -25600, -25088, -24576, -24064, + -23552, -23040, -22528, -22016, + -21504, -20992, -20480, -19968, + -19456, -18944, -18432, -17920, + -17408, -16896, -16384, -15872, + -15360, -14848, -14336, -13824, + -13312, -12800, -12288, -11776, + -11264, -10752, -10240, -9728, + -9216, -8704, -8192, -7680, + -7168, -6656, -6144, -5632, + -5120, -4608, -4096, -3584, + -3072, -2560, -2048, -1536, + -1024, -512, 0, 512, + 1024, 1536, 2048, 2560, + 3072, 3584, 4096, 4608, + 5120, 5632, 6144, 6656, + 7168, 7680, 8192, 8704, + 9216, 9728, 10240, 10752, + 11264, 11776, 12288, 12800, + 13312, 13824, 14336, 14848, + 15360, 15872, 16384, 16896, + 17408, 17920, 18432, 18944, + 19456, 19968, 20480, 20992, + 21504, 22016, 22528, 23040, + 23552, 24064, 24576, 25088, + 25600, 26112, 26624, 26274, + 25923, 25573, 25223, 24872, + 24522, 24172, 23821, 23471, + 23121, 22771, 22420, 22070, + 21720, 21369, 21019, 20669, + 20318, 19968, 19618, 19267, + 18917, 18567, 18216, 17866, + 17516, 17165, 16815, 16465, + 16115, 15764, 15414, 15064, + 14713, 14363, 14013, 13662, + 13312, 12962, 12611, 12261, + 11911, 11560, 11210, 10860, + 10509, 10159, 9809, 9459, + 9108, 8758, 8408, 8057, + 7707, 7357, 7006, 6656, + 6306, 5955, 5605, 5255, + 4904, 4554, 4204, 3853, + 3503, 3153, 2803, 2452, + 2102, 1752, 1401, 1051, + 701, 350, 0, -350, + -701, -1051, -1401, -1752, + -2102, -2452, -2803, -3153, + -3503, -3853, -4204, -4554, + -4904, -5255, -5605, -5955, + -6306, -6656, -7006, -7357, + -7707, -8057, -8408, -8758, + -9108, -9459, -9809, -10159, + -10509, -10860, -11210, -11560, + -11911, -12261, -12611, -12962, + -13312, -13662, -14013, -14363, + -14713, -15064, -15414, -15764, + -16115, -16465, -16815, -17165, + -17516, -17866, -18216, -18567, + -18917, -19267, -19618, -19968, + -20318, -20669, -21019, -21369, + -21720, -22070, -22420, -22771, + -23121, -23471, -23821, -24172, + -24522, -24872, -25223, -25573, + -25923, -26274, -26624, -26112, + -21745, -22008, -22272, -21760, + -21248, -20736, -20224, -19712, + -19200, -18688, -18176, -17664, + -17152, -16640, -16128, -15616, + -15104, -14592, -14080, -13568, + -13056, -12544, -12032, -11520, + -11008, -10496, -9984, -9472, + -8960, -8448, -7936, -7424, + -6912, -6400, -5888, -5376, + -4864, -4352, -3840, -3328, + -2816, -2304, -1792, -1280, + -768, -256, 256, 768, + 1280, 1792, 2304, 2816, + 3328, 3840, 4352, 4864, + 5376, 5888, 6400, 6912, + 7424, 7936, 8448, 8960, + 9472, 9984, 10496, 11008, + 11520, 12032, 12544, 13056, + 13568, 14080, 14592, 15104, + 15616, 16128, 16640, 17152, + 17664, 18176, 18688, 19200, + 19712, 20224, 20736, 21248, + 21760, 22272, 22008, 21745, + 21481, 21218, 20954, 20691, + 20427, 20163, 19900, 19636, + 19373, 19109, 18846, 18582, + 18318, 18055, 17791, 17528, + 17264, 17001, 16737, 16473, + 16210, 15946, 15683, 15419, + 15156, 14892, 14628, 14365, + 14101, 13838, 13574, 13310, + 13047, 12783, 12520, 12256, + 11993, 11729, 11465, 11202, + 10938, 10675, 10411, 10148, + 9884, 9620, 9357, 9093, + 8830, 8566, 8303, 8039, + 7775, 7512, 7248, 6985, + 6721, 6458, 6194, 5930, + 5667, 5403, 5140, 4876, + 4613, 4349, 4085, 3822, + 3558, 3295, 3031, 2768, + 2504, 2240, 1977, 1713, + 1450, 1186, 923, 659, + 395, 132, -132, -395, + -659, -923, -1186, -1450, + -1713, -1977, -2240, -2504, + -2768, -3031, -3295, -3558, + -3822, -4085, -4349, -4613, + -4876, -5140, -5403, -5667, + -5930, -6194, -6458, -6721, + -6985, -7248, -7512, -7775, + -8039, -8303, -8566, -8830, + -9093, -9357, -9620, -9884, + -10148, -10411, -10675, -10938, + -11202, -11465, -11729, -11993, + -12256, -12520, -12783, -13047, + -13310, -13574, -13838, -14101, + -14365, -14628, -14892, -15156, + -15419, -15683, -15946, -16210, + -16473, -16737, -17001, -17264, + -17528, -17791, -18055, -18318, + -18582, -18846, -19109, -19373, + -19636, -19900, -20163, -20427, + -20691, -20954, -21218, -21481, + -21745, -22008, -22272, -21760, + -16292, -16466, -16640, -16128, + -15616, -15104, -14592, -14080, + -13568, -13056, -12544, -12032, + -11520, -11008, -10496, -9984, + -9472, -8960, -8448, -7936, + -7424, -6912, -6400, -5888, + -5376, -4864, -4352, -3840, + -3328, -2816, -2304, -1792, + -1280, -768, -256, 256, + 768, 1280, 1792, 2304, + 2816, 3328, 3840, 4352, + 4864, 5376, 5888, 6400, + 6912, 7424, 7936, 8448, + 8960, 9472, 9984, 10496, + 11008, 11520, 12032, 12544, + 13056, 13568, 14080, 14592, + 15104, 15616, 16128, 16640, + 16466, 16292, 16117, 15943, + 15769, 15595, 15420, 15246, + 15072, 14898, 14723, 14549, + 14375, 14201, 14026, 13852, + 13678, 13504, 13329, 13155, + 12981, 12807, 12632, 12458, + 12284, 12110, 11935, 11761, + 11587, 11413, 11239, 11064, + 10890, 10716, 10542, 10367, + 10193, 10019, 9845, 9670, + 9496, 9322, 9148, 8973, + 8799, 8625, 8451, 8276, + 8102, 7928, 7754, 7579, + 7405, 7231, 7057, 6883, + 6708, 6534, 6360, 6186, + 6011, 5837, 5663, 5489, + 5314, 5140, 4966, 4792, + 4617, 4443, 4269, 4095, + 3920, 3746, 3572, 3398, + 3223, 3049, 2875, 2701, + 2526, 2352, 2178, 2004, + 1830, 1655, 1481, 1307, + 1133, 958, 784, 610, + 436, 261, 87, -87, + -261, -436, -610, -784, + -958, -1133, -1307, -1481, + -1655, -1830, -2004, -2178, + -2352, -2526, -2701, -2875, + -3049, -3223, -3398, -3572, + -3746, -3920, -4095, -4269, + -4443, -4617, -4792, -4966, + -5140, -5314, -5489, -5663, + -5837, -6011, -6186, -6360, + -6534, -6708, -6883, -7057, + -7231, -7405, -7579, -7754, + -7928, -8102, -8276, -8451, + -8625, -8799, -8973, -9148, + -9322, -9496, -9670, -9845, + -10019, -10193, -10367, -10542, + -10716, -10890, -11064, -11239, + -11413, -11587, -11761, -11935, + -12110, -12284, -12458, -12632, + -12807, -12981, -13155, -13329, + -13504, -13678, -13852, -14026, + -14201, -14375, -14549, -14723, + -14898, -15072, -15246, -15420, + -15595, -15769, -15943, -16117, + -16292, -16466, -16640, -16128, + -13301, -13434, -13568, -13056, + -12544, -12032, -11520, -11008, + -10496, -9984, -9472, -8960, + -8448, -7936, -7424, -6912, + -6400, -5888, -5376, -4864, + -4352, -3840, -3328, -2816, + -2304, -1792, -1280, -768, + -256, 256, 768, 1280, + 1792, 2304, 2816, 3328, + 3840, 4352, 4864, 5376, + 5888, 6400, 6912, 7424, + 7936, 8448, 8960, 9472, + 9984, 10496, 11008, 11520, + 12032, 12544, 13056, 13568, + 13434, 13301, 13167, 13033, + 12900, 12766, 12632, 12499, + 12365, 12231, 12098, 11964, + 11830, 11697, 11563, 11429, + 11296, 11162, 11028, 10895, + 10761, 10627, 10493, 10360, + 10226, 10092, 9959, 9825, + 9691, 9558, 9424, 9290, + 9157, 9023, 8889, 8756, + 8622, 8488, 8355, 8221, + 8087, 7954, 7820, 7686, + 7553, 7419, 7285, 7152, + 7018, 6884, 6751, 6617, + 6483, 6350, 6216, 6082, + 5949, 5815, 5681, 5548, + 5414, 5280, 5146, 5013, + 4879, 4745, 4612, 4478, + 4344, 4211, 4077, 3943, + 3810, 3676, 3542, 3409, + 3275, 3141, 3008, 2874, + 2740, 2607, 2473, 2339, + 2206, 2072, 1938, 1805, + 1671, 1537, 1404, 1270, + 1136, 1003, 869, 735, + 602, 468, 334, 201, + 67, -67, -201, -334, + -468, -602, -735, -869, + -1003, -1136, -1270, -1404, + -1537, -1671, -1805, -1938, + -2072, -2206, -2339, -2473, + -2607, -2740, -2874, -3008, + -3141, -3275, -3409, -3542, + -3676, -3810, -3943, -4077, + -4211, -4344, -4478, -4612, + -4745, -4879, -5013, -5146, + -5280, -5414, -5548, -5681, + -5815, -5949, -6082, -6216, + -6350, -6483, -6617, -6751, + -6884, -7018, -7152, -7285, + -7419, -7553, -7686, -7820, + -7954, -8087, -8221, -8355, + -8488, -8622, -8756, -8889, + -9023, -9157, -9290, -9424, + -9558, -9691, -9825, -9959, + -10092, -10226, -10360, -10493, + -10627, -10761, -10895, -11028, + -11162, -11296, -11429, -11563, + -11697, -11830, -11964, -12098, + -12231, -12365, -12499, -12632, + -12766, -12900, -13033, -13167, + -13301, -13434, -13568, -13056, + -8296, -8372, -8448, -7936, + -7424, -6912, -6400, -5888, + -5376, -4864, -4352, -3840, + -3328, -2816, -2304, -1792, + -1280, -768, -256, 256, + 768, 1280, 1792, 2304, + 2816, 3328, 3840, 4352, + 4864, 5376, 5888, 6400, + 6912, 7424, 7936, 8448, + 8372, 8296, 8221, 8145, + 8069, 7993, 7918, 7842, + 7766, 7690, 7615, 7539, + 7463, 7387, 7311, 7236, + 7160, 7084, 7008, 6933, + 6857, 6781, 6705, 6630, + 6554, 6478, 6402, 6327, + 6251, 6175, 6099, 6023, + 5948, 5872, 5796, 5720, + 5645, 5569, 5493, 5417, + 5342, 5266, 5190, 5114, + 5038, 4963, 4887, 4811, + 4735, 4660, 4584, 4508, + 4432, 4357, 4281, 4205, + 4129, 4054, 3978, 3902, + 3826, 3750, 3675, 3599, + 3523, 3447, 3372, 3296, + 3220, 3144, 3069, 2993, + 2917, 2841, 2765, 2690, + 2614, 2538, 2462, 2387, + 2311, 2235, 2159, 2084, + 2008, 1932, 1856, 1781, + 1705, 1629, 1553, 1477, + 1402, 1326, 1250, 1174, + 1099, 1023, 947, 871, + 796, 720, 644, 568, + 492, 417, 341, 265, + 189, 114, 38, -38, + -114, -189, -265, -341, + -417, -492, -568, -644, + -720, -796, -871, -947, + -1023, -1099, -1174, -1250, + -1326, -1402, -1477, -1553, + -1629, -1705, -1781, -1856, + -1932, -2008, -2084, -2159, + -2235, -2311, -2387, -2462, + -2538, -2614, -2690, -2765, + -2841, -2917, -2993, -3069, + -3144, -3220, -3296, -3372, + -3447, -3523, -3599, -3675, + -3750, -3826, -3902, -3978, + -4054, -4129, -4205, -4281, + -4357, -4432, -4508, -4584, + -4660, -4735, -4811, -4887, + -4963, -5038, -5114, -5190, + -5266, -5342, -5417, -5493, + -5569, -5645, -5720, -5796, + -5872, -5948, -6023, -6099, + -6175, -6251, -6327, -6402, + -6478, -6554, -6630, -6705, + -6781, -6857, -6933, -7008, + -7084, -7160, -7236, -7311, + -7387, -7463, -7539, -7615, + -7690, -7766, -7842, -7918, + -7993, -8069, -8145, -8221, + -8296, -8372, -8448, -7936, + -4279, -4316, -4352, -3840, + -3328, -2816, -2304, -1792, + -1280, -768, -256, 256, + 768, 1280, 1792, 2304, + 2816, 3328, 3840, 4352, + 4316, 4279, 4243, 4206, + 4170, 4133, 4097, 4061, + 4024, 3988, 3951, 3915, + 3879, 3842, 3806, 3769, + 3733, 3696, 3660, 3624, + 3587, 3551, 3514, 3478, + 3442, 3405, 3369, 3332, + 3296, 3259, 3223, 3187, + 3150, 3114, 3077, 3041, + 3005, 2968, 2932, 2895, + 2859, 2822, 2786, 2750, + 2713, 2677, 2640, 2604, + 2567, 2531, 2495, 2458, + 2422, 2385, 2349, 2313, + 2276, 2240, 2203, 2167, + 2130, 2094, 2058, 2021, + 1985, 1948, 1912, 1876, + 1839, 1803, 1766, 1730, + 1693, 1657, 1621, 1584, + 1548, 1511, 1475, 1439, + 1402, 1366, 1329, 1293, + 1256, 1220, 1184, 1147, + 1111, 1074, 1038, 1002, + 965, 929, 892, 856, + 819, 783, 747, 710, + 674, 637, 601, 564, + 528, 492, 455, 419, + 382, 346, 310, 273, + 237, 200, 164, 127, + 91, 55, 18, -18, + -55, -91, -127, -164, + -200, -237, -273, -310, + -346, -382, -419, -455, + -492, -528, -564, -601, + -637, -674, -710, -747, + -783, -819, -856, -892, + -929, -965, -1002, -1038, + -1074, -1111, -1147, -1184, + -1220, -1256, -1293, -1329, + -1366, -1402, -1439, -1475, + -1511, -1548, -1584, -1621, + -1657, -1693, -1730, -1766, + -1803, -1839, -1876, -1912, + -1948, -1985, -2021, -2058, + -2094, -2130, -2167, -2203, + -2240, -2276, -2313, -2349, + -2385, -2422, -2458, -2495, + -2531, -2567, -2604, -2640, + -2677, -2713, -2750, -2786, + -2822, -2859, -2895, -2932, + -2968, -3005, -3041, -3077, + -3114, -3150, -3187, -3223, + -3259, -3296, -3332, -3369, + -3405, -3442, -3478, -3514, + -3551, -3587, -3624, -3660, + -3696, -3733, -3769, -3806, + -3842, -3879, -3915, -3951, + -3988, -4024, -4061, -4097, + -4133, -4170, -4206, -4243, + -4279, -4316, -4352, -3840, + -2267, -2285, -2304, -1792, + -1280, -768, -256, 256, + 768, 1280, 1792, 2304, + 2285, 2267, 2248, 2229, + 2211, 2192, 2173, 2155, + 2136, 2117, 2099, 2080, + 2061, 2043, 2024, 2006, + 1987, 1968, 1950, 1931, + 1912, 1894, 1875, 1856, + 1838, 1819, 1800, 1782, + 1763, 1744, 1726, 1707, + 1688, 1670, 1651, 1632, + 1614, 1595, 1576, 1558, + 1539, 1520, 1502, 1483, + 1464, 1446, 1427, 1409, + 1390, 1371, 1353, 1334, + 1315, 1297, 1278, 1259, + 1241, 1222, 1203, 1185, + 1166, 1147, 1129, 1110, + 1091, 1073, 1054, 1035, + 1017, 998, 979, 961, + 942, 923, 905, 886, + 867, 849, 830, 812, + 793, 774, 756, 737, + 718, 700, 681, 662, + 644, 625, 606, 588, + 569, 550, 532, 513, + 494, 476, 457, 438, + 420, 401, 382, 364, + 345, 326, 308, 289, + 271, 252, 233, 215, + 196, 177, 159, 140, + 121, 103, 84, 65, + 47, 28, 9, -9, + -28, -47, -65, -84, + -103, -121, -140, -159, + -177, -196, -215, -233, + -252, -271, -289, -308, + -326, -345, -364, -382, + -401, -420, -438, -457, + -476, -494, -513, -532, + -550, -569, -588, -606, + -625, -644, -662, -681, + -700, -718, -737, -756, + -774, -793, -812, -830, + -849, -867, -886, -905, + -923, -942, -961, -979, + -998, -1017, -1035, -1054, + -1073, -1091, -1110, -1129, + -1147, -1166, -1185, -1203, + -1222, -1241, -1259, -1278, + -1297, -1315, -1334, -1353, + -1371, -1390, -1409, -1427, + -1446, -1464, -1483, -1502, + -1520, -1539, -1558, -1576, + -1595, -1614, -1632, -1651, + -1670, -1688, -1707, -1726, + -1744, -1763, -1782, -1800, + -1819, -1838, -1856, -1875, + -1894, -1912, -1931, -1950, + -1968, -1987, -2006, -2024, + -2043, -2061, -2080, -2099, + -2117, -2136, -2155, -2173, + -2192, -2211, -2229, -2248, + -2267, -2285, -2304, -1792, + -26670, -26970, -27178, -27286, + -27286, -27178, -26970, -26670, + -26294, -25859, -25383, -24885, + -24380, -23881, -23397, -22931, + -22485, -22056, -21638, -21224, + -20807, -20382, -19944, -19490, + -19020, -18536, -18042, -17542, + -17041, -16543, -16051, -15567, + -15090, -14620, -14153, -13687, + -13217, -12742, -12259, -11768, + -11268, -10761, -10251, -9739, + -9228, -8722, -8221, -7726, + -7237, -6754, -6272, -5792, + -5310, -4825, -4336, -3842, + -3345, -2846, -2346, -1849, + -1356, -868, -388, 85, + 552, 1013, 1471, 1926, + 2381, 2836, 3292, 3749, + 4205, 4660, 5111, 5557, + 5996, 6427, 6849, 7263, + 7669, 8068, 8462, 8851, + 9238, 9623, 10005, 10385, + 10761, 11133, 11497, 11854, + 12201, 12538, 12864, 13181, + 13488, 13787, 14079, 14365, + 14647, 14925, 15197, 15465, + 15726, 15980, 16225, 16459, + 16682, 16893, 17092, 17280, + 17458, 17627, 17788, 17943, + 18091, 18234, 18370, 18500, + 18621, 18733, 18834, 18923, + 19000, 19064, 19116, 19157, + 19187, 19208, 19222, 19228, + 19228, 19222, 19208, 19187, + 19157, 19116, 19064, 19000, + 18923, 18834, 18733, 18621, + 18500, 18370, 18234, 18091, + 17943, 17788, 17627, 17458, + 17280, 17092, 16893, 16682, + 16459, 16225, 15980, 15726, + 15465, 15197, 14925, 14647, + 14365, 14079, 13787, 13488, + 13181, 12864, 12538, 12201, + 11854, 11497, 11133, 10761, + 10385, 10005, 9623, 9238, + 8851, 8462, 8068, 7669, + 7263, 6849, 6427, 5996, + 5557, 5111, 4660, 4205, + 3749, 3292, 2836, 2381, + 1926, 1471, 1013, 552, + 85, -388, -868, -1356, + -1849, -2346, -2846, -3345, + -3842, -4336, -4825, -5310, + -5792, -6272, -6754, -7237, + -7726, -8221, -8722, -9228, + -9739, -10251, -10761, -11268, + -11768, -12259, -12742, -13217, + -13687, -14153, -14620, -15090, + -15567, -16051, -16543, -17041, + -17542, -18042, -18536, -19020, + -19490, -19944, -20382, -20807, + -21224, -21638, -22056, -22485, + -22931, -23397, -23881, -24380, + -24885, -25383, -25859, -26294, + -26670, -26970, -27178, -27286, + -23745, -23921, -24006, -24028, + -24028, -24006, -23921, -23745, + -23469, -23099, -22658, -22173, + -21675, -21189, -20730, -20307, + -19919, -19559, -19217, -18882, + -18544, -18191, -17815, -17412, + -16981, -16524, -16047, -15559, + -15069, -14585, -14112, -13654, + -13211, -12778, -12353, -11928, + -11498, -11057, -10601, -10129, + -9641, -9140, -8631, -8119, + -7610, -7109, -6619, -6141, + -5674, -5217, -4765, -4314, + -3861, -3401, -2933, -2457, + -1975, -1488, -1001, -517, + -43, 421, 872, 1309, + 1735, 2151, 2559, 2964, + 3368, 3773, 4179, 4587, + 4994, 5398, 5795, 6184, + 6560, 6923, 7271, 7605, + 7927, 8238, 8540, 8837, + 9129, 9418, 9704, 9986, + 10262, 10532, 10791, 11039, + 11275, 11496, 11705, 11900, + 12084, 12259, 12426, 12586, + 12741, 12891, 13037, 13177, + 13310, 13436, 13552, 13659, + 13756, 13843, 13921, 13990, + 14052, 14108, 14159, 14205, + 14248, 14288, 14324, 14357, + 14386, 14410, 14430, 14446, + 14457, 14465, 14471, 14474, + 14476, 14476, 14477, 14477, + 14477, 14477, 14476, 14476, + 14474, 14471, 14465, 14457, + 14446, 14430, 14410, 14386, + 14357, 14324, 14288, 14248, + 14205, 14159, 14108, 14052, + 13990, 13921, 13843, 13756, + 13659, 13552, 13436, 13310, + 13177, 13037, 12891, 12741, + 12586, 12426, 12259, 12084, + 11900, 11705, 11496, 11275, + 11039, 10791, 10532, 10262, + 9986, 9704, 9418, 9129, + 8837, 8540, 8238, 7927, + 7605, 7271, 6923, 6560, + 6184, 5795, 5398, 4994, + 4587, 4179, 3773, 3368, + 2964, 2559, 2151, 1735, + 1309, 872, 421, -43, + -517, -1001, -1488, -1975, + -2457, -2933, -3401, -3861, + -4314, -4765, -5217, -5674, + -6141, -6619, -7109, -7610, + -8119, -8631, -9140, -9641, + -10129, -10601, -11057, -11498, + -11928, -12353, -12778, -13211, + -13654, -14112, -14585, -15069, + -15559, -16047, -16524, -16981, + -17412, -17815, -18191, -18544, + -18882, -19217, -19559, -19919, + -20307, -20730, -21189, -21675, + -22173, -22658, -23099, -23469, + -23745, -23921, -24006, -24028, + -19699, -19759, -19774, -19775, + -19775, -19774, -19759, -19699, + -19550, -19284, -18903, -18444, + -17960, -17498, -17087, -16737, + -16443, -16189, -15961, -15743, + -15519, -15275, -15000, -14683, + -14320, -13912, -13468, -13003, + -12534, -12075, -11639, -11229, + -10845, -10480, -10127, -9774, + -9412, -9032, -8627, -8192, + -7727, -7237, -6730, -6218, + -5712, -5222, -4753, -4307, + -3882, -3473, -3074, -2677, + -2275, -1863, -1436, -993, + -538, -75, 389, 844, + 1285, 1705, 2102, 2475, + 2829, 3167, 3493, 3813, + 4132, 4452, 4774, 5098, + 5422, 5741, 6049, 6344, + 6621, 6878, 7115, 7333, + 7535, 7724, 7902, 8074, + 8241, 8404, 8563, 8719, + 8868, 9010, 9141, 9262, + 9370, 9466, 9551, 9625, + 9691, 9751, 9805, 9856, + 9903, 9947, 9988, 10026, + 10061, 10092, 10118, 10141, + 10159, 10174, 10186, 10195, + 10202, 10209, 10214, 10218, + 10221, 10225, 10227, 10229, + 10231, 10232, 10233, 10233, + 10233, 10234, 10234, 10234, + 10234, 10234, 10234, 10234, + 10234, 10234, 10234, 10234, + 10234, 10234, 10234, 10233, + 10233, 10233, 10232, 10231, + 10229, 10227, 10225, 10221, + 10218, 10214, 10209, 10202, + 10195, 10186, 10174, 10159, + 10141, 10118, 10092, 10061, + 10026, 9988, 9947, 9903, + 9856, 9805, 9751, 9691, + 9625, 9551, 9466, 9370, + 9262, 9141, 9010, 8868, + 8719, 8563, 8404, 8241, + 8074, 7902, 7724, 7535, + 7333, 7115, 6878, 6621, + 6344, 6049, 5741, 5422, + 5098, 4774, 4452, 4132, + 3813, 3493, 3167, 2829, + 2475, 2102, 1705, 1285, + 844, 389, -75, -538, + -993, -1436, -1863, -2275, + -2677, -3074, -3473, -3882, + -4307, -4753, -5222, -5712, + -6218, -6730, -7237, -7727, + -8192, -8627, -9032, -9412, + -9774, -10127, -10480, -10845, + -11229, -11639, -12075, -12534, + -13003, -13468, -13912, -14320, + -14683, -15000, -15275, -15519, + -15743, -15961, -16189, -16443, + -16737, -17087, -17498, -17960, + -18444, -18903, -19284, -19550, + -19699, -19759, -19774, -19775, + -14767, -14774, -14775, -14775, + -14775, -14775, -14774, -14767, + -14724, -14585, -14302, -13891, + -13433, -13016, -12687, -12448, + -12278, -12153, -12051, -11958, + -11860, -11744, -11596, -11400, + -11142, -10817, -10432, -10010, + -9580, -9170, -8798, -8470, + -8181, -7921, -7677, -7434, + -7179, -6897, -6576, -6206, + -5784, -5315, -4814, -4302, + -3802, -3332, -2902, -2513, + -2161, -1835, -1524, -1216, + -900, -568, -212, 171, + 576, 994, 1414, 1820, + 2198, 2543, 2850, 3123, + 3368, 3590, 3798, 3999, + 4197, 4397, 4600, 4805, + 5009, 5208, 5394, 5564, + 5713, 5842, 5952, 6045, + 6124, 6194, 6256, 6314, + 6368, 6420, 6470, 6517, + 6561, 6600, 6634, 6662, + 6685, 6703, 6717, 6728, + 6736, 6743, 6749, 6754, + 6758, 6762, 6765, 6768, + 6771, 6772, 6774, 6775, + 6775, 6776, 6776, 6776, + 6776, 6777, 6777, 6777, + 6777, 6777, 6777, 6777, + 6777, 6777, 6777, 6777, + 6777, 6777, 6777, 6777, + 6777, 6777, 6777, 6777, + 6777, 6777, 6777, 6777, + 6777, 6777, 6777, 6777, + 6777, 6777, 6777, 6777, + 6777, 6777, 6777, 6777, + 6777, 6777, 6777, 6776, + 6776, 6776, 6776, 6775, + 6775, 6774, 6772, 6771, + 6768, 6765, 6762, 6758, + 6754, 6749, 6743, 6736, + 6728, 6717, 6703, 6685, + 6662, 6634, 6600, 6561, + 6517, 6470, 6420, 6368, + 6314, 6256, 6194, 6124, + 6045, 5952, 5842, 5713, + 5564, 5394, 5208, 5009, + 4805, 4600, 4397, 4197, + 3999, 3798, 3590, 3368, + 3123, 2850, 2543, 2198, + 1820, 1414, 994, 576, + 171, -212, -568, -900, + -1216, -1524, -1835, -2161, + -2513, -2902, -3332, -3802, + -4302, -4814, -5315, -5784, + -6206, -6576, -6897, -7179, + -7434, -7677, -7921, -8181, + -8470, -8798, -9170, -9580, + -10010, -10432, -10817, -11142, + -11400, -11596, -11744, -11860, + -11958, -12051, -12153, -12278, + -12448, -12687, -13016, -13433, + -13891, -14302, -14585, -14724, + -14767, -14774, -14775, -14775, + -9682, -9682, -9682, -9682, + -9682, -9682, -9682, -9682, + -9679, -9641, -9484, -9155, + -8745, -8405, -8193, -8082, + -8025, -7995, -7975, -7958, + -7939, -7913, -7870, -7795, + -7665, -7459, -7170, -6821, + -6459, -6131, -5861, -5651, + -5488, -5356, -5240, -5125, + -4997, -4842, -4641, -4374, + -4026, -3596, -3105, -2593, + -2105, -1673, -1312, -1018, + -775, -567, -378, -193, + 1, 217, 465, 750, + 1071, 1413, 1757, 2078, + 2359, 2590, 2775, 2921, + 3037, 3134, 3218, 3297, + 3374, 3452, 3532, 3614, + 3696, 3773, 3841, 3897, + 3941, 3973, 3996, 4013, + 4026, 4035, 4043, 4049, + 4055, 4060, 4065, 4070, + 4073, 4076, 4078, 4080, + 4081, 4082, 4082, 4082, + 4082, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4083, + 4083, 4083, 4083, 4082, + 4082, 4082, 4082, 4081, + 4080, 4078, 4076, 4073, + 4070, 4065, 4060, 4055, + 4049, 4043, 4035, 4026, + 4013, 3996, 3973, 3941, + 3897, 3841, 3773, 3696, + 3614, 3532, 3452, 3374, + 3297, 3218, 3134, 3037, + 2921, 2775, 2590, 2359, + 2078, 1757, 1413, 1071, + 750, 465, 217, 1, + -193, -378, -567, -775, + -1018, -1312, -1673, -2105, + -2593, -3105, -3596, -4026, + -4374, -4641, -4842, -4997, + -5125, -5240, -5356, -5488, + -5651, -5861, -6131, -6459, + -6821, -7170, -7459, -7665, + -7795, -7870, -7913, -7939, + -7958, -7975, -7995, -8025, + -8082, -8193, -8405, -8745, + -9155, -9484, -9641, -9679, + -9682, -9682, -9682, -9682, + -5442, -5442, -5442, -5442, + -5442, -5442, -5442, -5442, + -5442, -5440, -5392, -5180, + -4852, -4626, -4538, -4514, + -4508, -4506, -4505, -4505, + -4504, -4503, -4499, -4488, + -4455, -4372, -4209, -3971, + -3716, -3505, -3363, -3277, + -3225, -3191, -3165, -3139, + -3107, -3060, -2981, -2841, + -2605, -2244, -1774, -1262, + -796, -433, -178, -8, + 107, 191, 261, 328, + 401, 492, 612, 771, + 972, 1201, 1432, 1634, + 1787, 1892, 1959, 2000, + 2027, 2045, 2059, 2071, + 2082, 2094, 2107, 2120, + 2133, 2145, 2154, 2160, + 2164, 2166, 2167, 2167, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2168, 2168, 2168, 2168, + 2167, 2167, 2166, 2164, + 2160, 2154, 2145, 2133, + 2120, 2107, 2094, 2082, + 2071, 2059, 2045, 2027, + 2000, 1959, 1892, 1787, + 1634, 1432, 1201, 972, + 771, 612, 492, 401, + 328, 261, 191, 107, + -8, -178, -433, -796, + -1262, -1774, -2244, -2605, + -2841, -2981, -3060, -3107, + -3139, -3165, -3191, -3225, + -3277, -3363, -3505, -3716, + -3971, -4209, -4372, -4455, + -4488, -4499, -4503, -4504, + -4505, -4505, -4506, -4508, + -4514, -4538, -4626, -4852, + -5180, -5392, -5440, -5442, + -5442, -5442, -5442, -5442, + -2672, -2672, -2672, -2672, + -2672, -2672, -2672, -2672, + -2672, -2672, -2667, -2580, + -2370, -2270, -2255, -2254, + -2254, -2254, -2254, -2254, + -2254, -2254, -2254, -2254, + -2251, -2238, -2186, -2076, + -1948, -1862, -1822, -1808, + -1802, -1800, -1799, -1797, + -1796, -1791, -1779, -1741, + -1632, -1378, -946, -434, + -10, 248, 375, 431, + 457, 471, 480, 489, + 500, 516, 544, 593, + 672, 775, 879, 958, + 1004, 1026, 1034, 1038, + 1039, 1040, 1040, 1040, + 1041, 1041, 1041, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, + 1042, 1041, 1041, 1041, + 1040, 1040, 1040, 1039, + 1038, 1034, 1026, 1004, + 958, 879, 775, 672, + 593, 544, 516, 500, + 489, 480, 471, 457, + 431, 375, 248, -10, + -434, -946, -1378, -1632, + -1741, -1779, -1791, -1796, + -1797, -1799, -1800, -1802, + -1808, -1822, -1862, -1948, + -2076, -2186, -2238, -2251, + -2254, -2254, -2254, -2254, + -2254, -2254, -2254, -2254, + -2254, -2255, -2270, -2370, + -2580, -2667, -2672, -2672, + -2672, -2672, -2672, -2672, + -1301, -1301, -1301, -1301, + -1301, -1301, -1301, -1301, + -1301, -1301, -1301, -1286, + -1200, -1180, -1180, -1180, + -1180, -1180, -1180, -1180, + -1180, -1180, -1180, -1180, + -1180, -1179, -1174, -1150, + -1119, -1104, -1101, -1101, + -1100, -1100, -1100, -1100, + -1100, -1100, -1100, -1097, + -1074, -948, -584, -72, + 280, 410, 441, 447, + 448, 449, 449, 449, + 449, 450, 451, 456, + 468, 489, 510, 522, + 526, 527, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 528, 528, + 528, 528, 527, 526, + 522, 510, 489, 468, + 456, 451, 450, 449, + 449, 449, 449, 448, + 447, 441, 410, 280, + -72, -584, -948, -1074, + -1097, -1100, -1100, -1100, + -1100, -1100, -1100, -1100, + -1101, -1101, -1104, -1119, + -1150, -1174, -1179, -1180, + -1180, -1180, -1180, -1180, + -1180, -1180, -1180, -1180, + -1180, -1180, -1180, -1200, + -1286, -1301, -1301, -1301, + -1301, -1301, -1301, -1301, + -12451, -12598, -12712, -12778, + -12778, -12712, -12598, -12451, + -12272, -12055, -11803, -11517, + -11194, -10833, -10441, -10025, + -9587, -9130, -8656, -8170, + -7674, -7168, -6659, -6150, + -5640, -5128, -4619, -4117, + -3625, -3144, -2679, -2234, + -1807, -1394, -998, -620, + -262, 75, 390, 682, + 954, 1205, 1435, 1640, + 1823, 1987, 2132, 2260, + 2373, 2470, 2549, 2608, + 2650, 2679, 2698, 2710, + 2716, 2716, 2708, 2690, + 2663, 2630, 2592, 2553, + 2513, 2472, 2428, 2379, + 2327, 2274, 2220, 2166, + 2115, 2065, 2015, 1965, + 1919, 1876, 1837, 1799, + 1762, 1730, 1702, 1679, + 1664, 1657, 1658, 1664, + 1674, 1689, 1711, 1743, + 1785, 1834, 1887, 1943, + 2004, 2070, 2141, 2218, + 2300, 2385, 2470, 2555, + 2642, 2732, 2824, 2917, + 3011, 3101, 3186, 3269, + 3352, 3437, 3521, 3604, + 3685, 3761, 3831, 3897, + 3960, 4022, 4079, 4132, + 4181, 4224, 4258, 4285, + 4310, 4332, 4346, 4352, + 4352, 4346, 4332, 4310, + 4285, 4258, 4224, 4181, + 4132, 4079, 4022, 3960, + 3897, 3831, 3761, 3685, + 3604, 3521, 3437, 3352, + 3269, 3186, 3101, 3011, + 2917, 2824, 2732, 2642, + 2555, 2470, 2385, 2300, + 2218, 2141, 2070, 2004, + 1943, 1887, 1834, 1785, + 1743, 1711, 1689, 1674, + 1664, 1658, 1657, 1664, + 1679, 1702, 1730, 1762, + 1799, 1837, 1876, 1919, + 1965, 2015, 2065, 2115, + 2166, 2220, 2274, 2327, + 2379, 2428, 2472, 2513, + 2553, 2592, 2630, 2663, + 2690, 2708, 2716, 2716, + 2710, 2698, 2679, 2650, + 2608, 2549, 2470, 2373, + 2260, 2132, 1987, 1823, + 1640, 1435, 1205, 954, + 682, 390, 75, -262, + -620, -998, -1394, -1807, + -2234, -2679, -3144, -3625, + -4117, -4619, -5128, -5640, + -6150, -6659, -7168, -7674, + -8170, -8656, -9130, -9587, + -10025, -10441, -10833, -11194, + -11517, -11803, -12055, -12272, + -12451, -12598, -12712, -12778, + -12242, -12392, -12512, -12584, + -12584, -12512, -12392, -12242, + -12064, -11850, -11595, -11298, + -10957, -10578, -10173, -9753, + -9322, -8874, -8405, -7915, + -7410, -6898, -6389, -5887, + -5389, -4890, -4390, -3890, + -3397, -2917, -2454, -2008, + -1573, -1144, -722, -312, + 82, 460, 822, 1167, + 1500, 1821, 2130, 2426, + 2706, 2969, 3216, 3451, + 3675, 3888, 4088, 4272, + 4440, 4596, 4742, 4876, + 4998, 5106, 5200, 5278, + 5342, 5392, 5430, 5454, + 5464, 5455, 5428, 5387, + 5337, 5276, 5198, 5103, + 4991, 4870, 4741, 4603, + 4456, 4301, 4141, 3975, + 3805, 3636, 3468, 3303, + 3140, 2979, 2820, 2667, + 2520, 2382, 2251, 2129, + 2012, 1898, 1787, 1683, + 1589, 1503, 1421, 1340, + 1259, 1180, 1103, 1028, + 957, 887, 817, 745, + 672, 596, 522, 450, + 379, 307, 230, 152, + 74, 1, -68, -132, + -193, -255, -319, -381, + -435, -481, -519, -552, + -577, -599, -617, -629, + -629, -617, -599, -577, + -552, -519, -481, -435, + -381, -319, -255, -193, + -132, -68, 1, 74, + 152, 230, 307, 379, + 450, 522, 596, 672, + 745, 817, 887, 957, + 1028, 1103, 1180, 1259, + 1340, 1421, 1503, 1589, + 1683, 1787, 1898, 2012, + 2129, 2251, 2382, 2520, + 2667, 2820, 2979, 3140, + 3303, 3468, 3636, 3805, + 3975, 4141, 4301, 4456, + 4603, 4741, 4870, 4991, + 5103, 5198, 5276, 5337, + 5387, 5428, 5455, 5464, + 5454, 5430, 5392, 5342, + 5278, 5200, 5106, 4998, + 4876, 4742, 4596, 4440, + 4272, 4088, 3888, 3675, + 3451, 3216, 2969, 2706, + 2426, 2130, 1821, 1500, + 1167, 822, 460, 82, + -312, -722, -1144, -1573, + -2008, -2454, -2917, -3397, + -3890, -4390, -4890, -5389, + -5887, -6389, -6898, -7410, + -7915, -8405, -8874, -9322, + -9753, -10173, -10578, -10957, + -11298, -11595, -11850, -12064, + -12242, -12392, -12512, -12584, + -8702, -8890, -9039, -9126, + -9126, -9039, -8890, -8702, + -8478, -8212, -7901, -7545, + -7142, -6697, -6222, -5733, + -5234, -4727, -4217, -3705, + -3194, -2689, -2197, -1726, + -1274, -844, -437, -54, + 303, 633, 932, 1202, + 1446, 1667, 1864, 2034, + 2178, 2295, 2386, 2455, + 2507, 2545, 2565, 2566, + 2551, 2522, 2478, 2422, + 2356, 2281, 2193, 2093, + 1987, 1878, 1765, 1648, + 1527, 1403, 1273, 1138, + 1005, 880, 763, 654, + 551, 455, 362, 277, + 204, 145, 104, 81, + 76, 87, 108, 139, + 187, 254, 339, 438, + 552, 678, 815, 958, + 1108, 1263, 1423, 1586, + 1749, 1909, 2063, 2208, + 2344, 2468, 2573, 2661, + 2732, 2786, 2821, 2836, + 2830, 2800, 2743, 2662, + 2561, 2445, 2311, 2161, + 1997, 1820, 1628, 1427, + 1222, 1016, 806, 595, + 385, 179, -23, -218, + -401, -569, -727, -875, + -1012, -1133, -1238, -1324, + -1393, -1445, -1481, -1501, + -1501, -1481, -1445, -1393, + -1324, -1238, -1133, -1012, + -875, -727, -569, -401, + -218, -23, 179, 385, + 595, 806, 1016, 1222, + 1427, 1628, 1820, 1997, + 2161, 2311, 2445, 2561, + 2662, 2743, 2800, 2830, + 2836, 2821, 2786, 2732, + 2661, 2573, 2468, 2344, + 2208, 2063, 1909, 1749, + 1586, 1423, 1263, 1108, + 958, 815, 678, 552, + 438, 339, 254, 187, + 139, 108, 87, 76, + 81, 104, 145, 204, + 277, 362, 455, 551, + 654, 763, 880, 1005, + 1138, 1273, 1403, 1527, + 1648, 1765, 1878, 1987, + 2093, 2193, 2281, 2356, + 2422, 2478, 2522, 2551, + 2566, 2565, 2545, 2507, + 2455, 2386, 2295, 2178, + 2034, 1864, 1667, 1446, + 1202, 932, 633, 303, + -54, -437, -844, -1274, + -1726, -2197, -2689, -3194, + -3705, -4217, -4727, -5234, + -5733, -6222, -6697, -7142, + -7545, -7901, -8212, -8478, + -8702, -8890, -9039, -9126, + -13319, -13432, -13564, -13663, + -13663, -13564, -13432, -13319, + -13219, -13092, -12914, -12691, + -12430, -12139, -11831, -11517, + -11192, -10841, -10458, -10048, + -9618, -9174, -8721, -8266, + -7805, -7331, -6837, -6331, + -5824, -5322, -4823, -4321, + -3812, -3300, -2795, -2306, + -1829, -1358, -890, -433, + 9, 435, 845, 1235, + 1604, 1958, 2303, 2638, + 2954, 3246, 3512, 3753, + 3972, 4178, 4380, 4575, + 4744, 4869, 4954, 5024, + 5099, 5178, 5245, 5285, + 5297, 5281, 5244, 5199, + 5159, 5124, 5079, 5010, + 4916, 4810, 4703, 4600, + 4498, 4394, 4280, 4154, + 4019, 3883, 3755, 3637, + 3524, 3408, 3287, 3167, + 3053, 2948, 2848, 2755, + 2671, 2600, 2536, 2472, + 2409, 2353, 2310, 2278, + 2251, 2223, 2197, 2177, + 2169, 2169, 2173, 2179, + 2187, 2198, 2217, 2244, + 2278, 2311, 2337, 2361, + 2390, 2427, 2470, 2516, + 2561, 2599, 2625, 2639, + 2652, 2678, 2715, 2753, + 2778, 2783, 2774, 2763, + 2763, 2774, 2783, 2778, + 2753, 2715, 2678, 2652, + 2639, 2625, 2599, 2561, + 2516, 2470, 2427, 2390, + 2361, 2337, 2311, 2278, + 2244, 2217, 2198, 2187, + 2179, 2173, 2169, 2169, + 2177, 2197, 2223, 2251, + 2278, 2310, 2353, 2409, + 2472, 2536, 2600, 2671, + 2755, 2848, 2948, 3053, + 3167, 3287, 3408, 3524, + 3637, 3755, 3883, 4019, + 4154, 4280, 4394, 4498, + 4600, 4703, 4810, 4916, + 5010, 5079, 5124, 5159, + 5199, 5244, 5281, 5297, + 5285, 5245, 5178, 5099, + 5024, 4954, 4869, 4744, + 4575, 4380, 4178, 3972, + 3753, 3512, 3246, 2954, + 2638, 2303, 1958, 1604, + 1235, 845, 435, 9, + -433, -890, -1358, -1829, + -2306, -2795, -3300, -3812, + -4321, -4823, -5322, -5824, + -6331, -6837, -7331, -7805, + -8266, -8721, -9174, -9618, + -10048, -10458, -10841, -11192, + -11517, -11831, -12139, -12430, + -12691, -12914, -13092, -13219, + -13319, -13432, -13564, -13663, + -8380, -8806, -9224, -9492, + -9492, -9224, -8806, -8380, + -8011, -7680, -7337, -6941, + -6479, -5969, -5457, -5002, + -4642, -4373, -4158, -3958, + -3761, -3582, -3439, -3337, + -3274, -3250, -3270, -3333, + -3419, -3510, -3591, -3653, + -3685, -3679, -3641, -3587, + -3527, -3458, -3365, -3223, + -3010, -2723, -2382, -2027, + -1688, -1375, -1078, -778, + -462, -132, 192, 481, + 718, 903, 1053, 1188, + 1320, 1445, 1548, 1615, + 1649, 1654, 1638, 1607, + 1568, 1530, 1503, 1495, + 1510, 1542, 1583, 1624, + 1670, 1730, 1814, 1920, + 2040, 2159, 2271, 2376, + 2480, 2586, 2694, 2804, + 2921, 3045, 3169, 3281, + 3371, 3437, 3477, 3500, + 3516, 3533, 3554, 3572, + 3572, 3538, 3464, 3355, + 3227, 3097, 2975, 2861, + 2752, 2633, 2491, 2323, + 2149, 2005, 1919, 1892, + 1901, 1918, 1925, 1925, + 1937, 1980, 2066, 2189, + 2333, 2479, 2614, 2729, + 2826, 2909, 2984, 3057, + 3129, 3194, 3245, 3274, + 3274, 3245, 3194, 3129, + 3057, 2984, 2909, 2826, + 2729, 2614, 2479, 2333, + 2189, 2066, 1980, 1937, + 1925, 1925, 1918, 1901, + 1892, 1919, 2005, 2149, + 2323, 2491, 2633, 2752, + 2861, 2975, 3097, 3227, + 3355, 3464, 3538, 3572, + 3572, 3554, 3533, 3516, + 3500, 3477, 3437, 3371, + 3281, 3169, 3045, 2921, + 2804, 2694, 2586, 2480, + 2376, 2271, 2159, 2040, + 1920, 1814, 1730, 1670, + 1624, 1583, 1542, 1510, + 1495, 1503, 1530, 1568, + 1607, 1638, 1654, 1649, + 1615, 1548, 1445, 1320, + 1188, 1053, 903, 718, + 481, 192, -132, -462, + -778, -1078, -1375, -1688, + -2027, -2382, -2723, -3010, + -3223, -3365, -3458, -3527, + -3587, -3641, -3679, -3685, + -3653, -3591, -3510, -3419, + -3333, -3270, -3250, -3274, + -3337, -3439, -3582, -3761, + -3958, -4158, -4373, -4642, + -5002, -5457, -5969, -6479, + -6941, -7337, -7680, -8011, + -8380, -8806, -9224, -9492, + -8814, -9273, -9685, -9934, + -9934, -9685, -9273, -8814, + -8401, -8075, -7831, -7627, + -7417, -7170, -6886, -6581, + -6262, -5918, -5531, -5088, + -4597, -4085, -3593, -3157, + -2794, -2499, -2247, -2013, + -1779, -1545, -1319, -1108, + -916, -733, -549, -355, + -152, 57, 260, 442, + 588, 689, 737, 741, + 718, 700, 711, 770, + 876, 1017, 1170, 1314, + 1435, 1528, 1594, 1634, + 1654, 1661, 1663, 1668, + 1692, 1751, 1848, 1970, + 2097, 2208, 2294, 2354, + 2403, 2458, 2531, 2619, + 2708, 2780, 2829, 2859, + 2882, 2912, 2960, 3029, + 3114, 3199, 3266, 3298, + 3290, 3249, 3190, 3124, + 3059, 2992, 2916, 2831, + 2742, 2654, 2573, 2496, + 2413, 2309, 2173, 2004, + 1816, 1632, 1468, 1333, + 1219, 1115, 1005, 882, + 750, 626, 531, 474, + 449, 440, 432, 416, + 395, 382, 391, 425, + 478, 538, 591, 629, + 653, 669, 686, 709, + 737, 766, 789, 803, + 803, 789, 766, 737, + 709, 686, 669, 653, + 629, 591, 538, 478, + 425, 391, 382, 395, + 416, 432, 440, 449, + 474, 531, 626, 750, + 882, 1005, 1115, 1219, + 1333, 1468, 1632, 1816, + 2004, 2173, 2309, 2413, + 2496, 2573, 2654, 2742, + 2831, 2916, 2992, 3059, + 3124, 3190, 3249, 3290, + 3298, 3266, 3199, 3114, + 3029, 2960, 2912, 2882, + 2859, 2829, 2780, 2708, + 2619, 2531, 2458, 2403, + 2354, 2294, 2208, 2097, + 1970, 1848, 1751, 1692, + 1668, 1663, 1661, 1654, + 1634, 1594, 1528, 1435, + 1314, 1170, 1017, 876, + 770, 711, 700, 718, + 741, 737, 689, 588, + 442, 260, 57, -152, + -355, -549, -733, -916, + -1108, -1319, -1545, -1779, + -2013, -2247, -2499, -2794, + -3157, -3593, -4085, -4597, + -5088, -5531, -5918, -6262, + -6581, -6886, -7170, -7417, + -7627, -7831, -8075, -8401, + -8814, -9273, -9685, -9934, + -12502, -12761, -13043, -13233, + -13233, -13043, -12761, -12502, + -12325, -12236, -12203, -12161, + -12042, -11815, -11515, -11190, + -10862, -10531, -10199, -9863, + -9505, -9111, -8694, -8281, + -7883, -7497, -7115, -6732, + -6331, -5891, -5409, -4903, + -4391, -3890, -3424, -3016, + -2661, -2323, -1959, -1545, + -1081, -587, -104, 329, + 700, 1032, 1359, 1696, + 2042, 2387, 2720, 3033, + 3333, 3635, 3946, 4259, + 4557, 4829, 5070, 5276, + 5450, 5612, 5782, 5966, + 6156, 6341, 6513, 6662, + 6783, 6878, 6954, 7011, + 7044, 7054, 7057, 7067, + 7083, 7094, 7090, 7066, + 7020, 6951, 6862, 6751, + 6615, 6456, 6288, 6131, + 5996, 5876, 5749, 5594, + 5398, 5160, 4898, 4634, + 4386, 4156, 3937, 3720, + 3494, 3256, 3007, 2756, + 2509, 2262, 2008, 1741, + 1465, 1196, 948, 732, + 541, 355, 159, -52, + -267, -474, -663, -839, + -1007, -1169, -1316, -1434, + -1515, -1567, -1611, -1667, + -1745, -1837, -1922, -1973, + -1973, -1922, -1837, -1745, + -1667, -1611, -1567, -1515, + -1434, -1316, -1169, -1007, + -839, -663, -474, -267, + -52, 159, 355, 541, + 732, 948, 1196, 1465, + 1741, 2008, 2262, 2509, + 2756, 3007, 3256, 3494, + 3720, 3937, 4156, 4386, + 4634, 4898, 5160, 5398, + 5594, 5749, 5876, 5996, + 6131, 6288, 6456, 6615, + 6751, 6862, 6951, 7020, + 7066, 7090, 7094, 7083, + 7067, 7057, 7054, 7044, + 7011, 6954, 6878, 6783, + 6662, 6513, 6341, 6156, + 5966, 5782, 5612, 5450, + 5276, 5070, 4829, 4557, + 4259, 3946, 3635, 3333, + 3033, 2720, 2387, 2042, + 1696, 1359, 1032, 700, + 329, -104, -587, -1081, + -1545, -1959, -2323, -2661, + -3016, -3424, -3890, -4391, + -4903, -5409, -5891, -6331, + -6732, -7115, -7497, -7883, + -8281, -8694, -9111, -9505, + -9863, -10199, -10531, -10862, + -11190, -11515, -11815, -12042, + -12161, -12203, -12236, -12325, + -12502, -12761, -13043, -13233, + -11873, -12028, -12237, -12396, + -12396, -12237, -12028, -11873, + -11783, -11707, -11592, -11405, + -11137, -10814, -10489, -10193, + -9903, -9577, -9201, -8791, + -8363, -7924, -7484, -7048, + -6609, -6152, -5675, -5188, + -4699, -4209, -3711, -3204, + -2692, -2186, -1699, -1230, + -772, -313, 155, 638, + 1122, 1580, 1990, 2364, + 2737, 3131, 3538, 3932, + 4290, 4601, 4878, 5152, + 5447, 5752, 6032, 6266, + 6463, 6643, 6820, 6999, + 7181, 7351, 7483, 7570, + 7636, 7705, 7784, 7855, + 7899, 7907, 7881, 7836, + 7794, 7762, 7723, 7654, + 7546, 7405, 7249, 7095, + 6948, 6794, 6617, 6413, + 6194, 5971, 5743, 5508, + 5261, 4995, 4707, 4406, + 4108, 3819, 3526, 3217, + 2896, 2574, 2254, 1931, + 1606, 1278, 943, 604, + 266, -62, -377, -678, + -967, -1256, -1555, -1864, + -2162, -2435, -2682, -2918, + -3153, -3392, -3628, -3844, + -4025, -4172, -4307, -4448, + -4594, -4730, -4840, -4923, + -4982, -5024, -5052, -5067, + -5067, -5052, -5024, -4982, + -4923, -4840, -4730, -4594, + -4448, -4307, -4172, -4025, + -3844, -3628, -3392, -3153, + -2918, -2682, -2435, -2162, + -1864, -1555, -1256, -967, + -678, -377, -62, 266, + 604, 943, 1278, 1606, + 1931, 2254, 2574, 2896, + 3217, 3526, 3819, 4108, + 4406, 4707, 4995, 5261, + 5508, 5743, 5971, 6194, + 6413, 6617, 6794, 6948, + 7095, 7249, 7405, 7546, + 7654, 7723, 7762, 7794, + 7836, 7881, 7907, 7899, + 7855, 7784, 7705, 7636, + 7570, 7483, 7351, 7181, + 6999, 6820, 6643, 6463, + 6266, 6032, 5752, 5447, + 5152, 4878, 4601, 4290, + 3932, 3538, 3131, 2737, + 2364, 1990, 1580, 1122, + 638, 155, -313, -772, + -1230, -1699, -2186, -2692, + -3204, -3711, -4209, -4699, + -5188, -5675, -6152, -6609, + -7048, -7484, -7924, -8363, + -8791, -9201, -9577, -9903, + -10193, -10489, -10814, -11137, + -11405, -11592, -11707, -11783, + -11873, -12028, -12237, -12396, + -3082, -3584, -4096, -4440, + -4440, -4096, -3584, -3082, + -2643, -2240, -1863, -1518, + -1184, -825, -438, -50, + 331, 714, 1096, 1446, + 1734, 1943, 2063, 2092, + 2040, 1930, 1786, 1626, + 1464, 1307, 1138, 940, + 723, 516, 340, 195, + 84, 22, 16, 51, + 103, 157, 203, 229, + 233, 230, 232, 236, + 225, 201, 179, 170, + 158, 120, 43, -65, + -183, -297, -392, -455, + -486, -504, -534, -592, + -672, -758, -834, -881, + -877, -813, -707, -590, + -478, -372, -273, -196, + -144, -104, -53, 14, + 91, 167, 236, 301, + 367, 438, 514, 590, + 657, 709, 740, 754, + 766, 789, 820, 836, + 826, 807, 804, 819, + 828, 809, 764, 710, + 663, 628, 605, 590, + 574, 546, 491, 401, + 280, 151, 37, -50, + -117, -177, -246, -335, + -442, -554, -650, -722, + -776, -824, -877, -942, + -1019, -1101, -1172, -1213, + -1213, -1172, -1101, -1019, + -942, -877, -824, -776, + -722, -650, -554, -442, + -335, -246, -177, -117, + -50, 37, 151, 280, + 401, 491, 546, 574, + 590, 605, 628, 663, + 710, 764, 809, 828, + 819, 804, 807, 826, + 836, 820, 789, 766, + 754, 740, 709, 657, + 590, 514, 438, 367, + 301, 236, 167, 91, + 14, -53, -104, -144, + -196, -273, -372, -478, + -590, -707, -813, -877, + -881, -834, -758, -672, + -592, -534, -504, -486, + -455, -392, -297, -183, + -65, 43, 120, 158, + 170, 179, 201, 225, + 236, 232, 230, 233, + 229, 203, 157, 103, + 51, 16, 22, 84, + 195, 340, 516, 723, + 940, 1138, 1307, 1464, + 1626, 1786, 1930, 2040, + 2092, 2063, 1943, 1734, + 1446, 1096, 714, 331, + -50, -438, -825, -1184, + -1518, -1863, -2240, -2643, + -3082, -3584, -4096, -4440, + -3159, -3609, -4121, -4487, + -4487, -4121, -3609, -3159, + -2814, -2527, -2275, -2061, + -1856, -1632, -1401, -1192, + -1007, -839, -675, -472, + -160, 273, 733, 1105, + 1357, 1526, 1631, 1669, + 1654, 1624, 1587, 1525, + 1439, 1363, 1322, 1308, + 1308, 1313, 1306, 1268, + 1194, 1094, 973, 825, + 663, 505, 351, 184, + 6, -158, -290, -391, + -460, -494, -501, -505, + -519, -527, -515, -484, + -442, -391, -340, -308, + -305, -320, -332, -318, + -263, -160, -26, 111, + 231, 328, 402, 451, + 483, 515, 553, 591, + 623, 651, 678, 704, + 738, 792, 869, 957, + 1049, 1141, 1216, 1254, + 1252, 1229, 1196, 1143, + 1067, 992, 943, 913, + 871, 804, 720, 631, + 546, 472, 410, 351, + 279, 188, 75, -61, + -215, -363, -482, -569, + -636, -691, -741, -796, + -858, -914, -945, -953, + -957, -969, -997, -1050, + -1131, -1225, -1300, -1338, + -1338, -1300, -1225, -1131, + -1050, -997, -969, -957, + -953, -945, -914, -858, + -796, -741, -691, -636, + -569, -482, -363, -215, + -61, 75, 188, 279, + 351, 410, 472, 546, + 631, 720, 804, 871, + 913, 943, 992, 1067, + 1143, 1196, 1229, 1252, + 1254, 1216, 1141, 1049, + 957, 869, 792, 738, + 704, 678, 651, 623, + 591, 553, 515, 483, + 451, 402, 328, 231, + 111, -26, -160, -263, + -318, -332, -320, -305, + -308, -340, -391, -442, + -484, -515, -527, -519, + -505, -501, -494, -460, + -391, -290, -158, 6, + 184, 351, 505, 663, + 825, 973, 1094, 1194, + 1268, 1306, 1313, 1308, + 1308, 1322, 1363, 1439, + 1525, 1587, 1624, 1654, + 1669, 1631, 1526, 1357, + 1105, 733, 273, -160, + -472, -675, -839, -1007, + -1192, -1401, -1632, -1856, + -2061, -2275, -2527, -2814, + -3159, -3609, -4121, -4487, + -2422, -2934, -3439, -3773, + -3773, -3439, -2934, -2422, + -1961, -1543, -1166, -832, + -514, -182, 159, 488, + 800, 1091, 1343, 1532, + 1655, 1715, 1697, 1590, + 1407, 1177, 920, 654, + 395, 144, -118, -409, + -724, -1044, -1349, -1590, + -1691, -1613, -1400, -1145, + -905, -686, -487, -317, + -174, -34, 121, 283, + 440, 595, 750, 891, + 999, 1067, 1093, 1075, + 1016, 937, 857, 782, + 706, 622, 524, 403, + 263, 118, -8, -95, + -132, -113, -50, 38, + 133, 227, 308, 368, + 403, 429, 461, 506, + 556, 605, 650, 681, + 690, 676, 648, 616, + 586, 556, 527, 496, + 454, 393, 303, 182, + 47, -82, -194, -286, + -354, -395, -406, -398, + -381, -359, -330, -304, + -291, -289, -288, -281, + -269, -257, -242, -217, + -186, -157, -144, -145, + -151, -152, -147, -139, + -135, -138, -158, -204, + -277, -358, -424, -458, + -458, -424, -358, -277, + -204, -158, -138, -135, + -139, -147, -152, -151, + -145, -144, -157, -186, + -217, -242, -257, -269, + -281, -288, -289, -291, + -304, -330, -359, -381, + -398, -406, -395, -354, + -286, -194, -82, 47, + 182, 303, 393, 454, + 496, 527, 556, 586, + 616, 648, 676, 690, + 681, 650, 605, 556, + 506, 461, 429, 403, + 368, 308, 227, 133, + 38, -50, -113, -132, + -95, -8, 118, 263, + 403, 524, 622, 706, + 782, 857, 937, 1016, + 1075, 1093, 1067, 999, + 891, 750, 595, 440, + 283, 121, -34, -174, + -317, -487, -686, -905, + -1145, -1400, -1613, -1691, + -1590, -1349, -1044, -724, + -409, -118, 144, 395, + 654, 920, 1177, 1407, + 1590, 1697, 1715, 1655, + 1532, 1343, 1091, 800, + 488, 159, -182, -514, + -832, -1166, -1543, -1961, + -2422, -2934, -3439, -3773, + -3328, -3840, -4333, -4651, + -4651, -4333, -3840, -3328, + -2864, -2446, -2064, -1715, + -1382, -1042, -693, -347, + -8, 338, 698, 1066, + 1424, 1746, 2000, 2161, + 2224, 2201, 2110, 1982, + 1856, 1755, 1669, 1572, + 1444, 1282, 1093, 889, + 693, 530, 406, 304, + 201, 86, -44, -182, + -320, -445, -558, -664, + -777, -907, -1062, -1219, + -1326, -1337, -1257, -1134, + -1008, -881, -744, -601, + -471, -359, -264, -187, + -134, -94, -44, 33, + 138, 262, 391, 510, + 602, 661, 687, 682, + 652, 611, 568, 532, + 506, 496, 501, 517, + 538, 569, 614, 671, + 726, 771, 804, 826, + 831, 811, 767, 703, + 628, 552, 483, 425, + 371, 312, 236, 141, + 36, -65, -154, -230, + -297, -360, -414, -456, + -488, -512, -527, -528, + -515, -490, -456, -416, + -367, -308, -239, -165, + -91, -27, 15, 26, + 10, -17, -39, -49, + -49, -39, -17, 10, + 26, 15, -27, -91, + -165, -239, -308, -367, + -416, -456, -490, -515, + -528, -527, -512, -488, + -456, -414, -360, -297, + -230, -154, -65, 36, + 141, 236, 312, 371, + 425, 483, 552, 628, + 703, 767, 811, 831, + 826, 804, 771, 726, + 671, 614, 569, 538, + 517, 501, 496, 506, + 532, 568, 611, 652, + 682, 687, 661, 602, + 510, 391, 262, 138, + 33, -44, -94, -134, + -187, -264, -359, -471, + -601, -744, -881, -1008, + -1134, -1257, -1337, -1326, + -1219, -1062, -907, -777, + -664, -558, -445, -320, + -182, -44, 86, 201, + 304, 406, 530, 693, + 889, 1093, 1282, 1444, + 1572, 1669, 1755, 1856, + 1982, 2110, 2201, 2224, + 2161, 2000, 1746, 1424, + 1066, 698, 338, -8, + -347, -693, -1042, -1382, + -1715, -2064, -2446, -2864, + -3328, -3840, -4333, -4651, + -2952, -3464, -3936, -4234, + -4234, -3936, -3464, -2952, + -2462, -2008, -1604, -1260, + -952, -641, -305, 55, + 431, 814, 1185, 1524, + 1811, 2031, 2166, 2208, + 2162, 2045, 1875, 1674, + 1467, 1270, 1080, 888, + 698, 519, 358, 224, + 133, 94, 102, 141, + 198, 254, 291, 308, + 325, 365, 429, 503, + 570, 615, 618, 562, + 438, 258, 46, -174, + -383, -567, -722, -849, + -954, -1055, -1175, -1330, + -1515, -1715, -1910, -2067, + -2136, -2073, -1877, -1598, + -1294, -1005, -741, -504, + -292, -99, 86, 272, + 464, 658, 844, 1013, + 1158, 1275, 1363, 1424, + 1457, 1455, 1415, 1341, + 1241, 1121, 983, 833, + 680, 537, 414, 314, + 235, 175, 130, 101, + 82, 66, 47, 24, + -4, -32, -55, -66, + -64, -51, -34, -19, + -10, -17, -45, -88, + -134, -177, -216, -245, + -260, -267, -279, -306, + -351, -409, -464, -500, + -500, -464, -409, -351, + -306, -279, -267, -260, + -245, -216, -177, -134, + -88, -45, -17, -10, + -19, -34, -51, -64, + -66, -55, -32, -4, + 24, 47, 66, 82, + 101, 130, 175, 235, + 314, 414, 537, 680, + 833, 983, 1121, 1241, + 1341, 1415, 1455, 1457, + 1424, 1363, 1275, 1158, + 1013, 844, 658, 464, + 272, 86, -99, -292, + -504, -741, -1005, -1294, + -1598, -1877, -2073, -2136, + -2067, -1910, -1715, -1515, + -1330, -1175, -1055, -954, + -849, -722, -567, -383, + -174, 46, 258, 438, + 562, 618, 615, 570, + 503, 429, 365, 325, + 308, 291, 254, 198, + 141, 102, 94, 133, + 224, 358, 519, 698, + 888, 1080, 1270, 1467, + 1674, 1875, 2045, 2162, + 2208, 2166, 2031, 1811, + 1524, 1185, 814, 431, + 55, -305, -641, -952, + -1260, -1604, -2008, -2462, + -2952, -3464, -3936, -4234, + -2707, -3219, -3729, -4067, + -4067, -3729, -3219, -2707, + -2252, -1842, -1474, -1162, + -891, -622, -332, -26, + 287, 604, 916, 1209, + 1467, 1677, 1817, 1870, + 1839, 1742, 1592, 1404, + 1199, 997, 804, 616, + 439, 281, 148, 38, + -40, -78, -84, -77, + -75, -79, -90, -111, + -135, -143, -125, -84, + -36, 10, 41, 49, + 33, 0, -40, -81, + -110, -116, -93, -49, + 10, 77, 135, 160, + 138, 77, -2, -85, + -160, -217, -249, -259, + -259, -262, -276, -303, + -333, -353, -360, -361, + -366, -378, -404, -449, + -502, -515, -438, -257, + -6, 258, 496, 691, + 837, 934, 981, 986, + 964, 937, 922, 926, + 942, 963, 981, 983, + 955, 889, 786, 649, + 485, 307, 133, -20, + -144, -237, -296, -326, + -341, -357, -387, -431, + -477, -511, -520, -504, + -469, -427, -394, -382, + -392, -416, -439, -452, + -452, -439, -416, -392, + -382, -394, -427, -469, + -504, -520, -511, -477, + -431, -387, -357, -341, + -326, -296, -237, -144, + -20, 133, 307, 485, + 649, 786, 889, 955, + 983, 981, 963, 942, + 926, 922, 937, 964, + 986, 981, 934, 837, + 691, 496, 258, -6, + -257, -438, -515, -502, + -449, -404, -378, -366, + -361, -360, -353, -333, + -303, -276, -262, -259, + -259, -249, -217, -160, + -85, -2, 77, 138, + 160, 135, 77, 10, + -49, -93, -116, -110, + -81, -40, 0, 33, + 49, 41, 10, -36, + -84, -125, -143, -135, + -111, -90, -79, -75, + -77, -84, -78, -40, + 38, 148, 281, 439, + 616, 804, 997, 1199, + 1404, 1592, 1742, 1839, + 1870, 1817, 1677, 1467, + 1209, 916, 604, 287, + -26, -332, -622, -891, + -1162, -1474, -1842, -2252, + -2707, -3219, -3729, -4067, + -2931, -3443, -3948, -4281, + -4281, -3948, -3443, -2931, + -2464, -2026, -1612, -1247, + -925, -614, -292, 39, + 376, 717, 1052, 1359, + 1617, 1807, 1911, 1914, + 1827, 1675, 1483, 1266, + 1038, 812, 589, 362, + 134, -83, -276, -433, + -537, -576, -558, -512, + -464, -422, -389, -363, + -339, -304, -247, -170, + -84, 1, 76, 129, + 152, 145, 116, 74, + 29, -5, -17, -5, + 22, 49, 61, 41, + -12, -81, -139, -164, + -139, -57, 80, 255, + 443, 622, 779, 904, + 1002, 1092, 1192, 1307, + 1425, 1530, 1606, 1638, + 1613, 1536, 1426, 1304, + 1179, 1047, 898, 723, + 518, 290, 47, -210, + -473, -728, -963, -1182, + -1393, -1576, -1678, -1660, + -1541, -1374, -1204, -1042, + -883, -730, -585, -445, + -306, -169, -34, 100, + 234, 353, 438, 486, + 502, 491, 454, 394, + 315, 220, 108, -15, + -138, -245, -325, -367, + -367, -325, -245, -138, + -15, 108, 220, 315, + 394, 454, 491, 502, + 486, 438, 353, 234, + 100, -34, -169, -306, + -445, -585, -730, -883, + -1042, -1204, -1374, -1541, + -1660, -1678, -1576, -1393, + -1182, -963, -728, -473, + -210, 47, 290, 518, + 723, 898, 1047, 1179, + 1304, 1426, 1536, 1613, + 1638, 1606, 1530, 1425, + 1307, 1192, 1092, 1002, + 904, 779, 622, 443, + 255, 80, -57, -139, + -164, -139, -81, -12, + 41, 61, 49, 22, + -5, -17, -5, 29, + 74, 116, 145, 152, + 129, 76, 1, -84, + -170, -247, -304, -339, + -363, -389, -422, -464, + -512, -558, -576, -537, + -433, -276, -83, 134, + 362, 589, 812, 1038, + 1266, 1483, 1675, 1827, + 1914, 1911, 1807, 1617, + 1359, 1052, 717, 376, + 39, -292, -614, -925, + -1247, -1612, -2026, -2464, + -2931, -3443, -3948, -4281, + -3687, -4199, -4661, -4945, + -4945, -4661, -4199, -3687, + -3196, -2738, -2310, -1914, + -1543, -1186, -828, -462, + -85, 304, 702, 1092, + 1451, 1747, 1951, 2049, + 2052, 1987, 1882, 1754, + 1611, 1452, 1272, 1068, + 849, 632, 437, 284, + 183, 133, 121, 131, + 148, 162, 168, 168, + 169, 180, 200, 227, + 252, 270, 275, 268, + 254, 235, 210, 177, + 141, 109, 86, 67, + 47, 18, -21, -72, + -131, -189, -233, -247, + -223, -162, -71, 41, + 162, 276, 367, 428, + 468, 502, 541, 593, + 655, 728, 804, 880, + 950, 1013, 1072, 1131, + 1192, 1256, 1315, 1359, + 1375, 1360, 1319, 1262, + 1198, 1124, 1035, 923, + 782, 612, 416, 204, + -6, -204, -392, -578, + -762, -938, -1095, -1231, + -1347, -1445, -1527, -1604, + -1683, -1753, -1775, -1702, + -1518, -1250, -948, -653, + -393, -189, -57, 0, + 1, -27, -58, -77, + -77, -58, -27, 1, + 0, -57, -189, -393, + -653, -948, -1250, -1518, + -1702, -1775, -1753, -1683, + -1604, -1527, -1445, -1347, + -1231, -1095, -938, -762, + -578, -392, -204, -6, + 204, 416, 612, 782, + 923, 1035, 1124, 1198, + 1262, 1319, 1360, 1375, + 1359, 1315, 1256, 1192, + 1131, 1072, 1013, 950, + 880, 804, 728, 655, + 593, 541, 502, 468, + 428, 367, 276, 162, + 41, -71, -162, -223, + -247, -233, -189, -131, + -72, -21, 18, 47, + 67, 86, 109, 141, + 177, 210, 235, 254, + 268, 275, 270, 252, + 227, 200, 180, 169, + 168, 168, 162, 148, + 131, 121, 133, 183, + 284, 437, 632, 849, + 1068, 1272, 1452, 1611, + 1754, 1882, 1987, 2052, + 2049, 1951, 1747, 1451, + 1092, 702, 304, -85, + -462, -828, -1186, -1543, + -1914, -2310, -2738, -3196, + -3687, -4199, -4661, -4945, + -20829, -20870, -20900, -20918, + -20918, -20900, -20870, -20829, + -20779, -20716, -20639, -20550, + -20450, -20337, -20211, -20074, + -19925, -19763, -19589, -19404, + -19208, -19000, -18781, -18550, + -18308, -18053, -17786, -17511, + -17226, -16931, -16625, -16309, + -15984, -15649, -15305, -14951, + -14588, -14216, -13836, -13447, + -13052, -12648, -12237, -11817, + -11389, -10956, -10516, -10071, + -9619, -9162, -8697, -8228, + -7754, -7277, -6794, -6307, + -5816, -5323, -4826, -4326, + -3823, -3318, -2811, -2302, + -1791, -1279, -767, -256, + 256, 767, 1279, 1791, + 2302, 2811, 3318, 3823, + 4326, 4826, 5323, 5816, + 6307, 6794, 7277, 7754, + 8228, 8697, 9162, 9619, + 10071, 10516, 10956, 11389, + 11817, 12237, 12648, 13052, + 13447, 13836, 14216, 14588, + 14951, 15305, 15649, 15984, + 16309, 16625, 16931, 17226, + 17511, 17786, 18053, 18308, + 18550, 18781, 19000, 19208, + 19404, 19589, 19763, 19925, + 20074, 20211, 20337, 20450, + 20550, 20639, 20716, 20779, + 20829, 20870, 20900, 20918, + 20918, 20900, 20870, 20829, + 20779, 20716, 20639, 20550, + 20450, 20337, 20211, 20074, + 19925, 19763, 19589, 19404, + 19208, 19000, 18781, 18550, + 18308, 18053, 17786, 17511, + 17226, 16931, 16625, 16309, + 15984, 15649, 15305, 14951, + 14588, 14216, 13836, 13447, + 13052, 12648, 12237, 11817, + 11389, 10956, 10516, 10071, + 9619, 9162, 8697, 8228, + 7754, 7277, 6794, 6307, + 5816, 5323, 4826, 4326, + 3823, 3318, 2811, 2302, + 1791, 1279, 767, 256, + -256, -767, -1279, -1791, + -2302, -2811, -3318, -3823, + -4326, -4826, -5323, -5816, + -6307, -6794, -7277, -7754, + -8228, -8697, -9162, -9619, + -10071, -10516, -10956, -11389, + -11817, -12237, -12648, -13052, + -13447, -13836, -14216, -14588, + -14951, -15305, -15649, -15984, + -16309, -16625, -16931, -17226, + -17511, -17786, -18053, -18308, + -18550, -18781, -19000, -19208, + -19404, -19589, -19763, -19925, + -20074, -20211, -20337, -20450, + -20550, -20639, -20716, -20779, + -20829, -20870, -20900, -20918, + -10777, -10898, -10989, -11041, + -11041, -10989, -10898, -10777, + -10624, -10437, -10218, -9970, + -9693, -9384, -9044, -8676, + -8286, -7873, -7440, -6988, + -6521, -6041, -5549, -5048, + -4540, -4031, -3522, -3014, + -2510, -2011, -1518, -1033, + -558, -98, 346, 770, + 1172, 1551, 1905, 2234, + 2536, 2811, 3057, 3271, + 3454, 3605, 3725, 3814, + 3874, 3903, 3903, 3872, + 3811, 3720, 3600, 3454, + 3282, 3086, 2868, 2630, + 2374, 2101, 1813, 1513, + 1201, 880, 553, 222, + -111, -445, -779, -1107, + -1428, -1739, -2037, -2320, + -2584, -2829, -3054, -3258, + -3438, -3592, -3719, -3819, + -3888, -3927, -3933, -3908, + -3852, -3763, -3640, -3483, + -3295, -3077, -2827, -2547, + -2239, -1904, -1544, -1160, + -755, -329, 116, 577, + 1054, 1543, 2042, 2547, + 3057, 3569, 4080, 4589, + 5091, 5586, 6070, 6542, + 6999, 7440, 7863, 8267, + 8648, 9003, 9331, 9632, + 9905, 10148, 10357, 10530, + 10669, 10774, 10843, 10878, + 10878, 10843, 10774, 10669, + 10530, 10357, 10148, 9905, + 9632, 9331, 9003, 8648, + 8267, 7863, 7440, 6999, + 6542, 6070, 5586, 5091, + 4589, 4080, 3569, 3057, + 2547, 2042, 1543, 1054, + 577, 116, -329, -755, + -1160, -1544, -1904, -2239, + -2547, -2827, -3077, -3295, + -3483, -3640, -3763, -3852, + -3908, -3933, -3927, -3888, + -3819, -3719, -3592, -3438, + -3258, -3054, -2829, -2584, + -2320, -2037, -1739, -1428, + -1107, -779, -445, -111, + 222, 553, 880, 1201, + 1513, 1813, 2101, 2374, + 2630, 2868, 3086, 3282, + 3454, 3600, 3720, 3811, + 3872, 3903, 3903, 3874, + 3814, 3725, 3605, 3454, + 3271, 3057, 2811, 2536, + 2234, 1905, 1551, 1172, + 770, 346, -98, -558, + -1033, -1518, -2011, -2510, + -3014, -3522, -4031, -4540, + -5048, -5549, -6041, -6521, + -6988, -7440, -7873, -8286, + -8676, -9044, -9384, -9693, + -9970, -10218, -10437, -10624, + -10777, -10898, -10989, -11041, + -18687, -18920, -19132, -19266, + -19266, -19132, -18920, -18687, + -18456, -18230, -18009, -17792, + -17559, -17288, -16974, -16633, + -16280, -15922, -15554, -15176, + -14780, -14354, -13893, -13407, + -12919, -12446, -11990, -11539, + -11080, -10605, -10113, -9609, + -9103, -8610, -8141, -7695, + -7262, -6830, -6401, -5978, + -5566, -5168, -4788, -4431, + -4091, -3760, -3433, -3113, + -2806, -2521, -2263, -2034, + -1828, -1629, -1422, -1207, + -996, -804, -639, -502, + -391, -298, -211, -121, + -27, 66, 150, 218, + 268, 302, 329, 359, + 400, 454, 521, 599, + 690, 797, 924, 1075, + 1251, 1443, 1639, 1836, + 2038, 2252, 2483, 2735, + 3010, 3311, 3634, 3976, + 4332, 4704, 5093, 5497, + 5916, 6351, 6806, 7278, + 7761, 8250, 8744, 9249, + 9761, 10272, 10773, 11259, + 11731, 12189, 12638, 13084, + 13529, 13968, 14386, 14779, + 15154, 15517, 15869, 16203, + 16518, 16814, 17088, 17333, + 17547, 17741, 17923, 18095, + 18254, 18400, 18521, 18593, + 18593, 18521, 18400, 18254, + 18095, 17923, 17741, 17547, + 17333, 17088, 16814, 16518, + 16203, 15869, 15517, 15154, + 14779, 14386, 13968, 13529, + 13084, 12638, 12189, 11731, + 11259, 10773, 10272, 9761, + 9249, 8744, 8250, 7761, + 7278, 6806, 6351, 5916, + 5497, 5093, 4704, 4332, + 3976, 3634, 3311, 3010, + 2735, 2483, 2252, 2038, + 1836, 1639, 1443, 1251, + 1075, 924, 797, 690, + 599, 521, 454, 400, + 359, 329, 302, 268, + 218, 150, 66, -27, + -121, -211, -298, -391, + -502, -639, -804, -996, + -1207, -1422, -1629, -1828, + -2034, -2263, -2521, -2806, + -3113, -3433, -3760, -4091, + -4431, -4788, -5168, -5566, + -5978, -6401, -6830, -7262, + -7695, -8141, -8610, -9103, + -9609, -10113, -10605, -11080, + -11539, -11990, -12446, -12919, + -13407, -13893, -14354, -14780, + -15176, -15554, -15922, -16280, + -16633, -16974, -17288, -17559, + -17792, -18009, -18230, -18456, + -18687, -18920, -19132, -19266, + -11816, -12294, -12699, -12943, + -12943, -12699, -12294, -11816, + -11309, -10797, -10326, -9948, + -9681, -9505, -9398, -9346, + -9333, -9333, -9315, -9256, + -9139, -8957, -8716, -8437, + -8132, -7814, -7496, -7189, + -6895, -6599, -6296, -5992, + -5697, -5415, -5141, -4881, + -4641, -4422, -4222, -4034, + -3855, -3684, -3515, -3336, + -3132, -2886, -2591, -2264, + -1926, -1594, -1276, -987, + -744, -556, -413, -296, + -193, -98, 5, 135, + 310, 536, 812, 1128, + 1473, 1823, 2154, 2446, + 2692, 2889, 3040, 3151, + 3236, 3310, 3384, 3457, + 3527, 3598, 3677, 3764, + 3850, 3933, 4018, 4115, + 4228, 4360, 4517, 4709, + 4935, 5181, 5422, 5637, + 5811, 5932, 5988, 5976, + 5899, 5772, 5614, 5446, + 5290, 5166, 5087, 5063, + 5096, 5184, 5319, 5483, + 5654, 5805, 5921, 5992, + 6018, 5997, 5928, 5822, + 5699, 5583, 5490, 5428, + 5402, 5412, 5451, 5505, + 5565, 5626, 5685, 5739, + 5791, 5844, 5895, 5928, + 5928, 5895, 5844, 5791, + 5739, 5685, 5626, 5565, + 5505, 5451, 5412, 5402, + 5428, 5490, 5583, 5699, + 5822, 5928, 5997, 6018, + 5992, 5921, 5805, 5654, + 5483, 5319, 5184, 5096, + 5063, 5087, 5166, 5290, + 5446, 5614, 5772, 5899, + 5976, 5988, 5932, 5811, + 5637, 5422, 5181, 4935, + 4709, 4517, 4360, 4228, + 4115, 4018, 3933, 3850, + 3764, 3677, 3598, 3527, + 3457, 3384, 3310, 3236, + 3151, 3040, 2889, 2692, + 2446, 2154, 1823, 1473, + 1128, 812, 536, 310, + 135, 5, -98, -193, + -296, -413, -556, -744, + -987, -1276, -1594, -1926, + -2264, -2591, -2886, -3132, + -3336, -3515, -3684, -3855, + -4034, -4222, -4422, -4641, + -4881, -5141, -5415, -5697, + -5992, -6296, -6599, -6895, + -7189, -7496, -7814, -8132, + -8437, -8716, -8957, -9139, + -9256, -9315, -9333, -9333, + -9346, -9398, -9505, -9681, + -9948, -10326, -10797, -11309, + -11816, -12294, -12699, -12943, + -16754, -17075, -17316, -17450, + -17450, -17316, -17075, -16754, + -16361, -15906, -15416, -14918, + -14431, -13963, -13526, -13133, + -12785, -12480, -12221, -12013, + -11851, -11724, -11625, -11555, + -11508, -11472, -11435, -11392, + -11338, -11263, -11160, -11022, + -10845, -10622, -10351, -10033, + -9675, -9278, -8843, -8378, + -7891, -7391, -6883, -6371, + -5860, -5355, -4862, -4384, + -3926, -3492, -3085, -2708, + -2361, -2044, -1758, -1501, + -1269, -1057, -858, -670, + -489, -309, -127, 64, + 270, 493, 736, 1001, + 1292, 1609, 1951, 2315, + 2701, 3107, 3528, 3958, + 4391, 4820, 5235, 5628, + 5994, 6332, 6639, 6911, + 7149, 7355, 7532, 7682, + 7809, 7914, 7999, 8067, + 8120, 8165, 8204, 8241, + 8280, 8327, 8386, 8461, + 8555, 8673, 8819, 8991, + 9186, 9400, 9633, 9879, + 10130, 10373, 10601, 10807, + 10983, 11126, 11232, 11298, + 11325, 11314, 11271, 11200, + 11102, 10980, 10838, 10687, + 10533, 10380, 10230, 10091, + 9972, 9881, 9821, 9791, + 9791, 9821, 9881, 9972, + 10091, 10230, 10380, 10533, + 10687, 10838, 10980, 11102, + 11200, 11271, 11314, 11325, + 11298, 11232, 11126, 10983, + 10807, 10601, 10373, 10130, + 9879, 9633, 9400, 9186, + 8991, 8819, 8673, 8555, + 8461, 8386, 8327, 8280, + 8241, 8204, 8165, 8120, + 8067, 7999, 7914, 7809, + 7682, 7532, 7355, 7149, + 6911, 6639, 6332, 5994, + 5628, 5235, 4820, 4391, + 3958, 3528, 3107, 2701, + 2315, 1951, 1609, 1292, + 1001, 736, 493, 270, + 64, -127, -309, -489, + -670, -858, -1057, -1269, + -1501, -1758, -2044, -2361, + -2708, -3085, -3492, -3926, + -4384, -4862, -5355, -5860, + -6371, -6883, -7391, -7891, + -8378, -8843, -9278, -9675, + -10033, -10351, -10622, -10845, + -11022, -11160, -11263, -11338, + -11392, -11435, -11472, -11508, + -11555, -11625, -11724, -11851, + -12013, -12221, -12480, -12785, + -13133, -13526, -13963, -14431, + -14918, -15416, -15906, -16361, + -16754, -17075, -17316, -17450, + -8456, -8968, -9423, -9700, + -9700, -9423, -8968, -8456, + -7961, -7505, -7085, -6692, + -6315, -5934, -5537, -5122, + -4708, -4325, -4004, -3752, + -3541, -3335, -3120, -2909, + -2726, -2582, -2473, -2384, + -2297, -2191, -2058, -1899, + -1721, -1528, -1324, -1114, + -893, -650, -379, -92, + 183, 429, 651, 875, + 1121, 1387, 1650, 1888, + 2090, 2256, 2378, 2451, + 2475, 2464, 2442, 2421, + 2400, 2361, 2293, 2198, + 2095, 2001, 1925, 1861, + 1796, 1721, 1635, 1547, + 1478, 1445, 1449, 1476, + 1513, 1558, 1620, 1703, + 1800, 1896, 1981, 2051, + 2106, 2141, 2142, 2099, + 2021, 1935, 1869, 1832, + 1814, 1796, 1763, 1709, + 1646, 1590, 1548, 1516, + 1485, 1457, 1438, 1431, + 1432, 1437, 1442, 1452, + 1471, 1499, 1530, 1558, + 1582, 1606, 1633, 1656, + 1663, 1658, 1654, 1658, + 1654, 1622, 1554, 1465, + 1365, 1247, 1094, 903, + 694, 503, 358, 269, + 222, 194, 172, 157, + 157, 172, 194, 222, + 269, 358, 503, 694, + 903, 1094, 1247, 1365, + 1465, 1554, 1622, 1654, + 1658, 1654, 1658, 1663, + 1656, 1633, 1606, 1582, + 1558, 1530, 1499, 1471, + 1452, 1442, 1437, 1432, + 1431, 1438, 1457, 1485, + 1516, 1548, 1590, 1646, + 1709, 1763, 1796, 1814, + 1832, 1869, 1935, 2021, + 2099, 2142, 2141, 2106, + 2051, 1981, 1896, 1800, + 1703, 1620, 1558, 1513, + 1476, 1449, 1445, 1478, + 1547, 1635, 1721, 1796, + 1861, 1925, 2001, 2095, + 2198, 2293, 2361, 2400, + 2421, 2442, 2464, 2475, + 2451, 2378, 2256, 2090, + 1888, 1650, 1387, 1121, + 875, 651, 429, 183, + -92, -379, -650, -893, + -1114, -1324, -1528, -1721, + -1899, -2058, -2191, -2297, + -2384, -2473, -2582, -2726, + -2909, -3120, -3335, -3541, + -3752, -4004, -4325, -4708, + -5122, -5537, -5934, -6315, + -6692, -7085, -7505, -7961, + -8456, -8968, -9423, -9700, + -9705, -9944, -10456, -10898, + -10898, -10456, -9944, -9705, + -9728, -9737, -9533, -9165, + -8804, -8539, -8340, -8140, + -7897, -7582, -7179, -6718, + -6285, -5956, -5704, -5413, + -4996, -4493, -4028, -3682, + -3417, -3138, -2791, -2392, + -1990, -1621, -1295, -1000, + -699, -357, 22, 385, + 685, 929, 1166, 1432, + 1714, 1982, 2234, 2489, + 2752, 2996, 3202, 3386, + 3580, 3787, 3978, 4131, + 4263, 4405, 4550, 4666, + 4736, 4790, 4864, 4953, + 5021, 5053, 5067, 5088, + 5111, 5110, 5073, 5011, + 4937, 4857, 4782, 4720, + 4666, 4585, 4450, 4278, + 4125, 4029, 3966, 3881, + 3740, 3557, 3373, 3221, + 3117, 3057, 3002, 2894, + 2705, 2485, 2328, 2281, + 2276, 2197, 2001, 1763, + 1596, 1532, 1498, 1398, + 1211, 993, 808, 665, + 532, 376, 195, 7, + -175, -339, -476, -588, + -696, -823, -966, -1098, + -1200, -1288, -1391, -1511, + -1627, -1718, -1787, -1842, + -1882, -1897, -1890, -1878, + -1878, -1890, -1897, -1882, + -1842, -1787, -1718, -1627, + -1511, -1391, -1288, -1200, + -1098, -966, -823, -696, + -588, -476, -339, -175, + 7, 195, 376, 532, + 665, 808, 993, 1211, + 1398, 1498, 1532, 1596, + 1763, 2001, 2197, 2276, + 2281, 2328, 2485, 2705, + 2894, 3002, 3057, 3117, + 3221, 3373, 3557, 3740, + 3881, 3966, 4029, 4125, + 4278, 4450, 4585, 4666, + 4720, 4782, 4857, 4937, + 5011, 5073, 5110, 5111, + 5088, 5067, 5053, 5021, + 4953, 4864, 4790, 4736, + 4666, 4550, 4405, 4263, + 4131, 3978, 3787, 3580, + 3386, 3202, 2996, 2752, + 2489, 2234, 1982, 1714, + 1432, 1166, 929, 685, + 385, 22, -357, -699, + -1000, -1295, -1621, -1990, + -2392, -2791, -3138, -3417, + -3682, -4028, -4493, -4996, + -5413, -5704, -5956, -6285, + -6718, -7179, -7582, -7897, + -8140, -8340, -8539, -8804, + -9165, -9533, -9737, -9728, + -9705, -9944, -10456, -10898, + -4318, -4425, -4937, -5440, + -5440, -4937, -4425, -4318, + -4530, -4677, -4549, -4257, + -4004, -3863, -3790, -3731, + -3649, -3513, -3314, -3081, + -2863, -2699, -2596, -2524, + -2423, -2248, -2027, -1846, + -1758, -1715, -1625, -1454, + -1254, -1099, -1015, -971, + -905, -778, -594, -412, + -289, -231, -181, -72, + 107, 305, 454, 530, + 572, 649, 795, 979, + 1126, 1195, 1214, 1245, + 1326, 1447, 1578, 1689, + 1757, 1775, 1769, 1787, + 1859, 1964, 2054, 2099, + 2100, 2068, 2019, 1990, + 2013, 2071, 2090, 2020, + 1901, 1827, 1843, 1899, + 1908, 1834, 1706, 1587, + 1523, 1523, 1549, 1541, + 1467, 1365, 1303, 1307, + 1327, 1301, 1236, 1192, + 1188, 1174, 1105, 1030, + 1037, 1128, 1192, 1134, + 994, 893, 883, 906, + 887, 822, 751, 703, + 672, 649, 618, 564, + 491, 428, 400, 380, + 326, 242, 180, 167, + 174, 156, 115, 92, + 101, 112, 99, 78, + 78, 99, 112, 101, + 92, 115, 156, 174, + 167, 180, 242, 326, + 380, 400, 428, 491, + 564, 618, 649, 672, + 703, 751, 822, 887, + 906, 883, 893, 994, + 1134, 1192, 1128, 1037, + 1030, 1105, 1174, 1188, + 1192, 1236, 1301, 1327, + 1307, 1303, 1365, 1467, + 1541, 1549, 1523, 1523, + 1587, 1706, 1834, 1908, + 1899, 1843, 1827, 1901, + 2020, 2090, 2071, 2013, + 1990, 2019, 2068, 2100, + 2099, 2054, 1964, 1859, + 1787, 1769, 1775, 1757, + 1689, 1578, 1447, 1326, + 1245, 1214, 1195, 1126, + 979, 795, 649, 572, + 530, 454, 305, 107, + -72, -181, -231, -289, + -412, -594, -778, -905, + -971, -1015, -1099, -1254, + -1454, -1625, -1715, -1758, + -1846, -2027, -2248, -2423, + -2524, -2596, -2699, -2863, + -3081, -3314, -3513, -3649, + -3731, -3790, -3863, -4004, + -4257, -4549, -4677, -4530, + -4318, -4425, -4937, -5440, + -20214, -20305, -20379, -20423, + -20423, -20379, -20305, -20214, + -20111, -19995, -19872, -19746, + -19618, -19485, -19346, -19205, + -19062, -18913, -18760, -18604, + -18442, -18267, -18078, -17874, + -17653, -17413, -17151, -16870, + -16571, -16256, -15927, -15589, + -15241, -14889, -14535, -14184, + -13837, -13491, -13145, -12798, + -12445, -12086, -11719, -11340, + -10948, -10542, -10121, -9688, + -9242, -8783, -8315, -7839, + -7360, -6877, -6390, -5903, + -5418, -4938, -4464, -3998, + -3538, -3081, -2622, -2158, + -1687, -1209, -723, -230, + 271, 776, 1284, 1794, + 2306, 2818, 3328, 3834, + 4332, 4823, 5303, 5771, + 6227, 6669, 7099, 7519, + 7934, 8347, 8760, 9174, + 9591, 10012, 10437, 10863, + 11290, 11715, 12136, 12551, + 12956, 13349, 13728, 14091, + 14438, 14768, 15080, 15376, + 15657, 15927, 16189, 16441, + 16686, 16925, 17160, 17390, + 17618, 17844, 18069, 18290, + 18504, 18707, 18897, 19070, + 19224, 19357, 19471, 19567, + 19644, 19705, 19751, 19784, + 19807, 19820, 19826, 19828, + 19828, 19826, 19820, 19807, + 19784, 19751, 19705, 19644, + 19567, 19471, 19357, 19224, + 19070, 18897, 18707, 18504, + 18290, 18069, 17844, 17618, + 17390, 17160, 16925, 16686, + 16441, 16189, 15927, 15657, + 15376, 15080, 14768, 14438, + 14091, 13728, 13349, 12956, + 12551, 12136, 11715, 11290, + 10863, 10437, 10012, 9591, + 9174, 8760, 8347, 7934, + 7519, 7099, 6669, 6227, + 5771, 5303, 4823, 4332, + 3834, 3328, 2818, 2306, + 1794, 1284, 776, 271, + -230, -723, -1209, -1687, + -2158, -2622, -3081, -3538, + -3998, -4464, -4938, -5418, + -5903, -6390, -6877, -7360, + -7839, -8315, -8783, -9242, + -9688, -10121, -10542, -10948, + -11340, -11719, -12086, -12445, + -12798, -13145, -13491, -13837, + -14184, -14535, -14889, -15241, + -15589, -15927, -16256, -16571, + -16870, -17151, -17413, -17653, + -17874, -18078, -18267, -18442, + -18604, -18760, -18913, -19062, + -19205, -19346, -19485, -19618, + -19746, -19872, -19995, -20111, + -20214, -20305, -20379, -20423, + -11585, -11732, -11846, -11911, + -11911, -11846, -11732, -11585, + -11410, -11211, -10993, -10765, + -10528, -10279, -10019, -9749, + -9464, -9158, -8827, -8470, + -8087, -7674, -7233, -6769, + -6286, -5789, -5281, -4769, + -4257, -3747, -3243, -2748, + -2263, -1786, -1314, -845, + -377, 95, 573, 1058, + 1544, 2027, 2504, 2971, + 3423, 3857, 4267, 4652, + 5013, 5349, 5663, 5955, + 6230, 6488, 6733, 6963, + 7179, 7383, 7572, 7745, + 7898, 8032, 8142, 8223, + 8273, 8292, 8280, 8239, + 8173, 8087, 7987, 7878, + 7761, 7640, 7512, 7374, + 7223, 7060, 6880, 6680, + 6456, 6209, 5941, 5654, + 5352, 5041, 4727, 4412, + 4098, 3786, 3480, 3180, + 2885, 2592, 2302, 2014, + 1724, 1430, 1128, 820, + 505, 186, -133, -450, + -758, -1054, -1333, -1596, + -1842, -2072, -2288, -2492, + -2686, -2870, -3049, -3224, + -3399, -3571, -3739, -3899, + -4049, -4184, -4302, -4402, + -4486, -4551, -4599, -4634, + -4660, -4678, -4689, -4692, + -4692, -4689, -4678, -4660, + -4634, -4599, -4551, -4486, + -4402, -4302, -4184, -4049, + -3899, -3739, -3571, -3399, + -3224, -3049, -2870, -2686, + -2492, -2288, -2072, -1842, + -1596, -1333, -1054, -758, + -450, -133, 186, 505, + 820, 1128, 1430, 1724, + 2014, 2302, 2592, 2885, + 3180, 3480, 3786, 4098, + 4412, 4727, 5041, 5352, + 5654, 5941, 6209, 6456, + 6680, 6880, 7060, 7223, + 7374, 7512, 7640, 7761, + 7878, 7987, 8087, 8173, + 8239, 8280, 8292, 8273, + 8223, 8142, 8032, 7898, + 7745, 7572, 7383, 7179, + 6963, 6733, 6488, 6230, + 5955, 5663, 5349, 5013, + 4652, 4267, 3857, 3423, + 2971, 2504, 2027, 1544, + 1058, 573, 95, -377, + -845, -1314, -1786, -2263, + -2748, -3243, -3747, -4257, + -4769, -5281, -5789, -6286, + -6769, -7233, -7674, -8087, + -8470, -8827, -9158, -9464, + -9749, -10019, -10279, -10528, + -10765, -10993, -11211, -11410, + -11585, -11732, -11846, -11911, + -20089, -20198, -20283, -20331, + -20331, -20283, -20198, -20089, + -19957, -19802, -19627, -19439, + -19240, -19026, -18798, -18555, + -18297, -18020, -17721, -17400, + -17056, -16689, -16299, -15888, + -15461, -15021, -14571, -14113, + -13649, -13184, -12718, -12253, + -11787, -11320, -10851, -10378, + -9899, -9411, -8914, -8411, + -7904, -7393, -6881, -6372, + -5871, -5378, -4897, -4429, + -3974, -3532, -3099, -2675, + -2259, -1848, -1439, -1031, + -626, -224, 174, 564, + 945, 1315, 1673, 2018, + 2349, 2665, 2968, 3258, + 3538, 3810, 4075, 4338, + 4600, 4861, 5119, 5375, + 5628, 5877, 6121, 6355, + 6577, 6787, 6986, 7175, + 7355, 7530, 7703, 7879, + 8058, 8240, 8426, 8615, + 8806, 8997, 9189, 9379, + 9564, 9743, 9917, 10085, + 10245, 10396, 10541, 10683, + 10824, 10966, 11109, 11254, + 11402, 11551, 11703, 11854, + 12002, 12141, 12270, 12388, + 12496, 12594, 12681, 12759, + 12831, 12901, 12970, 13037, + 13101, 13163, 13222, 13277, + 13325, 13364, 13392, 13407, + 13407, 13392, 13364, 13325, + 13277, 13222, 13163, 13101, + 13037, 12970, 12901, 12831, + 12759, 12681, 12594, 12496, + 12388, 12270, 12141, 12002, + 11854, 11703, 11551, 11402, + 11254, 11109, 10966, 10824, + 10683, 10541, 10396, 10245, + 10085, 9917, 9743, 9564, + 9379, 9189, 8997, 8806, + 8615, 8426, 8240, 8058, + 7879, 7703, 7530, 7355, + 7175, 6986, 6787, 6577, + 6355, 6121, 5877, 5628, + 5375, 5119, 4861, 4600, + 4338, 4075, 3810, 3538, + 3258, 2968, 2665, 2349, + 2018, 1673, 1315, 945, + 564, 174, -224, -626, + -1031, -1439, -1848, -2259, + -2675, -3099, -3532, -3974, + -4429, -4897, -5378, -5871, + -6372, -6881, -7393, -7904, + -8411, -8914, -9411, -9899, + -10378, -10851, -11320, -11787, + -12253, -12718, -13184, -13649, + -14113, -14571, -15021, -15461, + -15888, -16299, -16689, -17056, + -17400, -17721, -18020, -18297, + -18555, -18798, -19026, -19240, + -19439, -19627, -19802, -19957, + -20089, -20198, -20283, -20331, + -19619, -19879, -20067, -20168, + -20168, -20067, -19879, -19619, + -19295, -18916, -18494, -18041, + -17563, -17066, -16558, -16046, + -15536, -15032, -14541, -14068, + -13615, -13181, -12764, -12362, + -11975, -11598, -11228, -10864, + -10504, -10148, -9796, -9447, + -9102, -8760, -8420, -8080, + -7740, -7397, -7053, -6709, + -6364, -6019, -5675, -5334, + -4993, -4651, -4306, -3957, + -3601, -3240, -2875, -2509, + -2148, -1793, -1449, -1116, + -797, -492, -201, 74, + 335, 584, 822, 1051, + 1271, 1485, 1695, 1900, + 2104, 2309, 2520, 2740, + 2967, 3202, 3441, 3682, + 3926, 4170, 4414, 4660, + 4909, 5164, 5422, 5684, + 5948, 6213, 6477, 6741, + 7006, 7274, 7545, 7819, + 8096, 8374, 8650, 8919, + 9175, 9417, 9637, 9834, + 10004, 10147, 10264, 10357, + 10429, 10483, 10524, 10555, + 10578, 10595, 10608, 10619, + 10629, 10643, 10662, 10689, + 10726, 10770, 10819, 10871, + 10925, 10981, 11037, 11093, + 11149, 11204, 11258, 11307, + 11350, 11385, 11410, 11423, + 11423, 11410, 11385, 11350, + 11307, 11258, 11204, 11149, + 11093, 11037, 10981, 10925, + 10871, 10819, 10770, 10726, + 10689, 10662, 10643, 10629, + 10619, 10608, 10595, 10578, + 10555, 10524, 10483, 10429, + 10357, 10264, 10147, 10004, + 9834, 9637, 9417, 9175, + 8919, 8650, 8374, 8096, + 7819, 7545, 7274, 7006, + 6741, 6477, 6213, 5948, + 5684, 5422, 5164, 4909, + 4660, 4414, 4170, 3926, + 3682, 3441, 3202, 2967, + 2740, 2520, 2309, 2104, + 1900, 1695, 1485, 1271, + 1051, 822, 584, 335, + 74, -201, -492, -797, + -1116, -1449, -1793, -2148, + -2509, -2875, -3240, -3601, + -3957, -4306, -4651, -4993, + -5334, -5675, -6019, -6364, + -6709, -7053, -7397, -7740, + -8080, -8420, -8760, -9102, + -9447, -9796, -10148, -10504, + -10864, -11228, -11598, -11975, + -12362, -12764, -13181, -13615, + -14068, -14541, -15032, -15536, + -16046, -16558, -17066, -17563, + -18041, -18494, -18916, -19295, + -19619, -19879, -20067, -20168, + -10533, -10837, -11061, -11181, + -11181, -11061, -10837, -10533, + -10165, -9747, -9292, -8814, + -8320, -7813, -7301, -6793, + -6299, -5826, -5378, -4959, + -4566, -4193, -3838, -3497, + -3169, -2855, -2556, -2272, + -1999, -1736, -1481, -1234, + -994, -758, -528, -306, + -93, 109, 299, 473, + 631, 772, 896, 1009, + 1115, 1222, 1335, 1457, + 1587, 1725, 1866, 2008, + 2146, 2274, 2389, 2486, + 2562, 2611, 2629, 2619, + 2582, 2522, 2445, 2357, + 2264, 2171, 2079, 1991, + 1908, 1837, 1778, 1733, + 1700, 1677, 1662, 1654, + 1652, 1656, 1665, 1682, + 1709, 1745, 1787, 1831, + 1876, 1921, 1966, 2012, + 2061, 2116, 2177, 2244, + 2316, 2395, 2477, 2559, + 2637, 2705, 2756, 2786, + 2790, 2767, 2717, 2640, + 2543, 2429, 2302, 2166, + 2028, 1893, 1765, 1648, + 1548, 1465, 1398, 1342, + 1293, 1248, 1202, 1157, + 1113, 1075, 1048, 1034, + 1032, 1038, 1049, 1061, + 1069, 1074, 1076, 1077, + 1077, 1076, 1074, 1069, + 1061, 1049, 1038, 1032, + 1034, 1048, 1075, 1113, + 1157, 1202, 1248, 1293, + 1342, 1398, 1465, 1548, + 1648, 1765, 1893, 2028, + 2166, 2302, 2429, 2543, + 2640, 2717, 2767, 2790, + 2786, 2756, 2705, 2637, + 2559, 2477, 2395, 2316, + 2244, 2177, 2116, 2061, + 2012, 1966, 1921, 1876, + 1831, 1787, 1745, 1709, + 1682, 1665, 1656, 1652, + 1654, 1662, 1677, 1700, + 1733, 1778, 1837, 1908, + 1991, 2079, 2171, 2264, + 2357, 2445, 2522, 2582, + 2619, 2629, 2611, 2562, + 2486, 2389, 2274, 2146, + 2008, 1866, 1725, 1587, + 1457, 1335, 1222, 1115, + 1009, 896, 772, 631, + 473, 299, 109, -93, + -306, -528, -758, -994, + -1234, -1481, -1736, -1999, + -2272, -2556, -2855, -3169, + -3497, -3838, -4193, -4566, + -4959, -5378, -5826, -6299, + -6793, -7301, -7813, -8320, + -8814, -9292, -9747, -10165, + -10533, -10837, -11061, -11181, + -4782, -5294, -5738, -5997, + -5997, -5738, -5294, -4782, + -4313, -3962, -3749, -3640, + -3576, -3495, -3370, -3214, + -3061, -2951, -2900, -2897, + -2905, -2879, -2790, -2631, + -2422, -2195, -1980, -1792, + -1624, -1457, -1272, -1061, + -831, -597, -379, -187, + -25, 110, 220, 301, + 341, 329, 258, 136, + -12, -152, -254, -295, + -269, -185, -59, 90, + 251, 416, 577, 720, + 823, 866, 827, 702, + 502, 257, 10, -201, + -349, -425, -434, -390, + -310, -205, -83, 47, + 180, 304, 411, 492, + 550, 595, 642, 706, + 790, 889, 988, 1068, + 1112, 1116, 1084, 1034, + 984, 956, 963, 1012, + 1103, 1235, 1401, 1593, + 1798, 1996, 2168, 2295, + 2369, 2387, 2357, 2292, + 2202, 2092, 1965, 1820, + 1662, 1509, 1387, 1326, + 1348, 1457, 1637, 1848, + 2039, 2162, 2187, 2115, + 1969, 1793, 1630, 1513, + 1451, 1434, 1438, 1440, + 1424, 1393, 1357, 1334, + 1334, 1357, 1393, 1424, + 1440, 1438, 1434, 1451, + 1513, 1630, 1793, 1969, + 2115, 2187, 2162, 2039, + 1848, 1637, 1457, 1348, + 1326, 1387, 1509, 1662, + 1820, 1965, 2092, 2202, + 2292, 2357, 2387, 2369, + 2295, 2168, 1996, 1798, + 1593, 1401, 1235, 1103, + 1012, 963, 956, 984, + 1034, 1084, 1116, 1112, + 1068, 988, 889, 790, + 706, 642, 595, 550, + 492, 411, 304, 180, + 47, -83, -205, -310, + -390, -434, -425, -349, + -201, 10, 257, 502, + 702, 827, 866, 823, + 720, 577, 416, 251, + 90, -59, -185, -269, + -295, -254, -152, -12, + 136, 258, 329, 341, + 301, 220, 110, -25, + -187, -379, -597, -831, + -1061, -1272, -1457, -1624, + -1792, -1980, -2195, -2422, + -2631, -2790, -2879, -2905, + -2897, -2900, -2951, -3061, + -3214, -3370, -3495, -3576, + -3640, -3749, -3962, -4313, + -4782, -5294, -5738, -5997, + -6622, -7134, -7585, -7850, + -7850, -7585, -7134, -6622, + -6167, -5844, -5669, -5598, + -5559, -5486, -5354, -5180, + -5007, -4880, -4822, -4818, + -4825, -4790, -4678, -4487, + -4240, -3979, -3740, -3538, + -3363, -3189, -2989, -2751, + -2481, -2201, -1936, -1705, + -1512, -1355, -1225, -1122, + -1050, -1019, -1037, -1099, + -1187, -1271, -1322, -1320, + -1258, -1141, -984, -799, + -598, -387, -174, 25, + 188, 290, 309, 239, + 95, -93, -283, -437, + -528, -547, -502, -409, + -284, -138, 23, 194, + 369, 539, 692, 822, + 930, 1026, 1124, 1239, + 1376, 1531, 1687, 1824, + 1924, 1980, 1999, 1997, + 1998, 2020, 2076, 2172, + 2307, 2476, 2671, 2883, + 3100, 3309, 3494, 3642, + 3749, 3813, 3839, 3831, + 3795, 3735, 3649, 3541, + 3422, 3310, 3232, 3214, + 3276, 3416, 3615, 3833, + 4023, 4145, 4177, 4119, + 3997, 3848, 3708, 3604, + 3546, 3526, 3525, 3526, + 3519, 3500, 3478, 3463, + 3463, 3478, 3500, 3519, + 3526, 3525, 3526, 3546, + 3604, 3708, 3848, 3997, + 4119, 4177, 4145, 4023, + 3833, 3615, 3416, 3276, + 3214, 3232, 3310, 3422, + 3541, 3649, 3735, 3795, + 3831, 3839, 3813, 3749, + 3642, 3494, 3309, 3100, + 2883, 2671, 2476, 2307, + 2172, 2076, 2020, 1998, + 1997, 1999, 1980, 1924, + 1824, 1687, 1531, 1376, + 1239, 1124, 1026, 930, + 822, 692, 539, 369, + 194, 23, -138, -284, + -409, -502, -547, -528, + -437, -283, -93, 95, + 239, 309, 290, 188, + 25, -174, -387, -598, + -799, -984, -1141, -1258, + -1320, -1322, -1271, -1187, + -1099, -1037, -1019, -1050, + -1122, -1225, -1355, -1512, + -1705, -1936, -2201, -2481, + -2751, -2989, -3189, -3363, + -3538, -3740, -3979, -4240, + -4487, -4678, -4790, -4825, + -4818, -4822, -4880, -5007, + -5180, -5354, -5486, -5559, + -5598, -5669, -5844, -6167, + -6622, -7134, -7585, -7850, + -20254, -20678, -21051, -21273, + -21273, -21051, -20678, -20254, + -19872, -19587, -19409, -19303, + -19209, -19074, -18875, -18629, + -18372, -18145, -17965, -17826, + -17691, -17519, -17282, -16977, + -16623, -16252, -15890, -15550, + -15222, -14884, -14517, -14113, + -13680, -13234, -12795, -12378, + -11984, -11608, -11238, -10872, + -10512, -10170, -9854, -9567, + -9298, -9030, -8740, -8411, + -8036, -7615, -7158, -6677, + -6180, -5672, -5160, -4655, + -4173, -3733, -3349, -3024, + -2746, -2492, -2235, -1949, + -1620, -1245, -832, -393, + 64, 533, 1015, 1510, + 2014, 2518, 3013, 3488, + 3940, 4375, 4805, 5246, + 5703, 6175, 6649, 7109, + 7539, 7932, 8291, 8626, + 8953, 9289, 9646, 10030, + 10441, 10874, 11322, 11776, + 12224, 12658, 13068, 13444, + 13783, 14084, 14353, 14596, + 14815, 15012, 15185, 15334, + 15464, 15587, 15721, 15884, + 16090, 16341, 16625, 16919, + 17191, 17414, 17573, 17665, + 17705, 17715, 17719, 17735, + 17771, 17825, 17889, 17949, + 17998, 18031, 18051, 18061, + 18061, 18051, 18031, 17998, + 17949, 17889, 17825, 17771, + 17735, 17719, 17715, 17705, + 17665, 17573, 17414, 17191, + 16919, 16625, 16341, 16090, + 15884, 15721, 15587, 15464, + 15334, 15185, 15012, 14815, + 14596, 14353, 14084, 13783, + 13444, 13068, 12658, 12224, + 11776, 11322, 10874, 10441, + 10030, 9646, 9289, 8953, + 8626, 8291, 7932, 7539, + 7109, 6649, 6175, 5703, + 5246, 4805, 4375, 3940, + 3488, 3013, 2518, 2014, + 1510, 1015, 533, 64, + -393, -832, -1245, -1620, + -1949, -2235, -2492, -2746, + -3024, -3349, -3733, -4173, + -4655, -5160, -5672, -6180, + -6677, -7158, -7615, -8036, + -8411, -8740, -9030, -9298, + -9567, -9854, -10170, -10512, + -10872, -11238, -11608, -11984, + -12378, -12795, -13234, -13680, + -14113, -14517, -14884, -15222, + -15550, -15890, -16252, -16623, + -16977, -17282, -17519, -17691, + -17826, -17965, -18145, -18372, + -18629, -18875, -19074, -19209, + -19303, -19409, -19587, -19872, + -20254, -20678, -21051, -21273, + -11535, -11757, -11919, -12008, + -12008, -11919, -11757, -11535, + -11256, -10920, -10538, -10122, + -9676, -9203, -8712, -8212, + -7707, -7196, -6684, -6178, + -5680, -5189, -4707, -4239, + -3784, -3342, -2912, -2497, + -2098, -1713, -1341, -986, + -647, -325, -18, 272, + 540, 786, 1012, 1215, + 1393, 1545, 1670, 1765, + 1828, 1858, 1853, 1813, + 1741, 1640, 1512, 1360, + 1188, 1000, 801, 593, + 380, 163, -52, -266, + -474, -675, -867, -1050, + -1221, -1380, -1523, -1650, + -1759, -1849, -1921, -1977, + -2017, -2038, -2040, -2024, + -1992, -1946, -1885, -1811, + -1724, -1624, -1510, -1380, + -1234, -1070, -885, -676, + -441, -180, 105, 412, + 738, 1076, 1423, 1775, + 2128, 2477, 2820, 3151, + 3470, 3772, 4058, 4328, + 4585, 4825, 5050, 5257, + 5449, 5624, 5783, 5925, + 6053, 6171, 6277, 6372, + 6454, 6527, 6592, 6651, + 6704, 6753, 6799, 6842, + 6883, 6921, 6955, 6985, + 7011, 7032, 7047, 7054, + 7054, 7047, 7032, 7011, + 6985, 6955, 6921, 6883, + 6842, 6799, 6753, 6704, + 6651, 6592, 6527, 6454, + 6372, 6277, 6171, 6053, + 5925, 5783, 5624, 5449, + 5257, 5050, 4825, 4585, + 4328, 4058, 3772, 3470, + 3151, 2820, 2477, 2128, + 1775, 1423, 1076, 738, + 412, 105, -180, -441, + -676, -885, -1070, -1234, + -1380, -1510, -1624, -1724, + -1811, -1885, -1946, -1992, + -2024, -2040, -2038, -2017, + -1977, -1921, -1849, -1759, + -1650, -1523, -1380, -1221, + -1050, -867, -675, -474, + -266, -52, 163, 380, + 593, 801, 1000, 1188, + 1360, 1512, 1640, 1741, + 1813, 1853, 1858, 1828, + 1765, 1670, 1545, 1393, + 1215, 1012, 786, 540, + 272, -18, -325, -647, + -986, -1341, -1713, -2098, + -2497, -2912, -3342, -3784, + -4239, -4707, -5189, -5680, + -6178, -6684, -7196, -7707, + -8212, -8712, -9203, -9676, + -10122, -10538, -10920, -11256, + -11535, -11757, -11919, -12008, + -8542, -8795, -8998, -9117, + -9117, -8998, -8795, -8542, + -8246, -7901, -7510, -7091, + -6663, -6236, -5814, -5389, + -4951, -4493, -4020, -3544, + -3063, -2570, -2062, -1550, + -1055, -594, -175, 203, + 543, 843, 1099, 1306, + 1474, 1618, 1759, 1902, + 2044, 2176, 2297, 2411, + 2524, 2627, 2704, 2744, + 2749, 2733, 2705, 2668, + 2619, 2558, 2490, 2431, + 2393, 2373, 2354, 2320, + 2267, 2200, 2119, 2011, + 1866, 1676, 1449, 1198, + 936, 670, 398, 119, + -159, -423, -667, -897, + -1128, -1370, -1624, -1883, + -2145, -2410, -2681, -2954, + -3216, -3450, -3642, -3786, + -3886, -3945, -3956, -3909, + -3803, -3653, -3475, -3278, + -3060, -2815, -2544, -2252, + -1944, -1621, -1275, -900, + -494, -65, 374, 813, + 1246, 1672, 2083, 2467, + 2811, 3114, 3382, 3626, + 3852, 4060, 4247, 4413, + 4568, 4721, 4875, 5018, + 5137, 5226, 5286, 5325, + 5343, 5338, 5305, 5251, + 5191, 5143, 5116, 5106, + 5106, 5116, 5143, 5191, + 5251, 5305, 5338, 5343, + 5325, 5286, 5226, 5137, + 5018, 4875, 4721, 4568, + 4413, 4247, 4060, 3852, + 3626, 3382, 3114, 2811, + 2467, 2083, 1672, 1246, + 813, 374, -65, -494, + -900, -1275, -1621, -1944, + -2252, -2544, -2815, -3060, + -3278, -3475, -3653, -3803, + -3909, -3956, -3945, -3886, + -3786, -3642, -3450, -3216, + -2954, -2681, -2410, -2145, + -1883, -1624, -1370, -1128, + -897, -667, -423, -159, + 119, 398, 670, 936, + 1198, 1449, 1676, 1866, + 2011, 2119, 2200, 2267, + 2320, 2354, 2373, 2393, + 2431, 2490, 2558, 2619, + 2668, 2705, 2733, 2749, + 2744, 2704, 2627, 2524, + 2411, 2297, 2176, 2044, + 1902, 1759, 1618, 1474, + 1306, 1099, 843, 543, + 203, -175, -594, -1055, + -1550, -2062, -2570, -3063, + -3544, -4020, -4493, -4951, + -5389, -5814, -6236, -6663, + -7091, -7510, -7901, -8246, + -8542, -8795, -8998, -9117, + -8657, -8946, -9175, -9307, + -9307, -9175, -8946, -8657, + -8318, -7926, -7489, -7024, + -6550, -6080, -5617, -5158, + -4689, -4203, -3707, -3213, + -2721, -2220, -1708, -1196, + -703, -240, 189, 587, + 957, 1301, 1613, 1889, + 2135, 2369, 2606, 2854, + 3107, 3355, 3595, 3830, + 4062, 4283, 4476, 4626, + 4734, 4812, 4871, 4915, + 4940, 4947, 4943, 4939, + 4946, 4963, 4980, 4984, + 4973, 4951, 4923, 4878, + 4804, 4692, 4552, 4396, + 4235, 4069, 3893, 3703, + 3505, 3306, 3113, 2917, + 2703, 2456, 2170, 1848, + 1497, 1112, 692, 240, + -225, -680, -1109, -1506, + -1869, -2195, -2478, -2710, + -2890, -3030, -3143, -3239, + -3314, -3358, -3370, -3354, + -3316, -3257, -3171, -3054, + -2905, -2733, -2549, -2363, + -2179, -1999, -1827, -1674, + -1550, -1454, -1373, -1290, + -1196, -1088, -967, -835, + -682, -500, -292, -73, + 134, 320, 484, 633, + 764, 868, 939, 978, + 998, 1014, 1032, 1045, + 1045, 1032, 1014, 998, + 978, 939, 868, 764, + 633, 484, 320, 134, + -73, -292, -500, -682, + -835, -967, -1088, -1196, + -1290, -1373, -1454, -1550, + -1674, -1827, -1999, -2179, + -2363, -2549, -2733, -2905, + -3054, -3171, -3257, -3316, + -3354, -3370, -3358, -3314, + -3239, -3143, -3030, -2890, + -2710, -2478, -2195, -1869, + -1506, -1109, -680, -225, + 240, 692, 1112, 1497, + 1848, 2170, 2456, 2703, + 2917, 3113, 3306, 3505, + 3703, 3893, 4069, 4235, + 4396, 4552, 4692, 4804, + 4878, 4923, 4951, 4973, + 4984, 4980, 4963, 4946, + 4939, 4943, 4947, 4940, + 4915, 4871, 4812, 4734, + 4626, 4476, 4283, 4062, + 3830, 3595, 3355, 3107, + 2854, 2606, 2369, 2135, + 1889, 1613, 1301, 957, + 587, 189, -240, -703, + -1196, -1708, -2220, -2721, + -3213, -3707, -4203, -4689, + -5158, -5617, -6080, -6550, + -7024, -7489, -7926, -8318, + -8657, -8946, -9175, -9307, + -10645, -10976, -11220, -11353, + -11353, -11220, -10976, -10645, + -10246, -9791, -9302, -8797, + -8288, -7782, -7284, -6799, + -6329, -5873, -5432, -5008, + -4603, -4215, -3843, -3485, + -3140, -2806, -2478, -2154, + -1832, -1511, -1189, -863, + -527, -181, 176, 544, + 923, 1312, 1705, 2095, + 2474, 2836, 3173, 3481, + 3759, 4007, 4227, 4422, + 4594, 4748, 4886, 5013, + 5133, 5249, 5367, 5489, + 5617, 5755, 5906, 6074, + 6257, 6459, 6679, 6914, + 7159, 7410, 7664, 7917, + 8166, 8407, 8633, 8837, + 9009, 9135, 9202, 9199, + 9118, 8958, 8720, 8412, + 8047, 7638, 7200, 6745, + 6284, 5822, 5366, 4914, + 4468, 4026, 3589, 3158, + 2733, 2314, 1900, 1490, + 1082, 673, 260, -158, + -585, -1023, -1473, -1935, + -2410, -2898, -3399, -3910, + -4422, -4923, -5399, -5839, + -6229, -6557, -6812, -6993, + -7103, -7149, -7141, -7089, + -7008, -6907, -6795, -6679, + -6565, -6457, -6360, -6272, + -6195, -6133, -6089, -6066, + -6066, -6089, -6133, -6195, + -6272, -6360, -6457, -6565, + -6679, -6795, -6907, -7008, + -7089, -7141, -7149, -7103, + -6993, -6812, -6557, -6229, + -5839, -5399, -4923, -4422, + -3910, -3399, -2898, -2410, + -1935, -1473, -1023, -585, + -158, 260, 673, 1082, + 1490, 1900, 2314, 2733, + 3158, 3589, 4026, 4468, + 4914, 5366, 5822, 6284, + 6745, 7200, 7638, 8047, + 8412, 8720, 8958, 9118, + 9199, 9202, 9135, 9009, + 8837, 8633, 8407, 8166, + 7917, 7664, 7410, 7159, + 6914, 6679, 6459, 6257, + 6074, 5906, 5755, 5617, + 5489, 5367, 5249, 5133, + 5013, 4886, 4748, 4594, + 4422, 4227, 4007, 3759, + 3481, 3173, 2836, 2474, + 2095, 1705, 1312, 923, + 544, 176, -181, -527, + -863, -1189, -1511, -1832, + -2154, -2478, -2806, -3140, + -3485, -3843, -4215, -4603, + -5008, -5432, -5873, -6329, + -6799, -7284, -7782, -8288, + -8797, -9302, -9791, -10246, + -10645, -10976, -11220, -11353, + -9418, -9776, -10039, -10182, + -10182, -10039, -9776, -9418, + -8985, -8499, -7987, -7477, + -6985, -6524, -6102, -5725, + -5391, -5094, -4828, -4589, + -4367, -4156, -3948, -3739, + -3522, -3291, -3044, -2783, + -2507, -2216, -1911, -1595, + -1270, -938, -603, -268, + 62, 388, 712, 1033, + 1351, 1666, 1981, 2297, + 2615, 2933, 3246, 3551, + 3845, 4125, 4389, 4633, + 4855, 5057, 5240, 5404, + 5553, 5693, 5827, 5957, + 6084, 6209, 6332, 6450, + 6562, 6667, 6766, 6859, + 6949, 7037, 7124, 7203, + 7271, 7318, 7334, 7309, + 7234, 7106, 6921, 6685, + 6404, 6091, 5756, 5409, + 5058, 4714, 4384, 4069, + 3770, 3487, 3218, 2958, + 2704, 2452, 2200, 1944, + 1680, 1403, 1108, 791, + 451, 84, -313, -743, + -1204, -1689, -2192, -2703, + -3210, -3696, -4147, -4552, + -4902, -5188, -5405, -5557, + -5647, -5685, -5684, -5656, + -5610, -5555, -5496, -5438, + -5385, -5335, -5287, -5245, + -5209, -5180, -5156, -5141, + -5141, -5156, -5180, -5209, + -5245, -5287, -5335, -5385, + -5438, -5496, -5555, -5610, + -5656, -5684, -5685, -5647, + -5557, -5405, -5188, -4902, + -4552, -4147, -3696, -3210, + -2703, -2192, -1689, -1204, + -743, -313, 84, 451, + 791, 1108, 1403, 1680, + 1944, 2200, 2452, 2704, + 2958, 3218, 3487, 3770, + 4069, 4384, 4714, 5058, + 5409, 5756, 6091, 6404, + 6685, 6921, 7106, 7234, + 7309, 7334, 7318, 7271, + 7203, 7124, 7037, 6949, + 6859, 6766, 6667, 6562, + 6450, 6332, 6209, 6084, + 5957, 5827, 5693, 5553, + 5404, 5240, 5057, 4855, + 4633, 4389, 4125, 3845, + 3551, 3246, 2933, 2615, + 2297, 1981, 1666, 1351, + 1033, 712, 388, 62, + -268, -603, -938, -1270, + -1595, -1911, -2216, -2507, + -2783, -3044, -3291, -3522, + -3739, -3948, -4156, -4367, + -4589, -4828, -5094, -5391, + -5725, -6102, -6524, -6985, + -7477, -7987, -8499, -8985, + -9418, -9776, -10039, -10182, + -9914, -10293, -10579, -10736, + -10736, -10579, -10293, -9914, + -9468, -8976, -8464, -7958, + -7475, -7026, -6624, -6279, + -5994, -5760, -5564, -5391, + -5225, -5052, -4865, -4661, + -4439, -4194, -3927, -3638, + -3329, -3005, -2679, -2366, + -2079, -1823, -1603, -1423, + -1280, -1171, -1086, -1018, + -960, -897, -817, -707, + -559, -373, -150, 100, + 365, 638, 914, 1190, + 1462, 1724, 1972, 2199, + 2403, 2587, 2754, 2909, + 3057, 3200, 3340, 3474, + 3603, 3727, 3856, 3994, + 4147, 4315, 4494, 4675, + 4849, 5007, 5145, 5262, + 5353, 5413, 5435, 5417, + 5357, 5259, 5129, 4979, + 4822, 4664, 4510, 4362, + 4218, 4076, 3935, 3796, + 3660, 3521, 3374, 3214, + 3038, 2843, 2628, 2395, + 2150, 1892, 1619, 1330, + 1027, 717, 407, 110, + -161, -396, -592, -748, + -862, -933, -959, -940, + -881, -789, -680, -564, + -450, -341, -240, -146, + -55, 34, 119, 193, + 251, 294, 323, 338, + 338, 323, 294, 251, + 193, 119, 34, -55, + -146, -240, -341, -450, + -564, -680, -789, -881, + -940, -959, -933, -862, + -748, -592, -396, -161, + 110, 407, 717, 1027, + 1330, 1619, 1892, 2150, + 2395, 2628, 2843, 3038, + 3214, 3374, 3521, 3660, + 3796, 3935, 4076, 4218, + 4362, 4510, 4664, 4822, + 4979, 5129, 5259, 5357, + 5417, 5435, 5413, 5353, + 5262, 5145, 5007, 4849, + 4675, 4494, 4315, 4147, + 3994, 3856, 3727, 3603, + 3474, 3340, 3200, 3057, + 2909, 2754, 2587, 2403, + 2199, 1972, 1724, 1462, + 1190, 914, 638, 365, + 100, -150, -373, -559, + -707, -817, -897, -960, + -1018, -1086, -1171, -1280, + -1423, -1603, -1823, -2079, + -2366, -2679, -3005, -3329, + -3638, -3927, -4194, -4439, + -4661, -4865, -5052, -5225, + -5391, -5564, -5760, -5994, + -6279, -6624, -7026, -7475, + -7958, -8464, -8976, -9468, + -9914, -10293, -10579, -10736, + -8191, -8494, -8740, -8883, + -8883, -8740, -8494, -8191, + -7858, -7504, -7129, -6729, + -6293, -5814, -5307, -4795, + -4295, -3810, -3331, -2850, + -2358, -1852, -1345, -860, + -414, -13, 349, 683, + 996, 1285, 1538, 1739, + 1878, 1950, 1962, 1924, + 1847, 1739, 1598, 1423, + 1218, 993, 763, 543, + 348, 184, 46, -81, + -203, -315, -405, -463, + -482, -462, -406, -328, + -235, -128, 6, 179, + 399, 665, 970, 1297, + 1632, 1971, 2322, 2692, + 3079, 3473, 3855, 4203, + 4500, 4740, 4928, 5076, + 5194, 5284, 5340, 5352, + 5307, 5204, 5051, 4864, + 4657, 4434, 4190, 3918, + 3609, 3263, 2885, 2486, + 2077, 1666, 1250, 823, + 385, -58, -490, -895, + -1260, -1577, -1845, -2068, + -2254, -2407, -2520, -2582, + -2592, -2556, -2486, -2394, + -2290, -2177, -2050, -1896, + -1708, -1488, -1251, -1008, + -770, -542, -322, -104, + 117, 340, 551, 736, + 881, 983, 1045, 1074, + 1074, 1045, 983, 881, + 736, 551, 340, 117, + -104, -322, -542, -770, + -1008, -1251, -1488, -1708, + -1896, -2050, -2177, -2290, + -2394, -2486, -2556, -2592, + -2582, -2520, -2407, -2254, + -2068, -1845, -1577, -1260, + -895, -490, -58, 385, + 823, 1250, 1666, 2077, + 2486, 2885, 3263, 3609, + 3918, 4190, 4434, 4657, + 4864, 5051, 5204, 5307, + 5352, 5340, 5284, 5194, + 5076, 4928, 4740, 4500, + 4203, 3855, 3473, 3079, + 2692, 2322, 1971, 1632, + 1297, 970, 665, 399, + 179, 6, -128, -235, + -328, -406, -462, -482, + -463, -405, -315, -203, + -81, 46, 184, 348, + 543, 763, 993, 1218, + 1423, 1598, 1739, 1847, + 1924, 1962, 1950, 1878, + 1739, 1538, 1285, 996, + 683, 349, -13, -414, + -860, -1345, -1852, -2358, + -2850, -3331, -3810, -4295, + -4795, -5307, -5814, -6293, + -6729, -7129, -7504, -7858, + -8191, -8494, -8740, -8883, + -4178, -4571, -4921, -5135, + -5135, -4921, -4571, -4178, + -3785, -3394, -3002, -2642, + -2366, -2211, -2161, -2160, + -2147, -2088, -1980, -1821, + -1590, -1255, -810, -298, + 207, 641, 974, 1214, + 1371, 1438, 1396, 1249, + 1041, 841, 705, 652, + 674, 758, 898, 1091, + 1318, 1532, 1677, 1713, + 1639, 1480, 1263, 999, + 698, 391, 130, -30, + -61, 28, 199, 412, + 642, 873, 1083, 1234, + 1290, 1242, 1114, 949, + 783, 638, 531, 485, + 532, 690, 947, 1251, + 1540, 1767, 1912, 1974, + 1946, 1816, 1573, 1237, + 856, 493, 195, -21, + -158, -218, -197, -101, + 40, 168, 227, 190, + 62, -135, -384, -676, + -997, -1314, -1574, -1727, + -1750, -1654, -1472, -1238, + -975, -706, -462, -282, + -200, -223, -324, -461, + -594, -705, -775, -779, + -681, -460, -133, 253, + 639, 982, 1265, 1483, + 1625, 1669, 1604, 1447, + 1248, 1063, 931, 865, + 865, 931, 1063, 1248, + 1447, 1604, 1669, 1625, + 1483, 1265, 982, 639, + 253, -133, -460, -681, + -779, -775, -705, -594, + -461, -324, -223, -200, + -282, -462, -706, -975, + -1238, -1472, -1654, -1750, + -1727, -1574, -1314, -997, + -676, -384, -135, 62, + 190, 227, 168, 40, + -101, -197, -218, -158, + -21, 195, 493, 856, + 1237, 1573, 1816, 1946, + 1974, 1912, 1767, 1540, + 1251, 947, 690, 532, + 485, 531, 638, 783, + 949, 1114, 1242, 1290, + 1234, 1083, 873, 642, + 412, 199, 28, -61, + -30, 130, 391, 698, + 999, 1263, 1480, 1639, + 1713, 1677, 1532, 1318, + 1091, 898, 758, 674, + 652, 705, 841, 1041, + 1249, 1396, 1438, 1371, + 1214, 974, 641, 207, + -298, -810, -1255, -1590, + -1821, -1980, -2088, -2147, + -2160, -2161, -2211, -2366, + -2642, -3002, -3394, -3785, + -4178, -4571, -4921, -5135, + -4733, -5126, -5504, -5744, + -5744, -5504, -5126, -4733, + -4391, -4072, -3704, -3247, + -2735, -2261, -1912, -1700, + -1556, -1380, -1116, -781, + -443, -155, 86, 329, + 620, 962, 1297, 1547, + 1667, 1664, 1584, 1467, + 1322, 1126, 855, 517, + 158, -164, -412, -592, + -733, -864, -990, -1091, + -1149, -1166, -1172, -1206, + -1287, -1401, -1507, -1568, + -1571, -1530, -1463, -1374, + -1242, -1036, -745, -385, + -4, 351, 657, 922, + 1167, 1403, 1615, 1771, + 1853, 1870, 1860, 1867, + 1913, 1990, 2068, 2124, + 2156, 2178, 2204, 2229, + 2231, 2181, 2065, 1890, + 1681, 1462, 1249, 1044, + 849, 666, 505, 377, + 284, 224, 188, 168, + 154, 139, 118, 88, + 48, 1, -45, -82, + -105, -113, -108, -92, + -63, -19, 42, 118, + 201, 282, 349, 399, + 434, 459, 481, 503, + 522, 536, 543, 550, + 565, 594, 636, 681, + 717, 736, 741, 739, + 739, 741, 736, 717, + 681, 636, 594, 565, + 550, 543, 536, 522, + 503, 481, 459, 434, + 399, 349, 282, 201, + 118, 42, -19, -63, + -92, -108, -113, -105, + -82, -45, 1, 48, + 88, 118, 139, 154, + 168, 188, 224, 284, + 377, 505, 666, 849, + 1044, 1249, 1462, 1681, + 1890, 2065, 2181, 2231, + 2229, 2204, 2178, 2156, + 2124, 2068, 1990, 1913, + 1867, 1860, 1870, 1853, + 1771, 1615, 1403, 1167, + 922, 657, 351, -4, + -385, -745, -1036, -1242, + -1374, -1463, -1530, -1571, + -1568, -1507, -1401, -1287, + -1206, -1172, -1166, -1149, + -1091, -990, -864, -733, + -592, -412, -164, 158, + 517, 855, 1126, 1322, + 1467, 1584, 1664, 1667, + 1547, 1297, 962, 620, + 329, 86, -155, -443, + -781, -1116, -1380, -1556, + -1700, -1912, -2261, -2735, + -3247, -3704, -4072, -4391, + -4733, -5126, -5504, -5744, + -6693, -7200, -7630, -7883, + -7883, -7630, -7200, -6693, + -6181, -5688, -5211, -4745, + -4306, -3923, -3624, -3409, + -3242, -3081, -2899, -2692, + -2463, -2208, -1910, -1555, + -1144, -710, -303, 37, + 290, 461, 555, 573, + 506, 351, 120, -156, + -439, -702, -935, -1136, + -1304, -1432, -1516, -1559, + -1578, -1603, -1659, -1755, + -1883, -2030, -2189, -2360, + -2541, -2722, -2879, -2981, + -3002, -2926, -2761, -2530, + -2258, -1962, -1651, -1328, + -995, -665, -347, -51, + 225, 487, 743, 1001, + 1263, 1529, 1796, 2061, + 2328, 2597, 2864, 3119, + 3344, 3520, 3633, 3677, + 3653, 3566, 3425, 3239, + 3021, 2781, 2526, 2265, + 2010, 1772, 1563, 1387, + 1242, 1119, 1007, 899, + 803, 730, 686, 670, + 669, 669, 663, 659, + 673, 722, 811, 939, + 1100, 1287, 1496, 1732, + 1996, 2285, 2585, 2882, + 3165, 3427, 3663, 3868, + 4035, 4158, 4236, 4275, + 4286, 4281, 4270, 4262, + 4262, 4270, 4281, 4286, + 4275, 4236, 4158, 4035, + 3868, 3663, 3427, 3165, + 2882, 2585, 2285, 1996, + 1732, 1496, 1287, 1100, + 939, 811, 722, 673, + 659, 663, 669, 669, + 670, 686, 730, 803, + 899, 1007, 1119, 1242, + 1387, 1563, 1772, 2010, + 2265, 2526, 2781, 3021, + 3239, 3425, 3566, 3653, + 3677, 3633, 3520, 3344, + 3119, 2864, 2597, 2328, + 2061, 1796, 1529, 1263, + 1001, 743, 487, 225, + -51, -347, -665, -995, + -1328, -1651, -1962, -2258, + -2530, -2761, -2926, -3002, + -2981, -2879, -2722, -2541, + -2360, -2189, -2030, -1883, + -1755, -1659, -1603, -1578, + -1559, -1516, -1432, -1304, + -1136, -935, -702, -439, + -156, 120, 351, 506, + 573, 555, 461, 290, + 37, -303, -710, -1144, + -1555, -1910, -2208, -2463, + -2692, -2899, -3081, -3242, + -3409, -3624, -3923, -4306, + -4745, -5211, -5688, -6181, + -6693, -7200, -7630, -7883, + -8495, -8899, -9239, -9439, + -9439, -9239, -8899, -8495, + -8073, -7636, -7170, -6670, + -6158, -5680, -5281, -4972, + -4723, -4484, -4218, -3921, + -3609, -3300, -2996, -2685, + -2358, -2023, -1709, -1455, + -1285, -1204, -1202, -1267, + -1398, -1597, -1858, -2159, + -2466, -2745, -2980, -3168, + -3319, -3437, -3518, -3555, + -3548, -3510, -3469, -3450, + -3457, -3477, -3487, -3470, + -3422, -3347, -3248, -3119, + -2941, -2690, -2360, -1964, + -1532, -1095, -669, -257, + 147, 542, 912, 1234, + 1496, 1706, 1889, 2071, + 2263, 2459, 2642, 2802, + 2940, 3067, 3192, 3309, + 3394, 3422, 3387, 3300, + 3190, 3079, 2973, 2864, + 2742, 2611, 2493, 2413, + 2385, 2399, 2432, 2463, + 2490, 2524, 2581, 2663, + 2754, 2831, 2882, 2915, + 2949, 3009, 3100, 3211, + 3324, 3429, 3532, 3648, + 3789, 3947, 4097, 4216, + 4298, 4352, 4400, 4456, + 4520, 4578, 4619, 4645, + 4671, 4717, 4787, 4866, + 4930, 4966, 4976, 4975, + 4975, 4976, 4966, 4930, + 4866, 4787, 4717, 4671, + 4645, 4619, 4578, 4520, + 4456, 4400, 4352, 4298, + 4216, 4097, 3947, 3789, + 3648, 3532, 3429, 3324, + 3211, 3100, 3009, 2949, + 2915, 2882, 2831, 2754, + 2663, 2581, 2524, 2490, + 2463, 2432, 2399, 2385, + 2413, 2493, 2611, 2742, + 2864, 2973, 3079, 3190, + 3300, 3387, 3422, 3394, + 3309, 3192, 3067, 2940, + 2802, 2642, 2459, 2263, + 2071, 1889, 1706, 1496, + 1234, 912, 542, 147, + -257, -669, -1095, -1532, + -1964, -2360, -2690, -2941, + -3119, -3248, -3347, -3422, + -3470, -3487, -3477, -3457, + -3450, -3469, -3510, -3548, + -3555, -3518, -3437, -3319, + -3168, -2980, -2745, -2466, + -2159, -1858, -1597, -1398, + -1267, -1202, -1204, -1285, + -1455, -1709, -2023, -2358, + -2685, -2996, -3300, -3609, + -3921, -4218, -4484, -4723, + -4972, -5281, -5680, -6158, + -6670, -7170, -7636, -8073, + -8495, -8899, -9239, -9439, + -17305, -17634, -17976, -18200, + -18200, -17976, -17634, -17305, + -17053, -16844, -16596, -16243, + -15792, -15309, -14869, -14490, + -14129, -13720, -13244, -12747, + -12301, -11950, -11670, -11394, + -11065, -10681, -10304, -10007, + -9822, -9714, -9617, -9481, + -9314, -9165, -9080, -9059, + -9055, -9013, -8911, -8776, + -8655, -8580, -8532, -8460, + -8318, -8101, -7848, -7612, + -7415, -7232, -7012, -6720, + -6360, -5969, -5585, -5218, + -4840, -4416, -3934, -3422, + -2925, -2473, -2053, -1630, + -1171, -679, -189, 256, + 643, 997, 1361, 1761, + 2191, 2614, 2999, 3342, + 3667, 4003, 4355, 4702, + 5020, 5299, 5559, 5830, + 6126, 6437, 6731, 6982, + 7190, 7384, 7597, 7841, + 8103, 8354, 8577, 8776, + 8971, 9180, 9406, 9634, + 9849, 10047, 10240, 10443, + 10662, 10891, 11119, 11339, + 11557, 11784, 12027, 12281, + 12535, 12775, 12999, 13210, + 13417, 13621, 13816, 13992, + 14147, 14285, 14417, 14552, + 14687, 14816, 14927, 15016, + 15082, 15127, 15156, 15170, + 15170, 15156, 15127, 15082, + 15016, 14927, 14816, 14687, + 14552, 14417, 14285, 14147, + 13992, 13816, 13621, 13417, + 13210, 12999, 12775, 12535, + 12281, 12027, 11784, 11557, + 11339, 11119, 10891, 10662, + 10443, 10240, 10047, 9849, + 9634, 9406, 9180, 8971, + 8776, 8577, 8354, 8103, + 7841, 7597, 7384, 7190, + 6982, 6731, 6437, 6126, + 5830, 5559, 5299, 5020, + 4702, 4355, 4003, 3667, + 3342, 2999, 2614, 2191, + 1761, 1361, 997, 643, + 256, -189, -679, -1171, + -1630, -2053, -2473, -2925, + -3422, -3934, -4416, -4840, + -5218, -5585, -5969, -6360, + -6720, -7012, -7232, -7415, + -7612, -7848, -8101, -8318, + -8460, -8532, -8580, -8655, + -8776, -8911, -9013, -9055, + -9059, -9080, -9165, -9314, + -9481, -9617, -9714, -9822, + -10007, -10304, -10681, -11065, + -11394, -11670, -11950, -12301, + -12747, -13244, -13720, -14129, + -14490, -14869, -15309, -15792, + -16243, -16596, -16844, -17053, + -17305, -17634, -17976, -18200, + -15000, -15279, -15540, -15704, + -15704, -15540, -15279, -15000, + -14739, -14478, -14177, -13810, + -13391, -12968, -12593, -12285, + -12012, -11724, -11390, -11018, + -10640, -10287, -9968, -9669, + -9366, -9049, -8738, -8467, + -8259, -8114, -8014, -7939, + -7877, -7833, -7817, -7832, + -7864, -7885, -7876, -7834, + -7770, -7695, -7612, -7513, + -7382, -7209, -7002, -6781, + -6563, -6345, -6112, -5843, + -5531, -5184, -4822, -4458, + -4087, -3686, -3236, -2740, + -2228, -1732, -1267, -826, + -386, 65, 519, 947, + 1320, 1635, 1917, 2197, + 2493, 2794, 3076, 3320, + 3530, 3732, 3954, 4203, + 4458, 4692, 4890, 5057, + 5215, 5386, 5571, 5756, + 5918, 6055, 6183, 6328, + 6505, 6712, 6931, 7148, + 7359, 7578, 7820, 8085, + 8356, 8613, 8844, 9056, + 9267, 9488, 9719, 9944, + 10144, 10312, 10462, 10619, + 10795, 10985, 11164, 11312, + 11426, 11526, 11637, 11770, + 11911, 12032, 12110, 12146, + 12169, 12209, 12275, 12346, + 12389, 12388, 12356, 12326, + 12326, 12356, 12388, 12389, + 12346, 12275, 12209, 12169, + 12146, 12110, 12032, 11911, + 11770, 11637, 11526, 11426, + 11312, 11164, 10985, 10795, + 10619, 10462, 10312, 10144, + 9944, 9719, 9488, 9267, + 9056, 8844, 8613, 8356, + 8085, 7820, 7578, 7359, + 7148, 6931, 6712, 6505, + 6328, 6183, 6055, 5918, + 5756, 5571, 5386, 5215, + 5057, 4890, 4692, 4458, + 4203, 3954, 3732, 3530, + 3320, 3076, 2794, 2493, + 2197, 1917, 1635, 1320, + 947, 519, 65, -386, + -826, -1267, -1732, -2228, + -2740, -3236, -3686, -4087, + -4458, -4822, -5184, -5531, + -5843, -6112, -6345, -6563, + -6781, -7002, -7209, -7382, + -7513, -7612, -7695, -7770, + -7834, -7876, -7885, -7864, + -7832, -7817, -7833, -7877, + -7939, -8014, -8114, -8259, + -8467, -8738, -9049, -9366, + -9669, -9968, -10287, -10640, + -11018, -11390, -11724, -12012, + -12285, -12593, -12968, -13391, + -13810, -14177, -14478, -14739, + -15000, -15279, -15540, -15704, + -18936, -19192, -19399, -19519, + -19519, -19399, -19192, -18936, + -18656, -18363, -18066, -17770, + -17485, -17227, -17010, -16837, + -16693, -16550, -16383, -16178, + -15932, -15647, -15330, -14986, + -14622, -14243, -13859, -13483, + -13129, -12809, -12529, -12289, + -12080, -11890, -11704, -11510, + -11300, -11071, -10826, -10561, + -10268, -9941, -9582, -9200, + -8809, -8424, -8053, -7698, + -7351, -7005, -6657, -6309, + -5959, -5601, -5227, -4831, + -4405, -3948, -3464, -2962, + -2450, -1938, -1432, -934, + -445, 33, 497, 943, + 1366, 1768, 2157, 2545, + 2942, 3352, 3767, 4179, + 4586, 4986, 5381, 5776, + 6167, 6547, 6903, 7231, + 7534, 7819, 8093, 8363, + 8628, 8890, 9146, 9402, + 9661, 9931, 10210, 10493, + 10774, 11050, 11315, 11569, + 11809, 12037, 12256, 12469, + 12678, 12880, 13075, 13265, + 13455, 13648, 13845, 14045, + 14243, 14432, 14605, 14763, + 14910, 15050, 15181, 15301, + 15406, 15495, 15569, 15634, + 15696, 15759, 15820, 15872, + 15911, 15936, 15949, 15954, + 15954, 15949, 15936, 15911, + 15872, 15820, 15759, 15696, + 15634, 15569, 15495, 15406, + 15301, 15181, 15050, 14910, + 14763, 14605, 14432, 14243, + 14045, 13845, 13648, 13455, + 13265, 13075, 12880, 12678, + 12469, 12256, 12037, 11809, + 11569, 11315, 11050, 10774, + 10493, 10210, 9931, 9661, + 9402, 9146, 8890, 8628, + 8363, 8093, 7819, 7534, + 7231, 6903, 6547, 6167, + 5776, 5381, 4986, 4586, + 4179, 3767, 3352, 2942, + 2545, 2157, 1768, 1366, + 943, 497, 33, -445, + -934, -1432, -1938, -2450, + -2962, -3464, -3948, -4405, + -4831, -5227, -5601, -5959, + -6309, -6657, -7005, -7351, + -7698, -8053, -8424, -8809, + -9200, -9582, -9941, -10268, + -10561, -10826, -11071, -11300, + -11510, -11704, -11890, -12080, + -12289, -12529, -12809, -13129, + -13483, -13859, -14243, -14622, + -14986, -15330, -15647, -15932, + -16178, -16383, -16550, -16693, + -16837, -17010, -17227, -17485, + -17770, -18066, -18363, -18656, + -18936, -19192, -19399, -19519, + -20207, -20378, -20517, -20599, + -20599, -20517, -20378, -20207, + -20011, -19788, -19536, -19259, + -18964, -18662, -18363, -18071, + -17779, -17478, -17162, -16834, + -16498, -16158, -15817, -15475, + -15131, -14785, -14445, -14114, + -13795, -13488, -13196, -12922, + -12663, -12415, -12172, -11928, + -11677, -11418, -11150, -10871, + -10578, -10265, -9930, -9577, + -9210, -8836, -8458, -8080, + -7696, -7303, -6899, -6486, + -6066, -5640, -5206, -4760, + -4299, -3820, -3326, -2820, + -2309, -1797, -1287, -780, + -275, 227, 720, 1199, + 1660, 2106, 2543, 2974, + 3403, 3829, 4249, 4659, + 5059, 5451, 5838, 6222, + 6601, 6969, 7320, 7652, + 7969, 8277, 8577, 8870, + 9155, 9433, 9706, 9975, + 10244, 10516, 10790, 11065, + 11337, 11603, 11861, 12112, + 12355, 12591, 12819, 13042, + 13261, 13474, 13679, 13876, + 14065, 14251, 14437, 14620, + 14795, 14958, 15106, 15244, + 15377, 15508, 15634, 15750, + 15852, 15940, 16017, 16090, + 16160, 16224, 16279, 16322, + 16354, 16378, 16395, 16403, + 16403, 16395, 16378, 16354, + 16322, 16279, 16224, 16160, + 16090, 16017, 15940, 15852, + 15750, 15634, 15508, 15377, + 15244, 15106, 14958, 14795, + 14620, 14437, 14251, 14065, + 13876, 13679, 13474, 13261, + 13042, 12819, 12591, 12355, + 12112, 11861, 11603, 11337, + 11065, 10790, 10516, 10244, + 9975, 9706, 9433, 9155, + 8870, 8577, 8277, 7969, + 7652, 7320, 6969, 6601, + 6222, 5838, 5451, 5059, + 4659, 4249, 3829, 3403, + 2974, 2543, 2106, 1660, + 1199, 720, 227, -275, + -780, -1287, -1797, -2309, + -2820, -3326, -3820, -4299, + -4760, -5206, -5640, -6066, + -6486, -6899, -7303, -7696, + -8080, -8458, -8836, -9210, + -9577, -9930, -10265, -10578, + -10871, -11150, -11418, -11677, + -11928, -12172, -12415, -12663, + -12922, -13196, -13488, -13795, + -14114, -14445, -14785, -15131, + -15475, -15817, -16158, -16498, + -16834, -17162, -17478, -17779, + -18071, -18363, -18662, -18964, + -19259, -19536, -19788, -20011, + -20207, -20378, -20517, -20599, + -20424, -20617, -20780, -20877, + -20877, -20780, -20617, -20424, + -20224, -20020, -19809, -19587, + -19361, -19144, -18953, -18792, + -18651, -18504, -18328, -18113, + -17858, -17567, -17245, -16896, + -16521, -16119, -15698, -15267, + -14839, -14426, -14034, -13664, + -13312, -12969, -12626, -12276, + -11913, -11533, -11134, -10712, + -10267, -9794, -9298, -8787, + -8275, -7774, -7291, -6826, + -6377, -5937, -5499, -5065, + -4635, -4209, -3780, -3340, + -2881, -2399, -1902, -1403, + -914, -443, 14, 464, + 912, 1355, 1784, 2189, + 2569, 2931, 3290, 3657, + 4034, 4418, 4800, 5176, + 5545, 5911, 6277, 6642, + 6998, 7336, 7651, 7943, + 8218, 8482, 8740, 8995, + 9251, 9509, 9771, 10035, + 10302, 10569, 10834, 11095, + 11350, 11594, 11823, 12035, + 12231, 12414, 12592, 12770, + 12948, 13125, 13297, 13464, + 13628, 13794, 13963, 14131, + 14293, 14441, 14573, 14690, + 14796, 14896, 14990, 15074, + 15145, 15205, 15257, 15309, + 15365, 15425, 15488, 15546, + 15594, 15630, 15652, 15663, + 15663, 15652, 15630, 15594, + 15546, 15488, 15425, 15365, + 15309, 15257, 15205, 15145, + 15074, 14990, 14896, 14796, + 14690, 14573, 14441, 14293, + 14131, 13963, 13794, 13628, + 13464, 13297, 13125, 12948, + 12770, 12592, 12414, 12231, + 12035, 11823, 11594, 11350, + 11095, 10834, 10569, 10302, + 10035, 9771, 9509, 9251, + 8995, 8740, 8482, 8218, + 7943, 7651, 7336, 6998, + 6642, 6277, 5911, 5545, + 5176, 4800, 4418, 4034, + 3657, 3290, 2931, 2569, + 2189, 1784, 1355, 912, + 464, 14, -443, -914, + -1403, -1902, -2399, -2881, + -3340, -3780, -4209, -4635, + -5065, -5499, -5937, -6377, + -6826, -7291, -7774, -8275, + -8787, -9298, -9794, -10267, + -10712, -11134, -11533, -11913, + -12276, -12626, -12969, -13312, + -13664, -14034, -14426, -14839, + -15267, -15698, -16119, -16521, + -16896, -17245, -17567, -17858, + -18113, -18328, -18504, -18651, + -18792, -18953, -19144, -19361, + -19587, -19809, -20020, -20224, + -20424, -20617, -20780, -20877, + -15943, -16338, -16850, -17257, + -17257, -16850, -16338, -15943, + -15611, -15218, -14789, -14408, + -14058, -13678, -13279, -12911, + -12564, -12195, -11815, -11460, + -11120, -10763, -10399, -10056, + -9725, -9380, -9031, -8699, + -8379, -8049, -7714, -7395, + -7085, -6767, -6447, -6141, + -5843, -5537, -5230, -4937, + -4651, -4359, -4066, -3785, + -3510, -3230, -2950, -2681, + -2418, -2150, -1883, -1629, + -1379, -1125, -872, -630, + -392, -150, 90, 321, + 547, 777, 1004, 1220, + 1432, 1648, 1861, 2065, + 2266, 2470, 2670, 2862, + 3051, 3242, 3430, 3610, + 3787, 3966, 4141, 4308, + 4474, 4640, 4802, 4955, + 5108, 5262, 5411, 5550, + 5688, 5828, 5964, 6091, + 6216, 6342, 6464, 6579, + 6692, 6806, 6915, 7018, + 7119, 7223, 7321, 7411, + 7500, 7589, 7674, 7751, + 7828, 7905, 7976, 8040, + 8104, 8168, 8227, 8279, + 8329, 8380, 8424, 8462, + 8499, 8537, 8570, 8597, + 8623, 8649, 8669, 8682, + 8694, 8706, 8712, 8712, + 8712, 8712, 8706, 8694, + 8682, 8669, 8649, 8623, + 8597, 8570, 8537, 8499, + 8462, 8424, 8380, 8329, + 8279, 8227, 8168, 8104, + 8040, 7976, 7905, 7828, + 7751, 7674, 7589, 7500, + 7411, 7321, 7223, 7119, + 7018, 6915, 6806, 6692, + 6579, 6464, 6342, 6216, + 6091, 5964, 5828, 5688, + 5550, 5411, 5262, 5108, + 4955, 4802, 4640, 4474, + 4308, 4141, 3966, 3787, + 3610, 3430, 3242, 3051, + 2862, 2670, 2470, 2266, + 2065, 1861, 1648, 1432, + 1220, 1004, 777, 547, + 321, 90, -150, -392, + -630, -872, -1125, -1379, + -1629, -1883, -2150, -2418, + -2681, -2950, -3230, -3510, + -3785, -4066, -4359, -4651, + -4937, -5230, -5537, -5843, + -6141, -6447, -6767, -7085, + -7395, -7714, -8049, -8379, + -8699, -9031, -9380, -9725, + -10056, -10399, -10763, -11120, + -11460, -11815, -12195, -12564, + -12911, -13279, -13678, -14058, + -14408, -14789, -15218, -15611, + -15943, -16338, -16850, -17257, + -22192, -22598, -23110, -23509, + -23509, -23110, -22598, -22192, + -21850, -21461, -21042, -20664, + -20314, -19934, -19537, -19165, + -18811, -18435, -18047, -17679, + -17322, -16949, -16566, -16200, + -15842, -15470, -15091, -14725, + -14366, -13996, -13619, -13255, + -12895, -12525, -12151, -11787, + -11427, -11057, -10684, -10321, + -9960, -9591, -9220, -8857, + -8496, -8128, -7757, -7394, + -7033, -6665, -6296, -5933, + -5572, -5204, -4835, -4473, + -4112, -3745, -3377, -3015, + -2654, -2287, -1919, -1558, + -1196, -830, -462, -101, + 260, 626, 993, 1354, + 1715, 2081, 2447, 2808, + 3169, 3535, 3900, 4261, + 4622, 4987, 5352, 5712, + 6073, 6439, 6803, 7163, + 7523, 7889, 8252, 8612, + 8972, 9337, 9700, 10059, + 10419, 10784, 11146, 11504, + 11864, 12228, 12590, 12948, + 13307, 13670, 14031, 14388, + 14747, 15109, 15469, 15825, + 16183, 16544, 16903, 17257, + 17614, 17973, 18330, 18682, + 19037, 19393, 19745, 20094, + 20444, 20795, 21137, 21474, + 21815, 22150, 22429, 22590, + 22590, 22429, 22150, 21815, + 21474, 21137, 20795, 20444, + 20094, 19745, 19393, 19037, + 18682, 18330, 17973, 17614, + 17257, 16903, 16544, 16183, + 15825, 15469, 15109, 14747, + 14388, 14031, 13670, 13307, + 12948, 12590, 12228, 11864, + 11504, 11146, 10784, 10419, + 10059, 9700, 9337, 8972, + 8612, 8252, 7889, 7523, + 7163, 6803, 6439, 6073, + 5712, 5352, 4987, 4622, + 4261, 3900, 3535, 3169, + 2808, 2447, 2081, 1715, + 1354, 993, 626, 260, + -101, -462, -830, -1196, + -1558, -1919, -2287, -2654, + -3015, -3377, -3745, -4112, + -4473, -4835, -5204, -5572, + -5933, -6296, -6665, -7033, + -7394, -7757, -8128, -8496, + -8857, -9220, -9591, -9960, + -10321, -10684, -11057, -11427, + -11787, -12151, -12525, -12895, + -13255, -13619, -13996, -14366, + -14725, -15091, -15470, -15842, + -16200, -16566, -16949, -17322, + -17679, -18047, -18435, -18811, + -19165, -19537, -19934, -20314, + -20664, -21042, -21461, -21850, + -22192, -22598, -23110, -23509, + -6731, -7112, -7624, -8032, + -8032, -7624, -7112, -6731, + -6441, -6121, -5778, -5483, + -5223, -4945, -4660, -4409, + -4182, -3943, -3702, -3488, + -3290, -3083, -2877, -2693, + -2522, -2346, -2174, -2022, + -1879, -1730, -1586, -1460, + -1342, -1219, -1102, -1003, + -909, -812, -719, -641, + -568, -491, -420, -363, + -309, -252, -200, -159, + -121, -78, -42, -18, + 6, 34, 56, 69, + 83, 100, 111, 115, + 121, 132, 138, 136, + 137, 144, 146, 143, + 143, 147, 147, 143, + 144, 151, 153, 152, + 158, 169, 175, 179, + 193, 213, 228, 242, + 265, 295, 321, 349, + 387, 432, 472, 513, + 566, 626, 682, 741, + 815, 894, 968, 1046, + 1139, 1238, 1333, 1434, + 1552, 1675, 1792, 1917, + 2060, 2206, 2345, 2493, + 2663, 2837, 3001, 3175, + 3373, 3571, 3755, 3954, + 4181, 4406, 4611, 4834, + 5094, 5341, 5548, 5777, + 6066, 6321, 6423, 6411, + 6411, 6423, 6321, 6066, + 5777, 5548, 5341, 5094, + 4834, 4611, 4406, 4181, + 3954, 3755, 3571, 3373, + 3175, 3001, 2837, 2663, + 2493, 2345, 2206, 2060, + 1917, 1792, 1675, 1552, + 1434, 1333, 1238, 1139, + 1046, 968, 894, 815, + 741, 682, 626, 566, + 513, 472, 432, 387, + 349, 321, 295, 265, + 242, 228, 213, 193, + 179, 175, 169, 158, + 152, 153, 151, 144, + 143, 147, 147, 143, + 143, 146, 144, 137, + 136, 138, 132, 121, + 115, 111, 100, 83, + 69, 56, 34, 6, + -18, -42, -78, -121, + -159, -200, -252, -309, + -363, -420, -491, -568, + -641, -719, -812, -909, + -1003, -1102, -1219, -1342, + -1460, -1586, -1730, -1879, + -2022, -2174, -2346, -2522, + -2693, -2877, -3083, -3290, + -3488, -3702, -3943, -4182, + -4409, -4660, -4945, -5223, + -5483, -5778, -6121, -6441, + -6731, -7112, -7624, -8032, + -20255, -20356, -20484, -20585, + -20585, -20484, -20356, -20255, + -20167, -20066, -19958, -19857, + -19759, -19658, -19558, -19457, + -19349, -19248, -19166, -19065, + -18879, -18601, -18295, -18016, + -17754, -17475, -17186, -16908, + -16636, -16358, -16076, -15798, + -15518, -15240, -14972, -14693, + -14353, -13936, -13493, -13075, + -12675, -12257, -11827, -11410, + -11003, -10586, -10160, -9743, + -9331, -8914, -8496, -8079, + -7634, -7142, -6630, -6138, + -5660, -5168, -4663, -4171, + -3690, -3198, -2695, -2202, + -1721, -1229, -726, -234, + 248, 740, 1243, 1735, + 2216, 2708, 3212, 3704, + 4184, 4676, 5181, 5673, + 6150, 6643, 7155, 7647, + 8091, 8508, 8925, 9342, + 9754, 10171, 10596, 11013, + 11420, 11837, 12266, 12683, + 13084, 13501, 13943, 14360, + 14700, 14978, 15245, 15523, + 15802, 16079, 16360, 16638, + 16909, 17187, 17475, 17752, + 18014, 18292, 18597, 18875, + 19059, 19158, 19237, 19335, + 19441, 19540, 19637, 19736, + 19832, 19930, 20036, 20134, + 20220, 20319, 20443, 20542, + 20542, 20443, 20319, 20220, + 20134, 20036, 19930, 19832, + 19736, 19637, 19540, 19441, + 19335, 19237, 19158, 19059, + 18875, 18597, 18292, 18014, + 17752, 17475, 17187, 16909, + 16638, 16360, 16079, 15802, + 15523, 15245, 14978, 14700, + 14360, 13943, 13501, 13084, + 12683, 12266, 11837, 11420, + 11013, 10596, 10171, 9754, + 9342, 8925, 8508, 8091, + 7647, 7155, 6643, 6150, + 5673, 5181, 4676, 4184, + 3704, 3212, 2708, 2216, + 1735, 1243, 740, 248, + -234, -726, -1229, -1721, + -2202, -2695, -3198, -3690, + -4171, -4663, -5168, -5660, + -6138, -6630, -7142, -7634, + -8079, -8496, -8914, -9331, + -9743, -10160, -10586, -11003, + -11410, -11827, -12257, -12675, + -13075, -13493, -13936, -14353, + -14693, -14972, -15240, -15518, + -15798, -16076, -16358, -16636, + -16908, -17186, -17475, -17754, + -18016, -18295, -18601, -18879, + -19065, -19166, -19248, -19349, + -19457, -19558, -19658, -19759, + -19857, -19958, -20066, -20167, + -20255, -20356, -20484, -20585, + -20829, -20870, -20900, -20918, + -20918, -20900, -20870, -20829, + -20779, -20716, -20639, -20550, + -20450, -20337, -20211, -20074, + -19925, -19763, -19589, -19404, + -19208, -19000, -18781, -18550, + -18308, -18053, -17786, -17511, + -17226, -16931, -16625, -16309, + -15984, -15649, -15305, -14951, + -14588, -14216, -13836, -13447, + -13052, -12648, -12237, -11817, + -11389, -10956, -10516, -10071, + -9619, -9162, -8697, -8228, + -7754, -7277, -6794, -6307, + -5816, -5323, -4826, -4326, + -3823, -3318, -2811, -2302, + -1791, -1279, -767, -256, + 256, 767, 1279, 1791, + 2302, 2811, 3318, 3823, + 4326, 4826, 5323, 5816, + 6307, 6794, 7277, 7754, + 8228, 8697, 9162, 9619, + 10071, 10516, 10956, 11389, + 11817, 12237, 12648, 13052, + 13447, 13836, 14216, 14588, + 14951, 15305, 15649, 15984, + 16309, 16625, 16931, 17226, + 17511, 17786, 18053, 18308, + 18550, 18781, 19000, 19208, + 19404, 19589, 19763, 19925, + 20074, 20211, 20337, 20450, + 20550, 20639, 20716, 20779, + 20829, 20870, 20900, 20918, + 20918, 20900, 20870, 20829, + 20779, 20716, 20639, 20550, + 20450, 20337, 20211, 20074, + 19925, 19763, 19589, 19404, + 19208, 19000, 18781, 18550, + 18308, 18053, 17786, 17511, + 17226, 16931, 16625, 16309, + 15984, 15649, 15305, 14951, + 14588, 14216, 13836, 13447, + 13052, 12648, 12237, 11817, + 11389, 10956, 10516, 10071, + 9619, 9162, 8697, 8228, + 7754, 7277, 6794, 6307, + 5816, 5323, 4826, 4326, + 3823, 3318, 2811, 2302, + 1791, 1279, 767, 256, + -256, -767, -1279, -1791, + -2302, -2811, -3318, -3823, + -4326, -4826, -5323, -5816, + -6307, -6794, -7277, -7754, + -8228, -8697, -9162, -9619, + -10071, -10516, -10956, -11389, + -11817, -12237, -12648, -13052, + -13447, -13836, -14216, -14588, + -14951, -15305, -15649, -15984, + -16309, -16625, -16931, -17226, + -17511, -17786, -18053, -18308, + -18550, -18781, -19000, -19208, + -19404, -19589, -19763, -19925, + -20074, -20211, -20337, -20450, + -20550, -20639, -20716, -20779, + -20829, -20870, -20900, -20918, + -24355, -24438, -24500, -24535, + -24535, -24500, -24438, -24355, + -24250, -24117, -23958, -23777, + -23573, -23343, -23090, -22813, + -22515, -22196, -21858, -21504, + -21132, -20740, -20331, -19909, + -19474, -19026, -18565, -18097, + -17621, -17137, -16644, -16145, + -15642, -15136, -14625, -14113, + -13602, -13093, -12585, -12078, + -11574, -11074, -10579, -10088, + -9603, -9124, -8649, -8181, + -7722, -7270, -6824, -6385, + -5954, -5532, -5116, -4706, + -4300, -3902, -3512, -3127, + -2747, -2371, -1999, -1630, + -1264, -901, -539, -179, + 181, 542, 903, 1266, + 1632, 2001, 2373, 2749, + 3129, 3514, 3905, 4303, + 4708, 5119, 5534, 5956, + 6387, 6826, 7272, 7724, + 8183, 8651, 9125, 9605, + 10090, 10581, 11076, 11575, + 12079, 12586, 13095, 13604, + 14114, 14626, 15137, 15643, + 16146, 16645, 17138, 17622, + 18097, 18566, 19026, 19474, + 19909, 20330, 20739, 21131, + 21503, 21857, 22194, 22513, + 22811, 23087, 23341, 23569, + 23774, 23954, 24112, 24244, + 24350, 24431, 24489, 24521, + 24521, 24489, 24431, 24350, + 24244, 24112, 23954, 23774, + 23569, 23341, 23087, 22811, + 22513, 22194, 21857, 21503, + 21131, 20739, 20330, 19909, + 19474, 19026, 18566, 18097, + 17622, 17138, 16645, 16146, + 15643, 15137, 14626, 14114, + 13604, 13095, 12586, 12079, + 11575, 11076, 10581, 10090, + 9605, 9125, 8651, 8183, + 7724, 7272, 6826, 6387, + 5956, 5534, 5119, 4708, + 4303, 3905, 3514, 3129, + 2749, 2373, 2001, 1632, + 1266, 903, 542, 181, + -179, -539, -901, -1264, + -1630, -1999, -2371, -2747, + -3127, -3512, -3902, -4300, + -4706, -5116, -5532, -5954, + -6385, -6824, -7270, -7722, + -8181, -8649, -9124, -9603, + -10088, -10579, -11074, -11574, + -12078, -12585, -13093, -13602, + -14113, -14625, -15136, -15642, + -16145, -16644, -17137, -17621, + -18097, -18565, -19026, -19474, + -19909, -20331, -20740, -21132, + -21504, -21858, -22196, -22515, + -22813, -23090, -23343, -23573, + -23777, -23958, -24117, -24250, + -24355, -24438, -24500, -24535, + -23098, -23208, -23288, -23332, + -23332, -23288, -23208, -23098, + -22957, -22782, -22573, -22334, + -22064, -21764, -21437, -21086, + -20711, -20314, -19897, -19462, + -19011, -18545, -18068, -17581, + -17087, -16584, -16077, -15568, + -15057, -14545, -14034, -13525, + -13020, -12520, -12027, -11543, + -11067, -10599, -10139, -9689, + -9248, -8817, -8397, -7987, + -7588, -7197, -6813, -6439, + -6074, -5718, -5370, -5030, + -4695, -4366, -4042, -3723, + -3409, -3099, -2793, -2491, + -2192, -1895, -1599, -1305, + -1015, -725, -436, -144, + 147, 438, 728, 1017, + 1308, 1601, 1898, 2195, + 2494, 2795, 3101, 3411, + 3725, 4044, 4368, 4698, + 5032, 5372, 5720, 6076, + 6441, 6816, 7199, 7590, + 7989, 8398, 8819, 9250, + 9691, 10141, 10600, 11068, + 11544, 12029, 12522, 13021, + 13526, 14035, 14546, 15058, + 15568, 16078, 16584, 17086, + 17581, 18067, 18544, 19010, + 19461, 19896, 20312, 20708, + 21083, 21435, 21761, 22060, + 22330, 22569, 22776, 22950, + 23092, 23201, 23277, 23317, + 23317, 23277, 23201, 23092, + 22950, 22776, 22569, 22330, + 22060, 21761, 21435, 21083, + 20708, 20312, 19896, 19461, + 19010, 18544, 18067, 17581, + 17086, 16584, 16078, 15568, + 15058, 14546, 14035, 13526, + 13021, 12522, 12029, 11544, + 11068, 10600, 10141, 9691, + 9250, 8819, 8398, 7989, + 7590, 7199, 6816, 6441, + 6076, 5720, 5372, 5032, + 4698, 4368, 4044, 3725, + 3411, 3101, 2795, 2494, + 2195, 1898, 1601, 1308, + 1017, 728, 438, 147, + -144, -436, -725, -1015, + -1305, -1599, -1895, -2192, + -2491, -2793, -3099, -3409, + -3723, -4042, -4366, -4695, + -5030, -5370, -5718, -6074, + -6439, -6813, -7197, -7588, + -7987, -8397, -8817, -9248, + -9689, -10139, -10599, -11067, + -11543, -12027, -12520, -13020, + -13525, -14034, -14545, -15057, + -15568, -16077, -16584, -17087, + -17581, -18068, -18545, -19011, + -19462, -19897, -20314, -20711, + -21086, -21437, -21764, -22064, + -22334, -22573, -22782, -22957, + -23098, -23208, -23288, -23332, + -23543, -23630, -23694, -23728, + -23728, -23694, -23630, -23543, + -23435, -23307, -23160, -22997, + -22817, -22622, -22412, -22188, + -21951, -21701, -21439, -21164, + -20879, -20582, -20275, -19957, + -19629, -19290, -18941, -18584, + -18221, -17851, -17474, -17089, + -16698, -16300, -15896, -15485, + -15069, -14647, -14219, -13786, + -13348, -12905, -12457, -12005, + -11548, -11088, -10624, -10155, + -9682, -9208, -8729, -8247, + -7763, -7275, -6786, -6294, + -5799, -5303, -4805, -4305, + -3803, -3300, -2796, -2290, + -1784, -1276, -767, -256, + 256, 767, 1276, 1784, + 2290, 2796, 3300, 3803, + 4305, 4805, 5303, 5799, + 6294, 6786, 7275, 7763, + 8247, 8729, 9208, 9682, + 10155, 10624, 11088, 11548, + 12005, 12457, 12905, 13348, + 13786, 14219, 14647, 15069, + 15485, 15896, 16300, 16698, + 17089, 17474, 17851, 18221, + 18584, 18941, 19290, 19629, + 19957, 20275, 20582, 20879, + 21164, 21439, 21701, 21951, + 22188, 22412, 22622, 22817, + 22997, 23160, 23307, 23435, + 23543, 23630, 23694, 23728, + 23728, 23694, 23630, 23543, + 23435, 23307, 23160, 22997, + 22817, 22622, 22412, 22188, + 21951, 21701, 21439, 21164, + 20879, 20582, 20275, 19957, + 19629, 19290, 18941, 18584, + 18221, 17851, 17474, 17089, + 16698, 16300, 15896, 15485, + 15069, 14647, 14219, 13786, + 13348, 12905, 12457, 12005, + 11548, 11088, 10624, 10155, + 9682, 9208, 8729, 8247, + 7763, 7275, 6786, 6294, + 5799, 5303, 4805, 4305, + 3803, 3300, 2796, 2290, + 1784, 1276, 767, 256, + -256, -767, -1276, -1784, + -2290, -2796, -3300, -3803, + -4305, -4805, -5303, -5799, + -6294, -6786, -7275, -7763, + -8247, -8729, -9208, -9682, + -10155, -10624, -11088, -11548, + -12005, -12457, -12905, -13348, + -13786, -14219, -14647, -15069, + -15485, -15896, -16300, -16698, + -17089, -17474, -17851, -18221, + -18584, -18941, -19290, -19629, + -19957, -20275, -20582, -20879, + -21164, -21439, -21701, -21951, + -22188, -22412, -22622, -22817, + -22997, -23160, -23307, -23435, + -23543, -23630, -23694, -23728, + -7378, -7765, -8277, -8689, + -8689, -8277, -7765, -7378, + -7054, -6668, -6252, -5891, + -5561, -5200, -4826, -4491, + -4177, -3841, -3500, -3190, + -2894, -2583, -2271, -1987, + -1714, -1429, -1147, -889, + -640, -381, -127, 105, + 329, 561, 789, 996, + 1196, 1402, 1601, 1782, + 1958, 2139, 2313, 2469, + 2621, 2778, 2925, 3055, + 3181, 3311, 3433, 3538, + 3639, 3743, 3836, 3915, + 3991, 4068, 4134, 4186, + 4236, 4287, 4327, 4354, + 4380, 4406, 4419, 4420, + 4420, 4419, 4406, 4380, + 4354, 4327, 4287, 4236, + 4186, 4134, 4068, 3991, + 3915, 3836, 3743, 3639, + 3538, 3433, 3311, 3181, + 3055, 2925, 2778, 2621, + 2469, 2313, 2139, 1958, + 1782, 1601, 1402, 1196, + 996, 789, 561, 329, + 105, -127, -381, -640, + -889, -1147, -1429, -1714, + -1987, -2271, -2583, -2894, + -3190, -3500, -3841, -4177, + -4491, -4826, -5200, -5561, + -5891, -6252, -6668, -7054, + -7378, -7765, -8277, -8689, + -8689, -8277, -7765, -7378, + -7054, -6668, -6252, -5891, + -5561, -5200, -4826, -4491, + -4177, -3841, -3500, -3190, + -2894, -2583, -2271, -1987, + -1714, -1429, -1147, -889, + -640, -381, -127, 105, + 329, 561, 789, 996, + 1196, 1402, 1601, 1782, + 1958, 2139, 2313, 2469, + 2621, 2778, 2925, 3055, + 3181, 3311, 3433, 3538, + 3639, 3743, 3836, 3915, + 3991, 4068, 4134, 4186, + 4236, 4287, 4327, 4354, + 4380, 4406, 4419, 4420, + 4420, 4419, 4406, 4380, + 4354, 4327, 4287, 4236, + 4186, 4134, 4068, 3991, + 3915, 3836, 3743, 3639, + 3538, 3433, 3311, 3181, + 3055, 2925, 2778, 2621, + 2469, 2313, 2139, 1958, + 1782, 1601, 1402, 1196, + 996, 789, 561, 329, + 105, -127, -381, -640, + -889, -1147, -1429, -1714, + -1987, -2271, -2583, -2894, + -3190, -3500, -3841, -4177, + -4491, -4826, -5200, -5561, + -5891, -6252, -6668, -7054, + -7378, -7765, -8277, -8689, + -10472, -10875, -11387, -11789, + -11789, -11387, -10875, -10472, + -10130, -9739, -9320, -8945, + -8595, -8213, -7816, -7448, + -7094, -6717, -6330, -5965, + -5609, -5234, -4854, -4491, + -4134, -3760, -3384, -3023, + -2665, -2293, -1920, -1560, + -1201, -831, -460, -101, + 257, 627, 995, 1353, + 1711, 2079, 2446, 2802, + 3160, 3527, 3892, 4247, + 4604, 4969, 5331, 5685, + 6041, 6404, 6763, 7114, + 7468, 7828, 8182, 8529, + 8879, 9233, 9577, 9911, + 10253, 10590, 10870, 11029, + 11029, 10870, 10590, 10253, + 9911, 9577, 9233, 8879, + 8529, 8182, 7828, 7468, + 7114, 6763, 6404, 6041, + 5685, 5331, 4969, 4604, + 4247, 3892, 3527, 3160, + 2802, 2446, 2079, 1711, + 1353, 995, 627, 257, + -101, -460, -831, -1201, + -1560, -1920, -2293, -2665, + -3023, -3384, -3760, -4134, + -4491, -4854, -5234, -5609, + -5965, -6330, -6717, -7094, + -7448, -7816, -8213, -8595, + -8945, -9320, -9739, -10130, + -10472, -10875, -11387, -11789, + -11789, -11387, -10875, -10472, + -10130, -9739, -9320, -8945, + -8595, -8213, -7816, -7448, + -7094, -6717, -6330, -5965, + -5609, -5234, -4854, -4491, + -4134, -3760, -3384, -3023, + -2665, -2293, -1920, -1560, + -1201, -831, -460, -101, + 257, 627, 995, 1353, + 1711, 2079, 2446, 2802, + 3160, 3527, 3892, 4247, + 4604, 4969, 5331, 5685, + 6041, 6404, 6763, 7114, + 7468, 7828, 8182, 8529, + 8879, 9233, 9577, 9911, + 10253, 10590, 10870, 11029, + 11029, 10870, 10590, 10253, + 9911, 9577, 9233, 8879, + 8529, 8182, 7828, 7468, + 7114, 6763, 6404, 6041, + 5685, 5331, 4969, 4604, + 4247, 3892, 3527, 3160, + 2802, 2446, 2079, 1711, + 1353, 995, 627, 257, + -101, -460, -831, -1201, + -1560, -1920, -2293, -2665, + -3023, -3384, -3760, -4134, + -4491, -4854, -5234, -5609, + -5965, -6330, -6717, -7094, + -7448, -7816, -8213, -8595, + -8945, -9320, -9739, -10130, + -10472, -10875, -11387, -11789, + -3003, -3368, -3880, -4297, + -4297, -3880, -3368, -3003, + -2734, -2439, -2134, -1890, + -1683, -1463, -1248, -1078, + -930, -771, -623, -511, + -413, -309, -217, -153, + -96, -31, 20, 48, + 73, 105, 125, 127, + 133, 149, 153, 144, + 144, 153, 152, 143, + 149, 167, 175, 181, + 206, 243, 270, 301, + 358, 426, 484, 548, + 646, 756, 853, 963, + 1111, 1268, 1405, 1561, + 1768, 1975, 2144, 2338, + 2606, 2850, 2938, 2911, + 2911, 2938, 2850, 2606, + 2338, 2144, 1975, 1768, + 1561, 1405, 1268, 1111, + 963, 853, 756, 646, + 548, 484, 426, 358, + 301, 270, 243, 206, + 181, 175, 167, 149, + 143, 152, 153, 144, + 144, 153, 149, 133, + 127, 125, 105, 73, + 48, 20, -31, -96, + -153, -217, -309, -413, + -511, -623, -771, -930, + -1078, -1248, -1463, -1683, + -1890, -2134, -2439, -2734, + -3003, -3368, -3880, -4297, + -4297, -3880, -3368, -3003, + -2734, -2439, -2134, -1890, + -1683, -1463, -1248, -1078, + -930, -771, -623, -511, + -413, -309, -217, -153, + -96, -31, 20, 48, + 73, 105, 125, 127, + 133, 149, 153, 144, + 144, 153, 152, 143, + 149, 167, 175, 181, + 206, 243, 270, 301, + 358, 426, 484, 548, + 646, 756, 853, 963, + 1111, 1268, 1405, 1561, + 1768, 1975, 2144, 2338, + 2606, 2850, 2938, 2911, + 2911, 2938, 2850, 2606, + 2338, 2144, 1975, 1768, + 1561, 1405, 1268, 1111, + 963, 853, 756, 646, + 548, 484, 426, 358, + 301, 270, 243, 206, + 181, 175, 167, 149, + 143, 152, 153, 144, + 144, 153, 149, 133, + 127, 125, 105, 73, + 48, 20, -31, -96, + -153, -217, -309, -413, + -511, -623, -771, -930, + -1078, -1248, -1463, -1683, + -1890, -2134, -2439, -2734, + -3003, -3368, -3880, -4297, + -9777, -9877, -9999, -10098, + -10098, -9999, -9877, -9777, + -9683, -9584, -9496, -9397, + -9218, -8945, -8643, -8369, + -8109, -7835, -7562, -7288, + -6961, -6551, -6110, -5700, + -5310, -4900, -4478, -4068, + -3641, -3157, -2645, -2161, + -1701, -1217, -712, -228, + 235, 718, 1223, 1707, + 2168, 2651, 3163, 3647, + 4074, 4484, 4905, 5315, + 5705, 6115, 6555, 6965, + 7292, 7565, 7837, 8110, + 8369, 8642, 8944, 9217, + 9393, 9490, 9575, 9672, + 9764, 9861, 9980, 10077, + 10077, 9980, 9861, 9764, + 9672, 9575, 9490, 9393, + 9217, 8944, 8642, 8369, + 8110, 7837, 7565, 7292, + 6965, 6555, 6115, 5705, + 5315, 4905, 4484, 4074, + 3647, 3163, 2651, 2168, + 1707, 1223, 718, 235, + -228, -712, -1217, -1701, + -2161, -2645, -3157, -3641, + -4068, -4478, -4900, -5310, + -5700, -6110, -6551, -6961, + -7288, -7562, -7835, -8109, + -8369, -8643, -8945, -9218, + -9397, -9496, -9584, -9683, + -9777, -9877, -9999, -10098, + -10098, -9999, -9877, -9777, + -9683, -9584, -9496, -9397, + -9218, -8945, -8643, -8369, + -8109, -7835, -7562, -7288, + -6961, -6551, -6110, -5700, + -5310, -4900, -4478, -4068, + -3641, -3157, -2645, -2161, + -1701, -1217, -712, -228, + 235, 718, 1223, 1707, + 2168, 2651, 3163, 3647, + 4074, 4484, 4905, 5315, + 5705, 6115, 6555, 6965, + 7292, 7565, 7837, 8110, + 8369, 8642, 8944, 9217, + 9393, 9490, 9575, 9672, + 9764, 9861, 9980, 10077, + 10077, 9980, 9861, 9764, + 9672, 9575, 9490, 9393, + 9217, 8944, 8642, 8369, + 8110, 7837, 7565, 7292, + 6965, 6555, 6115, 5705, + 5315, 4905, 4484, 4074, + 3647, 3163, 2651, 2168, + 1707, 1223, 718, 235, + -228, -712, -1217, -1701, + -2161, -2645, -3157, -3641, + -4068, -4478, -4900, -5310, + -5700, -6110, -6551, -6961, + -7288, -7562, -7835, -8109, + -8369, -8643, -8945, -9218, + -9397, -9496, -9584, -9683, + -9777, -9877, -9999, -10098, + -10278, -10353, -10409, -10440, + -10440, -10409, -10353, -10278, + -10179, -10054, -9903, -9730, + -9536, -9319, -9076, -8811, + -8525, -8220, -7896, -7553, + -7192, -6813, -6417, -6006, + -5581, -5141, -4689, -4225, + -3752, -3270, -2780, -2284, + -1782, -1276, -766, -255, + 257, 768, 1278, 1784, + 2286, 2782, 3271, 3753, + 4227, 4690, 5143, 5582, + 6007, 6419, 6814, 7193, + 7554, 7897, 8221, 8525, + 8811, 9076, 9318, 9536, + 9730, 9902, 10052, 10177, + 10275, 10350, 10403, 10431, + 10431, 10403, 10350, 10275, + 10177, 10052, 9902, 9730, + 9536, 9318, 9076, 8811, + 8525, 8221, 7897, 7554, + 7193, 6814, 6419, 6007, + 5582, 5143, 4690, 4227, + 3753, 3271, 2782, 2286, + 1784, 1278, 768, 257, + -255, -766, -1276, -1782, + -2284, -2780, -3270, -3752, + -4225, -4689, -5141, -5581, + -6006, -6417, -6813, -7192, + -7553, -7896, -8220, -8525, + -8811, -9076, -9319, -9536, + -9730, -9903, -10054, -10179, + -10278, -10353, -10409, -10440, + -10440, -10409, -10353, -10278, + -10179, -10054, -9903, -9730, + -9536, -9319, -9076, -8811, + -8525, -8220, -7896, -7553, + -7192, -6813, -6417, -6006, + -5581, -5141, -4689, -4225, + -3752, -3270, -2780, -2284, + -1782, -1276, -766, -255, + 257, 768, 1278, 1784, + 2286, 2782, 3271, 3753, + 4227, 4690, 5143, 5582, + 6007, 6419, 6814, 7193, + 7554, 7897, 8221, 8525, + 8811, 9076, 9318, 9536, + 9730, 9902, 10052, 10177, + 10275, 10350, 10403, 10431, + 10431, 10403, 10350, 10275, + 10177, 10052, 9902, 9730, + 9536, 9318, 9076, 8811, + 8525, 8221, 7897, 7554, + 7193, 6814, 6419, 6007, + 5582, 5143, 4690, 4227, + 3753, 3271, 2782, 2286, + 1784, 1278, 768, 257, + -255, -766, -1276, -1782, + -2284, -2780, -3270, -3752, + -4225, -4689, -5141, -5581, + -6006, -6417, -6813, -7192, + -7553, -7896, -8220, -8525, + -8811, -9076, -9319, -9536, + -9730, -9903, -10054, -10179, + -10278, -10353, -10409, -10440, + -11967, -12124, -12236, -12297, + -12297, -12236, -12124, -11967, + -11762, -11509, -11210, -10872, + -10498, -10090, -9653, -9194, + -8716, -8223, -7719, -7208, + -6696, -6187, -5684, -5188, + -4702, -4225, -3762, -3315, + -2884, -2466, -2061, -1668, + -1285, -911, -542, -179, + 182, 545, 913, 1288, + 1670, 2063, 2469, 2886, + 3318, 3765, 4227, 4703, + 5190, 5685, 6188, 6697, + 7209, 7720, 8224, 8717, + 9194, 9653, 10090, 10497, + 10871, 11209, 11506, 11759, + 11963, 12120, 12228, 12285, + 12285, 12228, 12120, 11963, + 11759, 11506, 11209, 10871, + 10497, 10090, 9653, 9194, + 8717, 8224, 7720, 7209, + 6697, 6188, 5685, 5190, + 4703, 4227, 3765, 3318, + 2886, 2469, 2063, 1670, + 1288, 913, 545, 182, + -179, -542, -911, -1285, + -1668, -2061, -2466, -2884, + -3315, -3762, -4225, -4702, + -5188, -5684, -6187, -6696, + -7208, -7719, -8223, -8716, + -9194, -9653, -10090, -10498, + -10872, -11210, -11509, -11762, + -11967, -12124, -12236, -12297, + -12297, -12236, -12124, -11967, + -11762, -11509, -11210, -10872, + -10498, -10090, -9653, -9194, + -8716, -8223, -7719, -7208, + -6696, -6187, -5684, -5188, + -4702, -4225, -3762, -3315, + -2884, -2466, -2061, -1668, + -1285, -911, -542, -179, + 182, 545, 913, 1288, + 1670, 2063, 2469, 2886, + 3318, 3765, 4227, 4703, + 5190, 5685, 6188, 6697, + 7209, 7720, 8224, 8717, + 9194, 9653, 10090, 10497, + 10871, 11209, 11506, 11759, + 11963, 12120, 12228, 12285, + 12285, 12228, 12120, 11963, + 11759, 11506, 11209, 10871, + 10497, 10090, 9653, 9194, + 8717, 8224, 7720, 7209, + 6697, 6188, 5685, 5190, + 4703, 4227, 3765, 3318, + 2886, 2469, 2063, 1670, + 1288, 913, 545, 182, + -179, -542, -911, -1285, + -1668, -2061, -2466, -2884, + -3315, -3762, -4225, -4702, + -5188, -5684, -6187, -6696, + -7208, -7719, -8223, -8716, + -9194, -9653, -10090, -10498, + -10872, -11210, -11509, -11762, + -11967, -12124, -12236, -12297, + -11270, -11478, -11626, -11705, + -11705, -11626, -11478, -11270, + -11001, -10674, -10295, -9878, + -9426, -8946, -8447, -7939, + -7428, -6916, -6409, -5915, + -5437, -4976, -4534, -4112, + -3709, -3324, -2958, -2610, + -2275, -1950, -1633, -1327, + -1027, -730, -434, -143, + 146, 437, 732, 1029, + 1329, 1636, 1952, 2277, + 2612, 2960, 3326, 3711, + 4114, 4536, 4978, 5438, + 5916, 6410, 6916, 7428, + 7940, 8447, 8946, 9425, + 9876, 10294, 10671, 10998, + 11267, 11474, 11617, 11692, + 11692, 11617, 11474, 11267, + 10998, 10671, 10294, 9876, + 9425, 8946, 8447, 7940, + 7428, 6916, 6410, 5916, + 5438, 4978, 4536, 4114, + 3711, 3326, 2960, 2612, + 2277, 1952, 1636, 1329, + 1029, 732, 437, 146, + -143, -434, -730, -1027, + -1327, -1633, -1950, -2275, + -2610, -2958, -3324, -3709, + -4112, -4534, -4976, -5437, + -5915, -6409, -6916, -7428, + -7939, -8447, -8946, -9426, + -9878, -10295, -10674, -11001, + -11270, -11478, -11626, -11705, + -11705, -11626, -11478, -11270, + -11001, -10674, -10295, -9878, + -9426, -8946, -8447, -7939, + -7428, -6916, -6409, -5915, + -5437, -4976, -4534, -4112, + -3709, -3324, -2958, -2610, + -2275, -1950, -1633, -1327, + -1027, -730, -434, -143, + 146, 437, 732, 1029, + 1329, 1636, 1952, 2277, + 2612, 2960, 3326, 3711, + 4114, 4536, 4978, 5438, + 5916, 6410, 6916, 7428, + 7940, 8447, 8946, 9425, + 9876, 10294, 10671, 10998, + 11267, 11474, 11617, 11692, + 11692, 11617, 11474, 11267, + 10998, 10671, 10294, 9876, + 9425, 8946, 8447, 7940, + 7428, 6916, 6410, 5916, + 5438, 4978, 4536, 4114, + 3711, 3326, 2960, 2612, + 2277, 1952, 1636, 1329, + 1029, 732, 437, 146, + -143, -434, -730, -1027, + -1327, -1633, -1950, -2275, + -2610, -2958, -3324, -3709, + -4112, -4534, -4976, -5437, + -5915, -6409, -6916, -7428, + -7939, -8447, -8946, -9426, + -9878, -10295, -10674, -11001, + -11270, -11478, -11626, -11705, + -11575, -11722, -11833, -11894, + -11894, -11833, -11722, -11575, + -11396, -11186, -10947, -10684, + -10398, -10090, -9760, -9410, + -9046, -8667, -8275, -7870, + -7452, -7023, -6584, -6134, + -5677, -5211, -4737, -4257, + -3771, -3280, -2784, -2284, + -1782, -1276, -767, -256, + 256, 767, 1276, 1782, + 2284, 2784, 3280, 3771, + 4257, 4737, 5211, 5677, + 6134, 6584, 7023, 7452, + 7870, 8275, 8667, 9046, + 9410, 9760, 10090, 10398, + 10684, 10947, 11186, 11396, + 11575, 11722, 11833, 11894, + 11894, 11833, 11722, 11575, + 11396, 11186, 10947, 10684, + 10398, 10090, 9760, 9410, + 9046, 8667, 8275, 7870, + 7452, 7023, 6584, 6134, + 5677, 5211, 4737, 4257, + 3771, 3280, 2784, 2284, + 1782, 1276, 767, 256, + -256, -767, -1276, -1782, + -2284, -2784, -3280, -3771, + -4257, -4737, -5211, -5677, + -6134, -6584, -7023, -7452, + -7870, -8275, -8667, -9046, + -9410, -9760, -10090, -10398, + -10684, -10947, -11186, -11396, + -11575, -11722, -11833, -11894, + -11894, -11833, -11722, -11575, + -11396, -11186, -10947, -10684, + -10398, -10090, -9760, -9410, + -9046, -8667, -8275, -7870, + -7452, -7023, -6584, -6134, + -5677, -5211, -4737, -4257, + -3771, -3280, -2784, -2284, + -1782, -1276, -767, -256, + 256, 767, 1276, 1782, + 2284, 2784, 3280, 3771, + 4257, 4737, 5211, 5677, + 6134, 6584, 7023, 7452, + 7870, 8275, 8667, 9046, + 9410, 9760, 10090, 10398, + 10684, 10947, 11186, 11396, + 11575, 11722, 11833, 11894, + 11894, 11833, 11722, 11575, + 11396, 11186, 10947, 10684, + 10398, 10090, 9760, 9410, + 9046, 8667, 8275, 7870, + 7452, 7023, 6584, 6134, + 5677, 5211, 4737, 4257, + 3771, 3280, 2784, 2284, + 1782, 1276, 767, 256, + -256, -767, -1276, -1782, + -2284, -2784, -3280, -3771, + -4257, -4737, -5211, -5677, + -6134, -6584, -7023, -7452, + -7870, -8275, -8667, -9046, + -9410, -9760, -10090, -10398, + -10684, -10947, -11186, -11396, + -11575, -11722, -11833, -11894, +}; + + +const int16_t* wavetables_table[] = { + wav_integrated_waves, +}; + + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources.h new file mode 100644 index 00000000..2c55425a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources.h @@ -0,0 +1,97 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources + + +#ifndef PLAITS_RESOURCES_H_ +#define PLAITS_RESOURCES_H_ + + +#include "stmlib/stmlib.h" + + + +namespace plaits { + +typedef uint8_t ResourceId; + +extern const float* lookup_table_table[]; + +extern const int16_t* lookup_table_i16_table[]; + +extern const int8_t* lookup_table_i8_table[]; + +extern const int16_t* wavetables_table[]; + +extern const float lut_sine[]; +extern const float lut_fm_frequency_quantizer[]; +extern const float lut_fold[]; +extern const float lut_fold_2[]; +extern const float lut_stiffness[]; +extern const float lut_svf_shift[]; +extern const int16_t lut_ws_inverse_tan[]; +extern const int16_t lut_ws_inverse_sin[]; +extern const int16_t lut_ws_linear[]; +extern const int16_t lut_ws_bump[]; +extern const int16_t lut_ws_double_bump[]; +extern const int8_t lut_lpc_excitation_pulse[]; +extern const int16_t wav_integrated_waves[]; +#define LUT_SINE 0 +#define LUT_SINE_SIZE 1281 +#define LUT_FM_FREQUENCY_QUANTIZER 1 +#define LUT_FM_FREQUENCY_QUANTIZER_SIZE 129 +#define LUT_FOLD 2 +#define LUT_FOLD_SIZE 516 +#define LUT_FOLD_2 3 +#define LUT_FOLD_2_SIZE 516 +#define LUT_STIFFNESS 4 +#define LUT_STIFFNESS_SIZE 65 +#define LUT_SVF_SHIFT 5 +#define LUT_SVF_SHIFT_SIZE 257 +#define LUT_WS_INVERSE_TAN 0 +#define LUT_WS_INVERSE_TAN_SIZE 257 +#define LUT_WS_INVERSE_SIN 1 +#define LUT_WS_INVERSE_SIN_SIZE 257 +#define LUT_WS_LINEAR 2 +#define LUT_WS_LINEAR_SIZE 257 +#define LUT_WS_BUMP 3 +#define LUT_WS_BUMP_SIZE 257 +#define LUT_WS_DOUBLE_BUMP 4 +#define LUT_WS_DOUBLE_BUMP_SIZE 257 +#define LUT_WS_DOUBLE_BUMP_SENTINEL 5 +#define LUT_WS_DOUBLE_BUMP_SENTINEL_SIZE 257 +#define LUT_LPC_EXCITATION_PULSE 0 +#define LUT_LPC_EXCITATION_PULSE_SIZE 640 +#define WAV_INTEGRATED_WAVES 0 +#define WAV_INTEGRATED_WAVES_SIZE 49920 + +} // namespace plaits + +#endif // PLAITS_RESOURCES_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/__init__.py b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/lookup_tables.py b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/lookup_tables.py new file mode 100644 index 00000000..c56e1aaf --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/lookup_tables.py @@ -0,0 +1,215 @@ +#!/usr/bin/python2.5 +# +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. +# +# ----------------------------------------------------------------------------- +# +# Lookup table definitions. + +import scipy.signal +import numpy +import pylab + +lookup_tables = [] +lookup_tables_i16 = [] +lookup_tables_i8 = [] + + +"""---------------------------------------------------------------------------- +Sine table +----------------------------------------------------------------------------""" + +WAVETABLE_SIZE = 1024 +t = numpy.arange(0.0, WAVETABLE_SIZE + WAVETABLE_SIZE / 4 + 1) / WAVETABLE_SIZE +x = numpy.sin(2 * numpy.pi * t) +lookup_tables += [('sine', x)] + + + +"""---------------------------------------------------------------------------- +Quantizer for FM frequencies. +----------------------------------------------------------------------------""" + +fm_frequency_ratios = [ 0.5, 0.5 * 2 ** (16 / 1200.0), + numpy.sqrt(2) / 2, numpy.pi / 4, 1.0, 1.0 * 2 ** (16 / 1200.0), numpy.sqrt(2), + numpy.pi / 2, 7.0 / 4, 2, 2 * 2 ** (16 / 1200.0), 9.0 / 4, 11.0 / 4, + 2 * numpy.sqrt(2), 3, numpy.pi, numpy.sqrt(3) * 2, 4, numpy.sqrt(2) * 3, + numpy.pi * 3 / 2, 5, numpy.sqrt(2) * 4, 8] + +scale = [] +for ratio in fm_frequency_ratios: + ratio = 12 * numpy.log2(ratio) + scale.extend([ratio, ratio, ratio]) + +target_size = int(2 ** numpy.ceil(numpy.log2(len(scale)))) +while len(scale) < target_size: + gap = numpy.argmax(numpy.diff(scale)) + scale = scale[:gap + 1] + [(scale[gap] + scale[gap + 1]) / 2] + \ + scale[gap + 1:] + +scale.append(scale[-1]) + +lookup_tables.append( + ('fm_frequency_quantizer', scale) +) + + + +"""---------------------------------------------------------------------------- +Waveshaper tables stolen from Tides +----------------------------------------------------------------------------""" + +WAVESHAPER_SIZE = 128 + +x = numpy.arange(0, WAVESHAPER_SIZE + 1) / float(WAVESHAPER_SIZE) + +linear = x +tan = numpy.arctan(8 * numpy.cos(numpy.pi * x)) +scale = tan.max() +fade_crop = numpy.minimum(1.0, 4.0 - 4.0 * x) +bump = (1.0 - numpy.cos(numpy.pi * x * 1.5)) * (1.0 - numpy.cos(numpy.pi * fade_crop)) / 4.5 +double_bump = numpy.sin(numpy.pi * x * 1.5) +inverse_sin = numpy.arccos(1 - 2 * x) / numpy.pi +inverse_tan = numpy.arccos(numpy.tan(scale * (1.0 - 2.0 * x)) / 8.0) / numpy.pi + +def flip(x): + x = numpy.array(list(-x[WAVESHAPER_SIZE:0:-1]) + list(x)) + return numpy.round((x * 32767.0)).astype(int) + +lookup_tables_i16.append(('ws_inverse_tan', flip(inverse_tan))) +lookup_tables_i16.append(('ws_inverse_sin', flip(inverse_sin))) +lookup_tables_i16.append(('ws_linear', flip(linear))) +lookup_tables_i16.append(('ws_bump', flip(bump))) +lookup_tables_i16.append(('ws_double_bump', flip(double_bump))) +lookup_tables_i16.append(('ws_double_bump_sentinel', flip(double_bump))) + +WAVESHAPER_SIZE = 512 + +x = numpy.arange(0, WAVESHAPER_SIZE + 4) / (WAVESHAPER_SIZE / 2.0) - 1.0 +x[-1] = x[-2] +sine = numpy.sin(8 * numpy.pi * x) +window = numpy.exp(-x * x * 4) ** 2 +bipolar_fold = sine * window + numpy.arctan(3 * x) * (1 - window) +bipolar_fold /= numpy.abs(bipolar_fold).max() +lookup_tables.append(('fold', bipolar_fold)) + + +def deadband(v_in, r_in, r_load, r_fb=150.0e3, v_sat=10.47): + v_out = -r_fb / r_in * v_in + v_out[v_out >= v_sat] = v_sat + v_out[v_out < -v_sat] = -v_sat + return (v_in * r_fb * r_load + v_out * r_in * r_load) / (r_fb * r_load + r_in * r_load + r_in * r_fb) + + +def diode(x): + return 0.7 * x / (0.3 + numpy.abs(x)) + +v_in = x * 12.0 +stage_1 = deadband(v_in, 10e3, 100e3) +stage_2 = deadband(v_in, 49.9e3, 44.2e3) +stage_3 = deadband(v_in, 91e3, 18e3) +stage_4 = deadband(v_in, 30e3, 71.4e3) +stage_5 = deadband(v_in, 68e3, 33.0e3) + +stage_45 = -33.0 / 71.4 * stage_4 -33.0 / 33.0 * stage_5 - 33.0 / 240.0 * v_in +v_out = diode(-150.0 / 100.0 * stage_1 -150.0 / 44.2 * stage_2 - 150.0 / 18.0 * stage_3 - 150.0 / 33.0 * stage_45) + +lookup_tables.append(('fold_2', v_out / v_out.max())) + + +"""---------------------------------------------------------------------------- +Stiffness table (partial detuning) for modal synthesis and additive synthesis. +----------------------------------------------------------------------------""" + +structure = numpy.arange(0, 65) / 64.0 +stiffness = structure + 0 +for i, g in enumerate(structure): + if g < 0.25: + g = 0.25 - g + stiffness[i] = -g * 0.25 + elif g < 0.3: + stiffness[i] = 0.0 + elif g < 0.9: + g -= 0.3 + g /= 0.6 + stiffness[i] = 0.01 * 10 ** (g * 2.005) - 0.01 + else: + g -= 0.9 + g /= 0.1 + g *= g + stiffness[i] = 1.5 - numpy.cos(g * numpy.pi) / 2.0 + +stiffness[-1] = 2.0 +stiffness[-2] = 2.0 +lookup_tables += [('stiffness', stiffness)] + + + +"""---------------------------------------------------------------------------- +Delay compensation factor for SVF +----------------------------------------------------------------------------""" + +ratio = 2.0 ** (numpy.arange(0, 257) / 12.0) +svf_shift = 1.0 - 2.0 * numpy.arctan(1.0 / ratio) / (2.0 * numpy.pi) +lookup_tables += [('svf_shift', svf_shift)] + + + +"""---------------------------------------------------------------------------- +Excitation signal for LPC speech synthesis. +32x interpolated (band-limited interpolation), phase adjusted for maximum +compacity in the time-domain +----------------------------------------------------------------------------""" + +excitation_pulse = numpy.array([ + 42, -44, 50, -78, 18, 37, 20, 2, + -31, -59, 2, 95, 90, 5, 15, 38, + -4, -91, -91, -42, -35, -36, -4, 37, + 43, 34, 33, 15, -1, -8, -18, -19, + -17, -9, -10, -6, 0, 3, 2, 1]) + + +def minimum_phase_reconstruction(signal): + fft_size = len(signal) + Xf = numpy.fft.fft(signal, fft_size) + real_cepstrum = numpy.fft.ifft(numpy.log(1e-50 + numpy.abs(Xf))).real + real_cepstrum[1:fft_size / 2] *= 2 + real_cepstrum[fft_size / 2 + 1:] = 0 + min_phi = numpy.fft.ifft(numpy.exp(numpy.fft.fft(real_cepstrum))).real + return min_phi + +n = len(excitation_pulse) +target_length = 20 +ratio = 32 + +pulse_upsampled = numpy.fft.irfft(numpy.fft.rfft(excitation_pulse), ratio * n) + +pulse_upsampled = minimum_phase_reconstruction( + pulse_upsampled * numpy.kaiser(n * ratio, 1))[:ratio * target_length] +pulse_upsampled -= pulse_upsampled[0] +pulse_upsampled[-ratio * 4:] *= numpy.linspace(1, 0, ratio * 4) +pulse_upsampled /= pulse_upsampled.max() + +lookup_tables_i8 += [('lpc_excitation_pulse', numpy.round(pulse_upsampled * 127))] diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/resources.py b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/resources.py new file mode 100644 index 00000000..84a95c4f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/resources.py @@ -0,0 +1,84 @@ +#!/usr/bin/python2.5 +# +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. +# +# ----------------------------------------------------------------------------- +# +# Master resources file. + +header = """// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources +""" + +namespace = 'plaits' +target = 'plaits' +types = ['uint8_t', 'uint16_t'] +includes = """ +#include "stmlib/stmlib.h" +""" + +import lookup_tables +import wavetables + +create_specialized_manager = True + +resources = [ + (lookup_tables.lookup_tables, + 'lookup_table', 'LUT', 'float', float, False), + (lookup_tables.lookup_tables_i16, + 'lookup_table_i16', 'LUT', 'int16_t', int, False), + (lookup_tables.lookup_tables_i8, + 'lookup_table_i8', 'LUT', 'int8_t', int, False), + (wavetables.wavetables, + 'wavetables', 'WAV', 'int16_t', int, False) +] diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/waves.bin b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/waves.bin new file mode 100644 index 00000000..e5fb402a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/waves.bin @@ -0,0 +1,97 @@ +hiklnpstvz||~ƒ„‡‰ŠŒ‘‘“”•”””“’Ž‹‰…ytne]XSNJIIKPV]ht‚ž­¼ËÚäìõÿüøôðèÞÓȼ±¦™„{rib[URNJHHIHHKNPSX\_dhlquxz}~}}|zxvtqonlkiihgghgh{z|xvuuvuqrsqnmmnnlnrtvz}ƒ‡ˆ‡‹Ž‹ŠŠŠ‡ƒ}wrokd_ZTROPRWao|Œ ¶ËÚåñÿöîçßÐÁ´­¦–••”‘Іƒ€}ytnifaZVVUTRUZ]_binoprtsqoopppquxz||~€}{••”“”’ދЉˆ‡††…„„„‚}yvrmigc`_]\\[ZXXVTROMKIGFHJKNV]dq›¯ÁËÙìòõûÿûõôîäÛÕË¿¸°¥œ”Œzskb\UMFA:8767:?ELU\clswz€€‚€‚‚‚ƒ‡‰‰‘’•†ywxvu{}€ztqmils{ƒ™œœ™si_]bhn}‰ŒŽ“’‡‡‹‹Ž ­®¹À®”…i<$&EtŽ·ïÿúþøÌ¤•wPHNGFZfcn}“¡¢ª¶³§ž“xaSE43@JZvŽœ¬¹·ª¢’{ibWNS\`hx€ƒ‰Š††”šž¢£¦¦¦¤ œ—Žˆ€vng`[WTSTVY\bgnt{…‰ŽŽŽ‹†‚}xrkf_[UOKJHFIRZeyŒ›±ËÜæóþÿøóëÜʹ¨˜ˆxjbZTMLMKKLOQTX\airy€Š”› ¤¨¨¤ž—†{ohc\YZ\^djqy€‡Ž””£ª«©¢™‚sli_QKKGEM`p~Žšœ›”„wqiZPLE<46@K\tˆ–¢£š‡„yxylP@>2+Lp…¬Ýïî÷ÿðÜÖÒª—oikqz‰—¤µÃÉÊÇž¬”ybJ'-6Gi‹¦±¸»¹°¨Ÿ‘€lVJIC=FZgr‚”²°¬¡ ŸŠ‰}yrjd_ZTQPQFQNFKRPKOVWRYaYZ`_ZY_XUXWPRUOQTXS_fbhw~{Ÿš¨¾ÂÉÓàæèñøùýÿÿûúôìåàÑÁ½³ž”wjdXKB:5/&'+(+.8;BOS^inw†‹¤¦©¶µ¯·¼·±²—™œ‰Š~zsptvqqvuvz‚‚€ˆŽ‰†™Œ€Š‘}q}waZhcICSM1=fv†®ÐÍ·¨žxtqru|‡Œ‡‡“˜— ›˜™Ž€ugTJS^en‚“–†p\G?=:6;GT_efkrl[STRJMTg’½ÉÍèÿå·£œ„igs}Ž¢§¥²»­› ®®§¥ª©œ‡qdYNGL\m€”£µÀ¾±£‹mUH3",AKTr™¤¶¼²¨x‡€{~}y|Œž§ š¨¸¸ªŸ›’ŒŒ„toqj_dwsgo„~r_OO^aK63/"#4=5%5ZfWIE^¤ôÿʰÙýóèñã³› ™‹–¡ˆcVl§§•а¼µ —–†uƒŸ•lTXemx|lWVgqidw†zp‚‡€”…x‰ˆ„Ž£§¦ª©ª£š™›—…€zolqqiefghfed_^eaOHSYH32BE1!+=@32ALP\u†{q•ÓØ§Ùÿá¿ÍãØÂÃ˺œ”¦ª‰lsˆ‡sfm|zxŠŠ‰–˜’’›Ÿ“ˆŽ•Ž|v{{pfiohahqnjq{ƒ‰­°¤£¾Ë¾»ÅÅÆÐοº¼¿·®¢••sfeaWQC:232/!##-#;:52;K]jo{{x•ÒÌœ çÿâÐíûíèûþêÒÔëò˨¶Ë»¡žšŒ‹ŠtbfggaULORRUNDFX]SN\`]gvnhw†Š‰Šœ­y|qnqz}t~‚z€ˆŽ‘‰‡‡Œ€†e{“mhˆ|~’‹ «†…£u‹^OdH77%"&B38pme¥· ½ãçåçüÿàæèËͽ”™ qapWJZPBLVW_aa_t^i”{vˆ““”œ£”Œ›Ž‰‰‰…z~{oy¬²¹ÁÁÅÒÒÍÕØÓÑÑÏÅ¿¹°©¡•‹yro`XUUC=>9090'*!*)&&(,56=GWa^t‡‰»Ä¬ÀìáÛðýõöÿüù÷êäêÞÅÄűŸ¥™~{j]bYDKI64?4.303:77>EFMVXZfrsy†Œ‹™¦¦¬xfar«ª— ¹½Äʬ‰–wks~‡ˆ{tyskszbDBQ^fY>=WopdVbn_]dU<+&?URHI[kv£á鬃¹ÿ晴§¯¦¬¹©‘±ÇÁ¨Œ~“²¢pZl€ˆˆonqv‰–€[Og†|UBPgvzlo†š¥¢Špsžxhr|‰” ª°µ·¸µ³¬¤›‘‰wpjb]XRQPRTX]dnx…Žš£¬³¶ºµ±¥€q`QB82-.+-/7G[t‰Ÿ±Ã×é÷þÿúïàоª”~hTE;41025;DPZfnv}†Ž”œ¢¦©¬®­®«¨¢™‘‡tkaXPJHGJOW_hhfddglry~ˆ‘˜¡¡§¥£žš“Œ…yqg_][ZY]bit~ˆ”˜Ÿ¢£¢œ—ˆ„zndZOC?;;<:98?K`z’§¼ÐåöÿÿòèÖȼ±¦š‹‰‰ŒŒ‡‚wnd\RF=1/-6?MYgw…– ¨®¬¬§¤›–އƒ|ztuqonlkih47ANc˜´ÊàìñïÝ棋xi[XPQNMNHH>?=ALXn‚²ÇØÞäÙÍ´ŸˆpbRJBDINWROC>?EWdu„¹ÔéïòéÝж¢’xuv{xuokd\YOI?91-6C\vš»×ìõüÿýé̯xbULGFBFEFC>914Z[_ft‚šª·ÁÀµ¤Ž{g[PLLScny|~zvnjiipyŠ–¡¥¦Ÿ•ˆxdL<33;GTbq}‰Š€pggs†¢·ÇÒÏÆÀ·µ´µ¼ÅÔÝæÞе—yZG868?Sdw|zlUB9BSq޲ÌâõþÿṎdE1)&+5D\lwxug_Ztˆ“Ÿª´º¿ÄÄ¿¸³©Ÿ•‹vmg`YVVTVTX^`hgkjjhgb[WNJA@;;:=@FNXet~†–ž°ºÀÎÐÒÖÛÝàåçëéðñúøûöõìäÛËÀ«š‚lYH5& )7DN]hv|€ƒ€}zsqida]\]adlt +#=b‚¤ÁÏÐÁª•~rpp{ˆ™¯··©‰kJ,.[‡²Òäòðã̯‘qQB:;>BHKQWcpsyŒžÃÔÕЮƒsmwˆŸ­Æß÷ÿòÓkE'":[ˆ¯ÊÚз–qQ.>i“¹Ãĵ¢jI.*Cl—ºÕßãØµ’a4 +€}|zyune\TOOOVX^chlrx{‚ƒ†‰Ž‘•›¡¢¥¦§¨¥¤ž–‹~vmf]WQLLMRRTRROS`rŠœª³±¬©«ª©¤£ª»ÑéùÿðÚ¨—Š„}xxvyxobK5-DUcjlpproqor|Œ ®¾ÁÀ·ª›Š„‚€¨«¦¥¢£ž›“‰ƒ~zwrojkgkikihefeddehhmmsuz}‚}zxpoig```ahlx~}€„–¡¦§¬µÄÔâìòùúÿÿÿùìÝÐÁ³§›”„ykcXRGA4*+4BLXbis}‹™š¡¢¦¥©ª«ª¨iuŠ“‘‹‚zslmox~ƒŽ‘ˆzcO<:HdŒµÙéæË¥|[LRqšÆåò㺅L Bl‰žš„cI31;Vr©ºÄ½²«§¥®µ¿Ã»´¤’ƒreWRQW^jrroeWI?;AO_wž¦¥ž‹}njmy‰š§«©œŽyk`^_iÂÆÏÉʽµ§¨¤¥šš‹‡xmkdaVRIIBF?B:BGXY[PNGLP[fggggejfn`d`o|œ§™“—¬ÂÓÈ¿²ºÃÛáåÕνÆÌ×Òů¡’‹‡qfQTJVMJ84&)1/1##H]m]XPd}ž«´¨¦¨¸ÍÚÞÖ;—¶¿Ãµ«›››¨¯½¹²šƒsu…–œvXQSkz…ucKGOeqrbQGIVeqkg[\ZcgwŽ‘‘€vx†™Ÿšˆ„–¹Ì̵Ÿ—´ÔõðÕ­™žºÑÓ½„z…™‹kaRQINV_\G$!RruK"#W¦škKFi›¿Ã¬{HBY~§š{\NYq”ª¯›{`Ua~œ­¥ˆgQQhФª”sVM\|š¨ž†j]e}š«ª”wbct“°¸¦‚Y;0:_ˆ«¹¥xK=[œâÿî®lI]™Üúà Z3:i›·­„P,%;c‡˜tN.)Bu§Â·ŠY>P»ÜÔ¥mJMt£Â½œlHL/0Pˆ½Õ¾‡N4KŽÚÿõ±e4;uºèןS B}¦¬‹X-0\„Ÿ ‹mWVk‘´È£€il‹´Óͪo<'T„±¾¡e,<…Òñà¡];OŽÔúè¯lBEl¢ÂÀžlB.=]ƒ›™{R*0b˜¶­ƒP4Bv®ÕÓ©rNRw¨ÇŪyL;*&.J\nv‡¯®å÷ÿñèм—~relTD!;q‹‹|ir¨¾©…yw‚|hRAQm‚†mhw¦ßðΚ`I@Tpq‹‰yTDFmºÝìºwDGyÅãÊI%)e𱧇jY^xˆš¦£›€S2%L€¯¶@#q·îã¤kOpªÒÛ·Œ\;¸TmþÁ;W›|´Ël•ì­\et~¾¸V0нnrftªŸHF§¶r^geƒ·ž@>„˜šƒjBg¸ÆoSYnv»±^O“¬{l|jf–et¦€BY —[Ht¨³‚WHƒÍªE:ž±†}kP‹ß4Z—’­¿J zÿ¼`H4zýã+‰Ï¸™]nx˜|Z|µ›:}·–Pƒsn€•­]qv’|‘uŒtuˆr~€uކa££ZC¡••_|‰wz¨Ž`YªwuŽ”4]²:K–ÂkRfÁ—l9‡ÜŽmè«:ïÆ3³ÿ\%fã8nº˜Jv”wr„œx[Œ‘w…˜Ke®¼`Rs¶™v:3?(3W|…¥Âȹ° ’‚~„†qx‰‚ƒodcjunsyy}€…Žwv‡—މ’š§­›€r„‡{aKAUuvjmyˆŠ‰‡‹‰ƒytˆŠ}‡‘Š—‹~|’™‚j]lrrmjjt‰ƒ…– ˜‰whbayzw‰§ÐÖ¸«ÇДv_B 2)8aŠ•¦µº­¥œ•†z}Šˆ{~Œ’ˆ}xzvmfeklnsx„ƒ†’‰‰Ž‹Ž“’”“Š€zuoh^ertpsz‚„{{zzss~{„‘Œ—™‡‰…wlmorqpp}‹‰„ŠŠ}nfb]_y“Ÿ¤»åÿÜ´À§q_^H%V|\=G^^ªÂ§…’•”™£˜}nwƒtqvqidiz~~x|}~„”‹š™”’—“‹†€|{€‚…ucgqyvqmmnmnx{}vx‚…~Œ£’~ƒ…ˆŽ•‹rv€‡wea_Y^y†‚z‰ž™‚˜Ä×®µ´’ƒ‚±­m^›vF]+ 0v «¼Èµ«‘ƒiafga]o“¨Ÿˆ‚˜{bgookhryƒˆ™–¤©¢˜ŒŠ|v|‚|€…Љllmnia\h{{vr}„‰……Œ‰ƒ€€{~‡“‘Š|y{rXBQk‚‹§À¾ªŸ²·…cg<;‰Ä¯~yÃõÀ›•q@R48m’¤¯ÉÚÄše]jnbNUiŒ’ž£•s|„xnt|ƒ‰‘ššš‘„}|€|vlnuw|€Š‹…xv|…†vv}|~‚‡~qgmv}€{vy‹‘•—œ”„skissea€œ¢•¤ÅÔ­ˆg:;K[F@p«½³´âÿÔ•šz".M:"Kw˜±ÀÁ®žš”„ylUQi…Š| †souytqw{ƒŠ’•–”Œ‹‡‰ujmzzuv~„‡„}}€‚‚€„‹Œƒxrvtpdeiwƒ„‚‡‘ ‡€}qhdg”’ƒ‹²ÑÉ£œ{RWZ9"DWm¥àîϸ×úÝš±‰A#HM(/Urˆ›§Ÿ™‘‹†‡ŒŸ ‘“”‚xs{€~rehxŠˆ‚wjky†‡Š’—’‘Šyplkjlwˆ‘‹ŠŒ‰Ž‘ˆ}{{vqlllorrry‰ˆ~‚|rrps™®´«˜¡¾Ë¬†YO^qb66OMFOn|‰®ÚèΰÏÿô±Ð‘^$.JB$5ZuŠ›£•††“‡{ަ¯›z|‡ƒrcdijox|{|ƒ‹“…|ux{unpz†‹‹‘–”ދއ~toty€}{€{z|}xmdff^_iw‰˜«¼Ç½»À¾©o?=\_NH`tpv‚{eY`hn‡²ÑɱÂîÿÐç›f*&FH2*QtŠž°´­ ‘ƒywuoo‚—Ÿ”ˆ¨°•wc_hidbfjnu€‹’—•‚||uv†„‡•™‡ƒ„ƒwlt~~xxrsxteYU]itŠ¡ªª©¸Òß¿›nRbj]50Rr}‚šŠƒs\NP\c|§Íγ®×ÿçü¦p* 7?% NvŒ¤¸¼´©˜ˆxxyskuˆ“‡Œ¢£{‹‹x`R^ed^`jx…’–•‘“’‹‚…—Ÿ‘……‘˜wgpyxop~‡„zqbYWYVZkŒ¨ª§µ×êÉŸyttY:8NbVZ|šž—•™yiQAFYev›ÏäÌ·Òÿüÿ¦r08OC#(NvŽ£±´ª£™~~~~ˆŽphyŠmnwwx„ˆvhaf{‰‹‹‹Š‹•›™Š{€Š†ypz•Œƒ‡ˆ{~scRMUh’€€¡ÐÒª“yo|}t`_lkhx‹‘xkzŠ}†‚€„‚hMF[o€–ºÍ»¥ÁöÿÿµƒKCYL&&Foˆ¡²µª¤œ•wtxuwƒŒƒ}ƒwfVWcjns|†œ¥ž˜‹‰“ngnw{}‚‡Œ”™€zuk_\dmv•¢ž” µ·qfOTcdYZk‡—£§ž‹†ˆ‚i]fz}„••Œƒo[JLXp²Áµ¢¼ëÿÿÀ‡Y7PM3.LtŠ›«¸´¤‘†wpoomqŒ‹~‡“‘}e^cb^_gw‡ž®¸¼¬–‹rfghefmx„Œ”›˜…pikmp–¡“¡¸µ•†gOT\]NOfw}„Š‘—žœŒz{†Œ}nvŠ…|ƒ‹‰{n^QINZp‹®ÅÁ­¸âÿÿÕ`#IR;,FoŠ— ¨¤™‹‚|wxwwŽ”Œzs}‡…weblqolmu{yy†œ¬­œ‘—¦¢ˆrakxvk_am|€~ˆ¬¤”š²Ã¦…uYVc^G>Nckuˆ•–“‘“–“…ut‹nm}Ž‚ƒ|q`RLOWhˆ³ÖÖ½»Ýÿÿê j)2KB&+Szž«²«›nfjlow„~}‡’–Ž}qruz|wsrqlkt‚”—™Ÿ¢œ‘x`UQdƒŸ¤‘‰ ÈÖ´•fbfcF7IZ_et|x}‹ŽŠ‡Š‘š¡œ‹{y€~wru~{ssv}~nYLIQd}˜¸ÛæÓÂ×ÿùÿÇ…N!>?,*In…›­±¤€qbZ_ekvƒ”———š˜‘…wmhjonjehu„Ž“—™Œ~wxwwsl|Ãθ©®ÁºwY=Od_NTjmku}}usokq€ˆ‰‰–¡¢ž‘yyrg`cmqt}„ˆˆvk`UVezŸÆßÔ¿Ïù·±¥—‰ui]ULG>4-&&&&# $(+0:CNX`it‚‘ ­¶º¿ÆÑÞìõüü÷óîëëëêèäÞ×ÏǼ²¤•‹„|voaSD:/+($  '-37CIOYds—ž¤ª±ºÃÌÔÛÞâæëïöúýÿÿýúõíãÙÎÅ»²©Ÿ’…yk`XOHB<7656:CFFDA@@BDEC@;7558:<;840.-,,,+*(((*-04:@IS]gov{ˆ™¢«³¹½ÂÇÏÖßçìïðòóöùüÿÿþüûùøöóíæÞ×ÑÌÉÇÿ»¶³²³²±­¦“‹…‚€|wrm…vi^SI?5*  %+.149@FLPQPOPSX\abbbbdfghfd`]\]_``adhq{…Ž–œŸ£§ª­¯¯­ª¦¢Ÿš–“ŽŽŽ‘”˜¢¦¨«°µ¼ÃÊÒÚàæíóöùûþþÿþùòçÚι±§ž’…»¶´²¬¡‘l^TOH@7*$.6763200/-'$)-5?M[iry~€ƒŠ‘˜Ÿ¥©­²½ÈÖãîõ÷öòíèâØÍ¿­›‰xkb\XUQOMLMNNNLHFFHKOUZalyŠŸ´ÆÔÜàåêòùþÿúðåÙÒÏÎÎËÅÀ»…€}xo_N@AACEJOSVXZ\biqw}ƒ…‹‘𢍬¯³¶½ÃÊÐÔרÜàæìñôôóòñòõøúüýþþþÿþüùôïéäàÛÕÎĹ¯¦ž˜“އ€xpkPNKG@80(#!"#%&'%$&)/6=DGJLNQX^gmqrrpru{€†‰Šˆ†ƒ€|wphaYRMFA<868=CIMONNOT\eow|‚†Œ’›¢©¯´»ÃÌ×Þåçèèéëíïñôõ÷úüÿÿÿýúöñëãØÌ¾±£™ˆxne\VQPÈ´Á«¥™‹v`WL;@$"  '%4EH]\nt†œ¨ÎÍìòéïøôöðçÚ¸¯¥‹ipaA@99B&04'+6EPjw…”Ÿžš£›ˆ•}t†zЇ€~riohegS\XVtkŒ’•­¶³ÆÊÊÆ²²¥”¨Ÿ««¥µ¬¯Ç¯Èïíãî×ÆÂ¯¢ˆvgZTF6$  +.2:SBONSVZgxz—š§¹ÀÅÚØÞÓÔŽ½¼·²§­š–•ŽƒwgWWM@HOX[Zigjqt€|‚vmsgeym€…€{tm\[XJQLM[Ubmt‡”£« Ÿš•Š››¬µ¼ÉÑÐäÛïúüüÿðäÔɾ¨œ”ˆ|ldQ8) &26CCCJMPW\nszŒ™«¶¾ÕÑÍÎż½ÅÁ¿¾¶´ª¡¡„sWZNGOPW_YZY\`hw~zsoiemyx~ƒ‚uplVSLBOIKSUZZ`v}†“žŒŠx~‡  ²¼¿ÒÜåúîøúÿòéØÌ¿«¨¡•’‡{iUC*%,-;ECITTS[belx~ˆ«°¿È¿ºÀ¾¯¸ÂÀÀÍÏþ»¯’hZREJPORTXLR[Yhrpjegadwxz‡ƒ„z|uZVTEKMRPT[X[mw€œ”Š…rt{}”œ§­¿Ì×îèüÿÿòåÒű­¦¡›™tbK<.& #%(47=FSU_hmnvzЧ¯½È¼¸µ°¦¯¹ÆÏáâÕÌ­ž‘€gYJBDMNYZXPRORZheb`a\fr€‰“”’†‚qaWXOTWZY]\]cqx… š“‡~klks{ƒ”§½ÖèÝûÿòàÆ­ž’™›˜”Ž€yobTE8/+19CHKLNS^iqty|vu¡±Ë×ɺ«˜‡¦¿ÙæìÙ͍¡“{eK?BJRZieZRPHKTcc\TQQdwœ¥žšŒ€tf^`[`dgiohgks{‹–¢ ˜‡{heflw}vxz‰¤ÂÝÑ÷ÿäÅžwci~‰‡ƒ|mqsm`ULDIM[_XQNHObmvƒ…ˆsn{‰›²ÚëÕ»Ÿ†gp•¾ÝáãʬŸ§š‚nQEL]y‹ŒzdG?AS^e_I5$.VpŒž£“…€{uggnks~ކƒ„zwz‹ž§´»²|mgiq’|n_gw ÑÞÿùظdYk€Š‰‰„vhuum_ZLDKTfe\RJDRdn€ŽŽ†om}Œ£Åíõ×¹™}cy£ÑçìéǬ¡©ª“x`FOertiQ4*!)092((Jv‹œœ–‡}qkikuˆš©¬²¢—ŽŽŸ¯ÉÚÛɬ‘umoŽƒvZC@Wˆ¼æõîçÁ`LBJVks~rmg[PMC?BJSeZSFDI\k…¡—ˆx}€»æýúëÑ¥ˆv†™ÃäÿûíÜΤjH=6JbwymX;&/-68;& + >]†“™•‚xgdeq˜­¸²³˜‘’™®ÅÛæÓ¶–…sy~’’v\F8Jk©ÒñîóòÇ^429Wz“¥œƒaI64=BZdptSG5:Rf†¡¬¢‘scgn“«×òìåÀ…kesžÏùÿüîм‹gSBPPew€{aM:AEMXT[K4&&Bk’©±«™x`FFYj˜«Á¿ ‡ln„¸ÏÛÊ·’ƒ‚€‘Ž–˜}f@3Bi™ÈìóüúÛa;19]~𭤋cA2.9ATejpY@63C^}›¬¦’r_Zd¢ÒôûîΨˆsbh¿íÿÿóÛÆ–mRCNRg|ƒeI26FSb`_T9& ?l•®º°˜y]EEVm‘©¿»¡…igx–³ÊÚϱ|y…”•š™…mD2:_’ÃîüïàñÌ¯š°¡¨¥’ŽŽ~€oxlW\y‹Ž‰ƒ˜¬³¯¢†•ŸªÏÔÖμµÆ¯·£—˜©Ëà·§¢ž¾ªw{nMNTbzƒ€]JSVX]k‰z]Kb‹{SbXYX]„•––Št‡z†woqv”›k`x¬Žox{tjr€¯¯—‡‡‹vfZVcnjKQz®½£|u¢œ„pu~€U?^v†qN8Ml‚sux‡—œ‘|ŽŸyq“¹«˜—ÀþÿâàèîãË®Šž±•thSJ.RUC<58BHEOKg[XcckEgO/SfpjKEqaXFYXN_4OoDOZ[y\BirqLh“•£—À°©Ã¢¨Â³³¼–ªÏÙÁÈÈôÔ®«´——mei\U8<>7Poqam{~…uŸ¿§¨¹¼´·µÑÿöàíìðÒͬœƒ“¡›’qI?0DNH>2*=6$1Mnr`_o‰dN28t\@)6=0H!%-27 4%LKTY?=IJ^Gbo‰«ªÇÖÌê÷ïøþíþÙÄÉÔñøôòÞßâÆÙ¤™Œ‘«~aV2#2/A[EIVszrs†±¶Çɯ©ÃÃÆìÿí¾Æº¤Žzq†”Ž–|SI5[yWHGCYKGPa“uvx‹iROR€wM>)9P1#,9K3&*CFIIM`E&8J^NTk{ƒ•›ÏÜÕáÓäÿôàÙÖÍÙåóæåÖÛϽÈÊ¢§˜ º–wbGTWC9FTWk€|‰tn˜¶²«š˜˜–š¦ÅȾ¦«³¢›‹†‰Œ|…‰~s]d_XLTP`PPTjwŠ}‡‹–xomm€iPMBM<-(+#0('21720CT@-.7K<:Idlq…®¼ÇÑáâôÿ÷÷îïüüýöþüïáØÐÙÕíµºµ˜‡okZP?BKLHT_nrpy€„…‹Š›£¦œ— ž€}“˜’¡’uwcjkkcwokl~Š©¥¬¥©˜—x~……rfdMJ@A,@@@94+Xkf‰§­¸ÆÍßïñåçêêÿ÷óæòä×ËÏÎÊδž¯µŠ|XRN?1.(:HDPbXQcstq‡ˆsxˆ“œ——“›‘‹ˆ…”§—¤¤›œ‘—¨“|}„™¢›•‰ˆ{uwrj[DK/.8,%#2);C8@NCXaifz—¦ÇÐÉÌÜâòòýÿ÷øû÷õíÛáÓ»¢£›™†rŒ’}m`B?E?6;326&&  +/;AYbcht}•£¥¦®²½¼¹²±®¯±¬§ž™œ—€urogZYZ[][[eoppusxz‚„Œ“’•’–“‰Ž”—š”ˆ–˜’ŒˆŽƒƒ†š¥ªªµ¾ÄÊÎÊÒÔÐÊÎËÆ»µ¥œŽ„vfZNG?9-$! +  +'1;JY^nu~‚‘Ÿªµ¸»ÄÂÄÞ·µ¯©§¡—“€~vg^XPOXWOMMWemhomot{‹ŒˆˆŽŒˆš˜–‘‰˜™™’‹”—™¢ª·»ÀÆÏÏÕÜÜרÑÇȹ­¥¦ž’‰~rfZOC81(  '5?ITaju…’œ§«¶º¸¾Àþ¸µ¶±«¢˜ŒxmaZVQNNKILSW_dgims{‚†ŒŽ‘šœšœžššŸœš–˜Ÿ¡£ž™£¥£©¨©²º¼ÃËÐÖÚÛÛÞÛ×ÒÊ¿²¦²«¢™€vjbWLF=3+!  +!,7AIS^gs~Š”™£«®¶¹»¼¹¸··µ±¯©¢—…ynid_ZVSTXY\adehinw{‚†Š–•“••˜žœ››¡££ ŸŸ¡¡žŸ £ª°´¸»¾ÂÈËËÍÌÉÈÈÃÁ¹²Á¾¸ª›‘wi\SPE:+$  +$,.5CMYblyŽ˜š¡©¯´´³´¼½µµ²¬ª¡”‰ƒulf[SRNNURQV]^cjny…‹‘ž¡¨²¶µ¹¶³»º¶²¯ª®«¢œ™—–•Ž–žž ¦¨­³º¹»½ÂÇËÇÇÂÁɶ§˜‰€xsqnkfa]XUTQK@1! !-8@GNT[cjorvz}ˆ’œ¥¯µº¾ÁÄÉÊÉž¶°©£ž˜–‘Œˆypkfdcca_\Z[]`eilmoqttustuy}…ˆŠ‹–›£ª¯±±¯¬©¦§¬³¾ÇÏÔÓÓÎÉÈü´ª¢œ–‘‹‚vhZNFB@>9/" + "&')+-.0369>DIMT^gp|‡“¦¯¶¹º»½ÀÃÆÈÈÅÃÀ½ºµ« –Љˆˆ†ƒ{zz}€‚~yrmgb``dhnsx}€ƒˆŽ•œ¥®²µ¸¾ÄÉÌÏÏÍÌÍÐÒÑÐÌÈÙææÔ·”sabr…ŽhWOR[fpqmf_VSXaYG/$8EIJJPRWam{…—ªºÃËÑÏźµ¹ÂÏרÖÍËÈÆ¿°“vZG717ADGOU`s¤°¬¢ydTHAK]mv€ƒˆ‹Œˆ~m_^hs}¢®¯ª¦•œª¸ÁÀÈÎÙ£ ›“Šsic^[YUQLGB=94/+)(('$   !)1:BIPYcmuz€„ˆ‘˜Ÿ¥ª¯³·º¼º¹··¹¼ÁÄÅÄÂÀÀÃÆÉÌÏÑÓÔÔÒÎÉÄ¿»¹·¶·¶µ³°­ª§¤¢£©²½ÅÉÉÆÂÀ¾º¶°«§£ÛÒǺ©–pbYUTSPJB;50./48;;81*! #&)*)*.28>BEGLXj“¦³º¾ÁÂÅÇÍÑ×ÛÜ×ÐÈÄ¿¹µ°©¢ž››Ÿ¤ª±·»½¼º·²¬¤—ˆxlb^\^__^]`fq”¯ÈÜëöûùûúøõðëäÛŸœ˜“‹uj`ZVUTROJC=71-+)'%! "&*+*))*,.0248BRey‹—žŸ¤¬³º¾À¿¿¿ÁÃÄÄÁ¾¹¶´µ¸½ÃËÒ×ÛÛÚ×ÔÓÓÒÐÌż²ª¤ ¡¦­´¼ÃÈÊÊÉÅÀ½¹¶²¬§£Ÿ™•‰‚zpe[RKFA=82,'#  + + + !%+2:DRanz…“—› ¥ª¯µº¾ÂÅÈËÍÎÎÍËÊÊÊËÎÑÕÚÞâääâàÝÚØ×ÕÓÒÏÌÊÉÉÊËÌÍÎÏÐÓÔÔÑÎÊÅ¿ºµ°¬§£ž™­¨£Ÿš’†xj]TNJE?70)%   #*06;@FMU^els|‡‘œ¥ª«ª§§§ª®³¸»¼½½¾½¼¹´¯©¤¡ ¢¥©­±²²°­ª¦¤¢ Ÿ ¢¤«´¿ÉÒ××ÕÒÏÎÑÓÕÔÑÌÇ¿¼º¹¸µ²­¨Ÿ—’‰‚wj\PE:1(  + #&+2FOYajqvwy{~…‹”–•”””—™›š™˜™› ¢¢¢Ÿ›—“‘‘“”––—••”—œ¢©±·¼ÀÆÐÙâéïððñòôõ÷øöóðëæàÙÔÎÆ¿¹±© —”†wia[YUQKC<5.& !#!!%,7DQ_lw€‡Ž– ©±µ¹º¹··º½ÁÃľµ©’‡~zyyxslcZRMIJOT\aefc_\\akx…‘𢩲½ÉÕßçîôùýþÿÿýûøñéáØÑËÅÀ»¶¯§ž”œ–‡{oaSIB>?@?<81+'%$$"!!!$&''%!)5BOZbinvŸ¬¶¿ÃÅÊÐÙàåçæáÜÕÍÇÁº±«¤œ”ŠvgXI<1,*-/0.(#!,=Rfxˆ”¡¯¿ÐßëóøøøùúýÿþüöîåÜÕÑËÆÀ¸°©¢œ‡€{unf]TNIFDA=730/158:<<;:84/(  "+4=DINUap€Žš¢¨°»ÆÑÙÝÛÖÒÎËÉÈÈÆÂº°¦—”•”Šxrory‚Œ•›Ÿ£¬¶ÃÑÜäçççêïõûÿþøîäÙÐȼ·°¨Ÿ–އk_TH=4+"  +"(+/35777631-)$ + + + !&+19DMXcn{†“§²ºÃËÓÚßäèêëëéèåáÞÛÖÑÌÇ¿½¼¿ÁÅÊÏÕÙàåêïó÷úýþÿÿþþûùõïèàØÏƼ±¦›ƒxkvhYI;0(  $+.27;?>>=>==:6-%!#).///29@HOZhv…›¥®¹ÂÏ×ÝäéîòôòñêãàßßÛÔÍý»½ÂÆËÎÑÓÕØÙÚÝáèëîïðððòóòîçàØÒÍǽ³¥š“‹ƒv„q[E4+'#%-68:>AB?<:;<>>7*$(##/794.-169>J[n€Œ—Ÿ¤¯¼ÌØÞæëñöùùöêߨØÜÛÕɺ±²ºÅÎÔ×ÚÛÛÛØÔÔ×Þâçìðôö÷øöïæÝÔÐÍǽ¯Ÿ–””‘„’z^C.(,//"!2>C@95:BLOMNMKE=9:;@?8( (0* +$9HKD:42334?Sj}‰’–— ¯ÄÒÚáäçíòòïÝËÀ½ÆÉÄ·¦›¡¯ÀÏרÛÚÛÙÑÇÄÈÑÕÜçôûÿÿþ÷ìâ×ÎÈÅÁµ£’‹” ’š`E1.6@D:-)1E\lqi]VXakmifc]UJDDEIIA1 +"4<5! )CW\VKB=964=Qh|‡Š‘¡¶ÅÌÑÒÓØÝÞÙůŸ›¥¬©Œ‹ž²ÄÌÌÎÎÏË·²µ½ÃÎÞïûÿýùïáÖÊÀ»¹³¥“‚Œž¥šaG43@OWODALe€“—~ss|†‡€ztlbTLKKOMF4 +$7@8# *G_gcYMGA;8@Tl~ˆŠ„‰˜®½ÃÆÅÄÇËÌǯ˜†Š’‘†wmy¦¹ÂÁÃÃÄÁ¸ª¥©²¸ÅÙîûÿúõè×ÌÀ¶°­¦˜„ut…›¦uV=+-?Ta\STd~›¯²§”…ˆ‘‘‡~uj_OFCBDA9' +4@9%7Vpxuk\RH=5:=:3# 5C@1#'6Rq‹“„rdWH;=Oaosurp|Ž¢ºÎÜÞÚäëçÛ¹ƒt}„†‚vnz¡«±®®«°·µ¨œ˜ž¡«ÀÔäèáÝÔÍËù±®§’vaYbr}uT=0(0Ndim|“«»ÃÁµ£Ž€€ƒ}k^VOI?=?=?:4,!-?LKE@GXqŒ¡¨§ž‹{j\MKX^ghfeeu†–°Îåéç÷ÿùìʳ™…‹ŽŽ†€‡—¡ ¡œœ›Ÿ­²¥™“’ ®¼À»¾ºº¿¾·±°©“ydTSZ^TE4.-%#-G]it†š©¯¯¨Ÿ‘qnngVJEB@=?DGIDAB@>@CKS[[[^gw‰œª°³­Ÿ‘€rd`fdgfcbfx†£ÁÜáàôÿûïÔŰž››–‘’œ ˜–’‘”¤ªŸ’……|„‹–š—œœ¡©ª¦¢¤¢’p_UQPE:,**$!(=Scr…˜¡£ ˜‘†wjdc\LB>>ACHPVXTQTWY[]`cginu~‹™¦®³·¶­¡’‡|y|tsoigm€Š‹»×ÝÜòÿûíÖʹ¦¦ ¡¤Ÿš—œœŽ‹‡…ƒ†˜¡›{uqux~‚„Œ•—•”˜˜‹}qaRID:;/,*%&+OY\fryz{zpi`WLkjkmqyxrnmm|›µ»¹»³–„|wtrdQ;//& ,*")?UX^t˜°ÊäðïçáÖÏÏÏÉÍÒ©„•¯´£¦ÀÚÏÄÞêÜ¿“}`jlj}ˆŽ“¢±›™¡¨·ÕèÙÆ¯ƒ\XZM;;1 )+8JYhx„‡‹†uk“˜›ž§®©šŒx|’ª°¯²ª‘…‚€xhUKH<++0) (0G\afzš²ÊâêäÖÍÿÄÉÆÇÈ·žƒw{†•—ˆ†“ —Žœ¥ŒwvjX`eft‡Œš«’œ£¨±ÅÐĽ³ploeUVO;-*+)&0?Ocz™¢¢—“­µ¹½ÇÏÆ°šˆzxˆž¤£¥ƒwwwxzviZROC426/ %.ATW\p‘¬ÅÞéáÒÈÀ¿ÇÏÐÑ龜y{ƒŒŽ|€†}u}ƒ~pab]OW]^kv€Šš±© ¬´¸¿ÌÔÇÿœ{vxlXYUA3+( #3D]}–§´¶­­˜ §¡¡¸Ìǘ\Nh€“Ž—¥²‘ššŸ“gDOqvdDTv„bOLUuc+ .JSUqŽ¼Ç¥~Takyw…œÈÿôÄ£x ‘zŒÆèÕ×ßÉ¿¦qgOD]u‡©¡‹”¦¼WOP??bt|œyFF\aFSRQSScl^cxqgz¢²®š˜Ÿ‘t„š š†XDC@FjœÂÆ¥vz¦¸º‘mTv³Ê“I8l“Z=/HlyR-=faGWŠª¦GPoŒŽµâé¶~b{ÀÌj‡ÚÿÏXfš¾³ŸnJfzzo[c‹ž«˜›¢‘r\s”¨À´e(=ai[apŒ“ƒzl?7]€™ž›£°³©Ÿ ¢˜•˜”Ž}ngegny‰Ÿ°¼¦™¡³º¨Žlv†‚sYObq]I12=D6*,6;AHP[hjZS\m„•Ÿ¨·¸¤–”ž£°»¸ÂáÿüéÖ¼°´´¯œ‡”§¯¥•›¨¨yrxx}{fVhs[?65>@FGIO_if_cuvx~…ŠˆŒ “Ÿ”Œƒ€€‚rccsˆ¸ÖÞÓÊÛéìÔ¯¨ª¢sacplU<30:30,&!"(6FJGGO]hmwƒ’£®­¥¤³Á¿¾ÃÏâñùÿóëÝÉ·¬±³ª¨Ÿ˜’‡„‘’…oou~{rmW8,.' +59-0>NNPT]ah{€ƒŠŽ}t“‡ž”lwznXKan€‹…¦ÊáÜÇÒçæØ³¯§žŒkZXgm`NGDNMSQ=(#&%-AKKQbspnv†›¢œ—¢®··²¶ÁÕãîÿÿöéÕñ®¨š•ŠŒ‹ŽŽ‰tz†„tkqa8!#7GDAI]_\Zgu{~svƒ~q|‡wŒ‡ƒq[drpQEWmy|s•ÁáÖ¿ÄéêØ±¤Ÿœ‡p`ZnzqYKDPXdeP52878ESWZpƒ|s|—ŸŸ•‘¡¼ÌÐÊÃÎÞäêøÿ÷êâÐÀµ¯¥”Šˆ‘’Šoqz|lji`< ,=85>X^YTaujjtƒ~uitw…”‹‚nS`upTObtƒ‚zžÌèäÍÕïôèÄ­¥Ÿk\lƒzaH:G[loW93<::BMNRjyhs‡–¡š‰†™¹Ñ×ÐÇÑâåãóÿõëá͹´²ª–ˆ€‚‹ŒŠ…yfhspe`]T6 + #50(6R_]UayŒˆmjxˆ†spw…™—ŒrMTxvXG^z…ƒtŽÃðñÔÆêúñʬ Ÿyl^t‚|dQDN]lseH:A<Ku‘·°’r­µ³kotkd†—¾º˜f[Yy’‡~y‚ž›‘ˆ…}‘½Ô· ¯·ª¿¾q.x·¸Ú«’†œÜÿ徬‚e‚ÃêÎlVb|¢±ŸZLf‹ª¾°‘R2RV`cAP^jw€‚xcOHObx‰“›£¤Ÿ“€ojrƒ’§¸ÉØåæÙıª°¾ÍÙãî÷ùîÙ®¦«·ÂÊÑÙáãת™•œ©³¹ÀÇÌɹ¡ˆysw…ˆ”•ŠuXA56@KalrpmcQ>,#%3EW`a\SH5 0?DD>82$ + 2J^hmqldWHAFUkƒ‘—–“Šrd^dw’œ³ÀÈÐÓ˺© §¹ÌàìòôóëÚų¨ªµÇÔÝàÞÚÔIJ£œ¡°ÃÏÕ×ÔÐŰ˜ƒ|Žœ¢¡ž—zbJ<;ETarvqeXI9/*-8HW`_VG7( '8=90' '@T_b_XMC=93-($  !$(,03579=@CGJMQU\_ekryˆ’˜¡©±¹ÀÇÍÒØÝáäçéëìíííììíííîîîïïïïïíîîíëèæãàÝØÒÍÇÁ»µ¯©£—‘‹†€{vspkv‘sg‰¬Šv]©˜‰†•‘bkw]_F8/4P$71@%?''"-/+"%9amb^ZQhgRnbOFJ\VPq~vOǵɣÀȰ¿½ÐÜåÕÑèÿÕáÚÄÖµØãëº×£Ã©­œÈµ‡¬•€‰Šv„Kvgid‚ƒmŒœ|€‡ ŒŠxvlM][_dQUKoTDJAA22O6%-!A! 4.) +C^^DHEdž¢–|g‚Š£°®’r’£–‹…–«ª‹››™²­‘Ÿ£ž£ ¢×øçݯÔÒ×ïíÒÕ½áÎÍËçϸ¤ Ä´ŸžŸ¨³¬Ÿ|”ˆ’€‡ygisikup[YVlZ7SO><9IMS4<1'*%'4),,)0!%.@2:4B[u|bRQqÂŲ–|’©ÆÎÇ»šµÍÀš•®Ò×Âzuƒ–¾Âžz–£•™‘Îùï寭ÆÚè÷êÔÍÈÞÓÖÓåËÇ´«½±—‘•¢ž““z{ow‹rZ^EEUbdL.0EZ9:D3('5;5'E;"!.+&/+-55,),9I:P?HkŽ‘r_bßãÒµ”§ÄßåàÙ´ÂðÞ©•½îñÙˆd€ÅÖª{€¡¨Ž›‰µëïὪÑÿûñؽÃßÛÓÉØ¼½²§®£’–•sz€njbbriPF`C2@PP;!%A9%/<4+*.47=OF3-*(5>99*)5>B>937DR`_RC;:CLLE;8>HOVXTV^dgmomy–¨£’’«ØõýðÖÇÓðÿþõêÞæîÙ·´ËÜΞjcq‚–shyzlqw~¢ÆÃ¨‘¸áâÔij­ºÀ¹²¬ œ”…}~}yhPFJRYXPGELX[SF947<:3(.>EC<;CRacXJ>DLS[`_`dkostv‚™­°¦£³ÕñþõâÓÕçùÿöðêíðãǸ¿ËÆ«}jn{Š‹{kntpmnv’´¿°žœ³ÓßÖǵ«®·µ®¥——ŽsrsoaN@@KVXRHBEPWRF5))042' "-8@HMOMHB:4-(&%%(.7@HNU\bgkot{ƒ˜¢«¶ÀÊÏÔÖ×××ÖÔÒÌÇ¿·­¢”‡}{zvy}„ƒ}|~‚‰’¡´ÅÒÝçðö÷õòíçáÝÙÓÌŽ·­£—‹vnhcabfjmprtrme[N@2$ &;N^n}ˆŽ†zk[K;.&"&.8CLT^jsxsja[[bjqw~‡•£±½Â¾µ¥’{cQC9.$"Ai“­¿ÅÊÒÛãçáк¦ž¢°ÃÑ×רÛáæëíéÞÑŹ³­©¥Ÿ–‹€wtttrprv|‰˜ž ”‡tbO?1"NDFSew†”¡«²¸¸²¨›‹wdRIFKT^ejnvŒ••Œ|j][dt‚“™¡¯¿ÐÛÚȧ{Q3''*%U–ÉäçÜÐÌÒÜÜÇ¢uQ>ASgtvurtz†•Ÿ’sllt}…ˆ†€}…Š‹ˆƒ€†Ž•šœ˜‘ˆxqle[Nuqnkgda^\YXWVUUUUVWXYZ\]^_`___^\ZWUQMJEA=841.+)'&''*-05;BJS\fp|ˆ”Ÿ«¶ÁËÕÝæíò÷ûýÿÿþýùõñëåÞ×ÏÈÀ¹²ª¤˜“‹ˆ…ƒ‚‚ƒ„…†ˆˆ‰ŠŠŠŠ‰‡†„|yu|wqlhc_[XVTSSSTVX[^beimpsuwyzzyxurnic]WPHA:3-'"!&-5?IUan{‰–¤°½ÉÔÞçïõùýÿÿþüùôîçàØÏż³ª¢š“Œ†‚~{ywwxy{}€ƒ‡ŠŽ‘”—™›œœ›š˜•“‹†|€€~|ywspmifc`^]\\\]_behlptwz}}~}{xsme^ULB8.% + +  *6EUevˆ™©¹É×âìôúþÿÿüøòëãÚÐÆ¼³ª¢›•Œ‰‡††‡ˆŠŒŽ‘““””““‘ŽŒ‰‡…ƒ€~~~~€›—‹znjnx‡…~unigeca_adimmkgfku€Š‡|oggmvzwjWA0# "" #4NmŠ «­¬®·ÇÛîûÿüöïéäÞÖÍû¶±«¢–Š‚ƒ‹‘’ƒyuz‡–¤¨¥šŽ„€…‰‘‘Šukfjv†•›’£§‹{sv€‹’’…zvqi`YX]gorlbXV]l{ƒtcVPU_ff\J7&)241**5Nr—´ÄÆÁ¼¾ÉÛîûÿüöðêåÜж°¯²´°¥•‡‚†“¡©¨œŽ„„œ©¯ªž„|zywuux}ƒ„~rbWWcz’¹Ï˵™†ƒ¤µ½»²§ž”ˆvaOFKYhmcK2"#6RipbJ0#):P]]N9% %:LQF12^•Äßáк«®ÀÚðýÿúôïêáÒÀ±¬³ÃÔÛÒ½£”–ªÅÜáÓ¹Ÿ‘“£¶À½«’{i_XQJGKWgsscI1)9^„£²¬˜‡…•±Èͽ „w~Ÿž‰hJ=EZmqbH1*8SltgN70NRPNUhƒž±¹¸¶¼Ìâöÿúé×ÊÈÌÐͽ§’ˆ‰” ¥ž€zŒ™Ÿ™‹}v{‡‘‘…nVE@CGD7%+@NRNKPa{t’¨³³¨˜ˆ|w|ˆ˜§±³¬žŠucUOOT^irxyvmcVLECGP\googXA)-APVRH;0.8Nn“µÒãèâÕÉÀ¾ÅÒãòüýöæÑ»¦—Ž“›¦¯µ¶³¬¢˜Ž‰‰™¦³»½µ¥Žt]LFITdr{zq_J9/1?XtuŽŸ£š‡nWHENbyž¥ •†ypmqyƒ“•”ˆti]RICBEKRVTL<)2NcopeTC:=Nl±ÌÚÚκ©žŸª½Õê÷ùñá͹«£¢¥ª¯²²®§ —Ž…}vqpt}‰•ž¡œ‘oa\bq†œ«±©–{aMEK]uy¢¹¸¡}ZD=EUgw„‘šŸ›ydZ^qŠŸ©£’uty|vfO:28I\faO4 +%9Odrp`D+!/WŒ¿ãíàÅ«›š§ºÍÞëõûûòÞè—”Ÿ²ÂƼ¨”ˆ†‹Žo`]i›¬¯¢xidgoz†•§¶»°–pK57Qy~±Îʪ{S=>Odw‡Ž—¡¢˜„m_atŽ Ÿ‹kOFRm†€a>'%4JXTA& -C^u{lL) KŠÆîõÞ¹˜Š‘§ÁÕâéðøÿþðØ½ª§¶ÊØÔ¼™|q|—±¼°“tacw‘¤¦–j`aipv{„–ªº¹¢xJ,,K~†¸×ÛÇ£€h`cjprtx€ˆŠq]PQ`v‰ˆwhdp…™¡™„m_^jx~uaF/" $*/28CQ\[M4%QÈñÿò×»ª¦®¸ÀÃÄÈÍÑϬ’€z„”¢¤—ƒqlv‹ «¥“w|¡­«œ†sjkrz~…–œ•^=,3U† !"$%&()*,-/0134679:<=?@BCEFHIKLNPQSTVXY[]^`bceghjlnoqsuwxz|~€‚ƒ…‡‰‹‘“•—™šœž ¢¤§©«­¯±³µ·¹»½ÀÂÄÆÈÊÍÏÑÓÕØÚÜÞáãåèêìîñóõøúýÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ &,27=CHMRW\`dhloruxz|~€‚€~|zxurolhd`\WRMHC=72,& ýöðêäÝ×ÑÌÆÀ»¶±¬§£Ÿ›—”‘Ž‹‰‡…„ƒ‚‚‚‚‚ƒ„…‡‰‹Ž‘”—›Ÿ£§¬±¶»ÀÆÌÑ×Ýäêðöý€€€€€€€€°°°°°°°°ÚÚÚÚÚÚÚÚõõõõõõõõÿÿÿÿÿÿÿÿõõõõõõõõÚÚÚÚÚÚÚÚ°°°°°°°°€€€€€€€€OOOOOOOO%%%%%%%% + + + + + + + + + + + + + + + +%%%%%%%%OOOOOOOO€†Œ’˜ž¥ª°¶¼ÁÆËÐÕÚÞâæêíðóõøúûýþþÿÿÿþþýûúøõóðíêæâÞÚÕÐËÆÁ¼¶°ª¥ž˜’Œ†€ysmgaZUOIC>94/*%! + + !%*/49>CIOUZagmsy€€€€€ƒ„‡‰‘•š ¦­³ºÂÉÐ×ÞäêïôøûýÿÿÿýûøôïêäÞ×Ðɺ³­¦ š•‘‰‡„ƒ€€€€€~|{xvrnje_YRLE=6/(!  !(/6=ELRY_ejnrvx{|~€€€€€€€€€‚„†‰‘–œ£ª²»ÄÌÕÞæíóøüþÿþüøóíæÞÕÌÄ»²ª£œ–‘‰†„‚€€€€€€€€~~}{yvrnic\UMD;3*!  !*3;DMU\cinrvy{}~~€  $(-159=AEIMQUY]aeimquy}‚†ŠŽ’–šž¢¦ª®²¶º¾ÂÆÊÎÒ×Ûßãçëïó÷ûÿÿû÷óïëçãßÛ×ÒÎÊÆÂ¾º¶²®ª¦¢žš–’ŽŠ†‚}yuqmiea]YUQMIEA=951-($   "%(*-0369IS]fmtz~ƒ„ƒ~ztmf]SI>2& úîáÕɾ´ª¡š“މ†„„„†‰Ž“š¡ª´¾ÉÕáîú &2>IS]fmtz~ƒ„ƒ~ztmf]SI>2& úîáÕɾ´ª¡š“މ†„„„†‰Ž“š¡ª´¾ÉÕáîú€€€€°°°°ÚÚÚÚõõõõÿÿÿÿõõõõÚÚÚÚ°°°°€€€€OOOO%%%% + + + + + + + +%%%%OOOO€€€€°°°°ÚÚÚÚõõõõÿÿÿÿõõõõÚÚÚÚ°°°°€€€€OOOO%%%% + + + + + + + +%%%%OOOO€€Œ˜¥°¼ÆÐÚâêðõúýþÿþýúõðêâÚÐÆ¼°¥˜Œ€sgZOC9/% + +%/9COZgs€Œ˜¥°¼ÆÐÚâêðõúýþÿþýúõðêâÚÐÆ¼°¥˜Œ€sgZOC9/% + +%/9COZgs€€€€ƒ‡• ­ºÉ×äïøýÿýøïä×ɺ­ •‡ƒ€€€|xrj_RE6((6ER_jrx|€€€ƒ‡• ­ºÉ×äïøýÿýøïä×ɺ­ •‡ƒ€€€|xrj_RE6((6ER_jrx|€€€€€‚†–£²ÄÕæóüÿüóæÕIJ£–†‚€€€€~}yri\M;*  *;M\iry}~€€€€‚†–£²ÄÕæóüÿüóæÕIJ£–†‚€€€€~}yri\M;*  *;M\iry}~€ (19AIQYaiqy‚Š’š¢ª²ºÂÊÒÛãëóûÿ÷ïçß×ÎÆ¾¶®¦ž–ކ}ume]UME=5-$  (19AIQYaiqy‚Š’š¢ª²ºÂÊÒÛãëóûÿ÷ïçß×ÎÆ¾¶®¦ž–ކ}ume]UME=5-$ znbTG;1' +#*18@HMQUX[]^]ZVRMHC=7/)"%-7@M[iw‡“¢¯¼ÉÓÜåíôùüÿÿýùõòîèàÖÏÉýµ¯ª¦¢ ¡¤¥§ª®´¼ÄÊÐÔÙáçêìíììéæáÛÓÇ»°¦™Šz…udTF7* + ++7DSbpŽœ§²¼ÅÊÍÏÎÌÆ¿·®¢•‰zl]OB6," (2?N]m}ž®¼Ë×ãìóùýÿýùôìãØË¾¯Ÿ‚tfXMC;40/037?HS_m{ˆ•£²¿ÊÓÛâçêëéæßÖÌÁ´¥–…{n_OB5* *5?M\iv…• ª´¾ÄÇÊÊÌÇýµ« —Œ~pbVKB;4.+*,/3;DP]kz‰•¤´ÁÍ×áêñøüÿýøõîåÙÏͧ™‹}n`UJ@944446;CMXcnyƒŸ«µ¼ÁÈÎÒÒÒÐËû²§˜‰{:>6% + ;PSUh{~‘³¾ÄÌÛãàÝäòññïèÞÙÝØÌº°­¤ŸŸ‡‡Œ‘–Ÿ¥µÆÐËÐâëîæåìïõûüïãÞÛͽµ±¨–ˆ~mQA8/$ ,..02?N\`YUXgigkstljicN=:Yhg\_jvrottruƒ‡{…¥º¶§¤ª¡™­ÛèæàßÜÕÐØéåâÜ×ÏÌËÆ¹®²¹³«§ ‘Œ“Ÿ —‹‹Š™§¨››±Àº¡‘‹‹—§¯¢‹zndgrsh`\N6+'&()+7/*?=5,"'.) #6EWmƒ„p^OJMXk‚—ª¸ÆÊÀ¬–|kegpŒŸ±¼ÈÓÚ×Ë·¢‹zoq}§ºËÏɼªšŒ|leht†—¤³¼ÃÆÁº­œ‰whbjx‘¯ÍºÜäк¥—…dQZj€¢¼ÂÌ×ÒÉ¿³ºª€kmh_VF:5=PVNO;# V\!KaU]­¢­¹®œˆŒ‘Œ˜¨«ªª¾Ì·–{ZFN]fkkuƒ–¬¦—‹tbXGJT\u‡–—ˆwgcxzbVZiŒ™¬°¯º²¦žŒ‚zoin{Š›º—¬ª®¦¤²³¤–¨²ºâòÚÙóáÕéÙæá¨›¢ ‘ƒl?/1;B4=60¨ÀV$O|˜„t®Ð¦ªÊÀ°±»µ£¨¤–‹u€u[L75E[`RIEKF;Wof[g[DNB8@@LLj_;S>9yŠvlv{–¯’““Š–ŒŽ|„‡‚ƒ~—ÅÓ®ÚÛ½ÙÙÐÀÕÒÀâåÁµâÀ™Ý³š¼wu{[PN''$ &`m;:aLwSwCj_OFobHŒq^yzyp~‰tvœ’„©§©©ÅÕæÃïõÎïõäÜïæÕåèÓ»è͓亊¾žx~bJP8)# 08(;&8J-B\;Lk[R„‚YŽ¢yЏœŽº·§Ã¥•ì‹¿ŸŒ¶“”¢‚‚¡ed“_A†m‹jˆVgWN9kd,yqJptjltˆ}z¨œ½¸¹ÃÕ§²—;~Îѯ·Î¨©ÊÆ›‚źVØ¡oÀŒ™oq€S>d3%<<<92+$ + "(/589::6.)()/7=@>;:9875/("  #/;FNU]gwˆš¨±ºÁÈÏÚäîõ÷ùø÷ùüÿÿýøñéåáàÞÚÖÐÇ¿»ººº¸³­©§§©«­®¬¨£¡¢¥§§¥ž™•““’‘†…}wutssuy}~~{vm`PB:67:<=@CEEDEGIIFB<71+%$'-244320-)%$Bj—¿ÝñüÿûñæÜ×ÕÖÖ×ÙÜÞÞÝÛÚÙØÕÐÈ¿¹µ²¯¯³¹¼¾¿ÀÁÁÀÀ¿¿¿»²¦šŠ†ƒ„‡‹ŽŽŒ……‚~€…Љ‰Ž–œžŸŸ™Œ|nhhlqssuy|}„ŠŽ‘’Ž„vi_[_fjif`XOHEA8/)# 3`“¿ßôÿþóäØÏÉý»»»¸²ª¥¡žžŸŸšŽ~ohfhkpw}„‡ŠŒŒŠŠ‘‘‹~pfabdiptwy}ƒ„……}”†Ÿ¸˜`Uu‡Š´Ê£Y# J‚Ÿ‡]\€ŽhCNkj^y¶Õ½hH6M‡°­•€_3"A`J%bŽ‚cQ7 F°çÙÄÏÒ£hi©áÛ´§¾ÑȬŒkRV|¬Æ¾™e71Yˆš•³´—|„œœi{¯ÝÛ¢\?Ofs‰­³…RVz`Z}kœ•~”¸¤eG_wt}£¸’F=wpBEoyK&;^T>a¯Ô®sO6"3q¦§‹oK(T@Q”Ž_A2G¨âÚÈÕÚ§dhºÿôÀ³Øô侚wY_‘ÉÝϲ„J2[¡½¬§ÅÔµ“µ¹”u‡¾îî¶nL]w‚“¶¾ŠKM~†U>kg”w›’aAM^^`x…i2 + +S`F%(GK' ;07w”tE-IvydO6D: G‚„]D?85X™ÅƼÈͪz€ÂûóÊÃåþñÒ¸Ÿ‰¹åñåÕ¸ŠpŽÉãÐÇàñÙ·¹ÔعŸªÑòñÊ–{„–œ£¹¾•aa‡Œ_Dgnˆ„ppz[DFNLKUYG& 49(%& ?O3*#  #()&" '=a‹°ËÙÛÙÕÕØÞäèëïõûÿÿüöîåÝØÓÌÁ³¤˜Ž‘Œ†~xtpmgb_`bflqw|„…„‚~xsnkilus‚ޒЇ…†‰Ž‘“—šž¢¦ª¬¨¢™‘Œ‰ˆ‡ˆ‰ˆ†€vi[OFA>;6.%"('NŒÅìþûíß××ÞåèçæçêííëåÛÐÇÃÂÀ»²¦˜Œ„€~{wrnjd]VSSW\cjosvy|€€{skebgstƒŽ‰„ƒ…‰”•Œ‹‹Ž’–šš–‰„„‰ŽŒ„xk_WUVY]bd`YTRRPKE>5/18<7(JŠÇïÿúéÖÇÃÈÍÍÆ½¶²°¯¯¬¦žš£©¬­¬¥™Œzvuwz{xuqlfbbfmtz{zustz„‚{skfhtmƒ”—™£¯±¬©£”‚zzty~{‚’Ÿ¤§«¬§ž–m^VRNHJXhopxŠ™”l`SC=AB4  + +=ŽÕòòîìá̾ÁÈñŸŽzjhy‹‹£´¶¬ª¯«š†zreWTY\Y[iz€{w|„Š‹ŒŠqc^]XSXfokdmmƒ”š£¶ÅÄ»´«•zqwyohnspn~™¬²¶¾¿´¤›‘k[TOG>@Skwy„¡º·™|n`L@CB/1âüðéðêÒ¾Àĺ¥“~aGGb~†„Ž©¾¿²­°®šƒum^JAGNMOcŽŠƒ‡‘”’’’‡pZPLCCLUcp~Œš¨µÄÕåóûÿýöëàÓŶ©šŽƒzrkf`[VRLR[^]YRKKNSY_aflsƒ˜Ÿ¢¢Ÿš’Œƒzqd[ZZYYTQNMQX_dfedccb_VOF>:;=CIKOZi…°ÀÇÇÉËÎÐÐÈ¿±¦Ÿœ™›“‹ƒ{wunhZH?<>O_m}Š•¥¹ÎåõüÿüöóòîäÔ¾§“€vj`[RJJL[]feYL:'$$%.0-07Cd€—°½ÃËÏÑÙÓȽ¨”‰…„wi_UT_gnqh\SMMPF<0 (9LR[ix–µÌÞäÚÕÒÏÔØÎÂ±šŒ•›’ŠtrqhaQ5",4@KOd‚žÆãðøùõùÿýúîÔ½©–“Œ€|m\Z[xt{xh[E-'# :Ys’¤¯¿ÌÖæêæäÕÅÅÀ½½° “…}ƒ††ƒt`REAB7, #;HWjz™¹ÐåíãÜÚÕÙàÙÏÀ§›˜•šƒxhde]YO4! "()=Yu»ÈÓÖÑØâäçãе©«©¡Ÿ‘~{x–Ž‚xhWTUTXSC;9@]{•°ÀÆÏÒÑÖÏŨ—–••˜†vmppolaRHDHQLA1 *9Nb…«Éáíåáâäíø÷ñçÓÈ···§–†snpnqn\N@/++"2Kl‚‰‹…‰‘”›ž—•—𫵏¼± œ–¦™”Љ†ƒ‹—¡©¤”‡†µÊÝæçåÞÓÇ´†n[WVX[[\__XVPIC:1/7J]c_O6  .C[¦Éâíéæèí÷ÿþüøíæàÖÑ˸¡‹worx„ˆ}naUA0 ,@LJC>9:=?DIMVey—°¿Çù±¦©˜‹†‡• ²ÆÙäâÖÈÀÄÒãòüÿýôæÕ½¢„cF1(%'*1CMURJ9( =[s€~q]H4'&<`Œ´ÒÞÜÒÌÎ×áåãÝÔÍÅÁÃÊÒÓÈ´ˆ}‹›¨«¢‘z_C+.?JG9' %2Fb~›µÇÏɹů˜ˆ~}…˜´ÓðÿüéϺ°³¼ÆÍÍÆ¸¤Ž{qt“¢¤š‡ra[Z\ZULC;61/7G]u†Ž‰}lVA- $:a³ÆÁ°™Ž™©µ¹µ§—…}’«ÂËìŽxmq}‰ˆycJ3"'Sk{~…’¡§³º¶­ŸweSOSSLQaow†Ÿ¯»ÍçóêàßÙȼµ§ŒqbWI??BFRguzƒ—¨­¸Äų¢•eRG6# $En‹Ÿ²ÃÆÇÎÛÙËĽ§‡md\UWaddl}‹”¥»ÊÑÙÝϵ¡–…l]TB," 5MZm…–—¬·¶±±¨˜†whvwl]C*6[}™¢”™ÇèêÞÆ£Š†•«§ŒqO5:Ol…‰‚yirŸÅÖà̪{„“„mT#"3,&a´Ä»¨›¡ÅÞÞÖ¹‡_O]w…ƒzbP^‚¥¿Ê¶¬±ÉÕɵ•hB9AMNB2Fu•¢ž“ƒ…©ÌÖϵpchr¢¬š}G'>e”¹«ˆiNZ“¼ÊÀŽ]JNx®ºªŠTXm|ƒ€Ÿ©¸ÇËÉÆº£Šq_PA:1 8Xp’­´¯ž“œªËÒ£sP%1N_lP/Z˜ÂÕÙ¼˜—¨¶Ñß¶vP5$9b|‘š‚bcv·àøûݰ›žœ£·´“t]E3+/Kr„ƒ„Ž­¾ÕîíÒ»¥Ž‡Œ°¡ƒpbenqoi\PMXj|Š“”“—£¬¯«Ÿ‡m]O@99-/UxŒ••ŠƒŽªÅÓͰR98COVK) 4j¢ÀÈÆ¶§¬ÁÕáÙ¸ˆ\=5D^s~zh[axžÐõÿøåǯ®´³¯¤‡gXX_kyzssy…™££—’šœª°¬“‚sZRWW^mjaingmxm\^ei|“–ŽŠ‡–“‹zT3$*DGDJA8Rz–·Ö̪“ns€|kO# $Wƒ—¢˜˜½Þçö÷Ș†nYhzqieSKb‚¢Êæëëç×ÍÑÐø§ƒg`ZZoxjksip–¤¡·Á¦œ«¤¬¬›•‘‹~{€„ƒ‚o`baX\_OOdjs‘œ™¯»§£«˜‡eJLA$';43L\b€¢ªºÏöÀ³“‘ˆdXJ%-B##XSKPEYn`f‡‡…¨¶¬Âϳ¶ÓÀ¥±«’•~†£™Ž¯Æ¿ÇÚÜçøëÛâ׺ºÁ®©´§™ª±ª¸Ãº½È¸¤©«šŽ‡~|–©”the[Y^USkpYamL6F?#*7"  ,"(::-FWIUl]TjgWepjxˆ„Œ~•®¼­¼ÓĸÊÑËÕàÙÌÌÊÀÄÖàØÖßãßâðôêæïðèñÿû÷ÿûåÕÒů¥¡‹pgaJGgx{–ƒsmzrdlrijcG8<0(?J752136:?AAAAAADHPWajrx}„ŠŽ‘•—•…xi\RNR`w•´ÑéøÿüóåÕñ¢–‹€ulfbbdhnstrnic]ZZ_dlu|~~~}|€‰” ¬¸½¼·­ŸŽ~qiehoy„”ª‘¨¿ÓäòøôãÉ©ˆkXRVaoz‚…ƒ{rljjlmoqpmifa\YWX\clw‚Š““Œˆ„wiXF5(&0Jo™ÂãøÿùéÖ¯¢˜ˆtjdadlxƒŒŽ‰woifghkorrqonkiimvƒ’¢­±¬ž‡mS>319GXi{‘‡³ÈÝïúùéΫ‰jUMSbr‚Œ’‘‹ƒ~}~€‚„…ƒ~yrjaZWW\eq€–šš•Ž‡}xqdR=(7`޽áøÿ÷åϺ¨œ”ˆsia]`jx‡”œš‘†|snkjjmoonnmjfegq~¡®³­š_@)(:Nas‡}¡¶Ïæ÷ÿ÷ᾓhD,#(7Las}€~~ƒŒ—£«ªŸŠpVB8,#(;Xz›µÄŸ£‰r_WZcmw|~}zz€Ž¢¸ÍÛÝÒ¸“h@  6K^m} \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/wavetables.py b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/wavetables.py new file mode 100644 index 00000000..0238893a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/resources/wavetables.py @@ -0,0 +1,302 @@ +#!/usr/bin/python2.5 +# +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. +# +# ----------------------------------------------------------------------------- +# +# Waveform definitions. + +import numpy +import pylab + + +WAVETABLE_SIZE = 256 +BRAIDS_WAVES = numpy.fromstring( + file('plaits/resources/waves.bin', 'rb').read(), numpy.uint8) + +wavetables = [] + +def sine(frequency): + t = numpy.arange(0, WAVETABLE_SIZE) / float(WAVETABLE_SIZE) + if frequency >= WAVETABLE_SIZE / 2: + return t * 0 + x = numpy.sin(2 * numpy.pi * t * frequency) + return x + + +def comb(n): + x = 0 + for i in xrange(n): + x += sine(i + 1) + return x + + +def pair(n): + x = 0 + for i in xrange(n): + x += sine(i + 1) * (i + 0.5) / (n - 1.0) + x += sine((i + 1) * 4) * (i + 0.5) / (n - 1.0) * 0.5 + return x + + +def tri(n, f=1): + x = 0 + for i in xrange(n): + x += sine((2 * i + 1) * f) / (2 * i + 1) ** 2.0 + return x + + +def tri_stack(n): + x = 0 + for i in xrange(n): + x += tri(15 + 5 * n, i + n / 3) + return x + + +def saw(n, f=1): + x = 0 + for i in xrange(n): + x += sine((i + 1) * f) / (i + 1) + return x + + +def saw_stack(n): + x = 0 + for i in xrange(n): + x += saw(1 + 6 * i, i + 1) / ((i + 1) ** 0.5) + return x + + +def square(n): + x = 0 + for i in xrange(n): + x += sine(2 * i + 1) / (2 * i + 1) + return x + + +def quadra(n): + x = 0 + for harmonic, amplitude in zip(xrange(4), [1, 0.5, 1, 0.5]): + x += sine(2 * n + 2 * harmonic + 1) * amplitude + return x + + +def drawbars(bars): + pipes = [1.0, 3.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 16.0] + x = 0 + for intensity, frequency in zip(bars, pipes): + x += int(intensity) / 8.0 * sine(frequency) + return x + + +def pulse(duty): + t = numpy.arange(0, WAVETABLE_SIZE) / float(WAVETABLE_SIZE) + t[-1] = t[0] + t[t < duty] = -1.0 + t[t >= duty] = 1.0 + return -t + + +def burst(duty): + t = numpy.arange(0, WAVETABLE_SIZE) / float(WAVETABLE_SIZE) + t[-1] = t[0] + d = duty ** 0.5 + t[t < d] = -1.0 + t[t >= d] = 0.0 + return -t * sine(1.0 / duty) + + +def hybrid(duty): + cycle = (numpy.arange(0, WAVETABLE_SIZE) + int((duty - 0.5) * WAVETABLE_SIZE)) % WAVETABLE_SIZE + x = pulse(duty) + x += saw(80)[cycle] + x -= (x.mean()) + return x + + +def trisaw(harmonic): + return tri(80) + saw(80, harmonic) * (1 if harmonic != 1 else 0.25) * 0.5 + + +def sawtri(harmonic): + return saw(80) * 0.5 + tri(80, harmonic) * (1 if harmonic != 1 else 0.25) + + +def square_formant(ratio): + t = numpy.arange(0, WAVETABLE_SIZE) / float(WAVETABLE_SIZE) + phase = t * (ratio ** 0.5) * 0.5 + phase[phase >= 1.0] = 1.0 + amplitude = numpy.cos(phase * numpy.pi) + 1 + formant = (sine(ratio * 0.75) + 1.0) * amplitude * 0.5 + formant -= (formant.max() + formant.min()) / 2.0 + return formant + + +def saw_formant(ratio): + t = numpy.arange(0, WAVETABLE_SIZE) / float(WAVETABLE_SIZE) + amplitude = 1.0 - t + formant = (sine(ratio) + 1.0) * amplitude * 0.5 + formant -= (formant.max() + formant.min()) / 2.0 + return formant + + +def bandpass_formant(ratio): + t = numpy.arange(0, WAVETABLE_SIZE) / float(WAVETABLE_SIZE) + amplitude = 1.0 - t + formant = sine(ratio * 1.5) * amplitude * 0.5 + return formant + + +def sine_power(power): + x = sine(1.0) + x += saw(16) + power = 2.0 ** power + return numpy.sign(x) * (numpy.abs(x) ** power) + + +def formant_f(index): + formant_1 = 3.9 * (index + 1) / 8.0 + formant_2 = formant_1 * (1.0 - numpy.cos(formant_1 * numpy.pi * 0.8)) + t = numpy.arange(0, WAVETABLE_SIZE) / float(WAVETABLE_SIZE) + amplitude_1 = (1.0 - t) ** 0.2 * numpy.exp(-4.0 * t) + amplitude_2 = (1.0 - t) ** 0.2 * numpy.exp(-2.0 * t) + formant_3 = sine(1 + 2.8 * (formant_2 + formant_1)) * amplitude_2 * 1.7 + formant_1 = sine(1 + 3 * formant_1) * amplitude_1 + formant_2 = sine(1 + 4 * formant_2) * amplitude_2 * 1.5 + f = formant_1 + formant_2 + formant_3 + return f - (f.max() + f.min()) / 2.0 + + +def distort(x): + return numpy.arctan(x * 8.0) / numpy.pi + + +def digi_formant_f(index): + formant_1 = 3.9 * (index + 1) / 8.0 + formant_2 = formant_1 * (1.0 - numpy.cos(formant_1 * numpy.pi * 0.8)) + t = numpy.arange(0, WAVETABLE_SIZE) / float(WAVETABLE_SIZE) + amplitude_1 = (1.0 - t) ** 0.2 * numpy.exp(-4.0 * t) + amplitude_2 = (1.0 - t) ** 0.2 * numpy.exp(-2.0 * t) + formant_3 = distort(sine(1 + 2.9 * (formant_2 + formant_1))) * amplitude_2 * 0.7 + formant_1 = distort(sine(1 + 3.2 * formant_1)) * amplitude_1 + formant_2 = distort(sine(1 + 4.1 * formant_2)) * amplitude_2 * 0.7 + f = formant_1 + formant_2 + formant_3 + return f - (f.max() + f.min()) / 2.0 + + +def make_family(fn, arguments): + return map(fn, arguments) + + +def make_braids_family(indices, fix=False): + family = [] + for i in indices: + start = i * 129 + end = start + 128 + s = BRAIDS_WAVES[start:end] - 128.0 + if fix: + sf = numpy.fft.rfft(s) + else: + si = numpy.zeros((WAVETABLE_SIZE, )) + si = s + # si[::2] = s + # si[1::2] = s # Ewwwwww + sf = numpy.fft.rfft(si) + sf = numpy.abs(sf) * numpy.exp(-1j * numpy.pi / 2.0) + interpolated = numpy.fft.irfft(sf, WAVETABLE_SIZE) + family += [interpolated] + return family + + +# Bank 1: mild and additive. +bank_1 = [] +bank_1 += make_family(sine, [1, 2, 3, 4, 5, 6, 7, 8]) +bank_1 += make_family(sine, [2, 3, 4, 6, 8, 12, 16, 24]) +bank_1 += make_family(quadra, [2, 3, 4, 6, 8, 12, 16, 24]) +bank_1 += make_family(comb, [2, 3, 5, 8, 13, 21, 34, 55]) +bank_1 += make_family(pair, [2, 4, 6, 8, 10, 12, 14, 16]) +bank_1 += make_family(tri_stack, [2, 4, 6, 8, 10, 12, 14, 16]) +bank_1 += make_family(drawbars, [ + '688600000', + '686040000', + '666806000', + '655550600', + '665560060', + '688500888', + '660000888', + '060000046']) +bank_1 += make_family(drawbars, [ + '867000006', + '888876788', + '668744354', + '448644054', + '327645222', + '204675300', + '002478500', + '002050321']) + +# Bank 2: formantish. +bank_2 = [] +bank_2 += make_family(trisaw, [1, 1.5, 2, 3, 4, 4.5, 5, 8]) +bank_2 += make_family(sawtri, [1, 1.5, 2, 3, 4, 4.5, 5, 8]) +bank_2 += make_family(burst, [0.5, 0.4, 1/3.0, 0.25, 0.2, 0.125, 1/16.0, 1/32.0]) +bank_2 += make_family(bandpass_formant, [2.0, 3.0, 4.0, 6.0, 8.0, 9.0, 10.0, 16.0]) +bank_2 += make_family(formant_f, xrange(8)) +bank_2 += make_family(digi_formant_f, xrange(8)) +bank_2 += make_family(pulse, [0.5, 0.4, 1/3.0, 0.25, 0.2, 0.125, 1/16.0, 1/32.0]) +bank_2 += make_family(sine_power, xrange(8)) + +# Bank 3: shruthi/ambika/braids. +bank_3 = [] +bank_3 += make_braids_family([0, 2, 4, 6, 8, 10, 12, 14]) # Male +bank_3 += make_braids_family([32, 34, 36, 38, 40, 42, 44, 46]) # Choir +# bank_3 += make_braids_family([64, 66, 68, 70, 72, 74, 76, 62]) # Tampura +bank_3 += make_braids_family([176, 189, 191, 193, 195, 197, 199, 201]) # Digi +bank_3 += make_braids_family([203, 204, 205, 206, 207, 208, 209, 211]) # Drone +bank_3 += make_braids_family([220, 222, 224, 226, 228, 230, 232, 234]) # Metal +bank_3 += make_braids_family([236, 238, 240, 242, 244, 246, 248, 250]) # Fant +bank_3 += make_braids_family([172, 173, 174, 175, 176, 177, 178, 179], False) +bank_3 += make_braids_family([180, 181, 182, 183, 184, 185, 186, 187], False) + +all_waves = bank_1 + bank_2 + bank_3 + +# New wavetable code uses integrated wavetables +# Reference: +# "Higher-order integrated Wavetable Synthesis", Franck & Valimaki, DAFX-12. +# +# Here we use K = 1 (first order), N = 1 (linear interpolation). +data = [] +for wave in all_waves: + n = len(wave) + x = numpy.array(list(wave) * 2 + wave[0] + wave[1] + wave[2] + wave[3]) + x -= x.mean() + x /= numpy.abs(x).max() + + x = numpy.cumsum(x) + x -= x.mean() + x = list(numpy.round(x * (4 * 32768.0 / WAVETABLE_SIZE)).astype(int)) + data += list(x[-n-4:]) + +wavetables.append(('integrated_waves', data)) diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/settings.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/settings.cc new file mode 100644 index 00000000..28a855d1 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/settings.cc @@ -0,0 +1,94 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Settings storage. + +#include "plaits/settings.h" + +#include + +#include "stmlib/system/storage.h" + +namespace plaits { + +using namespace std; + +bool Settings::Init() { + ChannelCalibrationData* c = persistent_data_.channel_calibration_data; + c[CV_ADC_CHANNEL_MODEL].offset = 0.025f; + c[CV_ADC_CHANNEL_MODEL].scale = -1.03f; + c[CV_ADC_CHANNEL_MODEL].normalization_detection_threshold = 0; + + c[CV_ADC_CHANNEL_V_OCT].offset = 25.71; + c[CV_ADC_CHANNEL_V_OCT].scale = -60.0f; + c[CV_ADC_CHANNEL_V_OCT].normalization_detection_threshold = 0; + + c[CV_ADC_CHANNEL_FM].offset = 0.0f; + c[CV_ADC_CHANNEL_FM].scale = -60.0f; + c[CV_ADC_CHANNEL_FM].normalization_detection_threshold = -2945; + + c[CV_ADC_CHANNEL_HARMONICS].offset = 0.0f; + c[CV_ADC_CHANNEL_HARMONICS].scale = -1.0f; + c[CV_ADC_CHANNEL_HARMONICS].normalization_detection_threshold = 0; + + c[CV_ADC_CHANNEL_TIMBRE].offset = 0.0f; + c[CV_ADC_CHANNEL_TIMBRE].scale = -1.6f; + c[CV_ADC_CHANNEL_TIMBRE].normalization_detection_threshold = -2945; + + c[CV_ADC_CHANNEL_MORPH].offset = 0.0f; + c[CV_ADC_CHANNEL_MORPH].scale = -1.6f; + c[CV_ADC_CHANNEL_MORPH].normalization_detection_threshold = -2945; + + c[CV_ADC_CHANNEL_TRIGGER].offset = 0.4f; + c[CV_ADC_CHANNEL_TRIGGER].scale = -0.6f; + c[CV_ADC_CHANNEL_TRIGGER].normalization_detection_threshold = 13663; + + c[CV_ADC_CHANNEL_LEVEL].offset = 0.49f; + c[CV_ADC_CHANNEL_LEVEL].scale = -0.6f; + c[CV_ADC_CHANNEL_LEVEL].normalization_detection_threshold = 21403; + + state_.engine = 0; + state_.lpg_colour = 0; + state_.decay = 128; + state_.octave = 255; + state_.color_blind = 0; + + bool success = chunk_storage_.Init(&persistent_data_, &state_); + + CONSTRAIN(state_.engine, 0, 15); + + return success; +} + +void Settings::SavePersistentData() { + chunk_storage_.SavePersistentData(); +} + +void Settings::SaveState() { + chunk_storage_.SaveState(); +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/settings.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/settings.h new file mode 100644 index 00000000..98c57d58 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/settings.h @@ -0,0 +1,105 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Settings storage. + +#ifndef PLAITS_SETTINGS_H_ +#define PLAITS_SETTINGS_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/system/storage.h" + +#include "plaits/drivers/cv_adc.h" + +namespace plaits { + +struct ChannelCalibrationData { + float offset; + float scale; + int16_t normalization_detection_threshold; + inline float Transform(float x) const { + return x * scale + offset; + } +}; + +struct PersistentData { + ChannelCalibrationData channel_calibration_data[CV_ADC_CHANNEL_LAST]; + uint8_t padding[16]; + enum { tag = 0x494C4143 }; // CALI +}; + +struct State { + uint8_t engine; + uint8_t lpg_colour; + uint8_t decay; + uint8_t octave; + uint8_t color_blind; + uint8_t padding[3]; + enum { tag = 0x54415453 }; // STAT +}; + +class Settings { + public: + Settings() { } + ~Settings() { } + + bool Init(); + + void SavePersistentData(); + void SaveState(); + + inline const ChannelCalibrationData& calibration_data(int channel) const { + return persistent_data_.channel_calibration_data[channel]; + } + + inline ChannelCalibrationData* mutable_calibration_data(int channel) { + return &persistent_data_.channel_calibration_data[channel]; + } + + inline const State& state() const { + return state_; + } + + inline State* mutable_state() { + return &state_; + } + + private: + PersistentData persistent_data_; + State state_; + + stmlib::ChunkStorage< + 0x08004000, + 0x08008000, + PersistentData, + State> chunk_storage_; + + DISALLOW_COPY_AND_ASSIGN(Settings); +}; + +} // namespace plaits + +#endif // PLAITS_SETTINGS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/test/makefile b/plugins/community/repos/AudibleInstruments/eurorack/plaits/test/makefile new file mode 100644 index 00000000..fc6c05e1 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/test/makefile @@ -0,0 +1,70 @@ +PACKAGES = plaits/test stmlib/utils plaits plaits/dsp plaits/dsp/engine stmlib/dsp plaits/dsp/speech plaits/dsp/physical_modelling plaits/dsp/olddrums + +VPATH = $(PACKAGES) + +TARGET = plaits_test +BUILD_ROOT = build/ +BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ +CC_FILES = additive_engine.cc \ + bass_drum_engine.cc \ + chord_engine.cc \ + fm_engine.cc \ + grain_engine.cc \ + hi_hat_engine.cc \ + lpc_speech_synth.cc \ + lpc_speech_synth_controller.cc \ + lpc_speech_synth_phonemes.cc \ + lpc_speech_synth_words.cc \ + modal_engine.cc \ + modal_voice.cc \ + naive_speech_synth.cc \ + noise_engine.cc \ + particle_engine.cc \ + plaits_test.cc \ + random.cc \ + resonator.cc \ + resources.cc \ + sam_speech_synth.cc \ + snare_drum_engine.cc \ + speech_engine.cc \ + string.cc \ + string_engine.cc \ + string_voice.cc \ + swarm_engine.cc \ + units.cc \ + virtual_analog_engine.cc \ + voice.cc \ + waveshaping_engine.cc \ + wavetable_engine.cc +OBJ_FILES = $(CC_FILES:.cc=.o) +OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) +DEPS = $(OBJS:.o=.d) +DEP_FILE = $(BUILD_DIR)depends.mk + +all: plaits_test + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +$(BUILD_DIR)%.o: %.cc + g++ -c -DTEST -g -Wall -Werror -msse2 -Wno-unused-variable -Wno-unused-local-typedef -O2 -I. $< -o $@ + +$(BUILD_DIR)%.d: %.cc + g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) + +plaits_test: $(OBJS) + g++ -g -o $(TARGET) $(OBJS) -Wl,-no_pie -lm -lprofiler -L/opt/local/lib + +depends: $(DEPS) + cat $(DEPS) > $(DEP_FILE) + +$(DEP_FILE): $(BUILD_DIR) $(DEPS) + cat $(DEPS) > $(DEP_FILE) + +profile: plaits_test + env CPUPROFILE_FREQUENCY=1000 CPUPROFILE=$(BUILD_DIR)/plaits.prof ./plaits_test && pprof --pdf ./plaits_test $(BUILD_DIR)/plaits.prof > profile.pdf && open profile.pdf + +clean: + rm $(BUILD_DIR)*.* + +include $(DEP_FILE) diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/test/plaits_test.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/test/plaits_test.cc new file mode 100644 index 00000000..60bcd3ca --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/test/plaits_test.cc @@ -0,0 +1,1056 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.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 +#include +#include +#include +#include +#include + +#include "plaits/dsp/dsp.h" + +#include "plaits/dsp/engine/additive_engine.h" +#include "plaits/dsp/engine/bass_drum_engine.h" +#include "plaits/dsp/engine/chord_engine.h" +#include "plaits/dsp/engine/fm_engine.h" +#include "plaits/dsp/engine/grain_engine.h" +#include "plaits/dsp/engine/hi_hat_engine.h" +#include "plaits/dsp/engine/modal_engine.h" +#include "plaits/dsp/engine/string_engine.h" +#include "plaits/dsp/engine/noise_engine.h" +#include "plaits/dsp/engine/particle_engine.h" +#include "plaits/dsp/engine/snare_drum_engine.h" +#include "plaits/dsp/engine/speech_engine.h" +#include "plaits/dsp/engine/swarm_engine.h" +#include "plaits/dsp/engine/virtual_analog_engine.h" +#include "plaits/dsp/engine/waveshaping_engine.h" +#include "plaits/dsp/engine/wavetable_engine.h" + +#include "plaits/dsp/fx/sample_rate_reducer.h" + +#include "plaits/dsp/oscillator/formant_oscillator.h" +#include "plaits/dsp/oscillator/grainlet_oscillator.h" +#include "plaits/dsp/oscillator/harmonic_oscillator.h" +#include "plaits/dsp/oscillator/oscillator.h" +#include "plaits/dsp/oscillator/string_synth_oscillator.h" +#include "plaits/dsp/oscillator/variable_saw_oscillator.h" +#include "plaits/dsp/oscillator/variable_shape_oscillator.h" +#include "plaits/dsp/oscillator/vosim_oscillator.h" +#include "plaits/dsp/oscillator/z_oscillator.h" + +#include "plaits/dsp/voice.h" + +#include "stmlib/test/wav_writer.h" + +using namespace std; +using namespace stmlib; +using namespace plaits; + +const size_t kAudioBlockSize = 24; + +char ram_block[16 * 1024]; + +void TestOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_simple_oscillator.wav"); + + Oscillator osc; + osc.Init(); + + float f = 112.0f / 48000.0f; + + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + osc.Render(f, wav_writer.triangle(), out, kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestVariableShapeOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_slave_oscillator.wav"); + + VariableShapeOscillator osc; + osc.Init(); + + float master_f = 110.0f / 48000.0f; + float f = 410.0f / 48000.0f; + + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + osc.Render( + master_f, + master_f * (1.0f + 4.0f * wav_writer.triangle()), + 0.5f, + 0.0f, + out, + kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestVariableSawOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_variable_saw.wav"); + + VariableSawOscillator osc; + osc.Init(); + + float master_f = 110.0f / 48000.0f; + float f = 410.0f / 48000.0f; + + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + osc.Render( + //master_f * (1.0f + 4.0f * wav_writer.triangle()), + 62.50f / 48000.0f, + wav_writer.triangle(), // pw + 1.0f, // 0 = notch , 1 = slope + out, + kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestStringSynthOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_string_synth_oscillator.wav"); + + StringSynthOscillator osc; + osc.Init(); + + float amplitudes[7] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; + float f = 127.5f / kSampleRate; + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + fill(&out[0], &out[kAudioBlockSize], 0.0f); + + osc.Render(f * (1.0f + 0.0f * wav_writer.triangle(3)), amplitudes, 1.0f, out, kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestHarmonicOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_harmonic_oscillator.wav"); + + HarmonicOscillator<16> osc; + osc.Init(); + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + fill(&out[0], &out[kAudioBlockSize], 0.0f); + float f0 = 10.0f / kSampleRate; + float amplitudes[16]; + fill(&litudes[0], &litudes[16], 0.0f); + amplitudes[15] = 1.0f; + osc.Render<8>(f0, amplitudes, out, kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestFormantOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_formant_oscillator.wav"); + + FormantOscillator osc; + osc.Init(); + + float fm = 239.7f / 48000.0f; + float fs = 105.0f / 48000.0f; + + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float modulation = 1.0f + 4.0f * wav_writer.triangle(); + osc.Render(fm, fs * modulation, 0.75f, out, kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestVosimOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_vosim_oscillator.wav"); + + VOSIMOscillator osc; + osc.Init(); + + float f0 = 105.0f / 48000.0f; + float f1 = 1390.7f / 48000.0f; + float f2 = 817.2f / 48000.0f; + + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float modulation = wav_writer.triangle(); + osc.Render(f0, f1 * (1.0f + modulation), f2, modulation, out, kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestZOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_z_oscillator.wav"); + + ZOscillator osc; + osc.Init(); + + float f0 = 80.0f / 48000.0f; + float f1 = 250.0f / 48000.0f; + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float modulation = wav_writer.triangle(7); + float modulation_2 = wav_writer.triangle(11); + osc.Render(f0, f1 * (1.0f + modulation * 8.0f), modulation_2, 0.5f, out, kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestGrainletOscillator() { + WavWriter wav_writer(1, kSampleRate, 20); + wav_writer.Open("plaits_grainlet_oscillator.wav"); + + GrainletOscillator osc; + osc.Init(); + + float f0 = 80.0f / 48000.0f; + float f1 = 2000.0f / 48000.0f; + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float modulation = wav_writer.triangle(7) * 0.0f; + float modulation_2 = wav_writer.triangle(11) * 0.0f; + float modulation_3 = wav_writer.triangle(13); + osc.Render(f0, f1 * (1.0f + modulation * 8.0f), modulation_3, 1.0f, out, kAudioBlockSize); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void TestAdditiveEngine() { + WavWriter wav_writer(2, kSampleRate, 60); + wav_writer.Open("plaits_additive_engine.wav"); + + AdditiveEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + p.note = 36.0f; + + for (size_t i = 0; i < kSampleRate * 60; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.morph = wav_writer.triangle(13) * 0.0f + 0.7f; + p.timbre = wav_writer.triangle(7) * 1.0f; + p.harmonics = wav_writer.triangle(5) * 0.5f + 0.5f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestChordEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_chord_engine.wav"); + + BufferAllocator allocator(ram_block, 16384); + ChordEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + p.note = 60.0f; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.harmonics = wav_writer.triangle(17) * 1.0f; + p.morph = wav_writer.triangle(11) * 0.2f + 0.4f; + p.timbre = wav_writer.triangle(13) * 1.0f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestFMEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_fm_engine.wav"); + + FMEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + p.note = 48.0f; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.timbre = wav_writer.triangle(11); + p.harmonics = /*wav_writer.triangle(14)*/ 0.75f; + p.morph = /*1.0f - wav_writer.triangle(19)*/ 0.0f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestGrainEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_grain_engine.wav"); + + GrainEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + p.note = 110.0f; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.note = /*84.0f + Random::GetFloat() * 0.1f + wav_writer.triangle(2) * 12.0f*/ 36.0f; + p.timbre = wav_writer.triangle(7); + p.morph = wav_writer.triangle(11); + p.harmonics = wav_writer.triangle(19); + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestModalEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_modal_engine.wav"); + + ModalEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.accent = 0.0f; + p.note = 36.0f; + bool flip_flop = false; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.trigger = TRIGGER_LOW; + if (i % (kAudioBlockSize * 2000) == 0) { + flip_flop = !flip_flop; + p.note = flip_flop ? 48.0f : 55.0f; + p.trigger = TRIGGER_RISING_EDGE; + p.accent = 1.0f; + } + p.timbre = wav_writer.triangle(17); + p.harmonics = 0.25f; + p.morph = wav_writer.triangle(7); + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestNoiseEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_noise_engine.wav"); + + BufferAllocator allocator(ram_block, 16384); + NoiseEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.note = 84.0f; + p.timbre = 0.0f; + p.morph = 0.5f; + p.harmonics = 0.0f * wav_writer.triangle(3); + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestParticleEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_particle_engine.wav"); + + BufferAllocator allocator(ram_block, 16384); + ParticleEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.note = 96.0f; + p.trigger = TRIGGER_LOW; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.timbre = /*wav_writer.triangle(17)*/0.5f; + p.harmonics = /*0.5f*/ 0.7f; + p.morph = /*0.0f*/0.7f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestSpeechEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_speech_engine.wav"); + + BufferAllocator allocator(ram_block, 16384); + SpeechEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_UNPATCHED; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.timbre = wav_writer.triangle(11) * 0.0f + 0.5f; + p.harmonics = wav_writer.triangle(17) * 0.45f; + p.note = 48.0f + wav_writer.triangle(1) * 0.0f; + p.morph = wav_writer.triangle(7); + // p.trigger = TRIGGER_LOW; + // if (i % (kAudioBlockSize * 3000) == 0) { + // p.trigger = TRIGGER_RISING_EDGE; + // } + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void GenerateStringTuningData() { + for (int pass = 0; pass < 21; ++pass) { + WavWriter wav_writer(1, kSampleRate, 4); + + char file_name[80]; + sprintf(file_name, "string_%02d.wav", pass); + wav_writer.Open(file_name); + + BufferAllocator allocator(ram_block, 16384); + StringEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.accent = 0.5f; + p.note = 72.0f; + for (size_t i = 0; i < kSampleRate * 4; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.trigger = i == 0 ? TRIGGER_RISING_EDGE : TRIGGER_LOW; + p.timbre = 0.8f; + p.morph = 0.8f; + p.harmonics = float(pass) / 20.0f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, kAudioBlockSize); + } + } + + WavWriter wav_writer(1, kSampleRate, 40); + wav_writer.Open("string_sweep.wav"); + + BufferAllocator allocator(ram_block, 16384); + StringEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.accent = 0.2f; + p.note = 36.0f; + p.timbre = 0.8f; + p.morph = 0.8f; + p.trigger = TRIGGER_UNPATCHED; + for (size_t i = 0; i < kSampleRate * 40; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.harmonics = wav_writer.triangle(7); + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, kAudioBlockSize); + } +} + +void GenerateModalTuningData() { + for (int pass = 0; pass < 21; ++pass) { + WavWriter wav_writer(1, kSampleRate, 4); + + char file_name[80]; + sprintf(file_name, "modal_%02d.wav", pass); + wav_writer.Open(file_name); + + BufferAllocator allocator(ram_block, 16384); + ModalEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.accent = 0.5f; + p.note = 48.0f; + for (size_t i = 0; i < kSampleRate * 4; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.trigger = i == (kAudioBlockSize * 1000) + ? TRIGGER_RISING_EDGE : TRIGGER_LOW; + p.timbre = 0.5f; + p.morph = 0.8f; + p.harmonics = float(pass) / 20.0f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, kAudioBlockSize); + } + } +} + +void TestStringEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_string_engine.wav"); + + BufferAllocator allocator(ram_block, 16384); + StringEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.accent = 0.0f; + p.note = 36.0f; + int note = 0; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.trigger = TRIGGER_LOW; + if (i % (kAudioBlockSize * 2000) == 0) { + note = (note + 1) % 3; + float notes[3] = { 48.0f, 55.0f, 36.0f }; + p.note = notes[note]; + p.trigger = TRIGGER_RISING_EDGE; + p.accent = 0.0f; + } + p.timbre = 0.7f; + p.harmonics = 0.9f; + p.morph = 0.7f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestSwarmEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_swarm_engine.wav"); + + BufferAllocator allocator(ram_block, 16384); + SwarmEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_UNPATCHED; + + Limiter out_limiter; + Limiter aux_limiter; + + out_limiter.Init(); + aux_limiter.Init(); + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.timbre = wav_writer.triangle(33) * 0.0f + 0.5f; + p.harmonics = 0.3f; + p.morph = wav_writer.triangle(17); + p.note = 48.0f; + p.trigger = TRIGGER_LOW; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + + out_limiter.Process(2.0f, out, kAudioBlockSize); + aux_limiter.Process(0.8f, aux, kAudioBlockSize); + + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestVirtualAnalogEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_virtual_analog_engine.wav"); + + BufferAllocator allocator(ram_block, 16384); + VirtualAnalogEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + p.note = 48.0f; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + // p.timbre = wav_writer.triangle(7); + // p.harmonics = wav_writer.triangle(11); + // p.morph = 1.0f - wav_writer.triangle(5); + p.timbre = wav_writer.triangle(3) * 0.0f + 0.0f; + p.harmonics = wav_writer.triangle(19); + p.morph = wav_writer.triangle(19) * 0.0f + 0.3f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestWaveshapingEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_waveshaping_engine.wav"); + + WaveshapingEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + p.note = 48.0f; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.timbre = 0.1f + 0.9f * wav_writer.triangle(7); + p.harmonics = 0.0f + 1.0f * wav_writer.triangle(11); + p.morph = 0.0f + 1.0f * wav_writer.triangle(5); + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestWavetableEngine() { + WavWriter wav_writer(2, kSampleRate, 5); + wav_writer.Open("plaits_wavetable_engine.wav"); + + WavetableEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + p.note = 24.0f; + + for (size_t i = 0; i < kSampleRate * 5; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + float phi = wav_writer.triangle(1); + p.timbre = phi > 0.9f ? 0.0f : 0.5f + 0.5f * sinf(phi * 24.3f); + p.harmonics = wav_writer.triangle(11) * 0 + 0.0f; + p.morph = wav_writer.triangle(5) * 0; + + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void EnumerateWavetables() { + WavWriter wav_writer(1, kSampleRate, 64); + wav_writer.Open("plaits_wavetable_enumeration.wav"); + + WavetableEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.trigger = TRIGGER_LOW; + + int bank = 0; + int division = 4; + bool swap = true; + + for (int d = 0; d < division; ++d) { + for (int column = 0; column < 8; ++column) { + for (int row = 0; row < 8; ++row) { + for (size_t i = 0; i < kSampleRate/ division; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.note = 36.0f; + p.timbre = (swap ? column : row) / 7.0f; + p.harmonics = bank / 2.0f; + p.morph = (swap ? row : column) / 7.0f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, kAudioBlockSize); + } + } + } + } +} + +void TestSampleRateReducer() { + WavWriter wav_writer(2, kSampleRate, 20); + wav_writer.Open("plaits_sample_rate_reducer.wav"); + + SampleRateReducer src; + SineOscillator osc; + osc.Init(); + src.Init(); + + float f0 = 100.0f / 48000.0f; + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float in[kAudioBlockSize]; + float fx[kAudioBlockSize]; + fill(&in[0], &in[kAudioBlockSize], 0.0f); + float f = 110 / kSampleRate; + float a = 1.0f; + osc.Render(f, a, in, kAudioBlockSize); + copy(&in[0], &in[kAudioBlockSize], &fx[0]); + src.Process(0.1666f + 0.8333f * wav_writer.triangle(7), fx, kAudioBlockSize); + wav_writer.Write(in, fx, kAudioBlockSize); + } +} + +void TestBassDrumEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_bass_drum_engine.wav"); + + BassDrumEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.accent = 0.0f; + p.note = 33.4f; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.trigger = TRIGGER_LOW; + if (i % (kAudioBlockSize * 1000) == 0) { + p.trigger = TRIGGER_RISING_EDGE; + p.accent = 1.0f; + } + p.timbre = wav_writer.triangle(5) * 1.0f + 0.0f; + p.harmonics = wav_writer.triangle(7) * 1.0f + 0.0f; + p.morph = wav_writer.triangle(17) * 1.0f + 0.0f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestSnareDrumEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_snare_drum_engine.wav"); + + SnareDrumEngine e; + e.Init(NULL); + e.Reset(); + + EngineParameters p; + p.accent = 0.0f; + p.note = 51.0f; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.trigger = TRIGGER_LOW; + if (i % (kAudioBlockSize * 1000) == 0) { + p.trigger = TRIGGER_RISING_EDGE; + p.accent = 1.0f; + } + p.timbre = wav_writer.triangle(5); + p.harmonics = wav_writer.triangle(7); + p.morph = wav_writer.triangle(17); + // p.timbre = 0.5f; + // p.harmonics = 0.5f; + // p.morph = 0.0f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestHiHatEngine() { + WavWriter wav_writer(2, kSampleRate, 80); + wav_writer.Open("plaits_hi_hat_engine.wav"); + + BufferAllocator allocator(ram_block, 16384); + HiHatEngine e; + e.Init(&allocator); + e.Reset(); + + EngineParameters p; + p.accent = 0.0f; + + for (size_t i = 0; i < kSampleRate * 80; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + p.trigger = TRIGGER_LOW; + if (i % (kAudioBlockSize * 250) == 0) { + p.trigger = TRIGGER_RISING_EDGE; + p.accent = 1.0f; + } + p.note = 48.0f + wav_writer.triangle(11) * 36.0f; + p.timbre = wav_writer.triangle(17); + p.harmonics = wav_writer.triangle(7); + p.morph = /*wav_writer.triangle(3)*/ 0.5f; + bool already_enveloped; + e.Render(p, out, aux, kAudioBlockSize, &already_enveloped); + wav_writer.Write(out, aux, kAudioBlockSize); + } +} + +void TestVoice() { + WavWriter wav_writer(2, kSampleRate, 200); + wav_writer.Open("plaits_voice.wav"); + + BufferAllocator allocator(ram_block, 16384); + Voice v; + + v.Init(&allocator); + + Patch patch; + Modulations modulations; + + patch.engine = 1; + patch.note = 48.0f; + patch.harmonics = 0.3f; + patch.timbre = 0.7f; + patch.morph = 0.7f; + patch.frequency_modulation_amount = 0.0f; + patch.timbre_modulation_amount = 0.0f; + patch.morph_modulation_amount = 0.0f; + patch.decay = 0.1f; + patch.lpg_colour = 0.0f; + + modulations.note = 0.0f; + modulations.engine = 0.0f; + modulations.frequency = 0.0f; + modulations.note = 0.0f; + modulations.harmonics = 0.0f; + modulations.morph = 0.0; + modulations.level = 1.0f; + modulations.trigger = 0.0f; + modulations.frequency_patched = false; + modulations.timbre_patched = false; + modulations.morph_patched = false; + modulations.trigger_patched = true; + modulations.level_patched = false; + + for (size_t i = 0; i < kSampleRate * 200; i += kAudioBlockSize) { + modulations.trigger = (i % (kAudioBlockSize * 500) <= kAudioBlockSize * 5) ? 1.0f : 0.0f; + // modulations.level = 1.0f; + Voice::Frame frames[kAudioBlockSize]; + v.Render(patch, modulations, frames, kAudioBlockSize); + wav_writer.WriteFrames(&frames[0].out, kAudioBlockSize); + } +} + +void TestFMGlitch() { + WavWriter wav_writer(2, kSampleRate, 200); + wav_writer.Open("plaits_fm_glitch.wav"); + + BufferAllocator allocator(ram_block, 16384); + Voice v; + + v.Init(&allocator); + + Patch patch; + Modulations modulations; + + patch.engine = 4; + patch.note = 48.0f; + patch.harmonics = 0.5f; + patch.timbre = 0.5f; + patch.morph = 0.5f; + patch.frequency_modulation_amount = 0.0f; + patch.timbre_modulation_amount = 0.0f; + patch.morph_modulation_amount = 0.0f; + patch.decay = 0.1f; + patch.lpg_colour = 0.0f; + + modulations.note = 0.0f; + modulations.engine = 0.0f; + modulations.frequency = 0.0f; + modulations.note = 0.0f; + modulations.harmonics = 0.0f; + modulations.morph = 0.0; + modulations.level = 1.0f; + modulations.trigger = 0.0f; + modulations.frequency_patched = true; + modulations.timbre_patched = false; + modulations.morph_patched = false; + modulations.trigger_patched = false; + modulations.level_patched = false; + + for (size_t i = 0; i < kSampleRate * 200; i += kAudioBlockSize) { + Voice::Frame frames[kAudioBlockSize]; + v.Render(patch, modulations, frames, kAudioBlockSize); + wav_writer.WriteFrames(&frames[0].out, kAudioBlockSize); + modulations.frequency = frames[0].out; + patch.frequency_modulation_amount = wav_writer.triangle(11) * 1.0f; + } +} + +void TestLPGAttackDecay() { + WavWriter wav_writer(2, kSampleRate, 20); + wav_writer.Open("plaits_lpg_attack_decay.wav"); + + BufferAllocator allocator(ram_block, 16384); + Voice v; + + v.Init(&allocator); + + Patch patch; + Modulations modulations; + + patch.engine = 1; + patch.note = 48.0f; + patch.harmonics = 0.5f; + patch.timbre = 0.0f; + patch.morph = 0.0f; + patch.frequency_modulation_amount = 0.8f; + patch.timbre_modulation_amount = 0.0f; + patch.morph_modulation_amount = 0.0f; + patch.decay = 0.1f; + patch.lpg_colour = 0.5f; + + modulations.note = 0.0f; + modulations.engine = 0.0f; + modulations.frequency = 0.0f; + modulations.note = 0.0f; + modulations.harmonics = 0.0f; + modulations.morph = 0.0; + modulations.level = 1.0f; + modulations.trigger = 0.0f; + modulations.frequency_patched = false; + modulations.timbre_patched = false; + modulations.morph_patched = false; + modulations.trigger_patched = true; + modulations.level_patched = false; + + for (size_t i = 0; i < kSampleRate * 20; i += kAudioBlockSize) { + float out[kAudioBlockSize]; + float aux[kAudioBlockSize]; + + modulations.trigger = 0.0f; + if (i % (kAudioBlockSize * 1000) == 0) { + patch.note += 1.0f; + modulations.trigger = 1.0f; + } + modulations.level = (i % (1000 * kAudioBlockSize)) < 100 * kAudioBlockSize ? 1.0f : 0.0f; + + Voice::Frame frames[kAudioBlockSize]; + v.Render(patch, modulations, frames, kAudioBlockSize); + wav_writer.WriteFrames(&frames[0].out, kAudioBlockSize); + } +} + +void TestLimiterGlitch() { + WavWriter wav_writer(2, kSampleRate, 50); + wav_writer.Open("plaits_limiter_glitch.wav"); + + BufferAllocator allocator(ram_block, 16384); + Voice v; + + v.Init(&allocator); + + Patch patch; + Modulations modulations; + + patch.engine = 9; + patch.note = 36.0f; + patch.harmonics = 0.8f; + patch.timbre = 0.6f; + patch.morph = 0.4f; + patch.frequency_modulation_amount = 0.0f; + patch.timbre_modulation_amount = 0.0f; + patch.morph_modulation_amount = 0.0f; + patch.decay = 0.1f; + patch.lpg_colour = 0.0f; + + modulations.note = 0.0f; + modulations.frequency = 0.0f; + modulations.note = 0.0f; + modulations.harmonics = 0.0f; + modulations.morph = 0.0; + modulations.level = 1.0f; + modulations.frequency_patched = false; + modulations.timbre_patched = false; + modulations.morph_patched = false; + modulations.trigger_patched = true; + modulations.level_patched = false; + + for (size_t i = 0; i < kSampleRate * 50; i += kAudioBlockSize) { + Voice::Frame frames[kAudioBlockSize]; + v.Render(patch, modulations, frames, kAudioBlockSize); + wav_writer.WriteFrames(&frames[0].out, kAudioBlockSize); + modulations.trigger = i % (100 * kAudioBlockSize) == 0 ? 1.0f : 0.0f; + modulations.engine = wav_writer.triangle(12) * 0.2f; + patch.frequency_modulation_amount = wav_writer.triangle(3) * 1.0f; + } +} + +int main(void) { + _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); + // TestFormantOscillator(); + // TestGrainletOscillator(); + // TestOscillator(); + // TestVariableShapeOscillator(); + // TestStringSynthOscillator(); + // TestStringSynthOscillator(); + // TestVosimOscillator(); + // TestZOscillator(); + // TestHarmonicOscillator(); + + // TestAdditiveEngine(); + // TestChordEngine(); + TestFMEngine(); + // TestGrainEngine(); + // TestModalEngine(); + // TestStringEngine(); + // TestNoiseEngine(); + // TestParticleEngine(); + // TestSpeechEngine(); + // TestSwarmEngine(); + // TestVirtualAnalogEngine(); + // TestWaveshapingEngine(); + // TestWavetableEngine(); + // TestBassDrumEngine(); + // TestSnareDrumEngine(); + // TestHiHatEngine(); + + // TestVariableSawOscillator(); + + // TestSampleRateReducer(); + // TestVoice(); + // TestFMGlitch(); + // TestLimiterGlitch(); + // EnumerateWavetables(); + + // TestLPGAttackDecay(); +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/ui.cc b/plugins/community/repos/AudibleInstruments/eurorack/plaits/ui.cc new file mode 100644 index 00000000..b6a5924d --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/ui.cc @@ -0,0 +1,542 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// UI and CV processing ("controller" and "view") + +#include "plaits/ui.h" + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/system/system_clock.h" + +namespace plaits { + +using namespace std; +using namespace stmlib; + +static const int32_t kLongPressTime = 2000; + +#define ENABLE_LFO_MODE + +void Ui::Init(Patch* patch, Modulations* modulations, Settings* settings) { + patch_ = patch; + modulations_ = modulations; + settings_ = settings; + + cv_adc_.Init(); + pots_adc_.Init(); + leds_.Init(); + switches_.Init(); + + ui_task_ = 0; + mode_ = UI_MODE_NORMAL; + + LoadState(); + + if (switches_.pressed_immediate(SWITCH_ROW_2)) { + State* state = settings_->mutable_state(); + if (state->color_blind == 1) { + state->color_blind = 0; + } else { + state->color_blind = 1; + } + settings_->SaveState(); + } + + // Bind pots to parameters. + pots_[POTS_ADC_CHANNEL_FREQ_POT].Init( + &transposition_, NULL, 2.0f, -1.0f); + pots_[POTS_ADC_CHANNEL_HARMONICS_POT].Init( + &patch->harmonics, &octave_, 1.0f, 0.0f); + pots_[POTS_ADC_CHANNEL_TIMBRE_POT].Init( + &patch->timbre, &patch->lpg_colour, 1.0f, 0.0f); + pots_[POTS_ADC_CHANNEL_MORPH_POT].Init( + &patch->morph, &patch->decay, 1.0f, 0.0f); + pots_[POTS_ADC_CHANNEL_TIMBRE_ATTENUVERTER].Init( + &patch->timbre_modulation_amount, NULL, 2.0f, -1.0f); + pots_[POTS_ADC_CHANNEL_FM_ATTENUVERTER].Init( + &patch->frequency_modulation_amount, NULL, 2.0f, -1.0f); + pots_[POTS_ADC_CHANNEL_MORPH_ATTENUVERTER].Init( + &patch->morph_modulation_amount, NULL, 2.0f, -1.0f); + + // Keep track of the agreement between the random sequence sent to the + // switch and the value read by the ADC. + normalization_detection_count_ = 0; + normalization_probe_state_ = 0; + normalization_probe_.Init(); + fill( + &normalization_detection_mismatches_[0], + &normalization_detection_mismatches_[5], + 0); + + pwm_counter_ = 0; + fill(&press_time_[0], &press_time_[SWITCH_LAST], 0); + fill(&ignore_release_[0], &ignore_release_[SWITCH_LAST], false); + + active_engine_ = 0; + cv_c1_ = 0.0f; + pitch_lp_ = 0.0f; + pitch_lp_calibration_ = 0.0f; +} + +void Ui::LoadState() { + const State& state = settings_->state(); + patch_->engine = state.engine; + patch_->lpg_colour = static_cast(state.lpg_colour) / 256.0f; + patch_->decay = static_cast(state.decay) / 256.0f; + octave_ = static_cast(state.octave) / 256.0f; +} + +void Ui::SaveState() { + State* state = settings_->mutable_state(); + state->engine = patch_->engine; + state->lpg_colour = static_cast(patch_->lpg_colour * 256.0f); + state->decay = static_cast(patch_->decay * 256.0f); + state->octave = static_cast(octave_ * 256.0f); + settings_->SaveState(); +} + +void Ui::UpdateLEDs() { + leds_.Clear(); + ++pwm_counter_; + + int pwm_counter = pwm_counter_ & 15; + int triangle = (pwm_counter_ >> 4) & 31; + triangle = triangle < 16 ? triangle : 31 - triangle; + + switch (mode_) { + case UI_MODE_NORMAL: + { + LedColor red = settings_->state().color_blind == 1 + ? ((pwm_counter & 7) ? LED_COLOR_OFF : LED_COLOR_YELLOW) + : LED_COLOR_RED; + LedColor green = settings_->state().color_blind == 1 + ? LED_COLOR_YELLOW + : LED_COLOR_GREEN; + leds_.set( + active_engine_ & 7, + active_engine_ & 8 ? red : green); + if (pwm_counter < triangle) { + leds_.mask( + patch_->engine & 7, + patch_->engine & 8 ? red : green); + } + } + break; + + case UI_MODE_DISPLAY_ALTERNATE_PARAMETERS: + { + for (int parameter = 0; parameter < 2; ++parameter) { + float value = parameter == 0 + ? patch_->lpg_colour + : patch_->decay; + value -= 0.001f; + for (int i = 0; i < 4; ++i) { + leds_.set( + parameter * 4 + 3 - i, + value * 64.0f > pwm_counter ? LED_COLOR_YELLOW : LED_COLOR_OFF); + value -= 0.25f; + } + } + } + break; + + case UI_MODE_DISPLAY_OCTAVE: + { +#ifdef ENABLE_LFO_MODE + int octave = static_cast(octave_ * 10.0f); + for (int i = 0; i < 8; ++i) { + LedColor color = LED_COLOR_OFF; + if (octave == 0) { + color = i == (triangle >> 1) ? LED_COLOR_OFF : LED_COLOR_YELLOW; + } else if (octave == 9) { + color = LED_COLOR_YELLOW; + } else { + color = (octave - 1) == i ? LED_COLOR_YELLOW : LED_COLOR_OFF; + } + leds_.set(7 - i, color); + } +#else + int octave = static_cast(octave_ * 9.0f); + for (int i = 0; i < 8; ++i) { + leds_.set( + 7 - i, + octave == i || (octave == 8) ? LED_COLOR_YELLOW : LED_COLOR_OFF); + } +#endif // ENABLE_LFO_MODE + } + break; + + case UI_MODE_CALIBRATION_C1: + if (pwm_counter < triangle) { + leds_.set(0, LED_COLOR_GREEN); + } + break; + + case UI_MODE_CALIBRATION_C3: + if (pwm_counter < triangle) { + leds_.set(0, LED_COLOR_YELLOW); + } + break; + + case UI_MODE_ERROR: + if (pwm_counter < triangle) { + for (int i = 0; i < kNumLEDs; ++i) { + leds_.set(i, LED_COLOR_RED); + } + } + break; + + case UI_MODE_TEST: + int color = (pwm_counter_ >> 10) % 3; + for (int i = 0; i < kNumLEDs; ++i) { + leds_.set( + i, pwm_counter > ((triangle + (i * 2)) & 15) + ? (color == 0 + ? LED_COLOR_GREEN + : (color == 1 ? LED_COLOR_YELLOW : LED_COLOR_RED)) + : LED_COLOR_OFF); + } + break; + } + leds_.Write(); +} + +void Ui::ReadSwitches() { + switches_.Debounce(); + + switch (mode_) { + case UI_MODE_NORMAL: + { + for (int i = 0; i < SWITCH_LAST; ++i) { + if (switches_.just_pressed(Switch(i))) { + press_time_[i] = 0; + ignore_release_[i] = false; + } + if (switches_.pressed(Switch(i))) { + ++press_time_[i]; + } else { + press_time_[i] = 0; + } + } + + if (switches_.just_pressed(Switch(0))) { + pots_[POTS_ADC_CHANNEL_TIMBRE_POT].Lock(); + pots_[POTS_ADC_CHANNEL_MORPH_POT].Lock(); + } + if (switches_.just_pressed(Switch(1))) { + pots_[POTS_ADC_CHANNEL_HARMONICS_POT].Lock(); + } + + if (pots_[POTS_ADC_CHANNEL_MORPH_POT].editing_hidden_parameter() || + pots_[POTS_ADC_CHANNEL_TIMBRE_POT].editing_hidden_parameter()) { + mode_ = UI_MODE_DISPLAY_ALTERNATE_PARAMETERS; + } + + if (pots_[POTS_ADC_CHANNEL_HARMONICS_POT].editing_hidden_parameter()) { + mode_ = UI_MODE_DISPLAY_OCTAVE; + } + + // Long, double press: enter calibration mode. + if (press_time_[0] >= kLongPressTime && + press_time_[1] >= kLongPressTime) { + press_time_[0] = press_time_[1] = 0; + RealignPots(); + StartCalibration(); + } + + // Long press or actually editing any hidden parameter: display value + // of hidden parameters. + if (press_time_[0] >= kLongPressTime && !press_time_[1]) { + press_time_[0] = press_time_[1] = 0; + mode_ = UI_MODE_DISPLAY_ALTERNATE_PARAMETERS; + } + if (press_time_[1] >= kLongPressTime && !press_time_[0]) { + press_time_[0] = press_time_[1] = 0; + mode_ = UI_MODE_DISPLAY_OCTAVE; + } + + if (switches_.released(Switch(0)) && !ignore_release_[0]) { + RealignPots(); + if (patch_->engine >= 8) { + patch_->engine = patch_->engine & 7; + } else { + patch_->engine = (patch_->engine + 1) % 8; + } + SaveState(); + } + + if (switches_.released(Switch(1)) && !ignore_release_[1]) { + RealignPots(); + if (patch_->engine < 8) { + patch_->engine = (patch_->engine & 7) + 8; + } else { + patch_->engine = 8 + ((patch_->engine + 1) % 8); + } + SaveState(); + } + } + break; + + case UI_MODE_DISPLAY_ALTERNATE_PARAMETERS: + case UI_MODE_DISPLAY_OCTAVE: + for (int i = 0; i < SWITCH_LAST; ++i) { + if (switches_.released(Switch(i))) { + pots_[POTS_ADC_CHANNEL_TIMBRE_POT].Unlock(); + pots_[POTS_ADC_CHANNEL_MORPH_POT].Unlock(); + pots_[POTS_ADC_CHANNEL_HARMONICS_POT].Unlock(); + press_time_[i] = 0; + mode_ = UI_MODE_NORMAL; + } + } + break; + + case UI_MODE_CALIBRATION_C1: + for (int i = 0; i < SWITCH_LAST; ++i) { + if (switches_.just_pressed(Switch(i))) { + press_time_[i] = 0; + ignore_release_[i] = true; + CalibrateC1(); + break; + } + } + break; + + case UI_MODE_CALIBRATION_C3: + for (int i = 0; i < SWITCH_LAST; ++i) { + if (switches_.just_pressed(Switch(i))) { + press_time_[i] = 0; + ignore_release_[i] = true; + CalibrateC3(); + break; + } + } + break; + + case UI_MODE_TEST: + case UI_MODE_ERROR: + for (int i = 0; i < SWITCH_LAST; ++i) { + if (switches_.just_pressed(Switch(i))) { + press_time_[i] = 0; + ignore_release_[i] = true; + mode_ = UI_MODE_NORMAL; + } + } + break; + } +} + +void Ui::ProcessPotsHiddenParameters() { + for (int i = 0; i < POTS_ADC_CHANNEL_LAST; ++i) { + pots_[i].ProcessUIRate(); + } +} + +/* static */ +const CvAdcChannel Ui::normalized_channels_[] = { + CV_ADC_CHANNEL_FM, + CV_ADC_CHANNEL_TIMBRE, + CV_ADC_CHANNEL_MORPH, + CV_ADC_CHANNEL_TRIGGER, + CV_ADC_CHANNEL_LEVEL, +}; + +void Ui::DetectNormalization() { + bool expected_value = normalization_probe_state_ >> 31; + for (int i = 0; i < kNumNormalizedChannels; ++i) { + CvAdcChannel channel = normalized_channels_[i]; + bool read_value = cv_adc_.value(channel) < \ + settings_->calibration_data(channel).normalization_detection_threshold; + if (expected_value != read_value) { + ++normalization_detection_mismatches_[i]; + } + } + + ++normalization_detection_count_; + if (normalization_detection_count_ == kProbeSequenceDuration) { + normalization_detection_count_ = 0; + bool* destination = &modulations_->frequency_patched; + for (int i = 0; i < kNumNormalizedChannels; ++i) { + destination[i] = normalization_detection_mismatches_[i] >= 2; + normalization_detection_mismatches_[i] = 0; + } + } + + normalization_probe_state_ = 1103515245 * normalization_probe_state_ + 12345; + normalization_probe_.Write(normalization_probe_state_ >> 31); +} + +void Ui::Poll() { + for (int i = 0; i < POTS_ADC_CHANNEL_LAST; ++i) { + pots_[i].ProcessControlRate(pots_adc_.float_value(PotsAdcChannel(i))); + } + + float* destination = &modulations_->engine; + for (int i = 0; i < CV_ADC_CHANNEL_LAST; ++i) { + destination[i] = settings_->calibration_data(i).Transform( + cv_adc_.float_value(CvAdcChannel(i))); + } + + ONE_POLE(pitch_lp_, modulations_->note, 0.7f); + ONE_POLE( + pitch_lp_calibration_, cv_adc_.float_value(CV_ADC_CHANNEL_V_OCT), 0.1f); + modulations_->note = pitch_lp_; + + ui_task_ = (ui_task_ + 1) % 4; + switch (ui_task_) { + case 0: + UpdateLEDs(); + break; + + case 1: + ReadSwitches(); + break; + + case 2: + ProcessPotsHiddenParameters(); + break; + + case 3: + DetectNormalization(); + break; + } + + cv_adc_.Convert(); + pots_adc_.Convert(); + +#ifdef ENABLE_LFO_MODE + int octave = static_cast(octave_ * 10.0f); + if (octave == 0) { + patch_->note = -48.37f + transposition_ * 60.0f; + } else if (octave == 9) { + patch_->note = 60.0f + transposition_ * 48.0f; + } else { + const float fine = transposition_ * 7.0f; + patch_->note = fine + static_cast(octave) * 12.0f; + } +#else + int octave = static_cast(octave_ * 9.0f); + if (octave < 8) { + const float fine = transposition_ * 7.0f; + patch_->note = fine + static_cast(octave) * 12.0f + 12.0f; + } else { + patch_->note = 60.0f + transposition_ * 48.0f; + } +#endif // ENABLE_LFO_MODE +} + +void Ui::StartCalibration() { + mode_ = UI_MODE_CALIBRATION_C1; + normalization_probe_.Disable(); +} + +void Ui::CalibrateC1() { + // Acquire offsets for all channels. + for (int i = 0; i < CV_ADC_CHANNEL_LAST; ++i) { + if (i != CV_ADC_CHANNEL_V_OCT) { + ChannelCalibrationData* c = settings_->mutable_calibration_data(i); + c->offset = -cv_adc_.float_value(CvAdcChannel(i)) * c->scale; + } + } + cv_c1_ = pitch_lp_calibration_; + mode_ = UI_MODE_CALIBRATION_C3; +} + +void Ui::CalibrateC3() { + // (-33/100.0*1 + -33/140.0 * -10.0) / 3.3 * 2.0 - 1 = 0.228 + float c1 = cv_c1_; + + // (-33/100.0*1 + -33/140.0 * -10.0) / 3.3 * 2.0 - 1 = -0.171 + float c3 = pitch_lp_calibration_; + float delta = c3 - c1; + + if (delta > -0.6f && delta < -0.2f) { + ChannelCalibrationData* c = settings_->mutable_calibration_data( + CV_ADC_CHANNEL_V_OCT); + c->scale = 24.0f / delta; + c->offset = 12.0f - c->scale * c1; + settings_->SavePersistentData(); + mode_ = UI_MODE_NORMAL; + } else { + mode_ = UI_MODE_ERROR; + } + normalization_probe_.Init(); +} + +uint8_t Ui::HandleFactoryTestingRequest(uint8_t command) { + uint8_t argument = command & 0x1f; + command = command >> 5; + uint8_t reply = 0; + switch (command) { + case FACTORY_TESTING_READ_POT: + reply = pots_adc_.value(PotsAdcChannel(argument)) >> 8; + break; + + case FACTORY_TESTING_READ_CV: + reply = (cv_adc_.value(CvAdcChannel(argument)) + 32768) >> 8; + break; + + case FACTORY_TESTING_READ_NORMALIZATION: + reply = (&modulations_->frequency_patched)[argument] ? 0 : 255; + break; + + case FACTORY_TESTING_READ_GATE: + reply = switches_.pressed(Switch(argument)); + break; + + case FACTORY_TESTING_GENERATE_TEST_SIGNAL: + if (argument) { + mode_ = UI_MODE_TEST; + } else { + mode_ = UI_MODE_NORMAL; + } + break; + + case FACTORY_TESTING_CALIBRATE: + { + switch (argument) { + case 0: + patch_->engine = 0; + StartCalibration(); + break; + + case 1: + CalibrateC1(); + break; + + case 2: + CalibrateC3(); + SaveState(); + break; + } + } + break; + } + return reply; +} + +} // namespace plaits diff --git a/plugins/community/repos/AudibleInstruments/eurorack/plaits/ui.h b/plugins/community/repos/AudibleInstruments/eurorack/plaits/ui.h new file mode 100644 index 00000000..c33deda5 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/plaits/ui.h @@ -0,0 +1,143 @@ +// Copyright 2016 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// UI and CV processing ("controller" and "view") + +#ifndef PLAITS_UI_H_ +#define PLAITS_UI_H_ + +#include "stmlib/stmlib.h" + +#include "plaits/drivers/cv_adc.h" +#include "plaits/drivers/leds.h" +#include "plaits/drivers/normalization_probe.h" +#include "plaits/drivers/pots_adc.h" +#include "plaits/drivers/switches.h" +#include "plaits/dsp/voice.h" +#include "plaits/pot_controller.h" +#include "plaits/settings.h" + +namespace plaits { + +const int kNumNormalizedChannels = 5; +const int kProbeSequenceDuration = 32; + +enum UiMode { + UI_MODE_NORMAL, + UI_MODE_DISPLAY_ALTERNATE_PARAMETERS, + UI_MODE_DISPLAY_OCTAVE, + UI_MODE_CALIBRATION_C1, + UI_MODE_CALIBRATION_C3, + UI_MODE_TEST, + UI_MODE_ERROR +}; + +enum FactoryTestingCommand { + FACTORY_TESTING_READ_POT, + FACTORY_TESTING_READ_CV, + FACTORY_TESTING_READ_GATE, + FACTORY_TESTING_GENERATE_TEST_SIGNAL, + FACTORY_TESTING_CALIBRATE, + FACTORY_TESTING_READ_NORMALIZATION, +}; + +class Ui { + public: + Ui() { } + ~Ui() { } + + void Init(Patch* patch, Modulations* modulations, Settings* settings); + + void Poll(); + + void set_active_engine(int active_engine) { + active_engine_ = active_engine; + } + + inline bool test_mode() const { + return mode_ == UI_MODE_TEST; + } + + uint8_t HandleFactoryTestingRequest(uint8_t command); + + private: + void UpdateLEDs(); + void ReadSwitches(); + void ProcessPotsHiddenParameters(); + void LoadState(); + void SaveState(); + void DetectNormalization(); + + void StartCalibration(); + void CalibrateC1(); + void CalibrateC3(); + + void RealignPots() { + pots_[POTS_ADC_CHANNEL_TIMBRE_POT].Realign(); + pots_[POTS_ADC_CHANNEL_MORPH_POT].Realign(); + pots_[POTS_ADC_CHANNEL_HARMONICS_POT].Realign(); + } + + UiMode mode_; + + CvAdc cv_adc_; + PotsAdc pots_adc_; + Leds leds_; + Switches switches_; + + int ui_task_; + + float transposition_; + float octave_; + Patch* patch_; + Modulations* modulations_; + NormalizationProbe normalization_probe_; + PotController pots_[POTS_ADC_CHANNEL_LAST]; + float pitch_lp_; + float pitch_lp_calibration_; + + Settings* settings_; + + int normalization_detection_count_; + int normalization_detection_mismatches_[kNumNormalizedChannels]; + uint32_t normalization_probe_state_; + + int pwm_counter_; + int press_time_[SWITCH_LAST]; + bool ignore_release_[SWITCH_LAST]; + + int active_engine_; + + float cv_c1_; // For calibraiton + + static const CvAdcChannel normalized_channels_[kNumNormalizedChannels]; + + DISALLOW_COPY_AND_ASSIGN(Ui); +}; + +} // namespace plaits + +#endif // PLAITS_UI_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/__init__.py b/plugins/community/repos/AudibleInstruments/eurorack/stages/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/bootloader/bootloader.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/bootloader/bootloader.cc new file mode 100644 index 00000000..2363c9ff --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/bootloader/bootloader.cc @@ -0,0 +1,280 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. + +#include +#include + +#include "stmlib/system/bootloader_utils.h" +#include "stmlib/system/flash_programming.h" +#include "stmlib/system/system_clock.h" + +#include "stm_audio_bootloader/qpsk/packet_decoder.h" +#include "stm_audio_bootloader/qpsk/demodulator.h" + +#include "stages/drivers/firmware_update_adc.h" +#include "stages/drivers/firmware_update_dac.h" +#include "stages/drivers/leds.h" +#include "stages/drivers/switches.h" +#include "stages/drivers/system.h" + +extern "C" { + +void NMI_Handler() { } +void HardFault_Handler() { while (1); } +void MemManage_Handler() { while (1); } +void BusFault_Handler() { while (1); } +void UsageFault_Handler() { while (1); } +void SVC_Handler() { } +void DebugMon_Handler() { } +void PendSV_Handler() { } + +} + +using namespace stages; +using namespace stmlib; +using namespace std; +using namespace stm_audio_bootloader; + +const double kSampleRate = 48000.0; +const double kModulationRate = 6000.0; +const double kBitRate = 12000.0; +const uint32_t kStartAddress = 0x08008000; +const uint16_t kPacketsPerPage = PAGE_SIZE / kPacketSize; + +enum UiState { + UI_STATE_WAITING, + UI_STATE_RECEIVING, + UI_STATE_ERROR, + UI_STATE_WRITING +}; + +FirmwareUpdateDac dac; +FirmwareUpdateAdc adc; +Leds leds; +Switches switches; +PacketDecoder decoder; +Demodulator demodulator; + +int discard_samples = 8000; +int32_t peak = 0; +int32_t gain_slider = 0; +uint32_t current_address; +uint16_t packet_index; +uint8_t rx_buffer[PAGE_SIZE]; + +volatile bool switch_released = false; +volatile UiState ui_state; + +inline void UpdateLeds() { + leds.Clear(); + + // Show bargraph on the first 4 LEDs. + int32_t pwm = system_clock.milliseconds() & 15; + leds.set(0, (peak >> 8) >= pwm ? LED_COLOR_GREEN : 0); + leds.set(1, ((peak - 4096) >> 8) > pwm ? LED_COLOR_GREEN : 0); + leds.set(2, ((peak - 8192) >> 9) >= pwm ? LED_COLOR_GREEN : 0); + leds.set(3, ((peak - 16384) >> 9) >= pwm ? LED_COLOR_YELLOW : 0); + leds.set(4, ((peak - 16384 - 8192) >> 8) >= pwm ? LED_COLOR_RED : 0); + leds.set(5, ((peak - 16384 - 8192 - 4096) >> 8) >= pwm ? LED_COLOR_RED : 0); + + // Show status info on the last LEDs. + switch (ui_state) { + case UI_STATE_WAITING: + { + bool on = system_clock.milliseconds() & 64; + leds.set(LED_GROUP_SLIDER + 5, on ? 0 : LED_COLOR_GREEN); + } + break; + + case UI_STATE_RECEIVING: + { + int stage = (system_clock.milliseconds() >> 6) % 6; + leds.set(LED_GROUP_SLIDER + stage, LED_COLOR_GREEN); + } + break; + + case UI_STATE_ERROR: + { + bool on = system_clock.milliseconds() & 256; + for (int i = 0; i < 6; ++i) { + leds.set(i, on ? LED_COLOR_RED : LED_COLOR_OFF); + } + } + break; + + case UI_STATE_WRITING: + { + for (int i = 0; i < 6; ++i) { + leds.set(LED_GROUP_SLIDER + i, LED_COLOR_GREEN); + } + } + break; + } + leds.Write(); +} + +extern "C" { + +void SysTick_Handler() { + IWDG_ReloadCounter(); + system_clock.Tick(); + switches.Debounce(); + if (switches.released(5)) { + switch_released = true; + } + UpdateLeds(); +} + +} + +uint16_t NextSample() { + static int subsample = 0; + + int32_t slider = 65535 - adc.slider(); + int32_t sample = 32768 - adc.sample(); + adc.Convert(); + + ++subsample; + if ((subsample & 31) == 0) { + gain_slider = (slider + 63 * gain_slider) >> 6; + } + + int32_t gain = ((gain_slider >> 1) * gain_slider >> 21) + 128; + sample = sample * gain >> 8; + CONSTRAIN(sample, -32768, 32767) + int32_t rect = abs(sample); + peak = rect > peak ? rect : (rect + 32767 * peak) >> 15; + + uint16_t sample_12bit = 2048 + (sample >> 6); + + if (!discard_samples) { + demodulator.PushSample(sample_12bit); + } else { + --discard_samples; + } + + return sample_12bit; +} + +void ProgramPage(const uint8_t* data, size_t size) { + FLASH_Unlock(); + FLASH_ErasePage(current_address); + const uint32_t* words = static_cast( + static_cast(data)); + for (size_t written = 0; written < size; written += 4) { + FLASH_ProgramWord(current_address, *words++); + current_address += 4; + } +} + +void InitializeReception() { + decoder.Init(1000, true); + demodulator.Init( + kModulationRate / kSampleRate * 4294967296.0, + kSampleRate / kModulationRate, + 2.0 * kSampleRate / kBitRate); + demodulator.SyncCarrier(true); + decoder.Reset(); + current_address = kStartAddress; + packet_index = 0; + ui_state = UI_STATE_WAITING; +} + +void Init() { + System sys; + sys.Init(false); + leds.Init(); + switches.Init(); + dac.Init(kSampleRate); + adc.Init(); + sys.StartTimers(); + dac.Start(&NextSample); +} + +int main(void) { + Init(); + InitializeReception(); + + bool exit_updater = !switches.pressed_immediate(5); + while (!exit_updater) { + bool error = false; + + if (demodulator.state() == DEMODULATOR_STATE_OVERFLOW) { + error = true; + } else { + demodulator.ProcessAtLeast(32); + } + + while (demodulator.available() && !error && !exit_updater) { + uint8_t symbol = demodulator.NextSymbol(); + PacketDecoderState state = decoder.ProcessSymbol(symbol); + switch (state) { + case PACKET_DECODER_STATE_OK: + { + ui_state = UI_STATE_RECEIVING; + memcpy( + rx_buffer + (packet_index % kPacketsPerPage) * kPacketSize, + decoder.packet_data(), + kPacketSize); + ++packet_index; + if ((packet_index % kPacketsPerPage) == 0) { + ui_state = UI_STATE_WRITING; + ProgramPage(rx_buffer, PAGE_SIZE); + decoder.Reset(); + demodulator.SyncCarrier(false); + ui_state = UI_STATE_RECEIVING; + } else { + decoder.Reset(); + demodulator.SyncDecision(); + } + } + break; + case PACKET_DECODER_STATE_ERROR_CRC: + case PACKET_DECODER_STATE_ERROR_SYNC: + error = true; + break; + break; + case PACKET_DECODER_STATE_END_OF_TRANSMISSION: + exit_updater = true; + break; + default: + break; + } + } + + if (error) { + ui_state = UI_STATE_ERROR; + switch_released = false; + while (!switch_released); // Polled in ISR + InitializeReception(); + } + } + + adc.DeInit(); + dac.Stop(); + + Uninitialize(); + JumpTo(kStartAddress); + while (1) { } +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/bootloader/makefile b/plugins/community/repos/AudibleInstruments/eurorack/stages/bootloader/makefile new file mode 100644 index 00000000..74d66ab8 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/bootloader/makefile @@ -0,0 +1,47 @@ +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. + +# System specifications +F_CRYSTAL = 8000000L +F_CPU = 72000000L +SYSCLOCK = SYSCLK_FREQ_72MHz +FAMILY = f37x +# USB = enabled + +# Preferred upload command +UPLOAD_COMMAND = upload_jtag_erase_first + +# Packages to build +TARGET = stages_bootloader +PACKAGES = stages/bootloader \ + stages/drivers \ + stm_audio_bootloader/qpsk \ + stmlib/dsp \ + stmlib/utils \ + stmlib/system +RESOURCES = stages/resources + +TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ + +include stmlib/makefile.inc diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/chain_state.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/chain_state.cc new file mode 100644 index 00000000..4557cbb1 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/chain_state.cc @@ -0,0 +1,576 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Chain state. + +#include "stages/chain_state.h" + +#include + +#include "stages/drivers/serial_link.h" +#include "stages/settings.h" + +namespace stages { + +using namespace std; + +const uint32_t kLeftKey = stmlib::FourCC<'d', 'i', 's', 'c'>::value; +const uint32_t kRightKey = stmlib::FourCC<'o', 'v', 'e', 'r'>::value; + +// How long before unpatching an input actually breaks the chain. +const uint32_t kUnpatchedInputDelay = 2000; +const int32_t kLongPressDuration = 800; + +void ChainState::Init(SerialLink* left, SerialLink* right) { + index_ = 0; + size_ = 1; + + left_ = left; + right_ = right; + + STATIC_ASSERT(sizeof(Packet) == kPacketSize, BAD_PACKET_SIZE); + + left_->Init( + SERIAL_LINK_DIRECTION_LEFT, + 115200 * 8, + left_rx_packet_[0].bytes, + kPacketSize); + right_->Init( + SERIAL_LINK_DIRECTION_RIGHT, + 115200 * 8, + right_rx_packet_[0].bytes, + kPacketSize); + + ChannelState c = { .flags = 0xf0, .pot = 128, .cv_slider = 32768 }; + + fill(&channel_state_[0], &channel_state_[kMaxNumChannels], c); + fill(&unpatch_counter_[0], &unpatch_counter_[kNumChannels], 0); + fill(&loop_status_[0], &loop_status_[kNumChannels], LOOP_STATUS_NONE); + fill(&switch_pressed_[0], &switch_pressed_[kMaxChainSize], 0); + fill(&switch_press_time_[0], &switch_press_time_[kMaxNumChannels], 0); + + request_.request = REQUEST_NONE; + + discovering_neighbors_ = true; + ouroboros_ = false; + counter_ = 0; + num_internal_bindings_ = 0; + num_bindings_ = 0; +} + +void ChainState::DiscoverNeighbors() { + // Between t = 500ms and t = 1500ms, ping the neighbors every 50ms + if (counter_ >= 2000 && + counter_ <= 6000 && + (counter_ % 200) == 0) { + left_tx_packet_.discovery.key = kLeftKey; + left_tx_packet_.discovery.counter = size_; + left_->Transmit(left_tx_packet_); + + right_tx_packet_.discovery.key = kRightKey; + right_tx_packet_.discovery.counter = index_; + right_->Transmit(right_tx_packet_); + } + + const DiscoveryPacket* l = left_->available_rx_buffer(); + if (l && l->key == kRightKey) { + index_ = size_t(l->counter) + 1; + size_ = std::max(size_, index_ + 1); + } + + const DiscoveryPacket* r = right_->available_rx_buffer(); + if (r && r->key == kLeftKey) { + size_ = std::max(size_, size_t(r->counter)); + } + + ouroboros_ = index_ >= kMaxChainSize || size_ > kMaxChainSize; + + // The discovery phase lasts 2000ms. + discovering_neighbors_ = counter_ < 8000 && !ouroboros_; + if (discovering_neighbors_) { + ++counter_; + } else { + counter_ = 0; + } +} + +void ChainState::TransmitRight() { + if (index_ == size_ - 1) { + return; + } + + LeftToRightPacket* p = &right_tx_packet_.to_right; + p->phase = tx_last_sample_.phase; + p->segment = tx_last_sample_.segment; + p->last_patched_channel = tx_last_patched_channel_; + p->last_loop = tx_last_loop_; + + copy(&input_patched_[0], &input_patched_[index_ + 1], &p->input_patched[0]); + copy(&switch_pressed_[0], &switch_pressed_[index_ + 1], + &p->switch_pressed[0]); + right_->Transmit(right_tx_packet_); +} + +void ChainState::ReceiveRight() { + if (index_ == size_ - 1) { + return; + } + + const RightToLeftPacket* p = right_->available_rx_buffer(); + if (p) { + size_t rx_index = p->channel[0].index(); + if (rx_index > index_ && rx_index < size_) { + // This packet contains the state of a module on the right. + // Check if some settings have been changed on the remote modules, + // then update our local copy of its state. + for (size_t i = 0; i < kNumChannels; ++i) { + dirty_[remote_channel_index(rx_index, i)] = \ + remote_channel(rx_index, i)->flags != p->channel[i].flags; + } + copy( + &p->channel[0], + &p->channel[kNumChannels], + remote_channel(rx_index, 0)); + request_.request = REQUEST_NONE; + } else if (rx_index == 0xf) { + // This suspiciously looks like a state change request packet! + // We will take care of it later. + request_ = *(const RequestPacket*)(p); + } + } +} + +void ChainState::TransmitLeft() { + if (index_ == 0) { + return; + } + + if (request_.request != REQUEST_NONE) { + // Forward the request to the left. + left_tx_packet_.request = request_; + } else { + // Determine which module contains the last segment of the chain + // starting at this module's last segment. + // + // For example: + // + // 0----- 1----- 2----- 3----- 4----- + // + // ----X- ------ ---X-- ------ ---X-- + // + // last = 2 + // last = 2 + // last = 4 + // last = 4 + // last = 5 + size_t last = size_ - 1; + for (size_t i = index_; i < size_; ++i) { + for (size_t j = 0; j < kNumChannels; ++j) { + if (remote_channel(i, j)->input_patched()) { + last = i; + goto found; + } + } + } + found: + // In the example above, module 1 will alternate between sending to module + // 0 its own state, and the state of module 2. + size_t tx_index = index_ + ((counter_ >> 2) % (last - index_ + 1)); + copy( + remote_channel(tx_index, 0), + remote_channel(tx_index, kNumChannels), + &left_tx_packet_.to_left.channel[0]); + } + left_->Transmit(left_tx_packet_); +} + +void ChainState::ReceiveLeft() { + if (index_ == 0) { + rx_last_patched_channel_ = size_ * kNumChannels; + rx_last_loop_.start = -1; + rx_last_loop_.end = -1; + return; + } + + const LeftToRightPacket* p = left_->available_rx_buffer(); + if (p) { + rx_last_patched_channel_ = p->last_patched_channel; + rx_last_loop_ = p->last_loop; + rx_last_sample_.phase = p->phase; + rx_last_sample_.segment = p->segment; + copy(&p->switch_pressed[0], &p->switch_pressed[index_], + &switch_pressed_[0]); + copy(&p->input_patched[0], &p->input_patched[index_], &input_patched_[0]); + } +} + +void ChainState::Configure(SegmentGenerator* segment_generator) { + size_t last_local_channel = local_channel_index(0) + kNumChannels; + size_t last_channel = size_ * kNumChannels; + size_t last_patched_channel = rx_last_patched_channel_; + Loop last_loop = rx_last_loop_; + + num_internal_bindings_ = 0; + num_bindings_ = 0; + + segment::Configuration configuration[kMaxNumChannels]; + + for (size_t i = 0; i < kNumChannels; ++i) { + size_t channel = local_channel_index(i); + + if (!local_channel(i)->input_patched()) { + if (channel > last_patched_channel) { + // Create a slave channel - we are just extending a chain of segments. + size_t segment = channel - last_patched_channel; + segment_generator[i].ConfigureSlave(segment); + set_loop_status(i, segment, last_loop); + } else { + // Create a free-running channel. + segment::Configuration c = local_channel(i)->configuration(); + segment_generator[i].ConfigureSingleSegment(false, c); + binding_[num_bindings_].generator = i; + binding_[num_bindings_].source = i; + binding_[num_bindings_].destination = 0; + ++num_bindings_; + ++num_internal_bindings_; + loop_status_[i] = c.loop ? LOOP_STATUS_SELF : LOOP_STATUS_NONE; + } + } else { + last_patched_channel = channel; + + // Create a normal channel, trying to extend it as far as possible. + int num_segments = 0; + bool add_more_segments = true; + bool dirty = false; + + last_loop.start = -1; + last_loop.end = -1; + while (add_more_segments) { + // Add an entry in the configuration array. + segment::Configuration c = channel_state_[channel].configuration(); + configuration[num_segments] = c; + dirty |= dirty_[channel]; + + if (c.loop) { + if (last_loop.start == -1) last_loop.start = num_segments; + last_loop.end = num_segments; + } + + // Add a binding in the binding array. + binding_[num_bindings_].generator = i; + binding_[num_bindings_].destination = num_segments; + if (channel < last_local_channel) { + // Bind local CV/pot to this segment's parameters. + binding_[num_bindings_].source = i + num_segments; + ++num_internal_bindings_; + } else { + // Bind remote CV/pot to this segment's parameters. + binding_[num_bindings_].source = channel; + } + ++num_bindings_; + ++channel; + ++num_segments; + + add_more_segments = channel < last_channel && \ + !channel_state_[channel].input_patched(); + } + if (dirty || num_segments != segment_generator[i].num_segments()) { + segment_generator[i].Configure(true, configuration, num_segments); + } + set_loop_status(i, 0, last_loop); + } + } + tx_last_loop_ = last_loop; + tx_last_patched_channel_ = last_patched_channel; +} + +inline void ChainState::UpdateLocalState( + const IOBuffer::Block& block, + const Settings& settings, + const SegmentGenerator::Output& last_out) { + tx_last_sample_ = last_out; + + ChannelBitmask input_patched_bitmask = 0; + for (size_t i = 0; i < kNumChannels; ++i) { + if (block.input_patched[i]) { + unpatch_counter_[i] = 0; + } else if (unpatch_counter_[i] < kUnpatchedInputDelay) { + ++unpatch_counter_[i]; + } + + bool input_patched = unpatch_counter_[i] < kUnpatchedInputDelay; + dirty_[local_channel_index(i)] = local_channel(i)->UpdateFlags( + index_, + settings.state().segment_configuration[i], + input_patched); + if (input_patched) { + input_patched_bitmask |= 1 << i; + } + } + input_patched_[index_] = input_patched_bitmask; +} + +inline void ChainState::UpdateLocalPotCvSlider(const IOBuffer::Block& block) { + for (size_t i = 0; i < kNumChannels; ++i) { + ChannelState* s = local_channel(i); + s->pot = block.pot[i] * 256.0f; + s->cv_slider = block.cv_slider[i] * 16384.0f + 32768.0f; + } +} + +inline void ChainState::BindRemoteParameters( + SegmentGenerator* segment_generator) { + for (size_t i = num_internal_bindings_; i < num_bindings_; ++i) { + const ParameterBinding& m = binding_[i]; + segment_generator[m.generator].set_segment_parameters( + m.destination, + channel_state_[m.source].cv_slider / 16384.0f - 2.0f, + channel_state_[m.source].pot / 256.0f); + } +} + +inline void ChainState::BindLocalParameters( + const IOBuffer::Block& block, + SegmentGenerator* segment_generator) { + for (size_t i = 0; i < num_internal_bindings_; ++i) { + const ParameterBinding& m = binding_[i]; + segment_generator[m.generator].set_segment_parameters( + m.destination, + block.cv_slider[m.source], + block.pot[m.source]); + } +} + +ChainState::RequestPacket ChainState::MakeLoopChangeRequest( + size_t loop_start, size_t loop_end) { + size_t channel_index = 0; + size_t group_start = 0; + size_t group_end = size_ * kNumChannels; + + bool inconsistent_loop = false; + + // Fill group_start and group_end, which contain the tightest interval + // of patched channels enclosing the loop. + // + // LOOP ----S- ------ --E--- ------ + // PATCHED -x---- ------ ----x- ------ + // ^ ^ ^ ^ + // | | | | + // | | | group_end + // | | loop_end + // | loop_start + // group_start + for (size_t i = 0; i < size_; ++i) { + ChannelBitmask input_patched = input_patched_[i]; + for (size_t j = 0; j < kNumChannels; ++j) { + if (input_patched & 1) { + if (channel_index <= loop_start) { + group_start = channel_index; + } else if (channel_index >= loop_end) { + group_end = min(group_end, channel_index); + } + // There shouldn't be a patched channel between the loop start + // and the loop end. + if (channel_index > loop_start && channel_index < loop_end) { + // LOOP ----S- ------ --E--- ------ + // PATCHED -x---- ---x-- ----x- ------ + inconsistent_loop = true; + } + } + input_patched >>= 1; + ++channel_index; + } + } + + // There shouldn't be a loop spanning multiple channels among the first + // group of unpatched channels. + if (group_start == 0 && !(input_patched_[0] & 1)) { + if (loop_start != loop_end) { + // LOOP -S-E-- ------ + // PATCHED -----x ---x-- + inconsistent_loop = true; + } else { + group_start = group_end = loop_start = loop_end; + } + } + + // The only situation where a loop can end on a patched channel is when + // we have a single-channel group. + if (group_end == loop_end && group_start != group_end) { + // Correct: + // LOOP ---S-- + // E + // PATCHED ---xx- + + // Incorrect: + // LOOP ---S-E + // PATCHED ---x-x + inconsistent_loop = true; + } + + RequestPacket result; + if (inconsistent_loop) { + result.request = REQUEST_NONE; + } else { + result.request = REQUEST_SET_LOOP; + result.argument[0] = group_start; + result.argument[1] = loop_start; + result.argument[2] = loop_end; + result.argument[3] = group_end; + } + return result; +} + +void ChainState::PollSwitches() { + // The last module in the chain polls the states of the switches for the + // entire chain. The state of the switches has been passed from left + // to right. + // + // If a switch has been pressed, a Request packet is passed from right + // to left. Each module is responsible from parsing the Request packet + // and adjusting its internal state to simulate local changes. During + // the next cycle (1ms later), the internal change will be propagated + // from module to module through the usual mechanism (ChannelState + // transmission). + if (index_ == size_ - 1) { + request_.request = REQUEST_NONE; + size_t switch_index = 0; + size_t first_pressed = kMaxNumChannels; + + for (size_t i = 0; i < size_; ++i) { + ChannelBitmask switch_pressed = switch_pressed_[i]; + for (size_t j = 0; j < kNumChannels; ++j) { + if (switch_pressed & 1) { + if (switch_press_time_[switch_index] != -1) { + ++switch_press_time_[switch_index]; + if (first_pressed != kMaxNumChannels) { + // Simultaneously pressing a pair of buttons. + request_ = MakeLoopChangeRequest(first_pressed, switch_index); + switch_press_time_[first_pressed] = -1; + switch_press_time_[switch_index] = -1; + } else if (switch_press_time_[switch_index] > kLongPressDuration) { + // Long press on a single button. + request_ = MakeLoopChangeRequest(switch_index, switch_index); + switch_press_time_[switch_index] = -1; + } else { + first_pressed = switch_index; + } + } + } else { + if (switch_press_time_[switch_index] > 5) { + // A button has been released after having been held for a + // sufficiently long time (5ms), but not for long enough to be + // detected as a long press. + request_.request = REQUEST_SET_SEGMENT_TYPE; + request_.argument[0] = switch_index; + } + switch_press_time_[switch_index] = 0; + } + switch_pressed >>= 1; + ++switch_index; + } + } + } +} + +void ChainState::HandleRequest(Settings* settings) { + if (request_.request == REQUEST_NONE) { + return; + } + + State* s = settings->mutable_state(); + bool dirty = false; + for (size_t i = 0; i < kNumChannels; ++i) { + size_t channel = local_channel_index(i); + + uint8_t type_bits = s->segment_configuration[i] & 0x3; + uint8_t loop_bit = s->segment_configuration[i] & 0x4; + + if (request_.request == REQUEST_SET_SEGMENT_TYPE) { + if (channel == request_.argument[0]) { + s->segment_configuration[i] = ((type_bits + 1) % 3) | loop_bit; + dirty |= true; + } + } else if (request_.request == REQUEST_SET_LOOP) { + uint8_t new_loop_bit = loop_bit; + if ((channel >= request_.argument[0] && channel < request_.argument[3])) { + new_loop_bit = 0x0; + } + if (channel == request_.argument[1] || channel == request_.argument[2]) { + if (request_.argument[1] == request_.argument[2]) { + new_loop_bit = 0x4 - loop_bit; + } else { + new_loop_bit = 0x4; + } + } + s->segment_configuration[i] = type_bits | new_loop_bit; + dirty |= new_loop_bit != loop_bit; + } + } + + if (dirty) { + settings->SaveState(); + } +} + +void ChainState::Update( + const IOBuffer::Block& block, + Settings* settings, + SegmentGenerator* segment_generator, + SegmentGenerator::Output* out) { + if (discovering_neighbors_) { + DiscoverNeighbors(); + return; + } + + switch (counter_ & 0x3) { + case 0: + PollSwitches(); + UpdateLocalState(block, *settings, out[kBlockSize - 1]); + TransmitRight(); + break; + case 1: + ReceiveRight(); + HandleRequest(settings); + break; + case 2: + UpdateLocalPotCvSlider(block); + TransmitLeft(); + break; + case 3: + ReceiveLeft(); + Configure(segment_generator); + BindRemoteParameters(segment_generator); + break; + } + + BindLocalParameters(block, segment_generator); + fill(&out[0], &out[kBlockSize], rx_last_sample_); + + ++counter_; +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/chain_state.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/chain_state.h new file mode 100644 index 00000000..a0e6f4b4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/chain_state.h @@ -0,0 +1,269 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Keeps track of the state of the chain of modules. + +#ifndef STAGES_CHAIN_STATE_H_ +#define STAGES_CHAIN_STATE_H_ + +#include "stmlib/stmlib.h" + +#include "stages/io_buffer.h" +#include "stages/segment_generator.h" + +namespace stages { + +const size_t kMaxChainSize = 6; +const size_t kMaxNumChannels = kMaxChainSize * kNumChannels; +const size_t kPacketSize = 24; + +class SerialLink; +class Settings; + +class ChainState { + public: + ChainState() { } + ~ChainState() { } + + typedef uint8_t ChannelBitmask; + + void Init(SerialLink* left, SerialLink* right); + void Update( + const IOBuffer::Block& block, + Settings* settings, + SegmentGenerator* segment_generator, + SegmentGenerator::Output* out); + + // Index of the module in the chain, and size of the chain. + inline size_t index() const { return index_; } + inline size_t size() const { return size_; } + + inline bool discovering_neighbors() const { return discovering_neighbors_; } + inline bool ouroboros() const { return ouroboros_; } + + // Internally, we only store a loop bit for each channel - but the UI needs + // to know more than that. It needs to know whether a channel with a loop bit + // set to 1 is a loop start, a loop end, or self-looping channel. This + // extra information is called the LoopStatus. It is stored in the ChainState, + // (in loop_status_[]) and populated everytime we reconfigure a channel. + enum LoopStatus { + LOOP_STATUS_NONE, + LOOP_STATUS_START, + LOOP_STATUS_END, + LOOP_STATUS_SELF + }; + + inline LoopStatus loop_status(size_t i) const { + return loop_status_[i]; + } + + inline void set_local_switch_pressed(ChannelBitmask bitmask) { + switch_pressed_[index_] = bitmask; + } + + private: + void DiscoverNeighbors(); + + void TransmitRight(); + void TransmitLeft(); + void ReceiveRight(); + void ReceiveLeft(); + + void UpdateLocalState( + const IOBuffer::Block& block, + const Settings& settings, + const SegmentGenerator::Output& last_out); + void UpdateLocalPotCvSlider(const IOBuffer::Block& block); + void Configure(SegmentGenerator* segment_generator); + void PollSwitches(); + void BindRemoteParameters(SegmentGenerator* segment_generator); + void BindLocalParameters( + const IOBuffer::Block& block, SegmentGenerator* segment_generator); + void HandleRequest(Settings* settings); + + struct ChannelState { + // 7 6 5 4 3 2 1 0 + // 8 4 2 1 8 4 2 1 + // + // S S S S I L T T + // + // SSSS: index of the module sending this packet. + // I: gate/trigger input patched? + // L: loop enabled? + // TT: segment type + uint8_t flags; + uint8_t pot; + uint16_t cv_slider; + + inline bool input_patched() const { + return flags & 0x08; + } + + inline segment::Configuration configuration() const { + segment::Configuration c; + c.loop = flags & 0x04; + c.type = segment::Type(flags & 0x03); + return c; + } + + inline size_t index() const { + return size_t(flags) >> 4; + } + + inline bool UpdateFlags( + uint8_t index, + uint8_t configuration, + bool input_patched) { + uint8_t new_flags = index << 4; + new_flags |= configuration; + new_flags |= input_patched ? 0x08 : 0; + bool dirty = new_flags != flags; + flags = new_flags; + return dirty; + } + }; + + struct Loop { + int8_t start; + int8_t end; + }; + + struct LeftToRightPacket { + uint8_t last_patched_channel; + int8_t segment; + float phase; + Loop last_loop; + ChannelBitmask switch_pressed[kMaxChainSize]; + ChannelBitmask input_patched[kMaxChainSize]; + }; + + struct RightToLeftPacket { + ChannelState channel[kNumChannels]; + }; + + enum Request { + REQUEST_NONE, + REQUEST_SET_SEGMENT_TYPE = 0xfe, + REQUEST_SET_LOOP = 0xff + }; + + struct RequestPacket { + uint8_t request; + uint8_t argument[4]; + }; + + struct DiscoveryPacket { + uint32_t key; + uint8_t counter; + }; + + union Packet { + RightToLeftPacket to_left; + LeftToRightPacket to_right; + DiscoveryPacket discovery; + RequestPacket request; + uint8_t bytes[kPacketSize]; + }; + + struct ParameterBinding { + size_t generator; + size_t source; + size_t destination; + }; + + inline size_t remote_channel_index(size_t i, size_t j) const { + return i * kNumChannels + j; + } + + inline size_t local_channel_index(size_t i) const { + return index_ * kNumChannels + i; + } + + ChannelState* local_channel(size_t i) { + return &channel_state_[local_channel_index(i)]; + } + + ChannelState* remote_channel(size_t i, size_t j) { + return &channel_state_[remote_channel_index(i, j)]; + } + + inline void set_loop_status(int channel, int segment, Loop loop) { + if (segment == loop.start) { + loop_status_[channel] = segment == loop.end ? + LOOP_STATUS_SELF : LOOP_STATUS_START; + } else if (segment == loop.end) { + loop_status_[channel] = LOOP_STATUS_END; + } else { + loop_status_[channel] = LOOP_STATUS_NONE; + } + } + + RequestPacket MakeLoopChangeRequest(size_t loop_start, size_t loop_end); + + size_t index_; + size_t size_; + + SerialLink* left_; + SerialLink* right_; + + ChannelState channel_state_[kMaxNumChannels]; + bool dirty_[kMaxNumChannels]; + + int16_t switch_press_time_[kMaxNumChannels]; + uint16_t unpatch_counter_[kNumChannels]; + LoopStatus loop_status_[kNumChannels]; + + ChannelBitmask switch_pressed_[kMaxChainSize]; + ChannelBitmask input_patched_[kMaxChainSize]; + + size_t rx_last_patched_channel_; + size_t tx_last_patched_channel_; + Loop rx_last_loop_; + Loop tx_last_loop_; + SegmentGenerator::Output rx_last_sample_; + SegmentGenerator::Output tx_last_sample_; + + RequestPacket request_; + + bool discovering_neighbors_; + bool ouroboros_; + uint32_t counter_; + + Packet left_tx_packet_; + Packet right_tx_packet_; + Packet left_rx_packet_[2]; + Packet right_rx_packet_[2]; + + size_t num_internal_bindings_; + size_t num_bindings_; + ParameterBinding binding_[kMaxNumChannels]; + + DISALLOW_COPY_AND_ASSIGN(ChainState); +}; + +} // namespace stages + +#endif // STAGES_CHAIN_STATE_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/cv_reader.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/cv_reader.cc new file mode 100644 index 00000000..ca8d5489 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/cv_reader.cc @@ -0,0 +1,87 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// CV reader. + +#include "stages/cv_reader.h" + +#include + +#include "stmlib/dsp/dsp.h" + +#include "stages/settings.h" + +namespace stages { + +using namespace std; +using namespace stmlib; + +void CvReader::Init(Settings* settings) { + settings_ = settings; + pots_adc_.Init(); + cv_adc_.Init(); + + STATIC_ASSERT(kNumCvAdcChannels == kNumChannels, CV_ADC_CHANNEL_MISMATCH); + STATIC_ASSERT(kNumAdcChannels == kNumChannels, POTS_ADC_CHANNEL_MISMATCH); + + fill(&lp_pot_[0], &lp_pot_[kNumChannels], 0.0f); + fill(&lp_slider_[0], &lp_slider_[kNumChannels], 0.0f); + fill(&lp_cv_[0], &lp_cv_[kNumChannels], 0.0f); + fill(&lp_cv_2_[0], &lp_cv_2_[kNumChannels], 0.0f); +} + +void CvReader::Read(IOBuffer::Block* block) { + uint8_t pot_index = pots_adc_.pot_index(); + if (pot_index != 0xff) { + ONE_POLE( + lp_pot_[pot_index], + pots_adc_.float_value(ADC_GROUP_POT, pot_index), + 0.1f); + } + + for (size_t i = 0; i < kNumChannels; ++i) { + const ChannelCalibrationData& c = settings_->calibration_data(i); + ONE_POLE(lp_cv_[i], cv_adc_.float_value(i), 0.7f); + ONE_POLE(lp_cv_2_[i], lp_cv_[i], 0.7f); + + float value = lp_cv_2_[i] * c.adc_scale + c.adc_offset; + + ONE_POLE(lp_slider_[i], + pots_adc_.float_value(ADC_GROUP_SLIDER, i), + 0.025f); + + float combined_value = value + lp_slider_[i]; + CONSTRAIN(combined_value, -1.0f, 1.999995f); + + block->pot[i] = lp_pot_[i]; + block->cv_slider[i] = combined_value; + } + + pots_adc_.Convert(); + cv_adc_.Convert(); +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/cv_reader.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/cv_reader.h new file mode 100644 index 00000000..df60887a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/cv_reader.h @@ -0,0 +1,81 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// CV reader. + +#ifndef STAGES_CV_READER_H_ +#define STAGES_CV_READER_H_ + +#include "stmlib/stmlib.h" + +#include "stages/drivers/pots_adc.h" +#include "stages/drivers/cv_adc.h" +#include "stages/io_buffer.h" + +namespace stages { + +class Settings; + +class CvReader { + public: + CvReader() { } + ~CvReader() { } + + void Init(Settings* settings); + void Read(IOBuffer::Block* block); + + inline uint8_t raw_cv(int i) const { + return (int32_t(cv_adc_.value(i)) + 32768) >> 8; + } + + inline uint8_t raw_pot(int i) const { + return pots_adc_.value(ADC_GROUP_POT, i) >> 8; + } + + inline uint8_t raw_slider(int i) const { + return pots_adc_.value(ADC_GROUP_SLIDER, i) >> 8; + } + + inline float lp_cv(int i) const { + return lp_cv_2_[i]; + } + + private: + Settings* settings_; + CvAdc cv_adc_; + PotsAdc pots_adc_; + + float lp_cv_[kNumChannels]; + float lp_cv_2_[kNumChannels]; + float lp_slider_[kNumChannels]; + float lp_pot_[kNumChannels]; + + DISALLOW_COPY_AND_ASSIGN(CvReader); +}; + +} // namespace stages + +#endif // STAGES_CV_READER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/delay_line_16_bits.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/delay_line_16_bits.h new file mode 100644 index 00000000..950ae7b3 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/delay_line_16_bits.h @@ -0,0 +1,85 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Delay line, like the one in stmlib/dsp, but for int16_t, with +// built-in quantization and linear interpolation guard. +// Too specialized to be in a library... + +#ifndef STAGES_DELAY_LINE_16_BITS_H_ +#define STAGES_DELAY_LINE_16_BITS_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/dsp/dsp.h" + +#include + +namespace stages { + +template +class DelayLine16Bits { + public: + DelayLine16Bits() { } + ~DelayLine16Bits() { } + + void Init() { + Reset(); + } + + void Reset() { + std::fill(&line_[0], &line_[max_delay], 0); + write_ptr_ = 0; + } + + inline void Write(const float sample) { + int32_t word = static_cast(sample * 32768.0f); + CONSTRAIN(word, -32768, 32767); + line_[write_ptr_] = word; + if (write_ptr_ == 0) { + line_[max_delay] = word; + write_ptr_ = max_delay - 1; + } else { + --write_ptr_; + } + } + + inline const float Read(float delay) const { + MAKE_INTEGRAL_FRACTIONAL(delay) + size_t read_ptr = (write_ptr_ + delay_integral) % max_delay; + float a = static_cast(line_[read_ptr]) / 32768.0f; + float b = static_cast(line_[read_ptr + 1]) / 32768.0f; + return a + (b - a) * delay_fractional; + } + + private: + size_t write_ptr_; + int16_t line_[max_delay + 1]; + + DISALLOW_COPY_AND_ASSIGN(DelayLine16Bits); +}; + +} // namespace stages + +#endif // STAGES_DELAY_LINE_16_BITS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/cv_adc.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/cv_adc.cc new file mode 100644 index 00000000..054db027 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/cv_adc.cc @@ -0,0 +1,192 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 16-bit SDADC reading the CVs. + +#include "stages/drivers/cv_adc.h" + +#include + +namespace stages { + +struct ChannelConfiguration { + int map_to; + uint32_t channel; + GPIO_TypeDef* gpio; + uint16_t pin; +}; + +struct ConverterConfiguration { + SDADC_TypeDef* sdadc; + DMA_Channel_TypeDef* dma_channel; + int num_channels; + ChannelConfiguration channel[2]; +}; + +const ConverterConfiguration converter_configuration[3] = { + { + SDADC1, DMA2_Channel3, 2, { + { 4, SDADC_Channel_5, GPIOB, GPIO_Pin_1 }, + { 5, SDADC_Channel_6, GPIOB, GPIO_Pin_0 }, + } + }, + { + SDADC2, DMA2_Channel4, 2, { + { 3, SDADC_Channel_7, GPIOE, GPIO_Pin_9 }, + { 2, SDADC_Channel_8, GPIOE, GPIO_Pin_8 } + } + }, + { + SDADC3, DMA2_Channel5, 2, { + { 1, SDADC_Channel_7, GPIOB, GPIO_Pin_15 }, + { 0, SDADC_Channel_8, GPIOB, GPIO_Pin_14 } + } + }, +}; + +void CvAdc::Init() { + // Power all the SDADCs. + RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); + PWR_SDADCAnalogCmd(PWR_SDADCAnalog_1, ENABLE); + PWR_SDADCAnalogCmd(PWR_SDADCAnalog_2, ENABLE); + PWR_SDADCAnalogCmd(PWR_SDADCAnalog_3, ENABLE); + + // Enable SDADC clock. + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDADC1, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDADC2, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDADC3, ENABLE); + RCC_SDADCCLKConfig(RCC_SDADCCLK_SYSCLK_Div8); + + // Enable DMA2 clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); + + // Enable GPIO clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE); + + // Init SDADC + SDADC_VREFSelect(SDADC_VREF_Ext); + + DMA_InitTypeDef dma_init; + GPIO_InitTypeDef gpio_init; + SDADC_AINStructTypeDef sdadc_ain; + + // Fill structures with the settings common to all channels/pins. + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + + sdadc_ain.SDADC_InputMode = SDADC_InputMode_SEZeroReference; + sdadc_ain.SDADC_Gain = SDADC_Gain_1; + sdadc_ain.SDADC_CommonMode = SDADC_CommonMode_VDDA_2; + sdadc_ain.SDADC_Offset = 0; + + int current_channel = 0; + + // Configure all SDADCs, all their input channels, and all the DMA channels. + for (int i = 0; i < 3; ++i) { + const ConverterConfiguration& config = converter_configuration[i]; + + // Wait for SDADC to stabilize. + SDADC_Cmd(config.sdadc, ENABLE); + while (SDADC_GetFlagStatus(config.sdadc, SDADC_FLAG_STABIP) == SET); + + // Configure GPIO pins. + for (int j = 0; j < config.num_channels; ++j) { + gpio_init.GPIO_Pin = config.channel[j].pin; + GPIO_Init(config.channel[j].gpio, &gpio_init); + } + + // SDADC enters initialization mode. + SDADC_InitModeCmd(config.sdadc, ENABLE); + while (SDADC_GetFlagStatus(config.sdadc, SDADC_FLAG_INITRDY) == RESET); + + // Configure DMA to read injected values into a slice of the + // values_ array. + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&(config.sdadc->JDATAR); + dma_init.DMA_MemoryBaseAddr = (uint32_t)(&values_[current_channel]); + dma_init.DMA_DIR = DMA_DIR_PeripheralSRC; + dma_init.DMA_BufferSize = config.num_channels; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(config.dma_channel, &dma_init); + + // Create a configuration and assign it to all channels used by this SDADC. + SDADC_AINInit(config.sdadc, SDADC_Conf_0, &sdadc_ain); + uint32_t channels = 0; + for (int j = 0; j < config.num_channels; ++j) { + channel_map_[config.channel[j].map_to] = current_channel++; + channels |= config.channel[j].channel; + SDADC_ChannelConfig( + config.sdadc, config.channel[j].channel, SDADC_Conf_0); + } + + // Select injected channels. + SDADC_InjectedChannelSelect(config.sdadc, channels); + + // Disable continuous mode - the conversions are restarted every time + // we render a block of samples. + SDADC_InjectedContinuousModeCmd(config.sdadc, DISABLE); + + // Terminate initialization sequence. + SDADC_CalibrationSequenceConfig(config.sdadc, SDADC_CalibrationSequence_3); + SDADC_InitModeCmd(config.sdadc, DISABLE); + while (SDADC_GetFlagStatus(config.sdadc, SDADC_FLAG_INITRDY) == SET); + + // Run calibration sequence. + SDADC_StartCalibration(config.sdadc); + while (SDADC_GetFlagStatus(config.sdadc, SDADC_FLAG_EOCAL) == RESET); + + // Enable DMA. + DMA_Cmd(config.dma_channel, ENABLE); + SDADC_DMAConfig(config.sdadc, SDADC_DMATransfer_Injected, ENABLE); + } +} + +void CvAdc::DeInit() { + for (int i = 0; i < 3; ++i) { + const ConverterConfiguration& config = converter_configuration[i]; + SDADC_Cmd(config.sdadc, DISABLE); + SDADC_DMAConfig(config.sdadc, SDADC_DMATransfer_Injected, DISABLE); + DMA_Cmd(config.dma_channel, DISABLE); + } +} + +void CvAdc::Convert() { + // SDADC_SoftwareStartInjectedConv(SDADC1); + // SDADC_SoftwareStartInjectedConv(SDADC2); + // SDADC_SoftwareStartInjectedConv(SDADC3); + SDADC1->CR2 |= (uint32_t)SDADC_CR2_JSWSTART; + SDADC2->CR2 |= (uint32_t)SDADC_CR2_JSWSTART; + SDADC3->CR2 |= (uint32_t)SDADC_CR2_JSWSTART; +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/cv_adc.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/cv_adc.h new file mode 100644 index 00000000..9b578a22 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/cv_adc.h @@ -0,0 +1,64 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 16-bit SDADC reading the CVs. + +#ifndef STAGES_DRIVERS_CV_ADC_H_ +#define STAGES_DRIVERS_CV_ADC_H_ + +#include "stmlib/stmlib.h" + +namespace stages { + +const int kNumCvAdcChannels = 6; + +class CvAdc { + public: + CvAdc() { } + ~CvAdc() { } + + void Init(); + void DeInit(); + void Convert(); + + inline int16_t value(int channel) const { + return values_[channel_map_[channel]]; + } + + inline float float_value(int channel) const { + return static_cast(value(channel)) / 32768.0f; + } + + private: + int channel_map_[kNumCvAdcChannels]; + int16_t values_[kNumCvAdcChannels]; + + DISALLOW_COPY_AND_ASSIGN(CvAdc); +}; + +} // namespace stages + +#endif // STAGES_DRIVERS_CV_ADC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/dac.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/dac.cc new file mode 100644 index 00000000..266fcad0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/dac.cc @@ -0,0 +1,173 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the DAC. + +#include "stages/drivers/dac.h" + +#include + +namespace stages { + +/* static */ +int Dac::channel_selection_bits_[kNumChannels] = { + 0x0300 | (3 << 4), + 0x0300 | (1 << 4), + 0x0300 | (6 << 4), + 0x0300 | (2 << 4), + 0x0300 | (0 << 4), + 0x0300 | (4 << 4), +}; + +/* static */ +Dac* Dac::instance_; + +void Dac::Init(int sample_rate, size_t block_size) { + instance_ = this; + block_size_ = block_size; + callback_ = NULL; + first_frame_ = true; + + InitializeGPIO(); + InitializeAudioInterface(sample_rate); + InitializeDMA(block_size); +} + +void Dac::InitializeGPIO() { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + + // Initialize SS pin. + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_15; + GPIO_Init(GPIOA, &gpio_init); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_6); + + gpio_init.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_12; + GPIO_Init(GPIOC, &gpio_init); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_6); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_6); +} + +void Dac::InitializeAudioInterface(int sample_rate) { + RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); + SPI_I2S_DeInit(SPI3); + I2S_InitTypeDef i2s_init; + i2s_init.I2S_Mode = I2S_Mode_MasterTx; + i2s_init.I2S_Standard = I2S_Standard_Phillips; + i2s_init.I2S_AudioFreq = sample_rate * kNumChannels; + + i2s_init.I2S_DataFormat = I2S_DataFormat_32b; + i2s_init.I2S_MCLKOutput = I2S_MCLKOutput_Disable; + i2s_init.I2S_CPOL = I2S_CPOL_Low; + I2S_Init(SPI3, &i2s_init); + I2S_Cmd(SPI3, ENABLE); +} + +void Dac::InitializeDMA(size_t block_size) { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); + + DMA_Cmd(DMA2_Channel2, DISABLE); + DMA_DeInit(DMA2_Channel2); + + DMA_InitTypeDef dma_init; + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&(SPI3->DR); + dma_init.DMA_MemoryBaseAddr = (uint32_t)(&tx_dma_buffer_[0]); + dma_init.DMA_DIR = DMA_DIR_PeripheralDST; + dma_init.DMA_BufferSize = 2 * block_size * kFrameSize; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(DMA2_Channel2, &dma_init); + + // Enable the interrupts: half transfer and transfer complete. + DMA_ITConfig(DMA2_Channel2, DMA_IT_TC | DMA_IT_HT, ENABLE); + + // Enable the IRQ. + NVIC_EnableIRQ(DMA2_Channel2_IRQn); + + SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Tx, ENABLE); +} + +void Dac::Start(FillBufferCallback callback) { + callback_ = callback; + DMA_Cmd(DMA2_Channel2, ENABLE); + first_frame_ = true; +} + +void Dac::Stop() { + DMA_Cmd(DMA2_Channel2, DISABLE); +} + +void Dac::Fill(size_t offset) { + uint16_t* p = &tx_dma_buffer_[offset * block_size_ * kFrameSize]; + if (first_frame_) { + for (size_t i = 0; i < block_size_; ++i) { + for (size_t j = 0; j < kNumChannels; ++j) { + *p++ = 0x090a; + *p++ = 0x0000; + *p++ = 0x0000; + *p++ = 0x0000; + } + } + first_frame_ = false; + } else { + IOBuffer::Slice slice = (*callback_)(block_size_); + for (size_t i = 0; i < block_size_; ++i) { + for (size_t j = 0; j < kNumChannels; ++j) { + uint16_t word = slice.block->output[j][slice.frame_index + i]; + *p++ = channel_selection_bits_[j] | (word >> 12); + *p++ = word << 4; + *p++ = 0; + *p++ = 0; + } + } + } +} + +} // namespace stages + +extern "C" { + +void DMA2_Channel2_IRQHandler() { + uint32_t flags = DMA2->ISR; + DMA2->IFCR = DMA2_FLAG_TC2 | DMA2_FLAG_HT2; + if (flags & DMA2_FLAG_TC2) { + stages::Dac::GetInstance()->Fill(1); + } else if (flags & DMA2_FLAG_HT2) { + stages::Dac::GetInstance()->Fill(0); + } +} + +} \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/dac.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/dac.h new file mode 100644 index 00000000..fb8939b4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/dac.h @@ -0,0 +1,79 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the DAC. + +#ifndef STAGES_DRIVERS_DAC_H_ +#define STAGES_DRIVERS_DAC_H_ + +#include "stmlib/stmlib.h" + +#include + +#include "stages/io_buffer.h" + +namespace stages { + +const size_t kMaxDacBlockSize = 8; + +class IOBuffer; + +const size_t kFrameSize = kNumChannels * 4; + +class Dac { + public: + Dac() { } + ~Dac() { } + + typedef IOBuffer::Slice (*FillBufferCallback)(size_t size); + + void Init(int sample_rate, size_t block_size); + void Start(FillBufferCallback callback); + void Stop(); + void Fill(size_t offset); + + static Dac* GetInstance() { return instance_; } + +private: + void InitializeGPIO(); + void InitializeAudioInterface(int sample_rate); + void InitializeDMA(size_t block_size); + + static Dac* instance_; + static int channel_selection_bits_[kNumChannels]; + + size_t block_size_; + FillBufferCallback callback_; + bool first_frame_; + + uint16_t tx_dma_buffer_[2 * kMaxDacBlockSize * kFrameSize]; + + DISALLOW_COPY_AND_ASSIGN(Dac); +}; + +} // namespace stages + +#endif // STAGES_DRIVERS_DAC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_adc.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_adc.cc new file mode 100644 index 00000000..e3f5ce01 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_adc.cc @@ -0,0 +1,122 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the 12-bit SAR ADC, reading the last slider and the corresponding +// CV input. + +#include "stages/drivers/firmware_update_adc.h" + +#include + +namespace stages { + +void FirmwareUpdateAdc::Init() { + // Enable ADC clock. + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); + RCC_ADCCLKConfig(RCC_PCLK2_Div8); + + // Enable GPIO clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + + // Enable DMA1 clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); + + DMA_InitTypeDef dma_init; + ADC_InitTypeDef adc_init; + GPIO_InitTypeDef gpio_init; + + // Configure the two analog inputs. + gpio_init.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOA, &gpio_init); + + gpio_init.GPIO_Pin = GPIO_Pin_0; + GPIO_Init(GPIOB, &gpio_init); + + // Configure the address lines for the MUX. + gpio_init.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &gpio_init); + + uint8_t mux_address = 6; + GPIO_WriteBit(GPIOA, GPIO_Pin_3, static_cast(mux_address & 4)); + GPIO_WriteBit(GPIOA, GPIO_Pin_4, static_cast(mux_address & 2)); + GPIO_WriteBit(GPIOA, GPIO_Pin_5, static_cast(mux_address & 1)); + + // Use DMA to automatically copy ADC data register to values_ buffer. + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; + dma_init.DMA_MemoryBaseAddr = (uint32_t)&adc_values_[0]; + dma_init.DMA_DIR = DMA_DIR_PeripheralSRC; + dma_init.DMA_BufferSize = 2; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(DMA1_Channel1, &dma_init); + DMA_Cmd(DMA1_Channel1, ENABLE); + + // Init ADC1 + adc_init.ADC_ScanConvMode = ENABLE; + adc_init.ADC_ContinuousConvMode = DISABLE; + adc_init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; + adc_init.ADC_DataAlign = ADC_DataAlign_Left; + adc_init.ADC_NbrOfChannel = 2; + ADC_Init(ADC1, &adc_init); + + // Sample rate: 53.6 kHz + // 72000 / 6 / (12.5 * 2 + 71.5 * 2) + ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 1, ADC_SampleTime_71Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 2, ADC_SampleTime_71Cycles5); + + // Enable and calibrate ADC1. + ADC_Cmd(ADC1, ENABLE); + ADC_ResetCalibration(ADC1); + while (ADC_GetResetCalibrationStatus(ADC1)); + ADC_StartCalibration(ADC1); + while (ADC_GetCalibrationStatus(ADC1)); + ADC_DMACmd(ADC1, ENABLE); +} + +void FirmwareUpdateAdc::DeInit() { + ADC_DMACmd(ADC1, DISABLE); + ADC_Cmd(ADC1, DISABLE); + DMA_Cmd(DMA1_Channel1, DISABLE); +} + +void FirmwareUpdateAdc::Convert() { + ADC1->CR2 |= (uint32_t)(ADC_CR2_SWSTART | ADC_CR2_EXTTRIG); +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_adc.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_adc.h new file mode 100644 index 00000000..85159a9b --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_adc.h @@ -0,0 +1,62 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the 12-bit SAR ADC, reading the last slider and the corresponding +// CV input. + +#ifndef STAGES_DRIVERS_FIRMWARE_UPDATE_ADC_H_ +#define STAGES_DRIVERS_FIRMWARE_UPDATE_ADC_H_ + +#include "stmlib/stmlib.h" + +namespace stages { + +class FirmwareUpdateAdc { + public: + FirmwareUpdateAdc() { } + ~FirmwareUpdateAdc() { } + + void Init(); + void DeInit(); + void Convert(); + + inline int32_t slider() const { + return static_cast(adc_values_[0]); + } + + inline int32_t sample() const { + return static_cast(adc_values_[1]); + } + + private: + uint16_t adc_values_[2]; + + DISALLOW_COPY_AND_ASSIGN(FirmwareUpdateAdc); +}; + +} // namespace stages + +#endif // STAGES_DRIVERS_FIRMWARE_UPDATE_ADC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_dac.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_dac.cc new file mode 100644 index 00000000..f852c20d --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_dac.cc @@ -0,0 +1,114 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Lightweight DAC driver used for the firmware update procedure. +// Initializes the I2S port as SPI, and relies on a timer for clock generation. + +#include "stages/drivers/firmware_update_dac.h" + +namespace stages { + +/* static */ +FirmwareUpdateDac* FirmwareUpdateDac::instance_; + +void FirmwareUpdateDac::Init(int sample_rate) { + instance_ = this; + + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); + + // Initialize SS pin. + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_15; + GPIO_Init(GPIOA, &gpio_init); + + // Initialize MOSI and SCK pins. + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_12; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_6); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_6); + GPIO_Init(GPIOC, &gpio_init); + + // Initialize SPI. + SPI_InitTypeDef spi_init; + spi_init.SPI_Direction = SPI_Direction_2Lines_FullDuplex; + spi_init.SPI_Mode = SPI_Mode_Master; + spi_init.SPI_DataSize = SPI_DataSize_16b; + spi_init.SPI_CPOL = SPI_CPOL_High; + spi_init.SPI_CPHA = SPI_CPHA_1Edge; + spi_init.SPI_NSS = SPI_NSS_Soft; + spi_init.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; + spi_init.SPI_FirstBit = SPI_FirstBit_MSB; + spi_init.SPI_CRCPolynomial = 7; + SPI_Init(SPI3, &spi_init); + SPI_Cmd(SPI3, ENABLE); + + // Initialize timer. + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); + TIM_TimeBaseInitTypeDef timer_init; + timer_init.TIM_Period = F_CPU / int(sample_rate); + timer_init.TIM_Prescaler = 0; + timer_init.TIM_ClockDivision = TIM_CKD_DIV1; + timer_init.TIM_CounterMode = TIM_CounterMode_Up; + timer_init.TIM_RepetitionCounter = 0; + TIM_TimeBaseInit(TIM2, &timer_init); + TIM_Cmd(TIM2, ENABLE); + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2.2 priority split. + NVIC_InitTypeDef timer_interrupt; + timer_interrupt.NVIC_IRQChannel = TIM2_IRQn; + timer_interrupt.NVIC_IRQChannelPreemptionPriority = 0; + timer_interrupt.NVIC_IRQChannelSubPriority = 0; + timer_interrupt.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&timer_interrupt); + + GPIOA->BSRR = GPIO_Pin_15; + GPIOA->BRR = GPIO_Pin_15; + SPI3->DR = 0x090a; + Wait<64>(); + SPI3->DR = 0x0000; +} + +} // namespace stages + +extern "C" { + +void TIM2_IRQHandler() { + if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { + TIM_ClearITPendingBit(TIM2, TIM_IT_Update); + stages::FirmwareUpdateDac::GetInstance()->NextSample(); + } +} + +} \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_dac.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_dac.h new file mode 100644 index 00000000..85de5c3c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/firmware_update_dac.h @@ -0,0 +1,90 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Lightweight DAC driver used for the firmware update procedure. +// Initializes the I2S port as SPI, and relies on a timer for clock generation. + +#ifndef STAGES_DRIVERS_FIRMWARE_UPDATE_DAC_H_ +#define STAGES_DRIVERS_FIRMWARE_UPDATE_DAC_H_ + +#include "stmlib/stmlib.h" + +#include + +#include "stages/io_buffer.h" + +namespace stages { + +class FirmwareUpdateDac { + public: + FirmwareUpdateDac() { } + ~FirmwareUpdateDac() { } + + typedef uint16_t (*NextSampleFn)(); + + void Init(int sample_rate); + + void Start(NextSampleFn next_sample_fn) { + next_sample_fn_ = next_sample_fn; + TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); + } + + void Stop() { + TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); + } + + template + inline void Wait() { + Wait(); + __asm__("nop"); + } + + void NextSample() { + GPIOA->BSRR = GPIO_Pin_15; + + uint16_t sample = (*next_sample_fn_)(); + GPIOA->BRR = GPIO_Pin_15; + + sample <<= 4; + SPI3->DR = 0x0340 | (sample >> 12); + Wait<64>(); + SPI3->DR = (sample << 4); + } + + static FirmwareUpdateDac* GetInstance() { return instance_; } + + private: + NextSampleFn next_sample_fn_; + static FirmwareUpdateDac* instance_; + + DISALLOW_COPY_AND_ASSIGN(FirmwareUpdateDac); +}; + +template<> inline void FirmwareUpdateDac::Wait<0>() { } + +} // namespace stages + +#endif // STAGES_DRIVERS_FIRMWARE_UPDATE_DAC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/gate_inputs.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/gate_inputs.cc new file mode 100644 index 00000000..14380e64 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/gate_inputs.cc @@ -0,0 +1,125 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the six gate/trigger inputs. + +#include "stages/drivers/gate_inputs.h" + +#include + +namespace stages { + +using namespace std; +using namespace stmlib; + +struct GateInputDefinition { + GPIO_TypeDef* gpio; + uint16_t pin; +}; + +const GateInputDefinition gate_input_definition[] = { + { GPIOA, GPIO_Pin_11 }, + { GPIOA, GPIO_Pin_10 }, + { GPIOA, GPIO_Pin_9 }, + { GPIOA, GPIO_Pin_8 }, + { GPIOC, GPIO_Pin_8 }, + { GPIOC, GPIO_Pin_7 }, +}; + +void GateInputs::Init() { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); + + // Initialize probe. + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_Pin = GPIO_Pin_9; + GPIO_Init(GPIOC, &gpio_init); + + // Initialize inputs. + gpio_init.GPIO_Mode = GPIO_Mode_IN; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_UP; + + for (size_t i = 0; i < kNumChannels; ++i) { + gpio_init.GPIO_Pin = gate_input_definition[i].pin; + GPIO_Init(gate_input_definition[i].gpio, &gpio_init); + normalization_mismatch_count_[i] = 0; + previous_flags_[i] = 0; + normalized_[i] = false; + } + + normalization_probe_state_ = 0; + normalization_decision_count_ = 0; +} + +void GateInputs::ReadNormalization(IOBuffer::Block* block) { + ++normalization_decision_count_; + if (normalization_decision_count_ >= kProbeSequenceDuration) { + normalization_decision_count_ = 0; + for (size_t i = 0; i < kNumChannels; ++i) { + normalized_[i] = normalization_mismatch_count_[i] < kProbeSequenceDuration / 8; + normalization_mismatch_count_[i] = 0; + } + } + + int expected_value = normalization_probe_state_ >> 31; + for (size_t i = 0; i < kNumChannels; ++i) { + int read_value = previous_flags_[i] & GATE_FLAG_HIGH; + normalization_mismatch_count_[i] += read_value ^ expected_value; + block->input_patched[i] = !normalized_[i]; + } + + normalization_probe_state_ = 1103515245 * normalization_probe_state_ + 12345; + if (normalization_probe_state_ >> 31) { + GPIOC->BSRR = GPIO_Pin_9; + } else { + GPIOC->BRR = GPIO_Pin_9; + } +} + +void GateInputs::Read(const IOBuffer::Slice& slice, size_t size) { + for (size_t i = 0; i < kNumChannels; ++i) { + previous_flags_[i] = ExtractGateFlags( + previous_flags_[i], + !(gate_input_definition[i].gpio->IDR & gate_input_definition[i].pin)); + slice.block->input[i][slice.frame_index] = previous_flags_[i]; + } + + // Extend gate input data to the next samples. + for (size_t j = 1; j < size; ++j) { + for (size_t i = 0; i < kNumChannels; ++i) { + slice.block->input[i][slice.frame_index + j] = \ + previous_flags_[i] & GATE_FLAG_HIGH; + } + } +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/gate_inputs.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/gate_inputs.h new file mode 100644 index 00000000..4c07bcc2 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/gate_inputs.h @@ -0,0 +1,70 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the six gate/trigger inputs. + +#ifndef STAGES_DRIVERS_GATE_INPUTS_H_ +#define STAGES_DRIVERS_GATE_INPUTS_H_ + +#include "stmlib/stmlib.h" + +#include "stages/io_buffer.h" + +namespace stages { + +class GateInputs { + public: + GateInputs() { } + ~GateInputs() { } + + void Init(); + void Read(const IOBuffer::Slice& slice, size_t size); + void ReadNormalization(IOBuffer::Block* block); + + inline bool is_normalized(int i) const { + return normalized_[i]; + } + + inline bool value(int i) const { + return previous_flags_[i] & stmlib::GATE_FLAG_HIGH; + } + + private: + static const int kProbeSequenceDuration = 64; + + stmlib::GateFlags previous_flags_[kNumChannels]; + + uint32_t normalization_probe_state_; + bool normalized_[kNumChannels]; + int normalization_mismatch_count_[kNumChannels]; + int normalization_decision_count_; + + DISALLOW_COPY_AND_ASSIGN(GateInputs); +}; + +} // namespace stages + +#endif // STAGES_DRIVERS_GATE_INPUTS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/leds.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/leds.cc new file mode 100644 index 00000000..7fd534b2 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/leds.cc @@ -0,0 +1,140 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the sliders and UI LEDs. + +#include "stages/drivers/leds.h" + +#include + +#include + +namespace stages { + +using namespace std; + +struct SliderLedDefinition { + GPIO_TypeDef* gpio; + uint16_t pin; +}; + +const uint16_t kPinClk = GPIO_Pin_6; +const uint16_t kPinEnable = GPIO_Pin_7; +const uint16_t kPinData = GPIO_Pin_5; + +const SliderLedDefinition slider_led_definition[kNumLEDs] = { + { GPIOA, GPIO_Pin_12 }, + { GPIOC, GPIO_Pin_13 }, + { GPIOC, GPIO_Pin_14 }, + { GPIOC, GPIO_Pin_15 }, + { GPIOA, GPIO_Pin_2 }, + { GPIOB, GPIO_Pin_2 } +}; + + +/* static */ +const uint16_t red_bitmask[] = { + 1 << 5, 1 << 7, 1 << 2, 1 << 9, 1 << 10, 1 << 12 +}; + +/* static */ +const uint16_t green_bitmask[] = { + 1 << 4, 1 << 6, 1 << 3, 1 << 8, 1 << 11, 1 << 13 +}; + + +void Leds::Init() { + // GPIOs for sliders. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + + for (int i = 0; i < kNumLEDs; ++i) { + const SliderLedDefinition& d = slider_led_definition[i]; + gpio_init.GPIO_Pin = d.pin; + GPIO_Init(d.gpio, &gpio_init); + } + + // GPIOs for UI leds. + gpio_init.GPIO_Pin = kPinClk | kPinEnable | kPinData; + GPIO_Init(GPIOB, &gpio_init); + + Clear(); +} + +void Leds::Clear() { + fill(&colors_[0], &colors_[LED_GROUP_SLIDER + kNumLEDs], LED_COLOR_OFF); +} + +void Leds::Write() { + uint16_t leds_data = 0; + + for (int i = 0; i < kNumLEDs; ++i) { + const SliderLedDefinition& d = slider_led_definition[i]; + if ((colors_[LED_GROUP_SLIDER + i] & 0x008000) >> 15) { + d.gpio->BSRR = d.pin; + } else { + d.gpio->BRR = d.pin; + } + + if (colors_[LED_GROUP_UI + i] & 0x800000) { + leds_data |= red_bitmask[i]; + } + if (colors_[LED_GROUP_UI + i] & 0x008000) { + leds_data |= green_bitmask[i]; + } + } + + // GPIO_WriteBit(GPIOB, kPinEnable, Bit_RESET); + GPIOB->BRR = kPinEnable; + + for (uint16_t i = 0; i < 16; ++i) { + // GPIO_WriteBit(GPIOB, kPinClk, Bit_RESET); + GPIOB->BRR = kPinClk; + + if (leds_data & 0x8000) { + // GPIO_WriteBit(GPIOB, kPinData, Bit_SET); + GPIOB->BSRR = kPinData; + } else { + // GPIO_WriteBit(GPIOB, kPinData, Bit_RESET); + GPIOB->BRR = kPinData; + } + leds_data <<= 1; + + // GPIO_WriteBit(GPIOB, kPinClk, Bit_SET); + GPIOB->BSRR = kPinClk; + } + // GPIO_WriteBit(GPIOB, kPinEnable, Bit_SET); + GPIOB->BSRR = kPinEnable; +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/leds.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/leds.h new file mode 100644 index 00000000..e4747d0d --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/leds.h @@ -0,0 +1,75 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the sliders and UI LEDs. + +#ifndef STAGES_DRIVERS_LEDS_H_ +#define STAGES_DRIVERS_LEDS_H_ + +#include "stmlib/stmlib.h" + +namespace stages { + +const int kNumLEDs = 6; + +enum LedGroup { + LED_GROUP_UI, + LED_GROUP_SLIDER = kNumLEDs, +}; + +enum LedColor { + LED_COLOR_OFF = 0, + LED_COLOR_RED = 0xff0000, + LED_COLOR_GREEN = 0x00ff00, + LED_COLOR_YELLOW = 0xffff00, +}; + +class Leds { + public: + Leds() { } + ~Leds() { } + + void Init(); + void Write(); + void Clear(); + + void set(int index, uint32_t color) { + colors_[index] = color; + } + + private: + uint32_t colors_[LED_GROUP_SLIDER + kNumLEDs]; + + DISALLOW_COPY_AND_ASSIGN(Leds); +}; + +#define TIC GPIOB->BSRR = GPIO_Pin_2; +#define TOC GPIOB->BRR = GPIO_Pin_2; + + +} // namespace stages + +#endif // STAGES_DRIVERS_LEDS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/pots_adc.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/pots_adc.cc new file mode 100644 index 00000000..3f4a7fcc --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/pots_adc.cc @@ -0,0 +1,181 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 12-bit SAR ADC scanning pots and sliders. + +#include "stages/drivers/pots_adc.h" + +#include + +namespace stages { + +/* static */ +uint8_t PotsAdc::mux_address_to_pot_index_[kNumMuxAddresses] = { + 0xff, + 2, + 4, + 1, + 3, + 0, + 0xff, + 5, +}; + +/* static */ +uint8_t PotsAdc::mux_address_to_slider_index_[kNumMuxAddresses] = { + 3, + 2, + 1, + 4, + 0, + 0xff, + 5, + 0xff, +}; + +void PotsAdc::Init() { + // Enable ADC clock. + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); + RCC_ADCCLKConfig(RCC_PCLK2_Div8); + + // Enable GPIO clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + + // Enable DMA1 clock. + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); + + DMA_InitTypeDef dma_init; + ADC_InitTypeDef adc_init; + GPIO_InitTypeDef gpio_init; + + // Configure the two analog inputs for the pots and sliders muxed signals. + gpio_init.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Mode = GPIO_Mode_AN; + GPIO_Init(GPIOA, &gpio_init); + + // Configure the address lines for the MUX. + gpio_init.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; + gpio_init.GPIO_Mode = GPIO_Mode_OUT; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &gpio_init); + GPIO_ResetBits(GPIOA, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); + + // Use DMA to automatically copy ADC data register to values_ buffer. + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; + dma_init.DMA_MemoryBaseAddr = (uint32_t)&adc_values_[0]; + dma_init.DMA_DIR = DMA_DIR_PeripheralSRC; + dma_init.DMA_BufferSize = 2; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + dma_init.DMA_Mode = DMA_Mode_Circular; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + DMA_Init(DMA1_Channel1, &dma_init); + DMA_Cmd(DMA1_Channel1, ENABLE); + + // Init ADC1 + adc_init.ADC_ScanConvMode = ENABLE; + adc_init.ADC_ContinuousConvMode = DISABLE; + adc_init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; + adc_init.ADC_DataAlign = ADC_DataAlign_Left; + adc_init.ADC_NbrOfChannel = 2; + ADC_Init(ADC1, &adc_init); + + // Sample rate: 17.85 kHz + // 72000 / 8 / (12.5 * 2 + 239.5 * 2) + ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_239Cycles5); + ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_239Cycles5); + + // Enable and calibrate ADC1. + ADC_Cmd(ADC1, ENABLE); + ADC_ResetCalibration(ADC1); + while (ADC_GetResetCalibrationStatus(ADC1)); + ADC_StartCalibration(ADC1); + while (ADC_GetCalibrationStatus(ADC1)); + ADC_DMACmd(ADC1, ENABLE); + + mux_address_ = 0; + conversion_done_ = true; + pot_index_ = 0xff; + slider_index_ = 0xff; +} + +void PotsAdc::DeInit() { + ADC_DMACmd(ADC1, DISABLE); + ADC_Cmd(ADC1, DISABLE); +} + +void PotsAdc::Convert() { + if (conversion_done_) { + uint8_t pot_index = mux_address_to_pot_index_[mux_address_]; + if (pot_index != 0xff) { + values_[ADC_GROUP_POT + pot_index] = adc_values_[0]; + } + pot_index_ = pot_index; + + uint8_t slider_index = mux_address_to_slider_index_[mux_address_]; + if (slider_index != 0xff) { + // Due to the odd PCB layout, some sliders are rotated 180 degrees. + // We need to flip the readout for those. + uint16_t mask = slider_index == 0 || slider_index == 5 ? 0xffff : 0x0000; + values_[ADC_GROUP_SLIDER + slider_index] = adc_values_[1] ^ mask; + } + slider_index_ = slider_index; + + mux_address_ = (mux_address_ + 1) % 8; + + // GPIO_WriteBit(GPIOA, GPIO_Pin_3, static_cast(mux_address_ & 4)); + // GPIO_WriteBit(GPIOA, GPIO_Pin_4, static_cast(mux_address_ & 2)); + // GPIO_WriteBit(GPIOA, GPIO_Pin_5, static_cast(mux_address_ & 1)); + if (mux_address_ & 4) { + GPIOA->BSRR = GPIO_Pin_3; + } else { + GPIOA->BRR = GPIO_Pin_3; + } + if (mux_address_ & 2) { + GPIOA->BSRR = GPIO_Pin_4; + } else { + GPIOA->BRR = GPIO_Pin_4; + } + if (mux_address_ & 1) { + GPIOA->BSRR = GPIO_Pin_5; + } else { + GPIOA->BRR = GPIO_Pin_5; + } + } else { + // ADC_SoftwareStartConv(ADC1); + ADC1->CR2 |= (uint32_t)(ADC_CR2_SWSTART | ADC_CR2_EXTTRIG); + } + conversion_done_ = !conversion_done_; +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/pots_adc.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/pots_adc.h new file mode 100644 index 00000000..db1d911b --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/pots_adc.h @@ -0,0 +1,85 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Drivers for the 12-bit SAR ADC scanning pots and sliders. + +#ifndef STAGES_DRIVERS_POTS_ADC_H_ +#define STAGES_DRIVERS_POTS_ADC_H_ + +#include "stmlib/stmlib.h" + +namespace stages { + +const int kNumAdcChannels = 6; +const int kNumMuxAddresses = 8; + +enum AdcGroup { + ADC_GROUP_POT, + ADC_GROUP_SLIDER = kNumAdcChannels, +}; + +class PotsAdc { + public: + PotsAdc() { } + ~PotsAdc() { } + + void Init(); + void DeInit(); + void Convert(); + + inline int32_t value(AdcGroup group, int channel) const { + return static_cast(values_[channel + group]); + } + + inline float float_value(AdcGroup group, int channel) const { + return static_cast(value(group, channel)) / 65536.0f; + } + + inline uint8_t pot_index() const { + return pot_index_; + } + + inline uint8_t slider_index() const { + return slider_index_; + } + + private: + uint16_t adc_values_[2]; + uint16_t values_[ADC_GROUP_SLIDER + kNumAdcChannels]; + int mux_address_; + bool conversion_done_; + uint8_t pot_index_; + uint8_t slider_index_; + + static uint8_t mux_address_to_pot_index_[kNumMuxAddresses]; + static uint8_t mux_address_to_slider_index_[kNumMuxAddresses]; + + DISALLOW_COPY_AND_ASSIGN(PotsAdc); +}; + +} // namespace stages + +#endif // STAGES_DRIVERS_POTS_ADC_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/serial_link.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/serial_link.cc new file mode 100644 index 00000000..b05474d8 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/serial_link.cc @@ -0,0 +1,215 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// UART driver for agreeable conversations with the neighbors. + +#include "stages/drivers/serial_link.h" + +namespace stages { + +struct DirectionDefinition { + GPIO_TypeDef* gpio; + uint16_t tx_rx_pins; + uint16_t rx_pin_source; + uint16_t tx_pin_source; + + USART_TypeDef* usart; + + DMA_Channel_TypeDef* tx_dma_channel; + DMA_Channel_TypeDef* rx_dma_channel; + uint32_t tx_complete_flag; + uint32_t rx_complete_flag; + uint32_t rx_half_complete_flag; +}; + +const DirectionDefinition direction_definition[] = { + { GPIOB, + GPIO_Pin_8 | GPIO_Pin_9, + GPIO_PinSource8, + GPIO_PinSource9, + USART3, + DMA1_Channel2, + DMA1_Channel3, + DMA1_FLAG_TC2, + DMA1_FLAG_TC3, + DMA1_FLAG_HT3, + }, + + { GPIOC, + GPIO_Pin_4 | GPIO_Pin_5, + GPIO_PinSource4, + GPIO_PinSource5, + USART1, + DMA1_Channel4, + DMA1_Channel5, + DMA1_FLAG_TC4, + DMA1_FLAG_TC5, + DMA1_FLAG_HT5, + } +}; + +void SerialLink::Init( + SerialLinkDirection direction, + uint32_t baud_rate, + uint8_t* rx_buffer, + size_t rx_block_size) { + direction_ = direction; + rx_buffer_ = rx_buffer; + rx_block_size_ = rx_block_size; + + // Initialize clocks. + if (direction == SERIAL_LINK_DIRECTION_LEFT) { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); + } else { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); + } + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); + + const DirectionDefinition& definition = direction_definition[direction]; + + // Initialize GPIO. + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_Mode = GPIO_Mode_AF; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_PuPd = GPIO_PuPd_UP; + gpio_init.GPIO_Pin = definition.tx_rx_pins; + + GPIO_Init(definition.gpio, &gpio_init); + GPIO_PinAFConfig(definition.gpio, definition.tx_pin_source, GPIO_AF_7); + GPIO_PinAFConfig(definition.gpio, definition.rx_pin_source, GPIO_AF_7); + + // Initialize USART. + USART_InitTypeDef usart_init; + usart_init.USART_BaudRate = baud_rate; + usart_init.USART_WordLength = USART_WordLength_8b; + usart_init.USART_StopBits = USART_StopBits_1; + usart_init.USART_Parity = USART_Parity_No; + usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + usart_init.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; + + USART_Init(definition.usart, &usart_init); + USART_Cmd(definition.usart, ENABLE); + + // Initialize DMA channels. + DMA_InitTypeDef dma_init; + dma_init.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + dma_init.DMA_MemoryInc = DMA_MemoryInc_Enable; + dma_init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + dma_init.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + dma_init.DMA_Mode = DMA_Mode_Normal; + dma_init.DMA_Priority = DMA_Priority_High; + dma_init.DMA_M2M = DMA_M2M_Disable; + dma_init.DMA_BufferSize = 0; + dma_init.DMA_MemoryBaseAddr = 0; + + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&(definition.usart->TDR); + dma_init.DMA_DIR = DMA_DIR_PeripheralDST; + DMA_Cmd(definition.tx_dma_channel, DISABLE); + DMA_DeInit(definition.tx_dma_channel); + DMA_Init(definition.tx_dma_channel, &dma_init); + USART_DMACmd(definition.usart, USART_DMAReq_Tx | USART_DMAReq_Rx, ENABLE); + + dma_init.DMA_PeripheralBaseAddr = (uint32_t)&(definition.usart->RDR); + dma_init.DMA_DIR = DMA_DIR_PeripheralSRC; + dma_init.DMA_Mode = rx_block_size_ == 0 + ? DMA_Mode_Normal + : DMA_Mode_Circular; + dma_init.DMA_MemoryBaseAddr = (uint32_t)rx_buffer_; + dma_init.DMA_BufferSize = rx_block_size_ * 2; + + DMA_Cmd(definition.rx_dma_channel, DISABLE); + DMA_DeInit(definition.rx_dma_channel); + DMA_Init(definition.rx_dma_channel, &dma_init); + + if (rx_block_size_) { + DMA_Cmd(definition.rx_dma_channel, ENABLE); + } +} + +void SerialLink::Transmit(const void* buffer, size_t size) { + const DirectionDefinition& definition = direction_definition[direction_]; + + // Disable DMA channel. + definition.tx_dma_channel->CCR &= (uint16_t)(~DMA_CCR_EN); + + // Update size and buffer pointer. + definition.tx_dma_channel->CNDTR = size; + definition.tx_dma_channel->CMAR = (uint32_t)(buffer); + + // Clear DMA and USART TC flag. + // DMA1->IFCR = definition.tx_complete_flag; + // definition.usart->ICR = USART_FLAG_TC; + + // Enable DMA channel. + definition.tx_dma_channel->CCR |= DMA_CCR_EN; +} + +bool SerialLink::tx_complete() { + const DirectionDefinition& definition = direction_definition[direction_]; + return DMA1->ISR & definition.tx_complete_flag; +} + +void SerialLink::Receive(void* buffer, size_t size) { + const DirectionDefinition& definition = direction_definition[direction_]; + + // Disable DMA channel. + definition.rx_dma_channel->CCR &= (uint16_t)(~DMA_CCR_EN); + + // Update size and buffer pointer. + definition.rx_dma_channel->CNDTR = size; + definition.rx_dma_channel->CMAR = (uint32_t)(buffer); + + // Clear DMA and USART RXNE flag. + // DMA1->IFCR = definition.rx_complete_flag; + // definition.usart->ICR = USART_FLAG_RXNE; + + // Enable DMA channel. + definition.rx_dma_channel->CCR |= DMA_CCR_EN; +} + +bool SerialLink::rx_complete() { + const DirectionDefinition& definition = direction_definition[direction_]; + return DMA1->ISR & definition.rx_complete_flag; +} + +const uint8_t* SerialLink::available_rx_buffer() { + const DirectionDefinition& definition = direction_definition[direction_]; + uint32_t status = DMA1->ISR; + if (status & definition.rx_half_complete_flag) { + DMA1->IFCR = definition.rx_half_complete_flag; + return &rx_buffer_[0]; + } else if (status & definition.rx_complete_flag) { + DMA1->IFCR = definition.rx_complete_flag; + return &rx_buffer_[rx_block_size_]; + } else { + return NULL; + } +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/serial_link.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/serial_link.h new file mode 100644 index 00000000..5fb43b76 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/serial_link.h @@ -0,0 +1,89 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// UART driver for agreeable conversations with the neighbors. + +#ifndef STAGES_DRIVERS_SERIAL_LINK_H_ +#define STAGES_DRIVERS_SERIAL_LINK_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace stages { + +enum SerialLinkDirection { + SERIAL_LINK_DIRECTION_LEFT, + SERIAL_LINK_DIRECTION_RIGHT +}; + +class SerialLink { + public: + SerialLink() { } + ~SerialLink() { } + + void Init( + SerialLinkDirection direction, + uint32_t baud_rate, + uint8_t* rx_buffer, + size_t rx_block_size); + + void Transmit(const void* buffer, size_t size); + + template + void Transmit(const T& t) { + Transmit(&t, sizeof(T)); + } + + bool tx_complete(); + + // For polled RX: call Receive(destination, size); + // Then when rx_complete() is true, _destination has been filled with + // _size bytes. + void Receive(void* buffer, size_t size); + bool rx_complete(); + + // For continuous RX: returns NULL if no data is ready, or a pointer if + // a buffer has been received. + const uint8_t* available_rx_buffer(); + + template + inline const T* available_rx_buffer() { + return static_cast( + static_cast(available_rx_buffer())); + } + + private: + SerialLinkDirection direction_; + size_t rx_block_size_; + uint8_t* rx_buffer_; + + DISALLOW_COPY_AND_ASSIGN(SerialLink); +}; + +} // namespace stages + +#endif // STAGES_DRIVERS_SERIAL_LINK_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/switches.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/switches.cc new file mode 100644 index 00000000..56d6bf56 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/switches.cc @@ -0,0 +1,77 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the 6 front panel switches. + +#include "stages/drivers/switches.h" + +#include + +namespace stages { + +using namespace std; + +struct SwitchDefinition { + GPIO_TypeDef* gpio; + uint16_t pin; +}; + +const SwitchDefinition switch_definitions[] = { + { GPIOC, GPIO_Pin_0 }, + { GPIOC, GPIO_Pin_1 }, + { GPIOC, GPIO_Pin_2 }, + { GPIOC, GPIO_Pin_3 }, + { GPIOA, GPIO_Pin_0 }, + { GPIOA, GPIO_Pin_1 } +}; + +void Switches::Init() { + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); + RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); + + GPIO_InitTypeDef gpio_init; + gpio_init.GPIO_Mode = GPIO_Mode_IN; + gpio_init.GPIO_OType = GPIO_OType_PP; + gpio_init.GPIO_Speed = GPIO_Speed_2MHz; + gpio_init.GPIO_PuPd = GPIO_PuPd_UP; + + for (int i = 0; i < kNumSwitches; ++i) { + const SwitchDefinition& definition = switch_definitions[i]; + gpio_init.GPIO_Pin = definition.pin; + GPIO_Init(definition.gpio, &gpio_init); + } + fill(&switch_state_[0], &switch_state_[kNumSwitches], 0xff); +} + +void Switches::Debounce() { + for (int i = 0; i < kNumSwitches; ++i) { + const SwitchDefinition& definition = switch_definitions[i]; + switch_state_[i] = (switch_state_[i] << 1) | \ + GPIO_ReadInputDataBit(definition.gpio, definition.pin); + } +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/switches.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/switches.h new file mode 100644 index 00000000..12696a8e --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/switches.h @@ -0,0 +1,78 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Driver for the 6 front panel switches. + +#ifndef STAGES_DRIVERS_SWITCHES_H_ +#define STAGES_DRIVERS_SWITCHES_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace stages { + +const int kNumSwitches = 6; + +class Switches { + public: + Switches() { } + ~Switches() { } + + void Init(); + void Debounce(); + + inline bool released(int channel) const { + return switch_state_[channel] == 0x7f; + } + + inline bool just_pressed(int channel) const { + return switch_state_[channel] == 0x80; + } + + inline bool pressed(int channel) const { + return switch_state_[channel] == 0x00; + } + + inline bool pressed_immediate(int channel) const { + if (channel == 5) { + return !GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1); + } else if (channel == 0) { + return !GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0); + } else { + return false; + } + } + + private: + uint8_t switch_state_[kNumSwitches]; + + DISALLOW_COPY_AND_ASSIGN(Switches); +}; + +} // namespace stages + +#endif // STAGES_DRIVERS_SWITCHES_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/system.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/system.cc new file mode 100644 index 00000000..3046c870 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/system.cc @@ -0,0 +1,46 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// System level initialization. + +#include "stages/drivers/system.h" + +#include + +namespace stages { + +void System::Init(bool application) { + NVIC_SetVectorTable(NVIC_VectTab_FLASH, application ? 0x8000 : 0x0000); + IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); + IWDG_SetPrescaler(IWDG_Prescaler_16); +} + +void System::StartTimers() { + SysTick_Config(F_CPU / 1000); + IWDG_Enable(); +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/system.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/system.h new file mode 100644 index 00000000..3a0ed081 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/drivers/system.h @@ -0,0 +1,50 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// System-level initialization. + +#ifndef STAGES_DRIVERS_SYSTEM_H_ +#define STAGES_DRIVERS_SYSTEM_H_ + +#include "stmlib/stmlib.h" + +namespace stages { + +class System { + public: + System() { } + ~System() { } + + void Init(bool application); + void StartTimers(); + + private: + DISALLOW_COPY_AND_ASSIGN(System); +}; + +} // namespace stages + +#endif // STAGES_DRIVERS_SYSTEM_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/factory_test.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/factory_test.cc new file mode 100644 index 00000000..204842b9 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/factory_test.cc @@ -0,0 +1,205 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// CV reader. + +#include "stages/factory_test.h" + +#include + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/units.h" + +#include "stages/drivers/gate_inputs.h" +#include "stages/cv_reader.h" +#include "stages/resources.h" +#include "stages/settings.h" +#include "stages/ui.h" + +namespace stages { + +using namespace std; +using namespace stmlib; + +/* static */ +FactoryTest* FactoryTest::instance_; + +void FactoryTest::Start( + Settings* settings, + CvReader* cv_reader, + GateInputs* gate_inputs, + Ui* ui) { + instance_ = this; + + settings_ = settings; + cv_reader_ = cv_reader; + gate_inputs_ = gate_inputs; + ui_ = ui; + + calibration_data_ = 0; + calibration_first_adc_value_ = 0.0f; + + link_.Init( + SERIAL_LINK_DIRECTION_LEFT, + 9600, + rx_buffer_, + 1); +} + +/* static */ +void FactoryTest::ProcessFn(IOBuffer::Block* block, size_t size) { + FactoryTest::GetInstance()->Process(block, size); +} + +void FactoryTest::Process(IOBuffer::Block* block, size_t size) { + static float phase; + for (size_t i = 0; i < size; ++i) { + phase += 100.0f / static_cast(kSampleRate); + if (phase >= 1.0f) { + phase -= 1.0f; + } + + block->output[0][i] = settings_->calibration_data(0).dac_code( + phase < 0.2f ? 0.5f : -0.5f); + + block->output[1][i] = settings_->calibration_data(1).dac_code( + phase < 0.5f ? 0.5f : -0.5f); + + block->output[2][i] = settings_->calibration_data(2).dac_code( + phase < 0.8f ? 0.5f : -0.5f); + + block->output[3][i] = settings_->calibration_data(3).dac_code( + 0.5f * stmlib::Interpolate(lut_sine, phase, 1024.0f)); + + block->output[4][i] = settings_->calibration_data(4).dac_code( + -1.0f * phase + 0.5f); + + block->output[5][i] = settings_->calibration_data(5).dac_code( + 2.0f * (phase < 0.5f ? phase : 1.0f - phase) - 0.5f); + + for (size_t j = 0; j < kNumChannels; ++j) { + uint16_t dac_code = forced_dac_code_[j]; + if (dac_code) { + block->output[j][i] = dac_code; + } + } + } +} + +uint8_t FactoryTest::HandleRequest(uint8_t command) { + uint8_t argument = command & 0x1f; + command = command >> 5; + uint8_t reply = 0; + switch (command) { + case FACTORY_TEST_READ_POT: + reply = argument < kNumChannels + ? cv_reader_->raw_pot(argument) + : cv_reader_->raw_slider(argument - kNumChannels); + break; + + case FACTORY_TEST_READ_CV: + reply = cv_reader_->raw_cv(argument); + break; + + case FACTORY_TEST_READ_NORMALIZATION: + reply = gate_inputs_->is_normalized(argument) ? 255 : 0; + break; + + case FACTORY_TEST_READ_GATE: + reply = argument < kNumChannels + ? gate_inputs_->value(argument) + : ui_->switches().pressed(argument - kNumChannels); + break; + + case FACTORY_TEST_GENERATE_TEST_SIGNALS: + fill( + &forced_dac_code_[0], + &forced_dac_code_[kNumChannels], + 0); + break; + + case FACTORY_TEST_CALIBRATE: + { + int channel = argument >> 2; + int step = argument & 0x3; + if (step == 0) { + for (size_t i = 0; i < kNumChannels; ++i) { + forced_dac_code_[i] = settings_->dac_code(i, -0.125f); + } + } else if (step == 1) { + calibration_first_adc_value_ = cv_reader_->lp_cv(channel); + for (size_t i = 0; i < kNumChannels; ++i) { + forced_dac_code_[i] = settings_->dac_code(i, +0.25f); + } + } else { + float calibration_vm2 = calibration_first_adc_value_; + float calibration_vp4 = cv_reader_->lp_cv(channel); + float scale = 0.375f / (calibration_vp4 - calibration_vm2); + float offset = 0.25f - calibration_vp4 * scale; + + if (scale > -1.2f && scale < -0.8f) { + ChannelCalibrationData* cal = settings_->mutable_calibration_data( + channel); + cal->adc_scale = scale; + cal->adc_offset = offset; + settings_->SavePersistentData(); + ui_->set_slider_led(channel, true, 2); + } + } + } + break; + + case FACTORY_TEST_FORCE_DAC_CODE: + { + int channel = argument >> 2; + int step = argument & 0x3; + if (step == 0) { + forced_dac_code_[channel] = 0x9ff1; + } else if (step == 1) { + forced_dac_code_[channel] = 0x416b; + } + else { + ChannelCalibrationData* cal = settings_->mutable_calibration_data( + channel); + cal->dac_offset = static_cast(calibration_data_ & 0xffff); + cal->dac_scale = -static_cast(calibration_data_ >> 16); + forced_dac_code_[channel] = settings_->dac_code( + channel, 0.125f); + settings_->SavePersistentData(); + ui_->set_slider_led(channel, true, 1); + } + } + break; + + case FACTORY_TEST_WRITE_CALIBRATION_DATA_NIBBLE: + calibration_data_ <<= 4; + calibration_data_ |= argument & 0xf; + break; + } + return reply; +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/factory_test.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/factory_test.h new file mode 100644 index 00000000..648af9e1 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/factory_test.h @@ -0,0 +1,105 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// CV reader. + +#ifndef STAGES_FACTORY_TEST_H_ +#define STAGES_FACTORY_TEST_H_ + +#include "stmlib/stmlib.h" + +#include "stages/drivers/serial_link.h" +#include "stages/io_buffer.h" + +namespace stages { + +enum FactoryTestCommand { + FACTORY_TEST_READ_POT, + FACTORY_TEST_READ_CV, + FACTORY_TEST_READ_GATE, + FACTORY_TEST_GENERATE_TEST_SIGNALS, + FACTORY_TEST_CALIBRATE, + FACTORY_TEST_READ_NORMALIZATION, + FACTORY_TEST_FORCE_DAC_CODE, + FACTORY_TEST_WRITE_CALIBRATION_DATA_NIBBLE, +}; + +class Settings; +class CvReader; +class GateInputs; +class Ui; + +class FactoryTest { + public: + FactoryTest() { instance_ = NULL; } + ~FactoryTest() { } + + void Start( + Settings* settings, + CvReader* cv_reader, + GateInputs* gate_inputs, + Ui* ui); + + inline void Poll() { + if (running()) { + const uint8_t* command = link_.available_rx_buffer(); + if (command) { + tx_buffer_[0] = HandleRequest(*command); + link_.Transmit(tx_buffer_); + } + } + } + + static void ProcessFn(IOBuffer::Block* block, size_t size); + void Process(IOBuffer::Block* block, size_t size); + + inline bool running() const { return instance_ != NULL; } + static FactoryTest* GetInstance() { return instance_; } + + private: + uint8_t HandleRequest(uint8_t command); + + static FactoryTest* instance_; + + SerialLink link_; + uint8_t tx_buffer_[1]; + uint8_t rx_buffer_[2]; + + Settings* settings_; + CvReader* cv_reader_; + GateInputs* gate_inputs_; + Ui* ui_; + + uint16_t forced_dac_code_[kNumChannels]; + uint32_t calibration_data_; + float calibration_first_adc_value_; + + DISALLOW_COPY_AND_ASSIGN(FactoryTest); +}; + +} // namespace stages + +#endif // STAGES_FACTORY_TEST_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/Stages.xlsx b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/Stages.xlsx new file mode 100644 index 00000000..125420b9 Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/Stages.xlsx differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/panel/stages_v70.ai b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/panel/stages_v70.ai new file mode 100644 index 00000000..3fbb40b2 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/panel/stages_v70.ai @@ -0,0 +1,1137 @@ +%PDF-1.5 %âãÏÓ +1 0 obj <>/OCGs[5 0 R 6 0 R 27 0 R 28 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + 2017-09-15T13:40:04+02:00 + 2018-10-05T11:32:30+02:00 + Adobe Illustrator CC 2017 (Macintosh) + 2018-10-05T11:32:30+02:00 + + + + 144 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACQAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9OWNjZGytybeOvpp+wv8 o9sqhCPCNm/Llnxnc83S2dq0whSGOMceTP6aFjvSiVBG37W3h44mAuqWOSQFkk/H8fBu3tLRw6vb xFo24FgigHYGo++mGMR3BZ5JDkTv5qv1Cx/5Z4v+AX+mS4I9zDxZ95+bvqFj/wAs8X/AL/THgj3L 4s+8/N31Cx/5Z4v+AX+mPBHuXxZ95+bvqFj/AMs8X/AL/THgj3L4s+8/N31Cx/5Z4v8AgF/pjwR7 l8Wfefm76hY/8s8X/AL/AEx4I9y+LPvPzd9Qsf8Alni/4Bf6Y8Ee5fFn3n5u+oWP/LPF/wAAv9Me CPcviz7z83fULH/lni/4Bf6Y8Ee5fFn3n5u+oWP/ACzxf8Av9MeCPcviz7z83fULH/lni/4Bf6Y8 Ee5fFn3n5u+oWP8Ayzxf8Av9MeCPcviz7z81B7K2edokiijCKrlhGhJLFgBuOnw5AwBNNgyyAskn 4r7e1s5IuTW0XIFlaiLSqMVJG3emGMQRyDGeSQPM/N0ltbRT2zRRIjGQglVANPTfwxMQCKH4pROR Bs9P0hUsWX6jb7j+6T/iIyUPpDHL9Z95XyxxSgc+o6MCVI+RBBwmNsYyI5LkEaKFSiqOgGIFIJJ5 ruS+IwodyXxGKu5L4jFXcl8RiruS+IxV3JfEYq7kviMVdyXxGKu5L4jFXcl8RiruS+IxV3JfEYqp yxQy0L9RtUEqaeFQRt7YDEFlGZHJevBVCrQKBQAbAAYaYk2o3BBmtaH/AHaf+TT5GXMfjo2Q5S93 6Qwu38v6u9vEy2zcWVSPii6Ee8mGH0hGX6j71RfLur13tnI7fHF/1U3yTW7/AA7rNB/oz7b/AGov +a8VXHy9q3FQLV678jyi3r/z0xVb/h3Wdv8ARn8D8UXT/g8Vd/h3WO1s/TarRf8ANeKrl8vaqAQ1 q52p9uLr/wAjB/n2xVb/AId1j/lmfcb/ABRfh8e2KuPl7WKf7zPWnXlF/wA14q4+XdY3pbP4D4ov +a8Vbby9q5rS1YeFHi6/TIcVa/w7rFT/AKM9D/lxD7vjxV3+HdY3/wBGf/gov+a8VXf4f1bjT6q1 a15cov8AqpTFVv8Ah3WN/wDRn67fFF/zXirj5d1fals48fjiP/G+Ktx+XtXU1a1Zhv8AtRdxt0kH TFUZo2k6haapby3ELRxkuASyHcoxp8LMchLmPx0bIcj7v0hkVo6pp0LuaKsKsx8AFBOCBqI9zLIL mR5tj64/xApED0RlLt9JDKPox9RR6R5/j3L4pWLGOQASqAduhB7j+nbCD0KJR6jkulkWNC5qdwAB 1JY0A+knCTTGMbKlS+O/OJf8jizfRy5L/wARyPq8mdw81SKXmGBHF0PF160NAdj32NckDbGUadLL w4hRykc0Ra07V3PYYk0sY37lOl8N+cb/AORxZa/7Lk36sj6mXo81WKRZEDrUVqCD1BBoQfkckDbC UaNLJZX5iKIAyEVJPRR0qafgO+AnoGUYirPJaTeRguxSVR1VFKNT2qz1Ptg3CfSfJWVlZQymqsKg juDkwWBFKTySu7Rw8QU+27AkAkVpQEVNPfIknkGQiALLRkuIfimKPH+0yqU4+5BLVHj4YLI5pqJ5 c1fJtah6k8pb0SqIpKl3BapBoaAFdge9chZPJsoDm2sk0bqk/Fg5osigqK0rQglvvrhsjmpAIsNX H99a/wDGU/8AJp8Zcx+Oiw5S936QpRo76TEqCreihVezEAHifZuhyIFw+DORrIb7yqvdxj0SvxCZ /THahoTuD4cemTBtpII5uB9S7DLusSMjHtyYqaD5cN8jzLPlH3t3II9KUCvpPyYDrQqVP3cq4Zd6 IdR3qqsrKGUgqRUEbgg5JgRSjARJNLOPsMFRD2YLU8h9L0+jIR3Ntk9gA6f4LiKZjSMK8bHsOZUg n2+Cn04y2IKx3BHVWZlVSzEKo3JOwGTJYAWpWqsI2Ygr6js4Q7UBO23ao3PvXIxZZDv7miQl4WbZ ZUVUPbkhY0+nltg5STzj7lWWVIk5OdugHck9APc5ImmEYknZZaxtHbQxt9pEVW+YFMERQDLIbkT5 rYSEuJ0bZpGDxg9wEVTT5Fd8A5lMt4g9363XpBt3hB/eTKY0X3YUr8hWpxnyrvXF9V9Ar5NrQkcy 29pIG3e2Vi692C1Ib/Zjf55CHc2ZNzfQ/ivgvmcSiKJftuySEfyqrB6n58aYy7lhtZbuP761/wCM p/5NPhlzH46LDlL3fpDrD/eG3/4xJ/xEYw+kLl+s+8ofVLOJxFcfV1maKRXkAUM7LQqaeNA1aYTE HoxGSQ5Erl1TTUUKr8FGwXgwp7UpthAYk2u/S+n/AO/f+Fb+mKqDXWhsxZljLE1JMRJJP+xyPAO5 mMsh1KlrPmjTNK0a71WUvLb2YUyLGvxEyMEUDlxG7HLceMylQcTV6mODGckuUf7Er078xtEv7Wyn jinVb0kcWVapRzH8VDQ7jt2zA1+thpsoxT3Mu7zcjsz/AAzB40Nhvz57JVefmt5M0/VJLGawuY7i G4ktkf0IVLSQlVLKpkEqqWb4GdF5UJHw0JyhAdzM5ZHqWm/O/wAnmQJbw3t0vO+RpII4mC/o+hkY r6ofi6srIQv2TV+IrSTBWj/NSxuoLR4tB1CeO89BXgrZepEbq4e2t/VDXAjpI8L/AGXJHceCQkGu SWn88vIEFxJDFZXZvooxK1tHBCJPTa1julbkZFSjLKFFW+0D23wCAHIMjkkeZKezfmdosGoaRYz2 t1DPq8UMyK6xn0RcmkaycHcE168CQPHImdGnO0/ZuTLhllFVH9DJLi+00loZ2DcTRkZCwqPoOSIv m68SI5LIr/R4qmIrHXrxjIr9y4iIHJMpk8yqfpfT/wDfv/Ct/TCxQ9/c2V5ayQRJ9ZmdWSJeBNCw pUkiijxOAxB5pjMjkUfBBFBGI40VAOoUAAmlK7YgAcllInmsuP761/4yn/k0+CXMfjozhyl7v0h1 h/vDb/8AGJP+IjGH0hcv1n3lc9xRyiRvKV+2U40Fd6fEV3p4YmSBDayaVEdXRXQ1VgGU+IO4wg2x Io03hQoNdqvI8GMSEh5Rx4imx78tvlkONsGPz37mr+O1nga1uYBdRzgq1uyqwZe9Q3w0+eS4+E7c 2s4hMESrh63yQ9ppejrFDFDYRQrZGkMPpoPSJ+L4eNRvy5bfryucI5JCUhch382WOPgx4IemHcNg gF8s+UnkaX9C2yC4keU3AhiUPJcEF3PH4qyEAkkbn3yYmyOPz3RFn5P8q2SSJZ6Ta26TQG1lSKJE DQMqoYyFAqpWNR9AyTW608reWNMtnW10+C3t1dLhlVNg8B5xsBv9g7infEmkgWaCGHlHyjIjWsuh 28ccp5FHijo5WJYP2S24iULv+yMiJMjDawbRX6H0OKS29LS4pH01RHayLHGTAAKhULEMKA12wEi+ VtsJzEeES4Yy6b7pk08YiWQfGHp6YXq3LpStMJltbSIG6dFN6jMpRo3UAlGpWhrQ/CWHY4g2so15 qmSYqcswjKqFZ3avFFpWg6ncgUwE0yjG24phIDsVZTxZD1BpXelR0OINrKNKdx/fWv8AxlP/ACaf BLmPx0ZQ5S936Q6w/wB4bf8A4xJ/xEYw+kLl+s+8ttDKHZoZAnqUMgZeW4FKjcUNB7/1TE9ECQrc clSKNY40jX7KAKvyAphAoUxkbNrsKEO1o5DxiQC3kJLpxq3xGrANXoa+GQMenRtGQc63CpLEzMrx sElSoDEchRqVBFR4DCQwjKtjydDEULM7c5H+0wFBQbAAVNB9OEBZSvlyU0tXASNpAYI+JRAtG+D7 IZqmtKdgMiI9OjM5BzrcojJtS2WNZIyjdD3HUEbgj3BwEWmMqNqaQymRXmkDlK8Aq8QCRSpqW3pg ET1ZGQqgHNDMJHaKQIJDVwy8jUALUbimwx4T0SJCtxybNsohjjQ8TDT0mO9Copv47bHHh29yOPck 9XRROrtJIwaRgFJUcRRakbEt/Me+IHUrKQIoclXJMFOWJmZZI2CSICASOQo1Kgio8B3yJDOMq2PJ 0MRjDFm5O7cnYCgrQDYb9hhApEpWsuP761/4yn/k0+CXMfjoyhyl7v0h1h/vDb/8Yk/4iMYfSFy/ WfeVkEENxCk86CR5VD/FuF5CtFr0p7ZGMQRZZTmYkgbUqWxas0ZJIifipJqaFFbcnr9rJR6sJ9D3 hdcyGK3llAqY0ZgD0qBXDI0CUQjcgFn1K3O7rzl7zH7dfEMNx9GR4Ay8WXTl3LrV3eGrmrKzoW8e DFa/TTDE7ImKOzrp2SGqmhZkSvcB3Cmn34yOy4xZ+f3LTZQAExr6cvaUfbr4k9W+nrg4AnxT13Dy z84/zY81eVH0ey8u6dFc3epQPdSyzI0oUKyIsaRq8RNXkAZuXwrvTJRNi2M41IjuZr5L8y3Hmfyn o2rzwCzl1GIyXEUb8lDISrCNx1DEclofs98EuYDKHIlO54IbeJpoEETRjlxQcQ9P2SBsa9B4ZGUQ BYZRkZGjvaKyxpUJAJbgwt/dogZlrsxYkUPsOO471yB3NNg2jfVa0cdu8RhUIrvxeNdgQQdwvSo6 k+FcSK5JEjIG0Tk2pDemlxNKJRySJgixn7P2QxJHQ/a7+GQqybbbMQK6toohuVij2jdGbh2UoVHw +FeXTECjQQTxRs827j++tf8AjKf+TT4Zcx+Oiw5S936Q6w/3ht/+MSf8RGMPpC5frPvKWa3AVu9I 9OVo1a++x8FATbzGq8o5N/pHzx4e4o4+8WnEUaxrQVJJqzHqSepOECmMpWuIBBBFQeowoSS4tnHm bT0Wd1T6le0X4KgCW12FY2an+zHyPaPD5tnGO4J0iKiBFFFXYDCBTAmzbnRXUqwqD9HTcEEYkWoN JLa27P5i1NJJmdPq9pyU8KsC0+zUjU0/2R+juOHvLMTA3A3Sb8ydY8h2sFnaeatMTVxIxltrVoIr goV2MlJSoXrTrvmRhwSycnVdodqYtLXHZMu78BkWjXWlanotndaXSOwdAbQRqI/TC1TiFpReNCtO mVZMZBo8w5um1MckBOG8ZIbQICzagXkLhb6Y8fhoSONGbjHHv9+Q4e8t/H3Ck7yTBTlhEhVgzI61 CutKgHqNwR28MBFsoypKfKMNfL2myO/qEQLwHw8VqKHjxSP7yv3b4OHfdJltQ2TrJMEp80xf86/q syOY3FlPU/CVYCJiAwZJBT/YnImO9sxLajumUUHBi7OZJCKc2psPAAAAYiNIlK9uQWXH99a/8ZT/ AMmnxlzH46Mocpe79IdYf7w2/wDxiT/iIxh9IXL9Z95SzWbhze6ascMj+jfAOV6GttIabSJ/MPtA j26Y8XkvBsCSN/f+pN4ZRLDHKoIEihgD1AYV3pXCDYtjKNEjuX4WKR3V4w8wWk4hlMUVnfKxFKHj NbAn+8C/sn7S8vAj4qw49rptGLcCxZ9/6k8ybU7FUjsbxm1y9mMMqxTQWQUmlBzaUA/3jL+0PsqD 412yAnsDTacVEixY9/6mPfmfovl7Umsvr/1gXqBxEbXjUxkjkH5gilelMp1HbI0dCuIy6ODqPZ+G voyPDw9WS+XItL0/y3ZQ6ashsY0VIVahkJZ6HlXiORdjXtlsdUM0RkH8Tfg0I04GEco/238ebWhT usl6kkUierfTcGbpWgam8kh6L+zRfbJcXk28GxIPL3pzkmCnNN6XD4GdnbiqrStaFv2io6LkSaZR jaVeUpi2hWMLI6PHbxEl678gR+08r/s/tNiJWaSYUAbTnJMEp81TMNB1KFEdnksrkgp+zSMiuzRt +1+ya5Eyo0zjCwTaZQT+rzBRo2jbiytxrXiG/ZLfzYxlayjVb3ay4/vrX/jKf+TT4y5j8dEw5S93 6Q6w/wB4bf8A4xJ/xEYw+kLl+s+8qa21vNcSNNGsjQXAlhLAHg/oqvJa9DxYj6cY8z+Oiz5R936S qWH+8Nv/AMYk/wCIjGH0hcv1n3lXyTWlsltbtaT3LRqbiJLuKOYgc1SSTk6g9QGMak/IZUfpPxcg f3kf839CZZa47sVS2K2t0s4bhY1WeZbRJZQAGZY3BQMe/HmafPKv4R8HIP8AeS/zv0sU/M7XtG02 SyhurS4ur2VXZBbMIyIgQG5Eq9QT2p92Yeu0ePNXFdju2dn2RpsmQSMSIxHf3si0O80+88s6fc6e jRWchhMccn21pMAwb35A1zJxY4wxiMeQr73B1EJwzSE95b/cmDW1vBND6Max+rcNLLxAHJ2ifkxp 1Jy6XMfjo40OUvd+kIvJNahcf31r/wAZT/yafIy5j8dGyHKXu/SFOztbe1ma2to1hgihiWKJBRVU NJQADoMR9R/Hep+ge8/oReSa0Jd28FzMLa4jWWCeCaOaJhVWRyispHgQcifqH47mwfQfeP0qlv8A 311/xlH/ACaTGPM/jos+Ufd+kuuP761/4yn/AJNPjLmPx0WHKXu/SHWH+8Nv/wAYk/4iMYfSFy/W feXW/wDfXX/GUf8AJpMY8z+Oiz5R936S6w/3ht/+MSf8RGMPpC5frPvKvkmtAt/xzLr/AKOP+Jvl R+k/FyB/eR/zf0I7LXHdiqBX/jmWv/Rv/wATTKh9I+DkH+8l/nfpQHmfyVoPmVYP0nExe3J9KWNi jANSq17g0ycogtuj1+XT3wHmjotOs9N0u3sbKMQ2tu0KRRipoBKvc7nBIUPl97UcsskzKRsm/uRF x/fWv/GU/wDJp8MuY/HRrhyl7v0hXyTWoXH99a/8ZT/yafIy5j8dGyHKXu/SHJ/vdL/xij/4lJiP qP471P0D3n9CvkmtQf8A3ui/4xSf8SjyJ+ofjubB9B94/S63/vrr/jKP+TSYx5n8dFnyj7v0l1x/ fWv/ABlP/Jp8Zcx+Oiw5S936Q6w/3ht/+MSf8RGMPpC5frPvLrf++uv+Mo/5NJjHmfx0WfKPu/SX WH+8Nv8A8Yk/4iMYfSFy/WfeVfJNaBb/AI5l1/0cf8TfKj9J+LkD+8j/AJv6EdlrjuxVAr/xzLX/ AKN/+JplQ+kfByD/AHkv879KOy1x1C8/uV/4yxf8nVyM+Xy+9sx8/gfuLrj++tf+Mp/5NPjLmPx0 WHKXu/SFfJNahcf31r/xlP8AyafIy5j8dGyHKXu/SHJ/vdL/AMYo/wDiUmI+o/jvU/QPef0K+Sa1 B/8Ae6L/AIxSf8SjyJ+ofjubB9B94/S63/vrr/jKP+TSYx5n8dFnyj7v0l1x/fWv/GU/8mnxlzH4 6LDlL3fpDrD/AHht/wDjEn/ERjD6QuX6z7y63/vrr/jKP+TSYx5n8dFnyj7v0l1h/vDb/wDGJP8A iIxh9IXL9Z95V8k1oFv+OZdf9HH/ABN8qP0n4uQP7yP+b+hHZa47sVQK/wDHMtf+jf8A4mmVD6R8 HIP95L/O/SjstcdQvP7lf+MsX/J1cjPl8vvbMfP4H7i64/vrX/jKf+TT4y5j8dFhyl7v0hXyTWoX H99a/wDGU/8AJp8jLmPx0bIcpe79Icn+90v/ABij/wCJSYj6j+O9T9A95/Qr5JrUH/3ui/4xSf8A Eo8ifqH47mwfQfeP0ut/766/4yj/AJNJjHmfx0WfKPu/SXXH99a/8ZT/AMmnxlzH46LDlL3fpDrD /eG3/wCMSf8AERjD6QuX6z7y63/vrr/jKP8Ak0mMeZ/HRZ8o+79JdYf7w2//ABiT/iIxh9IXL9Z9 5V8k1oFv+OZdf9HH/E3yo/Sfi5A/vI/5v6EdlrjuxVAr/wAcy1/6N/8AiaZUPpHwcg/3kv8AO/Sj stcdQvP7lf8AjLF/ydXIz5fL72zHz+B+4uuP761/4yn/AJNPjLmPx0WHKXu/SFfJNahcf31r/wAZ T/yafIy5j8dGyHKXu/SHJ/vdL/xij/4lJiPqP471P0D3n9CvkmtQf/e6L/jFJ/xKPIn6h+O5sH0H 3j9Lrf8Avrr/AIyj/k0mMeZ/HRZ8o+79Jdcf31r/AMZT/wAmnxlzH46LDlL3fpDrD/eG3/4xJ/xE Yw+kLl+s+8ut/wC+uv8AjKP+TSYx5n8dFnyj7v0l1h/vDb/8Yk/4iMYfSFy/WfeVfJNaBb/jmXX/ AEcf8TfKj9J+LkD+8j/m/oR2WuO7FUCv/HMtf+jf/iaZUPpHwcg/3kv879KOy1x1C8/uV/4yxf8A J1cjPl8vvbMfP4H7i64/vrX/AIyn/k0+MuY/HRYcpe79IV8k1qFx/fWv/GU/8mnyMuY/HRshyl7v 0hyf73S/8Yo/+JSYj6j+O9T9A95/Qr5JrUH/AN7ov+MUn/Eo8ifqH47mwfQfeP0ut/766/4yj/k0 mMeZ/HRZ8o+79Jdcf31r/wAZT/yafGXMfjosOUvd+kOsP94bf/jEn/ERjD6QuX6z7y16Fyssrxyo FkYNxZCSKKF6h1/l8MHCb2XiiQLB28/2KlvEYbeKItyMaKpYCleIpWlTTJRFCmM5XInvVMLFBvZ3 RglhWZAkpk6xkkCQk/zjpyyswNEW3jJGwaO1de74IzLGh2KoNLO6EEMLTIUi9OpEZBPpkH+c0rxy sQNAW3nJGyaO99e/4IzLGhTuImli4qwVgysGIqKowbpUeGRkLDKEqKn6Fy0sbSyoVjYsFVCpJKle pdv5sHCb3ZcUQDQ5+f7ERk2tSuIZJDG0bhGjbkCylgfhK0oCv82RkLZwkBd9WoYZlmkllkVy6qoC qVpxLHuzfzYgG7KZSBAACtkmtRmhmaZJYnVCispDKWryKnsy/wAuRIN2GyMgAQQ3bwyxmVpHV2kf l8KlQPhVablv5cYgjmicgarotuP761/4yn/k0+MuY/HRMOUvd+kOsP8AeG3/AOMSf8RGMPpC5frP vK66uVt4wxUuzMEjjWlWY9AK0GSa1H19T/5ZE/5Hf82Yq719T/5ZI/8Akd/zZirvX1P/AJZI/wDk d/zZiqhqN/qttpl7dRWQluIIJJIIEcuZJFUlUoFU7+2+SgASAWnUZJQxylEcRAJA72FWXnD8wr/Q LTUI7G3s7lr8WtxFLZ3EokgKhvUjUTxMnE1UluQP0ZbnxxjKom3C7L1eXPjMsseGV11H3sXb82fz g/REFy3laOF3SB5Lk2t1IlZzbBlFusqy8ouc5ardAm/XKXZp+35keaY7TULpbMXK/o27k0jhZXVJ tQsoIiUZEZ2jWS4aZfTZ+VFHxVriqCufzE/M+G2Lx6fbzwiKK4/SI028VaT3KW4jFr9ZaTnFwnd/ 3n2eB6HFWTad531m60Geb6kW1a1vbi3uIza3MMYgW5mjtpVWQ/F6kMSMeLkAntsM1/aOpyYcfFjj xG/xycrSYYZJVI0G7bzf5rk86W2jS6P6emSwpJLdcJOSloQ7Nz+wFV/goRWvfL8OWUogyFEjk509 DgGnOQT9YPLbv+fLdlhm1KppaoR2Pq0/40zIdO16+p/8skf/ACO/5sxV3r6n/wAskf8AyO/5sxVa 99cwL6l1bBIB9uRH58R4sKLt8sVRuKqFx/fWv/GU/wDJp8jLmPx0bIcpe79IdYf7w2//ABiT/iIx h9IXL9Z95Q13LPLPZPBDzjWYtzY8QR6MgqKBtt+ppjxE8l4AOZRsUokB2KsuzI1Kj7iRhBtjKNLn dUUuxoqipOJNIAvZR9a5PxLB8HgWAc/JacfvbI2e5nwx7/1fj4KsciyJyXp0IPUEbEHJA2wkKLpJ FjXk2/YAdST0AxJpYxtS9a5HxNB8HgrcnHzWgH3McjZ7mfDHvVlZWUMpqrCoI7g5MFgRS2WYR0FC 7t9lFpU069aD78BNJjG1P15k3niCJ3dW5Bf9aoWn0V98HERzZcAPIq+Sa1OSYqwjRTJKRXiNgB0q xPQfj4DIksoxvc8lqzyKwWePgWNFZTyQnwrRSD8xjxd6TAdCrZJggtTkd7O6hhjMr+k4beiglDt3 NSOwGR4t9mYiKsq1tMxVI5UMcvEUBNQ1BvQ/13xEuhUx2sbh1x/fWv8AxlP/ACafGXMfjomHKXu/ SFKNHfR1RBV2twFHTcpQZEC4fBkSBls/zv0oqN0dFdDVCKjtkwbaiCDupL8V65XoqBZD4tUlR7cQ f+GyI+pmfp+P4/Hk68/uK9leNm9grqxP0AYZ8lx8/n9yv13GSa1C23e4cfZaT4T40RVP4qchHq2T 5AeX6S6faaB2/uwxHydhRW/Wv04y5hYciOv4/HwVyQASTQDqcm1qNmCIK0oGZ2X/AFWcsv4HIw5N mTn8vua+ze1bo8YWM+BUksPmRT509sf4l/h+P4/HmqTOiRM0gqgG4619qd64SdmMQSdmrZHS3iSQ 1dUUOeu4G++MRsFmQZEhZDRbmdW2ZyHT3QKq7fJgf8zkRzLKX0h17vbsg/vHosX+ufsn/Y/a+jDP kuL6r6K+Sa1Cz2SRD9tZJCR7M5ZfvByEGzJzB8h9zrjea3QfbD8vkoUgmn08fpxlzCw5E+Trj++t f+Mp/wCTT4Zcx+Oiw5S936Q6w/3ht/8AjEn/ABEYw+kLl+s+8rntIWYtRlJ3bgzJU+J4kVOJgEDI QqJGkaBEUKo6KNhhApiSTuW8KFH6lb9lIX/fYZgn/AA8d++2R4A2eLL8frVgAoAAoBsAOgGSayWm VWUqwBUihB3BBxUGlIWduCNiwHRGZmUeHwkldu22R4A2eJJWyTWtkjSRSrqGU9jgItIJHJYlrCrB viZh9ku7PT3HImmARDI5CVXJMFksMcoAcVpuCCQQfYjcYCAWUZEcmo7eKNuSglqU5MzOaeFWJOAR AWUyVTJMVOWCKQgsCGGwZSVanhVSDT2wGILKMyG4oY4q8BuftMSWY/NjUnERAWUieancf31r/wAZ T/yafBLmPx0ZQ5S936Q6w/3ht/8AjEn/ABEYw+kLl+s+8rb5puMUUL+m88gQyChKqFLMRWorRaZJ rW/o2P8A3/cf8jn/AK4q79Gx/wC/p/8AkdJ/XFXfo2P/AH9P/wAjpP64q79Gx/7+n/5HSf1xV36N j/39P/yOk/rira6fGrBvWnNDWhlcjbxFcVecax+T+tXupaldW/mL6vDe38eqRwfV60ngMskIlYSD 1FV5EHb4Y1GFURoX5OWOi+Z9M1mzSwijsRcc4Y7RUbnPLMweNlI4sscyR1p0QdqDArPv0bH/AL+n /wCR0n9cVd+jY/8Af0//ACOk/rirv0bH/v6f/kdJ/XFXfo2P/f0//I6T+uKu/Rsf+/p/+R0n9cVU by3e0tpbqCeXnApkKSOzqwUVKkNXqPDFUxxVQuP761/4yn/k0+RlzH46NkOUvd+kLbWRYtNikb7K Qqxp1oErgiaiD5JmLyEea2SyknaGSWVg0bc+CEqq1RloONK/a/arjw3zRxgcgqxO6ytDI3IgBkc0 BYHY9NqjvTxGEHeiiQFWF08pjiLAVYlVUHpVmCivtU4ZGgiEbKz6qx+JppPU/nBoB8k+z94OR4fN lx+Qr8fFdBIzc1eheJuDEbA7BgfubDEomKqurp5HBSOP+8kNAevEAVLU/D5kYyPQLADmeQW/VmHx JNIJO7MeQPzT7NP9WmPD5p4+8ClSCUyxBiKNUqw8GUlTT6RhibDGcaKyV3aUQxtwNOUjgAkCtFAr tU7/AHYCd6CYgAWWjBJGC8LuzAVMbtyDnw+KvH6MHDXJPGDsQqxyLJGsi7q4DKfYioyQNsCKNKTF 5pHjVjGkZAcrTkzEA0qegoe2/wAqZHmaZioi+9p1a2UyK7NEv94jnlRe7BjVtuvXE+ndIPFt1RGT akFdQPf2txF6hjjkWSFQO53QsxG/2uwPz8MgN2w+n3q3xwSIpcvFIeI5blTQkb9xtTffHkV2kD3h 1x/fWv8AxlP/ACafDLmPx0WHKXu/SFltGJdMiiJoJIFUke6UwRFxryTOVZCfNeLkoOMyOHHUojOp 9wVDfcd8eLvRwXyLcSs8rTupWqhY0PUDqSfDl/AYRztEjQoLriMyRcVNGBVlr0qjBhX7sZCwiEqK z62o2aOQP/JwY7/6wHH8cHGy8PzHz/BXW8bL6juKNK3Mr4fCFA+5cMQiZ5AdHTo3JJUFXjJqvQsp G61P0H6MZDqsTzB6rfranZI5C/ZSjKK/6zAL+ODjT4feR818ERjiCk1YksxHTkxLGntU7ZKIoMZy srZFaOb11UsCvGRR1oDVSPlU7YDsbZRNimjctIOMCPzP7ToyKvueQFfkMHFfJRCuarFGsUSRr9lF CivWgFMkBQphI2bUjygld+JaKQhm4ipVgAvQbkEAdMjyLP6gB1C2R/rK+kiOI22ld1KDj3UBqE8h ttiTeyQOHc80Tk2pDqxtyysrNGWZkdFLfbPIghanqT2pkBs2kcXvdU3DoQrLDGeRLgryIFAOJ32O +46gUx5o+kHvbuP761/4yn/k0+GXMfjosOUvd+kMF85/mXJ5UbTbOKwW6ae1WZ5HkKBR9kAAK1T8 JwQ+kJyD1n3scX8+tSflw0SN+Cl2pO32R1P2MmGoiln/AEMDe/8AVmj/AOR7f80YaQ2Pz/vSKnRo gPEzt/zRgLIBcPz61IozjQ4yqbswnYgCoFfseLD78IQdln/QwN7/ANWaP/ke3/NGNIXD8/r2lf0P EK9Kzt/zRgZAOP5+agEDnRI+J2r67f8ANGGkLf8AoYG9/wCrNH/yPb/mjGkLv+V/X3/Vmir14+u1 f+IYLZ8Lcv59alEVEmhxqXUOtZ23VhUH7HfDTBZ/0MBe/wDVlj/5Ht/zRjSV4/Py/J4ro0TNWnET tWp2/kwApMXS/n3qUTlJdDRHABKmZgaEVH7HgcNMVo/5yAviaDRY/wDke3/NGJSN1w/Py/b7Gixv QEmk7dAKn9jwGAJIWt+f9+rFW0WMMDQgztsR/sMNMXpHlrzAPMOh6TrAh+r/AFp5Kw8uXExiWM70 FRVMhLmPx0bYcpe79IeSfnYQNW0cEVB06P8A4m+MB6QnKfWfe87VnB5IKDiVFe4YEH9eSumBBKmQ QaHY5JiQuDClCKjqKbYCEg96/lLxZQKB6VHcgdB40wAgJMSVLJMFwYEAEVI2FDkaZAjqvdpTHwIH EEsaAA1PjTf78QQkxPNSyTBeGqQQpL9vo9siR8mYPzVbq4mn9IyKoEMaxLxAHwr05U74QQgxIQ4J BqOowoBVFYhqxghutQelDXbI+9lz5BddTz3EpmmPJ2CqWAAFFUKOm3QYQWJiQpKaGuJCg0qQyyRt ygqjCtWr0qCvX5HBy5suY2WSFi5ZgFLEmgFBv4AbUwg2xIIfRH5Vf8oFoH/GW5/5O3GQnzH46NkO R936Q89/OoA6zooPQ6fH/wATbGB9HwTMXkPv/S84JJNTkwGom2zugJ7Gg/z9sHVPRyfa+QJ+4Vxl yWPNbkmK5/2T3I3P00yIZS6OXYMR1H+dcSseRW9MkxXP9r5gH7xXBHkylzd0TbuaHB1Xo0pINRhI QDTmADEDoCcQdlkKLbbKo8dz99MA5pPIOT7VOx2OMuSw5rckxXP2HYAfiK5GLKTl3VgelK/TiVjy L6I/Kr/lAtA/4y3P/J24yM+Y/HRnDkfd+kPPPzt/46+j/wDbOj/4m2HH9IRl+s+951yU7sDXvQ0/ hhosbHVomvsB0GEBBLgSDUdcJUGm6p147/PbI0U2O5okk1wgIJtwNP4jEhQabqn8pr7nb9WCimx3 NEkmp6nJIJcDTbqD1GAhQW+SjdRv4k1wUeqbA5LckxbDClCKjAQyBb5AfZFK9ya413rY6LcLFcGF KMK06EbYKZA97iwpRRQd8QFJ7n0R+VX/ACgWgf8AGW5/5O3GQnzH46M4cj7v0hNtR0fT9RtrL65o kWqenCvCST0qpUCqjmQccf0hcv1n3lA/4Q8v/wDUo2//AE7/ANcm1u/wh5f/AOpRt/8Ap3/rirv8 IeX/APqUbf8A6d/64q7/AAh5f/6lG3/6d/64q7/CHl//AKlG3/6d/wCuKu/wh5f/AOpRt/8Ap3/r irv8IeX/APqUbf8A6d/64q7/AAh5f/6lG3/6d/64q7/CHl//AKlG3/6d/wCuKu/wh5f/AOpRt/8A p3/rirv8IeX/APqUbf8A6d/64q7/AAh5f/6lG3/6d/64q7/CHl//AKlG3/6d/wCuKu/wh5f/AOpR t/8Ap3/rirv8IeX/APqUbf8A6d/64q7/AAh5f/6lG3/6d/64qn9tDHBb2EMdqtlHG5VLVOPFAI5K AcPh99shLmPx0bIcpe79IRNh/vDb/wDGJP8AiIxh9IXL9Z95VJZo4qczufsqAWY/JRUnCZAMYxJ5 LkdHUMh5KehGINoII5t4UOxV2KuxV2KuxV2KuxV2KuxV2KuxVTluIoyAxPI78VBY08aKCae+AyAZ RgSvVlZQykFSKgjcEHCxIpRuP761/wCMp/5NPkZcx+OjZDlL3fpCjY31kLK3BuI6+mn7a/yj3yEJ x4Ruzy4p8Z2PN0t5bLMJkmikHHiyeogI3rVamnz38PDEzF3axxyIogj4N291aIHZ7iEPIxYqsgKj YCgrTw+/DGQHULPHI8gdvJV+v2P/AC0Rf8Gv9clxx72HhT7j8nfX7H/loi/4Nf648ce9fCn3H5O+ v2P/AC0Rf8Gv9ceOPevhT7j8nfX7H/loi/4Nf648ce9fCn3H5O+v2P8Ay0Rf8Gv9ceOPevhT7j8n fX7H/loi/wCDX+uPHHvXwp9x+Tvr9j/y0Rf8Gv8AXHjj3r4U+4/J31+x/wCWiL/g1/rjxx718Kfc fk76/Y/8tEX/AAa/1x4496+FPuPyd9fsf+WiL/g1/rjxx718Kfcfk76/Y/8ALRF/wa/1x4496+FP uPyd9fsf+WiL/g1/rjxx718KfcfkoPe26TtKksUgdVQr6iggqWIO/b4t/wCOQMwDdhsGKRFEEfBf b3VnHHxa5iLFmY0daVdixHX3wxkAOYYzxyJ5H5OkubaWe2WKVHYSEkKwJp6b+GJkCRR/FKISANjp +kP/2Q== + + + + Adobe PDF library 15.00 + application/pdf + + + 170227_stages PRINT + + + 1 + False + False + + 70.800523 + 128.500011 + Millimeters + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + orange + CMYK + PROCESS + 8.000000 + 37.000000 + 100.000000 + 0.000000 + + + C=100 M=6 Y=40 K=0 + CMYK + PROCESS + 100.000000 + 6.000000 + 40.000000 + 0.000000 + + + C=10 M=90 Y=50 K=0 + CMYK + PROCESS + 10.000000 + 90.000000 + 50.000000 + 0.000000 + + + decos + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 15.000000 + + + dividers + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 30.000000 + + + outputs + CMYK + PROCESS + 0.000000 + 0.000000 + 0.000000 + 70.000000 + + + + + + + xmp.did:fab4775c-4666-438e-ab64-12b25cc7117c + uuid:5a545e3c-eb5f-3f4a-86a4-bdde72ee3f2c + xmp.did:0180117407206811822A8E0FA0EE55EA + proof:pdf + + uuid:8408a276-9015-034f-a8f9-923bac0ca2aa + xmp.did:F97F117407206811822ADF4E29F4E03A + xmp.did:0180117407206811822A8E0FA0EE55EA + proof:pdf + + + + + saved + xmp.iid:0180117407206811822A8E0FA0EE55EA + 2013-01-22T19:05:32+01:00 + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:fab4775c-4666-438e-ab64-12b25cc7117c + 2017-09-15T13:40:03+02:00 + Adobe Illustrator CC 2017 (Macintosh) + / + + + + Document + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/Properties<>>>/Thumb 33 0 R/TrimBox[0.0 0.0 200.694 364.252]/Type/Page>> endobj 30 0 obj <>stream +H‰¬—ÝŽs; †Ïç*zŒ4ÝñOìä”ÄBˆ.`‹ ´áþ%lgu–]Vúõƒ­‘Úfšf%Ž¿¯øý·~÷c»ýú7?Þ>~þh7"º“Ð [»Ëì·q§Á·ýùãO·Ú×ñw§Ûß?~øíÛí¯ÿþøùñ_¸áäFÜî8o?ý#~`¯w@½}Ú©ý™|€ƒ|)p“ÛO6QÇð¡j¿ÁoŸ`¿"²zc›÷ÙÔ‡Ú‡?×~„÷fÁ;wðN²y6´3؈í»n+ùÀžl‰_1aLT[Ø†ÒæÍñȈ‰þyÇ<{0Ýwpï>°­ÙŽÖgfŠ Êˆy +~FðÁ´ÓÙy|‡|ÇljÕGBÝ¢óú½YHï­ûGÓÅz|Úú’!¢Õ£Ÿ>lL"1Ž©2çc¶æ81qNŒg¬ef¬‰¾…v#Ö„8M,㻜kòŒ‘¬»Ã>b Œï|§lò»î@~pi>˜–I­¾®f Û +õˆøP°AïGø%&òºßN‘¾g»6ŸBç]Ûž-nvÈ©>¿Wˆ-e{jä´#Æi€F„c¥%C¼©ÀN:"ýqò5dàˆudø +§­Æ±¬gd6¬Ü„áiþò«?$l,T‚}ƒ el0a3 +525œ©¡Jdjà]l a£•JÔfj¨b#›±Çffl25¼§&Aƒ•(Ôp¦ç5tRç:©™…š135L¬Ø IÜôLÎJfj8S#•š‘¨ÌÔh¥F25’¨áÔ@¦¦?Q£™ÌÐèx‚¦R£…šùDM 4x M·°X@®¡éÈZóDM†F24½B34Ú4<*4”¡Á¬5OÔôL ﵆34’ ÁZC{­á 5,Ðh‘ÞKfd´ + í…†ŸˆEi¤( WfxËŒVfzVš™™é…ÌÈ@B +2[`žd†‹ÊÌŒV`×ÀÈ/X€é¹†¦—x4Çwfbì¦íu0 ±ø« ôº?tw„„ ^ýθóãŸ'ë—¦{ˆÕckžb–ñÂŒÈkìžød{Å‹…œýUÀÉѾ²ŸÕ3†“FötòdµÛ!ÂPúó†­äø“Ø.Ì >œG)ð­OôÍ8Ý1â¡¢ «> »—•Öüä^w,'iZ„,Sõ¸O— ËâuUVúJ&û¬þÛÈv[5¾a‹ôõ)¾ fV:ô¨Î«Ú"Óó­ &ų Œ“Q HÏ6áõp¹ýä;¬8нé;çÈNOþêeŒî¾™yô¨PDÍUÝ¿õÿˆ›|[Zb–J¬Á¸+%?€?fÆ$ŽÂF% ünÆôM™kOÁ•pÜ­Ÿ‘-ë0òÊ®e,ÎFdÖ°•ì¤)Žjÿ~Ü-Xpš«ÃªËq¯Î‘­—FÊOy“á°Ép(gŠãL)%Åa“⽤øØ¤x/)ÞSŠã·S|Œ”â\RSЧ ‡œâå3Åá2Å sŠSÎñœâô•â¬ß“ã9Å›¦—”âœS|¦§ë ).)Å¡¤xO)ÞÏg-9.gŽG?’¼—$?s<á:É!%9œI%Éå:Éá:ÉÁÖò];Ÿ‘OÏí¼èŠõÕúÌm¿ÀÕúH¶>œûªÖG³õ¡wÝ7 cë}4{Ÿ ÙûP2?RÝ÷¥eû–A¦dÿÃÕÿ@i8 Oˆöè©i(þG³ÿ™Ùÿ`ÃÜ3Pò?ËØ\ûMþGkËÀÙQv@ã©e¨HŠêOh ÔKÏ0ž<$Ôæ,hƒŽÕ 4·tÎÌèð t(££/º†ŒŽÎŒ¼@§gt°¢#;tø]t¤´ 3£“ûzÕ8Pià ÌèÌ­C!GKëOäH!g–ÖöäôLŽÔÎan;ٓÉœ^ÉLgrôUïPÁ‘—½pô8p\ÕÚ8+ò}Í7šNÖjç¬(«â«èôU⇯’â«ôôU¸µU”lÕ骠Ø*MÃÖU%So¹*ºvU]ï\>7žÿZŒUOÆJwÆj&cÅ»Þ!«žŒnŒŸÆ*ú·ÓXI2Vü½e[%#ùª¹õU§­ZY¶l[ÕO[…ßîD£^ýw‚‡êk,à´« °èWâˆ^ÓÚŒôþ:9Õ]b áòÜ‚,É7¶Âû3ˆóRÐü2å1O"::BX4ú/>6cF=÷ÓZy‘ö[Æ%[® K¯Ü1Oâ—{øaŸ7ü‹¹fõæ××Úªb++Ö4¢p×S×þFÀåõ+Ò=»`•æhG\À"2~Owæ•ÉödŒ4]ƒ`á¨ÊzdthË£ƒX%f}öI.Ÿ:ÇÑ{„ ù•Kæÿÿ?Fìì 6µ:d,_ Sä’C™jâ}‰Ûß8{öÎå²™4òýD_ÓüŠÈŸî7 D]òêŽQpݼDÈÝ3ø¥1åAPhá*dŠqçÜc^£c­îE…:±A϶pž°+øˆ…txZX^­¬„Â/«Œ¹˜û= +8äÐB—GÿOÔÎ)ÎU¼w¿¶ü€q§ï¡šŽ’-¯Î¥kËæ~ª–1pÅß+7FªÄÀ)1ÑÃ]KL?%$i éWUõÔ˜yjÌÈ"“5ô™àä ßNdð ‘¡,2”U¾­2œTF6*ïˆLO"Id’Æô¤1xjŒ¼#1¬;‰o"Ó·"£[‘SeV‘X*EeäT™o‹Œ²«ìTfd•¡*Ó³Êô¬2}«20þ'•oª W•¡_Ve$« þ²*ƒïÈŒž23’Ìð—Ê`ت íe†w2ÃYe¨^ÊŒþ_2#ó…Ì`–™ñBf(éLÔþ/‘¢3=éÌÚ#(6O’Íë§Í‹^êËçµ™Œ^OFO²ÑÓdôèÚèI2zý4z}§§ÉéQrz³8½žœžlÞLNo&§×‹Ó{Çèõ+£wá¨~“¦Ôìçw‘Eæ=_!p…Um°wìŽÈ‘Žé¯7m•KÛOGLõ!þK[ü>ýmÊRš˜+Jnu8t…¼ÌÇn0ö±úYêàÜo}‰‰ÕÔÏå¡ÃÛá©7þf§ö·µ^T6û…Ʋª‡6y]²·)1\¿ì%ªà´ÌûŒ’º6kuøÓ³%ö,æ¶mäÄ|FûaƒcU;¼‹"õ~Ĥ<13m#ùÒ¨ß"àX~Ï~KÏO#nÅÀnÅ˧‘G²î¨ûÈs8n/F ‡4„".ž|äÈËð±–~~§²~†—¡Ï¢Ÿ«Žc­ßµ¸ZÐXÔÀrçš„ëj»XãfØ/‘C<âÔs…–Þü‡õ²Kn]Çðû¬"¸U"~p=³ÿ=ŒJfC#éø¤îKbÇ´"‘_7º¡?ûSüjy¡Î}-§*þIÓ‹ÝC ´ªø¾ú<é¹Ò|Ž]…ù.—êè°T…µ[ž¿H®í<3æ¨æg4'eäžcÒ} Éž°ÄìÈ4Ôæ>²Í¯ÌA½µ©‚<š¸|9áç~J2ww±Kcd)!ÞÉÌ…s¾÷N0öÿëÞ Ð:Á¸8=;\œ 'àâýâŠNÀ€_ÀÑ Æ«ôâíâŒN0‘zr.N èû¿X+h+hh½ý…H±‚v±*Và/V@hŒV ^¬`‹=]V V¼€/^@Å :zÛÅ ZñB/ ‹ hq‚^À‹Xq»8'ðâöêVœ€/NÀÅ ´8½:'èÕ Fq+NÀ÷N 1"ÔܥވʟÜë{1öÎÀ{ü|L½+ôdÞ^2o‡Ìkyµd^¹Í¼ÔJ浕yD^yмÒVäõ†‘W2/߇ކ¡W1ôbæýtÆ®ç«1¬Ä^Øë+özI½þzR/AèÕûÐ; ôÒ +½C¯®Ð«%óÊʼúy"¯Cäõ‡È;)›‘·$^Y‰"ïS­ëµáðTGÿYÑ÷ÓãMÖË–¼Yâ?£o®³Àš&îãð·ãζ·8$ž3¯oñTý\׳šç °øŽ[›c/¶mèáAkŒ ´žµ#ø —ʃê¬k¼í§3³ðì$ql±ÐãxëÑ-ºÎ#~?‡À¡ÍUÌñAǼö<Í®éèL©›–»äÍ“¹sP%‚ÇœŠ¹¼ dËj)„nIÿ&IslÕf'åá0|¼ŽE¢‰ø©–`ƒN…«ÍN?SnãæñWÒ©´€VÒ‰÷KîßÛ…,µ(¼L~¨¶Çg•‡^fѶ¤}. bwÍÌeŸpYðÁ ãíy…Ãlyß¶Øñ°ï8”cOÅÛÏ9ö7}äy噋ÆÙÆgXŠïKŸS" ‘Ž9ìü3ËÑÜüì‘Þs€pZBŸTƦÍ’»Ÿ¦K»@yÃcû5••º¥B·¤%9öŽÒ¢ò<(t¿›-5 Y.½´<È[ùqoøô_vÎkÒ|éœý’4å¥sê%iZIšŽI“.IS¾ïœT’¦–¤I¿ïœV’¦¿uÎþïtN¹M+A³— É— ù\9­æLÁœI¿­œö}åôþ}弯Lœé%gê[ã|Ï™/³ÿEá|™ý×…S¿/œS˜mŸ0úà<Àfˆ=m oôZ8©Ø]l@Š è‹ ø(6 o6À/6pq)}ÓÞ\€Š Hé›ökx1öÚ6¹˜@õ€Í‹ ôoËf1µKÙôR6{qú‹²yu4m  ´^]€º€¼µÍê\\ _\ÀŠ ô×¶éßÛÀ £6pm›Vl ¿µM{±‡4`co"û.Ü·MYmS lJi›m“ nJ©›}“ p:ÎÞVá$z,œ +…“WáäR8ÎÓJãThœS°qf +>§Ü6Nrhœû§«qöR9ûªœGçlØ7yÕÍNP7ûfƒº9VÝ´‡¶iÐ6uÕM‚¶Ù¡m–²ÙWÙÔöT6ý¾l:–Í<ó£lv†²9JÙ”Õ6EWÛ”R7Ǫ› +uSî ÷ˆà|W7·ÙQOÂÙq$œ|ž‰ý ¼[!|Þ G¾•ß¹K'ß\øàûƒw³‚·,¼ç x#ÝÍÝì‹ns¤[èæ[º¹ÝGág8øÐMÃ?t‹/Ç0$œh!®ˆ#áÛÄe!ÞŸ'`|!Þ·/[Œçë¹,È“â“rEÊ».ʵåZ(_'sä…q]Œ߯x@Üö³ÚÏÿñˆ÷…¸ûWŒÂ8äk¡ÜÀÅ(§By_”Ëxrñ˜;`ÞŠ‹3pÞ¿á¼ùÁy0¼Q…vØÁÊêc¡îuÔûBÝì‘uÖ;°žâ?a€€vÚyўDZpWÀ]wÄÝw*¦´;ÐÞ í¸Û +ï¼x§åé¸h]t‹{„Ñ…;„¯–n€»ChAÚ-½íÕÓ <ÝöVhg ½cêýÉÔ`7€Ý +ì¦N_˜ºþ™ó~X +ãüÄxÃȈ3".€x[ˆÓÄåñQ§GïñC—bèˆ+ .ˆxqô[¼Zº|Oƒ==Ýï!o[ Ðï’yÞÏœÄñZS1>ó~’ßò!£9nÉÆNì?gTמo,ïÇÆQÌ6ö¼›léòƒg…‰'í粞ÛcžíÖ¦X—`{?]=Ê[àºÿÌ’Ä9b£F»ÊÓé¬s]øõ~@4[Ù<ý6¦XŽÊ.¹kfËf'‰D›Ë˜3¼›7èy¢]ýx™ëöã¡–àýVsNÄêèS=ОugkAt$ ãéÛa›µƒõ˜ªz¼ŽU"ŸàcgÚÙ>Ù(l-Næ€פýšGì ‰ËXê!*d\2ÛHÑ–ã-È£Ÿƒm6ÁPÁØ?‹’Èe®ëi3:×eDä<µ-_·4¦h¥9pšÈy8ù2Gñ©â9¹%‹¥ô‘'–§.^h;Žób)· 6þQz"In±å%‚عý™÷YŒ¦Æ&•ÍSd}ºX8Ê~ÑœäÙ'slhKvÅsU|uÿ[j0 OhVÏ@Ÿò9÷›I!4óè¦`^2Õ~ÂûvÜN™£ï-Š£¥ +ÐP€†¤"@i¿ ƒ(` T* +ÐQ€l ¿éšúÔŸ¢¥P +ÐA€­p€È(@¥%Àñ 3 +P?¤'ý è¯=êOõ7ŠþüA½êOQ÷òŸ)ÊÏŠü2‹|äç(?­ò£'ý êO ô×@­è¯-ýè¯ýÙÒŸØG¯µý™‡î§Ÿàøë ¾Ô7P}Õ7ªúÔ§(?¯òë(?EùQ‘ÈÏQ~£ÈO@}Ê ¾ÑP}„òc_òòÓ:ÿÊo,ù¥$–ühɯÛG~ÛTÙgþÉíüS”ŸÜο”ôG€:–ó潃*Ð@ÒPʨÀ¶$8Z• £—7+*TT!£ +GU¡‚ +E(U„Š"T¡—)"ä%ÂÍQ„jK„ +",Рÿüy¶}'bZ>ÌÀñBå[jU! +ÛË,*l˜B½ªp‰Ð^F`ae +ÎÀñ"ÂñBýA„—h0éQ„_„Ðñçˆè/ +ÔGÊø.ƒ¶û!Xä×Q~ýY~uöª?Fýµç +ú{š_É"¨ô?ËOw}¿•ÿW_ÜTËFù3ÿM oh9¦yky[3o2§ââv{z†Å Š\œ¬ÙwÏ}¢,±ÿý»Ê™ƒ8JŠ÷\¹/ÎaD-·2cNçLðIÒ–Tl©-92<çky[çƒó ™æ¼9Ý%HŸiû“ꂽôš KÒæŸsããËgð°µ¼¥ô-IØ¡§8Ñ‚ôžÎAYµhÌ-˜ãd¤¸· ¶‡ ½DqÛ{ΖœÑ±9Áuüì ßÈ[â䆎°lœ³$DÔ§1©ç"éIrniìrñ~x 㼩d8‡‘Œks0r3ZÆãùH.{|® žÆ´™•Ž=h çfÇ>ÅžæpÏfìÑv—Ïâ›lêbÓza³œ è´B'/: àä§œp*©'œŠpnà$„“*œþSÀ©§.8àì ÎÝe/„¶E( \•¨>ñ™^{ò9žøÌ&qò©‹O*|þõ2ÊvÇèVf™# @î©÷ÿ=DA~*¦M·'§¿bÅz²Ö.õ‹|¶' N +èDT^O@õ‹€Æ!¡ž³WOîrŸ fm­ßyýU¿p!,å.èã9‰sbtDv”» ­™—r—ޱza¾)¶Ó0ž"×=Ç¢áèua<–%Ón⨑壄ä+ÛÙ^ûŸ"‚éçý¾ÑgˆŽïÆ¥È3ôEoÉ?WHÀ¯ÜÌA¾èº¸gÕ[¯âÊ6:F­¶ŒX ¬yš€y v^ÆÚѬü%Ïv0@˜F{ùBƒýc?orP׿…‚ÜS å7ƒGù`c…é­.þÊ‹†±Fa»eH÷åI›Ä¼O‰ºAƼö Ó~;ŽRKɽ\k†Ð4,ùš^+1c–P$6P¨=Ìñ^bvω,â€Ónì‚~?îàX ¸ n4`?Âî9É^yÊ0+„ÃñЉéÚÃù’.Ƭlƒ‘QKQ8ν” }FCÑ Rbh Õ¥&è%;#`…èÏØ?‰ªÞÄ7É{ ¦azÈN̓[;Á9ŽpŽÎÁp*Á;›Îl:±);›Æl± j‰Mÿ#6ý›óÈæÜØfÓ>°©Äf4bsÚÎæ8°i›Al¶‡ÍÎl2šBhvBSMsb³?lb +?l6fÓ‰MÿÀf|`s0›ÙôÍÉl*±Ù76›0›ÊlúÆf Ç›Æpú§?pbè½è<©çƦ›ýa3mì-›cåk¾S;°éßNg6;³Ù> Îñ%œöap*ÃéßÂ9>À_ÁésáüÀ&£Ùv4ûƒ¦™ÂdvS0Ç L'0ýf˜ACSÎ`òдÌÎ`:ƒ);˜ÁÓ>€I\ú‡™iÌ¥î3s2—ÛдK}?4uã’°ôãÌd.ÍÌöžËäò—A\â=ˆËÉ\Ú.ƒ¹ âR?p9yhêÎ¥—Þ˜ËØ¹ æ2˜Ë¾q©¸t!.Ó-hhs9˜ËßÀì ¦0™ý<4M݆¦›šJhÚd6±iĦll±éÄæÍ8£9ÍñÍmf:£9> yf³³éÌf|˜™ý›ñ–ͱÍL§p.¸1ß}e £ufÓXCÄÈÝVüH¾a_².£çÆa•úß9sH¯=ÿµb©V+^¯¶.¥×õ6¿ 'ëý­è¯ +Ô¶®ãh^Oìù%øÖ*Èc]UwÃC’§¬ä}+RzÍûs5·ÕÃò™B•,­«ô¬¼ÊêôµmwÇÌ/WÇ]YÈüåÊ“?—a8¸æzZ-ïÒ(SË’ ËOÇ…h1Ÿõ^uDZ mXV§çf®Ú[ÝgWíKV8ƒ™û7Д û,•Õ¨¨LÄØxrEgOýŒ`GX® 鳿îM¸à.àën…ØÒ ?˜5éh—’=9)ÀUÃz²U\wDߨ_5,Úú‘·ÀÌíŒ10v¦Óýcb:#c#†€i“‘ ˜ ób/¾Ó˜—béÅ‹/ª;0ÂÀô0¿ñ¢Ì‹¶¼LâE•y±˜¾37`æoÀèFŒmÄ̘v"Æ™˜,ø1 Lg`rÂ<À0/ŒKLÂ匋í¸xÛp1Â%ÚNKµõZ&Ó2t§¥5¦Å7Zæ{ZFÊÌš=w¿œîó¶½×!LZ.§aºéU°(|¡c¡Ýó›ð¹˜šp‹vO¼LÖ*.T÷>ÀZŠWÃŒÏ#PB¡–‘·ZB€ L `Jò×B`ΟUN‘HÉ’¯5`-Фø|Ǧœ§P¿f¥ñ•áÍÏ?.uAQp±V˜ò”››lÜz¶˜Ÿ4ykùŒ’7K/!ËU/»ZÛ²2’‡o8NzŠ–Ì*€ã ˜ZJ¤@x©“¥3 °^ÿwëiÖ!K£^ŠjNyWRŸ‚›Z'Ò¼ÉÇê‡ò&Õ¡ YûV"\fŠ— +,,òmÑñIÐSh®[’á E·Üx°’OËéðsZ¬ U•²ö%S§l®š¦ã¾Ïæ lÚ“Íô¨'›>Ÿl"Íÿ˜M”ͶesP6ƒ²i§lvʦ}—M;e³+e38›ö“M +g<á„é<õ' :·„¶'¡8̼"*[DûÑÞžˆª#ѾEô}BmKhü$TŸ„ÆÜú +¨M§ˆ6Ž(t|P§€ܼå^å+¿u e×äc—s9ºF|°sv:Ã~aç¿ÉÆdÙ0¶±ÛÆ8Ú†ïº1Nz®þÁÏçK7ì“oü±Ÿëîmó ÿ(è²ùFcßh»nëF#߈M7æwº1H7”}CÏ~®o„C_ÂqÔó¸ô7áM8ú¦çþ›žÿ[Ï[,7^ïúžù?ÿ#=ŸŒL9ÝËÏÇ¿íç Œþ~>~›ŸËú¹|òóØxñßxé/ý[?› ÷“ ëddlG¦2íŒÌ?)ú1½VOÈø÷Ž^u|!#2ýp¢]éKÞzËWŽ.äèvô #Gò ;:ú$ +ö qpôqô cj»Ù;ú®A$Ÿ=]ÈÓõ(êqõo$h5=NšÞ¿Ðty§é~ÔôùX,¨?4éL뇤$}ná¤lR4}‹¦¢OЦlÑìÍq:>ÚAÑûMJ¦r2uK¦?‚Þ(˜ÎÁì JæÜ’)”Ì A-šN‚>)šc‹¦=8›ÙPÞž!wAoï ݆Þ)œöþ ipoýjOâ)§xIzò9o ü¿çCšoÕ”½ßqÍŽ]Ùµ{´©(<¤d©Þ-F ¼4œ ¿ã ÁvÚ…Aà‚\Q·¥Z®_¶Ñò»10&––h¯;´êt•B6L`™†Ü„ûFGA“ļ}“GW2¸Ñdbçg9ODk˜^´Ü+ñ™©VP´@Ö§)è¸ç_žmá…Ú¨g®óˆŠ1‡óìK:®:zN \—;ÿ9l«‘0Vô€½Œ àIy1… àó_ù¹á7z6…kvü(߈õB ȽJÝ3d8=d}Ô^vp ºµÜȵbìq³ïš^ë0© ô(SCÃQ´¤+›—,Ü×%÷.з~% hP‚ÓÏs;ñGZ‚µØòf½”Wnöá pÜi÷–Œ,Á¬\wxò¨¥d„_[y©‘["×H‚3 zpuh×ìXÞ²x1àN0¨‰Ý“¨êMè[Ÿï® Wvû·G+Ý|­ö€æ`4'¡Ùv2;‘Ù…Éì;™ý!³1™²“D¦4"u$2Èta2çNf0™ƒÉŒoÉ$0c•À Ów0ÀŒÆ`êæxÀ,}ºÁl˜F`þpù‚`Z0™Èt"³mdv"Ó¿"3Îd&s0™¶£Œæ 4u#s4&Ód^“Ét&sîdö#™±“iDfvÝö ŸPô¼Î?î¶ÚK×½CÇ‚×<®À¸×u¥¶‡ÆßR´v·é +¥†ŠöòÔÉfîlÅÉÇ®ßw*¶Hœ…!ÂÎü3` E•èf89ÛÒh…¾A²a=«ÎNNЩÃö’ư+iàÊH +‰ÆûÚʾnþ¾¶rt²ÏÃÉv:9ÏÃɇ‘íÉÈ59ÍÃÈåÉÈ%ÙÚáär:yÌÃÉípr}rr=œ\'?9úxFÆB#×ÃÈvùÉÇíÆÇùÉÇvøø°q~²ñ8lÜ—ÓÆå´±E[´ñ¨§o\Üž\쇋ËáâÓć‡íðp9=œfô°®.K)ÁÃvx¸Do=L\—hbŸ§‰S?Lœ—ÓÄ{€_&><\N M?=œçw ÜÑÏý(··vœ¤Üc†‘”ËIÊ?ˆ°-‚r¹‰°~ÊG„­_åÖ({;"ì|aOP.”Kå1OPî!ÁNöƒ“çËKÈ~™`[àä8ÙN“Û;NöÈÉ#pr¹I°‘“Ó¸ád‹¶žvFP~ÏÉ#rrœ\¿š`ýääö&ÁæÈɵ¼‰°'(÷ïF؉ÒÞ9³Dgzt¦ŸÎ´èÌö%gZpföÓ™9~äL»q¦GgÖÓ™9ÞDX`D0fÆ´Ó™ö.Â>;3FجY£5ÛËûmc–wÆ´àËr3GcÖ`L;éј=Ø|sDc–hÌ~cL Îl7 6GgúáÌ>¢3£1óiÌ×ùu¶¬Á–ly¸Òƒ+çÕoÒ«­Eß o9Òë¼í6¼žÌ;oÃkþzxµy0¯?¥×yý@Þq^ó¼íËᵎÛð:æÍ,¼Ðë?Ï®õzÏìúļô–r]û×£k¹‰®ý6ºÉ5ß&×z—\ëד«²Ú'ôÖzý%W;¨·¾±1¶ÒÞÙØú{ÿ¡àzzø;¹5#·ö'·Ãć‡Ë]n퇇ÛÏs«E ¯á-\ïrkûNpµÃÃvzøË¹õÙÃ7¹µÞZ¸ýßs«ßÆÖ;ÿZô¯ ö£Ðj·¡5þµ§Ô:¿ŸZë:™¶ÚÍ¿ÑOš†ñ/ dLàÍZS˜3£¾iáοôBžä¯¼ÁûX›r°Ú– +†Éä ¥ÄUâÊø‘ñ}ë€&O¤¥Î› V[K!Ç ˜³K°¥^¹¬ÁÈÕH‘ÆÏc6!>yqæ @ÂPU®<ù¹Ú…›‰OæöÉØªYÇ<6Á®â“x6öÌ%A› ´¾œW&°Ó3ÁÞñ¹LUÀýBÜhTÑøR„јÿZ+Ì8·U2f… +ú'WddÞÂÈfl.ȸɉ”mð&°ì*6+Š"g'ÂGf—À¢ºa3Lu+?cckdÓu3u2ß· +$vfRbnŸà-õ]'©õ=$Ö¾ÎóKêìA3ª“hûJó:{ êôCã¡ÎÄ9¢8=ˆ³qŽCœ%ˆ³FqæSœþqއ8Çkqþ•’Žw-A Q¡~(Ôß(tF…Z~£ÐÚjP¨?Z…¶O…ú+´}¶CŸ5ès>ôÙ}– ÐñŸå‘­ò<š7_9;§bJ¦DM³CCùJÐÆîÉ®a ‰•ýL¸d4p,ûÅÌÆà­øÎÅ÷ÝQ˜:HìcèÆÒÈ8x+™Û¦ðBO\¥6¢’óLˆý•´¨¥þª8K¼l$ŠuPx[c E¬%Ýd—ý’ o¨Ëê$ý‘÷ÝVQ~ãöéZx»ž»¶4°€²q%5­Ô•ð{_»ø'îpR›Q+êÒv L…L8ÓT$³ô’76,{šxÔÕ2]Üæì–&J14[RK›¯|°š9G¹ÙúXcë›Z“æ3kH¬AcAÃÞH &\6\Mr¥ðÀ ^YSý\$ÚÔ’Ø=³Q¤16ÑS®E±«ŽÌ®-Hg«i›æ;%Šíâ"sNÊ%hu…Väm²u©¨…-mŠÑÙrÞÈÏnWL:në¾³,Úh›ƒÑd–J‹¾at6Œ†I1ÒFrPý’eù±× æòª$î߿ԌpÉö’fãWbùµT¼|?´p2M#’í j4˜¢Öd³v6ì²p.‚KÙ"ÆŽ#P8W0–]±MÉkoÆGg³bö3ꎆl²5ïå•Äq¼Sñ›¢µ¦¹AOã‘Aƒÿù2çOÂÿé¥N›£†ù5P x= ñ +€"SŸåÞA1EG%z5¾ì:Vã°jhCK}°}aésâß¾Gi"@ ²DΕJnìØüŒqì @LTÕ2j¡¢áp=ª9^ßÙÇ;_Þ¿˜l  +!žÆ‰ÑTÊŽ E´#ß³{»£uÊ¢4ˆoGÞX7­ ›{:®Ï§èN• +ñ1yÍ–´d Ѱ‚œÛ$†e–‚ÇaÇÜea-Gç7ùó3†*j¬ÑY†!ιÆsÅP<éC87FåQ_¸,tÅ_!OvÃÉÍL +Í›S†{|¥œ ‚_*§唇rÌåÔ œ”cQ9måxPNÊ¡)¶rÒʱ¨œ2Êñ œ|(ÇÊáË/å”C9-(ǃrò¡œ”ãA9%*§åÔ œK8†„SæC8”ËVNÊÉ󡆊­ª`L—rx"ØôúÌe¾VNùTóÅVò!HǃtÊké¶Ã"HÄ™Åá˜ëÕžÑø4›bÍüÏFßÍS}®©i×g×Tf³»—äÂF×Üø¯ ífFGtsÓ­>ØÜ¡Êtf2eÏ|꼂Û4ØœO˜bƬ CýºïKåC'oÑCG¥iß³²éíµ 5' 7§8@›Z$d¢$dX”ˆÔ—ÄáÏ\×yσÆo‹(\P˜L ÿ±µ…©‰ëMËÐ/ræ•wÍÏ~-¸è ÈY5sMèyÜÜÇoÑi¶)ÄN Ã`½ìr%!X‘…rô¡ùA¶¾y )ãC.Ãâ&oµJ5{SƼª$dQ*jR~×6iÜÆv@V¨âᯕdZ7–¹ÊlŒ_8„$—J.€gØXgÆG%9ðÎ?¿2ÍÍÊ g4Û¦¨Œ ûÐ7q`%Ivýdä’¸ÛUUÝ\ÖØUmãÑÌ DFïehäi8Yƒ&K»†§}Æ|œë—MÇ ¤mJr²oæ½}*4κ;†ñº(±EǤeÁ&<æÝ4F×™1 êÕ‰©Çågo» !sÝ™O%/Lo +–Ý +JW{fè+Œ8 \TŽéÙucfßÇq|ˆ¦×1ô®çc Tf(¼œÂw÷keI 7ÉZrßv™ƒƒ£qËM¬¦Æ–9¨çÕT…Ë“"œ ãÉÔù:à»^Œí—86LóBæœX7öþ?ÊË%͑܈ÁWé Ô| ¾yo¼ñÖç7KA²¦¼éV–Rù Ä×sã ”FuAp2é{ñ)\J0ØZ%9«bÕ Gœnü:|QЄ‹ø·õʳç+¼°oÚ|j›w?S¥?G²1XŒ Òxùæ_ïéUúvã Òk`‘x!¹ùV9¸r:Yu°ìGªSË3-vZDc­(ÊžCרº°ü®V¡ºè¦©•×–6báGÝ–²Y\’5ÂbjxOÖ'ÍóL>a±JŒ¥¬É«º·ãUÝÏ’p§ˆˆ(xW +¯±þTvUãÔKÌÓÄOxn¥Te­Ã·ÉþƒCe2Ö²²zá12°ÍÎ3-r™g#d´!p1!ñzû‡cèWõõ€0‡GC¡JWVЯ6 +†„ggÏÌ í}zêš¾™ïÓ+}Dºmš½ìHÍÚ2ܽZ•cì]Á¥m6þ¨izùP¦»ž~2¼ßrê$v"ÉTûÔ|šZåÐwÜV퓎¦ÂÚµ¸$*lE×¹SZ…®±ˆSC]SËÏœ¥û$)ÓøÈI¨”&Ýený¤ž¥¼\‘VÄ âZÁ<5‡‹ ¥¥õÊñTˆ¤ZÎÆDý#! +Of³`Zâ ›1¿hiu1ÂðÀçšäl»6ß9È5V›¥¼ÓY«©ðñ­þA‡k«³í€Z2iäò%„éȶÂ0ÂõÊ_ìcÈBÎÃ[yY1Æü^ÝêF²…Nb\Táä6×4%œå`žö²\.ú[fev¯¦²íFâÂó&ŠÃ=å”J>`m±%z(«, ñYšowí“õR 0˜Å rüù¦,8 ¿²@bcC„êØF“ÏkPÂþ®Ê•¼õXtÚÃ>¨~¢—1™tðÖC¦´O’ãùŸŒc=ó¢ ÆT_o½·)qUö¶$$ÕJc8¡2’pHŽ/Tëþê¿óÜI`(6g Yc_¬ÑÓ«ùMøpcò;œ(²Bd4ªêP~Á¡Ð¦Z£ú´&3 ¤õÂW«r)gü]®ÂóÊÞƒ£VTSsó¤þ’bù)ss–¸q’.jVo˜L*ÏZ–+™L¸¨.®/¿ÑÀIK˜ÍWñ1ð¦ØU1-L• S†ØM ÀÏ)²búÖ¨ }I¯Bà|!e¯b4gq÷(8Jqÿ 9ð>Ç&˜LŒlfªšBÚ9'ÁP2¶¦ôC‘Ë`c~ÀYu«0B’zY‡!)Ä8¨zv¥&‡ry4Ôq8u×øsÞ·0î<76T0ÔÌÊE.ÿòì>(>Fpî<ù¡Èjú/VÔPFsNhý»…è «ÿ×wšR‰Øˆ9ùÝÊäP†ÉìÍWSZ5L_2”Ñ. ñÞÔŸ åìò]šš‹õ´™yÚ-VV&õi÷Ò3¦Z¥©ÉWÊÞ•3$ø$ö8N>óg5÷Õ4©C6æ¯y)“w†êƒ¯>ÿVzÑM‰r@\‹Õ°Wu%Õ| +–Æ!¶G«ÓY¬˜úIý¹ª®å¥š¥íúc9 ÊwѲâšb¦q¶'2ð´Yìyªêj^(z÷‹ò$#6#ˆµCíˆH§èî®fZp·­Y­ÄIZ;ÙÎ3×:Á'· )\ý€'væ•—»’|àA—&¡ê*¡}å³ú錜äNôâÒN¯Å‘·Q§«éçVGÜÎë5/jyš²ÁÏÅ $Ì©¹ Ë{;=Ž Ã1mg"ŒÄ›ú>ø¢Z÷_s9Ol>MèK/½$ÁARK¢¸Ò¿ÕÅõï¾Jã$þ'{l`6dù&¤½9–Á¡Ò´vD%-Žt 2°C1ûœNÙ»ß|$,_V Ü@løÞŠÆÊK[µÌ›šÐn‹ö‡…¨ù,. +Á‘(—Îvë\ƒ ™åÕìþÙ¿Æï +“ F…g’e£újU¶õÉó†i4Ó \Ó6bø;CuOr‚äޔƉJzÞŸ±B ¶Â¯jòYh<ò½)ßGÜ8l*Ž5¢ÎGãÜÑOccÙwÐEVå™Y!6'/iõ䲤*4¶"ùÄžs“oSûðzÓiäFš¤ujgiAró©¾wêR«?‡93qõU<«õÓ³0L…uìõµÕàOSÜ©•yÔÛLÊš,.lQ%AAU‘ Ÿ4í¼ø4)T¿Š‹×¾×ÙÕµY¦µ$GV¥8\·Oû÷ß³ð&öàœÓëœ3oç¬èœSnçô蜜3nã´hœSnã¬hœõKãDߌË7ãw¾i—ojôMo¾)¾©—o@>Á7%úf¬7ßôà®éË9cÝοuÎ +ÎéùÙ99§?§=§½§þ`œvG@õmœz§ßÆ™ó2N¾Œóà›lì[Ÿm³¢mj´M»mS¢mF´Íz¶Í´h‹¶i¦y73ºfüàšñäšq¹fEÓôèš]ƒÌ¹¦ýÂ6érLvL_-zÆîYsY&_–i?Z&ÿÚ23ZfEËd̆—eZ´Ìúeæ–©Ñ2ãÍ2å²L¿,Sß,3°L}³L –Ik]–)žiu¿ð~”-п¶gæeìõÖ6=Cç” +v. ¨è›ƒ¡ö“û¿°&$,ÄÚV‡GTõ©¾Wx6DÊ +½c1¡íL7•ŒJZY8¿ï±&Ô³æ„ÙJC—M85çŒZ›uCTT˜aAþ{–*E]åðÅïý›Ê¢»~¯z%Wj˜Vf7ÎÊ-ÿi¬H’º?Òþ?ƒÆûý·œ“¯zÁ``ÇtÀ×'þî‘&%a¬±û ºÛ*Øy«½zx2TÔ±?#H û½´Ž(•Ûî\»¹u±_~k§P{»~ísÊ^å?øÿÖÕø%V©w„Ó*'ÎKׯbÙñoÁÓë.8©î/ÈÚì_-¤ÍìKDsõÊ­íø\·ŸÑ~°C6å¶IiÍ})tWz‰‘Å?Ÿ­E€íuåï(8¬·¦ÄƒÈûÖ̾ó?‹|‘—(ò¼^"Ï#ˆüÒx /Qâ=(<¼\ŸÞ. ð ï|éû³¼·°£¼-È»|”wžQÞ9È{ïoÐw{éû[êk­Kä-ˆÜ^"·ÊŸd>£ÌçƒÌí%sžst^ƒÎó£ÎWй]Bޞ„ÞVú¼„^‚ÐËKèåúx ½ÿBè¹oŽØwûŒ@="P 4Ö@9"Eê?4‡¨®»9ÌA%@¦è ‚j„ ‹d7µA#@P¹«Ã$8”¯î0Ù d7•«<äˆBþÝ …Z(É" +­…ìb¡Yh¾¡Ð¸PhFDj…rD¡z·‡PH…á P»PÈfd¡X(GkEÊ‘…ú ­X¨ÿÈBýb¡u³Ð²«>Ô‹…Ú“{&ãñ³yr4OŽæ¹ûÃæÉ·yÚ£yæmžÌ“W4Ï[ƒÈÁ<)6ˆÖoóÔhžà»½ÓbƒˆÖ¹œÓ¢sVpÎeœ¼.ãôË8ùÍ8+§ý`œ~g^ÆÉ·s ‰àœu9§ÞÎ)ÎiÏÎéÑ8å6N‹Æ±`œv•ˆ`›<£mòm›zUióÛ6ë¶üòm›mÓó›mòe›qÙ¦?ÑÕÜ|ëýŸéª=ÑUÉ®V +»ð*Е¼jWƒ "_€Õ`Ù °.¾šâ,{V™¡@äHXuÂrÀ¢Ê]""dÕ§‘ß;œ0žzD›O="V{ ¬«î`Å"a`õXã©HÔ_ñ¤€ÕW¬«]€•_€ExúØ$Úÿ×$æ~¤dŸš!™W«vl³ÿ ˜4yW¾æ—0N %mÑ:FÃSenH–#aVávBiÈ…Ä‘rÎãŠ0‰(cÌ¡}€MC°ãuwР¼þõjËr]G¡S9¨^$æ?±69ß('Õ}*qEq,±Ÿî6ðúÔ¨# »ˆc +ꇇô59_7ü3Võç}DfkŽŠU"šO70P—2lð¢i\t[zîsjXîu"¦Ã»Ïó#/KŸ0cÂdì*¡5ñÞµ» |¡1ÐÑ.&«ÇøÿÙߺ4†u¾ïA7ftѨP^Ž€—“ø¼<ëPtÏ?Ñ#OÚp1`~Ù×Ðs£X7Ô?ŒÍÕ[E‹3c𠮢ç§îñÁç²Îµ hZXcCƒ1ÆØ[Ç'‡¬›á²ér ¿ÇÊ06  ´Î_…‘”A—5 9;PkJÍàÙ>ÎÎ!lõ@ô8˜KÎݨ\Î}ée¡ÇÃ4ÿá›2Ÿ(8Ï“ Ó¾ÿj7-¹M+nC·Û€õ—Ûpq›–솓ÝÌl7¹wvÓ‹ÝŒd7·Ûôl7*»‘Ý4NvC[»iËoŽb5°ˆ—×쬦ÝV#‹CÅgfò™¹óI>3’ÏÌÏô/|F“ÏÈÖgFòÙ&£Ùh0öe4ÉgZ±™vÛLˆÄ;›Ñ_ÚÌ<‘éâðÞfø²ú`3=ÙLÏ6ÃÅf†m}¦WŸ‘ÏÐÞgàø7_: svš^¦g§¡ä4í§Ñâ4ívº¦g§‘Ûihë4ó½Óð¬N#Ùifv-NÓ’Ó}é4í­Ó˜m†ŠÓ€r/§áì4R¬Æ²ÓèÞi49|ã4ük§Ù›aÿ1ú õ[ê6ìIaaK$²%ââEÂYIØw$Ô/Ã^Ï9ìqæ }à $‚ߤ½ÂA‰„’HØvq/‘ Å^$¤™HX8Ø¿ã`N{3Ûw앃-spü=íÙ>ìU +êw”)È…‚rSÉjQÆŽ‚‰R86 ljsÚ¾cà±°²²žŒ;ìYÂßa-…=)aORØKYOrÖë3e=Ùf½™²^»Ãå°×g +{)ëqÉz’²¥¬Ç9ëøWÖ“·YO(g=JaOç&í]ïæœ%ð]&èÏRࣜøŽ‘ßL‰ÏR⣹‰|¼‰|-E>Î‘ïŠ Î»ž_ |v¾žòžîò*Î +|2râ¾®Ä'wâ“’øÆøzJ|;¤·s?®éÒœe>‘ì52V4ÇÌpAà­cÅ%èX£vùqjCo-Ö<©ðe]‹0¾ÿmu\Pý¡åºí¹ûÓj~Ú:Ù)¸Ãé¹06`"Ôò¤ñÏË®ÀŸã³prÿœÄ‹38§¢~É¢¯u øšžSh99+ƒR~åOæ½îÒÖï7¥û#ëqæ˜ìºÇXAb¾®}àøùv`°dø—û„]MÁ¡ {n†I´«ƒWžðÀïg盕xðhRþâô<×.˃ôùÙÇøGŒÉSæ+-𢧎`0˜oŸKgY¬=ðikX«Hëx‚Þñ‡]zÁÀÝÊý·%À°n`@¾­hú±ø†k袀O¿Ï80w=ŸF'~Û@îÄ7µ”‚¨G€Ôk&b#~‹vͯÃp¦¾×uг¤òK2/— èCzQ-*0*`Y‚¨— +̪S‹ +̤FЬÄY‚õIfVѳ +Œ"<³(e ª"ÀY¬h€OוE޲0z¯t­¨{þ½–éô=z?/Ì÷2le_¿˜}© ±O‘"`ŽM׿C~¹›O'R°bTÈÒçºáãYÊÓ}’Dzæh X$â ¡¹Ìzˆ`ÊPtA=ÄÂs4Ì€ÜåSh]˦ܔ{T“‘Ã1«Ü2fèqaüÀÒxï‹ +&È17ιñÅO6 •ÿ›ü~|ÞÏÙá]”{0Ì@ƒÐiþàê\Å1žDç±øzÞ¹§H/ÜüT&GàÂIØ2LÇë +™ã÷)£I Îîè_j+P1¼EK\‡ºøõÇ0- ¼u¬:ä +J>ð¦aì yÙð(&­³U½@4IáÖ4ÔËSž?¡O?Þ9üô¶ k¼1ÿäC¾Ýì]¾ý?Œm€s 9Ìçâʧ¶Ù=žú´I™’S&å¶9?´ÍÎ¥mÚ#gʇœiœ©¥mΜ3õ‘3¹äÌ‘s&l›Vr&Õœ\~åL.9“kÐì¥mŽÒ6ç£mÚ¾m¶GÒl¥nÚǤ9JßÔ5é5y5Gš=GMý5y_8í‘4¹$M-…ÓI“KÒä’4é‘49ÎQ’¦}JšV’æ#hîsfüDª›³äL+9³}Ì™­äL}ôÍYú¦• ©5hr難$Í­¸ãœýF +²Ø%hV”@ªÈ(JÀE úC ¸4Î,ü)B`ß Á,Bð©ož.°Gᔢ­èÀø^ø“x»ù RtÀЍ@+* £¨€~¥sEð÷}³¥¾©©oré›r÷Mü]}Ó¨ôMN}s¦¾©¥oλo2§¾i_ôM.us¤º9wuQúª›»¶ÙSÙÜ´MÎm“SÛ4ÉmSî¶Éïê¦Þu³§¾i–ûæa›Â©©pÒH³¥Æ™+§¥Ê)ÛÊyuOásW9-UΙ*§æÊi”*çH•ÓJåäT9ù®œ\*§Ý•3wÎ-ÎõÜÉy¦ïqÎ çíÆù˜ç7Ì‘Ý/˜”·„rM(oåœPž@Þ +È%œ7 Ÿ äš@^0þâám$ˆË{ˆS†8eˆg„¿*£¶ù7„„ðY>Âu‡ð¹A8ÿ_o7Â×T.ˆ·qMïâ:6oâÖ‚¸Ìâ­@¼½ ¼]ç ÄÕNw;ðâG÷;, CÖ=‹H616ŒÏ±zÞ †êéå„°âéû•Ño!Ä}Ÿ4悸˃4?ÙF~ŽÝüso_³°ˆšÌíÐÏß{BóÊØÿxHjx(‚'¼Ä{?r8@´ +Å K u¥?+ɾðéw^øìܾÃÁá =ð혤.ÆiòÜ»¹uLv(ƒbJNXVÿ7ÏWœhÕ£;À:öézyîœ ÐêeH³=@çûá‡8ñXdmr!Ý•âeï=©x8U(ÎÄÌÇ4MðL&¾¨K›P¼çîûe +N e¨½D¸ÓŸ¾7^šlÓ-™7Þ¬ÞâS<Ç/á9wð4ù-<¡ÖoáÙoxîÑÙ¿Cg''p&lŽ„Í^°)lRÁfOØÌàÔNÛ€spÊ NhäÎQÀI óF§tÚ z£³ºÑù_ÚË Ëu[¢ó¬¢7ðrHÈõdšý?Pm@iêwÞ9™Ø-[V“ nUa|ß³t'§î”SwÒ÷í¹Ý©âeþ. +Ãÿ"e„åɼÚÕç¦è]¾Œ’†w) ’º{CY1Dù¯Ö+¯{G¸œcP$œ(Ç € +4Û´ûå²s÷Y³ûmn>9`k{]Ó­ŸªQŒ)hí ¤Cæu£ ¢:ñ¬ƒ1|ñTüç„(àS ºÅ×és›ø7ó5Ómo˜51xPGÀVlysÐqÍ”âm©>ì9ÌÞú5fÀ¥]ö vPrÄïQC§ƒž-ü¥ «k_/¦¼ ®@ò·_Äc§·UÛÈÔ€»Y.š×|fâÈ×îxxñ.nb_íü&2FRlÅO¹Ä»Á#VCdô¹MÄB×èÂH²b>ƒäëŠ +ºµPtWÇô1À­€H‰º®¦‰ÑGcªc€&#}&ÈvñÀæ_atõÔö±¾E~Ämóu"êÁcG[ϽŒÚзG¢ÐU%h3ê¬1¾f=/‹0âqcäifäã០âm|Jí…lXÏ“qèr±þ.½ÍuDsžÑ„<¼ÐÔJ¦f2g"ó Í™ÐD_%4%£)Í]ÑÔŒ¦d4µ y©ò…æÊh¶‘ѤŒ&4yg6û›ëæ$4gF“5¡Ù?hÎŒf&s$2W"s2g"S™Í™ÑÔ„¦<°©™M®pj†sf8g…s'8™œZàÄHð†³Ð9 «g:5ÓI•NþЉ‘ᢤ}O'': œ”àÔçÉ7—…ˆ#šü;®9³iîŠæ< Ù÷íš=£ÉÍ^]SèšóˆæO]³W2ûÁ5å_»&g6åÀæÌl΃iÒÍùA“vE³ÿÐ6ù§¶¹2™#‘ÉÕ6בÌQ}S3™ýÁ7{"s}süÈ7wBsÐ<’9­ëωV2›’ÙÜlr¶Í^á\N=&ZÍl®ÛÔ#›RÙ”£mJµMNlJBS{qMÊh®Œ&W4ù7\³°IÅ6%±9>lòÉ69¡ÉÇ@ËÛ,hRFs]sÑœ•ÍutMù¡kJuMÊlÎ̦V×G6õ˜iØLhÒÉ4ùh倿°rˆõ!±=eùپдç Qü„~ºŒmìX™ઈímõWa:úÜ+È‚žQÒðHÔɸwðàZ4€B÷m8=ÀðÂÏŽ¯‘TB^ 7Šî  ê)ø•ÐiwØ…ÊÀX±µÁÄÔáK$Û +ŽÄI6äFǧw”5Öô³#«¹]ì =±xÿËZ“86mÄØ¥û½UÂXÿåiÁùeíoGëëuàP°¸àh‚fy]…¼­¸ŽZz=âÂKúú&äÍ–êÏlh¬mÍcW£áxvÃU—fzþ°U.ëoBÿ%£BþûsàÙãÖFzµžWeymA‰øQ=Äb”ܵÝJG¡{÷96~6^d/µŸáÂ@ÃÄ-kœºâ¢—¹c¿B§ÂÚßÛp‚ÌÞà…Xo-ö÷ÒCϯ(i÷Œ‰~óáΟ†Ý„“C&!#.Â-ºmäUtyRÿš3T˜éš™ÉÈPE&Ó31\ˆIÀŒÌK¯¼pæ…2/Ty¡ÌKÆ¥W\(ãB*¸Ìõ.mßpá#.“*.ûD‹w¦eZv¦¥ß`¡Ḛ̈X+keVzfEùà +­ÌJÿVt'X¢k^°TV„ ++£°²n¬È‘•Õo¬P†… ,'‡ÙËO}|þ<î+îù«ïÊÝÕþ^þ µ`…Yˆ jrîåð×xa+Ø?Üá­¼Š±‹‡ÆnÑ6ïƒw;q„8ÉﵓÀT0ù^ìáØ²(øˆë‹Z˜(&2uO6Wß4Œ)û:‰#LT*RUüM¯(åÕŽ¿mwŒ¡Èƒ4’cÄ3ß]ÃcÝO£ò1/Fëç¡Ìó¨E,³4ë$)AZqa0wÔ@0 z  9Ú>@›Ð¢Œ ±ÃîÅDéñ ŸKçDÊõß+1â¯ßñ™ ÷xV³j£¦þ¹ç“xm«Tš;S_,TùÔj[Ÿv+Úd!;Mv/þ4w‡w,VònÅh‚›š7Ô·íIö˜ƒÏ¬äœ”|×ôÓOJ~ ?œ¥|f)_')ï+kù¨Z¾²–g)ç*åû$åT¥œ³”k–r­Égd)߯äC7)ïYÊÇ*Ñgߢ$1§¬åUÊG‘r)ÁGnZ^¤|”ܳ«”sÎ=#kù.Z¾N¹gV-ŸI˳”S‰=”sOVr)§—”óƒ”듔ϪåUÊãú%åô#)'ë>—Ùÿ?,$ZôaTȰ¬Kf…*4Ž©§ÄžYPY#£ÂgVô„ +Ÿ‡}˜$‘òå>"”Ì3¤€Â7P4§ž•IO¨ðï¢"•ù3TÖH¨Œ„ +gR8ÂéEÊ8£Ò#•ۈÐÿ+»ÌwXv‚¥ï Ÿ`ÙVpûoÿ„ÅÍ ®ÇÚùZ”ª½Îž·ÄJ% F6Vºâ—ËúÜW«h*±Ò ÍàŽ/YC^‚#™×­+*¹|çgêoŒ·|FtÓ½þ&ørÆäÁ‘Y岞±ã^á7^ø8Þ@#Nr?¢ã¹žDêÈÑ=Î`3:ŠæŒåjp6cò äö@ý¶ÇJ9•_Õ]`’4Iâ/|5ú}EwÚÝ3‰ŸÊ€u~wàq½ãÊ£bÞüàwµ,.ÿÆzÆüú¾¸–ˆûë½Q|}]b#¨)I0”o£^×øÑ!â(*ÒñT»gãËŽ/q¼Ë’Ú¥b~( Í®WL&‚ç¬!ãÊ×”²âNtä@DÅS#«\R9{´ÐµŸüT{¨AœÛ¥¾¬C#:Ó~tCçh“FÃËB½ÝsQ¯§á±ß«8 €:Bš^šøš#ƒÛè L‡O³˜œ îâ‘!Žô˜ –3ij2LZ ¦ñºA,âÐÚ7Ät£xŠ÷#Åš)&*Ëbɇ-¼(žOÏG†µ0Lâ©7ˆµ@Ì…âU)–™)¾|ò¢X*Ä\!– ±fˆ¥ß ¦ ñèâyƒ¸Šg¡X*ÅZ(–B±Þ(žãÞ7ÆúÄ1qáø†±Œ¹`,ãà÷ñ*ÏÆ\0ž…cù9ÇzâX|ãÈ´2Èñö¹W»‹ÈÅÝ7Èãr1c*ÊñÚ…ãY8î7ŽGqã9mÿp×o7ÞÅù27¦L2K%9æ­7ɽ\AÎäoŒûÍŒW1ã™1æ]8Ö]9Î+ÖÅʼn×ĪâQ ® „3Á¼+Ám#–LpôI"˜ŠïLp<7!œ Ä^ËàV …àQ ,_Çüpì3c!Xµ Ü Âý„ð²b´ß Ôá½É‹gAx†å)PW/Ö³xqbøæÅZÖÃR¼¸Xñ|´âþ`Å`)VÜoV,àY–›Kax†õfÅáUòtExÑóô~ÊÓƒŸò´îBñz +Ôã!PÏ›s±â^¬ø©w±âŸ;1=ê]8ÖG'¦âÄTœxÞœxlSÖíÖ 68‘ó+ìí¯?ÌeWÄþj­bG¡þ*vJv„Š{|+d+±µ[¹üoÄ® úÅV ƪû;>Û'>Ï7>ã žøßø¼múh@ëz´Ÿ€¶7€Öo}á³ï€Ž@Ëù oøŒ>ãŸóŸó ŸãŸíÁ§tû…ÐñŽÐ_ã³à³¾ðY× Ÿë'þ¬¹ÀÕóÏZ2ǪɭYW;ФÕzµ8‡I¿ ÇozÀB»0ínX$„ì -gD€Uç—j;Eéô-×Ü6@7½HóÂÑ‘¿»ñ¯ïìÒÁò¬–>W·Y%aáL-Õ-âÆ‰rC¾¤öÓŽYæ¼=R¸Ý­îüR¦Ö•ƒÛi à$\²§¯fg?toÚæK¤ï¹±{{] bL¹õ—°t©¹Å¼¥î\NZ2ΰ;ÒBö4c†Jþ °ÿ¢‹£_•5ºÌÄÂ2mq4r¥·ÇîÉìÛ­É´ÜVE¶MBʶÞßZV otâ~¤øÍJ£Ž·Çs‚‰c?3T•è™%4f7®QváÅH©í®ƒ±3M—Ó‰d¢äÝVE6®àYâür–ræíã/YzwªK›±'^btþ¶|­r5&@s·ée§óÏÇðE¼kƒ‰#8ú»’ž¤ã¶š÷ˆ°°ªŽè³fTTAºóÀS$Š.øž~TLýd1‹ÏÚÂ%ªm’¶lzH/Y¡={‰ðÖ^fâé:õèr)µi•Øiðv¹¸»è^°Hœ3Ô©BÏ»* ” ¿Ý@xj7CõÃaÔŸ„þqÄ_§/ Þú!Ev"NmÇ)Ò!6kد'Er7Xº;7×ÉÉ­s2@µÒKŒ§¶™Þ¶ìͬڽtÚw —¤œõª<ö®T5l}qðV²”TüÊ• |žÆ­Íöɲ7®ÖÊÑ—y•7’@.{+'ÃJïX§âM‘oO&¸‹.CVÒF餯ât‘„Yº5N<-Ø(ÝåKõo¡¹%u9DQYT'™FÚ¨ÀÓ¡'6-kÜÎ"8¬Ä¡\´¤üÝñ‹Æ„†&#$ÄeÔÉ&E\Ãù(ã’3OãÖXí{«"’ú⤠ÌÅâì±? Pdø‰Àº8|Mˆ%“bc,óžd„^±¶Vײ€ÛDí£ ó±F (¯'(n[ÅéÔh€ é²eœ[L£CVÛ€³}dþÍpöyj†¸¡eÜæ«žkû[¤¬n¾6B±åµè@õÞ=€½ºöËÖÆƒ™P÷ú´µÜJý!Czª‡›Â%r‘ÑÐhûQBOö†sÜï½*ÜHIÄ^lz‰ƒŒÆ9å½UTWaÇðÚcSM[«]6Tà5°é”$}M€5»Õ™•n­ÌʲÞòÞe0GNô±:#É¢³2»ÿý/u¦Í¢ÅI›Ca˜š ¨`!¦çË.Y–¢KÚÿxHOºÆÝ +-Y !RÒI]Ø7~Ö,e6ÖMªÚ°Em„•µü|Ázà-ôò®…sÎggêLÔOàŸsP+Ÿ"O ïnéFéóÐ)q@‘CØÇ“vÀÚRö±“Î'i,v2%r¸ÜJÚ –©ÍÖGÔO,ÆÖÄ0´„Q`¦U§Üæ4ª«ÎòSš'uYTEèÜèåÄ3ÆtÎ[8Dõ”™Š]M¶wK™ÎðH‚©¿4'¯™ùý/ÄÒ y×èßLWsÜhö¹á=zåòœ®rØÞÇå˜d¡ažÃÝx˜ÂÖkT 7Ê |Æg…-âØvh6“óÇÜrô›ô•ce[áP‹Rv×ÅÜHV8R(¢óÌǺ64«^‹Nc·¼IJÌM;mºÎ ƒ¢ØØIPSó…òºì¶M†-JÒ{¡§÷8X²]Y8·<ß0­rlu^kË[«ž:lÆ­3©qM¥§ßx¤ µ\c®,róž×S9sÈwU_cá—–,ó6$×ß*t&c }Ïõë¿ÿüí_¯ûý¦€»Ó?ß Ù5:zB™&ûÍÊÖö-(æpñ;¦ûxÐlJ–sßZh^µ¿ì±¦.Qì¶O1¸ñž¢MFCŒƒÁhø¦†SKø‹ü|¹S¦…ÀZ2,•^Έ“X<ÝØ(8ìOÔ‰íP'z ’Ó6lŒïòÆ`/êMÌAkyäÍäL$‰u“yÐãn6ùN{[©ö•­ÕÕšú\Ñø>½Öôªü勊Àú‚…ç:½Ã9ƒŸ5S¡öÒ÷m¢æ©D8Ãôp4%·q)beª2Jj…œe}¥¼õÊÌÄ8ö'¬d—õj»3£Ëz<îÅ…GÏéjöW·¥ý6á+›8.6¹Ì’tr4ªÇ¬8µ ÛÿuÂzÄ—ñœ|W¯Žå¢mOæÃ~‘güV£SF@ÝÇö¶1xÿöè]…ºóѧ¼×µ‡¥`ÿö|qÇë_ÿg¿Úrl¹màÿ¬âl`:¢ÞZ% ’ðI>’ý©"%µÔsæ:6î l fT}ô ©‹ü—¾ >¯_ÞþòÓ_ÝãÿYž›Gú…Ò‰ŸßdiKK1ÒÊû8†ÝÄññ샑âøO8Iÿ2œóËœf+ù›}}¾'ŒC-¿8½°ÓEzà’T1öðq“xSf²N­%§EÄ礹֌†Ϸå”åðn‘š¶6ÌŠÈ;yŽg Þã4 Ïy1+Øža –};§öõÝ´8ÖÏš¨EjXÙbVfÌʳ2MËKÌò3½ý|fW×'͵ݰ2Ì*kÌŠùWFÌd¡Û–¨µ%jmV·¨UÛµ®Q«#jõŒZƵ3jmš¸‡eÆíd““m²ÒM¾m„»0Î(·rnneÝB;™¼“xÒ™'“z²Ù9­\Ù'+ýääŸì”Î@Ù((“ƒ²P& e¡¡l<ÛmعSQN.ÊJF9Ù(+eç£(!ea¤tJÊÂIYH)“•²ÑR:/eÓ¯Äôƒ˜²2SVjÊÉMÙÉ)²ÑS&?e!¨L†ÊBQÙ8ê•£~äÃKB\2â–OŽú•£~ç¨WŽú…£¾sÔ/õkjrÞ‡SžüWV› ñ>jd* ˆ¨&©2íHž~æzxÌêžç‡4?ØŠ‰ýQrfù#4o'¼ý|J\I.ò¿mÛÉzHZ-øx+îpÐÝiÑÀÃ…´ºø|ó«ÿ®Gåj®ëÆ®á†Á1EH°CØ>&åKDŸ «1ʱP³+}0V≯èu‘×k‘¨¿9LÁT$ ©$Mò*_ÎSós[Ùžƒîl‹ÂÑ¢Œ‘^¤ÚÙ<.¢6ѳ¹‘¡f¥¥º¯µCPщ f¡-!=HŸÚ_~2¨o¢ͨ)rG–Ilc{X'¬ŽÆo·À‰.pÔø³ÙkÇegX€Ãh¯ƒ‚äÑW¹ô m›Æ£úM™ð.Æa 5Зó7®ÈúÌ+28ÍûžZô¶+3ñeŽ£ÝbG9õ  „Å9[&À;íCšÈ £›ú!¹×vûûj(?ùf·ˆì°Ò´ˆÝY2Ï-Oôó›ÁWÖBê„5GkJ=ç²Yë‚l8”4¦?í¾â‚·@g«ž]À±–sæ§á"8€‡„"¡ŠõôÀi©æÄ·‡Ÿ°ë¦0DËP}yÂÅXó½4§cÐBÈ« q X„Ç +ïhXcÆììÕ«ÅÿT.Èk0ÇÌÑ\™'\Ð4þ+‰íC€#Ž8×t{¸zÊÕa…+þ„àOnzã2a‚ñHÿ“:Ã#œÄcëžç$šL0tÅÄ4«`x\¶ëÇ¿ŒT™Á_¸ðû#"xÙŸŠ1ð÷VŒR)| Y­ 'ÿŸˆ\1䙄w”51q#ê¿ÿ†§…5ãª]o0Õ·Õ™ÚA‡Z4Áö´U‘¿&Äu†E ªÉxà1­ÃñV8iA¢™o]ÓPÊüÑŒßÑ«[+X† ¼rdy¢i?ø¹¦ xawƒÀÅFv¡¨¨"[¶nÅn©™Á¡¬tô¥NôiCÔìùõ…~3¦ÓP~½ —ë2.êWþÊ«ñ¢'õ…ñÔù0__‘•¥)μ›Cb«•ñÅ×%¤µžþtº°$i:ª +òe¬õUÔ¾·8Ï1§1{lY™ewB°ÓZv;-Ý:X‹ L`m"V¢ÈT¨#?DÂCc6rÚùèßý£¯Y÷›ÛÙY]ŸÖaîPµÛÛÝÒEm¥¾t{§a)ÿúÓ ZÜœ8}X]°ùëVc'=äkûKæPÔîÝ~¼ýáí_Ê iìU>‰Í‘4LöéáM¯7% SÂϸ'aéŸÌ.>,Ç‚ï)@¼¼‡× ÷Î8Ì¡7ð›&™»Y6?à?ÑXíQV ±˜Ûw 7ö]~§˜·¹üÄcÿù¥Ð×wë®æ3Z_¾8ØÖ؆xˆ’O­né‘5#þØf„ íšƒöªü+½ŸHtTèBMÎPEDj­9ýIèC¢X£Føî´ŒëËØËeRƒ[vðñÖ]ƒ óXf`liÈN³5fÆjá¯Òá,•}gÄ$ç·BºÅ: +iÙSeU‰´A]ñ&-a½båÚ“ÛÚàç·Þâ|ž„´¯!®šÈ(9VŒuÀÛiÁ’™b^öd\†­©Aܲ£¾7!Œ­a¬ë`ljдEfÈbâç7¸° ÐÞ’­@}óÁP5HÂ1fóÚƒa#ƨuª7fÁÍÙ8¡(÷šgˆXÚk;ÂÏr…6w ìë™c¼7SG*9MÏp1”nyÜÞzi£Èe¤Êƒµ=5˜d2PÖ®‚‚dx¶ïÑ¿þ`+NúÍ9­¦©Lv:O;ŸßèEÐVQ"ù÷’GƒÏGôn«>2WŒ’Cö«þXÄÊŸÖÚh-à7hlÂnå»I.ê¨!´žüñÚ=Ø8+â»Ç\ÄÌwÔȱ#j |Ó^ÍÊŽ¿„À!Æ^Ù|Ð2ƒÓPÖsèžpãl­š^8(¶#²>jÊÀçAÑßjb¼Sõ Íå>‘êPŠîè8-‹¶…L\¾#†µ#é‘YŠ7×}æÞ1hÙù\ +}…*XUƒ\+}¬FMž„¥rMláâ¼M$DÆKšŠêfuš%³0:19NÄ 3~‡„=ÞŠM€-êQªJ­¶sŠ0þæ%Ò—ZãÌ?61VÁù^‚úЇ¹/šY¬LÌH:vE¯ßam$—‡Ý¥Áý×^§7_®Ð2 ·®Ã¥¶ç¤ u´[F¿µ-m\Š»óÔ„Ô±½ºbÂæ4Ía«<Å3xÍÊtü'™Ñ¬˜rÙ,tA6Lö÷éª')ÄSüõ½U=+º: +z•9ó“fb+ßPó77Ùs¡ Ùã°·HO«ûnˆ·¨…ØácÀ8Jru4qÕ H˜46ÜcÜñyúè‰ðƒ¤+´>û^1IG¢ŒeòK}qe3᪋O*·­m¤ÛêøÑ »×6Ƥ;ÏwX_~‡ýY<^Шú“/Î5aˆ>˜N¥bK‚‡‡Ø5!Ä3*;ëšX¤6¨9äÒr•œ­}f¿Í\?‡æc_ÇD¢€‹“7áu7n„¨yÂçuÁ„PÄ®áì-¹K,[UqЩTCaí<*i‡õ…¤÷Ï_1†ÒГœ²6ÎŒþzp4Gá3Ô‚ §ëlßöÅs Õ+­–]Ο¶ +ÿzø¿ø·s#¼Dz2ñô^ÍÐj(8š*‘ÊÏÑI ‚G×ìá‘Îæù´TƲéC´p¾e¡dÝmwíB¾Oñ<Ìõ¿q2Ä/Fâ'¢’F²5¬Eíú-Gðë\Çáã×µìöÙ¿áÙÇ7 ÷Á· +‡ÝwÜNLuê°DH ¼ñ&R¥¦ë7È +ˆþbópÃá ¿Km¿<¢pº8,åv­r^¸ç@%TI´Ønl¾+ðaÇ‘Á„|AÞÌμS5LɦYò%|—SvJ­/Îï ŒÒ´_S±'rúúˆgéÛí®“’ºÉ S(wZ:&W×,ˆ|/4å«7‹2I]ÎÖâÉÎ/F阒"€A " u‚(Ô$ʃkC¦õk{pS.С4þI‡t)|æWbhc²ÃàtßÕ®lÂÙâB,_y€ß/ÌÏò•Ó,¤vÂåóÓM$ŽMÁ¾³ûÐDFÀ§ªæbi$áØ|¡DnB¬ùã.5)^Þ/þÃqòE£úISK; Š65tlMNm‹g…“B³F!’„zÍKøºkY¨KM>˜-¨ˆª¬_ÑðA{Ûº¥¨S’¸Ÿ²¾OqÔÒì9 î ‹:"¬ÖNÖ30ƒê2Üð="*ðÝ•Ùé°MÂF؉:³¨ VIµÄg’Jº¤Í9I‚¬”7‰;%Òxç=YƒDõ8 æwܾÏ9ûƒÛŽï¸Û {Ï7F䍿 /&`³;’¬•G×,-Ì?³:‹AØÂ^[)"„•© À„p9Scw‘.åƒéÑëJ¿!)’NC3ò7Þçûú6 +áfpB¬É#]wÚNä÷=¡nbáh¥Z«09èš²\…”ì« “Öã«I±üñ•$Xùj³ƒê¯Wq¦– lƆ„jb}þÁïõÇFa¢E´†Pf…Smþ~œ§ŠùqfÖo¿ÎÍ€úL¾r{C[ðÈa£ÚÄBW8ö¬sÀ8Y{ÉB'‹ ~æ*‹¬àlÔ¶(àX{Ù]ª`Ù¸:Ú5¦/ƒ §›ØÒBÕk©;zÎãÚˆçAµƒ‡gŠ@MfˆŒÚ†AÀMLzJ§w÷TP 1wAçhŠ]Y‡V+zݘõÖ…Ì^þZlKñjñªKW<¨MØõÁzº¬£í´øÏ{Vp¡–: Þ™Ì8àI Î#ô  ,,oævW«KD÷ñËFcyKC¢¶«ïÀòpöEpaŒÉÎÂ¥#`í¾)'CŒŸ/ª9³¥ô°ÞZ  ÕÀÀáDKÞ¯úOlÒÇ÷i`º¹Ê¨AÑ2w]I'¸´0ì`ÞGÝѨbüz,˜PM—L¸lÿõ˜d–;ÆÖ®Õ 1ÆýÚbš=.´ÉÕûü|¬qòÚc­?„Ûç׸§ æé~ü3E@¯`¸µÇàEMòˆåï4·ýû€1û0@ØÉB¦°09qÞo-ŒpÜLpš lÑïê™9™…_Ÿ°ú¹Q1Úø{`’Û_NÊV­E·¹ ‘̺כ£¶1%"¸«>4– '”qÁ÷Z³®ête)NywòIÄЬmŠ?Èz•܇&¶Þòl^¯ÐØd}1â›l|•g~ðŽØN³{1ëMeÒi  eîñžËCpq¹–;+Ñ„î$mtrÖ%•*COpq¯ÙνŒi¨˜më.îŒÑ6/a%M’ÃÚ)Ê[¥ Õ§óV@†Ð§‘»#©o·bb zûÛÀ¸ ˆÑ©•… c`uHÇb`S=ÇáòI…›ƒè{£\òÆÀðAMP˧ƒ” hvYiǺ«ý`z®Úmåæï„Déguðõíjk8÷Y“QõígÙµ( êc(g ¨åM¥i–Wr1áî¾â\¯,¾e4»Ndø[}=ƒ!V! +—!_:a?·ûy^Èß>o̶šÏ¶Ë¹;J!àVÅ­R†¡ã¶æƒaVË,³Ö¾Ë'¥Gšº„”Ð‚á¾Æ]ݸùÞÔHG(ÒSpSóØ}¤ Q²ºÕtðÁ÷¶7$/üóÃþAFsä¶Yð4€PÅ\×@”±þ3…‹å +—“…!oŽ(¾F@ èîîv¿@sÜAçþ]öüúaíTaË7ŽÏnÖqù±dÏ×…2¶vÒ=Þ·þýã¿ÿc¼Üv,Mm(|¿Ÿb¿@ïá`Àܦ3Š”¨E}‘hE‘r’’\äõccÀ‹*¶ÔM5®úàcùñ§Gxêñù÷Ç¿å§c÷IK–4åÉçŽ5Qò²“ ¿¤¡8…®´ÆöSÒ±Ì.—@ ív嘩2’òÇ9ߥHþ§0zŸ9ÉŒ½ š";Æ}’ŒdQ,Mn[˜ÿJ +à·øù¹’Y +”Ñbj“P…ú€ëÑ`}+§£I‰w¼££¯«CÍOCNkWY$»ç,¯<иXgf g+úŸìùlBêª –Éêf~{ÔË2vRÌ'ä ™³¾hÌš•9Ðá÷8ã\ ÷A–_vV~ýöõùøå_Ÿ¿|ûŸ¿ù­Xr€DS%Y´wÍc—žÂ~ó‡‡ê¤çÿä<ýMþÿ½ÌüÝ÷ðüëñ ±¼€Ú&A®ÜMþãñ]6ðÏ‹´Mž[Ò§OxsûXÆY +¸JrŒµ ú²~ñŸ¿<þüüî¯Ò^ú V¹Z`½WPöª>Mã5Í~‰ÊRã2~<¤ÅP™ÙG¿1g™¡ éãd–ÐP^U›#S +Ïåll§³MË\°6^k9Y!䢪‚¯A”ìA¨o;/çÂýž³v%c²Ò‚!>‚`¢4b¬õ!ˆVF x©C­PÕl«Uû8¯C Åësó:¨áuPkÕAç¬:èrP‡Î^‡Z½µ¾«Ã áZ‡Z¡„Õa±ê0ƒp¿wf³3ˆQ‡C|Á„Õ¡Ö£ê¦Ý•ü„«òýx¤a“7ûróÄß!…‚)9"ÒÉOQ°Ó4Ë¥Û™väñ`Û´ihJÇ—fÊžäo6MOÝ\q Vº×0Âü6ì%>TeúÝ%:Jõ£ß–ãüêµ,ÇÍpÇÍÇeÞö\óžkgº=—W»®c÷]­0?{•»óÚIïW>zŸ=í;å˜nô8c®Û‘j)º¿Ñ_Š–l¶\·OÞV=¶ô¬MÄî‘iÑcÅ^þ*¯žþÌ4^ ¶Œj=”™üâ5E‡º†z£c}žøi_ëk!«Ç^ ÛÚ&Øx-ô!Ñ’_š¢+_LÄ'Cåý-†èhÕ)m4V%oC6•¦Sùj¶äs¨g›7-YjÜËiŠ<ºÌyM~ò\ÓÆ?¶Yà ›1†k­a¨Öïk£$ˆ€0b$K¨Š‘ÀÑ=h±ŠFºÊ3yt_s–š¿l…è}—BçhÆë\ÎÆA§e.¬Zèx­uÑ…žŠÑ¨=FG)Ô5‘Í£©Ë4ˆRšÒ±nÔ îÛŒ,…ªM›V—|i¦ˆ6‘n6M¶i®hc½º™Yæ…ͰñZLÃÐÚªÀ«ª¤Æ…’ëÛš´ní#QI;%9‘Ÿ‰ú +´¡@UÛK„êÍÕ†Pm'T@U§M¨ÆPÕ½ ª¯Ñ” ®¾ì]кøŒÖÀ¸š#‚E×ÐuDàtm]ÛI×tµŒ®â«1èjQD»õô†±+Š cWÙ ±‹€@×3f¿Égpœ¢;>1;WÌÎôóÎþgØf6Ý|£m© i(Ç-ñÛ†¸•¸æÅB.E‡nèoèÚN›º¥:u }ê’|å`]©«¯ÚÆ®v„ »”ú‰ÝΈÝÞ»½Øí °ÛycW×ì–îØÂ6îñ¼Ôf$ð†\¼!9xG$^.àMÀ›"‚7A9 +mðêrÞ6xÕ…]Ž\Þ€WnBÌr$¯äÕ£²ÉËÝÉÛ"€WmŽH^ªH^ªyÅœäµy ½-"y¹;y9yä•$‘¯N^MÀ¼*Ô‡`¸—¼„ä%>É[¼)²“W ¯šNÞâä%ò’“—¼ü†¼+€yÈKH^⓼É»"0òZ›¼Â"oò#y ÈËN^~CÞÅ•¼ ä¥EÞQ,ºž1ûíH>ƒãÝñE^òò&/ßÉÛ¢49”7òv$oÍ@^îHÞ W.¼“—’wt½Sc©VXäåŽä­ÙÉÛ¼ýy›#…|%oDÁKÀÝzr·äÜeÙѹ˶ÿ⮚›»:os·"wiS7‚ÚoånëÊÂ|§n«@]BêV>¨«5ÛÔ­HÝzP·u{uêVFêP·A)ìV\¨ÛD1“<ý7ê;¨;^‹M]ê'vÛ]>°Ë'v±Û»„ŠW·[ÜU?w§pßÜmúQü)ŃüZÓuᮽ‹ÝÚäàÕÞ¸ÁK¯]ß-xÅÜØ ›º +Í]ÝgAW¶ßÔµóvÁîòÿ†Ýéÿ¸#€Å] °½;˜zwDàzwD0©º#„Å\‹a2w1¡ku»Pwq¥îŒ"{V ýèyÆÜ·#õì~SÜ~OäN¿mž%Ÿ=÷Ÿ¡C–».wôFݸ©€œºáÔ»¹uêÝpèÝW=W§np½k;mêF¸êñuEïËÁW@ßoBÁ›œ»Cm¡Þ-ÈÝV»­ÜUÓõnqîêš w“ËÝr7½“»1¦WÊr¸näÕèäe o y{½ÛCròv;“¼jíG0»Þ-á /;yÕ…UŽy.äÕ›ª†«àUÕ¾oqòÖàUø$¯ÞohxÅœàµy ¼µ¡Þ-.we¼å®Éö]-ö?Å]Ò;Åñ +ÞÍP²—+ÞÑæ‚âÑ ‚÷Ô»‡Ü}ËÝÐAî'ïæ´ßwEpC¯Ct†°%¯†€’7v„/*ÞSðzwÄ0õnèÀ^‹b²wÃz…qeï +ã +_Gê*Å.–|Ïÿ†égðœ¢{¾oú.Zïü_蛫ÜwQ™7ú–š7¡æ¥Có²L§/¡æ¥Có’_w³éK‡æM yÅ…MßÒÞÑ—¢±ñ¾DoV¸eo>U/²WÎ?°·÷ƒ½v¥¦æuÅ›¼²Ñ&ouÉ«ã7ä%šAÜ4on@Þ@ yó!yKÉ›¼j€äMP‰R\òfän W¼ +‘Û;îæþ¢Vë»­w{Éã)ysFòjoèä%>ÈK ’7g—¼1"z{tö¶êìmõd¯¡fd¯ê–7ìm’ÖíÂ^vÑ){ˉނª7%P½)ªWM§oÙ²7€/å _ÙËoeï +á_Ý;bØð-'{ +߃ÁׂØôµ ~‹+ßŦïcÒ—Aùò[å»â¸Ò—AúZ1V!°è|Æ +´£ ®SÜ®/üšëF[vñËïÄoeI<•+~åü9~+~úöˆÚ—3ÐW  ¯X[lEо|+9|Å}ç;¿ƒ¯´¹±Þ•oTR-öRéK-žð¥øeú2!|G{):}[üê^ ¿1ÐÆo ô¿rÉ¥wú¶ +ôuâJ¢j?ðÛ+à·FÀoˆß +mH¯ŽßÚ‘¿›ÆæÂ®…ÝŒ[”2K nü±9)'àoI'!µKqþr?ø+¦óWæmþ–üÕíÕÅ_ü•*j?¥}«¼²òÛkÁæ-èúÊÅ8 +V’¬Æ¶Œ©xJËÔ›œÖ,3V’ÍJ¯"“mŽL!žËÙX ¦;™e.Ø ¿)XâWŽto·bÔdE¡2¢LEÌEÌEÌ;Š0.’E¡ËyºÓŽB][QÐÙnýúíëSþù¿¬™–è endstream endobj 33 0 obj <>stream +8;V_YZ&s\n$q7W30%t8#pHq/M"XntM;g7`;9o(E&481$=_dKhE]TLEs/:C_,^k*W% +!kf*5)h)kR4XdN#'j`BDte_Dl"Y=n04fhr2j)2 +#XV&*FZi7)lDS7F!UXpZM6kcNAa\i1 endstream endobj 34 0 obj [/Indexed/DeviceRGB 255 35 0 R] endobj 35 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 27 0 obj <> endobj 28 0 obj <> endobj 38 0 obj [/View/Design] endobj 39 0 obj <>>> endobj 36 0 obj [/View/Design] endobj 37 0 obj <>>> endobj 32 0 obj <> endobj 31 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 21.1.0 %%For: (Olivier Gillet) () %%Title: (stages_v70.ai) %%CreationDate: 05/10/2018 11:32 %%Canvassize: 16383 %%BoundingBox: 211 -183 413 183 %%HiResBoundingBox: 211.907694643603 -182.251 412.899889569271 182.251 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 13.0 %AI12_BuildNumber: 326 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %AI3_Cropmarks: 212.032694643603 -182.126 412.727089573637 182.126 %AI3_TemplateBox: 419.5 297.5 419.5 297.5 %AI3_TileBox: 31.7198921086201 -404.16 593.03989210862 404.16 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: 40 199 1.5 1583 1122 26 1 0 750 214 0 0 0 0 1 0 1 1 0 0 %AI17_Alternate_Content %AI9_OpenToView: 40 199 1.5 1583 1122 26 1 0 750 214 0 0 0 0 1 0 1 1 0 0 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 77 %AI5_ViewPalette: 0 2 6 8072.666 8612.918 0 2 72 test %%PageOrigin:114 -99 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 42 0 obj <>stream +%%BoundingBox: 211 -183 413 183 %%HiResBoundingBox: 211.907694643603 -182.251 412.899889569271 182.251 %AI7_Thumbnail: 72 128 8 %%BeginData: 11840 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45CACAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFF %CAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFFCAFF %CAFFCAFFCAFFCAFFCAFFCAFFCACFFFCAFD05FFCACFCAFD35FFCACFCAFD05 %FFCAFFCFFD04FFCAFFFFFFCAFD33FFCAFFFFCFFD07FFCAFD05FFCAFFCACF %FD33FFCACAFFCAFD05FFA8FD08FFCAFD37FFCAFD08FFCAFD45FFCAFD49FF %A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFF %A8FFFFFFA8FFFFFFA8FFCAFFCAFD2BA8A9FD19A8CAFFA1A8A8A87EA8A8A8 %7DA8A8A884A8A8A87DFD07A87EA8A8A87EA8A8A87EFD0BA884A8A8A87EA8 %A8A87EA8A8A87EFD07A87DA8A8A87EA8A7FFFD46A8CAFFA8FFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8 %FFFFFFA8FD49FFCAFD05FFCACFCAFD07FFCACFCAFD09FFCACFCAFD09FFCA %CFCAFD07FFCAFFCACFCFFD07FFCACFCAFD05FFCAFD06FFCFFFFFFFCFFD05 %FFCAFFFFFFCAFD07FFCAFFFFFFCAFD07FFCAFFFFFFCAFD11FFCAFFFFFFCF %FD06FFA8FFFFCFCAFD05FFCAFFFFFFCACFFD04FFCACFFD04FFCAFD05FFA8 %FD05FFCAFD05FFCAFFFFFFCACFFD05FFCFCAFFFFFFA8FD05FFCAFFFFFFCA %FD04FFCAFD11FFCAFD0BFFCFFFFFFFCAFD0BFFCAFD05FFCAFD0BFFCAFD04 %FFCAFFFFCFFD06FFCAFFFFFFCAFD07FFCFFFFFFFCAFD05FFCAFD04FFCFFD %06FFCAFFFFFFCAFD06FFCFCAFFFFFFCAFD05FFCFCFFFFFCAFFCFFFFFCAFD %05FFCAFD05FFCAFD05FFCAFD0AFFCFFD04FFCAFD0BFFCAFD05FFCAFD10FF %CAFFFFFFCAFFA8FFCACFFD06FFCAFFCAFFCAFD05FFCACFCAFFCAFFCAFD05 %FFA8FFCAFFCACFFD06FFA8FFCAFFA8FD06FFCACACAA8FFA8FFFFFFA8FD06 %FFCACFCAFD09FFCAFFCAFD09FFCAFD09FFCFFFCAFD09FFCAFFCAFD09FFA8 %CFCFFD06FFCAFD05FFA8FD39FFA8FD05FFCAFD08FFA8FD0FFF6084CFC9C9 %FF7DFD05A87DA8A87D7DA8A8A87DA8CAC3CAFD0FFFA8FD08FFA8FD07FFA8 %FFA8A8A8FFA8A8A8FFA8A8A8FFAF1313A79FC87D52275227FD04527D7D7D %522727527DC38DC3A8AFA8A8A8FFA8A8A8FFA8A8A8FFA8FD07FFCAFD18FF %8485CFC9C9A87DA87DA87DFFA87D7DFFA8A87DA87DA8CAC3CAFD18FFCAFD %45FFCAFFCFFD06FFCAFD09FFCAFD05FFCAFD05FFCAFD0BFFCAFFFFFFCFFF %CAFFFFFFCFCFCAFD09FFCAFD08FFCAFD04FFCACAFFCAFD07FFCAFFCACFFF %FFA8FFCACFFFFFCAFFCAFD08FFCFCAFFA8FFCFCACAFFCAFFCAFFFFCACAFD %07FFA8FFCACFFD04FFA8FD06FFCAFD0DFFCAFD05FFCAFD05FFCAFD07FFCA %FD05FFCAFD07FFCAFD0BFFCAFD06FFCAFD05FFCACFCFFD08FFCFCAFFFFFF %CACFCAFFFFFFCACFCAFD09FFCACFCAFFFFFFCACFCFFFFFFFCACFFD08FFCA %CFCAFD05FFCAFD49FFA8FD05FFCAFD0BFFCAFD15FFCAFD0BFFCAFD0BFFCA %FD05FFCAFD06FFCAFFCAFD09FFCAFFCAFD09FFCAFFCFFD07FFCAFFCAFD09 %FFCAFFCAFD09FFCAFFCFFD06FFCAFFFFFFCAFFFFFFCAFD07FFCAFFFFFFCA %FD06FFCFFFFFFFCFCAFF7D7DA8FFCAFFFFFFCACFFD06FFCAFFFFFFCAFD07 %FFCFFFFFFFCAFFFFFFCAFFCFFD08FFCAFD05FFCAFD05FFCFFD05FFCAFD05 %FFA8272752FD06FFCAFD05FFCAFD05FFCFFD05FFCAFD0AFFCAFFFFFFCAFF %A8FFCACFFD05FFCFCAFFA8FFCAFD05FFCACFFD04FFCAA8272752FFA8FD04 %FFCFCFFD04FFCFCAFFFFFFCAFD05FFCACFFD04FFA8FFFFFFA8FD06FFCAFF %A8FFCFFD07FFA8A8FD08FFCAFFA8FFCAFFFFA87DA8FFFFCFFFA8FFCFFD08 %FFA8FD08FFCAFFA8FFCAFD06FFCAFD04FFCFA1CACAFD07FFCACA7DFD09FF %CAA7A8FD09FFA7A8CAFD07FFCACAA1CFFD08FFCAA8A8FD05FFCAFD07FFA8 %A8FD0AFFA8FD0AFFA8FD04FFAF60FD05FFA8FD09FFA9A8FD0AFFA8FD08FF %A8FD05FFA8FD0BFFA8FD0AFFA8A8FFFFAF131313FFFFFFA8A8FD0AFF7DFD %0AFFA8A8FD05FFCAFD07FFA8A8FD0AFFA8FD0AFFA8FFFFFFA81A131AFD04 %FFA8FD0AFFA8FD0AFFA8FD08FFCAFD05FFA8AFFD0AFFA8FD0AFFA8A8FFFF %FF843C84FFFFFFA8A8FD0AFF7DFD0AFFA8A8FD05FFCAFFCFFD04FFCAA8A8 %FD09FFA8A8CAFD08FFCFA1CFFFFFFFCEC8CFFFFFCACAA7FD09FFCAA8CAFD %09FFA7CACAFD06FFCAFFFFFFCACA7DCACAFD07FFCACA7DCACAFD07FFCAA8 %A8CFFFCA9FC19FFFCACFA8A8A8FD07FFA8CF7DCACAFD07FFA8A8A8CAFD04 %FFA8FD06FFCAFFCAFD09FFCAFFCAFD09FFA8FFCAFFCAC89FC8FFFFCAFFA8 %FD0AFFA8CAFD09FFA8FFCAFD06FFCAFFFFFFCFCFFFFFCAFD07FFCAFFFFFF %CFFD07FFCAFFCAFFFFFFC9C9CFFFCAFFFFFFCAFD07FFCAFFFFCFCAFD07FF %CAFFCFCFFD04FFCAFD06FFCAFD0DFFCAFD0BFFCAFFFFC39ACAFFFFCAFD0D %FFCAFD0BFFCAFD06FFA8FFFFFFCACFFFFFA8FD07FFA8FFFFCFCAFD07FFA8 %FFCACFFFCA939494FFCFCFFFFFCAFD07FFCAFFFFCFCAFD07FFCAFFCACFFD %04FFCAFD06FFCAFD0DFFCAFD0BFFCAFFCABC94C3FFFFCAFD0DFFCAFD0BFF %CAFD06FFCAFFFFFFCAFFFFFFCAFD07FFCAFFFFCFCAFD07FFCAFFCFCFFFFF %CACACAFFCFCFFFFFCAFD07FFCAFFFFFFCFFD07FFCAFFCAFD05FFCAFFCFFD %04FFCAFD0DFFCAFD0BFFCAFD07FFCAFD0DFFCAFD0BFFCAFD06FFCAFFFFFF %CACFFFFFCAFD07FFCAFFFFCFCAFD07FFCAFFCACFFD06FFCACFFFFFA8FD07 %FFA8FFFFCFCAFD07FFA8FFCACFFD04FFA8FD06FFCAFD0DFFCAFD0BFFCAFD %07FFCAFD0DFFCAFD0BFFCAFD06FFCAFFFFFFCFCFFFFFCAFD07FFCAFFFFFF %CFFD07FFCAFFCAFD07FFCAFFFFFFCAFD07FFCAFFFFCFCAFD07FFCAFFCFCF %FD04FFCAFD06FFCAFD0DFFCAFD0BFFCAFD07FFCAFD0DFFCAFD0BFFCAFD06 %FFA8FFFFFFCACFFFFFA8FD07FFA8FFFFCFCAFD07FFA8FFCACFFD06FFCACF %FFFFCAFD07FFCAFFFFCFCAFD07FFCAFFCACFFD04FFCAFD06FFCAFD0DFFCA %FD0BFFCAFD07FFCAFD0DFFCAFD0BFFCAFD06FFCAFFFFFFCAFFFFFFCAFD07 %FFCAFFFFCFCAFD07FFCAFFCFCFFD06FFCFCFFFFFCAFD07FFCAFFFFFFCFFD %07FFCAFFCAFD05FFCAFFCFFD04FFCAFD0DFFCAFD0BFFCAFD07FFCAFD0DFF %CAFD0BFFCAFD06FFCAFFFFFFCACFFFFFCAFD07FFCAFFFFCFCAFD07FFCAFF %CACFFD06FFCACFFFFFA8FD07FFA8FFFFCFCAFD07FFA8FFCACFFD04FFA8FD %06FFCAFD0DFFCAFD0BFFCAFD07FFCAFD0DFFCAFD0BFFCAFD06FFCAFFFFFF %CFCFFFFFCAFD07FFCAFFFFFFCFFD07FFCAFFCAFD07FFCAFFFFFFCAFD07FF %CAFFFFCFCAFD07FFCAFFCFCFFD04FFCAFD06FFCAFD0DFFCAFD0BFFCAFD07 %FFCAFD0DFFCAFD0BFFCAFD06FFA8FFFFFFCACFFFFFA8FD07FFA8FFFFCFCA %FD07FFA8FFCACFFD06FFCACFFFFFCAFD07FFCAFFFFCFCAFD07FFCAFFCACF %FD04FFCAFD06FFCAFD0DFFCAFD0BFFCAFD07FFCAFD0DFFCAFD0BFFCAFD06 %FFCAFFFFFFCAFFFFFFCAFD07FFCAFFFFCFCAFD07FFCAFFCFCFFD06FFCFCF %FFFFCAFD07FFCAFFFFFFCFFD07FFCAFFCAFD05FFCAFFCFFD04FFCAFD0DFF %CAFD0BFFCAFD07FFCAFD0DFFCAFD0BFFCAFD06FFCAFFFFFFCACFFFFFCAFD %07FFCAFFFFCFCAFD07FFCAFFCACFFD06FFCACFFFFFA8FD07FFA8FFFFCFCA %FD07FFA8FFCACFFD04FFA8FD06FFCAFD0DFFCAFD0BFFCAFD07FFCAFD0DFF %CAFD0BFFCAFD06FFCAFD04FFCACACFCAFD07FFFD04CAFD08FFCACFCACFFD %06FFCFCFCACFCAFD07FFCACFCACACAFD07FFC9FFCACAFD04FFCAFD08FFCF %FD40FFA8FD45FFCAFD49FFCAFD07FFAFFFFFFFA8FFFFFFA8FFFFFFA8FFFF %AF5AAF7D7D7DA87D7DFD04A853A87D7D7DFFCAC9CACAA1FD05FFA8FFFFFF %A8FFFFFFA8FD09FFCAFFCFFD06FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %601336A85252275227A852A87D7D5252527DA8C99FC894B6CAFFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD0AFFCAFD05FFA8FD10FFAF13A8A8A87DA87D7D53 %A87D7D7DA8FD047DA7C8C9C39AFD0FFFA8A8FD06FFA8FD40FFA8FD08FFCA %FD05FFA8FD0BFFCAFD21FFCFFD0BFFA8FD05FFCAFD06FFCACACAFD09FFCA %FFCAFD07FFCFFFCAFFCAFD07FFCAFFCAFD09FFCAFFCAFD09FFA8CFCAFD06 %FFA8FFFFFFA8FFA8FFCAFD06FFCFCAFFFFFFA8FD05FFCACFCAFFFFCFCAFD %05FFCAFFFFFFCACFFD06FFCAFFFFFFCAFD05FFCACFCFFFA8FFCAFFFFFFCA %FD04FFCAFD05FFCAFD05FFCAFD05FFCAFD0FFFCFFD05FFCFFD05FFCAFD05 %FFCAFD10FFCAFFFFCFCAFD05FFCAFFFFFFCFCFFD04FFCAFD05FFCAFD05FF %CAFD04FFCFFD06FFCAFFFFFFCAFD06FFCFCAFFFFFFCAFD05FFCAFFFFFFCA %FFCFFFFFCAFD05FFCAFD05FFCAFD05FFCAFD0FFFCAFD0BFFCAFD05FFCAFD %10FFCAFFFFFFCAFFFFFFCACFFD06FFCAFFFFFFCAFD05FFCACFFD04FFCAFD %05FFA8FFFFFFCACFFD05FFCFA8FFFFFFA8FD05FFCFCFCAFFFFFFA8FFFFFF %A8FD06FFCAFFCAFD09FFCAFFCAFD09FFCAFFCFFD07FFCAFFCAFD09FFCAFF %CAFD09FFCAFFCAFD06FFCAFD05FFCAFD0BFFCAFD0BFFCAFD09FFCFFD0BFF %CFFD0BFFCFFD05FFCAFD49FFA8FD1FFFA8FFFFFFA8FFA8FD1FFFCAFD0AFF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFFA87DA8527D5253 %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD0AFFCAFD06FF %A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF7D5252527D %7D52FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD06FF %CAFFCFFD20FFA8FFAFFFA8FD19FFA8FD08FFCAFD05FFA8FD39FFA8FD05FF %A8FD07FFCFCAFD09FFCAFD0BFFCAFD0BFFCAFD09FFCFFFCFFD09FFA8FD08 %FFCAFFFFFFCACFA8FFCAFD07FFCAFFCAFFCAFD07FFCAFFCACFFD06FFCACF %CAFFCAFD07FFCAFFFFCFCAFD07FFCACFCACFCAFFFFFFCAFD04FFCAFD05FF %CAFD05FFCAFD05FFCFFD05FFCAFD0AFFCFFD04FFCAFD05FFCAFD05FFCAFD %05FFCFFD0AFFA8FFFFCFCAFD05FFCAFFFFFFCACFFD04FFCACFFD04FFCAFD %05FFA8FD04FFCFCAFD05FFA8FFFFFFCACFFD05FFCFCAFFFFFFA8FD05FFCA %FFFFFFCAFD04FFCAFD0BFFCAFD05FFCAFD0FFFCAFD0BFFCAFD05FFCAFD0B %FFCAFD04FFCAFFFFFFCAFD04FFCFFD05FFCFFD04FFCAFD05FFCAFD05FFCA %FD05FFCAFD04FFCFCAFD04FFCFFD04FFCFCFFD04FFCAFD05FFCAFFFFFFCA %FFCFFD04FFCAFFFFFFCAFD09FFCFFD07FFCAFFFFFFCAFD07FFCFFFFFFFCA %FD09FFCAFD07FFCAFFFFFFCAFD06FFCAFD05FFA8CFCAFD07FFCACFA8FD09 %FFCACFA8FD09FFCACFCAFD07FFCACFCACFCAFD07FFCACFCAFD05FFA8FD49 %FFCAFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8A9A8FFA8FFA8FFA8FFA8FFA8A9A8FFA8FFA8FFA8FFA8 %FFA8AFA8FFA8FFA8FFFFFFCAFFFFA852527D5253527D5253527D527C527D %5253527D5253527D527C527D5253527D5253527D527C527D5253527D5253 %527D527D527D5253527D5252527D5253527D5253527DFFFFFFA8A8FD0552 %53FD11527652525259FD0B527DFD155253FD0552FFCAFFFFA876527D527D %527D5259527D527D527D527D527D5259527D5252527D537D527D5259527D %5252527D7D52527D5253527D527C52A85253527D527D5253527D7D7D5259 %527DFFFFFFCAA85276FD0B5276FD09527652765259FD0752765252527DFD %075276FD0B5276FD0752FFCAFFCFA8FD04527D5252527D5252527D525252 %7D5252527D5252527D5252527D5252527D5252527D525252595252527D52 %52527D5252527D5252527D527652535252527D527DFFFFFFCAA828FD0452 %76FD0B5276FD135276FD0B5276FD0B5276FD0552FFA8FFFFA852527D527D %527D527D5259527D527D527D527D527D5259527D527D527D527D527D5259 %527D5259527D527D527D5253527D5253527D5253527D527D527D5259527D %527DFFFFFFCAA82E76FD055276FD055276FD055276FD155276FD055276FD %055276FD0D52FFCAFFFFA852527D5252527D5276527D527652535252527D %5252527D5276527D5252527D525252535252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5276527DFFFFFFA8A8FD075276FD0B52 %76FD0F5276FD0B5276FD1352FFCAFFFFA852527D5253527D527D527D5259 %527D5252527D5253527D527D527D5253527D5259527D527C527D527D527D %5259527D527D527D527D527D5259527D5259527D527D527DFFFFFFCAA852 %5252765276FD0952765276FD095276FD0952765276FD0952765276FD0752 %7652765276525252FFCAFFCFA8FD04527D5252527D5252527D5252527D52 %52527D5252527D5252527D5252527D5252527D5276527D5252527D525252 %7D5276527D5252527D5252527D5276527D527DFFFFFFCAA8275252522752 %525227525252275252522752525227525252275252522752525227525252 %275252522752525227525252275252522752525227525252275252522752 %52FFA8FFFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA8FFFFFFCAFD45FFCAFFFFFFA8A8AFA8A8A8 %AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8 %A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8AFA8A8A8 %FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFCAFD49FFCAFD45FFCAFFCFFD47FFCAFD05 %FFA8CFCAFD35FFA8CFCAFD05FFA8FD06FFCAFFFFFFCAFD33FFCAFD0AFFCA %FD05FFCAFFCAFD34FFCFCAFFCAFD05FFCAFD08FFCAFD37FFCAFD08FFA1FF %CACAA8CFCACAA8CFCACAA8CFCACAA8CFCACAA8CFCACAA8CFCACAA8CFCACA %A8CFCACAA8CFCACAA8CFCACAA8CFCACAA8CFCACAA8CFCACAA8CFCACAA8CF %CACAA8CFCACAA8CFCAFF %%EndData endstream endobj 43 0 obj <>stream +%AI12_CompressedDataxœÜ}çzòºÒè¹îBlÓkè%@€„$Š)¡Æ†UÎsíG’»q£¬oíý­ýì¼€e4MÓŒÆfi¶½ÙÉvDz>Ìl²Ùò9Üo©¸ýj®®VzOÁŸ-§ø0Ð([؆]’¢ÛMÜLà>=,Á·ÕâI™Ë‹ÕŠÜ;Í'xÔYìW$xHï‡3’üÁ|Ã…“ƒ +º) ÷à9ò㘟Àð¨Çã6nþÒôâÿ‚Çx8 €ßrÛÃf²ØÌrÛ¿ xÜìÅ£s˜qô¼²h‘´¼‘/†E±`8cøá#B8x‹ðEc±h4 +Ljnf€n +ÛñaMnöMj;&i:¿]m):nÎÿ=ܘë`›ýÐüN®VÛ?͹Õp¼4ô„¥ÅŠ˜X÷f<ñ’­âÄ wX¬&O‡õˆ8 +aøs`€º|¡A_ [øþT×à—6¹ßƒá€·ùúû£xìÿ-r¶@Kðøåd{¦¶»õZÒpî„ ¥slj0š{„ˆ``î‘@81³˜.:äz·Ë‚Äc¾™ˆEÀ_Ñg¶%˜2jÀ}<8 ƒe4{ƒXЇ‡Í¡@E€bf~fÞÐLÂù3n~ÚnH—YjßfV>Ä0æ/ó¤uX‘ÔËf±ÄáO1™õí„\9óï—VC„Cô?\øË4è ©¹Ô²]öˆš£°Xµáß$\qÔä¢7Îf†;XL0{`0ÛÇñ7ŽÆŽÜt¶]4• €‹™q€/<hÇ Â 0‡ a`m‚ìИaáÂà¼ìjOR°Ìk(n&v“1Ap8ˆD˜ßáoÍ!ØÙh¿š s ,BøÂað! *6/ü=B˜÷$ z³557¨À]ÃñÆb ™—©ÅD rÐ>ÊüA#ô…€ÿáxŒÀbDÌè/1ô_$ ° #¿0Ht¦´a© ìØ|]´1_½ fð•ß®!±Ò Ar›rµ1ÏøÏè xý°cÆ ë&µØÀ>MOèItÐ\À£2µ=쪛éÖä`¸o— HbnŒ~ÀÀGW0w¨át¾óm+Ý95»“£H3󼉾rÿê¿] §€Ÿ ¯3¿7«íNÔ-ÓN¿¿æj¸绫-þO†=B‡°!¹3Ð# Ñ@ê5‘õ®Ñ@ôHPm±9êý6¤ön©%P$>}ÃN¯í%¹Ïåý²¿^Ôss¸ŸáDn&4ßóUÀ2Ä<ó›þüóÃÕj1£†»ùblÎQznîl·+¾o…ç<ñ3ô¾©²=†“R‚&}ÄbþƒÑD/lfMŽ!± ä€ cÞù…Å¿£<üoÑþ{=Ú®ôZXzÑ/M° ãÙþ›Þ“Fx‹àâd6ª +SÒlÓþs¶m1ÒÜ–p’ÓÅf(´}XìIa'n×;¨›ÛóáŽD3àZ¶ùCHÉ%¯WO`1B ƒ‘LÜŒ™%¨Ö>ƒiPSû™Y“§øÁßàÇýN³ ”¹â¡\yJjÜÎäPxµ"hÆ¡¾Š1ŠÁ(`WvŒy5äýß+’6ù7Û?7è‹9nr”Ùa¡œfÿÓpMš=&{´z’k†™[àÿe§cæ·¿M¸ù|ø?ý ¦`®›?0¨ï›¿0ó´|k™`ã·‰ÉÏÈë„Éì²ü+ÃøuxXí¿4à7LœzºdFã‹°@è¾H,Jà!ð!³<Áñ°ùQ:Zìh´âqâŠãDø°§»¬Î‹FÛ™Ô¬/8&Útd“5Ç`bœ´²Ðd[j¸™‘èøÅ‡…ÁŸ ó(Ÿ‚¤SO…Íï) á?¦0¶ ت¹!¡hÃ@»¨ƒ@h4!Ç[Zò{ý Ìt°¥O"h`‡ýî°g4sÂ6ó ãÞÏVÛ¥Wsñ¯Ý( ­9ßn³k#[ùw<‰D ÷aÖ‰é§Ò©×̹áx9£hEEˆ¨å ´ud´eiÑküõz{d¸ggkös ©üÊx'ņœQk Òi 3jFÓí +Êq¥éW7ãÕaBšßêM–Fð-T6 Ygf •Š{ÌCº–ãPg´Hä@=h¸7ƒÝð—âPÅ^z´ý“ÖmWŽeX=]Œ«Åþoå„dÙÛÃ? 2 ËPèb»Ì¦ó70­£ìþ žôVH‰Âô^ÂØ—b'½`Þ +ŸôRð¬YEÎz+̾…ôËÏN[,–wE m†®Mi4W!y¸ÕbLªñÃpe4ê¾Ç-ZôÄ÷~7íÌ!*£ÚkbüŸ *$_7U(J{±pØö€·‹ÞÈ‘s°öœ8á;F Xª²n%‰Ãµ€Œšuš Ë[èþá8׊T®ôNáu1ÙÏ+äb6ß+-®´9£_3"¬– Õz7´KBk{¸2Ð=óBq½Ûÿ'W+Ú0Œ +ôn7{ +®…&V qÎ_ýq!ÁVî Á(1åÖµíY J2\ºúü3^;•>—‹ÏÕbõNWâ'Àj‚‚:å¥ÕvK5¦SšäÖ,„4Q4ÅÆeŠ$7\[µnkät_ÈÏnf¥axB¡Ü1l.ê7 +4Z¶È‰tYäàiÓ"ŠÇ`BEƒAxn"Ó¯å¯A%ŒSOÙ FUOGÀ"µ~?ÜŒÙ9†ÔÛ·à&*þ]¸uÃu6†Œ¦äMªƒH ©´BÀuцZåVýÉÀUÎ…éq™­6‡`r{ðÂ+0þæMj;Œí‘dÕ$`ï„#Zä%Àç [Ò+d`IÓüÞ i£¼x¯¤aJã,®Gää”q¢~Eäª<Ðf¡¤ &ªoÔ«lÏ¨Ï ®€|jÀ1ó”9ãz60ñWðØbOþÅ.V@µSÈVQ)î1,êq iópµ² ȇ}˜/ ÒøJ‡ÕŠcXì¹#xªbŠÖ3`vmrUîÁ»E® Ä¤EöžJ[°N$U-ˆ[Šw†@àA¨ÆpEï©í’¤õÖ€áâEÀUW¢6ìv„z¯¬´K]ÝMÃoíP4Å5X§°»üoõÚÓvB*ƒw­WðØ pC-F‡=‡±«ãîâ +ý‹Zç‹Õ„âö,ÇO¹§ðϞ祎» =øcHÑ U‹›þ1ä‰~§UÚmDN ®¡ç¿;£Š·Á  ¨+Œ±¯!që+é¹sÜ¥ÞÀüVÛñn>ý¹q-¯´üÎל½¡u]@¦j„ðuWò¿i£Çÿ0¼ÕaÓ™ŠáôÆz¿]ÿ»œìŸ£Ã8=„ÇLÐ…X‡QrüÇ÷EÚSÿ1Cùß°KééŸÿÁÒø_Þ4ôJý—¯2oF©Mr´ÝF†,öPL•ßùw92 +læTµ‰ÎYÝ_zs‘•ðïMʉƂz“úÛÈ|þþ·§bh}þ„nQ#ÓaþÛ«‰zSúËËüùˆ×µ·jL¢Èÿ«°½ÿjƒ Sx*ÆØžsnãjÁÈZ¿ó/«²Íb™;\Ð¥‘)Ÿšad®âÖÿýÖ¹µ„þ3€¥5t|±¡ úX·þwiÓÓ6ÛúIS“¶ÿŸ ýÕÕ|žuY™ßÑ+ÿúµ¥Ñhu ²kÆ]j@ǵþ×'¦½v;j;C§Z7Iówja=!ó{2ÇúÓâ›þ˺žÞjmwûŦ晔¨ñ€’¤+-ÿÇÜREâß »Jè ÷?eLôôÏ{kr?œ ÷ÃKÇ»pÖ {fhdlj{”yà žø™ØPèËÒ4¹§ù³^Íóp”™Ö]Ðì)®(P3{C¦w†ß"WCøÓu‡›=³Åà*‡‘cÈ1ÞBçæ_fŠœ™q˜"y…Ò{’òþÒÍ£áJˆLˆ("€‡õ!„‰ÃcKÙA¿â`á‘OANàD Èg›`-‰êfi† ˜…Äî:—B‰5T}?Ût)o%1gðV1óÃvdn0Dæl$,yY+Á’ÆUuüͳ@s N·Ï¶óÕj4T ¡™ ïwîäkÊž¾yw o.C•×óølcy(Y<{~1ôÑ·á—J1lg^Êézð>^û´×3Ôa)‰zÔ†ƒV £ ?…™»Í$ú>W&éÙÑú‘ð›l™DÍBqö¹Yå¹–IÉv~‘J >Ÿ}vª6yð"…’-é•÷…Ÿ¯\°çõd×Û ¬žýÜ[¥Bðö5÷³²¿šl…)ö0Rìì6›FºÏŸÙNÞ×U*nÿÊ$—¥¯Lœö­ÝíPr”'S“ !«ô=h +Ó¯×Hn•Y½Å§¹ù>?ôp :¾ï +c¼ö›IÞÛ_™~Àé|Öß‚Ow¿…ê¤jÉy£?·Ù¶×ºaÆð6œL¶ØÃ=.ŽCÏŽü<8H$³¶À;÷äùvgòö—Rž<¸ÒÝë<1—ðÓÂ]œÖæ dó#Ôâö;¾è?Lr+Û½ÝK¹?ÙZûîŽß™I<Ì&[8ÑýÊd7cûÚª'ü‘õgj‰øéi K«¸{ÇùÇ…º б“‘×6‰/òþ!X_¼žrx=dni®™¼×l™|5i}-zb!¬Kõ#lMGòÛ¾;Ù|ĉ‘õ u›ÞØÀ„Òa—.ÉGø5ü¼xJç–ΰ—%Íá_ÖzÁ?LÞ•,î¡„áƒ>ê51Ù°ÑM5ˆ>»Ó¥$û)ùZ|dšç=Åo¦3â¨Ò}ÃÜétÑCîg)¶Ÿ×T21ùy꣕ä úkäB,Ð(÷ÀàKîHµ`#2ˆ~ Yr…Bu¤ïƒá^øgœí~Ü…©ÿñ·8ÚosáÑËs¬i{{É6ò¹faÚ^üf~¿â3“-|ï dö“^q€»»¹à[¶Q*ü¼ò‹Ÿ°?1]Ûf¥üÔ…¦¿#‘Öd+À‹¶×ÙFÍõX*8' n8D3´V¿ó=»ï»Ã_fBépt˜Itö7ÙÎÃþp<5fExàâ²p]µÁÎiä÷&[±7±Íˆïä}+}fˆ’ßÉRP‡ËãÎmc}ùZI1+^Xn!ʹŸÓ„%01žjåìàG“tïß%ÇôÑ—Å’á¼í'™HÑ>´bdÉq·sæçáÖ²è®ùJ¥‚ ð¾…¦]œ@ +Í€Mµ¾S³:ó³y‘Ž$Æ/­l¤G¼Ê× YYu%}ß”‹^Ï(¦´$±%ù˜7Ù²úÄ 8L:VÈÕÞ—J£E-EíÊï‘)Ø4E#ÊÁú1åì›%gs•(B=Â.{M6a^`Vãi©XErao£‹Ž¯t=hÁÿ½så~ö“unµén³ùÛ-èâÑÍw°+z¶ODéÎùȶ¦s;xíë.v׿ ·t¦öJŒv;g¸`±ûVáX8ðøÕ ”2³Ôdðß…Qpþš}±ii»»l«ó±Šþ¬¼IÄÑA Ï·X2·tì¥dwˆx{¯åŠqd‰ˆYãØèPt¤~_I#{ +(Ù±ÌÀðÈöÑóè·;Q¥§€c­¡~X}dÛßyöi,ûIVò>Ðä» ¸@í.‡÷ƒlûÐ +OQcÀÇÀë 5Žß1«%ÞŸþ÷ä}#¿‰´¦3>ê¿dw–Û"¤é<^Î×2ðS{(ã)ŒÅïq#Ïÿ–Þ0Ù„–èWø5Ya½ˆ¾†Û5â>M1osòð·ÓY6é-EBÞB‹ôvEØ$‰ï“^6zúa @xÒ.2üàÓü Ôަ‰†ÄO7‹b²¡i2†ƒŠ4+õü-:  .ä(â†,оòýµY(üÛè|ަq/ 5GÃc°¸™%žy´>y(IÙÒÕ—.”ÂÒž±²e`¡0ï@d }£i FVŠ™+Ú9:Rœaã†Re;•G`ŠÁ˜lš'qi÷ÒÑäyÈ MË€¢ÆÂ®”,¬–dUÓÕ¢æY…­’àGØä™C¤è»÷Q·§£Z›^ÊQÏ,)1@45~kžF†Ì’ð{ˆá–hŒ­pw6Ð'ýphððOOªú¹²î㦔±“ éO ±Àˆe7@VÎj¥ïú{¼dqù€ƒóŠrÒÞ{ 4—Â2ój}™åýA¦8^þÞ1¢L¤N„öMusF¬v¸_‘9l1©AƒZ˜y÷Œê׬:?'±¶0k¦kwÄòóC«Wx|ü͉'”ÙÖ¦ÐÈ´ûÔh°«Ì—Bq#Û!þ„­Iïwi+ê¿q~#´»+Ž=.ì!¼"»ÏfÒU¬ºÔ”11¬ömˆL7±LShÛÆV¥í”QÏŽ:x ‚×¼[½õ™…ãšÐÖC½KŒ¦ Ô”.4N ˜&¬ÖÇS¨N1™%¶o)X(Ñ•ª°kðb[²úÑÛC©±ž„®þwYÈæì©Êgá1¶ÎQî9óáÊ=Û¾öH†¬"¢€'±-‚È>~ôª?‘¡€6`Y@ıèÏn*‘îªÖÉ6^¹ƒÝɧ05£‚Ág:vñ œ[…gHû7Ùýÿx d£P^ÚH°½ž“Щ1Ÿ<ûòîf‹¹Á'i·5#%ig8L9Û^eÜàíÙ/>nÝ7ˆÌ‹%ÆZª µ êýDoiÍÏ?-q0àÁ€[ý/˜®ìýܲî†Hsä7HýÜ’HY„<±cñÉz…ÁezØÈá\)Yüôñ½DJý/—µTÜÀ®$l±u”¡,Ï­ÿ#×rÏÍ ïë'v ‡w[öù©Ý…¶6÷àõ'Àâx{‡E–‡Q«í|«2Ý )dvWÊ`_²ÉÆ“d)CQó—`¼þz$°ûÄ7´îòØ4–¯Šúnìr•\ðÃpÏ m‘¬ÁG?KÓ@"3¬‚mÅZÊg¿f¥|f֪ܦðj6æ_f•›d]?™n§:,% {Ñh'¶Þdâ¯ä,ÝQä—<† :Z+@E͹љ2jž´—dyU_»Ó‘rÈ—ß^â_¨`”EºéŸuüÜeºÓÎAÔw:üp(øZo&þô³)çàO'|SÚäÙ£~»þf¡õš[é'A¿}埓ýoÕdPŒŽJãP¨ôiºà•ŠIç­íÐâûonÝH‡Žéåùˆ¯ejJ Üø\ÐTµŽ¿0íPÀØÃ¦kѬÒ_ße[Éò˜¡¬ý}aº¥| +Rsæ„g;o¥üô> lÖ~ÊA:b«tûö³ÀˆÐr^(§m$P1baÆ;îöh¾ÛDÉQ¼Bãòòˆ·™ìCSáà @î”'àr8£!*ñ +´¢òO¶çÀ̾_f’éU¼95|šøEXÄhO/œ~ ³!ïã3dø1Ô ´_":Š2é¦TÛÇ¡ €ìõ9eÏFÚõXƒ÷fv›:”¡Ì?FÕºpí ›Åëî¤;‹¡*!{f]ÔŸw¾c{°‰;›,FÜ—žQ}cÅñ;*d*»_®±g º0CHå÷Ì +²Ú…;õÐ{aH¯Ü*’¹E¦{†‡ ×ò‹VÜ;MRüLÅ.ˆzʼnåV«Ý·Ì€hL$¶GÅ–´‹5x¶Ç0ó »’ðT +k°lk[Û<ß §)-ü¨ÅòA¹+ŽoÂ_À’±P¥b´U‘+¿•V ʉéúî˜í?aARÐê€c}h± "ñZt7ìn€À¾W«]º¶áã-€\ò)A6Ùxد™äªäëàòÎÚêûnáßüS1öŠ;M÷bsÜN)åxv¾C åÉ¿°Æ“¬BË5* Vþ0à‘áU&ò6+f£ez¾½%ǃ·›Ç_Öt‚Œß­Áœ[N1äôïi‘'ßI)·VÞ3‰¯ vFžÝáù.ß[™;Ýe[«Ð«„ ß2´óí¦ðødoÍí”*wjßìE:ƒÃÆd-ó©Â,¾IzŸ‹pú×UVë·”,YjäùÏš8žÄò1š5*šwîT&rS@±` _ùH{²Mm|wÛ÷ +ÎÍød2îĉ¡«™[yñNù­÷¶ë²Ï Þ<¦ÉSt(}æ0ÚÂŽl#ïÆÓ ¢…/6+{0«1õ{_Á¿8²›ÑŒæy›¤Ç>±F2Pc!é¶ ”×þ ðÝØÚóAxÊÐØk¶ó鸋-3?50óõ«Äe ±üý +DÔ£³Xòi'ò‰"dåìÉNÁµð“ž÷Ç\6ê©Âþî`.h¯ò +‘æ¹Åa5¼"P¦rãlã±Kgï„dHÏ7@8‰áëöX¯þâ­TŒmÅþÛü0ï»BóïðKãã‡å0µÒ§jß%ç>±-ŽÃÎP®ît."›ê³Zâroô3ûõ’óm¯è}ÎrÁ×€W´ú‹¾g–íhWø÷qxŸ¶±WI\ +ïÅ•ûe_¦ +_‹w«ˆÐø~YdÎZ­‹Às~ž™x ÕUþU&ò1âùÓZr<æ¢`]š=ÏV4‰<Ìs†´?CÅQ§8£r*• rXs’^ ùT À&RŸK¼8üþñd7÷–féÛñEÀÍðYx°L1ax\߃~¢Ú¨´Âñ·—˜ YbUD@j,·xÀf`õšç>žúpÜúe(´(¸‹uw ì:·ì¡]§+ «—»Ýmì¥øq›½Œ¬ýò¾~¶3ïáÿ_š¿“†ÆPn²¼¥Ø@Í×,”j±†õwhõ0B®),d +Ë®iÄûrMs+’œt¶;£M™ÔHý!´È™h°J!ž\KîJì¬f¿d-áÚ0GgNÒ°¬%iÞÏIó„©¾c¦¹ëÿœ“3ÍÔ%nÄE)Íð.ó†? ‘\–Õ٣Υý½=˜w+ðÒvc&' øfº› óBÈcÀøW7`üæýv1&Í‹=l<4¯†Ãd¯áŽ)¸“ühX¹m¯ô½˜m„nh€¢Ýv*€_ÐæÃf k›ùŽSeè$ :A×cj±;N%TÂ}iHï_ɼ;^YÑBÕÀm®iƒËºÖºã&7¤´7Áì€Mr¢ >ˆp°£Á¥>˜D«Ù+ßÞ7¾‚6+kj0ÿ]ȳTU}»ÙŽçÔvMÀÊ37ŠÊSDµðϥϊh¶Èv~¸c2i¤öNFSfrU«¨83{W nnMóWŒë®îysPÂÁã‚KJ%ÕJ_6˜`«¹L ÿ]ëÿ,¾F1‚'{T·¢ÆœeJçŠy+ +ë! +V3—Üw¯G`Ç—é«ÌK÷Vy-*`WU"¡QA +aùƸ’ +!±˜!Tö’ ¡‚%ÙÑ–»è´á墑ݓSÛÑpÏÔ!WÏ<8&Xñ«=KHsê“Ô–¶?×!W±>e]óÛÍUÒ«NÀú.¦ .óÂ5j\+¢ÉY¤“ooÝ­¦¸DÆ. P¤Ì|àU(Cñ¾9£2pw€îÂ+ñÆ &â ™ªSæ#3Ïä:ë+y)­èó Ê‘ÅÖÀ9™åˆÞVÃà»l Õ¿…OÛHÆ +–aR£œ­jÚP±")¸ +ÍÔv:)Z{D&ÚÒ”›ÌpOvæ‡õh3\¬ 6ìÆéˆîSÐW"ä%Áƒ¶x…ó‘JW\S®B·Óõ;IVŽÇñ!¶gDEŒ5ˆv¼]­È±”ÎÍ + 0¼(Ï?—%sÁä­×9ÀJ} ­©MÎÖ’ÂqÊÍÀ˜ç\©Âò=Q¥[U¯Œh¡ÂÃÒþUšfW«6 N*ÕÜ<¶´•Vçg;b‡«ÕðèÚ +Åæ›üý9:ì¶çº¥$3Sìš^.v#`,µÒ Ña±rýþ¸™iOˆ"!!Eù þ’ð>tk@Ï‚(«ð —4Zì×CÈ1ä7Ù3ÎÝl½ô éµN}#‘–¬ÈgQó5t>È›+¡FÚ90¨9sPCÕ¥÷+ëiØ1ì•ÛçïA5Í?%Ü©Vxnq*)‹×oo™lwz™´8Ÿz1‹g¾¾§>‹ûo[<õ·‚Å‹Õ ÌŸzw ð!KÞù¤ ºWXïßé@.ˆ†{áuå‹¡8,á)Vy“¢Ò©QÖ³{zÈ<Æèt´’|õ•¶½`·H}ö°B¯ôÞ)¥²©1îÊF6,”ÀíiSƒQÙhr´xºýªÅõF- g…¿-žÁ$dq.–+‹sŸ[À©9ÅS zZðS ä3‹¦‘ŽUn„ ™lhJ´åË^ ì雂¬‘ÏOGËĽµÒ_Ë+lr÷^à¦Q£)*Aw©ÏUôóÛ R<7mo̳àLîp„‰†°nÔWÞ•ñjу;]¶Ü €·­öF hŸúÌÛ2 Ü\¢åÔwè×µÃöý¦Њu5ò÷”&-´µûÞPçúœ²§ãù% îÄ8˜T¶Z»½§ („‚Àß{X)n(½)ýDo7DS (VšŽ+ª@ïˆà{íJ…¹ß'X¹L½+Ï´ôûBä;#¸¦ÁíÑšÚ×qhÓnG@vUT×?G@IŽŠÒUý ¾ +Ý&ê<&¥àWpï{ñ*ÝUL6Xhø KXՀީ~SúTtYǺÔdÀÒÖ]®¤´rOlðž2РóÝX½<)½) C&› ¬xUŸs*@ÃV[(ºWú>ÀJÛNGŠîäÁ–oSw5rþ¢´üíªÎôÎkñ±kZü\–$›æÆi²ÑöŒ‡†`]Gs­ ÖÜNìä@kÕ§/è»×!›i$äóõ €ÆÄsíå°Úú9¢ ´zsˆÖÞÇQE YQj²=ú~wå¹?ÜX»ö{Púè×J¥{‹"ÐNuQ€‚u‘‚m×Ão5 ¬‹õcÊ@k^kg2p%”€Óí§hÕ¹vä`§´Ž½zïs*@‹î×L”Ê# &›|®=O§¯ +ôç¦SË©ý c_Ão·P@c7O/‹eÜöäQDp¿ÿ6Pº%ï35 uì»X+  Æä{õ¿yÛ?W•€RÔ“×Êœ²M㎹Šèðf_€Bí"i‰S‡@ƒ`=G@)Ço¿ø–@S”\ÒÄ·ïè2æ’µM?n¦¨ÉFäÞñª”A´°âÓGõ³Â'/'iò{9z‹ÅôÞQô@OöÓ¡¹}âf¹Rà6ž”²BÒŠ>}@ þc aÛMê½R@,2 "ט# p]âÏ>Ù\¶©â’zÿR«IE9ÀñÏ|‹ÄVùnæÅO‰ýÚBÄ7#ÙS^"‡;K`²Þ)¿t‚M“‘jO)@ õ…ÊS¤]“"óüH,÷RX- ÐÓcß»Çj­û ÚÓ,V›<†ÑS“Máy«[^£jo±Æ¸ÚR{:ÀÚùå^öTÐa>ZUkÜÂGŸX:k·ƒ†m™0Ôcð³f¬³É´ƒÜéüµ°ÔC$Ùº¥°Óíy–ú‡­ÒÿæÂaVØñÜó‚{ø?캰:ë!Ú‰÷Ó·{»h‰\qéæÝêò팘1Að!› ýËù*µÅX ~<h9–P#ÞÃ=ël*¿4Á×;ûgøV”|™4þ(àÅ/ºÌøaØ ‹†œ.ÚØ?žú–Á£ósìX˜ À¼b¼çüs²`” þ$yUµÅ7Q’§èaþ°øÄEŽAÁze~0€tô‡²Éç×´óC²òh†üŸ–ØRX? c×õÖop€V;xÆ"’¹>¢âùÜõƒ¾>f† ÷‰ÈR'†„GÖï!Ñ"web/¿ï´)K +†’Õ) ›â7ï0¯w(÷æõÈÔðÎI`Jxg×EYRÖãÛ±žwÏN€Ÿ=èÞd;e5ŠpeQü%¬Çy‡¨RmW¾{öªãax;úÃâ9]pWüìÊv¥˜q+ïJÆðQ˜Ú=þX305“M69ÉÔ¼Ví©1Ȧï.½s&wÊ8.7×&›š8fuÇÌJ™ØûEŒ¤—¯Ú2)®–ŒvŒàÇP¦óòãLWÓX¨‚ÿˆ¨KixoðþÅÏÒOÉŒ}£ØÙˆVíLµ+‘D–î;|w´ïFį9+í:‰ÎÆS‚.¨ªÆZv ëÕ=—·šŠ…UG篠ŽJwÂúA>6¼\§3Œü!»J]¡u9¹3©@Ñ—ˆ[u6µÿ¾] c:zÝ)“œÆ½«aLÆÑNÅëÙâü0ûô¯Ìp%ro}U&$׎ݘá–ÒÑÎ*RA¯¥Ð* è +<©hò1±‚­¨+€ -o®´++ð åñCÙ©²’³ŠÉ¸M<Ö.ÂŽ¾ÙgÒÇÎÀgØ >U¶pÂ2 ­a &#CÑ㺧ooâbœ¨n{4“íØ6Œÿ*‹¨}šÖvJ–!:Òd­$ääFćwÁA îl0žŸ*àâq§†D‡ù¢7–S؇Úù©Êԩŧ;(ÉöV£ @us´åª×aˆóÿT3íùíÝv¥ù¡Û‰ODºž¦ §Ùà–çüRª½wö¸+÷SºÂüè9!è–Æ|*69°xÊŸ¿ªÄ`²†,Í-®„,Ô ô'#ëÄ-.A–tƒûX)&ÙâëéW1Òt½KÛøÍ‰¦/aý aç»dE1ŠÇ„†3Ž=G€¾KJä8n¿ÐM²~Üw;uÕ©™Œ88·±_ì÷³÷”îöâ ÉeªÈ«í¥“,ÓÃAÊÑ û}Äò"&tšDÅ_ó óרS²UÙÓ U¥ïãͽL•Ü¿Ø,2äs1ŠšÊôñìOò™ñFJT÷/¸¶P® «‰ÁG$YY©åÜ4  ï¥bð¼ýrÿ’r^B爒wrñgÐ-¦óø³E*÷D2Ù´)]J;Á3€ˆÆäÝ  E&èàØÈaQ§¢ËBìHŽ‚P8mVAÔÙd«]t >åÁo޵þœE»NÕ«ðÖ>ó|B<«rs-:K2"ï4üU°3Þߪ¹_ ø[AgÚ›ÏO†›¿ÔWÍéõ¢|Ƨßë¤Ñ(ž‰£~ÜW™•H‡¹¨¯Ñ˜ H>Ô™ï!º“FÛ~;Ç&å[çâÀÎdv×ÙâŽKrècìŒO•“;ÂÈ9”I¢€jq4`º„œ2Ž~‹Pã¬ðdDG“x{¹˜£ÁujåI¼G])p4&"âÔ$ÐÙIMYS‚~éÀÅ{Ä»®°÷£TiL·#ôGãW5ê¡%¾u§8*:òl),˜[ëHˆ=:„ü‚Ž"ñ]0ŽÛ*ÐæqɃºÀoFÂHÌU<ªªž=ÔÌÞº“ådåÙ¹ 3}&k2Êf»F£”Ø ¿÷Ëï;mkÚ€*VMÔ¤ÊatûQUíU{‘ÊJ¾ŸKC ˜^xƒZóä]·£G&E&ïì<_µ Ež^;¼e·\ojl«Y|o¯×Ðï?Õ£xmܰ4iê÷J²PÅ ;;S¿¯)~º†ÞÔ¯"Å@?—K”Q¿8‚FÝQ'Ž…ÓïW•†Ú²PÃà7ÞÓ¥¡†,Œ;`¬µ\Æ'Z*A€y0=gïëO aªL(îP7G*M +Ríô  gjºÇ~~ÔÙÉ»[u\hokz´x­caí•4u«ÂµìÑ2•NOEß›¦ëZ=œNmH"Šø-õ·—’‘FäÞÞ½2±$‹œ0âOV5Ò޵Ē8r ð1…Ø5ùüsos¹#ú¤Í%ñÃLó>ÛÈhÀì*¤±.'ÞÀÎtˆØ¸‡„ȽßÜ¢bÈcE”üŽülF;SÙì#Z)øV€"¦ ÝÀH4$u·°|s±ë"ó‰·Å^S(’3»([.ݘ—WÝá `Š¥Øm¦_ꤛE”Ag²]'‡Î­™A'ʺ(‡NDuœA'¾%à’:í :![ð²:P… :QäðE9tÚtâlÁKrè´3è4²OÊ¡ÓΠg ^’C§A'Í +RÓxâòÊäY6Ç‘f“K+ O3OéŒO£3½8,•ùÉsF dΞŸÜsuÒÚi¢Ì e>êy®4†´“êɧ&ÍÀkúE˜ýt¡÷ ¾±×a, Á ÅKÎæÄššÜÅþ*0µO«ljŠQ7ºÉn§†‚(Øû0Ùídññ„ +>cV’^²›ñPUn £ r–)Ùh†–‘¬ôˆØÊTä*ÖÉ|4ƳFÄAÏCb8Étx3¸Ñ_ÅS…<>­Æ“gÐIhxz%nÇ™Ôq5]ÔMR†h)J£;.HMS—l¢¬4Cy`ѽž:qB_ÿpRƉFŸDóRÌãs‰Vê©i¤jŒ\•Ö‰/kÅÀ7Z¼gYgýØ<>½xãy|Šââœ÷òødL=b@êé$ز‘»êgæ'OR÷–€S:S?½8c:é7§a,pIgRÇ/s½¤$Ð e?édÏÒe+rŸïqưÙåËip •àºè{hwãºÜyVQ2öâ` {û{üAw:f íïïNïBÒAšÆ®F‘Z¯üJ«áD/QNe…DlåèdDà S͵Sܮҽ¯‹Ãþ5߸^–Ü‘xSÑ\à„‚² ÅŽJÍ+­P~G’gÅ~ѳ½ÊE9VR=R…’è<Émái}: r:\G=#JAt¶>öSUÝñÂV7ÚñO†·«R’@c?ÕÓÜ;™cÒS@r»Ò ègÆI†Äߪ8¨“<2C‚ס'- g—±Aæ‘‘YIRÿoj/÷ÈÀ”¤K<2­.öÈnãŽ[%;NÌa š §{dTíýõÃÅ0µ C=ºÃxšAŒÖ}J( íR LB È2RÏðÈ<ðȘŒåç©{d %çp: ÄÎIé9šQ~™²ÌåXéä¡R–U$NÉIŒ?ë,¢ªmps¸‰H5poØ£9«ÓkhjN£ô ýcÊúh0tA/} †.ÈÔÍ«Óg²&yuFòG57.Ê|Ôp» aGÍ*¥dµý+ Õ<Ò.?G¿©ƒ(²Kÿðáì|8©-ÆeÄ];îÒûÇŒåÃéÑØuòᘛôäq§÷£gœî Wɇӈ†âTÍ+äÉ+)lÃ+åÃ11ðòŒ¸kçédq^9NÛS;Ö)w·WȬ‡N'–ÜpL$è +7¦[ˆ‰WØûßm'VŠj€(òåêêå(2øô^ÔÔxÖ’õsqŽ=ê…Ý„"Y):¤9)âYõ`¥xCÏ@O»äÛ°ø™×F ×g`¾_t),ç·œÚõnM1šlÿ•ï}>¦šlÿ5œNª®ç•BN&´îunFýèÝ-cÀzEýœ¸ ¥X÷*Û°«* ÕoÓR ³î] ¬wš[ó¶F0¿£¨"øÛɵJFêð¦¥z±Q¾^3#õõš©¯×ÉHýü½BF*~ã½JF*èç*©°ŸË3Ra/×ÈH…Ùkú×@ËâúTó·ÀѸ4ÕP‘´b`ÇÛp@]ì×b8Œ(î∥T8±3Ñ#¤Q³]ÿ.èk¤Â »’M†ûGRáζ+OJ…S¿ƒèš©pLD„NzäÅ©pèÕ¾¶,1hŸhUÆ„4X30–ø$ пž¯•¦°¾ò«…ϾPÁدâÐÉd8®½¢~w†ó.¿dXÿpA5&±8ÂѺ²r?yjy¯úÉͲ!Énú–R„( +Z;UPØsèfxâ²èŽÖmÄâ™ÿ´aQôšÉ ˆ,®ÇnñZ¯°€xïX\l~j–y‹÷qÂüoË+ŒRÛ¥xÈœÇIZ.ŽÉÅÙ•’d·¦cY’wFÛo·ââ©Òd7Çè¶µT˰ :?µ’Ýú^U ¨¨¶ +а¥E©gØõµ’Ý,!u °¨64p\O=ï,iùÒ(¢öœi‰€ÊÊÅÁRÓªv¡¹+óêÚ©¥€½k%»Í0Pi=¾¯Šz†méïŽÔ€5€–±¸f=¾ÙƒU¨åÓ~QC¯G+Ãî¦T½“­*Ü®^}â2ñCíVRÓ«Öò¦‘²è‘: –⋸áœE”÷q[¼íqȪ–ïX?äöHƒmÞ­åòrêY©=L«ªãIÙk¢^Ç*£xU³jÌ•zjn–ãÃ/%_ße•ä¤C:È"í¯UINié zášö›K²!OïGA¿âˆ$®O£”™¼„œ¾î„"rªóÓ¯û¦WlÄÈü”îR;;ÕH£HשÄ`|¿`ÓZðÓžÄ>Oõt¼Åwµl:%óâD?Œl:%;@Ñ wQ6R.þý0§fÓ)ùM¶kgÓ)åÒÁýrÝl:%Ê1]=›NÕk}Õl:¥@’Sn1–M§£xl:¥så³×K²é¤kÊäÒ©ŸŒœ›M§|özíl:õœ‘kfÓ¼çêÂl:Qà=ŸK§x*zQ6’02Iœ„×ȦS’è´úJÙtJ¹t +s.̦SZ?þNÈ«eÓ)uÅžð^1›N)—N!gäÂlºs1vZ6Æ®”M§”Kw"Æ dÓ)åÒ©äX]M§¤yÊs«/ϦSb8Òº ×ȦS:-AvåU³é¤ÜéY¯gfÓ)­³êÉÈÙÙtââŽV4äË™ÙtÊv¥*:Î̦!ƒW%Õ3¹ÎͦSšè"5¥êBïÇé£äGAWÅÐJãÆðSE ä¶ÆsŸt¹…T»¸F½:íâJõêÒ +Õê”´ cxÒ­l+"RäQT¯ §› oŒàÃz•h]Æ–n®.l#íµªËé• UÒQt”‘ílhHœ…iÃhà)lœÃ¨ZDÛØÒ/µˆäÑqô‘Ü ¦R-KZèîÌœ5Á_¬cP%7XæÎdÄc|q™;ä»Ð+tg0‘î +·g_TæNœÅ©ZèÎxš’J™»=Šg–¹Sô(Ê Ý˜«t\æîè&p¥Bwg{¹ ªÅ~î=WW̳Ø=^ç¶n¸.ñç‹syµc1øHHÝD:¥ØÃc­áš_\"çQ5öW©¢[ N=ˆÃhVªM§Þf,ˆ â&bˆ’U+lI@œŽcCfâIØ;鼺æ 'viD§ƒµ=â'DC!ÿ:ÑP(÷ÿbø6e óñ +G!¨‰Âª°úû9Eä©FvÁ~ÎÚG½V?SØ@ÑtÔ™úÝ‚*°ËkHÇQbí©{–d<ñë‡4TòWA¿;Žè¹ 13‘ìREe{ƒPyZ½W­£% ­GPw™Koµ«dqýå"GÎËLy¹f×ëU0|‘%2œ¹÷»Û“ôwõÌG÷%ê„ЋfTç)ý\~KÓÏyÕª%ö ìG#dè´XU°A.8áº×ñ6¿)$2œá?£Âb~e÷âm(êêzu«õ*ÜÓÆ/­p'Ê|T¬qwbæJ…»³*åœO¤R)ïÒm(«p§y?¿ücîLêÉkϪpgôVóòçïʼn]ð–füFçF ㉵ø¢Ý(¾{Ðxb-~sZ•tÕÌGÒ@î…næ#—Ý~É=W¨CÞ,í˜+ÔÏe‰µ¨$+/O¬}Õ¼.eå)ùíGÁ5†Êå‰uyÓqp ÌßzÑ`Š~-åºoÛðÄ$¦7tÒ¤*ŔӘ´’ÔFêÎ;ö¾>£†;èln \Pn¶+ïJÐÙÒÀ®4Äô†l÷ëØ•JÛ€—Û•*2)îðiÄ2ê*†2¯”fÓ©Šáˆ9o•A¿^ãî6˜Ÿ6].¯”wjŽkÞ§g'°Ù=ða—\Mu„±«•{Ѭfnµ&+å½ ŒWU;KBé®Vî IëîÃ9®ÂîM‡êExì +ÔhŠ"ö·&›¤÷{‡Ù}ø'cq}0­/rû|Zì–_º;ÆØO’Ô4ŠÆm”R²´Û )çÃ%oîTóá¨Ã·O= @I3yÍ9·P‡M¡ºŸ%ÖÓÊüûÁ¥ö‹,÷oúÔVz‡? Æj@'ª©i&}ʵEs•¦¦ÑÖ9©–­¤o×üLeùpNQ_+M„à¡ ++Ű' aëmkMô•€šlp® ‡7%:¨´ìù“ŽÈ\ð\ÉÓð|Z@kvU ý’¶(5̗٘ܿ·#YU2ÆGŸØ…pæ{“µ‘výÃz#æ0*-ÃÖß~ñ­¡ÛchÎÒ+&aŠÌgV¦t +Žõ‘W¥t ÔE/è „M2–¸ÂyÐGá*E +ÐÖ*IO¬ôB†4 +ÐIt^¥*fFe4óø KÌùÁº•´ïã1ªédî\…Ê,†=IÝ"(B$¤6žN ­ÒÉJs©šW§e¥©EhÊîé5DO'Fi©ÆöÀù鯤ͺz·æ~1žu§Íf:aPêÞœ¸_Ué™ÑÇÆJMk…Ë0Qå¯k˜Eíëh ú`ß=ûKœ[Œ?»Ú¡0FÏ­‹W9åy÷Z/÷¯qo#Ìävïù÷Z£ŠzšŒwT5 PçÂNc9€†óÅô¬–¢f”–!ÿ˜4h?>Û¿Ús6Êa†¥ëÙÈ£À‘…0?¼©‹˜ÕQÔ͉—]di\…Ï9h˜Ìzc^•et'/+#w0ªè#Ì-4ºÙm@sSaú†É„“ÄIY[s;!‘,zÉKr¬F:÷î2Ä-Õ³ÛÔï90 ‹5¥#‡ç©©€¢õ“'*åïNåÔ­ys´~j±=Ë(¥›¨c˜(µÒŒw¦š¯Ê×;¥³“)^cº¹<§`ìZwŽ€ÎTO.ÏÁ˜FBÚQº°ä„÷Ì,@£Ú¡´VÚ©Y€Ò]©ž¨p«Æ Y€Ò1¨çÊê#Ÿ˜h4åüª&Z§UÔS8;! P…ÕåjÖHÕÍÔ-*± +'eªàó(P+ÇJ'WÔS¶‘fÍTµ‘/ʳ:«(ß™ÙN,ʧš‘zÕ¢|:^…+å3gå“ñ±¨(ã=·žÑ¢|œîŸ-Êi êŸ-ÊwzýÊsŠò)zà HÅ¢šHwfF£w7”¸ªŸ¸ŠÙ5î†R®êwr&—J]¿3î†:£®ŸêÔ®p7”P×ï’8%ãuý´³î®p7ªëwùÝPFêúʯ¼¸®Ÿ€%W†%ŸU×/­YÕÏd3 ²óØQ¯ëwZ&×¹uýä!­ê'T9·®ŸöÔ4ëWžP×O»ªßÅ@غ~Ú2]©®Ÿ^„êuêúiÂ2ÙNˆ9Ө맽{9m\ž~tj]?mA'ÓÇήë' Q:ªêwÁ T’º~Ú¡S¦+ÕõÓÏæ¸F]?íª~§ÕãS¯ëwZ=¾sëúI{‘WõS¹©õäº~êád ”ëÔõÓ>PaøØåuý4ÓSPÜøµ²ÄÔ«úÉó^Ï­ë§}Nåþ5êúi\«f¤žX×O- LtšpaÞèL‡y˜Œç=ZuýŒïýKêúñ„¦XÕïÌz|'Þâ¡Zïò¼QU¿‹²9^TMoÙ±¡h[uý´[ùü}~žW×Oû>¡.Ïeuýø”+ÅÄhqÆñô£ãº~ú|ìuý´«ú]§Ÿ^†Ñz|g_¦#X¯W¨ëÇõ¢lKŸv{Ãq]?ÝR|ê挺~ZÉŸ¿Œ]yy]?Eòâ«ú]š•fLÍW^T×O[ÍeÖ_T×OÀ¶Rî9õøNÏÂU©Çw©7KVÕï²z|F³p5b®êú› Ïæ$^\×O² ªú!(W¨ëÇ%³)WõcøØåuý´{…º~Úf;‹±«å<)Wõ3î·”bL^×ïl»ò¤º~j<©êw¥èÁ¼vU?Ùmóg×õÓ®êg²P …t¶3b%òuý´«úéècÆb5«ú‰<ŠÕõ;C‡9£®ŸêJ¢ÃÙµ:uýŒÄ[^^×O[8@ï¨\<ûc ü¦.X¹pñÁ;vY›¾Äýr×.øMƒÁkÞKÓQ6‡ˆžv2Xœf^Øö’ÓU÷FŒ”&À§@ o6yŸ +iÑ€ÌSTºµÈø÷ɇ,}möôM5ùTw§9¤,¶O÷:‚,ö~enñ¥~²îDú7æN&ZïîÎb¹ÅŠÅ?VüñƱÒãspþÒvQÃÊÏ1/V«> °Úz:Ã+r޵ëÖ©.ºØ =Ÿb]l¿ÂºýÔ{õvXÏóâľF7 ¬ß›bƒV`}ÞìØwÝñLQTÑOÑŸÛuÀ7]“: ¢Ú¹ƒ*Aks;íÞŤҨ<Ŧ™îWofqÝÙÞš·ÑÄ*gk¶Ëwó¥íæ&ærXWc[5»kŒ~Þ +I—h9xvÁ§o´$(õÌd³dKŽ »%'à׿V‘‡°ë‚òKi¦“Ö,ÞÜ{PT’­#ÏÉ…P0V~Ž:¿Øw²ï¤¨'¯[˜ëÑLƒÎ7w2`Ï`¥Üc+MÇX¹ñ´¦­ýðf®ZXxéߢ;}úÀü¥…ÉI|ÆŠÝÈ•ùÃü Ò#S¶¤ÛGR²ïÛ±ü­¢© Ò‡—ûL¦íÅ™| +Z¼~{fÜ,·…¨ßâqf2ð·‹ûùæ ¦Ý>Á÷o60±xêo‹ë× +f:ü²4Í”Ï$ÜoÞâ®<ž0Ùò‹¡‡ód5 …§T$êQð©½Ã=³Y|êþ"³ó/o|èíÀml½Ç0‡Ï¾B¦è`?ý.ðFÅÉÀ›ÚÝh¿TÜìq‡~õ²_kA¶ ÀöÅñò7†ùCU,»ÞÖèìãëëàû;ÌtÄ)<@3à¤Ñ£ám>Å=Ê{…D®÷rÏ=¨ú…@÷še¹ œÐ f[aþrÊ…~Pà¯bØå¼Gh.†\®ú¾=. Ê>Ý «“ø¢àA ‡ÛWî[€Œg—»à±JŽJµŠfnÂØ³¡ßFâì +6Ë0¤±7…Ã&~TßßWá‚=ãìÏ/¨[˜}š´BÈn˜yŒæ-áôá +t¼ +–pÞgJ"pßÙ·r+ßÌ•mާµÂcÕÒ¬ Þ“—Js%«:G8+¥$c‹]·ÛçZŠï4Ú7oI“­üՋβíÃí¢Ø›418CÜ]ì¾Uàº|5½Ÿa×å½àH¼¡ ps»à•¡O¢ðœ‡!¯~ÎâŸAߣ/x<òг*yèíß-üà?™.Љu|í±=Æ%¸8=?÷nã?áh4&3žo¢¿àÆÓ ˆú]XÞ²[eùâæÒ 3 sÞF1bÕ¶=1g?“Àº·byÅ¥ìr÷‰þ°f +/P¿|ÐÀ³‘úþ¼¿Â¤Ü/œÿDˆÛÕgAø[ãc’ñ<—¾»ïù‚;ê,•Šõn”å‚ûu#Gñ0¤U_à6™ü. œ=±´‡š À#Ó© ·À܄ܻ»(ˆè#}±Çï¶D°øšûíQí*¸c¡` 팟Þ݃õ‡ÂaØl€©ûRì¶5É=XQF| ‰tN‡c´sKö°fL ÀA _Þ<8Ñ–ãšæ ¸€â"듆Oý‡äþè1$Ol¹ù!þzSÝ!Ö +Gèlm´Ì­n6%ÜÓÍ>bJ¤[É/³“À}w—ã8cÜ §TÃZ`'Š3¸+¿8 °š5ÀÛO,û+Ï‚!øÕÇ|­Üfü…‡ä½40ÄUM61÷.¿ðW¯Ò ªh^¬y¶.’Ã@”%”ä0/…Ã@‡q>õbPÒ¢[.rQzb¾‡e¬«P"· D¾ƒOÛP§Eh$‹Çòm‡r¿+Ò]E6¡Ãü©w¶äoñ³ôËkˆÙeŠÃïâ2³ùõgºöÖ{¶“øqªáÀù7™ä}ÉÇkž¿¨[¤ƒúç¶­G~f!« 4¿(ÝQÞÛof[¡ÞKOÅšmÌ’µl§¼-LŸéÚf´åË^À&¶M¢R=+Ú/õ Q7î¥V‹QÈÏ…éÝÎä #0ññ@iºì®<žð†=¶ƒr-“SƒìÌ ìý õ Ü|^ÅèÂ&×hf¾J…PèÈ}ã¨F?c§Cæ¹åxàÊ$>烂¯õMå§©ÍÈ(ÒQ,e)¨¢ü¢±ôËÀU<òZ³Ü²üèFÜ’½d£4p#íÅ@.ˆ†­ñZ+/’‹ÜÒáx.Vš <ó›õg Õõ‚.VxŽÝ‹ÁÂB°TL6_°’]_´ÒúØ6Ù”ñ}†vÂ;}¸³È§OÜd;iêÜÄO$4îdä"Bã'~ŸH߉͞á¯Wä‡Qº8(¬ÎF]vkÒâùÝÕ ­Acç<ðRy¶‹ÇéÊy,Þ¨·oq.ViÀ“½›çOø6›ß3÷ ‰Õ„s6»ŒâM6ÝÍ~ ›é’™îcª +´¾Á¾c)~‡sÛýl£9á‹y›pk“Æ„ LZ¬iô€,q‹kF‹bʏ‹«,²t΀™uo h¯A{ÿüÝft¯Aùr![7 Ã%Ÿ,ÅO—áP¾üJˉRìL¥E†hQT§aTŸ2]†ÐЙ¸ÀÖsöKYuÎb)¦¸³.¤1F[3Ù´õ5ƒ|e‡,'Á{”‘Š^Ìç|L·÷§¬g‡e²ãç§RáÞzÈz¶q{¡WÚe+áï§Ì´³K©¯Q#´õo‘—ñSûÛÜ÷Ñ.Ŭ¡´`ñ%³´'ç R]t¾ï* :éç®óßÂïC.Îçû ,ñ°•.º½y¶Ó}¥dŒZ‚Ù[æ‘ßJ«Ví¾bor3GxG+h ­mû•‡ŒY¼*™µQÈ··@“øý„+Ÿï +ÊX} u‚~bï;;è+Qðù’¯€Ÿá€Ã$–-c: *U"ŒiOl´í%Š£~ŽÎ_ Éî%7£=±ØîR;ßF±}5)v’¦$£Wß%¡»†þ  ùaN´Nç¯ÿ%^M¿šlÈ‹u1æµñ.“/â°×J^àc‰WÒñüÇ·ÑR-9Ò¡ÝÉ+c8gá,¤ØW³Â#œ’9 (¬Oèk2éÝ')×€ài×2þýýc¶zñqÓmƒ¯X)~·-Ä ÖIûGäˉ @Ð.8†{sUÆn È—K!ïòyh#Û7Ÿ_ÄN­‚`ýŸ•/†$›Éf`ÂF§ 8ÌîVÉ#Î~º¾3o¼ÑŒ¹Rõ œ +>ñx[ø,”Ë©%à+_aâ&›•¾P…z%%Ÿ,_O'q“íjn0 È(—Çøö:ssEÝü#^¿c>v©NW™ÆT·×™s:Ì)ÛëÌÍ¥LcªÛëôÍåÞ¥ÙOÒqô¢§Ð" KïÉâî92÷*X²x“øÕã<¾˜ø÷óM:÷ç÷4 +Tа]Ý1Ï_$ο+¹þ¤ZÉvmo»’r#:¿’Ÿâ ‰‘ÃU?¿@ÒˆîÚF¾žŸBiâ@·Ôô^Lj>س\‘'×òÁžíö?Ò§ÏñNñÐzUÐå¯|œxl½j›ÿ VÁ|ª)ùÇÀ–rTÎómvT©s|C&I)vsˆhÛ*J–ŠÉ¦»ÏíŽüÂòá4*dñ†Âî’‹ð+Ýñ6ÜŸa³âvrŸŸG¾H¼Áد› Z ­_?:wm¡g“âNô÷-×g¶óòÓ7h%¡O¥|Jx‘È zµÁ;":ûli°\¹JÙÕðÇÀCŸ@?îmI}qá‰Ã_Ÿ*{G’ráѲKNÿ‰…GŸØX…náѲ›lÿð£e‡'‰ÿè£eg¼£ÿàŸuÆwò³¾¾xáѲó1½ÿÔ£e«•…Gª=¼øÒ­?…ìJ&‚ŠÏ€YÈƤ3pJH ߉_[Æ\| 4gj!Á†×¯´»¥ñüL|}ª]œpŠñXk$iòñU¤D¾3 + +Ãd½£Ößð¡Îuñm“wq5EvÐ]xÍýfI½¯yëôER­ø{И¨‹Ð¶$ï"Pýºh3]°ù'(øÍ•l ½Ø ç:ç¼ÜŸaœè7HcÃ_ûëòÆ cóB|äÞäÈ@‚s>|Çq7_ÿÅ•yu Y0E“`H8zàtܬ$±=“;ƒÝº‰u‹¯ô%ÚÓ‰ÕË謀\N‡°.o–­¿ÈäP¹÷Ñ®œ;F·­O|x,ƒñàR®äÛr;X„ˆ}Kþ¸ãö•ó >° +£߈Ørž«Ãw& B‚-iùæô H€£Y +Ä”RdPP Û< +>Å(8|4ະHx“"Á£4yv8X ïÄi>›áÑ—¶À,‰>îñš¥ýœó‘GAåËwóó¢D&›@  ù`,GK Ä#aܨ«Ñá¯Ì¨‰Ù³PûIJJš]ˆh‘ëÂ@"û…½¥åä.ä÷K(ìf] ì¶Bîyc`Î’ìb’cF1á$òIcId—QÞ§:1UJ(B*‘5VÃ%Ð¥Æ%c[ŒDv+‘‘ÉEþPý¬x¤ù±sx(Òƒ§!=X‰uì«X< §™Ï0Á|ÂeáT|l²Q ™”ûL)|B£(ñgx»þ„iX`üï!›>˜{x uxÙÜ!>¡‰Mwªð¹Q,¹‚¸¡”P›ò‰ßx˜ 1_ó>;Lö†öPE”%NJ¢¼Ð‰ÃçÄ]¢äÏb?žäd<¢äOû}-ÀuI—|¢G¢ôÀtM”}*ËZBùFbÈåŒ[”ü)‚\.yE©}TýüZó³ùbå©Û ïa†ùrOŒA†ú¶!·tÏn&½s´Ã¡úýìå×ï–qü‚ßPþ Ê ç ø†ÊàãJ}e»÷>p6‡÷½äö×ÛKhìt˜5 œá8O/ŸR!Œë“'º7Lš³<¨zËèÖo ;yNë;üV:é~IPáôKð)ùš8Ø„Ñ^ÛÂæÍ½¢uùæs  ça²äÓ?=â¼ÐJ +Rè«M íU™t5b?­^öÓá£ÏÞBCÃpT$f0‰í5Äæ€ö2°ÇžY Ä`UØ·‡Û÷·ómÎ'âäÏÄ䇫Ïm•‘h.߯–¼´[†Esi·wüÙ%æðÎaÛ¡Ê'ö}ùÑ4wÄ “˜¸K|„ØO…!Ÿ´ú`Ûu×YùhùÎW©°ºg[O{qäͼ¢H•ZHÐ9·Kö»0“ÞÊø¦JƒÄè¿Cù‡éoØ×¤‹Á¢=ÕF¢Ìƒ8ìÙËÄõaÌÈî_‹C„1˜ÁîcyØMgy¤<ËO¼nÌJy¸Œ[˜Äî©oÁoy¼iãO§„¾qæÊ—Pɯ|ÏW¨ŠÁ»IžÙ뺸;»—ƒZˆOÆàÐL‡™| ãžšñ…™ÄbÜ3Kq™‘ÞÕ‰“é½­òDõäD;‡É'/×n|ìüGr3üÌ@ dgP³ÁF[¿  !=albf¸&ô-03/KEÙÿ—6E" Fcfë°"©µ˜-6f)aòg«8þ²™lKIvÈ¿ö…íø°&7{sÜì϶óÕj4T ÇÛ iFÕíCßžzYê`ƒÄ“H¢˜tñÂ4V^V¬­Ô°0ÅÞÓòXg ’BYœL}ó$“­ä™/æ0(Ágqâm˜T°x±:ý±Š7¿‰|½ðº—ô~—¶‘×6sЙ‡:U:5ÊzvO™ÇŽV’¯¾Ò¶ì©ÏVè•Þ;¥T65Fοã«Uj1µé²r}•€æ£,ÞØˆŠúë›ÅáÞÀù=À? ˜¢Ú³¾“EVÄ ‚r|«¢5°yë2½áÚZ\ýc½áÚZƒø6 Ao¸¶ÖÀÝ&!ÕŒi ë½8×Y¸#£™wÃ&ÖYܬzùsx)³Uš5j¼Ñàk ƒ»&ðëÓ-Ø/{iÄ­ÏÉéU´’nñï Ÿ8f2AöÓü<\jäVQkTD’hiá)Ó™üRîÚPÐc˯ԟÉv~/˜hW¾¤âùìË]â;?<î²ìæí&"÷áêÃ4¤ŒßxaÖ ·Iˆ×wTTÌ!I¾5ø­åCR–^u2Ÿ†7]”,ïd<×î*è R²Š>±K;š…Ð~aÞ–/>hˆà`Õ¢È]ê}gÌ'Ñ#Ë!Áf„n;áïxY΂üU!‘ÖpÿRªpgw=oÁ?LÞÅgûK)Y þ½È$'Ï„ÀZRLû?ºÓŒ;ëb>?ÜÌ'Ѹ÷³úíÿ³ö¦ëº&GuàÔ=l ……Ís”ó€±i(°ånaÙX`=è Z2*ÍzÜüékïµ""¿óefì:U»ÀÒþâ¼C¾‘+cX±xžŸ¦}ï³oþäOÿék¿úoR¡ñòÇÿ÷w  þpê?ÿõ× xüøk¿+ï ÷ü ÆùRÜ;ø°›¤<¿ÿ‹Ÿÿ•Ͻó ÷qðÊ'_±|¼Âwùbˆå«à©ÐøBˆå«à‹ |ÄòUðÊ>ïì.§g»rñ{ž†é9ù¾ñ¿žªM¾~øÛõG:òkå/ÿô¯W2ò—ÿîÎgþÑ·?¤ŒÂù»ß·_àGV ·º~œtdúÕï|~>3üÙþÕŸ=’‘}_à7OºøÝoþî7ŸwVùö¿„ ž*÷—‰‘*ß7ÿÿÓ»Çß¾ñø¾Ëïßê×_ÿ¥žÕÂ×ß}ïúçÞSvÎØÆþCú(û¼\á×?{$Êþþµ4™Fk_Ër£}™DÙ‘&ûŒzk„óß>-Áßþ2ÿ`-¤om ~ïÓïýãÿ”% ·ŸçyÊ/‹ð?ŸAÂR¶ß{^<Íóüú?þâXÓäçEø‡?üË‹ÿö'q<%Lß–zŠ +¾û ÓÏÓƒÿó7¯æŒµ^ú£Yãÿü­ªôw_>ã*Ü;ßþéW¹„ð©~þ4Zû¹—øîÏ¿ÀŽø¼ ›÷Wyïÿò \àsw%ù/¿ÚkÝ¥ZË·¾Æ^WªãÏùÓí?ù­¯VËð­¿ù Rÿs¯ø¢»û[ßýÙ—2–?Ý.ñw?ÿjæ[ß?MÔ#·õE¿Æ·~ðKÿž/ð½ã{á·~ø«~û<]â>ýÅ϶ üèמb3ú…_ãŸóÆÍõ¨šûÖÏ~ëã+ñy{ã[¿üíuï~öáá›ñÝ÷ûŠ}÷ïºóݧ§ ÿé‘Ë~÷û_@A¾³ëØñPßýÁ/¾šÕùîOyèØUÓïþèã +r=ñbÿìªÈ—xŸþÆ[JêØ~_¾Õê_R­ü_á¥òþƒO¾þ“øÁò«ß{ùóŸ~^þøÏ>ùÚ÷¿ñÇ¿üõŸþøý¯ü³ŸþÃ/ÿååø§ïüÅŸÿ÷ÿò§/ðòÿ÷/_Çó„ïC¿üsŸß/ßø“Ÿýì'üåÛÿé¼üÙÿûóŸýò×/ò0/ÿíg/Ÿ~ûÛ—û›ÿêÇ?øÉ7y¼û÷ùtøßùßü?üäú¿~ó‘ÿõWŸyýð.¿üó'Á—ùü—ÿ ÿááOÿû%†—¿xùÛ¿/ÿˆEûÎý$Åò.ö’f©cÖ^bïðÿâl!àoãå3‘É!ŠLÃÿ/2¥Ì+‰‚ËP"ç: Ñß^凊Ëò‡€ ʽ¦—O媳¥ŒŸÚ¬3ËOy¤Ž«&\¬áWü¡EHàAF‰j†DÎ)T‘èsðòeü“XÛ»Vñ:-”„çàmÚ»0"­Äœ’ˆ”x‘2&Þ†¹ù!æ0ðà-UþÓÔå¥ê»Ñ*—ŽÅ®ÞÚäK¤VzT<>er­rde ‘A/Ò»¼þÁлà4J¼¬J¤V)ÑB¬/ïå6£¹MŒSoƒWæZõPC—«Œ‘’H„™D¢ÌÀéq•è9¹Ï(z¬Ú[Ñîƒe’§=èU"– 2#òñe±¾W©¹b Ïõ¨±„“üÐcá#N|8} .`è”ic‘)%s1æ(9É­³Ê'ωØ&>J 5‹ªñ©+— 0òò;\ ×À]ãœÕŠªZx5‘©‰÷HëYõRïÓÇhS$b‘«äK‰”J æâƒR=Ò;O@¢,²¼d !2ø‡*å¡L M7FTýÀSS‰ÂÏ üQ%Jæ}&öÉ-ÀÛà ±Ñ(‚Me·ÁV™ø°ù]éüÚ­ú1BU¡b-ÅyK|*÷‰ƒ/„¿ÕÖEKÒ¹(Л$WÑEÁ_ø(13Ôÿê\TbæB‰¨ÏšßA‰+%J Ñ|Z<Ê@÷?Ïh}ÈUÌ% ÎúËHòS*1f’5i-G‘h3ŠОÙçÁÂÊ'ÄÅM™ð0T¦ŽÍ%‹ß†þ€Ý)ºZ»hs¥-+-Uó †…O¨–šØDæ+鯅e Y¤3mβµk£‰D=pËõh÷é9rSbmÄqÛ&Û¶¹Û}ê”­=¡vSþmiMþŽÇÈj8Š^4ç.êbºí–.Í…ÁI]­bü¡–Ü“.MP‹ªv<õ6d)ÅþÀÜ4± ¸‘]0äF»0ÓQlµYÓŒKÊëµË'…õmjîõøöØ‚¢37Q ì[‘hQž;\ĶMdæ¬æOJáŠB‹‹^%åÚEEa,ÍuoÀ‹AmÅ‹¥¼vš:‹;̨ʨb„(W P‘€•T&MX¨#™„¸$ðäb.d0à'Þþ-ض½¶dhÒ!Cç@ƒ}ÜŠ„ì!´*x¶z#}Õ“‚_¦ œLŠ™à6µ7¹M*éz›"µŒ˜Bô€­f‘heÃöC™4©70àåñÙ·uá»4ôw5ŠÚ|ûæƒ'"Ζ56\(émÝ'ÃJ¹ÀÊPºˆZQ 4ª‡¸¹Jã½zxʉĠ8êð—»Ç'T÷X~ñ%Ì`7ø¢W>²yùÐ=Ê´2|O³ø Àµäãh",·bd´E +LìEž”Rõ¡À4]`Úù¨[ÀAvDŸQvDx `Gˆ¢àëDÙyÀŽ(t¤8T‹¥ªÇ¡ Êª t _–Y§‹ðQ§œë°e|$€?Î ¸u?8ÐW8Ê’º‡N·€@[P%ÎØºhæ. £¯yHàKÉù5§î¶¢V) 9Ñ9@oѺœqq@vOþÝ|6Íèœø˜Ã~# ¨Qãvf÷°\´‰ëû™Èˆ§‚ ¼ªZÝxœø_(Ñņ,ºÚWÝØ1Øz"1¸7 pº×>)÷:àMç×ÀeqˆçU˜pPc’q€¥ 6<ÖD»”ˆ!-/VPŠ  0©=\4>Tã2ÊÇ€ö4oœaQíÐéa0˜H|zlÐÉóIÎjô6¸6®HˆIÉ8Ê$1ѧPñz£'uª‘$ÞeZô>”,ÿvü9‹ 6ÚLܾÑð&>u&B¶Ó{-£ ¶]\ì;DJžv`™»Qaå6ëD‰¾`̆/äÞÿÆ ý;A ÷°Þ'ÃCs)4dûk¬ÿ‘—¨#æ:3àØÆFuhE.HO,‘Š~ Â~¬ÜtoÛÞÂçY¿7³5x¬Ù½~“i—ºèUøA³Ã÷ÑÔµ‚væ":ð¥Ø³§$2tßr•‡í¨•Ï”닳=à¿Õ`ãCk‚…2Æ™.±ÛIÀ€+ó"º=7QbN5_”hXM• ™.kÛ;71V»q½>å”oY-:c®V]qÌSÂ^g ˆÖB OÛ„‚l)·I*ˆ(èæGIaY"`0è]¿Ze¸#ó ‹Á¦|5…VíÓÏÙø2XǦ±D(-bû‹r–$ +ŽU9P½®Q6NªX¼´_I—Š éÒ¼sz›Ú8£Î͉ŸMmñâT[8kh -gœ#×%’F˜¸1»ÍÀÂQú©g œ5èœ`š“^ev;ˆ%Ã@;™Ê¶ˆ¶-—µ ÐÒ«Âµâªø&Cw¿YŸy¢1?’!þ&±Ó—éµE Ê½©m E¥\EµGŸD}xô°„AO8úç¡  Wr¶LËÈ8LéÿèËåÁaí¹3“Cî3¡fk‰ðg;µ“ +"ý–¡){†lhRnA€?¶tW+%¾Vª4…°ŸIX¦Vdf,ŠõœU‹Å¤'ÑIœB“¦zü݇[Hf ±ÔsôÒÁÇTO¨'pwÒˆ„¨ ŽVyeíª€jz!ÛêMKj»=®ÞGbñØbz¨;DÄìÉ&àç"wìo Ùl6öe à X}(£xÇaIÇ0À-Ë™÷ ̑ȗ„¢ÚImà æûì§0aÅÌÏl<`‚…P» +(öñóÈâ}›EÁ.|À]MÇHlK>¨´&\%ž(º*oͧ-1[œ_c D9}N ÀÎ$àßêžä†wq`€Äf¡ƒÁê\P5‰Ãá9ú¸€¤KKn0ÀÛ‰cÇX«¸áÛ\â°ipi:m²‡ ðMŠ¢›ÄWwA6wÉ|Å“.d@â³À§—è!Ñ ‘¨sº µ!ˆ°ìüX ”V(mƒL‚Šœ8í$"@B\?þ_ƒDtSîS?=€u«ÄØX·P]QÖû`«–æƒÈÀP&•ºže €c£ÌaóP$`D".Øt¢z)A¨Ôáè FXoƒc¨e†%0Ü}pÐÌÔœÔõ]à®~°€‰>ÃÁ8"gù=ÎÔª 4‰¸ûÆÆÃmÄqA‚Å_X–3-Êx¡ìŒ.8)äla‰-tP Ïîá…¾tBÞŠܤ²Ð1jùÍ…°(rhâÍRôðBÓš3.k²Pá†ÞëÇé¢}p³‰9C5ÄÏ¥ÎÝC õá\6 ð^Í–º¼k©P€ÊÙð•ÿÛ +—p€dZöðAYªc8¦‡Êrž°ì¡úø¯œ§¸±9-0w¸ÿlúïüðùþû¸ Á”f(x-rBŸ‰Œ¸ØŽží\°% “](ðH/IB! ¬Â +¨Óxdð“ +Ô¿eý7{fCÒ0ÐμšÃDÈ-¶"QWf!UýpÑ<Ü•X`ÖÒNÈ{>ÕŠ0þJÚ,èwåV–9áu›lùºW†ÐÓ€Û5¯½ç˜¼Ë"Q[l·_×ÛhG‚×Ìn>¡éyŸa˜µØó Í(iUR8ù„ª§;¬ ^]ïsäªzg…é©´€ë,išŠ¬‰Ý³´2™>¼ðÔÕ¼šCHH§Ð…u•Øó P +}€œ¸m_¼|­Zg>z©÷ÉZÝræ¸-Vªà9ð©îù¤À½ZõÁ–N „Ô_rO¯Ò<èBÚ¯,€Œ3íŒSD@ÍÀÜFŠ^•ff®'?›‘F›‘Úš™Å-@‰á$¾8ˆwGPÜ~ð¥êÇöÑÔrïY¼§æ"´2Å= :[®DofÛÏCÚ(¯¬0;°Ÿ¹ƒÄ@†Äºˆ/w@ ”YÉs“,·çÒJ8ç(›èÎ@¥ãdŠ,ÓÎ/w jÏ Ô¾[©$xùÔe?`õ,Yôéå¼Åm¢'Ûª°ïQ‘ÌžCà.hZ˜Ue•¡]¬üúç½°0±*æ°mYó-w@•ű‚Ÿ2F+#ßRÔ†JÍ Î +E•ãs%½Êž: B2¯ÄTpÊOu…¢îúO-|PF{÷ŠD"ʦy¥î·Ü%¢|/`è×ò5Fµfõ–‘ÕRï…?y®÷ãÎù­N¿*æ£S ÅyþÏD¦Ir‚û˜ÑóúÕt¨wô§ºBºѼÄ„ºyýf¥ôSÑ«+„Dw}=óà¿d½©Û_‘"m ø‡Zvv9ûni÷„ówž×gI"U8Á§Wvd +ë' RÓ+"Àïƒ96ü|§?4@ ˜)¿œ0­* x®6ªçô‡æ)Q£[D04ñÂûd“¸œ>ν)ÈÃ"¸NŸ•œ*GŸœ~WÌ‹Om8zyÜô<“çô›†eðe[ ÑsúMÏǤ‘ýzBѬ¤HÏåô«Z§I׿yýjùÇë_øæòúÕJG°©,y8ýjérÇ×_NâòäpEny!ͼeøì¦§cÍîÚËã…׎º¸öDà»v<cñERnÅsíUO¨ç|×wé8t]ð¦xuއçÚ›•9@Jkr/o~–ÐÄä×P·ÄÀÏvßǯ\2à˜m/Ï0kÓJ_:>¾Yáµ¼÷'Ï#zÃ6³õ6©oVd­ož“¯Z¿¦vßeg˜†Êæ'Ïàeü>s.§“×u/ŒÝH•åîv'Ï4…bœË½î*†T@1Vðòò…N]Ô6•îuÜmyùKã/_Ìè«y^¾h¨—Ìýîå  ‚àïÜ>yU¦’ˆµæòáÕü¶öJîŸïŒßñ¯+[°ƒú1øLdä!Ó­ãéøW³WÀß*  +:…Ôf%C>€0/NäßêR³–«¿8‘ÿ¶rêüjˆ®È3ÃzüE”ˆ <¾8ÿn^¬Qì*qü»e~Ø¥`µÿð§Êòé Ô!8þݲdp3}ú‘hµD× +•Ù°ÿùï–á‚o¯VðDþñ„$Èz$u"ÿØÆÃ øc‘x*Ç"¥äV43'¨Õo^‘ÿö.ÉRTš7Å‚G䟺Iì pƯ ¨+ +^BʯÔT=ÐB&WëXÙÿWç +ü_û ü_ñÆ+ðo¥Î”˜«ífü[pŠ©––Í4œÿªŸ)›äÉȲu7#дù2³WµYßÒï_Þá +óã‡!a~œŸšÝwó:¹±(Ã+`£LÐ_+*—#Ê?ôÊÓJµò½#Ê?àaåY‹`•g”bÑ¢/0°Š-ö ?~ïr—Š¿[ÁäJ„+¶?ÞuYÝ[û‹ÛÇ +t-­´ôØÅ6 8Èï@ Ú\Hd >óœ!g£Ì4V"Ðó0%TÐ,TØ‚ŠÖå"Œ§B‚=kª‰)q|äΔ %ð¸,cÇÙÝ®H'ŠÂo+÷1¥…LO«Ü\¿6;R°':³8೸5«\O¥eÿ9%äkS·jR ØB€f=ö®§MÂènWaç'HE:ogKV¥Èèˆì,Q7H¬ˆ$Ž¥rZ!¢½îL-ÒèºÞahD¬>-j§¤Ÿ…AíÖYÀ=!‡õT¢ˆŸ…G†°q”TÐû°+Ž2}! +;“wF¾ä*ê 1Z¦ÞÌÍÂÒ'ë_`£.¢¬Q³|ˆ%¯‚Á>€8/ÊËH¹#-v‘‘Ø]„Äþ!‘ÀBrAæìjc§ìÊ@µ˜ö)¤û)±Ë4©™Ï Cu [ðK—¢é^»|â1¢ ¶DmÍëÌ S†@‘èe3½´zh ðøX7ˆE¬¬ÿž9’­ETÆí×VõÀx2ßêöcUeÂòóøz +¡ƒ„6þ>œ?ð†".êTü½—ËK²žÙˆÚ‘³`Ç i°Sbéâ=bÁ[Œ ÉìÄ*‰np©5y‹ÆÔH°bƒmñ–ÈÞ…õÉÃ$ª‚Dn«d³É:CCz²Õ’[%ÞÍM|ïÈFf »ôôó:ŸmÞˆ™Æüg= ~’ä[í¢UxìÑ’ì‹7ÆÊy›@BáAî–=Â&3˜‰hM³'gÔi%’XW~û9j‰Æ6 x±¡žwÔdF˜¾Ê‡-½šòïáHH=5è~×Në=| °à¬RçX€eŸÌ¤ÁQȵ¹>ÁIO-{Ð×]É]`MÕGÐ"‚˜Ê3݃&¼8Ë* z½² +JÈÙ‹'Tkßb&ïe‰ºàÖ‰¿Ü¡ü.UXÂ,2²…N¸Æl›:^¼Ð ¾•–üœ~fÆ]ø™«•ÒïjÓYRök%!#5õÔÉ,·…L¨×â5¥‰Îòx[Èä±)îH J²Š}”Å>ò(¡€‹=>‚°ä_Κèa/v¸uÆmx‰Ê|iu;_jªÙ¶Ö5ö@ eºl\þÅ‹˜@‚¸P$Bð"&”`Ö0œ¶GÄ„ +Ã"8(ÎJNaä´f(å–:• õ™ÇãD*›î·OÈÆ™"›)ì3™I[j’dD­Ïú9f=ìa;· gÌdfmé•„^ôJ$gÖ,¯r¬½õ~éK„E"·LF1H —梸|˜ðíÄÀsÍ­Ëì ˜pUמO~_1cp!ZX~ ˜Œj†Ÿ#[sÆ0m=bu–ä÷€É`A9kð;>_²Ìî:ᾑÃEç…­HëŒfµ gÄ„?°"˜Äa}x¡JtQdœD‹#H0ºõê\‘®-ˆ©¸ 7dÒ×*Á-5çŸÊå58Åz$kÇÖ‹±GM†Eá°\0QFñrDMøÅdÓÀŽ­îŒ=j¯.˜(¿[ëæ5RŒÅ5Yá¸GØŠ7å(Ò{†9ö°É¨ë!GjÆ%·‡MFµcS#X’ôˆš cþ*Àr,Ú¦çð ÷ˆ~7Vœ;û—Ò¯V.r†O(#þ2‹rbŸŒj°±G;mqJHÀŒExÝrËGeXÅ5z2™=ŽB«¯>l´jü0çƒ("XÏ“>ã(ü:»ïÒRþòˆ£ +:Oüjvù-Ž2,Î ¥¨iúq”aÜ¿‰w0¸ÇQFÓBH`#èx£PÉKõ‚ï©¡¥Z0aYÖèCf£pÉé;^3ägetƒ³=kÙºOéš¹¦—טàPéwaœc\MªVèËlaÛ ëȳªmÅŸ¼S¬ÕÌN¼äãˆç­HªXŠÕPVâCóè‡Ù”5íÀŸ…WÂLϵm;n*–£hŸ¦p*¶…àOW„îNÙº!¼”•¨ÿ5W^ÊfñFIÕÇKÙ08¼…&'¼d5Ó¸’Rc-¸„®ÍCIIóÂl(©ù8éÃiä€G8gÊ©|º{ðÇ’!ÏL—}xd” Êüƒ€Ë¹hÒ/|D¥“«$ndYƒ>©*iÌ…Š–ñ+þ¸ðQ±¶ íÌçw^Uò>*ZI„X˼%ÔæKaÝÏXÕq; â7gšþV[Ù ].f _J—ÿ¹€R}×]xT-çÌâ)‹Ž]ð¨*dæ°(Üêòp÷;àÏ-Mðô"Ï¿ÐQ1< 3Öi󎎬}—ß<=ÆŽŠ!ªBYõ.}$@3E5ìs £¼ž1³ìÃCGù‘¯¹P‘qz$æûb·ÞPQÖÎ[ÒÔàìZJ,⌠eKxádß|0”µ†’Ù*]0ÄèF•­YÇk`ÛW‚Õxn!á ­ˆLº¦T.4”µ‹+=¦±klhȾFÓ–pÎ\Z¸©;Èz®ÏT!ù¨(ç÷¬’‹\¨<Ø胷lzª£Ú á¡„¬Š}ª’äpù#:,è@ŸjÙ4öÓT/—d%2Äî=º^þ:x:ЧšÙìªíE‘¸—¦Mvmy¯€•7bŸÞIyz.‹¾äAq8òò”€Ík+¸¥• µ4$Í7Ÿi%HÈ)¶X¿Ó™V‚Œ°É±Ò¶UÅ+{^ Jñ€­¾2Š{^©YBnc¬ºà3¯ÔQ¦U÷x8Úâ*ÊÐË`¿[^©% ’dêÐ\aœ=¯Ô¸åY¢Õ½/¼R#'ƒ¼©h½ $$« +‰ô8~í&ˆÝmfižßï¦fã 1šÝfÏ0ñ é¥3¿õøŸe¹-YùoÆò © Z|F¶j]MÏI&.¸8sKmÑle†ß­˜K2ñ›‹ß" Š!u‹¨‡ºUªŸd¢†NÕóØ£GÕE-oê÷ÜÒ½Eî$S³ä eÆ +mY&‘ˆrl~ §l馯O¬"1’_Ç‚‡”ì,ƒû%x˜†ËEsÇåjÉKHAB߇mm‹AãH7QFj´ ½Ò‘ <†ìÇÖ…¯¾âSg–‰#ÅY¹YRàÈ2Qé„w %ÚDÉ2që´’:­ ¯w–‰›GÔD¯~f™Z6"œ¼ŽºG–©+{Íi]ŸI&ˆH÷[fRñ8ºZynî¹¥V¬¬,«îy¹¥V¬Öæf‘ùmǶÐó™RjeiVÎzñÏ”d”×*¯ŠÒ3¥Ä`ˆ+P›—Sâ"Jq5ízXÑð=§ÔˆWdkB[ +}O.ьɾÈDTvݲLͰÍ誻<³LÔöAC¡Âb‡ß³Lm1Ôeµ­·nK7ÝnáN7Q§¥Ùƒ¼dÅ’![º©¥¥9}–ÙÒM”wJ,åÓp`sI )jkò`mžî)y*õìoD yj³YžR¸øâµæBFMÙ,A›¸xú“>*Ï¿”Ú—ÉÙ^¹]žZa%ݲFÙÁò]9a7qò´òq’œ1€ýMþ± v¸æ§Wh—‡'új»’..¹êÐ9]™…Yaµ Iwe5É?–’ËÌvÍGí +rÊC%$ÊÅfÆi× gžX˜`O?L™Ø?hTWI»páØÈ}­#¶†Ù:’?~ˆ„ÌãȬæ]E"Ì3\€ó»Üg± ÃýC­ø“D†ùƒÄ6Ù‚W¬€gŠHãA ñ7…NÊ2M5¨-ÁsE»¼= ï–)ßOGÙB~”ˆV\â³A¦„ð‡°µÙz­ëºëù"[Í_&0^MÀcÊ 9Ë5¤uš„Ù5MAl,kzñ®Y"±Öv€…¥ÄLÚ‰š­5š%‡ + ƒÄ«äÓ*,l´pl­Ü‰­*¢¿4;N®+¦,/3ù™–ŽIÍ=KÅ­3A¿,·CT šÆLÝ¥—3Æh§ Ûêx¦v„kÏjK–Ôr_H™ö¬i‘f&ˆ¤[Õý§¤J4Õ‹¨IÏoÆr ‘ìŽLi±Ž_…=ç5…T‰{Tšª„XGÏM‘gcØGwqKJ]ãA>DAňajǘµÍ2J—§½ŽBP\d±ˆ”dýÉÁl‡ðH“¬Klî=é&¡o#á ¬Z\±Þó"Êx…«qMNk&Q»YůM•ãh¥ÖO?oñÜ~W» 3à‹^5Ax/ø÷¹Þîèþ¦R5B)­L›Ó×Ä1¥ÉD·Ø’¦–"ÌjwzˆDb”PVšïjç"m¬¥+NºF€çÒó +#gJ˜qÙÖ:<@7-»€Ÿ^CvSÛo˜ii>²ƒ‘j(I}ï ;šR= ÁHÕì";Ó(Û(Íø]U<°ÃZ¬¨ûŽð¸UXI*“)gvžl§¢Û)‡EñŒððvÜ»QüPÄÛ¹co8rÂ6š_õfp°·æíÒÊ›Tèëäí’srgo¼C«ˆæä]¼¹çí²Njå;XÂíJÛåGýþ‘­³Íø·¹¯ Œáa ¹‹‚8ÙºE,NòXuéG²nq†Ã‹ìqè´bÙêvô›ÀZÕƒ-ëTë–¬«Zo”¥KÛìÓž¬«…¼st6\;³ÇÓlÛ‘£«Z„Û†˜<êœVµ‘$™%8m`–,KMÆ+# ÜåÁµgæ +í5Õˆ ìþ0–-›9NÇcÎaÂ%ÈK~„'E—-oE#ë¾RtYËŽ¨ŒÉºÉŽÝ•t½ru×¶pruW®àÊÕ%#¢ó\ü]{®.Ù™)Óy® +¥#WgU#Ì[Ìàfâ¬Çˆë–9%†fŠsÉñ•\]6K­èÅÉÕe­M†« ^œ\Ý–‰Ç¼ó3iW VeŽ4ð’vE›ß¡añ¡iÒnÍ•!焳¹’vVûœåßÛ0î]‡­Â"“©:9ìù­*Õ- ~kX# ­°ùÁÏÚ1ÜâÑé4›m üDîÇ7k׌.)ŸØ™´³ÙÁü}LoÆï":ø’†Ï™%Â¥{ó ¡ÏXHâv„µ5­«¹âÜWöÎnØ@ªýÄWö®ZêÏSüì]].&$åÝw²w,Q'ƒýo=äGö®XH=§ :~eïN7á$ïŠØÅ”z½bÜ®2Ûõ<¢J¨OÅÂt¿Ì§Y×½Ú¬^™Í¡lR +“ç£þý­Œ;Ýj;±¥jó‹ž{7ÜMIÙ+z¦Äc +ÁF´ÓÍŸ@ÇÚX£?w¢f³­Ø/æØˆvšEEF¶q}ÑN3ˆËÉé‹?ý$Úi–ˆåL+;ˆvHL·° ÊâæÞˆvªÒ(çÀ˜ø+D;Õ‚IùL£h¢µ7X>¼:hHh@,Ú쬃îÅ|k±œÕθSÌ.J;½µ¯ïŒ;E‰_3§ÔY-ÁY ™ˆÙ‰vŒ¨ÿ¸••ܘvÊbÑa¦"L;‹ÆõbØ)JâŒV)ÔÁ°Sì$.=w*q1ìTMAfbj‹è)ÃŽÕæfÎ0‰^Atov<ÅFLk¾všqú…h£ˆ/†¦“ 2ݥϵÓ5ŸÀ§5_Ÿ\;6Q2„5/×ÎâH¼¸vú"ÁÎ5‚›‹kgž\;]£ÏiJÝ‚'a‡øÄ«ÇzK|ú‰ÃgrÖASBØp´(û¶82©e¤¶=U¿"ºÛ€ØÄ€Bð*¢…û¥(÷Kž^¹ç³`­™à'ÍN·È sÓf§Yz‹Ð²ñ4;Í +9p¬­vöeŸti°¦WMÕ,Ba…ãR±øñγӖ¹Å¿°,ÙVý^ö†ÂÃ@3³Ø{7Âjî7°jÒ«îÕ‚ˆxóâ7ŒõEÉ ƒÙ‘î¦Úˆ;¬HÍN»S­”!pΤÕ<ž´;kFÈ>hwÚr^Œ×xÒÝÚüŒ/ïÅåݱÆiîøiVWywšÅü'›z¼;ì^ +b J|qywºЦ¹W¥Ð/ÚÀŸ­hZx¢„G©ãx³ðÖÁËgV«óµ\4Åí.X«z)Y¬îuÜì¼5«Ö­P€¡aSù3•‘qHPñÇè=«Ö­¯¯TÈ•UëÚ ‰”Öiö̪Ys,d¦¦Û¯¬Ú¢¨ëkàè•UÃŽ`˜ S›ì®¬še²3»\ºWU¬­šƒnÃ Ž´Zµ¢/,Cµ }WZmÙ–ÏYÈbO«A¢H4g°XèåΪ•j¡X¶égëyΪ½—Ûèqƒ-ì²%ÕJÑ6yì¯.Ú-§VŒ €ƒò +,95ÈH£dª…Žv£HY Ô¾Èȶ”%8¹Še¶Ó(œ÷”Z±v^1CÓK©•ªƒz ÁB„—;¥Æ5•zß.\I/nn­Z̘W­ äH®mM‘Ãîs$תõ€89µfg"îëÄ=rjëhÜ©pÖI²çÔš!z(U±q­gN­Y¤£7ËB_9µn`ì½·YàGN è!1âØÙy¢¤+§Ö-lØy„¶¦‰=§Öí|Ð…Öõ:+©(E Ä\ù¥#§f…s‰=¯Ù [N­¿Ëîè%ï Ϲ \-‰Ê°åÖ“ë²R\{mtvæ¤üR¨bÃV Óz÷FR”êÀÁ/<pUR÷k¡hf$æåé,Ø3hbB’l™ $BgÛ_Æ þÅÜø‘AƒŒfªaù½J(ü®ƒ5É´a¡ë=VVøu¿ü‹—?+Œ—ˆ5Ë0^%TɶíÕÂÚI¶ ZÉ:ªy«ƒâ’¤X,‰[þÌ“Øógrñ`·Á°GT±ÉM|ƒæeÏ °È ÷¤YYÁM¼ý° ã–4Óï Ôîƒ\‹NÜO¾”&ÁaÀŒc~Ošñ{ 5k:ƒŸ4£ì‡GÅKš•ªlN4£Ñ«†¢…”49éÒb?rfÕd×äć¤Y[†i0`ñâ$ÍšMø†Niϲ“4kvVîäæ\¡Þ-i¶ÆibcÍàfϵ;·Þ¢\=³gì¸rcÝ"40´îøŠ­·¸iCÚ;®Sœ¬Üg*#Ç„¢ÝúÀoÓJ.;Îg³zømÚнÙ×¾ðÛ°šäcöñÛОOɆúømX–•ÝÄ6ÖìÂoCãÌüõéVEumã‡DÓCÁ…ߺÕËu61¥¿½‡¤µ{½¬ ýߺµÀc ë;ð[WÒNŠX°~kÖù·5¥…ÚÁZ¸]Šé·uÌcاzÅP”ÐŒ5ò‘[³ò¯NîV¯¦/! x×bÏz ·®c—°ð ÙCn¬áäVù™|äÆpÏÄd±!„rëÖ6Ùט‡ ¹uËDÁÜ…à†tN’i‚–ª… 6Vé@p«°³sòMsܰBf<±R.^Î(ã±ïæ×~ ¸iÍÞwM;7­t‚‘M^ÀmZ2“ ÏßßÛ\ ø1ú5íeUñw›}xá¶¹ðpÈcUTíÐËyÒ«jz€¿> FŠín|Ž'nÚ'~¡µ5µ#×Öˆáª^dq‘îÃ6º9ÕRøj¯ðéFÌlk6¥‡©d5‚lc4—1alÛYçnÍ£0Û`pp«:P@8³_Â^Œ;‚0tXhûnuí:a®ò€Û +¼uól¥OÄCcL¥yЭ*§ƒ$̼Ð͹ü…Ýl ä‹ÒíoÕoÈáäU°—úÝO¥)U'g]®b¥»5KBvÆ«‡ÝšQà8õ!®¤éèÀ ²YÓƒ—ó [·ŽƒÔºu{ÜÖ§ö2tª4~(VÇ|µaÃÕ;Ó*¯T7 +È팮9öP»¶ÛÔÆ2Uøs|¥Ìé ËO…顽ã©7â4’‡zÃÆ?“Ÿ$.’©']®ë¤9Z‹ÓÁuŒ×C27>)ÉO…®ªÅºÂ;×u²P­PlzÂH¬ª<¦$WÃvq][­|ÂÔ~È‹ë:•seO¨åw®ë¬e+‰æ-ú£Âf1îÃÚSÌO£Âðƒf^‚Õ¬×ôøÂ™KŠ·Þiò$F&¨ºô.ÖkÖ0‘T9É™+Ê·ecñ +ñŸõNÓÆÎÒJ'ã>ˆ¯³V¢'öw§ò‰ ¾Š#O¾k›Þ›„Z_áñu2RŠlwâë´x¡±µÊ|q‰¯WƒüYç$¤å^yÓc?ÜUM³+\Üi®ôâVÔD¥âæ ykóØŠš(¡ŒäÙr±ßuÒbY.nuÙ'¹6|ˆÄâÍ#ñ£Øé`¹6®‰ÄƒË[¼³\'Bû<ÚJÔÕís[g£ƒRh‡ßInó’‘¿ú4Œj[HÑ-Ç£G:É­±?¦Êp2å‹Cn]4ÃÅ©”Ùa˜EÁ~§¿!ï²ØžhRš7lZ´†o.nk¦Þh«‘:ÔÖ,ýáP™º¸þNjëúh*>­«q1UÂßW­ñˆ 0&ÙÂ*¶Ü­‹e¨jyDƒJë¢\̰ìáIi]´wŸ$v«ð8¸­IG+M X²äM£Å†éJXeɺ“ä:k!²TšL$×ÙˆŒpˆT;خ/à°]' QFÑÊÅvL…t?¼8l×i9΀í÷ +Ûuұɉ«PG±oBa ²ˆ‰W|÷[¡@6£\Í=9 ë_jcq: A6üÚíly‚bÌdêÃEƒÿÔ6v!‚ÂÖÜæØy zÞÕÔP/õ˜â ©ó‰b 4û!ntޏ©0MVt "sY´4;;ˆGœ°)ƒ »†ôq±àS™û‚!„ÕpAS +ÎúmFªv"‚¶¨øñbk˜ÏŽš1LÊ™nq%nˆ Zy +I®Æ‰Ølk«÷î±ͪ•ŸX­¬šbGåÝŠG]ˆ€ñcY +|>ú"(ÆbŒonŽãüz +kŒðÂV…KõÌë<±#ƒ â]áÜ'TxïY« +dãCƒD«ÞìPJH9XöJ—íuv$wA²0m+É-MâÊ+,eìÔPtÒ/dÊc鬾41¼àư"3J<KNô@§%ËVRµ9%;z`‚Ttçü„ÖäE4´åb)‹sz×[ Wàž}x ¡)—~r@C·£›Ý[ó@C7øOºJÐÐuÑXx/—/ô@‰ûéL¥€øá2”oð Ý¡Ð<ùœE|DY^fz†‡š&ӹт˜fÀZN±e>f°ÚR|V5{˜¡Y™ØvV;0S8°R‰Å§,¢ÅR_ƒcã¨f¨ ›À’¬éX;f¸|„ƒŠM—!KÜšß°c†²4¨¦°jšwÌP4¯N‰áÒˆOK]އ)z¸BL ;€ôc¾ý­aš{*XŒèÔj&2RL™–ºF˜vz/«JøB dJáÀü³U0p¡£9L-µ!;æ†rFÖYH ãF(£Sd„õʼnPBgZ°›ÏHÒ7¬Xi-BDàO2$7±f6|ð=S2o¾ "PBq<#P+€¹A¹ˆŒÒËÝjgˆ@ =7IQ3*KžP™ݗ.D L$Ypfæ!p?–ŸÏxvšÑ`Ü^T ŒÖ¸2ŠˆÈvŽâ–ádä %BÖe+ ¹@D¶ìV1ŒO#¬§ÑÌ6Žì ˆ¤ÕÖ\ð™Ý‘›bÉuM`=ª“‚Oßäa»õ(BTL|+g£qò'DQ@sCÐàœ r‡Û^àA Øp0ƒüP学ͻ0ƒƒõ.D­C(IÔ%ÖKPó|Ä”^Ž"¹97EBq+ëÁš‡’)6´¬î.u–®pÊF¦É,O€]¦LLfÑM/äåxxX4¥›²‹ñe›yˆ¡Øi8ÇèÆ(QÙ&•2\EŒb`õËkº¶Â1À\Hê„Ã×t†1‹&qìy¼ç±ˆÀJKî@¡˜:°…ÄÎ R`6A–9ÐzHÁ(“±¡(åˆáZ*¥ˆ²#†«V| †lØÿ +yùR 7(@YÔ«”T] aÈÖà —7ppB2 ,ŒðNµH¨Ö´¨Ô/œ–m©z5 U BìÃÁb +tŒ¨¤êŽÄçûó7â„Xýž£Ïô'q#Ò£¶Â)OíÓ"!G4¦â~jkŒ¢„úp&oè&E°gEÆâxÝú¨­ì  7;lN÷ÖGM Ý™Aê1_œ>jÊ(æ @bUe¶>jJ¨Ñfaì°xØs56åœp(ÖÿqôQSFÃl<^Í#!É?^;bkŸæ:ÙƒOleZGû4e>D5žº¦ùƒZ>è¸bÏ]Ó6ïHþE‰¬8ÿ蚦Œ"Æì³µO‹„(:.žnwù]¿4,á°’‰½{ZžDâ,52†å­šo$ýÿ¢Ÿàh£–÷•„«IUà袖…~jžv¾ëÑr!ËJi]@vËÛxî¦]Õ‡¬)/œòÜMM 3º°Ö–a8&MQFa!·Mtº©e×è‡ã[Ô{CsŸ=€ÊÞE-?±ÞÆ·/™çºs^^Ë Q¬¹q룉T¤ø»‡¶jF·>jy q‹¬¨·2°­ZÌ~•ï…×õænÊ‚JØ–Çf䃦dïK4€yÙð¤_rŠffXî{ä”(ƒdx†³ˆöÑF-ÛU£®,ËRÈ®U&ë %ºdÈÞ¶ê9èçù%È$¦%ölIÑcä?ɶEÌtÆ\ëB¥…É$C=¤® /Õ V• €Hj,(Q’8k|Ë2ìíÔ""çãÀ´ÍS;µìf}]ì˜ìÌ  9âÂ"To(„íw5¶1öîªXíÔHúãª×ÀÏ[±TWb`èhìÞ ?ÓR&•UV²ƒªnžþZ6@v¹|ýî³üT®hJ¹Kçæ¥Ø-#-²«RúÂRÍÂP¬nºva©•[ ,v8i(üA;ö –= Tµ$ 2XtA)ÈA.¬ÆOPê2Ô¦ª:ùŠn´ÆîcªjÑž€oÑWØÞYvU‰ÍWÅòa°×Õz/pUì°s’}pµû¡¬æÀ\ dz?)¿®Ê`øÕá¨+¦ð nÂWx=I…º=È…®X|/Ï™˜å f5+©Ä'OVpÀ¬k_;0«iTŠÌê:ßJ>jtqVWÍXÆêy;pV×ãdBo.Î"X|Œ>¹pVW¾@JD/¶ò^î3¼ïVëªÆ;vðŸ–Guÿ‰ª†æ9ã¾ø¨ªëÉ!Ò„졪®ö£Gë…ª¬ý[˜/GöP•u@@‚íЪjz̆š¤UµPUÓý…¨¤y¨êrJªZ.X衪÷êa»‚jc,¹PU[Ð/6kv9@UUÂm¢ÔæÏñ=ÑIí«‡®.t¡«ºÕqÔGßß®šEo±±²Q©誩;KT­Õ×·?É…ÿxÕôlÉ)ƒ).¿$=¤E]þŒªÈ5Ä0b磪®á nðÚ×0ó U±#&Ëט᪌O*ròBM>¨V rb©¡¥ÁÒ“·ÓìXjh­4”uw §ìÑ /a•Ö'–ë%kÍÁÀ M˜Ñ@ÌîŽé’]®•ÝfNp‰+!.ŒA¶ê áú8øy#¨JYÉïçðˆ +ªRRv‡Èy³ÏŸˆið ÃW”à†‰ä&èÞ”sŠw|dÌ·{à*%³¨4]«€fW)i·$$¦ždop•¢¶ðGÒƒ&/P•¢Â+äÚÑUŠZC…S¨J6n2ÄÐ~H)‹•ƒçHº‚„4aC¢·æG¬RК.m¤]]<Ïè +‚4#ü#ðŽ®RXêMʯê¢+ÈH€2­®£ºJVA‰næ?¹|ü©íf¼JL<7î‘í¸º£+ +0£øèöÞÐß—Ù`¾ï†z¢+®l—¡°l¢]ÝßüDWɪ&"ñ“!§]QC-O¶ƒ**wQånÍêmwPÅÈž-nÄfhäUÉÂw” «vUÉòŽ€p)!q‡H\íq¾—ûÝÏi´ê”ÛPB‹â Érú{pøY˃&•ntE™*:Æ´Êi7tE 1x¬Ê³ !.‘LÍ^%ÎA=aVÊZßÁ7î–_ÛaV²À(Ö­õè¯håd?‘§ÂCYiõ4à +?udd ¦í¸Jɶq„a·\Q3‹‡©hêÔê2ToL¥;‚•DTü0†©âÖЯdcêNL9 rpÓ4fÏSQ†G=Ê”ÅÚ·!™d.”p!¦„Œ¡°âÛ0’I¸h=K;¤âšð9±&U'¤¢Éâîê\…Rq£Ñn€ûð±ÂM¶p@έ’ú#‰,Çqb+îbž¹‹[¶JY¹W ‘º¹Â\¥¬4ÔÐè®} 7¸‚ŒYLÖC8+nó”ºlójÙQ$¤î.Ü7ÈâM¸âߛڬkx¡†²lUL1¹=H²·Õ²&¯FHV +ïÀ• +.óÇ!Ð[¡Õdï * x’t0F/÷—¬d›͇TÅN¾7’*Ú`Iêí#©bh’'V2t ©¢m04ßÅRÀ’b–ºy*ë¡$2·X±v•µÐ÷€CŸ>€Êšr€Œ Î[*›½»pÓåÜÄu”¯ÍgMnJ¡-V*å 7%‹2Â$G—'YDXþÈÒÿi]Ql²ºHŒœÒF^¢º<Éb~Ô°×2Âj†ÚàR²Ø 0æ¨^0ŠSÌ)_ƒKYãï æz-e òOk&9ÐÒµu´ÄDÊ4-l.l²æÍH¢,£]8`S1—K†R«ê½`“‘vE:ºìÅ¢RÕl ƒ€µx9?JH ¨ÃI?ç—ªlj¶ne&¯À&‹Bf#Jš^`*Yi3_ÅpÑ…ª¦Õ!Szw"TÜ@,Ùã^Å‹P¥ªgf¡ «xªZÉŸ6U-6ƒ<ݼ÷ºZ®fs_U—%OŸ“²“Í.þ¬gyq®WáÎ['W³ŠœÁU‹Z7/ʪ!§ç(ÓªeÖ‡4¬±’wѯ’™ž ]­Gø$ó5€ŒßÖM>Q):CÅx8 D³.œtå{â+2%?÷$CB’Ðs‹I⨈ ØèŧÌÅcÏS]“%$àžBÓa2I8; ,½^«Tà +U5”_Ž=øFÙÄxqJ&‘5Ĥ@X#«šP˜ÏÂu`ʇ´>©ÆjAqsÖ8‹Émº±¦Òúb‘:¨Ý[3Òu|¯bFÇO%¸»ŽµQ²kI‚;ÃÔ8Uœêla»‡•ÒL<Ùñ‡RTwÜ  E–Êi|’¤ƒ„”bšTöƻҴä6 +Öâ—Wù À=œ +:FÇÆAƦÆE5جu°‹)+?áQÒqYMffjÚŠ±cŸÈKB>ìJê7¨Ø|L§SÝc‘ˆëêbXð/Ãc$îž4z~ $ò~꣄Tg©;ÎW¾E‰˜ÜÀŠN*:ahØÌ¯V„‚‘&ë$#í8ÉH§ì2ÖTƒur ›ª{‹åå4ñ@ªzŸEqÌDµáÍVEý +I DA»Õ¤ …=Ö,’m±Wb³¼\uŒâwåâ6"“Ò°/&!ÑÊF>¹Ši?Θv"P¢>zwŒ5–fǹ“›~“FØ`÷QòìD˜i\)J¿Éž„¦W!Ut¦j«ºi²×ñI„-91á£;•ˆ\/­éÑÔtDÛÜ‹KÛÈÅùЄLJSÔ’I4¥•ä4j _„Àޝf_JÑžŽ‘eš—åŠÈÕYæŠgLõÉ8ßèÎ\ÚŸb­K…,¦‘ÿ“M‘”4îéÞ:1Å31¯a~³>X‘¥I•JdéÙNt\Öä¹VJè ¾Ù×ÀÑ$8Ÿ!§Ó޲ppèk6Ùp {ÛüDö¶øâLwJÐÙ,¼îê +®âf#‰‡yŸdÿ†«WI»É€ç“\%<:Ö9Ê,%:¶Ù¸sJÒü` 7¯Í”ÂãFÝ& Qþ1þ7±2VãKL8*ëå•êkÞl*W“QyR=cW×±+,N ¥ÒXË™Š9éWñS0ÕÖjµ"%4´€Ý¤hf¢©ÿf¸Üì…Î$Œ-N3GØÐÖn,ÓöX‘ ÆËi~o÷ –›·‘Ó;c½ÝêÕÔ*7ưì6:ç?v{ëµ%®Zß‹Vll…ñúÃæÑ½qIHDXÃ5DN›š+özYEÆ”D²»+”¨Ê5\Š IÄ—–agL´g? ¸áyë¤;%n‹ rZ*`´Âˆ^L¡ôÐÁh\R_U&‹ñÜI„úšÞC^ôX ]ÑÖÕË‘£>‡–Âáf¡£Æ×›Õ6H–‰IÌ ÍU*1 ŽÊ +ú´aÅgŸO‰Ü¥Ca|Ø{¹º 'eÀtEéƒ2* ìêņp@_fñŽ÷½˜C óŒZy¯Ó6e†CÔÉé" ™SÄÓ§‡‹dî&IœÌÍÉ9|ª÷øÃÈw²,ÊÆÒB 9šâ¿7#i3&óÀ¤‰JC6žµæÕñ-!p컑í>êbY(Ð!2¬*K­ÃÃÅXY˜@ç$²ZéçÒGd÷¿J(ÿ á´‘ÌõFùèlf ª\¤sTÕQ{û<:üÔ-Ê%8Œ[*Y!P6tœ¼í5¬¬£ñ¤Ùh¨0 µi[eØÌd²¤¨fªÒ Š„RnÊ*r¯ÙÅ5ûc³è¨s×LF¥<€½Ì²¯õh-J+\ߦX@B§˜G™˜­6è˜bÑ­2±÷U@_å(’…ö÷ѽKªKL]i2ÅÖšpù$ÍhŒg€ã9ÚzEp¯C;èd-$Œ’ ž˜rà ,TÛSÍË0!Í„B¯ªÁ¶(Ó@Ô#lÔxü\2>Šç‘E«ö‚~ÌlŽ0—GÚ&ch9ÆVˆãe±¶miV&E*—ð_Ñhg·L\’›k¼ØÒÅn¤`.·Œ¡c+j]®]‡K“ÇÏèܲäV9·‚£¸‹tDf/ÕŠc£ÒuðOº[mÐm§ÕÓùT ¸¯b{Qêc±_g]Ìèk Žº£5Øe*«Õ(j0”Ëž÷cþbe|B ‡sšŒdÏëN“3¡/á­·â¶kü¯àê¦Z·Í߬ •¡åGËõŽßª‚€Ú«Í<»ð[±Á$/ÊÍÃoŒþˆ“«:ò‚oe Æ~݇oFB˹šÕè„øf\¢™£dVøNp\^cVa¼mÓ\8îRø Ðå5z2öãºl38`Ñ&Æœ€Ž‰³âḤ-§™ hÖ5}ภn88.=†Nð-Y06¢ÙH‹¿% 9°-ÙЇÈxNô`[6ä|¡5º  .H#ïZ3šÚãQ¦ƒÖÖz\ùñÇ3Z+6 Ç×ÐZQš¯ÌL·ÑÈhÍ*™HežKýŽÖêcõÒª²ïs³¥ÁvV×C®@ßÒê@ð66¢­Õµ•rÑ*¶ ­5Ä÷ãÒÔêüo1VìwtpÖ{™¬#«¤oÄ#²•ô¢ì,#uQaƒE•¹À0LÃsõ5‡5Ð]­µ…-Y¹·¨u6´Ö>fKóÑZÓ’d=§ÛªÒ)1†­ull«6w*”lÝÛêe¥æP<ØV—ÃõXlDËXwɨå +„^°mYÅF«>l+Ê @›Ú­<ü€mEg2s¤Ô´1‹lSÔ®‡s6íX!ÅÛ²Åq.´–׈íae¥ZË–~ ㌅–´–-Ž”‘-´| 5ŽKãÞ«Ö¬0†¼XÓÛ¬É(£¯ƒöÛ®Ó‰ƒßŠEvÉžåã·bóädÎFñð[1| ++•#~«–U e‘…×ü&x1%a•Ýø­¾³^£ µU›Ìâ4µµG'ÓÖDÇd~;G¿ø`Ù/Y9vx`­Y`“µs>Xk¯¡)yzÅœ‰ÜE£ª +råܪW$>]½µ`·“ŸÅÏWQf½Ú†Öøƒp3@^šƒÖ ¡|2SÎØ.ZƒŒÛbɵ ìDk#¨ŸbíiÞ,uH(ç’pf¾m[쿲¥²×Èë*óÖe¤Ø\›ïŒáiSsp_]}ÎÒ¦QãÓŠÙ6´ÊˆœZɨ¬O6Œ…íveå›7´Æ^ZNý™ÍYZ³•IXr¦Ö†æ›9 ¾E7ê6Œ€}2ˆï¶¡#9yŸj³ƒ.üÆl}™šÍDømh©¿|žà†Ý†–Ï“½,—â¹id¬J8‹ä¦uuËÜÎæ¹©g kñp$¤„11âáEÃô>:_ïTÃkWñ:ÆÓ°)£­!ø³‘(ñ“”6wø6¬GÀÓo”`>–˜‚lãb‡5ûøCx‡o\PÁ¬Ð˜|ãWa9¾[LÔ;á¿-/dò*¿ÝáÕCí>quH‹Å +3牮Ÿö†oÃÚ…þ3f¾•Á»PÛÔp>³R±µéF\ á;X›zÎ&!ô\¥=;j³±vØÂi5]¨mj´™¬SŲ§j›š„猾bj›ZQÈÞŽœ^‰±M-â…LYTëj›:UÊ‹lÃ2áƒâè‚èGÝhP„ XoNÔF—8Änà¥úšûŒÚÄäPÍ9-óÑ+µ£6ªŽ¨(-žÚ ¡‘ ú;Öôƒ´QË vYEÛÂ*'ÙáÛXd¡c°‘ÀoÜMâF‡W?aät†]7ã(ï²Fm0Ž›8’ö)ÌäÀ8±=üÂlƒó៕qcîüá1"RBÒðIòË^të­p.­e‚…~ Î%Û®ÒòèEá(!öbÔûZ¦ ×%cú ôG×%ü‰u«#{¸.Ù|@²a×îáºds‰hYóšë¸ãº±š¡u±yYÔ±v ÎQ«ÅÏ c©¸qÝ­ø'®£aV{_ž¼à%d(%Lw·sÓë†e9!2s÷¢p´ËUðV¬ÑŽÄ;®»ÑÇëh»Å[‘[u59l¸Nô“Ã66×ñ>,,Â`+Ë:q˜¥ªfiس츎fI1vLÊJtâ:ñVòÆìªñtü<º'ÝïëøÉ™„†R Ís¸NŒE?•KÊÁuMD&“9p]Ò#84¸ k²:^Òr î¥ÑütêXÜÞXª]„—ÖÓÂç6/R7ÒhÚÝšÂ9JQ¤r»lìÁÀÁ­–YÇ(ã6s ?Jq}ƒ”¹.~˶!ØÍ½¹•Ã⪉əì4y}*÷Qz8³¼¦lî// +Ìž×l­ áeƒÔÒÒS|„Çø{  `™¹ ÖCÉ•í6ì@xɆE`ShÆã@xïÕf ~2ÐCxiY8è¸/i-¿QXc˜O„—H\/ÖvE߀ÇbÆ8”Mé5œtŒ\ׄ—éÑÙ ÅÖà„fòqkJwÃ Ô +¨ ÿ ¯@>âŽ,:Ëå¯䣄îa q ŸDáÀ4Ò‰òÑÛ«#-f/PÇEa͇;«>^ïÃdŠ é%¬ÒÄ´1<¤gEBøl£Xï@zɰ-Éñãôdà¼ø|h_÷ž1d@"DéeÂŒw‹¯!½lÞŠ ï\=¤—5 ÉñnW9 ^Ö'ü‡”¬éê‚z¦Å€ÛhÔË6‡Œ|^ÀŽÁ†üêå\eº¸䲦#™¼.ËÜ}’½êÅ©Ï_ õ¡®&”§q߀z)h'*dó«c“¹}&€”§T*šÅ‰6SBe QûX1Œ.¥³…léŸÊ}¤«¹(±MJ°ÍˆOȹŽZŠB»hÙëðeR߃Œ>Òæ@Ψ5Ý÷0a$ËàÈiÈDíyåú§rkJH–ɤjC©“>-y•cg8óU…S2º5­ˆòØ&™Íá lB&×u ÌÕØƒ*‘'¢¥.þÑü¬D‡,¾Ó3,Ë)´$\5VbYojÕ:w¸á(N +,Béª×6ZÚ¬^€ü#Å.)¾ÏŹxj­”ŽØ¹ÿ„ I ªLYz¹:ô)!ˆ…3¥ÆÊ«ÆšÚ£GåIŇâYe,(¥rS›¬’0²ó§2oOÉã@ YljÌ]bÙ-C¸ïU­˜%/<ù[Ê ÊT¶½wSNže¨œ«œC7 |nlI¡b ”EóÞ»œ €ŸšÌ®”­m+ ‡)_$ØUK ååI^§@õ>B%ÈÛ¤éHè}„6 0Qº¨Ê²XÐ+¿$„²ÏZãÆ.1tò«›ët®¯C™&ïÌ~_;¿I¡¸@Ã"W‘Ü>î3­ûeÊÄ hs$ €ÎÀRÙ¸£³HpÝä6xØ!ˆãέÃDÀ/.!ª»‘YÇÄLæ:°*…&b­ÏØz„õÛs@×Ó8Íxxc_xdú°È·î|{› ]¸ŸD+»h)!tœ^U­rÜ:<È$ÐM“ƒl²ˆ?ëê/,.E΢êPLãšÈêÅáÜyœLh8b-ÙàŒªp zãUXÙ-Õøk‚g‘K#‘ˆ\E†ôvòY=DïQ°Ül´C›‚£ƒ#ê²Õd +^†˜œ3Ü1©¯áå‚õéä"6¨ «VVÇŠž¨é5²êà4ôg†óo¦}ñ®kcÐÁ«G@i£”,ÍÝø´-YÊZ-'ÑéT `¥éÇÎTÝɈªûd± Û +phfW­´FHºA¾tl$ÑxöýqW¬3ÎvÊz/»BrQdÁ>¬¡ÌLp‰ÄªOØgøðøOgÊ·¯µÝ@$W8o-¤[FÔžuÜþzp$>ß§¿+¤¨q>™#¸êN¬µ^ºdjô°Î€C”À‘ÁÅ +ɪQˆ4?ÅYɦ!iÛWað¨Vˆ5®Æ>ªØ}„£ÏXS5q „lÌ>0(Ê ðªE›p$­Áª™@`õ>€‰"(zØ(ìI6Fø ”…ØY<DP®¿ê  X5|DP>4®î@ ¯åã¬)\*¬fƒ äõµimϲrá£E­é¸@Òô$º¶PÀÔ‡íQ„B±D +$­@ ®kƈºCî¥×qVP Yœ™2¥N +ñp +‰aç(Ñï¿lÚ=ÅéÞiãÕ5’öÔ•:.&¾h°æ”Qo³øÉO@×ȶz׸êS7@ÄÎ +ƒFÙøc7 «ÍïŽ_Ü .Z^Ž_¸ì䮬'›·ã×5:üåøm¢WÉ6çæðúÉì<+*F½½¾ü©­µf|—»×ÏÚÚΉÄ5wÏëçÔåì­Ê*³çë³ö/p¨Y6‰Ã×'e~㞨VÍtúú¤'i¼ç‡¶“Ý×_GÓ×s±uûÂö·â:ý +–:;>n,ˆcU•ñHíN_ôd†ÂûÎÛé«ÎNrèð„X­we÷þÔY¶ +ÎÙmv@µ'Ta4¿ø(€2Œ3pûؼ¸B)@É_]! „"5N¡w<½ÁJ†¹ +{ð|½ØÇÅÜY¿u÷½SsîkzÃ9‰{Í&¨9­SÌžù¡„ŒÍ©¬ ¶£ÃÖš>«Í£îC=½ésM³©œ\lt6Ô]æA1¥ÞŒ³zëMç`x“Nj5,Goúdó<³÷ðZ:{Óeˆ½ "žÖºx4§ÏnS} +»Ç­öîèR‡ÌЉǖ)<›Ôg· ¼À¤ÝŽ÷{—ú4þ Ò¾¬”³K}vUÇD‚$‹sî]곯Ï3®™Ú{—:WDÆUTÁ)p:»Ô皊QÙËbã ¶.u|´¡ùø éeK#Mê‘‚•³=¬M5•a©•Xë©I]~袿e,p|޲®–I‰®ÁkØÂ{ÂwˆDˆ†äMõ¤¹™ƒðôl~7©Ï¶v|t° ÇÖ­>›švÀ¯â–½[]¾á,.TŠ;¸ÀÑϳ[}ö5Ïjãö¶uª§„‚Î~Ûú4š÷´h“Ï®u‹a‚ÝïÆ ³u­C@'÷À–Žà·­ÏiÓTxªi^Û:$lÀ YÛøÞ·~1¿ûÖeq’™ëà +àöþu^DŠÅ5ÛÖ¿N )“ÃþËSû:_‚‘T¾h´Þ÷­+¡sRH%·±¿×¢OÈ`“µ…lmìÐs½͸mmìb—dzf~Ï~vªìâ ¿1¹o©ùiÃx¨‚ݺ­ö~öÛÌÞýìÓ˜N ³æííì÷~9ÛÙ)‘TÂ&›ÞaúÉaoÉ ýŒ$ágÚtbüwŠou¶Ü %È +¯ŠËÙÚlòétkâ:œm·êDø¡ê;Ûn +ëb¢ëlmÈ Ùb‡Ñö‹Å6Ÿ&XÝÄál¡Ž {`ñp÷â:Ûa°'Àu¶ÓŠö °pòîl§ ÄžlÑgY›Ó0EI8«VÏÛZ 7qj´Í)Ú¼­L<×ÅŒ4«¾·6ðƒ). ±Þö²U—·6{ºÔ¬¬XŽ·½6úåm»UN“ÿ0y,kT1Qn©²™¾»å0![!gè +Jíî¶Û¬YHÔ°b·º¸˜–«_lɇÔWÅ ']/J&£¬ díáÍUû4­Ép™¥¦.;tˆVr>hawK%æ°ñÊåoù5²((À´O´&*Ê*#FæºG´Fß"ÉÂòŸþð·SÏÔлço©ZcS$)w;\JTÈJ¬p;\ +¨EË,OžÃå¸]2äR·w(×DB\rf„kúyr¸Î ðËáÊX_ö q¬ïâ®ß<®Î rŸ0<+÷É,üÃ}šu¹òª2ó6 ›Äår)°ø`6OË̽a×­Ò¬1†2ZÇÎ`ºÍ6<\í´‰c…eOÕsµÓ&÷æ¡»ïj™&1aªÃÕNëT¼<ìe[ ™$—¯íÁÓ¹»Øk‹\.v˜,ÐßáNÙ‘£ŠCr<*xq32ü³¦/ñù>ñ­ÑínQ529ÁùÏDDÃÂäàL^Ë$[Ïxê_\Ø{l»ëѢВd•¸‚ÜC z ‡ÍO7È=,€ëeKAî¡eT°Ê#G¿X;M퓃Lè ?¢ÜS,rNV w„»§²£°&ìÁ8uƽ§’ŽJ›®ñqok($šÏ^Ü;ËóFRš¿xaï,µ¯ˆ-sâàïå>ú,‰,ýnB|è!¼\rºñ¡P…ºbÀý ƒs2Â…Óö\aðnÑ#X…a]NG¼kÍ¢D¯¬ƒþ +ƒ›ó§Lk„Âïø'±¨  8Âà]KÔ)¡ž× ˆw‡ >–äå»SÓ’³ÂÝ:œp7%4õ’HÞn Þ§é(2:gÕrÄ›V.†ŸVEÑo:ó}ñV_ñ¦€ˆOÛ¢—‡„Ö#`7êpŒwm`ßSñ†äêbU]¬•u犌wKëÓgY®åŽ + +qͼ;SâCƒ€¸,µ:Þ=8>Þu7$>´z› ZñÉ–ƒ‘Æt76>ÖÇíW&m«›IÈÞŸcãïå6Ò@Qhë¬PèˆÛ©ˆû$®Î°=6Žåf7 ¡Y]òGé¯Ý>‰Ñîq£Ý%ÖÈnH¼iÛ<5E{ï¸Ñ2 7#8BâM2$ØïôâÄÄ›¥)î²cþD:5nœÕz¶‡Â›%Z¤ˆÎ Ö¥¦•š@e.þÆ#ngüÂ(èÿ°G¼»5hRê¾Äçºø·"‡ùXœ 1ÀJ”̲ob˜ÊðVHlsÈ0­’ +WîVe¼A†÷âû¹ŒŠôád2@¢H!pÄ7.^^<KIÂÍŽèWÿæh)'¶M¬Ø!CŽJ&£YšŠ2@BÚŸ`¾{4D~B†Ìô¨¼T(9![å=$xÌö ƒõßÕÙ¡à iÁ +Òëy !)ÿ-†‘“T½vöSåy¾ÅÒ¬x‡ +9®/Á´—2ÏQg¨¡œË7TP´³(£w„ÀÏ(΃ì™ÖÏ¿#ª‚˜[G"L‘ª‰`ª·hnêìªe²v¬"°nK ›2ò YI99“qZïrA„¹ì‹PyajI1$ºš »hîr*—ÿÊnMwµ‚d—„VE¦ar‚±C&j§Ñ… Ñg°€*ya(}"*é^¾‹æø´RTÁ£³}ž!\.R‚)­V0y!„ õ_a•)âÚV+¾¨t­Î³ù!'@€LÕ½‡„•£l!¯*Žy)xP!e†9êZ¨vc…lm«¤ž.Và}Ø‘ ‰ì–ÌqÃHžŸ»råö4:÷‹Ôma¿äè¦Ñ¯“Ò¦år„°êÝØ4å!…aeØ)ÉJê¤0¬uÖ£Þ{H%Øa +‰¶RÒÉÅ$¥B¥ñÂîzy{C6A94 ¢QBçÀ|ÿzS5õØ“ÜT8PÓè0a5ê©mø_ºö`â\'4/Aj9ÈLie£ç ´[Ð<µ@ `HFуÔšu$YÕ1ZËš·yR‰ì»ªGd¾Y£Vâø²{ +$<€5kÕ¦^‘ù5Ož¡K0‘ù¶ô¾¦4œT8%ðµD‚Ó•^ÜÈ|³–BMÞ¼8‘ùfä)P£`O{D曲eñ>½>C‘W•€1#;6ÕvÌ7KÅvU‡Ô‰¬xÿ +ÑW-ê&)ŽÍ#Û"ôbEÄZscZ“ö¡WKÍ)”:ôÔ0¥Á׸"·ø¼¨ |yü'³Ù[œÞ±ªWœ^d$=”Õ1_qzÝ/AvCM -?Çé)!Í!‰œØÙŸ5F£%UI¬áö:ÖÄÁ`ÅÁdo¦ëG}à[}ëµQßZ—Z`Q²ëd«•ˆñB …ïN–”ˆÝõ­6S1I«mþà[«µ¬²óÛêYßZ-›ºÌ£ô|k³ïM\e«»km–ÌÇ®‰F°»V ƒpFE²e—kí<-pgáMôÞ]+C·,;£å¯NÙ%Ì + A…ï[»f2xJ±Fßõ^†êò±2 ’«Ýw|{nñË×V=Cò+ ›z»|m]–º“Ç÷µMç§b!gu]mãÅŠø&ux¹Z| )ÖÁ·ÐS´ãj9?†©DºÍäÌH¡„vÞÃÊééñrµŒ‡Šs‚îU·êLÔãW¡~8^¹Yða9øò‹¼a÷µÃlXb¶[vF™*è‰1 ×ÕŽµ ȺçºÚ±t\VÀwµ‹™ ›?¬ÍÝÕŽ-ä“z®÷éE Ú‚ÃËÕ®‰ÇÕâ EÚ<¬UnkÃæi»•èñûŠ£íë Pož§íÀëjT`ïºçi»ö{òËÏîæÂE¤x!­jÁË×6c>u×מVÖqµÍJðûpRâÎ~¹\m3ˆãZËnªZ|‚dÿa»ïI«Îb¥¿ñãÇ}â}md(“Z÷LÑ÷µ1ZùÄAÿ#?æ†!Í¢"²u¢†.òJè‰CÑM'ÏB&ÉTèh¡Ræ«‚…¹¸ +üÖäD0ÓÙjê¢=‘yWîcµø‰Þʽx Q;f0å*Y +àšÙgL,Ë2~;áMÖ„¾ƒHd¤|‰éö5M÷™k¬ù<˜*n…—‹ˆZ‰K¤0½¡*Ñ ÎÕñ墢„ªR«lc¢Àê^;Èø“â +¼G_U8Ïä?"!¶2 +£µ±gò¹¼ûã„o5ÒŽü‡2ÒôƒglBßgòJý¢#e›MpGd¼Ù%ÿ‘"§k|ePÛÉ( •q‘Ûn1â} ÿ¡€R`Eœ~ìÌxÿP?ŠF†9ÿÎÞ%Y’G]AíáŒ{Âÿgœ½…~ˆqîú  +…_§#£$¤ª¤û†ã˜››‘€P(.â?\㟪Ηæ·‡?,ûÙåy$Ù¸Cч‚:‚©þ­ùC bÎŒ9Ø—±i°À’¦H\ +ýîCüÇNÖÞUŒ6†í&ßâ?°ð„SN×iª0ðè€9¿ý¢ä_ã‡RÛ:ã&à ‹•@ N{®[΂ 8‰Šú7¿ÇáRÂ(gÕ,¿µhADi½_$/x¯|®nûªýÇBî—=”Z/Ú?|°ÌÇ™Ÿié¾&`ì Ñ„\âŽ|Å„e4È‹67—’¿?Lþ»HÿÀÂZWJBŸÅ?Øxp†Ô¾Ò‡ö}­2؇ä,Ï[äõ‹$·oÈpJßJ?t½<}£Š%ŠÑ¡ô ÔFaZÞ¡˜8tÍÿtâB?´ðÝ j¾d|¾…~x#Ì4AÎ+_…~`ÓÝÕp-—A*ôĶ:“´Ú¾u~` ýhOµ»ÅCð‡n…¹;T?“c­Cð‡/  +PçÉ!=÷-øãŽÇƒk«ëªøÃ…ãë³Ì¤°w(þÀð‚÷îšÔþ­øƒ5î2”µ©8Š?°ñ¾!L0S?`áŸ9õª«Š?°ʨ?„~¸YQG°?N1öúq÷´é6 ÓóóRúq׃àg.a÷;˜Ã†G÷;u>@ð ÕÌÂ9³ÊÈW‹?®¿sõóx^®ª_ÌöYo`N£,ÌbÕ;˜«:(a¢Òþ œÓä=0àb%<à\UÃH’2Ä ÍÙU!×a=&$¾Ð\ñŠÖÑÌÚš+±Î¶¤â B4WØ5×oМZ‹¹âo`>Ûý2—,‡WÌ’¬r’,ì~ÄнÁO,‡ î½ïÎ~‚¹7öx£:xlQhw-T ôââ@uøG†`%î+ª£;ZŒóÃ&?PÜ‘»½Z§¦Cœ¨Ž1ÊÏ Ë`/¨.+Êú ÕA” k'ãÞP] ÿ À0è4 ¶ªûÕU¥0šû ÞUR (.mƾa"é é„wUw›0é¨Ýà] È„±ˆNx‡2 ",ÆÏ}šð®9k +8¹_Taáù»èUwÛ¿g0N›MúÍE|c˜cÊý +ïÌ‚§ƒdÁ²\`ä¿ù5öèñs@<œ7x׌r +æ Þ5k»“uÕîæ3a7‡­O§È¼Ð]sU <×%Œÿ€w&‚nÔ&Éuô +ÁðE€E|ƒwU¿2hÈ”ð®ª(d]éà°1ߌ ùäuƒw˜—Ä8až._¤ézÙ –ñ~î0¯Ä™ÞB‹†œx¯Ì´©&ÉÞÃÌ=:‚ŒÌ÷ð•92è_ãøŠ’@††>‡Þðu®Á«ìøŠH/œWœPd¿,Ð{f.@¯({]Ÿú èU•íºÂÍèU!Û„·÷ W ‹%Ô$wñz¡xóÂw-n Šc/tתÒúånXx›xaé"Ý ¯®À׫<ö‚y-ÜeP›_0¯Å^êé3Iä„yMù8ûÇzY¬Ï4Š­¹vÅpM½S˜³y›çò[4ö—Ôªº²-õ6£|ñà¢ÖîÍú»òi…6‹¥ÚÕ¨‘ 7!.*S2€FÖ¥íUœ* ßäц/û<³3¡º:!ì7 mƒÁ¤ I΋p¼2hAI±±8u³ ÐËjËÔ¼FŽaé˯Þ4–i„c1ЙqgM´K$Ìå%åÑ»˜iA){³0Ç׸ªÓÕl;zÿF‰-• +ÿÖ{GÌûûñ¼ePѪϷ™‡N¸;÷ï:lœ2 Œ+9Ç£–‹˜s§Ç:&ôðsòÌ›H5ÛŸ Lû¹ºhIZˆNU•ëÇ?—3ôˆšÀ6Íná0¶âlì¼3ܱ?Õݧn¬d ýç° _Ú|Îü ¦î¿×ôáÄ`‹ÁõZŸ-Ë•µ½‰†Â*×sòiýQÌ·–æH/œ2H…ASÝ€`®Ìž©.NÓ :®¬³@[°K|‹Ly0ˆáÁ€Š¹ÿÈÑKê–¬*jÙÎí)nÝõMí·Ì¡NmV¤ ã4n?®Î~¹¹»Õ^Hv j\ÙÎÈéNSÅFo72nêOÜÅþ&€¡.í0° ¦a^HÌÿ¶ø¥WwõªCy52è¾"¢¡ÞpÏ›½6­y‘e0&~ <×µ‹p%ÌÝÍÙ#n¡…³u³×o¹Üh±î=kdŒÜnvTLŸ!<ˆ¡ŠI†¸k,!Ьí…"Œ}¤kÒ¨„†¤C%NŽÎ?w/†V©.WIýDtìü[׺ʨÆkb¨êð`àÂt¤È†Îg ÃÊtÚˆ¯qu¹?t’¹vµèDíÇêNªî=x<Š˜¿ø-…ì›I°µ´üG¸ *HË;,¬ßÝ«°@ÕØ,Z+á=ÝBIF?"’‹¥Š£yM¯Mà iÖ:ã÷ÞÌÐÔðîÃÔUC§ÈZíOº^´w=%H{ÐAÉ6ÛîÑv‚Zuš÷À6 œ¹¡‚æSª+§}À±9•ÛÊÈŠ1ÁZè“ÉC±mQý;]Ç ºC8«{Q¾åØ Þ=‰Î‡¢Þ7wÌ ‹ü9œ&2QhÁàapÖ{ v÷¬P‚¾Zü ¨ü-Z®*YíWÜz€¦nàÚyÃ?RK°óIM½ÞðÏtéèŠa€ê¥z⟩ö[Ø;ßàÏTW™5ÛþÌpŠYâÿÀŸ¡¾Lûºö²yà ƒ=wø3\ß½á[>Ç»¸*'ØK)NÃ|ŸWÔyÁŸîRêöæk–ÿxÁ€šÆŸsð§Dƒ@æ¼á Í*5‹Ïì€ê^¸ƒMêù„ºkT4ä4zL¥;€P÷ô-,<õú‚»#ši¶ú ½Às¡!yà þ;kJë ¹ýÑ™.s¡èhM ž´úÅ«o 0?ñÏtµù†ïTä<ñºrAÌHHŠ´;šÎÞäY~ö’æ˜Yô:Ë M ¾ßxwH4ø_Hhê×½¹DÛç3$…^hút˜ +@0®ðfjt7Væµcûx^pÏ¿õäéµsWÜs38pˆqhÑF;ù¸ ~ÄÞx‰”ú@]Š´ 7•z@Ýopk7üÓâàJó¾áŸKu¦õÀ?8Õ×îijÕ´ïžR®|àž¦¨íòîiêA1÷ÙD«zàž‹Å÷4‰Ú÷”šÛ§hî…š’˜Ð.šØµp>v|Ñîš“£p<]ª?¾ P“9fõFs剅ºWÂ]w,ÔµR°º/X,7š¤öYôÀBÃG'Ùâë®_`hZ@oo>ÐЊsÂ͇Hç†Ä Åòµ]pÑðÑí¶lÙ­;.2›‰¾.³IÑpâ¢!¥ló:a£ ïb€…ó.¸hJ•Ýþ¨ÅX¥õL¬W¸n½Ë‚/[óƒæ„ùô"®þ›âßvêôycüî£ø§æ34ûu ?~ÿ¶Ó2RfòÖ¯âßòB14y³Ž¿gíoyn)“d«žÆ³ø·¼/oöÿ\‹R#$QO”±Gñoú4%³X]Ù‹Ó)úy£ö'oø,þM§àšÍÊÊÙ>ªÓADÞ+ù¸‰Wù϶ +v—YÔ¬¢ú³ü7[˜ík´>å?ìÚŒ¯á˜ŽŸKùÏöçóá`Ä}–ÿ†z,Òëèö¨þÑ} H$áQüQ÷ÁR½Sº2ÚD6Þ[´ +¿ŠÓc6ª K•GñoÆ"\óƒQŸÅ¿é“Nì!NÏî>‹Ó«ƒxõ©æ»ø‡éÆ“£žÖÈ×yn°ñݫ淜¸‘}ÔÈÏ¥æ·G…}’ÓuN/÷#À8õ²ç•Òµã&k­Aq:k~û_òÏ­æ·½ÀѬ +éYóÛ^ä´4jˆ®Å8ÎMé¸{æwJEð•Ø¡ù6¬è%%°«þiAÙ•Œáû^óÃU@û2›1$òvÖü`m¨G©V¾ûoµ¾˜#’7îÏ¥Ö§¡®™q4³â¬õiŒ‰½´²ÿ\k}…ÃVíQêÛ^´‚/®ªo?J}Û‹cf±¼5çRê[^Eµ•:ºæU?J}Ë©kpµNæ~•úVøüQÖg¼Ñ£Ö'Ý>³±} \tÔú¦‡h30‡zåvM/ Ûªuü†Ü5=Á†§âZßt>ŸYØ£p/õ¨õM‡VtÝê«Ö'ÙÔÌyãJ×E¿åͤĩá·Ï¢ßŠ­ 6šŽ…Ï¢ßr¶ÙÏC¼Š~Ë)ö§sà_E¿åІâáR’}ý¶§èÙÅß/óÜèH×=Ó?—êßvâû9>§Gýoûˆ çÞภ;¥OåàÅ|#šR¾³»(¬#uAéÞqUÂ?_€<|f0J½ëõ?]̘³ßXV¿rô·ŸZòô/`·uʼà¹×á¹íÔD¸í2®xn{?>Þ©Ÿ¨Þx²žéOåÆÌÇvEEÝ5«ß¨ùØqAqËŽæ/ê’„ÝÆ-L‡;Ïš¨ûÀqË‘ Y䣥ž8ny3/¼ÎÈ—¹¼5&‚ä×±n8n»JÂÓ¨¿!qÙKYͤ5\pœ©eÿÉo‡}ŽFY3HYC ž8®$oµ¶E‡1’@‡„„ÝŠªŸO@‡}æ vN—„ÅÐq$B•mÍytÖ¹»ÚN7@‡ÙI˜N¶' +jÈ€%aûo@Ç1¨@Ò'ô6N¤UœHmÉ bDWâl™ŽÛ_Zp?€nrGt"á™ÅtÏÑÏ»à*A9{ :³°­A‹2ù'´+ÂÒ(òí;²ËÞˆ‡Ò¢hs ;Uï>jœMìȺ¢&ð©q¶â©û¨~ð»ÆÙŠƒè +¸*mü³ØiÞØõ©q¶üÏÀ¾ïÒfÓ0à +.Iº1»Ì¢yÝ8åz¯lš –0íõ,l6@ïJ§ðäû]Øl9ªV9Ï{]&å£[Œÿ²w„?H¡¯z–3›¦GÁ¢É臭‰î„ ¨£úŸåLüêï*f“¬¡=§:tâ|–3›:#콬Šé(gÚëÈþ¶WíùÆëjÅ+¡öÒ±2.åÌV\}ÛLJß~8êš­¸€%G÷ Í…û®kbÝBÌëvk†Å³®Ù螸üg–¿:ëšØBHi™¤*~ÞuÍV]Ù,$Òü®kb§²¾h©©Íç,p¶¿·ÍG;*ð™»LCXß•HÜl÷ý^ÊM´?Øßm©8‘žè¹é¸UÌ$½W<ñrÜ%Ø114ŸWQÌ-V,~×<[‰‹×¨N®³æÙrø"ÙŸWͳeד´…™î?ïšgK^§·]!òø»æÙR”®™þy=[òódõ‡’ügѳ%o1‚ú^ ¯y¶ä-ë˜:òôÕ” ÁìÂ-I²Gñs{Yªòú¿!}íÅAîQóÜ>¯:EòçRóT;:oa_jž¿xyªê™ÅTÓåYòį@•Ï F–®âYòÄ“° ‹ôa%OJžô€¸ø;‰1O¸?Œ3¯†œR™ñŠ'`»Ñ¾¸æ;ÚZ‹x: 7ß´3qÌ; °y 6ž¢x:±ùð®Í¢~ΠG¡8 Ã"æ>êœf <îcÝØ]Àî;(¬w‹ÿbþ‰¯j»jOpÔjqq<ÐQ(„s両£î3ÌbôPz #‘íêr5Ý :j.IjÓ%¸žè¨…¯,¥H5 ÐQ“\À 5s+ _k+úF³G¿}•@•·àÈå$¡Jªë‚’^±è…’ªçMhæoP”-7œ·ýðÈ&UÁ¶:*žWÂÒ+ë7ð¨8½¢„.åeýiçÃ¥öèpNªñP»Ê 'UçJPgÑP0UgŒ!8'Ó^€)zj'59þÞN¿á$À"®Ðš’`؃ÿÞš<¦¤´ço˜Ô¼ÚÌm…® Lç¬iäÚ…þõ‹{‰Ò6ð€Csg0©»º«Y4?Ⱦ`2™ë'â;Lê: ØžÝw˜Ôõs'øbJñ“ºÓM )ä²YüÒ…à1v)_0±¿›Fü²hž.´çÖÅqùžîã~®hëjqà¤OÖžŒzÕŸ8©†‡i¥ +£ž8©þ«\Ñ‘d-€¡g»3ÂpvÃ!ÅÖa$BNpTt`²›ó¼£«x!ë{ #dø—”­_è(»”·Y̦±S':J$"0”84Äñ‰ŽÍý…#?µ/0éfq¤¦Qàøžõ˜ñ×ð(‡_Âcj7xTtÂ3dÐ÷ü ~¨**®(V)ú×n¨¨ +}øÿUŸ¾ï64!ôŠêGWú†j ,ƒÿ7‡ipsE<ë,j>sK¼¦~EÈyù.±ãûÿ…”o؃Ej;„ŧ™ø@Ebôc3Îranù×h@ÑãÆî‚sq›z[zןáË_Â"¼®Îó˜ ÌÁsp¹‘ös8õ¢b wis#ÍÂ&xêÉ÷ýsn¤—Ap•Ušê97’¥0Zl;uI¹è˜Ù5j)Úkú17’6<ŦVÇEœš( â„8ý Г}òµBÄ›ôŸºÇ¼‰Nq‘ñÈÆ6ÿÐãôçè™ {ŸV–ÇÜHüÓgpú÷¸È®¡“è`ÑY꜉w†aå¸J÷oÏi‘]ŠX˜ŸYößÃ"ûVÛÀsF$W#|Rä½ëŒHØPáÊV[wq‰çPæ +) ¾4¿Õ1aàZŒ6tPüœÉÄ{>dßÞ1mï¿-±^ÏùXo¶Þ<ò‰e=yYœ:þ "+;.ÕGÎA‘¯ÍñœÙ1Fî¬Í>®U˜âc&ðÈ¡t!É0ªŒ7Íî×È÷·4vã%neŒQ–ì¡)pÒíˆ1Sì™G ïJÿ[g²g ÝŸ¦dz°í“&íc¤nñs+mÛð.ú-~Ž/ âr·¹ËØ<sZSÇÏ‘]â¹b“¨èùŒŸfã0¡¢ |›»lž}ª»F¾ó;zÚçîi€…ƒ¨üˆž#{[70t¹FOø#tâ¦ËD>þ› ùÚÁ¯  Ö-ýPí45}§‚¥¼ÜgДÎ&l\îõ4·ê:f1c²†ô!û>Bå×€“3Bnµ F`ÜálA-¾Nm ¿Cq;…Úô!\ +¯boeÝB$4¸Z“’R¹†È÷Ú{ÆÈŠCacÿ,±ô`léå}•’æâÂdžŠÜ§(I`Y¼ "´í,£¸"¥ø¥¯h‰^o6 +E#Ñ#^–XåV£ŽxÆË"‰YQóÒ†íßãéýÁð.‘¡4>·pY>“$íçñÀ†µ}êGTû8R€1ù$‹"TÅÆºÆÈ‘Z>®ù#Gîéa’{˜&õ…gŒÄbaÅ =Î:qœ1’X¯X@ +þgŒ|;ÌGŒtDáÕiœm5ÓôŒ‘ïíñ ’Øb÷èE·Î˜AêÒ/ôú!&H,rÔ~ ±¿f!ºòŒ¹½î£Ql»o-bdQÊzê3ØÁªQ$ÏàBrÈ\›Øóeø¢G)dÑÁ¦à³_f1[t…%:$¢~ñ[HÀm£,µVwÒ^ØÎê—Ølñ5l+¿¦Ú!Ãñ(–ÄïÈÅ™’ã_ÛV†ù8ÿÔw1Î YàZ.*ÿØÕAÀAÞŸ'ΓùJd+©ÆF uÛ¡Í®l4Fän]ÞU@ºý¯üš{Ö¡ `W±õß2- ϪÛýº=¹î,?’M*Ô¼}“÷'ïijóµ83c.óô?fuÓ>0w$šEÒÀ’¢Ù¢8dÆfíM—÷¾>ÍE© ûØoYKƒ%ÆÇL²4g̯Á©|`JÜÂÓÌ ¶¾§ƒ?›©æËŠy›eñëÝžø}ò{IÑçé¡ÿ4Å÷¼©-" +ÀÕ'Ðæ˜$†=/}y¸ìJGPdã™|nB¿ùò©‘gK(‡ðcã|@œøì«Ë 6 ŽSí8W h‘œ\õébMÃèl!拌mIã`S ¥‚ °U0Ò† Ó½¡¯‚lѾoZPhÏ6“F¯Uýž e½;’c€ã‚EæØ—å PÍ šhc.þ5o4ðçä îÌvĦo!)‡›®bCò;©0rïÂ¡ê —ÄËüÇ$²Âf~›È œ_‘\K³·}Œ3g¥ÙšéþÇT5(eª4ÌîÛ>Èjÿ¾¹Ìj¿8c>Çí"5|5JtófñÓøoÿn^wj5•ïq—炾ê6¸šˆš©‚‡nÝr¤_£úôý—ÇV¼åŠAŒPÇßp:8v>Ö|"VÓr—Õõ†pªß¾®™5A­´§Á1²6ÙúXØUÅ!û6è:lpUq¯ñzM·@ˆi œ+wŒ°õï¡ÒsÃfhÑ=_ÕvôËCxÏ™ð¸5ß=HC‘ÅEFä–í=ÞŽ.äOrÕ)—ҳǹ/„kTFhpõ·U0ƒŠõ¼/¶o°àØv¿ŠPM˜»vµxÄø¿m\™Ž 0Ä΋¨ü¶Y@óFãÊpbæsŽØi$Cû–Ôöá²Àv@+^Z.š)œI8£©üö½äŽRs¡©•Ô¯Êñî ÚëqI÷ªØœ1{£ó*ÔõƒœnÓÌ[ vÌË$Úb‚€1hÒSédí딇{)]½ŠP}œ’æn•̽FõVª 3ÅA0>º–æÄœL…[õ—yÄ\äPãòͤAp^bosJPi¾ÜòŠQÓ ;Ÿ§Ú¦_¾}N×IqØÇ•¦îE»d rS"ÀΘ„S$‚‹PˆrL24GyuvùØ¥»¨»4 Üë_Óøª¡SªL}ÓN¿f‘ÓŒª˜uΙÍM%©ÁJ¼_•”Ц·Ú‹+Mûç¼CqÚð7áݱӽQ Ã4‹°5^ãfëý{ÕPÁâ?§@F«…0ŸRÒšLØK™2æ´ð¶ƒ_>¿nŒÊÂÅÜóŒtZõlïròº½Ô•}iÃY™Eõ¾¸$!|ÿ\öZ)|Õ˜"¦¿l&æHó{:.{µ÷„^d°åb‘2Q”Fã[Ø:Á³’·\i5mþš-éI³ÔŸvÿ™Þ»=[Rg¦7ðtÖ„gÅ–TP¥BáÑákH ñ•°5evÑ\މP¥;­Î^é‰ A˜uÐkç +[Ÿ4ÓÙUºÖFûpÍ ?˜œÑlôSÊ¿pã/^”÷!hç²{U§* ¬al±Ì¡…!Æá/втÓc+š%ÖuÞl<_ekJ 1ÇÛ·ƒ»z«œó¦˜[Föndj¶‡Y”üÀÄ, ¹ðÄ´ÙDã/Ĩ0'¼h¨9ŽzXï8SÐ"ÔJ™$7lˆ–1|9\”-ìKñ?{ÏNü/ßYqäœ(¿üÐÝw^€$s|ɸÁœvZ mŒî”Šnš-¯ü´è8t³½²LM +Á<Ð¥n‰Ë¾@/^Ï ÛÙ0!w†:6¿&[œ¯3ãÝh¢B§‰E\>‚¬r&^ÍÒQp÷ÁWÍÝÄh¤ø³-Wójì•ë6… Ðl¨c©Y¨7Â8Û‰“W¡&.W±½< м“Ï“$_ìk&&×pJõ菉ä\u¶;óo0`å3KBD•xØžJæ´ˆùª ~…Wœ1Ôí¢§EÏYq:½5ñ‰“àA¯íÚDj0a4ròENŸ«C(µ&DZȣsÉYüçZ ë+:SˆA+Ëð‘xB­Û´­« cÅ,º¨ö/‹(Yq1ヮ‹;GÙ©XöŒSoŠä{fîËïð8¤q3²ºÝBMaõæÁ ¬ø¯ÌY”sÌ@~²{¨ÑÜC9gÔÐäºáµ;Ü-¼ï%[ìÑ…1ù”A·–‡òBZåä_—?ðºI,†e_Ø"ª×ÙI©Ä±²ÒBËvíz[þ==›Ú­³ >Ùïà6qðÏáâoçò +{Ì0¿™Ë;¼m6ª/Qˆã¤}àsÛ~@x„#ZpHHi³I`áˆKnësTÁ ï¸ÄÙ¡”æ/Ê?ÂÒ{Úåe +¥t¦013ÆÀa‰C7}„.ìÆ;,qbg8ö3ùÐÐÁÙ¤yH»àˆF>2tùÈÐ•ï° ŸÎ ¼nQ‰&œe Ù“ ­›çá`õøà+*qÚŸO¨A½.ßÂgùùè'¼µúOœåçƒWs¿Ã“O5,šjØò%~›?ÇGWvÏÞ6>Xó¬PŸM:°GÏÎÂCÀ].%ýÃ\8âÇAúðÎeû}¾•/ON¿Cõ6"ɨh3¸‚ö¬å…Ü ¹A+ù7>do¯0ÁvPH±Ä·øÄ(Pʼn_nÛ÷±}ÓÞMúîGÈòKǵµkÈòyÙc~û +ºäwÈ‚»äð'Ma÷Y|ìcg1M4$RE›æ6+‡ ËwÈ¢…ë…ˆÆx‡,zIjmA;_©<ù[|”s.·Ñ´œWîwÛJ½ŽšÿSdù[Éè¦JDp¢kê© §>9÷¡gQΪe­Î¥Y}†Æ„³¨sNÝåÉ%ÚI晕™©0aÎ0æ,…ò&é8)žÀû| ×&ÎpâïBÃ#-ˆã!÷”ÕR‘‰°Ø˜¦ð‹ßCæuC¾RW9Ò,TY‡C6‹QD†`Q*öÔŠDSòdº¤ +„]]74ÚÙIàž€qñ‰†ºÀ?ñã_5™kè®ÏÖ1Ðo uu‘ Láê¡Ïã2¸^é{hÇÀ"+õgÿÿÊ >‹fö:½d¨Ê„î»Ô¤_Ÿ'¡iÃèIä2–|j–JºÝ¹—™ž"XPe;c̃߉Ô(@â¯@!ß*¢›8Mȼ9NfƬYôX¸*=²3ºÊì“9¿6)+…¿–¨u#,Áô™-1å!»Ä¨ŸÁÞý÷›KD ô´Oô¿¨«&)ogôn\¨ñxôe 9ÓPq}Z¸0¿9Ë\¯úªþÐ9¤ÀzôPN%°ü­ }:M¼«tœIjþ(Czñ!QÛà—Þy÷wŠ KëÅUÑt+’Âõe´/†í÷Ut¿úp¶RfC÷îN¸R§}xß"’|ýsÁ€a£¦Äí£Íެ¼ÓÂ6òαï|µUpÜýòÞKBv–oëÄí…$ƒÚ"™Ã,šåC0ºo®Ò=µ:Q‘aZ•Z‡þ=.oñ0nR ¾œpP……ËÌgònï ¦D\Þpõ#cÃÅv¾­“ê­pÕû>¿àOAãŒìÿù?¿ J;ûô€‚I¶7‘úÿІ]f³“š!ÅZ eV‡ ü¼ ;K¼zÑ—_:ùïøhQwúéäÈÀ’ ™¦®“‡³\Ø B Ÿ¯iî,iÈ­À4Î*ñ5‰`z̼>Ûé[­í†}ofÕüÆM³vÜ€9–l$ì!+äg³!ñÏlöÒ™#È;ÀÑì4C k*;€ºÑ<†+ØáP¸p&r'à-Œ9q|L̦·8³Ž*e<;vÁ‚Ù³˜1Q Cø€G~&ßvЂ§ ©~ñò= +½“B€pî‰Ù¯Þ?ü{ãÑuf1œM•~Q:f³YY˜¹x¨tä+–ú# ÿŸÅ¹ðî8Ì¡õrIsÓÜMJ:Q©M1£œÍg3=‰U؉™ÅíG7„$XøèÐCç¤Àæše ÎFJMj™^ a'!¾ÄÄ ß3ï/Ò$F¦’X°áœ–Æ[pãŠx ®«ý{t»®¸Äµë¢~¸E·©÷Ïß…;ëîrÍ¢çåNÖ÷mU.]ž{‚« rgšº|N¡Cg?ZñŸË„•ýIZÚ·ËwöÀÈ "&©1Nê*üûäZ€|Ýl‚(¾ª!NŽ­ÿ~¦€(, ±‘1d­;k×ý•R¯À^XIþ·ºä}›¯‹Â'g1dì²–cj[[ÙaMÌ` =çÁý[+‡[¡IòG´€» +ôw“´›1^Íw²œfT£[x“)¶$•Éì1».-È Yd =lkv{Í$"ª?ƒ­+fQâû‘Žþn¹ ìnÊb×uÌi±áŒNjÑ‘IKoFA¢hî¤ÜGŒÕ²Ê¿Õsÿkk4Ö )@û2´¤Ûž?@¯FÜâXáÅëåþ™@ +–Ö‡ïÎ…X¡†(ÿL6»ÙTçÉØjð}Õ0ÙÏãWëè3k½8×ÁV†1”Ð@JS#}7t[ô;»ò½Eóލ[Ìéê¡Ê“—öâ"CÉv Ã[<ñßâëŒá|)ô=Š áÊ&3$Bð-ûUö­¿è11?ÿü_>3b÷¦œ‚wÎ',Ó‚è׆ꀽѳtl‰ó¡ îÄeµ¥$aUyŸ“ö-œÌP=¬(i}“¯nÿ,.Æó"ÓÏ›¶K™á  Øái,¬*n°ûD“ò-b÷Ur8èÙbf˜1© Ï €æð5mJñ!1í†sH÷0–Ýér=¦”or2¾ÿN´3tá:ÞXžE,àîРvg[}„رob¢ ÖXé¥5ŸÇÐÅ»{iœkNr‡3¦~‚·Ldl™"—´ˆFzð>s™ái8À} ¡¤QºÔyQ\T®€ˆÅ®ç<™gµh»±¯yUÕîÕo¤z€ª­¹â,4$A¶;N^µ{Ÿêk†´;{~þ¼5°‰þÏÿûßbçÿû»>­êÜŠe*¹ð'~ö<$D¯Óªû†Ÿ™¶…ˬ#^ðs-ƒ;i”+îEMÝð3 xr‰-JÛ'î:üÙ6ëEe€'îÑ…Z^¿éžÕÍ;lÑò¶tHÒÕ7þÅË32lÔm– u„üžÜ£ÕAÒËé´‰YŸŽB ~”ÝNkAàcAŵhð3’*žµ’æœ\„ž|â$zlºð2t—ª·}0K…I ùȳ!°ñ§4·kª5!5¿ü*ôxÕ³‡ë³ôCfPZp}WäIñ5m«—h„ ™-ìlѽk¨Â%þ1bµ°ÁI6° l`Ÿ¸˜ö@øÎtEñ5Ëu*-¤•20Nš†þ®‡ƒú(T*Åï&6'ÀÂUêÀ,ؼi#û¤ïqA$ÈôªÁ~¹Ì”¤6¯B(QgŒš#Ñen\Ï$FÛ@¿¿E ˜ŠÉ!¦äÌìšE­Åé§ +?°pm?”ýBÕÏÕölå÷L)KÙWµ5uO‰BËYßãE{Ä2ï ”dÉTçªr~ +1æÑºß€½öD ‰ÔƒáŒ§©ËOÊš˜Ãv.5æ¬:¿‹j¯°p‰$aÄ‚Þ.ð3¤Î3ŪÊÁb¬Ìƒniâ,)7XÌ\Yý!t +v–êÓ_í:?Äe¹n†Æô&¨‚Ib]KØåe&¦ÐJŠ';ä}á6°†kl #L 9Ù‚B:-XœÄ6è)3óœ»SÃ`ÃÁa2UCÌÆâ™ó𴝽cËÀ¯¯òOË-¹gÕ¾Ñn‚o ù†÷8-H)oèºí #äOôÇèØ¬çîÊGlL `\‘%7X³¶ü ³¸ÈØæ*É´™I X¸œWUhá4´ƒv÷ËÔ„6‹À=s`TŽ-ïî]ÙhxÐJ>Þ©Y(ÌØvöóÿÑÅkÐL)dçÑVx÷øä}H›6÷œ’o.JqÐ@ìP4D¨¬þŠ‹ð8è…êy…øfãíhÍZ7ˆßC.c Äï¡â5¼;åñáŽIHA€•8!>,ÈA¢ªóº`ý?â‡Ö·­¤&I¯BZÐþá?îœn'З)½JÀT·‡S®l‹í}é§lQ2ß»©™Zr3Û ¢ˆl]I¤ðïí±>3#}ˆh¡Ýð÷jãè¡ËÂ|aXË:KðòìÁv¢W°ûR}’޳‹Úx³Ä6\—À;€fDa—;,hÿ¼hš´ UÑkŠWÁ—4SnTF6ÛP|ô°YäòÙt‘æþ†¾§1†WB‚,)3ðq¨Ä½2ú%†û,VŸm»Ð“SÇÃ*Î5M eP/¸A•æÀÍùpÈÀ–ÄÝqÖå]Ònˆ¦<<£@{Ÿi#TF0»Í‰f÷TÚ8š¯3ØIàÏ™¾uŽ¥zbò fb!QÐ"Ä’¿¦,p•zÌ¥;ò¯÷`Ϭz8¹íÿ”ÿ„GŠõ$<æz‘kûSùí‡>€õ¶a½ÔKu¨@Ü„Ö0Ù îJO ¾û&QxÉÀ[ú2Jô2)2I^–ezÓD¬Þ9È^nÿF ¯+AN7âÓOœ*|ðU@— ªñGV·ê(Âj«Øü®½¾¢â†ýŸ +¾à X o,…WO(ppÚ|T^©hRb¥‡ã#3ºÇ5aÓm‹ƒR”‰–èvÞ‹Ÿ¡ìe"‰aI'…³áþ´<Ñ‚ í3ù¨dÍÐõ-®f1Sè|œ)^Î5ÂOó¶L‹Ê|ËË|%˜_É >mšuSŽûÌý#,ÂR|Fùjêkص“N1Ÿpþ§'û ‚âƒÎ’9vÎ}%¯´l ¾\×k€‘çeGýoç)ô¸:L>, rë[¦Œ>à$d 6Pã”xÑ>l˜äÿã­A 5ØÕFœ»«srmrL³øôV9÷4£í]l¦o†n­žÚƒpÓû¸yl•÷ô~gdQª:w·ûðÿXNåá°á8ùq|Í_‰½²(¸zïá`ÿ-&OWQ6(ß»–Ú ªâþ×ó÷$X¶LsZ½(’ýçÞ|§çpœ4}~¼PŠi@O þ^ 8³Fýœcz’’Ðä=/3aàŒ6ÔÚCík¤Ð…FöPGtþ¨çýÀ» )˜oZü—¢I×S‰´ð· Ò™<æü8[Íü¶h]WÚK9αE- Û)EˆïÅNB½RXŒÐš\dá"ÎéŽ)Þ‚öxõ¾õ è’ endstream endobj 44 0 obj <>stream +z†nDÿ^:HÌ!¥/;¥ËþÇ'¾|†?£‰ž3Wy +›ü +§,9¹pŠ\˜tž>aÞJp{ó;ôÝ&áê¢Y«@-þ—Á>vtÜîtÜ9Ô}gOÚçYá‹IÕ„¤üjðÃ\H&‘«ïátÂB?¨N`/ZÙ ËNêåHž‚î²XZäÉ¢J‰VP³0'I>î^ùB rz*ÑŠÙäès2siýDü\Ú9e¼§J½ù·KÓêìæ;&ïG3‹^Ey:(&°p:¦„EÁS4¶ +×n-yŽ›¨UÇʵ–óÌ{ûÐèªN!«¹"{ŠÕ§F8ä¡Eï‚õsvÃJ‰Ä;Õ[ªzÅi©kx3Ȳ9íÈí·ŠÂ˜¨q^°P‚íÎæË‚ª +JÅk¶ B/Qu»¨ºqjN˜EJ9 +û ÃÏyº±U*9å¶WüÄñ­CNï @oëx'$.Äy³À Xääzêc`Xhè·tÏ1ô¸Sò} ʬ§F\T:Uøw'¿N÷kÛ™H3JÈhµš"¿bè\,º9^ Tq–w‹17Ö¸L3HjDdÿQF(]7OÁ®°å6͇­=¦Ë]ºÏž‚Ý_vÍÄÖúFÌ^¤²5#Odî4ÕðŒBµç)Œ¢°Ø _L\6…66¡Í˜¤,-Ÿ©«ÖÓ¶àï²{²[Ë%¶¼¶ÍwYðÇV(YœÑ–Øš^rËGb t,e;¡Váí¸l#©T_Âβ¡P ¼±¬ÏÎó«{«ñTÄÍås ñu´ð62;ŒKœ¤3¶íëHþRjïY˜ë²Çaaë ‚v®‰™"_óÒ[÷B˜´Ü“°ð6á;ò}·0jà0ý-B$fé+G†s˜Ñˆ>À¬ǤH6kè0ÙdÈÒ‘*'/µ{ :èZ¬žV²è.¶|¤çM1¯Öû‰} ¯«åÍÑX½ËÕ÷áҼѷ1_ú|%0ð¹U†ÓÖ N·KV€(D‹î]ß(¥½ä/~‹—qÒqiùù nô®_v£›ß¸¼Ô:|v?·ƒTr‹cV½ éuÿ×0öûðøÿþg_(¿×ÙšjÐï£}¶¸ÀÆUoØ%ýïZ,œ²ÂaíüoLÇ_‘æÇ%à 5&‡ÚA`ª2xÎJ­Ék‡yt¶Ç8}‰ëÇâ&Î:è[ðjâ’@œ¥IŽ“Ð„©8¼SPÓBš zŽ„x©ÆŠ±~> ×N̘ +Êt"¿}aRšñ =t›¾'å´¥ñï®&„_©‘|Úv"Y~õÅY 8^…„Þ·È/^Ýu-й¥Ù¦çPfZ`ú2gi‹ªêXj¦nÁ|î$-¿“ê·j';΃ ;(ò ôþñjóõvöÂQO ™òª™h(8àƒâ©–ªjŒAvrrŸþ3t¤Bæ(/eÖ£5Ž+…oÔ‡¸êëýxÒŠüŒÄ3W…ßh.îí´‰Œ›þ¬­îk+Zãü!»S}ar|ñáKŒîæ­q9SJdkð°- +Ÿö[Dƒ‚ï(>àx{ƒ]þð@Mb¹¡ÂôãÛªk[í( |·_‚“èÇ*=º¬¿-ð=Kã˜Çö‘„‚•þÌB9ý‹Eqµ°-.yåó{|æýÄáÀïÖž‰Èa+oYz*$»Š?ó=d‡šÜþ˜ÐÛälŒ[wyc VjN[€{m„ÒSöâjl8ì·/Èf^… ŒÏIí+Ú qt ¨Úœ+‘È·V$ßùôªOBâû´øSàþË5§{H ¶·fºÿÐÆ"6£Kë…\ÃpA* IiQ"´ÈùúC1¤ÈàÊ^È ø¸ž ÕªÄæPH¼äÞB¨ûDU/@Pý0¡œÒË T©‡™³(Ú’¯ VµmÁ“Ië‚ ªP³Õõ† ªh ªDôø¯ðb'ô£§NdP<:xóå† ª3ð=½†,î2ðïé ©}b ú T@Tm€¾”{\µHŒ±cÞæ¸É4›Å I¥ (*‡^pÀ 6=q+†Œ›> +áX¦3±]qÀû€Àk+(qPB¦c}¥/1Z(¸rO7%iâŒB«¢ü‰°E +¦y©pž)xàûÇøS<ÈÿñNQ§Íà,K óDX:Fß— ÅWlÉ€, ü/覸υï¹w«ï¸ïWgw„=æ4Û-î7Qµu„àï3ðYÑ¥`âö¥wXزð@h9jGXÇV÷ÐÚʸ…ß?è¿ üöÇe†DæåÞþC?´twþ—À_µô:j¿¿d—’ê ø_‘êø›6²ù”tü˜Ë;kuü&%нŠ-›Í ÛžØcméªé<@ö¶uº´__)ûÕÞqÈ {kU†¤ë55ÐCØ­ øÅoÒÉ£ªå캢F2Ç Ø÷€G€IõÿC´Ã±õˆÿ]GÝ¿°¾€@—œe¯½–qÏ @ŸP§©ù | QNü8õ÷>€@‹°Õ±~“¨REÆ“$Î€Ææë³%µn<AU¤†ìNŒw}"‚øy!‚×6{! ˜<.÷rrA¯¸ñŠ÷Åõñ€•k¹X<[’s|Í@úÇLP $9÷Eç!4sÌ|Å‹(yxG÷¥Ýœ7[ €™Ë  ©JpSz^€@¼§ ‘ŠK†ÀW£s_5Ê'¨:ºÛoë +šŽÐ}lÊ7<𤫹:\ 悚÷äd2sòØ-¡c;bx )Ò;x¾ð@S~§ƒ±~wn!Ù;¤©ZöÕ™8 +|xüg×°î¤Ï7@PÇQ5Tì>‘AÚCô¼å°@ü<‰ +ý¸æÈ]eþz@ã^`.0BùÌÅz¦Bò'“ØnÐ@…_Xôs.h#y•¡~z‡Eê阭{9Îó!y„#ÿðfñ§þ—È` §BÕ§Ì‹¢éh3D]öm†o¶E9$m\Ë 1²/Y}X¡·°gë ’cÓÆN-5ÜyÉÜÜR‰°`V½%øÂlb³×…ÎZXTûñh*)ì<›ìÓÍÿÍï!4e(Jî¼Ø”‘-³g;–3x1-ºÇIá»Y®²ªŠygözvêrÑpM!ˆŒœ?ä¤KÕ€p8P*åŒ/4nÇü™AΜ OÂ@fQ‹ +š«›ÏÒüWìZ…«×aKlr²DûO¹qÜ~3Ó¾Ñ8ï$–Á­é÷Ü@ìA#\ÕH¼£½D¾v¥¬ÄŠ+¢7¤Šùpq’Æ-5 HŸÞÍNT1VüQÎÙBïÚC5“ƒ„ý!Mð (ܾ|ÄŸ‹!áÆ„¢¯?™á±ÁañFÛ©–JD"H¦áYO ß]3™¯ê² (ꬑéuØ`ò€­usáTˆ#ùv œIìRŒ²æ—‘ #býEåïAQÒ8…ªö¸R7ñ´À¯ã”¤v™øÇ'î?JQâo^6‡o?ˆ +¦Ö0ù¦n øuïgˆ×Uô¾å3|añH…e“k(Bý3Ú ~”ŧë£c£b—д1½b·ÐΗÙFÖ((Jc›duµsµ¢qÊД=îD5Oj(åÁ€íSÜ$þ-ÚДô-ìíÆ°W»ÑD„tá_Ž^ø?ÒÛ”rtË|<ü~‘ÿC'Ž(é¾°¢&ž?oÌ1µ^&ÄLì†èëy¨_":Q·£æE°™þ«ÞnÜe„/ÿ=>ÿmÜ—áHˉ¾ôÃý† ¿üÕL>×Rc†àÈOæ"-Ëi«O´—å¡{½ÑÂ/wYlæ îoØÀa1tß’å7Øð +ذ]ú ~­)ø?pÃvÒšÖ£mó„ ;b+˜½×¸Î˜†ìzãóM{¬Ø+·r +ó[P@'Ò>ÈÜWâYPNº*>.ñ((¬Ï´/¯#˜3ÙcgEL2«¢aß•Y¸5 ò±óÆ,lIêZä™^e„&µáìIÞe„–TϨPçŠÁŽße„ìD‹š’—zVZÔ–mYÅ4½£Š²,Lºòþ³ŒÐ¢T‡†”u‰ñþ51Ïï¬à>+ +ÞèˆqTp keÊЄ¸ÛY>hÐPØü¡Õ¡Ð³|Ð@δ€Âóϧ|€ç,®à“>Ð4ûíñ^§~V št,Ћ³h° z*³ô*«õU+ØqõZªZ_µIýÛÚ·›Vöý»Vðoß|˜<û— î«^µ‚¥Ì)BbúM­`)³hq&E»úY X>y-~Þõÿ²˜ÊK³á7ì”ü*s§+{`ÆScµk±`ªâBX~XÄMÆÔ´³D°üÈk¿³7Ídy”–ʯvÍ44èÁ"¬AùŠ´G ˜› +Щ5e2h̺ БŸ¸íŒªi·Gµ ¡ä pÞ¢´ò¬44,Ü rI’¢yT ^;AÅ\ݽeNRó›_ûBІðuR ¬üs©`þPÇd´t¨‡ˆýAX¦)ëp’ëÒTÔ†!Ξ¼?kKÅ•†R=kHÌ#ߢСL„ëªBŸ5¨«óÝáôΨ¼¶À…G0ì<Öò•G0Ū0‹OŽþ,Lúýxë6õ3XQÁ¬ät­¬dÝg4\ þ{tþ˨·Mê?ê’ã"þÚ8çãy£0*àö+ôËÚ?á…KzÄëˆÿïˆõŒÿ-koCšaÞÂq)hªx5áþ‹ä¶_Q¿¨ÜަÐ{Ô¯MçW´¯~~Å€–ªmzF{&Î[ò[-»]ºüâ¾ Wï}ã +ÂçxX¬3±`_½Ý_3~²‰_Ô +a +á5øâ‰{æ{¨/¢óV º¸1[£Ù\`è–ž±¾E/D,Ó Ð‚° + +h¹°òÈï©À)7Ê –5GÛm¤øúTóŒõÜ7Ä{þèëa³k¦^ÛEfæ×ÿ\"Â+’oO'"î¤`(<-œ‡mëó3ž±§›Ì«`›ßb}ÐÈ1$[¬ß“‹ñ#õB P”$߃/˾D}Æ7ÆkÐ nÄ`zÓ¶gc—žÌ¼:vàžn½-xšvö¯u\¢~‹&šJÝÃkÔÇRTBÿ죈Ì:nÁ£m@U4b÷3ØK_ {¡çïhC¼{¾›ŒöMs&ñRÔ>ôd`kt.ëq~F}l äu8Ï@~˜r~1X({<£¾?vÖºx$V;õõ[ +L¢kÔߟóá+ØouXA¨^ / Á~žÈo‚ý5ÚlVHLžÁ^Ú ÀK%²vg°ß>ó3TžÁ~‹»Q®èc‡;“›‰oÖ¨7f¼JÕg¡%²h¦ÜY*¨Ÿ³Â«BP]ªg—5{U@ÈC-#î‚æ öÜKñúU"h.6g6 =ü¼kÍ'l ݩMK¾&Z^E‚ꃘ8¸:ã<ŠÕ¿ìaYÒœž³HP½« 3©ðäज़bÅ,uV Šê|=ôŽ^U‚¢hc·*»//Ë÷£­E‚Å;;6)E†‰ÆM·àú³H€Eî1,}OžEXŒ[qxTÍí6ÆYÅ./A˜#ºÕ踠2Ònåƒ?ø¿»©Zo¡­Þ©0aù’K1Õó[šÄfÑúP&Q)¿BÊ-¸‰1Õ¤GNÒõ>1ˆÀžÒ†!'DÃߨa‰ªðŒÚÕDf1¢[i¹$éD`‚AE;[bíJ‡G*õB{Ÿ¢¡°q¶“ÅY5œéMÛÙ ø~—xƒâk¨6£°`á¯Üö”K¢µå€ÀWÔ.ªŽ¦¥pg›ɇƒ4ö…=ÒžbóôÝÅ¥¶‹I‰Õ‹×¥dXßPð컸Þ:äж²ó?µ ~mWÉ"6`Ÿ¨©ðó‡EÇ!Å,–K+vq¿† Â÷hÔ"FX¨B§~PÞ6/⤌—Öß~ Wà›Ïx!ALíÈÇ¥§áhuj€‡C¨ƒþþÒÉìð‘yø’ë§wÝFé{»ì©sz'¬Ã`ìÓ£ RþÊ»¿ò!ε._Á÷•åP‰ö’ÆŒXt Äå¹´<å”Þž`åU˜÷‚î‰Ä— ÉeÌÜå6qú`¹Ô¸Ò)lJ›é;¶ð{Î' +)” +ª— ÒÊ’©~Yüâ·¸GLÑvùÄf±o ;\x†8aØ…òˆß ^ ó&½ 5bõ“ñ’9V_àÝÆ®“é^HHÛÄÇ„$H_=+vç¢<µÅ&=d{ø;ѼXu°uÜh› <-n$Àǧæ¸0ºOßãà·’¼—KÙÙkî»–ŽÞ£¹–W®1> FÂ!~©ŒÙÃU98o`H†¯û€ ŒœâëÞ 5 MÿïáPtwîx1îG ÍImFt~wí Šï$žž¢AI%;Ö m±‹ëBPÊ/Hß›κ6ïeŒæCÖl'»Ò"l:߯J3J™ýKºž„)D?Ì‚É*ÐÖå9ÜÎr6 ÁŒ­Qõ=ËÀý¥XW@¬°ÙKOE! dj†Î;©b|¶˜³‹¢o µb!zSÞèãF] úãÊ,ùsQfl™,¶—9»$cÚŒíž3ì^¹Ý:AÆ`€´X}«FçCù0— z8vˆý«ËÁÖÏ’BŸ]`MáS!C¡?Ç-CšyBõÞo@šýÐoòýí8¯5Gsót‹ù<µkƒ³Ë9¥`ïØ;ÙÁ|3Ã`¹”ãn¡‡—B›ÎuŸãÕpÿ¼q2±¿“?­ºoçèï€UKùݵ'X¯H÷³ÁüK{Í–g»4mÀ‹¶§¥êòà,’÷þ2°AŒ6›>¼'ó‘¼=,ZêѨÿ•Æ"Ã"E1þ‘±ó†Fz?ò0øÀN¹¸jáDó.¾ó0 ™ ªáHÎÀ3G6(}À¦l!‘Á”±·E¸4´äÈÇÀ' Ô­iœg>&À×0™­]ò1ü4VnЋo,ŽF9èI‹ºê¥‹ãŸ †Ùà £ö®ïÓ,,€ñ°J1¿ó1|̊سÁ?ÿ\ò1x]ËIQ÷ç•á+ß\{5…ŸW>†K«ò§”晘 òt\ S“ËÄ ×¸½XŒ.‰™ËNy%fhS 3n6ÕïÄ -²_%'õB‰X ,Ðbå+0áïé`yMŽ/Xø‘Ëúò‹?=2´1@I›sÖ¿‘^.&ÞÁ…ÄŸWB†µðõ†ºLDõþ*Öí§wF†ËpCÉ“]Ç?®òôö‘Íyed¸&R;¥iDã\Ó}>ö‡’ž?ÏŒL“b9 Rà¢Gj6>øú‘‘Á `kŽ…GFƒ[ó¨÷5#Ó(ŽQ²ù:¹Ð€k{ØQâçÈÈðk”dy$bðò„¸ÇO¥öHÄðlþzdk~^y>ÄNµUüÐk6HnàU”®šî‘‡¡có}‘¦+v=ò0t[dPÖ‚3Ãõâa¦”(݉.9¨±%—Õâ+»Âý²PÕ^!]ùÊ®Àt Øäýá…}¥WhÁn?8çy¶A ³He]Fm @ÑOr9—ã‚' +û#A)¡…ó²Xý’šù7/=(G^LždÑÎ×/yZtÀl¬¤Æ~æUxoîq¤Sø³X% UìH§ðál„ÝÕ>~.é¾(IÃY¾c¢tT4=!rdS`€)X&ukùÑh‰tædS°ütk†D«<²)°C]¶SU :³)°„B ê+›ÂÀ3À²¿½dDa=*>Pºó‘L¡ £¶Ù„†Å‘L…csf\~^¹ D¶åÌ¥ð×`²´ÊºšÜŽ\ +}»N}ûùý‹ÈœäÔ¦G.…/… h™Ó]jâ[Å_äæþ@wÝ;—Â¥ÀCí‚ðª"Ç™KáZã¡Õ¶ªÄfŽ\ + @UÀbì1fíÈ¥pAûc®8)ýü“KÁGÕ]9xß¹nKUüƒG.T]:áç’K¡Íd6? ™Iß¹îXe´uÃ%’= el^ب„û¬­¦+* +Oë‹ã~Zü Íüm‘jS¹8·;J¢Msß`°†âÏQ¥ÚÂóØ0ù‚—`ÁÆ;³¨Á¥;kT[gs Nƒ5ªM¹tÆÐ-ÞG‘ÊgŽ":¦&W‘j) +mû#åcUªE¥ž†õ\!¡sT©Ö'óÂKÎÐ_Öžß7^šœÝІ· ½ð’UŒÎÜÔ‰¡i¼‡’m°sÜà Á¶`·£† \šLÂbÄX÷\rQØÌ}‡KSÞê]’ö>qÓ L4Fà¶nšŠÀÌ‹¼Ï›& °@ ÷†›â†P’ë7MáhÌüÂM|Õ9 LšOý›¸¤ +æ×¨§öUÚÊžmÊ»êÔ–Gµ'–5•êQžÚúÃ}˜k ©y”§6Ç; âÊYŸÚä ŽrG´èºÊ¯ÿyµ(r"æ¸ß-¶ƒˆ íè;~zÅ®JL=œõ J,hNäß)/1qÑDŠ z…ùW}ÊÖ\ +xM¯úÔòÝytAV<ãX‚ÎÕohEìOÔ²cZá?…ªý‘ò}Ô§–î ˆkµ7¢‚Åðh?RõãW}Êeš±«ßˆ +•鬊A{ïcX!˜;…T´ØöF+HE‹¹'-"óó¨O-JÒ"ëœ÷ªO-Õa#~ú«>µ"˜YÈOpÅ-ÏvÔù©—B•^‹·¹å׊’‹+×®ã’TþÏBÕVœÓ㮸îüÌ‹Ìý]¥ J7t•ôÄíÝ·t¢+žžV°ã¹>z «DUWîô¤Ë?ЕK·cΡ*Ô ]%í`3’æZžèêu*xÁ«8¶^PU +”j® \h;ÜàŒb>»ðmñgôó·œá,UŒeºV¨`“o•)|ÀâXµÝäÄÌ‚Z‚ ßÐ~CÆ{PÍÚ’ý‹*<$Kaî£×Ke +NÞh+InäŦ¹zÏ>˜Â¡°ÔPïññ` +kÆ&\kÌC1…—²J€!é[L$ô$u|.”ᥚmüV²ùA¦Sx}táåR¼ G$Êá)Šúù¶´VOzå”àD³h­i€'AxJë©Í,ñ‘?â`|“+~.üàწ𢳔Çü` 9C¡¶QNëçJ<6rY& ?x…‡wF&¤4–àä ¿¶Å…'ìUØh|É‹'$UÏ ð{ÚÒ±twŽ«eFÏ©‹£‡ÙK#NIß“aáöÚ%ë\±ˆ:&* Ó@ñG=bWÍÕcÜ‚ã]¶²Ùi C¦»Èª†5 +ß…Ó; È{°hìKSY({ƒ“1™Ñ\ßÃUì¡4´w[˜C²€ Íx ñP- þXûÁ¥ú"+°PeÏÌ.ŒüSÎð-!ÔlÚ]è`pè úé7¯â’âi÷®ñð¡ÃvÞ Eeã\¿_ƒ"芠‰æ_ããˆì‘g½œ™z‰G²u–Á‰èÛ+÷¶ÙÕ;­†ñég.vaæH 1úÖæ¹ËÞkå5¼ëÛ¾jLéB½¥e!móÕxÇ:FÏ7餃Å.ÞNK/Á;™:·˜mÿÜ}!QÅ)&ñ#NL¯ÙÚ¬¾Hˆóìχ+þš„G,5 +Ü“¨îwë¯8—®hï¦ÆmáëÉ>T Œ¾ +ÿ¾[g'žh Èx@Ľ%žáL³_¤r¢zÆPß ÞíŒH¤Þ_h;ÃÃaB6-¼#› úéÃá¡ì©>àI¢ûËlúL:.àhˆc4_¶ù™[½xŠ¢Q´[öð>k'§’íE×IÞdò¹V¼ƒŸwSõíV ÿ9Þ. +F`ºÉ°ÀßPÀÓQ?C}Êá¾?;ÙÊ·7‰û* ï6£»%_Éa±üó ðâ~ÆEÖ»÷w¼lj7@MJم爙Lyvu›§ùÌnñc~¶C±{×r²ß”MöÆ`xÉâ ³˜á1m©¥-iOŠìq·Ú³^L¤/Pvt  ¼Í£‘…i’ƒžU‡cn³1tН Ð$ m¢¼ŠïMŒêÒtuó”…§‹aALólAô3">*~ùY•+n>É×`I%(³ÈŠíÞ<Áå¬ËW6 Ž."µš¡úƒ²7¯‹LžŠ‘ÓE|üUö ¯tî>sظê§ZøÓ~ù!p0ͱ¢%õÄiUCÊØe6o8 ƒLÝBÝœœV]â¯e­K‘'AO:@: Ýpš½@¦¹cSÒò…Ó©Pt¨’k{À48XÑyCi]ƒ8“½Nü}¡´Î¢eÝÿ¨Â1°úq6Ï*Šç¥u©V¦Ôu^(­G†ÆÀ³´(­{r©íJëÆvqŸôA/ì5¤pùà +žþ¶47£\‚ ý½-)ÏÙ·…ÃGnEú²õu¯Ñ-ÍŒ½”æ–O2E¦¶Î«ŠÏb,º§‡^¥9i"\5sèU› Qô†IŒJ…œµ¹«s[bX +7ŸµbðÚÅ3ÛÚCœƒcAhõ¿?ªs+©$c»h(ŽÕ¹•$¬%í £¯êÜÊÒî0‡äÅÛwuÎlIWû÷ê·r–çÒ'ÐGÀÀµªŸå¹…Ælsl¡ú,Ï™K8™ Ýà£Nbm £9Ýêtø®4rÏûl •¥Heo$)§uìÌ‚Bìx(ELг`·bƈ=W){? w+©}¿š—>2z¸âè˜ûyWîVR¸1ÿU˵Œþ«_u|bòEƒ ä¥}ì(.»­‘,ॠB»­%Ô4ÝàU¯Û>3ôªÛIìéáÔ|Tå–öòÔûFêùc„ÿ[ªt‘kµÍ½ê¥bøÚäöéÁ.*2WŸVÔ;†tÁ1‚—Ç[~]Ì…2‰ ÕÐ?9ÒÙ³ °b7?8Ò ¾RUf•ßp¤³JõÀéÒSf.×ý¢FÛjG¦`¡Š¡üâHÇ ì FÇú7tåÉÐ5:yb$A¶¹Å‹×ìÇg8á77zA,e¾éö¬-Ù¿Œv~µŸ>¸Ñ ^ ze[&˜?'7zI53&þk‡(OŸ¹F2ûäF¯à1dð0o=eËûë`QËM¸¿‡$HÆø„5-óÙ/ +Ôh -Ày \u{bŠ RòéÚZæË±S:¨·KgW´Ëv ÓòÒYÆ]Ç`Àù â¾<‰ÑÅ‹uZ‘û=‰ÑE¡‹B—îp*¹´ÎÚå£ +øPîyi¨¼z ï ànoú“Ê~ZÔ߀ž0ÊK±§ÊçA¤ñ*Ø£34”š¦~¼{Šø?@ÖM#èOÁžâ&+R~¢Uµ¦ÂÖï{J-íÚ®|è,v–í=ç¿øÐYì æ{¥DÞÃ5ù&ÖšU|9‰ÑY÷˜!qîÁ„$n¿b/ú·…ãBä•Çxð¢“Âí‹DԱü‹tzƒÜ†<у4’ÏÏŽ?:´¤‡aÑ£Þö`C'EÂŒÎ=¿Ù:+^½HÐYSúC~ü¥Ö“?íiÎ}ÎAЧ¾û“û¬AÃVk1èüÉ}.¡»´ÓU£§„êŒ9auž=4zŠ.²/É-bõ¼ä‹^=UpAû…ùL#‚%ÌèœWæ3÷£ hè/?%zªØ£˜ýP'¨áŽ )ü‰žÎsV‡§/~sQ¬J „ýÆâ¿ƒš¿¬XDG\dêýÜj_°áT¦ùûÉi”¦Èohô;A“ªö³ä5Š&+/;>«kù,yP¶[Ê~#7™k£7ß:N?k_eg¬Xƒ®ô¬},¤5‡Æ±ž5°‘4€l]í]á3ÊnsÖÀ:^°gÑb¡üÄY 3 Î3³?«ÂtTÃ~ñ{|}Ûïõö¬††ª>Š`Þ/C}ùºÏ*Øf/l(¾¸>Xða`é¼–ÁBýYýIå€gäÏê×H>)^©Š0qV¿ða þ”u¯~á] å‹wQ³çÍÎê×Hªë®`š=«_¶(œª\+ÈD•nzT¹–yx<sâYQåZÂOðïáfÎr×bO&-–üͣܵœÁÇËK éIJÒ\( á˜-ù¨v-Ÿ¥‡_CæÕ®ÈRn¤ˆ¥ð]íò§å2ñìuò ó¨ví¨PÛ×Kþ¬vá]SK 9±/ú¨vÁäAÔHjðg¹Ë,>ùë£ÌŸH­rs^Ü}—¹à í¾ºN2±ÌåŠæ•Š„mÐïµ-î„%Û!+Ëæ¨mÞ‰Í%á×£´*C®&c=K[o4ñ,eÁ2¯bîô: +ãϰéoáXÓDxœ¸nßü·a‡í˜y‡cM>È"M‹Bâ‰Ëš_ŒžvÇeMs®!ô1Ê —Uöh¢Y:÷u;ˆš«¡HÜTIß½pYUæ`)Ýø‚eÕ§©!V?“r\VbÅÖZÔsà²_ ~j¶k´Ð[;qY½d!gYo¸¬è¼`Wè1™î‰Ë4 +ÑHƒn°,¦ØÚ²ïýFRz¯Ð7>qˆ3ÄS¤wâ3X‹b>~D/ïÏ9«º31^8­HÖß‚êJ7–žÈ&:js†ʉÓʿغ…ÓC¨”¼pZùœPð,d©s]áYѨÃoS/xV•w²ÇÞ<«êWZ¤\oðLJNïZóŠÓª„ø…Œo8-täFNk>Ñ‘ÿu¡'ýâÆôƒŒýÈ èLѶGï:¯<Ñ܈ÒæW…ôþæb%œå°Ö!z{ø"Çê +ë€Ef‰‰y¹¬Nð͉cG»À:œ¿eV̨ÿÀ: ÿ )ÜXL° `‡\`/ŸtùuÇu#ÒoË"Dh¾¸?Ãov¼Ð÷œ¸nhŠ2ÅÐ5ž,&{¤!ÕyÂ9¼/O* {ëûç2åpøÖóïàRçümEóð‰æÔ¦D²Êc>Jœªyóu‡uÅ{6PY6²Ø^bµ'°Ekz»*A{ÈÚD2è‰ðªÆ@¦#÷‹É++Jœ/ˆWÅ®X˜‡v%_€É À5A)àð‹ÿÅþVïr^IÝÙû˜2˜l¢bØÐûqiÚÙ‡ö”œÄ¤@òÏU {Jçj"búUbØ“É[Xô^Ô]zŠaOEì‹ö’\%f¼øÃ^¤fR½vÝŰI)faç›ß‰aoé!Œ™ +^žÒ–ɰµ?¯jØ›˜Ä, €µÛt2˜T—žík‡Þÿ©†m_£#ñCÛ ìøþéü‹‰ÊºTé³u âxˆ`/ “ŽU¥sj`/I‹ èŸ\ILxK.Ü1 þy!1ñMgŠšÛöJ"=žØ3ô íý¶+›‰ë²pM›÷Uñ¡mKzÃ=L>ó":ðÞ ìÁ—à:ל؃¾œ]Š ì!ÍÔšóu6™«˜/©˜ç‹¼$ õf—«Pº˜?Ûj‡ÓC Û…'`Óÿa>:šNß‚E›šòО’å˜Dð-ì%±1[JUÊ¡§öúÌs ìAE [Ç_Ø[jÇØCêyH`o†^üárÑØ‡vND~0(q‰§võ'¨««GëÔÂÎIR>£ +=µ°s"º7 êÿ\ÈL°ÁÈTؘÕ[(”t3ƒÙ£;î[ _C‘¦q~u}«†TòC{I±h@fQç›Sû.RØKòîbn*ËRØ+Ž-hr=µ°ç'„¾‰|ª9ïó0èò¸ü'¸6—«ü1ˆÿ-6Xá¯-ȭ߀ƒÅC;lR½pž~üñÁ…¢õö¿âû¶R +×ø7h°™}‚€à „rÖ@líwŒ°™)åΟ¹^0wuó]¥#˜ +’Øn¹¨q鉲tðûÞ1 Ð’}à¯<{]äˆ`á‚…8LÜ1BÌÿ„ö¸âŸ!'²eðŒz…âÄ[b–æÚœ^yÁ;†Øß)v?0ÂþH? ÁVœÚ·ïÐÀY·\ž{AƒÖ{Aƒ×¶x`ƒ_7çôÂK2gfSIØšs½Dý U€¡‘!>%ŠÛƈbøËB?ÃvÔgäé8»6Ã[j^ ø£/$à42üiNÓ `W%>¥Ú¦èËÈ)pi©[¯” gé„‚`¡`þ„Ü2tÿæã£‡ôX°™£«xšKR9A–0¥Å©9.Õ|KÑð?lÞ'%aÑ‚˜ü@…hX¤ªÙ"øÅï=p˜<Ó{^) H(}®+(Zö%c—;pÚlFná `9Фî4ÀS%D²G*ÓOŒ€W3<½‚}ÁpfÄùpÁ×)pZX rÇpZ +-'4ÈIRÑ£ªÁ÷ ^1á v ]Œ{¿NÉØ‚µ[tɇ4Ø@!çý›1> }Q¥_@Ì@éŽ"þÌÿ¶3jky£fà $Іtц¡_ÉHÆ`ìúR#“‘ÍÞ ˆKHÝ1‰<¦sæ]¿­a¯ +GäÉg¸îœy/öÙ©BâÞÑèsö!WÞªçÊ‘iE'EbžpHnç™ÿí!”ý6¦*Ûtˆõ ENo (,‚ÚÖ•¸gghÙ胗…*RGRÄI¤øQl_å8bõ(€ ›‚j9,€aa>IPÁ ´æø=Q8"·õ®¬ºbJoí1¨5u8 ¶Þ,á„9”È=ÚWV™`¦ÿïv@ä£Évi¹×k4¾ˆŠ{½OÅ9Nîö úÈ bg{æVºÔ n›Ê®}St½ÅÀ窚ϲF("·#•u•©Ój™úïÍ%køàBÈõ[×σþMÆoÅXq[ѮώËûzs:x¥D½€¯ÂŸ¦O{‡·¡fú‘¦Hüaæ]ý*>ÃÛÞ²³žuU¾®70îó6¹(C ‹•ÁÌÔ7›aÐ݉nwL§j"»÷äËÈ),ŒÍ"±ebÒŠ!éZ®MCFç +k˜ÌÍ?^¤—XX á”I{zd™We-Ü$q®¶× ȉåÕƒÙŒxɵÇrÿØi¦“fŽù˜M<[tW­*’`E[@±¿ƒA-m¿¼Û­`žª®éÕ`pè‡_¥ciU4FDPTY"Á°DRs©âX€ï—7G‹­œgUW€ÖåÊÍW´1VNÂ~Jb¯º*Ÿ"ÔˆŒÒ¶^ðÜÌXû+0tÊÝÞ®Ns?™¬Ê†Ù ¸\cÈåvþ,ˆïîuÆp¯#MW;vWògsèä5[0K¥¾Ž®¦¬¡òøQ·:KNo'ŠJ9|—ÅT´ÌúÎpž·=FqOm§°â¾Îmc•´³OÏ¥y†ÆíÀ¬æ7òèªmï|CÉîÏ¢îÏ{ËПBß_†Ô÷Þ|‡T_lbÂ÷RaáÍ{êt|EÔ¬VËÚ󊾠GD-ÑÊÆâÃ?!57›ïöðð +©å_Ÿ©”HZ>j•#!£# ¶3€V•Œ*|d½ÐÊÌ®AHÖô[µï¥(©aïr íãw^q³ºlšÝB)ân=g¦F¶ö9‹xYµ(‹z‰œ¯]ýŠœE4踋c|Ï¥YÈÌË`jßÕ#ÎGÌ\Y’¥öÇÿ¨+yÜ÷^;û •ËÁRèÂaOÞšõ +žE¢¢¶€>³µ²œGk?¼©êmóÃÃ7EÔÜY8P(ëžf%ËéP;pÑ¢iv´h03¹ãî:­›.jÇ•S¶ó ³q·¤—ß#WlGÑîÍ[ðK«"O‹pjñnpP +žÚ’þ¹ï|8V‹—CÂ<TKoÈ©, *M|õ-Øé”«Ë¤x5‹æÓH[ʈ˜M k‘WøKhƒ›Ü†ouHsáÓbÚ~Flè'çFá£Ê‘EÉŒÄ'{g»k£PRû1'!ÏëC:ó*~·9’0È *('PŠr@å°ÂÊ/~ï6ñ¡%T=ÃÛ|…šzëÓ¯{ “Ðܰ –>Uð/‹_ÞÌMy°%Û¥ÞN ndëo,É—ö<3ôˆWá Õ> ™£S …ßÓØœ¾ +‰:‡™`Þ5Þ5›ALØD.¿¼‰0ß¹Ô7ACfÑÓán&…ØñÓY-ÔL÷¢ê¬µùÿsö.É’äH’à ú¾îE’⬳—³í¹@Í.î¿as/¢È«›²*Ý䩚©" ù0W_?^:³‡·„£¦ÉiJÍí\cæÌ–¯ woæ‹“z·t>×±AˆzÛï@T´–H¢| ooT®ÝZpµœôÊ1bÙm9ÐG5ÄDZNûgH»ˆó‡C˜OOã³g|ú1§é¯¿)¶^"!ÀÐy:çÙ[ªgúBÖ½¥6—²¸7ÁÐx)Λ2tœÎ1 \œ¹3Ç›(ô®#íôŽêÖ‚]áaž8¡ͯRHo€–jôcKùvïq¦N^m.˜¦…•$½”é^nañ«ê>ÕŠ­¹%ún¢Yä»’ïjm)¼¨@/Îévß÷Ì.ÙzúA¤ˆÎp€Äm5å–â€ðm7Ìç_Ñß¿±?åMyQL\xSžÚGÁm]@Þz”S@AæZy0 ?áOÄÚv¢<„¸—­ö.ó å!4ù´sð\W}æãº¿¤;n™9¬†rá¦Ï•Øæ Úì#ÇÁ Ô,ØÚàHyzY”ˆ…wжjp®eŒ'¿A›ïºÁÜæêT•Ü@¶ÏÜhÏÑQsm« +Ô£a^C2'z[U‰é§|„Ê7ð¶$Oö Ò–o™8X0H?Tl¿Â8ü'›ÌÂÚA ßPÇvÚAÜŸpÿ›ÿ}êÅÁ‹0!òhàq+ª´XÆ Äá!’rÖb@¹SP1fsU—ÔˆóÊ, ÿ̈ë’ê^裋&“Äu†#ØÅ¢ÞÞP×üà òNÑuÜÞ S–ûèšœ:^L¾£kJ½Õ/€×Y°€ÍÊ‚M;ÀëT¢ÁŠÏCi»ày,zQÞîðúâ z;—/ã%‹»ôv]Õõ žë¬P0¦—uEt®âHàá”f/D7b'öà=ñœ«¦Ó¯¬+žÌÔÂà‰›xn¾Òñâ÷Î$Ÿ»Å¿Á°?„w¥z>ÛžßòŠ“Ú¯„~f+5Ú\vŸWé¡Xn (©Mî¿„'E ¦Aí{¥ZÐ%ˆ á9•Pkt¾me@"©t‰o\ZuÑ*š¢3-Ø¡ +~4£{»-³!²­G›ƒûè«ñÚ@‘$É‘êѱ7û·…œÂ¤…‹mVL,kn…«šÑ‹ fã +•¦¦«6^>X¸\_µÍ#½øAÁ Tö)CÊöæÀ[V½¡/f­®qe6ÔIH5è%AIUEI•x—â­¶gªœŸ_üÞ¸v(†÷ý£×µÂïä{‘ž¾arH:ÓÀNijâ;±ø?â´¹)g”îí¥ÚÔµ{à]˜ZÐ+¡‘™Œê¬ÞÒO,Ì‹¸x)\TÒ ¨“ÔÙñsvZ°vâŸÒAÆŽ“š CÝ|%!óØÒ|ÄîÞ8¥ =È¡…Š„jSíÝ7qͤ«¥öI_¡UIÊFÀ'§uä¶‚*rCJ7$]¾ål`A‰ïVœÃð¤}ƒJÎ0øM†÷eá·aóX‚atÖn$u%”eꀸo•Ko¢;¼žB¬ðºdË8ñ`å}âØ»8:mÐ +‡~²F\CãN…x\¼|u} |É,býLÈk—ð%¤Öl³€b„¿7þ³ 7[Æ¡ßú|ÑMú+w­Yð>)¥“¤ ÊÔPÃ+Í–íËk†¦¢ßŽ‹¯!› ŽžÛ²1Ю3•{ -nh »x¥<ªN|Ô`ÖrSœ´{© Ë£¸ÅøìÞ­¹×Y3DЛÏئðS®ÂŽ +ÛO@9ÿ]'m,ôÆ}|Ÿ>e$*‹³Ieò›Îª†ykû19\1@ñû{¨_×ÛŠæEÔ£oͼêFuf[œÅw«xðíC厡à êÍ»bkÃqSÝ€yùnSRÍ,@Jè@Ø(Ää—/qú[=ÏŒ!Gº1ûò©j£pØ~ ÆõPH(|r`­õä’5Cc䨺l›€š¶Q¢©t;výÅÂFI³QÍü ›£ulA³*žÜ}äíNŒŸJQÒÖ@ˆó¶áŽ£»=®>cØõ´øçˆÿ§H¢û™ÅßD 1œ´a5š+ 1\>À,$ øC¾„õAñ|‰!­vóŠí$¦„Ÿ¡ÏÚë HL%Ú.øÁðˆÔ VîG–~˜NXhkkÊ–÷Gž~ãÜG¤Üf3r´ nðay? ’7,|XŸsÉ 5 a¢á!±ð†VÀƒœŠÇ›ÿ3HßíŸKT¼PÊ—dÎYT3jXñ,N<¡ º¡†)ÝÙZsÿ5Ìø*äu¾€†ßÖAºa†é}¶žç†^-Ú¬ :0ÃðV€Á\=0C'ƒ7GyÔ 3tù³õÂA Eyi;ø¬ý 4tox`&$$[ÆY†™¤0³nJÞVIª½, ø -´ƒ®ÇÏ@ÒŽšSMÛ—¢yÙ4tfY`‘\Òø þ¸2¯q»®î4tµy9VèÂJ8¹ +ˆlXÁ_õãìÔ円SúÚ«îѹr`…á+ôˆú¬ÇþâÂ}|ï1/p ÓÇâ±p§`÷¦ËÉ&0PKžíÔ,oWù”¬°0õ¦Ñ ¯`aJÁá†7%çzºa’ÈõZüŒŒL?²>êwùpÇÚä•m˜ Rï÷„;,<ÝŒ¯%ÖÖmÔý/)þÍD½ú{Ô‰î¯êq³º» šrAê¤)æ=梂á~ÇšÀØæšÒL×#8”'±VzP#lGðšZmyúÌÍyÇF© ¶QœÅå}çfJ¾™¼÷<‚Â)ð§ËìWA_]Š£ñq¯YMH繺ŠÎÉÐÃG æ4`s:22ŸDÂqð6Ž¥'$ør½œÀaѸ… ÙpKÛ›EÇQ¢¼ÝºžÀñeY×AïG¹Àígz¥¤nÄI¼:F³]uÒ÷I¼þÖ^ÚàU»ö¢k:öv¯à|Ù²Ø]¤&ë͆-¶èFºeë±nÑŒÝÞ'·ËÜÖ>Gò°¾Bð<€Ã›±X°MP|ÀqáLy^àØ¬î!¯„|ßï“ø_¼ ›9±=R +¹—ï“8¶‡/,¬[¶Ü·2Øa•øtÞj0½j%¤%˺ÅñÆßx›²³û™œ‹™£å¦÷™‹ou.¬¤Lû™ xðÛÚk¬ãr&ÇFa~Ä6JúŒ6hUƒÍTKÐ~(‡Ó=ôr)¶C¹YfüÁS÷apÜå5ý&žÜŽÚðÌ$›ƒmé¼ÿ=¼ÿ)l¨z<]µ÷t=Â(2Òn¨!ÊoÐ!ÏWÔPå"pò¬ÑÌö…þbü£®¡Ù ûéšB,ïjhJŒf >ô;lˆ¤&¨^Ê6txLh®k·ª¿Y°7›‡¸ ×:aCWþÏbØ“.j|°ðjª]´[Ú¾úH,²Çª l-,ø¶ jÀŒÝ>¨a¨Î¡‘t/ú×(Øg{zBjˆRe®Úº¡èv>î¬NÙ3}o&^Âp^»åïñ^ý‹tú± zh>˜?à =4×GäL°ò:z¨lk"líVô¯À~ñÃÎlQ†6ŸÄúŽªk­\:Î;x¨ªªf4wÞ‹þ x¿>?ßïð!fk^¨¡é[LÊõ–¶ç¾@…ÁnÑ”ì8ò÷5š¶2X‚Õ~C ÕyqzXy;PCU29#?Vî¨õyB)´®¶j¨*÷{ RY:PCqb2,–Ü.5~_PB0 `È7ÔP|èÈ0TÔ`ûbTbÇÖËç6`1©â¼PCqJXô;jÐX#ÂØ‡äêD Eѵüîçsü=È?ý`ñÏaþáCKZ; *twøÐ’:R(pú¥=:a£H#fŠÉÙtŒtS£[bŽf1BD"»ö<¹ŒÍİ(“Këv.c»ºƒÍ‚Üj˜Ò•¯ìñÖÂ{¥CƒÔ”ÂF¿­o’¥F.ûAo®ödtìaɈýׂmêP/w¥°9, ß + ;3ª öÄåÝÙ€uIûÇ^•RŸ›…Ó0W ¦*Ïzc aQ‹SêK'•õ-¨‹ÛLJ”Áf„¬å–‡ÅLA}1E¹©Ýùäaá¾5­Ï$ž4V žß÷ñhœV™Q”äŸö'¦{9uA™3ÿ€¥`©P¢ÊkÌx¬ö4_ròá‘ ‘<š‡z‹íE0 +]øÀ«þiPžÔµ}Y`™«(U08.Ã3K<þ~yi×%ˆâNóIž9ü•8ÀK=‰#Á+ö ¤=ÿ¨aÖ¾RVFÃÕr‘]õ©,†AÖ›0QŒ÷Ž‹MNÿC”%Y€–ôk“Í{tƒ…uGsõ8,qÏðèš$+oXÆõ\ÍcÌ“îÖÏ‹z,ð4¤°!öG"N]žrçÁ­ò*Ž/í²O:ÿ—0-Ø8‘ð:î .€ˆé’Ö/PûÛ_H}F»Éùš…;9T¢ó¥]á/%¬þ³Kì–Y¹[|Ëùâųu+ÐyîgA-å¥jYy{F¯ÄŽþ­ÇÌÝÊ&{%Nå^¢-Ý^4:ÊëT×°a¥nÿº\~B†ÚžhÍOvÚçäx‘Gý žG ‹Þ*º Û4=ºâ@á€ÌL¦„€Ðyïgo¡°Ø5ôoÑ —#cÎÏ,85š@5§ÆZ·½.Ûn‚Ïõ=Ƽ×Wª©©RfϬMÍÝ¿p“†‰AÞ‚Õ…¸iˆFРöΘ 6 G\fð Yœ°I£½äì5кæ!êþE5É lš›t=¦’NSÔ©À•ê˜>`ÓôB¹Y4'"Á¦)jѰù›¦ÄlqÍ:iöŠT&Aä½Ã¦éSäf1Ÿt)~ù}Þì>µ]§bñ‹ýÝ´§®Ûd-¶:¦FÑ´]o³·þêûµÏgû`CI#ž#ä1ò&õð1³äž.0©{ÒVk+–=`R̳J—rÇKÜ·ØiÈDõ7`jQbYnºà%ì0溠V#`á%ì0V‡ø¢[® ÿPÇ&aëùY-3ó +“šT ˆÃ×-Å R‹§ LâGÕ˜jL÷lX€1 á¼B'Lâï¢cʳ†ˆå“ZT§ÍmÔNu‡Iür8Ú‚ÒIŠéLúÍÏw £.ŽZòå;@ÓQ¹á¢.yÒ%ÊË,â3‹’S‹ (±ŠZ +‰õ ßb­ 9í¸hHTÄ"âêé'0"KåsEHãwGÿŒ†÷¸aÁµ{q ~ÀuÛÖÝ„°Áý+4.•¼Ç/ˆ‹ºãÜn7Dö7mœ’жÚ(·Ä’YxŒAo÷ ™û~‹oSe¼õÉ…Hf¾Á¢% JúíqEKþð7ZžÔ¯Y½£¡õŸLQ‘ÉÕk6iÅêÌS-m†&UéñuÊ +½¥ ½âÌ M‘Ù[Ä‹Iüš±ù0¼~M&ÍlæIï`hzþ+°éhùBESr«‰DÕQÑïÙ½ MÉK/äd׆¦{fû5‰t"éÀBØÅ`IY?ä4m6ùÙ°Ð’»a %ºÛ•CMû¬¶-w޶R>$;Z>{‡˜ªÂú¥FŠÅ»qA@q‰§y«¶õÇký`AR­oÇ=Ø`¤µ‡0?‚å;îÁ6%D4_ž$Ò²ãXŒJ ¤Ù.¸§‡È6§Œîyœè”¸üÎ;bY8Ã3²sæÙ¨þÚÖt»|…,6´ô<í}×Ð o‚Vîèù@ÓûTá“gm7ôBÅ4¼2‚£ZÀ—…®Ú²»<놀†xWhNþÒƒ3dUîøg„O 7¾¡þÑ +xáó•~C9¹ÜðºµþyÁÌ þéRÚ¦2Ýþ¿Ç‡wجÁ˜1æsÏ‘‘û²Ï9®Ù!§¯ã{ì* øg:¼bR¸¶;þ a2$~5'|¡)aDø¶\oHhPøÝíH(„ "õä#Z>(Eï,b'ZNQcûf¶>‘Ðò’‚ÙŒ=E;Z"dF :F{wHú }wx_Ϩ7ºûùS6é_±Ëb¢‘½õí|#Ùý›6žèip±ظhaA1ƶ|埒Ù#ÄPt§o’ÙC3Wöèíá» ¨HGæ4þ©´_oÉìQ$×ÖFkªcÚÙ£ˆœ¹æU¾{Ñ ‘ÁIº‰ üÐÐU+®ÛSg³CCÛlXjz,V†Ø5´ÍÂÕ—À ×ÃI}ÍÃbj2êÔж\jÇ0È£þ]C{Q]ÛWŠâ®¡=ŠVtƒò{ˆSCÏ“jm ËU¤ú›†¶½§å¶7UÄ:³kh¬Àýͨ+Ú°!Ý­ÙDïàÞõG ˆ ˜E ý# |@¹¸¶>yP“Õn*£ß”$GÖaÍVÖ‡°?ûcDQ <Úö‡–öéa³[Z€o-m¬9Jý´Ž–Ò_¯c¾ "Õža5 +ZÚ\—Këò¹iiÛ²`)Ò–¢í¯·–öžuP§õ»–ö¨>ð‚@‘T Þµ´Gs>.{z3ÖÖ·”öP-¨nKô€RÚfã²x[ñŽîRÚ£}Öÿ.¥m€,šS¾„W\¾ —¢ô‘.³Æ´¿Ï.¡Ë3„R~KhÿÅ/=Ð<ŠäÈânÚ£ à7[%G»ˆ¶Yø™°AM¹¡CMÛlž|ÑAp|£d¶wm:ž$Ç3=UxŠh› ¸‚ú.šÃ7.p,5"Ió¢I°~WÓ~»Ñ·¬6lBlf“Õ~ï‡SV{Iÿ´þ;ypƒÂ9q­´ñ›ÁocþùwªðüàŸcÝŸÆÐ×¼ÄÐ Àö[ºiñ À$:‹mQï݃hUæÄ‚LVÊø ¢UywÐ(ŠúŸ­*¥’5ËŽ Z¥—Õ>-Žg mÒiÉG^!´I´,H"¶Üch÷.<{&MŸ¿BhPÀì¸æGíJB‘­ÞBh—“A‚\i:`S”]ÑóÛ¶Az3Oufößm|Í…©iãñ¡Ls>ØêXCkÒFRˆï‰ú3óáKD=îAã,ш\ù*klB·úÄè'mádì‹ØûÍtR܇®®Ô1PöÊr_hÿ_s¨\hQƒFˆí7'—±(ú5 ƒó³%nZ °ŽŽ3qSVé RKÙï|Gì“:)'"1.»ªîâ”ÓvÐŒ–ÙÇ¿I¡ÄÝ Š´f‘—ÿ\þ£“%Ò²º#3ÌØLöÜüÒÌ]¦‡2½«+Œ‡{q¨‡Ì_wxˆ-ü÷æ2Al´Ì1ÖÛEJøj,¿q³8&€ý6¬¹á»'÷ü=IÌÇÂù{,S²e…ÈÇ–q5-¹yíÑÖä˱ø|-ˆW‹îãýØÓ›¾ËpØŒ¶Éŵä3ü¶”%÷÷c§ƒ¶|M{?ø€V“’ýŽ-¦µ1|¥tˆ¬Û8pÀk÷û¿óÚ¯…œânj!øÓÑ£´XwìŸciò½±¦ÁÂY6)DP‚"@|in¶R +ËÊ/3ïl—hñRÜuTÀ¼¬#=rŽ. {xñbC…¿½üÓ»HvŽûñâlçåëšÁ‡ q½Z¡ý!Ã,*ÏÙ¢_õVþ¦Ÿ( Bµ +×è±”EÙð>ˆ"hRÇÅvç“Í¢£‰üYS£n«í´ù³x_é&‚Ïw¨nA’ºªmξLîzrGˆ÷O O¡å )Ý+ ‘¨³«¶¬T6+a¶%2ÞÇ 9à %¤ðë=¹_ç7iÒ-Æ´½øûý|c±ýqÕê¦d³Sê0?iÃ!MZ°–e—î¡›Ëõ‡y×F’&™TÄÜ"¹‚N}œ‰Çl8ƒŽŠ½7–©¾m¸j6æÊÅdÑé—ÐaPýGøi4ã9HpÑK<ȨdýŠÅ#䕵¯¾Õ¨kdWéŸ::&9ðŒr§>zÿU²±Ê›XýDŽŽ}¿zWÜÎH}zÉb6šØnå#èÊÞÚ‹ñŽ‚°ÎWÎ#ÈžGã‡BN‚\xqu³!-±aœÖrpuU†%ô`ò*d°2‹§kôUP;¿Éˆç‰‹’_“H»¸è>Þ ˜QbÈ—3,˜²Ï8_ ûo„°ð·b@4_Nú=Ì$gj;\γK;8çû1eFgm&qÒý6.P‡7Xª¸Ÿè³S<…×›jôÙ€QÈ&=~vÉ—°÷W~²f¾Ä£œÙâfQª[T¿…ÖHãÑánª3ú°Kê²X\EN ÀT“o¤©Û‡®\¶4Àl ¦´Ùwªž)ÉlÖ¡—óÂäiŠÛxŽÒþ³³¤/ƒPÚr \¶`ž˜äéžÅu +=˜×Tò˜-ºMù¬;0ÏÐÐÃJÅzYl±‚Óy +Sž¼0°ðÕ<Åw~yý•l½p·y\×PQ/ryÊÌ—ó¿Ç—?%“Zv8ä\ÎP®÷B&g3ˆº)Û¶u1èÊãUšHÄþº°s̘±?¸©xü—c¹ƒˆ’Fj)“Œ£¡âé„ š [¨€8èÞŒ†Ê,-œ·<ãûkä¶»Hã‚àû_¼X«ìè0‚ú6‘¹¼ µ…ÂD=Œ +RÐ>¼Ìþ°¹; Â5×@¸¯!iQkT-jlðh`ÑY½÷x3Ú~áÐXÍÇ›š þÝû7m*uZ Ve¿6QOZPýq˜¸u·ÀÂy¡G(#6ô‰ð>Ólpx1L «LèÒÐ,âÙUš¨ÇçÈàÉQ$~'?¯dY§ †[S?lœÇ]šèÏlD[ãE + è_SÅŸ!rì | Û£ßÈÑ–×~@)D,W@EŽ/K´3(ÛÏ-~yçñ°ݼÑxêd5¿¡~ŬôHnsååqÐ… zx©ù]'ÿà +ÉêåmJuÿ€·gdW:);2C²$瘅Á+?ŸŒ¿ E§Íæùǰ(þÓ÷fS¸¤À´°û\¨rü6Á擽«Øb¹y1|ÀyàP'$ì]˜p`ز„ÓÍ;ÄiIí°¶ñ—?›Ì¶>³)ì·÷ƒÛòƒj8°H”Xžö†âTè*¿ éC³}€ õDµf{¾˜ª¸M2‡ç&­Åˆ[ã–±Eæù'I’²ìIŒLÿŽtþÝŽÇJ@¹÷B²~uÌÖÂÆ¢ ˆ¡üø=8° ‹‡Â fñQðeŠÈÀÛÔmT_Ä]ü¢™º³×¡D½\¯Ù¯‰ÀäÙX³7¾ÃAä?)ë'鮋O\眆öö`|þ¡ka³b4nOX‚ͼLæ¤4×ð†êÊj^ ®hw×{vY\[ùEå }—‚쿯–̇ˆ è¸õÃ`Á¹ðÍ¢F‘i ¾Î¦­VD ·|àþpJ5`D7üꮄa›ÅsÅCíÌÜ5s7>®ôÎ$¹b½ñ1Œ<–ø_žy|yWO‡®Ût«È !ÖÂÇP¬w  B¦D/$§>Ó¤i ¸·s?5z<ì‹O÷å¾je–~ØTµÐcœdRcCÄóÐûàªÓ=µëø‚ç-z)¸ qlŸrÔÞ)Hå.‹üþ·ƒ‹Ç—å­êå-Lb0’Pc`Ø6L~&âw³°Vm\¶#¡”±T/²ì ƒQú£ùŽÉÔ¶ý·§*ì¡ÝaoÌ ŸõŒ/Ð¥n£xÍH|14ö‰2 -(Œlÿ-=—¢ü¿i€€ôëÿð™¹x7Ð[ˆw³€‰Ó_f8¯ÒýH±;ÂwÊQœ¹=ÌaK£W¨ØÜèäëí>j¢KÂéŽí2Ú£…MØ`y–ÛE2{ë°EÍ‹z¦ûq‰æËD œƒ±ÍgýûNé uòÔ™æmGT¼1/Ò7zæŠæápiY¥Ù§ø±ªrÀ½W­Ax"d˜JR>sz20Ø]Baèyºë|/wwææÊŲš«Wïºø‡¿}yÅ)ÿc*áXà–ðˆ«¡ƒÑ·(äŽLœž…dö +Ž¿+î3Œlû7x†—ú(êwóL:“¹ÄUãÍ7 AHÙ-¢s:ð.HµÂ»LsT/qÛ#š¾„PjÁ³¥è‰æÁ,+¤Ê—[, +D ŠÐc¸|1³5ysà +‘0“×1YîFÜÏ™ûÓXîYÞE[þ¿ïìÿýÿ§úÿü4b85¹Ð×ʺͣiCfew«o r >>ì½ÊÜcÆÒbUÉó†¢í×k``$ Å(ÞmiÏ© ãl8<B«]a´¡|õ!)cx€h|îéOxÐ]ƒÀö<ëbVE¥t—¢ ç@À_¤œåVþéÑñ7X7ü€j|à™ ºU:|%LÒâ¥w_' È i’0*±{1Œí#¥h±ϳ*•½˜šÍì/íU“*´Q)8g–":Žð° ¡›Y¦tÿöEÌMNAn6Ô´ Y›ü„ÊììÁUŠ+!?(aEo‚‡ôêgZPXlܼ¤§wÑrWx6ï%¦l †è7}~Ȟш=ÒCÚÎù¯‡;ÊS&2¤i!7‹|O§…ÞÆoHôj×6È8ú}¼åÑ©(E–=nÎÃw¦]\ü5zl ­BÚ»xöwÕÕj_Ýf¹ð9|ìy†6o—Ü ˆf̽ ±R+²%Ô½Ÿšy1zž‘;€®äg˜Ê…+¬]—tH%]®Owd™5Jƒ1š›{ë‚F*¢ĘÌ/ØæîNÚß»f äPû;îzìK‘éÊý½OX²/Ïñ¼ææíl6›bsÞè1­O3°½ÃŽŒŒÃi—|*SiqeHS Zt‘PùNâ¡!:o¿°>,¼ì8žvAú ¼j;9>£ºzF6\ÏXàµpÿ!.Üšmÿ4®Çþò¦[4¶KNƒ1wÃÎøÛ=42³õÝÜFuƒ`Å÷ ·’Úw(ºßÖŸ‹íÅŠ$³;è…ÎC6êÏ^Vt9s­:ÂZÑ«n±8 øç-ñ?ö?z$Þ»S£kð˜Ðÿ› þ5.’Þv÷‹_½ÚT’§ô™¼ê¦í ›,›Çë³h…zû´m°Ï½ÂQºE°P2½b ’ëEÿNä^ê©HOS¯±`¼TÔÕc°£¾w_M)cÂKELgh4 (M4g¤€œŸ…¯Rå&S.‰ŠŠDjEð)ŽäLÚþÍ*êÙš 0å#TðK©uÌ2[¤sÉÑYQý1 c'êtN¢i¿!i.Ùï†`²Š}Ë+¡Õ=ªˆaèB?ƒfãôØMôŠæáó ÕºTHʯÿ×%®Øh™ç#zODÛ‘l4Wƒ‘ZÒøL]ì½=µ©scc’¯W°óXg⯲"À%zKXÒé"ÊTþ³¼Šƒ@àª_CW±Ì·Âoù”bÙ"‡"!¬ÉºRiåSøb×ð…êâT9‰x[ì¾!¼¯Ô6Ë#?Ušç§ºZH)‹ŽUÎ#XT©òtAUº@ Ñ9Ÿ˜öE±Ü#¡èáú!ÍIe픚ÕcÂX—³Mowûß[ƒÏKÙjIEòp•J½ÿqþ´W­{˜¥Gã’z¼Ó£´…­²#zÕÀÔäW“_¡£>0•!3âfBÐÒçÝ’ö}¥R80¢æÌA^|dç\ÔΟþIñ:4œkçß"QoIü©HÚÐW”‚¹/C‰$Z1 ˆì:¢éyèLp—& oÁGŸ‘zªü[ž£œŸ;ƒq +‘ˈ•wй(*m;Sô6‘#`ÖG9 õ ËÛDl‹õ©Ó¾HU`WþœB¹IØô*&©Šè/ßHn1Ò'ð•3 Ð4,f¹d/ü>é —¡ü}(‚…7 @7Åó¶‚°–Û(£\ùÇi3Ù"0°=ñP–³†bê z*¬týz1Òb¡»°yïÂ_Êo p‡o[EIîDõP{…2à“4ÊêýNLñ‘x7ƒùEe@ lŠU€¾k=¶ÅFXÀõ~¡½ã*Xü9¥Fß‹gö ¹¨«Ú¬ (x^êU àŠ¾"û¬ÁÚ“ÅÚ³|U£SÙõ’šf‹®´y|'6Ž}Mߺۂ¸'÷FÖ}0_÷Æ5$¦püä7« ÖÐPÿæ®þò½âK'÷Ï´­ó"ÛsC+pŠN—†Üº +S¾C&’íH}‚·ã>P»ð`±¬øŽYåO JL0`áwÃÜ*n°HróžtgÂ!?Ü¿W¨1j ~‚åk‘ýšh4×{˜¹ròÍ Ø•Š +Šeêê=}E`>:ñoÁï2©ŽTEKYHјAûÀÌ­Y  « -}qÀù¶áúö(r‹ŽÑ–)¡§g¬vÆ …˜3ö3¢Ñ¦5äÁ¿iåÙ".A><ø¹§2È[ìï,'y¸zBUg þ]ºvsÅóü=£nx;éü‡úR!å æÚ k'y•9` ÞN…×+÷}e6lºÃÄíLfùaP}Þÿ@®ÞÑÿ¿¼º¯4ÿJOéˆþ“`Z<ϺEÿÉAX€œöýý>#©…ë‘®0`0µÎ§µ¢Õ*ùÝ”êøË@/ÃaÐm€ÀógxçùÓ"¸‚®i€ x! èqù ³hêÑ„ÂÞO@ F2}”±?€˜]:Á‘ùÌKñ€ +¯~y.ÃÅ~Ÿ#J¼Â|c‡cQºDy8ó«ÆˆÇ±á~rAãþ«ž…EÃZ/Äã°ð¦ó–ÿ†—ðïüpøŽÈ®ßÂS«~S3ð+ü76Hä{kÊþý6ÓÁ-¹œoῳd@4ßDs„ÿþÉö¿¢~Њ°¶ïõSCdQ{òºEý¡aïÄ=¢þkDÔ=t‘<è# Ó"žïΩ“³“#fŽ ßÙÂÑ"ûË?ÙAb5T¾‚¾?vŸ iè¡Ï— ßÛ1ku ú-NŽ ›èý}±ºx)Ê}Ý¢ÿ ºEô¯KPתïðï—ÇR"*r‰¨,ТD"uNGéÈjþ€ûãšÏOÿ±ÿ Ê­3R^ïü7müøb@~Ü‘Àˆåøft 0å©ì¥åô LwlÇ95ù ÌØÛ¶ÆbœzG ç{4ÞHÀùÍa’†F•$°È"5í­Ú#¸%òÃ$#ÄæS.HÀîc6FDÄÒÞ Ú¢=Ö[B žª`h(_Ò‡®‘šTŒvH‹ï  7$À}@Ã…ûd9¤$X(‹u<ÌÑß Á4-§_ˆÀ¥7ðÀŸ]SgŠ`‘ 6hå¹!‚õ[~|÷5h¹D0uêÆ¥ +×/h05?%%´¸b÷$Ë¿Z†h0t€~ÖÈà‚^ÈàµË^ÈÀ5‹h1æ%‰à÷9"É+ðwV;žoÝ8Œ õtV¼ „NÝD˜Xàí7„Ð㑌²D€r „®á¯ŠòDð’ì3’)´*^À`PÏÁÐé^È`DJË"ø*ßÀÓðaYèTê@3¢_O þŸ LpCHïì¦À6Pè'ïa² ­˜vØ ÂbŸ,žþÑæ8 Š•j¯*ÈÁ³/a˜šJ¿0Âd™Ž;¤ëpp9À8Æ颸 Œ0©ÒÎò|a­ÄãÕñú…Fä.[y†ð_E·Ý B§H+Wóúg‚ +=*…zM¼ dÐ…]°~È ôæbr½ƒ®‘½x® è+¬wÈÀGãqÍ|üü[ØþC8ÐÒpn¶÷+GµÓÁ†qj’+Tus5¡¯ê,JÆÈa3°¢¾5߆Ä9Fí\<í j +!2›×SLÂ[€ˆ.R”h {4î=)£;‰W±]c5GwÓðî7Ì…Ás¼°h,¼¯”2ìd©(¿LÚŒê44UEÅ„Î9{Ú-³Üj½Nµ¯n•Wߤ‰‚ Ã.Þ3²ÇT~} ³AsB-®"%QüIC–@SÔdeƒnï=U|Ã$AEÿtº:Ø)p‘´¤Áå,Ll¾l¼~,ZÒPö†/ø Ñ\fÚ:ƒ”™½›ÖŸÖâ<-húÄì²5ÇÃóµxZÝe¡pBg›nÅè¸ý<ð–‚y¥rౌÉf\Ø<f·‡w¾ÓŠ­ _dèžâË´¢_Ä¢ßIâ3â›âÒvf²âeþÔç;¸RƒÆÜG†?–À"ÿæÃP’ËÛkÐBÖ~]öÌ!¨çkœü°i9²‘ŽeÑ÷ë?“H´hÊ9>Þ—ö`ÀÄ-ÀW4á¿ÃoìUfþžQ’› [M‰íižt>zþžfá+Ä|\ˆ +äÍL»›MBòÁl¦·µ´°u‹1¤`½«iÑïÛ_¯ q_¶´×R ¢gÏMP)Å’E3–#‰hB ®öæ‡Þ 2h;ÕñØMÇ ,–/úìÁ,Ëö¾ŠHƒf€—¨n¤ä¤Áb¼M…n+žQFŠà—÷“³žEíWiÌ«!‘#4¯N¢ŽŽ_Zh¨ª{ÒKqõÙøÃ!"©á,÷IùøÒ®xB{u‚óÎWTc)Xi¦´PŠN@·iܬöæGd@üÀa¨ùœôåUH›æ®oã ÀÓ´mͧY‚hq§1ä;itåÇyÚ8Hˆhîœ7˜ºB#„  JEd‡ûò°w#¢^²…¹D{¸/<†ƒŸà‘ã¬"zÕ|ùcÄK®u4¯ ò·8Æ!¼§ ÁKø¸¢F€Ž¾„‘^ ”Ü ´8PÝH}ÃOÿͶåK{ÛÐ âùÁ?Çú?Å%\·íÈyÜb¼D¯Ù”*bºCàX°nÐU”l5<êzÞ ƒ‚!T,;ít(œÆUžt‡ä™Á}Šx».ÐU3_ûö¯ÐK Æü•H耖s,l°=µt‡ä-´=‰Žñ»°ð+Åå*ò›åpLÂð18' þÖê¼!†FC#ñÛdŸcÏwÄP)@G•–ÝÛVj°¾qB¿|Bÿù‚ …4ÔxIy¨Ÿ÷€ …®kH-ãÀ %bfí¥·;N Ë!ÚR:` ¾`Âk[0áê^0!Gd‚*×¼Áÿ&@óŒ×&€DÛÁ"hño  ä-«_Z<ñrôs +†ï(­¬ƒç£J¨d×Ä+^¹_ZÚh<ð†L)$“¤TƒÞQjä˜-n‰Å£—ô¸¢„¦8PcDð…(äUaQžyC š‘ØÍ=.ñB Ý3z©–%tÔéó†Éøª&$›÷ CëØ©˜Ÿ¼Ð©€ óÓý†ºÖ„ÝÆ{‡/xýÒxÒ¶…³’˜^èžÅO¨š¯?ðB#ÍžkžJÝlxá/;_˜xëêD:ðBüáÒ/´OˆÙ`‚¯ÜåAùÎtƒ ž,âš{fºÁÂLpCÖ;L¨ÁJu… UkÈ^V©—9 Zx,ÍÓËĘ€¤Âí<|Êð…ŠvÂåƒçraGãD!4µKÄß´aZ˜ò”öè^yÈžœd,_¥‡ Ft®dÒ—ýú*=äêgpÎ$õ'쥇ì4/u‡šnˆ¹zb^+Æ"ŽÒCn~ÂÄs쥇Ü8½‹’tÌ8JìbÄ5jÏù’Ãóûð l6íQ[Ñ^z TƒR¿.¥VühQÒºô"úmØD€^’J{é¡yj½Fs+=€ égL¢È•‡ì &ó#ƒ¼Uróx§6Bd-ù^@A¨N—Òƒ¿{‹¹øÝËßgåÁ èäÀ¨œ5—½Wrûƒ›áÞ”ð^bgå!—¸Ù½~½+Ø Ÿyð‹ý.=ü×7_m‰JÊYzà6«Ü ·²?‡—ÂçëÞš˜ æ]MÈ Åq ’{éÖª`œ2[h(¬—®Æÿòò¹¢Ežƒ‘³à‹óIì³ <®ñ¨¨pv$àËÂaãËVé\í…‡œý< !úß"âß…‡ ¶Hj×§–/ ¹Ë·F„\ü(2R ˆ¢9½2ÐBî(&À÷CF¡zrM–ÐöÜk f1PÀD÷UPL5®ý¡µß¾Úpù’ù«äª_•‡1ì…¨~¼ü“Pà‰xîöö¢ öBZŸæC<ÊŠM†“DL¶m͇¹Fï#õ'ú¾Š XºeµâCÕï"—/‘¥±ðîC0CD\:³«e}/2`ý=™ë<ùóWµ`h¬{BVªÌlZo·~DXàt‹`GÙë°H`â,`P½ªgóg¬‡ëûR˜à³ò` ¶í ᅦì?…Mµq(ÜŒ+Y,’ 0¼bƒû¬ôžr4e%Žø?ü𺷾Âÿp¼Ð Tú=ü#…€R½Eá%“#þwOØ,Ðï†ìÿ{Ü¿ú¸Œ$ø‚®"lÖÁ°Ñ¨B+¶ÖŠºù_X FȰý¬áÓ TÏâ†ñŽ^€ë‚Tœpk7>-o˜x½Ìü{ØþÓB¤.XÚ.ª53ÿ^fͧº¤B‹ÔÊ“ªÆ¿ŽJBS½SFIÞà¬$ ÆÔt)¯•„¦Â;ZŽþó­’ÐToD°ÌjW:+ ]NøU@èJŽ¿ê]¹âоf?q¼êC$ÌAäﺴ +™™D“•t>÷ºÁP¹2òGcà ©«µ.åúŽÂpÐnÍG‚ +Gaxx²oò˜_×åÇŸ±gbÁI‘˜»\1ß´—:Éñ|æ#©êW-¡©¢ +^‹um9@ÌöB–_—ZBSbÝ–TŒáŸ¥„æGb¬Ë˜s?j ¯ŠÐ«–ðÚ!—ZÂ+…ùª% ½úáUf½·ÔhŸ¿ÎUTÝK@ÌÖ‚xù2ÏdžOÇî‹Åò2Ø)ƒ â(&¼"Ç«˜ŠTãìÕ÷{ËA'…-R´aœÅJ|Ï`ë<¸ÕºÊYæâZòbƒ×ØÄ‘§¯ÃQ.E…¡¬qóʵõ`ø‰u"Cv-*LÒ‡OPKyû0ÿ#Š”£”0ý ;¡x«ÞQJ¡[¦fa~]K ÓüŸ3–£äŠ·Rdw/’§úŽRÂ<—Ä¥”0ɶ†ú u<¥\;†ªâö‹ª¯Žƒá‰ÆÉ‘¦ka¨0Xk‹ÚíQAŠ1ȼ +æ¿:z|pŇ½”УRÑcØù¨$ôBºŠø8Çe%ÏöBõ2ì¦Ñ¼ºb)ÞPp·„¶¯ÓK Åò7ü\-þ-®ÿ!^Ókù$Ì_5Ri“H£L¦°_/J6X€€¡€:²Gˆ©ºüòXhÓIvqrüòL÷¥…àbKkeñO‰xŸ„WZÂ<¯s: +R–'qP‡k\Øfºx¼Åð\ùÓPÙÑ=ºî ~´ôDψ\ç¦u‹±ŸôÏ8‹Ê…û´ó;1”92ï€v‡SLœÃ,ÌñWôtÌrC-fàÏ +ÿ/¿ þË»°¦ŽŸãƒr3¤=HvË‹°­Íîò8Û &¢È;kAlÊ"¹EÊ:”:yþجûh£r–TËÜøŸø{‘µ¢2™$ïŠCÆÌ¹>4¬)<´%ÍêB4y¸àð-\ŠÔŠSÉaʇï-f€êø¥:_\¦¦Ê˜Þ6ÿ®lmá´´ËìDqÍ ØÁ™Ãõ©/iØ_K{×JãóX X«erP4¹#a§û°¬:8ÒÕŠ.}rd0–=÷rogX$)\Dˆ]]zÈöôìºÏ¿ƒ}ú‚9ßšÙ´>€E—öNeÖ +jrÓÆ‚E]Tê+<˜«(º¦`aó$ô³Â`¼Š¢›F¥•ÖùMx¸HJ¨¬)Êõ„›œž{ÀÎq8!¾S®bû±ILÓ…RIWŸê1¿uÜ,äÕGÐáŒæ‘j#D¢¦+,PE‡ä*iáU˜¨cXzÐ BÐ:ÖÔ¢œñtµ{–å!¯>ý·otT¥±Ñ“'ôD`mÛ`ùF?°è¡,í·A–#“‡~Ì{!ÝÐü.,ÔC†êWô°äµÌ8]÷eá׌K£'÷7ø}ö­™ó_1Ðb«¹.ùÝ[™ Kh æê¢»Ýs1fá‹“e¡S½åbÌÂñÒ`Ñ‘‹™Kþ£ç4æm d=àÿ·ýÖÁG- è-cБÏ·\ŒÙ@ ÔlÌÓ íI™•¼¼?p¸¿€À }ðÌž“Yɯ8 åR…3Ç-³ò\S2¶Áñ´§bìo ­Á<‚¿KÅàê8[™E›·XðÔw?J©˜¿xŸÂ ˆ¡‹ÇôžŠ±‡Ç&1º,¶T ž.ÆzðéìAŸ¹§bÌÆ›‘Î ^0ò8xÁIÔ—{ mïXH½ÝS0fÄ–ã#Œ³§`°¤OmIÇ}öÌ{c¼S0°¡gë ƒ>ØR0°`¨2‹ÐÁÝ20s‘ ãiw2dt{÷7<6<ÇI ºuë÷4‹ú™Ù/øíûÐ:(ŸäÌ7 3 °ëÃÂ’ Û–xRÒ ¾\Kɨ#ñ‚•Óñ´lå$µrm™—¥áû±Ýyl•yYj‚ÇÚ®÷Ä ÷PÕ’ +ô¾n³O™AŽrî–w1?¶ÖS¹|¬,@Øìy¨ásÏÀ,tXèAi1bõYÅ'ÉÍ"Ïtoæ4VFû¶óÊRW šTö nÃ%ÑÀsÏÀ,9>ð:[ºe`Ì¢ûUZ°oí™qÅKô¶‡U›:1\·¹¾uíåü×hþ§(¡{§>†˜½Ýí‚T؄͜QªþÎÀÀ‚‘rmbžÙ1Xªy¬ƒg´ÔîÑ"=k&Í; Î ˜¦ •zu4{ºe`fór‚YŒ,U¶3ÆßŸlÇŸî÷Ù30SZÒ#+ªÁßðD3°Ã£iôãÌÀL•$)5£Žf`fe§ +>(U$ +{fVîaѦpÌ–ñËsìpà¡«d½g`À6Mà€9¾PÞR0³èôa€f©s|KÁà>¯‰œ3 œªŽù’ƒ¿|s1â­8s0ø*{šòÌÁLuB¾NuÔn9ü`F4[ˆÈïÌÁ̪h1Àúìñ„9¾tø;{éŸX´å`@æìË#Ôª9˜÷=“0NËŽŸ©»PöúÎÆL/¬c7 o?~gcÀ ÿʵlÙX`bÀ®ÒË-3»·]˜AûtÙp.ç~A ÅGæÛVÓ|æ —€s™O«#Móþ‰¼Úì„ö4Ì$P˜´XêŽÛÓ0°`¶Òþ`•àTßÓ0ø¶LñH/öö- ƒÊØ=BØòLÃÌHð¹6ʯ[oÎ÷Sòƒ3 ƒ—O´?Àèª*Ò–…'?ŠrÔŸêfÂqµìë¯6õWìY¬PÿŽUú†g„è(:˜Eëùž…¯zå +µÿÔhÚž…Á^Iî säe÷,̬ÊŽÖŸ8ùYØ0.˜Ý²0³ +îCL[~ÏÂÀ‚I¸ù.e{Ž,ÌTç8~Ï”ÊÙž…™-"\­Nšsfa¦Z×XüÕ¾³0Bð÷“[ ¿žý¢»ÈÞé1"û…™‘Å9„ZÎl vka4Aš³÷lŒ3¨ã. ]ð¸¶gc°È‰¹ðPUôе…£c¼_~ÏÆ`ùaªÌââÛÒ1ÓàêKdRït lPPCî–ŽÁv&@î‘zA‰!¿ƒ~SÚðt²Â[I Š{X»Xü34úSÈUå°Ð©”.S?» ŸÂè¿§~vÈ¥%X¬[Öjj@ =Ìó¸ŠJDp‚×à*±»&n€«(]rÁYÈñw®¼n…®‰F@GàÚ ŠÚaVŠ7“U +{Á,µC䣥õ³2¼É÷~Á¬ìujû/µ^ê\~õ8áà*©Ö‡1̪ݸJroæbªø¼^àJL)©Ý|+pÁ‚Ne¢ƒ|]ÀUò|Üf)=ôW)2˜åC +v€+Äi÷›oà*ýgéw¾0•=é4¿ TV^Ø^l®å¥(FŽõ=Å{R…MÀ\|Eì”=ÁäƸÁ JUŸ²Á^+?A©zΨ¼ Tõv3`Æœ=;–ª {M‰K½‚Ù 2©}h@âtÞj_8ßøsCóá˜9L8BÕ T5%«_XªEð –jNf½çr“4ñ¸Î0Ó Aå–BüK:i¢ú…¥j `h.¶˜Ò 3ÐþԔɦJàüφ¥ŠÒ8ù(it`©ßqݰT9{Ÿ/XJ,'`Ü nñKeŸE¶UnhàŠ¥²êñR2ç…¥\´6©÷–}<ºzl7­;–‚# šÒ.w,ùÀ+„ŠÄ©gÚ Bo–± +§þ†Pz-3Ó/ø´w ¨¢ û œÔt‹CpÕDá 9UçFÂaºˆÐö@NõM:q §ªÇ;š”#§º|!§æBØÖ¥‡Ú߆œÈS¡ÝvGNM¥<̵ª×gGN/ðÿ‚¯ì9Õð©æñû5U³YTîÿŒpþ9õâì(û÷vmwú›6¬÷™ Ê‹¿Þ%-³`{4Ô]±ì,i™‹fѺŠQgI«'¨sBz¶žö’–Y8 †ù¬QoíÅ]5dE 6ž%­¬Oè‘)·>ãŒNƒ"·šVÏžAêw¬ß‹[Ý «¤ßµ-h¯ƒÁØþ½ÞΨdRs£ŸCÜ^â‚=ךû¡l%®.h˜7øõ.qAiž<*…b¿nÝÆfã]Íwü^âêY´®µùëUâÂÓÞÓ*ï—ÙTT;Õ(ÌÚk]xó“k°‚€ò×»Ö…ÆvNÛÏà ËkË´Ôs –:{K ã^èzo—w¡««d6½jV`/tÁâá÷è½÷o‰YTŒ.™Åpiô7(1V‰qyn6|hðxhù¹ÕÂÌB¿§>å^ñ‚ û¼ËùÉ7Pë‚Ó“}ºËVð‚E¾7cù°½Û.ÙÒ¥Ã+ýæFFò'Î:v[Ì ÞW¤0º:áÄÞ,¿WºzgPfƒá¯W¥Ë ¼}"«ÝÛ€ÎJD©1  ?EÞ³Wº Ò~f|÷JW‚ ÈñjÄà¬tA› õyõ¿.ý…»ÏJ—Yø’†|ËYéêEÃh}NÁÍø]éÂCá(@bºÑ–๲q½u%`Ç^êêðæù#;¿—¼º +ã Óž%/ø0<Yß%/¬ ŒO¨åå} !©çJî.YwÖ¾Þ!ã]û¢£Ã´“UùTl¾k_]Mf!׳ö µe|f 8a6ìׂ¸ðsAô„¾3t.˜äߣþ¢‰²þC{¼¢ç˜]6wmÓ~x’{ôÂC,G ÒæÌ5»¼÷CUYÞ6±ØÅ±ŽJ2U¶«ð˜ÊÒK]5¤éY¾åEmQ(b"Vʤû¡ªÌ3ß1b­`ôš÷™ž;ÄY~”¡öA?;޵̫°‰”cõ#æ2%gm›Ábxnm®`¤A<ƒ5?ï34h`ñ/ÈÛ³Ï-[D:Á,üÉ.´(ˆ=ÉŸ,¦}&-Ì `N±IܬM™  ÍœuŸ¤ºž>ªÐ»·e¯‰º$Ïsw)µFé´ðˆdn8GbåqçDÃË› ‹­÷ªŠþ~ª*=F×±g¦o§ :—Œ¦4ª? u,R•«jpz8\5Š2DvŠ —ÎE’1ÅØ¢Û4œšXï™(¦ }V·h˜œœÑrs7[ðëehjˆdø‚’†‰y«„=_¦·³¡^ãR—5~ýÚžµÈ|ž€QÊïã¯6¹ú";÷@Ù7|1\E R¶ëÊGcŒ2Š9{¼ÄžáHb—~Í'R/»£ŽMÑn,¥’Ô9(ms¯fÁòÕ‹åÂ"ÙÁËž +0ö/'îÐq4DšJ 0CÞ”7ÁÊ(Áƒò;×êN¢ð>s|&¶«„ç[¸G¯Óžcйd u?ò#X¸‹?’s`ûöM7 ÿ5ŽaÖo Ëã*StbËNŸ±ï.‹6äiÔËø=wîï¾Æ‰o›U/1ÄÃ,¾ÈBbŸ|–§Ëé\—£IM(ó|€¾ÓîÐlŠ:äwO$D1Z8ßì‡ZRÊ£øœýátÈðáEšÏ(žNPŽ-¾ßý-aÞ «”+uìÑKB ƒXà£<ã¸Ç"˜£îÒ IG›®1,gx,g<”„b…A箂Qi¢]577u ª~d,¢•BÅ´FﲫLÛâ¹Y4CGõ3Ý/¯yjâO݇ýfƒ”˜{a“‘'ÓU¦/Y¶d¸ wElôù=fÍ‚{ÉéÄK×1yÙ™S骅…sÊ­.åí©b‹ÍµùÛß1mçW#_ÿX\ú¦ÄËÌçt/¸—®0Ú–´QKcª8£uÒ=è™AżOv}Ep mñØrS Ãñ0¦Š¿›ïŒq¾FJwzJž[^×ãYîÞ‡;ÙqIô~û\\A׊žo!cZ¸#3,òyÇüùˆœÓåp»ϞϙòeñÏÐë!]M>BbÇ+ «ÉÇ œ\p\,ø”f{¼ïít°x–³?û¨ÏЙŸ,çvÑ‹7ï¯hl°Ñ]N@gìbþYŠ' «ŽHM +5‡o@gž}±Ÿü¨'àtë\³@·Déð ¸vº%v_s#Õ [>1pœÅ>ñt”a›C”™²›¸ „œÆŽì^+ô‚ì¦b™½•[¾åyh‘#_¾#»ÉGí%ôywd·4Ái¿F}Ù°[b§]O ‚íؽÿ.Àny#£ËüÕ°[žüÇ¢Fºãº¥9n[ŽU³'®«x¯1« žÑ×ÕÈÍ‘bdƒu5r¯vŸ»zÁºŠä+NÀ“Ì*XW#õ +ïvƒufá‡uç~Ã:ß¡~ýyYo°û<¹Eªï¡Q÷ü1è¦<´£º‚hÃSôëèM2éÑÓˆðÈnßô„uxj~P5'œäûUïÈ¿ù->ø ëào­ç5ýßÁư×èa•¼ÈåˆÈÃBV¤ N §FXwéô^Xûô¦·/Mèë‰Lrz¾ý=u±˜7¿½©‡.,•ž 7µÆÂ¶¡«tzC‰í…I½!½¡ I-ñjHoxM B>9†`…ô†÷GP¦-G +mCzC$ÚP;Þìd—×ùtCzùqÞñâo‰’é •(×VoHÃÑ<¢¬ÚîHoJ‘À~ÿ£æÌéMÍþƒcLúñÒ›*X,óJ™}!½å³D•¡VnHÏÜ.¨:kè¼!½¥cVªPÀ é-¯ bÓõòù”I.oÙÕn¸C>ìgF³ýù`ì0Ù#qƒ|ïÍxB>lhwr(ÖÝ)‡ÞPåtpÉÝ]ÔÑ0zZü4ûÓŠ`ŽZŒ9‡ç’=ü›6LåÅ”zÁŽŠ`ŽdhJNþªšëo‹%¬Ï,ä«"˜?³G!°èDX´>ýº‹Ö}Ʊò.vÔƒ×l`¢; +AÚîãâgÓ£XUí1—\§¯B`Õ8ÎúNöJ ·@Ù¹¹»õ&Vw °* fX¸Õá®ÎC^n…z•«jbÇ<"C~•Õ©ƒ¢Cj~ÌKg åEc¶—¡/™Ù.üëZ,Jéfóëb:J€Ò!„ÙQÌQ{ ÑùëZÌÞ5qU ³5ÀWi÷U|m‘KðUuxU³xšÌ'†®Ú^Ì:XÑiÞÛ½»šTP©Ï­ªk„ +­[ã9j5tï†|ñR,rÞh¦¢µ½ X¼•Ú,¼]Ê€E|?¶ÉG¾«`-têV]l{=°*[d‘ñQŸ“×ëûÈõª6Õ²¡±*Ô}-7åû²¹×ýMßõÀæäÂv.Ñät–m›! ›IÉQ=Êmoä¹”1þƒB4‚ªm¯r`ÙTÎî@Ïj`÷nQÐHÕz1À]¸6týºV›¨³@JÒÅ:²W½»Š$äÞöb`H§d‹Wó‡b`S†Ã™]ªUþÜ4-ðªª~¶õ»æÜÃŽmù¼n DðùÌÇÛÌjÄ=ª¯¸q©îI¬p›„Ãv œÅn“p°`˜%§ô}Jqîñ8ý · ½â¾1.ÿòÿ”‹¨«×ÙÏ]ûhô`D0‘”_ß©ˆºšqq¼ööLÀ,8}¶ •_§Êÿò6dxð§ëJEÔƒ{–ú“v&¢æ x,Îþþº25M/{âw&¢FÒc³0/)Z‰ƒ‰È)~a‘ì_W&¢æ (³Y³~5hØ#èþ¾U¥`À¹s#"ÂÕ« €³Få"¢*/ùàu^™ˆª¨ Ð8ö8;µG•7F#üÔ ÉNEŠ8vBx”íÙ©ˆª”†ÐžW/ž~›c®ëEETÅÌø ÑQ¼‹;QÕ9<è^TDU•Íç)ΛTDÑ=Œ¤~ÀŸŠHâ9èhÕ!Ç‹Š¨k̃CbW."QÑÚ?•¡ãÓAJÔýÐ ª‘#U{½¨ª^¤D/ +Ê)QWëûjx¡o‹¿þ×…æE:4œ·w,;û×›îÒñÜØ5sEHo²—/ÑÐŒ#9boéiPñ,·XóÞà žÎòØ?YîÎJô"Èy±‰›4bEÝ'+Q÷ä¼ah5í¤DÝ›°²rÆ)Q¾Ÿ>ýèù›”¨‹\üaãÖ•êß‘¼H¿.¤DÍÁ¾ùÀÚ4ê¶µpÿEÿE4i6ógóAJÔD¸Óè|wõ];)Qgvš8g4/v¢®ŽìÕZŒ£ìDCÌ; …O;ш'&ÉmŽÌM\:HnêT¿³ Mc.4FÞæá†ï*XØÿü@O4ü´m6©K£i§'zk½Å‹îBO4ÂÛ׸{± ñï@9{ÝÚ°þ ýiÉÎkZvgÛMõRrüÛm(de7nJsí5»`T Qo§ Ϧ#Ò]Þ«f×…‚GB ý¯KÍN3Àzíõ6%\1ɉ 6¤fÄ_5»¨›Ê4Gí5;M‘OpJÄÉï»dW›ºÎF%¶¸•ìjÐûÚ9§ˆÕv/ÙUŒòà!ƒ8HŒµ{É®V ‹M‹ãV²CéAÄûH ® •ßJv5¤h¤ÞoÍXU”èX:ý%;³©@ÛÝ">ð‡a[©G+Ä÷A¹ŠŠÃÛ·B]Õ¸2~ƒ¸]öB]­RR:ësx† §OŠh6Ïò^DöÇœûô³à^ž«MÉ4Ô…nÞVŸ«íQ¹ÔçÚyvzÕçâ BzµL:×9Á +ÏKZ g®+3‚ßkÜ t:'™…9gϧ:`®Å­–“ÚO_º®|#ŽyëÖwÅMÝé;V!>ñ]¡{ù…K….úóƳ>­Y[®;—S1¼Êj—oyŠdà‰MB2LßÄ8Ìâ]4Û‹sA‘=’ŽŸrçšSMŽC^´hÁüÈ(>¡µ9Àýø£$WÃĽíÜ|Íì%9læ Ü€²×[I€åó´Eù’³$W«Já :Jn%¹Z¤:Àj~뽪Å×DÇJ3Ÿ%9³iLЦ½¾•äj‰Ý„äWÙKrµ¸\ŽX5GoÀÔåUå´S^(él%¹*å77ÕX°—äxù¢Ë ÅÍWU[<=§[IÎ,ª¯[·rœ{I®Fž™†`Tù.Éù}H‹B.Õuk¾Â‹c’C{Ã÷ŠÞ>s8±/Žÿ³"WCó|@jFþ[EÎV™gÔÇo½ø½"/ÊÎ[4 +ñgAn”„كœ¿~äZ¸¬úÌrëÁª!2`ûrÄÉì¨Ç5ªÍäiêßëq!jû¯ßÚ^ Býݽk¥ìC^Õ¶®æ}ƒh·þª‡] +ç¦TŽ <·¯ö·ÛMÜœÈ#ßÏM=&¸™+ù®Yðhm¸$qèž›ê‰vxþsÓ'VÑá±/074ò~ÁpQïÔ–»a¸á¼h¤î«Þ@ÜÐz5ØÔÔ»µ¸¿xï ÄÍsk¤Gxbíf`wÜú®ªûsM©w×ß´þˆëÎÆj‹.Émîµ*/NG¿ ¿ÝnmW°`Sa¹ys]fƒ©…šë*{_W4×] J=*¥¬ÃüÅ3Ÿà=qÞ ±ÒS=1ðÂuC«æ~üúÂuCå,>È8 ¸n¨Ó 3ôÝpÝTå·cÜýÚx¤s]#úë¦Z¨»ýç¸6^‰Šb¬÷†ê¢sÜ"PË÷nzl\~l/$Í ¨nª0Š­­"ÁŽê¦@Œm•‘£Uþ@u1?Бù¸µÓÂK±wÑs¼@Ù嫾ú®¦ÐòxÁ |^å-·C»!€Ùíw—Kó¼¯üÂ;¢ Á $äçW_=V n Û ¬wb»¡Z—ý©‹X¿°Ý b¿°êç“ÛñA%}b;Ô+ÐÂ42º nØ.ÞíÑ8-Û Û5çGè.?a;Ñc«†Àíšväh˜¸a;¥êpZ›yk¬a«­ò‘¢F¹a»¦É_ðsØ®Zj§¢p`»&„*ºuk¬ÇÏ(ê žwl×>§å³Ëª6 ÊÛbõ"nÏ÷åù‡ŒvÃt!nuræ\9·²d &P.F1 è§œ÷”çyè‚冦PÆgÁS7|B¿¾×„úáxÒ釞ª¡Æàþ[¤íÀp¯÷ÂpÈâàLóÆ÷6ú7úxA´©(Öᳯ(ïßÀÖ‚8ð®ÞXHÿæGNjih!ˆ*¶^*ðºâ-˜Á3‚S껕 +,ÚÝ鬹bn­T eÔEÉ·ž*°3¹Û,ìi–öà Ï¡ÄÜU/¾ð,O±I‰íà ÏAŠùUqºí„áE”£­´”î=UKçRìù¡nsg/ªÕ4Oú…xq bZ¿.ÍU«¨hd[3I‰í /*¥á«ßDbaá²4 ¿nÍUK"€ŸS­"é¤bv +W J2;…x>ÓX +ñìãƒö⊯±—x‘½üÁÐÖ\…EF²êç¯[sÕŠAÿ³§êC¶R}öÅ»ƒŠTÅ]TÅj(Ú;¨`á4ÕàEQÕÖB 'zG§÷܉Tï(çµ±Ò•™Šßx89ô¤O‹¢'c¸(4ÀÚ8>ê+cx–úŠ-ÒUn +°8åÞ^ŒáYìiUú•1¼ˆÔ"íð÷ç„á…µ7¦RW–ÐÉÉ^<-Ófœ¼¶uZU&³2%—²S†W‡u††k¹^(ÃAs52‘Ä\7ѶU?ºSxs¼nÑÛðÊ]«m'%H8Åȶ3…·ÏìóAÞÄ9eWo1q|„ƒ§ùBGå ¯ªo5h¸Ý:¥–t{ñ›Z/^ áÁRl§Ü©Âƒ´·¡¶y¥ +/Rì|©ˆñ¢ +/R›¢ü´s,TáY‡ùUø+\¨Â³Xð °×;UxŽc¼cãFž#tB˜îÊŠÄ EYC ^v<Ëpðl¾@Vzã­ü)zÿ)(áŽËL·¯ý7mx$G líÖbøâÐŽ¡W‘%šÂîö.(Þ„µ2Õívà‚âé3³à¹ö‚ jhr$ýªäßÓ TEºŠN¶vÃÍ´¶…»cè .Й\[ŽQ4[͉âÿ€MûÕ6g$RX ˜o&­—íÒjêÏ Ëâ Àådø ÉW}EÒ†ŸÊÒ†J§·}©ÀžÌTPÕAJöYn¨@å{õ)ºqTP"xæÙŸÙ8Pú~m¡&ïlxÁƒà{á„×–9Ã_7‡õ E„oö¾8^€¡ˆØ,Ö2IГ„4æ<[¾Áús#ض3Ѻõ6­¿'Itë‚‚#ÓlòG¨dCjfxjÈ>CÐB6Œa´;rð<¶&rÁäm4•Bß_Ðá%„yMAâ…¢ã²öV>}H߈¡‹™éL±¢¼CŒ× uC ]LÑæÚ×s“y5‹W7öð.†X+˜Mú: EåZ‹Ä¼0D×¢°“ç£ùÿ†è¢*{ðC(glæk¯*#]̇ö\ñ)¼0D×¼9¸qÇb+0‹µÃC4ŰÎ;„h’é¨Á+ý‚*R4éXâ8.X¢~Ø3Qµ„VĸAˆq6=yÝ{¬ߊǷÕÇ­×g½¤.ÿóÿKLE-°³Ý{¬X]°¿Ë*ÒJ9H]´lãÕ£$±D„i‹Ò›ú.HBŒ,ÌÕ®›:¼Y¼HA$å8ø„‚²öI˜“’X9Ô4.Xx/fi}<— ,Ök|GíIjP5OXæo½x|pPúPô j!ó%xêÚžå"R 'Z.¥¯t)ã7dľM¾8â‡zOxåd7(Á‡Åói Ý•JÀ€³áxÞ?!‰ÝÁ I,Á²‚&ëqCâ ÂJ ¼„-Ôž¹ØïÑz!‰¥c`ÁÙè6¼Å S´aÖ©‡éUg³"§>€ÄTïÒ ?L‘þ—5Ó¸¤ +üW0_=JP¸¼ÐÁòæt³ÍuM8¬ø#¥O‡õ–Л=O\¿ðÃúÿ9û–dIr¹èµÖ¢-ø'×­+Hèuß+¸;˜•d ºÆjF¦±®Ä‹ÈŒ '>î@}=¢™-XÐûb ú|Ù…¸‚ˆÞŠ+ëœðŸ3wkkplîNÀ®pò'ðÐ…ð[‰¹ÛJ¹ްPÂÏp[Ko±2 ‚"À€~ŒˆC^86¹Ðe$è±¾q,4BbOý{Vò GÀBбÌÂ6ÂËZeo¹x°Ã•Ñ"ÈEð6ZöVŸÂ6’ù*Ïî>`Ÿ‰.²µ/.Ç*©#{¬yìY’Fð叿üèÝüoÐ@—¥Pc$‡¨ë…šÎ† +•lºPW{oKs®û 5Aâ…䨴¶?tŒ| …V޹¤6Ò‚j¥ÿJj”Ai§²§;^à`퀢`¤yú»0ÿgèú?gÃþ¥ »! ‘“s‰ÀK•ž yôùzÿÂÜéTµ`÷x–áÂ\3”ްàê#Ý|€ ûè^Ï|ÃXˆ‚¾ä™ç/àCöTžyƒQögíô¡ž6€>áCñÂÐCˆáCqy64e¶=7‰§UœÊÛNÌÀ/øòT¸òÉ–>&™I‹ÑCq®LÆè¡¸4êÒ=ÌDÐÀ#E´‚L= ©è“7ð!ù ÿ 6ÐsóI”\{àç0 ;¿ƒü–biÁäh„¸<ÙºÆÛ5pðB ÁFy¡†Ào]°hL§~&ºü@ >;<Õ°`!Ø7y ½møÜ8yjÏ-Òs§s?Î >ЦÓ)et%¿á-8Øf©… ¾|G/Ô½¼ƒÕÞõ +ºf0ö}ÃyÅÒ~úŒaCña[h<›sõX¸[ˆ'óìÀ†â¬8÷x?Ú 6ø˜£Ù”å¸`Äñ°F²-Ë ûƒÊÒJnècŠQCõŒ“­ú¢†êøª…2Rñ9 Õóf`ÁBq*{[Lë »š¡³*›Â†LVö,í9¾Ø%ÏØFøžé³iÌgåJœrÝd:ÎzÁ‡ìèä…^±!@ i#bœ©÷ôÐ’/ Sy¨!íj§áXþœØJèÄ~ë +Šô}ÜæûÚ +pÅïÃû†ä< +èqš%䈡 ÂKgÇ÷î¢úšì¦Îjqy;sX´x¢î–ê_ÐBãJÛô¥Ç@7,”u¶^vÊâ{¢{óçÓyMtÃFðÁ·æ8&ºÍŸºÇFë¹7$ݰP•ʾ¯fu^ݰьðSž¾‰fì§ãí d žÍð5Ò ‹Ä¢)(lÐ\#Ý-å(ßñ5Ò ¹Có~Ý;Z‘nXH“Ô¼óÖök¤6r»öê˦œøé¦—¾YŒôéæmž`àSWoÌD@€8š[°èôǶ"=SþL¯º\óÛ|Ò +¨õé½ÂõÛ{U&ášÚÆÚà\‚­°ÙŸP¼”«iáǯ|Om³Òä[#˜Úæ.@×v[KžÃ?§¶aC¹`³ékã†ï©mZ4¼˜³Ø=VG8OÞi‹üá9¦¶aÓ´gG¯%¨}À‚}È(ô'@0-u=·Ž%óÚн\™y¯}SÛ´Ù,Döq5´ÃâRxmóÛ"7a7}é×Ü6qf[öèâÛ¿zÚaAž´®íØ5·Íwˆ²|Ýæf?·¹9²uP¶Òé1¸ ž#ÍbJÒhnã#µ<ЪòÁÄïÁm.VeûíÓ©oŽÁm,øå³Ë—ä>|(¨ùã5¯ÍÝ¡[û•9P̃A#7D<ö|Ï9®  óÝãÚ´`ß“}kÓÄ9°è{Xè×æÏ¹¸Ç¸6Ý>¥ŒlŽ® Ç:¿IõŒ¸­¹îê—ô7?“ÄrßÝ™<´v!c´©AŽkÀýØlÒ[Çñ׿v-ê˜ì[0&„¦šz°à4…»‡Çsü +g3ãôT‹d2ŸÔŠßG.³Ë™ñçGl¥­ƒb¶àT}„j9Ø€ì›êÈ´zááÖ¦ NÉP·sêôïYmîa¤¸ùG%A§…¼–mëxŠš_U>¶¯À 0nu𘷠ó{Èó§PÊGêí裂G€¤|ä&ŸyÊIõ;¼O‰ÃÚæ |þí ©º&Ìd7®_ˆªkšÁ<.²¢’סg/!Ež#ÁqÇ¡ÏWͨšHéÐ Ö}r÷TM ³X#…9\û‰nÛ‚i*_€Ê»Åá­Û4L¹±/Ñb@U••ü PU œ›ÅJž¢¹Uõ‚™9íÇçr^€ªúQå…£vé=Ôó-bÊ«3+ÿ@â0ÆS8zÎFÕ ´çšyá¨*V&Ä¢â"/@¯Zø¤]ŒzC«&úU¼ay×´zmêZ½–ã Zui´vP®øÀÚ­ÆËhÙb4´:À¦8mÝ­†¨G;ä["ºX° ƒk½†Âð°y5y^ÀÉéÑÝþSõ°˜û¹ñÜC«©.Hty^Ðjþµa/D5·LÞ¼ ª¡´ ¾¤vÆ Q ¥7¡W­ôÔ QíõKW­%@T>dÞÁ{èhèBT˜š Î4×1SXðŒmKèÙ#ª®9ûÈÛÈ_ˆêš^ˆªm§‹é®ñ†VÔ$+¶½ðäÍÎ~B«¶aß(ÝÏ.¶ÂT }ª³/¾±UÓé0ÖÝÑ…­^Ðþ…­šŽÔh)ÆVM9]üžÕClÕv8ãPb„­^à?ÀV]çH³Y̶êÞƒ~Cª®*©û¨û R³(s«š€ê5CóTCí}¶¶{öðöTcûÎŒO{I *'õÅbµú5nT•QˆÅO&g PUvNürÜ‚mBf1¶è骲‹lv_xå—¨Ê> ûHÇ6ÊR™Á@Ý ZŠ•áaÃV¯nGò¼‹Ò¨2 L$ˆ½ÿUf¡Emþ¯xŽèª–y1K¶¶;Ñ•7FØÿÖZ‚,nÃwo·-$„‚þìÏl΂Êk üšO„³ðƒAMˆêò/òVÙ À‘7 ™0Ë^h^œV…:â`VNhµ¥5·¤Ê ³¸@£ÄÖvÓÚ®©Rñ܈Œ€éV‚]eïwÀöl›œá@WÙkŒ„-J\å¬äCG£ç§]æDW¹¨ØÅf¥²÷ £Ò/ÁÜÀ‚„üÝ"h/Åß¼ Û&;š/j€­`^rÎ(î"á²`Ás˜!ð´”.•‹¸Ô:Bj€±ðsÑߟ«¶™cå }C+86î!°ïµ@«¼çnDep,äÌ­}“ b±ùž—[ +–c p¼[¡_ø™õ¹STÙUˆP¡ª)P…çv૟öŠrTf¡$ªyñÏ©ëÂQÙ‹¯¢º+ÀQÙ[\`ÑvÏ£`q&&ß8*»fRã¶»†Gá©,$ Íç×á(DŽB`«Â1Ò£°½‰éÐ1¿rTöÕìM"ãÿTÙ3ùfŸ稰w)ì_G”£ÊY¼$fñd'¶:!U.޳‡…OLÜ*w“ß¶¾!w76dís©rQ[•YxzçT¹8²¼pþxƒ%3`(æ–Îò«Gd¾¥›î?Õ§~Ã%<ªEÇ0gŠðÒï‘ÏŸ"ªz7îˆÊ“+½îVëQy'wÍ{@_Ï©ÞGà7¢ªšE°‹ôM©q!*çïîà=-BTåžž Uùk'U/ Uüp2fÎ!ŽÊ’ºGõ~kF¼p”+Ø#t…¢£ò_1|òÂÃd_1|ÊÎOðBMæ”1DÆ|oB¸PSò3™-¬-9£¦ìäfcÁ¡¨){?,Öä¤p‰[šð…š²ší;æ·ÊV­8PSÞ¸*™ePSöÚyƒõ Ôä%@å@MESQx¿:¾PÓk7¨©J¬Ž‹Ð• /øä£žC’έpÁ§ºÃ0&zŸªÿ‡8"øTU2ÅG%þ@O»¬4H¼£§ª¦,¹ÖBøä³yp÷#·ØÂQZZªdðigíK ì…Ÿ)ŸhÑ[ M 9Áœº+‰¼ðSÓ\xyK ªz^ð‹Ç¨¬øÜäö àxÒ IU5°Áåõ-R")¯#umÌž‚wÑ*WÇO Ñ’üºCÜ¥‡xªìè;žp53*¶ /åá¬.ö·èdðTq¨7&šx"qv\?`ì®™êC­±CJª¯Ÿ…ææ¨ Ç ˜‚/Éá0šMq‡õtúR{€5ñ"ÌTZ”µu%ãq{€Ÿ¢Q´Ç_6ÕÅ)ß½ìd·iòÈÈò«£óYEº;âÖΞ²/_I´„yÌ! !jqyT0@ús…m=Zet‡z¬°¯ìýzñb´ÎÝ©Ó1ªû6J¨´ '‡ýþ4¶$Ó78Л1–ÙtšNòâÐÐñ«âÉ,ÊòúW–ܧðJ>UÕLÌD)7ÔpÀ#­\þ™ÝáÒk® b`CyûËç#ä;qw³B=ü¼~°L|¶œPĘx$ÒõäÂi =´yŠSÛw&wÖèÔ»ë®-†Úo)1!j&´ªJ¶Wä^è?Àd…¯-‘+›ß}|aØžÍÄŠM;—Þ;ßž"(+ûp†°47h^ +’ŒÆ¼¸ a`¦`ma­ËŽÔ-/B ¶w³²Xó)á5}i'Û1nÑõRCÔ>œNßm.f3Æ5q}¢œÞuòxšÅ§k¹«k™xø"df¶ÛlA€sýŠñ +äZ¯3U=‰­·s–ÝP„GI¡¶‹ÌrÙëÛ·a Dó€RP¬× È,Eo\œe({<>ëÄ«XÀžU^"é5‡¤&:¸FûŸâo\Dæ^öôG›—xÖ .~Ýê_BáÍʮҭ’S³3¸O7s+ |”Ò£ ’¥œŽîœ]q ˜4dAa¨VK+TC Ô 4SŠÒ¿‡f»$>°5{ `¿´‘N½!ž‡Ù¾…á¨U…Ùîz~Ë1‡a¶o¥4 Ÿ^ùËŠ¢Å´µ¤)ÝW˜.9žAÓ‡Y”Õчhïqç®0ë²öË’È î0;o”„ÙùéϽÂ륏3¯ð:·²3ä®»Üáuº±½¡êuê+¼§s6ü®æ€W|NÂÖ“|rã__ü_»³ Ûö©DñÕ,lÕñ9ñµ«Äƒ ¾z_»ú·a1{ÿНÞáŠú§÷Н}ë2ÚŠ'…z¦ü¸Ï¿ìp?-xïË+ÀÚC©›Iñˆ« 9EÔæÛ=ÉG\uA$f˜Z,šô^¯¸:Ïy³ ®nºØd«qÃ︺ém¶pŠâêrúùTkOQ€uf‚É1©GØåd˜ð÷{Öç°ko€òl’û+À.G ¶n›[¼ìú4ê^qu)g©ÅäŽ+°.v}ÜbÖ…³âyX?ë"3+чàùŒ«KÜ9fГ^qu:Â1ÿÙ\¶àŠ«ÓQzÂI9Equþõ³ßõ +§Óù£Í)¶†Óá<ÕÈ]”H{áíGƒ¸:\Ï>.bqÅÕ×yÅÕáñ.!M%Íú”ÇÕ®‘W„”Ú¸ú»ø÷§êŽù¦Í äóÖ#?”÷€pÖÃÌ`Ù~ª / ¸gà®}zÍè|EÎ|x¡y>ÈÎùòñÚ‡Oï3—¿ëC‡öTv? _¸6ËYcNà9Æm’sè#+Quùõ‘2èp¥Oó]øp†JCÜEùte*m.%¿jÞ#sI»ÅÂèâ³QÏþxL?7›;¢……F]^’éy²—úZ,5XLáÕ½1ÃLÚl{Û29†îHº=꺟¶‰ªÃñ$' ¢ƒI V›Íb<~º(]‘½%W÷‘†bJ‘ïÙg–) +øø9Ò,æéPJ™ø¡û𔟒·í¦‘†L~ÉM€ö¿‹ê¢C÷‘ +lz¦Ä“úÖ°„ȇg"Œñ eM ù[„ ü÷·Bís“›a­‰Ø¸Vª:&¥ÍQèNÓS»‹žºOndõ–Ù‰q΂ižŽ0Fõ…«£È’…Ô2ò''ÌDÃÂÅ8‘;S±]‘ÜŠÜ ›‹¤õÚÞÚj~ùE'Û~eŸ5am«ìX£ì/Ùð»Þ ?YQÕ ÇýÏÿÂ'¾§Ð¾¼ÏÿX› ĆN„âd`¡xð€?˜'úG:¡ÔÔ"•"«ïÛý5¸uBI³YÑóÀŽêxèÁ¬žWr—áS!¸Möû8_úƒ³,HÃý ºmepfÍÙVÀû”;Ð6¼ã"ˇ"-ô§Ý ôHÁÀ¼Ûèzmú®;92œÄà)“ûå Ø/¬N¸º´¶J}–VŽû3,û½„¿©¹¶Ðì°ß¼@1É×-¨ùïÉ`ž\Üj5©° òîáõÇɦ}í¥$7Õ ¹™DïMi'Wa2Ø–ý{GJ¹ý™eû)ÅóéÔœM~Þf'¶''= ³(;2ö.CtëiÀFmšÏöìUQ…àžIžÏ´[yù±¨Þ:8ÿEÉÖBžJb-ûvß?†ºò[ºH’”Édƒ E¢ìô4}ðsñLø tÜôX=ØÀ“á¶ëè(5:ˆ±u4¾Ù÷ðÖª¢÷±@G£¹ŽFÚž‡iиu4½Qç|@*¬«€(‚gNà>P%›úÈÊc ž +-Ú¬.ÀÙL…7W}Ä9›‡ß&í‰á”‹fÓ†Ûe!¤ñhGÄubâ¨{ƒ‡¨?ÌÃVí*×çÍmÑ ~ÉÎÏïCnr¼ƒ§;;A.΀”À,žš²¾¶xdRÿÁêSÌÏoÊü=To0Ç8F€è¨.Brºˆ4æ·øëOqÝKÇ8ÀuÕµ‚ì<¸aÛ…ëêöÏnP¾p]õÃX\Êó…ë¼n×äÕ‡ Ö9»Â„Q +q]•œ6<ÿü®+Ž‘ž¢a“¬+ªU™y¸M†¨§ »­Ÿ²U8n|÷Ú/ W¶Ìu…qô²Ë Ø÷â ôv?ß ße °B®c¹¸Ï…ï^($Àwù­¢}á»ìy ó¥y•ßåwö…ïòÏ’ô ë²CëšËê–GŒê®ýùBs^«Æ;¨.²q¢¹²]¶¡‚Ö4W\ÓÐqAç¹™òO4÷bö `3%c‡Ž «NXW÷·µ»ç xB y¦ÛË,OŒïšS—€èfÓ»œø®ù8.TèsˆÌ¼reóQƒ¦ÝGlM‰æÁiAžº5|ëeÑ¢sZ~!î:²¸HyòZ¨aAá¢Dø® Pã«öÍtÁ»æÈœ/œ¼kÎÝ„iΡ;ï¶A§Twb¤º«»Ùúó*ã…îêöjOÝ:gº«êE6‹ñ䣻-ûu•".„Ë¥´ÔM‚Aâ»mŒoP§3„Š˜Œî¦+?Ù N(WÔ/Œ¼J,ÆÊÐe¸0ÐåŠçz {(?ñÂr…[³;=Ï ÌyŸ ~Äãeã Ìù½ý'F˜sVœ-šÏŠ¿P]õ„ðcÿgäÕU?Ac­Å¨®n𚲘\TW½õÍÕ~¢ºæäf Gù¡ºöáØy9EÃèAN[íösM­UhÍiÎ-|¹¦^|³xD€¹æ„òê.-sÍEqÌ;IâæÚoA¿-Ù™À›Q£UæÑU¸~‘êû=èúC07g—²å×spçesrÅß`”˜;xb¹ù8™­í¡Ï”þ…åÌFtºdš˜[ +ZÔ©I–[ÎìÄ\UޱÜf!ž,iF`n9»¾}ãêÌ só¯Ý×õÂpSE”N¯&ë¦=jR›„ç„pÓ 0PˆòTà á¦rƃS})ÂrÓ©ß,"ç]ý>±ÜÐÌ©Yxt€å\n "miëPn8#¼¸Xî…䆢@p,FrÓ)Ót¯{é¦m X¡ýÊ'B.l7Õ¶?8Øcl7ÿÕÞMsŠãÛ-?ôcÏæl·É‰çlòš¶[Nì ¶?/gØ <„ts3,ÛKœ+ÎÔÁ†ÐÃÄÚŠ¤3 ÿ’Q¦Î,D;Ûhm÷ÚÎL„_¦e7 ›Éå,6=a&Í,Äibžy¥ ¥‡»$§Þ2µFDWáf˜Ð£úÅ}Dš:!)ÆÒ.³”©9L‘Áª ãW¥ç*l´ +½7@˜°Ãc妳Ç:·NÆéðnÈLŠ]å*É7¤Ã¦4È„çI¤Ã*‘sÛG¹ÒÁS¸ \ÞÎ"tCºù¸œ‰—G„í^µÀ¶[* P¨p”7¶Ó–qÔwBº¥9ŠÅ{rò„vs£} óYº¥¼µ]dÎAÆí–Ó›N°ßDÈξÃöD¨ÿEšn±…69ykñ…ì–Ú)·äXéBvKëC=v1²[ʖп„ÀÎK»dh›ùvp?$ƒ‡äˆÓus3uC!,çØM/ž ÔÜyÀk 0Û [êxs”Ú è“•9ÞÜÌßQ÷H~<³Ð¹ãë¦ghÁÃÓg”¤Ã®&Â|¬Q’d8±}_Jœ¤Ã—ä.™0‰’tóq™@~mO‘ßÿ¿þ×åÏãyÁ¹¬–aÔ ÷8Úç²z™0;:"8—ý€Š¼çœË~@{LÏœ›‰òݰð\êçà¿©'i>¾Îâ¹™Mpñ·ÏÍäÊã°„‰,˜?9®¹¾—ùçè°éÌñ”:¸kêeN¬»ºéEÑÇã{òtðÅŠ?»­ {Ð-õL°LØÃâëÒø=Ë'aíu9&Ä/ÞÓ7¢[{ë£i%ª½Â [£‡oˆŽ*ñ¨`Þ:®½âíø71Odëà`H7kÏå èææžxRq²nnÑTó]Rqzºì)2[ou¤Ùmòk6Åɺ¹ÙÄ¡a·sW'²ËûÛ&óQ²Î,.)ù7²Ë{·=i|LlWœz€'Ò¹4‹ŠþßAýŠ ‡ûwx y]Eû‚TjQKÚôd+èðŸN‚ц qÆ[Ð.pW‰ât¿6Ýöî6ñ*ð’÷пÀ]y“D^à.«Ö¾ÙìÍ߸Ëþ]-ÆäTcõ~ºí>¸ËÛÓ%C2{Uà.»:¤yq®ÜaÄ ¬vú®D}‚;x]”Û8¶5l7·h*ôˆë±v ¸½Ì¦6מ9P¼2…X@‹ïL'̛ޅƒuoqç•Tt^YQÚ<Õ~w”ÁÃ7°èçÐç!Ô+Ô²9ùOœ7_ÀžÚ”0ÜóÞgš7΃Óá‰wôñ@ozÑÀ(ή@/o`kaСà èeWJ´µ´œkûzÙÓÔ¨/ר.;³'ÇP¡›»)ùBz>½‡)¸Ô¹^ñ';–÷Ⱦ^q_ õö Èç™ÜÁ^§A¾Â…Aß•bÈWŠ!¤Ç ŽôD®d‰ð\vHä”k”Éû2ûC —–mŠd_¦¢¥Ä½é· ù¿´éÐå?du¿}z„ðoa§yej’˜ìiu§Y-@Å”}l$_د{Ž|{u;wâÛz {˜¶ˆ©óÈèVÅ,:`"š>·ˆRׄMUª¡¿¸ =¦Öy½è"8!ššµd »Ã¡Ø?Mw]â´?+æ¸í7d¿}J…îA×£Ò+#8•`A³pVò¼¤‚1‡ü.0ðMÄäBBõiðV >ì¿>â® “îæn0RK vhBnîÑU‚ò„æB,/Óɳè6b +æé鄱H'è. ²:îL¸u&- $n—½ O¨:e±Ì¤bÀ¤ïy–C0ñLÏ‹€|_•?쩺-|^£lºÃB÷±ß†¤cÊe— +ý'tHðsæ_Ÿæûƒ +„b'g»»ÃÂÞ l ‰¸ 2ì¶X6›V^_æÒ„‰Ì†²Xh‹¨8½ú`(Äu0±bËoƒ|¿ +Å¿BA.q3sPÁ"™zkíü³%O¨àìs†C[o¤àˈ¼P’’-@ +ÙÕ m¹Ús©RÀ¶Àׯ¶Ð0Ç*äŸIè!m.áò­ŠoóF9ý$=ýþÀÑz•KfÝ€9¯>™çÛ¢ß.ݺƒB@d„·«Øw ,phBììûèu@ zFx‰ìÁêI¦´iÙO÷»ùÞˆ@‚ €bƒl‹$86Hö~Ç$ä—Ü ðäµ— ÙׂÕôPðÃWðꑃ³wÜÜàÄX=I'ƒ4÷èDÐBn:A¥{ °9ôyˆ#`à #‚ “ë 1l,fÿ¶èÌ7F€ÅCÀjþ~ó«!û”,ÖæÁºÀB~v,…Peà!ÎòÀ⿃úŸÊ‰»JdUsþ…ž¸+( sžóÓ5õ]@‚µ“*Žk²8‡åWó¤è{R8,¿\xL†Ë.L¯ÄÐTÕ=*m{f±+MÂQùåÃü£v*½GåÍB‚v`+ž#Í.¾†[oŸrÊ›M¥Hs-uŸëÏ™y³d0zÞ3}ÎÌ/ÕÌÂÎh%ž™_õhj÷üœ3ó«{©’1ýÇ{fÞ,”a£T‚ Ó=3¿\»ƒLrž#:gæWóê€-ƒÒ´SÏ™ùÕ¨‰–5wòž™_Î)›Qr°Ë°LÙN¶c?gñ°¹À>(3ôZmÿÔÉLç»@a¤CÂÛ$sÉŸÊðHñ¿FæíAúBQË›_ŽÙy³Pß án9gç±>™lF_ž×-®Ñù÷½Gç×pÝvC@ÃEÎÑy¬O¶Øú|¼²qÎ/碇rw48¿¦çw Þd?JƒókRÕ ´Úþˆç×”ä‹ÙäÇÆçä¼Y¨Z‡å gçäü[yý=9eix{&î¡ÇU$iº ðã=B Þ®Ù7Ð=~¢ì@VÈe²Žú5?²ØçèüÚ}}¤RªG£óÿèM`ÖÊÞDÞÌ£çèü®~‡7áíçè<Þ8@e1øG4CuÜ~­e·çž3ôX{zç-﹜s†þí`ß3ô°a™©vþÄ÷ ý{£Ü3ô°(ܨZ¸ïp¥í>GÔ›±ϰð솺ܿ‹†e±5§oÍ_ŒX­±—DMq:a<ÞçqÙáJÓö®K +c¬K±€j¥8ýýÜP[>VR›a”u6)³(†ï ;÷Û3À5¶0æd§÷TÐ]¥ È.r†×8Æ"Mui¹]1vyݧ€"$G1v¹ûÁ!ÇgÊ_1v‰ö׮⴯;w¤¶ïÑWc§· Ô”4?ÄØ×.ÅØáR¡¶‡§S]1vHÉÁVFÍ›S펱N(›ãc‡‹á¢¯;¼´‹™·=ï;öOݸÿc‡¸ì‡ÚñmÓÊií©ŠØ´Âd§—ìIŽº¹kÎ kÿ žêîS¸‚ìÔ„%ÞFÉq”bf\Z>ôuÙå +µ¯Øº¼[Ð!‡VåðÁ©ëë®ÐïM,ÒÚCÜSißÁra­!ïlÔ%kG…]ÍÿŽ­4Ðò·km¦×¯Ð*QòBÁñÕkÈú&©a ‹QE<`§¡‘—m}‡VÞ‡mL¥Aü+´ò‡R‡×~èîIø­0N.ø«,㈱°P\+`–Êï«W¢ÆwtŒÅØåƒÈHíé3Æ®·¬ð+Æ: Žíɺ™D®;}ÜñZ_n5­ÓÛ¸í¶mkל¡õµ=^¡uîØ‡Þ¦8²ï´«˜Y +Â#ã uI-¾ôHyñ÷¡ðO³Þî¤0(‘J´ÿ—6JƒÔ%?®¬÷4ºYØ×w’î3ë=t˜0‹<ænÿ¿²ÞCÃþ+!·Îá|QØL˜ƒÔÉêJO¬À¿œªáÎ~OÍÛ­„(æ)3û½D¥lÏ>ä]Ùo[¼¬äÚÂ+ÙÑú_^qKH?m²†#î˾MódÚ•_fÑ«;ƒWÜücâc«8äüxçÁí"˜8†Ár®¸¦f²Ë®½uw^yðå¯ -qÎqåÁ×~%L?‚„øÔPŸ=;2Ž„ø?|'þ]†º_^ùp”z+.2FÛ²dg>|jpjí9}ï+!>$ä³Pr]®¼y&Äý¬‡uZ½öJˆ‘¨ h8vóËX$0t›33>vcQí¥nmË/×Çy•ÄøüH”^ùð)šã…ïÎ;n«twfÒ—_üJ‡OÏiêøÊ†Oï®!ó­7%eõj•tOxG?‚d8üñ¤O®@tå‡"¶f©É"^‡rámøZRïÀ+îÌ¿öKÊäX,æØ+Q·^ïÊ7.ˆb´¨NŽ•ŠHŠ•º+éW¼ÝŠw»2l2÷o}>úTg¼y½Å,Z˜waèÒÙ”ºýç0M‘¶ÌákN£Dó߆ø?…óý˜^Ðaé‚H–Ë—èäì9Œ=‡å.Á6¶Çþá]ÀõHÖvUüÅuèìôâr^'p0 •*-¨MúÊ®7š_óvº8”GŒf`¹À¡$MJATvä³áИ٠ƒ4Å÷WúæOÜP|^oÏSê7n(É{ÍÌ»­ÝN÷`ÀÝŒåM×¾å*nÜPv³\²§·e¹ÜPv§EçÇÉ\NÜP ØGwd»ÛÓw!½­g;¡ä6üí;ªp·”±)(OØ0Ýí¤^Õèý‚ ž»…ÅÜ·WË" q>t™'(˜âÛF4K%¬½ïe„Ærê1lp¢t|?]¨axÕ3Q:!B Óшo]ìî½Ã—eÇE²ƒó +aÃô&‹ŸóùôÞeO¬áÄX½øGŠq·bç7|(T*±Ž‡WÄOQ\t¡pë³7(>÷ +)[fo û¾’’êîå=÷ | ¾ðx ß-hß1ìÌ5BKØ.Ù-.(±îÚn%|¤Ý^Îè-ÄSÃ/ö†í… bþ•QNŸf,¾e¿ Äüdµ.1<—‡!I3ì›0Ó ÆÝrðB^lP«5¨{û·Gæ;xÆÈa*E/Ë/,þ;Âÿ¡NÞ㽃h.¬žÃæC÷•Îç¿3™boX1W:[ àLãÛV—Ú§ýmª» Ó~àßUÈÔ±úñJãÃB[TŒ¢Z9,(3Àô°{»¿Óøí©ôJ˜`ô*əƇüfî'Î<>lȼg6eóùy|;[‰Ã-QNcv¤ñaÀæ  +=¿A·Û°Ñ×n]¡¯4>,¶´é‘½Çƒ !#æ*¥0úÊÞÃfã´#iÏ7žD{Ceo­#iϵ£\ïWûç™´§ g¼ÍF#§×¢4‘`ñ3«>ôk-h4Ø+—úÚ“}Ú*¯Ú÷nXPL,â5ü¬‹óws {Sž9{ب¨ž!!·Çå ê,ºŠ²¯ÿÆõPû TX–ã•´‡Eg“@-nPçjllÕûû_é{.78<€ºÝu¥ï›ç³íà'Wu§ï;g4AƒdKHõ•¾ï^xBZÆëÍWþ¾{ûGFß²“h |hNÜJy;:^ üîŠù¡ÌbÀïNÆBå=ß_g¿‹” Û-ÏïÚ8*ÓÉÈúxSë™Àß\L8`l0q&ð›NC‡‡ F®w¢Ž† $å°ù;O/B Tƒü½óoܱl¯²íøìãõ7Ï-ÈÒjÛó#W÷`ÁL«Hf[›˜ç›g&"Àxìõl²¢ož¡–²'£ Y¦)Á§ìÑÂÞÖS~HÜ3[°RÄD ‹Pò6WARêCm~B®´éx/…~Ó Ñ‚Øòi-•€^ˆ_‘°õç…¼è…ø0Ø.ºªêmúßôB| Üx€Ï{Bê›^ˆo…i[àËj/îH¾Û¦·ŸÕÊtÑ q éÅM°aÿxÑ ÁB^Ã9¿¯J!Öªh¦ìš¾#v!ºÚ;½}Ð ÑÑò0–Ò3üˆqÑ qç‘K$oÕˆ¾è…è‹yHOD%ò#ßôB°C4ŠÃ{濫 ÛÔ¾q õB íp;yÖñ â7ḑ}“UCz!üœ$ïo°¤áô$Ȫ˜'™m4’°ÐÞDå±…ôBô5Lò=P„uâoz!¾?MÚ¡±­€G’Þ£tÑÅÃÍE/ĵ¤5;·\÷Á.!} M܃]öžèjž-…z± ÁFQ [Òµúv!l/6i 4 ·@õŽÏ.N!n_9Ì6†Ó^œB´Ð¦j}| _œBtLZ™ Õ÷ÜF5ì'qö;Õ€‹§7añŸpìOQ^ù+ôýWŸpÆaæ3zq »âùˆƒØÁ€-˜‹6óÑ'¾ÀëÚI'ïòò«§Jêâ…í²úáíë.ÞØ.û°Þ²l‡¥æ‹˜¯„Ø©¹šCL÷^ä7¦K>c>Ré˜.¹@ êbp·LçZÿµ§‡¾Ñ]ÚLj8‹{z÷DwoòFwÉ„·«Åßè]ÙBÕ Ð]ÚÔvŸÍLpÃ;º …¶ûÑt—¼Ù(G’/ŠT™H¦×_ »´I¨Ÿ1\ÐõwÉUG웕ܹ*Žý´©|_î\# ?¿’0PBã!­K„휳»DЍ¶+ÿ•ÚblWö—-|ˆ¶C’·bµÚ‘ó£¡rb;´ p›Øïü¨äØ®xô±ÇÕ£ +Qªl 2 bÕÛU/Xàæ(ß m ¼_܇}³ß¾òoݧ˸!yÕS+šBWw”x<À¼â‚¼/lWÄ;d´Ô6#lgï©?ƒrõ ¥^øö…ÜJÙ÷¶+~þ³…#ôðÂvÅf1™èg¶Ë.rðTLlFà.K¨ù‰¸#98f›y<¿À]Þ'úîŒc¸KNjfëñF¬Ü43õ†—â7¸ãI%1ªÚ÷l¸KN "å¨ÜÁB /{a»|÷s¼°]VÏ¢Ora»ü9Ù¿ ]öÔWu@ ÎׯJÓÃJ~鲃ØDÖ9†t¶@#1ÎL!¦{Qç¼0]ñz§y?©”˜®ìX…†ÞaºêãeèFñ±Å ÓU'}Ù1º«Ûe>+{CÙ…îêÞV(VŒ‘òB˜i‚ÃÌ!I8÷¾0jꊉ/ìV|þ +uý¨÷+ö‡í«¥¹ªÓB3yܾj6ÒvD¿“7Aå‹^LE9fX¬­w&Èô$ŒÍÑBlÏ×pœ~¥Ãß¼f(ìª~p…F#Ü_Î`‰-Õ)Ó *)ĪߓlØø\©sºrS×®ÞjÑ·ƒA=óoÔé5 Öä–9-H õ¤Y`œ¥¸£ÓU‹·´=»˜gÈbM/ ©Òc¤Ä‹æ}:hþØç +QZž~¡ÿÖ§Ø0Dò=åi6êªD\uÇr·`ñÒÛó§Û†ð`¡aDyŸHmàT ÆýÜG- f“]AÊhÀASo¶'"ÔÞ£…ZdÛ¬^)¬jNÃw×óµ3Ù”_¥¶Q‡o-ücÊ%ڰت$š^øðHþôÔ¤¬Kå!¯hXªÔÏ(Bg÷_õNêgwЉ7!qãøÂÙVlWª^ôW0‘ÝNõŽßü(„_ï  +-DöšÓéS§ Ú§˜'-Í9·¨6é)ä‡þÑ–rê¾Üsá›ß˜¤ìœ¾ cÜ3Çof£«ã?`ö×¶ÛX>ˆ­Â—­Ô¦–MØPßÖ|öV‘RÕÊ€Oåviú™ØÖ—VÙñk§õªmÝqj3 p…üˆº[±õÙ‹ 7¿¢ÑšÒö;A=72ðþ{œù™ÁìÍ?z'd²'0B~ÌØ¢»EÓâ(Þö€~[€R}•ºgÁÀvöXÔ‹ºVxM{%0v ¥‹4«Çh=z²âi¥Úkš^EVÛl mûÁNmè çIˆ£ g§¦pªˆT“nã«ÖP¾_(RWWßïu^à\íƒ@ÙøÇbÎzfÙEz”Àí¬ƒže4¡/ù ¤â}ƒ—Ä nŽg·É«åú™®¾Ôöï„fÞúZ4Sû­]-ódß^ˆõ4Üwóþš@‚ážé×È!/à ñ»S”äBzÓEe¼J‰²ü©½2¹©ƒâÌß,Ex³s ßè÷Tîzz]Tþ¼Dq¨­ØÒ‹f„áÝ8MõÔ™7UaU(—›Ce n®zÒ·LŽЮ`:9H‚;¸y[B.îªD²lWÛ¢£0Ò×¼‡lö° +*Ú-"EM½‹“Ϧ"~Uçoñ>˜äô:Ðb(x&ù‡¹çIì)fÝ^ÓLh0Lñt¶¿–EJm ¸p„ò·9¡ÅØ?…GC) +ð|έYzãá"‰«Ž=luÁ£áí«¹ |Á£! +•¹ê”Û7<ò&3Y-…ø¨»Š2s.,u¤.iH]J?ñQWýb‚œ÷£h{%ìᣮÕ9áCJ>ðQsáç…_ß|ô +A/|äôK/;GôÂGMY³©Ù›/|Ô6†ÃQ,‚G.¢Š5˜êŒá‘uvÑÛê>~è±^;ÜvÖ³µŽxõ\¡5ýûmxÔèuøÕ‡÷–\ðÈI²­P‚Gí&R àQ@µ0úÖŠ&Nê.t½pšINò‘Y[c9—ò7Nú‡‹æò¡7Nê®Ú½ºKúœ(ièh?é sŒ’†z™lu‡bHš™h‘ó¦ô -V`r®­2úBKÃÏ/4îßøICbmvùö´_€¤!û’1'§^Hm†ý'3Ñ}yo•²w•S Žºˆ1a‘7AÃ Ž¼ÇÎ,æî‹¼QRÛþe &@IÎÓ‡CžóT\h霴T¥‰SÜú¨^|£¥ºL¹>.|y¡¥êcÀöekZÂÜ[û~Ÿ/´ä ©m—/¼T620`ð´/pyÀ·Ô"¼‚`"GÀ˜á¥âD¨(Ò¹²æMRÆ ˆÍ{nëÂKuû§î{ᥪn«…¶9ÿÅ/¼T3oÖ“†^ªÊÔÛ{kÅI'.¼Ô6.³§WVŒ—š8¦&sM3ÂKM õ+í4é—š…9·î³².u%IE¥΂wAînê®8८NûÛ¢!½^ê"—‚EÚ™'^òž5ìS•Á¼¤t-Üfß %«&Dnvöþ¶øo\ó§5B°\ÔÂ,8gÔ §´Ãú²˜åéÅW½ÐçÐ:–­—•¯záäS·õ”MºPøÏnH[©-.(zìêN{vÖ Š£“‰Ö«‚gݰk¢¶“žß+ýWÝÐ"ͤçu…¥.†ß¾p{'?ë†]SÝf1ü ú*våújk³­\eC³'þ)?œ0oƒT=n3ݵ¾Ê†]1ßlŠ~ñ«nض;PAºÂðHà :šWº¯ºá¸ÁîÂáPaÑ^}k~Š< ‡.Ál«§«/8(Î;½÷ªNõ{ØãN#æ†"Ñ©»ÍéU8œŠYؼóÙ¾£p8ýË"“ï§¹³n¸4}§Tw¡í¬.e‚; +Ô›òô¬.å›Á!6#Å·Fi+ö]]Ô3¨®¿BÉa~ÀÝ0áDƒüèw„Ý&W —f¶q‘ä¥À³X¸n-øW±p)ab—h­î´úU,\*Nmj°ȷÂU5œ +‡àòaSD‚]ÜC?‚ªáTù‹Š;»ßë¬Ú³ýAŸ¼zÈ:ÅuŠBl'. +«†S=p$šºÊU5t‚,ÛRO-›Qêª,;) œâ¨k3°wâNä¬Ys«ö~Q5JË¡à3œ®öª:“R§†CX5:àá›4ÿª¯²¡sµvðŒ°l84ªŠ T6ûåY6œ¾51±þ„Ê wdÙ¶í­ŽÜWýpŠ«µ£ÑÖ°ù‘„x• ç­'ñ*..ÍÙÕ)þ#(.å‚0O²Z()LòTêZôü„­`K\ì–ßLgÙp©¾Ý¹} +ì.zG`çÀ´ÛœeÃ¥&UÝÃgÙp‰x +^ Å…=þžÖgÔW)OPsü= ûC "~=‹³-¸ó¿²‰à]vÅVûÛÖJ )ܶSGúÈÉvoxÿvÅÞ]IÁn¨¬û28á<=záé7× Þ9ñfgÃDï ïÅ€2†Æ76¼[÷a3€w¯ÿÂwÞŽÿÝôíÂwÓɤްΛðíõî2“¬›ªß@ú¶n1ËÖ½ÐG€ë¦ŽÀÉÅUØ/\7Å—‹ñDÍþ¸†°áž©pÝÔÌ0Üϳ:aÝT¾ y »`ÝÜ«#†uKõ;{ä]¤µ7¬s!w¼ò§Gý`.Ä ×Ð-ý†uÙÙNÌæÉªÃOÔv³ãC©¬£ö '¸³ã^ +‰/Ï +Y¶ÖA‹L_¶æêó'®ƒ0‡–8ÖýM®ÛBŒ “¬!®ƒFˆ­ì‰ôN‰¦…x!l÷µùé>ŠtsÐ-FÐäÕ²wñuH™çÀâo^žó$}ò ;\~òi¥¾YNd‹F¯ïL&ª>Ôô‚sKyC³A‹T眨‡é¾àÜÒœðÉãd/8ç´Àᘜ[Òâ9xEhî>ļÁÜ O¸Ý€¹-?Æ‘ù`z øìfž¹¸QÃ9jm=P¦óàátî|é êrÚ_İkÛSñ'¨£ˆ Kfê6'¨ÃžÚSey4?ATçà¯Ìâé¿u9mw‰‰Ó€:lo`íúDþZ%:²øÉ ¸xô{Úžˆ< ¯0g¥Žp෠쫞Õ{H'ÄûVL‡\‹‚—Ù´:|Èû¨zÖòá…:‹5Ë="Yÿ™ý>‹5 Ÿã”ß}´û,všE…/NU›ùþ»ÖY½ä±Õ»­½Øi©’ +ÐÇýÙQì¬I3öf1Äa~W=ÍE ûŸš½ËÖ‹žöÉ[4ð»èY=PNÛS:ÜEÏš¤$Ö‡¨’½@y9±’Yⶇ²]Û]ä¬Y.9³k;ªœ5‹FéñæYå¬Nº2î]ë®rbϲÈ8Ñ\ì­°G¹³–ý{ Px1ó,wÂ7$N) Á^{š¨3úJþ.|VPÂ%ð™„mbk¯è‰~²ß…Ï%ÑÉ^ù”«ð¹48)ÿíûó,|.xD§çæ_…ÏuË_…Ï¥¹Vá6ÕóYø\â·f£Ê¨3ýÃûC©Èåáû:c®ý,hgá³úX¼á3÷à»ð _8Ù Q]§áSù¬>8laïÇ»ô‰ðÈÕAUúÇ«ô‰° xeöÕýÜsÕ@a³è… +ø"¼k Ø‘I{Ö¶Ý>ƒ}×@a‘ZmKµ z©ûØC`ôO*%ßN€ 9f4•š‡¿G9Šž¼ßg•°úú/mÔ45Z_1zª¾•GÇ”V£ªG æiS×]0Êô&Ó]oâ‚QUù\ó9UM:7ŽªîAÇX38ªÜT/UPÙ¡¸YïNUÔ h0 (ûH õ#Ñ›'@ê¬^@*+¹j‹àÓ›õRyoN$4J¤òÆz¨léHeel9>s‹0ßH*«›ü©¼÷w¢v»å¤NHeSbÕ~t×#ŒNB*sî/HåT’h¤å Z5žá»Y@^Ðê5ó¡UñH1À¼:#håTt˜ÜoŽÜ®.{[Xr¬J[»[èZù0²ª=×Zy+rpc¯ZýûtmÆÝ‚v«zÓ̾€•ÓêØGx ¬šŸ(@Ñ«¶-Š9VÍ{SF«óWÀJìàø5)§ñ÷êÕô àË¢ŠGÎü—÷‘«8ýâ>ŬÊýdßÀªlç³°Å`•=“÷ÂS.ÒLؽ3ë7žÊ©f;wdV:fA~4x +ç@.c;í$Ÿ§s<…€ŠÑ¼¼Ý˜zâ©êéDã•·\ë7žªi#‡:Õ9üÆSˆú:ç°xª:Q>,ú&¨?ðTõÉrܧþOÁfE0 +?CÊV»WJO…³0ð8“Z¼`TödÀ =eÝâM.o¢¿ÐSÞ( iµ£§¬œ8²ÇÓ =•Íp}a¦âHb¬&9ƒŸ˜©(1i¥Y¶ŠÆ™^küÆLX¸‰Û¤LÇ)/ÌTÕn›-6}a¦ªÒ­Yäùl:Þ3U?ý @ê¸Ï£*8^Œ¨ŸîE×öà +-~‡mþ3‰®ñ?ØÍþ¥ ÛSl.õ¨ß"—mwÆUÔzTm=E.±tèÌ+M¼hxª\6×ùÂi=¹ê)”±rè¬lYæOáù[åÒ,´S@ëç±ä’¹Äúà:­û(çaÁ1³ûxDÄ6ì¬ß*—mpÔVóžb9T.±Äx«»ÙBÕZ{$„Óróû^*—pNçºU.›ke¢TvÓÒ¡rÙ¼GdRf3dîÔ­Z c“T2—f1îvµSï ”Ç[ e¤Sð²-‘nÙ,b[¸Õ¤Í‚•@¸Öæ-I‡št< Æ2w†…+³IÙ%'N5i³¨hösñ*OÀ˜M ®rˆE>Á`›î#°jG£Ù"5iX( dï?ĤqŸ^Áã?¼(ÿ?ðÙ3ßÒf@µ‰ ˆwžbÒöuŠ,:—g.¡K³ño¶ìª>U{]Ÿpò¯,(çþx ]¶—’Å[èÒŽÀ:Ô*½ãйÄÚ»Ñú)xùv°oÁKØvUÐàz’ó¼|ï”[ð§ñέ +…­Xñ~‹¿¢¬‰J3Ö`iA²0¼üm\üÓxûÚ¢A¼u…HV—w.øŒ·ÓB*ÖJo½¯,rÕhw¼]žô÷0»ÔÝ‹•4}žç +³Ë3Ã…ya˜]þþ@ˆÄ¤±qxp.àBîï0ÛÏ—tl‡üذYLêZ Ü©Î3Ìö䩬Rª€ lA·˜ÞçZºÃ¬Ý‡S3v•1œ&å ³pb +ÖlñŽÂìzçj^qöµÍ_qv©_ +1UùœWœu1¡ 1ÙÍ +tÇYoJ‚M©-гӫH°Ø‘8 -ô³£*ˆ³‘^Ëg—Ï2îðº¶o†WÈ‹M?É£ÎZ-Š®Kc ˆF# ®èô°´ˆ¨µßÁ•ë 3ûïœZlXô]®¨³ÁËRѨÕá'š;¸bÙuÞb¨-®=ihÍk½å( G¹ï2ÿ·yw^ÁÕgÓ‘1ö>‡+¶æ}óGöŠ­y/mÖ‚âØêLCf3ò°bÓ °èŽ®àš +SzpÍ¢êÇ©lÓÓžÁÕ'ÞÑ 3jÀ† 4‹*Ý™®ïàÚÓÆ9ºZ B‹|OzžÁµ; £½rÛï5 ®X8,þÙÂ?Í]‰&øÊ¡Ð¢èzûÕ+¸þÃ}¢*/ÒE9P¡xo”Wl]¿ z ¬ÉÙEçÄ_ú*¦_ ¢\Âèû» ø§½±¶—8‚Ù–Ss`*Èì²7Öe>Íf¤Í8ÄV#sUê–ë +sfa˜jd2Ge_8'…½æKaAöu0‘î~š¡7iþ=,Í   ’f1lˆc¤E Ò ‚R­ì†nh'ÛªCmŽ÷©>>‡¬•Ù*ú†ª¼ÄÓëÐÖƒ q uvZ°ÆgËsoð;ëJÕ¯Îã-Žº5a©c`øWk£õ­&›¥W‡®þ¢‘¨S:q9Ké Ÿ‹½lêÇæ5ÀÙ l+X´´»Êºw•M¿ˆÑhîžGKÈ`.ªŸÁšXG%ljü’Ó N‘°`ÊCìýCX!Jìõ‹å¥±Îãñ±Ö.P¿¢¸å+У•†žM¥ÎÄÔ¡.åŽ}©à`Á@ʹ©nÕ«Íø”õ³l/ ^d‚ìªC*àCFÀì§ùµ§quòHÞÁÜøx$[JžuɘlY×>žMh0Õ)goy&­pd¬ÌJ¢Š©%©Ór°yñµÕЭÉ_ ²•é·¹l;€qŸ†…Z <2KØsŠ-žÄNÜRÚ¾ ŽèXš4‹Î‡3„îÒæþÓäÚtq͈õ…ú‘¿‘‡`‚ÛÏŠC endstream endobj 45 0 obj <>stream +/¤Áö4)»ìtõj¿ªÂsÉWà]"ËmïÒÜ…/.m +ß,µuä9GÌÙW oàË[½ÒOÿî‹Û îÚ¬/“|¡0àWÏZMæj¼¼)Í 9J}ÇÊfë\Z’é°ÐüÚH†iü «Vz¢e¿ú í$Ÿ}ròSˆ¤Ô;áSä¼%ØõŸ^PX@¤Zrì2´%WdÀ*t§À~U~ã¥m”ÓÆ‚Oºæ=‘wïwÊW¼ÝõœÀ…8>+ +.Ú~@wV ” dxPZ•€`fѺSõ©ŠŒv¼n+Ûðy20ïó< Ýæ÷îO§}x™+¡4ÐäýK¾뇲auØpÆ"¢›w Èl™ã·£Ædþ÷–ŸïY=€?¨ÄµgwE.õ¬bCdþ±€Ž-VMv‚º¯'!+jKúwèêJ[R÷FeË)‡cê{!ÀÅf”§[Ù-¸¹s@J•þ¸ìí™,~ûïgú}ØúŽCoi®êÞ&m,è%^e}¦‡¹9WEHDííO±(d‘Ô%Œƒ?—ÙnBÕ¢~²ÙJ4Cwÿ{b®€$“þuTAjg”ñ8€-úÍŠ…2qÇ9n<^xJ¶¯^›ãúgg),§¦Å¤Yv¾ÇÑ–FÞ&iĽjÓ±Òl4±ÐË<ãù@OÝÙܰã𦉿‡@C°»>/†Yg.ܰ!‡ùÄ\g·ìëÏÙ–Ä³Ê êàó±â@ÂÈ[£…žæáÇ´”2±åƒºî“5ÆCfž¾†óÜ&šü*‡|2,jˆù3˜tµŸ±yåNX=¼Q{"0´ oûÈl?5”ÛÍX;ëfmI]ew´e ŸŽAƒK°€Ÿ;4iݪÓBÝ…Ô”J¤Ò]›ReSuvÑcàáqyä—‡…`Ñ#€ËÍï¢t·í ê<7šTË8­ñs¶ØjI[ªèTçæDáÁ~Û>àizÁ¾}òƒäÎäÚ²m[×U‹Ã`V•£à×@§ËnV•ê.Ò,]ÎF·‰ãóò™uð©OllÝG9 +; ì®ó©œ\‰Žý¶šÖæ£9¼û®?%|ŸPhëv¬ñúÜßSe‘ÁïÉŸê ö-•›žÕÂr%Eëîþ‡#@Q"S"–5˜ïE ’›ã¢O©¶JH¡HÇ;RI„bA]ïH%Õ®†œ16åKNËi. ýUwRõ;RQ>Lr€ur©(=&Ý œF¶°Ñ©$ƒF);mщïH%4Jþ´±»\ ‰~<§r…,Ú 5d ºÉ‚‹Ä–_û…%ƒl'öí +ñ¿}ó½œw®I+=A~HZa’5¯ÙîÁû]´ Ì¯íÖÑ÷ĺ(ŸÈ‘~¤Êöa_¡ ÞgQ â$½Cu©¡—Fm[þö ]´iÔÜ-…W袅”mÁ• tÑWj%ÛÏÉ¿ÐÈŽd~¥øúþ¶ºk¸Ä~cþ”Ò²ˆ;¼cùW”–ÎÍŽIر5>ÕÏjû³Vr“q'š…wÌݔe`¼‰¾ÙÃvãÚ >Q÷Ô‡š¿ÑÎŒm÷'ûœ5ð¡ø±;±?>]ºÚ“mÓ,Ò´¾Z°R×õ‚RHeÙȵ“Hí‚!, ·¹§œÛž¸sÙõcŒù¸Ž»æ¸+׈K–‚ +ëÎðÙWÅ G(ɼYm;·,Æâ.IíêvÕ>Scà*xZÒQš6¨¢M¿ìfºïÉuX =O’8«m´ývÑ}xd'Á‡÷[Íñ>Ð û‡÷ébËK“÷U°ðû UNL¾NëºÆ³³G½"]óqjt”ß’ÿæ/´Ê9ù§+I›`!ª_ûÿ³wþ]Þk§/ #ë†û鹃ÄÊn«t/utšs[iïC‘qÛ×ÊrJÞ²jxºÊ€$–dhÕ”R{’9 +±K3âÅ:û<Îd¢yÇ´9ªÙ +±(åçÝXªûÛ±9é>ÎŽ‹ºG‹^Å‹ç:xåY‡K°àÒ+5›Ÿ~ˆ‹ÿŽ*ÿƒheÿçÿ*j­ä: Œn?^S´ÖãrCö¯})}ÏæÓ‚:€>Û1Ìbº&2ŽLø`zª`m=+–Œ¼Ð0ˆHs„:ÄA€:{HÓÇó 7IÔÕµt¶ã6f#y7»hu0U‰­3¯"HÃÁ¢¢Èvã³+—E®ªßFBEÝn¿[u{qþž:y&Ì®äg_ÔûñîoonSòfÁ8+á<ÌæâÕÁ±¸±M*ZìÌî×ÌþýáA—Iõ@9W.ãƒò¢Cͬ¹ üÈoLgœïwéÍ'@â¹Ð‚]û`]î®áàã /–i¸`l‡—j~¾[:ßAľÎîº,Wø!Räkàä ÉÒûªœ*­p‚·é®°:òãroOãÎ1‡ g5¥c‡>‰¦˜Ù4õ4øÏ|ËɉC’]Ëi‹Å³F¼K¨ôb°Y¼ +]1,ä[PBeë:FÈý>”¡4P]½öº]~ÜÌC ˜È õÃÉvƒ‰¶|Ok쇲•oybµÎ +PßOˆï£w 9-yü3ÜÂû1Ͱ>…¡…I‹ºvYnúeÜÙ5X 冾ioõ€²ªV Eî÷äçÔ ¤•Ô‡Ýì¿1Іpva­&¥:÷÷; ÀBþ•@yÞÒ¦w ?ösõ%»`["¥7Ð~µÕÑ‹µv `¹…ç;6úu8~Å>ªvüÑtXÐ VñÛHð¹c¨×ÿà©A¦¤‹ø¯¨>%=vÁ1-0—ÒʃÔä¾Eû¤¸*›“¡I´ðOÏê½äg—Ä«—ħ<·„Œ{F¶NÇ­Ä–iì@+ÀJN¥VAG§A‘1)îÞPñàìQù¹ëñR}âÑ }ÚÈBÍk‹&ré9YsYÞvUÃÈž;øÌ|îÙ–:wÍS=¢ye†§nfu]¶ö})ìû/§6´=EsÔIWñ‰¡³Ùêw±P ýø?|’÷å¬Oœk€zц›þÕ;£¸Ææü”ðNQµ‰ +–Ìœa׆½ð‹Z¸ZjŒ>XÏùšì:¾G‡úU°ÁD z_døiœìdÎ+&HÙ°5é´GmgÎ=Ö®9¸´]Š–P!NΟ!›ï<ë>Lúê±;óu8±4…²ÍÙVs!éêYcLxªrŽ "SÍê;Sö‘ý®t´ì¶ß¼ªØÜtnó•ê®mW¯m÷î{”fnÅ­¥ÌeíþÄ¥0ˆd`v Ì&;èÿÚçýC½‘˜dÅsl!§k.'m¶Hîô¤:<γèOjöâ¢Z.Á‘‘f¤ÉÛ{y¶`ëØŽ&ñ}¶úìÖF—ŠW#8Eb¾ŽÞª'4˜ E Ó’…[{ÒõwÅS°]B3´sS7J퉀²ò-4Î>_c‡Ó ©µßïì£ÿýÿ§¨úÿüªÉ²ÑôÚr +¡5l°,&ÜY¤} ÉM5¬œ@ë¶Gö ~uŸ¢¾1vË>^ÖðÆj²›«=ÚÚ÷tç ²›g,ô6† »í®ks€nrbì–| ƒê^Ü'ÈnßßLEÂpl´@>Ê!š³?dsù£“´ò*tjàîižãA63F EEÔ1‰·\´JìWuÎ?¨'´M‚~48Ô%e-§V~¢ìº¼/MÄÏâ¿€¦åÖ¼Qî šœÉ]ºé+tŸÞ+ŒÖ<'Wñƒ5}•‰!ˆ¹{Ç4M€æèá—'Þm©«;+Úºlº†ÕÁ’±ö„!¡yw–€á: zwa +Šf ð÷ì!¾1м:0“G€òÞЛ½Výœ3àú!“F¯•S¸piˆXšd©¯ÑL©:!w4è=°–qü´µŒµH ÷µ¶híXÚnP‹5šyX°_P†ï + ˜MS*Ð~`Vî½<¾½Õëmx¦9âcÃ,Ïò­ë =3)ÑMq^y"ÓV«{LB|³J²îV® |ìý—ûBð¯nòl¥gÜ¡ŸºÜ}•ûq9­d2ÀžxÂò‰¼Ô7s)È´²ÜñÚ’?‰Â<7û¾&Â6ÿÈÐÙ3êôM3øšª·uÿ$§ÅT×.pSó0"†![i½n‰¸‡lÛ–Š#šHne8-zUHW(,jŒ¢\„ßL4\gN~ë[¿m2<»{ßý›äo›f¤!‰’BÈ(ÏV³L¾cOÈ ö9µÞ>Xöÿ-šø€Û-{àBÕFá²ãLøµ`\ó¦D_j5XþC[ ÉdŒJú!ä˜Í¨^}·~* ¨fIŒ¹œÚG ´>.0 +gŠ|³WŒ®N fÔ& ‡áTÒ½zÏ’ABƒ²_ýEvnNæë<\÷üªØT†ˆ¯òa¢!R}ÎÙ®Áô\Œý+ÄÛd6Å»!Ž6QZp艗 Øù^wH‚°Ô9 ‹œö}€ª”Q>ÛU^'eÒ ˆ™ƒR‡`ÛÈžÞ´ÇWÑí VBÐ?xž³OLF©Ÿ6/ºiŸB3PS…ðÔg[sçt¼]{@U UmÏ:Ag (¸_ÐS±¿Ê¾óÔ\ŽVA91íªžÑ¡í]ýr ÆyõÄ£Ó"Dn×vÒœîÕimO +i.ah$¢ü°¯ga{Ôy¸Cþg¸ÿWx™z Xdê[$¦ú/s ¡¨ëK+øe‘µÖã³ìW«Æß^—¥xzÅ¿¯f·ñ©—"!Þî·éì¤fáC’EŸŒ—ÚEò^Áí÷©ÒÂQÑéy¾ÓÂ%o‰ZfV„ÇQWo¬f§]#±‡7½ÛkÎ<%"jZ® †œÎè`… fñTå•FXÐw·Dñ²ÿÔ¬÷÷iîc.}—HŠÏšUÛm„G5ôU¸5 .i4² ݧI˜Bp›q'kºv<»(7€hã9€ úBÕŠ=8O9¡ï£–»=bQ—¥ü†v—(‹ÿ¨ŽöáÍ© ú7݆Ïú 濎þTX€oäI+^\ÔÂXÿ&Ç=Vh~Á˜ÀBUìdw-]÷ÍÝf>4èºt +GÚïo»­VÁµ—òãÿñ*Lõ/¶LzÅ„'l;Ë¡‹ìÂ(ÃÜ0GClÞŠ7e ;ôÕý,ô:Ì=y§Q#ìTV!ݯnqΉQ– +CZ\’šEíØe\MàµìªîMN⇎Ü«ú.²W¨ï¶è%s‰R‚ÐþÁ;ÉU®ÊÞàE,芳4¥·º7B,²Î- EY `Àƒ À(qÕæ¾ÏûB¨ð¾‘Ë-HAš¥òÃ#þÏÈ ·„®}8®Ç{Ææ9]Þ½D²ìÖ`+ž†ÙƒÊìã½Gç0”×m'à ÷–vª¡zªá#ní +Ý.“ëcÉ-¡QÍ<8qš»¯{·Šn"ê[¬P%ï²ÒÛ ë.j‘@x·<=¿´ðXR½düŸèÏ›s‘úAÓlYü5ÿ­æÜ«ýêÖ +0 RšÅh9+@ã­š1àXü£F05œÙa?4€[¥Í"Õ= ÿ¥¬ôµ]äOºÊ& cXùmC‹;Ì÷¡Žý½€ÔèïMN!u¨¯jç#2Þ;ÖôÖßâ­¿Nú},w¶ø±fjK{L?í±9 „ñiÄjÈ5¶Ýˆö }z¡ð4› 3Ÿ3Fôů¡†ßN4"ÖªoÐ2'Á_½m˜ïÂ6µWŸÎ©FX © ­’kii¿ÙZ+sÿ +¢„»Y½ùC4hÀÖ³ð–mØ>hOZºö ÕÌ +Â¥W[¼Úƒ½ÁÔ»rKŸuÏ>2{ò «®.U?7wQúœjþUSCÊcKVžÄì~¸¶Èà/õC©·7GK;mîð@>íÕ<]¼Z]ÜÔLþä9‚.#X¨9”’[“S™ä³úî\V#&FØS°pva¦Ýé2ðvžkê ®ê<-)yöȵÕÒ~h‰2›Ñœ‰Ôi ª)Ô³®d¾mòƒòÎwtuu•ë«¶gzK á¶…ÓS|i±÷ ­éË+ÕY…àV4Sðj6‹Äüc+êpêÂ"oÛB}™ 2ï¾Sà™±SUNæUœqþJk]üfÑ +ï™aÿ5< Ú®nÅ›.›ÒHŒ=òIê¢ÈlÑB¬™ eñÙ¢tãVßø^—6G¥AJÌ?°ìjN%;cÕÑW¾´­ÑãêvuyÚsÄ@;Ë®vLÅ[->€¡—ÁÌëŠ1:é=}qPÐIy¬IÎ~04ßጠW"M—'Ñ5lÆöÿj“45ôÝT½6‹¶•w°1 ÿ°…xlZ7i34¥iãcu’æŽ1$)0‘V<8ìÀòC#fWbp(ÏA;”EÜ©îç•€²HîW•’ýdçzˆl·‡1YXPXGeOªƒ°€ÌÅƒÁ®Ü<%ˆaB#‡ê] >% ÞYP[ +•›î|ǃ[â©ISʰQ&.!×éY±¡84}°­ø`›‹K¹lø;}hÒ>B‹Ï“BWÁ¹µY8µ™wòâÐÝ fß.WÁ¹4òâ +u[ˆÓ\…ø>úN.aÚ¨:OŒrøŒm4`²¸{7ñW'0ÇW+‡´ ÝÅ P*õU|LöE5­·Z€DyÑ}Ø«ÌÎ&€7 ‰u=Ò )Ôé £*i÷©`#öK_ŠÊŸ&RËqÔlÚŽ»ß]Mmóã*n_Î_®Oˆ/ƒç{ÇÑ_{'¨Øa°vø˜ôF¹_GÏÿû¿Öÿˆ(hº’\ßgæ×(Žá<§òA‘ÀƒûQ±ƒErÁ´‘â¿3µÃº®©3Ôß¼”„Ö 4ýøV”+®0‚YÌæ ô´ÁÍ0kÁBªU˜P›^¦:qË;}×™~eøZ+^°íÄR4c“¤›yùL‹ `6%‘ÏMô@°ÎG­=ÝÁl€—j¢W)Ô´½üí,7uu v¢u«´&ÿðêÔÒ0Ó*pŸz•œ2Ȳ˜»ÏMœ²`š÷é^t+úªvÜ£Âlv…=)É6õ¨y‡N/B!½‡ç+D´=Þ˜”xJ]켪Ÿ¯Ø¬éC´ø*,ÖTð!%ŠïÎW»‹O챂uU<úwŽïzŒ:3pXZ{I¡IKª¦X,Ì'[,\<tJCºÒnÕà^JäB™®ÊˆÄ€gG5[g¨ù85ýÜÔvµ¡1á\Q¡âE˜~ÂV*Q¹ëµãß“òÛB÷‘B¥ùý:‚º,Ò²SêšAÒÊÎÊêõ޵\m¸Ü6T»§”%5Îç± +š{<%÷­(€oò¸¨í%GÀ/IUÐΩ—ÊàweðAH W£Ð¿Kßu> +LõÚ·nAñöGUÚ ¾‰ÔB¶ñ†7Þ<›|û”¨Öf³>øv–’€¶€ê&޽ê´\ˆDÔ¨#~謳ól.-fñúS6Yh~AÖ7 ‡ˆ\ ²JpÅ6«ˆ}¸%¸Tq²÷¶XðìØIŽ™°Í¬«ÒQã›­­Gûí¦ôˆ?±Ežî*%Ò@ióh|Hdä²WVüÔд/¨]€C€sgkˆÂ¶eñåÊþ+ô?J\|l?Zž¦5Ât:_§“Rý°`³4–JuyŸ”·ãÃÓü6’(¶‡7|Þɳ©IˆðarÍ»´›Æ¹‚Í07oÖÊË©I—ì5Dÿ$^…ÚUý¤†üCÁÖûwa¡ÙŸ×øwåv‰âv{®yÅZ8ú[üwÄþÜuq…¨Ž±ÊXq6¬Xt4e÷­;û2H£Õ@s¾_ƒB"ƒøåÉÓ– +ÞQì +²ŠhùxÚîŸ>@·Ÿt`ϾBPïQŽ(ÈÎ%hA{ør¿@O wð%¹˜Í½Û +FèÁd†þ'õ;Ñè ``®”OÙýóêŽ~àöZ +ŠZøa±û·/P Â1¿Àã(Ð}Ã*:’]sãBù>{lt}'4Œô§7:Ð˵¤}÷ä’­:p!d׳ \:Hwñôö˜0×–K)œèèG÷™²7:(N~ ´SK Þˆè†ïýuàVÌÙù´º yCr 7È@ñГ?à ŽÐÁî» @ÁrYYó¿#… “Ä‹µïñ¶ø„aç´ÞѾ¤˜ +m19f;Ñáplø]Ä—ä½´ˆ0Ÿè>Kk޼ÙétP¼ »ïÞ·°Œ{õP½ÐÁV–y‚Œ>¿ó q‚¬ôˆÕ¼7ë +^;aƒ‚ìg%x§¶¾@AÒêÅéº_n*©k;£¦”-§Þ†W‘ +ðPQÓîó豿²"(ÀÛöC¤ +ÄO”Ð"%[ +Lbza¢ÛX`I#£C;c+«c]^ZÒ¨¿ÅX`Iw }çÁN,À•píAü Ϻ¸õÈF€ñ¡Å£…߯ì?Å®w„šã¤:x–áXj‰ @Þ‹+ü+;€Ð¢•WrË'(~úiH× +”½¥SjNa~A×´—¼`s#ª$¥AÒ²fˆDµèá·hŽÇëÄeœÀt ø…-ô¥4„GÔßýé'hdµÿ´³t‰ÓÍ—I ðŽAó“‡Yô-ßw"‚¦Nyܧùñâ…6ϪùáÚÃ|AUuOm8+•Au–NsmÓ©_ù…3›Ÿä pH{¯=ûÜÍœÀÞCÙ =/@PÔ Et´ÔN@P\ôÜ`s¶  ä¨Íë재¼@Рܛ셲4úßš#À »\áã…²ˆýÌbÍ"×ïBµ!0Øœ½Û›pï°à©i…ݰ}‡(±à§oú{çwU¾‰T,ðÄ+B¡è^° ï„J;3†YÍð]cXÄùPY²UòÅwà‚rŸ&\P +™¯Úsª@¨êï¨ôÅYƒªÑQ³ðŠ T*Íqgì|¤BõìÆù\·G¡xö§¥<\:08Ç4­î¸ø)6Jö"¡Žb"æ6GÖfòÎkÖÖ÷,ô7:ÈŽýš F0RÁ…Bºj[(ºó;e äò':x#:GïðÎìþVäÞÆ¦;9ÐAñú0p•Xõnt@ä^ò†J[µùíÉðÜ8cÅþ¼ÃȺ“ßFñ?U\{˜–¸Ç›y²£[ƒc˜;öÁ½G|} d°`K`PkNƒñ­!‹†…ô}¼ËœCJyµ„öHØð'¢LWœP¥vð˜¢ëÅ,˜þ1‹G{½øL½Œ,ÂbùX +¿ä1ÔI™PÖÂëèC€µ1‹¤Ø£J”y ¼Ã‚ýÀ =´>è{Ìî5–`SâXŠ‹L8 ¥™!”Ï •³n¾Uçtxàß%›`¸¡Wwô’vwø[X€³ÏH{è…Äã#×éïÝSŠ$ß{0Ý×ø·ªûÝÌêø:Ø™vÏGõä¶{_:·ª®úØË€Íš:ŽÙ&<‚a î&Ÿ[w!„Š¡[>\œ¯íáŽâHÎÂoGju¸˜MB×1檭ù®*‰ÍKxÑ¥œÛºè*†2ùºfjÈ2ê)BQ>àâ×CBá_‹û©.F­QÏG”:°À +,Š÷éxFÊä»|ïKX[ë–®^¤{ÉÑQ¬­ÒªŸ“@ì‹Ùƒ^HZdòlÙ°…‚ü9hPkh¼Q“)ô°?>¼b§ÅØ¿ÝÑ»1 ªÖŽÁøzðac®rÛ|w¢¹7D %òž-+ªÿ)Z˜ÛqNßãS7Z°Èh[—‘±{-òB S`Ç,Ì2PâŽÇt=öÉFZðXy•R¥¦üB ^Î2‹\Ê>hårä©^È-,¶ÑÂb´€=_÷¼ºuo´€Ö8F”Ï}Àä† h¾A”Ù ýæ'^@×MÔJÃY¢xm‚£µÿ—³§/¼0œ ¹qýÖ8 Kû£Q=BƒÖç$å A }ÝüHÖAØÓzèÿpÒÏ‚XâÀŸ^ýy!ô³ã™`Ù8;Õ… ìå7-¡¼¥/1w8å3FN Žbæ +ˆg ï!ˆ×ž¹DèÂ^bªÈ,ï¶A 8èãs$šB¼J|®Ü’Æ +-–š:áèwÁõ…̦ÐA +kÛxÁ,†öYÚ°äÄ k;,Ìêþ7 \7 ¤½q[߸Æ×*Ï€ÀÒÅõšó öP‘EÔô§íJã7n@ÿ/š@v½å–nÜ€.bðršM-Îëvt"£ÈÓðíÛ†çßÀÁ,˜¨2‹66ƒÖÐ䆤™™ØŽ € ”Í`+#À·ášhØÃ)Dh²C_(†ÕêŒ  +OP­oFœA #߻ŷAü£w‚D&Ҵù+O·6d' 8-ŒÄEB÷ÁqNë©[.ã>MÙ0îçÓŒ€XJsÀi=[çâÂkcc ?@ç‚•cƒ€X;¸f[>¡¢ +ƒZ%ÆìA¤é¸À"ÜÊñßú?­EL¯–W<é ¯â_Ú¨ÉÄžJÞ¾ð¨EÌð™JS]òö¬üñ]‚X‰î¢ŽÞõz• |$—g on½JËUû@;ŸÂDu2e31èöG ¢‚ŠžÚêu#ÔW›ã»QQ˜¾#ðwÞÉpÖê®ó0ŒÅÝ5½EÏÚ,ýÓO=k¼-ܧ?qí¿ôáÓªÏV&?k£Xƒm®¯^E«‡í»C´Ìát,ÿŸ³wI²,×uGPsˆv5Ò–þRûÔª&휷ôØÒ’g<ókïÝk–ÎØ¿%‰ GÛAÔùµÈϦƒœ¤-âIÍ=šÑ¿.ÞYþui:hð„ïG5ÃWÓáµ#¢é°T"/}ôñIU\š¸´JµÈqèfiõÍYÁc‡P͆Ió:œü#¿º üÑI/Ä”ÇÒ¬ÕÖn^š=Ûg]¹ƒƒôX-…åøNJ°ú-Z®ëFPÄB|èT¿“m‡¡Ä®cêù %”ñe~t†8 _ªÆ¿75èVô aˆ$e‡nI×VÂPB«8/Iøïiú‡éÇ·`*]!ÿz T,]I°Ë¼`ÏÿÈ¥‹V”Kÿ +/óåI6g=}*«Ï\ÏmV¡¦ØÏ¨¨Ý¸àÚ?CÃä|YD»b7‹;ÈjßÃa)Ä¡w ð¢6^€@æíÖçe¢Ì¸¨Öß ¿hmÙz[åÂFàÛp¥ÀäñFF@®û`cü2Ç~|â[oóù«yà€¬‹k¤ÿLøk?¯$§/é?‰;\ Þ1.éß"¼^&ü\·ôµ e‹3ëWMrb!­ÐØÒ?V¡ó…Š‹t^Ò?–x"By‚xdÿ7Ð9³•»:"VºM( Âûë†J[˜âÙÿ•^¹}±Ú€Ü¤¬ÿŠà¡Œ~¹ æH쯼gÿ`­[2ù6¡€g„Ø}¾á"Ji­»êh½%ËtuE¦ ê‘ü—ˆÃ¾\ãüùxÐÔóCŠŠ]gò¯Áÿ„à5û×ÄÛÜ—$ƒÏü…x6öüÅœ&‚Ât#TÙü Y¥ |æÿ*-(‹éIbºžÿ+Ôo›Ÿy‹s#ÊÿU®œPx«Ït€½ZÕbç`¯,ÿ­½è@?¯sþ첓Þ@€Àå?pÚ•uU(êØsÎ5‡ÓÓ†$ÒŽÕ°4áûBK“]e¿+áÀp^{â‚V$ ¹Üt у4¸#‚Öº ‚E3*€È1/n+þc9…³¸ÆÓ%⯙û‡ˆ FÂQõê·RÄ¿ãß±A:S3R{Góë^Z± Ì—€ØÖQ@ л* w2Ý +ŽŽ‚OÒ;§Í²•böŽÂp.ìÑjÚ: +C¢žË‹nGGµ±ì6÷vÿõî(¼‹¯ŽBæ S³|üHañÕQÈê6YÞìûïÁ:ú–‡½Mm+¶ÓGêvƒ8®hG!¿5Ô94uôìsyi¾aXM—GuÊÕðDí{_™CšŒ µ°¬ºìgÓÂË…ÓÇSîD”tÕµÁàܯwOÔP{ž%æ©÷6‚«+ðd8»X–¬_.÷S{·Þ¡³}àÄ»?kÑ'èÝ>xÕ/_Ýéq"`È„ëè¨È…šoý†0¤2žÖs‹ñ_Ë»ßP¼ +ó‘âëØ1ú5ë¿÷†Ò†Å”>nüƒ!Á@D<_ÃÖŸ <|W}‚êí7 ¯b7V±›žþÞPHjf¹Hί?ýÙd!õŒñM?!«dl{©ök?é€ï urQi¶Æ¦vx9~õŠX6Í>”šG?¡ðk©\‰°Æ÷ÇÅœ_×~B!'Ýb$QröÊ?v›ðixGG?¡ÄšÀ÷ëÚN(t ²Ïšc6úh'@ÏÞLˆâ\û ™Ólø5›Õ“‘02 ö÷œÃPxï'dõíx ^ÃÑOÈ‘jª¬Zߌ¬&@ó[CK}‹.®ÿÙP@’`? +àŽ³£à'\öòÔ.ÖÂÖQpÅ„‹xžÿ¡xž‚H佑€ö ¿êLϸ1pöq#¬§<·FÂ_óûqÃ’£(’ñˆ¹é7 Æ›%|ãWøÐÉD„ÃO‹ÈT>ϾÞý´çÅè4!bén3 ¥Iáó?×6i.V>ˆWYDöuçN¥á¤NÕÆ®¨”ƒµˆ5¦´X]`¬0×7E ySî)\3zÚvdé[D¾áˆ èO0DJ=Þ”¼SrGIïÃ6ª…7&FôÀ „Ę„dNµª/7‹ · ÂB¡’é‰ÞÞk³·þ°óÂ?4‹§ˆ Eo‘˜—Ül +ð‡äŽU.é¦ÞÍÉP YzùäÈé·P" +¼ýTôŸ qò{ÞN´%;ʸ‡Rà°ôò±4LÕ ¦—BðÁRwU ÿRáxCŒ‹|X ‚{çÁÆä·Y”þòˆ÷ñ®ýž°ÓöcœpÒž;ÉûöxõÝM.(ÔA!^Ôä{)ÿ;‰~|Y6-KQ³UÞÃûÃkb æ×5ôn:À‰Ç÷˜c9Û‡QÓÜÕU=Ãè[}I}š"bâ‚hs…Gè–ðÛ"r¸•¢•«ò4¬ “ã>,¢Ý(øÃÂÆAÓiÍ;úYš‡±˜‚Irl²b"ÜÓ@M0Œ"áX‘ +À]ÆUUc: "ÖV:ÉÞ Ôüê×ìÐiNãÕ‡îœ/è4y©¨°¯*ADÙ Óäp¡ ¬ör²¯YÝ5C厜G?@·šáïÈ º©Cέ½¡–ËQsA'®K_R¹~Iõ}B',¨écm•Oèä[è¥S³c'Äxé¼N7ixc'+½úøÃ;y„¥D@hæ†ãìG;Èçš—Â}wŽOXjK÷ˆzº8 ÊcRHÚ~`'üÁ*èM†8Þž<ba¿ß<ù‡ …ìOÌäß#-öéWwlÃLˆp8Ž_é«ý»ƒ'b§èÌžü©ãº ”¦î°r B‰•#`( +BÇ£¿¼¡(_šüó §¡S·`®ñ§ã½ðêRå§KSaçúÞȈLx§oàÔBðEÓopjqÐ M{ý€SKÙ"’ÊGœòï“ùYò£cgƒSžZzÃ(ÿA—ç(uõŒò½ŽÛ;öúÔÑår¹ªZÆíç£|5àªi«¡¥ð…Üa”ïNÔš±ÃŸuQˆð¶Ä Uœ6嫽ö3ŸËךB7<ûƶ§ßß0Ê÷ <ǪÃþ†Qˆp郪ãã¢<…îê7´þBS¾y3ÊšQ©ÚàBÖ)e@.Å&mo?SÇJç¶|]å.\R.妿£žŸ¤+²Èàk^>ÿ¿ŒCM…vÔö‚”†Ml+ÁFò†:Å"®°¨»Â*„x¯:¯‚Ô$)îõ^²TNýè1ÖW!FÉi¶<¯¸ +6_×ëqÃUƒÆgÎŽ é¨W²eKw¦ñ «,çv/<({Ý`üåƒÄ;¬,´¢ÓÜ{tÒ6XÕYœ«Pä/×ÊTsw_°JÓÍue;ê Vu4±Ê _ua'“«?÷ÂW]èÉ~ñ2¯øªG±#»wã` *´á ?ºÃ¾Öð^HNõ`MÝúì™WQ ŽÚÔä@ðRh_¿jS“¤¬Ð&é¹£6µâpÅø~y,ßLô"ïdÞ–Ç Ïh1cEÇj/N-vŽ‘Ÿ[7j½ÄÄ/Å©W¦{Á'´™Ûçh¡b¿ë\d°îë•Ð^HëÑ•tb¸ü´Ö³-ÀÖ˼-Ñ/œÖš {• +É ÿÂCÒ¿G• +·"?>Фk7Äå§Ý©ý{”«'° ÒoùeP&Œ“þT­æ[Cð¨ZÍøˆ¶~ÅS=ÊW3Žc·5¾á-Ä$â:;ä‚B³Á­A,ûî¥äKÉ“ÙObÜáÖÀõ e ²;Ü[Kíµe ²ö-¢…¬À«h5YY‡{TÓ\ÐQ´š‘ÞìTÌý“Èõ¶N÷ÆxÃ-=•ép ÎéןªÕ$Q½‚îr[¾0eV}TcÜà–/:^‘!ö«hµA´4‡Ž¢ÕÒï\>€ûÃ"D…‘Í d=§vÜ d=š´%wú Ì’]…>Æš˜õº¼`Öër{YOœ¬õ©åZ’ZÊe^1Ÿ÷ˆÿ†C?å 5QTj¯õ²ý¥¢ÕAj$ðzç©E§n£ uÐöŸF'M$6tšm™„’ñAêš`­ö™Šú¿;M¨«ƒU£ˆM(Ä`›Yï9hB!Ô`¯•µ#šÐPƒ³‚õP~]iBƒòhóÌö9x3§8ãuO<CSS~eÉ`ëM +1‡Oh~é,ô œcø(ÕöCȲžô Á.Isš¿F vvÅÐPjE·†G÷NêRŒÀ˜Û¼ùéØcªíÎêg‚zñƒ:ñ–í×/D¡Æ›$&Û^D¡¦^¼Áõ!㇃(ôÚ¢ò +š-Õå ½™Bˆðþ)¯Õa6¦E¸C’Eèsa +5uŠ!Žs+áWñã®AuÝzr™|à—ÜÃ.ád +uu³*èF—¶ "Hù°úŸ¿˜B]ƒ¿µ™Bƒ¥_TWS»ui%¬2;¹¿¨BØEŒq± UHˆ™=R-æ*4Ùc…ÑÎøfÙÒ'îB ìi©‚”¡E屿Lï˜ïß(CK]íâjy¿®”¡¥ßÉÒöT®“ÇKk•Šç®Y2Ö9)ÿ¢ +MCðSÐìE +‰¤ CH¾ 17É’!9´I>B#’ ì»TÐ9 B0ò=”¹lü éA–XÌ?è•.ü .2*2Ã`çuÑ·,MÒ—êEê_ÉôÅêjºÖâWõ û§kõcUŤÃñ·|þCœ€‹>.(“àêúë6iä­x +ðA^ðúÁƒñ€_ásî &Éù}Yjn7‹ gÑÌqôùeɶ~'‡¡^Ò±ÿÉ2 ütŒjíOÃ~¿#aa8ƒÞòÀèšN&E¼Øóò$ÕB_¼¿àÎìÿØiGþjªcöÍ/Ge2âqýÌ'FÅí\žŒ=ûËg."ÏÞçFæ$ZH¶ˆ$ÁŇ}ŽR­~Gßóˆâ»` 'LT9PP€ØßÇë0(TU階îÖFð^þ*Ô,µCí šMõ‰±ëÖÀP‚9L¯tkOàþ>I6Èwår_j*3"â‰ûÒf>Ь ÷>[¼/išlðžÑD7À· 5û¿~çZ°ÂADE e6–*køQÍ +IVDpœ &¹R`õåjn’Î÷ñ»Å´ÐQ•!%˜ìÝ_Åñ0ñÅ%Çð’OÅ`‹ãlA ÚVÁÈR»Ó·±oKsP\v|à5 -ðƒ˜¸–:W¹á=Ù‰D¶/Ž,„È@H½M¤G^bíÝ™ +±U’/”ÅbbkwuEq®qK’£&På .ujB‰pz„·’x ‹&²›œûûOš”ÏÁ§ê²Ÿ÷òêåHÈš=w‹ Ot +<ÝŽ>mèý]Ìñ.-NÎm¦êãnàgçPÈdî×?.ÒuÇ)UÂT¦+¢ ž+>Ô…™¥¸ÀíFäãz£Jî7û&Þ.ljQÏæZðî+þ0ûEdŸ/ï¤uœ=S«!ûE$à¡sŇ¹ì\CêL¼Ï' +y„WVà#ºäþÍ) dãÌŸ+ѾÃ',˺ˆÕåSDÐ…ŒÀhåêößîÀ‰ˆ ꥗sc”‚àfÚ‰sn¹ˆ™\ÝMcÏ Ð^å‰8SU{C\~ŸÂØ "|¶/»VÔaø4kzÑMW-|ðhqˆÆY±a0éå“¿¼ý¢QgâÌÖœœlk!ñàŒTsÐoÀ[†ñkL?¨íГ¹¡<åkáÇõ ï'¯ÔØ‘(öÙ䫉ûàRƒ~ƒ¬ˆpõ‹@Ê#T® [ß¿‹;ÃFvª:8Ü• ãcq@V~ŸZe_&·áã[ž².þ Ò—üJš€3x)<@lØð‚¦©jrsh.fÐûÚž?*螃}nêÉ¥>á)è9Ø&p1ö +Êñnò6,Ÿv¯:}} íñ“Iw¿CZíC[1i+†½ø§AG¸¦@Ǽ*ÈþÁ!çøN]gÏÙ©ÛÃöŒøoÀõS ‡‡¾‰’\€„1¯ø­k°=Ð>oø …˜¶ßß_ø­ ó¯–ÄÚ<à[ã°µt¹12½\k +Wæ4ÛÇ5](ùãèšj)/W¹DíÇSÿ‚ãªDâì Ö;Žó¾š§6èÜp\¹q!ÁÞa\¥Ô)2ø£+âãj€N ŸzƒqåKÅæ…ÞJOv¨E!|Go,‚zGo…³ŽCTn?Ð[}[}è­ŠBiûê/ôV ÝÚ»U‘<퉌rc#·Ç\nÈ­išŠÆ‚wäÖ$J¹àyÝoÈ-j>Ë~04äÖ¨0n |<_CÓ;r‹Ê©íž¬t~ ·¨›âwŒ;íŽÜºn߸¤ñFn|ª¢¿Ûk'ŸÈíu\[—Þèªu»A·.Ú>܃ÆM¤ÿã¾ ['Fh°ø½úù`·x!ÇŽ’`;tkï²£¤\P9u—å‘z“À¢€ÔNsíšàZðÉkŒÚ¦ð)8‘[Õx`À¸·ÊTƒƒ„V/àV%ÇñØú Âå'pãV"íx­È#Ã>!×^x­PM¹{ïã×ÊWùù@iY³ÐO‘÷Ü ¥ev¨pçª5(Þ3®c—­þe×µ£´Pî@D7”–Y“ÁË·\ö”ö›—òr”Á”–ez޹ŽÁ¥Á Ík å‰sø…Ò +•€!3\Ä–v•ÁÈÞ©§aÝ¥S‡b­´Q³¾I£ô¦4$ª:·G§RHx9“º)»€bç„®˜G§.$R]eP©|ïÔ-ÍÅÁúô»NÝâU¶¡Ö#»@vê–Æ‹mH{£n>ZÞÅòZL¿ìº)ïQ éSÊ}GÇn‘8þÅúšzÛZwë¢ax¶î–R,ο*+’½Û±x}„ÄÀÐtÛÞº›Òó.àìˆÃ}¶î¦flì€KÏÍcÀŸýFÿxµî†ÚXvïãî1€•š¹Þóº·î^=ØWëîµg.­»³eðêÜ é!X@•Eùѹšìº4ìÆÝÝ$p?ílo];ySÞ. Oh’}:˜ÿz‡Ë²V—¶6& +–ï²ÜîmºÐŠ/¶ÂÃíílÓ-‰b(ߨоµé– +sW'>P¶éBOßVd]w‹)j5öPº¶é棢ÝÑ›&wmïår©uðÕ ± ¬×~›èŸ!‹PrzZôÅ?Ûsc©¾/ì‰}Óž›I"–#S¿Ì¿N™("  ì}:¼ ×DòrëÓáú$…úÖn +ÁøQœ¼`0kˆº÷éf(’;*ž`í »)§f +Y#ß;v8× +#‹”¯Ž¸y8Vg&×õÕ±Ço;,^-»PÊ.vÀ/Yî-»PÛ¶c+»Ébü–^ ërmÙÍXLøÐ÷{ËζŠÏýTe¯ÜOk®joKlÔËðš~¾%ðH®£ýËô?eR'¨ æ.Òÿz Ðãƒù¿.Lê$„E´ûh?f^ ÝþÀC.lÐv&u¢¿œ…Œg^™Ô¶¦öƒA£ËÐΤN„¿ `1È@'“úÑ­ÏžhWÌÁ¤~T›yfî5ÔF7&õCmH‹XSܺ“:Œ8ƒA{Žb%&D?Ô#„ËÃ-Ú_'ƒÚb˜à°R¸|2¨'v}‹XI—žAmÔJŽ¥“Am1ÞG…YäÔÅhgP#ÂW~²½³.òçx܇_¹3¨gìÔä³¶1¨§¦õ,âaÃàdPOq[ †dN5~Z¯ ↠GV2¨¥~Œg=‚™´3¨CŠþBœÆ‚ôGФÀJãAœN1Ü oYyîÄétv.ÄéĤJ@‡8 'Ô, ¶ûT |*áÕ…7ý¸~Íîgža©W®ÓýqÕ¿ õ¿Æ¨_Cý™Ã†Rx‚P½Oõóòâk\ùÒ>Áîü »Î~Qv¾´}QOxÆEJå;_ZÍm—ß`À‹.BRqvºtçárد _:Å$=V[Ø ½:] ¿±øê_ú‰8 rI|éÇËYˆèCcãKÿöSŠW}»xçq%L?g6~¦•q}7îÿèjçz‹Ä1sú‘åô‚ÕÈ:˜Ó™ ˆx$_ðbN?J”Úƒê îÌé'ÒÙhy]Õ<‹8ü÷ËÏÿ×¼úšr#a:© ˆúW_ÿ“0(ìÝ@|«×ù4ßÅb;Dé,¼ÍøÉ"ßA”Îñû¢Æ«s,¥—Âkº?ëFðèÞñîÏBSv j¿ ÷gùì^¸¶)ÿ,®éƒüë¼UŽ3*»&íuÊ?ljŠbÕM( ?‡Çë:ì{Àß@ÏO›2§Jàú=nÊŽÿ2ÆÍ0°±bNæ³ÖóÅŸf;»œi!{ø¨€wöÑzò›1blñßxP=4qf]†}û!Ø­¶À[•íßÙHëv +¹Ó!,¿ÅtÜi]²aBJÎ[GÍ"\ôÍ"V^wfTóU2öŽšE$çÛúã‰ytÔ–’‡ë^Zj(Â.­tK¸)Œ_÷–Ú'·£“8ü?ᡳ£¶8ÈEåÛ)ˆ§¼à,1ƒ»uÔÖéîùê¨i^˜YðʇZïð»ÄÙöŽ~MgûúäorgOÍŸ ÐÀÄ ÇÕ5‹Ïfšý„côÂmæh¦aiù¥Èå&nÍ´—c{xE ¦½™Ö“ ü„,‹Iöfš…PÔÏ·Ù›iAä>ŸZt¢œÍ4ÄxÝÐvmЀö®öµß&J^ùuIº ï®böZóÙUC„+ü@ÅöjBqû¨§È4~6¿ˆ`¶÷ÆžBû^¶)ŸvcFõ–´¦ÇÍòè¯!ÆÏû Ø}3ÞèQþ˜0=Žû)Ï'Ï4È$}£¿†³gÿ¹Î›Ÿ+ÙO D¾4ØímÏÚUj?lKæfvbd§¶u>¸W§mê=ýr÷ëÚjƒá­¿]wÒ•5µ'_­6¥à–1W ¯ÜhµM!/$ô)çÞj›œÿDD¾;ZmSTA¼üú†%SІyV½ÊÑj›ôöÊê¹=ZmSˆv΀[§oC)Ú‰óðʇZ‚´všÜéPKÞ¼Óý…]m‹zh­ôðëÞm¶¶Þeñ­Ñ†ÔeQ§¨üº5Úp˜º¾¤Ý%È)_€ô|ô/5)±7Ú°EÞw²½ÑæÛwgûÿ9$o·F[1ìÀ¡Û­Ó†m°ê¸@#îôœ}4Ä^º™Ï¤õÓ+âoì§Ð®ÊÐv›^8Yÿ2¦0&eYóЮê¤.­zƒvE—:ƒ6Wy!»"/΂Õ"Õ gC-‚l¿°+êÌÚÚß»|Ö%^À.S*ÀY5w`—µxÇ"èÀu¿ým8Õæ›ïë².c·÷ru=éâ5™°É9`]— ²ý'OX¤@jɡܘRïõùx=®3ÁýðáÌ‹xZÐN7ÓÎ$CV(™¬e +ûÀ;©öm²>ëðð›ð°µßq´ÀÁß!¢}¬u'Mááè’{àºLB©=µÖ`À˺‡Ûñ“Å„z¼,DÛÔ+ßxî½hJÊRÔPî=žhäŽ;¾+’ÿHXå†ïB»ÖÖC©é†ïŠèšÇ ßýö÷áMh4»æÜøî¯Í}»×ñpwEÚáöO˜î𮨈fýê2rû¤'{ +§ ï©ýüËù*´s·S¦Æ8ÓïŠ&’|HêÞeÝD†-‚Kˆ8ÊŽÉCK:~8J Ñ”•îèÎÖ)Xà8€V¿Ñ§Þ˜ûDwØŽ¶—°ÙÊS/¼wnHv&l­ÓGñDwH¢þÜ,‰Î”/èYÜÅ9 Ë5a¬Ýu©Rà¦ÜëQ¼à;sÖÜä!²Ã¼Õ:;Ÿœ“ýò#ÊéÄ™NçŸ0'é`‡yþò_>¥(î0¯Ër¤¹.\¿À<| _Ä™Üa~ +Þb0J}Áy¿ý}渘Ëûóª„#iÞàò…'CPQ†'¼ÃKPüôGº¼ÓÈŠ=¥Ýøî=뎄Žb`ù€wYä@ru}À»¬®îÀ£l7x—eQ;ÜÍëŠî²d±B.nGw¡ö>ÐJ­7t—©ó‡MÜæ•þ%/èVÔkEV¾qæÿÂ~J£’ê X2µ^ÊŽÿ2ÆApA~Ô¬R¢Ñää;°÷ Â[°f——7ífךÜßÒÂÝ0 =•j*\ÈÅ"ìt—g»pŽå*}”àÛæ­y——&ƒÇØb óìÞÓÒ¹€&póPœÑ邨«³j|2À/ Œc2Gïró$úëÌX ¥0Oª2Oª¤T¸X’Ïêfª†š=TŸ,m¯ÜBÃîè#Ìó‡<›,˜lëøÁð…"BÜ€´ÂÒÓ”Øývžÿž¤Ä kF A|A°à:$qDÊÅyQn3ä_y]ÄT5ÿ:i4 bœ±ö¢ÀdQD›Ï¶Ÿ8YŒ;‡Í•ç*_$|92 ʼnêöêW§ï`-êh·_ÍC‚ÄÔŒF^&ƒƒ½aûÞ-«X1ÎeÿôùâˆU†§;Õ÷0©ÉW¡ÛGÉk\®Bx^3AQjçg#Ïy-qÁq­íH²ëà“¸^ƳѬ-­þðULk»yª¼­•:SåoÁ{iž)É£UÙÈî‹>Ö`O¨;Açµeåœâm¨þW©ê½ÕJòæ,…Ÿ€0_RðWÈ`%5‹µœERº^•¦rö?勚åôµTó·y0¢hHS2Ñú ß*V4[2´UØ.à°(m¸#£}œRúm«dÝLçu,‹HW)øï®ør^O·L’£Jº3ˆì¸šþIðy¿‰øï4øÃôúÞ­ïôŠãK£¤¯y‘=½"âëVõ™UgxSÙa^å}¤Õ™‚þæøî+­Î°|°¥44]qäÕüå;}¦Óü%lqdÑpƒ@ÚnO§E˜Ïeþ.áÏ 5€|K§—\È’}=¼·tZÞÏ+`ÛñJ#ÈW:-{BáNŽìG:Í*¸fÔI¾I§¯m}¦SlZ?œ +øÈáø™Ng\²ìCùñw:EŒ7÷ ²WºäS¬F +Ÿ Åœþ$Vÿƒ³ôR½Ùi |,B˜Ñ¯ô—)ÛÚêÉüH«Yí4ûtÏwi¢Ë<@!ëvK«™›ÈGìA¾ÒjÖe5£g[ïi5ºìXHyÝòkâä=òk”l}vñ¬_ù5ÊYŒ£Wz­j8`Ëë’µ§×ª3 n¡ßdW9…`z>t³ŽìZßÛàÈ®-p'nï÷äÚÔ +·üœ^äj/♜d³ýJ®³˜ö6¸>mɵҔ²%_rkÌ7æ’{¨ýí¹C=˜¹äÖ*Ê6Ž÷0ëÝRkDÏøjaE±¥Ö×¹tI­EUÃWF}AˆWJCõ’I³õ¯úÚ¯𕨠ÌÓ¯¾X½^ "ߺÑJDö^Í%â¿ÝOè=ÕJ|xI R‚…ö‰šž¥$Sñ+Œâc™u¨–j¡Ãî¬Úeÿu†:É—sìþl}OÁàÊÏEûÙ»è &°¬Ã6Ÿª€™3š-†¤4dQk+2“^AÅj3ĪªÆùñÝUyO¾¹º3ɳÓRš¿|× ‹+]¸m%n»q.•ÌÛÇ[&>œê`c)-YÜZ$GP¿[CgI Ó¤á¤íô´iÀê'Ò2ˆ‡"fðä¶TyF«•ƒçÍQœ"î_Í÷!#6ƒï¢>íÈš/òƒµQß“5ºGïVâxǶö6a¨³F]Ioîb†‚ŒØ2l#u»îðmÈåÏ%96oÔF²ÏÓ^£Ø*Ê´CîÚñOs—N=ïŒ'È”ò’ÕX¤ª0YöG.ÙALmx ®sÉùàiÆfÝÜÅ1ŨZPÕKÝ “UÌdòLÏ`%û«ˆPm¸·ªyÚÝ<ضÚØþcÙ?9aX!§¢°íï3)R„-úÕ»Ü̃çŒOš ‚.„öŸYü™¢á!ÂÄçŒ]Vl/Å ÑÃRÁX(²ÙQ#Û!J î$ÉH¿Iþöù¸„å­~€n‡déÿæÿö·7URjß(“BîÛ=õ’_ÛÕ”)3"šJ *Š£E–y’”ˆ\PØ/z(TLÀB‚”´ÄN²ñ_‹ð7áö¥V)»T–cFçcsàæý‰Iø¸áS0qNøòØ…ˆ¹/2 :Vk†¢™ú9òä‹ÌAYÂ,€øÉ ëÅkª\̾œZ’¤Sþ£­dÔaqÄ:ñ+A\ÀÏ(ð÷ºo%j“ý­R¿Vô4FìG²#íÕVˆJ8´³3²ø‹ðzì¤h:<¶N©Ep~.Jï”"V°¸nB¨NzEöÓu¿†’$ GÀPf2àð}’ª!MøÙÆ×ñÖ£ø0lRƒð̼ôè"·üîß•Þøkr?ö‚ú ;!÷7=Vãî£J ûœÚ s6AZ!,ÑÔ*MÈÌY¸Q––˜ì•6¶q|xÙê#Ÿ¯âãh–>Üžä-BÍCT•¼Ii·¢ÊMµ8ìÊŒhðLæÎø«p6aš»š…(ûÎ4IÏúí5Á-˜! i'gA/ nRÕ¨¹+Ö¥râ·¼Öo£Y_?u¯‰” ¨[Añ·[gtGwP·ÂzrÙ®¹¢;(h;·{Íò º[걜û Ó:{PÛBXnŽeTh÷yspÕF +üIâð;˜s§s÷÷¶(Èm`öÛ^Ù±”øhäâsð\÷Ú1XØq ÜÀ|Ûienâ Í­ S?(•ßKv+HŒ@&šÜØÑ"Ò¡‚¸£9Ÿ¬ö×Hèp]áÜÛ…ú„sK"c°£^07jªXÒHýŠêðÝÁJ=ª3l¨Þ…oíÑ?‘ ?@¼¢qá°u5d×z‚;¸ÄW†X‚­p‡î®ÈvÔ—~wØH´w·Ÿ©”+¸CŒûÛvÌ1˜°ƒ»Ö~ÒçÒºCÄàJ¯T)|c».—ÀUY^~A»~¶o^˜«Ëbd•Úoh×y}²˜‘oE9ФóoÞ†ÅÖ ¤ëò3^Ƥ³—G¢Â˧Yo®‡½`–¸åÒužßvÄaß ]— é +u ¤kg³æé“3NkIåíˆk£^lDüüÝ[Šo g1˜Æòl”8Ü"áÞO×9ÒÈÁÑÝ€ +‘‘tAtÜ(4Zè]ÅdâÃfÄͼ‚Ñ3nåºE5ìg;ŒîZ°°NçeI]~;¦[’J·Gaop‡OBÏE€—twø:nÎm€­¶[½ ÇÍ‘«ë‚î`'߇ÿ°•4æ7ºÃù‚‰ÅH:÷DwHîÕŠŽMt‡]1œ@"Nt‡5Ä¥Š^sÌ8lèN][Ì3ôht×åf·Ë:ïà®3MÙžÁÿ¡¼ÎJe…øÞZþÊëÔ ·(HÜQžª¶>8/)£åõ¢ {€;kAUF&¼‰iëgOXÓ7!¤ÕÎnþ%â¿AØOÁÝË„óî†Ìç6hô¢7p7¾hL¦IÝÓ ^ì[Zxªí˜®³Va+‡ +ãŽéºL`m¯*Œ¦ë³Ç•ûpש±`ëÑ8Á] l`'¥Ô5^àîµâ_à®…;+ +Äóî0Uà+$×yw8C¶•ïà®]¤§wpW]‰ÃaH8-½À] Ø¡i鸎v¤RÚÜIæ×µˆ4ïðw-ŽŒ:å¸k¹ ï¨ezÀ»Fqû +G¥uGwM~Å &Üp×ã·\×o讓óh+l¥oÐ]§ˆ…¤{8ÐÝà ݲģ^èn…Œ#žJ t78J‡=;Úµt7è§SqµJ׎îF`¦'q å ï†vÝñ×ÞM²ª¡E|‡]“3_ßte߆ž—Wé´ µ;ÍU¿IåV èù;˜7Ù÷Ç‹¤+Ê›4¶C@°à”7ª;ÂÕöDy2bÃOB¹ŸÊì~دZÛåÙ?)îƒnÿe\š³|6ί…q5G³^0oÄig{­ÖÞâà_`Þ >*àCmÝ@É͇†U*i#fÂf©fBã@jÕ@jâ‹€pˆ€&“Æ7Ÿ°3²×n (<ôÚpú¡ôÐJ]" $¢Ðé~ÕþCñÔœ !æ®ÆiÎ=í Üê¶Ú™qÝ9Eï“láXºa±³r `A+ż>‰ç>ÂmN¨?X™10¯fý‘ÈÛrÜÐ'r˜‚Ö¹ÀìöÀ‹dsÙc{~ c™.\ÀYævp<3=ÂËPØ0!ä:\°¨‰š¥ú «ÇÌ0öØTsánc(»­›i"Ü´‚ÒÝワfÏ7{RÔ »üÁ‰tá*7_7<–"«Åæx—§ŸSËþU•¸ëúE „œ?þ€^†írß]!üLzyÏ`½¸®¡G¸ ƒü•~ƒðƒ×0ž6N¤íPãášþ¡1ÁŸf€I†3kõ É‚½ý hí—Fí¥”_u ®_ Iÿæ.á`ËÅ;ÓªfCìbÊ;VážÅ²k²¿&&Xç¾r«¯m,xáæo;åpcÄêçaº™6(G † rq‡„ˆ¤Nìèí½´¯V§¡UGLöË$íÿðT-בܹ + ¾Z<å’ÃvøÙòEèžäCAw‚¯Óçvà1²2[á=Ãiç¿R]91sʶ4ñn7>.vº BTN…ge†$²N¾X,Wî ÛG°D£ô“}•3M/,ñ¢¿°D;iÞ/,ÑT t[Ût+<`Ã`Ä&§|ÕƒI¸AUݱ,Q9=_~´zè9øUÑ6ÌL2:R¦=àD!;«'t¢^p¢ר…ó¹Ã‰Boi¬ä'Äv8‘9S‚“Ê}Ž1à!f…>ÿ'2g€Ò’:ýœÈšu½ ˆÉ_ì¦p‹Ÿkú¶îôšü-ëÿM´G+æ ôùFí¡¦¼ÅÌ”‚³õዌÞ¹¡X-› ”"ñ€=ÂýÔ±9³Öƒ’\óÚ£+m ªÚݯ½ˆLu‘¦„$²¤jL—O{ô~&,áwG“öØäÖXœ^„<ü”Y€˜Tè|gÿÇJžöfÚ<¢ÕäÂzu‘ÕmÔäæyâåyÖ@ < ¬)Á2, (ŽÛ|_]ÖÊØ8Ã#\ #Ì*?*xÌX:@±O.%ðMP®½Þ!þ³@ü¡;FQ<‚eHo³þ`ˆÍ ]ÏŸ·arNh±}1#ê˪»…k°Cb&ozò aFè̘ñ󢏯÷EùÿxÂ->£â¦o(G¹Ú;B·"&f•=œ­Ž¢êÕú'yCÏ’O Q?ž—zâT7»æFÚñt±õ%[T &h1éÅÉó©ÊùÜÌ+s?ß™ã–/·æëßYÑö'ÎPXY²ŸM]€ì›ta1õÝ|" ¢aùYöH¡„Q ¡°£-€Ç®¥SŠÛ‰ïY&jL­ˆñËèĶ vtJ°°áýصíÝB¾ôÓ!Ù# ¿‡iËuãWð}|^ 2s%460ƒïÆ(npÇ"xìÙ!_òîüæÃñ6vSÔlvдèâ>gßO?,ÿaúßü$ËŽ 'Å•ªõ»Vlÿ±‘ðm þ™½VIŸÎžãäò%ó*ahSS‹¦îʃW4¼°˜Ec¶÷ƒ,xœ—ýsïU©ÝA`Èϯh³$Ì6r¡¯5õêDji@‚—÷šÃO'z!‚½ 4º¦‘/±9Ì¢à3/‚:ºúØö½_ àÅ·!LN¶4Âí“_Ôžso´\û²ú Î&Åû„ÕÔ&¹øÛ߇Jo¢˜Ù‡p4Õ\<_ç<©vWsDœvÒMìÐÒ÷á52?ºvf: ¶<—­jSÓX[ïƒÊ-574°å1™Î  TZ´´PeCÌS–àí` ®:Ñ]´p&6zˆ>¹æÌÔG¢Æ÷‡ª3¹èôòѬØÕt“nØlkÇÆ{ùIéÚiU¸ƒØ[µ…q£¼hX“V bª,zw+â*ñqD<s6+bD0ñ€Œz· À™Àâ‚ XÂ1ùŸ$’¿ÃžŸÂ©¬“ýjÏÝ ªe΂‹×VÌ9nh*‹GãÓ2ó†¦dé +&ùPgîDSQ~r1¥šj €/bØM¿ Mµ¤ƒÕnö!&4Õ¤¬ P‘G(ð}¢)‹pAElý®¢åަ,‚+ö Rëš²Çã#¾([Sq ©w†:Ѳ{²?’ƒ)ä[—;¶ß­Š€¶ƒ)$(|<»ÇLa1úåÏ#íßhªÉ~Ôbìy¶@SøÏÜõOžéަYD|BM5Y"ã³/Ý[w4嘼 “ë€s4…µïj“r›?Ñ”=ÂY6<ùš²?0OøSÈ-}¢)‹pQ/féå?áÔouž«(ù §Z¢2•=Íì;œÊj<›ýNeÑ’Ì´¬œÊºÛ?à;מʪ``Ñ~‡§²n0.ý†§¤-ÎLžÊœjƒƒZ½@%¾M…@_‡h¹‘Tð…ùlê·òv<á#ÚÛß¼ ̨ýܰœ®˜LvÕQ‚Bû‰¦šìаH}¡)ìpïz“Úkö‡BÚ9uæO0©RÐn2×É5Q ÔCNƒ Ëžüü8 Y¢®œÅ»ÝqÓhñ²«\KvÜ4ˆ›-ÀrǸã&Û3jÖpiÊ´qÙ¾_áÒ”öó´Õ§:Ù .MÉÎ%µš\Ÿû<©wÀ¥Éy8‹°‡¸î@f2­5LôÎÛ¤¾(ŸÈ3¿#Îû©ñÀÑå¿Ïá™4î×ÜîE¬!:Ì 'øAa—1®8©ÇQƒà·‹ió9~Èt.·¢ºà¤¦a…z…IÞJ†G.ãR}Âq!b‹ªj +ï0 {ĵ®ÆZ·ê“·˜Áª·ïö%ܲá$8^ò7œ’B9q’ï"ÿp÷WœÔ +c-‘~v”ä÷a0„´6”„wqïRô‹™ÖooÕXÌhóV|j5ާÙãìÛáRScÛ"ÊÒ½òÄKø‘\KÛ¥jæ/áãï¶ð/¼Ô¤Î·Äû/Ùi·_x©ËÔÍ6æ /ué©¡,lbá¥Ù^vfhÄéÀKCâË ‚À4Ø †VGÂÛæLÒ?AÌS.@¾ ÷|óLƒ¼9{rŸ/pCEƒ¤"œ‘ë6Wô-Àù©ýøÃÞ"LUƒ-u§þH*ß§Üo <‹`ê}K-7à´þ ³Ã/…¥ ê—¹ÝðÒ’²Í “–ŽÎ9ò£áè€I‹…ÿ†«{¿â¤)?¥ ÷ÝuÃIS«ÒiNeÃIóŸêfBt7_pÒ+½pÒ”²ï¬e»ã¤ûïéé¹V˜F`¹¢*7œ4XÆš{$ñÂIÚž÷sYpÒ«gðÂICޜ˰޳õ뜭LûìM(èÀI/´8iÊíA"q¾p’FÂì\-t|2Wæ{“>íeÃI“ÕA{>kÌkî-ž†d¦ôÄw¤´þa+æHKV…ÎGKo€ôÛ_|¸“6”@Ô”Ù " §Þ‘6œ )»n8¾îH ÛÖ¡$r„`v¤„ÏE>JdáO¤„ãvÆu<ë›F]XÈÂ#°\ÌŠgb9 _[yv»‡f.ëw Á%à ۥ_îóU.dšñËÎ/-¬2M6'Rò·ì_äBu ¥|¾@¥!ì4Ò.P)¼gÀv‘þÕ•:•£,%>̧ ’r£9Ë1Tê:máÙ¦ZÌ•ú .P©Ë³xY¤tý°$*dsÝòvKšà4UÍç…•º$£m»Ä¨õ•úûˆ:°Ø’÷’~ꇦ)à€Hð±'jØ "€bÏ”`é !…‰‹ýu^Ò”{”ïÆµ¢4…ìurÚ+J!Z›¯¥Éi1_ôArÚÒâÄ>²ejß””»Óê¼µçá¶Ns´çËBhCHáícû³}3“Ào,˜­¾Î^ã¼¹1¥þŽe~êâÈ1<œç#èéâXdµ˜”ëÍ.îX…šü2ïpŠkÕɃ7ïL6 )J îâ­â~cíæ×ÛnÔ"èŠ [dÌßÑQØ¢‡·D—¸ån@: jŒs"êÒmØ H-€+ÍE€u‹; HGeW +ò£+ío¤A‡ +—¾ +6Á§é¨ÿ|µ¼ßÑQeBÙRU»wßÑQ(óißâÉÒ¡Û}G-‚.°9[wßÑ‘ågÓ£÷eã)g׸µ½}G‡†aš?ÎK™ö\|`õ¸b·¶Ýnã¤ýoŠôóNª¡aUÜ »ø-ˆZí-î=»ŸwÖí š—RÞMZsv&úÀÆàãѾŒ0f¬Qþ4Å¢s÷ƒfwû|ÛŒGýaàp‚Ýö¸Äa<ê ç4f‘°ïfDÊ»§õèhò²ÝÖÂ;e³> +î)Øp»õ("ܺBFénì=šÐªž/”Í{<Ø-Gñò^7rÝ À¤ËoÑÒ|ÛEK)y³M¸¿Žp1ÞGí7ä]ñm4:ª>Ïi0Š3ÃÏèêj&¿Þ£~î He?äT/ö4µUâP¬šŸN£Xi m¥$î>£ïCôm8Š˜ð"Ý Gß›á4Y^ RwU4õS´Y󼀿ÉäxÜŽ¥Å=âo)ï§©ôµ /©ô´Ò‘A 'È.m®[-*Ÿ¸º¾fP¬‹êÉ2“RhU]å•9«ŒC°ŒÒÕ±{4 èÛú +ûù#sJÈ6Em…Þ3gãô´mŪ³¯ÌÙ…*8øã–9»JP† p¿%Î'Kñ}sÍ /!äWmÒT|%Φ²‹íž!EÊWâŒR,ƪ÷‰³~/ù²ü‘?ÓdQ× µ¡¶ºçÉB-}DÔ°RÊÌö¬¡4Àþ»éШñÅÖ|BÌÏ“UB‚>µ°ØÑ±ï[f¹çI ƒ{rù¶[ž¬²€µ¼²$ôzäIüöµûo*M¯<)áb,C*é¼òd£¦¨­C[—ó–'¥×‰UøÔ»A7–™[Õ2’|+Î÷@Â`0E‹1Ò‚Ã"y?9銺 %ò溵îXƒ×Pe¹C˜_w ÍÕfPÚ=º¼ðO7´(³ »Iã8iõ©óÕ³Ck»+­Øâµ?päÁöéÓ5sCiâš¡I„ò8!q§B¼jØ8¡–^žZ› ¤©Ê£=¨4¿Ju¨gMùßòø·c²!<àrbšâ[< 0ãæ"E9¤¾º» ò¼üÇÍëë<¦ÜÚú¸’"|ÔÁŽæê…¸"pêåIG4„œÂlcÛƒ9¸h>x}P7´ ˆ•—Ÿöˆøº°6ý ½.½Ÿø,M.áT@ þ™>íAŽßq"\RŠ2²ôàð'$UžxŸÇå» ®®&«p ³¬Ê—=•´4F<™Clõ=\œ!±§w6yâ<üŸ?}² ¡(‰’êì*Ã|ú™›ÉŽÑðZ£l²{7ýº,ЪÁI ž~£««~ Íâڞص5Dž± `} +ô<<Á`;5Ί}K •ESß” §Y\ðV+Qrv•‡¸zèsÿ~À?@€~xïbx@òÑJü@‹‹­K}³cž@›¤ ÆOJòõõpR´øÄü¥K]ªmËkËî¾ZôÊ#4Ìu¥mÍ4þã½Ë‘ÉËxÈMÿïvh– žèM—Õn/Râ´Nø%oÇL1ßæø‚p¦YŸ{°kRÇ~—ðu6ôÛ}19ºÆOëB…ÞB1ܵþ­¿Ïš_uìj¸Í,´âø©Ad/óÈ÷O”ÙÅeMÙ:ÔÒN*°µö†–JJk†*߯™>ö†aJ=áãÚ’j.ÖýNcÄ *äý†Óòà˜‡¤EŃû‘ïžT|ݧ¢–¯ÊÏö8ÀÏö$ß?‹ ¨½jC?¾ëÛÏg–CÅY[#‚ ³ûjñmæëbø7,ê5âHó?µ‡Îj×{üÍ|Ý4-I—(DxÛ%SáZTMÉh«uè²ö T‹î49Ï8ðB$`¶Ÿ}o.{ Ë8eíá;’ýUH·Ë¶ e!é“§þÞn´[UPCÕ­Ýá錺ݎµÌس­›ÝZÎN–FSϹäžxÆû'©²vÄ$¿¤/4§m:{6Ÿ3|e.ØœF¸P¿ü…º×¢=, £î¥»dTlD¸ÊNN#ºˆüÆ:lƒgã`»Åˆ"¤î·ýÖ¢¤Sëî­¾gf„ßS!¡ÑŒÆ^ª,Y_Ã9Ð-ƒ4&Î7Û‚d¿ÊD“]ôqì?¹»‡,·%ÒÉ|džÈ»:æVùê²yiøä'ÞXñ„;å„󂔬“Öý¡ûdv™ó&ȹÉMª8΋çm+ÓÝÎ*5Ñ[õõÛÀ^:ÑÄ¿âÏ¢ÜK“v—WvÌ NøÛ‚Ð7¸¶‚-&¯åØ.ˆð~êù« ·É ‚ÖßP¸_Iðu¼²œìry7írX´£zÝn$3¸¹…¿”ýøèýœµGy&vû•H,poÚ¦V½>…c;/rЄõÅéwA¸>ÉŒK J^ç„‘ßlSSù6\%Qu_|EgksÅû,_Gò×n*éÛÚåšÊ–Ã%Ô„à†êö«Q¨©Â@SbæØ¯Ñq£µ‰ý’Â3êÕ8¼¯^ydtoueÀ1þÓYÒ,¨à!‚ÝËF×cøÏ=aÅÄ—gÑ&G1Åbøƒ'°x„³Ely¤¤jí¦@ƒž p.»xÛþÏc\·q?9†¥÷õSD`ΞnK.?U­šdŒÖÛ<Á¿ãnYX©K¤û×"8&å®óWñ°S&A[8C8OCå´£”ºåc•PS¦Dïì·Ôðdéd®Ut41LWûÓÒ ŽìÃäø·S £EÌÃ}+B{©i¨¬‹è!(áÊ^pP‚òû]…˜†’ ìT mzÿ–Pà{GÛqì ծ̫Q ‹Ògi¦!ÞĪ.“:ߪÃ×BìÇÒ$Á§"xAÀj©Š( âXD.|M_Ù®Ò /*ö>‹V o1,ÜÝýaàÞ/á+ÎÏ•oEkpðT<•"©iKC}ª3CcL¥*MW»¸PëÀÁýœqjB––TÓ#ÜØ²œ¸þ>Må’ŒY»V…Ó“\æÇg±spaÛðr ¦Ã]æ…Û$#%Ý+å5 c,fNm¥¬ü{Þ Ëª<ëàyÛò•„êŸÐK%°-¹X!ÆFù&äá«XMñ(Û Ïuºúò{Oµ\ ?‰¯ÂùMËdE½çç}“ÖÉš¤ZtaGË«r¦lµ`7O-+žw€Á_­>I,*ÕÑ;+ú`—v}‡VÐ)~ö÷a#Þ9,jA{AÌúW6°‰ð}„à¼MdË–ì9ÄÐÎN1ªÑIžÙ$·ã“¤G»ŽvvÞàUÞü*jOµzDS³€5ƒT:Î/¼< CŽ¢’Kãº9jþiöi/™‚$kÐßÿà^i„Ï t»uh†þö—÷_[vˆ6]‚›—¦êýUüšlðüu2R`çSòŠkT_¼M~ëeò’!‘~!Â'·ê°ßQ¢ydlÚ `ÉÝ#è0k eªÍ#ò,n6üµ2I€v—^9ü¹±¿ñuû°†fÔJ忹ˆqˆ(ίk•WÔɳó[ñ6(ö0¤=Ð|Mï…ÙŽv2jvÚ 1þ»÷ra£ÿL<´· ”…@' & -†yGGbñEPŽGÄ’#ug% jõz·º…ÿ¡x©ÏЫÓzÛ]mõ'f‚ù?j÷I8Z‚úJnˆ¯4äaÒ³ÿˇ†°þø—àDÝYÆÞ¾ÔÑúõ“áõëÌ8ˆtz„“j-’„€ƒ0·¡çL3Á±yÄ=>‹»brµ¸­ì@·R”ÕO¼ƒz'¢ž/Zêã}„kÞæÐ?Ò ?ËÑ5«:‚†ÄýƒÛ&¶ÛúClhß Õ©ëvÄ·l%UÐzûÅÝCÄ·Û ¾nߢÈrv v¤¡a&0Œ ·¡/ä¤%£îÁ§”üœÓ·“%)Oÿ-Ü@ØOBpÒÌ +?gÖè=d”]Û—®ŸÒåÁÀ="|PÅ"вäÓž l•ø3¯ÄÀåƒ&”=V%$%¦òEÒŒWã^«ngšà>+æ Ϊÿµ%äø{„LRÛÈ¥êU]踢³¡Y[T¢|U÷¢\æJ5}¥ÃéõpÛ0OU:D/ÖþÛ“¿$éX¶£—o&¢–2“ õ½|Ë¢¹â©Ùý$]„êÒÍÿ{ò8H¿þ$ô;54Sõ‰8åñ஘=Í£Ñþà¡ØÝ?“]þÀÃW–÷`]Çí†ê´HZK‰§+ñpaK„Ù^ækŸ:‹{,jÞûkd’ñ¼xš¹ÙB̆ö€ô˜öO¯ã›¤/ÈRè8ص˜§HY °g¸n®¿ÏƒRð˜•7ÔMšìxµN´ŠÉ0ûôAƒ¿®'©Jôɺ£%ÉÎóÀÝŒñ\Ôhk:p¦ƒÄ¢¡Ÿ\9›Šˆ¶©÷!Š[VîZ¬]¢¹ÅWY¾‘1µÀH3Y¨a–6‹Ú.G ˆ –£öز8ÐÏ`·W?tÒÌHåIØ=YÇÒ!M’òˆÃw€‰´Uvˈ©¼e!ŠŽ>ó­W({:+¾zóLš/50îÙäs:4Džϸš6™m”RžzùirßëN_.†ó÷M‚íôÿ¿ÿ§pûÿùn€qhüÁ€#Aÿ r{ –GóNW}CnD¸¨¡ë3—[ǺÇì&jý:§È  +‚ÁˆÛþ»è›Ý›Ü/À¯E€Y«àm„ÓjŒzÚÞFK§=„©ˆ·íËéíê ù·íÆÛÁäAeÖ¥¦›ð¶o‚ìœ1D¸´NÃ¥ Ç?›¸WzÌ,öIŽ–L騳þÏ߇ó$ÃK’¿Þ ¤dÂáú¼[¯byhÕiˆ wx¼üb%1j0%›âΊuþ*>ÓÐÉÌ¡Íô‡+Š©Ÿ0jÔÚÈv?ÈYoC¢Û@?€?uY^áuÃhpäeXgŸ|P€9Ù1Œ'^(%g7¤Î¹a; Æ:2+õÒ{¡ûz(¨ó‘«c!¾Jñùa+Kí«Æd±`µán€b¥4µnX#~0жô>ã£ÓÔg´Ï!Ùoˆ®rÏ@/U‚Hv†ú9ï#x=3ß[@!A‡ËP"x¼cÒ%a׆(9Ñö+‚ý#”±ºìPÍÒᯠ+­z½M‰©2ÖÐlI§¤Wg/e¬" Ýø:'ìàL´aRaf™n¸ŸïoYKcå©+‚ºë8†ÞÆ¥ã-‹š¸…9ÑæÆ÷a£û·h—“¨S¤ˆX¾ qÈSœ,dçõÄ·¡àÌîfà(ÌOX“ >X¯bÙ£_UÐÝ£¼Ë­Ä"f­.æ‰!‰EZt/Œ´{M'œÏ…ŠÜƒgGå5´Á­iL›çlÆ©G°k7þÈPŽä—†„t©ýâzYͳ±²ß”€ømnW ´è¡póW³<  6.°!«®Ù^£‡(¨7–»Šœ8"º +•42°_x.Nî´Ã%KÿHIÐ ¦<Äø«×%Qo–ß òÌ¥CÌëÂ8 +ç +©E7ŸHPDpˆ| {«: ß˜q{Eˇ2HYñú{âuÆÒ™Ï©‚¾çhÐ.Øž1Kðˆ¨šÑ÷ÿÈ1Mpü¢?åû”–^šjT?M¹“'‚/ÓIT´ êL‰¤èbSú¦þG ç2:8XåÿÁ®%¸`J½ÛÀSoõÄ ÷{f?é'î÷ïciÖùÆýGû±IHç…t¿ö¼'¼vÉ¿ù0Ï$Fì7ÀÇۑ-r´÷—tß>™¿ØjÞØuÄ ]Õ$ÀŒìÆFœýÚ…§ðx¸IµÓíðU}¦yNÃôoÚ®ùêØÂÉ£`ðçñò§¼¼OUà ÊÌñ>.}j¢¦w –Šö ¾¦'Šêæÿý»šûjaš,îpÝ; c¸0>í¡Ñž'.YŸt"wÙq>M²–È%É–ª±JÛU§á|¶>Pý§éí»ÖÐtûb“ù‚kL"ækŽHjÜnÀ¯å«Ù;Õå5N×C†+È‹XèúÎ/þTøàJÍî½µºœ«¶ÕΕJ.«+TÇ ki,sur#¼6ˆýÌvË^(È sZo%|4ÙhÜ…Ü¡}Wáé–ßEôŸ +ê`6çqÉß•fm~~ñVvu"¾ü¢#G›ÁóNàHÀ˜¯w¾D%âv¼ñ¯@¥!ÅÞU½­JÒwvq`ö}ÉáO†ä(žO'°IëñN?èÞQnà gû¾l…—TâPÿ<Žÿw£½l¼¦<£+…=£®ò¦¦Ÿ2uAòÆd¿=N¾Ï‘zpw¦î2eo¡6ºØo{&èœˆàø–íº"3g/£€PHªæP»|ø÷!×Ð K ýþH*U Ù~zÕNÛŠ†ÂQeuº8q jä/ïsá·z¿³Q0Õ¨÷auÄÛ •·–ê ö%†nÅU^®n½q»ƒn ü<âþõ¨ˆsFÖ{^7þ" +jŽd,àE–D¸ô…uÈr}ì?±†1YDŒ»çy'ÎW¥í ¤ï Åñ4Óš27û0)Üþp} û \Œ¸þ³ÊÐPx÷wÙ>ˆz?Ÿä%§-{¯n¢¼“Â_QÌ +z´WÚ²mS c’…øÀ˜‘¯B ½ÌùM¯TòÀY$Ë`N‡«çÏ¥w » ÃâH²‚Ô vO|ê©a.IÝDõ}PÇ#Ȳ͸¾†ÊEÓËs ÔþÄœ‰?MÿǨxñóbd)ÄŽ?§wáwž §ÉõŽ YÝa +üÎZë·WA!ß©èõk˜å]<-²=ÉŸ,ò‡BÎoÕe¦ì½BySÑÁÓò*].ò¿;‹3”*AÓûèbþt²Àf• èB1-Ìš* ¤Œr,Úžë—9ûg +pÞ«Ò²=™®ö-¥ª SÖôu¨:˜L ‚ðßE(ê$à “‹pë…ÛLº6Ú’x½®p€ +¯˜¼åfK}ÚY;ñ—„HÿƒëeĈphWà“Q&ë`h ¤hÞ“²q5AW.¦d;¢MvÑq6y‡<ãg‡”š¨Q»kfZŒå‰79A7D°PzU­ÓÅrà"hÿWü‚æ-¯®Õ©õ„oÿ‹ˆ•§ú[XrZ†æXUå—A6qGuÙ#\êÛ>˜m‰Ðð¬3ö ”ñøO(jÒ÷*ªÿHª“VÎBƒ·@¦ƒ7U;üiå]½In‹¿=÷·¶/'´!nÔƒñ¤ÂGÝ|­áî˜É_%k°©º¸…؆_pc«…}_U§[J`…M¶f»Ót ÃuÜÂO SC¿.ãtýMþêN;é:žèôi8P´/g!b†©¯ ¿.ˆ×â_Ùî‚x•”ò%«úÏæÍ0ûÙJ½ho B߃x:@({û¢¥ ØÈx°›ÞyÕ#pÞ"â)—cÈ#@Aµˆ¤s㉈âý‚)lpP3D¾Äìâ ºK8Ôû-k| ¡Ž‰|iïO4Û°óÇÎxµxðWà†×ÉÁGCÌu î¾Nr‹³)„F9ŸŽnƒ^}B7Ùf‰‘¯B¡¥èŒW™^0AÄSE³PÄ w÷ŠÞ¼’âîLZ¤AŸùlƒoæ1:ІlÔ¤ÃÄÞ’ÂÝŸÕÔšèaí .«O1 È]èë,þÒ5?ê¿ÁËçŽ +þ(|Ëo'± NÌãwm1ô·OËùC™<úlAñ²ÎNBñ˜‡“_«O¯ªŽíIú“΄¡ç¢”ZI¹Õ³K‡!€êgþ5"j“»t9_XÝb¶€ Î r¤‡Cè5øÂàˆ¡Ç$“êmÌÈ#*O8;Ž¢òõqCöfÓš)ïŒË÷Ȩ́߻HK‘­6ÄV»ý=³ÿ1tá}Jð‚$©³¯·qC FÝ0WËÏ1tª†ZÄSžþF ÊŠ¨ˆbÑLÑè0X +¬0‚ñù€ƒºûñ E¼ ”DÛ 1`³gnö&©Ú1LÞUª—ª‚Óu ©hWø¤UOÄ0ÙÆ­è×Õ|C ëŸG†B'b˜ì™VøMö`˜ÿÄø¨e«| r‹­(pJÁîæÛ/(箃xœ1¡L²#$ðŠ­}qGšþ´˜¾t[9Ã`Oú‘üëºÒhÇ„[¾#Õ&+6êEÈAõM¬í”®ÐáµCèp=±^С“`é^ÈÁøf¦ Ò9tJUòµ0(Úqôàÿëãç;akû¤=ø¸AîÀAºÏЬ!ã¹MÀX ÎïÈéÊ¿rͩ܃¬@-ça°á9ØbÇT>{÷…VÌ”ØY­BÒ!Ö?ÅR·E@çy^ Ä2|äKìIIV¤/±4þB‹Å⊠+…uvä`…X]N~ ‰×ÈÁb2¬ÄÑ5~ÄïßC’¢¹ë¼•uAx›}M\Ãb£¦Â"IìÇ9À÷Í‘Þû 9,¬ª7qÓ9üö÷q÷ùЉa©sÈAÖÕ½ÝÚä0#ÙäèÌmâ·cú(%“×úBÐ6ÇtHGý´ÝÄPkú(úäGܺ)©Aú+D1à0"©bBùšÐgõ ¦ðƒ€ë$›ËdüßóúOñ‚F±%ûMì_©w˜0u›@]ä)7˜0Uzè X] + ÌQîc’Ÿ+L˜q½Nà…Ü` úê¬hèñBËiYÜÐãÂ8ÄNs#;?=S½¢ƒô06ð™?ê éa‹½¢—».àÀ–ß>AÛ‘fÖÒ£ûŒ¥Át­+à]Ð=© y Hì0!ÉÕ"\ˆæp*%lA¯ê7˜°üáÇ +jÆŽd22ûS”°âÖ*h½¡„IŽtS]ò@ 3R& óŽ¦æƒÐµíÊ^°ï…f È”;JxJ/”`Ä4Å›ü˜ e.Ü$¿Jÿ'L˜œÄÐ{ڄ‚ñ=Bßzøßà„%Þ¿³ß®8aùä¢G;ZÀZ×µ¼’fp›=õkyçœïÛÈQ¤ØAN1O58ËÆ½Î€eãɦͲîu†%0Ò‚ýðB ‹:K€ˆ-¤JN¸° ƒßz‘3ñ]À„…“­ÞàÂ"¥ó;¸°h»QÑ–Ï7P0µ Up‡ Kï?„ %ëâ^¹|¶ãˆªº#4]>ø7á?¤Å=F´I²Òž›E$¶xÁQ‹($<¡·h¿R‰y]È›…Ÿ3êB0QZ;ýÑch„6\ZÇäÛpúqå!®ç/‚ýá¬)İ. +f{̤𩧊°eS‘A´zfØO|Î[Dp<Õ³Á•ý‰w#'Ù23|ø°ñy4±¥i×U}µY+–àÑ Ïð  +g{^¤JÀ#™µ±Ó»á_ˆ`™ÿ¨ð¬Ùæª"\è"­é1~KÂ7«¡·çg»aFü!ቈ1/µSð™¯IwbÔäœ]Ü'Ìeþçoãú^„z’ÛsnÔ÷0Ú‰¯£Á‹m¨à¦ñö®$e§Ì—ÇoޱsûÍ푈9>±§°w%¿§—·Ô©¥F–IiÒ¼ÑVî¤Â^äÐAr +€5ˆO>‡ ©áI…Rœ•{gpwÙ!tüýw ¦3,9û×KL® X1×¢ã[ÊG„W˜ŒG^;þˆáˆ!†r(%«ýõÀ!ìVé(…Bö òº1ð}Š.ÏÐð]*ËpÔý3üUx{~Ä GÐyÈ€œ +ðfåƒ~¸´>vqÿ°Žë0íÁï­Åï_ØÓ¡}aŠd¢æøÑtù³q7åE§Üñ0)J¦o nŽvŸR©ÀÌ13X«ˆpUuTU¦æ^:— ?eFxsÜ––‹°LXkvæÂLI…ºýÕÿ±>$\ÚøöÙÚòÄù‹!5%‡«ñaý7mÎQ‚͹ÂÉ£Kú2î/â‚Û{G#¢1Ÿ (óØØUý=®7ˆÉ3,?Xýá áA—3÷õâ5ÿ±¦ H.îsâQ¨¨³IrŸ»NhäEMz_örÆ.æcå +J[¸©Üñ¾Yüd7€Udd¿V‰È+â¿ÐOÖbÕݾcfŸò°Û½SR˜3ï+j¯ŸGÖþ)îW½$°_¸Êð)Ê©P-åìØ WM*hHj&I°«¢_à W©Ûjx#¹ï…«d:[ ”"Îò ` ª4€Ð˜ô*Xƒê;8byÕ,L:ÓìÀâËcN|ÒJó‚¯,À1ä*ò—ÀÀ'¾*bD[„å¯ð6ê©¡ýÁ:ü‰¯¦1.£U¾¾ÂÛø³‡H¾Ü¨O|…\=àÁHa­_ŸßÛ«Ð;ÐÂÆïX¾\/@k +RüÍòКD½xæsÞp–¤Ó FZºã,´ 0t:TÅn8kQz·ÀX§g-f lÄT¾ÁY‹t‹Iµ_qÖbkÚSBpØvœø · ðåcàóÀYõù”WĤçR+B€“(Ê„Äï¥é„ýlÄòf!5¶‚Ù²zAY€b LÙR›˜e˜¿FD Ù·fáÃâq0¡K¿À,|_d>|ß ;`–À<~5¶â/0ËÎ:;Þý¬ Åf-Þ’Aó [ f-Ò1 þáLÌšr*n>yCY3>#,kÚ eÍ8ûš1‰}¢¬I‘º­‘~EY“e-h}qY“ý)ÛlOWóAÄ8€((¦êU5ÿ°àvl5 ­ñO“|á_Ø +ÆÈëbànuW3’>h¹«ÉbD"³ªò/pµXrÂÎi‚«åÎÓÉù£]À•®§N†ìá&s ¬EU\ìw +@¾`ÖbOÃbÚ#®fÙÚvéfLYuF´¢ìO™‡"8D¡Oü ³,§>,B½ÈfYDû:¤Â&ø€YؤØ,¶I;eú˜…€ÊÃ8ë‚#ÁS+Õ åœ0 ûœgl.Ü!/µ”Ôf)ùæÕöw8ôS˜5H‹,È—Ú¿ ©~¦.0®o(+ø'/”5x±ZR–”5Xö=0ÅÌ_(kpÆÿ¢Ý0V§NHù2ë>ðUWr‚°ª_¾ê:þ0Â2ošxE¾mï¯eÝñ•áb4ÚúÀWmÞ7d–%¨~à+˜Å ËBqxå;¾j,Ì–U£Æuà+ ÇL…&ЯäÚh(ÑßáUœ_¨J:’öǺ¢ªˆ©õò\î¸|õf:PUcÄ^%WáTÕHWÇ×|ä]óBUè4<þ‹Ñª:/xÐUƒCªê¤4¡!1DÂy¡*ª·qA*ç¨jÄj@~Ѫ‡Å¾£ +ÔUA|#`C«˜ªì.[B[ù6iâ„;(Þ—wÄïÿëOB{•¤Ð%¬žÐž1n´]¤"‡žÒ½y÷ÎV¯šÕä5CbÁGÑj²Ä ¬Ë +Ë¥h5iëY P«Y¸£h5©W„ü<îh +7¡Â›ÐøMÀö55g ©Aªž>ÕšB* <弡)HÄMÿÓ`Ó㧺>äÂôäNuÒ9 +—àNáÚÐÓUaë€SC°ˆJœžêÔW±ˆŠ˜/<ÕYb++„&^xªÓ: ty+ãj mVé½€FùYr“¸×¬ºòØÂeº«Îî˜E½Çþ‚{~§R¥¥†îóO¥Ê¡0 UævZQªœväY££÷I+JUmÍ:qŽÿºÑŠR•ÅëÉ&JU„Ö +™'µ‰76Qªêò„?è›U”b¤Å94?éE)Æ5j “š\ÔÕü4T2‡/rQ§K\ýæŒÆ|ñLú)¼æ•]ÔUÆ¥ãʯ»(9lñ<»HÐðU±\Ô)ô°4zŒS䢦vнÏÝb'¥vTv~í|§' Q{o"û줢TUó¯£ôy£'¹`9‘Äð&aQââˆEÙòzŒ…íÝË1¾“ŠÞÛãM*BŒ×!êzz T„ç­YD(þnœ" ˜>JSWê·q#}ï*W»BÆLã†m’ä3ð³Õr«%%Y™ÚO_ûWËnç%)ZŒ}…ø,Ÿ-…B;8 +C¯²qŠᜠºä?|rа„¼QUa¨¤±ÜS"½TÑ3&§rtõSÆæÂ)Âf`Ř½èo§HÀ¹ÖÔcòhç õb+ˆoHEÛ~ðá +(­ÛTûDì8‘è_”¢ñÕõ~Q‰†˜s†»¶êÎ%Þ¶€Vn#Kxq_e`#½¨DCÌùêÚN¿.T"yVá‡(€=¨D1+Yý÷ùuåuzRÛÉEͰƒSÔÅD°Ómˆ™tpŠzäK+Yݲ“SÔˆðqx‘yrŠRŒîá& +F§è+Þœ"?áô§J”d·VA±QžJ„íÁ„ +öüÕéÞ3šw`íî\Òm gྠ^Kî? -Nð n_@C‹cȬÜ@C×-î…(}jÿê>©äkÅ·´"odœðF‚À|}nCÎI·X(;_¨aüÿ¬ý½Òd»®$€=Áy‡¶ÇرøOšŠ;æ82&ôÛ‘szKH Q_‘Duutèg&ö‡®ZµHI ‘` 34‹¢çtµj\°aÈS~äy.Ø0m´!¼jfõÆ`Ã$Ï©`N½­Ý`Ã$³A€ªižÜ°]ð¤HCØxÀ†I.² +¼°¸a²€«ÓgŒ; +/¸€y-ÆšñšµÁc.2|Œ¾‰šf¢Èº• °â¦IÁ†î1T6d.ØÐ-{‡Éˆ.qÀ† ^°á: l¸üÔÜE—ÔØpC#ÛDÇhÅÍΉ÷YøÌã†~fž þžÔ_mÊ'nèÿØ( .t™€ؘ\ð^Uè5Ϙ‚Œ-¤Ì~„©. ‚VMŠ–7¸à½HŠç-°œƒ3dcà/´ÀÛ]ÕjÂËâ[0ÿÛBÍC?*ñÓ¦˜•šÇDu*M½Gj¯ÔŽ1=^o ÈÆq3í…›B¹Äàn”¸r“îUÍø¢]|ã¡[ ÿ“xÖkð¦uvNÊ.§õ¬¯ŽÊHøuQ½&{Ë+4 /ÎzîÆG Ïu‘)³×k°£GH2~LrÌòW×ïY¦û¼ûܯ2ÍL:ÜË4“ågÖeš‹ÜyUcu ñQÆ<ãÓÊ6zâ¦ì›»yl’›@ñ~zÈ2N–±‡…‹„]›‡ ‰j®†‚ÍsŠ_yo*f„©ƒVÏ‚ÍãDñ™×Œ +6X~ÍÉѬì}Þ 6àÌØÏ;¦ÜKYë8Î.7ï^° {HÜ÷‹e>ö‚ <Àg–_·‚Í¿zFV:k§[Á&Oß„ YÐ7 KÒÊ^Œ9 +6°Ñk\ÂøÜ¨` •IÚ¶÷ë.ØÀB{)Åâ¡>úY°ÁÙÖ@‰­:£‚¼ grš2±Ê^°Éä-!º%óÜ'&“#*ËÓFõaéÙ–TE˜ÄÖ¦ÊõtŒ4dG0ÎìC¹æqþø|E£\ó8VÂ4‹£\óð}‹U.{¹æ$b_Õ8‡L©Hß«5éSWµ&qj–þU 4É Y¬˜mœÜ9=,¨Ö£Q¦Ú"è¼R¹+>1«CoÅ,²1;åôL^ÎO×¼ç¢J0D*~Ð9Ö­d\¶cælh›ºŠ´{Ëܲ–­´PXp°qZ©äÂbèD9œW4' …= ç¨+ŒÆEâ[‹†wõkRÁų}º;ä ôS¸ïÁ€'Ю•ÑY±0ŒòÈ£¸Š­Ä'¿Çå*=¨²OH„…Ž¢DLh®®Ò-Wt’Zhg |—\mà—þ +<Gc!ûmì ^–’*4º»ª“Çäè¶eÖASäŠÃ;•|–ÍÌ6/‹¢º…¾í$Û™Þ±½:y£sA…9 +ý”èþ‹¾ˆYÇ–áÿЧs@^E¶†ñv“w×¼ÒÙøaƒïñeÃÌîOÑݧCM +î<†) æaó­Êº Á¬ŠíšªÐ1ƒ°°”D‘þ!U1md“ÑÉ¢™æËâ[üÛèê'3ªË·4âST—gu3EAÕ9 0è}Ï{P̨ͧ`15{wk¡ +üR±5% '>Ç!UL¬F§3¼×ù=¦fo„-zѽcªóC‚˜š¨N† ÜÓ£˜š9™“hüˆ©™Þ'Cc§Ç¨?Q€@v8'ßì!U@"ToAHÅáß/(wH½öR碋×^îð÷êÉ%LüÈA³ ϸ^ +àŒ×Ô·º¼–«²½o!u1÷DÒuþÂ3’bgiEµ”œ=`rËÙ-±`R #i~¨%¯W‹~©ðžZ—}k§ý ©XóÞH‘Å15;XÇÆ|\ðý=¦Š…éAe #ÙgoÁUö¥F#̶aÑæ +®™íìI+¸f›'Ëȧ=´z—£|ÑâUô +­ÞY8ÉUF¶ÐZ|û ¶MÞ8²…ÖÂà›qàQÆ‘5ŸýЬ—GºC,ö^º³²Pƒ{C‰3ÆÞö²°1t˜:+ö{˜3ÆÂ‚_²aëwˆÅD¹f%SûŒ ˆ3Z*Eú;ޱbá_†ÖÜ©T„ŸÕãjl,}=ÆKƒEkÝÐ3–<crÄÕ…sçÙI0ðEÐD>(°öz:+€Á.‚¶/¶I•+ù„ý<¹Ùh^±hÝçGiõ¼²-vswâ …ƒ'å<‚M ãI!ÛÊL¾úôì‚Û6Ä‘Ë6/déϧW:ß –97ÉŽTñôCš5àäü°sŠC¢•Z(_^,j­´°‰"PXã×xÅÀæÝb•& +Y` ;&óuÉœ22›æ=,”½²dCN´ðÔN7reã« wEvé§hÃRE}*“á¸Iµ8®úÍÝv˜vhߣ3Mñ%X³ïIüŸEÿ˜›DërÓ?(­+§™ØÉ¡zV_ •97Ýï£ìt¡Í¿<:àÜŠÐê°‹²8r£l9&P™€ï3œaS¾s£Þ|Zò‚8aÂæî䄼¦îl«áLWah@ÀŒH×㱿*‰ÇEçÊš­ÆãQT‰:·$&h1òI?ÅÖ¦~ߨ&Ê”´øòëKò¯~ Ïäm¿<6ÅÁð™óÎäwŒId'êh-¨ü«… Ó7Ãð®uÀBODÁ}ŠœT?"amÜ6¢U+ì0ù”Ä–â­¡ß³ôIf+>DVƒÙ3 )¥VÙ“z)ݾMH±ï1pŽDB PY–¾sCÄK3¨ZlÚ=æ©™û4L'>´²®Äñ%m®¾Ý¦“‹vîTªYÇþP·–ưmx*t—)^KcÙ´Ñî#j‹N¶Í¼ž€xÓxdt0$vòÔ#a¬o"GZÑû¸#X´d-YXpâxËÄŠ ì,7ZP0¥5ËÆ‹wó¹èHkw=÷FÐÁ”#s;ö|Å<õ:2 }æ/åWͦk+LÒϰ{wN¹³Çm›¯ZÝÏ)Ÿo¤¥Ñ0î‚¿Aå¢Ph&; c ÕÕf¾ Ó.†ôvçŒl½!Bô¼›â‰\¨y¨ä]aܤ;MÎ%# 6 ⢊…ÂJLc4sKû©Ô)!¡båM%º —†8: £;Rä!†ÞDíR {AÂ,žEùСWĤ#øl³srÆ ëM¸5¯üZ`Jrj(ûeó«d duͱX=C„œE'Ví¨´,‰E^jk™E¾ÇF{ôÏlÉ0€‹™p‰ÇÙÎ’ì´äIãÈ'›…柠·wÉêÓª8fÏ0Âj™ó”Á¾MQµá;üú[XwÖÁT7½˜hƒd.L7™u@’0ÆtÓfhbJdáKº0Ô„Õ·ŠësýûÓA¸Bù8Jb‹0ÝpîE¬M]nP3ñBrNaK£ÙÉu¯,bX_‹¡ÜµÝ/(×1J£jóå:§q$ŒPœ!”C÷Û£.j@¦k,ωSÎ1¦k̃%ͶĘ®½¨”à V·ÊiÄ”kÁlíÊ5ý Áu¢éä¡ë:_^ÃÒª1ŽëLÕÈ‹jŒ\;ë¬M$ä³7èˆÅ)˜O€ãÇ$P"k„ãœ2,žÄZ†/ 7y•3ñ¸ Ç ä¦Í Äɳ‡½€œƒAšžA’G¹F¶¯s©÷x9+óó\¥n™Ñ Ç9P¾<õ0 µlR*ÊâkHÏêâ{é<ú­²¥ŠÆ±Å§šþ¤pcWk4@U“RÄ”ƒ ·EAÈ·âÍBz[$:cñ¸²Œ›ŽòÎUã&ž5Fo8¶%‡,[„Þ&=ØÚ|¼Ík^iÚ†µ©#{âíèhdÝ‹m9˜Q©áL‹‡r€ih3ÌneJ -ÒKvÐF ðߺ·úîè­;·¤ËÇÕ¿ùHdH4;ð›7¶Èâ$~Êß:󗘺í›'~3 {&S7üÀoƒó֒©¿ ?ˆ>¶6Ào.˜á¶qÃÜæ“ ä`L"» ·A®Fwf6e× ¶F­±.c(vÛØ9Æ ’|›¡”`·Ŷ½ôØ|Ò ½-6a&óÚ!z»jfz[gòóBoÎÖ9‡M¹ú°†FuHr„ÍÀNjû÷\¿EYËÐ-dìÄÜâ + ³×)Þ`,LwB¼×\lƒ…ê(èÈÏÂ6±1½YžÔÔVŠ%#@Ê›90„>èReÁVXüŸù Ô‰ÙßÈ÷ÎՕ좪ò¢¨/{¢:HÝvå¾}DÙ9lvBÂÌá¤àeá¤ä¼B0‡ÃªbˆKÇÖ`xH´ÐT~ÊæJfmh®TªÉ«¯¡ÄïhN,´j#ß<ŠývÎn5ôª½9qR&ª½¸0A<”ráiR +I@…9Uè÷| 7—gDŸQÔ@‹¤êóÈaûبwP‡'5‘$qT¬,ž ®ÔÓƒŸ ¯UUÔd…{ÑwP‡µ1Y¡£;¬06zÁl¦™wt‡ÔÍb”`Ú L¥B܆Mœ¿Q^)¦t_P|j€òàsÙÝ¿ƒ;8Z#€¢ ÕnpgÇÑ1< &ÌÜÁë=£•yÇÜÁ4q—iâ²nqƒ;(Á*¢y0Ú¢ÞÁ,ìTcPtÀžÄd¿³ëšŸØ’´gcÇvx'FÖDßk€í ž;Ma·/Îj<±ªm'ªm³™jyX6•˜“H9æ @PSÏ'P„Šõ'ÈòŠ)‡Qr®ÔW7ÕîJ¥ºÉròÝî +Ǿch³£»R- ‰‘ëNfÚá]A™ +w9ø¿á]aj¶hüŒ’s°0ÕUy‰mðKÏA›ñ\I|SzëÃ]DàJ%\èj…:y@ØßbºSH,Àv깚Ҷkî$ ƒ7"l‡RTöãl×ì6 6Í&ñ^àΈ?xÁ)×»æ2v­»ØÞîª5Ê,kDeVlºj\ ýCó ÜU×i4ñ Üùv¿0]u¹YRŒéŠ ¨†¿n<ù'¦+6 JÞYÊ<’¦+8’:Sˆé€<*‘©¦+7‘ùÀtb¡M£ˆŸl?0]q\ø¼´m.LWÜ ÍÓ•i_˜®XŸbTûéªK,Š“%ìÛ!]5Ï-++{Ý‹TﮚWVH]³.¨k Šâˆ®QBzy#ÚíÚ‹l|!ºæ¨¯ŒáZx;¢Cð\z[˜ƒÊ#¤ÙAIÅv<×ýˆÉŽ™Q•ÚkCÃÛg. Õ©™·$€µñÙ÷JdÁ§è4Fô;ÏB>æV¡”j!ÿ©i6Á.‹ª¬°(¦Ú½<1º#ºîHW²¸ÈZ(StàkŽ]·²F¨ÞS"D×äQ‹jdÖÊd¢û×ö@×gcvDˆ®¹wƒN`Tm åÚË&Lƒ¾Ò·"¹f\€È©GEV¸WSA—µ'º ºŠ2÷DWO‘Œ ÑU×îzü€è*å§åÜ¿—RM[È)BtÕ*ìbŽ^ éê«~q 9À²Q4Ò¤É5? ++c$Gq3S„äšeq¡êAá@rO‚ãi,Õ^H®)s ;gqZÅäP/Q¾4|S„è:…€—l§—[¡ch¤œõýD×™–¼€\§–¼¶×ÆyºÒÝKÊ–¦2ÞäºÒìÔ=•R" ×k€ÿÄ£»õÄ0M+¹jÏŽÔº7!û˜ŸPù øú[ZúÕðÓ}æ”ü‚Q1SYL-%ìùrÖ`C«…ž¯«¿•=_;ÃÛx5Žž¯‡3ŒmÝÝó•ìþ‚À鳿¦/$À%o€!lÜš¾²ÚgIË.Å*%²­S±ZâÓZŒÝ²ãuä‡!MÓÈLr³õ)Y™O|˜“xKî*&+Ÿ•­ßR‰>(q4'’¨»B5Ìû:ÞODÖ©6˜õþ+èüDaBUØTMÍB{–³x Ží?H¿èÞÍ`+°Îȧ‘˲*=AºËšhÐçgÝñqD+5¢Gq/Ö ÁƨR; þ‹w’»2 +«ªSÁây˜a’y&w™™ë‡°´17IMRQ=ÖÌnܨÙt_e…­I´‘—™t+:µG³X…Ì4Žú©˜þÁž?y-za4¶uq)o7?&vhšçaŽG{Þ££»*è“+r °Ð[yZ¯Ñ¦:ó5AYÕÈÙ¶b#0Ía…O5µú‹mVI©É©®{m´®Y™è3lQØw£÷ߤïB¨5öÍ]¿Úv¿Ìd»Ôº®2Ðá­aWùÑË»©1ëÅl¨˜`ÒÆ°©ö5ÜzAý`¡rNbá­½ÝTÓòfgëÜÂy!åàŠò§(q>£°ÎvÐ÷„…ÊG-RqMpKxIéÕS­ˆ?£–EákÛ&Yç·Ãɘ¢7d\ÈÒ.$è(VƒáŠX&‡]T Í”Á© Ñgò7-R¸9ïùÝ$Hñ‡ü¡×8Sj .t…üÆÄ†å ¹Þ°åK´øƒ $ÿÏÿúŒjµ&›"0ÅÆ_!{®E[&D#Ø(yb@¡—½ª[å :3 +=ÊŠ…RÅB06¯8¹ê÷Lî×*C«¹‚ÓVpÖ›Î/¨º$œ¦û[+•¬‚ùç°°™8C®/‹Búæªnh_c“Ó†ÜÈ&4˜&^S •|JfÁNV:1Õ€ñ‘ø@⯇‘û¶Z3ë,ëĺ@RW$¿·ØÇ' ä¶«!œDùC"Ci€J]x ’'šóånH»W‡V…ì‚:õS¬l.?;‘~„\Ók£ÚµP>TÖKG±R"BU‚‰7$`*^“^úMˆ*¤f!·?ußÅž]nÚÊGC€>­Ùe¾=þ5Fø8÷<ꮘPEKú)6*¢hè:L:ÃØEŽ5–7íôéboär}5çÓyKý¿nÙJõHy”º-æZI9²pp­y|lÂùšÀŠ:ÏÔ07;êèzŸ_Õ¦nZýsÛò8ØÍÇ&( +ñ"–Œp‹§~ßò)±ìoŽ`äæßì a ¨jy ¯‡_£Ä0+¨>=Ÿõ™\ùu©²f¯œ×Ë1Sœ\³Òޏ`°á¿ið7Ñbõ¬ñ8‘bY(ЬÐdÁTw8®¢²}¼^4ß©º60äT )›Ù²%Ýuz¡]ï#EœÝŸEe7l¦¯ÍÒK¨`òöû~‰‘f•Æù0j9>h_j‡²®v-AˆíO¤õö5P¤_ÿ[_ÑÛ¡ƒW®ŸÔª!(F©CHÇ^Ž| +^ŽjäÖlm"²7ð;lLŽÉ F™Æ(Ó)Ök\’‘npÍ ™Úe >ä¬}ŠéÖ@d²ÙaéªAw€Û2愈j¬²ËݵPýž¬‡=uö=6ÚbêÄa /œ»c·ègŽÂùá‰pA–r#}Ú5-ëH–Jµ¿‚†~J‰4|8ò¡bv{Ó”˜(½ó³59†¸[Éw¦Ÿ/{Œ¯¹ë`å±@Ø3 %^$ܶ-Ü“,°¨ÌB/¡õÚx-ÏCø¥û|7å!Øõ ÊYÔ„¨}ˆ%%ÎL¦OÒ_)oÆ'I žFgò +ø¶VnPZÔ•â˜Ûn²i‰;2ëHCo²â­ôvÈe/ŒC^–¦å#Z£O0ÉøJ+YÕÑõú¢žÅ|^Ë®ÚòÐR¶ß2§ðûÃcô¿þï7Hý¿?åv›2’ö=æyüWmìÒ%+½²@ylÊ,&}ci:¹ÙÎ6U§T½ï?ÕøhPûs}‚‡ t ¢øveÕ®–,gŒ6 HðÄ£7˜Ê‰b<ôé–ª.*¸bWÖC Ç$rL ËMÌ óFhD†×,Ž›nW·€·Â›Â~±é󡯷ú®ü3º w§¢V¥ižÅnZHÿÚgXªäi˜UÁï±Éyü®ˆ¡_˜»–ÍaQìXîÙ~y¨@?*Qž2>2 l ;Rf†˜ö‘ë+w¿OULcV‘3m—ß¼Šáfx+N­§Ô´|!çyðC8 §Ìs–ßÌ£V.kÖ×™]‰ +÷ËjÖ‘2è˜4I ©Óž ùhØÃK@Ú €,oÛŠL\«¶ý'&m²ãòCX°?þ“cIШ–íã¹ ÁCõû[p1è‹ÎT³Ê“4ëëS.µ&jI½¡ƒaìÔÌ]Ì6Ú¹™å£Ÿ@ð_W«šà[3|z—žôÒÓÂÎ|¯­ø ÄjäM+ˆ!Á¡ÔݧèÕbÒ°b"à¯{œ^厕·Ø- ãôþÕï1ºü€–'Ûr¶qz¸‹pââ>EOþa%\AF*ÌSôj%“~ÈÉ/¿î)zRu +Y zÀÂ6E¯¶“vOÑ«Å4Ï«âvGOm¥}x^mœŽ¾+ +Íî³óðȸbŒ{"‡jŸWóq}×Ä™÷Ñyx¬¤ã¯á*}è>:¯V¶S¡¿îz¸Yæ0MÿpÌÐÃKF}S¶SÇè¼íä´µ‡Ö}tžZ<ú)/鸽Mð‘e8Sûvø=:!]€Þ“ƒð«¯«ê²¡›1R%Á+·ßS( tÎÃ=k.¤<=G±(Oá?½d›¡W+Ó~bQRq±M¦L#l¡:©!÷>C¯Vöh 9 ãmän¥¾‚ÅÌA‚ä¨í,•hänm†çŠ:4Ž|¢WûKƒñœW»ñ¨ÏµppÎΫ9Ë._˜ßÛfçÕnÁ À?õxv^íÌ@œwCwa€FL¬ê4Å÷áyµsSÈ×Þ¿Îáy•³n‹¦¡Lö6=ïÂ>eŒ‡“Àöéy•“Ûð:«Ë…W,Š\¥a³òc®wŸ§5âàê«9î}|üž þë™–Ô?çèÁYpÖ'¶9zØ|–$ŸÕª´û½+JÜcôÔÇ¡ù|`üA4}¯Irï5, ¥r‘û@¨@,³`ZæµsÂùYõ3¶£êéרþ·h¡ž®;@ èfGN~ …fÓÁ +fCQ‘ö ÍÅ4Wo°À¨yKÙ1# Ü ,4SC+HëSØï É(4rÎÑ:Ca×]Zè'{-@ ÃTKoéaÆÒ`Ã8+_°Ab_F&G–;=.u¶ã†a7d1‘[Y‰pÃ`µA.¦/eÊ8 ï¬¥à–¬³5yt0@éSàЙïCèàЙ!Ä$òÚ™¸€Cco¹üºÉ*Áè±µóù‚hg*ôBµ£_0"q”{øîí®.QÉX¹€sM@j+j^ Mšz' }] +x;(óQ7d…@ª‚W‰iŸ€C£ „ØøÄš8ˆÅ(zàÒ‹%ºêFbj2…qD+y@Ð{‡nœ‘Š_«oÀÂVØä™e¬ 8 KIÉÀ!€ô«P™Ÿ‘™’ÚÃdf0Ó´jŠø¹ü*lÀa²gY–y>ŽÏ7à€±BzB¹à0Mº Ð‡é¡Øëup˜¾)äU~À ñ‰)Ã…ÔÌ7`ø¡~Ú™S„†‰tàm>O½qÿ¶&¸º %Ú¸aðpÁ…Á #^ËE¾6¸ð¯n(+uw8çËlp¡³ êB Wx`BguXVgR]ဠԊ‹2ÕŽ:ƒ©œ‹ÑVˆ®ªBÞ¹ZؽO`û_`^(îõ5°ÿ-`€¾¶þÂMõý¯ZXñ°‹æÄŸ/ ^* (]ÂäÂ`úGš‹}á +åâÀ?-Ä Ã˜žb!›Ì¥W7à0ü¢.;™Ô¨ 8À‡kTΫ’y‡ë¤_Àaþƒ¡cbÎΈÃ"’Ô©žë 8,¶\Úš%Î7,ë/‹Ò^ÒZ;pX¼è4m#‰€Ã"N†>JZpX–.Jð#p˜lÇ*ðÒu‡©ôTõ5‹‡8 °®0 ëS’åì™ ô`laîþ†Á(ÚÁ$Ÿ1`Æ©ÅÍqÊá‚‚`è7¸¹Ãå°.ÀÐ-A‹§:²»òùbä`Tƒ|ak$Þ›]sÑ?'ƒºrf›ç4wà Pé…ÓqÆaP¹&À ˆR¸†#JÍà…é¨äèù†–IéÉît÷!Ѱ^ý±LXÿ ŠéßÝGÞ¾ƒ„eäIù³W/}íh¡±óµ -L34'戙‹yîh¡at’kï Aþ¤?Aõµ¸ªü;HhW‡õ ðéºþ *Z%D ÝàòŒrOö«Í†yˆM€Å¢”°L‡/³F(ÁVB™³²ZäÔ](aô7ðcF–ÇTbGœ]˜¼—£±-D ó§ÝhaR®ƒ}ƒ…áuŽ…Á#+ ƒ¢#Ýõ°0H„@ØŠz-ÔáéæÇlÎ(Eñ-¨ÿ%TaTJr*ƒ6‘ÿªöïaœ{b[éä?h9ãã]«i x±*Ü…â=-N° œKÝv:C°€U0ŽGžQIB?~@âFž9 Í3·²š³A6°Ð<+‹z4;v° ÌJ¬híúhX D×´ê°é°Ðü‚ybmÄÑõ2.J4ÏÓ"·@%‚#àÓQº.Ð{à„°#4Î’S%­#à8ëMz+'Bh.H(°àáínCdÒÃóC¨ÐØ +(_k)TÀŠ+§TVÜælœPAw–:e̽_!TÀ¦V‚ìO˃œP{\¥P‚åüœ*Ü'å† +°Qž›|Rs °AX( m\Št)7—~ƪ¤Ô ©kg).Á‚L„×f#Ú m[WŸ_Ô)4Vª Ú4_jžïH¡±}O)'bð”#줥mˆAn)xOÎTÄÐ\”GÂËzVÚCs©Pôó¶@ ¢'ýæ< POì0¤ôóŒÁwpe”mlãÉ.ðÐ(:ÎGsµ… ”÷<Ù3q!‰vJ’\H¢Ù€¼în™’¨ŒªMºq•B[`mwƒt!‰ ^Hâb*Ñ^ ~D™6(1¹9@É}⪅2k‘=+3W¿mHUܵ´É¡EH«¥Xǧ#Оá3çvÁY“ò‰ãyõl¢{¬ ñ€èÖ:]t"`‰„×ìpu­)W¸Dcu¹Ö×Ü‘?4n êÅ™ ?¸0m­ª,â‡ÆBŠ €Ähu…vš6ɇ¿ ó‹:‹ +#+×\؃-²i3ᘟó[vm¦ÆY—ˆƒˆðgÒ}¡@Yö 3L÷PsŠ3a3j'&‡8Õag·7›#Ð=v‹35/|ÊÁiø›8“œ>Ëô•ñXåäg£K Á–T£M›I :¤ +òkäEí­Íbay'Õ10‹S›©yî”dR†vQ²œ™¸K25N`…G)zJ2éáÞ §$H¥¿ß”˜m0U~0i÷¦^rнŜü&À¤Ý,\9›Ç°* ú>æ‡ÐÚýòŒ‘ƒaàôš@…<oñÙ^š•p0Jaðáý%}€UPÓ/|¶MIáòá¶á¯[ˆI_ý£Ý4n!&ußÙÜw õá–’µO%&lB›Hnvª!JLØezã”-–¸ v%¦¶þÁbOü“4(žù.ÅÔ|lù­À$2f¼‚·9n +LbaùI$øù)»“XÅÚ[ 6Ú!,ئñö½÷9¢cýxŽÿ]€ ¢ä! bƒý–`²O·²]AerðïLb`ì¬9èHñ/ñÔ*<˜d)Ší)ÀÔ<'_ÚJ¼½ìJL—ß¹Esô<«\™"ÁCm]0d P×|ô.Ät{Ñ[ðÛQóieQ"æbºOÊ)¿‹Çˆ\™?ÜÉ» ДS …ÌN\—jv¿E¿¿ª× ¢ê¼U§Ž¨:Ý +@,‘âaó²qAÊ-…Qu:Ü뵸º–¡Í£ß銪“™ïÒjbÈ>£êbÎI0VbêÒËšž çq¥·˜Ú +È£%ŸÉpÄT±1RdWR +‚ªX4Í9ä"ÁC± Cz(xU±±úY‡ +ªÓ:2—Gt]ìÌÆŽ¢~Ý]¯ó~EW9Íæ´äÿKÁû#Ì"¶@4ìþü!ÞNr'Ð ë¿à‚÷žoz‡ú‡©Û÷gèüo§ÿÒ· éhÐ.¸ˆ¿ ã÷k¤.-¿¦œáv‘ØvÆQ¸uQ OÆ»¸Âíb·¬Eý {¨9—B½œ3Úö‡ô&´X†ÑÛóä@žÑ¶»Üˆ\¹{­A´í‰ŠçòßLd㈶Ý5Uò¤`Ñv{"/N•}ý¢úv{â9È®%»bað3ë‡aWl泂®°º«Š¼‡]|Š–òà|ó3îÂB;§Åo¥7áCþ í\‘Ÿš8”j‹»=qR!dx…Ýã®XX¹ªÕ…ak¢¹‹‚™x9»bA¬žv¹ïQ÷öLwØÅÒôrÒÔŠÂî3®°{¸Ù è.&ŸÄí÷Pýð>/WÐ] †õƒ¸°Ø8ÂX‹y¤Šm{í¡’Ùטø·ä»Éü ’ÌÑ4ÿ©A3²0ÏòTï±*D‚©üñ{¬­þÓ¯ Z…Ñ@Å{QÔä1í|G­º ÑbA¯ÑA[y…V,´W|T®-Œ±$å5Ñ|»·JìC'†Ü'Ÿå³ÈÏ{ëÃ&.Ë ¿_\‹e(ƒ³Ê}\\÷`«.WzÝ[g% ívD!ö1]ù5OUÞC,è4ºhMÇKîe±J–±7Ÿ;Ûö‹5ÓJ*2…ý¼‡Xì+ÅËÐüsVÖbÕFý±"ÏÅn1ÖZ„ä_þ‰±øƒ¶×è jÊöñäœ#áЯ¥m-ƒˆ ²xš*wØŒ~ÙꎧMRrYì>#HÎêIï-Æêb âÈb/ÒŸ1öa:Q6è¤ÆÏq¥G -vPµRt¡}îŠõu¡Mdk»ûuŸM¦ù[v_î³Ôg-hSgjæºØºŽMËð´ÑÅ6›ˆ…XÈO*ÑÅö"[J^£X8y˜Ž‹mfWH)’ðoœ¿_Â)-ŒŸªý«òS]Û{¿Ù&–v׌n¶‰¥ŒÆ,ÁÅ6ù#Vpü¢‹m"üGÏðêÑÅöá-މÍn×ÍVàÿØíc}åWˆ}l¢£Û'Ÿ×Ù‡]obÓü¶ºßg|ð¿®­’-~T'"Íå„&öSÛxµ}ïÚÄ;i¶ð9<¶éT£oà5/ú¼Ð&J†5P«zt¡uͬöš@xÜg5­pãÿk¯yÅZNü¹´ÑûRãd.Gm k!²Ì«®(Ü–S“ç ·œ(PP©ekÇnåàé ¬ê`(ÜV? ÐÜ‹&æÜuù ÜV^(«"gyíá²|I)4òÎ#%<‰æËëHÞªâáêgZÝÇúìá¶xÑlóHÉ_U´•ÿ%a*}ˆ·…yUyCûÅŽx[ăšÎÑÅ”Ý9»Å®x›©Í*ÿûÔÅÛ¬ªrŠ/¢ûìå`o=CØc=ºÑžæºÐ&FA‰µÖy\hÓIF¼î­ÓUà”ÄwßßGÅ¿µë,{Ñvý\Ç7=”=6Á_q€Þ®ç¼„2E5ÌŽ´CÏ_l˜ãK}5É~×óG^U/ŸóqIÛÚôü5“,SŸ¸4Ñ»Ëö6ô]ÏÙ/ÈÑÊÏV¢;õü‘ÙÂh䓿kˆð®ç¯¹­ÉÜVôüïÌÖ©ç ÍÍJ€,3Öóï™< yKÓç\éÏ Tšü¡ °)üÃBƒŒ¸×þÄBÝ}Ôúu+ýwo €ty¡Vä¦ô/;‹6|ZÀ!õß oÈ™3ŠO¥ÿNY¹¢~œì±)ýwªÊ‹=Ô«EJÿ½0 I¿B"è¦ô߯vï +ÿ½úÛÄØyžCê¿ûHéÓ9àzuÏ ¤sØ$þaaK‘³1îo÷Ñ9Ò Oï¹¹Ý9ôrS# —Ç‘µJ-VËè™4¸¬TŸ_·Ä?6…P!¢×ÌënÿØ”Úd›¡‰Ià{Hü«M5›ôH± øÃÂvÅèÞ3rXÈYšÉ½S•{—ø‡Å^9$þa ä49…9Gÿ8ÉÚ2‡ª.'¼ÿÝo¨Y6#3¯»ÄçBˆI¿hlÿHËk~%¯6c­88…\Àê#ÒI…f>³ò†~ݢâ$ׇž&d£»ÖU?LVÕ–%psÊa×Óטò—± +GE³\Ãà °R±áΟ3œ†ù®SÚ ±‡|Fv5A­I÷Vðùl'1Z-\Œ¸ ß™"ÁÒNyÌ‚ÙëÔßÛKňwhM×ã,Å!m ­ º5¢£9Ñiÿ­wŸ½é•ÞÇöÖ+휒*6µ7Ÿ¯þ®WzíS¯QC÷FÆÄ×ÝõJ;‡˜‰ îk¿n½ÒûôŸz¥8˜zÓ‘_䄜z¥8š#)íú²Ëc2¥ˆà¼Jœê¤Cz‰ÔIûCñ °½gE_ÞúYžöß.OÚ]éþ×þí®NŠ“¥“Á1MüÅÜyW'E!;û•ÓëKvwÁ®u½²M±s~+Šß&îs^9ïòø-JЍ*-he‚bmPé:DIáå²¹°¶^ú'»(i÷a høo‘þ )[U7_·(),ì€ãGÝ2—¶ÒV‘—;]st½‹’v¹_ž[¤J +ǯ·Y³‡¹ýS•›M‹"™Ó&JŠÿ¼¬Êš]Ð.JŠmlµÇ Ô¯H”ÇDSx¿:UCwQR GF[EI5zý§Ý”ÔoQR9§èš€à9²ðÞEI»+ñg<)%W7QR Dí$k•}ø‡()Ü›!3¼€z­ 详ñýºUI»ÅSxÖU=©r¨’öÂü‘œ[Ÿ¬ª¤ðú¶ãp,#ŠA¯^åÍx„Û‚pÇy×1¤¨´Z¸$à&Kú5¼ýeØûB!OŸcšÐð"´ ›‡ƒQ!÷ 8Ü(µÐ #½;‰9+HÁ¥P-š²EäÍûu[iãbðè– K€pI¼³ƒï¬H¨ ‰… d=7¢©¤|k‰^8‹£ß +¦á}Ry¼nat±¨fXv«0°”ª¹ÚÅùÏz|JÙ>u¥/n*謻>¼D|[õÉÖfÁJÉEN5RºèˆÞ„X-µ4Ûª㦠0‹öP™¾¶KÑÇ¿úñ­‚p¬wØ_ÖM¤ûnbz‚~ˆU’¸ òÐÕ£|À +‡£› 3òGö5&À%çaùøÈªáv¨±Z(»+!ßgŸ²5t' +%ÄŸ¡©§>¡;i/늀Á°é:ûB,¬~‚i9a›Ü;è¡öƒO!·•,'ĿǮ߂H¼É¹¨×]¼ÿ?`™³Ä>ÝŽ¶æ&z%>+ù0vK‰çÞ¬%Iw(¼vè \´µ>ΙvRÌ/b؆DžGóÐxv”´ÏO¤M½?&¥Ø×ÜBáï¹jµÐi1â>Zs·ô*a¡éSñÚ³š ²ø#±WÃã¢|ôHl­6‚Dþb™Yp6áÛÄ)¨ +]þˆòÎ(°¶  :c̨"Ikh¨ëXs“Ö,Žà@B#f£YV[ƒãâà‰g%g[lçÉ‚ËBKø¯òèòFpéT=¬ïWsXÈ yÔ¢QS¡Z–MÌa[‡ôÕf~ìGµøí¿ÇBÃ|‰?£“ 6r2í{æ{©K]ç“X…V¶žMrª „â5è0á”Ѩ§Ü½{¶]lWš6#é‡b/hQÞ½ÏïL:Ž%Ið«¾æšØQèüeL«ªš%,–Ó‘ˆñ°£É†?!Ëx0¼Ð­S§8Å[*±õ𩯧V(IêÈí k0{ ®m†ßå CÏ Ƙƒt reö=qÕ]¤Å湪†øÑìk¬0‹'w—Gø )ôã}Ðu> +ú¦ÅS£¹_áÐ߬iZ/yÊÇGüÿªN2€Í 2ͳ¦É)ÿò™Ñë™æ±Åb¥ã¬aùe48 …Ý`–xE¹–ˆ§¨O˜5†õeŠE§†Ï‰²ÄD/–! زF·³„ÞB1¡dnêIb1+Ü'È  6kºl@Öøi²Þ±Õ@N@Mh08~hÃVö©Çö\f8É€W}Wƒ^UŸ›õñ \á{š)@¬¨Q¸iWƒ:«¸Ï>9èØÄ×è‚/ +¢ÝØj4SB“§´`+Xàš“u~}°~/îYø½Ïl!¶Â›ú(ž ¶Ò¥.C—ڶ܉­d·èl ÙPcðÊya«aÉGlËN.õ­p̺³YÚ¸ÀÕ4© 9²ÅW ®4›¡þP¿äWÓʬbÑ~PÏ®€½å>'TÙÀÕ4~FÖ™†Q·Ø AP“Ç¡jìXþÞ0«-@hø=ËJ²ï˜;íèjYÖƒÍgºZÖ~)kkŒ®À©OøYcoÄÞÑÕ4ýLüâÉ¡ºº |€®¦Ý•áiêºÂõ¡û Q'ö@Wä[òt,ÿ¯dWu-‚+U>ÀWãŒ>ñœŸyaˆ¬_ ê5ˆw…íð +§7’ oM-†^nbSbÁúô ¯`ä›JGµÃ+X ‹4f¯`lÅh+„Wø9MÜ©à^Š…·•ë§;¼líBX™Ô¦¿à•l*ä0Å©Îü¯pÖu‹b„àpï©bœ¾pá¬i=ß8Ù^-PÕ²z¸eÚ.TµL_,J4bÜηÎÁdœîÓq7PEx†zúQÃrwU‹AÕtçZ倇Øi2šMY³P-ÿ+ +ú[t…îp=I³e!ºÂ1žB©gç=îè +²%]‘,Ñ{êv‡¤;‡ÿ@WͲ>H/gvðJ:KÕªj&œ…XoL·V5'¹èxƒú«ª©bÊØdù«ªµèd=°5ÆUrªJŸKé/o¸ªêcðk1éXœ *螉‡× ^Y¨Ì{¬b™Ù\˜ø#¬Æê׬:]çÊ9ÇÀª'0ã} ³‚]öWu#•@†¨ªí ²ñ!cu³ 2QBX~|+á ŸAyj 1pd1¨ºBÕª†]Bi3[ýP5,áu›§Tÿh@B­¯D ª›p+~q‰SV=èJ~ˆÊh¯–¨4¼÷ô,ù©òb€ž,~•4‰{Öù6 a¬t½Ñ“Q#4¡V_)~6‚‡éä%ùê'@OØJI §å=a»}ã©F=:ÑH(„U;hꮳ Ñb²Xç;誂ž  G¥-=*­‘]½ƒ¦î=Û²2‰*Â'hêPߪú=”ð8Ð ”å¦Ú¦Q²EùÊò±¨!~ŽÕN'‹á!y1|=.jrY|À9ÏC6ÅÐ,*¢Òù@h hÖ€âj¡AGÜps1­‡µW—7yJc¶  AyáÅú"ÅÆàCÙ# þPu\xNHÖGÛMmJÄ…jª]hÚŪŒølc0rÆ`CRÙT4kÊF|¶ÔŒÉ>>ÌXyvD ‹ã*ãË΃oôr­§z“õ›‰³Æ†¤õä\{gΗ,Ä×bì?”+2faŒcù§UØ’{¯•]Ñø¦ždö¢N5[Žêš à$ëhœè92¶£+4øzŸ{·vÙ†‚=[f¿€šá>md +4göO<Ê„×%“ÊPÛƒ¬Jí_F ÄžGÌGKükAE»¬ 2Â;:¦Œ3n¼SÐ>ôÆøê¸ 6¶ƒXßÍ«b*Ð ƒè}q”‘# pL«é5í[@ÁZsºzÇ MCí£¼Ë¢‚Õ݇Ë>sÍP€—6íŽÊ lª3ØÒâv5¾ìÜnÇ€ôv ËÅjJâþ•8]›vUï§zЧ„ž¢ÝR²xl©ñ“ÛlvÔdRÒ‚«´+«ñiAé÷ÄÒ;&h Ÿü£¦ñCqFÄhY>£Éú=Ó¾' µÖ»¸õe—^“\“ø`[ÿ¾7“¦M€lÌ‚M… êÄúÞŒÁ›àVYZÔfC(ó*ú·Šid¥½´hTbü§Ì¥Ûà1ºq÷þˆDs3™Ëí=?¡~YÖ8{kè‹”Õ1™ÛÍFdHülìr°Ö¡â÷F¶Ù@Ùõn¯N‰BõLülVä-ÂÊeg ?¤ƒÌ‹À·Çh͸ãl6W•ì¶U»ÜìÓÙR–϶ãìrï{Ñ\Ùщ£ëª"Ü õÐø\ƒŒ μ_Úp’BïŽÍLâ›B»À­ÒýW(©ša¿­½ê~3ß…–žå]È~²0³TráA‹ûôôpfñ‰™ƒþ’*¨ô¦;““ï'ÿk×úFØT:!(IÒÌ•hO¢¹#k5…†Ó"ôÓ}(ŸÐ³; èä੽XŠà`fø ¨66¬kzM€P¶ßí:)7nòkPâÓDGc[#dÔ„ò"dzµ•+(n'z® fËeO6ñ@PWµsu«\Ë,¯í{Htm’sdãò–Râ7а8ŠOÛÛGî´œˆ?Ñâ6i<,êœp¡ ,Œ·V2Âeñ œý-èë¯þÐ ëu¿‘5ø™ëù4]L;J‘^ ,½0ASdÆXÏ•F.ƒ-}ýŸ¢S“xÊp ïòùèóÑ þ;G ¯óNô5¿³¬4bÐwmý ô5O7É®cò}ÍÛüªZúíW .ÑŠ@_å=(ãþ#Ðç0Œ™z è«Lk‰Û™¯é^è«ÞÞ)؃•Áô¡Ï\½µ¼r2ß/ÐWé2®ì#B}Õ¡øÏ´ƒõUŽÉOmP_óÄ«,=Ó ;êkœxˆëlòÐ隷ÑUC ¤Æ ¯SM.!Ƨôuï}èT»@²xÚAÑjsÜq‚><zbå8 ïZÛA_§îBÒ$rúÆÉ¼Aßðc·a¾Á±ÂñÜ¢š%²–†ãÒqö5GÆâúdÎ#¡ÞI¹ÁÂò¹ü ?0ŸX”OybÌ7µ/\-úãÓÖ7Ì7#Ì×ÝãAÄcE˜¯“” ±‡C¾n¥{Ù²ÅÛVÈ'ÎWgÿ #C¾æ)!ù˜hß Ÿ]1ŒÀŒ)T;ö#ËÂØ9Æ~Ís{ë±þÇû5¶R¤¹bèç#)Š_)‚~ªÐ ²¸û<¡_ã8ETÉ늠_c>|#[¥è‘yOèêÏÐи(Êq ¿Î‹·ÞLÉùub]°hq!¿Nõ6ùcbaé@~ƒ=¼à# hz¬Ç€oPž*At­E€µ/;T}zø®qÂà#ƒIf7r¾ÁÁw(v8Q}|C?V]Àóð‘ꇦâäsOv87Øœ €|ÀeË3Ëÿ4õ'6æ…xOl” %6Ö.}Â=¨z˃_Qjz™Ei¨Ç©=±a…Ç'ÊñÄœº…F€ö´eJS°y¹ÿöîþ®ìiWIaW‰ëæ°Éä%rT¶?ž`ÍTª*€æ~ÞÊv°‡ÆýH¹9{ÚzšØzêt³ì ×z0|<Êð¡iÇÚ>Æóáz€½elÌh>£á{‹êhÈXÊ`oéøµ(9Ìð-&äcWœà»;ŒN¬7| ´ü£º"¬‡¦#k’âÌœìauöÂÚödí "Óᩎw°7’÷™ÉÚÍ¢=4ÿ©Ú.’ÿŒó;Ú™Cºå?NŸäº¡={i¨ÿ·íáìZ P6‹Óí7´ {ZŒØ +DáaÁÊÇÓK S|#;ÿs­'B{’EŒ4èD8mC·P«Qæí_e¶wŸÒ“ò A) ›7™¡ÍxàõçV¼‹E°¥ÛÐ,|ÔÌòðˆF!…h £`Ÿ8¹RfòEOð>;Óv;Èâhï<×:yÃÕ¨diÇ î [È<TÃüâòòÄ¢X­›b†(OlL†ûɼbí.W¯ƒO±l× ñàp­>'ŸIÄ™ÕñÓ|Ø#?2ÈîÁ%[cm~/ÝÚßô&ðxUäFx°±W §Î¾C¡@æ®~9¯£*§D`.ÿã|ˆùգ +¨†Ëœ5£¸!€pŠ4bä¦]ÅŠÜòjNÊÝÛp-P±tS;r®+¦úü͹eæÁ"w!·ìpë!7„!õËØ—#Fn™uŸ°óÇX_ü8[1vŽg½õlŘhv0õÉ °ÕóÆ}¶jbZ8 Þ·x6“”„ 4×"ÀVýiAž +†æi«‹mè&ë¦çÀǶ³%Þäñ¬Ø†Øš±$3ˆ*OØ1ЬZ†æŠM"ú÷?;øUÑBÿO;šwDƒ¯l9Šžâá"Î;bÃÎú$Õ4ú.èÖ¼«Ì=†nòV–âËZ©°C·j•ÌZ÷ܪ?i7[©˜~·«ÝènUU(aÑL¥7n…ݘÀÇ)¾t ĤìVœï¾]­»vÀ­U<…·ƒ7pØÞAXxsr +Ý´¸À[f/®à“òxcùÞ ­ª €ç3oÅ +óèëIl¼¸À[±òu¼AZK{vpË‹òszQÑ3ª©Š¼K°B½òᇼKãf½è×¼Uƒ«b‘å.Wmô 6Ó` ø€søâ¤m"½çÁ¹ÊFI }-»þÿçšÎ±†MóìÍçše$ÑöòŒÁ¹æíö.çÀ9¦iá˜ÖœžkVÒÆQ_LÄxîjK ð\sxª,ͶUÓøÑÆ˜»oì€ü?ÿëÀ›ÅJÌYµÙ=;£|ù€mȵÕ]i¦ßï`\4H|dÎЕ“"·ÚwèLGÀöÃSÊ•ÕOQ'db«W9Í@ÚPÒLì‘“QÈ40acAÆüÊ©d« žS–.7FÖ±¨4À%a3‚žüß?—%ˆ +áŒòp?Þ|ˆÙhhºnnó`àJ6]¦wÒ¸Ž¡?$7:z8N­&ËÐ ‹í¦\dôhYP¬²¬ºYæÒð,ªA0&‡‹a©têÐTeó>vqƒs’¥díÌÄð]ýsòáÉ·D×.-qû¸=;8Dÿëÿ~ƒÝÿûäNÌW@e)Ç9U<£Ê³traúØð ˜‡Ý¥½âùÑžÙŒ ‡_Z§X Í@VÊ +²$ …yÙ¤YÅCŽÉO1 ~ ìÖPMr²×VÝ+ìcM(sš-]1—j`r ¯ ×™’o($÷È]O ߢ>/5êݱKVü¥n©B4p¹äEØàÁ¤4Ï©\$”w3@ 4ÕTAåÅP²åÄ_àZ*ª‘‰IÆÄo*sn)Nû xfÈ e›Up¬!f:fL¾~é ÿ^{²äcïÚ”†T•!ÿ›}þ³Þl:4Sù#´øœGqžÓv—‡k×Û±ø¼Nq®© Ú—!nëfcƒ@«Q(ï×ríìu´±¨›Á䡹²Õ®aº¬˜A ¦7²\Û-ð[NˆƒcGË€qA CqÛ ½£‡"çYÓÆò»'O ÊoÉîNì\`Æ7©”JpF‘²Í¤@â_ý.jjr,¤ÙýGÛçì¶*,JsYû÷¬,,¢jÙïW”;Ä/¶6T$;¢¦^¼5•“k©aéÀ‚¿»Õº‹±ïì(v!`b¼³Gzã­ºÐÿ»Ø¹!•¬[ ,g!¾ÃGÛf ]ØFÉé–v®ËRÝg:‡Nöa®ÌS‹Ç¶mŽ Øæ•ó}·œ¢SLÁy¢Èïž’šUo: c9‚ˆpD;’v;–[Nò>+uÜ21‘ÀYÁ`6®?†ÚÔLÞDd@í RJŸ8²G¢J¨•¨øR02|q…6iiZM&=Þø»Š¼t4Pûì9]V9ÿºd;£Ïõ0[X,+Ù¦Ý(¦ËšTi$2?VCÉkÚ±íõ€¤n.p»¹à¥.BŠc&VD/5` e&ø,M w4 %€ƒÓŒ³„ÀçUßšÖ{Ñ´‡¸¯ú õ¯#³ëö±™¬‘ûàjÑF~ eºôWÀ‚àUµú1å¤ðâN¢ƒ’=Zd:Ipl€Ã´=0ɧ4¶™>°°xåüås¦,,¶6½±E©;Ä4‹®rnV4±^ÁNÃH&jXü>ÎÿeMÔ¼¸N•‰ñƒóO.ØPþJ´‘ êú0l(gsË›fêÒKÈö€ •}Hc5ošØ`Cµ^IlÌìêNüP)Å30 F¢QÍç¼å@4k+—žéªj€hÖø€±imc šQ6å©…¢³x(÷ŽÑüµˆþºy¸¡½J¯\hÄÊ}ôþ .4&äÿ7x÷:C³©AØÀ5ÑwÄPýbëšd¨&;“u¸Dê©crA†â4«¨G\,n`]‹@C1!rn¢4\ã ‘›º0Caê_ &'ǘ¡0%?0t5îPÀ× ð=+DÕ"〘ÎY`ÁŸó 7ƒ†êù ™†pâvÔPÝOAغǨ¡1ó Aªûø 5¨XÅ®Qk¨径]ˆ9°Ao¨t+è!êìü„gC ì\x†òÙC}EÓ (TJÎÉÛYé (<È'†cã¿ô¿ +VÞFˆ¨)1ÿU£=ˆû°&ª 14^*!ˆCc*¢ ´ãr_ˆÁ`eÓt6Hˆ¡óž Ô'º1«Å¢Ž’bÄЩ\Ú[M„»bÌm㌷0 †ˆ ×¹?à †D‰)" æÉÀVƒxW½”‚ˆÜJˆ†_oÄ…Q~õ€òýK_¹ r–^ )b0?.Ç6Só"~W‰÷X9¥ùàùDØ ò;ý Cm„È û嶇R¬êßíW ÷ÜaÁÄf(<„äW47pv–Á‘ vu:t“Ä‹>)ÌqA×@ïµ{µk‡Ñli&ªãÐaP6T6¹7ç^ÐazH{æ?E¥4Axac‡PèÖ÷­œÂ:P†NlOÏÐa’jÓ@Ü +ËtAÄ"õOÐa™džø[LY 0IJy50h1†XÜíØ>ä¨ÚY÷êùÒ BLR1”éÕ"1õ„êku‚Ò•{˜dÎvyqîaðjÐ}”ó…%¼„Ý‘£îqîað¶ÞåÓ§%Þ°„Ïèˆ+ª¼âÈžü!ûà³WÄfÅX¢û^j˜Ia viãÈx›à*:‡ÈNîa Ü¡ ¹ÕHâëkðÿKP±ÃW«¹ôà›ÿ«6F Aòɨ‹¬ñ '¬FÕ ±ÐI[b‘›«™ BltXfÆš:albaW\qSuDi±0¥]œDÒUNP±<¿ÛR¶I'¨Xž¼mhتX…ÚÀȉ“Üt¢ŠåÝ +ZnüËï¤OÔP!ùå×—Ö1–çuå;LjêˈJS)…Ì‚ì bÎxxa!¨Xù¥%ºc‰åµö†i·éÆxÍš<– æ2‘”X‰0²Q:ûD+Q˜¾a€ê „n,uÔE—0ÄÆ8)²=Ÿ–$-®nI¶x&ÑwG÷A¹‘lP1›béòI,gb´šõŽ$ÖccÝ1hõùа†ßj•|4b~€ô½m÷÷Ët }’DùíSÀFq\Ký5öõRˆE„&«ëÐeƒ°P?,3µH¤0NvRnA6b釭Xµ›[\/2p =àEÛAÑyl8KùɤX…YAÙ·6_÷€«2Jƒ&}`÷)–³j%4¶½íbAlAcÅ8¥f‡«’uPëZÌœBl 9ƒ>Ÿ!âåúíb0\‚oƒøš}sÜbUÞš$®w¯Ío˜bA½ëPxÞ1ÅòBª¼Wo|> Å*öG*Ð5Ø7H?§9œŠ¾1WW|‡ðb|´v“CH¤á§.?!\¾ö\´§x+ù)î°qCŠÅ‘Ñðyæ¯NHaˆ/ý°ˆ7H ·©¶@À€‘lšÊ’xnQOF+ÖÒü>ðÿ- pî0ªü)à@ÿWWýè¹Ea!¿ÎÁbÂ' +ÉL1Ϧý O`ë€v‹°D’ú'ÐÆ·tû Ÿøxà‰Âq!Œ¨$;T´ýDtˆåé\YGŒS¥7.ñ?©ÅÕŒÕØPKolùïE›z0£ÔF4Â~¤ICÑþñÑ]v€G8(pvð‘rFpEZh¬˜íÖ"Qm ½¼¡n°ö ùÌJ²è…"¼sEñòF2+¶G# +CjE¢ F…Ì2HÝ;ŸtG(¼PÄu:qùª Ed¦q*FáDùEmŠýäG¤`ªZ¬þL‹çÂÅ„þðÚÊŒÊpñö{ä†ò’ØGï·}*1VNl(¦¢–±—w×™”°vq†èšÀ uC Z£‚Ñ9\D]úcû2‘ÐMy"—ÅB‡–N zÜXô 0–ЬAx„Î0&Y¬•ì)à^pëZ'IÚ+äË4þ vì Ù“Æd" ƒŠ—8)·Sð–ØÆdc5´óB¿e’ X^$¿Šë¾ìÈê§X¾²4*M¢ŒS9D!ÉäÞGâíbÝÜÉïQµ%±ÉÖßsvx,Ÿ'*Íhz·€ +µZ8­}4z½á—¶ +'—pŸÎTíŸKþêÖ+'ÝÓúu@xALàPi:ò¤Ka„Üi*ÙV»½Ì¢€ÊõÁÔÙ¦ Ÿ"ëŒ<¶y"õVs½æ{ é6áÿÊ “èŠ/Ù=¼šo=P«³¢„z>ÖšDÂ(?³8ü*š'µa¹àwò XbMp¿iˆMÖëZYmr£`k˜Õ† ÄJ{zÕjCqâQV¥Zh¹ˆïìߢàßF×ëdѵû†ð–ü+ºvâÜ‚@´¢èêÕeL™ú]qŸì‡‡¬QõtƒëåßgvâÑu0ßÎ#g Ñu0ß„³‘s]1z;鹟v—>£ëd—d©Ýº‚èºHÄ“då‘=¢ë²‘YNsgGp]î +úãè:YK“w—È?:¢+gÈÁGy±þˆ®“ÃÕe…&» ®èzó+ºv¡ax]nQtí¦M…kÃò÷];9bó¦µG×$­³ƒ®òOë²ÙÄ<öSå: +ÿó,óVœãavèCß@õQ÷g˜ä@Áv%GaÖÛge—¦ì½œ[œõy}Axg¾å +¯“Ä'4ÆS0ú¯‹Ý1²/½Vr…×u"=âëb«&T¶I"y¯r#¢Ãä'nÿ#¾ÂÆ)s[XŸñ¡ë8ï° + âNŒû*QX…5Å" FaU?E+²‘Rn¶°ª7³Ñ¡ô_õé³pdV_—IfC@:eVßâëò Æ:ù\—ãÌíQp]ÑÌ×ËÑu²É¤4Îﺢë…&®èzùÕ º&œJ§Ë]¯óq…×ÁøÙŽh´ñ¡Þ@Ñõ]¢Zº†ýÅsåHP÷k8ü[~èW™ô«hÊéÍFÓŒ]çŠ.± «5Ó¤Jf§¿ˆ‹„Y°,ŒxŠfßò +³Jg3~Fy¦ ,¿‡Ypô.Ð]â +³bR—lX±Ùƒ¬²Q‚›ë” W•É¢balÌ&6O&C­Ó;s›øc9>´I·"€;‘ó\ņt(ÌÖ ¸‚¤MÈ “]¼WjŒk‰Ýƒ«Rfô…ËF ü\±TFª:M ‚+xÆÚćŽó'¾ºª®I‘wéÜ®÷à + k]l梭yðKùZ³´x„å,dô’žrد¡˜¯8b+^@1^Rtalîäw¯ÙƒØŠ-g J—gÝ«®D«nÆÄSP³eP[úŒ§Ø‹V––+=E{Ïxн¶³·¯xúؼñåO"m¿¯> ò­…[þº¯^*Å×}õùãQÎC¾7º¯^Ăྚxq”×IÚÉq]MìnƒEYæãº*_£MÝò5Ã5¤‡NÜÄ/íF~8‚¸ú°Ö ¶UŠÂêÃ’ªE ¼Wd}üåg­èÚ:A~SÉ” ²ªæ†x×8+öŠœaÞ +â*vžfSÛš™ÕÇ=®žŽôŽª°ÐÈÛu eU“q†T-#c¦çIAL"çRq#Ô)j4QhrL…îi#ËßǾ¿©×) bêòM!Îp¥(¦.rF›&ºÈð•54¸;¦.S¸ßcê²É]ØM- +©Øœ1z^XŸW߯qO}˜N”“ò´èžêÊUz'îñ=5'4ÀÔÝS+F-{+üqOM·ß¹î©‰¾•Új˜¦J>|S"K縧>,Ë©Ëäã^÷Ô‡9REÒÅ A~™Q$]άXÏÚæI×ÙÿvEÒÅšNcNËé"ÍSþûŒ‚$q‡ýÐÉ‘W ]¼h"-è3Û[|Œo'~ÊíöެDÝ ç8£[êcódŽ*[Ç-õ±Ñ X‹ê’æçuõa¿¨]W©Ï-O"-︮&•èÒíYç‡ëjrbs&í +¯™Ù^0=òÂk¦ï‚*ôüÎ:÷e­U)8s„×@è¯WÅ=¯™÷Æ +rBâk>‡æ^ endstream endobj 46 0 obj <>stream +ñ53ÿ]5mñÊýJ-z’ŵ3¾fçJ>àG6ߤ®+À&¦I:¥WtuuI¾iœ]]/ß\]ÓK)ú¸±>öR½ÝXŸ—†õR „X废^'㺟> r Óoâ*+¡æäÚ/Ã>òÅl“Ä‘÷¢ z›ž,aY•Á9E»_£ÔÍ,õÒ¢7òv¬G(6* L+{“*ŸQ(Ö4à 4ç0½ í}WÿkITK×U6ªÆž„X”-Gê:4 jf˜Y5Å#·lœ ”W’RTã‡å°T"cÍ)Ÿ Ô"‘Ï(…Ô¦`aÍMà’³|ñ>Жe¥ÞE÷çxÔÔÚ×˜š‰Ø”9o'¡z —½ÀÐ_X Yg¶(µèÕŸ£·Fø‘ài¼-#; g¤˜&†]žxˆl 0@9“œ̵SÜÛÖÒ-dâYyñ&TŒœMýs§“¶ âÓò$p§˜„‘ ñ§ji[x öØ¢©'¦C-{Lñ3-ÏѲjñäÄÙǃ¡I ^AãÕü)ÕBûáÐÙÉš“iL'k_©àiçsÚdÛP²#f»hŒQ`T³8N¨ÕÑñvøÑÖk-´P€³ÙMt—yŸâî“-äÏ…î‹ ¨O•&ëk »ùyÖ +¸ƒlÞwqøŸßµíP…q;ŒKC…_ðñJÍlÙ€™FSc±ÈØ]ÙEC+Ø$דÕºA,R7Ý"Îî ƒ£êãÛÞÔ}0w²y[³®`‘ÿ5PÑÎqàÚi-×Ê]¥Î[eÕyr 4AG€m,õñ)P •• 4éGs.Uªg+`cIÄÂ"KAöÀó³Î÷°ë P€·ö*QކêöÃÂŽu5œ”u¶ïé ø©zgƒTJ¨ŒvW­öQêëÌ}hrì×Åõµ¯™:G#’_MÓx9‘j¿§ë©xÐkSAðôÕÐz‘WǬ•ŒÂ6Šc¼ƒ‚@«¨&$Í"µ=B˜Ât-Ùël—YWt•Ú¶µªFéŸê»­ŽS0Es´fcßädŸnŒ^Œ\öýÍ~ƒ¼˜ê?‚$#$,ìSšæ¥žü  `p „üþÚ Z+?¦}Uóx˜äƒªŠÞöñ&d¨JÿL“Û‹VNõ,ZbÄ5x’ó>”‹Ž¹3ý¬ OñÍ|‹U½ðã¤:ÀÙ¾Z0 Ûä5¹óŒ»,‡¸˜”} 6Ц|g?þUGn"ySéÅ££ó×'þ=3G ´a_goªºR7°;N¡Y8±AÓhOkƒ˜ð·±ísÌü¿ÿY{ôL¿þÿßÿˆçG˃|9@^OLÀY¢ðXôÿûŸœôm@à§»aí&ÿ'2Yv×:ÀLÿ?Ñ7ý‰ÍùUÿïÿü¿þóÿÑŸ¸ýºÿçùë~¦ȯü +I`‚`wp§1òº½ó—f+[öm„ÙÈâ$ÑÝQoûøõKµ`åzËÿë¡ÅØ>ãþsÛôã{þOhƒ¼Óüu=l?¾èþŧſò5 ‡Ëb”ÜÀ|¬Ì˜àAn‹|ýäÓæ|-ÿ'´9_îù´Ñý~•qVn«qÈDF6_Îý•D¼ó}µð×üãcE‚¸-¾žû ÙÄç>\߯j¼ö÷Eâ~›§Í½"'Ø,¾žû óxÛœþ~Úópÿæû*ñz­÷?>Wä~€Óâ¾AD6_Ï}øRõ!£õøýªÆkÿñþ²¹Wäk¼2·ÍÄû+Áw?í×x¤_¯õk¼à¶ø~îÿ Þ‡/Uòk¼‹·ÕÄûËæ^‘¯ñ>È,F6ßÏý×x%ïßü9Þÿø\‘¯ñ>È(F6ßÏý§x®ÇïW5\û ‘x½ÍËæZ‘+ÙY|=÷A&1²ùrî¯$àý›?Çûà+<ÀmñõÜÄÈ&>÷ázü~UãµÿƒxÙÜ+ò5Þ™ÃÈæë¹¿v÷Ó~÷AêðõZ¿ÆûàN‹?ˆ÷AÆ0²‰Ï}¸¿_Õxíÿ Þ_6÷Š|÷A¦ð¶ùƒx%èî§ýïƒTáëµ~÷ÁÜßÏýÄûð¥êC~÷abð¶úƒxÙÜ+ò5Þ™ÁÈæû¹ÿﯤÞý›?ÇûàŸ+ò5ÞÁÈæû¹ÿïÃõøýªþU"0CÕw䨨jt­-Ì)ÿû&‰Ű|ä¸þp%NýOA¹àçOGrþz’+Áï?#¨@àãE²¨ˆÈ÷ó§/'ê¦ÞùÏêðÇû ÿ퇯íñ£þ,TÄÍûùÓïOTð:?¬Å¶PA=ýz=W½ÖßìUêýùç±ìüOWúz’«Îí?#(’Ÿï'ú·¾¶Çú¶PA!üçO¿?QÁëü°ÛBýAŒºÉWþf?Ũˆ çú£nÂÙõ$ŸbTÄx;ßϧ|mõm¡>Ǩà¥ò)FÅ6ÿãĨ›åoöSŒŠˆj?úx¢¾Æ¨›Qæ?ã{Œ +ÿ퇯íñ£¾-Ôç¼”ãA>Ũ˜_Æ?F´²óõÜ´%¾Ù›ñôó‡O'*"ýüéˉºé^þ3¾Ç¨ðß~øÚ?êÏBE|°Ÿ?ýþD¯óÃZl õ1êæù›ý£"Š×ÏŸ>¨›Gu=ɧ¹Î÷ó)F_ÛãG}[¨Ï1*x)ǃ|ŠQ13Ëÿø1ê&üø›ý£"þ•ÿésŒºINד|ŠQËê|?ŸbTðµ=~Ô·…ú£‚—r<ȧÓ¦ü£n6Ž¿ÙO1*"Gýüéã‰ú£n“ÿŒï1*ü·¾¶Çú¶PŸcTðRŽù£þÿ”Ê(éÈ—¬šZÁ„(§!6©@ 0A'jî+P©ÔOé½?Qƒ``q½®Ë&8¦Íqp®§½ÎÜõ›ƒƒ+6¿›ÚñÂOá“TX>ÉiqmôË&8ÔÍùvϧ½WèÛ:ë9¿¬‚½ßk‡^ktmòÀâ~3·Íÿ¯´¯íµ-·Íû÷?œ/’¢sª÷—ä“sIOÚ"mELo¦®ƒÛ°Ýù÷}JZ{-‘û¬ítÛ™£gkQ¤D‘IiÎìµ:µja«1ÚAñ×êå*#‹’+ÂPF¯Ù¹»S«%t'gs6X§3;õqÂ.#}"a nuƒupc`ntƒ>…Qc6Ìä¿f/™”ìˆ[Ý`ó˜Ý`HèNÎöl0ÌkÅ_e*)“Ò@ÜêëtHa”-¬¨Uf´³a‹+þZ½\edQrEæ¹¹Õ wwjµ„îälφì}0¢dtk7X'O +ó‚Ý …µ·vƒu(¥ø{k7˜”ìˆ{Ýð‚Ý`pw§öÖn°Ï°ê»AŸ¾(ÝÚ Öñ–¹× ·vƒ>´Rc~Án0{¹ÊèÖn°à ̽n¸µ ÝÉÙœ Ö‰ÙÎ_}ijËHŸˆ[Ý`¦˜Ý OÆÔ˜_°Ì^.22)Ù·ºÁ:z307ºÁМíÙð‚Ý Ï‘”Œníë ÎÀÜê}†¦¨½µ¬3<Åß[»Á¤äŠxÁn°Î÷ Ìn0$t'g{6¼`7èÃ*%£[»Á: T˜ì}P§¨½µ¬ƒBÅß[»Á¤dGÜë†ìƒ»;µ·vƒ}®¨P/Ø úDLÉèÖn°Ž ̽n¸µôA¢ó vƒÙËUF·vƒu@i`îuíÝ`HèNÎÿº„L8;õ†oW)Èg%dy@'K™ÃlEQF/€X‡—BE²)Œ°i`¶xIE­Š¹Tc66IE^8(-÷h÷2),e‹PŠ +cDn˜»;µZBwr–N…2B8UÈ ’‘Š64š3£9³cT¥¢VEaª1!œŠ¿V/WiJv„Ëi`ô +И»;µZBwr6gƒ•´¹óW' î2Òù…âV7XI›æF7è¼K5f#‰cç¯ÙËEF%q«¬ìMs£ ÝÉÙž FZ‡â¯J#P2RâV7Xiœ +£²*µ*3CÙHëPüµz¹ÊHS²#Œüs« îîÔj ÝÉÙž /Ø :‘PÉèÖn°;æ»AçU*joí+±Sñ÷Ön0(ш{Ýð‚Ý`pw§öÖn°S=ê»A§*ÝÚ Vª§¹× ·vƒÎÖTc~Án0{¹ÊèÖn°r> ̽n¸µ ÝÉÙœ VòçÎ_l¸ËHç)ˆ[Ý`%˜Ý ó7Õ˜_°Ì^.22(ш[Ý`e˜Ý`HèNÎölxÁnÐé‡JF·vƒ•j`nuƒÎÆTÔÞÚ V:¨âï­Ý`P²#^°¬¼Ps£ ÝÉÙž /Ø :!QÉèÖn°Dæ»Açg*joí+ATñ÷Ön0(ш{Ýð‚Ý`pw§öÖn°SFê»A§(*ÝÚ Vʨ¹× ·vƒÎúTc~Án0{¹ÊèÖn°rG ̽n¸µ ÝÉù_wx0$>{æùÜV7Þ´øI0|ç©ûê<ßÑGc@Èóê@T>¯¤× „b¥ÂÊÄÀlKXQ«Ô€³¡LBç;ߘV›÷V/}RRZðÅHBµjÉ(Œ¡L ÌÎÝZKBŸËY”‰BÊDñWMU%#5Ý „æŒÆhÎ쵄µJ ¨1ÊDñW÷²ËHS²# eb`ô +И»;µ–„>—³9¬ÃË¿úhl—‘>^3·ºÁ:¼407ºA;ª1NÈÎ_£—MF%q«¬ÃKs£L }.g{6Nˆâ¯2q•Œ”™l nuƒux©0ÊôWÔ*÷AÙpBu/»Œ4%;ÂpB Ì­n0¸»SkIès9Û³á»A)ÝÚ Öá¥Â¼`7è#CEí­Ý`^*þÞÚ %q¯^° îîÔÞÚ öá¥B½`7è£1%£[»Á:¼40÷ºáÖnÐÇŽjÌ/Ø F/»ŒníëðÒÀÜë†[»Á”Ðçr6gƒux¹óWí2ÒÇkâV7X‡—æF7ècG5æì£—MF%q«¬ÃKs£L }.g{6¼`7è£1%£[»Á:¼40·ºA*joíëðRñ÷Ön0(Ù/Ø Öá¥¹Ñ ¦„>—³=^°ôј’Ñ­Ý`^*Ì vƒ>2TÔÞÚ Öá¥âï­Ý`P¢÷ºá»ÁàîNí­Ý`^*Ô vƒ>S2ºµ¬ÃKs¯ní}ì¨Æü‚Ý`ô²ËèÖn°/ ̽n¸µL }.çW/Ïg—î=η0@Àw-¿§’’ª”I vÓÇÑ„åÁ²,;5Eyj>v÷^’wÝùèyèú¶ÛèÊéïØ0”îRwÁÅÜš!Ÿ³¼/YQœÖ  ä4HÎuÿî{õÞ×’ºZœ£¢çSÙóÿhØ™óõ9·?æûÒ¶ä®"c.~Z¦›Bʦðá^ScO®wLbƒ[!Œ¼{@|,9°Çù÷Ö@cˆžÉõ ¤g‚ñ9 4 R&Vh(Éi^Ïym4hq¿ )SðêMñ'7Žš²†‚ƒhq¹‡¶”Bâ*ÈEO×¢ ”ò]]ýð­ž*Ü¡\ å +«u>®ž¡Â4: €yP‰*Éê›%¾ H-!ôA/eAš@bJ¥óÁzÆ© Ë¡6óS ê°'LjÒ1tÇé7ÿÆ$¤e/T¹ÎÃ;­?JA0R. 0?uaRþÛø§¾ijàƒ–ìÓ²ŠnjÍþA0?µs&Ú!Ð.‚K½ð¸† ”ýÑO6d¥ ßdZàìÇ'¬_³Ÿ†~ ºƒï5¡82îÿ„Àð"bŠcQ‡šŽqYQß»‹œ]˜[® Õо»‹]>…ÎòÄ,MÇÜ`rJñèÇ[#ß!c–b#b?9C<é.åP|Æɲ¡{4¿PøëAgªÇ¤ÊSŒ[3Å8~Û!ó‚í­cWA;d™GòÑÇ\'Äš™ +0HhL»)t(<+ ?HÙÇHÏñ ¥LŽ]Ùŵz38ve*}$quh¨2&K€@!wW‹ÙÒV &´SRªç§Tò` ôb½ªúÞÐH´BÜá=ÍL],E™ºþ`pÉÍnÁþx°v fy074Ðǃ-/‚\('CPŸš«1øø:¨åšŸûÑ…÷ÒüÙú¡rh˜€üïB-ÇÖß^Øž¾ ›umoÑGh,úàà´±;ˆv|š‡,[„np=Â_néØB2‡éÝ2ά&l'èºÌÏ ñú‘Á¦”«Ýæý{¬ìäa‹,ÕÙÏsôC¨Ä¯@¥wÏßÙ ›¡a +ºœ‹{BÊ=S~ýÛ/„2¬F £ŽÃ~òõ<ïõɇ©“E¸×%6ȇ+B¦„Yèös?^ì„È9—±Õ¤>Õo÷áJã†1ù‚Í’¡ÁaÛõ¯‚Ô׆BãtwB«¯‚,6˜˜[¾gì^Ϧ†YŸ»ãÒûÚ“Y±,¸'ÑœÖÚÙA}!Ž]Ý7æøåWAÆ ,%šê¾»B^a5ì4ës²hæ# +>—:ð‹ è6_¯3Bî%¶!ç·Ïí,x dÍÒ[Ùý¸¼{Ë3ø?›KÃa}X˜© S7œ]“Ÿæ»±òU,aó¡11¿çý…t… À¤CÂ~œT" .©náOBs»@‘€RS G^ÄQø† Ög=e•»ú0@m3¦7:‡qëÐy‰ùÉÞµc¬Ù½¾ñi›1™Õà^Óî^*JŽõ=ÁWÆA<1KÈQƒÍ*à š‹Ï„½ƒ¬¡âoøAÀû17nÇvsvãß~þ[ü}KüW‚ÏF-½—J+›i’^y´ŽC81×5ˆ®7|pø½0^yçÐxïœd;ö-áÏ]Û:Ö}âÝ´‚|Ã@•ã.<Ä£nÝO³så5–PODè–} ø‚AxÙ»³­ˆËyüèGFA8˜)F?;G jn%óíEW.ú;åÞñŸ,b CÅšî>1u³›b7@“ã1y,_ÄÅšj´dS„»Îµ1sS5ÅŽ-ç½f†`Á•®r¦£û)Ðå<×ä¿Ïg"T‹f)Fk"”¸ô` ±k¦ýì5¨¹•Œ)ö‹°aé¬o~Š¢q>R•BƒÙÂÖ ÅgF¯4Ž+ch¦°c~Ç\²Ïbß[ÂŽP`Ž|wº3…Û{Ë”V‚u0çI„j1„­@š½Š-$5KØŠ)F?;G jn%ó¹°×ÿüVÎ&‰»±u¨+ϽÚ糜ã©Øi +K‰óã^0b‚”ìc8 +£x²S¢Ùz+®‘qã›±( q0,wéù"÷Ì%e¯!¤–r|à“¦½ã—rý×ÔÜì3>»Çਟë#(YóRaÆœJsN5©\SÜ#\£hDÁB­é¸òªÇÌð[Þgl‹¯aàè…æ}ì¯`ôØo–Ì–ñÐèÊâ8¾•Æ•CYfȲ’s^”7ö2Þ^uükKø†Â|X†cb£ª®Ðj ¾¥1L5È!0ÒÆ±Ñc,`Dñ¬¨@¡z Úð{ªÃÎ(Y;"p3Þ v ¯³›ð¸§÷Ðôyý?mÚ{¶0Ö<M« ŒzãGȃÐ?ï¥òõO‰¨ :Ñe,Qš´eôÆ{ö«TB àTØÎ‰n©į†q‚*‹‹î3†7÷`h`vÆ'C§«É¡—V²?dÇ´^ŒÛÿ äà~€#2[0ÕBû´iïØÂ`â„Äxnéd’FÑðƒàò ÜrÏŦ ñÕb÷†ùxA$Ÿ¹˜q JÝñ¥ÐìS⤻ÁП +Ÿ¯‰o`ÊD¡fè³\4†x|ÒÀ»t¹—Éâè]¡!bÇbü6í’ƒ<3ÈýŸÍ.˜Ê-Ó3\&0ØrH]-0“Bæçcž@òáÃÈ%1’•ì›™€š[D+t;0À!À ñMnµ³ág^˜½@¡Ì†œ‹4àÿú©¶L atwëìu51¼“M‰ñkÒÀ`¶¯Á R"\^…7 a,É€V˃h,tbBKc¹çžI‚Ë0¤š^l(Thˆ%ކqá’S E‚ཨõoYŽ sq>ý=Ń-C 8‰ðô_2„¢`X9Œ +½ÉÄ(<€á6g™ÖŒ#"å"€$© }».9®rHçL³I +TdëGîyÁ|J2ß`8"ð£27!@Ì¢0έñŠã3RaæíPu‘ÓV¨­©Q±‘&ÑžñÜF"•XÒ%™/×ÊÝCr\¦üÁ%à +xŽüŽOPÂs3êD˜]r°Þjˆ”(BXL>çù/$BÞòæ*ɘ…|(ö:_fŒI)²:*T #ûSpq<%ÞiÆ3yAøÈ%è áÐÆ“¨^Vg³)J¦Œ²›½HdXà¶£Û¼#óEM؈äE„ÜôüüŽÂfÅ@Ì¡Ä"½x*ÔÀ³¨4„È›ü £ZôQYS¢êÇ0’„¿”‹chi(hÑÒ=ŽaŒ8ôÞ˜‰<›g²."¦ôs,s63â[½†9C0¯©÷˜#2z™{¢l¦St='Î]ýÀø.ýÐ3Ï#cRþŒ¶„$ØU²ñI¦OS£`™a7Û(^Á¨ODÇŒ^÷`bÖ¿ˆQ#½ç¼Šl¢ŠŽ‰EÙ3lÀUÊ9ˆºž›v3X(JÚ]ñ%×&ªÄõ"¿2È…X¸h#-rãë£ô̯Kœ¼É™<X€á–kµ1pÅZÏ’AåD/ŸºcÆ‘¼‚/ÂbºÐÈsQ›Üf*¼xÑáÿ{ÿ´u<ÓÁ汓*øFË@Ù1wß2WÜ{sâ³>Á°`±U±k‚äWH”QU-§ƒEm˜>+ä_Åhqhú ŒÇ/‡©¾Õ–5fdþpÓðpÖÂØ2!;«¡Œ“îNLÿùöÅÀä‘3ZY–µñPpeÕ-—¿ÉNpD“Dt19ex®ˆ!’BÉé"­é,<»Ç¶BûÃêÙÀ0?@·HrX‘¾ÀÝLo¡Âà£9?Çç·qÝ3å›5±ãØ{÷go¬ãŸ,Œ1¹`q†¯@¥åfkeÑ¢á&%:ƒÿ‰ýEŒÞ%xŒWÅ‚—úE wH'ΊO¾Ûßz­M{ξU챿‚ÑÊàV^*¶°Á£¥% +S×sŒžÇü.øP†|Yƒ°ø#L'ñ[düV +uìù%‰£Ï«¤æ˜Ã@Ó¶„lbîÈQáCt¤ay8žEœR½Ò5Fó-„±8˜Zå(㌞{‹oŒ1E{ ++ˆ^ "‹•ÀvœîØ=ÆøÔw;‹(tk•M)œ˜Ì”®#ëõ5ŒÁà'_ß©Œ:ãü<ÑäjLö=ÜÊŒá’ù»Ú7q#܆$‹.ðl€7N\}¡?WLLèØ—àùxžå´h~KcŒñ·á Áv.9Û»½Æ¼ÆþÕ8Q%ÛžbŒ_“(Ò‡8èß÷$nùõ1XÿŠ,œ¾­Ñ fGŸY`ݶ5FëV¤jäwÏMXUxÌ9 0qíf @a0ß‹½Ô"æn÷Ÿ7é-=ƒÛ ‚ƒÓ‹½ÅŸø¤Io(z\¯` áÝÉâY˜£ßYä+vü?-/ï~œ÷Ïݨ ñ½^z¸ö…!Œa”¡­ÂgK Þ7Où +“;%t0UE`he삈ÍóüöuqÉè¥Ö÷T‚ÄaàóÍ D#®Ãág“¨1’‰}ño!m¤`ël®[£¹ã¨X²÷¡¸º“q'šû8·=¨D/ äãb±dm@6cãœÿîJ4$ÉxÁÀ:=øcXÎñ&ë˜àŸÌCíÇ~œ´yxÃ%V(Äβñöñý«T ÚwÉ ØûPŸ†b€ï"]8ëdÔDÁ(ÒkIB›CZM_-f¬FøsBÖÓߌÿEÕ´à«•2°óÂÌ+X¼|P´ÿ‰4¿ÎPI†3‰bN,ï“ä£U§5±ïV³ñÙ>',sCŽUý Æ’lÒmðz5Š“q,W´øÄP/·öÄÂ>šdÙ}et½4•g$³ _~—×ö Ó#É_ðåDpŸº–ùôqv£ŽfJ%Í$®H&/ÓT˜TЦ\ÝìëyôåÙT³‹Ë 8hsÃÆb¤“COE+øæ%.qlå½gCäHêIkƒ +¯\èôq–ŽªÞ¤•Æüiw4ïc POñ¡v§¼Ny?ûñ >cSìÓ¤qõ( +ëgÏ<ã óKÈÂ`^ZMI•¡âaáôÉ×9'™¸š`ßI`,ÊÌúm°(á»ÍÆð¨jdò8)ÊÜKã)¥ÿ§' F“IšR—&ÖRM]ÖŠD¹6aÌíþ\̘äžúÈ$"–%á%$MŽy~‘5º¦IΊöÒ@‰ùƒ£hc Ú O—–yîÇÏ2çšxÙ:íçx² ‰ ¬›¾ í(Çåç'Ä4dZi_¦z¡¹ +ËËD~ÅGëò< €ØTX¹"²–pk§¦¯ƒjn(¤šºHëT›TüG>k–e؇›"-É_A˜d™—»¬ÿ§ý–Îöæ±v@™QS°Ý]{bÌ*œ&·ð}‰±¤PkGÆg ø`ã¨[*œzÒÔ1qЙY6šÒ)`\D0Àj»“…§"àK)ŸÓlæôë>ÈïSeŒ3v¶æ¤í˜c@ H“wsؘ§eŠ C{³±Œõ"A¡kD[5Ѿt`R–ÎÉ8Aá‘5'`°,—¹µëÄú÷imj &&_‡XÆk]Þµìñcèx×°dÕŒ£‹"Ï©ùŠù!ÖTE¬)§šÇ*EJRJçXûE7bÒË‚9Ú¼ø½œep^d–¹cÀ§ÆÇIÁãoPQükû©Q–«Mr‰åœ·¦Ì.²ú¤?µ|“1.’—FÂËÏS}Ð-°zŒg¥0qb¬kh•Å–³ã;>A]Acw×f0UFx1î4âb)fD››CzÔŽ‡‚ ‰åˆ™±XsÖµm¹kß)(K_Àº§¾À:owmèœÑS'oÅñ’‹ÈQ9L3Oɉ+󽺵²`–\;#ïE¥ÃËPƒA$?/°ÃØÄ2kûÎIš`”ñ£{];þi!}›zw›‘þé²&ÎçäX`€@¾Ëó¬Û!¨¶,°6BL9+xÂYÑÆœò¼JSê°®°÷_ŽáÉo„=!þd³ŽŽKhQæ¸oÓnãYò¥è&J$Öœê‚ø1ŸÛ˜¬¤+žš¾ÍýEÖëûów‰×ò¢·¬%ƒ4Ñtîù [ò1D,÷Sä!Ï&Iy%¹—u«0nxHr’Ãâ +eo›]z<ª6‰RÈÞ¥ö¶q±™ù"XVm¡ `^Œuo}Y$&)Z¦ +Â\ïnq•4'NYVã£ÈËâl—ˆ HÛ­ 𮓑2 ‘à¦ÙO³¯&·i`N˜sfoÄ*¼î៻i‹’5‚jœîxOM‘eb³ãäšz¨º|™˜5/u&OQQLeìØIêþ̯ñ ™µ„Ù¥?ÛÉ“ùX`EóÒ^ÅáJÛŸ¹4¦‘Ðæz«]572ÈêTQ;Æ +5:æJíSã_lZaGÉœ¢.ºùã‹·7Sˆ`4®ötÙâÊ,1K…Xæ—Ϭ%Óxµ™¿™0ŽÛhkâE>(’Ì G‘{Âm¾ÊœpqÌ%¨ìu}ÎJy—å$/~Ì?ññIÅòëº]¢„§ 3¿3¥§FÉ~ÊÌç‚yíC»4åIgæñå¹éëÈ뫒ؘjz¥m.KâXoÅ?Ú$ít”ކ’[Þ+BOrŸIfÌ:uËÏ×'WNMߦ¦»¡saÿÝxG»·[Îå…"Ñ&’ï}Üõܰg`∪Éu]/”za8¬!¾°Äk3ŸKï SlZ[^J¸ŽŽGòdbbûšÁµKÇRF“¦³/sµ¸‡é|0©YG³˜¹+PI©ÎVk¦Ñ„2»…á—•yë´Ð·a4÷•hn<¯tÿô ÄK(wCA"|É$¬ý8=&š@òÜ%"æ›ôÈãPþ,‡eô³ [Â<‹d8×¥hùR›wXÌei^âÃ3gèAÉ%¯Ðöø„œ%¨d¥û±IJˆxXàA§ôåƒ%ÏØ(,×tŠ"!Mô} ./SË·óæ( .1¬yºì¿³!cã9·E¿Ž©+¹&M¬‚aC ÌO@²‹ÁKÌznÞÍSôÖK¾txü¯¼¼ˆÓ)«™~À×/vcæ‘ýÇ“F¹4—& [H Ë=¨GÕ¡5j^•qhT´ß`өߢ¼™CÖL³§òq™k?.JK‘´$xž N'‰Ú3†ëš”•Zç½Áe×—¹à«L”y‚÷ ZZ i‰-Mã—4>Šd$°–V çœâ¹ª„ŒL÷bÞCI\ˆ—EÖâ(Mif÷”8• +m6»)³ÆìR5z?Kf[.ø|¡W— ‰S×HèÌYN0вŒhÊ›6BëSÎòúóº/lže“ȉP„WR줣Ø4^!‡'µn á/=61²Ò…Yy$SrŸ#“ržâqˆSFçR«ËsI.õÉ\äË$Q€S8¬®}:]à­ï×ñý’×MóQÏý¤µ½Á^žbd%²³¶º6Ó0˜&W¼ZN~îLŒ`“ßû 5Âc ~¹«µö'MRo»7úGPšî§¼ ½\^‰ZƒÝq^XòH;­°Ä±ÑVyÅtnÜç£ÂJŠ­¸MÌåxuEz‰ eõ™É×á:Y‘uiÌŠšåÝ4óŒèåUi[;5=<›|­ÕlzðŰa>mܬ 1–xA‚;NŽV§Œçƒ{K…Ñ.`tq-æÃÂH0Û$˜‚ø~5Æóiá û=ë©•óÐÆh§Îוç­{‘—¥ÑÑ,‚.ãmp˪ûDdc-ëÓÒÈ&ø¬ì”¾ÎêTžwE&»dŠØŒQMþúüná^ϲ1Т)¯Q±„›yÑ4qnœM8X¼ü`ª/>’ÃÔŠ}Ø’,8ŽÓKæ•ã/°ø186aEmž¯É0 )mÙ}›ãFè5f¸–¥*¡†Æ'’L¾áèãSh„ ¹ì™_¿X ºaÉ#±®–cQ5—nóÕ1œ E·k'âØÀ‹fü:º¾”ù9¾Z$îD¬|zB²èR´1k“¥—û†ñm‰æq|>Í6‘õU¤'Ÿ9èÙï“ëÎrñOAÌ‘–iŸòóž$¢ †´ YZžÅõ0ßz°NëRe… Á¢ç«|ŠUž +åàþkÒÁk6z¿ÎJ/¥EG¸"çV䇜eK¯ØX¨ãE=Ÿ®:¦Ór;¶òËÕ¨@¸ÛS -×âôûD\Õ<7þj)±ÓäÔšòÓF¥"ÿ—TJ”ÛlGKy”9ŒvÖpâ¥f¾?ì²Ëò¨µ(3AK×Hk¶D)͇òܨŽú¼÷ESŽnª3èÃY²Ñmu.{V¬üÙVþf4¿ÊZºËcÑ@RX’>ΕeŠžš¤Ö+„íÂ2f¥^œWýå÷PeaòÚ +NÊÜ‚dº÷â]é +÷ñ$É,ÒÔÉ!Z—£§ñæ—#1ÂL>þȇ´åËÉûîò²É±ÈÞºY½DàR8Pº\Ð}iž¼_ä?Ƈu:¤”×~Ÿy8lt£‘¯F±~Gcã=<‰Ìy…v;×6ઋˆ¯ÍþšFŽ„°fpm%°ð‚¡—',•ªõIcgl§=ƉŽó†; ¾\ޤ«ó‘ŒÎ9/päÏ4å´4X¸ìä}Ì"ž×™4+ñHS€/$%oó<Œ–Ûò¹á½rÉ­CJxœc-²ðVØ#ãX嵈Ú`œý +Žî—@‚0ûøÑÃú… y&8²&I ãÃ:ãdXšhñÂbëŽQk†ç$áætg1~½înWï·' +{–ü‘;†@FlÊõ(ù³ÿ}•üY•‚X{>`iæ€T +Úþ~ý™õðaaôúõÁëWƒãRWà£Ä>j@\\NÀõ‡XùªÙɈ>~°7¨¶”õ‡üø«/?ûùßäüë_ÿÓÇ÷ÿòÃï¾ûnüû_ýðË_ýZþ‚ísüߨ<±¿PÄoÌ»vo™üøŸ_þìëÏñço¿æžû×_~öÿîç¿ûÃ/~õí¿úͯ¿ÿÝ¿¼ýÿô÷ñßþæoñ6Àùög?ÿïþHüùÏßþ-0‰ÿ° üçþˆÿú{ÿrž7FŽé|±³À ¬—7ib6üøâ&yøÙ¿€Þ¿Å¿þ3ÚÁÉ?¾y÷öwoÿý¸·b¯ÿî:‚éaïDÒX‡•ilðóñå¿| òL\k<ÿ‹ãÌŒÉÙMІÒ(¿eEŸÈãœÀÓ"MT/r®š@‰EDÅ´¬›&•ÄXä¶Oû™¯Á®gJ=‹…ÅSÃóx‚19˜ã$òø]o/ò¬!Ê5‡þ˜†@ó’ùöÅñÖ©ðê륿»K¦ˆ¦~‡ŒZ cÐêçÇÖǦø¯–`¦\RÏðYU× ?Â,6`ja¤E! ô!-5ÔRªŸBB2zÙxl t/2ó³Xi«Y’¢ÀåñY: œ³šΖÎæªDc¶)ÄC\úÇš;± ƒ2Çù3V×â«-Ñ\L‹.˜v#›cŸß±±¢Ä'•2â¿ÖêCp¹gÄ8ålÿ±¨Ä»gmFÒ:qd?ã<ßé¼´V°Q‹ÊÍym|}_šx½¦Œ±«n ."Œ&cq)A‹Ku¥æ¶"U­}ÀÆ"Sl3:Ùx® ÑµÈ Ì6Ç5%û:QÃÑkLóDu¢ùº¢Æb ãþK²¤Xäè’å_½´ÄƒDfV€‰q\ͶÝöhR]®¦?ùÚÇ—ßC3u!_7ÞÇßê–>ʬo˜')5¦xÿ:j’5Œêa™Äj!¨ÎÐ Õf‚©<Î!U7É{bFnŠ«)©ã¢AŒï“Ü>MEàycHÆ V K#)?;w|ãÂÞ3ic§œ­˜ç˜ù‹˜Îw:Ø–œ»%júw„)Õbž&FC<ï¯1›Bh ¸j§G†55-HšÜ'3K!,áènc5 'q\‡pVvR2eýî"¬Ì0Îpú¥&NÙõçj\ +a Kw£˜¬‰Q8`½Ÿ{¶„•x^užššÄP¾óQ”BXÂÒÝ,ÆjŽ–}CŶ÷ÌôóÄñ!!µ¯~RªŠ‰}+ì^jªÁ[Æàá„óä§Blj¼áAö»—Q³‰C™U—&Û¼:~WG–ŽxÄ|¯é¦ùNÛIƒ ^ž²¤ñU7RÞ,jg»Ô£\¿3x³¾f4mÔŽuÂ+ó§+pÊñÛ#†^‰ÃÀ&Ì¢ÞÆÑ,¶´CÿOÖðp^Ý–Cé75±`Xÿ2ƒ“$v«|‰W°-XãËøþŽh•å[(îè~55Z ¦·¡Dj¹ª/mò+¢µã o9 Љº% +M‚Xˆ)ã_Q£=5*ËQÜÑý(kj4ÄôI²“+‘ÎÞï> k?;™là“ß¼ a=Ë¥È,ªÊêx¬å4Ö®Hfi/ViMÜ‚.?ësN¥XÛÊœÓMÚ1@Ë7Ð]…AëÃ1Æxüî`Èñã/–Û‘™uÆ‚™9•¶Û‘™.Îzp9°8Œaö3»Ë!²ò°á:ìóÊr@J38HE£—êßãÃ"Ã8s3(Ù–¢0ÊØ)ÑNÄ>ËÙ¹¢{Ù9«)QÓašH1¥,—!Ú‘L8Ãð/ó} ƒ5f çA Õð@Jqƒ,ˆÊŒ£—Æ:˜¬Ô"«†”lËјÝôß)ÑîÃ>Ë Ù¹¢{üÔß_·ŽÌôÈE]ùdÙÙáÈiTàGSM>?”n–‰)kÁpÔÀ ׃— ̱c¸£æt/¼?¡×ÍUXÑ”(„v>4d·þ!ʃPÃ1ÜÅÕ‹b¬¢D# ?$÷‹Ö†mkø!…¯Í°¢0|›ôÌÙA–²ÍòCî)?„7_Û'6=\ý^¼°¦;Y¨Õ²üigI²rhzòÅ RxÚýàsò1²ðNdeçb€ø:9}TÙWËý° Êý0@Ë!0¨8Ü=Š“ûq þ€kŽ^‡ÁLËëP±¼Õ—¶óÚ”“ ‡¤ ƒ%;H3Ta@´³¡Aʼ×Ôh'AÊr6SôÏGµ¡™núJ€–¡úÒVý¢U»j¨†k¡Y¦@šñŠ 1\ ´óší¨QY®ÅbŠþ¹â¨ö(4Äô(Zœ´bËH»GÁ÷@y=ø^¨gk¿‘ éìðqC&£3tq{x0÷B*Ìï.«Òòú“ Yõ v¬¹‹ÿb4i—Â-sßøêò j>Åcp\sb}Äh²œ‹Ö¤Ü½åS ©g–M­L䋆%ßÃf‘ÇÛ o`ŸP†OGhüž™B +U;K$ÄИR©(QçИݒW”ho`åSì\ѽìœÕ>…B˜>³fs²\ æG,¬g SžYX³Ú PC4|‰0#2°èQ6n<ÈJøÆ¬¹çx0  P×00»-¿S¢½€}<–/1™aüxã£A€BXn$ÌØ!JÉñe­“[Ѥ £aÃw>ìI3¦³á¨¡io‚Z¿$ãÇÜ1:‹ÿ1…Z^}Ý ÐåDÍt?¾¯¬~E¼á;(¨^÷”Ëp4žc¦X9þ‹óO<ν– ÕEïÕÛž‚YžÂþ5ËS¸§ˆž±÷ÊD>>bW$2øá)ŒFVúc£ä"+#=ðõ7ñ ?$P¦>ëIÉa–á)D¦I.ÔY³.ó%® ŸxŸŸO!†ÁÛ–ê|Mé€ó9)#ØYŸýü£Iy +hñÖW§é"òp¬1-¸Á‰õ£Éð°WC_0Ù“ïàY0|H-mÕj˜éê)¯T‚á¬yeù |^P&®”Õ´~˨åá3‹€aù +£ü„eá¯aîâñãš…°Ü~)ŒuèàF[W„ÄÊì‰æXµÙ0Ó“à3‹•æÌ¼rm꯱j?!òÅP™¿XÀ¡÷T5R²Ðó­³h°#,?Ac63]Q¢Lý5 Ã=P<0~¼ñQ †Ÿ@¥‡Ö)Œ¯s>üib55Ïú®)özˆ£Ì!ßõdÑYmó¯1~BäóŠÔY"’ŒÇöηËYÜ3ÝS ÚaÐÝaP„ì6ÿ1 +í0h¨+6*4B»'ÜÖ¬„¶|æBà‡’½áY8ü™ ±ƒ B}Íp!^ H\ˆXé Aʨū ÁÆÌ‚³ÌØêVÐSÌå=À‚fy4½é>ì˜""Ÿ¸¼´r(bžÖA y•j’`@´¡A‡m¿¾}øŠà“û Ç{üLsëø„ÁHË}P°ÜÕ—¶Ü5‘ÊþWc4܈ÅõcÅLM‚†΃i»}Ò mþ}–ë ø »QÜÔ$h†›®ƒžå:¨¾´Õ®ˆÖ¶ÿ>vË…˜ŒÓ?VL×$(ˆå8h²Ù' ÚÞß`¹ ŠºÅMM‚†˜nCjË|~x ©Í÷2 ÖœóÀÏwy„ÍÓ(,ç ~õúA6£öÒÃmȬ.W.ð:f ¶œVŽjúã#ºI{ hò-«ß íá-cZ¿38±>b4YÞBfÉ L/›[ÞBíj#¤Yú"7#RiŸM–³Àw5e²²l+FntÒÞa‰FLçÖÐ`²#,gAa”­¾S¢íým8–Ó°óDw2Ù©¿¿L!—!&ÊF(Žrr™å½zˬ¯-ôÌl¾{ÚcýaXùû WÌ&ã>‚ü+žµ¯ê(– ¿¿#,Acv} mûxËAØ9 ;Ù¹¨¿¯–ƒýˆÚÁ‚tþê °©ñEïå1mŸç<ŠI³†`ðÆ}«á(@ÇçÄ‚r•YP–—Qç¡8ö!ʸÚÐí(hÈn§+B”­¿ÆpKT'Š­Š0–‘׋ñ±*V–á0p–2n‰óñ™Ã°ƒ,‡aÿšå0ÜS$K!ù~õk·yfƒ·ä³”÷uœj9ø#Ù =’òpE +Íåìª{“ÒÛ =´QCn%ÇÊ’Eß82¨± Êe0@‡=¯©8¼=Š“÷ ¹püNóðøšÁ^Ë{X’±œÕ…¶Ø5mÊî×c3¼Í›¤9«¨1 ÚÐ m¼+j´  Fe¹Š;ºÅcMƒéJ,IZ„êB›ïŠVí¨1[.„âi (j4Äp& ²ä5ÚP£²ü +ÅÝⱦFCL¿¢¹ùR@<ž¡~8h¬TÃhtÍŸ—¢”òc~VÿçćÈo…¥Ìac·|͉`]Æ©¢‘/D\~ÖßåÍaЭ¥ËÇt“v4 ÐòôG—ã`Ðúp8Œ1¿Óœ9>¦›,‡£ñ­¾€Rl¦ÃÁÕÉâ2Žá=t ”Á!ƒƒ-ñLjÂY®Ÿ›”©Ýs„Ä0¹U´ H! ÏCc”å¿¢}†}4–ç±óD÷²óU¢¦/Â25¼Šu|­ª˜×„T…|¨0 +,‡ƒ ÀNÆoE&©AÎ_díãÜX“ÙKƒf´®+fƒåƒM»é¿N»;Ñ–²]÷²³OS¢–‚’ò¸ ätuBk$°Ôs`}<Ëöom”vÚaÕHoЃ5¼ÞäMn®X© “®ð‘5>ChÄ7i„òB Ènü+B”¡†c¸!Š)ªÅXE‰Fn쪼5Â’OÜŒ)8¾ÅÀòR ßpCvå†ì_³Ü{Š$I‚j”/¨DmPŠôHŸjÄ\œ)æCó–7ôÊ,üçÆ+"®ët)±°Ûðy¾Ì]`.ßhÀ>äÑ©nõ’X¬Ó `6XySGSåy±&ùÜÄ›ú×ub½c>4É[;S}¶aï=ìŒÓ4h„¥©ãÖ0ïøª¡ÁÓ ±•öj°(&>’Á‡]± ªk𻑯_[ÇŠ.|æÎÈà³A %ˆltÒÇËnž¯­¶f²!,•®1çvB6Ö«±(á)~¨6Ž$(„!<÷ö·oîíŸßüÛ¿ìU%ø<ŸqØJ±¶ãQ.Vé¹ù+m¤_~fU™ýÙþþ—?ü×ß}ÿ«øÝ—_þþûÿûÃÛ÷¿þõoþðý~ø-ZÞ~ù»~ÿ‡ßüßÿïßü‘ÁOüg?ûëÿôï¿ü?E5p endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 17 0 obj [/View/Design] endobj 18 0 obj <>>> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 29 0 obj [28 0 R 27 0 R] endobj 47 0 obj <> endobj xref 0 48 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000027239 00000 n +0000000012 00000 f +0000292189 00000 n +0000292258 00000 n +0000000000 00000 f +0000027290 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000292440 00000 n +0000292471 00000 n +0000292324 00000 n +0000292355 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000060146 00000 n +0000060216 00000 n +0000292556 00000 n +0000027675 00000 n +0000060628 00000 n +0000060515 00000 n +0000059064 00000 n +0000059585 00000 n +0000059633 00000 n +0000060399 00000 n +0000060430 00000 n +0000060283 00000 n +0000060314 00000 n +0000060702 00000 n +0000060942 00000 n +0000062339 00000 n +0000074398 00000 n +0000139986 00000 n +0000205574 00000 n +0000271162 00000 n +0000292588 00000 n +trailer <<53473152F8114D349FDFDA1D2ADFE4BC>]>> startxref 292790 %%EOF \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/panel/stages_v70.dwg b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/panel/stages_v70.dwg new file mode 100644 index 00000000..2abacf81 Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/panel/stages_v70.dwg differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/pcb/stages_v70.brd b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/pcb/stages_v70.brd new file mode 100644 index 00000000..beaf0dd9 Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/pcb/stages_v70.brd differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/pcb/stages_v70.sch b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/pcb/stages_v70.sch new file mode 100644 index 00000000..3e517d08 Binary files /dev/null and b/plugins/community/repos/AudibleInstruments/eurorack/stages/hardware_design/pcb/stages_v70.sch differ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/io_buffer.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/io_buffer.h new file mode 100644 index 00000000..28830689 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/io_buffer.h @@ -0,0 +1,105 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// I/O Buffering. + +#ifndef STAGES_IO_BUFFER_H_ +#define STAGES_IO_BUFFER_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/utils/gate_flags.h" + +#include + +namespace stages { + +const size_t kNumBlocks = 2; +const size_t kBlockSize = 8; +const size_t kNumChannels = 6; + +class IOBuffer { + public: + struct Block { + float cv_slider[kNumChannels]; + float pot[kNumChannels]; + bool input_patched[kNumChannels]; + + stmlib::GateFlags input[kNumChannels][kBlockSize]; + uint16_t output[kNumChannels][kBlockSize]; + }; + + struct Slice { + Block* block; + size_t frame_index; + }; + + typedef void ProcessFn(Block* block, size_t size); + + IOBuffer() { } + ~IOBuffer() { } + + void Init() { + io_block_ = 0; + render_block_ = kNumBlocks / 2; + io_frame_ = 0; + } + + inline void Process(ProcessFn* fn) { + while (render_block_ != io_block_) { + (*fn)(&block_[render_block_], kBlockSize); + render_block_ = (render_block_ + 1) % kNumBlocks; + } + } + + inline Slice NextSlice(size_t size) { + Slice s; + s.block = &block_[io_block_]; + s.frame_index = io_frame_; + io_frame_ += size; + if (io_frame_ >= kBlockSize) { + io_frame_ -= kBlockSize; + io_block_ = (io_block_ + 1) % kNumBlocks; + } + return s; + } + + inline bool new_block() const { + return io_frame_ == 0; + } + + private: + Block block_[kNumBlocks]; + + size_t io_frame_; + volatile size_t io_block_; + volatile size_t render_block_; + + DISALLOW_COPY_AND_ASSIGN(IOBuffer); +}; + +} // namespace stages + +#endif // STAGES_IO_BUFFER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/makefile b/plugins/community/repos/AudibleInstruments/eurorack/stages/makefile new file mode 100644 index 00000000..5d459334 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/makefile @@ -0,0 +1,61 @@ +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. + +# System specifications +F_CRYSTAL = 8000000L +F_CPU = 72000000L +SYSCLOCK = SYSCLK_FREQ_72MHz +FAMILY = f37x +# USB = enabled + +APPLICATION_LARGE = TRUE +BOOTLOADER = stages_bootloader + +# Prefered upload command +UPLOAD_COMMAND = upload_combo_jtag_erase_first + +# Packages to build +TARGET = stages +PACKAGES = stages \ + stages/drivers \ + stages/ramp \ + stmlib/dsp \ + stmlib/utils \ + stmlib/system +RESOURCES = stages/resources + +TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ + +include stmlib/makefile.inc + +# Rule for building the firmware update file +wav_old: $(TARGET_BIN) + python stm_audio_bootloader/qpsk/encoder.py \ + -t stm32f3 -k -s 48000 -b 8000 -c 4000 -p 256 \ + $(TARGET_BIN) + +wav: $(TARGET_BIN) + python stm_audio_bootloader/qpsk/encoder.py \ + -t stm32f3 -k -s 48000 -b 12000 -c 6000 -p 256 \ + $(TARGET_BIN) diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/oscillator.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/oscillator.h new file mode 100644 index 00000000..17e2d95f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/oscillator.h @@ -0,0 +1,283 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Single waveform oscillator. Can optionally do audio-rate linear FM, with +// through-zero capabilities (negative frequencies). + +#ifndef STAGES_OSCILLATOR_H_ +#define STAGES_OSCILLATOR_H_ + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/utils/random.h" + +#include "stages/resources.h" + +namespace stages { + +enum OscillatorShape { + OSCILLATOR_SHAPE_IMPULSE_TRAIN, + OSCILLATOR_SHAPE_SAW, + OSCILLATOR_SHAPE_SINE, + OSCILLATOR_SHAPE_TRIANGLE, + OSCILLATOR_SHAPE_SLOPE, + OSCILLATOR_SHAPE_SQUARE, + OSCILLATOR_SHAPE_SQUARE_BRIGHT, + OSCILLATOR_SHAPE_SQUARE_DARK, + OSCILLATOR_SHAPE_SQUARE_TRIANGLE, +}; + +const float kMaxFrequency = 0.25f; +const float kMinFrequency = 0.00001f; + +inline float ThisBlepSample(float t) { + return 0.5f * t * t; +} + +inline float NextBlepSample(float t) { + t = 1.0f - t; + return -0.5f * t * t; +} + +inline float NextIntegratedBlepSample(float t) { + const float t1 = 0.5f * t; + const float t2 = t1 * t1; + const float t4 = t2 * t2; + return 0.1875f - t1 + 1.5f * t2 - t4; +} + +inline float ThisIntegratedBlepSample(float t) { + return NextIntegratedBlepSample(1.0f - t); +} + +class Oscillator { + public: + Oscillator() { } + ~Oscillator() { } + + void Init() { + phase_ = 0.5f; + next_sample_ = 0.0f; + lp_state_ = 1.0f; + hp_state_ = 0.0f; + high_ = true; + + frequency_ = 0.001f; + pw_ = 0.5f; + } + + template + void Render(float frequency, float pw, float* out, size_t size) { + Render(frequency, pw, NULL, out, size); + } + + template + void Render( + float frequency, + float pw, + const float* fm, + float* out, + size_t size) { + if (!fm) { + Render(frequency, pw, NULL, out, size); + } else { + Render(frequency, pw, fm, out, size); + } + } + + template + void Render( + float frequency, + float pw, + const float* external_fm, + float* out, + size_t size) { + + if (!has_external_fm) { + if (!through_zero_fm) { + CONSTRAIN(frequency, kMinFrequency, kMaxFrequency); + } else { + CONSTRAIN(frequency, -kMaxFrequency, kMaxFrequency); + } + CONSTRAIN(pw, fabsf(frequency) * 2.0f, 1.0f - 2.0f * fabsf(frequency)) + } + + stmlib::ParameterInterpolator fm(&frequency_, frequency, size); + stmlib::ParameterInterpolator pwm(&pw_, pw, size); + + float next_sample = next_sample_; + + while (size--) { + float this_sample = next_sample; + next_sample = 0.0f; + + float frequency = fm.Next(); + if (has_external_fm) { + frequency *= (1.0f + *external_fm++); + if (!through_zero_fm) { + CONSTRAIN(frequency, kMinFrequency, kMaxFrequency); + } else { + CONSTRAIN(frequency, -kMaxFrequency, kMaxFrequency); + } + } + float pw = (shape == OSCILLATOR_SHAPE_SQUARE_TRIANGLE || + shape == OSCILLATOR_SHAPE_TRIANGLE) ? 0.5f : pwm.Next(); + if (has_external_fm) { + CONSTRAIN(pw, fabsf(frequency) * 2.0f, 1.0f - 2.0f * fabsf(frequency)) + } + phase_ += frequency; + + if (shape <= OSCILLATOR_SHAPE_SAW) { + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float t = phase_ / frequency; + this_sample -= ThisBlepSample(t); + next_sample -= NextBlepSample(t); + } else if (through_zero_fm && phase_ < 0.0f) { + float t = phase_ / frequency; + phase_ += 1.0f; + this_sample += ThisBlepSample(t); + next_sample += NextBlepSample(t); + } + next_sample += phase_; + + if (shape == OSCILLATOR_SHAPE_SAW) { + *out++ = 2.0f * this_sample - 1.0f; + } else { + lp_state_ += 0.25f * ((hp_state_ - this_sample) - lp_state_); + *out++ = 4.0f * lp_state_; + hp_state_ = this_sample; + } + } else if (shape == OSCILLATOR_SHAPE_SINE) { + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + next_sample = stmlib::Interpolate(lut_sine, phase_, 1024.0f); + *out++ = this_sample; + } else if (shape <= OSCILLATOR_SHAPE_SLOPE) { + float slope_up = 2.0f; + float slope_down = 2.0f; + if (shape == OSCILLATOR_SHAPE_SLOPE) { + slope_up = 1.0f / (pw); + slope_down = 1.0f / (1.0f - pw); + } + if (high_ ^ (phase_ < pw)) { + float t = (phase_ - pw) / frequency; + float discontinuity = (slope_up + slope_down) * frequency; + if (through_zero_fm && frequency < 0.0f) { + discontinuity = -discontinuity; + } + this_sample -= ThisIntegratedBlepSample(t) * discontinuity; + next_sample -= NextIntegratedBlepSample(t) * discontinuity; + high_ = phase_ < pw; + } + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float t = phase_ / frequency; + float discontinuity = (slope_up + slope_down) * frequency; + this_sample += ThisIntegratedBlepSample(t) * discontinuity; + next_sample += NextIntegratedBlepSample(t) * discontinuity; + high_ = true; + } else if (through_zero_fm && phase_ < 0.0f) { + float t = phase_ / frequency; + phase_ += 1.0f; + float discontinuity = (slope_up + slope_down) * frequency; + this_sample -= ThisIntegratedBlepSample(t) * discontinuity; + next_sample -= NextIntegratedBlepSample(t) * discontinuity; + high_ = false; + } + next_sample += high_ + ? phase_ * slope_up + : 1.0f - (phase_ - pw) * slope_down; + *out++ = 2.0f * this_sample - 1.0f; + } else { + if (high_ ^ (phase_ >= pw)) { + float t = (phase_ - pw) / frequency; + float discontinuity = 1.0f; + if (through_zero_fm && frequency < 0.0f) { + discontinuity = -discontinuity; + } + this_sample += ThisBlepSample(t) * discontinuity; + next_sample += NextBlepSample(t) * discontinuity; + high_ = phase_ >= pw; + } + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + float t = phase_ / frequency; + this_sample -= ThisBlepSample(t); + next_sample -= NextBlepSample(t); + high_ = false; + } else if (through_zero_fm && phase_ < 0.0f) { + float t = phase_ / frequency; + phase_ += 1.0f; + this_sample += ThisBlepSample(t); + next_sample += NextBlepSample(t); + high_ = true; + } + next_sample += phase_ < pw ? 0.0f : 1.0f; + + if (shape == OSCILLATOR_SHAPE_SQUARE_TRIANGLE) { + const float integrator_coefficient = frequency * 0.0625f; + this_sample = 128.0f * (this_sample - 0.5f); + lp_state_ += integrator_coefficient * (this_sample - lp_state_); + *out++ = lp_state_; + } else if (shape == OSCILLATOR_SHAPE_SQUARE_DARK) { + const float integrator_coefficient = frequency * 2.0f; + this_sample = 4.0f * (this_sample - 0.5f); + lp_state_ += integrator_coefficient * (this_sample - lp_state_); + *out++ = lp_state_; + } else if (shape == OSCILLATOR_SHAPE_SQUARE_BRIGHT) { + const float integrator_coefficient = frequency * 2.0f; + this_sample = 2.0f * this_sample - 1.0f; + lp_state_ += integrator_coefficient * (this_sample - lp_state_); + *out++ = (this_sample - lp_state_) * 0.5f; + } else { + this_sample = 2.0f * this_sample - 1.0f; + *out++ = this_sample; + } + } + } + next_sample_ = next_sample; + } + + private: + // Oscillator state. + float phase_; + float next_sample_; + float lp_state_; + float hp_state_; + bool high_; + + // For interpolation of parameters. + float frequency_; + float pw_; + + DISALLOW_COPY_AND_ASSIGN(Oscillator); +}; + +} // namespace stages + +#endif // STAGES_OSCILLATOR_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/ramp_extractor.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/ramp_extractor.cc new file mode 100644 index 00000000..0b217f39 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/ramp_extractor.cc @@ -0,0 +1,207 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Recovers a ramp from a clock input by guessing at what time the next edge +// will occur. Prediction strategies: +// - Moving average of previous intervals. +// - Periodic rhythmic pattern. +// - Assume that the pulse width is constant, deduct the period from the on time +// and the pulse width. +// +// All prediction strategies are concurrently tested, and the output from the +// best performing one is selected (à la early Scheirer/Goto beat trackers). + +#include "stages/ramp_extractor.h" + +#include + +#include "stmlib/dsp/dsp.h" + +namespace stages { + +using namespace std; +using namespace stmlib; + +const float kPulseWidthTolerance = 0.05f; + +inline bool IsWithinTolerance(float x, float y, float error) { + return x >= y * (1.0f - error) && x <= y * (1.0f + error); +} + +void RampExtractor::Init(float sample_rate, float max_frequency) { + max_frequency_ = max_frequency; + min_period_ = 1.0f / max_frequency_; + min_period_hysteresis_ = min_period_; + reset_interval_ = 5.0f * sample_rate; + + train_phase_ = 0.0f; + frequency_ = 0.0f; + max_ramp_value_ = 1.0f; + f_ratio_ = 1.0f; + reset_counter_ = 1; + + Pulse p; + p.on_duration = uint32_t(sample_rate * 0.25f); + p.total_duration = uint32_t(sample_rate * 0.5f); + p.pulse_width = 0.5f; + + fill(&history_[0], &history_[kHistorySize], p); + current_pulse_ = 0; + history_[current_pulse_].on_duration = 0; + history_[current_pulse_].total_duration = 0; + + average_pulse_width_ = 0.0f; + fill(&prediction_error_[0], &prediction_error_[kMaxPatternPeriod + 1], 50.0f); + fill(&predicted_period_[0], &predicted_period_[kMaxPatternPeriod + 1], + sample_rate * 0.5f); + prediction_error_[0] = 0.0f; +} + +float RampExtractor::ComputeAveragePulseWidth(float tolerance) const { + float sum = 0.0f; + for (size_t i = 0; i < kHistorySize; ++i) { + if (!IsWithinTolerance(history_[i].pulse_width, + history_[current_pulse_].pulse_width, + tolerance)) { + return 0.0f; + } + sum += history_[i].pulse_width; + } + return sum / static_cast(kHistorySize); +} + +float RampExtractor::PredictNextPeriod() { + float last_period = static_cast(history_[current_pulse_].total_duration); + + int best_pattern_period = 0; + for (int i = 0; i <= kMaxPatternPeriod; ++i) { + float error = predicted_period_[i] - last_period; + float error_sq = error * error; + SLOPE(prediction_error_[i], error_sq, 0.7f, 0.2f); + + if (i == 0) { + ONE_POLE(predicted_period_[0], last_period, 0.5f); + } else { + size_t t = current_pulse_ + 1 + kHistorySize - i; + predicted_period_[i] = history_[t % kHistorySize].total_duration; + } + + if (prediction_error_[i] < prediction_error_[best_pattern_period]) { + best_pattern_period = i; + } + } + return predicted_period_[best_pattern_period]; +} + +void RampExtractor::Process( + Ratio ratio, + const GateFlags* gate_flags, + float* ramp, + size_t size) { + float frequency = frequency_; + float train_phase = train_phase_; + float max_train_phase = max_train_phase_; + + while (size--) { + GateFlags flags = *gate_flags++; + + // We are done with the previous pulse. + if (flags & GATE_FLAG_RISING) { + Pulse& p = history_[current_pulse_]; + const bool record_pulse = p.total_duration < reset_interval_; + + if (!record_pulse) { + train_phase = 0.0f; + reset_counter_ = ratio.q; + f_ratio_ = ratio.ratio; + max_train_phase = static_cast(ratio.q); + frequency = 1.0f / PredictNextPeriod(); + } else { + if (float(p.total_duration) <= min_period_hysteresis_) { + min_period_hysteresis_ = min_period_ * 1.05f; + frequency = 1.0f / (p.total_duration); + average_pulse_width_ = 0.0f; + } else { + // Compute the pulse width of the previous pulse, and check if the + // PW has been consistent over the past pulses. + min_period_hysteresis_ = min_period_; + p.pulse_width = static_cast(p.on_duration) / \ + static_cast(p.total_duration); + average_pulse_width_ = ComputeAveragePulseWidth(kPulseWidthTolerance); + if (p.on_duration < 32) { + average_pulse_width_ = 0.0f; + } + frequency = 1.0f / PredictNextPeriod(); + } + + // Reset the phase if necessary, according to the divider ratio. + --reset_counter_; + if (!reset_counter_) { + train_phase = 0.0f; + reset_counter_ = ratio.q; + f_ratio_ = ratio.ratio; + max_train_phase = static_cast(ratio.q); + } else { + float expected = max_train_phase - static_cast(reset_counter_); + float warp = expected - train_phase + 1.0f; + frequency *= max(warp, 0.01f); + } + current_pulse_ = (current_pulse_ + 1) % kHistorySize; + } + history_[current_pulse_].on_duration = 0; + history_[current_pulse_].total_duration = 0; + } + + // Update history buffer with total duration and on duration. + ++history_[current_pulse_].total_duration; + if (flags & GATE_FLAG_HIGH) { + ++history_[current_pulse_].on_duration; + } + + if ((flags & GATE_FLAG_FALLING) && + average_pulse_width_ > 0.0f) { + float t_on = static_cast(history_[current_pulse_].on_duration); + float next = max_train_phase - static_cast(reset_counter_) + 1.0f; + float pw = average_pulse_width_; + frequency = max((next - train_phase), 0.0f) * pw / ((1.0f - pw) * t_on); + } + + train_phase += frequency; + if (train_phase >= max_train_phase) { + train_phase = max_train_phase; + } + + float phase = train_phase * f_ratio_; + phase -= static_cast(static_cast(phase)); + *ramp++ = phase; + } + + frequency_ = frequency; + train_phase_ = train_phase; + max_train_phase_ = max_train_phase; +} + +} // namespace stages \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/ramp_extractor.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/ramp_extractor.h new file mode 100644 index 00000000..066fa925 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/ramp_extractor.h @@ -0,0 +1,104 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Recovers a ramp from a clock input by guessing at what time the next edge +// will occur. Prediction strategies: +// - Moving average of previous intervals. +// - Periodic rhythmic pattern. +// - Assume that the pulse width is constant, deduct the period from the on time +// and the pulse width. +// +// All prediction strategies are concurrently tested, and the output from the +// best performing one is selected (à la early Scheirer/Goto beat trackers). + +#ifndef STAGES_RAMP_EXTRACTOR_H_ +#define STAGES_RAMP_EXTRACTOR_H_ + +#include "stmlib/stmlib.h" + +#include "stmlib/utils/gate_flags.h" + +namespace stages { + +struct Ratio { + float ratio; // Precomputed p/q + int q; +}; + +const int kMaxPatternPeriod = 8; + +class RampExtractor { + public: + RampExtractor() { } + ~RampExtractor() { } + + void Init(float sample_rate, float max_frequency); + void Process( + Ratio r, + const stmlib::GateFlags* gate_flags, + float* ramp, + size_t size); + + private: + struct Pulse { + uint32_t on_duration; + uint32_t total_duration; + float pulse_width; + }; + + static const size_t kHistorySize = 16; + + float ComputeAveragePulseWidth(float tolerance) const; + + float PredictNextPeriod(); + + size_t current_pulse_; + Pulse history_[kHistorySize]; + + float lp_period_; + float prediction_error_[kMaxPatternPeriod + 1]; + float predicted_period_[kMaxPatternPeriod + 1]; + float average_pulse_width_; + + float train_phase_; + float frequency_; + + uint32_t reset_interval_; + int reset_counter_; + float max_ramp_value_; + float f_ratio_; + float max_train_phase_; + + float max_frequency_; + float min_period_; + float min_period_hysteresis_; + + DISALLOW_COPY_AND_ASSIGN(RampExtractor); +}; + +} // namespace stages + +#endif // STAGES_RAMP_EXTRACTOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/resources.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources.cc new file mode 100644 index 00000000..727d1219 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources.cc @@ -0,0 +1,1525 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources + + +#include "stages/resources.h" + +namespace stages { + +const float lut_env_frequency[] = { + 3.200000000e-02, 3.170724097e-02, 3.141749165e-02, 3.113071772e-02, + 3.084688527e-02, 3.056596079e-02, 3.028791125e-02, 3.001270396e-02, + 2.974030670e-02, 2.947068762e-02, 2.920381527e-02, 2.893965860e-02, + 2.867818693e-02, 2.841936997e-02, 2.816317781e-02, 2.790958092e-02, + 2.765855009e-02, 2.741005653e-02, 2.716407177e-02, 2.692056769e-02, + 2.667951654e-02, 2.644089087e-02, 2.620466362e-02, 2.597080803e-02, + 2.573929766e-02, 2.551010641e-02, 2.528320850e-02, 2.505857847e-02, + 2.483619115e-02, 2.461602168e-02, 2.439804554e-02, 2.418223845e-02, + 2.396857646e-02, 2.375703592e-02, 2.354759344e-02, 2.334022593e-02, + 2.313491057e-02, 2.293162482e-02, 2.273034641e-02, 2.253105334e-02, + 2.233372389e-02, 2.213833656e-02, 2.194487016e-02, 2.175330372e-02, + 2.156361652e-02, 2.137578811e-02, 2.118979828e-02, 2.100562704e-02, + 2.082325466e-02, 2.064266165e-02, 2.046382872e-02, 2.028673684e-02, + 2.011136720e-02, 1.993770121e-02, 1.976572050e-02, 1.959540691e-02, + 1.942674251e-02, 1.925970958e-02, 1.909429060e-02, 1.893046826e-02, + 1.876822545e-02, 1.860754528e-02, 1.844841103e-02, 1.829080620e-02, + 1.813471448e-02, 1.798011974e-02, 1.782700604e-02, 1.767535764e-02, + 1.752515897e-02, 1.737639465e-02, 1.722904948e-02, 1.708310843e-02, + 1.693855665e-02, 1.679537946e-02, 1.665356234e-02, 1.651309097e-02, + 1.637395117e-02, 1.623612893e-02, 1.609961039e-02, 1.596438187e-02, + 1.583042985e-02, 1.569774094e-02, 1.556630193e-02, 1.543609975e-02, + 1.530712147e-02, 1.517935434e-02, 1.505278572e-02, 1.492740314e-02, + 1.480319427e-02, 1.468014690e-02, 1.455824898e-02, 1.443748859e-02, + 1.431785396e-02, 1.419933342e-02, 1.408191547e-02, 1.396558872e-02, + 1.385034192e-02, 1.373616393e-02, 1.362304376e-02, 1.351097052e-02, + 1.339993347e-02, 1.328992196e-02, 1.318092548e-02, 1.307293364e-02, + 1.296593617e-02, 1.285992289e-02, 1.275488376e-02, 1.265080884e-02, + 1.254768831e-02, 1.244551245e-02, 1.234427166e-02, 1.224395645e-02, + 1.214455740e-02, 1.204606525e-02, 1.194847081e-02, 1.185176498e-02, + 1.175593880e-02, 1.166098338e-02, 1.156688994e-02, 1.147364979e-02, + 1.138125435e-02, 1.128969511e-02, 1.119896368e-02, 1.110905175e-02, + 1.101995111e-02, 1.093165363e-02, 1.084415127e-02, 1.075743609e-02, + 1.067150022e-02, 1.058633589e-02, 1.050193541e-02, 1.041829119e-02, + 1.033539568e-02, 1.025324147e-02, 1.017182118e-02, 1.009112754e-02, + 1.001115335e-02, 9.931891499e-03, 9.853334933e-03, 9.775476690e-03, + 9.698309879e-03, 9.621827684e-03, 9.546023363e-03, 9.470890247e-03, + 9.396421738e-03, 9.322611313e-03, 9.249452514e-03, 9.176938956e-03, + 9.105064322e-03, 9.033822363e-03, 8.963206898e-03, 8.893211810e-03, + 8.823831051e-03, 8.755058634e-03, 8.686888639e-03, 8.619315208e-03, + 8.552332547e-03, 8.485934922e-03, 8.420116661e-03, 8.354872152e-03, + 8.290195844e-03, 8.226082243e-03, 8.162525916e-03, 8.099521485e-03, + 8.037063631e-03, 7.975147090e-03, 7.913766655e-03, 7.852917172e-03, + 7.792593544e-03, 7.732790726e-03, 7.673503727e-03, 7.614727607e-03, + 7.556457481e-03, 7.498688513e-03, 7.441415919e-03, 7.384634963e-03, + 7.328340962e-03, 7.272529278e-03, 7.217195327e-03, 7.162334567e-03, + 7.107942507e-03, 7.054014702e-03, 7.000546753e-03, 6.947534308e-03, + 6.894973059e-03, 6.842858743e-03, 6.791187141e-03, 6.739954079e-03, + 6.689155425e-03, 6.638787091e-03, 6.588845029e-03, 6.539325235e-03, + 6.490223746e-03, 6.441536639e-03, 6.393260033e-03, 6.345390085e-03, + 6.297922992e-03, 6.250854992e-03, 6.204182360e-03, 6.157901408e-03, + 6.112008488e-03, 6.066499989e-03, 6.021372336e-03, 5.976621991e-03, + 5.932245451e-03, 5.888239252e-03, 5.844599962e-03, 5.801324185e-03, + 5.758408559e-03, 5.715849758e-03, 5.673644488e-03, 5.631789489e-03, + 5.590281534e-03, 5.549117429e-03, 5.508294012e-03, 5.467808152e-03, + 5.427656751e-03, 5.387836742e-03, 5.348345089e-03, 5.309178786e-03, + 5.270334857e-03, 5.231810358e-03, 5.193602371e-03, 5.155708010e-03, + 5.118124418e-03, 5.080848765e-03, 5.043878251e-03, 5.007210102e-03, + 4.970841573e-03, 4.934769947e-03, 4.898992532e-03, 4.863506666e-03, + 4.828309710e-03, 4.793399053e-03, 4.758772110e-03, 4.724426322e-03, + 4.690359154e-03, 4.656568097e-03, 4.623050668e-03, 4.589804405e-03, + 4.556826874e-03, 4.524115664e-03, 4.491668387e-03, 4.459482678e-03, + 4.427556198e-03, 4.395886628e-03, 4.364471673e-03, 4.333309060e-03, + 4.302396541e-03, 4.271731886e-03, 4.241312889e-03, 4.211137366e-03, + 4.181203153e-03, 4.151508107e-03, 4.122050109e-03, 4.092827056e-03, + 4.063836869e-03, 4.035077487e-03, 4.006546872e-03, 3.978243002e-03, + 3.950163877e-03, 3.922307517e-03, 3.894671958e-03, 3.867255259e-03, + 3.840055495e-03, 3.813070761e-03, 3.786299168e-03, 3.759738850e-03, + 3.733387953e-03, 3.707244647e-03, 3.681307114e-03, 3.655573556e-03, + 3.630042194e-03, 3.604711264e-03, 3.579579018e-03, 3.554643726e-03, + 3.529903676e-03, 3.505357170e-03, 3.481002526e-03, 3.456838082e-03, + 3.432862186e-03, 3.409073207e-03, 3.385469525e-03, 3.362049540e-03, + 3.338811664e-03, 3.315754325e-03, 3.292875965e-03, 3.270175043e-03, + 3.247650031e-03, 3.225299415e-03, 3.203121697e-03, 3.181115391e-03, + 3.159279028e-03, 3.137611149e-03, 3.116110312e-03, 3.094775087e-03, + 3.073604058e-03, 3.052595822e-03, 3.031748989e-03, 3.011062183e-03, + 2.990534040e-03, 2.970163210e-03, 2.949948353e-03, 2.929888144e-03, + 2.909981269e-03, 2.890226428e-03, 2.870622331e-03, 2.851167701e-03, + 2.831861273e-03, 2.812701794e-03, 2.793688023e-03, 2.774818728e-03, + 2.756092691e-03, 2.737508705e-03, 2.719065573e-03, 2.700762111e-03, + 2.682597143e-03, 2.664569507e-03, 2.646678050e-03, 2.628921630e-03, + 2.611299115e-03, 2.593809384e-03, 2.576451327e-03, 2.559223843e-03, + 2.542125841e-03, 2.525156242e-03, 2.508313974e-03, 2.491597977e-03, + 2.475007200e-03, 2.458540602e-03, 2.442197150e-03, 2.425975823e-03, + 2.409875606e-03, 2.393895497e-03, 2.378034500e-03, 2.362291630e-03, + 2.346665911e-03, 2.331156373e-03, 2.315762059e-03, 2.300482018e-03, + 2.285315308e-03, 2.270260996e-03, 2.255318157e-03, 2.240485875e-03, + 2.225763242e-03, 2.211149357e-03, 2.196643330e-03, 2.182244275e-03, + 2.167951319e-03, 2.153763592e-03, 2.139680234e-03, 2.125700393e-03, + 2.111823225e-03, 2.098047892e-03, 2.084373564e-03, 2.070799420e-03, + 2.057324644e-03, 2.043948428e-03, 2.030669974e-03, 2.017488486e-03, + 2.004403180e-03, 1.991413275e-03, 1.978518001e-03, 1.965716590e-03, + 1.953008286e-03, 1.940392335e-03, 1.927867993e-03, 1.915434522e-03, + 1.903091189e-03, 1.890837269e-03, 1.878672043e-03, 1.866594798e-03, + 1.854604828e-03, 1.842701432e-03, 1.830883917e-03, 1.819151594e-03, + 1.807503782e-03, 1.795939805e-03, 1.784458993e-03, 1.773060681e-03, + 1.761744213e-03, 1.750508935e-03, 1.739354200e-03, 1.728279368e-03, + 1.717283803e-03, 1.706366876e-03, 1.695527961e-03, 1.684766440e-03, + 1.674081699e-03, 1.663473131e-03, 1.652940132e-03, 1.642482105e-03, + 1.632098457e-03, 1.621788600e-03, 1.611551954e-03, 1.601387940e-03, + 1.591295986e-03, 1.581275525e-03, 1.571325996e-03, 1.561446839e-03, + 1.551637504e-03, 1.541897441e-03, 1.532226108e-03, 1.522622966e-03, + 1.513087482e-03, 1.503619126e-03, 1.494217374e-03, 1.484881706e-03, + 1.475611605e-03, 1.466406560e-03, 1.457266065e-03, 1.448189618e-03, + 1.439176719e-03, 1.430226875e-03, 1.421339595e-03, 1.412514396e-03, + 1.403750794e-03, 1.395048313e-03, 1.386406480e-03, 1.377824824e-03, + 1.369302881e-03, 1.360840190e-03, 1.352436294e-03, 1.344090738e-03, + 1.335803072e-03, 1.327572853e-03, 1.319399636e-03, 1.311282984e-03, + 1.303222462e-03, 1.295217639e-03, 1.287268088e-03, 1.279373385e-03, + 1.271533110e-03, 1.263746847e-03, 1.256014182e-03, 1.248334705e-03, + 1.240708011e-03, 1.233133696e-03, 1.225611362e-03, 1.218140612e-03, + 1.210721053e-03, 1.203352296e-03, 1.196033955e-03, 1.188765647e-03, + 1.181546992e-03, 1.174377613e-03, 1.167257137e-03, 1.160185194e-03, + 1.153161416e-03, 1.146185440e-03, 1.139256903e-03, 1.132375448e-03, + 1.125540719e-03, 1.118752365e-03, 1.112010036e-03, 1.105313385e-03, + 1.098662069e-03, 1.092055747e-03, 1.085494081e-03, 1.078976736e-03, + 1.072503380e-03, 1.066073683e-03, 1.059687318e-03, 1.053343961e-03, + 1.047043290e-03, 1.040784986e-03, 1.034568733e-03, 1.028394218e-03, + 1.022261129e-03, 1.016169157e-03, 1.010117997e-03, 1.004107345e-03, + 9.981369003e-04, 9.922063634e-04, 9.863154387e-04, 9.804638323e-04, + 9.746512528e-04, 9.688774113e-04, 9.631420212e-04, 9.574447981e-04, + 9.517854600e-04, 9.461637272e-04, 9.405793222e-04, 9.350319700e-04, + 9.295213974e-04, 9.240473339e-04, 9.186095107e-04, 9.132076616e-04, + 9.078415222e-04, 9.025108306e-04, 8.972153266e-04, 8.919547524e-04, + 8.867288522e-04, 8.815373723e-04, 8.763800609e-04, 8.712566683e-04, + 8.661669468e-04, 8.611106508e-04, 8.560875366e-04, 8.510973623e-04, + 8.461398881e-04, 8.412148761e-04, 8.363220903e-04, 8.314612965e-04, + 8.266322626e-04, 8.218347581e-04, 8.170685543e-04, 8.123334247e-04, + 8.076291442e-04, 8.029554898e-04, 7.983122399e-04, 7.936991750e-04, + 7.891160773e-04, 7.845627306e-04, 7.800389204e-04, 7.755444340e-04, + 7.710790604e-04, 7.666425902e-04, 7.622348157e-04, 7.578555307e-04, + 7.535045309e-04, 7.491816134e-04, 7.448865769e-04, 7.406192218e-04, + 7.363793501e-04, 7.321667651e-04, 7.279812718e-04, 7.238226770e-04, + 7.196907885e-04, 7.155854160e-04, 7.115063705e-04, 7.074534647e-04, + 7.034265124e-04, 6.994253292e-04, 6.954497319e-04, 6.914995390e-04, + 6.875745701e-04, 6.836746464e-04, 6.797995905e-04, 6.759492264e-04, + 6.721233792e-04, 6.683218758e-04, 6.645445440e-04, 6.607912133e-04, + 6.570617144e-04, 6.533558791e-04, 6.496735408e-04, 6.460145341e-04, + 6.423786949e-04, 6.387658602e-04, 6.351758685e-04, 6.316085593e-04, + 6.280637736e-04, 6.245413535e-04, 6.210411422e-04, 6.175629844e-04, + 6.141067257e-04, 6.106722130e-04, 6.072592944e-04, 6.038678191e-04, + 6.004976377e-04, 5.971486015e-04, 5.938205634e-04, 5.905133771e-04, + 5.872268975e-04, 5.839609808e-04, 5.807154840e-04, 5.774902654e-04, + 5.742851844e-04, 5.711001012e-04, 5.679348774e-04, 5.647893755e-04, + 5.616634590e-04, 5.585569926e-04, 5.554698418e-04, 5.524018733e-04, + 5.493529547e-04, 5.463229548e-04, 5.433117431e-04, 5.403191904e-04, + 5.373451682e-04, 5.343895491e-04, 5.314522068e-04, 5.285330156e-04, + 5.256318510e-04, 5.227485896e-04, 5.198831085e-04, 5.170352860e-04, + 5.142050014e-04, 5.113921346e-04, 5.085965667e-04, 5.058181795e-04, + 5.030568559e-04, 5.003124793e-04, 4.975849345e-04, 4.948741066e-04, + 4.921798820e-04, 4.895021478e-04, 4.868407918e-04, 4.841957029e-04, + 4.815667706e-04, 4.789538854e-04, 4.763569385e-04, 4.737758219e-04, + 4.712104286e-04, 4.686606521e-04, 4.661263869e-04, 4.636075282e-04, + 4.611039721e-04, 4.586156152e-04, 4.561423552e-04, 4.536840903e-04, + 4.512407196e-04, 4.488121429e-04, 4.463982607e-04, 4.439989744e-04, + 4.416141858e-04, 4.392437978e-04, 4.368877138e-04, 4.345458379e-04, + 4.322180750e-04, 4.299043307e-04, 4.276045112e-04, 4.253185234e-04, + 4.230462751e-04, 4.207876745e-04, 4.185426306e-04, 4.163110530e-04, + 4.140928520e-04, 4.118879387e-04, 4.096962246e-04, 4.075176220e-04, + 4.053520438e-04, 4.031994036e-04, 4.010596155e-04, 3.989325943e-04, + 3.968182554e-04, 3.947165149e-04, 3.926272895e-04, 3.905504963e-04, + 3.884860532e-04, 3.864338787e-04, 3.843938918e-04, 3.823660122e-04, + 3.803501600e-04, 3.783462561e-04, 3.763542218e-04, 3.743739791e-04, + 3.724054504e-04, 3.704485588e-04, 3.685032279e-04, 3.665693819e-04, + 3.646469455e-04, 3.627358439e-04, 3.608360030e-04, 3.589473490e-04, + 3.570698089e-04, 3.552033099e-04, 3.533477801e-04, 3.515031477e-04, + 3.496693419e-04, 3.478462919e-04, 3.460339278e-04, 3.442321800e-04, + 3.424409794e-04, 3.406602575e-04, 3.388899463e-04, 3.371299781e-04, + 3.353802858e-04, 3.336408028e-04, 3.319114631e-04, 3.301922008e-04, + 3.284829508e-04, 3.267836483e-04, 3.250942291e-04, 3.234146294e-04, + 3.217447856e-04, 3.200846351e-04, 3.184341152e-04, 3.167931639e-04, + 3.151617196e-04, 3.135397212e-04, 3.119271079e-04, 3.103238194e-04, + 3.087297960e-04, 3.071449780e-04, 3.055693065e-04, 3.040027229e-04, + 3.024451689e-04, 3.008965869e-04, 2.993569193e-04, 2.978261092e-04, + 2.963041000e-04, 2.947908356e-04, 2.932862601e-04, 2.917903182e-04, + 2.903029548e-04, 2.888241153e-04, 2.873537455e-04, 2.858917915e-04, + 2.844381998e-04, 2.829929174e-04, 2.815558914e-04, 2.801270695e-04, + 2.787063996e-04, 2.772938303e-04, 2.758893100e-04, 2.744927880e-04, + 2.731042136e-04, 2.717235367e-04, 2.703507073e-04, 2.689856759e-04, + 2.676283933e-04, 2.662788108e-04, 2.649368797e-04, 2.636025519e-04, + 2.622757796e-04, 2.609565152e-04, 2.596447117e-04, 2.583403221e-04, + 2.570432999e-04, 2.557535989e-04, 2.544711732e-04, 2.531959773e-04, + 2.519279658e-04, 2.506670939e-04, 2.494133169e-04, 2.481665905e-04, + 2.469268706e-04, 2.456941135e-04, 2.444682759e-04, 2.432493145e-04, + 2.420371865e-04, 2.408318494e-04, 2.396332610e-04, 2.384413793e-04, + 2.372561626e-04, 2.360775695e-04, 2.349055590e-04, 2.337400902e-04, + 2.325811226e-04, 2.314286158e-04, 2.302825300e-04, 2.291428253e-04, + 2.280094623e-04, 2.268824019e-04, 2.257616051e-04, 2.246470333e-04, + 2.235386481e-04, 2.224364113e-04, 2.213402851e-04, 2.202502319e-04, + 2.191662142e-04, 2.180881950e-04, 2.170161375e-04, 2.159500050e-04, + 2.148897611e-04, 2.138353698e-04, 2.127867951e-04, 2.117440015e-04, + 2.107069535e-04, 2.096756160e-04, 2.086499540e-04, 2.076299330e-04, + 2.066155184e-04, 2.056066760e-04, 2.046033718e-04, 2.036055722e-04, + 2.026132434e-04, 2.016263523e-04, 2.006448657e-04, 1.996687508e-04, + 1.986979749e-04, 1.977325057e-04, 1.967723108e-04, 1.958173583e-04, + 1.948676164e-04, 1.939230536e-04, 1.929836384e-04, 1.920493398e-04, + 1.911201267e-04, 1.901959685e-04, 1.892768346e-04, 1.883626947e-04, + 1.874535186e-04, 1.865492764e-04, 1.856499384e-04, 1.847554751e-04, + 1.838658571e-04, 1.829810552e-04, 1.821010405e-04, 1.812257843e-04, + 1.803552580e-04, 1.794894331e-04, 1.786282815e-04, 1.777717753e-04, + 1.769198864e-04, 1.760725874e-04, 1.752298508e-04, 1.743916492e-04, + 1.735579556e-04, 1.727287431e-04, 1.719039849e-04, 1.710836544e-04, + 1.702677253e-04, 1.694561712e-04, 1.686489663e-04, 1.678460845e-04, + 1.670475002e-04, 1.662531879e-04, 1.654631221e-04, 1.646772776e-04, + 1.638956295e-04, 1.631181527e-04, 1.623448227e-04, 1.615756148e-04, + 1.608105047e-04, 1.600494680e-04, 1.592924808e-04, 1.585395190e-04, + 1.577905590e-04, 1.570455770e-04, 1.563045497e-04, 1.555674538e-04, + 1.548342660e-04, 1.541049633e-04, 1.533795230e-04, 1.526579222e-04, + 1.519401384e-04, 1.512261493e-04, 1.505159324e-04, 1.498094657e-04, + 1.491067273e-04, 1.484076951e-04, 1.477123477e-04, 1.470206632e-04, + 1.463326205e-04, 1.456481981e-04, 1.449673748e-04, 1.442901298e-04, + 1.436164421e-04, 1.429462909e-04, 1.422796556e-04, 1.416165158e-04, + 1.409568511e-04, 1.403006413e-04, 1.396478662e-04, 1.389985060e-04, + 1.383525407e-04, 1.377099507e-04, 1.370707164e-04, 1.364348184e-04, + 1.358022372e-04, 1.351729537e-04, 1.345469487e-04, 1.339242034e-04, + 1.333046989e-04, 1.326884164e-04, 1.320753373e-04, 1.314654432e-04, + 1.308587157e-04, 1.302551364e-04, 1.296546874e-04, 1.290573505e-04, + 1.284631078e-04, 1.278719415e-04, 1.272838340e-04, 1.266987677e-04, + 1.261167250e-04, 1.255376888e-04, 1.249616416e-04, 1.243885664e-04, + 1.238184462e-04, 1.232512640e-04, 1.226870030e-04, 1.221256465e-04, + 1.215671779e-04, 1.210115808e-04, 1.204588386e-04, 1.199089352e-04, + 1.193618543e-04, 1.188175798e-04, 1.182760958e-04, 1.177373864e-04, + 1.172014358e-04, 1.166682282e-04, 1.161377482e-04, 1.156099801e-04, + 1.150849087e-04, 1.145625186e-04, 1.140427946e-04, 1.135257216e-04, + 1.130112845e-04, 1.124994686e-04, 1.119902588e-04, 1.114836406e-04, + 1.109795992e-04, 1.104781200e-04, 1.099791887e-04, 1.094827909e-04, + 1.089889122e-04, 1.084975385e-04, 1.080086557e-04, 1.075222497e-04, + 1.070383066e-04, 1.065568125e-04, 1.060777538e-04, 1.056011166e-04, + 1.051268875e-04, 1.046550529e-04, 1.041855993e-04, 1.037185135e-04, + 1.032537822e-04, 1.027913922e-04, 1.023313304e-04, 1.018735838e-04, + 1.014181394e-04, 1.009649844e-04, 1.005141060e-04, 1.000654915e-04, + 9.961912829e-05, 9.917500381e-05, 9.873310561e-05, 9.829342127e-05, + 9.785593849e-05, 9.742064503e-05, 9.698752872e-05, 9.655657747e-05, + 9.612777925e-05, 9.570112212e-05, 9.527659422e-05, 9.485418373e-05, + 9.443387894e-05, 9.401566819e-05, 9.359953988e-05, 9.318548251e-05, + 9.277348463e-05, 9.236353487e-05, 9.195562191e-05, 9.154973452e-05, + 9.114586154e-05, 9.074399185e-05, 9.034411442e-05, 8.994621829e-05, + 8.955029255e-05, 8.915632637e-05, 8.876430898e-05, 8.837422967e-05, + 8.798607780e-05, 8.759984280e-05, 8.721551416e-05, 8.683308142e-05, + 8.645253419e-05, 8.607386216e-05, 8.569705507e-05, 8.532210271e-05, + 8.494899495e-05, 8.457772170e-05, 8.420827296e-05, 8.384063876e-05, + 8.347480921e-05, 8.311077447e-05, 8.274852476e-05, 8.238805037e-05, + 8.202934162e-05, 8.167238892e-05, 8.131718272e-05, 8.096371353e-05, + 8.061197192e-05, 8.026194851e-05, 7.991363397e-05, 7.956701905e-05, + 7.922209454e-05, 7.887885127e-05, 7.853728016e-05, 7.819737214e-05, + 7.785911824e-05, 7.752250951e-05, 7.718753706e-05, 7.685419207e-05, + 7.652246575e-05, 7.619234937e-05, 7.586383425e-05, 7.553691178e-05, + 7.521157338e-05, 7.488781051e-05, 7.456561472e-05, 7.424497757e-05, + 7.392589070e-05, 7.360834577e-05, 7.329233452e-05, 7.297784872e-05, + 7.266488018e-05, 7.235342079e-05, 7.204346246e-05, 7.173499716e-05, + 7.142801689e-05, 7.112251373e-05, 7.081847977e-05, 7.051590718e-05, + 7.021478814e-05, 6.991511491e-05, 6.961687978e-05, 6.932007508e-05, + 6.902469320e-05, 6.873072655e-05, 6.843816761e-05, 6.814700890e-05, + 6.785724297e-05, 6.756886242e-05, 6.728185989e-05, 6.699622808e-05, + 6.671195971e-05, 6.642904756e-05, 6.614748444e-05, 6.586726321e-05, + 6.558837676e-05, 6.531081804e-05, 6.503458002e-05, 6.475965572e-05, + 6.448603821e-05, 6.421372060e-05, 6.394269601e-05, 6.367295764e-05, + 6.340449870e-05, 6.313731245e-05, 6.287139221e-05, 6.260673129e-05, + 6.234332308e-05, 6.208116100e-05, 6.182023850e-05, 6.156054907e-05, + 6.130208623e-05, 6.104484356e-05, 6.078881466e-05, 6.053399316e-05, + 6.028037275e-05, 6.002794714e-05, 5.977671007e-05, 5.952665533e-05, + 5.927777675e-05, 5.903006817e-05, 5.878352350e-05, 5.853813665e-05, + 5.829390159e-05, 5.805081232e-05, 5.780886286e-05, 5.756804728e-05, + 5.732835968e-05, 5.708979419e-05, 5.685234499e-05, 5.661600625e-05, + 5.638077223e-05, 5.614663719e-05, 5.591359541e-05, 5.568164124e-05, + 5.545076904e-05, 5.522097321e-05, 5.499224816e-05, 5.476458836e-05, + 5.453798830e-05, 5.431244250e-05, 5.408794551e-05, 5.386449193e-05, + 5.364207635e-05, 5.342069343e-05, 5.320033785e-05, 5.298100430e-05, + 5.276268753e-05, 5.254538229e-05, 5.232908339e-05, 5.211378565e-05, + 5.189948393e-05, 5.168617309e-05, 5.147384807e-05, 5.126250380e-05, + 5.105213524e-05, 5.084273739e-05, 5.063430529e-05, 5.042683398e-05, + 5.022031855e-05, 5.001475410e-05, 4.981013577e-05, 4.960645873e-05, + 4.940371816e-05, 4.920190929e-05, 4.900102736e-05, 4.880106764e-05, + 4.860202543e-05, 4.840389605e-05, 4.820667487e-05, 4.801035724e-05, + 4.781493858e-05, 4.762041431e-05, 4.742677989e-05, 4.723403080e-05, + 4.704216253e-05, 4.685117063e-05, 4.666105065e-05, 4.647179816e-05, + 4.628340877e-05, 4.609587811e-05, 4.590920184e-05, 4.572337562e-05, + 4.553839515e-05, 4.535425618e-05, 4.517095444e-05, 4.498848570e-05, + 4.480684577e-05, 4.462603046e-05, 4.444603561e-05, 4.426685709e-05, + 4.408849079e-05, 4.391093262e-05, 4.373417851e-05, 4.355822442e-05, + 4.338306633e-05, 4.320870023e-05, 4.303512216e-05, 4.286232816e-05, + 4.269031429e-05, 4.251907664e-05, 4.234861132e-05, 4.217891446e-05, + 4.200998222e-05, 4.184181078e-05, 4.167439631e-05, 4.150773505e-05, + 4.134182322e-05, 4.117665709e-05, 4.101223293e-05, 4.084854705e-05, + 4.068559575e-05, 4.052337538e-05, 4.036188230e-05, 4.020111289e-05, + 4.004106354e-05, 3.988173067e-05, 3.972311073e-05, 3.956520016e-05, + 3.940799545e-05, 3.925149309e-05, 3.909568960e-05, 3.894058151e-05, + 3.878616537e-05, 3.863243776e-05, 3.847939527e-05, 3.832703450e-05, + 3.817535208e-05, 3.802434466e-05, 3.787400891e-05, 3.772434149e-05, + 3.757533913e-05, 3.742699853e-05, 3.727931643e-05, 3.713228958e-05, + 3.698591475e-05, 3.684018874e-05, 3.669510835e-05, 3.655067039e-05, + 3.640687173e-05, 3.626370920e-05, 3.612117969e-05, 3.597928009e-05, + 3.583800730e-05, 3.569735825e-05, 3.555732989e-05, 3.541791916e-05, + 3.527912305e-05, 3.514093854e-05, 3.500336265e-05, 3.486639239e-05, + 3.473002481e-05, 3.459425696e-05, 3.445908590e-05, 3.432450874e-05, + 3.419052256e-05, 3.405712449e-05, 3.392431166e-05, 3.379208122e-05, + 3.366043033e-05, 3.352935617e-05, 3.339885594e-05, 3.326892684e-05, + 3.313956611e-05, 3.301077097e-05, 3.288253868e-05, 3.275486651e-05, + 3.262775174e-05, 3.250119167e-05, 3.237518362e-05, 3.224972490e-05, + 3.212481286e-05, 3.200044485e-05, 3.187661824e-05, 3.175333042e-05, + 3.163057878e-05, 3.150836073e-05, 3.138667369e-05, 3.126551510e-05, + 3.114488242e-05, 3.102477311e-05, 3.090518464e-05, 3.078611451e-05, + 3.066756022e-05, 3.054951930e-05, 3.043198927e-05, 3.031496767e-05, + 3.019845207e-05, 3.008244003e-05, 2.996692914e-05, 2.985191699e-05, + 2.973740120e-05, 2.962337938e-05, 2.950984916e-05, 2.939680820e-05, + 2.928425414e-05, 2.917218467e-05, 2.906059746e-05, 2.894949021e-05, + 2.883886063e-05, 2.872870644e-05, 2.861902536e-05, 2.850981514e-05, + 2.840107354e-05, 2.829279833e-05, 2.818498727e-05, 2.807763816e-05, + 2.797074881e-05, 2.786431703e-05, 2.775834063e-05, 2.765281747e-05, + 2.754774537e-05, 2.744312221e-05, 2.733894586e-05, 2.723521418e-05, + 2.713192509e-05, 2.702907647e-05, 2.692666624e-05, 2.682469233e-05, + 2.672315268e-05, 2.662204522e-05, 2.652136792e-05, 2.642111874e-05, + 2.632129566e-05, 2.622189668e-05, 2.612291978e-05, 2.602436298e-05, + 2.592622430e-05, 2.582850177e-05, 2.573119342e-05, 2.563429732e-05, + 2.553781151e-05, 2.544173408e-05, 2.534606309e-05, 2.525079665e-05, + 2.515593284e-05, 2.506146979e-05, 2.496740561e-05, 2.487373842e-05, + 2.478046638e-05, 2.468758763e-05, 2.459510032e-05, 2.450300262e-05, + 2.441129272e-05, 2.431996880e-05, 2.422902905e-05, 2.413847167e-05, + 2.404829489e-05, 2.395849693e-05, 2.386907602e-05, 2.378003040e-05, + 2.369135832e-05, 2.360305804e-05, 2.351512784e-05, 2.342756598e-05, + 2.334037076e-05, 2.325354046e-05, 2.316707340e-05, 2.308096788e-05, + 2.299522223e-05, 2.290983478e-05, 2.282480386e-05, 2.274012782e-05, + 2.265580502e-05, 2.257183382e-05, 2.248821259e-05, 2.240493971e-05, + 2.232201357e-05, 2.223943256e-05, 2.215719510e-05, 2.207529959e-05, + 2.199374446e-05, 2.191252813e-05, 2.183164904e-05, 2.175110563e-05, + 2.167089637e-05, 2.159101970e-05, 2.151147409e-05, 2.143225804e-05, + 2.135337000e-05, 2.127480849e-05, 2.119657199e-05, 2.111865902e-05, + 2.104106808e-05, 2.096379770e-05, 2.088684641e-05, 2.081021275e-05, + 2.073389526e-05, 2.065789249e-05, 2.058220299e-05, 2.050682534e-05, + 2.043175811e-05, 2.035699988e-05, 2.028254923e-05, 2.020840477e-05, + 2.013456508e-05, 2.006102879e-05, 1.998779450e-05, 1.991486084e-05, + 1.984222644e-05, 1.976988993e-05, 1.969784996e-05, 1.962610518e-05, + 1.955465424e-05, 1.948349580e-05, 1.941262855e-05, 1.934205115e-05, + 1.927176228e-05, 1.920176065e-05, 1.913204494e-05, 1.906261385e-05, + 1.899346610e-05, 1.892460040e-05, 1.885601548e-05, 1.878771006e-05, + 1.871968288e-05, 1.865193267e-05, 1.858445820e-05, 1.851725820e-05, + 1.845033145e-05, 1.838367670e-05, 1.831729273e-05, 1.825117831e-05, + 1.818533224e-05, 1.811975330e-05, 1.805444029e-05, 1.798939200e-05, + 1.792460726e-05, 1.786008487e-05, 1.779582365e-05, 1.773182244e-05, + 1.766808005e-05, 1.760459533e-05, 1.754136712e-05, 1.747839427e-05, + 1.741567564e-05, 1.735321008e-05, 1.729099646e-05, 1.722903366e-05, + 1.716732054e-05, 1.710585600e-05, 1.704463892e-05, 1.698366819e-05, + 1.692294271e-05, 1.686246139e-05, 1.680222313e-05, 1.674222686e-05, + 1.668247149e-05, 1.662295595e-05, 1.656367916e-05, 1.650464007e-05, + 1.644583762e-05, 1.638727075e-05, 1.632893842e-05, 1.627083957e-05, + 1.621297318e-05, 1.615533821e-05, 1.609793364e-05, 1.604075843e-05, + 1.598381158e-05, 1.592709206e-05, 1.587059888e-05, 1.581433102e-05, + 1.575828750e-05, 1.570246731e-05, 1.564686947e-05, 1.559149299e-05, + 1.553633690e-05, 1.548140022e-05, 1.542668199e-05, 1.537218123e-05, + 1.531789699e-05, 1.526382831e-05, 1.520997424e-05, 1.515633384e-05, + 1.510290617e-05, 1.504969028e-05, 1.499668524e-05, 1.494389013e-05, + 1.489130403e-05, 1.483892601e-05, 1.478675516e-05, 1.473479057e-05, + 1.468303133e-05, 1.463147655e-05, 1.458012532e-05, 1.452897676e-05, + 1.447802997e-05, 1.442728407e-05, 1.437673819e-05, 1.432639144e-05, + 1.427624295e-05, 1.422629186e-05, 1.417653731e-05, 1.412697843e-05, + 1.407761437e-05, 1.402844429e-05, 1.397946732e-05, 1.393068264e-05, + 1.388208940e-05, 1.383368677e-05, 1.378547392e-05, 1.373745002e-05, + 1.368961425e-05, 1.364196579e-05, 1.359450383e-05, 1.354722755e-05, + 1.350013615e-05, 1.345322882e-05, 1.340650478e-05, 1.335996321e-05, + 1.331360333e-05, 1.326742436e-05, 1.322142550e-05, 1.317560599e-05, + 1.312996503e-05, 1.308450186e-05, 1.303921571e-05, 1.299410581e-05, + 1.294917141e-05, 1.290441174e-05, 1.285982605e-05, 1.281541359e-05, + 1.277117360e-05, 1.272710535e-05, 1.268320810e-05, 1.263948111e-05, + 1.259592365e-05, 1.255253498e-05, 1.250931437e-05, 1.246626112e-05, + 1.242337449e-05, 1.238065377e-05, 1.233809825e-05, 1.229570722e-05, + 1.225347997e-05, 1.221141580e-05, 1.216951400e-05, 1.212777389e-05, + 1.208619478e-05, 1.204477596e-05, 1.200351676e-05, 1.196241648e-05, + 1.192147446e-05, 1.188069002e-05, 1.184006247e-05, 1.179959116e-05, + 1.175927541e-05, 1.171911456e-05, 1.167910794e-05, 1.163925491e-05, + 1.159955481e-05, 1.156000697e-05, 1.152061077e-05, 1.148136554e-05, + 1.144227065e-05, 1.140332545e-05, 1.136452932e-05, 1.132588161e-05, + 1.128738170e-05, 1.124902896e-05, 1.121082277e-05, 1.117276249e-05, + 1.113484752e-05, 1.109707724e-05, 1.105945102e-05, 1.102196828e-05, + 1.098462838e-05, 1.094743074e-05, 1.091037475e-05, 1.087345981e-05, + 1.083668532e-05, 1.080005069e-05, 1.076355534e-05, 1.072719866e-05, + 1.069098008e-05, 1.065489901e-05, 1.061895488e-05, 1.058314710e-05, + 1.054747511e-05, 1.051193832e-05, 1.047653618e-05, 1.044126811e-05, + 1.040613355e-05, 1.037113194e-05, 1.033626272e-05, 1.030152534e-05, + 1.026691924e-05, 1.023244386e-05, 1.019809867e-05, 1.016388311e-05, + 1.012979664e-05, 1.009583873e-05, 1.006200883e-05, 1.002830640e-05, + 9.994730916e-06, 9.961281844e-06, 9.927958655e-06, 9.894760824e-06, + 9.861687825e-06, 9.828739139e-06, 9.795914246e-06, 9.763212629e-06, + 9.730633774e-06, 9.698177170e-06, 9.665842306e-06, 9.633628676e-06, + 9.601535776e-06, 9.569563101e-06, 9.537710153e-06, 9.505976433e-06, + 9.474361445e-06, 9.442864697e-06, 9.411485696e-06, 9.380223955e-06, + 9.349078986e-06, 9.318050305e-06, 9.287137430e-06, 9.256339880e-06, + 9.225657179e-06, 9.195088849e-06, 9.164634419e-06, 9.134293415e-06, + 9.104065370e-06, 9.073949816e-06, 9.043946288e-06, 9.014054323e-06, + 8.984273461e-06, 8.954603243e-06, 8.925043212e-06, 8.895592914e-06, + 8.866251896e-06, 8.837019709e-06, 8.807895903e-06, 8.778880033e-06, + 8.749971653e-06, 8.721170323e-06, 8.692475601e-06, 8.663887050e-06, + 8.635404232e-06, 8.607026715e-06, 8.578754064e-06, 8.550585851e-06, + 8.522521646e-06, 8.494561023e-06, 8.466703557e-06, 8.438948826e-06, + 8.411296409e-06, 8.383745887e-06, 8.356296842e-06, 8.328948860e-06, + 8.301701528e-06, 8.274554434e-06, 8.247507168e-06, 8.220559323e-06, + 8.193710493e-06, 8.166960274e-06, 8.140308263e-06, 8.113754061e-06, + 8.087297268e-06, 8.060937487e-06, 8.034674324e-06, 8.008507386e-06, + 7.982436279e-06, 7.956460616e-06, 7.930580007e-06, 7.904794067e-06, + 7.879102410e-06, 7.853504655e-06, 7.828000419e-06, 7.802589323e-06, + 7.777270990e-06, 7.752045043e-06, 7.726911108e-06, 7.701868812e-06, + 7.676917785e-06, 7.652057656e-06, 7.627288057e-06, 7.602608624e-06, + 7.578018991e-06, 7.553518794e-06, 7.529107674e-06, 7.504785270e-06, + 7.480551225e-06, 7.456405181e-06, 7.432346783e-06, 7.408375679e-06, + 7.384491517e-06, 7.360693946e-06, 7.336982617e-06, 7.313357184e-06, + 7.289817301e-06, 7.266362624e-06, 7.242992811e-06, 7.219707519e-06, + 7.196506411e-06, 7.173389147e-06, 7.150355391e-06, 7.127404809e-06, + 7.104537066e-06, 7.081751831e-06, 7.059048773e-06, 7.036427562e-06, + 7.013887871e-06, 6.991429374e-06, 6.969051746e-06, 6.946754663e-06, + 6.924537804e-06, 6.902400847e-06, 6.880343475e-06, 6.858365368e-06, + 6.836466210e-06, 6.814645688e-06, 6.792903486e-06, 6.771239293e-06, + 6.749652797e-06, 6.728143690e-06, 6.706711663e-06, 6.685356410e-06, + 6.664077625e-06, 6.642875003e-06, 6.621748243e-06, 6.600697042e-06, + 6.579721100e-06, 6.558820119e-06, 6.537993802e-06, 6.517241851e-06, + 6.496563972e-06, 6.475959871e-06, 6.455429256e-06, 6.434971836e-06, + 6.414587321e-06, 6.394275422e-06, 6.374035852e-06, 6.353868326e-06, + 6.333772557e-06, 6.313748264e-06, 6.293795162e-06, 6.273912972e-06, + 6.254101413e-06, 6.234360206e-06, 6.214689075e-06, 6.195087742e-06, + 6.175555933e-06, 6.156093374e-06, 6.136699792e-06, 6.117374916e-06, + 6.098118474e-06, 6.078930200e-06, 6.059809823e-06, 6.040757077e-06, + 6.021771697e-06, 6.002853418e-06, 5.984001977e-06, 5.965217111e-06, + 5.946498559e-06, 5.927846062e-06, 5.909259359e-06, 5.890738195e-06, + 5.872282311e-06, 5.853891452e-06, 5.835565365e-06, 5.817303794e-06, + 5.799106489e-06, 5.780973198e-06, 5.762903671e-06, 5.744897659e-06, + 5.726954914e-06, 5.709075188e-06, 5.691258237e-06, 5.673503815e-06, + 5.655811679e-06, 5.638181586e-06, 5.620613294e-06, 5.603106563e-06, + 5.585661153e-06, 5.568276825e-06, 5.550953343e-06, 5.533690469e-06, + 5.516487967e-06, 5.499345605e-06, 5.482263147e-06, 5.465240361e-06, + 5.448277017e-06, 5.431372883e-06, 5.414527729e-06, 5.397741328e-06, + 5.381013452e-06, 5.364343873e-06, 5.347732367e-06, 5.331178709e-06, + 5.314682674e-06, 5.298244041e-06, 5.281862587e-06, 5.265538091e-06, + 5.249270334e-06, 5.233059096e-06, 5.216904159e-06, 5.200805306e-06, + 5.184762322e-06, 5.168774990e-06, 5.152843095e-06, 5.136966426e-06, + 5.121144768e-06, 5.105377911e-06, 5.089665643e-06, 5.074007755e-06, + 5.058404037e-06, 5.042854282e-06, 5.027358281e-06, 5.011915829e-06, + 4.996526720e-06, 4.981190750e-06, 4.965907715e-06, 4.950677411e-06, + 4.935499636e-06, 4.920374191e-06, 4.905300873e-06, 4.890279484e-06, + 4.875309824e-06, 4.860391697e-06, 4.845524904e-06, 4.830709250e-06, + 4.815944540e-06, 4.801230578e-06, 4.786567171e-06, 4.771954126e-06, + 4.757391252e-06, 4.742878356e-06, 4.728415248e-06, 4.714001739e-06, + 4.699637639e-06, 4.685322761e-06, 4.671056916e-06, 4.656839920e-06, + 4.642671585e-06, 4.628551727e-06, 4.614480161e-06, 4.600456704e-06, + 4.586481174e-06, 4.572553389e-06, 4.558673166e-06, 4.544840327e-06, + 4.531054691e-06, 4.517316079e-06, 4.503624313e-06, 4.489979217e-06, + 4.476380612e-06, 4.462828323e-06, 4.449322176e-06, 4.435861994e-06, + 4.422447606e-06, 4.409078837e-06, 4.395755516e-06, 4.382477470e-06, + 4.369244529e-06, 4.356056523e-06, 4.342913282e-06, 4.329814637e-06, + 4.316760421e-06, 4.303750466e-06, 4.290784605e-06, 4.277862673e-06, + 4.264984503e-06, 4.252149932e-06, 4.239358795e-06, 4.226610930e-06, + 4.213906173e-06, 4.201244363e-06, 4.188625338e-06, 4.176048938e-06, + 4.163515003e-06, 4.151023374e-06, 4.138573892e-06, 4.126166399e-06, + 4.113800738e-06, 4.101476752e-06, 4.089194286e-06, 4.076953183e-06, + 4.064753289e-06, 4.052594450e-06, 4.040476513e-06, 4.028399325e-06, + 4.016362733e-06, 4.004366587e-06, 3.992410734e-06, 3.980495025e-06, + 3.968619310e-06, 3.956783440e-06, 3.944987266e-06, 3.933230641e-06, + 3.921513418e-06, 3.909835449e-06, 3.898196588e-06, 3.886596691e-06, + 3.875035611e-06, 3.863513206e-06, 3.852029331e-06, 3.840583843e-06, + 3.829176600e-06, 3.817807459e-06, 3.806476280e-06, 3.795182921e-06, + 3.783927242e-06, 3.772709105e-06, 3.761528368e-06, 3.750384895e-06, + 3.739278547e-06, 3.728209187e-06, 3.717176678e-06, 3.706180884e-06, + 3.695221668e-06, 3.684298897e-06, 3.673412434e-06, 3.662562147e-06, + 3.651747902e-06, 3.640969565e-06, 3.630227005e-06, 3.619520088e-06, + 3.608848685e-06, 3.598212664e-06, 3.587611895e-06, 3.577046248e-06, + 3.566515594e-06, 3.556019804e-06, 3.545558750e-06, 3.535132304e-06, + 3.524740340e-06, 3.514382729e-06, 3.504059347e-06, 3.493770068e-06, + 3.483514766e-06, 3.473293317e-06, 3.463105597e-06, 3.452951482e-06, + 3.442830849e-06, 3.432743575e-06, 3.422689539e-06, 3.412668618e-06, + 3.402680692e-06, 3.392725639e-06, 3.382803340e-06, 3.372913676e-06, + 3.363056525e-06, 3.353231771e-06, 3.343439295e-06, 3.333678979e-06, + 3.323950705e-06, 3.314254357e-06, 3.304589818e-06, 3.294956973e-06, + 3.285355706e-06, 3.275785903e-06, 3.266247447e-06, 3.256740227e-06, + 3.247264127e-06, 3.237819035e-06, 3.228404838e-06, 3.219021424e-06, + 3.209668681e-06, 3.200346498e-06, 3.191054763e-06, 3.181793367e-06, + 3.172562199e-06, 3.163361150e-06, 3.154190110e-06, 3.145048972e-06, + 3.135937625e-06, 3.126855964e-06, 3.117803880e-06, 3.108781266e-06, + 3.099788016e-06, 3.090824023e-06, 3.081889182e-06, 3.072983388e-06, + 3.064106536e-06, 3.055258521e-06, 3.046439239e-06, 3.037648586e-06, + 3.028886460e-06, 3.020152757e-06, 3.011447376e-06, 3.002770213e-06, + 2.994121168e-06, 2.985500139e-06, 2.976907026e-06, 2.968341728e-06, + 2.959804145e-06, 2.951294177e-06, 2.942811725e-06, 2.934356691e-06, + 2.925928976e-06, 2.917528482e-06, 2.909155112e-06, 2.900808767e-06, + 2.892489351e-06, 2.884196768e-06, 2.875930922e-06, 2.867691716e-06, + 2.859479056e-06, 2.851292846e-06, 2.843132992e-06, 2.834999399e-06, + 2.826891974e-06, 2.818810624e-06, 2.810755254e-06, 2.802725773e-06, + 2.794722087e-06, 2.786744105e-06, 2.778791735e-06, 2.770864886e-06, + 2.762963467e-06, 2.755087387e-06, 2.747236556e-06, 2.739410884e-06, + 2.731610281e-06, 2.723834658e-06, 2.716083928e-06, 2.708357999e-06, + 2.700656786e-06, 2.692980200e-06, 2.685328153e-06, 2.677700558e-06, + 2.670097329e-06, 2.662518379e-06, 2.654963622e-06, 2.647432973e-06, + 2.639926345e-06, 2.632443653e-06, 2.624984814e-06, 2.617549742e-06, + 2.610138353e-06, 2.602750564e-06, 2.595386291e-06, 2.588045450e-06, + 2.580727960e-06, 2.573433738e-06, 2.566162700e-06, 2.558914767e-06, + 2.551689855e-06, 2.544487884e-06, 2.537308774e-06, 2.530152442e-06, + 2.523018809e-06, 2.515907796e-06, 2.508819322e-06, 2.501753308e-06, + 2.494709674e-06, 2.487688343e-06, 2.480689236e-06, 2.473712275e-06, + 2.466757381e-06, 2.459824478e-06, 2.452913488e-06, 2.446024334e-06, + 2.439156940e-06, 2.432311229e-06, 2.425487124e-06, 2.418684552e-06, + 2.411903435e-06, 2.405143699e-06, 2.398405269e-06, 2.391688070e-06, + 2.384992029e-06, 2.378317070e-06, 2.371663120e-06, 2.365030107e-06, + 2.358417956e-06, 2.351826595e-06, 2.345255951e-06, 2.338705951e-06, + 2.332176525e-06, 2.325667599e-06, 2.319179104e-06, 2.312710966e-06, + 2.306263116e-06, 2.299835482e-06, 2.293427995e-06, 2.287040584e-06, + 2.280673179e-06, 2.274325710e-06, 2.267998109e-06, 2.261690307e-06, + 2.255402234e-06, 2.249133821e-06, 2.242885002e-06, 2.236655707e-06, + 2.230445868e-06, 2.224255419e-06, 2.218084293e-06, 2.211932421e-06, + 2.205799738e-06, 2.199686176e-06, 2.193591671e-06, 2.187516155e-06, + 2.181459563e-06, 2.175421829e-06, 2.169402889e-06, 2.163402677e-06, + 2.157421129e-06, 2.151458180e-06, 2.145513766e-06, 2.139587822e-06, + 2.133680286e-06, 2.127791094e-06, 2.121920181e-06, 2.116067486e-06, + 2.110232946e-06, 2.104416498e-06, 2.098618079e-06, 2.092837628e-06, + 2.087075083e-06, 2.081330382e-06, 2.075603464e-06, 2.069894267e-06, + 2.064202731e-06, 2.058528795e-06, 2.052872399e-06, 2.047233482e-06, + 2.041611984e-06, 2.036007847e-06, 2.030421009e-06, 2.024851412e-06, + 2.019298996e-06, 2.013763704e-06, 2.008245475e-06, 2.002744252e-06, + 1.997259977e-06, 1.991792591e-06, 1.986342037e-06, 1.980908257e-06, + 1.975491194e-06, 1.970090791e-06, 1.964706991e-06, 1.959339736e-06, + 1.953988971e-06, 1.948654640e-06, 1.943336686e-06, 1.938035053e-06, + 1.932749686e-06, 1.927480530e-06, 1.922227528e-06, 1.916990627e-06, + 1.911769771e-06, 1.906564906e-06, 1.901375977e-06, 1.896202931e-06, + 1.891045712e-06, 1.885904268e-06, 1.880778544e-06, 1.875668488e-06, + 1.870574046e-06, 1.865495165e-06, 1.860431793e-06, 1.855383876e-06, + 1.850351363e-06, 1.845334201e-06, 1.840332338e-06, 1.835345722e-06, + 1.830374302e-06, 1.825418027e-06, 1.820476844e-06, 1.815550703e-06, + 1.810639554e-06, 1.805743345e-06, 1.800862026e-06, 1.795995546e-06, + 1.791143856e-06, 1.786306906e-06, 1.781484646e-06, 1.776677026e-06, + 1.771883997e-06, 1.767105509e-06, 1.762341515e-06, 1.757591964e-06, + 1.752856809e-06, 1.748136001e-06, 1.743429491e-06, 1.738737232e-06, + 1.734059175e-06, 1.729395273e-06, 1.724745478e-06, 1.720109743e-06, + 1.715488021e-06, 1.710880264e-06, 1.706286426e-06, 1.701706460e-06, + 1.697140319e-06, 1.692587957e-06, 1.688049329e-06, 1.683524387e-06, + 1.679013086e-06, 1.674515381e-06, 1.670031226e-06, 1.665560575e-06, + 1.661103383e-06, 1.656659606e-06, 1.652229198e-06, 1.647812115e-06, + 1.643408312e-06, 1.639017746e-06, 1.634640371e-06, 1.630276144e-06, + 1.625925020e-06, 1.621586957e-06, 1.617261911e-06, 1.612949838e-06, + 1.608650695e-06, 1.604364438e-06, 1.600091026e-06, 1.595830416e-06, + 1.591582563e-06, 1.587347428e-06, 1.583124966e-06, 1.578915136e-06, + 1.574717896e-06, 1.570533204e-06, 1.566361018e-06, 1.562201298e-06, + 1.558054001e-06, 1.553919086e-06, 1.549796512e-06, 1.545686239e-06, + 1.541588225e-06, 1.537502430e-06, 1.533428814e-06, 1.529367336e-06, + 1.525317956e-06, 1.521280634e-06, 1.517255330e-06, 1.513242004e-06, + 1.509240617e-06, 1.505251130e-06, 1.501273502e-06, 1.497307695e-06, + 1.493353670e-06, 1.489411388e-06, 1.485480810e-06, 1.481561898e-06, + 1.477654613e-06, 1.473758917e-06, 1.469874771e-06, 1.466002138e-06, + 1.462140980e-06, 1.458291259e-06, 1.454452937e-06, 1.450625977e-06, + 1.446810341e-06, 1.443005993e-06, 1.439212894e-06, 1.435431009e-06, + 1.431660301e-06, 1.427900732e-06, 1.424152266e-06, 1.420414867e-06, + 1.416688498e-06, 1.412973124e-06, 1.409268707e-06, 1.405575214e-06, + 1.401892606e-06, 1.398220850e-06, 1.394559909e-06, 1.390909748e-06, + 1.387270332e-06, 1.383641626e-06, 1.380023594e-06, 1.376416202e-06, + 1.372819415e-06, 1.369233198e-06, 1.365657518e-06, 1.362092338e-06, + 1.358537626e-06, 1.354993347e-06, 1.351459467e-06, 1.347935953e-06, + 1.344422769e-06, 1.340919884e-06, 1.337427262e-06, 1.333944872e-06, + 1.330472679e-06, 1.327010651e-06, 1.323558753e-06, 1.320116955e-06, + 1.316685222e-06, 1.313263521e-06, 1.309851821e-06, 1.306450089e-06, + 1.303058293e-06, 1.299676399e-06, 1.296304377e-06, 1.292942194e-06, + 1.289589818e-06, 1.286247218e-06, 1.282914361e-06, 1.279591217e-06, + 1.276277753e-06, 1.272973940e-06, 1.269679744e-06, 1.266395135e-06, + 1.263120083e-06, 1.259854556e-06, 1.256598524e-06, 1.253351955e-06, + 1.250114820e-06, 1.246887088e-06, 1.243668728e-06, 1.240459711e-06, + 1.237260005e-06, 1.234069582e-06, 1.230888412e-06, 1.227716463e-06, + 1.224553708e-06, 1.221400115e-06, 1.218255656e-06, 1.215120302e-06, + 1.211994023e-06, 1.208876789e-06, 1.205768572e-06, 1.202669343e-06, + 1.199579073e-06, 1.196497733e-06, 1.193425295e-06, 1.190361730e-06, + 1.187307009e-06, 1.184261104e-06, 1.181223987e-06, 1.178195629e-06, + 1.175176004e-06, 1.172165082e-06, 1.169162836e-06, 1.166169237e-06, + 1.163184260e-06, 1.160207875e-06, 1.157240055e-06, 1.154280773e-06, + 1.151330002e-06, 1.148387714e-06, 1.145453883e-06, 1.142528481e-06, + 1.139611482e-06, 1.136702858e-06, 1.133802583e-06, 1.130910631e-06, + 1.128026974e-06, 1.125151587e-06, 1.122284443e-06, 1.119425515e-06, + 1.116574779e-06, 1.113732206e-06, 1.110897773e-06, 1.108071452e-06, + 1.105253218e-06, 1.102443045e-06, 1.099640908e-06, 1.096846781e-06, + 1.094060638e-06, 1.091282455e-06, 1.088512206e-06, 1.085749866e-06, + 1.082995410e-06, 1.080248812e-06, 1.077510048e-06, 1.074779094e-06, + 1.072055924e-06, 1.069340513e-06, 1.066632838e-06, 1.063932873e-06, + 1.061240595e-06, 1.058555978e-06, 1.055878999e-06, 1.053209634e-06, + 1.050547859e-06, 1.047893649e-06, 1.045246981e-06, 1.042607830e-06, + 1.039976174e-06, 1.037351989e-06, 1.034735250e-06, 1.032125935e-06, + 1.029524020e-06, 1.026929482e-06, 1.024342298e-06, 1.021762444e-06, + 1.019189897e-06, 1.016624635e-06, 1.014066634e-06, 1.011515872e-06, + 1.008972326e-06, 1.006435973e-06, 1.003906790e-06, 1.001384756e-06, + 9.988698470e-07, 9.963620416e-07, 9.938613171e-07, 9.913676515e-07, + 9.888810225e-07, 9.864014082e-07, 9.839287864e-07, 9.814631354e-07, + 9.790044333e-07, 9.765526584e-07, 9.741077889e-07, 9.716698033e-07, + 9.692386800e-07, 9.668143976e-07, 9.643969347e-07, 9.619862700e-07, + 9.595823822e-07, 9.571852502e-07, 9.547948530e-07, 9.524111694e-07, + 9.500341786e-07, 9.476638596e-07, 9.453001917e-07, 9.429431541e-07, + 9.405927263e-07, 9.382488875e-07, 9.359116173e-07, 9.335808952e-07, + 9.312567008e-07, 9.289390139e-07, 9.266278142e-07, 9.243230816e-07, + 9.220247959e-07, 9.197329371e-07, 9.174474852e-07, 9.151684203e-07, + 9.128957227e-07, 9.106293726e-07, 9.083693502e-07, 9.061156360e-07, + 9.038682103e-07, 9.016270537e-07, 8.993921469e-07, 8.971634703e-07, + 8.949410047e-07, 8.927247310e-07, 8.905146299e-07, 8.883106823e-07, + 8.861128692e-07, 8.839211717e-07, 8.817355708e-07, 8.795560477e-07, + 8.773825836e-07, 8.752151598e-07, 8.730537578e-07, 8.708983588e-07, + 8.687489443e-07, 8.666054960e-07, 8.644679954e-07, 8.623364242e-07, + 8.602107641e-07, 8.580909969e-07, 8.559771045e-07, 8.538690688e-07, + 8.517668717e-07, 8.496704953e-07, 8.475799216e-07, 8.454951330e-07, + 8.434161114e-07, 8.413428394e-07, 8.392752991e-07, 8.372134730e-07, + 8.351573435e-07, 8.331068932e-07, 8.310621047e-07, 8.290229605e-07, + 8.269894433e-07, 8.249615360e-07, 8.229392213e-07, 8.209224821e-07, + 8.189113013e-07, 8.169056619e-07, 8.149055470e-07, 8.129109396e-07, + 8.109218229e-07, 8.089381801e-07, 8.069599944e-07, 8.049872493e-07, + 8.030199280e-07, 8.010580141e-07, 7.991014909e-07, 7.971503421e-07, + 7.952045513e-07, 7.932641020e-07, 7.913289781e-07, 7.893991633e-07, + 7.874746414e-07, 7.855553962e-07, 7.836414118e-07, 7.817326721e-07, + 7.798291611e-07, 7.779308629e-07, 7.760377617e-07, 7.741498416e-07, + 7.722670870e-07, 7.703894821e-07, 7.685170112e-07, 7.666496588e-07, + 7.647874093e-07, 7.629302473e-07, 7.610781573e-07, 7.592311239e-07, + 7.573891318e-07, 7.555521657e-07, 7.537202103e-07, 7.518932505e-07, + 7.500712712e-07, 7.482542573e-07, 7.464421937e-07, 7.446350654e-07, + 7.428328576e-07, 7.410355553e-07, 7.392431438e-07, 7.374556081e-07, + 7.356729337e-07, 7.338951058e-07, 7.321221097e-07, 7.303539310e-07, + 7.285905550e-07, 7.268319673e-07, 7.250781534e-07, 7.233290989e-07, + 7.215847895e-07, 7.198452108e-07, 7.181103487e-07, 7.163801890e-07, + 7.146547173e-07, 7.129339198e-07, 7.112177822e-07, 7.095062906e-07, + 7.077994311e-07, 7.060971895e-07, 7.043995522e-07, 7.027065053e-07, + 7.010180349e-07, 6.993341274e-07, 6.976547690e-07, 6.959799461e-07, + 6.943096451e-07, 6.926438524e-07, 6.909825545e-07, 6.893257380e-07, + 6.876733893e-07, 6.860254952e-07, 6.843820423e-07, 6.827430172e-07, + 6.811084068e-07, 6.794781978e-07, 6.778523771e-07, 6.762309316e-07, + 6.746138481e-07, 6.730011136e-07, 6.713927152e-07, 6.697886398e-07, + 6.681888747e-07, 6.665934068e-07, 6.650022235e-07, 6.634153119e-07, + 6.618326592e-07, 6.602542528e-07, 6.586800801e-07, 6.571101284e-07, + 6.555443851e-07, 6.539828377e-07, 6.524254738e-07, 6.508722808e-07, + 6.493232463e-07, 6.477783581e-07, 6.462376037e-07, 6.447009710e-07, + 6.431684475e-07, 6.416400212e-07, 6.401156798e-07, 6.385954113e-07, + 6.370792035e-07, 6.355670444e-07, 6.340589220e-07, 6.325548243e-07, + 6.310547394e-07, 6.295586554e-07, 6.280665605e-07, 6.265784428e-07, + 6.250942905e-07, 6.236140919e-07, 6.221378354e-07, 6.206655092e-07, + 6.191971018e-07, 6.177326014e-07, 6.162719967e-07, 6.148152761e-07, + 6.133624281e-07, 6.119134413e-07, 6.104683042e-07, 6.090270056e-07, + 6.075895341e-07, 6.061558783e-07, 6.047260272e-07, 6.032999693e-07, + 6.018776937e-07, 6.004591890e-07, 5.990444443e-07, 5.976334484e-07, + 5.962261903e-07, 5.948226590e-07, 5.934228436e-07, 5.920267331e-07, + 5.906343166e-07, 5.892455833e-07, 5.878605223e-07, 5.864791229e-07, + 5.851013743e-07, 5.837272658e-07, 5.823567868e-07, 5.809899264e-07, + 5.796266743e-07, 5.782670196e-07, 5.769109521e-07, 5.755584610e-07, + 5.742095359e-07, 5.728641665e-07, 5.715223422e-07, 5.701840527e-07, + 5.688492877e-07, 5.675180368e-07, 5.661902898e-07, 5.648660364e-07, + 5.635452665e-07, 5.622279697e-07, 5.609141361e-07, 5.596037555e-07, + 5.582968177e-07, 5.569933128e-07, 5.556932307e-07, 5.543965615e-07, + 5.531032952e-07, 5.518134219e-07, 5.505269316e-07, 5.492438146e-07, + 5.479640610e-07, 5.466876610e-07, 5.454146049e-07, 5.441448829e-07, + 5.428784853e-07, 5.416154025e-07, 5.403556248e-07, 5.390991426e-07, + 5.378459464e-07, 5.365960265e-07, 5.353493736e-07, 5.341059780e-07, + 5.328658303e-07, 5.316289212e-07, 5.303952412e-07, 5.291647809e-07, + 5.279375311e-07, 5.267134824e-07, 5.254926255e-07, 5.242749512e-07, + 5.230604503e-07, 5.218491136e-07, 5.206409320e-07, 5.194358962e-07, + 5.182339973e-07, 5.170352261e-07, 5.158395736e-07, 5.146470308e-07, + 5.134575887e-07, 5.122712384e-07, 5.110879708e-07, 5.099077772e-07, + 5.087306487e-07, 5.075565763e-07, 5.063855514e-07, 5.052175650e-07, + 5.040526086e-07, 5.028906732e-07, 5.017317503e-07, 5.005758311e-07, + 4.994229070e-07, 4.982729693e-07, 4.971260096e-07, 4.959820192e-07, + 4.948409895e-07, 4.937029121e-07, 4.925677786e-07, 4.914355803e-07, + 4.903063089e-07, 4.891799560e-07, 4.880565132e-07, 4.869359722e-07, + 4.858183246e-07, 4.847035621e-07, 4.835916765e-07, 4.824826595e-07, + 4.813765029e-07, 4.802731985e-07, 4.791727382e-07, 4.780751137e-07, + 4.769803170e-07, 4.758883399e-07, 4.747991745e-07, 4.737128126e-07, + 4.726292463e-07, 4.715484675e-07, 4.704704684e-07, 4.693952409e-07, + 4.683227771e-07, 4.672530692e-07, 4.661861092e-07, 4.651218894e-07, + 4.640604019e-07, 4.630016390e-07, 4.619455928e-07, 4.608922556e-07, + 4.598416197e-07, 4.587936775e-07, 4.577484211e-07, 4.567058431e-07, + 4.556659357e-07, 4.546286914e-07, 4.535941025e-07, 4.525621616e-07, + 4.515328611e-07, 4.505061936e-07, 4.494821514e-07, 4.484607272e-07, + 4.474419135e-07, 4.464257030e-07, 4.454120882e-07, 4.444010618e-07, + 4.433926164e-07, 4.423867446e-07, 4.413834393e-07, 4.403826932e-07, + 4.393844989e-07, 4.383888493e-07, 4.373957371e-07, 4.364051552e-07, + 4.354170965e-07, 4.344315536e-07, 4.334485197e-07, 4.324679875e-07, + 4.314899499e-07, 4.305144001e-07, 4.295413308e-07, 4.285707351e-07, + 4.276026060e-07, 4.266369366e-07, 4.256737199e-07, 4.247129490e-07, + 4.237546170e-07, 4.227987170e-07, 4.218452422e-07, 4.208941857e-07, + 4.199455407e-07, 4.189993004e-07, 4.180554581e-07, 4.171140070e-07, + 4.161749403e-07, 4.152382514e-07, 4.143039336e-07, 4.133719802e-07, + 4.124423846e-07, 4.115151401e-07, 4.105902401e-07, 4.096676780e-07, + 4.087474474e-07, 4.078295416e-07, 4.069139540e-07, 4.060006783e-07, + 4.050897080e-07, 4.041810364e-07, 4.032746573e-07, 4.023705642e-07, + 4.014687507e-07, 4.005692104e-07, 3.996719369e-07, 3.987769239e-07, + 3.978841651e-07, 3.969936541e-07, 3.961053847e-07, 3.952193506e-07, + 3.943355456e-07, 3.934539634e-07, 3.925745978e-07, 3.916974426e-07, + 3.908224917e-07, 3.899497389e-07, 3.890791781e-07, 3.882108031e-07, + 3.873446079e-07, 3.864805863e-07, 3.856187324e-07, 3.847590401e-07, + 3.839015033e-07, 3.830461160e-07, 3.821928724e-07, 3.813417663e-07, + 3.804927919e-07, 3.796459432e-07, 3.788012143e-07, 3.779585994e-07, + 3.771180924e-07, 3.762796877e-07, 3.754433793e-07, 3.746091614e-07, + 3.737770282e-07, 3.729469740e-07, 3.721189929e-07, 3.712930792e-07, + 3.704692272e-07, 3.696474311e-07, 3.688276853e-07, 3.680099841e-07, + 3.671943218e-07, 3.663806927e-07, 3.655690913e-07, 3.647595119e-07, + 3.639519489e-07, 3.631463968e-07, 3.623428499e-07, 3.615413028e-07, + 3.607417499e-07, 3.599441857e-07, 3.591486047e-07, 3.583550014e-07, + 3.575633704e-07, 3.567737062e-07, 3.559860035e-07, 3.552002566e-07, + 3.544164604e-07, 3.536346094e-07, 3.528546982e-07, 3.520767215e-07, + 3.513006740e-07, 3.505265503e-07, 3.497543452e-07, 3.489840534e-07, + 3.482156696e-07, 3.474491885e-07, 3.466846050e-07, 3.459219138e-07, + 3.451611097e-07, 3.444021874e-07, 3.436451420e-07, 3.428899681e-07, + 3.421366607e-07, 3.413852146e-07, 3.406356248e-07, 3.398878860e-07, + 3.391419933e-07, 3.383979416e-07, 3.376557259e-07, 3.369153410e-07, + 3.361767820e-07, 3.354400440e-07, 3.347051218e-07, 3.339720105e-07, + 3.332407052e-07, 3.325112010e-07, 3.317834928e-07, 3.310575759e-07, + 3.303334452e-07, 3.296110960e-07, 3.288905233e-07, 3.281717222e-07, + 3.274546881e-07, 3.267394159e-07, 3.260259010e-07, 3.253141385e-07, + 3.246041236e-07, 3.238958516e-07, 3.231893178e-07, 3.224845173e-07, + 3.217814455e-07, 3.210800976e-07, 3.203804690e-07, 3.196825549e-07, + 3.189863508e-07, 3.182918519e-07, 3.175990536e-07, 3.169079513e-07, + 3.162185404e-07, 3.155308163e-07, 3.148447743e-07, 3.141604100e-07, + 3.134777187e-07, 3.127966960e-07, 3.121173372e-07, 3.114396380e-07, + 3.107635937e-07, 3.100891999e-07, 3.094164520e-07, 3.087453458e-07, + 3.080758766e-07, 3.074080401e-07, 3.067418318e-07, 3.060772474e-07, + 3.054142824e-07, 3.047529324e-07, 3.040931931e-07, 3.034350601e-07, + 3.027785291e-07, 3.021235958e-07, 3.014702557e-07, 3.008185047e-07, + 3.001683384e-07, 2.995197526e-07, 2.988727429e-07, 2.982273052e-07, + 2.975834351e-07, 2.969411285e-07, 2.963003812e-07, 2.956611888e-07, + 2.950235473e-07, 2.943874525e-07, 2.937529001e-07, 2.931198861e-07, + 2.924884062e-07, 2.918584565e-07, 2.912300327e-07, 2.906031307e-07, + 2.899777464e-07, 2.893538759e-07, 2.887315149e-07, 2.881106594e-07, + 2.874913055e-07, 2.868734490e-07, 2.862570859e-07, 2.856422123e-07, + 2.850288241e-07, 2.844169173e-07, 2.838064880e-07, 2.831975322e-07, + 2.825900460e-07, 2.819840253e-07, 2.813794664e-07, 2.807763652e-07, + 2.801747179e-07, 2.795745206e-07, 2.789757693e-07, 2.783784603e-07, + 2.777825896e-07, 2.771881535e-07, 2.765951480e-07, 2.760035694e-07, + 2.754134138e-07, 2.748246774e-07, 2.742373565e-07, 2.736514473e-07, + 2.730669459e-07, 2.724838487e-07, 2.719021519e-07, 2.713218518e-07, + 2.707429445e-07, 2.701654265e-07, 2.695892940e-07, 2.690145434e-07, + 2.684411708e-07, 2.678691728e-07, 2.672985455e-07, 2.667292854e-07, + 2.661613888e-07, 2.655948521e-07, 2.650296717e-07, 2.644658440e-07, + 2.639033653e-07, 2.633422321e-07, 2.627824409e-07, 2.622239879e-07, + 2.616668698e-07, 2.611110829e-07, 2.605566238e-07, 2.600034888e-07, + 2.594516745e-07, 2.589011774e-07, 2.583519940e-07, 2.578041207e-07, + 2.572575542e-07, 2.567122910e-07, 2.561683276e-07, 2.556256605e-07, + 2.550842864e-07, 2.545442019e-07, 2.540054034e-07, 2.534678876e-07, + 2.529316512e-07, 2.523966906e-07, 2.518630027e-07, 2.513305839e-07, + 2.507994310e-07, 2.502695406e-07, 2.497409093e-07, 2.492135339e-07, + 2.486874110e-07, 2.481625374e-07, 2.476389096e-07, 2.471165245e-07, + 2.465953788e-07, 2.460754692e-07, 2.455567925e-07, 2.450393453e-07, + 2.445231245e-07, 2.440081268e-07, 2.434943491e-07, 2.429817880e-07, + 2.424704404e-07, 2.419603032e-07, 2.414513731e-07, 2.409436469e-07, + 2.404371216e-07, 2.399317938e-07, 2.394276606e-07, 2.389247187e-07, + 2.384229651e-07, 2.379223965e-07, 2.374230100e-07, 2.369248023e-07, + 2.364277705e-07, 2.359319114e-07, 2.354372219e-07, 2.349436990e-07, + 2.344513397e-07, 2.339601408e-07, 2.334700994e-07, 2.329812124e-07, + 2.324934768e-07, 2.320068896e-07, 2.315214478e-07, 2.310371483e-07, + 2.305539883e-07, 2.300719647e-07, 2.295910745e-07, 2.291113148e-07, + 2.286326827e-07, 2.281551751e-07, 2.276787892e-07, 2.272035221e-07, + 2.267293707e-07, 2.262563323e-07, 2.257844038e-07, 2.253135825e-07, + 2.248438654e-07, 2.243752497e-07, 2.239077324e-07, 2.234413107e-07, + 2.229759819e-07, 2.225117429e-07, 2.220485910e-07, 2.215865234e-07, + 2.211255372e-07, 2.206656297e-07, 2.202067980e-07, 2.197490393e-07, + 2.192923508e-07, 2.188367298e-07, 2.183821736e-07, 2.179286792e-07, + 2.174762440e-07, 2.170248652e-07, 2.165745401e-07, 2.161252660e-07, + 2.156770401e-07, 2.152298597e-07, 2.147837221e-07, 2.143386246e-07, + 2.138945645e-07, 2.134515392e-07, 2.130095458e-07, 2.125685819e-07, + 2.121286446e-07, 2.116897314e-07, 2.112518397e-07, 2.108149666e-07, + 2.103791097e-07, 2.099442664e-07, 2.095104339e-07, 2.090776096e-07, + 2.086457911e-07, 2.082149756e-07, 2.077851607e-07, 2.073563436e-07, + 2.069285219e-07, 2.065016929e-07, 2.060758542e-07, 2.056510031e-07, + 2.052271372e-07, 2.048042538e-07, 2.043823504e-07, 2.039614246e-07, + 2.035414738e-07, 2.031224955e-07, 2.027044872e-07, 2.022874464e-07, + 2.018713706e-07, 2.014562573e-07, 2.010421042e-07, 2.006289086e-07, + 2.002166681e-07, 1.998053803e-07, 1.993950428e-07, 1.989856530e-07, + 1.985772087e-07, 1.981697072e-07, 1.977631463e-07, 1.973575236e-07, + 1.969528365e-07, 1.965490827e-07, 1.961462598e-07, 1.957443655e-07, + 1.953433974e-07, 1.949433530e-07, 1.945442300e-07, 1.941460262e-07, + 1.937487390e-07, 1.933523662e-07, 1.929569054e-07, 1.925623543e-07, + 1.921687107e-07, 1.917759720e-07, 1.913841361e-07, 1.909932007e-07, + 1.906031634e-07, 1.902140220e-07, 1.898257741e-07, 1.894384175e-07, + 1.890519499e-07, 1.886663691e-07, 1.882816727e-07, 1.878978586e-07, + 1.875149245e-07, 1.871328681e-07, 1.867516872e-07, 1.863713796e-07, + 1.859919431e-07, 1.856133754e-07, 1.852356743e-07, 1.848588377e-07, + 1.844828633e-07, 1.841077490e-07, 1.837334925e-07, 1.833600916e-07, + 1.829875443e-07, 1.826158483e-07, 1.822450015e-07, 1.818750017e-07, + 1.815058468e-07, 1.811375345e-07, 1.807700629e-07, 1.804034298e-07, + 1.800376330e-07, 1.796726703e-07, 1.793085398e-07, 1.789452393e-07, + 1.785827667e-07, 1.782211199e-07, 1.778602967e-07, 1.775002952e-07, + 1.771411133e-07, 1.767827488e-07, 1.764251997e-07, 1.760684640e-07, + 1.757125395e-07, 1.753574243e-07, 1.750031163e-07, 1.746496135e-07, + 1.742969137e-07, 1.739450151e-07, 1.735939156e-07, 1.732436131e-07, + 1.728941056e-07, 1.725453912e-07, 1.721974679e-07, 1.718503336e-07, + 1.715039863e-07, 1.711584242e-07, 1.708136452e-07, 1.704696473e-07, + 1.701264285e-07, 1.697839870e-07, 1.694423207e-07, 1.691014278e-07, + 1.687613062e-07, 1.684219540e-07, 1.680833693e-07, 1.677455502e-07, + 1.674084947e-07, 1.670722009e-07, 1.667366669e-07, 1.664018908e-07, + 1.660678708e-07, 1.657346048e-07, 1.654020911e-07, 1.650703276e-07, + 1.647393126e-07, 1.644090442e-07, 1.640795205e-07, 1.637507396e-07, + 1.634226997e-07, 1.630953989e-07, 1.627688354e-07, 1.624430073e-07, + 1.621179128e-07, 1.617935500e-07, 1.614699172e-07, 1.611470124e-07, + 1.608248339e-07, 1.605033799e-07, 1.601826486e-07, 1.598626380e-07, + 1.595433466e-07, 1.592247723e-07, 1.589069136e-07, 1.585897685e-07, + 1.582733353e-07, 1.579576122e-07, 1.576425975e-07, 1.573282894e-07, + 1.570146861e-07, 1.567017859e-07, 1.563895870e-07, 1.560780876e-07, + 1.557672861e-07, 1.554571807e-07, 1.551477697e-07, 1.548390513e-07, + 1.545310238e-07, 1.542236855e-07, 1.539170347e-07, 1.536110696e-07, + 1.533057887e-07, 1.530011901e-07, 1.526972722e-07, 1.523940332e-07, + 1.520914716e-07, 1.517895856e-07, 1.514883735e-07, 1.511878338e-07, + 1.508879646e-07, 1.505887644e-07, 1.502902314e-07, 1.499923641e-07, + 1.496951608e-07, 1.493986199e-07, 1.491027396e-07, 1.488075184e-07, + 1.485129546e-07, 1.482190467e-07, 1.479257929e-07, 1.476331918e-07, + 1.473412415e-07, 1.470499407e-07, 1.467592875e-07, 1.464692805e-07, + 1.461799181e-07, 1.458911986e-07, 1.456031205e-07, 1.453156822e-07, + 1.450288821e-07, 1.447427186e-07, 1.444571902e-07, 1.441722953e-07, + 1.438880324e-07, 1.436043998e-07, 1.433213960e-07, 1.430390196e-07, + 1.427572688e-07, 1.424761423e-07, 1.421956384e-07, 1.419157557e-07, + 1.416364925e-07, 1.413578475e-07, 1.410798189e-07, 1.408024055e-07, + 1.405256055e-07, 1.402494176e-07, 1.399738402e-07, 1.396988718e-07, + 1.394245110e-07, 1.391507562e-07, 1.388776059e-07, 1.386050587e-07, + 1.383331131e-07, 1.380617675e-07, 1.377910207e-07, 1.375208710e-07, + 1.372513170e-07, 1.369823572e-07, 1.367139903e-07, 1.364462147e-07, + 1.361790290e-07, 1.359124317e-07, 1.356464215e-07, 1.353809968e-07, + 1.351161563e-07, 1.348518985e-07, 1.345882220e-07, 1.343251253e-07, + 1.340626072e-07, 1.338006660e-07, 1.335393005e-07, 1.332785092e-07, + 1.330182908e-07, 1.327586438e-07, 1.324995668e-07, 1.322410584e-07, + 1.319831173e-07, 1.317257421e-07, 1.314689314e-07, 1.312126838e-07, + 1.309569980e-07, 1.307018725e-07, 1.304473061e-07, 1.301932973e-07, + 1.299398448e-07, 1.296869473e-07, 1.294346034e-07, 1.291828117e-07, + 1.289315709e-07, 1.286808797e-07, 1.284307367e-07, 1.281811406e-07, + 1.279320901e-07, 1.276835839e-07, 1.274356206e-07, 1.271881989e-07, + 1.269413174e-07, 1.266949750e-07, 1.264491703e-07, 1.262039019e-07, + 1.259591686e-07, 1.257149691e-07, 1.254713020e-07, 1.252281662e-07, + 1.249855602e-07, 1.247434829e-07, 1.245019330e-07, 1.242609091e-07, + 1.240204100e-07, 1.237804344e-07, 1.235409811e-07, 1.233020488e-07, + 1.230636362e-07, 1.228257421e-07, 1.225883653e-07, 1.223515044e-07, + 1.221151583e-07, 1.218793256e-07, 1.216440052e-07, 1.214091959e-07, + 1.211748963e-07, 1.209411053e-07, 1.207078216e-07, 1.204750440e-07, + 1.202427713e-07, 1.200110023e-07, 1.197797357e-07, 1.195489704e-07, + 1.193187051e-07, 1.190889387e-07, 1.188596699e-07, 1.186308975e-07, + 1.184026204e-07, 1.181748373e-07, 1.179475471e-07, 1.177207486e-07, + 1.174944406e-07, 1.172686219e-07, 1.170432913e-07, 1.168184478e-07, + 1.165940900e-07, 1.163702169e-07, 1.161468272e-07, 1.159239199e-07, + 1.157014937e-07, 1.154795475e-07, 1.152580802e-07, 1.150370906e-07, + 1.148165776e-07, 1.145965400e-07, 1.143769766e-07, 1.141578865e-07, + 1.139392683e-07, 1.137211210e-07, 1.135034435e-07, 1.132862346e-07, + 1.130694932e-07, 1.128532182e-07, 1.126374085e-07, 1.124220630e-07, + 1.122071805e-07, 1.119927600e-07, 1.117788003e-07, 1.115653004e-07, + 1.113522592e-07, 1.111396755e-07, 1.109275482e-07, 1.107158764e-07, + 1.105046588e-07, 1.102938945e-07, 1.100835822e-07, 1.098737211e-07, + 1.096643099e-07, 1.094553476e-07, 1.092468331e-07, 1.090387655e-07, + 1.088311435e-07, 1.086239662e-07, 1.084172324e-07, 1.082109412e-07, + 1.080050915e-07, 1.077996822e-07, 1.075947123e-07, 1.073901807e-07, + 1.071860865e-07, 1.069824285e-07, 1.067792057e-07, 1.065764171e-07, + 1.063740617e-07, 1.061721384e-07, 1.059706462e-07, 1.057695841e-07, + 1.055689510e-07, 1.053687461e-07, 1.051689681e-07, 1.049696162e-07, + 1.047706893e-07, 1.045721864e-07, 1.043741065e-07, 1.041764486e-07, + 1.039792117e-07, 1.037823948e-07, 1.035859969e-07, 1.033900171e-07, + 1.031944542e-07, 1.029993075e-07, 1.028045758e-07, 1.026102581e-07, + 1.024163536e-07, 1.022228612e-07, 1.020297800e-07, 1.018371090e-07, + 1.016448471e-07, 1.014529936e-07, 1.012615473e-07, 1.010705074e-07, + 1.008798728e-07, 1.006896426e-07, 1.004998159e-07, 1.003103917e-07, + 1.001213691e-07, 9.993274713e-08, 9.974452481e-08, 9.955670122e-08, + 9.936927543e-08, 9.918224651e-08, 9.899561351e-08, 9.880937550e-08, + 9.862353157e-08, 9.843808077e-08, 9.825302220e-08, 9.806835492e-08, + 9.788407802e-08, 9.770019057e-08, 9.751669168e-08, 9.733358042e-08, + 9.715085588e-08, 9.696851716e-08, 9.678656335e-08, 9.660499355e-08, + 9.642380687e-08, 9.624300239e-08, 9.606257923e-08, 9.588253649e-08, + 9.570287328e-08, 9.552358872e-08, 9.534468191e-08, 9.516615197e-08, + 9.498799803e-08, 9.481021919e-08, 9.463281459e-08, 9.445578334e-08, + 9.427912459e-08, 9.410283744e-08, 9.392692104e-08, 9.375137453e-08, + 9.357619702e-08, 9.340138768e-08, 9.322694562e-08, 9.305287001e-08, + 9.287915998e-08, 9.270581467e-08, 9.253283325e-08, 9.236021486e-08, + 9.218795865e-08, 9.201606378e-08, 9.184452941e-08, 9.167335470e-08, + 9.150253881e-08, 9.133208090e-08, 9.116198015e-08, 9.099223571e-08, + 9.082284677e-08, 9.065381249e-08, 9.048513205e-08, 9.031680462e-08, + 9.014882940e-08, 8.998120554e-08, 8.981393225e-08, 8.964700871e-08, + 8.948043410e-08, 8.931420761e-08, 8.914832844e-08, 8.898279578e-08, + 8.881760882e-08, 8.865276677e-08, 8.848826882e-08, 8.832411417e-08, + 8.816030204e-08, 8.799683162e-08, 8.783370212e-08, 8.767091276e-08, + 8.750846274e-08, 8.734635128e-08, 8.718457760e-08, 8.702314092e-08, + 8.686204045e-08, 8.670127541e-08, 8.654084504e-08, 8.638074855e-08, + 8.622098518e-08, 8.606155416e-08, 8.590245471e-08, 8.574368607e-08, + 8.558524749e-08, 8.542713818e-08, 8.526935740e-08, 8.511190439e-08, + 8.495477839e-08, 8.479797864e-08, 8.464150440e-08, 8.448535490e-08, + 8.432952942e-08, 8.417402719e-08, 8.401884747e-08, 8.386398952e-08, + 8.370945260e-08, 8.355523596e-08, 8.340133888e-08, 8.324776062e-08, + 8.309450043e-08, 8.294155760e-08, 8.278893138e-08, 8.263662106e-08, + 8.248462591e-08, 8.233294519e-08, 8.218157820e-08, 8.203052420e-08, + 8.187978248e-08, 8.172935232e-08, 8.157923301e-08, 8.142942383e-08, + 8.127992408e-08, 8.113073303e-08, 8.098184999e-08, 8.083327424e-08, + 8.068500509e-08, 8.053704183e-08, 8.038938375e-08, 8.024203016e-08, + 8.009498037e-08, 7.994823367e-08, 7.980178937e-08, 7.965564679e-08, + 7.950980522e-08, 7.936426398e-08, 7.921902238e-08, 7.907407975e-08, + 7.892943538e-08, 7.878508861e-08, 7.864103876e-08, 7.849728513e-08, + 7.835382707e-08, 7.821066388e-08, 7.806779491e-08, 7.792521947e-08, + 7.778293690e-08, 7.764094653e-08, 7.749924769e-08, 7.735783972e-08, + 7.721672195e-08, 7.707589373e-08, 7.693535439e-08, 7.679510327e-08, + 7.665513972e-08, 7.651546308e-08, 7.637607270e-08, 7.623696793e-08, + 7.609814812e-08, 7.595961262e-08, 7.582136078e-08, 7.568339196e-08, + 7.554570551e-08, 7.540830079e-08, 7.527117716e-08, 7.513433399e-08, + 7.499777063e-08, 7.486148645e-08, 7.472548082e-08, 7.458975310e-08, + 7.445430266e-08, 7.431912887e-08, 7.418423111e-08, 7.404960875e-08, + 7.391526117e-08, 7.378118773e-08, 7.364738783e-08, 7.351386084e-08, + 7.338060614e-08, 7.324762311e-08, 7.311491115e-08, 7.298246963e-08, + 7.285029794e-08, 7.271839548e-08, 7.258676163e-08, 7.245539579e-08, + 7.232429734e-08, 7.219346570e-08, 7.206290024e-08, 7.193260038e-08, + 7.180256551e-08, 7.167279503e-08, 7.154328834e-08, 7.141404486e-08, + 7.128506397e-08, 7.115634510e-08, 7.102788766e-08, 7.089969104e-08, + 7.077175466e-08, 7.064407795e-08, 7.051666030e-08, 7.038950114e-08, + 7.026259988e-08, 7.013595594e-08, 7.000956875e-08, 6.988343773e-08, + 6.975756229e-08, 6.963194187e-08, 6.950657588e-08, 6.938146376e-08, + 6.925660494e-08, 6.913199884e-08, 6.900764490e-08, 6.888354255e-08, + 6.875969123e-08, 6.863609037e-08, 6.851273941e-08, 6.838963778e-08, + 6.826678493e-08, 6.814418031e-08, 6.802182334e-08, 6.789971348e-08, + 6.777785017e-08, 6.765623286e-08, 6.753486100e-08, 6.741373403e-08, + 6.729285141e-08, 6.717221260e-08, 6.705181703e-08, 6.693166418e-08, + 6.681175349e-08, 6.669208443e-08, 6.657265645e-08, 6.645346901e-08, + 6.633452158e-08, 6.621581361e-08, 6.609734458e-08, 6.597911394e-08, + 6.586112118e-08, 6.574336574e-08, 6.562584711e-08, 6.550856475e-08, + 6.539151815e-08, 6.527470676e-08, 6.515813006e-08, 6.504178754e-08, + 6.492567867e-08, 6.480980292e-08, 6.469415979e-08, 6.457874874e-08, + 6.446356926e-08, 6.434862084e-08, 6.423390296e-08, 6.411941510e-08, + 6.400515676e-08, 6.389112743e-08, 6.377732659e-08, 6.366375373e-08, + 6.355040835e-08, 6.343728994e-08, 6.332439800e-08, 6.321173202e-08, + 6.309929150e-08, 6.298707595e-08, 6.287508485e-08, 6.276331771e-08, + 6.265177403e-08, 6.254045332e-08, 6.242935508e-08, 6.231847882e-08, + 6.220782405e-08, 6.209739027e-08, 6.198717699e-08, 6.187718373e-08, + 6.176740999e-08, 6.165785529e-08, 6.154851915e-08, 6.143940107e-08, + 6.133050059e-08, 6.122181720e-08, 6.111335044e-08, 6.100509983e-08, + 6.089706488e-08, 6.078924512e-08, 6.068164007e-08, 6.057424926e-08, + 6.046707221e-08, 6.036010845e-08, 6.025335751e-08, 6.014681892e-08, + 6.004049221e-08, 5.993437692e-08, 5.982847256e-08, 5.972277869e-08, + 5.961729483e-08, 5.951202052e-08, 5.940695529e-08, 5.930209870e-08, + 5.919745027e-08, 5.909300955e-08, 5.898877607e-08, 5.888474939e-08, + 5.878092905e-08, 5.867731459e-08, 5.857390556e-08, 5.847070150e-08, + 5.836770197e-08, 5.826490652e-08, 5.816231469e-08, 5.805992603e-08, + 5.795774011e-08, 5.785575647e-08, 5.775397468e-08, 5.765239427e-08, + 5.755101482e-08, 5.744983589e-08, 5.734885702e-08, 5.724807778e-08, + 5.714749774e-08, 5.704711646e-08, 5.694693349e-08, 5.684694841e-08, + 5.674716078e-08, 5.664757016e-08, 5.654817613e-08, 5.644897825e-08, + 5.634997610e-08, 5.625116924e-08, 5.615255725e-08, 5.605413970e-08, + 5.595591616e-08, 5.585788621e-08, 5.576004943e-08, 5.566240539e-08, + 5.556495367e-08, 5.546769385e-08, 5.537062551e-08, 5.527374823e-08, + 5.517706159e-08, 5.508056518e-08, 5.498425859e-08, 5.488814138e-08, + 5.479221317e-08, 5.469647352e-08, 5.460092202e-08, 5.450555828e-08, + 5.441038187e-08, 5.431539239e-08, 5.422058944e-08, 5.412597259e-08, + 5.403154145e-08, 5.393729562e-08, 5.384323469e-08, 5.374935825e-08, + 5.365566590e-08, 5.356215725e-08, 5.346883190e-08, 5.337568943e-08, + 5.328272946e-08, 5.318995159e-08, 5.309735543e-08, 5.300494057e-08, + 5.291270662e-08, 5.282065319e-08, 5.272877989e-08, 5.263708632e-08, + 5.254557210e-08, 5.245423683e-08, 5.236308013e-08, 5.227210161e-08, + 5.218130087e-08, 5.209067755e-08, 5.200023124e-08, 5.190996157e-08, + 5.181986816e-08, 5.172995061e-08, 5.164020855e-08, 5.155064161e-08, + 5.146124939e-08, 5.137203152e-08, 5.128298763e-08, 5.119411733e-08, + 5.110542025e-08, 5.101689602e-08, 5.092854425e-08, 5.084036459e-08, + 5.075235665e-08, 5.066452007e-08, 5.057685446e-08, 5.048935947e-08, + 5.040203473e-08, 5.031487986e-08, 5.022789450e-08, 5.014107829e-08, + 5.005443085e-08, 4.996795183e-08, 4.988164085e-08, 4.979549756e-08, + 4.970952160e-08, 4.962371260e-08, 4.953807021e-08, 4.945259406e-08, + 4.936728379e-08, 4.928213906e-08, 4.919715949e-08, 4.911234475e-08, + 4.902769446e-08, 4.894320828e-08, 4.885888585e-08, 4.877472682e-08, + 4.869073084e-08, 4.860689755e-08, 4.852322662e-08, 4.843971768e-08, + 4.835637040e-08, 4.827318441e-08, 4.819015938e-08, 4.810729496e-08, + 4.802459081e-08, 4.794204657e-08, 4.785966191e-08, 4.777743649e-08, + 4.769536996e-08, 4.761346197e-08, 4.753171220e-08, 4.745012030e-08, + 4.736868593e-08, 4.728740876e-08, 4.720628844e-08, 4.712532465e-08, + 4.704451704e-08, 4.696386528e-08, 4.688336904e-08, 4.680302798e-08, + 4.672284178e-08, 4.664281009e-08, 4.656293260e-08, 4.648320896e-08, + 4.640363885e-08, 4.632422195e-08, 4.624495792e-08, 4.616584643e-08, + 4.608688717e-08, 4.600807980e-08, 4.592942401e-08, 4.585091946e-08, + 4.577256583e-08, 4.569436281e-08, 4.561631006e-08, 4.553840728e-08, + 4.546065413e-08, 4.538305031e-08, 4.530559549e-08, 4.522828935e-08, + 4.515113157e-08, 4.507412185e-08, 4.499725986e-08, 4.492054529e-08, + 4.484397783e-08, 4.476755716e-08, 4.469128297e-08, 4.461515494e-08, + 4.453917278e-08, 4.446333616e-08, 4.438764477e-08, 4.431209832e-08, + 4.423669648e-08, 4.416143896e-08, 4.408632544e-08, 4.401135562e-08, + 4.393652919e-08, 4.386184585e-08, 4.378730529e-08, 4.371290722e-08, + 4.363865133e-08, 4.356453731e-08, 4.349056487e-08, 4.341673371e-08, + 4.334304352e-08, 4.326949400e-08, 4.319608487e-08, 4.312281582e-08, + 4.304968655e-08, 4.297669677e-08, 4.290384618e-08, 4.283113449e-08, + 4.275856140e-08, 4.268612662e-08, 4.261382986e-08, 4.254167082e-08, + 4.246964921e-08, 4.239776475e-08, 4.232601714e-08, 4.225440609e-08, + 4.218293132e-08, 4.211159253e-08, 4.204038944e-08, 4.196932177e-08, + 4.189838921e-08, 4.182759150e-08, 4.175692835e-08, 4.168639947e-08, + 4.161600457e-08, 4.154574338e-08, 4.147561561e-08, 4.140562099e-08, + 4.133575923e-08, 4.126603004e-08, 4.119643316e-08, 4.112696830e-08, + 4.105763519e-08, 4.098843354e-08, 4.091936308e-08, 4.085042353e-08, + 4.078161463e-08, 4.071293608e-08, 4.064438763e-08, 4.057596898e-08, + 4.050767989e-08, 4.043952005e-08, 4.037148922e-08, 4.030358711e-08, + 4.023581346e-08, 4.016816800e-08, 4.010065045e-08, 4.003326055e-08, + 3.996599802e-08, 3.989886261e-08, 3.983185405e-08, 3.976497206e-08, + 3.969821639e-08, 3.963158677e-08, 3.956508293e-08, 3.949870460e-08, + 3.943245154e-08, 3.936632347e-08, 3.930032014e-08, 3.923444127e-08, + 3.916868661e-08, 3.910305591e-08, 3.903754890e-08, 3.897216531e-08, + 3.890690490e-08, 3.884176741e-08, 3.877675257e-08, 3.871186014e-08, + 3.864708985e-08, 3.858244145e-08, 3.851791469e-08, 3.845350931e-08, + 3.838922506e-08, 3.832506168e-08, 3.826101892e-08, 3.819709653e-08, + 3.813329427e-08, 3.806961187e-08, 3.800604908e-08, 3.794260567e-08, + 3.787928138e-08, 3.781607595e-08, 3.775298915e-08, 3.769002073e-08, + 3.762717043e-08, 3.756443802e-08, 3.750182325e-08, 3.743932586e-08, + 3.737694563e-08, 3.731468229e-08, 3.725253562e-08, 3.719050537e-08, + 3.712859129e-08, 3.706679314e-08, 3.700511069e-08, 3.694354369e-08, + 3.688209190e-08, 3.682075508e-08, 3.675953300e-08, 3.669842541e-08, + 3.663743207e-08, 3.657655276e-08, 3.651578723e-08, 3.645513525e-08, + 3.639459657e-08, 3.633417098e-08, 3.627385822e-08, 3.621365807e-08, + 3.615357029e-08, 3.609359466e-08, 3.603373093e-08, 3.597397888e-08, + 3.591433827e-08, 3.585480888e-08, 3.579539047e-08, 3.573608282e-08, + 3.567688568e-08, 3.561779885e-08, 3.555882208e-08, 3.549995515e-08, + 3.544119783e-08, 3.538254989e-08, 3.532401112e-08, 3.526558128e-08, + 3.520726015e-08, 3.514904750e-08, 3.509094311e-08, 3.503294675e-08, + 3.497505821e-08, 3.491727726e-08, 3.485960367e-08, 3.480203724e-08, + 3.474457772e-08, 3.468722491e-08, 3.462997859e-08, 3.457283853e-08, + 3.451580452e-08, 3.445887633e-08, 3.440205375e-08, 3.434533656e-08, + 3.428872455e-08, 3.423221749e-08, 3.417581517e-08, 3.411951738e-08, + 3.406332390e-08, 3.400723452e-08, 3.395124902e-08, 3.389536718e-08, + 3.383958880e-08, 3.378391366e-08, 3.372834155e-08, 3.367287226e-08, + 3.361750557e-08, 3.356224128e-08, 3.350707917e-08, 3.345201904e-08, + 3.339706068e-08, 3.334220387e-08, 3.328744841e-08, 3.323279409e-08, + 3.317824070e-08, 3.312378804e-08, 3.306943589e-08, 3.301518406e-08, + 3.296103234e-08, 3.290698052e-08, 3.285302839e-08, 3.279917576e-08, + 3.274542242e-08, 3.269176817e-08, 3.263821279e-08, 3.258475610e-08, + 3.253139789e-08, 3.247813795e-08, 3.242497609e-08, 3.237191211e-08, + 3.231894579e-08, 3.226607696e-08, 3.221330540e-08, 3.216063092e-08, + 3.210805332e-08, 3.205557239e-08, 3.200318795e-08, 3.195089980e-08, + 3.189870774e-08, 3.184661157e-08, 3.179461110e-08, 3.174270613e-08, + 3.169089647e-08, 3.163918192e-08, 3.158756230e-08, 3.153603739e-08, + 3.148460702e-08, 3.143327099e-08, 3.138202911e-08, 3.133088119e-08, + 3.127982703e-08, 3.122886644e-08, 3.117799924e-08, 3.112722522e-08, + 3.107654422e-08, 3.102595602e-08, 3.097546046e-08, 3.092505732e-08, + 3.087474644e-08, 3.082452762e-08, 3.077440067e-08, 3.072436542e-08, + 3.067442166e-08, 3.062456922e-08, 3.057480790e-08, 3.052513754e-08, + 3.047555793e-08, 3.042606890e-08, 3.037667026e-08, 3.032736183e-08, + 3.027814342e-08, 3.022901486e-08, 3.017997596e-08, 3.013102654e-08, + 3.008216641e-08, 3.003339541e-08, 2.998471333e-08, 2.993612002e-08, + 2.988761528e-08, 2.983919894e-08, 2.979087082e-08, 2.974263073e-08, + 2.969447851e-08, 2.964641397e-08, 2.959843694e-08, 2.955054723e-08, + 2.950274468e-08, 2.945502911e-08, 2.940740033e-08, 2.935985818e-08, + 2.931240248e-08, 2.926503306e-08, 2.921774974e-08, 2.917055234e-08, + 2.912344070e-08, 2.907641464e-08, 2.902947399e-08, 2.898261857e-08, + 2.893584822e-08, 2.888916276e-08, 2.884256202e-08, 2.879604584e-08, + 2.874961403e-08, 2.870326643e-08, 2.865700287e-08, 2.861082318e-08, + 2.856472720e-08, 2.851871475e-08, 2.847278566e-08, 2.842693977e-08, +}; +const float lut_portamento_coefficient[] = { + 3.200000000e-01, 3.134324736e-01, 3.069997359e-01, 3.006990206e-01, + 2.945276182e-01, 2.884828747e-01, 2.825621906e-01, 2.767630198e-01, + 2.710828684e-01, 2.655192937e-01, 2.600699031e-01, 2.547323532e-01, + 2.495043487e-01, 2.443836411e-01, 2.393680286e-01, 2.344553540e-01, + 2.296435048e-01, 2.249304117e-01, 2.203140479e-01, 2.157924281e-01, + 2.113636079e-01, 2.070256826e-01, 2.027767868e-01, 1.986150934e-01, + 1.945388125e-01, 1.905461913e-01, 1.866355127e-01, 1.828050950e-01, + 1.790532909e-01, 1.753784871e-01, 1.717791032e-01, 1.682535913e-01, + 1.648004353e-01, 1.614181503e-01, 1.581052816e-01, 1.548604047e-01, + 1.516821241e-01, 1.485690729e-01, 1.455199126e-01, 1.425333317e-01, + 1.396080460e-01, 1.367427975e-01, 1.339363539e-01, 1.311875085e-01, + 1.284950790e-01, 1.258579077e-01, 1.232748603e-01, 1.207448263e-01, + 1.182667174e-01, 1.158394680e-01, 1.134620344e-01, 1.111333940e-01, + 1.088525456e-01, 1.066185082e-01, 1.044303211e-01, 1.022870433e-01, + 1.001877531e-01, 9.813154772e-02, 9.611754293e-02, 9.414487260e-02, + 9.221268841e-02, 9.032015945e-02, 8.846647184e-02, 8.665082842e-02, + 8.487244840e-02, 8.313056699e-02, 8.142443513e-02, 7.975331910e-02, + 7.811650025e-02, 7.651327468e-02, 7.494295295e-02, 7.340485974e-02, + 7.189833363e-02, 7.042272673e-02, 6.897740448e-02, 6.756174533e-02, + 6.617514049e-02, 6.481699366e-02, 6.348672079e-02, 6.218374979e-02, + 6.090752035e-02, 5.965748363e-02, 5.843310207e-02, 5.723384912e-02, + 5.605920907e-02, 5.490867676e-02, 5.378175743e-02, 5.267796645e-02, + 5.159682914e-02, 5.053788058e-02, 4.950066537e-02, 4.848473747e-02, + 4.748965998e-02, 4.651500499e-02, 4.556035335e-02, 4.462529452e-02, + 4.370942639e-02, 4.281235510e-02, 4.193369486e-02, 4.107306783e-02, + 4.023010390e-02, 3.940444055e-02, 3.859572272e-02, 3.780360263e-02, + 3.702773963e-02, 3.626780007e-02, 3.552345715e-02, 3.479439076e-02, + 3.408028738e-02, 3.338083991e-02, 3.269574757e-02, 3.202471574e-02, + 3.136745584e-02, 3.072368523e-02, 3.009312706e-02, 2.947551016e-02, + 2.887056893e-02, 2.827804323e-02, 2.769767824e-02, 2.712922438e-02, + 2.657243720e-02, 2.602707725e-02, 2.549291001e-02, 2.496970576e-02, + 2.445723950e-02, 2.395529085e-02, 2.346364396e-02, 2.298208739e-02, + 2.251041405e-02, 2.204842112e-02, 2.159590990e-02, 2.115268581e-02, + 2.071855824e-02, 2.029334049e-02, 1.987684971e-02, 1.946890678e-02, + 1.906933628e-02, 1.867796638e-02, 1.829462876e-02, 1.791915858e-02, + 1.755139436e-02, 1.719117797e-02, 1.683835448e-02, 1.649277217e-02, + 1.615428243e-02, 1.582273969e-02, 1.549800137e-02, 1.517992783e-02, + 1.486838228e-02, 1.456323073e-02, 1.426434197e-02, 1.397158747e-02, + 1.368484131e-02, 1.340398019e-02, 1.312888334e-02, 1.285943243e-02, + 1.259551161e-02, 1.233700738e-02, 1.208380856e-02, 1.183580627e-02, + 1.159289386e-02, 1.135496687e-02, 1.112192298e-02, 1.089366197e-02, + 1.067008568e-02, 1.045109796e-02, 1.023660464e-02, 1.002651348e-02, + 9.820734128e-03, 9.619178094e-03, 9.421758699e-03, 9.228391044e-03, + 9.038991975e-03, 8.853480041e-03, 8.671775465e-03, 8.493800107e-03, + 8.319477429e-03, 8.148732467e-03, 7.981491792e-03, 7.817683485e-03, + 7.657237100e-03, 7.500083640e-03, 7.346155523e-03, 7.195386552e-03, + 7.047711891e-03, 6.903068034e-03, 6.761392779e-03, 6.622625198e-03, + 6.486705616e-03, 6.353575583e-03, 6.223177846e-03, 6.095456331e-03, + 5.970356110e-03, 5.847823386e-03, 5.727805465e-03, 5.610250734e-03, + 5.495108640e-03, 5.382329668e-03, 5.271865316e-03, 5.163668082e-03, + 5.057691437e-03, 4.953889805e-03, 4.852218547e-03, 4.752633942e-03, + 4.655093164e-03, 4.559554266e-03, 4.465976162e-03, 4.374318610e-03, + 4.284542194e-03, 4.196608306e-03, 4.110479131e-03, 4.026117630e-03, + 3.943487524e-03, 3.862553278e-03, 3.783280088e-03, 3.705633863e-03, + 3.629581212e-03, 3.555089429e-03, 3.482126479e-03, 3.410660986e-03, + 3.340662217e-03, 3.272100069e-03, 3.204945057e-03, 3.139168303e-03, + 3.074741519e-03, 3.011636999e-03, 2.949827607e-03, 2.889286761e-03, + 2.829988426e-03, 2.771907101e-03, 2.715017810e-03, 2.659296087e-03, + 2.604717970e-03, 2.551259989e-03, 2.498899153e-03, 2.447612946e-03, + 2.397379312e-03, 2.348176650e-03, 2.299983799e-03, 2.252780035e-03, + 2.206545059e-03, 2.161258987e-03, 2.116902345e-03, 2.073456057e-03, + 2.030901440e-03, 1.989220193e-03, 1.948394392e-03, 1.908406481e-03, + 1.869239262e-03, 1.830875892e-03, 1.793299874e-03, 1.756495048e-03, + 1.720445587e-03, 1.685135987e-03, 1.650551065e-03, 1.616675947e-03, + 1.583496065e-03, 1.550997152e-03, 1.519165231e-03, 1.487986612e-03, + 1.457447889e-03, 1.427535928e-03, 1.398237866e-03, 1.369541103e-03, + 1.341433298e-03, 1.313902365e-03, 1.286936463e-03, 1.260523997e-03, + 1.234653607e-03, 1.209314169e-03, 1.184494785e-03, 1.160184783e-03, + 1.136373707e-03, 1.113051318e-03, 1.090207587e-03, 1.067832690e-03, + 1.045917004e-03, 1.024451106e-03, 1.003425763e-03, 9.828319338e-04, + 9.626607629e-04, 9.429035753e-04, 9.235518748e-04, 9.045973393e-04, + 8.860318176e-04, 8.678473258e-04, 8.500360437e-04, 8.325903118e-04, + 8.155026278e-04, 7.987656432e-04, 7.823721604e-04, 7.663151297e-04, + 7.505876457e-04, 7.351829450e-04, 7.200944030e-04, 7.053155311e-04, + 6.908399736e-04, 6.766615055e-04, 6.627740294e-04, 6.491715733e-04, + 6.358482874e-04, 6.227984423e-04, 6.100164259e-04, 5.974967415e-04, + 5.852340051e-04, 5.732229432e-04, 5.614583906e-04, 5.499352880e-04, + 5.386486801e-04, 5.275937131e-04, 5.167656329e-04, 5.061597830e-04, + 4.957716025e-04, 4.855966240e-04, 4.756304719e-04, 4.658688604e-04, + 4.563075914e-04, 4.469425534e-04, 4.377697189e-04, 4.287851433e-04, + 4.199849628e-04, 4.113653929e-04, 4.029227270e-04, 3.946533343e-04, + 3.865536586e-04, 3.786202168e-04, 3.708495972e-04, 3.632384580e-04, + 3.557835262e-04, 3.484815959e-04, 3.413295268e-04, 3.343242434e-04, + 3.274627331e-04, 3.207420451e-04, 3.141592892e-04, 3.077116347e-04, + 3.013963088e-04, 2.952105956e-04, 2.891518350e-04, 2.832174215e-04, + 2.774048030e-04, 2.717114800e-04, 2.661350040e-04, 2.606729768e-04, + 2.553230498e-04, 2.500829220e-04, 2.449503401e-04, 2.399230969e-04, + 2.349990304e-04, 2.301760230e-04, 2.254520008e-04, 2.208249321e-04, + 2.162928272e-04, 2.118537370e-04, 2.075057525e-04, 2.032470041e-04, + 1.990756601e-04, 1.949899268e-04, 1.909880471e-04, 1.870683000e-04, + 1.832290000e-04, 1.794684960e-04, 1.757851707e-04, 1.721774402e-04, + 1.686437530e-04, 1.651825896e-04, 1.617924614e-04, 1.584719105e-04, + 1.552195091e-04, 1.520338583e-04, 1.489135884e-04, 1.458573574e-04, + 1.428638510e-04, 1.399317818e-04, 1.370598891e-04, 1.342469377e-04, + 1.314917180e-04, 1.287930451e-04, 1.261497584e-04, 1.235607213e-04, + 1.210248203e-04, 1.185409650e-04, 1.161080871e-04, 1.137251405e-04, + 1.113911002e-04, 1.091049628e-04, 1.068657449e-04, 1.046724836e-04, + 1.025242358e-04, 1.004200776e-04, 9.835910407e-05, 9.634042902e-05, + 9.436318428e-05, 9.242651957e-05, 9.052960203e-05, 8.867161592e-05, + 8.685176223e-05, 8.506925834e-05, 8.332333770e-05, 8.161324950e-05, + 7.993825834e-05, 7.829764388e-05, 7.669070061e-05, 7.511673747e-05, + 7.357507760e-05, 7.206505801e-05, 7.058602934e-05, 6.913735555e-05, + 6.771841364e-05, 6.632859341e-05, 6.496729719e-05, 6.363393956e-05, + 6.232794712e-05, 6.104875824e-05, 5.979582282e-05, 5.856860205e-05, + 5.736656817e-05, 5.618920425e-05, 5.503600399e-05, 5.390647145e-05, + 5.280012090e-05, 5.171647655e-05, 5.065507241e-05, 4.961545201e-05, + 4.859716828e-05, 4.759978332e-05, 4.662286821e-05, 4.566600283e-05, + 4.472877570e-05, 4.381078378e-05, 4.291163227e-05, 4.203093452e-05, + 4.116831179e-05, 4.032339312e-05, 3.949581515e-05, 3.868522199e-05, + 3.789126506e-05, 3.711360292e-05, 3.635190114e-05, 3.560583216e-05, + 3.487507515e-05, 3.415931584e-05, 3.345824644e-05, 3.277156544e-05, + 3.209897756e-05, 3.144019355e-05, 3.079493010e-05, 3.016290973e-05, + 2.954386065e-05, 2.893751663e-05, 2.834361693e-05, 2.776190613e-05, + 2.719213409e-05, 2.663405578e-05, 2.608743120e-05, 2.555202528e-05, + 2.502760778e-05, 2.451395317e-05, 2.401084055e-05, 2.351805358e-05, + 2.303538034e-05, 2.256261325e-05, 2.209954900e-05, 2.164598846e-05, + 2.120173658e-05, 2.076660231e-05, 2.034039853e-05, 1.992294195e-05, + 1.951405305e-05, 1.911355599e-05, 1.872127854e-05, 1.833705200e-05, + 1.796071115e-05, 1.759209413e-05, 1.723104243e-05, 1.687740079e-05, + 1.653101711e-05, 1.619174245e-05, 1.585943090e-05, 1.553393955e-05, + 1.521512843e-05, 1.490286043e-05, 1.459700128e-05, 1.429741943e-05, + 1.400398605e-05, 1.371657496e-05, 1.343506256e-05, 1.315932778e-05, + 1.288925205e-05, 1.262471923e-05, 1.236561555e-05, 1.211182959e-05, + 1.186325221e-05, 1.161977652e-05, 1.138129780e-05, 1.114771350e-05, + 1.091892318e-05, 1.069482844e-05, 1.047533292e-05, 1.026034221e-05, + 1.004976387e-05, 9.843507339e-06, 9.641483918e-06, 9.443606728e-06, + 9.249790675e-06, 9.059952410e-06, 8.874010295e-06, 8.691884366e-06, + 8.513496302e-06, 8.338769389e-06, 8.167628488e-06, 8.000000000e-06, +}; +const float lut_sine[] = { + 0.000000000e+00, 6.135884649e-03, 1.227153829e-02, 1.840672991e-02, + 2.454122852e-02, 3.067480318e-02, 3.680722294e-02, 4.293825693e-02, + 4.906767433e-02, 5.519524435e-02, 6.132073630e-02, 6.744391956e-02, + 7.356456360e-02, 7.968243797e-02, 8.579731234e-02, 9.190895650e-02, + 9.801714033e-02, 1.041216339e-01, 1.102222073e-01, 1.163186309e-01, + 1.224106752e-01, 1.284981108e-01, 1.345807085e-01, 1.406582393e-01, + 1.467304745e-01, 1.527971853e-01, 1.588581433e-01, 1.649131205e-01, + 1.709618888e-01, 1.770042204e-01, 1.830398880e-01, 1.890686641e-01, + 1.950903220e-01, 2.011046348e-01, 2.071113762e-01, 2.131103199e-01, + 2.191012402e-01, 2.250839114e-01, 2.310581083e-01, 2.370236060e-01, + 2.429801799e-01, 2.489276057e-01, 2.548656596e-01, 2.607941179e-01, + 2.667127575e-01, 2.726213554e-01, 2.785196894e-01, 2.844075372e-01, + 2.902846773e-01, 2.961508882e-01, 3.020059493e-01, 3.078496400e-01, + 3.136817404e-01, 3.195020308e-01, 3.253102922e-01, 3.311063058e-01, + 3.368898534e-01, 3.426607173e-01, 3.484186802e-01, 3.541635254e-01, + 3.598950365e-01, 3.656129978e-01, 3.713171940e-01, 3.770074102e-01, + 3.826834324e-01, 3.883450467e-01, 3.939920401e-01, 3.996241998e-01, + 4.052413140e-01, 4.108431711e-01, 4.164295601e-01, 4.220002708e-01, + 4.275550934e-01, 4.330938189e-01, 4.386162385e-01, 4.441221446e-01, + 4.496113297e-01, 4.550835871e-01, 4.605387110e-01, 4.659764958e-01, + 4.713967368e-01, 4.767992301e-01, 4.821837721e-01, 4.875501601e-01, + 4.928981922e-01, 4.982276670e-01, 5.035383837e-01, 5.088301425e-01, + 5.141027442e-01, 5.193559902e-01, 5.245896827e-01, 5.298036247e-01, + 5.349976199e-01, 5.401714727e-01, 5.453249884e-01, 5.504579729e-01, + 5.555702330e-01, 5.606615762e-01, 5.657318108e-01, 5.707807459e-01, + 5.758081914e-01, 5.808139581e-01, 5.857978575e-01, 5.907597019e-01, + 5.956993045e-01, 6.006164794e-01, 6.055110414e-01, 6.103828063e-01, + 6.152315906e-01, 6.200572118e-01, 6.248594881e-01, 6.296382389e-01, + 6.343932842e-01, 6.391244449e-01, 6.438315429e-01, 6.485144010e-01, + 6.531728430e-01, 6.578066933e-01, 6.624157776e-01, 6.669999223e-01, + 6.715589548e-01, 6.760927036e-01, 6.806009978e-01, 6.850836678e-01, + 6.895405447e-01, 6.939714609e-01, 6.983762494e-01, 7.027547445e-01, + 7.071067812e-01, 7.114321957e-01, 7.157308253e-01, 7.200025080e-01, + 7.242470830e-01, 7.284643904e-01, 7.326542717e-01, 7.368165689e-01, + 7.409511254e-01, 7.450577854e-01, 7.491363945e-01, 7.531867990e-01, + 7.572088465e-01, 7.612023855e-01, 7.651672656e-01, 7.691033376e-01, + 7.730104534e-01, 7.768884657e-01, 7.807372286e-01, 7.845565972e-01, + 7.883464276e-01, 7.921065773e-01, 7.958369046e-01, 7.995372691e-01, + 8.032075315e-01, 8.068475535e-01, 8.104571983e-01, 8.140363297e-01, + 8.175848132e-01, 8.211025150e-01, 8.245893028e-01, 8.280450453e-01, + 8.314696123e-01, 8.348628750e-01, 8.382247056e-01, 8.415549774e-01, + 8.448535652e-01, 8.481203448e-01, 8.513551931e-01, 8.545579884e-01, + 8.577286100e-01, 8.608669386e-01, 8.639728561e-01, 8.670462455e-01, + 8.700869911e-01, 8.730949784e-01, 8.760700942e-01, 8.790122264e-01, + 8.819212643e-01, 8.847970984e-01, 8.876396204e-01, 8.904487232e-01, + 8.932243012e-01, 8.959662498e-01, 8.986744657e-01, 9.013488470e-01, + 9.039892931e-01, 9.065957045e-01, 9.091679831e-01, 9.117060320e-01, + 9.142097557e-01, 9.166790599e-01, 9.191138517e-01, 9.215140393e-01, + 9.238795325e-01, 9.262102421e-01, 9.285060805e-01, 9.307669611e-01, + 9.329927988e-01, 9.351835099e-01, 9.373390119e-01, 9.394592236e-01, + 9.415440652e-01, 9.435934582e-01, 9.456073254e-01, 9.475855910e-01, + 9.495281806e-01, 9.514350210e-01, 9.533060404e-01, 9.551411683e-01, + 9.569403357e-01, 9.587034749e-01, 9.604305194e-01, 9.621214043e-01, + 9.637760658e-01, 9.653944417e-01, 9.669764710e-01, 9.685220943e-01, + 9.700312532e-01, 9.715038910e-01, 9.729399522e-01, 9.743393828e-01, + 9.757021300e-01, 9.770281427e-01, 9.783173707e-01, 9.795697657e-01, + 9.807852804e-01, 9.819638691e-01, 9.831054874e-01, 9.842100924e-01, + 9.852776424e-01, 9.863080972e-01, 9.873014182e-01, 9.882575677e-01, + 9.891765100e-01, 9.900582103e-01, 9.909026354e-01, 9.917097537e-01, + 9.924795346e-01, 9.932119492e-01, 9.939069700e-01, 9.945645707e-01, + 9.951847267e-01, 9.957674145e-01, 9.963126122e-01, 9.968202993e-01, + 9.972904567e-01, 9.977230666e-01, 9.981181129e-01, 9.984755806e-01, + 9.987954562e-01, 9.990777278e-01, 9.993223846e-01, 9.995294175e-01, + 9.996988187e-01, 9.998305818e-01, 9.999247018e-01, 9.999811753e-01, + 1.000000000e+00, 9.999811753e-01, 9.999247018e-01, 9.998305818e-01, + 9.996988187e-01, 9.995294175e-01, 9.993223846e-01, 9.990777278e-01, + 9.987954562e-01, 9.984755806e-01, 9.981181129e-01, 9.977230666e-01, + 9.972904567e-01, 9.968202993e-01, 9.963126122e-01, 9.957674145e-01, + 9.951847267e-01, 9.945645707e-01, 9.939069700e-01, 9.932119492e-01, + 9.924795346e-01, 9.917097537e-01, 9.909026354e-01, 9.900582103e-01, + 9.891765100e-01, 9.882575677e-01, 9.873014182e-01, 9.863080972e-01, + 9.852776424e-01, 9.842100924e-01, 9.831054874e-01, 9.819638691e-01, + 9.807852804e-01, 9.795697657e-01, 9.783173707e-01, 9.770281427e-01, + 9.757021300e-01, 9.743393828e-01, 9.729399522e-01, 9.715038910e-01, + 9.700312532e-01, 9.685220943e-01, 9.669764710e-01, 9.653944417e-01, + 9.637760658e-01, 9.621214043e-01, 9.604305194e-01, 9.587034749e-01, + 9.569403357e-01, 9.551411683e-01, 9.533060404e-01, 9.514350210e-01, + 9.495281806e-01, 9.475855910e-01, 9.456073254e-01, 9.435934582e-01, + 9.415440652e-01, 9.394592236e-01, 9.373390119e-01, 9.351835099e-01, + 9.329927988e-01, 9.307669611e-01, 9.285060805e-01, 9.262102421e-01, + 9.238795325e-01, 9.215140393e-01, 9.191138517e-01, 9.166790599e-01, + 9.142097557e-01, 9.117060320e-01, 9.091679831e-01, 9.065957045e-01, + 9.039892931e-01, 9.013488470e-01, 8.986744657e-01, 8.959662498e-01, + 8.932243012e-01, 8.904487232e-01, 8.876396204e-01, 8.847970984e-01, + 8.819212643e-01, 8.790122264e-01, 8.760700942e-01, 8.730949784e-01, + 8.700869911e-01, 8.670462455e-01, 8.639728561e-01, 8.608669386e-01, + 8.577286100e-01, 8.545579884e-01, 8.513551931e-01, 8.481203448e-01, + 8.448535652e-01, 8.415549774e-01, 8.382247056e-01, 8.348628750e-01, + 8.314696123e-01, 8.280450453e-01, 8.245893028e-01, 8.211025150e-01, + 8.175848132e-01, 8.140363297e-01, 8.104571983e-01, 8.068475535e-01, + 8.032075315e-01, 7.995372691e-01, 7.958369046e-01, 7.921065773e-01, + 7.883464276e-01, 7.845565972e-01, 7.807372286e-01, 7.768884657e-01, + 7.730104534e-01, 7.691033376e-01, 7.651672656e-01, 7.612023855e-01, + 7.572088465e-01, 7.531867990e-01, 7.491363945e-01, 7.450577854e-01, + 7.409511254e-01, 7.368165689e-01, 7.326542717e-01, 7.284643904e-01, + 7.242470830e-01, 7.200025080e-01, 7.157308253e-01, 7.114321957e-01, + 7.071067812e-01, 7.027547445e-01, 6.983762494e-01, 6.939714609e-01, + 6.895405447e-01, 6.850836678e-01, 6.806009978e-01, 6.760927036e-01, + 6.715589548e-01, 6.669999223e-01, 6.624157776e-01, 6.578066933e-01, + 6.531728430e-01, 6.485144010e-01, 6.438315429e-01, 6.391244449e-01, + 6.343932842e-01, 6.296382389e-01, 6.248594881e-01, 6.200572118e-01, + 6.152315906e-01, 6.103828063e-01, 6.055110414e-01, 6.006164794e-01, + 5.956993045e-01, 5.907597019e-01, 5.857978575e-01, 5.808139581e-01, + 5.758081914e-01, 5.707807459e-01, 5.657318108e-01, 5.606615762e-01, + 5.555702330e-01, 5.504579729e-01, 5.453249884e-01, 5.401714727e-01, + 5.349976199e-01, 5.298036247e-01, 5.245896827e-01, 5.193559902e-01, + 5.141027442e-01, 5.088301425e-01, 5.035383837e-01, 4.982276670e-01, + 4.928981922e-01, 4.875501601e-01, 4.821837721e-01, 4.767992301e-01, + 4.713967368e-01, 4.659764958e-01, 4.605387110e-01, 4.550835871e-01, + 4.496113297e-01, 4.441221446e-01, 4.386162385e-01, 4.330938189e-01, + 4.275550934e-01, 4.220002708e-01, 4.164295601e-01, 4.108431711e-01, + 4.052413140e-01, 3.996241998e-01, 3.939920401e-01, 3.883450467e-01, + 3.826834324e-01, 3.770074102e-01, 3.713171940e-01, 3.656129978e-01, + 3.598950365e-01, 3.541635254e-01, 3.484186802e-01, 3.426607173e-01, + 3.368898534e-01, 3.311063058e-01, 3.253102922e-01, 3.195020308e-01, + 3.136817404e-01, 3.078496400e-01, 3.020059493e-01, 2.961508882e-01, + 2.902846773e-01, 2.844075372e-01, 2.785196894e-01, 2.726213554e-01, + 2.667127575e-01, 2.607941179e-01, 2.548656596e-01, 2.489276057e-01, + 2.429801799e-01, 2.370236060e-01, 2.310581083e-01, 2.250839114e-01, + 2.191012402e-01, 2.131103199e-01, 2.071113762e-01, 2.011046348e-01, + 1.950903220e-01, 1.890686641e-01, 1.830398880e-01, 1.770042204e-01, + 1.709618888e-01, 1.649131205e-01, 1.588581433e-01, 1.527971853e-01, + 1.467304745e-01, 1.406582393e-01, 1.345807085e-01, 1.284981108e-01, + 1.224106752e-01, 1.163186309e-01, 1.102222073e-01, 1.041216339e-01, + 9.801714033e-02, 9.190895650e-02, 8.579731234e-02, 7.968243797e-02, + 7.356456360e-02, 6.744391956e-02, 6.132073630e-02, 5.519524435e-02, + 4.906767433e-02, 4.293825693e-02, 3.680722294e-02, 3.067480318e-02, + 2.454122852e-02, 1.840672991e-02, 1.227153829e-02, 6.135884649e-03, + 1.224646799e-16, -6.135884649e-03, -1.227153829e-02, -1.840672991e-02, + -2.454122852e-02, -3.067480318e-02, -3.680722294e-02, -4.293825693e-02, + -4.906767433e-02, -5.519524435e-02, -6.132073630e-02, -6.744391956e-02, + -7.356456360e-02, -7.968243797e-02, -8.579731234e-02, -9.190895650e-02, + -9.801714033e-02, -1.041216339e-01, -1.102222073e-01, -1.163186309e-01, + -1.224106752e-01, -1.284981108e-01, -1.345807085e-01, -1.406582393e-01, + -1.467304745e-01, -1.527971853e-01, -1.588581433e-01, -1.649131205e-01, + -1.709618888e-01, -1.770042204e-01, -1.830398880e-01, -1.890686641e-01, + -1.950903220e-01, -2.011046348e-01, -2.071113762e-01, -2.131103199e-01, + -2.191012402e-01, -2.250839114e-01, -2.310581083e-01, -2.370236060e-01, + -2.429801799e-01, -2.489276057e-01, -2.548656596e-01, -2.607941179e-01, + -2.667127575e-01, -2.726213554e-01, -2.785196894e-01, -2.844075372e-01, + -2.902846773e-01, -2.961508882e-01, -3.020059493e-01, -3.078496400e-01, + -3.136817404e-01, -3.195020308e-01, -3.253102922e-01, -3.311063058e-01, + -3.368898534e-01, -3.426607173e-01, -3.484186802e-01, -3.541635254e-01, + -3.598950365e-01, -3.656129978e-01, -3.713171940e-01, -3.770074102e-01, + -3.826834324e-01, -3.883450467e-01, -3.939920401e-01, -3.996241998e-01, + -4.052413140e-01, -4.108431711e-01, -4.164295601e-01, -4.220002708e-01, + -4.275550934e-01, -4.330938189e-01, -4.386162385e-01, -4.441221446e-01, + -4.496113297e-01, -4.550835871e-01, -4.605387110e-01, -4.659764958e-01, + -4.713967368e-01, -4.767992301e-01, -4.821837721e-01, -4.875501601e-01, + -4.928981922e-01, -4.982276670e-01, -5.035383837e-01, -5.088301425e-01, + -5.141027442e-01, -5.193559902e-01, -5.245896827e-01, -5.298036247e-01, + -5.349976199e-01, -5.401714727e-01, -5.453249884e-01, -5.504579729e-01, + -5.555702330e-01, -5.606615762e-01, -5.657318108e-01, -5.707807459e-01, + -5.758081914e-01, -5.808139581e-01, -5.857978575e-01, -5.907597019e-01, + -5.956993045e-01, -6.006164794e-01, -6.055110414e-01, -6.103828063e-01, + -6.152315906e-01, -6.200572118e-01, -6.248594881e-01, -6.296382389e-01, + -6.343932842e-01, -6.391244449e-01, -6.438315429e-01, -6.485144010e-01, + -6.531728430e-01, -6.578066933e-01, -6.624157776e-01, -6.669999223e-01, + -6.715589548e-01, -6.760927036e-01, -6.806009978e-01, -6.850836678e-01, + -6.895405447e-01, -6.939714609e-01, -6.983762494e-01, -7.027547445e-01, + -7.071067812e-01, -7.114321957e-01, -7.157308253e-01, -7.200025080e-01, + -7.242470830e-01, -7.284643904e-01, -7.326542717e-01, -7.368165689e-01, + -7.409511254e-01, -7.450577854e-01, -7.491363945e-01, -7.531867990e-01, + -7.572088465e-01, -7.612023855e-01, -7.651672656e-01, -7.691033376e-01, + -7.730104534e-01, -7.768884657e-01, -7.807372286e-01, -7.845565972e-01, + -7.883464276e-01, -7.921065773e-01, -7.958369046e-01, -7.995372691e-01, + -8.032075315e-01, -8.068475535e-01, -8.104571983e-01, -8.140363297e-01, + -8.175848132e-01, -8.211025150e-01, -8.245893028e-01, -8.280450453e-01, + -8.314696123e-01, -8.348628750e-01, -8.382247056e-01, -8.415549774e-01, + -8.448535652e-01, -8.481203448e-01, -8.513551931e-01, -8.545579884e-01, + -8.577286100e-01, -8.608669386e-01, -8.639728561e-01, -8.670462455e-01, + -8.700869911e-01, -8.730949784e-01, -8.760700942e-01, -8.790122264e-01, + -8.819212643e-01, -8.847970984e-01, -8.876396204e-01, -8.904487232e-01, + -8.932243012e-01, -8.959662498e-01, -8.986744657e-01, -9.013488470e-01, + -9.039892931e-01, -9.065957045e-01, -9.091679831e-01, -9.117060320e-01, + -9.142097557e-01, -9.166790599e-01, -9.191138517e-01, -9.215140393e-01, + -9.238795325e-01, -9.262102421e-01, -9.285060805e-01, -9.307669611e-01, + -9.329927988e-01, -9.351835099e-01, -9.373390119e-01, -9.394592236e-01, + -9.415440652e-01, -9.435934582e-01, -9.456073254e-01, -9.475855910e-01, + -9.495281806e-01, -9.514350210e-01, -9.533060404e-01, -9.551411683e-01, + -9.569403357e-01, -9.587034749e-01, -9.604305194e-01, -9.621214043e-01, + -9.637760658e-01, -9.653944417e-01, -9.669764710e-01, -9.685220943e-01, + -9.700312532e-01, -9.715038910e-01, -9.729399522e-01, -9.743393828e-01, + -9.757021300e-01, -9.770281427e-01, -9.783173707e-01, -9.795697657e-01, + -9.807852804e-01, -9.819638691e-01, -9.831054874e-01, -9.842100924e-01, + -9.852776424e-01, -9.863080972e-01, -9.873014182e-01, -9.882575677e-01, + -9.891765100e-01, -9.900582103e-01, -9.909026354e-01, -9.917097537e-01, + -9.924795346e-01, -9.932119492e-01, -9.939069700e-01, -9.945645707e-01, + -9.951847267e-01, -9.957674145e-01, -9.963126122e-01, -9.968202993e-01, + -9.972904567e-01, -9.977230666e-01, -9.981181129e-01, -9.984755806e-01, + -9.987954562e-01, -9.990777278e-01, -9.993223846e-01, -9.995294175e-01, + -9.996988187e-01, -9.998305818e-01, -9.999247018e-01, -9.999811753e-01, + -1.000000000e+00, -9.999811753e-01, -9.999247018e-01, -9.998305818e-01, + -9.996988187e-01, -9.995294175e-01, -9.993223846e-01, -9.990777278e-01, + -9.987954562e-01, -9.984755806e-01, -9.981181129e-01, -9.977230666e-01, + -9.972904567e-01, -9.968202993e-01, -9.963126122e-01, -9.957674145e-01, + -9.951847267e-01, -9.945645707e-01, -9.939069700e-01, -9.932119492e-01, + -9.924795346e-01, -9.917097537e-01, -9.909026354e-01, -9.900582103e-01, + -9.891765100e-01, -9.882575677e-01, -9.873014182e-01, -9.863080972e-01, + -9.852776424e-01, -9.842100924e-01, -9.831054874e-01, -9.819638691e-01, + -9.807852804e-01, -9.795697657e-01, -9.783173707e-01, -9.770281427e-01, + -9.757021300e-01, -9.743393828e-01, -9.729399522e-01, -9.715038910e-01, + -9.700312532e-01, -9.685220943e-01, -9.669764710e-01, -9.653944417e-01, + -9.637760658e-01, -9.621214043e-01, -9.604305194e-01, -9.587034749e-01, + -9.569403357e-01, -9.551411683e-01, -9.533060404e-01, -9.514350210e-01, + -9.495281806e-01, -9.475855910e-01, -9.456073254e-01, -9.435934582e-01, + -9.415440652e-01, -9.394592236e-01, -9.373390119e-01, -9.351835099e-01, + -9.329927988e-01, -9.307669611e-01, -9.285060805e-01, -9.262102421e-01, + -9.238795325e-01, -9.215140393e-01, -9.191138517e-01, -9.166790599e-01, + -9.142097557e-01, -9.117060320e-01, -9.091679831e-01, -9.065957045e-01, + -9.039892931e-01, -9.013488470e-01, -8.986744657e-01, -8.959662498e-01, + -8.932243012e-01, -8.904487232e-01, -8.876396204e-01, -8.847970984e-01, + -8.819212643e-01, -8.790122264e-01, -8.760700942e-01, -8.730949784e-01, + -8.700869911e-01, -8.670462455e-01, -8.639728561e-01, -8.608669386e-01, + -8.577286100e-01, -8.545579884e-01, -8.513551931e-01, -8.481203448e-01, + -8.448535652e-01, -8.415549774e-01, -8.382247056e-01, -8.348628750e-01, + -8.314696123e-01, -8.280450453e-01, -8.245893028e-01, -8.211025150e-01, + -8.175848132e-01, -8.140363297e-01, -8.104571983e-01, -8.068475535e-01, + -8.032075315e-01, -7.995372691e-01, -7.958369046e-01, -7.921065773e-01, + -7.883464276e-01, -7.845565972e-01, -7.807372286e-01, -7.768884657e-01, + -7.730104534e-01, -7.691033376e-01, -7.651672656e-01, -7.612023855e-01, + -7.572088465e-01, -7.531867990e-01, -7.491363945e-01, -7.450577854e-01, + -7.409511254e-01, -7.368165689e-01, -7.326542717e-01, -7.284643904e-01, + -7.242470830e-01, -7.200025080e-01, -7.157308253e-01, -7.114321957e-01, + -7.071067812e-01, -7.027547445e-01, -6.983762494e-01, -6.939714609e-01, + -6.895405447e-01, -6.850836678e-01, -6.806009978e-01, -6.760927036e-01, + -6.715589548e-01, -6.669999223e-01, -6.624157776e-01, -6.578066933e-01, + -6.531728430e-01, -6.485144010e-01, -6.438315429e-01, -6.391244449e-01, + -6.343932842e-01, -6.296382389e-01, -6.248594881e-01, -6.200572118e-01, + -6.152315906e-01, -6.103828063e-01, -6.055110414e-01, -6.006164794e-01, + -5.956993045e-01, -5.907597019e-01, -5.857978575e-01, -5.808139581e-01, + -5.758081914e-01, -5.707807459e-01, -5.657318108e-01, -5.606615762e-01, + -5.555702330e-01, -5.504579729e-01, -5.453249884e-01, -5.401714727e-01, + -5.349976199e-01, -5.298036247e-01, -5.245896827e-01, -5.193559902e-01, + -5.141027442e-01, -5.088301425e-01, -5.035383837e-01, -4.982276670e-01, + -4.928981922e-01, -4.875501601e-01, -4.821837721e-01, -4.767992301e-01, + -4.713967368e-01, -4.659764958e-01, -4.605387110e-01, -4.550835871e-01, + -4.496113297e-01, -4.441221446e-01, -4.386162385e-01, -4.330938189e-01, + -4.275550934e-01, -4.220002708e-01, -4.164295601e-01, -4.108431711e-01, + -4.052413140e-01, -3.996241998e-01, -3.939920401e-01, -3.883450467e-01, + -3.826834324e-01, -3.770074102e-01, -3.713171940e-01, -3.656129978e-01, + -3.598950365e-01, -3.541635254e-01, -3.484186802e-01, -3.426607173e-01, + -3.368898534e-01, -3.311063058e-01, -3.253102922e-01, -3.195020308e-01, + -3.136817404e-01, -3.078496400e-01, -3.020059493e-01, -2.961508882e-01, + -2.902846773e-01, -2.844075372e-01, -2.785196894e-01, -2.726213554e-01, + -2.667127575e-01, -2.607941179e-01, -2.548656596e-01, -2.489276057e-01, + -2.429801799e-01, -2.370236060e-01, -2.310581083e-01, -2.250839114e-01, + -2.191012402e-01, -2.131103199e-01, -2.071113762e-01, -2.011046348e-01, + -1.950903220e-01, -1.890686641e-01, -1.830398880e-01, -1.770042204e-01, + -1.709618888e-01, -1.649131205e-01, -1.588581433e-01, -1.527971853e-01, + -1.467304745e-01, -1.406582393e-01, -1.345807085e-01, -1.284981108e-01, + -1.224106752e-01, -1.163186309e-01, -1.102222073e-01, -1.041216339e-01, + -9.801714033e-02, -9.190895650e-02, -8.579731234e-02, -7.968243797e-02, + -7.356456360e-02, -6.744391956e-02, -6.132073630e-02, -5.519524435e-02, + -4.906767433e-02, -4.293825693e-02, -3.680722294e-02, -3.067480318e-02, + -2.454122852e-02, -1.840672991e-02, -1.227153829e-02, -6.135884649e-03, + -2.449293598e-16, 6.135884649e-03, 1.227153829e-02, 1.840672991e-02, + 2.454122852e-02, 3.067480318e-02, 3.680722294e-02, 4.293825693e-02, + 4.906767433e-02, 5.519524435e-02, 6.132073630e-02, 6.744391956e-02, + 7.356456360e-02, 7.968243797e-02, 8.579731234e-02, 9.190895650e-02, + 9.801714033e-02, 1.041216339e-01, 1.102222073e-01, 1.163186309e-01, + 1.224106752e-01, 1.284981108e-01, 1.345807085e-01, 1.406582393e-01, + 1.467304745e-01, 1.527971853e-01, 1.588581433e-01, 1.649131205e-01, + 1.709618888e-01, 1.770042204e-01, 1.830398880e-01, 1.890686641e-01, + 1.950903220e-01, 2.011046348e-01, 2.071113762e-01, 2.131103199e-01, + 2.191012402e-01, 2.250839114e-01, 2.310581083e-01, 2.370236060e-01, + 2.429801799e-01, 2.489276057e-01, 2.548656596e-01, 2.607941179e-01, + 2.667127575e-01, 2.726213554e-01, 2.785196894e-01, 2.844075372e-01, + 2.902846773e-01, 2.961508882e-01, 3.020059493e-01, 3.078496400e-01, + 3.136817404e-01, 3.195020308e-01, 3.253102922e-01, 3.311063058e-01, + 3.368898534e-01, 3.426607173e-01, 3.484186802e-01, 3.541635254e-01, + 3.598950365e-01, 3.656129978e-01, 3.713171940e-01, 3.770074102e-01, + 3.826834324e-01, 3.883450467e-01, 3.939920401e-01, 3.996241998e-01, + 4.052413140e-01, 4.108431711e-01, 4.164295601e-01, 4.220002708e-01, + 4.275550934e-01, 4.330938189e-01, 4.386162385e-01, 4.441221446e-01, + 4.496113297e-01, 4.550835871e-01, 4.605387110e-01, 4.659764958e-01, + 4.713967368e-01, 4.767992301e-01, 4.821837721e-01, 4.875501601e-01, + 4.928981922e-01, 4.982276670e-01, 5.035383837e-01, 5.088301425e-01, + 5.141027442e-01, 5.193559902e-01, 5.245896827e-01, 5.298036247e-01, + 5.349976199e-01, 5.401714727e-01, 5.453249884e-01, 5.504579729e-01, + 5.555702330e-01, 5.606615762e-01, 5.657318108e-01, 5.707807459e-01, + 5.758081914e-01, 5.808139581e-01, 5.857978575e-01, 5.907597019e-01, + 5.956993045e-01, 6.006164794e-01, 6.055110414e-01, 6.103828063e-01, + 6.152315906e-01, 6.200572118e-01, 6.248594881e-01, 6.296382389e-01, + 6.343932842e-01, 6.391244449e-01, 6.438315429e-01, 6.485144010e-01, + 6.531728430e-01, 6.578066933e-01, 6.624157776e-01, 6.669999223e-01, + 6.715589548e-01, 6.760927036e-01, 6.806009978e-01, 6.850836678e-01, + 6.895405447e-01, 6.939714609e-01, 6.983762494e-01, 7.027547445e-01, + 7.071067812e-01, 7.114321957e-01, 7.157308253e-01, 7.200025080e-01, + 7.242470830e-01, 7.284643904e-01, 7.326542717e-01, 7.368165689e-01, + 7.409511254e-01, 7.450577854e-01, 7.491363945e-01, 7.531867990e-01, + 7.572088465e-01, 7.612023855e-01, 7.651672656e-01, 7.691033376e-01, + 7.730104534e-01, 7.768884657e-01, 7.807372286e-01, 7.845565972e-01, + 7.883464276e-01, 7.921065773e-01, 7.958369046e-01, 7.995372691e-01, + 8.032075315e-01, 8.068475535e-01, 8.104571983e-01, 8.140363297e-01, + 8.175848132e-01, 8.211025150e-01, 8.245893028e-01, 8.280450453e-01, + 8.314696123e-01, 8.348628750e-01, 8.382247056e-01, 8.415549774e-01, + 8.448535652e-01, 8.481203448e-01, 8.513551931e-01, 8.545579884e-01, + 8.577286100e-01, 8.608669386e-01, 8.639728561e-01, 8.670462455e-01, + 8.700869911e-01, 8.730949784e-01, 8.760700942e-01, 8.790122264e-01, + 8.819212643e-01, 8.847970984e-01, 8.876396204e-01, 8.904487232e-01, + 8.932243012e-01, 8.959662498e-01, 8.986744657e-01, 9.013488470e-01, + 9.039892931e-01, 9.065957045e-01, 9.091679831e-01, 9.117060320e-01, + 9.142097557e-01, 9.166790599e-01, 9.191138517e-01, 9.215140393e-01, + 9.238795325e-01, 9.262102421e-01, 9.285060805e-01, 9.307669611e-01, + 9.329927988e-01, 9.351835099e-01, 9.373390119e-01, 9.394592236e-01, + 9.415440652e-01, 9.435934582e-01, 9.456073254e-01, 9.475855910e-01, + 9.495281806e-01, 9.514350210e-01, 9.533060404e-01, 9.551411683e-01, + 9.569403357e-01, 9.587034749e-01, 9.604305194e-01, 9.621214043e-01, + 9.637760658e-01, 9.653944417e-01, 9.669764710e-01, 9.685220943e-01, + 9.700312532e-01, 9.715038910e-01, 9.729399522e-01, 9.743393828e-01, + 9.757021300e-01, 9.770281427e-01, 9.783173707e-01, 9.795697657e-01, + 9.807852804e-01, 9.819638691e-01, 9.831054874e-01, 9.842100924e-01, + 9.852776424e-01, 9.863080972e-01, 9.873014182e-01, 9.882575677e-01, + 9.891765100e-01, 9.900582103e-01, 9.909026354e-01, 9.917097537e-01, + 9.924795346e-01, 9.932119492e-01, 9.939069700e-01, 9.945645707e-01, + 9.951847267e-01, 9.957674145e-01, 9.963126122e-01, 9.968202993e-01, + 9.972904567e-01, 9.977230666e-01, 9.981181129e-01, 9.984755806e-01, + 9.987954562e-01, 9.990777278e-01, 9.993223846e-01, 9.995294175e-01, + 9.996988187e-01, 9.998305818e-01, 9.999247018e-01, 9.999811753e-01, + 1.000000000e+00, +}; + + +const float* lookup_table_table[] = { + lut_env_frequency, + lut_portamento_coefficient, + lut_sine, +}; + + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/resources.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources.h new file mode 100644 index 00000000..458056c8 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources.h @@ -0,0 +1,59 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources + + +#ifndef STAGES_RESOURCES_H_ +#define STAGES_RESOURCES_H_ + + +#include "stmlib/stmlib.h" + + + +namespace stages { + +typedef uint8_t ResourceId; + +extern const float* lookup_table_table[]; + +extern const float lut_env_frequency[]; +extern const float lut_portamento_coefficient[]; +extern const float lut_sine[]; +#define LUT_ENV_FREQUENCY 0 +#define LUT_ENV_FREQUENCY_SIZE 4096 +#define LUT_PORTAMENTO_COEFFICIENT 1 +#define LUT_PORTAMENTO_COEFFICIENT_SIZE 512 +#define LUT_SINE 2 +#define LUT_SINE_SIZE 1281 + +} // namespace stages + +#endif // STAGES_RESOURCES_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/resources/__init__.py b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/resources/lookup_tables.py b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources/lookup_tables.py new file mode 100644 index 00000000..dab84d6b --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources/lookup_tables.py @@ -0,0 +1,81 @@ +#!/usr/bin/python2.5 +# +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. +# +# ----------------------------------------------------------------------------- +# +# Lookup table definitions. + +import numpy +import pylab + +lookup_tables = [] + +sample_rate = 31250 + +"""---------------------------------------------------------------------------- +Envelope times. +----------------------------------------------------------------------------""" + +num_values = 4096 +max_time = 16.0 # seconds +min_time = 0.001 +gamma = 0.125 +min_frequency = 1.0 / (max_time * sample_rate) +max_frequency = 1.0 / (min_time * sample_rate) +at_0 = numpy.power(max_frequency, -gamma) +at_1 = numpy.power(min_frequency, -gamma) +rates = numpy.linspace(0, 2.0, num_values) * (at_1 - at_0) + at_0 +values = rates ** (-1/gamma) +lookup_tables.append( + ('env_frequency', values) +) + +"""---------------------------------------------------------------------------- +Portamento LPF coefficient. +----------------------------------------------------------------------------""" + +num_values = 512 +max_time = 4.0 # seconds +min_time = 0.0001 +min_frequency = 1.0 / (max_time * sample_rate) +max_frequency = 1.0 / (min_time * sample_rate) +rates = numpy.linspace(numpy.log(max_frequency), + numpy.log(min_frequency), num_values) +values = numpy.exp(rates) +lookup_tables.append( + ('portamento_coefficient', values) +) + + + +"""---------------------------------------------------------------------------- +Sine table. +----------------------------------------------------------------------------""" + +size = 1024 +t = numpy.arange(0, size + size / 4 + 1) / float(size) * numpy.pi * 2 +lookup_tables.append(('sine', numpy.sin(t))) + diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/resources/resources.py b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources/resources.py new file mode 100644 index 00000000..85aee9bc --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/resources/resources.py @@ -0,0 +1,77 @@ +#!/usr/bin/python2.5 +# +# Copyright 2016 Olivier Gillet. +# +# Author: Olivier Gillet (ol.gillet@gmail.com) +# +# 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. +# +# See http://creativecommons.org/licenses/MIT/ for more information. +# +# ----------------------------------------------------------------------------- +# +# Master resources file. + +header = """// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Resources definitions. +// +// Automatically generated with: +// make resources +""" + +namespace = 'stages' +target = 'stages' +types = ['uint8_t', 'uint16_t'] +includes = """ +#include "stmlib/stmlib.h" +""" + +import lookup_tables + +create_specialized_manager = True + +resources = [ + (lookup_tables.lookup_tables, + 'lookup_table', 'LUT', 'float', float, False), +] diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/segment_generator.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/segment_generator.cc new file mode 100644 index 00000000..c126074d --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/segment_generator.cc @@ -0,0 +1,616 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Multi-stage envelope + +#include "stages/segment_generator.h" + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/parameter_interpolator.h" +#include "stmlib/dsp/units.h" + +#include +#include +#include + +#include "stages/resources.h" + +namespace stages { + +using namespace stmlib; +using namespace std; +using namespace segment; + +// Duration of the "tooth" in the output when a trigger is received while the +// output is high. +const int kRetrigDelaySamples = 32; + +void SegmentGenerator::Init() { + process_fn_ = &SegmentGenerator::ProcessMultiSegment; + + phase_ = 0.0f; + + zero_ = 0.0f; + half_ = 0.5f; + one_ = 1.0f; + + start_ = 0.0f; + value_ = 0.0f; + lp_ = 0.0f; + + monitored_segment_ = 0; + active_segment_ = 0; + retrig_delay_ = 0; + primary_ = 0; + + Segment s; + s.start = &zero_; + s.end = &zero_; + s.time = &zero_; + s.curve = &half_; + s.portamento = &zero_; + s.phase = NULL; + s.if_rising = 0; + s.if_falling = 0; + s.if_complete = 0; + fill(&segments_[0], &segments_[kMaxNumSegments + 1], s); + + Parameters p; + p.primary = 0.0f; + p.secondary = 0.0f; + fill(¶meters_[0], ¶meters_[kMaxNumSegments], p); + + ramp_division_quantizer_.Init(); + delay_line_.Init(); + + num_segments_ = 0; +} + +void SegmentGenerator::SetSampleRate(float sample_rate) { + sample_rate_ = sample_rate; + + ramp_extractor_.Init( + sample_rate_, + 1000.0f / sample_rate_); +} + +inline float SegmentGenerator::WarpPhase(float t, float curve) const { + curve -= 0.5f; + const bool flip = curve < 0.0f; + if (flip) { + t = 1.0f - t; + } + const float a = 128.0f * curve * curve; + t = (1.0f + a) * t / (1.0f + a * t); + if (flip) { + t = 1.0f - t; + } + return t; +} + +inline float SegmentGenerator::RateToFrequency(float rate) const { + int32_t i = static_cast(rate * 2048.0f); + CONSTRAIN(i, 0, LUT_ENV_FREQUENCY_SIZE); + return lut_env_frequency[i] * (31250.0f/sample_rate_); +} + +inline float SegmentGenerator::PortamentoRateToLPCoefficient(float rate) const { + int32_t i = static_cast(rate * 512.0f); + return lut_portamento_coefficient[i] * (31250.0f/sample_rate_); +} + +void SegmentGenerator::ProcessMultiSegment( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + float phase = phase_; + float start = start_; + float lp = lp_; + float value = value_; + + while (size--) { + const Segment& segment = segments_[active_segment_]; + + if (segment.time) { + phase += RateToFrequency(*segment.time); + } + + bool complete = phase >= 1.0f; + if (complete) { + phase = 1.0f; + } + value = Crossfade( + start, + *segment.end, + WarpPhase(segment.phase ? *segment.phase : phase, *segment.curve)); + + ONE_POLE(lp, value, PortamentoRateToLPCoefficient(*segment.portamento)); + + // Decide what to do next. + int go_to_segment = -1; + if (*gate_flags & GATE_FLAG_RISING) { + go_to_segment = segment.if_rising; + } else if (*gate_flags & GATE_FLAG_FALLING) { + go_to_segment = segment.if_falling; + } else if (complete) { + go_to_segment = segment.if_complete; + } + + if (go_to_segment != -1) { + phase = 0.0f; + const Segment& destination = segments_[go_to_segment]; + start = destination.start + ? *destination.start + : (go_to_segment == active_segment_ ? start : value); + active_segment_ = go_to_segment; + } + + out->value = lp; + out->phase = phase; + out->segment = active_segment_; + ++gate_flags; + ++out; + } + phase_ = phase; + start_ = start; + lp_ = lp; + value_ = value; +} + +void SegmentGenerator::ProcessDecayEnvelope( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + const float frequency = RateToFrequency(parameters_[0].primary); + while (size--) { + if (*gate_flags & GATE_FLAG_RISING) { + phase_ = 0.0f; + active_segment_ = 0; + } + + phase_ += frequency; + if (phase_ >= 1.0f) { + phase_ = 1.0f; + active_segment_ = 1; + } + lp_ = value_ = 1.0f - WarpPhase(phase_, parameters_[0].secondary); + out->value = lp_; + out->phase = phase_; + out->segment = active_segment_; + ++gate_flags; + ++out; + } +} + +void SegmentGenerator::ProcessTimedPulseGenerator( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + const float frequency = RateToFrequency(parameters_[0].secondary); + + ParameterInterpolator primary(&primary_, parameters_[0].primary, size); + while (size--) { + if (*gate_flags & GATE_FLAG_RISING) { + retrig_delay_ = active_segment_ == 0 ? kRetrigDelaySamples : 0; + phase_ = 0.0f; + active_segment_ = 0; + } + if (retrig_delay_) { + --retrig_delay_; + } + phase_ += frequency; + if (phase_ >= 1.0f) { + phase_ = 1.0f; + active_segment_ = 1; + } + + const float p = primary.Next(); + lp_ = value_ = active_segment_ == 0 && !retrig_delay_ ? p : 0.0f; + out->value = lp_; + out->phase = phase_; + out->segment = active_segment_; + ++gate_flags; + ++out; + } +} + +void SegmentGenerator::ProcessGateGenerator( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + ParameterInterpolator primary(&primary_, parameters_[0].primary, size); + while (size--) { + active_segment_ = *gate_flags & GATE_FLAG_HIGH ? 0 : 1; + + const float p = primary.Next(); + lp_ = value_ = active_segment_ == 0 ? p : 0.0f; + out->value = lp_; + out->phase = 0.5f; + out->segment = active_segment_; + ++gate_flags; + ++out; + } +} + +void SegmentGenerator::ProcessSampleAndHold( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + const float coefficient = PortamentoRateToLPCoefficient( + parameters_[0].secondary); + ParameterInterpolator primary(&primary_, parameters_[0].primary, size); + + while (size--) { + const float p = primary.Next(); + if (*gate_flags & GATE_FLAG_RISING) { + value_ = p; + } + active_segment_ = *gate_flags & GATE_FLAG_HIGH ? 0 : 1; + + ONE_POLE(lp_, value_, coefficient); + out->value = lp_; + out->phase = 0.5f; + out->segment = active_segment_; + ++gate_flags; + ++out; + } +} + +void SegmentGenerator::ProcessClockedSampleAndHold( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + const float frequency = RateToFrequency(parameters_[0].secondary); + ParameterInterpolator primary(&primary_, parameters_[0].primary, size); + while (size--) { + phase_ += frequency; + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + + const float reset_time = phase_ / frequency; + value_ = primary.subsample(1.0f - reset_time); + } + primary.Next(); + active_segment_ = phase_ < 0.5f ? 0 : 1; + out->value = value_; + out->phase = phase_; + out->segment = active_segment_; + ++out; + } +} + +Ratio divider_ratios[] = { + { 0.249999f, 4 }, + { 0.333333f, 3 }, + { 0.499999f, 2 }, + { 0.999999f, 1 }, + { 1.999999f, 1 }, + { 2.999999f, 1 }, + { 3.999999f, 1 }, +}; + +void SegmentGenerator::ProcessTapLFO( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + float ramp[12]; + Ratio r = ramp_division_quantizer_.Lookup( + divider_ratios, parameters_[0].primary * 1.03f, 7); + ramp_extractor_.Process(r, gate_flags, ramp, size); + for (size_t i = 0; i < size; ++i) { + out[i].phase = ramp[i]; + } + ShapeLFO(parameters_[0].secondary, out, size); + active_segment_ = out[size - 1].segment; +} + +void SegmentGenerator::ProcessFreeRunningLFO( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + float f = 96.0f * (parameters_[0].primary - 0.5f); + CONSTRAIN(f, -128.0f, 127.0f); + const float frequency = SemitonesToRatio(f) * 2.0439497f / sample_rate_; + + active_segment_ = 0; + for (size_t i = 0; i < size; ++i) { + phase_ += frequency; + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + } + out[i].phase = phase_; + } + ShapeLFO(parameters_[0].secondary, out, size); + active_segment_ = out[size - 1].segment; +} + +void SegmentGenerator::ProcessDelay( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + const float max_delay = static_cast(kMaxDelay - 1); + + float delay_time = SemitonesToRatio( + 2.0f * (parameters_[0].secondary - 0.5f) * 36.0f) * 0.5f * sample_rate_; + float clock_frequency = 1.0f; + float delay_frequency = 1.0f / delay_time; + + if (delay_time >= max_delay) { + clock_frequency = max_delay * delay_frequency; + delay_time = max_delay; + } + ParameterInterpolator primary(&primary_, parameters_[0].primary, size); + + active_segment_ = 0; + while (size--) { + phase_ += clock_frequency; + ONE_POLE(lp_, primary.Next(), clock_frequency); + if (phase_ >= 1.0f) { + phase_ -= 1.0f; + delay_line_.Write(lp_); + } + + aux_ += delay_frequency; + if (aux_ >= 1.0f) { + aux_ -= 1.0f; + } + active_segment_ = aux_ < 0.5f ? 0 : 1; + + ONE_POLE( + value_, + delay_line_.Read(delay_time - phase_), + clock_frequency); + out->value = value_; + out->phase = aux_; + out->segment = active_segment_; + ++out; + } +} + +void SegmentGenerator::ProcessPortamento( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + const float coefficient = PortamentoRateToLPCoefficient( + parameters_[0].secondary); + ParameterInterpolator primary(&primary_, parameters_[0].primary, size); + + active_segment_ = 0; + while (size--) { + value_ = primary.Next(); + ONE_POLE(lp_, value_, coefficient); + out->value = lp_; + out->phase = 0.5f; + out->segment = active_segment_; + ++out; + } +} + +void SegmentGenerator::ProcessZero( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + + value_ = 0.0f; + active_segment_ = 1; + while (size--) { + out->value = 0.0f; + out->phase = 0.5f; + out->segment = 1; + ++out; + } +} + +void SegmentGenerator::ProcessSlave( + const GateFlags* gate_flags, SegmentGenerator::Output* out, size_t size) { + while (size--) { + active_segment_ = out->segment == monitored_segment_ ? 0 : 1; + out->value = active_segment_ ? 0.0f : 1.0f - out->phase; + ++out; + } +} + +/* static */ +void SegmentGenerator::ShapeLFO( + float shape, + SegmentGenerator::Output* in_out, + size_t size) { + shape -= 0.5f; + shape = 2.0f + 9.999999f * shape / (1.0f + 3.0f * fabs(shape)); + + const float slope = min(shape * 0.5f, 0.5f); + const float plateau_width = max(shape - 3.0f, 0.0f); + const float sine_amount = max( + shape < 2.0f ? shape - 1.0f : 3.0f - shape, 0.0f); + + const float slope_up = 1.0f / slope; + const float slope_down = 1.0f / (1.0f - slope); + const float plateau = 0.5f * (1.0f - plateau_width); + const float normalization = 1.0f / plateau; + const float phase_shift = plateau_width * 0.25f; + + while (size--) { + float phase = in_out->phase - phase_shift; + if (phase < 0.0f) { + phase += 1.0f; + } + float triangle = phase < slope + ? slope_up * phase + : 1.0f - (phase - slope) * slope_down; + triangle -= 0.5f; + CONSTRAIN(triangle, -plateau, plateau); + triangle = triangle * normalization; + float sine = InterpolateWrap(lut_sine, phase + 0.75f, 1024.0f); + in_out->value = 0.5f * Crossfade(triangle, sine, sine_amount) + 0.5f; + in_out->segment = phase < 0.5f ? 0 : 1; + ++in_out; + } +} + +void SegmentGenerator::Configure( + bool has_trigger, + const Configuration* segment_configuration, + int num_segments) { + if (num_segments == 1) { + ConfigureSingleSegment(has_trigger, segment_configuration[0]); + return; + } + num_segments_ = num_segments; + + // assert(has_trigger); + + process_fn_ = &SegmentGenerator::ProcessMultiSegment; + + // A first pass to collect loop points, and check for STEP segments. + int loop_start = -1; + int loop_end = -1; + bool has_step_segments = false; + int last_segment = num_segments - 1; + int first_ramp_segment = -1; + + for (int i = 0; i <= last_segment; ++i) { + has_step_segments = has_step_segments || \ + segment_configuration[i].type == TYPE_STEP; + if (segment_configuration[i].loop) { + if (loop_start == -1) { + loop_start = i; + } + loop_end = i; + } + if (segment_configuration[i].type == TYPE_RAMP) { + if (first_ramp_segment == -1) { + first_ramp_segment = i; + } + } + } + + // Check if there are step segments inside the loop. + bool has_step_segments_inside_loop = false; + if (loop_start != -1) { + for (int i = loop_start; i <= loop_end; ++i) { + if (segment_configuration[i].type == TYPE_STEP) { + has_step_segments_inside_loop = true; + break; + } + } + } + + for (int i = 0; i <= last_segment; ++i) { + Segment* s = &segments_[i]; + if (segment_configuration[i].type == TYPE_RAMP) { + s->start = (num_segments == 1) ? &one_ : NULL; + s->time = ¶meters_[i].primary; + s->curve = ¶meters_[i].secondary; + s->portamento = &zero_; + s->phase = NULL; + + if (i == last_segment) { + s->end = &zero_; + } else if (segment_configuration[i + 1].type != TYPE_RAMP) { + s->end = ¶meters_[i + 1].primary; + } else if (i == first_ramp_segment) { + s->end = &one_; + } else { + s->end = ¶meters_[i].secondary; + // The whole "reuse the curve from other segment" thing + // is a bit too complicated... + // + // for (int j = i + 1; j <= last_segment; ++j) { + // if (segment_configuration[j].type == TYPE_RAMP) { + // if (j == last_segment || + // segment_configuration[j + 1].type != TYPE_RAMP) { + // s->curve = ¶meters_[j].secondary; + // break; + // } + // } + // } + s->curve = &half_; + } + } else { + s->start = s->end = ¶meters_[i].primary; + s->curve = &half_; + if (segment_configuration[i].type == TYPE_STEP) { + s->portamento = ¶meters_[i].secondary; + s->time = NULL; + // Sample if there is a loop of length 1 on this segment. Otherwise + // track. + s->phase = i == loop_start && i == loop_end ? &zero_ : &one_; + } else { + s->portamento = &zero_; + // Hold if there's a loop of length 1 of this segment. Otherwise, use + // the programmed time. + s->time = i == loop_start && i == loop_end + ? NULL : ¶meters_[i].secondary; + s->phase = &one_; // Track the changes on the slider. + } + } + + s->if_complete = i == loop_end ? loop_start : i + 1; + s->if_falling = loop_end == -1 || loop_end == last_segment || has_step_segments ? -1 : loop_end + 1; + s->if_rising = 0; + + if (has_step_segments) { + if (!has_step_segments_inside_loop && i >= loop_start && i <= loop_end) { + s->if_rising = (loop_end + 1) % num_segments; + } else { + // Just go to the next stage. + // s->if_rising = (i == loop_end) ? loop_start : (i + 1) % num_segments; + + // Find the next STEP segment. + bool follow_loop = loop_end != -1; + int next_step = i; + while (segment_configuration[next_step].type != TYPE_STEP) { + ++next_step; + if (follow_loop && next_step == loop_end + 1) { + next_step = loop_start; + follow_loop = false; + } + if (next_step >= num_segments) { + next_step = num_segments - 1; + break; + } + } + s->if_rising = next_step == loop_end + ? loop_start + : (next_step + 1) % num_segments; + } + } + } + + Segment* sentinel = &segments_[num_segments]; + sentinel->end = sentinel->start = segments_[num_segments - 1].end; + sentinel->time = &zero_; + sentinel->curve = &half_; + sentinel->portamento = &zero_; + sentinel->if_rising = 0; + sentinel->if_falling = -1; + sentinel->if_complete = loop_end == last_segment ? 0 : -1; + + // After changing the state of the module, we go to the sentinel. + active_segment_ = num_segments; +} + +/* static */ +SegmentGenerator::ProcessFn SegmentGenerator::process_fn_table_[12] = { + // RAMP + &SegmentGenerator::ProcessZero, + &SegmentGenerator::ProcessFreeRunningLFO, + &SegmentGenerator::ProcessDecayEnvelope, + &SegmentGenerator::ProcessTapLFO, + + // STEP + &SegmentGenerator::ProcessPortamento, + &SegmentGenerator::ProcessPortamento, + &SegmentGenerator::ProcessSampleAndHold, + &SegmentGenerator::ProcessSampleAndHold, + + // HOLD + &SegmentGenerator::ProcessDelay, + &SegmentGenerator::ProcessDelay, + // &SegmentGenerator::ProcessClockedSampleAndHold, + &SegmentGenerator::ProcessTimedPulseGenerator, + &SegmentGenerator::ProcessGateGenerator +}; + +} // namespace stages \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/segment_generator.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/segment_generator.h new file mode 100644 index 00000000..af1cfc0a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/segment_generator.h @@ -0,0 +1,206 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Multi-stage envelope. + +#ifndef STAGES_SEGMENT_GENERATOR_H_ +#define STAGES_SEGMENT_GENERATOR_H_ + +#include "stmlib/dsp/hysteresis_quantizer.h" +#include "stmlib/utils/gate_flags.h" + +#include "stages/delay_line_16_bits.h" + +#include "stages/ramp_extractor.h" + +namespace stages { + +// Each segment generator can handle up to 36 segments. That's a bit of a waste +// of RAM because the 6 generators running on a module will never have to deal +// with 36 segments each. But it was a bit too much to have a shared pool of +// pre-allocated Segments shared by all SegmentGenerators! +const int kMaxNumSegments = 36; + +const size_t kMaxDelay = 768; + +#define DECLARE_PROCESS_FN(X) void Process ## X \ + (const stmlib::GateFlags* gate_flags, Output* out, size_t size); + +namespace segment { + +// High level descriptions / parameters. +enum Type { + TYPE_RAMP = 0, + TYPE_STEP = 1, + TYPE_HOLD = 2, +}; + +struct Configuration { + Type type; + bool loop; +}; + +struct Parameters { + // Segment type | Main | Secondary + // + // RAMP | Time | Shape (or level if followed by RAMP) + // HOLD | Level | Time + // STEP | Level | Shape (portamento) + float primary; + float secondary; +}; + +} // namespace segment + +class SegmentGenerator { + public: + SegmentGenerator() { } + ~SegmentGenerator() { } + + struct Output { + float value; + float phase; + int32_t segment; + }; + + struct Segment { + // Low level state. + + float* start; // NULL if we should start from the current value. + float* time; // NULL if the segment has infinite duration. + float* curve; + float* portamento; + float* end; + float* phase; + + int8_t if_rising; + int8_t if_falling; + int8_t if_complete; + }; + + void Init(); + void SetSampleRate(float sample_rate); + + typedef void (SegmentGenerator::*ProcessFn)( + const stmlib::GateFlags* gate_flags, Output* out, size_t size); + + bool Process( + const stmlib::GateFlags* gate_flags, Output* out, size_t size) { + (this->*process_fn_)(gate_flags, out, size); + return active_segment_ == 0; + } + + void Configure( + bool has_trigger, + const segment::Configuration* segment_configuration, + int num_segments); + + inline void ConfigureSingleSegment( + bool has_trigger, + segment::Configuration segment_configuration) { + int i = has_trigger ? 2 : 0; + i += segment_configuration.loop ? 1 : 0; + i += int(segment_configuration.type) * 4; + process_fn_ = process_fn_table_[i]; + num_segments_ = 1; + } + + inline void ConfigureSlave(int i) { + monitored_segment_ = i; + process_fn_ = &SegmentGenerator::ProcessSlave; + num_segments_ = 0; + } + + void set_segment_parameters(int index, float primary, float secondary) { + // assert (primary >= -1.0f && primary <= 2.0f) + // assert (secondary >= 0.0f && secondary <= 1.0f) + parameters_[index].primary = primary; + parameters_[index].secondary = secondary; + } + + inline int num_segments() { + return num_segments_; + } + + private: + // Process function for the general case. + DECLARE_PROCESS_FN(MultiSegment); + DECLARE_PROCESS_FN(DecayEnvelope); + DECLARE_PROCESS_FN(TimedPulseGenerator); + DECLARE_PROCESS_FN(GateGenerator); + DECLARE_PROCESS_FN(SampleAndHold); + DECLARE_PROCESS_FN(TapLFO); + DECLARE_PROCESS_FN(FreeRunningLFO); + DECLARE_PROCESS_FN(Delay); + DECLARE_PROCESS_FN(Portamento); + DECLARE_PROCESS_FN(Zero); + DECLARE_PROCESS_FN(ClockedSampleAndHold); + DECLARE_PROCESS_FN(Slave); + + void ShapeLFO(float shape, Output* in_out, size_t size); + float WarpPhase(float t, float curve) const; + float RateToFrequency(float rate) const; + float PortamentoRateToLPCoefficient(float rate) const; + + float sample_rate_; + + float phase_; + float aux_; + float previous_delay_sample_; + + float start_; + float value_; + float lp_; + float primary_; + + float zero_; + float half_; + float one_; + + int active_segment_; + int monitored_segment_; + int retrig_delay_; + + int num_segments_; + + ProcessFn process_fn_; + + RampExtractor ramp_extractor_; + stmlib::HysteresisQuantizer ramp_division_quantizer_; + + Segment segments_[kMaxNumSegments + 1]; // There's a sentinel! + segment::Parameters parameters_[kMaxNumSegments]; + + DelayLine16Bits delay_line_; + + static ProcessFn process_fn_table_[12]; + + DISALLOW_COPY_AND_ASSIGN(SegmentGenerator); +}; + +} // namespace stages + +#endif // STAGES_SEGMENT_GENERATOR_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/settings.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/settings.cc new file mode 100644 index 00000000..c089bae4 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/settings.cc @@ -0,0 +1,93 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Settings storage. + +#include "stages/settings.h" + +#include + +#include "stmlib/system/storage.h" + +namespace stages { + +using namespace std; + +#define FIX_OUTLIER(destination, expected_value) if (fabsf(destination / expected_value - 1.0f) > 0.1f) { destination = expected_value; } +#define FIX_OUTLIER_ABSOLUTE(destination, expected_value) if (fabsf(destination - expected_value) > 0.1f) { destination = expected_value; } + + +bool Settings::Init() { + ChannelCalibrationData default_calibration_data; + + default_calibration_data.dac_offset = 32768.0f; + default_calibration_data.dac_scale = -32263.0f; + default_calibration_data.adc_offset = 0.0f; + default_calibration_data.adc_scale = -1.0f; + + fill( + &persistent_data_.channel_calibration_data[0], + &persistent_data_.channel_calibration_data[kNumChannels], + default_calibration_data); + + fill( + &state_.segment_configuration[0], + &state_.segment_configuration[kNumChannels], + 0); + + state_.color_blind = 0; + + bool success = chunk_storage_.Init(&persistent_data_, &state_); + + // Sanitize settings read from flash. + if (success) { + for (size_t i = 0; i < kNumChannels; ++i) { + ChannelCalibrationData* c = &persistent_data_.channel_calibration_data[i]; + FIX_OUTLIER_ABSOLUTE(c->adc_offset, 0.0f); + + FIX_OUTLIER(c->dac_offset, 32768.0f); + FIX_OUTLIER(c->dac_scale, -32263.0f); + FIX_OUTLIER(c->adc_scale, -1.0f); + + uint8_t type_bits = state_.segment_configuration[i] & 0x3; + uint8_t loop_bit = state_.segment_configuration[i] & 0x4; + CONSTRAIN(type_bits, 0, 3); + state_.segment_configuration[i] = type_bits | loop_bit; + } + } + + return success; +} + +void Settings::SavePersistentData() { + chunk_storage_.SavePersistentData(); +} + +void Settings::SaveState() { + chunk_storage_.SaveState(); +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/settings.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/settings.h new file mode 100644 index 00000000..09c2522f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/settings.h @@ -0,0 +1,111 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Settings storage. + +#ifndef STAGES_SETTINGS_H_ +#define STAGES_SETTINGS_H_ + +#include "stmlib/stmlib.h" +#include "stmlib/system/storage.h" + +#include "stages/chain_state.h" + +namespace stages { + +struct ChannelCalibrationData { + float adc_offset; + float adc_scale; + float dac_offset; + float dac_scale; + + inline uint16_t dac_code(float level) const { + int32_t value = level * dac_scale + dac_offset; + CONSTRAIN(value, 0, 65531); + return static_cast(value); + } +}; + +struct PersistentData { + ChannelCalibrationData channel_calibration_data[kNumChannels]; + uint8_t padding[16]; + + enum { tag = 0x494C4143 }; // CALI +}; + +struct State { + uint8_t segment_configuration[kNumChannels]; + uint8_t color_blind; + uint8_t padding[1]; + enum { tag = 0x54415453 }; // STAT +}; + +class Settings { + public: + Settings() { } + ~Settings() { } + + bool Init(); + + void SavePersistentData(); + void SaveState(); + + inline ChannelCalibrationData* mutable_calibration_data(int channel) { + return &persistent_data_.channel_calibration_data[channel]; + } + + inline const ChannelCalibrationData& calibration_data(int channel) const { + return persistent_data_.channel_calibration_data[channel]; + } + + inline State* mutable_state() { + return &state_; + } + + inline const State& state() const { + return state_; + } + + inline uint16_t dac_code(int index, float level) const { + return calibration_data(index).dac_code(level); + } + + private: + PersistentData persistent_data_; + State state_; + + stmlib::ChunkStorage< + 0x08004000, + 0x08008000, + PersistentData, + State> chunk_storage_; + + DISALLOW_COPY_AND_ASSIGN(Settings); +}; + +} // namespace stages + +#endif // STAGES_SETTINGS_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/stages.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/stages.cc new file mode 100644 index 00000000..6bcabf13 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/stages.cc @@ -0,0 +1,261 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. + +#include + +#include "stmlib/dsp/dsp.h" + +#include "stmlib/dsp/dsp.h" +#include "stmlib/dsp/units.h" +#include "stages/chain_state.h" +#include "stages/drivers/dac.h" +#include "stages/drivers/gate_inputs.h" +#include "stages/drivers/serial_link.h" +#include "stages/drivers/system.h" +#include "stages/cv_reader.h" +#include "stages/factory_test.h" +#include "stages/io_buffer.h" +#include "stages/oscillator.h" +#include "stages/resources.h" +#include "stages/segment_generator.h" +#include "stages/settings.h" +#include "stages/ui.h" + +using namespace stages; +using namespace std; +using namespace stmlib; + +const bool skip_factory_test = false; +const bool test_adc_noise = false; + +ChainState chain_state; +CvReader cv_reader; +Dac dac; +FactoryTest factory_test; +GateFlags no_gate[kBlockSize]; +GateInputs gate_inputs; +SegmentGenerator segment_generator[kNumChannels]; +Oscillator oscillator[kNumChannels]; +IOBuffer io_buffer; +SerialLink left_link; +SerialLink right_link; +Settings settings; +Ui ui; + +// Default interrupt handlers. +extern "C" { + +void NMI_Handler() { } +void HardFault_Handler() { while (1); } +void MemManage_Handler() { while (1); } +void BusFault_Handler() { while (1); } +void UsageFault_Handler() { while (1); } +void SVC_Handler() { } +void DebugMon_Handler() { } +void PendSV_Handler() { } + +} + +// SysTick and 32kHz handles +extern "C" { + +void SysTick_Handler() { + IWDG_ReloadCounter(); + ui.Poll(); + if (!skip_factory_test) { + factory_test.Poll(); + } +} + +} + +IOBuffer::Slice FillBuffer(size_t size) { + IOBuffer::Slice s = io_buffer.NextSlice(size); + gate_inputs.Read(s, size); + if (io_buffer.new_block()) { + cv_reader.Read(s.block); + gate_inputs.ReadNormalization(s.block); + } + return s; +} + +SegmentGenerator::Output out[kBlockSize]; + +static float note_lp[kNumChannels] = { 0, 0, 0, 0, 0, 0 }; + +void Process(IOBuffer::Block* block, size_t size) { + chain_state.Update( + *block, + &settings, + &segment_generator[0], + out); + for (size_t channel = 0; channel < kNumChannels; ++channel) { + bool led_state = segment_generator[channel].Process( + block->input_patched[channel] ? block->input[channel] : no_gate, + out, + size); + ui.set_slider_led(channel, led_state, 5); + + if (test_adc_noise) { + float note = block->cv_slider[channel]; + ONE_POLE(note_lp[channel], note, 0.0001f); + float cents = (note - note_lp[channel]) * 1200.0f * 0.5f; + CONSTRAIN(cents, -1.0f, +1.0f) + for (size_t i = 0; i < size; ++i) { + out[i].value = cents; + } + } + + for (size_t i = 0; i < size; ++i) { + block->output[channel][i] = settings.dac_code(channel, out[i].value); + } + } +} + + +float ouroboros_ratios[] = { + 0.25f, 0.5f, 1.0f, 1.5f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 8.0f, 8.0f +}; + +float this_channel[kBlockSize]; +float sum[kBlockSize]; +float channel_amplitude[kNumChannels]; +float previous_amplitude[kNumChannels]; + +void ProcessOuroboros(IOBuffer::Block* block, size_t size) { + const float coarse = (block->cv_slider[0] - 0.5f) * 96.0f; + const float fine = block->pot[0] * 2.0f - 1.0f; + const float f0 = SemitonesToRatio(coarse + fine) * 261.6255f / kSampleRate; + + std::fill(&sum[0], &sum[size], 0.0f); + + for (int channel = kNumChannels - 1; channel >= 0; --channel) { + + const float harmonic = block->pot[channel] * 9.999f; + MAKE_INTEGRAL_FRACTIONAL(harmonic); + harmonic_fractional = 8.0f * (harmonic_fractional - 0.5f) + 0.5f; + CONSTRAIN(harmonic_fractional, 0.0f, 1.0f); + const float ratio = channel == 0 ? 1.0f : Crossfade( + ouroboros_ratios[harmonic_integral], + ouroboros_ratios[harmonic_integral + 1], + harmonic_fractional); + const float amplitude = channel == 0 + ? 1.0f + : std::max(block->cv_slider[channel], 0.0f); + bool trigger = false; + for (size_t i = 0; i < size; ++i) { + trigger = trigger || (block->input[channel][i] & GATE_FLAG_RISING); + } + if (trigger || !block->input_patched[channel]) { + channel_amplitude[channel] = 1.0f; + } else { + channel_amplitude[channel] *= 0.999f; + } + ui.set_slider_led( + channel, channel_amplitude[channel] * amplitude > 0.00001f, 1); + const float f = f0 * ratio; + + uint8_t waveshape = settings.state().segment_configuration[channel]; + switch (waveshape) { + case 0: + oscillator[channel].Render( + f, 0.5f, this_channel, size); + break; + case 1: + oscillator[channel].Render( + f, 0.5f, this_channel, size); + break; + case 2: + case 3: + oscillator[channel].Render( + f, 0.5f, this_channel, size); + break; + case 4: + oscillator[channel].Render( + f, 0.5f, this_channel, size); + break; + case 5: + oscillator[channel].Render( + f, 0.75f, this_channel, size); + break; + case 6: + case 7: + oscillator[channel].Render( + f, 0.9f, this_channel, size); + break; + } + + ParameterInterpolator am( + &previous_amplitude[channel], + amplitude * amplitude * channel_amplitude[channel], + size); + for (size_t i = 0; i < size; ++i) { + sum[i] += this_channel[i] * am.Next(); + } + + const float gain = channel == 0 ? 0.2f : 0.66f; + const float* source = channel == 0 ? sum : this_channel; + for (size_t i = 0; i < size; ++i) { + block->output[channel][i] = settings.dac_code(channel, source[i] * gain); + } + } +} + +void Init() { + System sys; + sys.Init(true); + dac.Init(int(kSampleRate), 2); + gate_inputs.Init(); + io_buffer.Init(); + + bool freshly_baked = !settings.Init(); + for (size_t i = 0; i < kNumChannels; ++i) { + segment_generator[i].Init(); + oscillator[i].Init(); + } + std::fill(&no_gate[0], &no_gate[kBlockSize], GATE_FLAG_LOW); + + cv_reader.Init(&settings); + + ui.Init(&settings, &chain_state); + + if (freshly_baked && !skip_factory_test) { + factory_test.Start(&settings, &cv_reader, &gate_inputs, &ui); + ui.set_factory_test(true); + } else { + chain_state.Init(&left_link, &right_link); + } + + sys.StartTimers(); + dac.Start(&FillBuffer); +} + +int main(void) { + Init(); + while (1) { + io_buffer.Process(factory_test.running() + ? &FactoryTest::ProcessFn + : (chain_state.ouroboros() ? &ProcessOuroboros : &Process)); + } +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/test/fixtures.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/test/fixtures.h new file mode 100644 index 00000000..9d7f22a1 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/test/fixtures.h @@ -0,0 +1,155 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.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 STAGES_TEST_FIXTURES_H_ +#define STAGES_TEST_FIXTURES_H_ + +#include +#include + +#include "stmlib/test/wav_writer.h" +#include "stmlib/utils/gate_flags.h" + +#include "stages/segment_generator.h" + +namespace stages { + +using namespace std; +using namespace stmlib; + +class PulseGenerator { + public: + PulseGenerator() { + counter_ = 0; + previous_state_ = 0; + } + ~PulseGenerator() { } + + inline bool empty() const { + return pulses_.size() == 0; + } + + void AddPulses(int total_duration, int on_duration, int num_repetitions) { + Pulse p; + p.total_duration = total_duration; + p.on_duration = on_duration; + p.num_repetitions = num_repetitions; + pulses_.push_back(p); + } + + void CreateTestPattern() { + AddPulses(16000, 4000, 3); + AddPulses(16000, 8000, 3); + AddPulses(32000, 4000, 3); + AddPulses(32000, 16000, 3); + AddPulses(32000, 24000, 3); + } + + void Render(GateFlags* clock, size_t size) { + while (size--) { + bool current_state = pulses_.size() && counter_ < pulses_[0].on_duration; + ++counter_; + if (pulses_.size() && counter_ >= pulses_[0].total_duration) { + counter_ = 0; + --pulses_[0].num_repetitions; + if (pulses_[0].num_repetitions == 0) { + pulses_.erase(pulses_.begin()); + } + } + previous_state_ = *clock++ = ExtractGateFlags(previous_state_, current_state); + } + } + + private: + struct Pulse { + int total_duration; + int on_duration; + int num_repetitions; + }; + int counter_; + GateFlags previous_state_; + + vector pulses_; + + DISALLOW_COPY_AND_ASSIGN(PulseGenerator); +}; + + +class SegmentGeneratorTest { + public: + SegmentGeneratorTest() { + segment_generator_.Init(); + } + ~SegmentGeneratorTest() { } + + PulseGenerator* pulses() { return &pulse_generator_; } + SegmentGenerator* generator() { return &segment_generator_; } + + struct SegmentParameters { + int index; + float primary; + float secondary; + }; + + void set_segment_parameters(int index, float primary, float secondary) { + SegmentParameters p; + p.index = index; + p.primary = primary; + p.secondary = secondary; + segment_parameters_.push_back(p); + } + + void Render(const char* file_name, int sr) { + if (pulse_generator_.empty()) { + pulse_generator_.CreateTestPattern(); + } + + stmlib::WavWriter wav_writer(4, sr, 20); + wav_writer.Open(file_name); + + for (int i = 0; i < sr * 20; ++i) { + GateFlags f; + pulse_generator_.Render(&f, 1); + SegmentGenerator::Output out; + + for (size_t j = 0; j < segment_parameters_.size(); ++j) { + const SegmentParameters& p = segment_parameters_[j]; + segment_generator_.set_segment_parameters( + p.index, + p.primary >= 0.0f ? p.primary : wav_writer.triangle(-p.primary), + p.secondary >= 0.0f ? p.secondary : wav_writer.triangle(-p.secondary)); + } + + segment_generator_.Process(&f, &out, 1); + float s[4]; + s[0] = f & GATE_FLAG_HIGH ? 0.8f : 0.0f; + s[1] = out.value; + s[2] = out.segment * 0.1f; + s[3] = out.phase; + wav_writer.Write(s, 4, 32767.0f); + } + } + + private: + SegmentGenerator segment_generator_; + PulseGenerator pulse_generator_; + vector segment_parameters_; + + DISALLOW_COPY_AND_ASSIGN(SegmentGeneratorTest); +}; + +} // namespace stages + +#endif // STAGES_TEST_FIXTURES_H_ \ No newline at end of file diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/test/makefile b/plugins/community/repos/AudibleInstruments/eurorack/stages/test/makefile new file mode 100644 index 00000000..eef04c4f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/test/makefile @@ -0,0 +1,44 @@ +PACKAGES = stages/test stmlib/utils stages stages/ramp stmlib/dsp + +VPATH = $(PACKAGES) + +TARGET = stages_test +BUILD_ROOT = build/ +BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ +CC_FILES = ramp_extractor.cc \ + stages_test.cc \ + segment_generator.cc \ + resources.cc \ + units.cc +OBJ_FILES = $(CC_FILES:.cc=.o) +OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) +DEPS = $(OBJS:.o=.d) +DEP_FILE = $(BUILD_DIR)depends.mk + +all: stages_test + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +$(BUILD_DIR)%.o: %.cc + g++ -c -DTEST -g -Wall -Werror -msse2 -Wno-unused-variable -O2 -I. $< -o $@ + +$(BUILD_DIR)%.d: %.cc + g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) + +stages_test: $(OBJS) + g++ -g -o $(TARGET) $(OBJS) -Wl,-no_pie -lm -lprofiler -L/opt/local/lib + +depends: $(DEPS) + cat $(DEPS) > $(DEP_FILE) + +$(DEP_FILE): $(BUILD_DIR) $(DEPS) + cat $(DEPS) > $(DEP_FILE) + +profile: stages_test + env CPUPROFILE_FREQUENCY=1000 CPUPROFILE=$(BUILD_DIR)/stages.prof ./stages_test && pprof --pdf ./stages_test $(BUILD_DIR)/stages.prof > profile.pdf && open profile.pdf + +clean: + rm $(BUILD_DIR)*.* + +include $(DEP_FILE) diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/test/stages_test.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/test/stages_test.cc new file mode 100644 index 00000000..60fc4e13 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/test/stages_test.cc @@ -0,0 +1,199 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.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 +#include +#include +#include + +#include "stages/test/fixtures.h" + +using namespace stages; +using namespace stmlib; + +const uint32_t kSampleRate = 32000; + +void TestADSR() { + SegmentGeneratorTest t; + + segment::Configuration configuration[6] = { + { segment::TYPE_RAMP, false }, + { segment::TYPE_RAMP, false }, + { segment::TYPE_RAMP, false }, + { segment::TYPE_HOLD, true }, + { segment::TYPE_RAMP, false }, + }; + + t.generator()->Configure(true, configuration, 5); + t.set_segment_parameters(0, 0.15f, 0.0f); + t.set_segment_parameters(1, 0.25f, 0.3f); + t.set_segment_parameters(2, 0.25f, 0.75f); + t.set_segment_parameters(3, 0.5f, 0.1f); + t.set_segment_parameters(4, 0.5f, 0.25f); + t.Render("stages_adsr.wav", ::kSampleRate); +} + +void TestTwoStepSequence() { + SegmentGeneratorTest t; + + segment::Configuration configuration[2] = { + { segment::TYPE_HOLD, false }, + { segment::TYPE_HOLD, false }, + }; + + t.generator()->Configure(true, configuration, 2); + t.set_segment_parameters(0, 0.2f, 0.3f); + t.set_segment_parameters(1, -1.0f, 0.5f); + t.Render("stages_two_step.wav", ::kSampleRate); +} + +void TestSingleDecay() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_RAMP, false }; + + t.generator()->Configure(true, &configuration, 1); + t.set_segment_parameters(0, 0.7f, 0.2f); + t.Render("stages_single_decay.wav", ::kSampleRate); +} + +void TestTimedPulse() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_HOLD, false }; + + t.generator()->Configure(true, &configuration, 1); + t.set_segment_parameters(0, -1.0f, 0.4f); + t.Render("stages_timed_pulse.wav", ::kSampleRate); +} + +void TestGate() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_HOLD, true }; + + t.generator()->Configure(true, &configuration, 1); + t.set_segment_parameters(0, 0.5f, 0.5f); + t.Render("stages_gate.wav", ::kSampleRate); +} + +void TestSampleAndHold() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_STEP, true }; + + t.generator()->Configure(true, &configuration, 1); + t.set_segment_parameters(0, -1.0f, 0.5f); + t.Render("stages_sh.wav", ::kSampleRate); +} + +void TestPortamento() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_STEP, true }; + + t.generator()->Configure(false, &configuration, 1); + t.set_segment_parameters(0, -1.0f, 0.7f); + t.Render("stages_portamento.wav", ::kSampleRate); +} + +void TestFreeRunningLFO() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_RAMP, true }; + + t.generator()->Configure(false, &configuration, 1); + t.set_segment_parameters(0, 0.7f, -3.0f); + t.Render("stages_free_running_lfo.wav", ::kSampleRate); +} + +void TestTapLFO() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_RAMP, true }; + + t.generator()->Configure(true, &configuration, 1); + t.pulses()->AddPulses(4000, 1000, 20); + t.pulses()->AddPulses(8000, 7000, 20); + for (int i = 0; i < 15; ++i) { + t.pulses()->AddPulses(1500, 500, 6); + t.pulses()->AddPulses(3000, 500, 2); + } + for (int i = 0; i < 100; ++i) { + int length = (rand() % 1200) + 400; + t.pulses()->AddPulses(length, length / 4, 1); + } + t.pulses()->AddPulses(10, 5, 500); + t.set_segment_parameters(0, 0.5f, 0.5f); + t.Render("stages_tap_lfo.wav", ::kSampleRate); +} + +void TestDelay() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_HOLD, false }; + + t.generator()->Configure(false, &configuration, 1); + t.set_segment_parameters(0, -1.0f, 0.5f); + t.Render("stages_delay.wav", ::kSampleRate); +} + +void TestClockedSampleAndHold() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_HOLD, true }; + + t.generator()->Configure(false, &configuration, 1); + t.set_segment_parameters(0, -1.0f, 0.5f); + t.Render("stages_clocked_sh.wav", ::kSampleRate); +} + +void TestZero() { + SegmentGeneratorTest t; + + segment::Configuration configuration = { segment::TYPE_RAMP, false }; + + t.generator()->Configure(false, &configuration, 1); + t.set_segment_parameters(0, -1.0f, 0.05f); + t.Render("stages_zero.wav", ::kSampleRate); +} + + +void TestDelayLine() { + DelayLine16Bits<8> d; + d.Init(); + for (int i = 0; i < 21; i++) { + d.Write(i / 22.0f + 0.01f); + float a = d.Read(size_t(1)); + float b = d.Read(size_t(2)); + float c = d.Read(1.2f); + printf("%f %f %f %f\n", a, b, c, a + (b - a) * 0.2f); + } +} + +int main(void) { + TestADSR(); + TestTwoStepSequence(); + TestSingleDecay(); + TestTimedPulse(); + TestGate(); + TestSampleAndHold(); + TestPortamento(); + TestFreeRunningLFO(); + TestTapLFO(); + TestDelay(); + TestZero(); + TestClockedSampleAndHold(); +} diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/ui.cc b/plugins/community/repos/AudibleInstruments/eurorack/stages/ui.cc new file mode 100644 index 00000000..2f23782a --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/ui.cc @@ -0,0 +1,196 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// User interface + +#include "stages/ui.h" + +#include + +#include "stmlib/system/system_clock.h" + +using namespace std; +using namespace stmlib; + +const int32_t kLongPressDuration = 1000; + +namespace stages { + +/* static */ +const LedColor Ui::palette_[4] = { + LED_COLOR_GREEN, + LED_COLOR_YELLOW, + LED_COLOR_RED, + LED_COLOR_OFF +}; + +void Ui::Init(Settings* settings, ChainState* chain_state) { + leds_.Init(); + switches_.Init(); + + system_clock.Init(); + fill(&press_time_[0], &press_time_[kNumSwitches], 0); + + settings_ = settings; + mode_ = UI_MODE_NORMAL; + chain_state_ = chain_state; + + if (switches_.pressed_immediate(0)) { + State* state = settings_->mutable_state(); + if (state->color_blind == 1) { + state->color_blind = 0; + } else { + state->color_blind = 1; + } + settings_->SaveState(); + } + + fill(&slider_led_counter_[0], &slider_led_counter_[kNumLEDs], 0); +} + +void Ui::Poll() { + system_clock.Tick(); + UpdateLEDs(); + + switches_.Debounce(); + + if (chain_state_->ouroboros()) { + State* s = settings_->mutable_state(); + for (int i = 0; i < kNumSwitches; ++i) { + if (switches_.pressed(i)) { + if (press_time_[i] != -1) { + ++press_time_[i]; + } + if (press_time_[i] > kLongPressDuration) { + uint8_t loop_bit = s->segment_configuration[i] & 0x4; + uint8_t type_bits = s->segment_configuration[i] & 0x03; + s->segment_configuration[i] = type_bits | (4 - loop_bit); + settings_->SaveState(); + press_time_[i] = -1; + } + } else { + if (press_time_[i] > 0) { + uint8_t loop_bit = s->segment_configuration[i] & 0x4; + uint8_t type_bits = s->segment_configuration[i] & 0x03; + s->segment_configuration[i] = ((type_bits + 1) % 3) | loop_bit; + settings_->SaveState(); + } + press_time_[i] = 0; + } + } + } else { + ChainState::ChannelBitmask pressed = 0; + for (int i = 0; i < kNumSwitches; ++i) { + if (switches_.pressed(i)) { + pressed |= 1 << i; + } + } + chain_state_->set_local_switch_pressed(pressed); + } +} + +inline uint8_t Ui::FadePattern(uint8_t shift, uint8_t phase) const { + uint8_t x = system_clock.milliseconds() >> shift; + x += phase; + x &= 0x1f; + return x <= 0x10 ? x : 0x1f - x; +} + +void Ui::UpdateLEDs() { + leds_.Clear(); + + if (mode_ == UI_MODE_FACTORY_TEST) { + size_t counter = (system_clock.milliseconds() >> 8) % 3; + for (size_t i = 0; i < kNumChannels; ++i) { + if (slider_led_counter_[i] == 0) { + leds_.set(LED_GROUP_UI + i, palette_[counter]); + leds_.set(LED_GROUP_SLIDER + i, + counter == 0 ? LED_COLOR_GREEN : LED_COLOR_OFF); + } else if (slider_led_counter_[i] == 1) { + leds_.set(LED_GROUP_UI + i, LED_COLOR_GREEN); + leds_.set(LED_GROUP_SLIDER + i, LED_COLOR_OFF); + } else { + leds_.set(LED_GROUP_UI + i, LED_COLOR_GREEN); + leds_.set(LED_GROUP_SLIDER + i, LED_COLOR_GREEN); + } + } + } else if (chain_state_->discovering_neighbors()) { + size_t counter = system_clock.milliseconds() >> 5; + size_t n = chain_state_->size() * kNumChannels; + counter = counter % (2 * n - 2); + if (counter >= n) { + counter = 2 * n - 2 - counter; + } + if (counter >= chain_state_->index() * kNumChannels) { + counter -= chain_state_->index() * kNumChannels; + if (counter < kNumChannels) { + leds_.set(LED_GROUP_UI + counter, LED_COLOR_YELLOW); + leds_.set(LED_GROUP_SLIDER + counter, LED_COLOR_GREEN); + } + } + } else { + uint8_t pwm = system_clock.milliseconds() & 0xf; + uint8_t fade_patterns[4] = { + 0xf, // NONE + FadePattern(4, 0), // START + FadePattern(4, 0x0f), // END + FadePattern(4, 0x08), // SELF + }; + for (size_t i = 0; i < kNumChannels; ++i) { + uint8_t configuration = settings_->state().segment_configuration[i]; + uint8_t type = configuration & 0x3; + int brightness = fade_patterns[chain_state_->ouroboros() + ? (configuration & 0x4 ? 3 : 0) + : chain_state_->loop_status(i)]; + LedColor color = palette_[type]; + if (settings_->state().color_blind == 1) { + if (type == 0) { + color = LED_COLOR_GREEN; + uint8_t modulation = FadePattern(6, 13 - (2 * i)) >> 1; + brightness = brightness * (7 + modulation) >> 4; + } else if (type == 1) { + color = LED_COLOR_YELLOW; + brightness = brightness >= 0x8 ? 0xf : 0; + } else if (type == 2) { + color = LED_COLOR_RED; + brightness = brightness >= 0xc ? 0x1 : 0; + } + } + leds_.set( + LED_GROUP_UI + i, + (brightness >= pwm && brightness != 0) ? color : LED_COLOR_OFF); + leds_.set( + LED_GROUP_SLIDER + i, + slider_led_counter_[i] ? LED_COLOR_GREEN : LED_COLOR_OFF); + if (slider_led_counter_[i]) { + --slider_led_counter_[i]; + } + } + } + leds_.Write(); +} + +} // namespace stages diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stages/ui.h b/plugins/community/repos/AudibleInstruments/eurorack/stages/ui.h new file mode 100644 index 00000000..855b3e27 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stages/ui.h @@ -0,0 +1,96 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// User interface. + +#ifndef STAGES_UI_H_ +#define STAGES_UI_H_ + +#include "stmlib/stmlib.h" + +#include "stmlib/ui/event_queue.h" + +#include "stages/drivers/leds.h" +#include "stages/drivers/switches.h" + +#include "stages/settings.h" + +namespace stages { + +enum UiMode { + UI_MODE_NORMAL, + UI_MODE_FACTORY_TEST +}; + +class ChainState; + +class Ui { + public: + Ui() { } + ~Ui() { } + + void Init(Settings* settings, ChainState* chain_state); + void Poll(); + void DoEvents(); + + void set_slider_led(int i, bool value, int duration) { + if (value) { + slider_led_counter_[i] = duration; + } + } + + inline void set_factory_test(bool factory_test) { + mode_ = factory_test ? UI_MODE_FACTORY_TEST : UI_MODE_NORMAL; + } + + inline const Switches& switches() const { return switches_; } + + private: + void OnSwitchPressed(const stmlib::Event& e); + void OnSwitchReleased(const stmlib::Event& e); + + void UpdateLEDs(); + uint8_t FadePattern(uint8_t shift, uint8_t phase) const; + + Leds leds_; + Switches switches_; + + int slider_led_counter_[kNumLEDs]; + int press_time_[kNumSwitches]; + + Settings* settings_; + ChainState* chain_state_; + + UiMode mode_; + + static const LedColor palette_[4]; + + DISALLOW_COPY_AND_ASSIGN(Ui); +}; + +} // namespace stages + +#endif // STAGES_UI_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stmlib/dsp/filter.h b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/dsp/filter.h index 64d9e6bb..884aa64c 100644 --- a/plugins/community/repos/AudibleInstruments/eurorack/stmlib/dsp/filter.h +++ b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/dsp/filter.h @@ -33,7 +33,7 @@ #include "stmlib/stmlib.h" #include -#include +#include namespace stmlib { @@ -156,6 +156,14 @@ class OnePole { } } + template + inline void Process(float* in_out, size_t size) { + while (size--) { + *in_out = Process(*in_out); + ++in_out; + } + } + private: float g_; float gi_; @@ -389,6 +397,31 @@ class Svf { state_2_ = state_2; } + inline void ProcessMultimodeLPtoHP( + const float* in, + float* out, + size_t size, + float mode) { + float hp, bp, lp; + float state_1 = state_1_; + float state_2 = state_2_; + float hp_gain = std::min(-mode * 2.0f + 1.0f, 0.0f); + float bp_gain = 1.0f - 2.0f * fabsf(mode - 0.5f); + float lp_gain = std::max(1.0f - mode * 2.0f, 0.0f); + while (size--) { + hp = (*in - r_ * state_1 - g_ * state_1 - state_2) * h_; + bp = g_ * hp + state_1; + state_1 = g_ * hp + bp; + lp = g_ * bp + state_2; + state_2 = g_ * bp + lp; + *out = hp_gain * hp + bp_gain * bp + lp_gain * lp; + ++in; + ++out; + } + state_1_ = state_1; + state_2_ = state_2; + } + template inline void Process( const float* in, float* out_1, float* out_2, size_t size, diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stmlib/dsp/sample_rate_converter.h b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/dsp/sample_rate_converter.h new file mode 100644 index 00000000..a9062a4c --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/dsp/sample_rate_converter.h @@ -0,0 +1,310 @@ +// Copyright 2015 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Sample rate converter. + +#ifndef STMLIB_DSP_SAMPLE_RATE_CONVERTER_H_ +#define STMLIB_DSP_SAMPLE_RATE_CONVERTER_H_ + +#include "stmlib/stmlib.h" + +#include + +namespace stmlib { + +enum SampleRateConversionDirection { + SRC_UP, + SRC_DOWN +}; + +template +struct SRC_FIR { }; + +template +struct FilterState { + public: + enum { + n = N + }; + inline void Push(float value) { + tail.Push(head); + head = value; + } + + template inline float Read() const { + return i == 0 ? head : tail.template Read(); + } + + inline void Load(const float* x_state) { + head = x_state[0]; + tail.Load(x_state + 1); + } + + inline void Save(float* x_state) { + x_state[0] = head; + tail.Save(x_state + 1); + } + + private: + float head; + FilterState tail; +}; + +template<> +class FilterState<1> { + public: + enum { + n = 1 + }; + inline void Push(float value) { + head = value; + } + + template inline float Read() const { + return head; + } + + inline void Load(const float* x_state) { + head = x_state[0]; + } + + inline void Save(float* x_state) { + x_state[0] = head; + } + private: + float head; +}; + +template +struct Accumulator { + enum { + h_index = mirror != 0 && h_offset + i * h_stride >= mirror / 2 ? + mirror - 1 - i * h_stride - h_offset : h_offset + i * h_stride + }; + + template + inline float operator()(const float* x, const IR& h) const { + Accumulator a; + return x[i * x_stride] * h.template Read() + a(x, h); + } + + template + inline float operator()(const FilterState& x, const IR& h) const { + Accumulator a; + return x.template Read() * h.template Read() + a(x, h); + } +}; + +template +struct Accumulator<0, x_stride, h_stride, mirror, i, h_offset> { + template + inline float operator()(const float* x, const IR& h) const { + return 0.0f; + } + + template + inline float operator()(const FilterState& x, const IR& h) const { + return 0.0f; + } +}; + +template +struct PolyphaseStage { + template + inline void operator()(float* &y, const T& x, const IR& h) const { + Accumulator a; + *y++ = a(x, h); + PolyphaseStage p; + p(y, x, h); + } +}; + +template +struct PolyphaseStage { + template + inline void operator()(float* &y, const T& x, const IR& h) const { } +}; + +template< + SampleRateConversionDirection direction, + int32_t ratio, + int32_t filter_size> +class SampleRateConverter { }; + +template +class SampleRateConverter { + public: + SampleRateConverter() { } + ~SampleRateConverter() { } + + inline void Init() { } + inline int32_t delay() const { return 0; } + inline void Process(const float* in, float* out, size_t input_size) { + std::copy(&in[0], &in[input_size], &out[0]); + } + private: + DISALLOW_COPY_AND_ASSIGN(SampleRateConverter); +}; + +template +class SampleRateConverter { + public: + SampleRateConverter() { } + ~SampleRateConverter() { } + + inline void Init() { } + inline int32_t delay() const { return 0; } + inline void Process(const float* in, float* out, size_t input_size) { + std::copy(&in[0], &in[input_size], &out[0]); + } + private: + DISALLOW_COPY_AND_ASSIGN(SampleRateConverter); +}; + +template +class SampleRateConverter { + private: + enum { + N = filter_size / ratio, + K = ratio + }; + + public: + SampleRateConverter() { } + ~SampleRateConverter() { } + + inline void Init() { + std::fill(&x_[0], &x_[N], 0); + }; + + inline int32_t delay() const { return filter_size / ratio / 2; } + + inline void Process(const float* in, float* out, size_t input_size) { + SRC_FIR ir; + FilterState x; + x.Load(x_); + while (input_size--) { + x.Push(*in++); + PolyphaseStage polyphase_stage; + polyphase_stage(out, x, ir); + } + x.Save(x_); + } + + private: + float x_[N]; + + DISALLOW_COPY_AND_ASSIGN(SampleRateConverter); +}; + +template +class SampleRateConverter { + private: + enum { + N = filter_size, + K = ratio + }; + + public: + SampleRateConverter() { } + ~SampleRateConverter() { } + + inline void Init() { + std::fill(&x_[0], &x_[2 * N], 0); + x_ptr_ = &x_[N - 1]; + }; + + inline int32_t delay() const { return filter_size / 2; } + + inline void Process(const float* in, float* out, size_t input_size) { + // When downsampling, the number of input samples must be a multiple + // of the downsampling ratio. + if ((input_size % ratio) != 0) { + return; + } + + SRC_FIR ir; + if (input_size >= 8 * filter_size) { + std::copy(&in[0], &in[N], &x_[N - 1]); + + // Generate the samples which require access to the history buffer. + for (int32_t i = 0; i < N; i += ratio) { + Accumulator accumulator; + *out++ = accumulator(&x_[N - 1 + i], ir); + in += ratio; + input_size -= ratio; + } + + // From now on, all the samples we need to access are located inside + // the input buffer passed as an argument, and since the filter + // is small, we can unroll the summation loop. + if ((input_size / ratio) & 1) { + while (input_size) { + Accumulator accumulator; + *out++ = accumulator(in, ir); + input_size -= ratio; + in += ratio; + } + } else { + while (input_size) { + Accumulator accumulator; + *out++ = accumulator(in, ir); + *out++ = accumulator(in + ratio, ir); + input_size -= 2 * ratio; + in += 2 * ratio; + } + } + + // Copy last input samples to history buffer. + std::copy(&in[-N + 1], &in[0], &x_[0]); + } else { + // Variant which uses a circular buffer to store history. + while (input_size) { + for (int32_t i = 0; i < ratio; ++i) { + x_ptr_[0] = x_ptr_[N] = *in++; + --x_ptr_; + if (x_ptr_ < x_) { + x_ptr_ += N; + } + } + input_size -= ratio; + + Accumulator accumulator; + *out++ = accumulator(&x_ptr_[1], ir); + } + } + } + + private: + float x_[2 * N]; + float* x_ptr_; + + DISALLOW_COPY_AND_ASSIGN(SampleRateConverter); +}; + +} // namespace stmlib + +#endif // STMLIB_DSP_SAMPLE_RATE_CONVERTER_H_ diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stmlib/linker_scripts/stm32f373x_flash.ld b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/linker_scripts/stm32f373x_flash.ld index f526a6cd..d4b2c9da 100644 --- a/plugins/community/repos/AudibleInstruments/eurorack/stmlib/linker_scripts/stm32f373x_flash.ld +++ b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/linker_scripts/stm32f373x_flash.ld @@ -43,6 +43,13 @@ SECTIONS *(.glue_7t) KEEP (*(.init)) KEEP (*(.fini)) + + . = ALIGN(4); + __init_array_start = .; + KEEP(*(.init_array)) /* C++ constructors */ + KEEP(*(.ctors)) /* and vtable init */ + __init_array_end = .; + . = ALIGN(16); _etext = .; _sidata = _etext; diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stmlib/linker_scripts/stm32f373x_flash_application_large.ld b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/linker_scripts/stm32f373x_flash_application_large.ld index e29dec10..610e1539 100644 --- a/plugins/community/repos/AudibleInstruments/eurorack/stmlib/linker_scripts/stm32f373x_flash_application_large.ld +++ b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/linker_scripts/stm32f373x_flash_application_large.ld @@ -43,6 +43,13 @@ SECTIONS *(.glue_7t) KEEP (*(.init)) KEEP (*(.fini)) + + . = ALIGN(4); + __init_array_start = .; + KEEP(*(.init_array)) /* C++ constructors */ + KEEP(*(.ctors)) /* and vtable init */ + __init_array_end = .; + . = ALIGN(16); _etext = .; _sidata = _etext; diff --git a/plugins/community/repos/AudibleInstruments/eurorack/stmlib/utils/gate_flags.h b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/utils/gate_flags.h new file mode 100644 index 00000000..c296f09b --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/eurorack/stmlib/utils/gate_flags.h @@ -0,0 +1,71 @@ +// Copyright 2017 Olivier Gillet. +// +// Author: Olivier Gillet (ol.gillet@gmail.com) +// +// 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. +// +// See http://creativecommons.org/licenses/MIT/ for more information. +// +// ----------------------------------------------------------------------------- +// +// Gate bits are pre-processed to tag edges. A typical gate sequence is: +// +// ------------ +// +// ---------- ---------- +// +// 00000000003111111111114000000000 +// ^ ^ ^ ^ +// | | | | +// | | | GATE_FLAG_FALLING +// | | | +// | | GATE_FLAG_HIGH +// | | +// | GATE_FLAG_HIGH | GATE_FLAG_RISING +// | +// GATE_FLAG_LOW + +#ifndef STMLIB_UTILS_GATE_FLAGS_H_ +#define STMLIB_UTILS_GATE_FLAGS_H_ + +#include "stmlib/stmlib.h" + +namespace stmlib { + +enum GateFlagsBits { + GATE_FLAG_LOW = 0, + GATE_FLAG_HIGH = 1, + GATE_FLAG_RISING = 2, + GATE_FLAG_FALLING = 4, +}; + +typedef uint8_t GateFlags; + +inline GateFlags ExtractGateFlags(GateFlags previous, bool current) { + previous &= GATE_FLAG_HIGH; + if (current) { + return previous ? GATE_FLAG_HIGH : (GATE_FLAG_RISING | GATE_FLAG_HIGH); + } else { + return previous ? GATE_FLAG_FALLING : GATE_FLAG_LOW; + } +} + +} // namespace stmlib + +#endif // STMLIB_UTILS_GATE_FLAGS_H_ diff --git a/plugins/community/repos/AudibleInstruments/make.objects b/plugins/community/repos/AudibleInstruments/make.objects index fc396a00..b32932ba 100644 --- a/plugins/community/repos/AudibleInstruments/make.objects +++ b/plugins/community/repos/AudibleInstruments/make.objects @@ -50,9 +50,50 @@ EURORACK_OBJ= \ eurorack/peaks/modulations/multistage_envelope.o \ eurorack/peaks/pulse_processor/pulse_shaper.o \ eurorack/peaks/pulse_processor/pulse_randomizer.o \ - eurorack/peaks/number_station/number_station.o + eurorack/peaks/number_station/number_station.o \ + eurorack/plaits/dsp/engine/additive_engine.o \ + eurorack/plaits/dsp/engine/bass_drum_engine.o \ + eurorack/plaits/dsp/engine/chord_engine.o \ + eurorack/plaits/dsp/engine/fm_engine.o \ + eurorack/plaits/dsp/engine/grain_engine.o \ + eurorack/plaits/dsp/engine/hi_hat_engine.o \ + eurorack/plaits/dsp/engine/modal_engine.o \ + eurorack/plaits/dsp/engine/noise_engine.o \ + eurorack/plaits/dsp/engine/particle_engine.o \ + eurorack/plaits/dsp/engine/snare_drum_engine.o \ + eurorack/plaits/dsp/engine/speech_engine.o \ + eurorack/plaits/dsp/engine/string_engine.o \ + eurorack/plaits/dsp/engine/swarm_engine.o \ + eurorack/plaits/dsp/engine/virtual_analog_engine.o \ + eurorack/plaits/dsp/engine/waveshaping_engine.o \ + eurorack/plaits/dsp/engine/wavetable_engine.o \ + eurorack/plaits/dsp/physical_modelling/modal_voice.o \ + eurorack/plaits/dsp/physical_modelling/resonator.o \ + eurorack/plaits/dsp/physical_modelling/string.o \ + eurorack/plaits/dsp/physical_modelling/string_voice.o \ + eurorack/plaits/dsp/speech/lpc_speech_synth.o \ + eurorack/plaits/dsp/speech/lpc_speech_synth_controller.o \ + eurorack/plaits/dsp/speech/lpc_speech_synth_phonemes.o \ + eurorack/plaits/dsp/speech/lpc_speech_synth_words.o \ + eurorack/plaits/dsp/speech/naive_speech_synth.o \ + eurorack/plaits/dsp/speech/sam_speech_synth.o \ + eurorack/plaits/dsp/voice.o \ + eurorack/plaits/resources.o \ + eurorack/stages/segment_generator.o \ + eurorack/stages/ramp_extractor.o \ + eurorack/stages/resources.o \ + eurorack/marbles/random/t_generator.o \ + eurorack/marbles/random/x_y_generator.o \ + eurorack/marbles/random/output_channel.o \ + eurorack/marbles/random/lag_processor.o \ + eurorack/marbles/random/quantizer.o \ + eurorack/marbles/ramp/ramp_extractor.o \ + eurorack/marbles/resources.o +REMOVED_OBJ= \ + eurorack/plaits/plaits.o + PLUGIN_OBJ= \ src/AudibleInstruments.o \ @@ -64,9 +105,12 @@ PLUGIN_OBJ= \ src/Frames.o \ src/Kinks.o \ src/Links.o \ + src/Marbles.o \ src/Peaks.o \ + src/Plaits.o \ src/Rings.o \ src/Shades.o \ + src/Stages.o \ src/Tides.o \ src/Veils.o \ src/Warps.o diff --git a/plugins/community/repos/AudibleInstruments/makefile.linux b/plugins/community/repos/AudibleInstruments/makefile.linux index 5e484c45..31c8e8f0 100644 --- a/plugins/community/repos/AudibleInstruments/makefile.linux +++ b/plugins/community/repos/AudibleInstruments/makefile.linux @@ -2,7 +2,7 @@ SLUG=AudibleInstruments include ../../../build_plugin_pre_linux.mk -EXTRAFLAGS+= -Ieurorack/ -DTEST -Ieurorack/stmlib/third_party/STM -Ieurorack/stmlib/third_party/STM/STM32F0xx_StdPeriph_Driver/inc/ +EXTRAFLAGS+= -Ieurorack/ -DTEST -Ieurorack/stmlib/third_party/STM -Ieurorack/stmlib/third_party/STM/STM32F0xx_StdPeriph_Driver/inc/ -Ieurorack/stmlib/third_party/STM/STM32F10x_StdPeriph_Driver/inc/ -Ieurorack/stmlib/third_party/STM/STM32F37x_StdPeriph_Driver/inc/ -Ieurorack/stmlib/third_party/STM/CMSIS/CM3_f37x/ include make.objects diff --git a/plugins/community/repos/AudibleInstruments/makefile.msvc b/plugins/community/repos/AudibleInstruments/makefile.msvc index 9d5653c2..abb3c634 100644 --- a/plugins/community/repos/AudibleInstruments/makefile.msvc +++ b/plugins/community/repos/AudibleInstruments/makefile.msvc @@ -2,7 +2,7 @@ SLUG=AudibleInstruments include ../../../build_plugin_pre_msvc.mk -EXTRAFLAGS+= -Ieurorack/ -DTEST -Ieurorack/stmlib/third_party/STM -Ieurorack/stmlib/third_party/STM/STM32F0xx_StdPeriph_Driver/inc/ +EXTRAFLAGS+= -Ieurorack/ -DTEST -Ieurorack/stmlib/third_party/STM -Ieurorack/stmlib/third_party/STM/STM32F0xx_StdPeriph_Driver/inc/ -Ieurorack/stmlib/third_party/STM/STM32F10x_StdPeriph_Driver/inc/ -Ieurorack/stmlib/third_party/STM/STM32F37x_StdPeriph_Driver/inc/ -Ieurorack/stmlib/third_party/STM/CMSIS/CM3_f37x/ include make.objects diff --git a/plugins/community/repos/AudibleInstruments/res/Marbles.svg b/plugins/community/repos/AudibleInstruments/res/Marbles.svg new file mode 100644 index 00000000..1d38f710 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/res/Marbles.svg @@ -0,0 +1,2474 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/AudibleInstruments/res/Plaits.svg b/plugins/community/repos/AudibleInstruments/res/Plaits.svg new file mode 100644 index 00000000..dabcb9d0 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/res/Plaits.svg @@ -0,0 +1,2968 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/AudibleInstruments/res/Stages.svg b/plugins/community/repos/AudibleInstruments/res/Stages.svg new file mode 100644 index 00000000..4518a1a2 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/res/Stages.svg @@ -0,0 +1,3043 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/AudibleInstruments/src/AudibleInstruments.cpp b/plugins/community/repos/AudibleInstruments/src/AudibleInstruments.cpp index 802a073c..9380678b 100644 --- a/plugins/community/repos/AudibleInstruments/src/AudibleInstruments.cpp +++ b/plugins/community/repos/AudibleInstruments/src/AudibleInstruments.cpp @@ -14,9 +14,13 @@ RACK_PLUGIN_MODEL_DECLARE(AudibleInstruments, Branches); RACK_PLUGIN_MODEL_DECLARE(AudibleInstruments, Blinds); RACK_PLUGIN_MODEL_DECLARE(AudibleInstruments, Veils); RACK_PLUGIN_MODEL_DECLARE(AudibleInstruments, Frames); +RACK_PLUGIN_MODEL_DECLARE(AudibleInstruments, Marbles); +RACK_PLUGIN_MODEL_DECLARE(AudibleInstruments, Plaits); +RACK_PLUGIN_MODEL_DECLARE(AudibleInstruments, Stages); RACK_PLUGIN_INIT(AudibleInstruments) { RACK_PLUGIN_INIT_ID(); + RACK_PLUGIN_INIT_VERSION("0.6.3"); RACK_PLUGIN_MODEL_ADD(AudibleInstruments, Braids); RACK_PLUGIN_MODEL_ADD(AudibleInstruments, Elements); @@ -32,4 +36,7 @@ RACK_PLUGIN_INIT(AudibleInstruments) { RACK_PLUGIN_MODEL_ADD(AudibleInstruments, Veils); RACK_PLUGIN_MODEL_ADD(AudibleInstruments, Frames); // RACK_PLUGIN_MODEL_ADD(AudibleInstruments, Peaks); + RACK_PLUGIN_MODEL_ADD(AudibleInstruments, Marbles); + RACK_PLUGIN_MODEL_ADD(AudibleInstruments, Plaits); + RACK_PLUGIN_MODEL_ADD(AudibleInstruments, Stages); } diff --git a/plugins/community/repos/AudibleInstruments/src/Braids.cpp b/plugins/community/repos/AudibleInstruments/src/Braids.cpp index 36dad7bf..6b2f3f1b 100644 --- a/plugins/community/repos/AudibleInstruments/src/Braids.cpp +++ b/plugins/community/repos/AudibleInstruments/src/Braids.cpp @@ -129,7 +129,7 @@ void Braids::step() { if (!settings.meta_modulation) pitchV += fm; if (lowCpu) - pitchV += log2f(96000.0 / engineGetSampleRate()); + pitchV += log2f(96000.f * engineGetSampleTime()); int32_t pitch = (pitchV * 12.0 + 60) * 128; pitch += jitter_source.Render(settings.vco_drift); pitch = clamp(pitch, 0, 16383); diff --git a/plugins/community/repos/AudibleInstruments/src/Branches.cpp b/plugins/community/repos/AudibleInstruments/src/Branches.cpp index 6136aae6..9effd17d 100644 --- a/plugins/community/repos/AudibleInstruments/src/Branches.cpp +++ b/plugins/community/repos/AudibleInstruments/src/Branches.cpp @@ -32,18 +32,40 @@ struct Branches : Module { NUM_LIGHTS }; - SchmittTrigger gateTrigger[2]; - SchmittTrigger modeTrigger[2]; - bool mode[2] = {}; - bool outcome[2] = {}; + SchmittTrigger gateTriggers[2]; + SchmittTrigger modeTriggers[2]; + bool modes[2] = {}; + bool outcomes[2] = {}; Branches() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} + + json_t *toJson() override { + json_t *rootJ = json_object(); + json_t *modesJ = json_array(); + for (int i = 0; i < 2; i++) { + json_array_insert_new(modesJ, i, json_boolean(modes[i])); + } + json_object_set_new(rootJ, "modes", modesJ); + return rootJ; + } + + void fromJson(json_t *rootJ) override { + json_t *modesJ = json_object_get(rootJ, "modes"); + if (modesJ) { + for (int i = 0; i < 2; i++) { + json_t *modeJ = json_array_get(modesJ, i); + if (modeJ) + modes[i] = json_boolean_value(modeJ); + } + } + } + void step() override; void onReset() override { for (int i = 0; i < 2; i++) { - mode[i] = false; - outcome[i] = false; + modes[i] = false; + outcomes[i] = false; } } }; @@ -53,27 +75,27 @@ void Branches::step() { float gate = 0.0; for (int i = 0; i < 2; i++) { // mode button - if (modeTrigger[i].process(params[MODE1_PARAM + i].value)) - mode[i] = !mode[i]; + if (modeTriggers[i].process(params[MODE1_PARAM + i].value)) + modes[i] = !modes[i]; if (inputs[IN1_INPUT + i].active) gate = inputs[IN1_INPUT + i].value; - if (gateTrigger[i].process(gate)) { + if (gateTriggers[i].process(gate)) { // trigger float r = randomUniform(); float threshold = clamp(params[THRESHOLD1_PARAM + i].value + inputs[P1_INPUT + i].value / 10.f, 0.f, 1.f); bool toss = (r < threshold); - if (!mode[i]) { - // direct mode - outcome[i] = toss; + if (!modes[i]) { + // direct modes + outcomes[i] = toss; } else { - // toggle mode - outcome[i] = (outcome[i] != toss); + // toggle modes + outcomes[i] = (outcomes[i] != toss); } - if (!outcome[i]) + if (!outcomes[i]) lights[STATE1_POS_LIGHT + 2*i].value = 1.0; else lights[STATE1_NEG_LIGHT + 2*i].value = 1.0; @@ -81,10 +103,10 @@ void Branches::step() { lights[STATE1_POS_LIGHT + 2*i].value *= 1.0 - engineGetSampleTime() * 15.0; lights[STATE1_NEG_LIGHT + 2*i].value *= 1.0 - engineGetSampleTime() * 15.0; - lights[MODE1_LIGHT + i].value = mode[i] ? 1.0 : 0.0; + lights[MODE1_LIGHT + i].value = modes[i] ? 1.0 : 0.0; - outputs[OUT1A_OUTPUT + i].value = outcome[i] ? 0.0 : gate; - outputs[OUT1B_OUTPUT + i].value = outcome[i] ? gate : 0.0; + outputs[OUT1A_OUTPUT + i].value = outcomes[i] ? 0.0 : gate; + outputs[OUT1B_OUTPUT + i].value = outcomes[i] ? gate : 0.0; } } @@ -122,10 +144,10 @@ struct BranchesWidget : ModuleWidget { Branches *branches; int channel; void onAction(EventAction &e) override { - branches->mode[channel] ^= 1; + branches->modes[channel] ^= 1; } void step() override { - rightText = branches->mode[channel] ? "Toggle" : "Latch"; + rightText = branches->modes[channel] ? "Toggle" : "Latch"; MenuItem::step(); } }; @@ -133,8 +155,8 @@ struct BranchesWidget : ModuleWidget { menu->addChild(construct()); menu->addChild(construct(&MenuLabel::text, "Channels")); - menu->addChild(construct(&MenuItem::text, "Channel 1 mode", &BranchesModeItem::branches, branches, &BranchesModeItem::channel, 0)); - menu->addChild(construct(&MenuItem::text, "Channel 2 mode", &BranchesModeItem::branches, branches, &BranchesModeItem::channel, 1)); + menu->addChild(construct(&MenuItem::text, "Channel 1 modes", &BranchesModeItem::branches, branches, &BranchesModeItem::channel, 0)); + menu->addChild(construct(&MenuItem::text, "Channel 2 modes", &BranchesModeItem::branches, branches, &BranchesModeItem::channel, 1)); } }; diff --git a/plugins/community/repos/AudibleInstruments/src/Marbles.cpp b/plugins/community/repos/AudibleInstruments/src/Marbles.cpp new file mode 100644 index 00000000..f2c8665f --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/src/Marbles.cpp @@ -0,0 +1,670 @@ +#include "AudibleInstruments.hpp" +#include "dsp/digital.hpp" +#include "marbles/random/random_generator.h" +#include "marbles/random/random_stream.h" +#include "marbles/random/t_generator.h" +#include "marbles/random/x_y_generator.h" +#include "marbles/note_filter.h" + + +static const int BLOCK_SIZE = 5; + + +static const marbles::Scale preset_scales[6] = { + // C major + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // C + { 0.0833f, 16 }, // C# + { 0.1667f, 96 }, // D + { 0.2500f, 24 }, // D# + { 0.3333f, 128 }, // E + { 0.4167f, 64 }, // F + { 0.5000f, 8 }, // F# + { 0.5833f, 192 }, // G + { 0.6667f, 16 }, // G# + { 0.7500f, 96 }, // A + { 0.8333f, 24 }, // A# + { 0.9167f, 128 }, // B + } + }, + + // C minor + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // C + { 0.0833f, 16 }, // C# + { 0.1667f, 96 }, // D + { 0.2500f, 128 }, // Eb + { 0.3333f, 8 }, // E + { 0.4167f, 64 }, // F + { 0.5000f, 4 }, // F# + { 0.5833f, 192 }, // G + { 0.6667f, 16 }, // G# + { 0.7500f, 96 }, // A + { 0.8333f, 128 }, // Bb + { 0.9167f, 16 }, // B + } + }, + + // Pentatonic + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // C + { 0.0833f, 4 }, // C# + { 0.1667f, 96 }, // D + { 0.2500f, 4 }, // Eb + { 0.3333f, 4 }, // E + { 0.4167f, 140 }, // F + { 0.5000f, 4 }, // F# + { 0.5833f, 192 }, // G + { 0.6667f, 4 }, // G# + { 0.7500f, 96 }, // A + { 0.8333f, 4 }, // Bb + { 0.9167f, 4 }, // B + } + }, + + // Pelog + { + 1.0f, + 7, + { + { 0.0000f, 255 }, // C + { 0.1275f, 128 }, // Db+ + { 0.2625f, 32 }, // Eb- + { 0.4600f, 8 }, // F#- + { 0.5883f, 192 }, // G + { 0.7067f, 64 }, // Ab + { 0.8817f, 16 }, // Bb+ + } + }, + + // Raag Bhairav That + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // ** Sa + { 0.0752f, 128 }, // ** Komal Re + { 0.1699f, 4 }, // Re + { 0.2630f, 4 }, // Komal Ga + { 0.3219f, 128 }, // ** Ga + { 0.4150f, 64 }, // ** Ma + { 0.4918f, 4 }, // Tivre Ma + { 0.5850f, 192 }, // ** Pa + { 0.6601f, 64 }, // ** Komal Dha + { 0.7549f, 4 }, // Dha + { 0.8479f, 4 }, // Komal Ni + { 0.9069f, 64 }, // ** Ni + } + }, + + // Raag Shri + { + 1.0f, + 12, + { + { 0.0000f, 255 }, // ** Sa + { 0.0752f, 4 }, // Komal Re + { 0.1699f, 128 }, // ** Re + { 0.2630f, 64 }, // ** Komal Ga + { 0.3219f, 4 }, // Ga + { 0.4150f, 128 }, // ** Ma + { 0.4918f, 4 }, // Tivre Ma + { 0.5850f, 192 }, // ** Pa + { 0.6601f, 4 }, // Komal Dha + { 0.7549f, 64 }, // ** Dha + { 0.8479f, 128 }, // ** Komal Ni + { 0.9069f, 4 }, // Ni + } + }, +}; + + +struct Marbles : Module { + enum ParamIds { + T_DEJA_VU_PARAM, + X_DEJA_VU_PARAM, + DEJA_VU_PARAM, + T_RATE_PARAM, + X_SPREAD_PARAM, + T_MODE_PARAM, + X_MODE_PARAM, + DEJA_VU_LENGTH_PARAM, + T_BIAS_PARAM, + X_BIAS_PARAM, + T_RANGE_PARAM, + X_RANGE_PARAM, + EXTERNAL_PARAM, + T_JITTER_PARAM, + X_STEPS_PARAM, + NUM_PARAMS + }; + enum InputIds { + T_BIAS_INPUT, + X_BIAS_INPUT, + T_CLOCK_INPUT, + T_RATE_INPUT, + T_JITTER_INPUT, + DEJA_VU_INPUT, + X_STEPS_INPUT, + X_SPREAD_INPUT, + X_CLOCK_INPUT, + NUM_INPUTS + }; + enum OutputIds { + T1_OUTPUT, + T2_OUTPUT, + T3_OUTPUT, + Y_OUTPUT, + X1_OUTPUT, + X2_OUTPUT, + X3_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds { + T_DEJA_VU_LIGHT, + X_DEJA_VU_LIGHT, + ENUMS(T_MODE_LIGHTS, 2), + ENUMS(X_MODE_LIGHTS, 2), + ENUMS(T_RANGE_LIGHTS, 2), + ENUMS(X_RANGE_LIGHTS, 2), + EXTERNAL_LIGHT, + T1_LIGHT, + T2_LIGHT, + T3_LIGHT, + Y_LIGHT, + X1_LIGHT, + X2_LIGHT, + X3_LIGHT, + NUM_LIGHTS + }; + + marbles::RandomGenerator random_generator; + marbles::RandomStream random_stream; + marbles::TGenerator t_generator; + marbles::XYGenerator xy_generator; + marbles::NoteFilter note_filter; + + // State + BooleanTrigger tDejaVuTrigger; + BooleanTrigger xDejaVuTrigger; + BooleanTrigger tModeTrigger; + BooleanTrigger xModeTrigger; + BooleanTrigger tRangeTrigger; + BooleanTrigger xRangeTrigger; + BooleanTrigger externalTrigger; + bool t_deja_vu; + bool x_deja_vu; + int t_mode; + int x_mode; + int t_range; + int x_range; + bool external; + int x_scale; + int y_divider_index; + int x_clock_source_internal; + + // Buffers + stmlib::GateFlags t_clocks[BLOCK_SIZE] = {}; + stmlib::GateFlags last_t_clock = 0; + stmlib::GateFlags xy_clocks[BLOCK_SIZE] = {}; + stmlib::GateFlags last_xy_clock = 0; + float ramp_master[BLOCK_SIZE] = {}; + float ramp_external[BLOCK_SIZE] = {}; + float ramp_slave[2][BLOCK_SIZE] = {}; + bool gates[BLOCK_SIZE * 2] = {}; + float voltages[BLOCK_SIZE * 4] = {}; + int blockIndex = 0; + + Marbles() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + random_generator.Init(1); + random_stream.Init(&random_generator); + note_filter.Init(); + onSampleRateChange(); + onReset(); + } + + void onReset() override { + t_deja_vu = false; + x_deja_vu = false; + t_mode = 0; + x_mode = 0; + t_range = 1; + x_range = 1; + external = false; + x_scale = 0; + y_divider_index = 8; + x_clock_source_internal = 0; + } + + void onRandomize() override { + t_mode = randomu32() % 3; + x_mode = randomu32() % 3; + t_range = randomu32() % 3; + x_range = randomu32() % 3; + } + + void onSampleRateChange() override { + float sampleRate = engineGetSampleRate(); + t_generator.Init(&random_stream, sampleRate); + xy_generator.Init(&random_stream, sampleRate); + + // Set scales + for (int i = 0; i < 6; i++) { + xy_generator.LoadScale(i, preset_scales[i]); + } + } + + json_t *toJson() override { + json_t *rootJ = json_object(); + + json_object_set_new(rootJ, "t_deja_vu", json_boolean(t_deja_vu)); + json_object_set_new(rootJ, "x_deja_vu", json_boolean(x_deja_vu)); + json_object_set_new(rootJ, "t_mode", json_integer(t_mode)); + json_object_set_new(rootJ, "x_mode", json_integer(x_mode)); + json_object_set_new(rootJ, "t_range", json_integer(t_range)); + json_object_set_new(rootJ, "x_range", json_integer(x_range)); + json_object_set_new(rootJ, "external", json_boolean(external)); + json_object_set_new(rootJ, "x_scale", json_integer(x_scale)); + json_object_set_new(rootJ, "y_divider_index", json_integer(y_divider_index)); + json_object_set_new(rootJ, "x_clock_source_internal", json_integer(x_clock_source_internal)); + + return rootJ; + } + + void fromJson(json_t *rootJ) override { + json_t *t_deja_vuJ = json_object_get(rootJ, "t_deja_vu"); + if (t_deja_vuJ) + t_deja_vu = json_boolean_value(t_deja_vuJ); + + json_t *x_deja_vuJ = json_object_get(rootJ, "x_deja_vu"); + if (x_deja_vuJ) + x_deja_vu = json_boolean_value(x_deja_vuJ); + + json_t *t_modeJ = json_object_get(rootJ, "t_mode"); + if (t_modeJ) + t_mode = json_integer_value(t_modeJ); + + json_t *x_modeJ = json_object_get(rootJ, "x_mode"); + if (x_modeJ) + x_mode = json_integer_value(x_modeJ); + + json_t *t_rangeJ = json_object_get(rootJ, "t_range"); + if (t_rangeJ) + t_range = json_integer_value(t_rangeJ); + + json_t *x_rangeJ = json_object_get(rootJ, "x_range"); + if (x_rangeJ) + x_range = json_integer_value(x_rangeJ); + + json_t *externalJ = json_object_get(rootJ, "external"); + if (externalJ) + external = json_boolean_value(externalJ); + + json_t *x_scaleJ = json_object_get(rootJ, "x_scale"); + if (x_scaleJ) + x_scale = json_integer_value(x_scaleJ); + + json_t *y_divider_indexJ = json_object_get(rootJ, "y_divider_index"); + if (y_divider_indexJ) + y_divider_index = json_integer_value(y_divider_indexJ); + + json_t *x_clock_source_internalJ = json_object_get(rootJ, "x_clock_source_internal"); + if (x_clock_source_internalJ) + x_clock_source_internal = json_integer_value(x_clock_source_internalJ); + } + + void step() override { + // Buttons + if (tDejaVuTrigger.process(params[T_DEJA_VU_PARAM].value <= 0.f)) { + t_deja_vu = !t_deja_vu; + } + if (xDejaVuTrigger.process(params[X_DEJA_VU_PARAM].value <= 0.f)) { + x_deja_vu = !x_deja_vu; + } + if (tModeTrigger.process(params[T_MODE_PARAM].value <= 0.f)) { + t_mode = (t_mode + 1) % 3; + } + if (xModeTrigger.process(params[X_MODE_PARAM].value <= 0.f)) { + x_mode = (x_mode + 1) % 3; + } + if (tRangeTrigger.process(params[T_RANGE_PARAM].value <= 0.f)) { + t_range = (t_range + 1) % 3; + } + if (xRangeTrigger.process(params[X_RANGE_PARAM].value <= 0.f)) { + x_range = (x_range + 1) % 3; + } + if (externalTrigger.process(params[EXTERNAL_PARAM].value <= 0.f)) { + external = !external; + } + + // Clocks + bool t_gate = (inputs[T_CLOCK_INPUT].value >= 1.7f); + last_t_clock = stmlib::ExtractGateFlags(last_t_clock, t_gate); + t_clocks[blockIndex] = last_t_clock; + + bool x_gate = (inputs[X_CLOCK_INPUT].value >= 1.7f); + last_xy_clock = stmlib::ExtractGateFlags(last_xy_clock, x_gate); + xy_clocks[blockIndex] = last_xy_clock; + + // Process block + if (++blockIndex >= BLOCK_SIZE) { + blockIndex = 0; + stepBlock(); + } + + // Lights and outputs + + lights[T_DEJA_VU_LIGHT].setBrightness(t_deja_vu); + lights[X_DEJA_VU_LIGHT].setBrightness(x_deja_vu); + + lights[T_MODE_LIGHTS + 0].setBrightness(t_mode == 0 || t_mode == 1); + lights[T_MODE_LIGHTS + 1].setBrightness(t_mode == 1 || t_mode == 2); + + lights[X_MODE_LIGHTS + 0].setBrightness(x_mode == 0 || x_mode == 1); + lights[X_MODE_LIGHTS + 1].setBrightness(x_mode == 1 || x_mode == 2); + + lights[T_RANGE_LIGHTS + 0].setBrightness(t_range == 0 || t_range == 1); + lights[T_RANGE_LIGHTS + 1].setBrightness(t_range == 1 || t_range == 2); + + lights[X_RANGE_LIGHTS + 0].setBrightness(x_range == 0 || x_range == 1); + lights[X_RANGE_LIGHTS + 1].setBrightness(x_range == 1 || x_range == 2); + + lights[EXTERNAL_LIGHT].setBrightness(external); + + outputs[T1_OUTPUT].value = gates[blockIndex*2 + 0] ? 10.f : 0.f; + lights[T1_LIGHT].setBrightnessSmooth(gates[blockIndex*2 + 0]); + outputs[T2_OUTPUT].value = (ramp_master[blockIndex] < 0.5f) ? 10.f : 0.f; + lights[T2_LIGHT].setBrightnessSmooth(ramp_master[blockIndex] < 0.5f); + outputs[T3_OUTPUT].value = gates[blockIndex*2 + 1] ? 10.f : 0.f; + lights[T3_LIGHT].setBrightnessSmooth(gates[blockIndex*2 + 1]); + + outputs[X1_OUTPUT].value = voltages[blockIndex*4 + 0]; + lights[X1_LIGHT].setBrightnessSmooth(voltages[blockIndex*4 + 0]); + outputs[X2_OUTPUT].value = voltages[blockIndex*4 + 1]; + lights[X2_LIGHT].setBrightnessSmooth(voltages[blockIndex*4 + 1]); + outputs[X3_OUTPUT].value = voltages[blockIndex*4 + 2]; + lights[X3_LIGHT].setBrightnessSmooth(voltages[blockIndex*4 + 2]); + outputs[Y_OUTPUT].value = voltages[blockIndex*4 + 3]; + lights[Y_LIGHT].setBrightnessSmooth(voltages[blockIndex*4 + 3]); + } + + void stepBlock() { + // Ramps + + marbles::Ramps ramps; + ramps.master = ramp_master; + ramps.external = ramp_external; + ramps.slave[0] = ramp_slave[0]; + ramps.slave[1] = ramp_slave[1]; + + float deja_vu = clamp(params[DEJA_VU_PARAM].value + inputs[DEJA_VU_INPUT].value / 5.f, 0.f, 1.f); + static const int loop_length[] = { + 1, 1, 1, 2, 2, + 2, 2, 2, 3, 3, + 3, 3, 4, 4, 4, + 4, 4, 5, 5, 6, + 6, 6, 7, 7, 8, + 8, 8, 10, 10, 12, + 12, 12, 14, 14, 16, + 16 + }; + float deja_vu_length_index = params[DEJA_VU_LENGTH_PARAM].value * (LENGTHOF(loop_length) - 1); + int deja_vu_length = loop_length[(int) roundf(deja_vu_length_index)]; + + // Set up TGenerator + + bool t_external_clock = inputs[T_CLOCK_INPUT].active; + + t_generator.set_model((marbles::TGeneratorModel) t_mode); + t_generator.set_range((marbles::TGeneratorRange) t_range); + float t_rate = 60.f * (params[T_RATE_PARAM].value + inputs[T_RATE_INPUT].value / 5.f); + t_generator.set_rate(t_rate); + float t_bias = clamp(params[T_BIAS_PARAM].value + inputs[T_BIAS_INPUT].value / 5.f, 0.f, 1.f); + t_generator.set_bias(t_bias); + float t_jitter = clamp(params[T_JITTER_PARAM].value + inputs[T_JITTER_INPUT].value / 5.f, 0.f, 1.f); + t_generator.set_jitter(t_jitter); + t_generator.set_deja_vu(t_deja_vu ? deja_vu : 0.f); + t_generator.set_length(deja_vu_length); + // TODO + t_generator.set_pulse_width_mean(0.f); + t_generator.set_pulse_width_std(0.f); + + t_generator.Process(t_external_clock, t_clocks, ramps, gates, BLOCK_SIZE); + + // Set up XYGenerator + + marbles::ClockSource x_clock_source = (marbles::ClockSource) x_clock_source_internal; + if (inputs[X_CLOCK_INPUT].active) + x_clock_source = marbles::CLOCK_SOURCE_EXTERNAL; + + marbles::GroupSettings x; + x.control_mode = (marbles::ControlMode) x_mode; + x.voltage_range = (marbles::VoltageRange) x_range; + // TODO Fix the scaling + float note_cv = 0.5f * (params[X_SPREAD_PARAM].value + inputs[X_SPREAD_INPUT].value / 5.f); + float u = note_filter.Process(0.5f * (note_cv + 1.f)); + x.register_mode = external; + x.register_value = u; + + float x_spread = clamp(params[X_SPREAD_PARAM].value + inputs[X_SPREAD_INPUT].value / 5.f, 0.f, 1.f); + x.spread = x_spread; + float x_bias = clamp(params[X_BIAS_PARAM].value + inputs[X_BIAS_INPUT].value / 5.f, 0.f, 1.f); + x.bias = x_bias; + float x_steps = clamp(params[X_STEPS_PARAM].value + inputs[X_STEPS_INPUT].value / 5.f, 0.f, 1.f); + x.steps = x_steps; + x.deja_vu = x_deja_vu ? deja_vu : 0.f; + x.length = deja_vu_length; + x.ratio.p = 1; + x.ratio.q = 1; + x.scale_index = x_scale; + + marbles::GroupSettings y; + y.control_mode = marbles::CONTROL_MODE_IDENTICAL; + // TODO + y.voltage_range = (marbles::VoltageRange) x_range; + y.register_mode = false; + y.register_value = 0.0f; + // TODO + y.spread = x_spread; + y.bias = x_bias; + y.steps = x_steps; + y.deja_vu = 0.0f; + y.length = 1; + static const marbles::Ratio y_divider_ratios[] = { + { 1, 64 }, + { 1, 48 }, + { 1, 32 }, + { 1, 24 }, + { 1, 16 }, + { 1, 12 }, + { 1, 8 }, + { 1, 6 }, + { 1, 4 }, + { 1, 3 }, + { 1, 2 }, + { 1, 1 }, + }; + y.ratio = y_divider_ratios[y_divider_index]; + y.scale_index = x_scale; + + xy_generator.Process(x_clock_source, x, y, xy_clocks, ramps, voltages, BLOCK_SIZE); + } +}; + + +template +struct CKD6Light : BASE { + CKD6Light() { + this->box.size = Vec(22, 22); + } +}; + + +struct MarblesWidget : ModuleWidget { + MarblesWidget(Marbles *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/Marbles.svg"))); + + addChild(createWidget(Vec(RACK_GRID_WIDTH, 0))); + addChild(createWidget(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(createWidget(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(createWidget(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + + addParam(createParamCentered(mm2px(Vec(16.545, 17.794)), module, Marbles::T_DEJA_VU_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(74.845, 17.794)), module, Marbles::X_DEJA_VU_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(45.695, 22.244)), module, Marbles::DEJA_VU_PARAM, 0.0, 1.0, 0.5)); + addParam(createParamCentered(mm2px(Vec(23.467, 35.264)), module, Marbles::T_RATE_PARAM, -1.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(67.945, 35.243)), module, Marbles::X_SPREAD_PARAM, 0.0, 1.0, 0.5)); + addParam(createParamCentered(mm2px(Vec(6.945, 38.794)), module, Marbles::T_MODE_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(84.445, 38.793)), module, Marbles::X_MODE_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(45.695, 51.144)), module, Marbles::DEJA_VU_LENGTH_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(9.545, 58.394)), module, Marbles::T_BIAS_PARAM, 0.0, 1.0, 0.5)); + addParam(createParamCentered(mm2px(Vec(81.844, 58.394)), module, Marbles::X_BIAS_PARAM, 0.0, 1.0, 0.5)); + addParam(createParamCentered(mm2px(Vec(26.644, 59.694)), module, Marbles::T_RANGE_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(64.744, 59.694)), module, Marbles::X_RANGE_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(45.694, 67.294)), module, Marbles::EXTERNAL_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(31.544, 73.694)), module, Marbles::T_JITTER_PARAM, 0.0, 1.0, 0.0)); + addParam(createParamCentered(mm2px(Vec(59.845, 73.694)), module, Marbles::X_STEPS_PARAM, 0.0, 1.0, 0.5)); + + addInput(createInputCentered(mm2px(Vec(9.545, 81.944)), module, Marbles::T_BIAS_INPUT)); + addInput(createInputCentered(mm2px(Vec(81.844, 81.944)), module, Marbles::X_BIAS_INPUT)); + addInput(createInputCentered(mm2px(Vec(9.545, 96.544)), module, Marbles::T_CLOCK_INPUT)); + addInput(createInputCentered(mm2px(Vec(21.595, 96.544)), module, Marbles::T_RATE_INPUT)); + addInput(createInputCentered(mm2px(Vec(33.644, 96.544)), module, Marbles::T_JITTER_INPUT)); + addInput(createInputCentered(mm2px(Vec(45.695, 96.544)), module, Marbles::DEJA_VU_INPUT)); + addInput(createInputCentered(mm2px(Vec(57.745, 96.544)), module, Marbles::X_STEPS_INPUT)); + addInput(createInputCentered(mm2px(Vec(69.795, 96.544)), module, Marbles::X_SPREAD_INPUT)); + addInput(createInputCentered(mm2px(Vec(81.844, 96.544)), module, Marbles::X_CLOCK_INPUT)); + + addOutput(createOutputCentered(mm2px(Vec(9.545, 111.144)), module, Marbles::T1_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(21.595, 111.144)), module, Marbles::T2_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(33.644, 111.144)), module, Marbles::T3_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(45.695, 111.144)), module, Marbles::Y_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(57.745, 111.144)), module, Marbles::X1_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(69.795, 111.144)), module, Marbles::X2_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(81.844, 111.144)), module, Marbles::X3_OUTPUT)); + + addChild(createLightCentered>(mm2px(Vec(16.545, 17.794)), module, Marbles::T_DEJA_VU_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(74.845, 17.794)), module, Marbles::X_DEJA_VU_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(6.944, 29.894)), module, Marbles::T_MODE_LIGHTS)); + addChild(createLightCentered>(mm2px(Vec(84.444, 29.894)), module, Marbles::X_MODE_LIGHTS)); + addChild(createLightCentered>(mm2px(Vec(26.644, 53.994)), module, Marbles::T_RANGE_LIGHTS)); + addChild(createLightCentered>(mm2px(Vec(64.744, 53.994)), module, Marbles::X_RANGE_LIGHTS)); + addChild(createLightCentered>(mm2px(Vec(45.695, 76.194)), module, Marbles::EXTERNAL_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(6.044, 104.794)), module, Marbles::T1_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(18.094, 104.794)), module, Marbles::T2_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(30.145, 104.794)), module, Marbles::T3_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(42.194, 104.794)), module, Marbles::Y_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(54.244, 104.794)), module, Marbles::X1_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(66.294, 104.794)), module, Marbles::X2_LIGHT)); + addChild(createLightCentered>(mm2px(Vec(78.344, 104.794)), module, Marbles::X3_LIGHT)); + } + + void appendContextMenu(Menu *menu) override { + Marbles *module = dynamic_cast(this->module); + + struct ScaleItem : MenuItem { + Marbles *module; + int scale; + void onAction(EventAction &e) override { + module->x_scale = scale; + } + }; + + menu->addChild(MenuEntry::create()); + menu->addChild(MenuLabel::create("Scales")); + const std::string scaleLabels[] = { + "Major", + "Minor", + "Pentatonic", + "Pelog", + "Raag Bhairav That", + "Raag Shri", + }; + for (int i = 0; i < (int) LENGTHOF(scaleLabels); i++) { + ScaleItem *item = MenuItem::create(scaleLabels[i], CHECKMARK(module->x_scale == i)); + item->module = module; + item->scale = i; + menu->addChild(item); + } + + struct XClockSourceInternal : MenuItem { + Marbles *module; + int source; + void onAction(EventAction &e) override { + module->x_clock_source_internal = source; + } + }; + + menu->addChild(MenuEntry::create()); + menu->addChild(MenuLabel::create("Internal X clock source")); + const std::string sourceLabels[] = { + "T₠→ Xâ‚, Tâ‚‚ → Xâ‚‚, T₃ → X₃", + "T₠→ Xâ‚, Xâ‚‚, X₃", + "Tâ‚‚ → Xâ‚, Xâ‚‚, X₃", + "T₃ → Xâ‚, Xâ‚‚, X₃", + }; + for (int i = 0; i < (int) LENGTHOF(sourceLabels); i++) { + XClockSourceInternal *item = MenuItem::create(sourceLabels[i], CHECKMARK(module->x_clock_source_internal == i)); + item->module = module; + item->source = i; + menu->addChild(item); + } + + struct YDividerIndexItem : MenuItem { + Marbles *module; + int index; + void onAction(EventAction &e) override { + module->y_divider_index = index; + } + }; + + struct YDividerItem : MenuItem { + Marbles *module; + Menu *createChildMenu() override { + Menu *menu = new Menu(); + const std::string yDividerRatioLabels[] = { + "1/64", + "1/48", + "1/32", + "1/24", + "1/16", + "1/12", + "1/8", + "1/6", + "1/4", + "1/3", + "1/2", + "1", + }; + for (int i = 0; i < (int) LENGTHOF(yDividerRatioLabels); i++) { + YDividerIndexItem *item = MenuItem::create(yDividerRatioLabels[i], CHECKMARK(module->y_divider_index == i)); + item->module = module; + item->index = i; + menu->addChild(item); + } + return menu; + } + }; + + menu->addChild(MenuEntry::create()); + YDividerItem *yDividerItem = MenuItem::create("Y divider ratio"); + yDividerItem->module = module; + menu->addChild(yDividerItem); + } +}; + + +RACK_PLUGIN_MODEL_INIT(AudibleInstruments, Marbles) { + Model *modelMarbles = createModel("Audible Instruments", "Marbles", "Random Sampler"); + return modelMarbles; +} + diff --git a/plugins/community/repos/AudibleInstruments/src/Plaits.cpp b/plugins/community/repos/AudibleInstruments/src/Plaits.cpp new file mode 100644 index 00000000..1537bdc8 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/src/Plaits.cpp @@ -0,0 +1,323 @@ +#include "AudibleInstruments.hpp" +#include "dsp/samplerate.hpp" +#include "dsp/ringbuffer.hpp" +#include "dsp/functions.hpp" +#include "dsp/digital.hpp" +#include "plaits/dsp/voice.h" + + +struct Plaits : Module { + enum ParamIds { + MODEL1_PARAM, + MODEL2_PARAM, + FREQ_PARAM, + HARMONICS_PARAM, + TIMBRE_PARAM, + MORPH_PARAM, + TIMBRE_CV_PARAM, + FREQ_CV_PARAM, + MORPH_CV_PARAM, + NUM_PARAMS + }; + enum InputIds { + ENGINE_INPUT, + TIMBRE_INPUT, + FREQ_INPUT, + MORPH_INPUT, + HARMONICS_INPUT, + TRIGGER_INPUT, + LEVEL_INPUT, + NOTE_INPUT, + NUM_INPUTS + }; + enum OutputIds { + OUT_OUTPUT, + AUX_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds { + ENUMS(MODEL_LIGHT, 8 * 2), + NUM_LIGHTS + }; + + plaits::Voice voice; + plaits::Patch patch; + plaits::Modulations modulations; + char shared_buffer[16384]; + float triPhase = 0.f; + + SampleRateConverter<2> outputSrc; + DoubleRingBuffer, 256> outputBuffer; + bool lowCpu = false; + bool lpg = false; + + SchmittTrigger model1Trigger; + SchmittTrigger model2Trigger; + + Plaits() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + memset(shared_buffer, 0, sizeof(shared_buffer)); + stmlib::BufferAllocator allocator(shared_buffer, sizeof(shared_buffer)); + voice.Init(&allocator); + + memset(&patch, 0, sizeof(patch)); + memset(&modulations, 0, sizeof(modulations)); + onReset(); + } + + void onReset() override { + patch.engine = 0; + patch.lpg_colour = 0.5f; + patch.decay = 0.5f; + } + + void onRandomize() override { + patch.engine = randomu32() % 16; + } + + json_t *toJson() override { + json_t *rootJ = json_object(); + + json_object_set_new(rootJ, "lowCpu", json_boolean(lowCpu)); + json_object_set_new(rootJ, "model", json_integer(patch.engine)); + json_object_set_new(rootJ, "lpgColor", json_real(patch.lpg_colour)); + json_object_set_new(rootJ, "decay", json_real(patch.decay)); + + return rootJ; + } + + void fromJson(json_t *rootJ) override { + json_t *lowCpuJ = json_object_get(rootJ, "lowCpu"); + if (lowCpuJ) + lowCpu = json_boolean_value(lowCpuJ); + + json_t *modelJ = json_object_get(rootJ, "model"); + if (modelJ) + patch.engine = json_integer_value(modelJ); + + json_t *lpgColorJ = json_object_get(rootJ, "lpgColor"); + if (lpgColorJ) + patch.lpg_colour = json_number_value(lpgColorJ); + + json_t *decayJ = json_object_get(rootJ, "decay"); + if (decayJ) + patch.decay = json_number_value(decayJ); + } + + void step() override { + if (outputBuffer.empty()) { + const int blockSize = 12; + + // Model buttons + if (model1Trigger.process(params[MODEL1_PARAM].value)) { + if (patch.engine >= 8) { + patch.engine -= 8; + } + else { + patch.engine = (patch.engine + 1) % 8; + } + } + if (model2Trigger.process(params[MODEL2_PARAM].value)) { + if (patch.engine < 8) { + patch.engine += 8; + } + else { + patch.engine = (patch.engine + 1) % 8 + 8; + } + } + + // Model lights + int activeEngine = voice.active_engine(); + triPhase += 2.f * engineGetSampleTime() * blockSize; + if (triPhase >= 1.f) + triPhase -= 1.f; + float tri = (triPhase < 0.5f) ? triPhase * 2.f : (1.f - triPhase) * 2.f; + + for (int i = 0; i < 8; i++) { + lights[MODEL_LIGHT + 2*i + 0].setBrightness((activeEngine == i) ? 1.f : (patch.engine == i) ? tri : 0.f); + lights[MODEL_LIGHT + 2*i + 1].setBrightness((activeEngine == i + 8) ? 1.f : (patch.engine == i + 8) ? tri : 0.f); + } + + // Calculate pitch for lowCpu mode if needed + float pitch = params[FREQ_PARAM].value; + if (lowCpu) + pitch += log2f(48000.f * engineGetSampleTime()); + // Update patch + patch.note = 60.f + pitch * 12.f; + patch.harmonics = params[HARMONICS_PARAM].value; + if (!lpg) { + patch.timbre = params[TIMBRE_PARAM].value; + patch.morph = params[MORPH_PARAM].value; + } + else { + patch.lpg_colour = params[TIMBRE_PARAM].value; + patch.decay = params[MORPH_PARAM].value; + } + patch.frequency_modulation_amount = params[FREQ_CV_PARAM].value; + patch.timbre_modulation_amount = params[TIMBRE_CV_PARAM].value; + patch.morph_modulation_amount = params[MORPH_CV_PARAM].value; + + // Update modulations + modulations.engine = inputs[ENGINE_INPUT].value / 5.f; + modulations.note = inputs[NOTE_INPUT].value * 12.f; + modulations.frequency = inputs[FREQ_INPUT].value * 6.f; + modulations.harmonics = inputs[HARMONICS_INPUT].value / 5.f; + modulations.timbre = inputs[TIMBRE_INPUT].value / 8.f; + modulations.morph = inputs[MORPH_INPUT].value / 8.f; + // Triggers at around 0.7 V + modulations.trigger = inputs[TRIGGER_INPUT].value / 3.f; + modulations.level = inputs[LEVEL_INPUT].value / 8.f; + + modulations.frequency_patched = inputs[FREQ_INPUT].active; + modulations.timbre_patched = inputs[TIMBRE_INPUT].active; + modulations.morph_patched = inputs[MORPH_INPUT].active; + modulations.trigger_patched = inputs[TRIGGER_INPUT].active; + modulations.level_patched = inputs[LEVEL_INPUT].active; + + // Render frames + plaits::Voice::Frame output[blockSize]; + voice.Render(patch, modulations, output, blockSize); + + // Convert output to frames + Frame<2> outputFrames[blockSize]; + for (int i = 0; i < blockSize; i++) { + outputFrames[i].samples[0] = output[i].out / 32768.f; + outputFrames[i].samples[1] = output[i].aux / 32768.f; + } + + // Convert output + if (lowCpu) { + int len = min(outputBuffer.capacity(), blockSize); + memcpy(outputBuffer.endData(), outputFrames, len * sizeof(Frame<2>)); + outputBuffer.endIncr(len); + } + else { + outputSrc.setRates(48000, engineGetSampleRate()); + int inLen = blockSize; + int outLen = outputBuffer.capacity(); + outputSrc.process(outputFrames, &inLen, outputBuffer.endData(), &outLen); + outputBuffer.endIncr(outLen); + } + } + + // Set output + if (!outputBuffer.empty()) { + Frame<2> outputFrame = outputBuffer.shift(); + // Inverting op-amp on outputs + outputs[OUT_OUTPUT].value = -outputFrame.samples[0] * 5.f; + outputs[AUX_OUTPUT].value = -outputFrame.samples[1] * 5.f; + } + } +}; + + +static const std::string modelLabels[16] = { + "Pair of classic waveforms", + "Waveshaping oscillator", + "Two operator FM", + "Granular formant oscillator", + "Harmonic oscillator", + "Wavetable oscillator", + "Chords", + "Vowel and speech synthesis", + "Granular cloud", + "Filtered noise", + "Particle noise", + "Inharmonic string modeling", + "Modal resonator", + "Analog bass drum", + "Analog snare drum", + "Analog hi-hat", +}; + + +struct PlaitsWidget : ModuleWidget { + PlaitsWidget(Plaits *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/Plaits.svg"))); + + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + + addParam(ParamWidget::create(mm2px(Vec(23.32685, 14.6539)), module, Plaits::MODEL1_PARAM, 0.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(32.22764, 14.6539)), module, Plaits::MODEL2_PARAM, 0.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(3.1577, 20.21088)), module, Plaits::FREQ_PARAM, -4.0, 4.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(39.3327, 20.21088)), module, Plaits::HARMONICS_PARAM, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(4.04171, 49.6562)), module, Plaits::TIMBRE_PARAM, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(42.71716, 49.6562)), module, Plaits::MORPH_PARAM, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(7.88712, 77.60705)), module, Plaits::TIMBRE_CV_PARAM, -1.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(27.2245, 77.60705)), module, Plaits::FREQ_CV_PARAM, -1.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(46.56189, 77.60705)), module, Plaits::MORPH_CV_PARAM, -1.0, 1.0, 0.0)); + + addInput(Port::create(mm2px(Vec(3.31381, 92.48067)), Port::INPUT, module, Plaits::ENGINE_INPUT)); + addInput(Port::create(mm2px(Vec(14.75983, 92.48067)), Port::INPUT, module, Plaits::TIMBRE_INPUT)); + addInput(Port::create(mm2px(Vec(26.20655, 92.48067)), Port::INPUT, module, Plaits::FREQ_INPUT)); + addInput(Port::create(mm2px(Vec(37.65257, 92.48067)), Port::INPUT, module, Plaits::MORPH_INPUT)); + addInput(Port::create(mm2px(Vec(49.0986, 92.48067)), Port::INPUT, module, Plaits::HARMONICS_INPUT)); + addInput(Port::create(mm2px(Vec(3.31381, 107.08103)), Port::INPUT, module, Plaits::TRIGGER_INPUT)); + addInput(Port::create(mm2px(Vec(14.75983, 107.08103)), Port::INPUT, module, Plaits::LEVEL_INPUT)); + addInput(Port::create(mm2px(Vec(26.20655, 107.08103)), Port::INPUT, module, Plaits::NOTE_INPUT)); + + addOutput(Port::create(mm2px(Vec(37.65257, 107.08103)), Port::OUTPUT, module, Plaits::OUT_OUTPUT)); + addOutput(Port::create(mm2px(Vec(49.0986, 107.08103)), Port::OUTPUT, module, Plaits::AUX_OUTPUT)); + + addChild(ModuleLightWidget::create>(mm2px(Vec(28.79498, 23.31649)), module, Plaits::MODEL_LIGHT + 0 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(28.79498, 28.71704)), module, Plaits::MODEL_LIGHT + 1 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(28.79498, 34.1162)), module, Plaits::MODEL_LIGHT + 2 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(28.79498, 39.51675)), module, Plaits::MODEL_LIGHT + 3 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(28.79498, 44.91731)), module, Plaits::MODEL_LIGHT + 4 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(28.79498, 50.31785)), module, Plaits::MODEL_LIGHT + 5 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(28.79498, 55.71771)), module, Plaits::MODEL_LIGHT + 6 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(28.79498, 61.11827)), module, Plaits::MODEL_LIGHT + 7 * 2)); + } + + void appendContextMenu(Menu *menu) override { + Plaits *module = dynamic_cast(this->module); + + struct PlaitsLowCpuItem : MenuItem { + Plaits *module; + void onAction(EventAction &e) override { + module->lowCpu ^= true; + } + }; + + struct PlaitsLPGItem : MenuItem { + Plaits *module; + void onAction(EventAction &e) override { + module->lpg ^= true; + } + }; + + struct PlaitsModelItem : MenuItem { + Plaits *module; + int model; + void onAction(EventAction &e) override { + module->patch.engine = model; + } + }; + + menu->addChild(MenuEntry::create()); + PlaitsLowCpuItem *lowCpuItem = MenuItem::create("Low CPU", CHECKMARK(module->lowCpu)); + lowCpuItem->module = module; + menu->addChild(lowCpuItem); + PlaitsLPGItem *lpgItem = MenuItem::create("Edit LPG response/decay", CHECKMARK(module->lpg)); + lpgItem->module = module; + menu->addChild(lpgItem); + + menu->addChild(new MenuEntry()); + menu->addChild(MenuLabel::create("Models")); + for (int i = 0; i < 16; i++) { + PlaitsModelItem *modelItem = MenuItem::create(modelLabels[i], CHECKMARK(module->patch.engine == i)); + modelItem->module = module; + modelItem->model = i; + menu->addChild(modelItem); + } + } +}; + + +RACK_PLUGIN_MODEL_INIT(AudibleInstruments, Plaits) { + Model *modelPlaits = Model::create("Audible Instruments", "Plaits", "Macro Oscillator 2", OSCILLATOR_TAG, WAVESHAPER_TAG); + return modelPlaits; +} + diff --git a/plugins/community/repos/AudibleInstruments/src/Stages.cpp b/plugins/community/repos/AudibleInstruments/src/Stages.cpp new file mode 100644 index 00000000..007c7c22 --- /dev/null +++ b/plugins/community/repos/AudibleInstruments/src/Stages.cpp @@ -0,0 +1,443 @@ +#include "AudibleInstruments.hpp" +#include "dsp/digital.hpp" +#include "stages/segment_generator.h" +#include "stages/oscillator.h" + + +// Must match io_buffer.h +static const int NUM_CHANNELS = 6; +static const int BLOCK_SIZE = 8; + +struct LongPressButton { + enum Events { + NO_PRESS, + SHORT_PRESS, + LONG_PRESS + }; + + float pressedTime = 0.f; + BooleanTrigger trigger; + + Events step(Param ¶m) { + Events result = NO_PRESS; + + bool pressed = param.value > 0.f; + if (pressed && pressedTime >= 0.f) { + pressedTime += engineGetSampleTime(); + if (pressedTime >= 1.f) { + pressedTime = -1.f; + result = LONG_PRESS; + } + } + + // Check if released + if (trigger.process(!pressed)) { + if (pressedTime >= 0.f) { + result = SHORT_PRESS; + } + pressedTime = 0.f; + } + + return result; + } +}; + +struct GroupInfo { + int first_segment = 0; + int segment_count = 0; + bool gated = false; +}; + +struct GroupBuilder { + + GroupInfo groups[NUM_CHANNELS]; + int groupCount = 0; + + bool buildGroups(std::vector *gateInputs, size_t first, size_t count) { + bool any_gates = false; + + GroupInfo nextGroups[NUM_CHANNELS]; + + int currentGroup = 0; + for (int i = 0; i < NUM_CHANNELS; i++) { + bool gated = (*gateInputs)[first + i].active; + + if (!any_gates) { + if (!gated) { + // No gates at all yet, segments are all single segment groups + nextGroups[currentGroup].first_segment = i; + nextGroups[currentGroup].segment_count = 1; + nextGroups[currentGroup].gated = false; + currentGroup++; + } + else { + // first gate, current group is start of a segment group + any_gates = true; + nextGroups[currentGroup].first_segment = i; + nextGroups[currentGroup].segment_count = 1; + nextGroups[currentGroup].gated = true; + currentGroup++; + } + } + else { + if (!gated) { + // We've had a gate, this ungated segment is part of the previous group + nextGroups[currentGroup-1].segment_count++; + } + else { + // This gated input indicates the start of the next group + nextGroups[currentGroup].first_segment = i; + nextGroups[currentGroup].segment_count = 1; + nextGroups[currentGroup].gated = true; + currentGroup++; + } + } + } + + bool changed = false; + + if (currentGroup != groupCount) { + changed = true; + groupCount = currentGroup; + } + + for (int i = 0; i < groupCount; i++) { + if (nextGroups[i].segment_count != groups[i].segment_count || + nextGroups[i].gated != groups[i].gated || + nextGroups[i].first_segment != groups[i].first_segment) { + changed = true; + } + + groups[i].first_segment = nextGroups[i].first_segment; + groups[i].segment_count = nextGroups[i].segment_count; + groups[i].gated = nextGroups[i].gated; + } + + return changed; + } +}; + +struct Stages : Module { + enum ParamIds { + ENUMS(SHAPE_PARAMS, NUM_CHANNELS), + ENUMS(TYPE_PARAMS, NUM_CHANNELS), + ENUMS(LEVEL_PARAMS, NUM_CHANNELS), + NUM_PARAMS + }; + enum InputIds { + ENUMS(LEVEL_INPUTS, NUM_CHANNELS), + ENUMS(GATE_INPUTS, NUM_CHANNELS), + NUM_INPUTS + }; + enum OutputIds { + ENUMS(ENVELOPE_OUTPUTS, NUM_CHANNELS), + NUM_OUTPUTS + }; + enum LightIds { + ENUMS(TYPE_LIGHTS, NUM_CHANNELS * 2), + ENUMS(ENVELOPE_LIGHTS, NUM_CHANNELS), + NUM_LIGHTS + }; + + stages::segment::Configuration configurations[NUM_CHANNELS]; + bool configuration_changed[NUM_CHANNELS]; + stages::SegmentGenerator segment_generator[NUM_CHANNELS]; + float lightOscillatorPhase; + + // Buttons + LongPressButton typeButtons[NUM_CHANNELS]; + + // Buffers + float envelopeBuffer[NUM_CHANNELS][BLOCK_SIZE] = {}; + stmlib::GateFlags last_gate_flags[NUM_CHANNELS] = {}; + stmlib::GateFlags gate_flags[NUM_CHANNELS][BLOCK_SIZE] = {}; + int blockIndex = 0; + GroupBuilder groupBuilder; + + Stages() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + onReset(); + } + + void onReset() override { + for (size_t i = 0; i < NUM_CHANNELS; ++i) { + segment_generator[i].Init(); + + configurations[i].type = stages::segment::TYPE_RAMP; + configurations[i].loop = false; + configuration_changed[i] = true; + } + + lightOscillatorPhase = 0.f; + onSampleRateChange(); + } + + json_t *toJson() override { + json_t *rootJ = json_object(); + + json_t *configurationsJ = json_array(); + for (int i = 0; i < NUM_CHANNELS; i++) { + json_t *configurationJ = json_object(); + json_object_set_new(configurationJ, "type", json_integer(configurations[i].type)); + json_object_set_new(configurationJ, "loop", json_boolean(configurations[i].loop)); + json_array_insert_new(configurationsJ, i, configurationJ); + } + json_object_set_new(rootJ, "configurations", configurationsJ); + + return rootJ; + } + + void fromJson(json_t *rootJ) override { + json_t *configurationsJ = json_object_get(rootJ, "configurations"); + for (int i = 0; i < NUM_CHANNELS; i++) { + json_t *configurationJ = json_array_get(configurationsJ, i); + if (configurationJ) { + json_t *typeJ = json_object_get(configurationJ, "type"); + if (typeJ) + configurations[i].type = (stages::segment::Type) json_integer_value(typeJ); + + json_t *loopJ = json_object_get(configurationJ, "loop"); + if (loopJ) + configurations[i].loop = json_boolean_value(loopJ); + } + } + } + + void onSampleRateChange() override { + for (int i = 0; i < NUM_CHANNELS; i++) { + segment_generator[i].SetSampleRate(engineGetSampleRate()); + } + } + + void stepBlock() { + // Get parameters + float primaries[NUM_CHANNELS]; + float secondaries[NUM_CHANNELS]; + for (int i = 0; i < NUM_CHANNELS; i++) { + primaries[i] = clamp(params[LEVEL_PARAMS + i].value + inputs[LEVEL_INPUTS + i].value / 8.f, 0.f, 1.f); + secondaries[i] = params[SHAPE_PARAMS + i].value; + } + + // See if the group associations have changed since the last group + bool groups_changed = groupBuilder.buildGroups(&inputs, GATE_INPUTS, NUM_CHANNELS); + + // Process block + stages::SegmentGenerator::Output out[BLOCK_SIZE] = {}; + for (int i = 0; i < groupBuilder.groupCount; i++) { + GroupInfo &group = groupBuilder.groups[i]; + + // Check if the config needs applying to the segment generator for this group + bool apply_config = groups_changed; + int numberOfLoopsInGroup = 0; + for (int j = 0; j < group.segment_count; j++) { + int segment = group.first_segment + j; + numberOfLoopsInGroup += configurations[segment].loop ? 1 : 0; + apply_config |= configuration_changed[segment]; + configuration_changed[segment] = false; + } + + if (numberOfLoopsInGroup > 2) { + // Too many segments are looping, turn them all off + apply_config = true; + for (int j = 0; j < group.segment_count; j++) { + configurations[group.first_segment + j].loop = false; + } + } + + if (apply_config) { + segment_generator[i].Configure(group.gated, &configurations[group.first_segment], group.segment_count); + } + + // Set the segment parameters on the generator we're about to process + for (int j = 0; j < group.segment_count; j++) { + segment_generator[i].set_segment_parameters(j, primaries[group.first_segment + j], secondaries[group.first_segment + j]); + } + + segment_generator[i].Process(gate_flags[group.first_segment], out, BLOCK_SIZE); + + for (int j = 0; j < BLOCK_SIZE; j++) { + for (int k = 1; k < group.segment_count; k++) { + int segment = group.first_segment + k; + if (k == out[j].segment) { + // Set the phase output for the active segment + envelopeBuffer[segment][j] = 1.f - out[j].phase; + } + else { + // Non active segments have 0.f output + envelopeBuffer[segment][j] = 0.f; + } + } + // First group segment gets the actual output + envelopeBuffer[group.first_segment][j] = out[j].value; + } + } + } + + void toggleMode(int i) { + configurations[i].type = (stages::segment::Type) ((configurations[i].type + 1) % 3); + configuration_changed[i] = true; + } + + void toggleLoop(int segment) { + configuration_changed[segment] = true; + configurations[segment].loop = !configurations[segment].loop; + + // ensure that we don't have too many looping segments in the group + if (configurations[segment].loop) { + int segment_count = 0; + for (int i = 0; i < groupBuilder.groupCount; i++) { + segment_count += groupBuilder.groups[i].segment_count; + + if (segment_count > segment) { + GroupInfo &group = groupBuilder.groups[i]; + + // See how many loop items we have + int numberOfLoopsInGroup = 0; + + for (int j = 0; j < group.segment_count; j++) { + numberOfLoopsInGroup += configurations[group.first_segment + j].loop ? 1 : 0; + } + + // If we've got too many loop items, clear down to the one looping segment + if (numberOfLoopsInGroup > 2) { + for (int j = 0; j < group.segment_count; j++) { + configurations[group.first_segment + j].loop = (group.first_segment + j) == segment; + } + } + + break; + } + } + } + } + + void step() override { + // Oscillate flashing the type lights + lightOscillatorPhase += 0.5f * engineGetSampleTime(); + if (lightOscillatorPhase >= 1.0f) + lightOscillatorPhase -= 1.0f; + + // Buttons + for (int i = 0; i < NUM_CHANNELS; i++) { + switch (typeButtons[i].step(params[TYPE_PARAMS + i])) { + default: + case LongPressButton::NO_PRESS: break; + case LongPressButton::SHORT_PRESS: toggleMode(i); break; + case LongPressButton::LONG_PRESS: toggleLoop(i); break; + } + } + + // Input + for (int i = 0; i < NUM_CHANNELS; i++) { + bool gate = (inputs[GATE_INPUTS + i].value >= 1.7f); + last_gate_flags[i] = stmlib::ExtractGateFlags(last_gate_flags[i], gate); + gate_flags[i][blockIndex] = last_gate_flags[i]; + } + + // Process block + if (++blockIndex >= BLOCK_SIZE) { + blockIndex = 0; + stepBlock(); + } + + // Output + for (int i = 0; i < groupBuilder.groupCount; i++) { + GroupInfo &group = groupBuilder.groups[i]; + + int numberOfLoopsInGroup = 0; + for (int j = 0; j < group.segment_count; j++) { + int segment = group.first_segment + j; + + float envelope = envelopeBuffer[segment][blockIndex]; + outputs[ENVELOPE_OUTPUTS + segment].value = envelope * 8.f; + lights[ENVELOPE_LIGHTS + segment].setBrightnessSmooth(envelope); + + numberOfLoopsInGroup += configurations[segment].loop ? 1 : 0; + float flashlevel = 1.f; + + if (configurations[segment].loop && numberOfLoopsInGroup == 1) { + flashlevel = abs(sinf(2.0f * M_PI * lightOscillatorPhase)); + } + else if (configurations[segment].loop && numberOfLoopsInGroup > 1) { + float advancedPhase = lightOscillatorPhase + 0.25f; + if (advancedPhase > 1.0f) + advancedPhase -= 1.0f; + + flashlevel = abs(sinf(2.0f * M_PI * advancedPhase)); + } + + lights[TYPE_LIGHTS + segment * 2 + 0].setBrightness((configurations[segment].type == 0 || configurations[segment].type == 1) * flashlevel); + lights[TYPE_LIGHTS + segment * 2 + 1].setBrightness((configurations[segment].type == 1 || configurations[segment].type == 2) * flashlevel); + } + } + } +}; + + +struct StagesWidget : ModuleWidget { + StagesWidget(Stages *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/Stages.svg"))); + + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + + addParam(ParamWidget::create(mm2px(Vec(3.72965, 13.98158)), module, Stages::SHAPE_PARAMS + 0, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(15.17012, 13.98158)), module, Stages::SHAPE_PARAMS + 1, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(26.6099, 13.98158)), module, Stages::SHAPE_PARAMS + 2, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(38.07174, 13.98158)), module, Stages::SHAPE_PARAMS + 3, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(49.51152, 13.98158)), module, Stages::SHAPE_PARAMS + 4, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(60.95199, 13.98158)), module, Stages::SHAPE_PARAMS + 5, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(4.17259, 32.37248)), module, Stages::TYPE_PARAMS + 0, 0.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(15.61237, 32.37248)), module, Stages::TYPE_PARAMS + 1, 0.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(27.05284, 32.37248)), module, Stages::TYPE_PARAMS + 2, 0.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(38.51399, 32.37248)), module, Stages::TYPE_PARAMS + 3, 0.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(49.95446, 32.37248)), module, Stages::TYPE_PARAMS + 4, 0.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(61.39424, 32.37248)), module, Stages::TYPE_PARAMS + 5, 0.0, 1.0, 0.0)); + addParam(ParamWidget::create(mm2px(Vec(3.36193, 43.06508)), module, Stages::LEVEL_PARAMS + 0, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(14.81619, 43.06508)), module, Stages::LEVEL_PARAMS + 1, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(26.26975, 43.06508)), module, Stages::LEVEL_PARAMS + 2, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(37.70265, 43.06508)), module, Stages::LEVEL_PARAMS + 3, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(49.15759, 43.06508)), module, Stages::LEVEL_PARAMS + 4, 0.0, 1.0, 0.5)); + addParam(ParamWidget::create(mm2px(Vec(60.61184, 43.06508)), module, Stages::LEVEL_PARAMS + 5, 0.0, 1.0, 0.5)); + + addInput(Port::create(mm2px(Vec(2.70756, 77.75277)), Port::INPUT, module, Stages::LEVEL_INPUTS + 0)); + addInput(Port::create(mm2px(Vec(14.14734, 77.75277)), Port::INPUT, module, Stages::LEVEL_INPUTS + 1)); + addInput(Port::create(mm2px(Vec(25.58781, 77.75277)), Port::INPUT, module, Stages::LEVEL_INPUTS + 2)); + addInput(Port::create(mm2px(Vec(37.04896, 77.75277)), Port::INPUT, module, Stages::LEVEL_INPUTS + 3)); + addInput(Port::create(mm2px(Vec(48.48943, 77.75277)), Port::INPUT, module, Stages::LEVEL_INPUTS + 4)); + addInput(Port::create(mm2px(Vec(59.92921, 77.75277)), Port::INPUT, module, Stages::LEVEL_INPUTS + 5)); + addInput(Port::create(mm2px(Vec(2.70756, 92.35239)), Port::INPUT, module, Stages::GATE_INPUTS + 0)); + addInput(Port::create(mm2px(Vec(14.14734, 92.35239)), Port::INPUT, module, Stages::GATE_INPUTS + 1)); + addInput(Port::create(mm2px(Vec(25.58781, 92.35239)), Port::INPUT, module, Stages::GATE_INPUTS + 2)); + addInput(Port::create(mm2px(Vec(37.04896, 92.35239)), Port::INPUT, module, Stages::GATE_INPUTS + 3)); + addInput(Port::create(mm2px(Vec(48.48943, 92.35239)), Port::INPUT, module, Stages::GATE_INPUTS + 4)); + addInput(Port::create(mm2px(Vec(59.92921, 92.35239)), Port::INPUT, module, Stages::GATE_INPUTS + 5)); + + addOutput(Port::create(mm2px(Vec(2.70756, 106.95203)), Port::OUTPUT, module, Stages::ENVELOPE_OUTPUTS + 0)); + addOutput(Port::create(mm2px(Vec(14.14734, 106.95203)), Port::OUTPUT, module, Stages::ENVELOPE_OUTPUTS + 1)); + addOutput(Port::create(mm2px(Vec(25.58781, 106.95203)), Port::OUTPUT, module, Stages::ENVELOPE_OUTPUTS + 2)); + addOutput(Port::create(mm2px(Vec(37.04896, 106.95203)), Port::OUTPUT, module, Stages::ENVELOPE_OUTPUTS + 3)); + addOutput(Port::create(mm2px(Vec(48.48943, 106.95203)), Port::OUTPUT, module, Stages::ENVELOPE_OUTPUTS + 4)); + addOutput(Port::create(mm2px(Vec(59.92921, 106.95203)), Port::OUTPUT, module, Stages::ENVELOPE_OUTPUTS + 5)); + + addChild(ModuleLightWidget::create>(mm2px(Vec(5.27737, 26.74447)), module, Stages::TYPE_LIGHTS + 0 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(16.73784, 26.74447)), module, Stages::TYPE_LIGHTS + 1 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(28.1783, 26.74447)), module, Stages::TYPE_LIGHTS + 2 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(39.61877, 26.74447)), module, Stages::TYPE_LIGHTS + 3 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(51.07923, 26.74447)), module, Stages::TYPE_LIGHTS + 4 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(62.51971, 26.74447)), module, Stages::TYPE_LIGHTS + 5 * 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(2.29462, 103.19253)), module, Stages::ENVELOPE_LIGHTS + 0)); + addChild(ModuleLightWidget::create>(mm2px(Vec(13.73509, 103.19253)), module, Stages::ENVELOPE_LIGHTS + 1)); + addChild(ModuleLightWidget::create>(mm2px(Vec(25.17556, 103.19253)), module, Stages::ENVELOPE_LIGHTS + 2)); + addChild(ModuleLightWidget::create>(mm2px(Vec(36.63671, 103.19253)), module, Stages::ENVELOPE_LIGHTS + 3)); + addChild(ModuleLightWidget::create>(mm2px(Vec(48.07649, 103.19253)), module, Stages::ENVELOPE_LIGHTS + 4)); + addChild(ModuleLightWidget::create>(mm2px(Vec(59.51696, 103.19253)), module, Stages::ENVELOPE_LIGHTS + 5)); + } +}; + + +RACK_PLUGIN_MODEL_INIT(AudibleInstruments, Stages) { + Model *modelStages = Model::create("Audible Instruments", "Stages", "Segment Generator", FUNCTION_GENERATOR_TAG, ENVELOPE_GENERATOR_TAG); + return modelStages; +} diff --git a/plugins/community/repos/AudibleInstruments/src/Tides.cpp b/plugins/community/repos/AudibleInstruments/src/Tides.cpp index bfce99ad..794d7d26 100644 --- a/plugins/community/repos/AudibleInstruments/src/Tides.cpp +++ b/plugins/community/repos/AudibleInstruments/src/Tides.cpp @@ -145,7 +145,7 @@ void Tides::step() { // Sync // Slight deviation from spec here. // Instead of toggling sync by holding the range button, just enable it if the clock port is plugged in. - generator.set_sync(inputs[CLOCK_INPUT].active); + generator.set_sync(inputs[CLOCK_INPUT].active && !sheep); // Generator generator.Process(sheep); @@ -192,18 +192,6 @@ void Tides::step() { } -struct TidesSheepItem : MenuItem { - Tides *tides; - void onAction(EventAction &e) override { - tides->sheep ^= true; - } - void step() override { - rightText = (tides->sheep) ? "✔" : ""; - MenuItem::step(); - } -}; - - struct TidesWidget : ModuleWidget { SVGPanel *tidesPanel; SVGPanel *sheepPanel; @@ -279,11 +267,19 @@ struct TidesWidget : ModuleWidget { void appendContextMenu(Menu *menu) override { - Tides *tides = dynamic_cast(module); - assert(tides); - - menu->addChild(construct()); - menu->addChild(construct(&MenuItem::text, "Sheep", &TidesSheepItem::tides, tides)); + Tides *module = dynamic_cast(this->module); + + struct SheepItem : MenuItem { + Tides *module; + void onAction(EventAction &e) override { + module->sheep ^= true; + } + }; + + menu->addChild(MenuEntry::create()); + SheepItem *sheepItem = MenuItem::create("Sheep", CHECKMARK(module->sheep)); + sheepItem->module = module; + menu->addChild(sheepItem); } }; diff --git a/vst2_bin/CHANGELOG_VST.txt b/vst2_bin/CHANGELOG_VST.txt index 9b3f3086..b4564503 100644 --- a/vst2_bin/CHANGELOG_VST.txt +++ b/vst2_bin/CHANGELOG_VST.txt @@ -1,6 +1,7 @@ ** October ??th, 2018 - add Linux port +- update dBiz modules (fixes UI issues) - add module dBiz.FourSeq - add module dBiz.Divider - add module dBiz.DualFilter @@ -8,6 +9,9 @@ - add module dBiz.SuHa - add module dBiz.TROSC - add module dBiz.Util2 +o add module AudibleInstruments.Marbles +o add module AudibleInstruments.Plaits +o add module AudibleInstruments.Stages ** October 12th, 2018 diff --git a/vst2_bin/log.txt b/vst2_bin/log.txt index f236185c..d084a47e 100644 --- a/vst2_bin/log.txt +++ b/vst2_bin/log.txt @@ -1,155 +1,124 @@ -[0.000 info src/main.cpp:59] VeeSeeVST Rack 0.6.1 -[0.000 info src/main.cpp:62] Global directory: F:\git\VeeSeeVSTRack\vst2_bin\/ -[0.000 info src/main.cpp:63] Local directory: F:\git\VeeSeeVSTRack\vst2_bin\/ -[0.000 info src/plugin.cpp:696] vcvrack: Loaded static plugin 21kHz 0.6.1 -[0.000 info src/plugin.cpp:696] vcvrack: Loaded static plugin AmalgamatedHarmonics 0.6.1 -[0.000 info src/plugin.cpp:696] vcvrack: Loaded static plugin Alikins 0.6.1 -[0.000 info src/plugin.cpp:696] vcvrack: Loaded static plugin alto777_LFSR 0.6.1 -[0.000 info src/plugin.cpp:696] vcvrack: Loaded static plugin AS 0.6.9 -[0.000 info src/plugin.cpp:696] vcvrack: Loaded static plugin AudibleInstruments 0.6.1 -[0.000 info src/plugin.cpp:696] vcvrack: Loaded static plugin Autodafe 0.6.1 -[0.000 info src/plugin.cpp:696] vcvrack: Loaded static plugin BaconMusic 0.6.1 -[0.001 info src/plugin.cpp:696] vcvrack: Loaded static plugin Befaco 0.6.1 -[0.001 info src/plugin.cpp:696] vcvrack: Loaded static plugin Bidoo 0.6.1 -[0.001 info src/plugin.cpp:696] vcvrack: Loaded static plugin Bogaudio 0.6.7 -[0.001 info src/plugin.cpp:696] vcvrack: Loaded static plugin CastleRocktronics 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin cf 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin com-soundchasing-stochasm 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin computerscare 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin DHE-Modules 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin DrumKit 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin ESeries 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin FrankBussFormula 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin Fundamental 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin Geodesics 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin Gratrix 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin HetrickCV 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin huaba 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin ImpromptuModular 0.6.11 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin JE 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin JW-Modules 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin LindenbergResearch 0.6.2b -[0.002 info src/plugin.cpp:696] vcvrack: Loaded static plugin LOGinstruments 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin mental 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin ML_modules 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin moDllz 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin modular80 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin mscHack 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin NauModular 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin Nohmad 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin Ohmer 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin PG-Instruments 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin PvC 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin Qwelk 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin RJModules 0.6.1 -[0.003 info src/plugin.cpp:696] vcvrack: Loaded static plugin SerialRacker 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin SonusModular 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin Southpole 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin SubmarineFree 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin SynthKit 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin Template 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin TheXOR 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin trowaSoft 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin unless_modules 0.6.1 -[0.004 info src/plugin.cpp:696] vcvrack: Loaded static plugin Valley 0.6.1 -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/21kHz/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Alikins/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/alto777_LFSR/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/AmalgamatedHarmonics/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/AS/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/AudibleInstruments/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Autodafe/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/BaconMusic/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Befaco/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bidoo/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Bogaudio/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/BOKONTEPByteBeatMachine/plugin.dll.instr does not exist -[0.005 info src/plugin.cpp:157] Loaded plugin bsp 0.6.1 from F:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/CastleRocktronics/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/cf/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/com-soundchasing-stochasm/plugin.dll.instr does not exist -[0.005 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/computerscare/plugin.dll.instr does not exist -[0.006 info src/plugin.cpp:157] Loaded plugin dBiz 0.6.1 from F:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/DHE-Modules/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/DrumKit/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/ErraticInstruments/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/ESeries/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/FrankBussFormula/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/FrozenWasteland/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Fundamental/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Geodesics/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Gratrix/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/HetrickCV/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/huaba/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/ImpromptuModular/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/JE/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/JW-Modules/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Koralfx-Modules/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/LindenbergResearch/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/LOGinstruments/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/mental/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/ML_modules/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/moDllz/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/modular80/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/mscHack/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/mtsch-plugins/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/NauModular/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Nohmad/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Ohmer/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/PG-Instruments/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/PvC/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Qwelk/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/RJModules/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/SerialRacker/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/SonusModular/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Southpole/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Southpole-parasites/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/squinkylabs-plug1/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/SubmarineFree/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/SynthKit/plugin.dll.instr does not exist -[0.006 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template/plugin.dll.instr does not exist -[0.007 info src/plugin.cpp:157] Loaded plugin Template_shared 0.6.1 from F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr -[0.007 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/TheXOR/plugin.dll.instr does not exist -[0.007 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/trowaSoft/plugin.dll.instr does not exist -[0.007 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/unless_modules/plugin.dll.instr does not exist -[0.007 warn src/plugin.cpp:86] Plugin file F:\git\VeeSeeVSTRack\vst2_bin\/plugins/Valley/plugin.dll.instr does not exist -[0.007 info src/settings.cpp:436] Loading settings F:\git\VeeSeeVSTRack\vst2_bin\/settings.json -[0.258 info src/window.cpp:673] Loaded font F:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf -[0.258 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg -[0.258 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg -[0.258 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg -[0.259 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg -[0.259 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg -[0.259 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg -[0.259 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg -[0.259 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg -[0.259 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg -[0.259 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/idle_mode_icon_cc.svg -[0.259 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/icons/settings_icon_cc.svg -[0.259 info src/settings.cpp:436] Loading settings F:\git\VeeSeeVSTRack\vst2_bin\/settings.json -[0.260 info src/app/RackWidget.cpp:170] Saving patch to string -[5.314 info src/app/RackWidget.cpp:184] Loading patch C:\Users\bsp\Documents\t.vcv -[5.315 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg -[5.315 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg -[5.315 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg -[5.315 info src/window.cpp:673] Loaded font F:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf -[5.316 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg -[5.316 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg -[5.316 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg -[5.316 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg -[5.317 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg -[5.317 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg -[5.327 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\plugins/AudibleInstruments/res/Braids.svg -[5.327 info src/window.cpp:673] Loaded font F:\git\VeeSeeVSTRack\vst2_bin\plugins/AudibleInstruments/res/hdad-segment14-1.002/Segment14.ttf -[5.327 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan2SGray.svg -[5.328 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan2PSWhite.svg -[5.328 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan2PSGreen.svg -[5.328 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan2PSRed.svg -[5.329 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/VCAmp.svg -[5.329 info src/window.cpp:728] Loaded SVG F:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg +[0.000 info src/main.cpp:67] VeeSeeVST Rack 0.6.1 +[0.000 info src/main.cpp:70] Global directory: f:\git\VeeSeeVSTRack\vst2_bin\/ +[0.001 info src/main.cpp:71] Local directory: f:\git\VeeSeeVSTRack\vst2_bin\/ +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin 21kHz 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AmalgamatedHarmonics 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Alikins 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin alto777_LFSR 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AS 0.6.9 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AudibleInstruments 0.6.3 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Autodafe 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin BaconMusic 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Befaco 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Bidoo 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Bogaudio 0.6.7 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin CastleRocktronics 0.6.1 +[0.007 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin cf 0.6.1 +[0.007 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin com-soundchasing-stochasm 0.6.1 +[0.007 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin computerscare 0.6.1 +[0.008 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin DHE-Modules 0.6.1 +[0.008 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin DrumKit 0.6.1 +[0.009 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 +[0.009 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ESeries 0.6.1 +[0.009 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin FrankBussFormula 0.6.1 +[0.010 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 +[0.010 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Fundamental 0.6.1 +[0.010 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Geodesics 0.6.1 +[0.011 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Gratrix 0.6.1 +[0.011 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin HetrickCV 0.6.1 +[0.011 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin huaba 0.6.1 +[0.012 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ImpromptuModular 0.6.11 +[0.012 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin JE 0.6.1 +[0.013 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin JW-Modules 0.6.1 +[0.013 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 +[0.013 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin LindenbergResearch 0.6.2b +[0.014 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin LOGinstruments 0.6.1 +[0.015 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mental 0.6.1 +[0.015 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ML_modules 0.6.1 +[0.015 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin moDllz 0.6.1 +[0.015 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin modular80 0.6.1 +[0.016 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mscHack 0.6.1 +[0.016 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 +[0.016 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin NauModular 0.6.1 +[0.017 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Nohmad 0.6.1 +[0.017 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Ohmer 0.6.1 +[0.018 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin PG-Instruments 0.6.1 +[0.018 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin PvC 0.6.1 +[0.018 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Qwelk 0.6.1 +[0.019 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin RJModules 0.6.1 +[0.019 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SerialRacker 0.6.1 +[0.020 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SonusModular 0.6.1 +[0.020 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Southpole 0.6.1 +[0.020 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 +[0.021 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1 +[0.021 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SubmarineFree 0.6.1 +[0.021 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SynthKit 0.6.1 +[0.022 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Template 0.6.1 +[0.022 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin TheXOR 0.6.1 +[0.022 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin trowaSoft 0.6.1 +[0.023 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin unless_modules 0.6.1 +[0.023 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Valley 0.6.1 +[0.024 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr +[0.025 info src/plugin.cpp:160] Loaded plugin bsp 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr +[0.026 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr +[0.027 info src/plugin.cpp:160] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr +[0.028 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr +[0.029 info src/plugin.cpp:160] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr +[0.031 info src/settings.cpp:451] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json +[0.043 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf +[0.046 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg +[0.047 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg +[0.048 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg +[0.048 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg +[0.049 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg +[0.050 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg +[0.051 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg +[0.051 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg +[0.052 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg +[0.053 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/idle_mode_icon_cc.svg +[0.054 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/settings_icon_cc.svg +[0.054 info src/settings.cpp:451] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json +[0.069 info src/app/RackWidget.cpp:216] Loading patch from string +[0.073 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg +[0.074 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg +[0.075 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg +[0.075 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf +[0.079 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg +[0.083 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg +[0.083 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg +[0.084 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg +[0.085 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg +[0.085 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg +[0.086 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg +[0.087 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg +[0.088 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg +[0.088 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg +[0.091 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg +[0.092 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg +[0.095 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg +[0.095 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg +[0.096 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg +[0.097 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg +[0.098 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg +[0.107 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Panels/D_Inf.svg +[0.108 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzScrew.svg +[0.109 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzKnobSmall.svg +[0.109 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzButton_0.svg +[0.110 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzButton_1.svg +[0.111 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzPort.svg +[0.114 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Autodafe/res/Multiple18.svg +[0.115 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ3410.svg +[6.755 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AudibleInstruments/res/Plaits.svg +[6.755 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/TL1105_0.svg +[6.757 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/TL1105_1.svg +[6.758 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan3PSWhite.svg +[6.759 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan1PSWhite.svg +[6.760 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Trimpot.svg +[35.355 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AudibleInstruments/res/Stages.svg +[35.356 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/LEDSlider.svg +[35.357 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/LEDSliderGreenHandle.svg +[64.962 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AudibleInstruments/res/Marbles.svg +[64.963 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/CKD6_0.svg +[64.964 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/CKD6_1.svg +[64.966 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan2PSWhite.svg +[85.108 info src/app/RackWidget.cpp:178] Saving patch to string diff --git a/vst2_bin/plugins/AudibleInstruments/CHANGELOG.md b/vst2_bin/plugins/AudibleInstruments/CHANGELOG.md new file mode 100644 index 00000000..9501b795 --- /dev/null +++ b/vst2_bin/plugins/AudibleInstruments/CHANGELOG.md @@ -0,0 +1,12 @@ + +### 0.6.3 (2018-10-10) + +- Added Segment Generator + +### 0.6.2 (2018-10-09) + +- Added Random Sampler from Audible Instruments Preview + +### 0.6.1 (2018-09-12) + +- Added Macro Oscillator 2 from Audible Instruments Preview diff --git a/vst2_bin/plugins/AudibleInstruments/README.md b/vst2_bin/plugins/AudibleInstruments/README.md index 1bc7693e..c3f5a3bc 100644 --- a/vst2_bin/plugins/AudibleInstruments/README.md +++ b/vst2_bin/plugins/AudibleInstruments/README.md @@ -16,28 +16,20 @@ After checking out AudibleInstruments in the `plugins/` directory, get external ### Macro Oscillator Based on [Braids](https://mutable-instruments.net/modules/braids), [Manual](https://mutable-instruments.net/modules/braids/manual/) - -![Macro Oscillator](https://vcvrack.com/images/AudibleInstruments/macro%20oscillator.png) - Sync input doesn't work - More settings could be supported ### Modal Synthesizer Based on [Elements](https://mutable-instruments.net/modules/elements), [Manual](https://mutable-instruments.net/modules/elements/manual/) -![Modal Synthesizer](https://vcvrack.com/images/AudibleInstruments/modal%20synthesizer.png) - ### Tidal Modulator Based on [Tides](https://mutable-instruments.net/modules/tides), [Manual](https://mutable-instruments.net/modules/tides/manual/) -![Tidal Modulator](https://vcvrack.com/images/AudibleInstruments/tidal%20modulator.png) - ### Wavetable Oscillator Based on [Sheep](https://mutable-instruments.net/modules/tides/firmware/) (Tides alternative firmware) ### Texture Synthesizer Based on [Clouds](https://mutable-instruments.net/modules/clouds), [Manual](https://mutable-instruments.net/modules/clouds/manual/) - -![Texture Synthesizer](https://vcvrack.com/images/AudibleInstruments/texture%20synthesizer.png) - edit buttons and lights - freeze button - right-click context menus to replace menu diving @@ -45,46 +37,30 @@ Based on [Clouds](https://mutable-instruments.net/modules/clouds), [Manual](http ### Meta Modulator Based on [Warps](https://mutable-instruments.net/modules/warps), [Manual](https://mutable-instruments.net/modules/warps/manual/) -![Meta Modulator](https://vcvrack.com/images/AudibleInstruments/meta%20modulator.png) - ### Resonator Based on [Rings](https://mutable-instruments.net/modules/rings), [Manual](https://mutable-instruments.net/modules/rings/manual/) -![Resonator](https://vcvrack.com/images/AudibleInstruments/resonator.png) - ### Keyframer/Mixer Based on [Frames](https://mutable-instruments.net/modules/frames), [Manual](https://mutable-instruments.net/modules/frames/manual/) ### Multiples Based on [Links](https://mutable-instruments.net/modules/links), [Manual](https://mutable-instruments.net/modules/links/manual/) -![Multiples](https://vcvrack.com/images/AudibleInstruments/multiples.png) - ### Utilities Based on [Kinks](https://mutable-instruments.net/modules/kinks), [Manual](https://mutable-instruments.net/modules/kinks/manual/) -![Utilities](https://vcvrack.com/images/AudibleInstruments/utilities.png) - ### Mixer Based on [Shades](https://mutable-instruments.net/modules/shades), [Manual](https://mutable-instruments.net/modules/shades/manual/) -![Mixer](https://vcvrack.com/images/AudibleInstruments/mixer.png) - ### Bernoulli Gate Based on [Branches](https://mutable-instruments.net/modules/branches), [Manual](https://mutable-instruments.net/modules/branches/manual/) -![Bernoulli Gate](https://vcvrack.com/images/AudibleInstruments/bernoulli%20gate.png) - ### Quad VC-polarizer Based on [Blinds](https://mutable-instruments.net/modules/blinds), [Manual](https://mutable-instruments.net/modules/blinds/manual/) -![Quad VC-polarizer](https://vcvrack.com/images/AudibleInstruments/quad%20VC-polarizer.png) - ### Quad VCA Based on [Veils](https://mutable-instruments.net/modules/veils), [Manual](https://mutable-instruments.net/modules/veils/manual/) -![Quad VCA](https://vcvrack.com/images/AudibleInstruments/quad%20VCA.png) - ## Not yet ported @@ -113,9 +89,7 @@ Based on [Veils](https://mutable-instruments.net/modules/veils), [Manual](https: ### [Edges](https://mutable-instruments.net/modules/edges) [Manual](https://mutable-instruments.net/modules/edges/manual/) -- GPL, will not port ### [Grids](https://mutable-instruments.net/modules/grids) [Manual](https://mutable-instruments.net/modules/grids/manual/) -- GPL, will not port diff --git a/vst2_bin/plugins/AudibleInstruments/res/Marbles.svg b/vst2_bin/plugins/AudibleInstruments/res/Marbles.svg new file mode 100644 index 00000000..1d38f710 --- /dev/null +++ b/vst2_bin/plugins/AudibleInstruments/res/Marbles.svg @@ -0,0 +1,2474 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/AudibleInstruments/res/Plaits.svg b/vst2_bin/plugins/AudibleInstruments/res/Plaits.svg new file mode 100644 index 00000000..dabcb9d0 --- /dev/null +++ b/vst2_bin/plugins/AudibleInstruments/res/Plaits.svg @@ -0,0 +1,2968 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/AudibleInstruments/res/Stages.svg b/vst2_bin/plugins/AudibleInstruments/res/Stages.svg new file mode 100644 index 00000000..4518a1a2 --- /dev/null +++ b/vst2_bin/plugins/AudibleInstruments/res/Stages.svg @@ -0,0 +1,3043 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +