From 007b5aa5225789b05fd5e0093449abf540b17522 Mon Sep 17 00:00:00 2001 From: Mohamed-dek Mohamed Date: Sun, 17 May 2026 14:35:07 -0500 Subject: [PATCH 1/6] Add Daisy Chain Protocol Documentation and instructions on how to build and flash (#154) * add initial docs and changes to firmware docs * add initial building and flashing documentation * remove future improvement 4 * remove 10khz host rate * make flash and daisy chain be subarticles of firmware * clarify that baud rate is now 20 Mbps --------- Co-authored-by: Eric Severson --- .../firmware/building-and-running-firmware.md | 83 +++ .../accessories/amds/firmware/daisy-chain.md | 59 ++ .../amds/firmware/images/daisy-chain.svg | 502 ++++++++++++++++++ .../images/debugger-config-options.svg | 59 ++ .../images/firmware-arch-interface.svg | 363 +++++++++++++ .../images/firmware_arch_interface.svg | 212 -------- source/accessories/amds/firmware/index.md | 66 ++- source/accessories/amds/index.md | 4 +- 8 files changed, 1123 insertions(+), 225 deletions(-) create mode 100644 source/accessories/amds/firmware/building-and-running-firmware.md create mode 100644 source/accessories/amds/firmware/daisy-chain.md create mode 100644 source/accessories/amds/firmware/images/daisy-chain.svg create mode 100644 source/accessories/amds/firmware/images/debugger-config-options.svg create mode 100644 source/accessories/amds/firmware/images/firmware-arch-interface.svg delete mode 100644 source/accessories/amds/firmware/images/firmware_arch_interface.svg diff --git a/source/accessories/amds/firmware/building-and-running-firmware.md b/source/accessories/amds/firmware/building-and-running-firmware.md new file mode 100644 index 00000000..46914707 --- /dev/null +++ b/source/accessories/amds/firmware/building-and-running-firmware.md @@ -0,0 +1,83 @@ +# Building and Running Firmware + +This guide provides step-by-step instructions on how to configure, build, and flash the AMDS firmware onto different hardware targets (e.g., AMDS and 2S). + +## Prerequisites + +- **IDE:** STM32CubeIDE (or your preferred C/C++ IDE configured for ARM Cortex-M development). +- **Hardware:** ST-Link V2/V3 or equivalent hardware debugger/programmer. +- **Target Board:** Either an AMDS board or AMDS-compatible board. + +## Multi-Target Firmware Project (Custom Build Configurations) + +The firmware is designed to operate on multiple target hardware platforms using a single, unified codebase. + +- **Target Definitions**: The firmware uses `TARGET_AMDS` and `TARGET_2S` preprocessor macros to conditionally compile board-specific configurations. +- **Dynamic Peripheral Assignment**: Depending on the selected target, the system correctly configures the corresponding hardware peripherals. For example, `TARGET_AMDS` utilizes `UART4` and `UART5` for the Daisy Chain RX lines, while `TARGET_2S` relies on `USART6` and `USART1`. +- **Custom Run Configurations**: You can program either an AMDS or other devices without creating separate project branches, simply by toggling the target macro in your build/run configurations. + +## Step 1: Open the Project + +1. Launch STM32CubeIDE. +2. Go to **File > Open Projects from File System...** +3. Select the directory containing the firmware source code (`AMDS\Mainboard\Firmware\mainboard\`) and click **Finish**. + +## Step 2: Set the Build Configuration (Target Macro) + +The firmware uses preprocessor macros to conditionally compile the correct peripheral assignments and active sensor masks for your specific board. Two targets are currently supported: + +- `AMDS`: This is the standard AMDS hardware as documented on this website. +- `2S`: This is a new target that has only two sensor cards on hardware that is not yet publicly released. + +```{tip} +Nearly all users are on AMDS hardware. When in doubt, select the `AMDS` option. +``` + +1. Right-click on `mainboard` and go to **Build Configuration > Set Active > AMDS or 2S** + +*Note: Alternatively, simply select the appropriate active configuration the Build "hammer" dropdown menu.* + +## Step 3: Build the Project + +1. **Clean** the project to ensure no artifact mix-ups from previous board builds: Go to **Project > Clean...** and select your project. +2. **Build** the project: Click the **Build** (hammer) icon or go to **Project > Build Project**. +3. Check the console output to ensure there are no compilation errors and that the build finishes successfully. + +```{important} +If you did not set the build configuration in the previous steps you will see many compilation errors that look like this: + +#error "Please define a target board (TARGET_AMDS or TARGET_2S)!" +``` + +## Step 4: Configure the Run/Debug Settings + +1. Connect your ST-Link to your PC and the target board's SWD (Serial Wire Debug) header. +2. Power on the target board. +3. In STM32CubeIDE, go to **Run > Debug Configurations...** +4. Double-click **STM32 Cortex-M C/C++ Application** to create a new configuration. +5. In the **Main** tab, ensure the correct `.elf` file is selected in `C/C++ Application` as either `AMDS/mainboard.elf` or `2S/mainboard.elf`. +6. In the **Debugger** tab, ensure the Debug probe is set to **ST-LINK** and the interface is set to **SWD**. +7. Click **Apply**. + +```{image} images/debugger-config-options.svg +:width: 75% +``` + +## Step 5: Flash and Verify + +1. Click **Debug** (or **Run**) from the configuration window to flash the firmware. +2. The IDE will connect to the board, erase the necessary flash sectors, and write the new firmware. +3. Once flashing is complete, if you are in Debug mode, click the **Resume** (play) button to start execution. +4. **Verification:** Observe the board's behavior. Depending on your configuration, verify that the active sensor mask operates correctly (AMDS enables all 8 channels `0xFF`, 2S enables a subset `0x11`) and that UART/DMA streams begin processing as expected. + +```{tip} +For the AMDS board, a good indicator that things are running smoothly is the 4 LEDS near the MCU blinking in order. +``` + +## Switching Between Targets + +Because the project shares a single codebase, programming a different target (`AMDS` vs `2S`) is simple: + +1. Disconnect the current board and connect the new one. +2. Return to **Step 2** and swap the target macro. +3. Rebuild (**Step 3**) and Flash (**Step 5**). diff --git a/source/accessories/amds/firmware/daisy-chain.md b/source/accessories/amds/firmware/daisy-chain.md new file mode 100644 index 00000000..09dce5c8 --- /dev/null +++ b/source/accessories/amds/firmware/daisy-chain.md @@ -0,0 +1,59 @@ +# AMDS Daisy Chain + +This document outlines the architecture, setup, and salient details of the AMDS's Daisy Chain capability. + +## Overview + +The AMDC and AMDS allow up to three AMDS boards to be daisy chained together on each of the AMDC's GPIO ports, as shown below. + +```{image} images/daisy-chain.svg +:width: 100% +``` + +Each AMDS can run the same firmware, and does not need to know it is in a daisy chain. To each AMDS, the board "downstream" from it (i.e., the board with a lower number in the image above) appears as `master`. + +## Theory of Operation + +Upon receiving a `SYNC_ADC` signal, the AMDS performs the following operations: + +1. Assert `SYNC_ADC` on its upstream port +2. Collect and transmit sensor card ADC data as described in the [AMDC firmware article](index.md). +3. Process data received on its incoming `DATA0` and `DATA1` ports from any upstream AMDS boards + - Header packets are incremented by `0x04` + - Data is transmitted to the corresponding downstream port; for example, if the packet arrived via the upstream `DATA0` port, it will go out the downstream `DATA0` port + +## Hardware + +The cabling between each pair of boards runs at the same baudrate (20 Mbps). + +Currently released AMDS hardware relies on a daisy chain adapter board placed between each pair of AMDS boards to add the necessary transceivers. Details on this board can be found in the AMDS git repo's [`AMDS/Accessories/DaisyChainAdapter` directory](https://github.com/Severson-Group/AMDS/tree/develop/Accessories/DaisyChainAdapter). + +Custom cabling must be used between AMDS boards to transpose the UART `RX` and `TX` pins. + +## Architecture + +### Direct Memory Access (DMA) for Receiving Data + +To ensure near zero-CPU overhead when receiving incoming UART data, the firmware utilizes DMA streams to receive `DATA0` and `DATA1` data from upstream AMDS boards. + +- **Circular Buffers**: Incoming daisy-chain data is placed into `DAISY_RX1_Pool` and `DAISY_RX2_Pool`, both of which are 256-byte circular buffers (`AMDS_RX_BUF_SIZE`). Utilizing a 256-byte size allows for 8-bit integer math to handle wrap-around without complex modulo logic. +- **Error Recovery**: In high-noise environments, UART hardware errors (Parity, Overrun, Noise, or Frame errors) can cause the hardware to drop the `DMAR` (DMA Receiver) bit, halting the stream. The UART Interrupt Service Routines (ISRs) actively monitor for these flags, clear them, and immediately re-enable the DMA requests to ensure continuous stream operation without resetting the device. + +### Processing Data from Upstream AMDS Devices + +Data received from upstream devices is processed immediately after transmitting all data collected from local sensor cards. This is handled by the `process_routing()` function. The timing of this code is carefully optimized to minimize the total transmit time to the AMDC across the enitre link. + +Implementation details: + +- **Collection of Complete Packets**: The code attempts to collect complete three byte packets prior to processing. Wait timeouts are implemented. +- **Dual-Stream Optimization**: If both UART streams have at least a full 3-byte packet ready, the logic processes them completely interleaved. This keeps both hardware TX lines saturated simultaneously. +- **Single-Stream Optimization**: If only one UART has a 3 byte packet (i.e., a different number of packets are broadcast due to `active_sensor_mask != 0xFF` on an upstream AMDS), the code follows a Single-Stream Fast Path. +- **Fall-Back, Slow Path**: If a packet gets fragmented across a DMA boundary or becomes misaligned, the system reverts to a 1-byte-at-a-time State Machine (the "Slow Path") to recover the stream. +- **Thread-safe Invocation**: The AMDS attempts to broadcast all DMA data within a single call to `process_routing()` from the `SYNC_ADC` interrupt context. However, if this times out, the firmware provides a fall-back path: the main `while(1)` loop constantly checks `drv_uart_has_dma_data()` and invokes `process_routing()` in a thread-safe manner if any further data arrives. + +## Performance + +Daisy chain benchmark testing shows the following complete transmission times from assertion of `SYNC_ADC` to the last bit arriving at the AMDC: + +- **24 sensors** (3x AMDS boards, each with 8 sensor cards): `27 us` +- **6 sensors** (3x 2S boards, each with 2 sensor cards): `13.7 us` diff --git a/source/accessories/amds/firmware/images/daisy-chain.svg b/source/accessories/amds/firmware/images/daisy-chain.svg new file mode 100644 index 00000000..fb47f1c7 --- /dev/null +++ b/source/accessories/amds/firmware/images/daisy-chain.svg @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + AMDS1 + + Master(AMDC) + + + + SYNC_ADC + DATA0 + DATA1 + + AMDS2 + + + + SYNC_ADC + DATA0 + DATA1 + + AMDS3 + + + + SYNC_ADC + DATA0 + DATA1 + + diff --git a/source/accessories/amds/firmware/images/debugger-config-options.svg b/source/accessories/amds/firmware/images/debugger-config-options.svg new file mode 100644 index 00000000..598f3df9 --- /dev/null +++ b/source/accessories/amds/firmware/images/debugger-config-options.svg @@ -0,0 +1,59 @@ + + + + diff --git a/source/accessories/amds/firmware/images/firmware-arch-interface.svg b/source/accessories/amds/firmware/images/firmware-arch-interface.svg new file mode 100644 index 00000000..a44bb4e4 --- /dev/null +++ b/source/accessories/amds/firmware/images/firmware-arch-interface.svg @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + AMDS + + Master(AMDC) + + + + SYNC_ADC + DATA0 + DATA1 + + diff --git a/source/accessories/amds/firmware/images/firmware_arch_interface.svg b/source/accessories/amds/firmware/images/firmware_arch_interface.svg deleted file mode 100644 index 19dd05c2..00000000 --- a/source/accessories/amds/firmware/images/firmware_arch_interface.svg +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - AMDS - - Master - (AMDC) - - - - SYNC_ADC - DATA0 - DATA1 - - diff --git a/source/accessories/amds/firmware/index.md b/source/accessories/amds/firmware/index.md index 328de436..7929d5a5 100644 --- a/source/accessories/amds/firmware/index.md +++ b/source/accessories/amds/firmware/index.md @@ -18,7 +18,7 @@ While the architecture of the AMDS firmware is fairly simple, the I/O interface, The AMDS firmware is designed to interface to the master controller over three logical wires: one signal from the master, and two data lines to the master. Physically, these signals are all differential pairs for noise immunity. -![](images/firmware_arch_interface.svg) +![](images/firmware-arch-interface.svg) #### RX Signal: `SYNC_ADC` @@ -30,9 +30,9 @@ After all sensorcards have been sampled, the AMDS streams all sampled data back The two TX signals are controlled by the AMDS and go to the master. These are only used to send ADC sample data to the master. As soon as all ADCs are sampled, the AMDS starts sending the latest data to the master using the two TX wires. Two lanes are used so that the data can be transmitted at twice the speed, thus reducing latency. -The format of the data sent on the TX signals is UART. This means there is no clock line between the master and AMDS: the interface is completely asynchronous. The UART is configured to run at 25 Mbps. Conceptually, the TX lines are actually two distinct UART devices, each with only one-way communication. Both UARTs are configured as 8-bit data, 2 stop bits, and odd parity. +The format of the data sent on the TX signals is UART. This means there is no clock line between the master and AMDS: the interface is completely asynchronous. The UART is configured to run at 20 Mbps. Conceptually, the TX lines are actually two distinct UART devices, each with only one-way communication. Both UARTs are configured as 8-bit data, 2 stop bits, and odd parity. -##### Data Format +### Data Format The ADCs on the sensor cards are assumed to be 16-bit devices which are all compatible with each other (i.e. they can be daisy-chained and support equal clock rates). See each sensor card's hardware design files for specs on the specific ADCs which are supported. The 16-bit raw data from the ADCs are packed into bytes which are sent across the `DATA0` and `DATA1` UART lines. `DATA0` is used to send the contents of the first four sensor cards and `DATA1` sends the last four sensor card data. The transmissions happen in parallel between the data lines. @@ -62,15 +62,50 @@ The message structure is equal between both `DATA0` and `DATA1`. However, each m | ---- | ---- | ---- | | 0x93 | MSB of sample 4 | LSB of sample 4| -_NOTE: there is no full CRC included in the transmission. The simple protocol relies on the parity check in the UART packet. This is not a terribly robust approach, but has worked well is moderate EMI environments._ +```{note} +There is no full CRC included in the transmission. The simple protocol relies on the parity check in the UART packet. This is not a terribly robust approach, but has worked well is moderate EMI environments. +``` + +#### Selective Channel Transmitting + +To optimize processing and transmission bandwidth, the system supports disabling unused sensor channels. + +**Active Sensor Mask**: The AMDS codebase contains a global variable `active_sensor_mask` that acts as a bitmask where `1 = Active` and `0 = Inactive` for each of the 8 AMDS sensor cards. This variable determines which sensor cards' data are sent to the master each time a `SYNC_ADC` is received by the AMDS. For example, + +- `active_sensor_mask = 0xFF;`: AMDS will send all 8 channels +- `active_sensor_mask = 0x01;`: AMDS will only send sensor card channel 1 +- `active_sensor_mask = 0x06;`: AMDS will only send sensor card channels 2 and 3 + +```{hint} +The AMDC platform system default is to send all 8 channels. If a reduced number of channels are being sent, the user must alert the AMDC to this by calling `amdc_set_enabled()`, as the AMDS does not communicate configuration settings with master. +``` + +#### Optimized Sample-and-Transmit Fast Path + +The AMDS firmware has been optimized to minimize time from `SYNC_ADC` until the last bit of data is transmitted to the master. The code path used depends on the value of `active_sensor_mask`: + +- `active_sensor_mask != OxFF`: a generalized function `adc_sample_all_daughtercards()` is used. +- `active_sensor_mask == OxFF`: a highly optimized function `adc_sample_and_transmit_fast_path()` is used. + +As compared to the generalized `adc_sample_all_daughtercards()` function, `adc_sample_and_transmit_fast_path` decreases latency by doing the following: + +- **Avoid `active_sensor_mask` Conditional Checks**: to remove processor time associated with `if` statements. +- **Hardware Cycle Counting**: Rather than using `NOP` loops for the 1300ns ADC wait time, the fast path uses the Cortex-M7 DWT Cycle Counter (`DWT->CYCCNT`) for deterministic waiting. +- **Instruction Interleaving**: The code optimizes wait states by starting SPI reads, and transmitting UART header bytes (`0x90`) while the CPU is waiting for the SPI RX buffers to fill. + +Both code paths optimize timing by using the ST32 MCU's UART transmit shift register to queue up two bytes of UART transmit data at a time. This is done by optimizing calls to the inline `drv_uart_putc_fast()` function. When the shift register is empty, the function accepts new data without delay. When the shift register is occupied, the function blocks until it can take the new data byte. If the UART tranmit interface is idle, two back-to-back calls can be made to this function without any blocking delay. + +### Daisy Chain + +The AMDS firmware includes support for up to three AMDS boards to be connected in series into a "daisy chain," allowing for 24 sensor cards worth of data to be sent to master. Details of this are provided in [AMDS Daisy Chain](daisy-chain.md). ### Interrupt-Driven Design -After start-up, the AMDS firmware is completely interrupt driven. This means that all processing occurs within an interrupt context, not the main loop. The interrupt which used to drive the firmware occurs on the rising and falling edges of the `SYNC_ADC` signal. +After start-up, the AMDS firmware is interrupt driven. This means that all critical processing occurs within an interrupt context, not the main loop. The interrupt which used to drive the firmware occurs on the rising and falling edges of the `SYNC_ADC` signal. In the typical flow, the master is operating its PWM output and thus triggering the `SYNC_ADC` ISR periodically. The ADCs on the sensor cards start their conversions and store the latest data in the AMDS memory. Once this is complete, the AMDS sends the data back to the master. Then the AMDS will wait for the next `SYNC_ADC` interrupt. -### Performance Limitations +## Performance Limitations The AMDS firmware design directly affects the operation limits of the `SYNC_ADC` signal. It will continue to work up to some threshold, at which point some ISRs will be missed and the performance will drop. However, the system will not "crash" -- it will continue to work, albeit not as well. @@ -95,9 +130,11 @@ The channels in the above scope capture show the following signals from top to b - C2: The `DATA0` line from the AMDS back to the AMDC, showing 12 bytes (4 x 3-Byte packets) of UART data. This is the data for AMDS sensor card channels 1-4. - C3: The `DATA1` line from the AMDS back to the AMDC, showing 12 bytes (4 x 3-Byte packets) of UART data. This is the data for AMDS sensor card channels 5-8. -**Note**: The AMDS firmware always assumes all eight sensor cards must be sampled. Even when they are not populated, the firmware timing remains as if all sensor cards were in pairs of daisy chains. This acts to limit the overall sampling throughput. +```{hint} +The default value of `active_sensor_mask` will have the AMDS assume that all eight sensor cards must be sampled. Even when they are not populated, the firmware timing remains as if all sensor cards were in pairs of daisy chains. The only way to improve sample throughput when fewer cards are used is to update `active_sensor_mask` as described [above](#selective-channel-transmitting). +``` -#### Performance Specifications +### Performance Specifications Given a control frequency of `Fs` and PWM switching frequency of `Fsw`, the following constraints must be satisfied for the AMDS firmware to perform well: @@ -106,11 +143,13 @@ Given a control frequency of `Fs` and PWM switching frequency of `Fsw`, the foll For application with SiC or GaN inverters where `Fsw` is typically much faster than `Fs`, the AMDS firmware works well. -**Warning:** When `Fs` is close to `Fsw` (i.e. control frequency is equal to PWM frequency), **the current AMDS firmware design will not work well.** +```{warning} +When `Fs` is close to `Fsw` (i.e. control frequency is equal to PWM frequency), **the current AMDS firmware design will not work well.** +``` ## Future Improvements -The AMDS firmware works, albeit with limitations as described above. Some ideas to improve the system are now described: +The AMDS firmware works, albeit with limitations as described above. Some ideas to improve the system are now listed: 1. The AMDS cannot be configured from the master. Improvements could use an additional TX/RX pair to enable simple register protocol for config. This could be used to set digital filter bandwidths, turn on/off sensor card slots for faster sampling, etc. @@ -118,4 +157,9 @@ The AMDS firmware works, albeit with limitations as described above. Some ideas 3. There is no robust CRC error detection on the data transmission from the AMDS to the master device, although the UART parity is used. Future improvements could add a footer CRC to ensure the received message at the master is valid. Error correction codes could also be used to further increase the communication robustness in high EMI environments (e.g. SECDED). There is no free lunch: all of these methods would increase the data transmission latency from the AMDS. -4. There is no need to transmit the data from all eight sensor cards if they are not all populated. Theoretically, a user could run the AMDS interface MUCH faster with fewer sensor cards installed, if changes are made such that only real data acquired from populated sensor cards are transmitted back to the master. +```{toctree} +:hidden: + +daisy-chain +building-and-running-firmware +``` diff --git a/source/accessories/amds/index.md b/source/accessories/amds/index.md index bc617c53..7ea38e0c 100644 --- a/source/accessories/amds/index.md +++ b/source/accessories/amds/index.md @@ -32,8 +32,8 @@ However, it is a complete system which could be interfaced to any other host dev - Low voltage - Current +- Up to 3 AMDS boards daisy chained per AMDC port (up to 24 sensor cards) - Synchronous sensor sampling to PWM carrier waveform (up to 100 kHz) -- Data request rate up to 10 kHz to host device ```{toctree} :hidden: @@ -42,4 +42,4 @@ amds-in-action/index firmware/index mainboard/index sensor-cards/index -``` \ No newline at end of file +``` From 8b7d2cbc107630addfda8f5617ad9619c8423c11 Mon Sep 17 00:00:00 2001 From: Eric Severson Date: Sun, 17 May 2026 16:12:58 -0500 Subject: [PATCH 2/6] fix implicit-link build warning --- source/accessories/amds/firmware/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/accessories/amds/firmware/index.md b/source/accessories/amds/firmware/index.md index 7929d5a5..8486e049 100644 --- a/source/accessories/amds/firmware/index.md +++ b/source/accessories/amds/firmware/index.md @@ -66,6 +66,7 @@ The message structure is equal between both `DATA0` and `DATA1`. However, each m There is no full CRC included in the transmission. The simple protocol relies on the parity check in the UART packet. This is not a terribly robust approach, but has worked well is moderate EMI environments. ``` +(active-sensor-mask)= #### Selective Channel Transmitting To optimize processing and transmission bandwidth, the system supports disabling unused sensor channels. @@ -131,7 +132,7 @@ The channels in the above scope capture show the following signals from top to b - C3: The `DATA1` line from the AMDS back to the AMDC, showing 12 bytes (4 x 3-Byte packets) of UART data. This is the data for AMDS sensor card channels 5-8. ```{hint} -The default value of `active_sensor_mask` will have the AMDS assume that all eight sensor cards must be sampled. Even when they are not populated, the firmware timing remains as if all sensor cards were in pairs of daisy chains. The only way to improve sample throughput when fewer cards are used is to update `active_sensor_mask` as described [above](#selective-channel-transmitting). +The default value of `active_sensor_mask` will have the AMDS assume that all eight sensor cards must be sampled. Even when they are not populated, the firmware timing remains as if all sensor cards were in pairs of daisy chains. The only way to improve sample throughput when fewer cards are used is to update `active_sensor_mask` as described [above](#active-sensor-mask). ``` ### Performance Specifications From 4d0d735abca8e7bf7ae753c6c0b908950d6ec1af Mon Sep 17 00:00:00 2001 From: Eric Severson Date: Sun, 17 May 2026 18:39:46 -0500 Subject: [PATCH 3/6] add table mapping daisy chained AMDS sensor card to AMDC (#171) --- .../accessories/amds/firmware/daisy-chain.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/source/accessories/amds/firmware/daisy-chain.md b/source/accessories/amds/firmware/daisy-chain.md index 09dce5c8..a8d85c9a 100644 --- a/source/accessories/amds/firmware/daisy-chain.md +++ b/source/accessories/amds/firmware/daisy-chain.md @@ -22,6 +22,35 @@ Upon receiving a `SYNC_ADC` signal, the AMDS performs the following operations: - Header packets are incremented by `0x04` - Data is transmitted to the corresponding downstream port; for example, if the packet arrived via the upstream `DATA0` port, it will go out the downstream `DATA0` port +The data will arrive on the AMDC `DATA0` and `DATA1` lines in the following arrangment: + +| AMDS | Sensor Card | `DATAx` | Header | AMDC `AMDC_CH_x_DATA_REG_OFFSET` define | +|:----:|:--------------------------:|:--------------:|:------:|:--------------------------------------: | +| 1 | 1 | 0 | 0x90 | 1 | +| | 2 | 0 | 0x91 | 2 | +| | 3 | 0 | 0x92 | 3 | +| | 4 | 0 | 0x93 | 4 | +| | 5 | 1 | 0x90 | 5 | +| | 6 | 1 | 0x91 | 6 | +| | 7 | 1 | 0x92 | 7 | +| | 8 | 1 | 0x93 | 8 | +| 2 | 1 | 0 | 0x94 | 9 | +| | 2 | 0 | 0x95 | 10 | +| | 3 | 0 | 0x96 | 11 | +| | 4 | 0 | 0x97 | 12 | +| | 5 | 1 | 0x94 | 13 | +| | 6 | 1 | 0x95 | 14 | +| | 7 | 1 | 0x96 | 15 | +| | 8 | 1 | 0x97 | 16 | +| 3 | 1 | 0 | 0x98 | 17 | +| | 2 | 0 | 0x99 | 18 | +| | 3 | 0 | 0x9A | 19 | +| | 4 | 0 | 0x9B | 20 | +| | 5 | 1 | 0x98 | 21 | +| | 6 | 1 | 0x99 | 22 | +| | 7 | 1 | 0x9A | 23 | +| | 8 | 1 | 0x9B | 24 | + ## Hardware The cabling between each pair of boards runs at the same baudrate (20 Mbps). From 1cffa048aedc7f7fdf34920c848f09966baed472 Mon Sep 17 00:00:00 2001 From: Eric Severson Date: Sun, 17 May 2026 20:29:53 -0500 Subject: [PATCH 4/6] Add description of custom cable required for daisy chain adapter (#172) * Add image illustrating placement of the daisy chain adapter board * Add description of custom cable * Add dark mode graphics for DCA --- .../accessories/amds/firmware/daisy-chain.md | 38 +- .../images/daisy-chain-adapter-dark.svg | 546 ++++++++++++++++++ .../firmware/images/daisy-chain-adapter.svg | 425 ++++++++++++++ 3 files changed, 1007 insertions(+), 2 deletions(-) create mode 100644 source/accessories/amds/firmware/images/daisy-chain-adapter-dark.svg create mode 100644 source/accessories/amds/firmware/images/daisy-chain-adapter.svg diff --git a/source/accessories/amds/firmware/daisy-chain.md b/source/accessories/amds/firmware/daisy-chain.md index a8d85c9a..9a91d757 100644 --- a/source/accessories/amds/firmware/daisy-chain.md +++ b/source/accessories/amds/firmware/daisy-chain.md @@ -55,9 +55,43 @@ The data will arrive on the AMDC `DATA0` and `DATA1` lines in the following arra The cabling between each pair of boards runs at the same baudrate (20 Mbps). -Currently released AMDS hardware relies on a daisy chain adapter board placed between each pair of AMDS boards to add the necessary transceivers. Details on this board can be found in the AMDS git repo's [`AMDS/Accessories/DaisyChainAdapter` directory](https://github.com/Severson-Group/AMDS/tree/develop/Accessories/DaisyChainAdapter). +Currently released AMDS hardware relies on a daisy chain adapter board placed between each pair of AMDS boards to add the necessary transceivers, as illustrated below. Details on this board can be found in the AMDS git repo's [`AMDS/Accessories/DaisyChainAdapter` directory](https://github.com/Severson-Group/AMDS/tree/develop/Accessories/DaisyChainAdapter). -Custom cabling must be used between AMDS boards to transpose the UART `RX` and `TX` pins. +```{image} images/daisy-chain-adapter.svg +:width: 75% +:align: center +:class: only-light +``` + +```{image} images/daisy-chain-adapter-dark.svg +:width: 75% +:align: center +:class: only-dark +``` + +Custom cabling must be used between the daisy chain adapter board and the AMDS board to transpose the UART `RX` and `TX` pins, as listed below. This type of cable can be readily manufactured as a do-it-yourself project, or ordered from a custom cable manufacturer such as [ShowMeCables](https://www.showmecables.com/). The cable should use high density, VGA-style 15 pin connectors to match the AMDS `CON1A` port. + +```{table} **Custom Cable** for Daisy Chain Adapter Implementation +:align: center + +| DCA Pin | DCA Name | AMDS Pin | AMDS Name | +|:-------:|:-------------:|:--------:|:-------------:| +| 1 | 5V_CN | 1 | 5V_CN | +| 2 | UARTA_IN_P | 12 | UARTA_OUT_P | +| 3 | UARTA_IN_N | 13 | UARTA_OUT_N | +| 4 | UARTB_IN_P | 14 | UARTB_OUT_P | +| 5 | UARTB_IN_N | 15 | UARTB_OUT_N | +| 6 | NC | 6 | NC | +| 7 | NC | 7 | SPI1_IP | +| 8 | NC | 8 | SPI1_IM | +| 9 | NC | 9 | SPI2_IP | +| 10 | NC | 10 | SPI2_IM | +| 11 | GND_CN | 11 | GND_CN | +| 12 | UARTA_OUT_P | 2 | UARTA_IN_P | +| 13 | UARTA_OUT_N | 3 | UARTA_IN_N | +| 14 | UARTB_OUT_P | 4 | UARTB_IN_P | +| 15 | UARTB_OUT_N | 5 | UARTB_IN_N | +``` ## Architecture diff --git a/source/accessories/amds/firmware/images/daisy-chain-adapter-dark.svg b/source/accessories/amds/firmware/images/daisy-chain-adapter-dark.svg new file mode 100644 index 00000000..f462010f --- /dev/null +++ b/source/accessories/amds/firmware/images/daisy-chain-adapter-dark.svg @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + AMDS1 + + DaisyChainAdapter + + + + + AMDS2 + + + + 1:1 Cable + + + + Custom Cable + + diff --git a/source/accessories/amds/firmware/images/daisy-chain-adapter.svg b/source/accessories/amds/firmware/images/daisy-chain-adapter.svg new file mode 100644 index 00000000..1aa55d3c --- /dev/null +++ b/source/accessories/amds/firmware/images/daisy-chain-adapter.svg @@ -0,0 +1,425 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + AMDS1 + + DaisyChainAdapter + + + + + AMDS2 + + + + 1:1 Cable + + + + Custom Cable + + From ae84b875be40bb4d471810db6ef8a1f1ae548774 Mon Sep 17 00:00:00 2001 From: Harley Peterson <73045075+AwesomeTornado@users.noreply.github.com> Date: Wed, 10 Jun 2026 14:02:33 -0500 Subject: [PATCH 5/6] Update amds timings (#178) * update numbers and graph * Add new packet capture graphic * Delete old image * Update images * Update sampling timing font --------- Co-authored-by: Harley Peterson --- .../amds/firmware/images/sampling_timing.svg | 569 +++++++++++++++++- .../amds/firmware/images/scope_single.jpg | Bin 91586 -> 0 bytes .../amds/firmware/images/scope_single.webp | Bin 0 -> 24004 bytes source/accessories/amds/firmware/index.md | 15 +- 4 files changed, 575 insertions(+), 9 deletions(-) delete mode 100644 source/accessories/amds/firmware/images/scope_single.jpg create mode 100644 source/accessories/amds/firmware/images/scope_single.webp diff --git a/source/accessories/amds/firmware/images/sampling_timing.svg b/source/accessories/amds/firmware/images/sampling_timing.svg index 107abf15..356f9920 100644 --- a/source/accessories/amds/firmware/images/sampling_timing.svg +++ b/source/accessories/amds/firmware/images/sampling_timing.svg @@ -1 +1,568 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Transmission Time = ~3us + Transmission Time = ~9us + Total Acquisition Time = ~12us + + diff --git a/source/accessories/amds/firmware/images/scope_single.jpg b/source/accessories/amds/firmware/images/scope_single.jpg deleted file mode 100644 index 5c1e406bc8d45f089888b4bba70ce3ec3d91182a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91586 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 literal 0 HcmV?d00001 diff --git a/source/accessories/amds/firmware/index.md b/source/accessories/amds/firmware/index.md index 8486e049..2fe3c5e5 100644 --- a/source/accessories/amds/firmware/index.md +++ b/source/accessories/amds/firmware/index.md @@ -110,26 +110,25 @@ In the typical flow, the master is operating its PWM output and thus triggering The AMDS firmware design directly affects the operation limits of the `SYNC_ADC` signal. It will continue to work up to some threshold, at which point some ISRs will be missed and the performance will drop. However, the system will not "crash" -- it will continue to work, albeit not as well. -The time for the trigger signal to reach the sensor card ADCs and for them to convert the analog value to digital is minimal, less than 1 µs. The time for the sensor cards to send their data back to the AMDS mainboard processor is around 4 µs. The latency for data transmission back to the master over the `DATAx` signals is about 6 µs. With all delays accumulated, the total time to trigger, sample, and transmit the data is just under 11 µs. +The time for the trigger signal to reach the sensor card ADCs and for them to convert the analog value to digital is minimal, less than 1 µs. The time for the sensor cards to send their data back to the AMDS mainboard processor is around 3 µs. The latency for data transmission back to the master over the `DATAx` signals is about 9 µs. With all delays accumulated, the total time to trigger, sample, and transmit the data is just under 12 µs. This can be seen in the timing block diagram and scope capture below. ```{image} images/sampling_timing.svg -:width: 75% +:width: 100% ``` The figure shown above assumes that the Timing Manager has been configured to sample the sensors only at the valley of the PWM triangle carrier, and attempts to sample every period (i.e., the sampling sub-rate ratio is 1). Also, note that in the figure, the AMDS sensor sampling time consumes about 90% of the total time slice---this leaves a very small time for the control code to run and does not represent practical configuration. Typically, the AMDS sampling time should consume much less of the total cycle time. -```{image} images/scope_single.jpg -:width: 75% +```{image} images/scope_single.webp +:width: 100% ``` The channels in the above scope capture show the following signals from top to bottom: -- C1: The `SYNC_ADC` signal from the AMDC to the AMDS, where every edge triggers the ISR on the AMDS which samples and returns the data. -- C4: The `DOUT` signal on a sensor card, showing the data streaming from the sensor card to the processor on the AMDS mainboard. -- C2: The `DATA0` line from the AMDS back to the AMDC, showing 12 bytes (4 x 3-Byte packets) of UART data. This is the data for AMDS sensor card channels 1-4. -- C3: The `DATA1` line from the AMDS back to the AMDC, showing 12 bytes (4 x 3-Byte packets) of UART data. This is the data for AMDS sensor card channels 5-8. +- UART DATA0: The `DATA0` line from the AMDS back to the AMDC, showing 12 bytes (4 x 3-Byte packets) of UART data. This is the data for AMDS sensor card channels 1-4. +- UART DATA1: The `DATA1` line from the AMDS back to the AMDC, showing 12 bytes (4 x 3-Byte packets) of UART data. This is the data for AMDS sensor card channels 5-8. +- ADC_SYNC: The `SYNC_ADC` signal from the AMDC to the AMDS, where every edge triggers the ISR on the AMDS which samples and returns the data. ```{hint} The default value of `active_sensor_mask` will have the AMDS assume that all eight sensor cards must be sampled. Even when they are not populated, the firmware timing remains as if all sensor cards were in pairs of daisy chains. The only way to improve sample throughput when fewer cards are used is to update `active_sensor_mask` as described [above](#active-sensor-mask). From efdf5ae55ab765cc5705125f1fa65cb1071a0d0f Mon Sep 17 00:00:00 2001 From: Harley Peterson <73045075+AwesomeTornado@users.noreply.github.com> Date: Thu, 11 Jun 2026 11:16:39 -0500 Subject: [PATCH 6/6] Add board def download link (#180) * Add board definition download link * update typo * Fix another typo --- .../building-and-running-firmware.md | 9 ++++----- source/firmware/xilinx-tools/downloads/AMDC.zip | Bin 0 -> 19454 bytes 2 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 source/firmware/xilinx-tools/downloads/AMDC.zip diff --git a/source/firmware/xilinx-tools/building-and-running-firmware.md b/source/firmware/xilinx-tools/building-and-running-firmware.md index 465b9a01..149559a0 100644 --- a/source/firmware/xilinx-tools/building-and-running-firmware.md +++ b/source/firmware/xilinx-tools/building-and-running-firmware.md @@ -8,10 +8,9 @@ Following these instructions will get the AMDC firmware environment up and runni Firmware development environment needs a few things: - Xilinx Vivado 2019.1 and SDK (if you don't have these, [follow these steps to install them](installing-xilinx-tools.md)) -- `em.avnet.com:picozed_7030_fmc2:part0:1.1` board definition - 1. Go [here](https://github.com/Severson-Group/AMDC-Firmware/issues/10#issuecomment-847993684) - 2. Download the zip file and unzip it - 3. Move the resulting folder (`picozed_*`) to `C:\Xilinx\Vivado\2019.1\data\boards\board_files\...` +- `elev.umn.edu:AMDC:part0:1.1` board definition + 1. Download [this](./downloads/AMDC.zip) file and unzip it. + 2. Move the resulting folder (`AMDC`) to `C:\Xilinx\Vivado\2019.1\data\boards\board_files\...` ## Cloning from GitHub @@ -381,4 +380,4 @@ Another solution is to start in Vivado. After getting a successful block diagram Click OK, and select File -> Launch SDK. Your Exported Location should be the same folder as before (`my-AMDC-private-C-code`), and your workspace should be the `SDK` folder found inside `AMDC-Firmware`. -Click OK and close the welcome tab in Xilinx when it loads. There should only be `amdc_rev*_wrapper_hw_platform_0` in your Project Explorer. Now you can import files from the folders you selected earlier (`my-AMDC-private-C-code` and `SDK`) via File -> Open Projects from File System. \ No newline at end of file +Click OK and close the welcome tab in Xilinx when it loads. There should only be `amdc_rev*_wrapper_hw_platform_0` in your Project Explorer. Now you can import files from the folders you selected earlier (`my-AMDC-private-C-code` and `SDK`) via File -> Open Projects from File System. diff --git a/source/firmware/xilinx-tools/downloads/AMDC.zip b/source/firmware/xilinx-tools/downloads/AMDC.zip new file mode 100644 index 0000000000000000000000000000000000000000..ad1c9d61d279e0411d4dcdda4ea8607d8fe79771 GIT binary patch literal 19454 zcmZ^~Q>-vd)TMcB+qP}nwr$(CZQI6sY}>YNYrcPadeS#tsZ{NYmC8%at%6w8lD<*_YFAyK;3|7`@{Nazw`|ac^ngNaiO3F zro4a+dGFe@gFp=pk2&u@-P^U)WZjQ&dgLR&-L{`<2lNyClz*i&PivcdQh$WT2Zleo zx7`!8;naF#$^d7OXaT8bAn*mSH9&vVgktN=|1_DVXE9P>mO+KM<=5hjn`YL-lh*?>&=d=b-c0_Vp zxw)&$8g-d{3o5qNHkBiywoS>A&o6(60R@ug&7H(YuFvcWfXp7ui+e;OpEZOD@NJjo*4dH zUlxWKQ}qQi2#ubVy1nAkOM5<^Cg0Lw?u52{BC88DAN^arBCEDF*=SpE<+{-*a@T57 zOMj*qusVNJ0nDLbuESHkJiM8?-Hs~tn#B$Z^0Rg0!tO8GIA?rxA22R?Pq9=+JsDMVTc?K zF1O2|FC@^Y&Ul;KYxtaDGFsNaYD+HcCn?I6oL21w%i(=EqiKT6>{m>}-zmfcj!*D%`EI$cHnyJOMRCW;TE z=oQ8SM~YkL{4be}W316MRO7{0JEuhBVx9(Wj-B^Yk9yzABcW|}R9qgXi&}Tytt0SH zJS;8OT%sek{G6#|{?17~Yr5S+F~TjCq7oFYLu?WhPw5f}HwV!qhis)5urRJe>!V=& zX-xF`sRQ2*lj__KT7W)AcW<5adD1?~RnWqm@aAM@W1;W%OIJ_&sTvUft~4d799BxS z@BzW*S~o*M=Dv`Xv}hH6^=RJjDW6KJ2ZoM}GVRj6F<4+LF&~5wRQ3ub6~qTUekrTZ zIjry{AGmA$I-Rb!xh^`aHV#b0#8hu5)t#JL#>|^TP~G?R`GGO0VUYv3=r(@bkYCXQ zeFg&A`N|RUv1pbFABZ!ETgV=82{499Vu}#iC$pnMNh|DGQZ#5U7+dIkK5R=A<$$WF z^OoIHN=&si6$}&_8NTZL$MVR>x#XrsQ>sdC-r$MUv%8f!SMTHu)#a#9i4mJ(1h5HW zJ*<+wRfyj2(2bBMVvv_NN@a@E(LUWtBh$phU&%!Z2l5jfU`93lVfsBn35fmke~i^L zA`nu~c!ZW|nGU99=iF^uE3k&AjYVtZ>2aM3;pxdQ6gNw&>`jTd=zg_bl4)cq8#(%x zw+4RT>R%WgvF30~sG;wc`~Lu_YRww+VN*rf7_LU7RKZ4!b;hUCAKmt~w2khSY}HHj z!=?`-cor6ihdms@c3yRROWADO{N!+54JB%;iHigAs;U(0Xqgfh+{NFaDQp%% zC@5Dq?XRWDLZ`tTM8~g$c~5QV@p}Ho%uRdXdY!rM2D1A+AWJMvvMgmq6*dhLJRSmk zV>H@*MFjbi)cy#g9~bH`oVM~;%!z)Vh`Dsnc4)FU*8QUP%=2B1iZ2a>R`vqDtho{f zJFa$+^FgzFOMwR1*O1)JwzJ{!|9NC9QKCOM4%~J$-f9u-Vp?;Fk1(ujP|0jXL!VG# zF!br)Gq$`nDrJaasPP02W0zl6SU2uU4Y_F}0`++iQsSw7tU3=jQ$4~_QLVDXK#7O$ zWs>_IQBW8CBWogMY%u4Sa@3j{&szeaE*6jk`D!^eo5Wz^S1M%+HtP9$2}7k^!lHVN z3~P-c0&Nx=zYbpL+>5qZoF@}?$a*mnv;Qcqa`r=cNf+zo_O*`N5bu7ZZ|XuhQtuo(DMwr7)$ zkmk>BN#E`mjM+8WDl@ELWHoqjWUDI*sF!Lg!V^7XTb{lHOau_;Y!`r>)5R*-x&Fem z`dfs@r}#-YphHCwx##w;#TdR_%%vW0D0}NWe_M%z*}Jrb-um_c$TEtZ1>JzN`mf@d zZ6$h=XnsEMyBf+W){xaXHa@4O z(lv%_I9Fs-<*YU*_4-0XEAh<;oEQOT-&kx^`SKG{kzMH)UVCQXvx)@@ z1RIGgPQnpl+~QNN6dF>c6*69&lzr05x0Yt*G&zuvc1g#4GGXH~WFYT)GnTb|o-=;E zAe9n+SJsr&bfUo<6|#vksMX!3JD*aUVyzlqk6CtS?*2tgDMZ~S>u}PfLpF7F$)Xxe zRi4?1?ZJ`LEL-0h==30O_|vlG*)5pZ$Cc(! zo^_{&PL8Rli8oyzr=bV*B8ci*j{|IVs_oMT4@or3hDQ5NL0$gXEXVq9d5@(K?HFwES7T}xT~YqKsl;y0Hb4pfxVzvna7wW6k=oA6=DKhkczr$fnhAVk=phk*K3nSfE8QWwRo4!N8EvEM~3S=@>V0v7v62nh5hzL8U z?7Q`4u~~YUabUDII&Y1q(=4W-Zix&xq4)r5BPh2asT04|3zVXqk<*JxJyxA7# zc%W?2SRkFeM%32KSf;cZ*+5wbJBzN)R}l=veBe5yKS@WSrUlEWprG? zt%V^|{+S<6hRJi-+->Z~VPT7Vy8Q^_oTvP<_4I-Cd2}p5eCWa3_lu15Z-e&kT<$aL zW`x_0s!Zm|YJqwv=CVbiY(3w`fv}dWJ&Ik{R?)0l5K;zt2(^`SsW;c|-KRrks5MmX zhBC({Rq(A@+y>xFBVVsDW^%chIA0$M=ssMScY>KUUBHl@hU&zo`xOlTUJ3>a+$Po2 z2!&2QqLrnqbt|=Tyo z%AV}rp1j0U_H%5!b$f~%%nPCqVR`&>yBW@Qa^csnk$7w3y7FlcyB8N2LQ1B6*Z!+r z0?^g$zRQk^ANEj0Oif(aM4K*wgY}!Fm!Jo^mi=R^N$SK5e0KaDPCxHa!wQp;mBJ3( zTOQ__kgGfRZl8J4)oQ{!w3b^cx;@cVIN?M)=u;K4lDa^4C^6sdXn1jdE!S|ev^sEj zY|dM^+^Bp;#UT$g+fkM^izU~#gYkr#*)EnV2Uvo+j5P;bc0YwFD7q9HUR zDo0WNKFtR@hcH8xG#{;~tHma~-Z9Y@)8@X#b**XM*?Lb(dZCJgee+Nq@~xsO0oPUS zod#cxuYH=DH7*omHv^;a-cI5cdn>apCGTjm4i7t0jBfAXY`~ibca;K=+BGEhP*(koDrBh@Io=a6=5Q-VOE4vRIOB>|1R0yR)Hx+A$dUNk=a~dLO zpT{}dX?_Y5w0QqzyCv`TRb(QadO#kp7LocmF0cYUdN_H>_E1b{9pxXXOz83iFkQDF z{o5YmRfx-t9Pu`3?+U+)Oh*NI%MyzO`4nDBJm&-e?Q2(qP#>ER<_i792_aqr9*kN& zWk8W_5P^Qds|j|=+-fWrCAnsYYy=dSOX;@U4s(q6PUb!#g0Ss5s%=z$xeD3t7duFt3v$WB&yLXbm z4#9S2Ybe6!zMnZS_1-OE^SKE+JLZe#XLvmy_s%a&MKo3FV2}jS;UhgGmQ!8g&5^bf zVko!W5))hMUiB^1TC|M2ooT4L6BBZpYGV8N38QN?E>6 z)DEQu;RB<0)wihFv`Lb7Oju7AT7yv0+?Y58eexYfHrU@WYyoTT$~9F}fY+v&uh{;3 zZ29AH8+TaQ-DsR|u7n_V$d{qtmMk8=Vw3I!jSNBV2m@+UoLnAm=nx>WgP z9jzjA0ak@O6dEmt4TpvK?L1Xd1-ZLsp~vWl#G&^jO|vCy?o^7LC4xvCq>E(;e4GP= zlvuu4#IN5E2-tY-Tt%wZub7QL760700nwD74|%J!nAL#1#b7QvTpM+_4%q5@!C3zQ zBrR<0W;-h2>S<85(*3)Z1mVHinj1> zEiior%pK9olAXsJo>J-)(be4B?PW|;j)W#_L@kF0th-;jxz&=&7EagMnJ5GdQH)Q8WpJ%7utmGuU5%EOI)Su0$X zEbDe@yD42l}biXL}esl=b+6QY-|e zeWupY%p*~VL2c$0-X>_fRtY~otz?(uQSsTj+(-AKFSQ;U^kxRiS+yot84KF=LxPbd z@DPd@h%((tKt9Fg#UOphV!JxNdB*3S$Zl~|(YF5i0b8L5wdgv|7@4)~$5C-k1TmO6 zKy?@zU*E2N*Dhll7V_4Lf|iNB(jVo3NR~lz7<=1&PBZYHqX(==>!(?|;Ai7~{i2_X zdgBubu&$=#n0h>y7hKKxVw%tXwa?TjV}N2eg&ws@zN%srAWj{dD1EJcg4m3ItO!Y( z%hDPx@F}y63UQBJ)N&SCD75&%ce!W(Za5vFjMtPc<=fBS0qPlD@x}iumnD|fv=0gX zxAdrHz&LbpmM9rlHg`$y`hMp`w@n#PE4l9dI{E%*)rz*7{)>;gM!+~F!OCo!KX2co zAz)`XNRuCob%l-No9j& z6-GvmN}s)j8y*)6Vd=Rh%73y^1OVdLTn0s@)<_6~;qE#`Ikc7SW0)6T?NDB|wcMd~ zwSKwwmXb(LG9Do#@SH}Qb1)x=o58ncSEiVFyN9jqWfjvrS*H%gJ?Rhdsdu@Rq}h1D z<3(kVj@s@|c$d~Vo?`z`Tbe8_q9RvDKuV|K1@QZ zUbO09$C_w+eHWHMV_>A#4|RH&!Ne=!^|Oa|XSO<4Ozc?45)zoSO>sb6Nux$N246L+ zA=28uqUr|CzYO}om3v$HT_CP=f-eouuP754DDVA|SR|Dj~Eg zh8GB-&w>o3Zp?yS7TF&B9?7C57FY|(%QsL?Hkq_MrK^XAyzNg*jG$(|U_!E+)%x_! zkjOKMpw#7|DHE>n%OM_sn6hN(qCt~qrd(x@VQk8)T#`Fs8~o076(p_o+rcf1v5Pk4 zVYN$3lf2h6hGE4ns^VUiGN7}}i*Bl9m(l2!_B7+9b)BuEi^i?{)YhY~yVj3VsnjLH z{v&*zErgcQ2ACrFEZ}y%oNsHE`X>sGM)?B46%nlm*MJvyP{h6N0u>z674(D*0YR$| zbG*fNQdlr6g12&8UMCG4@m`u9uSB8yCh%%OIkAiYv3n9#+VsdimM z{FeQ}XA;MzzvqkHVcu?eh5i?^>jF6go$MpOvh;u9aBK8@!{e_8?!5%Pe31 zF%D}wE(uzL%P`xiIiDT|lyJPr(W^4M10)I-zzPo+R4nWdUCDY)!?AiN{4+}zlLe`p z*gP-V8BF{vJ4}z36^i)^>abMa0s^J%sBzo6L+RF69bvdso6?1CBP4FzJCSB&#q8Mu z%%;CLvp_i=1naYX&TNIwo?fr+EOq7&$n-9H3rt2F+79K#1e4Cbqo*^e2T`HQxb#^; z9sR^!Jv`b!jy(5FZ8~Y!FpT#{@6sU@&a4e-+^y6D_dmJDivN_<6!H~K2XsE$WP*sC zbH+Aer#tz0$z~3kpN&^Iyb?2bha&inCE1?K{7D7_UW0p8o}?aBZ0xoGw%=si;0riy zXPIOZZMePh{4qJbm*eO*D6?!Rf=yy1$@N{pvuzf1jtSdVHma6%VU_@8gU}}E zRBiK3Y?=74Z>1A?={RA)G&A-sj}Sfx++N2H{=yw*NSWYyC6DOPa4EJkUKjHL!DW8D zYckB$*U&_boXbfqR8?q{0S^9meqEc#{k+^8iWTXt{QF<}C;sf4b$(kA&fQoi88R;E z(xPvt(8S)i9OJQa-b$SaBD4+77u8@lu#N3*qoRJGr;f0ED0vR|X8m#pRpet)1~Rr&E9L!1 z+;1Agmf`VK_w{ni$u;h=$t#`k>#DOzyS(|X>3IX~!Dr2=oY0F>00G3_-Fsvt!$AvH z=6i==Ow3E{?{Iro1;?**>1>;tE)^>MJzhR`s4n$9WI?rxg>Q>2bpfV@VQ>w%0wPUv z?ge@(Ry=FFXDS>USwf1I^|plkco&akhC(c;NISVU-+b3_evB zsi{-KfLlD3%`FTNw&y!>hEKQTUp?LqgX@Hs|6-@5PqRky8$**fp$hREVi7MiI)=I)r zkxKFD&vq%=~dsd#nGs$To3>-)~%9J0Gw;5GEnF@W#3?8UdS z;`!!!9V&r~VSArLr|(k5eIvNTcvOntX-MD$7p<*hzakc3zH-e!T_^5d>^qTVIVOl? zQSWn0cBa)Rn|@YU*sm8Lfdq5A^aDsrm5st<-XqyFgZCdH24giAm%p`~V%0>XuxJ_G z<~us!7++#+M2m5Qwdy0E2e&L^@V_tf3Aq}D$JgPHw8S%BkQu}d+pOe411p1TdfAlu zdZE2Gsf`JwSM1+d7Q=Vi8cK(!kr8GAdz&kS%RGkV**-*eu4UY$=*Sx&S!xvrCg3sLspBN?+%SeHy2aqb+7n>E!mUCU z=((7(vPh~&)ahJ@n5NH+)R?h5jWHk#5?DDOwSB@tI(h68cu^*|BU=Ig@o-l?o0~&Q)3-Z+lRftYJK`j&hX8tKuBlsYs>n4y&tPQ)|id5F^$T5W1+D zu)2L^iP&_7?-OpP_ncxx)L^XGI_Omi-C@aHox?y78SOIgtr~JB-DToSCYmNkzEUd* z162PJ|H0Aklqo4n*2jaVaZBqr&~PT|wW%QLN#;azy%H)K_{ey#bb_~A?jBE>ldS~6 z%+A1kL5-+n)LwCC&7xLNXaE=eXMeNCzp`w)NU?7K-Oq?-HATN5m?rfhW)6uEfD`b zE)x)mbB|I>%j9Oo`1QJxaPd5<85UNy20kFGvC}kxRbCEIs71-(0k?}G{Z{I zWsy7LAu_fPB#uw}PEAX;LS4sD4jrTg$mi?lhqBlhZEr+L!|L zQxO4_L!2L&=Uk1c*NKO#oQmQD-xt@byK?!($K$)Qq^-6rFiKyuIN51Fuv1_H$}KuF zI^&W#pzbx!Bqm2#0ql<$58eWtKRvO-%1~CEj@$GV9HtD-<@6Cf;K!q}v>0B$r04-p zrOo9w?4#HE6RdLVfhlF*V@p5Tmqrt&RnldW{m8QCp#gnzWB{ukNVrMq8FIhi*b6-KYuGi0lYD)=?NEKrPGjgag z@{+%8v6JGl5c^X&-(i1(5~bOKcFzzCa3oy02$#pSc-unW>cuhMQ&&_W)CPf@{FaEE zz=b1HOMM|2R)ll({31o? z?tYG>zxHk^HZt)qUTFn|8*U9p=g&d6Y=0AS>Dm9lc`6yP?6`5#q&Jql>clnA%6(RH zFLIgTqj7#LncT-omozs`$|k=ke^E5GZGJV9VlBy*Weh(B920=$qK?X1@xGgm*_w6sa-5SK&bwU? zWQ@Sn&0=Fm&2va;*`+4sU?<2Rh5^F`{wzkXy+Hx4@Ue7O#)g#Fmd<H_hC&z=hxOk=Vf0Zz|$ zhUQB*KS7h0=8uuheKzH z+Il-=f?hxZRtf=(Mv`7;aQ$i=#H;4RK#E%6%)vCItFRwuT5g_seOt7#De1Cup*+^~E8as-SzL9Kd z`Y|2LL?-!7Q-Ho5eE_V4di?Ov?%<<;^7m0aDor^gHmtkU&(XdFXye}j27-}}60Zk) zX;RS*R}C7jd0!>{Nq}}|6okX4-LvS0b-$3Zj%?Nn3%M_U{dP6GNV<<=lMffx_NRvB zq}7_w+h+@MZ;`~F?D#_E1>=M*wKak-Ft^*=iE6W6&Y;Gy$9a`3a?fP}VRb8N!54bz zKqRRcouMl(^vNzWndolV{S1e6GLQ<>Mu6Fm7O2>!NuJ-#R?~iAFtJvOG`tdjFL=wwE>OP*0! zl+mJh@VP&vdj8qtic6V=VC{JiZ}o570;x!CjqCt~yU{5k#1 zH2K%tGH+F4E#A*X2%6_Ph6-#gEbS8}EKy1JBYbbTtUfO+DP5a%J!oCl1DEENK&s^3v} zUZ+6N^2gSLFecy}(`_N8H*3T?PMcy|dxtQ@fWvriMp;F|KxgZf9{qE2soe@Z_y^Y} znA&m=spa%ER=eBFL-81mIEl0O?Oy@%Qi|mb||=ghGC7ahuW-zS6mUA_-=p!-V76h2AqE!w3K1Bwv2>v%wLa#lv4O$k2_byBFCu}`sS9gubA6#(l3hpwzz(U% zMmjR;pRv2f1a*rAGmKVOECx=wCr}RX3KkC3Q?k0U+JLPa72q2ovwcxad|P(EqLonx ztKGYV*TggH-$T})p0#_2Z-9#{8wvV%FEhtjJfW0efc(sCqhZSb*<^>wZ}k@Wrf%(K z^Z4yO->iHUN~?cU5MNwAw^v7zab8a(hHF_!`HTytfDou{0x&6WPg(W>2+a^b7w`EnC*P_|nSZXt)%lO^>N+;{dUOlMJw`I&TII^1*ydt#qIyUT+veN5Z(B^y%sM+?f5(xlqJHMzrU*f&BX23k8!GIrV* zHLUJLX%5`{TVxHEqULgq=QUd^9*x0HyiVe*hG>4wL$4Q@(raq(@S@_$OJhYKzh1(R z3bV^$%EAwW6S-05drEtzPi=L#%bHHlExk^!p=qIEB&ExKdd#lF46#xBViS(Oq+%{S z1e-T5_(XL)A0NEkoO`ZB+fsCY47r*-iqtzA=}bECP$1$`I@x*@KTk@6ZV^k<_KN+2 zeUd*>V+}i$fAs?x#jIc&`&b3#H4Fi-DGU4Hb&W3?Skz}EiaL5@iVtL(R_tYq-P-RuVF0N#trQL^ zA^Q23l~^guz;T@~3=hzdV&nOYr)7fOkWtp=Y)E4HOK=D%R{q8osY)SqzvuQpXLZo-ZyJQ(RAP~cmZ#SuXfYFm=zy*WhouM zvM1Pp#yQxNy~-@ww=RXT^JPz;-P%yH4uRuAT>2m=rWJ@f=PEktmcce{gULQaCzdP$ z|D)OX+~$&l?Mu&nM__9%5MV)XrRd8NQh(*&GH%0HG+1$Kq72a{$UO8;79XT=U%eXP zk-q2mP_Ec|zXA*_G>C?a9v^7MZF<-cv-+Hh@iF^)Yp+m`l7jVoPiQ-AxSvo;@3x^V zSwu5R#9Wu+g4Pike8{6e+UH|ZS)EqO>})X6QZ{?8V76_C!2AshO%4XFeAZo{0yQU% zPnJ#7o|3!&$U)2NUWi#q+6q=Yd>hd-xDGjF4*KL7L_A|ws)0R)#l)kpfMiI{#K^5D z_s_n2J4fpstoPaOg4qqrz)*~8*Vly0R8}f(Sbn0Bgyo>D2?lmL^Wr^ouWlT93tzN+ zJDU|XT%Q}q)yNEC=$r zxb6nGoK%09QNiw*baG&9OmXn>Ur5&@mWmr>+r2e`qyNK2AaCY3(a(g}Kj-LQSJon% zHc5hu**a_oOCfdUy4PGi@K=|G%`G3nj>jlNbDS~DnV_K`55g;t+Dt4xB^f2v-v(?pmuTa(< z6Dx)1g-pLIOE}Drq7QU#Myb^G%po84jpR5$C_hAO+g(nbBf~dfoW_~$%_e55g#r9m zDxQ!0ZAKNDFCy{HHm4sK-stXAx)h|s|Bpg@2s?ySjy2BYM!%cFyz+q^YqxJ-?PmSD-C58L) z1l)!RJDH}{T{^i6VLf6qyYvT{kiu`=Vz)1uxHHlCLVaRK<*XG|d(ht2kwO!_)P8YU z?E0m0b9S8sXIehu&U#?_$Chu;bheIJwpIoRH>)}rWBpX*QAEw0MbX6{urt(H2J0sc zjm`FDs|M7u3fe=-DV7&Z08jDbM`@OX46K~`kA)4yTDLq3N=7^ji5+uET-|!>9iG(} zhh$CSlv6#@l%q^rcXRO1(>n-L9u~(`R&4i~;cYbd$noqN7Z_E<-wr|+IKTvQXFTS% zYhy|047S16F5k#SsuTNvYI&vy$f;45eUr2Bh)dohnx20AlX3>9DdRrzy*}HAk!Oyz z!|S?3SV*Zzh%Ba33=|B&e1pLZ180=>@v!_p0T%CN?Vmnz|HRo^1BvhPnZF ztt_+4xi0e#@h#W0ZF_U#JaeRuOmC+`J4gBkQ@+%|2UzXf=2qr!^D}#mpWrRq7w+`Q z#jt!J`deT#P|~&(b-SvctAJ{EliQlPjGr&q&+NuT=8fvt-(Ou!L$OsTaThsk{5T-~JmKBgL#={VuWK3uhJ9;L;ljW~G;toT$qh%9YX}LU_eolMw z4phRF`cV0v{mRo~x`(aXyI`5dpTatCl)Sm(oL5BR=~G6EgN6>q(NU#*uNQFQusW7x z&45#$9;1Sh#G$J}I{tI@iT~oK8~Jz)w?J3um=cJEeppo{{;TahmFjjeWsuAa20!#{ zU18~2qEdnSos^Qz0>zJ6ewMCsNpMn<%&ODU3kKJCTGC8MQ|9wtk9`4BRk8lxO!55y zO@c+cAH}~;Ke_A&kSFjO10D~$l$x>o)j*BS(5duio;!x4wv zN~~>T&oj)I8Y(}T&eF79iH#V!6vH%$pYPW|6k)%v>w<%vkjYi51~&=_5zEB)_!vwZ zJOxP_BQAJIwB2vNPve5vS{DJuU;d2udJapxM0ZDthiPv21!wx*9M7|_jJwx`mw~I) z3%Vd1o($Rzpz87sDCoRO{>~S9q>;?&6t!M6$qy^Yq3NI5UtNu&s2KR|;Z->RNox3t zOWkP+y7ygwFwBe8BUTt*uoi&e_OAZ9OA z;;XKSL+zeM*|xJ)@8ZrY)-cXHK}#EMmnx(@%$VpOB~2Z}(8n5%=*iv~qp<{04lcx=kH|{)WiXOD^`{3@}j_vowjZYfI zJjAc&S+ZB=h<^p2>t#39=G?}XWnQ-N)D>=h(gSX?#HbA{tYCWL8pf2+jMiu@kLVK#i-q}_=9*ZVm}7hZ(-G} zUT)bRZA{N-kff|i zTNl~@cM^Gx1>A!(z+n`FuaQxWZjn0a&(us8nBQ@98 zt}I8q=0D&3Ia)*Paz7cL^Zql?e17g>=04GjmxmB#t$H~A)QJ5nvwy1Sh<_npr=LGh zF8=7Be@&r(BR*jZp)^*c@{a$)27l!eG;VV9)>JIPEDd2V#sZdWBu93w7QQ31j^cv?UIzGkq?-Y-Y{SLP)}LwG0YMnJ;t65a%J*Y!2nBhB@3 zqGXX!kDfYK$*s>TTgZ)exYC2KJTm*j#yJp=y?_bUd`x4fCkylA0s{k<6#b>m3z861 zV~@DU9tZe4{VeNx<$9(ERn<{)3|lW`uV9)Jvvpa)PPhB5B-1BSVTDL`@2nzj!o0-v z>GW}1XIvBua&nA&iUXD?y4+GhCRDN8nHu=q6TxAeAoaVUo9^+jpT}@dr{Qg+p|x$7 zgk`CwsYmf{rFEp$Sw{+4v|RTeYGBR{_D}4>r%i$u?cPWdZcEw27V?3@hEM% zt1b{BG?_#*SFZ5o0SBF_Yf{?pulyaPG0-e!6;&l_G5&G{)MjXdWKlAh?Tm#=4!rrT z&gWEe!(>sn9?B{*$2UNBph2%~UPlE>>J>wRmzUr=)l@s$6&}2h6-&!`;UIKOKt}@& zOR>NbJE#HF|_NYFYNAKX6Io{~d$0-i59%X=-H#gD{_Kq`H7P4tc3YMr&I-P!N z4vf41yiT^2w=kXI%1n>G$j;_(iQB>DVzW|vETGuLj5G4Y=vz~4mA(D?4i>q}`dW{( zaU-QrY@sVt1Loui5Xsvqe5u-ZJD7ieVRUZu?+{kv+F20bobs&NnLQ!EU_d3oKhkIRDuKQbX^( zs_3Q0&b*dgi;ylM1y-=KaWygq)_4vfDw}jDRCc+z;x~=E-29297s0M2S%qx*+b9k& zXK0FqXV&*M=$>SPx@>^5!(@1$ZL+v)~aYyk!Jktf;N^Z5YVee!pzg3Gm* zD%5yCM0&O!sxg7>E+gUU?II=a%qQ3I%yh$J&OCPk)A#GmWziq7L7u6xM!wwTj|DN+ zE0MyBH;LduO3v}0bi&T&;yn7B3X;6S4k$O4rLkQG(_k@>4!dnJ8L57s)K%?NVkPbQ zOx18AgF2G)HJVRW$wFnCU3AKvEub7Uweako%I3Qf3MBv9x{-;~3D zpQXUZn4479Z#rs>GL8}3hI-q9#sVz&;D0lRFg|uu2QLG|b1_kQ@oeLP;Je(|PA>l> zGyzB6|HUzBVv^euU+XJ|uxuMH&Ej~RK(q5v4xH-++8 z9mXeEqXDa$r0}DdBHqJ=U6j4dooPLjuEdbuKioT@prZqd)(fZa_+Kb zAK#((RmkwsYjUnWI3gcFsC#4hx7LPDJ6Dhp6Mg@>@vYXPhKfB4lWe`_NC)QGel?3| z+_pDb#z&)6j^B&Se7cPHsFf&EM4>^`sXuq*6&;bm;!MG~^W>H+*ZzZC1I@jBWq9YM zF@+-)Uh<(9c8rbg|g zs{EhpWb>KUiCmiJ>alTM?)`RE#xw^bjZTSa)51fvE+4OAvmASW-Wq&;sci6E31t?^ z>a*ly-pu8j>9L$^+sgiP_@>W~_Vq&1Ey5a(;iLm!-M2Bqtwx8_?+<*od;ie94yD!j z6^SV&nxflH8G6@G66Ba9+`C7a;+6ofS3Go; zR27*bl}#|zpZ@OHKRA<}xI(Rq*?jS0Vjw$ytLM(3z6}$Mi9V~@9M*sQXIRk5TDO3} zidxJ7{Wm~7=aKtyXl%PPgKs&qI|EK>IXC&lUB=1R{*uqYqh)cJvd1{?z4xVVaxNon zQ{GR;qDC}>Mn}rx=;epNcZG3nJ!Tmi(~|WgaBr_rS8pt11gyDa6Z>{(5-Vxs_jrqQy;&QW$Bd#8>WAM9i!c$!&x2Znaa^= zG4&MxG5g0SN8NjX%>`&?XSb73voD%s;aJrh&E9iL4okqCo}MrsE_W{`9VhEa6>oAo%s$iADQ1Vy=$hE-J5 z8YOjwm#d+uU5gP%+Dv2*0_cy}pfS~q7V{Hqb`2ct7WQhp>1QXs)#SX#r`b5e1c1os zL4u24gh=iJ@*G_ER6dS|8^uEN9xZV2Kf-WLdg&LEqqb_tN9@+FWW&IyG54{jX1BD3 zSnMKkx6^idR4wL7KBRP+qrCoolGg|J^p0uj4@IssA_&@qh-Q`!x{22!rr|w$>d0Mx z0{-U+^m_>5TOo?TUY8B=cm7s8Am%-n4z~P@&d2QA|4ri8-0`dI_Nh;6y^#ygNgl+k z_`buSEh8F!BobH>_^1+K7_I@7o0e!h z2(8Yv%tVQ_5?t@z-U5=z6q7NyAUDPOVd=+h@VSGbhj3lZezevDB@z>^JOqKn$(U#! zLVus1_usUDMj4Zu1R!K0l8=S}#qJatbAv_Jw3xOhbGu(OQ8HJdhW;B5A$|e$40D+uB zNmlhV=|%_P!ois0c|GpvsywQQ&m|f$M=I$N8htbgYJ)1rDcyrA1miuRJW>-OG)o-M zB_kAZ`k6Rgz;7m+vLj0zSDIqM^PYn0^%4QYD~(MvWrmTK+~?{SYWWlWjDZ;wzQDac zo2`XzrSc^>wLOO&G!Q60m6^NbA=LRCTaK4bL&~pOFDtcd`aIC?i&K9mQF45a=LKIvXK6i1R%9 zTT+t^;ATI0`K(O+V$hbkf95e0tY zu5MDMZ~6Y17Byl&ZXA?fLA-1GV|Fp4d?QKD% z{+~LoGpfm~35U=GLs>-WRUo1Wh*@C)>1BaMny8dW(a@LPdkIZCf)u3)(lvAlB_d6N zC@n}5Is~K!B!&*|2cBJ7J>TB<$2{kr_nEnOe$1Wu^K1+K`k{WJ6n^`_&GVhTZ!@Ts zk*VtSII#9E@~kn&;|8n4wDCt>Xh_dAokbYDIhST^<)Ew)pjb?(Xi)zOo1Yfnd<^?d z7aK2KS+3d=TfCpU4-QX_YWdQ*4Dy<>xanm$M1kI0L&h43QWZ1ywB2BO@|jw_g=`Pi z9cR1an7xG@tvLuaFWY66^`gb4WhZu(u&Q5}nzKPs)UJnW*de;6mhp!w1-W{X>_Jvh z?Q~eZ&E~v0ViW7+^6ooU%Hdos7vx4;nyH+B@@Udg-Lu*5I?my3482)mgTa<&hc%h$ z$1-(~o>TrT1ptsi2>`JDyG*%SxqC`lxY|2=oYbmFOrLg_Bx~qwP@dqkBb@nI79)hG zJfEvOvT)`ynI+m%L{v9r1=Dv=)LOe)F7ETfn}J>?f=MA0UJk}U>mEs=g~8p)Iv2f2 zAc|1VN4={{Z_sd;yue8Ph=f?7eg6Kby5i%q{?ty~+H1*9go3b1vw*&uUrGEGLAW@j zVR8CJTF?@S*KMh8$pJiU%5V#WV$rr#dUs24`)c$-#?$B?a4N-c!>p^Oz}JBkX3Zxu zZ-bjI;`ezO{2)u|SWheE3qU;m?^1k!s94s}tOrRRopr#=ro1nJ>U0FUaFIK7-?`g& zLiNqd3=P-fO!UqBRAMF8ZHIznhn9BoH)Yd55SGf)N)j82gJMb{=_Af+cinrbvDp);=~wF($3m? z_8oZ?r*188X`XLuAJHOcDwcdcHbxaqUx1B}*?f>XMv>HtOH%Nw=K1WsHtD5!)F3ET zT-{yBi%;C2pmX+fDhWoTawq9Wm1~2G6|rlGb6e78%T$e8YcE5+CyWdDOQSs}cLBp* zgne|25Q$0hs7hgY)vt`vMg+kZo)RQ?s~rvTBBy$k?i5{^zk5ymw_h^Cn-*@%N-AHi zFz_fnL?;r(8*@Cb(Q5Ng3uT9Ue9bBUSj+;&rmth_k}>sDpOn%a zM;C-&Ma^{`CHr4?L{6f8(E>>N|SbbFy%FANP?-kM4^WiKiCNKRF5;7}pv z185$@y0k9yB*|zM5q<%edCJcTr6)$OzU^2vartOyBI<>5W>+MUuaO%1&t;N~B==OC z@<59b*tNE~5dIoM9UB5SIl|vKQrFyNXuWZ<%xuZ20J<^dBfpMIA?_{{R$SQki;6tW z_F9>38~5o#K2MS{veNoR=>x_Ka~jF)FZFfZwBLH&f#-I1;MtAoWpQ_hgt> z*G*VdO@pg>e5^&?RkKLATfW$hSJA_1bY?7mxqW6_^4J6pa5Jo47|0Iqzl!yn*^*rb zPZ6DY)5NqN_Rc?i*c{;m`PJH_=Ak#RCZJIct^2{@cX$VCoM*P!=2{l3PviC0(9xP8 zoDPRmjRdl8JIgk*MWQ+5c47;-H9^BDvG10pD(84`Qj52P$A()_t4K{(G*0g(ukX(N z(1^FWL{ego%9x1;gn_NE62XQ`3Phm~4X~az6hrf#cFp3ukVz+CuTz{DGO*#2k&2vm z#-LZcR|2Ojyr~*dX)p?xlrGeM3hJ1M2mi@A_nuS`HLZg}+R`2>Y>$HR&2LyNz=^(d zJF;OtkKqSgUiEyJ)rKJ5EccSl?wgela)y6!Y}CGTr7D{;2l;T*fS7-OyK3DU=g#1> zXHIP@oP2}Iy1}=6#;&%jI$LwF>mwWA`ONC2mj<=9!lm5QJwZJcj!`@%^Teh{resVh zeqiBDTEgm+is|#kS~|tORCf&6^tfaySEJqg7SrPb)EqARvg7>6`Y4WHe88Ag$QtnI zOEPj!5c~R(=NVl8)XG+g=*uK74_-?Dm=`UL^{!XOFV~a=0AGcBx@56h@vNzhvr$si zA^61G09CC)k|~Z}RnGe(cgONX`L7f|Uq#`hGyqTtE?6X_Zbt07%XSqDs*6Oy8{1hUj1b z{VAj&=Te|-(Lmazo0R?op;OoMcR+tbE~O2I{2iLX07?@)B}zJU>U3iXMMs{Z@^=BE zq{F6G<>^|tav_EhIv`2f$)oKaN*QFW;)iBY`>3x)iWtP|tJ4io5SiK(Nqz8Yqy z!#~9mgQT(+4=dH-UpI_tVSVf(@XgMNMT_YI|qUj^2)nSFF)T0U9%REm2~h0Lu8=83N-x>Yyd)Yu~q z9l$_)k^!Q~&9s5DvvRhe*Pjl(vh{8Y=aB;C2W;Aya%&yyCpfB_UEV&Iv*o5ssGWFF zbu_>?&Lxq=vc^ASrI@g9Z-~G9InTwva(dj~v8ml^vbysDFiyCe3ZsV{Z`>g+el4!f zuWHBPcFjX%ZusctIVh2O?MNiQOd=<9I7hPkMOQF=>~0Jk4*u%0nj@YL?X{(+jf{%W zhDQW5%~}q+O2)cYZ3uAFK)9pSWI$oAG2IW+6bD4~I@>Kc_-?X+bp+h$=ASJSe3kgM z)Wjp7T@T}CIwO>T7EbXfP9{)<39&Rm1T)pV?<`O27wYBFJAd^R-rrU%jY-3+y+&6$ zsei?0taL<>5Qc0VPqe!chdALD34@x0^aqGNLdM!_wcd5ias0v5$&5?*pzWJ*O4FJH z7U33`GjKvr>6p3)`nT(7lM3%4G53CM_tA1FB|JWV=?BwUB=+sHtvEbIJlkY8( Wz793b$xk%LpUZJK>UVNi!2bZ0eY0o) literal 0 HcmV?d00001