From d45d577c9ec1f0a5cae3a9bccd4d8f66f735dcdc Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 01:18:24 +0200 Subject: [PATCH 01/11] Update board generation, use renamed function --- tools/json/adafruit_feather.json | 8 +++----- tools/json/adafruit_itsybitsy.json | 8 +++----- tools/json/adafruit_kb2040.json | 8 +++----- tools/json/adafruit_macropad2040.json | 8 +++----- tools/json/adafruit_qtpy.json | 8 +++----- tools/json/adafruit_stemmafriend.json | 8 +++----- tools/json/adafruit_trinkeyrp2040qt.json | 8 +++----- tools/json/arduino_nano_connect.json | 8 +++----- tools/json/challenger_2040_lora.json | 8 +++----- tools/json/challenger_2040_lte.json | 8 +++----- tools/json/challenger_2040_wifi.json | 8 +++----- tools/json/challenger_2040_wifi_ble.json | 8 +++----- tools/json/challenger_nb_2040_wifi.json | 8 +++----- tools/json/cytron_maker_nano_rp2040.json | 8 +++----- tools/json/cytron_maker_pi_rp2040.json | 8 +++----- tools/json/dfrobot_beetle_rp2040.json | 8 +++----- tools/json/flyboard2040_core.json | 8 +++----- tools/json/generic.json | 8 +++----- tools/json/ilabs_rpico32.json | 8 +++----- tools/json/melopero_shake_rp2040.json | 8 +++----- tools/json/rpipico.json | 8 +++----- tools/json/seeed_xiao_rp2040.json | 8 +++----- tools/json/solderparty_rp2040_stamp.json | 8 +++----- tools/json/sparkfun_promicrorp2040.json | 8 +++----- tools/json/sparkfun_thingplusrp2040.json | 8 +++----- tools/json/upesy_rp2040_devkit.json | 8 +++----- tools/json/wiznet_5100s_evb_pico.json | 8 +++----- tools/json/wiznet_5500_evb_pico.json | 8 +++----- tools/json/wiznet_wizfi360_evb_pico.json | 8 +++----- tools/makeboards.py | 8 +++----- tools/platformio-build.py | 4 ++-- 31 files changed, 92 insertions(+), 152 deletions(-) diff --git a/tools/json/adafruit_feather.json b/tools/json/adafruit_feather.json index dec96a673..46c114d37 100644 --- a/tools/json/adafruit_feather.json +++ b/tools/json/adafruit_feather.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "adafruit_feather", "arduino": { "earlephilhower": { - "variant": "adafruit_feather", "boot2_source": "boot2_w25x10cl_4_padded_checksum.S", "usb_vid": "0x239a", - "usb_pid": "0x80f1", - "usb_manufacturer": "Adafruit", - "usb_product": "Feather RP2040" + "usb_pid": "0x80f1" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Adafruit" -} \ No newline at end of file +} diff --git a/tools/json/adafruit_itsybitsy.json b/tools/json/adafruit_itsybitsy.json index 14622dd3d..3119dac8b 100644 --- a/tools/json/adafruit_itsybitsy.json +++ b/tools/json/adafruit_itsybitsy.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "adafruit_itsybitsy", "arduino": { "earlephilhower": { - "variant": "adafruit_itsybitsy", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x239a", - "usb_pid": "0x80fd", - "usb_manufacturer": "Adafruit", - "usb_product": "ItsyBitsy RP2040" + "usb_pid": "0x80fd" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Adafruit" -} \ No newline at end of file +} diff --git a/tools/json/adafruit_kb2040.json b/tools/json/adafruit_kb2040.json index 4be755fcd..d77f37a48 100644 --- a/tools/json/adafruit_kb2040.json +++ b/tools/json/adafruit_kb2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "adafruit_kb2040", "arduino": { "earlephilhower": { - "variant": "adafruit_kb2040", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x239a", - "usb_pid": "0x8105", - "usb_manufacturer": "Adafruit", - "usb_product": "KB2040" + "usb_pid": "0x8105" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Adafruit" -} \ No newline at end of file +} diff --git a/tools/json/adafruit_macropad2040.json b/tools/json/adafruit_macropad2040.json index c0662547b..34c7a1220 100644 --- a/tools/json/adafruit_macropad2040.json +++ b/tools/json/adafruit_macropad2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "adafruit_macropad2040", "arduino": { "earlephilhower": { - "variant": "adafruit_macropad2040", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x239a", - "usb_pid": "0x8107", - "usb_manufacturer": "Adafruit", - "usb_product": "MacroPad RP2040" + "usb_pid": "0x8107" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Adafruit" -} \ No newline at end of file +} diff --git a/tools/json/adafruit_qtpy.json b/tools/json/adafruit_qtpy.json index 21f09fa6e..f37230829 100644 --- a/tools/json/adafruit_qtpy.json +++ b/tools/json/adafruit_qtpy.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "adafruit_qtpy", "arduino": { "earlephilhower": { - "variant": "adafruit_qtpy", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x239a", - "usb_pid": "0x80f7", - "usb_manufacturer": "Adafruit", - "usb_product": "QT Py RP2040" + "usb_pid": "0x80f7" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Adafruit" -} \ No newline at end of file +} diff --git a/tools/json/adafruit_stemmafriend.json b/tools/json/adafruit_stemmafriend.json index 89a8f0c62..d9c166715 100644 --- a/tools/json/adafruit_stemmafriend.json +++ b/tools/json/adafruit_stemmafriend.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "adafruit_stemmafriend", "arduino": { "earlephilhower": { - "variant": "adafruit_stemmafriend", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x239a", - "usb_pid": "0x80e3", - "usb_manufacturer": "Adafruit", - "usb_product": "STEMMA Friend RP2040" + "usb_pid": "0x80e3" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Adafruit" -} \ No newline at end of file +} diff --git a/tools/json/adafruit_trinkeyrp2040qt.json b/tools/json/adafruit_trinkeyrp2040qt.json index 6c873c93f..3472ccc1f 100644 --- a/tools/json/adafruit_trinkeyrp2040qt.json +++ b/tools/json/adafruit_trinkeyrp2040qt.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "adafruit_trinkeyrp2040qt", "arduino": { "earlephilhower": { - "variant": "adafruit_trinkeyrp2040qt", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x239a", - "usb_pid": "0x8109", - "usb_manufacturer": "Adafruit", - "usb_product": "Trinkey RP2040 QT" + "usb_pid": "0x8109" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Adafruit" -} \ No newline at end of file +} diff --git a/tools/json/arduino_nano_connect.json b/tools/json/arduino_nano_connect.json index a294f93d8..a8235e0a3 100644 --- a/tools/json/arduino_nano_connect.json +++ b/tools/json/arduino_nano_connect.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "arduino_nano_connect", "arduino": { "earlephilhower": { - "variant": "arduino_nano_connect", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2341", - "usb_pid": "0x0058", - "usb_manufacturer": "Arduino", - "usb_product": "Nano RP2040 Connect" + "usb_pid": "0x0058" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Arduino" -} \ No newline at end of file +} diff --git a/tools/json/challenger_2040_lora.json b/tools/json/challenger_2040_lora.json index e47abf45b..7e75c3970 100644 --- a/tools/json/challenger_2040_lora.json +++ b/tools/json/challenger_2040_lora.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "challenger_2040_lora", "arduino": { "earlephilhower": { - "variant": "challenger_2040_lora", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1023", - "usb_manufacturer": "iLabs", - "usb_product": "Challenger 2040 LoRa" + "usb_pid": "0x1023" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "iLabs" -} \ No newline at end of file +} diff --git a/tools/json/challenger_2040_lte.json b/tools/json/challenger_2040_lte.json index 7b5991bd4..5e59e2d59 100644 --- a/tools/json/challenger_2040_lte.json +++ b/tools/json/challenger_2040_lte.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "challenger_2040_lte", "arduino": { "earlephilhower": { - "variant": "challenger_2040_lte", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x100b", - "usb_manufacturer": "iLabs", - "usb_product": "Challenger 2040 LTE" + "usb_pid": "0x100b" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "iLabs" -} \ No newline at end of file +} diff --git a/tools/json/challenger_2040_wifi.json b/tools/json/challenger_2040_wifi.json index 51111116e..e286c814c 100644 --- a/tools/json/challenger_2040_wifi.json +++ b/tools/json/challenger_2040_wifi.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "challenger_2040_wifi", "arduino": { "earlephilhower": { - "variant": "challenger_2040_wifi", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1006", - "usb_manufacturer": "iLabs", - "usb_product": "Challenger 2040 WiFi" + "usb_pid": "0x1006" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "iLabs" -} \ No newline at end of file +} diff --git a/tools/json/challenger_2040_wifi_ble.json b/tools/json/challenger_2040_wifi_ble.json index b7f1783b4..78cfefa2a 100644 --- a/tools/json/challenger_2040_wifi_ble.json +++ b/tools/json/challenger_2040_wifi_ble.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "challenger_2040_wifi_ble", "arduino": { "earlephilhower": { - "variant": "challenger_2040_wifi_ble", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x102C", - "usb_manufacturer": "iLabs", - "usb_product": "Challenger 2040 WiFi/BLE" + "usb_pid": "0x102C" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "iLabs" -} \ No newline at end of file +} diff --git a/tools/json/challenger_nb_2040_wifi.json b/tools/json/challenger_nb_2040_wifi.json index b1ee1144b..8adff8600 100644 --- a/tools/json/challenger_nb_2040_wifi.json +++ b/tools/json/challenger_nb_2040_wifi.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "challenger_nb_2040_wifi", "arduino": { "earlephilhower": { - "variant": "challenger_nb_2040_wifi", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x100b", - "usb_manufacturer": "iLabs", - "usb_product": "Challenger NB 2040 WiFi" + "usb_pid": "0x100b" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "iLabs" -} \ No newline at end of file +} diff --git a/tools/json/cytron_maker_nano_rp2040.json b/tools/json/cytron_maker_nano_rp2040.json index cb7314cbb..2b7899562 100644 --- a/tools/json/cytron_maker_nano_rp2040.json +++ b/tools/json/cytron_maker_nano_rp2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "cytron_maker_nano_rp2040", "arduino": { "earlephilhower": { - "variant": "cytron_maker_nano_rp2040", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x100f", - "usb_manufacturer": "Cytron", - "usb_product": "Maker Nano RP2040" + "usb_pid": "0x100f" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Cytron" -} \ No newline at end of file +} diff --git a/tools/json/cytron_maker_pi_rp2040.json b/tools/json/cytron_maker_pi_rp2040.json index d5ed15c51..a3985acfe 100644 --- a/tools/json/cytron_maker_pi_rp2040.json +++ b/tools/json/cytron_maker_pi_rp2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "cytron_maker_pi_rp2040", "arduino": { "earlephilhower": { - "variant": "cytron_maker_pi_rp2040", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1000", - "usb_manufacturer": "Cytron", - "usb_product": "Maker Pi RP2040" + "usb_pid": "0x1000" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Cytron" -} \ No newline at end of file +} diff --git a/tools/json/dfrobot_beetle_rp2040.json b/tools/json/dfrobot_beetle_rp2040.json index 95df8f84f..f0c1f5504 100644 --- a/tools/json/dfrobot_beetle_rp2040.json +++ b/tools/json/dfrobot_beetle_rp2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "dfrobot_beetle_rp2040", "arduino": { "earlephilhower": { - "variant": "dfrobot_beetle_rp2040", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x3343", - "usb_pid": "0x4253", - "usb_manufacturer": "DFRobot", - "usb_product": "Beetle RP2040" + "usb_pid": "0x4253" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "DFRobot" -} \ No newline at end of file +} diff --git a/tools/json/flyboard2040_core.json b/tools/json/flyboard2040_core.json index b60e0baa7..b7f0b8331 100644 --- a/tools/json/flyboard2040_core.json +++ b/tools/json/flyboard2040_core.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "flyboard2040_core", "arduino": { "earlephilhower": { - "variant": "flyboard2040_core", "boot2_source": "boot2_generic_03h_4_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x008a", - "usb_manufacturer": "DeRuiLab", - "usb_product": "FlyBoard2040Core" + "usb_pid": "0x008a" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "DeRuiLab" -} \ No newline at end of file +} diff --git a/tools/json/generic.json b/tools/json/generic.json index fa89b117a..4785e678b 100644 --- a/tools/json/generic.json +++ b/tools/json/generic.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "generic", "arduino": { "earlephilhower": { - "variant": "generic", "boot2_source": "boot2_generic_03h_4_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0xf00a", - "usb_manufacturer": "Generic", - "usb_product": "RP2040" + "usb_pid": "0xf00a" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Generic" -} \ No newline at end of file +} diff --git a/tools/json/ilabs_rpico32.json b/tools/json/ilabs_rpico32.json index 058e45816..ee1dedfd5 100644 --- a/tools/json/ilabs_rpico32.json +++ b/tools/json/ilabs_rpico32.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "ilabs_rpico32", "arduino": { "earlephilhower": { - "variant": "ilabs_rpico32", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1010", - "usb_manufacturer": "iLabs", - "usb_product": "RPICO32" + "usb_pid": "0x1010" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "iLabs" -} \ No newline at end of file +} diff --git a/tools/json/melopero_shake_rp2040.json b/tools/json/melopero_shake_rp2040.json index 98134575f..761f215c2 100644 --- a/tools/json/melopero_shake_rp2040.json +++ b/tools/json/melopero_shake_rp2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "melopero_shake_rp2040", "arduino": { "earlephilhower": { - "variant": "melopero_shake_rp2040", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1005", - "usb_manufacturer": "Melopero", - "usb_product": "Shake RP2040" + "usb_pid": "0x1005" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Melopero" -} \ No newline at end of file +} diff --git a/tools/json/rpipico.json b/tools/json/rpipico.json index 4d688ab7a..b5020bc10 100644 --- a/tools/json/rpipico.json +++ b/tools/json/rpipico.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "rpipico", "arduino": { "earlephilhower": { - "variant": "rpipico", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x000a", - "usb_manufacturer": "Raspberry Pi", - "usb_product": "Pico" + "usb_pid": "0x000a" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Raspberry Pi" -} \ No newline at end of file +} diff --git a/tools/json/seeed_xiao_rp2040.json b/tools/json/seeed_xiao_rp2040.json index d70f69619..8609f62ed 100644 --- a/tools/json/seeed_xiao_rp2040.json +++ b/tools/json/seeed_xiao_rp2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "seeed_xiao_rp2040", "arduino": { "earlephilhower": { - "variant": "seeed_xiao_rp2040", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x000a", - "usb_manufacturer": "Seeed", - "usb_product": "XAIO RP2040" + "usb_pid": "0x000a" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Seeed" -} \ No newline at end of file +} diff --git a/tools/json/solderparty_rp2040_stamp.json b/tools/json/solderparty_rp2040_stamp.json index 6f3ac69aa..57280be31 100644 --- a/tools/json/solderparty_rp2040_stamp.json +++ b/tools/json/solderparty_rp2040_stamp.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "solderparty_rp2040_stamp", "arduino": { "earlephilhower": { - "variant": "solderparty_rp2040_stamp", "boot2_source": "boot2_generic_03h_4_padded_checksum.S", "usb_vid": "0x1209", - "usb_pid": "0xa182", - "usb_manufacturer": "Solder Party", - "usb_product": "RP2040 Stamp" + "usb_pid": "0xa182" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "Solder Party" -} \ No newline at end of file +} diff --git a/tools/json/sparkfun_promicrorp2040.json b/tools/json/sparkfun_promicrorp2040.json index 630630ef8..efd2fee49 100644 --- a/tools/json/sparkfun_promicrorp2040.json +++ b/tools/json/sparkfun_promicrorp2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "sparkfun_promicrorp2040", "arduino": { "earlephilhower": { - "variant": "sparkfun_promicrorp2040", "boot2_source": "boot2_generic_03h_4_padded_checksum.S", "usb_vid": "0x1b4f", - "usb_pid": "0x0026", - "usb_manufacturer": "SparkFun", - "usb_product": "ProMicro RP2040" + "usb_pid": "0x0026" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "SparkFun" -} \ No newline at end of file +} diff --git a/tools/json/sparkfun_thingplusrp2040.json b/tools/json/sparkfun_thingplusrp2040.json index 982b55a12..9c4a14cc7 100644 --- a/tools/json/sparkfun_thingplusrp2040.json +++ b/tools/json/sparkfun_thingplusrp2040.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "sparkfun_thingplusrp2040", "arduino": { "earlephilhower": { - "variant": "sparkfun_thingplusrp2040", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x1b4f", - "usb_pid": "0x0026", - "usb_manufacturer": "SparkFun", - "usb_product": "Thing Plus RP2040" + "usb_pid": "0x0026" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "SparkFun" -} \ No newline at end of file +} diff --git a/tools/json/upesy_rp2040_devkit.json b/tools/json/upesy_rp2040_devkit.json index 3452f7ea4..dcf85d475 100644 --- a/tools/json/upesy_rp2040_devkit.json +++ b/tools/json/upesy_rp2040_devkit.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "upesy_rp2040_devkit", "arduino": { "earlephilhower": { - "variant": "upesy_rp2040_devkit", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1007", - "usb_manufacturer": "uPesy", - "usb_product": "RP2040 DevKit" + "usb_pid": "0x1007" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "uPesy" -} \ No newline at end of file +} diff --git a/tools/json/wiznet_5100s_evb_pico.json b/tools/json/wiznet_5100s_evb_pico.json index 2e66dbaff..1f8235860 100644 --- a/tools/json/wiznet_5100s_evb_pico.json +++ b/tools/json/wiznet_5100s_evb_pico.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "wiznet_5100s_evb_pico", "arduino": { "earlephilhower": { - "variant": "wiznet_5100s_evb_pico", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1027", - "usb_manufacturer": "WIZnet", - "usb_product": "W5100S-EVB-Pico" + "usb_pid": "0x1027" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "WIZnet" -} \ No newline at end of file +} diff --git a/tools/json/wiznet_5500_evb_pico.json b/tools/json/wiznet_5500_evb_pico.json index 27bfe0de8..a39122f9b 100644 --- a/tools/json/wiznet_5500_evb_pico.json +++ b/tools/json/wiznet_5500_evb_pico.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "wiznet_5500_evb_pico", "arduino": { "earlephilhower": { - "variant": "wiznet_5500_evb_pico", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1029", - "usb_manufacturer": "WIZnet", - "usb_product": "W5500-EVB-Pico" + "usb_pid": "0x1029" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "WIZnet" -} \ No newline at end of file +} diff --git a/tools/json/wiznet_wizfi360_evb_pico.json b/tools/json/wiznet_wizfi360_evb_pico.json index e696ca2c6..43f00bc0d 100644 --- a/tools/json/wiznet_wizfi360_evb_pico.json +++ b/tools/json/wiznet_wizfi360_evb_pico.json @@ -11,14 +11,12 @@ ] ], "mcu": "rp2040", + "variant": "wiznet_wizfi360_evb_pico", "arduino": { "earlephilhower": { - "variant": "wiznet_wizfi360_evb_pico", "boot2_source": "boot2_w25q080_2_padded_checksum.S", "usb_vid": "0x2e8a", - "usb_pid": "0x1028", - "usb_manufacturer": "WIZnet", - "usb_product": "WizFi360-EVB-Pico" + "usb_pid": "0x1028" } } }, @@ -49,4 +47,4 @@ }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "WIZnet" -} \ No newline at end of file +} diff --git a/tools/makeboards.py b/tools/makeboards.py index c8c06dcb5..efa2339e7 100755 --- a/tools/makeboards.py +++ b/tools/makeboards.py @@ -188,14 +188,12 @@ def MakeBoardJSON(name, vendor_name, product_name, vid, pid, pwr, boarddefine, f ] ], "mcu": "rp2040", + "variant": "VARIANTNAME", "arduino": { "earlephilhower": { - "variant": "VARIANTNAME", "boot2_source": "BOOT2.S", "usb_vid": "VID", - "usb_pid": "PID", - "usb_manufacturer": "VENDORNAME", - "usb_product": "PRODUCTNAME" + "usb_pid": "PID" } } }, @@ -226,7 +224,7 @@ def MakeBoardJSON(name, vendor_name, product_name, vid, pid, pwr, boarddefine, f }, "url": "https://www.raspberrypi.org/products/raspberry-pi-pico/", "vendor": "VENDORNAME" -}""".replace('VARIANTNAME', name).replace('BOARDDEFINE', boarddefine).replace('BOOT2', boot2).replace('VID', vid).replace('PID', pid).replace('VENDORNAME', vendor_name).replace('PRODUCTNAME', product_name).replace('FLASHSIZE', str(1024*1024*flashsizemb)).replace('USBPWR', str(pwr)) +}\n""".replace('VARIANTNAME', name).replace('BOARDDEFINE', boarddefine).replace('BOOT2', boot2).replace('VID', vid).replace('PID', pid).replace('VENDORNAME', vendor_name).replace('PRODUCTNAME', product_name).replace('FLASHSIZE', str(1024*1024*flashsizemb)).replace('USBPWR', str(pwr)) jsondir = os.path.abspath(os.path.dirname(__file__)) + "/json" f = open(jsondir + "/" + name + ".json", "w") f.write(json) diff --git a/tools/platformio-build.py b/tools/platformio-build.py index 6488ddcd4..70e7f0413 100755 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -223,8 +223,8 @@ def configure_usb_flags(cpp_defines): # if no custom linker script is provided, we use the command that we prepared to generate one. if not board.get("build.ldscript", ""): - # execute fetch filesystem info stored in env to alawys have that info ready - env["fetch_fs_size"](env) + # execute fetch filesystem info stored in env to always have that info ready + env["__fetch_fs_size"](env) env.Depends("$BUILD_DIR/${PROGNAME}.elf", linkerscript_cmd) env.Replace(LDSCRIPT_PATH=os.path.join("$BUILD_DIR", "memmap_default.ld")) From 286ec3d15974b88f75bcc5d364ddc77e332052be Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 01:49:03 +0200 Subject: [PATCH 02/11] Update documentation with new platform integration state --- .vscode/settings.json | 3 +++ docs/platformio.rst | 45 +++++++++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..73dc9f31c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "restructuredtext.preview.name": "docutils" +} \ No newline at end of file diff --git a/docs/platformio.rst b/docs/platformio.rst index ea622549c..f57c5ae76 100644 --- a/docs/platformio.rst +++ b/docs/platformio.rst @@ -19,14 +19,14 @@ The PlatformIO experience: Refer to the general documentation at https://docs.platformio.org/. -Especially useful is the `Getting started with VSCode + PlatformIO `__ page. +Especially useful is the `Getting started with VSCode + PlatformIO `_, `CLI reference `_ and the `platformio.ini options `_ page. Hereafter it is assumed that you have a basic understanding of PlatformIO in regards to project creation, project file structure and building and uploading PlatformIO projects, through reading the above pages. Current state of development ---------------------------- -At the time of writing, PlatformIO integration for this core is a work-in-progress and not yet merged into mainline PlatformIO. This is subject to change soon. +At the time of writing, PlatformIO integration for this core is a work-in-progress and not yet merged into mainline PlatformIO. This is subject to change once `this pull request `_ is merged. If you want to use the PlatformIO integration right now, make sure you first create a standard Raspberry Pi Pico + Arduino project within PlatformIO. This will give you a project with the ``platformio.ini`` @@ -47,12 +47,34 @@ You *also* need to inject two PlatformIO packages, one for the compiler toolchai platform = https://github.com/maxgerhardt/platform-raspberrypi.git board = pico framework = arduino + + +When the support for this core has been merged into mainline PlatformIO, this notice will be removed and a standard `platformio.ini` as shown above will work as a base. + +Deprectation warnings +--------------------- + +Previous versions of this documentation told users to inject the framework and toolchain package into the project by using + +.. code:: ini + ; note that download link for toolchain is specific for OS. see https://github.com/earlephilhower/pico-quick-toolchain/releases. platform_packages = maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-7855b0c.210706.zip - -When the support for this core has been merged into mainline PlatformIO, this notice will be removed and a standard `platformio.ini` as shown above will work as a base. + +This is now **deprecated** and should not be done anymore. Users should delete these ``platform_packages`` lines and update the platform integration by issuing the commands + +.. code:: ini + + pio pkg update https://github.com/maxgerhardt/platform-raspberrypi.git + +in the `PlatformIO CLI `_. The same can be achieved by using the VSCode PIO Home -> Platforms -> Updates GUI. + +The toolchain, which was also renamed to ``toolchain-rp2040-earlephilhower`` is downloaded automatically from the registry. The same goes for the ``framework-arduinopico`` toolchain package, which points directly to the Arduino-Pico Github repository. +However, users can still select a custom fork or branch of the core if desired so, as detailed in a chapter below. + +As the pull req Selecting the new core ---------------------- @@ -61,8 +83,8 @@ Prerequisite for using this core is to tell PlatformIO to switch to it. There will be board definition files where the Earle-Philhower core will be the default since it's a board that only exists in this core (and not the other https://github.com/arduino/ArduinoCore-mbed). To switch boards -for which this is not the default core (e.g. the standard -``board = pico``), the directive +for which this is not the default core (which are only +``board = pico`` and ``board = nanorp2040connect``), the directive .. code:: ini @@ -72,6 +94,8 @@ must be added to the ``platformio.ini``. This controls the `core switching logic `__. +When using Arduino-Pico-only boards like ``board = rpipico`` or ``board = adafruit_feather``, this is not needed. + Flash size ---------- @@ -188,8 +212,8 @@ directive to do so. Simply specify that the framework package Whereas the ``#master`` can also be replaced by a ``#branchname`` or a ``#commithash``. If left out, it will pull the default branch, which is ``master``. -The ``file://`` pseudo-protocol can also be used instead of ``https://`` to point to a -local copy of the core (with e.g. some modifications) on disk. +The ``file://`` and ``symlink://`` pseudo-protocols can also be used instead of ``https://`` to point to a +local copy of the core (with e.g. some modifications) on disk (`see documentation _`). Note that this can only be done for versions that have the PlatformIO builder script it in, so versions before 1.9.2 are not supported. @@ -206,12 +230,9 @@ and 0.5MByte filesystem. platform = https://github.com/maxgerhardt/platform-raspberrypi.git board = pico framework = arduino + ; board can use both Arduino cores -- we select Arduino-Pico here board_build.core = earlephilhower board_build.filesystem_size = 0.5m - ; note that download link for toolchain is specific for OS. see https://github.com/earlephilhower/pico-quick-toolchain/releases. - platform_packages = - maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git - maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-7855b0c.210706.zip The initial project structure should be generated just creating a new From 3a851626dc04c62e647d7a29fcb01b492deffa8c Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 01:49:35 +0200 Subject: [PATCH 03/11] Remove accidentally pushed file --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 73dc9f31c..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "restructuredtext.preview.name": "docutils" -} \ No newline at end of file From 3ca6aa7c8eb4d4e66cd53c6f58e27dd2c85934ad Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 01:52:20 +0200 Subject: [PATCH 04/11] Use correct update command --- docs/platformio.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/platformio.rst b/docs/platformio.rst index f57c5ae76..d6e62fea7 100644 --- a/docs/platformio.rst +++ b/docs/platformio.rst @@ -67,7 +67,7 @@ This is now **deprecated** and should not be done anymore. Users should delete t .. code:: ini - pio pkg update https://github.com/maxgerhardt/platform-raspberrypi.git + pio pkg update -g -p https://github.com/maxgerhardt/platform-raspberrypi.git in the `PlatformIO CLI `_. The same can be achieved by using the VSCode PIO Home -> Platforms -> Updates GUI. From becada9d844507c2cf9a4267d1dac9073c1ab7f7 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 01:52:43 +0200 Subject: [PATCH 05/11] Use correct highlighting --- docs/platformio.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/platformio.rst b/docs/platformio.rst index d6e62fea7..560ba65e5 100644 --- a/docs/platformio.rst +++ b/docs/platformio.rst @@ -65,7 +65,7 @@ Previous versions of this documentation told users to inject the framework and t This is now **deprecated** and should not be done anymore. Users should delete these ``platform_packages`` lines and update the platform integration by issuing the commands -.. code:: ini +.. code:: bash pio pkg update -g -p https://github.com/maxgerhardt/platform-raspberrypi.git From cb7eb0c4a52459715502cf4ef07bcc34d60671dd Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 01:54:42 +0200 Subject: [PATCH 06/11] Use correct language --- docs/platformio.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/platformio.rst b/docs/platformio.rst index 560ba65e5..ad0040666 100644 --- a/docs/platformio.rst +++ b/docs/platformio.rst @@ -63,7 +63,7 @@ Previous versions of this documentation told users to inject the framework and t maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-7855b0c.210706.zip -This is now **deprecated** and should not be done anymore. Users should delete these ``platform_packages`` lines and update the platform integration by issuing the commands +This is now **deprecated** and should not be done anymore. Users should delete these ``platform_packages`` lines and update the platform integration by issuing the command .. code:: bash From 72aebdb87cdd81506cb2e034029f2b86851dd165 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 02:15:46 +0200 Subject: [PATCH 07/11] Add section on debugging --- docs/images/pio_debugging.png | Bin 0 -> 121985 bytes docs/platformio.rst | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 docs/images/pio_debugging.png diff --git a/docs/images/pio_debugging.png b/docs/images/pio_debugging.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ae66df1b5a815cff6b13781ec0f0bb0dc8da3c GIT binary patch literal 121985 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¬(Ncpv?bz zEH)hc0fiX&tS!QOmztL~E;_(bf$|+9JGS%5GEOp(e0<*V$A=FbsxJ7zK?U;?BLCUa47Y^=*0BkgdM;_Mj2vR}Vo%_1T?1t0?M0Nc zCQ#mRp-q`kOCtT&5Pp}U9b#OyF_!u$*0G#{Qb;%r$FI)e2U7g>;DQF(``dGjJ><&H z7FUhq^^_y?`zbeG;%-KujUD|mOsa8b+59Cm58Cx2$$MZ6yK-(4w_ZMq0YyO>Sd|Gn zX9>0cX50G5MYS=slb4f+6NQ%HFc*x|d1ISAVCtV9dg$VsVy!LOPTIy4wM7xbN>n^10UWP48NFx1xu ziDvfq#>uiKpH%AKBMvmW$+HFfnEtz42POWFGG;9?2e-qouEP17ery)b6mIg@CHlfj zm1mloEz6QHGk?QdDWUdnq zBmS*$vtg^C_HSO!q=p?AO`B;m7vjw~-0}3MIC#p@j;ehCn6@{B_lR$mCS>4ua--(H zZ?ndMMPLn91^k*%2;k$)V)*Oh#BkIMM)YA4u(Ho5cDpc7Ya9bpqz>B-u6V0L}UuO~xq~ zAx9}b_`=Q$fuf-?hC-36{3<)TtdzgEk$V839&$#ZMRbCV-GH}5&?``a;PP-;zXRA> z*RN)ip}9!?1|e&-B2iWF-d|&QrQVN2(4kRNF>i8nq8(S%xo2VjH{WEr9|Q8eLWSVl zA%7_KY+l&O1TtE24ZYPahDwY*bfx4JMosmEk(4i7Bw7)9d5&8LG-vsK#Hiv}FS?}9 zbL5;fKbFYL1jbr+0Rdj;awlXwkW>Mz_>@qQ63A9$^_uW-S)k}M@>nGXzPE1#bP!R} zS!5Irn#Fb?VIleFvEI7|C|m!K-u-)Ueh^z2vC1wRLHU{X8HCtmsXw-&qjFylVcyJZ2V}V&d6&w>snbPv($@(Hs(r z^pRqz5%tJ(XX)rG) zUnXg8ns|3)zQu>aAVEt%tximZx%H!x4>b83V|^a#p3kH?*BdbCl1V{y_B}~)~UF*CnQx#S!8%}oh9#*Np(m36rn58 zco?*G1>>9xeZk?m%>8rd5%R{dXl|VC8YVKAqnzdDh&5017djGNPcdxH8{ZW5?mYU` z-~tQK)HTe5@2v;IqDeI?xaSD53V#KiBFS;(Dgv$G$>rh&#*$q3$WFd0hp`QC>01o&8!CzeaVo{K%c5h5dnDyH%y371tH=ao56 zjYQ%D+eHK&L_03zM!=B}%8L#Bvgk%Y%rdfYCzxY^DQ`=Z{9@Ps!(3o5a=%MUMO3&f4W`G`=AQ>WNZ^Gvpr-pvum z^r8{}F-bkhuvdj!mtA4aKMQaN8Q6&KJB2-3(ka5{Qs8`yyzg8_q9rHRTODR|mH{v( ziCvuwt728!H=th(TfZ9}XF0d%BnHcMN%+fAABKT~RNg&z&Q~6d z@#=9x8bdsGip&4j4(lMqFq_Y+DB>HQ#O{MD1q+;EX7C%3$dsU6gR0=6(_pz%dR zF)1E&F_CjL`NIO*Vw^y6)_puW_!ti^Cm0RtAFVC}B!Dib2$XQF;TJUhtHqX6KDc|S z9nZhwp;1U|7dXFPUYNbUE11VC6S&{!Z@mU4js%)6?g7>|fZLSF0k~|z!I%ht&&-@p zIzxcaz^~i?=Y;Y9u(vn~;M&pA%@}ryEl1bcz=8$pB5>gU11Y|cXkY(itlSMBP37UF zr0kiWPn+Vd{)%C?kaHi}+q=c@oNt$%fPJ~1C zy_$c&2&v@BG@sJ%OwErIxV`~%z+px6 z%T5Ie`~{Q8Im}61wTOhjHu^mt@j2Y_$dcb&+ek`-jq;PyQ6}8vE*3G=9tnqQyVV_P znun;hu;mN+q4nlD32*i--J$i}?`;9K?-9@IUy0i0oOViNJ%=x!TP~TX{Yz!9%Q{f| zi#)ol=27D|>uj5EOez=Ow5eTxcOk;nK^nS&&67({OG$Z5J#pW4YI|6|I-G5oW=^=# zQB!l?>PP>gRb!@XZ(sdWcn=Gx$X$hFV>IQXj3aa7_qQ#NMz z)k8WMO+jiw@e!%cqxoND@vUfAJS&F0BH|K@O|dPv{yfF&G~S*y(S#CTuls_VV(eyw z#+AULY(|Tvknbf{8mK?6zAZ+^T}tj-VJ#sxO=~+asSe~n!b!6}~|-*pu;=Uf9msTB*L z3a%T#V=v?y7WNWGJ)9g7-!C3^3{HzqZ;t{Ll0Oo1e!|}p2>ejyRI_5kTsHT#_Qg?e zOW&V%pJ>j~`C*sUYec1lkRtYnLC2Bf{3D~iR%@7XFT)mlPU_~A{FHQP=+c)x0odeJ z#?~`<1g)BIRiogGD;9RGZ7e*`S~E{p&CYm}MZ1gS7ur7n@{4{i)?n{PXR;Xh#kh#YSP5F%i_YO+mpnE?TK2ATIHq7nrHWCmdBrF%3Y`tT$ z2e2MeQs5TpH}njaN9gRcBn~WfUj%u2itdb=ua)2N&V7;C^n)5)Xev+?+!K1qHBHFn zMSm`E|MI0)tejdUoME?af`xYIrJ&ac#gclN9~TpWzme|I zrznla;B?!i=aD3OA<`KCTHW~~&fM*@(W5lnNwnUg0qthK{v}EPHBy%ZHpGTm>;Qm> z32$pO)oGZeMHI8vojR$IY-hy?W3CS!B2gb6lx$o}Mv5y?ndpmIT9N4VyuV)WvdR~~ zlpk5VW-E*MmKRgw5L`3}5t2gULdE5Rj0~1m$DP=b98fB&-QqrvDydaTagu*6Vo~P; zeKT;PZb2kMcU^1T&?5FU&OQ+8KAzJTfL`KCuDn8TdFN+jSNv`X<96S_wf`B?6Pq7a z;8FC*@owN#-P;_aB}gmYP&_!5?6>xtibUthlsDz=w_BY7h=+h+`53G|adQAt8i|dK zO_%Z%85$={+(3Y$gAc;hn_OKN`$={{vARBr5b#Cu$(qwKh$Y9T1S~oWT5g^eTN8nj19RdEM}lx{ga0`5)8SIN7!L5*>@A)Hk%WtJAG) zwsskQvA(_8KU+Yv&t!^R!6bPVOVra7X;>Ez3}y16k?@U}aVfo~7go+@O%$X?)8dYS zN9O*QHX=Np^Ew1D8km)4KN;}(0kMY=HqNCC(qsKH?chH`4gPX|vU9K-d&fLGKMI^( z)!;9%BqeooFo(97BKjxUL(k6#C^u6{$XAO6b~@KfhpYfeCwo1jpDDy)Nj0{o-cCoO zI_*vEWP}R)kNQ0i6%3qE$zkk)lWOmgUv5RxJ0cASoe9SfeGg@4PzsuAJJm~PAmf4> zJoidY^K7;=)<|kufgxnp4uV}pJQIExcWui2fNk!!yRu{%4LR_@f2Khuil%_T!B_Kj z;v^~l$IswsF%>XtILWD)irS| zFv8gANvM&4X<)e_`)4nLo|h|LgY+$|2F2CHS#F<}OZB8fKtivs*j;9EB}~ksw?skJ zu?$jMVx22G?L*gDC^kmidTn8c=uZU4src;8;xd-Y4~{oOs4v-@(E*vx`a}6MEpnEq zT2Em*M3MOi>>DIb_5D}p57jo|`c!VjiwaB*^i(DRr>hoVdx_rOV4R$sUrujs(m&Xc zv0e}6NX4GEO#|HOv6n|w6^LQ#kG>6bVqLq>FD+A>>ds&k&>8WBB{KSop}N z6~3TYptLA;i%KS>a{{qJ+fWMfpELmd9?eqzVxpjxE_1o7#>o27QOeQLn5|noQ_sh}nF5{&?eVz*diup*Z zGt!cU9;M1}!-k>mPMDMwULc0mI_GLAV#pE@0aEZZ%wX#@?vwSHPka8my&&jTTKOW1F@NiR~Y z!N5W(-wO3F^Q(7c*9|Xb(}}~CPd@j?(08*+on0Tr>{>*#N#-sehFHB4Os`0aAqV85 z4I#}L+qJ0ao8+Szj!q1g5OdpHO|K5(S!8eI!&mRX%OY62AHfj=wXp?IRkx~w3Ik0{ zxOtl7vUV2JucCAgOROC|x6~cSHe;hYr<(7)8QI~O#de2E)hurY$!9f}ZHh6{WIPFf z4j_WLNt1cl&{uzbV|&$YyZ5-xQcaEb4J_`CY0N9;L)S`Tj-YD9xvGM;Vzc9{uuCwi*BqiMTfK_Sue>$Mi`TCioqxiU{GrdAOUz+)m+7#u;fF=&gA@}r zxxbgLqn!QfdMr=>IMd@n#Ug+^rK~O51F!x~ZY_2_g7Mi@*%+sx$el#-a<+SiYN!GxCvx+E=7SZO z`VlIUby10hi4h&LS&?(M`;&{_9+eg;2}%*%{g}cho6$2Ek|en=ab68WUNn){9bYlx z@13-2rEjz_*ZlBHxzoU!ST7}-+g9OueH%*MMpmAC~c#SdDyd2 z|Ma<6&gl)wlcC*Sq&cfMG>SR*H1CU%&Cpwhi`3zI9pbz0Z$Dkez~wga%H*E)8=Q5@ zP1E&u?j;YK!F^IC25oS%bc2R?YX^%S;fh}(tsC#|IeUa&nli)c`XnO=IuEim!)R;? z6ITv2?$OBAoi3w31TJEGD73veCacF^T6|aH({dR=NK^n53;|s;ymmXoC!RMv0s;cX z2&LLB_lv8~ajTnP0BS=;-`fWOGL&8RpKlLU+;|<$F+0|y0hbJ@7jA3=H4X{s$CX9& zLWqdLVqktqM#}uBpdMl*BpG1W&FR+pIqYlvR0s+_acP-AiI7nSX}m5{5$MAAgn6z- z2>$4Dk#g^Cyy5Try*xc++f*^VMfgUH$iC8cEdI2N)2XTi>6c6Squ?!aKfViRSTjN* zPLyg6=LFY}8TO5a?|{vbfd5tfJgh6cqw5Wse{GQe9rIG(wYav3Tq2`Q=M zl!oSn;crczB&dsLNkM@WbO#yd0^Wl|ARpf$tV|d3#B4QhAS^6^zPYcH=5mKj$_fcRZ~jPx+BSbj#+M&-fyAwk6?ZX&gY$$1FH$Pu)$zXw z`wE~qx^7zrcXxMpcXxLQ4#6R~ySux)y97&cf;+)ogS!O3!}tC7)qVAD)vKb0u9@zx z?z4~Vz1BK=-|Y34m5)RUuRk>1?30d%n2rVR`=+Dt(WKxT5B52iSq*xy_OMN$cm7Sh zNqN!(h7;}k$oY?(WSIfp1$EyCJP(Tuif>q!tKIGkK2|K*U0?XEaUuu7E@ZycF0cKR z;5V?W(f|#nVC_oO{*YSRY(tc6iq0T+SoNh@ue*~XC9;Wg= zBS$6<-28-Ih|@U<<7$M|4^j1ql#q#>3-;z#-6b2JzXb&Qk^gQ+Z0mWk%>k(Rc$)f5 z-y0(~5Q#=*;Q!`Y4Q}$8YdCU=V4LqXe=iHT{j!#m7BThaLr4l(B!H7uqB)N!>qML ze5%6iIhKp&aTdcpG#X~FYxH7Vz)B_>1b=r0l~Y)Xp$`@Dm%t^n$dbT7Qi>I(aw&b; zq#>2O89v#lDP}|Y0C$yk1MS*949)d~bJw%JesJRWKE{2@CD#<~HHO|Gm0XC)kdG6g z9iU7H+h-=R!Le4?fDLWMm!l^Ao{z~0#e51~#yxDlA#M%y(rdTtO=XO-<%msNSRw@+ zfaxB1EhL-G3TT$^QuLG&-0Dj|Qu}_kOPhZuczJiSxpJEz)kf7WL*D~%=^#ljKkcgh z6lZQrw6o>2h>5)pIJ*TElh`Q5J6f?wBC?_$=XLq(8&AZaoikB%Jn{&8=2I9>9e$jA zB{T{s`_Rsfu`hqP7{C13;bt(FKI)m#9Z03ya7$Z4q3!YWp4}TAjo0`5K;rEB&gkW4 zE~TSM@ZNScW;*?Dv~n(lpDzEm^8<;0?97L;;NpmAOp{6|n?HH6v;L<)J_FSg{J|0A z^F+$)Syoz&*xb&ybTa}>F1WF21J64gFZ;*yH6N+Mi=%5gArDHPCr7<*-vd@}!fX|3 z%t3k~+wfRW;oi;1k9`yYIZb7fC zO1ftM8Y=*@MP`~{8;JbQL12oaL;}>0&)kgQ*_x8jUH<@Ps^=U(AqNwIo;#+U24)Xz zH%l?<&+v+icfgZF(-P zuTQ+H)hm3f|6GBRFtR@3=6w_i+S)SLM?1QAys zMFs7K28bvpJ7j44a(XJl5iV?DVWF>2ur=c^>}^C00$ca}K=>>$q3hxJ z2di*iB!rvyGLlb(({x#~Tt}3B(ot+!U}>6?`mOk$lgb2~`MV%X#mJz_a3e&YzNo=pwXV@$-QfJ_ zJxV?b&KliHJ_{niCz!!|03pc6`djh3i?s-=RBRUjVu?g7T|Za;AiPwvDQ3_iW*o;( zA43d=)dHml)Qlo!@Y|J0ubbwSYMlYnz}){H2a1xyW*p*R4?RI)L7W4?k2Ulr2!#`D z5P=tf<`4-ZYeD|=?F{hC>hbSZNZT)xDBvQJ26sL=3%q^7(2JV4t7RLBwG2cUYpIHvkt&umL{UzlWcoG~b0`T3%FD;c$Gf_=y1g`nx-2Fk@l+rZT&LFo>fZs4lMwQqvAeL@p&Y3$Jb{(; z7c;}eZMJ}cgx)r9%N9pl={4W|9}IrK`$(JjgN(S_I%V?GsWV;*@q}uGRWNAQD@S+t z$NT%x9{z8NQc_ZCYG|(qj@iF|tKTB83(k;ZH@IxN`)l0&N=Wbd#q$-e!R)N?980J^ z7WwD2&(6oD1Y@UHLO*ne@rQfPFb$)ID0s*7=j(ytD=8_ZM)_K-V#dbCKFFj0URr7d z!3BE@-Ov0EC#hQx`p9#=)%%hBbfWl&$xla6k^wqB*#CuyiBauv>V-)ucHbB#>#e>* z=x|4{zt7q&e36RKzD8}T6-h401tBNy2gHYvPuv4u&@$*bKvaHWX6@UL$?bWS9~K-Aw?pf z#;Lo296<)NFqwv0*8Wfaq+kO^BD*Ya)Z?>FLSV5Kj1)l2Q-K zL}a|sJ9f%yB$`@v7461`fca#W>xudf5KLz@?1q1kw6LJE{f;RL=)D4gGX^dKTmByd z%Z;YrznmY>m#2m(SFu@4g@lCk8deaf!%iSc5BM1y?|l1qA@u&2ECqI=O2GTU=lWMV znbZ&h0k3-Ht8XN*+Q4>SVrr_!ZU+b)2{kn|E+8vNhCU)DCd3U)KWF#_nHdrl4bAVF zrl+7_`)s9|Hq~A%Sfnz?7qX=gxcMm_JColN6d?_qwBOdQ&d%d!D{V>{%z2rZ1zAe@g0)3Oq%>AJ#PGmKuAX=e=wyY3hH`Ln z_8Bg-@VyY1;PY|9#6iGjN)|U_wzjax6A4``H|`Y-1)>VM*%r06X?c6U9L*Nfhd8X8 z4#x#P5Mf|o5E2fZ0W=99OVFEx6cUmspyA;|?l3WDHTuE?KzJ{J8^@twhT@5kD0PH| zK{DhMgj=8rw8TJ}7l;vZQ2u5oC9(Q=(C5&bGYD%YQz^woQ%$Okrv@DbN~H@nGFbK1)W$&F9JyUtifB z477Q47>uO2BWFAd_#4P7Zsuxi_xASeSa_JN)qnQ*_of^A@mS6jR8&}2*!yOJQV#gtf(SW=@_Uh&a6yYy0 zeFLP7xHz~i#CJg&n#!L);X|&1*$XU!NeY*i!o$LZ(Nq2|E^01@83hWrcXX@_p#U22 zg>Mz*<@X(<&H|Syb+(a>Foef|lTyOR)y}|<_f-Ol zB`h@(xMD7?t(_eV42ghj)IH;8=M93logriftUdvAEgBb+0!z)Gt#>5XQiBk5HO_+g zi|~c_s4AUCL^#a+LLz#9-ycnu2c^B=?D8%y3X{)t8i*GR@3^|iGS#@^m|N7i3zF`kdDyFRoy#n-mkqG(!zCF4(tUz+JXRs`aD%%|c z4mx(iXcm*fjNk(ZZM|7qY(OP(kyJQvaib>TwL!Ajmm%rl0cF}?1XeQ2%BH*(+E|@fIW73`wcj*r|WNwZK{oyD3Z1_jxqA9FgeV@9s#2g+O_z526l-|vrAcBeON_V%4@b)!v_O*n~(dSZTN1q=Mm}<1j8p65y>5c%>8? zme?ROcIqpdmGdZ(!>2#jC>TfW^utJ~9(8t~;&UlJj`i#cHC@u@I%)|YV1mxuF$^exXn1e22t!0JR&@q}GInLn|h z(H)_KLz&$#^rSO0GI}vFdM}5GoXg}p03lcDT@&h>(3$?%zpx5Qf*ksS;AdV|3e7@o zCB&U>z?EfoB8t9)VZ!MO!y7}Q({pn}-)SuqxCIiOjkoCw2wwtwVPssK`7=B9{6IL8 zMI9d}i0{ka>%E;F6i)e|tSnqhvx@V^yL9bppk}uv!$ETR;KzjE%F68l+A;Sbl+jEBuf^T-D%vxKr z#I=8L5SU187mG%vIMyj469}f`pXssMk_}wYfPQs!R1|Om-B%^k_bY90>k$I^GF!`$ zuk^my_#)f}Lh!iR%VZ#Q2OqyC-0V0z(XdY7j(*jyKXP#Sl|y7$wsLaS$q6lfZK!f? zbttg4DV$Mm8BW7NqfT`CQUm|AT5*mq7W00zI62fe$zX}fmE>+E5P1-`1qz=y%#Rp8 z<=5GnEp)K#hZRGsEm*sJ5#Bbl4ErGpB5{KWZKja}R5*^H`} zITP>1WT?_@=t{@KT~h`6$sQ@6#eS=!s?N*QWE3Hz#&hRuB#(?u$4fhvy<{~kd@p#8 zho(rCi5wtV5i}-D*~;i~)m0&)>#uTYZADgSXPy{yIi zN~uf8F}9GxKr+k2ntbAU{SX-yiaIA>5TaKVL4I4a_kL^ZDMj6iVaaw2deiJd*SEnW(Jg#J+2tVc4nR+w>|MEB?4o0 zX7b6A8H5FcQPb#m8ZTCsK;iEC-$FEr>d76WB4{En^GU+*V{VjvLNt){nC%6JfnExT zyea#po7)5SSymdTUTHkA=}Jn4GC3A13Sne+6#hicXP{CEo4^Qc7$|i(0=gU5C)KAr z>AAU+rO>-oE?cBa+ELL8*HLtX|)fNuN+w6+|3~q3GmL zO2w|PeuWw(Dk@bb>v7f}$qd%5J3GHd%0tRK(jG&+20kdMj>5wXuL0@;p_FT#=dmH2YJnb_9DSk?K2dV`jEHQJWlv6}2s$I}S z$ugf2S?Vp>=6Ru*=Nwq77Q1oh1amMW4wV47xk%HS(Q=WRCtcP`iu!Vzx}wUdu>>b6 z1_}?q)9+cFRl3qHJ+XckDzWYY4vR>kEEJ0(g8M=4s9!nC^os;?V}|;ZYsSj$XAPoXB`-?>Ts4W&=g=MX9_}OB8@yB}3goGAHC<5w>H4 zGJ6@R#K<~I^KUnBTD|*iriNZR=xl(2U|F}{6y^^lGQ#vbo8o6XcS}@)7fCd5CM<4! z3++DW2{v@Y7pBm2OP`R%5-gA@iH%k8>gtXI1w?eNwg{`lZth1J^>c&fGIvBfavUle z`JiTp@xx7F*`N|7`sSO4b~n8+;!6TmTLuMywGnl-?vTNsEQ;>PzCp05fKY9G;+}aQ z+ibpRWG)+1n8@+u^997Tkrs?=AMCvT`&9}qO2nlAvh$z zv4Ld{9ayykiZCxqkcQYKO5bI;n57(GS{1>ybR)^Q>*GZ!&4r1!Nuorjxe#gB47f!a zX2V$R4zLGt%Bp|iVM;5us44sN&#DQLI3|_d!L{d52+Y**axyw(HEpYOzZNVtE@&=3 zvOqC8fFE-_zrBPagCEOzz4#WZ8-MrV2tU5(czzvljWnGwNHD2D%;78%1Qz=@rv22j3P&;rVxr6)jvmYxwOeE=P__N zQ{$mr@fS;kEjil5>X$jqrn@vTor@>OBy45d-Ug+U9fg&%6~TcDZK0kFdF@v>T8dxo z4wm7}IyY1J$JutaSVL#FS;kdl#O95=%lC@?=ei}k=XJ)v=MDLEe z!2}R4<*AwG^;CACugM3MiP%o7cbn-s~FQ}kVB1z z(o`yHD(sT=yAK(Vct0Uq3U2uJB*=3RSkslhWK=G@>2E{N$^8r5-E|Ah2++6SqsH8uE`7-GWz|Y&cWX26X{67*D;*Nr8?y`X{*e6$Ay7+V`5rb00OA(23V*uQb72 z;BVl^u0Z7R^OP;%KOkl}NHSvx{V(PyQm6m<+y4e6{!d);UsMQq+W&pJ&lYtMF=D_a zo&<6Um$uX1!~{74!mfoFa!I|&=Os|>unz$@Qf1_@A;d?w$B%{VcvzD;UsGVPay}ZW zi&rCQ1ejpL{fHF&|GrJ9X9*_L)0F7I6bpK~+&JK>R+P1n$C-%=7P_jTBj}))U8+zQ zlCpPsR`Y&Q=-^Co!|+}euj~V;8Am;yw-*P5=|P9%>Q!dJI_bVeos*{0wUKm8m?~!c zDVVucSP&Tphw|MZGaJ(K-*CRSZSIwL1jy(bv@SgD9UNO1@iOG@c5 zl0YKqDGpBM7BkkMpKAn6*1xQke7uRgpnXEFZnXZ7$`mjh$WeD6sR}8eRX`MY=Sl3z zXCj|`B@c|kklod$EU?|!pI&7?ZD&5-9GzCVUJxz}kqzj4I+}^v!=$YVUP!SQdz)hr z7xjBN`C*$(!L`XODHU%yTfbcpuZZc9?kr;3+X$&uRp#U0yi!kGE#q4Hi(gXts3oOA z*xz?lu#$&_$3|!PE!HAdUCP$ZiSzR7BCzXh^dB5TiHeDN0u8*hHyDY=|9dY1&@bM{ z?I#nyaJ)^Fm<@?Inm}T?sjCkK-`A1qX9AuBTA>w_dqYdS=O3O#|N zcC5^70`gF19DDfpWSF@^Z65?IwU%>|5kE44QyJK~N3dV$CDkW6t|4M~BvdktE zmexsK{#mjCm2#-mlK~lKC5ck+D;Ad<=dF80Le=^@QY7>$Se@&aKb64^fX|yFfc8(3s{PEY zP*ISH?y|YxJr`<|=_uv<{(|WmLrD9lf!v*xI=lOgf9IYt27tzDS8CV^!ALZ>ogDJY zRl@{p#eoC+rcl;bh+uXLUc*`_U;%X|2amBDa|cUtPmtG-m)uT><1HZ5qm%)ascpCo z9mEX>q&*Wn$VhJaVA*E@qGlXg-@eLe`@izlWoqQSidHp^7s*VJZ_*?@6i7qq!?h~N zGN?qh=B$gaSK35dT0bRmr@=HPeyb(%+bOUO1gIIBHdgde0&tbb)4*TghSobnMPUk$ zH;KF1?^|6QQHHB3T{t~IWIP0f&Ne+KqE3sl3Z{|@eJe@7u@dI-d^OKpMxuUfK}uHq zcBo+w5I{jJ{=KdI=6j!<^on%3gT_QzQ(ZZ;wU5hxlAOJN1D?WLi@z_5hRSA@%}=^d zw0KHqX=38naFU=w#F-5zg8bv3sUB;$gU=#vmVg)EsC#jyB~ROr`zkXY2?H*R*)bre z;M2#=PqFk)tN^{o@Y-!L;!pF>2s@4r}QT8}+&g+eM} z^Xjp0NA{p0Y~hstwn}AT_?!1yi(FPXB({8{TYSI1OwFCrFnw$T96@aVETm?{jIgDK zKDwPQO5F)A!Q7i$9O4j-syDDVNTx8Uky~Pz+fxqk74IBScSC$`ct4X2q1LNeI;AXr~08;0Z7^d0~eet!eWW zP>yxfs>)R4IIDW#naSCcDVvj^rxg_MdK~gje<+I9VBwTd1vTvtWkMwJut=ce=`}lI zs#ASr28o&5A1Bt9iTWqoJM4}O-+M6IM`f~nI98gJpW`;gi8AvbXVHKBkrcn5$iWEG zyWRFO0Wy{aSW9SB2^3+wqDnJNPc|Cfu0=pS0L)foKBaWuMH&O7@)*>@Z!z1x}IDaoa?<%XstHZi&?lFfeUS!XwxK*-eb{&rq}yn7pI8~&vTkyJ5CAO`J=Ze+Hjdum+mP3 zXQz%f?dW{UayuUctFIRv%#10Fl!1O;>ZB91UC}X#W`gtq>NfRwv&qso4)djq$JM49 zFdzr5h0p?32T(?EMY$3uhMtpZe|`pNI0QsNF(^ZTkJ|&z`N>TCs(E6A+`P;?Gnq}> z6lbP%eq_K!P9cc?bu<-5#-w7s*CohLlLSM>tTU_PuefJtB$UqWOd%YpSWo6(`g8o< zxwWeyqO3)f&o0&TAv>SayUT5m7}M1=t-*Q#pCJR#67mDiQ}#cc^)Zj$I-&I2K~~TE zabl%rRFCyZy@B@Qoe7>AUL#3^+LJ^yz*V1tdfgaBv#L8$0!Dmq8cbIdE#JI_0y}zf zYBov4i?hz2^hXW;7+ML&oTdU5j2qiLDW44+^`oYj(60h41!&zFTI`ja&}5(y?qEvY zmp@FrOR)OT0*R%Gc6J|xr-T-5JJ`(=J7k1o0-?fkmtVuVoZAQCT~DIy)*`ZFzqOTK zRnqDGAlqseSq)n|dqp2$Hr36XJg7|ec=NtXaFl#w<<7_pt{<}}X zJVy$E1jt-vmm<}ktYRB|<6kqkLEt$(9_fOS%iV1EGg{NllpD1+>QgpTpXK_KoMMhB zdRbE@DSBgy$13HRhy&G>W_C7b^(O(o4abmqtZlTPwFR&*5zVCw7ZxR<|8Km5T=KI0 zI0EzsL0;cM{-M5@pQm4eM=H^0=K z8(GzZ>Zi@zR|n`R{Japt;@=}7JQl$JanUJ~PXH}a(;F8~904~gh2%jaZgWZEyAd>w zv!FA;*yY<0I;@})}>UOWMSSocrJ=VkvEuokn2Li5hwKV#Q(moJYyb~Bw*Uq+J5?4)}Y zyn~>_BWSC((Z~9Jl}1kad#Nk;w+9Xo?v=Z^T`+u~r==jKOgjL+strG)9hP}x*Oa>1 z#+)oy!t9I=nGQ00D0{5q1V+)XZv@J$nfyVH=vo^kw;<9jU!{jKq2vGxuH1y`;@^T|jq zbY5g7Y+wEj*=iz8^$)X5fbOr>$Pyx1-VQxo8hycgMRSKW)wkz{{zgOB`k(D8-`` zWa_$5vNKPrIfp#=i4=PpK`uH~_UuI$qJ8Z2@5asho{+(Ng8jfu0g^X!E8sD;wx+f? zBhPy3$vUH@{jP5Vf1-01F}<`9d$)&3sPkUzbaXMmc+OLtXEt6e*^$*mLCz~BF3ZET zna8I770ilKS(H&jJjqk%n@0r0CG@XWP&-QUBO@GO)q0PaRg>=b%XyFe4}h0E+9rq7tJ@UWwAW*% z##l8}8<063j?7H4E5eL%biBA(7e&rm|FQ)BduAMV>dTBzvQ4s^;3vTQC&qmYtR!nf z0Wk|2SUPe)iGeS9JD0Wf&CW?AGyn+jX35^L*gM?U>}gUIT4WYGJl&xK)I{m4Mjc9O z_b*N3KG6@|f6$NW`DY@P{1Mwl7(!!8E}P;`rm<$9mY^MUjdDi+4Lu8ae9z{1hlVs8 z=}d%<`x6yT4mqWI zbN!vw?KQf^c|pcj_bW@1Ztx6Li;jLIrBbOW1GA%WCvv_5qTmK#pJ0n#-nC&Q-D`{= zO$^)Q5YOA;0IITg&1YkgLhE=N5q zMkw+%;O7qttdq5Ij}e_SIvJgg`!QRZT#SRD*#r}6r0C3S;0m7|*E_45 z(cCW8(BnRaYig2g7$rt+?!;4^^&iwW_7)m>m5v^PAzRx}5WQGI;`a*IF}dWvG7@WM zZlG5QW1j6@Lot7DBX*gt29bQ}GBPJ%Mr)MW6C1p)|1&Ihk=DZfK6Y+NK z8pY@faRm2z)zXitW^o7IOI~K*_hcUi4in`E-?;SYHutU2fr|2^1vqviJYe9Eo{+&c zbc|S}q+G~afE*3B|Ck+b=llm}*W8Yt#L=^10%|-Zk6tN9To6FapGv z?vRI+5Z(lIUpsZN4iwQ?7TN&#@*oIm>m9{sqn140z1$maXYh2RQ*npysoX)g##W*7 z69Iy~V(6iH_W0_pT@FD;#Rz7rV=NJD@>&Y#+xATBP*U$c0NM3t^mc`hLoN?hEN1?;<0s2}VqnKWzlX^V_eKCt z{lIR;%20O=3NJBI6D#q_wO(io?C zVk#(S2o+8`^L!XUpQ;f4t3S!w5D17a2|_%#g4bb~9Ukkv=L7^G`SN<$|G+woXl~8J z%WKsN9wY%Cb%2q7(?1eA{aGjxYYO_{+!9_7O}jlKnM>ijdj4VKdnBHti-;+RNP0y_ED5qs`TembLy4*Zi1xuWOw_- zqhKB-U47ZG_2lvACIepf0R$UtUJ|+!m&A=BvPd8Rp8sc8S8x!hX9%m~dwp3Y+|t_? zAz^wl2nUD02SP{pzp~Z{u{$*Hg650cPS)x|MOQ!J->_!!R65?@vW{8>Vc)kkgYU58V37-xYe^{e#($ zQ=wojweguCYesyv3V}{dgS!#dOnVya^GTZJlAFFg$Hi zDiT;RhM9R}YpbWY*!SZdjE9HEA&N>NtHt~ATdpD&Dk`h}CjT;QBv1<=_?+8G zn%Y_d*00cXsUE-}@R@+mO*R+NW_;diAYnJzg0haS{Y>-?Ub|2haddh_JE2jxJh#hL zHwfF$7-b`elcwS7I|QaEOx3=NF`4b;a_RhMbSZ~3h#kS?lWMEqP@Mp`P&pquNk4G2 zKRgKk-Fdl?ZShaYBgZ1g!XEiJ72iRBEbeLn302n7rp}yq3_lUv}uLVBP1+mpnTmo zV?w>Z0YEjU7ErS+oxws(Sl7~$a_)M*eL$fP)9~kGvG!%S5t5KhTaNpX?~{=Mik)#r zP9t&TC}AzM;8uxm)?SzsZJ!hC@e_(!?70YHwsPv(;KGp#>B5?q1Qf!qI%cwleopGF zkY6F%B1R{iTmvJ?Ajj$kGXf-RCr(_p_0;kuN+&eYw&-b?uNDL|m3ssYP%fR$wh?bY zr4CRkqX$sm-oQSP+TOo&;TI=jLCtz%oQD z>k!(+^8GWX_sUqYVe&N*EiEmF2L~b`tbw4yd<_G@J*}r%S@+7B)A~~BVpW$DE zpX^5il;EB6Xf3pQ{%rx#a^onGeQ8=RS^vy5UYmy9oCQl^1btZ-+mO3yXJUl!!$&QMU@M6AP z$xs4^#U#X)(!o-B*Hb*Gr{`m?RL+>`FCIR=Z6n#yV{PqVZdXZ3hzz#!?`feApY?X~ zpL&m;wf@T8YK93JH4KP!PH}6L^TRFZ|+5^*1ItS)G{TvrKo7oJu5bMj)X!z4Nx)U z@jsi<{~8PTPAk7~?M)Pqzrwj$s+ULToXECYPa2jDCg5Tc9$M5(J;Mlp&oIZ*+pkyp z%b~9Bv1pL{jq4`>F>!A(OG~I+KD9%Krpcgy3ETVx9^{5=$OfDmZENd#H}3~~X9{O0 zq%2Q zTgE*fP1RaYNI6@Yf=+GRo#9V3tZ*R%dKzneNkh*4>w@HiijEEka89k(tOXs|zMU3I zr+qA-xLki?88JTXdfbG|%2x*s`1ZCFPIU7dvB_qMk%)*WZ5mDKbrqO=)Cn>>umjT5 z%d6oYOgZ4}EEp)VUXB}2XKGV(gz^rnWebDvn`_7u@OU|I`!yhvx0H365L%t_#@$60 zL@e!IKxD`#krZ?}Vy+@#7c*^bTz<(aj53Aag0%5k{2$kg6P(5aD8X!a#ELOO%*UX+n42@TMY zd(DETo{)aXvbLQTo0r}FB*%aDZF%l&OU6~mmq|mPs|nG0&%9kZjlrm*VTd%%Oi;3% z#FY`l3_bQnm#u(Su-~kT(^RWNDAoU!$EjlN(5sF;kY{`^Wi=A&P|=rKRY}~oP`}Km z+TnzkH11>D?1=~~u%%A$x=kE(hyG^i*K6DlyBOFxP3F|ADLp_Ik@(}XI~#G)`HZN! zEx%H&oRf>Im}RE==pI3@+gDz#TQC@f@3u9`vfnE#R{NbI&oK)Jr_t4+3g3hv|y(PtZ_+DMFpP!qdBXv!RG4fWxBX za^RCdjc~Z^%+D%44B4+qJqW{_#;uH7Ufs9d%$HCjgPvo6Y!YCm{@B{Nr1RY()lxZjCFWuA@zZtsKmJ0NxLexT0Og3^=g9-UCSbemTvvn6 zR!_;?A?dUQPK2#{U7~OeIsBzw`0%KrEFF1dgf=LL| zP^r(@#?iS$9@h9t-h^PYC!WygJbE!k{XO;0M~1i6hXdm|yVeh*gMnG1VvXskyF|6T zv^_M@UPqRh&xYLDZ*i9&6d0UVs3WgdGr&s#`B-r;Z;|ILhH5NrUN`^{wBtFT2mkr@ zu*P^wPtL*SH8vz{I}cPc>+5fw%qh+ku(! zI*BRB6Mh6Y9wfWjciNmkqR+^*%*quuS4;PdCsw9Zh4oQ zf{@@vl$8{I3k8AzWk@)ac*^&pEkVfazZE_?r<(++1S9TWcg(Cmt1!Xinb#y|M-re0 z@J5i&Ze9CRgbm1+weYt>^V$4xVJTiM_OjOy0B6EF@6D39UEf$wYisCx`>bhO3c;Nq z6GGy9dW)~1?SR1ALFC>( zb@FnyzbBknsDZEfiQl|UO7@s|cAG4IVDK`0m!FzFN`bzmlXkievYVd5)uws(Aq~pF ze;)z`(gF-XmMS4oURPJw)m1@3!A?!hSxPFLTOS1Q8S#n)Rr9kEJKbUKx-z?FTeDh* zIC){ugCMF9Tpuw^oc4Y}QkyOs!*P`2Bx;8U6|~XTdY>mP*cBEW{t!Ncbq=Ny{IP%wD_SEitbiQ?Q z|Ev}E-B_z}`>QWlbVUvf;SJlU>ayY_9#;fLu$ik;Z* zj07tQ*~*aDN)2UTM$nMs#YiDxkiW14qT0c^0|VQIwtGWgQQWFJkFMy2xH4~#d}qqS zK^7DltDS@$^Z9ud4iY#tluhmbM)qQ#$zg8Jn3rf#SJr#6+RK|TU8fSVzY&svvo?13 zqJTSM0yma?-Tv%y8MTiY_^9e{+|Wp@>f z*^QHVUqncGom+4Ul~-TA7hJChkkZ?8jQDEcpAr)sC6?MmVT%$jS}7MMW0p=~Bs&;v zJM);PS)`oS*6iEYN^-&C0s)F6&tOlb8u~Bq`&t!g$W5(l)Z3z-UuN=BKsNTZWF)Uuqkcg+g zDltvpWm`sYk+Y$LO(t|)+%YjA6;4Q{n6q8D2_Ss%TUg7Mns}sPt<{sC31kRUG)L7cg@`Hdb({%)A#$3wrX`{=+b5MOsUQ1?in z!@`UqP+K3CavXYo=_U^n%ls;uC<=b<%9uo%G+fhNwi+o_7?~qp7~(U(e^XV|NJ8e< z#0@J$iNUL>plhKv=(1?5o}9x6w}gAUE)6>4p4yqi;s`Dj5-y=dB8=PgnhuMh7$UZ8 z>7cnPAR0jq=|`X+Y3#}KQNXChZXqncfqut?EJ%^yUp z$da(d6-6u^KmX$r4LhzAqnxGw z7daRjjQ}GrzN*F$aTN92bmk;x4*Qf(iBQY3Wch2I2KDl6Mc5oB+tg?Rd~8(}g*euw z^(d4?VMtlSf=;puCI+iYMcM8OIt!l^xmc$4Tv@{fzbe__I&mYU)5RQN19x^4RSSaz1;Jm zQ*@&P;sQeqM}h%*;5l<8+711z&fEw9NK>IP45LA(Oe{Ct}mlOvtprF1g}mMcmOfl&}^B|64pnYX`Ehj)b4vzZ?UquLM|2>KkWv5~?Bc zput6+q5qr*_8P-DvLyDs;}R*kySENjHWwGy>KGdOcI>JQZKfqJT_Zf}e5!e^iBNVRgh5+X9Hih*6pSR6ri?emL8<93JFwaaJ* zwPkQ1d@`8Y_w>)+UmT-$BplWds2`F9>4LtmMq6|W2NFDn_!B+q8`QT5#jQgpa(|)} z7d%5kAR$8GBVp{A7%E#obfp*=oT_Ij>3w%1@zxOi{HHhsvqFfM=m`h}u0Xy1c{DvJ zs6!}HH4Ay%L#E%yi2kWIcjn~Dfa0P7P!7S1TsufHU)NEk4vF2dz>ySPN-MCCXXo&q ziN>W56=OePj(aU8`Z$4R&&lc+ybkHGy9tDN1?H|;5{tJc*OmTVtky|P!}OU?dOEtf zZHlE!C{Vfy5t=^p+hfo|_B`v>m&BT#Y>2l+t#k{s`5cHe65>e4FLa}^bPehg*3N&eWuX8wzPWYQmB z&~Zt7pzs|i0A5o(^X905+8i`f5{wC;H=zuC$&?gk)=q7+3YwvZ$AB1L)b_DYKP_-t z{l#TvV^~n8bYC~zN`=nDh@7?Yk~xu?;8*!rx*^>o2VuW+TIs=mC06*y`wn8PIC3d=FKOOt& z+v|G^TZ&z5$Y_y9%7Q@0^mPd&YaM4L7k~5W_o7did|F$@&JhR`t)4YP?GEhh#eS{h z;>@jlg2=IdBOGUr*JDnmj>ADmIj|JGD>5^+U1>n}W=KIDVUUGV)lIg&-m50(Lm0sm z!5$aOZ1y*)aZd039F~{av%RST79bCYhfsS^Af%zuDm{T~QaMZoBjo>GnnDvnFQ4Y2 zx_oIhF1`N$c&MO0dJj^1%6SR13VzqLej#Sg37P#8zGT;CKN(Ks;;XU0E^s=2KYE%( z(d4s#+2DBk8*aL_J~e*7^d*wD)J^?4b;8cIM)(pWs^(qPHI6Pgru{HFDf?~k+Ixk* z-K29rOw=2Az&_@2le&^4;b$P-`$dSYILJx%oOl>%dXe<(A{}ws5ahfL%>O)4|7)1r zc}S5SRvlrPmmLfcEGxfG4ruQ6!xfEEk3v1^%_Z`-ea^OnSHyZDJmJume16*FKy5_7 zmb>fduaHJj7$r;Hwp5vIQUczK)9g0q^0FfoU9cQIIw$yrOnP~@$fN5S_0RET`|3sJq-0FVNgqu5@u%jVU%opyB>=skbh!o6IU{CWD*uv1+ zSm8jSDoo3`X7~|8rmJ;W9bt<^R~fV6hs}*O*pVN8s;OlsVS=-2V|K)0Uc_^97n(IT zo7AZ7R!In}B>q1ufvkRzME+0=Z)UpS$;0t> z)8pbHRlPTRC_d&*-QUn3?xM)yHVOV~v|;3{pWT5L)T+4u#SwNPzr0CjG*G(aD1C5A zXz(Z)p}lqq@4vAJt$?B0lCSzl!yzIrVVg(~#It{%p&`W!w1~EI{*DCrjJ~}TW~EFt z;>Dp=xq#1eXD<2l-q11F941BR=YXTIcPPxrcf+?MHk6zD6PLYP<6@>Lw+1ruD6tC4 zY*0-0Vni77PT#}#eg;k>M6`Dvz83y}tUO}DgIR9DL;%kmi|YwSpQxDP79K~Q!{dE3 z%h@@#41w>5PC-3MVDGJBd*lC*_JOxt-3l`J0b-d(=J(#~zcuN1)2kK_FQe;bzoUX3 z^UspteXUVkCqIDyozZQp;=CQ%Wve{3-6qGMV&ULr@4DWl_(xxZ69zEG&v9&8CRhl- z!B!^Arh)fJQAs~Or1RX}u%NMW3jK>C-4wb7>q9ps&Q>RVdQf3p&kthgILH`8|NmqK zXtAJ(y%^FL%y(G=02hOc3#5{u5!}6P9gLbv@SpF6v}Ak)qXUR)LVs*Bb24jPm~b&} zhy%~JaJpv`ONCc0RpP4oE5nPKYwYN#AN62DH8}+2x`B8d`VjCU7=LLNEHw-pMUwY_ z$2cO8hjilU2@iB_28;pU!28Pq`+(sVOiU1qtNv)8E?jCcHV5T+2!(Koc9hz5qb2md8#fMmjWU*Z;Q zqVX-tG*yZ*RR&8c9jg+D01=h&#&a|(R#f#blj^i@9cS}B6{)J zJHB-UO1S%8KO~ZrnQfrU*0>1yPD}DkB*@*+eqH86OatLcE2j zJK)lR=dVc7C7nJ#rXf${O)7eQUyqoof|K77d+<%=W{q27KJmxJHBKnWfJRa^e++E| z7-GI9B&1Mr!h+jTcoZ>o4Oe(G@66XFJD67OJ;{ zzR>>HlrO^|MLDnSg+4?2wwB$$B3k5-N)x&~1{1R19=;Z3{EoG2Kmc0lz+q?M2z6+IPeE*FA6mo)3;D@* zb4d#(FStQv&*jb7bX7qZI$JG51V`TPmL+d&^-868A*BXHFm`6|o|EQK*XopB6+gqb zyQ4+stS&&Pu8^%8PZQW$pXuE?J>Yke%VYU7NjE4p+@`vel##uh%4%!+u+L6-&f}`Y zQV8j0$Nx+ngiU7h{flvEe72@Anpz&o0^~B@eCwmJW+k2h(ZC{{M!QM(lqxfh&~0-Y zH*h{>5uFz-z~nmbj- z=!En?Uk7{AQ9EEGq}r5aj>ee+qb!tvBofCBqE@mZo4W^OqPKz>zjl* zWeqSLDAyZ)7{{B|6sN8H>x2ql*S5ASvR`VKbsuC?J4`OyPYDUrkJbk4AX+s!Gds8l z?P1Vx!A=DhnQ2R8RNcW98d;xSvb7<1dTU_Wh@&Btv-GF6nVm9#NHDzsMV5he0X3-e zY3kbJFPHFNZIfMUuD*`qodw>GAf3pm-Ayh@`ftiTX*b_@UW)=p!juP~KA_>meC8W2 zcQ|Qy`4^R*X&obqSc~M<+s>tmjn%dd5FUsi5|KIxDVO`VQh z(o_4^FiR9CGQvmLOtg39JvEtono^@lGpN-++(cuKchh;RNSVuoa-&V=NbyI>XF_1) zPfVh@RJc;+2-`=P2!CQHQz^qk*`MQ5zaCPP%?0_!?2^%XQ6yj%_tI5ZA&%?Iei98) z%yJhUhbbaUb%3+Z5fp9vS+H?XZyPgV8twuQZe~o|#G8F#{@m2hKWopCtvI-7PT#9E;e%-ZZc)7t{sEQlHKOn@$MeWwi-Ip=SAhc(vs5M z8Xl%$oWEyxzIhDG7$jHiTj?cMV?wEkMrQrG%=tE4?7HToft{|WbhN0lPn8Y*Q+Y@* zKG>U+J4h?|;0n3hB}oM98~UbEXx>)R{F>xf?Qha{{<2i3r72W*4oz0Y(4BS$$zk)s z(t=BA4)ImyUM0O-h(eDXFTEg1ZBNry;y++FZ%h?vV1?ODH_E!i&2GNW_a4HdK_ipd z?J5ba>W`TqkssINVx3O2dwmybu zBLEq44#}@SYVl9e%{4k`4kS;B+(-y!FNFTXjb|ikqsBYRo|5d)NULGXE^^Tmy>&Gaf%OIq4Z3_T3OhCNlPV3 z;*^!y(u@tH%Z3(m;B{slmS?5E)@Hyz#wI8B7Y{=8DPsW;?j1j?{Jy&fk$5)wQ6lus!q-8br6+eEhUsVwk=qhBSF9&Fx$v13lk;_L@N zN7=nlF!3>0RxV-ghAYm%vA|k#*u3@zZ`YdI+)j!qM=fPG(nVd42L(YgeU7M)-rBEp zJ9s(vGJ&$1Z*<6Twz7pLbNdK}{x2tfHuhII5U4O-3AVyyp6Oce^2ut-n!;oGIxn-%$KDV$$u=5*in^b!7adM9S-bd<`@pto7F@s@OjVP zNl_-AZoxKxQd@>sK>yvNRTI9$8G=b+7LAF#s<)9sJSyqfkX63sM#xOcfSCL$fz}Is z;x{p&2zr;Za@ub~p_0uJya1i%{4GzbMg}{1cuJ2{1^-V3@RGmZ?E#J<-|1TRU>PKh zE(Z)(kY3@_0h_xhj2|qP)R64~PZ6|U{(sUY@c%0;VA}uxNrVrmZaV`D8Cn}1EMmM@ z0IAf!f-Uy6U6-1VkB^o%QUWSBFK@Hc&!#O>e&a>>XK9DKzWs6PsHF}t2A3cQ`XH4M zlrG4xQTmUkMI$}zX(?6{EQ3?N!Yv`w=leSF3sA!}6)>IE8>^SCzYA#yMe}-7Aceld z37#rsYuD=={~U^~^(J2&snxw*Nuwd|mm=Vwv`KNkcj zQUu{eO9ddaCsDBF=ehI~5U`q~^<%e3M=U7rORsZ***`^OUjNPeIb8-!^|^o* zMR;!frm zc-K+Aq~Bz_MH%Ke2uie4#RGH{`-_zV^z`$Rb_CUVsnjX5iVORGL9OWUZ@ha=`eLYGb`b=axjLq3wB`j#R1(Yo!WF=F91o7I zI5l*sHWD+pkPGbVukECKSnnHJ>%X85%7T7mVNnB$gIuvkpnef=ngKh1wY53YI#Lb; z?yM0HWgaqT2Qba&0z9);RlkVCpZy(_IV_$aKZF;tPjl)yH!Biyn^OjTgW{(wMlij>$zbB zA44wB+~#c~yDndATZ7RiP&(B;zkmOdR&%~w;!#3OUXXD40L3_HV>!Bj26>t67&K!n z{@2I-1@n^*57~t>6OW8VAx!6g%YdbF+C?e^XnIO>iP){)B8Dvaas{!K((O~F|tw0$f;@xob>2O}12QaA$!I)=ig zj^~6oZx9=X={L~NroHd=eTmE2Wb!;#f?hUAxJp>!J3CCq<)CjJOrjL;|pfi(68^62W?Bm$u(%$!UrfHbtt zP2izbW7nOpT*r#NVC76-p2z4q6RE^8ccJ828GUE7q!r>{avIn3UMa$PBE1S$REiRx zr4Y=Sah~*~vsQesqdaeHDxN61$(8L$jsvaIB)GA>fM^j6s-fzO5s8(Ax)&f^$R(8w zp~-lOP!@qCCUd0l59B<{@Xr}xLp#CK!|E?t>Me8UF(a15`3zWPj37 zx=p0t-?&c{1$A+SR}Jznd#`l*#CH-ot5()ZhFZ=9%D;rfNojCrtO2=ubc-^iFX|QK zB(X)C2YSprxHiqXXvWzvp)gWfG`iLh4q-wxKkj3RVk-wm`mSZz%K`|@5 zI0wi#@^MK)b^*56_497l-e1@c!J^03AAhUF;Ug*TNCdJI(D0QsGC8Z8+p(vXxj8VT zic>RiC|^g=6ed9e$kV0+=k1FhF!(Egi4l01Rmk!goLzx{nQ9ndFxt5@oGfOjH(#YM zB_(BJV-tJ%?w@Fe`u~EjtET}dvf%fAz!_@6c;$zlsjuxK0MIjnO@4ZC)-ICM&v0~q z`02DCH4y?iJu*R|l8UCWtRG9S9ar02Fe73fjmNxNF{;{FFTUMfB$ly5e4gGOw&sVx zVC%s)jG=+#_w=f1H(DmgtJ|~t7XkxFUvMzL$>Q%)krEt^BFul^DW3LH%~>RXM`0GT z@etsDde(eY5f})CipoqnGucJu)0NTq`gl~21s6Ii2H3Mc2lZAV9>cYWP{v{}9Wrv+ zzTR?}0SNch8yArOs%;XqUEu@OiUpAeHY!PQ3=1tsx-4)aRK#+3m^dNpJ`Fdm(>p&^ zLnnxqWDe_|EIOzGT_N_WQc}gxPg}nT_S1mz(thrr3umh4Vv5G+`VYPC(&gZXNAS)E zqb$!)ssXr1)AV}I6M4_uE>aVx8Lf&f+W(8?`L6?Z?$r zURv}3&c3RvD({-C#}unjHKdi;6LKr}QNM3J^dkpOfc{WOHZyz@3n5ZchdSjucKf$m z$0Mh_`~F4LCqoZSEW5l1EpZ{)HV)dgF@Tn9q z8bG5wJ3jXO#edLRe67rybg#DCzth@H;Sd-ce2L~yS`l(@!1OQ6gn{9^ZC7H1X}8P% zhT%?(xk!5a{E9co;Y;`4Mz%M$^Zu`?F-jT9`PCKV-?g5e{F<6C+~RH*n|%Pg*-E>O z?+=(FlhaQ!JIW^Nv;`I@=dI+df%UKTwXdTD2xM}+{fn)@UPCx%ZrXi zNtE8%*yx)6U;n_zPLGc%1q#?T5bLj1|)*k`*+f;vV)#}Vl%()-v>8>qT6h-&Tnp@A#>W>LEYZo-pWO?ejR!= zo>N)ZA|X4%J$;zMvt!{Jz%?%&g{dn0+;nfwv!u_pHh27pFp?Z!KA(qTi-Gh1R}$2a z3GN7wJsKa8HUN?kE{zB%|JVkLo*@-RPNx>;tX1KUHJ@d4Svn4|HZVTc5LnO8y!us)6LrViwpZR^ z{nFkL5b=-fY%fHVLZZjY#>Qj_X7--HLGkkPe&JGz9w1$1@6H7f`IWubSyE3 zAUdqkmp{RhD6L#FKVLNUCO8n%?(3W|bP{r~ucKgSI7I#<2mh??b5+61_vxNo12FV3 zBttKFQ+(}7>S%k=_ohpMl2Kdb0GIpM;kH+AwnUW-`{dT&!JI9D&Ac z`J`Odyl8Pj^S5D zUk)yfF-Ro^a&8BFbUsoF>1`6DR<=?p1yO>(@0Z38eCDWN_FR?U#xX)WDJ458R=P&x zVTnwK525jmRs|J{D;R&?jL;P`KKa@;{QQ9jacxwBgwMu-6wD%?R9kMag7?n7q3 z;YXTajC)u*jAoBBwL`LNfZ{5$2ncBw8j|EBQbda3W(X3=Op`w;KpoiH#S4<8+}9?e zj!$v>to+lVOj%x6@qzVXwX!^(N8~&{u_mE5Pr(bo31S7Vq~Pn76!BjkZ!#sXYF{0a z(N~A%iJ+9+AcpFUYq^(bq7c>=%Y=(1ll@8vbp0CN2T5ws^CoR%ii?q)TX@h*q&RWl z%;qix7Zx`hbShs&JD~=LPwKYuE|32A1=ym39WELuzF?yA#$P_aqcHMpjZ?u!7{k!v=F5Y4q1ugq)O6OaH6&&^`ju+<8v#bm+{s^fntJhx zPZ~l_VZy4Pem)Nfezfa;`ApKz!!%*%KK_Tp^=PpX?;nzYo2Pc{r_%{;=-YT_1w3BB za$}_eY3oQ-&TLOn*XMFkapko5Hyq*_sUw8wN^zCn_d{l*R17e5Z5qAPM_Vm{D(CWr zMdM}&As28kO@XSY_71c9NsV>k;XZh{DFr5c$d-%p{P*~@+06O;;Onky?6mYvZP380#*AdWgfxnx#0mrNTztah}YWhETOYEz#kGjJD zg7o;i5#oO$wpI($qkWU*1LFT8vgtqN`oE~E)$*>h{`V{C+&{4K-@69tBQTF(gGI~S z3c+w-#(@W~%SM?{6O{42(6C9Q9?Cz9G4danaV_aFcB+}6faQ!0Y zsJ+< zUUefJEEm5y*ekL{f9h#B&o2!8_UVIe=4V^#a% zBm`H$Ju{+0s=H_f*Le=1(P8lB=oAIl7FEYyWS1X;;5n>=R@(Dc0J*P!yzPZ(Z5?Z| z&<8;}3uUKH$a;0IS#JC?bR`rAJ-`2i94KJ?qzASaL{2pp^h>tv;j_SVv7cPEmLFhZ zctTrZEX@8W`)y67Gi39;bbRhMr43K1?p&Fx%rDJ79xhMj{~l3Xi`swU2h8_sRM)+B zD$==M80g@qJWg@mMU#{WT6OODvuCw4r+LlC^1RX?iJBHleC;nla7Q@y>g3WhEsr|mN5|>;@D^~o zQ-MP5edM~rL4Tq@A21%cY-cK>FMl9Wi60*0_=y=UY;XWcx~)EUzho`+f{jZz!D@Ju z&>eh#1pT*>3TSyjIdh1Lyr`)xP@)+;1w2a#UB@rCUCI7YS-_>?_d`s3Mg60L;$t@k4}5aL#F zf988}jrZUd#-C?znUxFM%m!G4qdKi`+N?|5@{FCL*GMt3w`GUB)q0nfv)f(J zoz5;fMUG=g(F+np&gPzghXAGq~Pf7E&d6BRMLt?PG8IbJ6X8qq7VbMZSMufoKv zadpxhIsD>aKdkC$gJAYGtpP7&hn!VGmdED#LZ6?*ZxuWiAM3u4_^+A&k!^oIcuVwo zvAG{b6obQIFP<6|>>(V32e3u~R>1tquR`SoDkXh@eV>VV{#;}}X5YGUC1N0Myne6EP z(f2?DucBsFi9XqRzO~PcWlyGlE7xfZM;VQDn%Cq52s5RJJ=y;L#@Y)>KV>#W<_B}jsU3E>pRaCydvV?ZWyPszm+hpljS(<7d z6>1Z%bB*QQuJ^ic#)NzSu4|=tinSU2WPl_XbUF+M3GQQj)eswgg-(9?Nw7UVlM?vijbIn4DgvSG| z@^A=XE`tx`cHOKu=N~9dJ6TBWp5>aOe5gGil=k`Tj4zRQJ9Tm@{%(6)Q}d(vkXikR z2?dtlcw%&e@=;QG}`x3NP19r+r3%*}T0rG;c z5N}_QGAsXj%e9P>Sw>fh!yyzp18o1=t(B{dwB`Gr-Oa46ur;GHPXPDEnDf6icmF^XA*4dpU!+mRnWrG-I0g?Dt`nuDnl(bD{sX(!Wi-*NgUp zylj28y_{|^o!S_uY&jpFKAA1)EAMsPOly6OyWb-|$L%KFSQ@Ej5s_%Bd(t(X6<``z z@#@V#A~$`>kiqs9_Z<$CC>cY(lWsij>jztIB5)R1@V@jTNBOPMcyr};21ZqquXHw~ zA)L(kn|1G$({72N>C)$A^9#M#v&oJAbjgSJwoP#lyL z6d%{-1a;5Qd1x1@98ydL@zy4+*S)pv*CE}|YDfYLU9W7uJZ=bR zSPtc%`P4|r`d`|v2Jm-M_$z*252)cwA8MbceLajO26GOyP0F{W*GI3?OJ_KmSJV|K z%-v5>GfQx^C`8;OX2u(XQ_dfM+baY$jS6pdij-Gxe~8glU1x$t<$+_JNUu`M>ES>q zS_x-CJ--`yT&t2pYHV|5C2Z|6bZeD3xZL;hotB#m5ahWR?@#u=r?G_1*QwdZUu{}pYq(Q7sp z(ldas(`!hZc;c&!RsLn=THDkr`+anXuuaOeiiXPbpP$jY;%+Lg%WW8}NJ&{_tBSr2 ziwOJvu`%tYTYfV}}8k19-juv^6fVFlu4> z3!%1D>0>Yv8Dyjd8qw{1B#ye7vWI5O7VPe>l9B0y?zj(&{gy$DbLD4(MP<4$VwF5y zrg*$A_51f<)h;E{o*IS*r1mTH0j=x&stR19ineMYJ}cRt)K-~n8!W1PP5`nrY3t0n_CawBF2DMjdhO;l_%I- z@!bLA;N#TN^r}CLMOPG}ZoSbScuayAB3WkYY;b*yUilS@f^Eoei5B9U zh3aZcSe%Z0T_uza>c5@bFcMpBfMPX_fSRy11l^zPjI(no>3US{o7iRRt64r{R&rzs z?C`iXx~=(|pg%?4t0eM^kXby{7`wp)*B|{V{Od=fYi{e)j;x&euwlh>D8N@74!slhe&pbgtn@5$s zHEeTL9X*R8E#2G<#ykYvd%?`6yv3IeL?M6_-Vav`7FBIvJzNQXb)P{%zRv(TlpmWLn--Uq?N>d-`djPJ2cnvZjx_MtqN& zYTJ-)?s(GF4SPEVufDX(Ox8v4ZHTkfq{} zYj$Nl%G<+3;y0p?iz>&cB3-IucLhOKf@mi?kJuoL6=?N&`8dZ~=-d5ezD}-EEIeE; z!W2CIQ&XK~&%>RL$saJ@Nuiq%4KxbBW_Ulq+k+r&mZ?=FU%b+r=a4@B0Gr)e=f3Xg z(0j-v+{4v3LkPP1HAv259DKZ@LjqmF4t#kTEs|U@fRKH>)l2Ea!+UIMZMgd=W*}CnaFZ)Y5*CMtd za_2`5i)g;Z{Jc*aVf4-$z9ND$-P%E7UBMS95hfv5QPHN!@R07DTIF_5^X}U|Ma+g^ z+ht&OQ9aK6Uo<*xIAe3Ad2s3kC6SDMn`0N1MpZ}rR=9JJa_;sj8o}#uj#^@!(*?Vl zOM|Z2Yl;W|@L`S}1LaMZ7Y69#lrmVTdRJ*+3rQ^)okjpvB3Npt+}Tty;rG@%za#3K zQId^*?l5RY#Ct@|+|C>hmRylM&eAVy-qHc=o2Q>$soCfAT_WvzppcUw8p|G zQ6xkCwcPx5e!IuBnEE42;i*%aHw(+vt%KS85EpXou8+_lPd$wDPzp|4RJZ7r_~)e# z6wPzk`@Vt@0vBFy@$XPSA4u^BaNAqwDKpA*H9XW4=QkrZbt&iYQa_%PUWo-eT-uC%Ki#DIs&-$!clq`xU^*w@;1JTY z_RWklb8fQ0w1{R|)WGLKD+#x#pL_+V3(`bC8K!lLS8UIkxxi+xmtplXqVYs>)jt(aQIfLqNKT*A= zRuy4q9YiLTvSt#^c-1B*jo^rUFk=uQ{u5roMNn!0pAtJ(&^^neS!}IYJ!an*WLK)#jK~ z4xKrQY()mHWe=p|g|()3ncaVB_+u8ts4BRt>{;|Vh#I|@2rcG=;CErKQv6%|N;tz+ zeVMCxf{(RJhS}|fj1=Oh_~OCS*Sn#J>7SFJXAwTnD^2jN>ys@JkS5EcbWRF!wO?PP zYxA?YqwU|yu3+_NEvOe6&d)`8*mDqOf=4;ti&z@BL|G>!$Tu*8)y)fmbl5$G`fecg zT)1-$Xo!i&5P8rier*U*5D>m+yWm__L9DTHC!5rIbhSi4X@OIekm(A!&!Q(8`X{&U zsoIn}eyPz)ECFUFgFT4`)f4P+A!W@r%;&Ov{m9nz^i^^3lHs@3>J_`p7LiWZj~dH_ zo~g5FApHi}LlqzUoiBN^uAW*;j8|sF-Elq;e}BXsYfrwdR0RXjxMK;MFlvuOoJlW9s*leduy{cf3>HL$Nm%wlaR z+~n2Vhi|KWEe5ei;JsRmuqVTa>nP-j7MB zFy-f;>MUq^Z#*~PJ~Zf%Qc|!m8jIiAHnvGPs!R2)0`uZ1Kk`5695ZBx6bG58&`7#( z%awwCgZT0L4T8053RPz#&j!rmA~BlX)j5aJELKfXv?X_SCEeYL0NmrRJ6|={!ADwp zlECbsQ;3+i{U>kb*S}xqRm@N0W(Ye^&~4&)ryTbcyvHqI1rTv@3tK{>fHm3dn3iLq z2Q5|343;1>S`wDWKWA(SplTtedYsDSLdt>J$0=>r>$IIsc8k~kEW^@pTxT=d9w9MAZ0(9X#!>0i z?@0o&NJ6^IXU;o`P2~at(^reusiEkBbdOtY5xTRsuPb&d6MHq?_X#LMYFyImKfRk=Bj%}fG0!E@=fwDDjR{B?SMaWI~@#5Hj z?}qSEz19pU>54ZlcIlv|vT72Mg!^o=CAyS3HLgHVdmc{-`0*kCCTyhS3m`A=PwFL1 z<=lXa`Mx^}|2IUN6if`dJgwXeii`*g;tMT|4z!zI%S2SwE zWjR_LNvE(cZFq{rC0HuR-N!1zU_+2FSvOm`$toE(Q9?0_uu>cP*r>W;Ei#e6H6a_98uAqO)b|S!e{YXfF5|{ zQYH~Px;#hp_qCp<-*ie%k0DVWTSo|bB3s5zCGurlhV4Cy*51ndo#n=&uf*fm0=_+X z3Nt&f8f3HtMId*0v;E~;Hf8V>A0}SYrmX>wW@Lvjk0k7qv8Eva3rn(jPews`>v?sJ zcc0e4&MNe3QZG+!%y2%68VV{4j$(Yp)1D#CR!V&{(1-Z|HoSbG@3!Rh z{kmPEG+iCi3r0iSlUmbN;7Na1E8&7o;&>JMrFW6K9(JHOzwn{=3Q@YjIPvwa-hYpI zUFYX@jw_s;R!uP_wcBPn{J2%^eUNN3F@3dfwK;F;3a1U~NSpe~{Y@$E>)uGV&de{H z=#;U(u}iI;PeP6)sZNAMii3dE-Mbby?>qwJeu-gEzxc&9tLR~xr8_wW#Pw}(s>in5 zmdN`@1JT0XYu&Yjxz)^>cgFeKs?772$CeI1=VA1>o{$)xmkV$(rboFM}U<2HAS`9M-Wufn|2>jlNLw6y7cgD@N=$La3}PQWf1Z1P-Dn_AWw(gL}! zsTaZ;(2f^jfh6|8ZFfj8Hzz^}%?1;z{PvrEPD0(w)3}310DBhm|vGyA-;8 zuWM;_gb{Edcq12dv_wtcUc@N_J{%W$EY#B$=H9!REsoP({#d-NLQI*c;xR%Tg$U7e z5OiOu{w(P(7si1Z61$4LZkpRR_`cQ))No^5Fc+qK^;CU*`$p`5)NkWAZR`pHObX|G zcFikKNn;dfs#a2gg9tquanIk@5vp+`*{41+^Xrj~36pmf6T2&h-u*FDxJ4{p|+#>&yGbK(wQO%Y(7nWMhquAVIi&F z_eKF{^MAr7f~bjGZ6W#ypuD`yLmkWH#LxabRJ=kER4EUd+(IYSwm_m~!s%Lb(QWQp z@6(ct;tfj6DT)vy4P^Q9(zExz3tstZ2H$vWgv@Sa5E-C&1za9DdmfuiiSei$?8TvF zqn$(cBu1+jmB%z8zRdK*uj}WB$@rZoepZ7)##kh@_0J{ ztv5$tg-k>BZkbFDdP)S#k&HoQ0ROsEmY1x8S2iBdD%4_QUG2s!GOc8GtCMiPF{k61 zq<>LXymVTsd?+1#T0Af&EVHdTY~nJ{*t+TpFv3(g)y;u;z!vr8#&DCL&dX8S z!1qUMvfl!aXnfln8F&5GT>3%2&lCriliySh`hw)a!lS1o_;O?VT%MkKB}ulhu_~g8 zEjgd!kB1l~;3b`_). Supported values are: + +* ``picoprobe`` +* ``cmsis-dap`` +* ``jlink`` +* ``raspberrypi-swd`` + +These values can also be used in ``upload_protocol`` if you want PlatformIO to upload the regular firmware through this method, which you likely want. + +Especially the PicoProbe method is convenient when you have two Raspberry Pi Pico boards. One of them can be flashed with the PicoProbe firmware (`documentation `_) and is then connected to the target Raspberry Pi Pico board (see `documentation `_ chapter "Picoprobe Wiring"). Remember that on Windows, you have to use `Zadig `_ to also load "WinUSB" drivers for the "Picoprobe (Interface 2)" device so that OpenOCD can speak to it. + +With that set up, debugging works nicely: Setup breakpoints, inspect the value of variables in the code, step through the code line by line. When a breakpoint is hit or execution is halted, you can even see the execution state both Cortex-M0+ cores of the RP2040. + +.. image:: images/pio_debugging.png + +For further information on customizing debug options, like the initial breakpoint or debugging / SWD speed, consult `the documentation `_. \ No newline at end of file From 50334ad9fec6af772e63f3967d4d111f42e468d3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 02:43:10 +0200 Subject: [PATCH 08/11] Add docs on filesystem, minor corrections --- docs/images/pio_fs_upload.png | Bin 0 -> 16945 bytes docs/platformio.rst | 26 +++++++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 docs/images/pio_fs_upload.png diff --git a/docs/images/pio_fs_upload.png b/docs/images/pio_fs_upload.png new file mode 100644 index 0000000000000000000000000000000000000000..f70bef0d595dc8bbc3814d49ffa6de50bc26903e GIT binary patch literal 16945 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 literal 0 HcmV?d00001 diff --git a/docs/platformio.rst b/docs/platformio.rst index 0a72470e5..2d06fcb5f 100644 --- a/docs/platformio.rst +++ b/docs/platformio.rst @@ -38,8 +38,7 @@ This will give you a project with the ``platformio.ini`` board = pico framework = arduino -Here, you need to change the `platform` to take advantage of the features described hereunder. -You *also* need to inject two PlatformIO packages, one for the compiler toolchain and one for the Arduino core package. +Here, you need to change the `platform` to take advantage of the features described hereunder and switch to the new core. .. code:: ini @@ -47,7 +46,7 @@ You *also* need to inject two PlatformIO packages, one for the compiler toolchai platform = https://github.com/maxgerhardt/platform-raspberrypi.git board = pico framework = arduino - + board_build.core = earlephilhower When the support for this core has been merged into mainline PlatformIO, this notice will be removed and a standard `platformio.ini` as shown above will work as a base. @@ -255,8 +254,25 @@ These values can also be used in ``upload_protocol`` if you want PlatformIO to u Especially the PicoProbe method is convenient when you have two Raspberry Pi Pico boards. One of them can be flashed with the PicoProbe firmware (`documentation `_) and is then connected to the target Raspberry Pi Pico board (see `documentation `_ chapter "Picoprobe Wiring"). Remember that on Windows, you have to use `Zadig `_ to also load "WinUSB" drivers for the "Picoprobe (Interface 2)" device so that OpenOCD can speak to it. -With that set up, debugging works nicely: Setup breakpoints, inspect the value of variables in the code, step through the code line by line. When a breakpoint is hit or execution is halted, you can even see the execution state both Cortex-M0+ cores of the RP2040. +With that set up, debugging can be started via the left debugging sidebar and works nicely: Setup breakpoints, inspect the value of variables in the code, step through the code line by line. When a breakpoint is hit or execution is halted, you can even see the execution state both Cortex-M0+ cores of the RP2040. .. image:: images/pio_debugging.png -For further information on customizing debug options, like the initial breakpoint or debugging / SWD speed, consult `the documentation `_. \ No newline at end of file +For further information on customizing debug options, like the initial breakpoint or debugging / SWD speed, consult `the documentation `_. + +Filesystem Uploading +-------------------- + +For the Arduino IDE, `a plugin `_ is available that enables a data folder to be packed as a LittleFS filesystem binary and uploaded to the Pico. + +This functionality is also built-in in the PlatformIO integration. Open the `project tasks `_ and expand the "Platform" tasks: + +.. image:: images/pio_fs_upload.png + +The files you want to upload should be placed in a folder called ``data`` inside the project. This can be customized `if needed `_. + +The task "Build Filesystem Image" will take all files in the data directory and create a ``littlefs.bin`` file from it using the ``mklittlefs`` tool. + +The task "Upload Filesystem Image" will upload the filesystem image to the Pico via the specified ``upload_protocol``. + +**Note:** Currently only the default ``picotool`` (regular direct USB upload) and the OpenOCD-based debug methods (meaning all but ``jlink``) can transport the filesystem to the Pico. \ No newline at end of file From 9b1458fcfa7a5a8bb355b1b6d265d919d60d2c3f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 02:47:51 +0200 Subject: [PATCH 09/11] Use -iprefix in compilation, but still expose all include paths to IDE --- tools/platformio-build.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/tools/platformio-build.py b/tools/platformio-build.py index 70e7f0413..483ad91df 100755 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -27,7 +27,8 @@ FRAMEWORK_DIR = platform.get_package_dir("framework-arduinopico") assert os.path.isdir(FRAMEWORK_DIR) -# read includes from this file to add them into CPPPATH later +# read includes from this file to add them into CPPPATH later for good IDE intellisense +# will use original -iprefix @ for compilation though. includes_file = os.path.join(FRAMEWORK_DIR, "lib", "platform_inc.txt") file_lines = [] includes = [] @@ -38,10 +39,13 @@ # emulate -iprefix . path = os.path.join(FRAMEWORK_DIR, path) # prevent non-existent paths from being added - # looking at you here, pico-extras/src/common/pico_audio and co. if os.path.isdir(path): includes.append(path) +def is_pio_build(): + from SCons.Script import COMMAND_LINE_TARGETS + return "idedata" not in COMMAND_LINE_TARGETS and "_idedata" not in COMMAND_LINE_TARGETS + # update progsize expression to also check for bootloader. env.Replace( SIZEPROGREGEXP=r"^(?:\.boot2|\.text|\.data|\.rodata|\.text.align|\.ARM.exidx)\s+(\d+).*" @@ -57,11 +61,8 @@ "-mcpu=cortex-m0plus", "-mthumb", "-ffunction-sections", - "-fdata-sections", - # use explicit include (-I) paths, otherwise it's - # not visible in the IDE's intellisense. - #"-iprefix" + os.path.join(FRAMEWORK_DIR), - #"@%s" % os.path.join(FRAMEWORK_DIR, "lib", "platform_inc.txt") + "-fdata-sections" + # -iprefix etc. added lader if in build mode ], CFLAGS=[ @@ -116,8 +117,16 @@ File(os.path.join(FRAMEWORK_DIR, "lib", "libpico.a")), "m", "c", "stdc++", "c"] ) -# expand with read includes -env.Append(CPPPATH=includes) + +# expand with read includes for IDE, but use -iprefix command for actual building +if not is_pio_build(): + env.Append(CPPPATH=includes) +else: + env.Append(CCFLAGS=[ + "-iprefix" + os.path.join(FRAMEWORK_DIR), + "@%s" % os.path.join(FRAMEWORK_DIR, "lib", "platform_inc.txt") + ]) + def configure_usb_flags(cpp_defines): global ram_size From ab0c01037f0697dc8f2ad7fba0879e854de06818 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 03:02:00 +0200 Subject: [PATCH 10/11] Add exception and RTTI support, document them --- docs/platformio.rst | 31 +++++++++++++++++++++++++++++++ tools/platformio-build.py | 32 +++++++++++++++++++++++++++++--- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/docs/platformio.rst b/docs/platformio.rst index 2d06fcb5f..e0d60ae77 100644 --- a/docs/platformio.rst +++ b/docs/platformio.rst @@ -177,6 +177,37 @@ either a sing line or a newline-separated expression. -DDEBUG_RP2040_CORE -DDEBUG_RP2040_PORT=Serial2 +C++ Exceptions +-------------- + +Exceptions are disabled by default. To enable them, use + +.. code:: ini + + ; Enable Exceptions + build_flags = -DPIO_FRAMEWORK_ARDUINO_ENABLE_EXCEPTIONS + +Stack Protector +--------------- + +To enable GCC's stack protection feature, use + +.. code:: ini + + ; Enable Stack Protector + build_flags = -fstack-protector + + +RTTI +---- + +RTTI (run-time type information) is disabled by default. To enable it, use + +.. code:: ini + + ; Enable RTTI + build_flags = -DPIO_FRAMEWORK_ARDUINO_ENABLE_RTTI + USB Stack --------- diff --git a/tools/platformio-build.py b/tools/platformio-build.py index 483ad91df..95f4f79af 100755 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -46,6 +46,34 @@ def is_pio_build(): from SCons.Script import COMMAND_LINE_TARGETS return "idedata" not in COMMAND_LINE_TARGETS and "_idedata" not in COMMAND_LINE_TARGETS +# get all activated macros +flatten_cppdefines = env.Flatten(env['CPPDEFINES']) + +# +# Exceptions +# +stdcpp_lib = None +if "PIO_FRAMEWORK_ARDUINO_ENABLE_EXCEPTIONS" in flatten_cppdefines: + env.Append( + CXXFLAGS=["-fexceptions"] + ) + stdcpp_lib = "stdc++-exc" +else: + env.Append( + CXXFLAGS=["-fno-exceptions"] + ) + stdcpp_lib = "stdc++" + +# +# RTTI +# +# standard is -fno-rtti flag. If special macro is present, don't +# add that flag. +if not "PIO_FRAMEWORK_ARDUINO_ENABLE_RTTI" in flatten_cppdefines: + env.Append( + CXXFLAGS=["-fno-rtti"] + ) + # update progsize expression to also check for bootloader. env.Replace( SIZEPROGREGEXP=r"^(?:\.boot2|\.text|\.data|\.rodata|\.text.align|\.ARM.exidx)\s+(\d+).*" @@ -71,8 +99,6 @@ def is_pio_build(): CXXFLAGS=[ "-std=gnu++17", - "-fno-exceptions", - "-fno-rtti", ], CPPDEFINES=[ @@ -115,7 +141,7 @@ def is_pio_build(): # link lib/libpico.a by full path, ignore libstdc++ LIBS=[ File(os.path.join(FRAMEWORK_DIR, "lib", "libpico.a")), - "m", "c", "stdc++", "c"] + "m", "c", stdcpp_lib, "c"] ) # expand with read includes for IDE, but use -iprefix command for actual building From c254c78536b33bb39d95520a4ff96a250a71e69f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Jun 2022 03:34:02 +0200 Subject: [PATCH 11/11] Fix typo --- docs/platformio.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/platformio.rst b/docs/platformio.rst index e0d60ae77..8ed294edf 100644 --- a/docs/platformio.rst +++ b/docs/platformio.rst @@ -50,7 +50,7 @@ Here, you need to change the `platform` to take advantage of the features descri When the support for this core has been merged into mainline PlatformIO, this notice will be removed and a standard `platformio.ini` as shown above will work as a base. -Deprectation warnings +Deprecation warnings --------------------- Previous versions of this documentation told users to inject the framework and toolchain package into the project by using